")
diff --git a/code/game/objects/items/weapons/chaplain_items.dm b/code/game/objects/items/weapons/chaplain_items.dm
index e057dc97fdf..45beb08b24b 100644
--- a/code/game/objects/items/weapons/chaplain_items.dm
+++ b/code/game/objects/items/weapons/chaplain_items.dm
@@ -231,15 +231,17 @@
return INITIALIZE_HINT_NORMAL
/obj/item/nullrod/clockworkstave
- name = "\improper clockwork stave"
- desc = "A long, wooden stave with a gear and triangle at the top, utilized by the clergy of the Trinary Perfection. The ornate pieces atop the stave are often delicately \
- hand-crafted by synthetics from the monastic Order of Pitters and exported off the planet of Axiom."
+ name = "\improper stave of ecclesiastical office"
+ desc = "A long brass stave used as the marker of the holder of some ecclesiastical \
+ office in the church of the Trinary Perfection. Priests, bishops, and government \
+ officials often bear such a staff; all faithful Trinarists ought listen when one \
+ holding it makes their voice heard."
icon = 'icons/obj/trinary_stave.dmi'
icon_state = "trinary_stave"
item_state = "trinary_stave"
contained_sprite = TRUE
-
w_class = WEIGHT_CLASS_BULKY
+ slot_flags = SLOT_BACK
/obj/item/nullrod/verb/change(mob/living/user)
set name = "Reassemble Null Item"
diff --git a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm
index b2b709cb516..2dc3833d8ef 100644
--- a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm
+++ b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm
@@ -25,6 +25,12 @@
console_networks = list("MINE")
req_access = list()
+/obj/item/circuitboard/security/public
+ name = T_BOARD("public camera monitor")
+ build_path = /obj/structure/machinery/computer/security/terminal/public
+ console_networks = list(NETWORK_EXPEDITION, NETWORK_NEWS)
+ req_access = list()
+
/obj/item/circuitboard/security/construct(var/obj/structure/machinery/computer/security/C)
if (..(C))
C.console_networks = console_networks.Copy()
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/miscboards.dm b/code/game/objects/items/weapons/circuitboards/machinery/miscboards.dm
index 3312c4def6d..fc7101c306f 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/miscboards.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/miscboards.dm
@@ -143,11 +143,23 @@
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 3)
board_type = BOARD_MACHINE
req_components = list(
- "/obj/item/stock_parts/capacitor" = 2,
+ "/obj/item/stock_parts/capacitor" = 3,
"/obj/item/stock_parts/micro_laser" = 1,
"/obj/item/stack/cable_coil" = 5
)
+/obj/item/circuitboard/microwave
+ name = T_BOARD("microwave")
+ desc = "The circuitboard for a microwave."
+ build_path = /obj/structure/machinery/appliance/cooker/microwave
+ origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 3)
+ board_type = BOARD_MACHINE
+ req_components = list(
+ "/obj/item/stock_parts/capacitor" = 3,
+ "/obj/item/stock_parts/scanning_module" = 1,
+ "/obj/item/stack/cable_coil" = 5
+ )
+
/obj/item/circuitboard/candymachine
name = T_BOARD("candy machine")
desc = "The circuitboard for a candy machine."
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm
index 807fbca38ae..c0318d94ba6 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm
@@ -51,32 +51,29 @@
/obj/item/circuitboard/protolathe
name = T_BOARD("protolathe")
- build_path = /obj/structure/machinery/r_n_d/protolathe
+ build_path = /obj/structure/machinery/r_n_d/fabricator/protolathe
board_type = BOARD_MACHINE
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
- "/obj/item/stock_parts/matter_bin" = 2,
"/obj/item/stock_parts/manipulator" = 2,
"/obj/item/reagent_containers/glass/beaker" = 2)
/obj/item/circuitboard/circuit_imprinter
name = T_BOARD("circuit imprinter")
- build_path = /obj/structure/machinery/r_n_d/circuit_imprinter
+ build_path = /obj/structure/machinery/r_n_d/fabricator/circuit_imprinter
board_type = BOARD_MACHINE
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
- "/obj/item/stock_parts/matter_bin" = 1,
"/obj/item/stock_parts/manipulator" = 1,
"/obj/item/reagent_containers/glass/beaker" = 2)
/obj/item/circuitboard/mechfab
name = T_BOARD("mechatronic fabricator")
- build_path = /obj/structure/machinery/mecha_part_fabricator
+ build_path = /obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator
board_type = BOARD_MACHINE
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
req_components = list(
- "/obj/item/stock_parts/matter_bin" = 2,
"/obj/item/stock_parts/manipulator" = 1,
"/obj/item/stock_parts/micro_laser" = 1,
"/obj/item/stock_parts/console_screen" = 1)
@@ -91,11 +88,3 @@
"/obj/item/stock_parts/capacitor" = 1,
"/obj/item/stack/cable_coil" = 1,
"/obj/item/stock_parts/console_screen" = 1)
-
-/obj/item/circuitboard/ntnet_relay
- name = T_BOARD("NTNet Quantum Relay")
- build_path = /obj/structure/machinery/ntnet_relay
- board_type = BOARD_MACHINE
- origin_tech = list(TECH_DATA = 4)
- req_components = list(
- "/obj/item/stack/cable_coil" = 15)
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
index 5dda80c7571..af1cce8d2c4 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
@@ -60,3 +60,18 @@
"/obj/item/stock_parts/subspace/filter" = 1,
"/obj/item/stock_parts/subspace/crystal" = 1,
"/obj/item/stock_parts/micro_laser/high" = 2)
+
+/obj/item/circuitboard/ntnet_relay
+ name = T_BOARD("NTNet Bluespace Relay")
+ build_path = /obj/structure/machinery/ntnet_relay
+ board_type = BOARD_MACHINE
+ origin_tech = list(TECH_DATA = 4)
+ req_components = list(
+ "/obj/item/stack/cable_coil" = 15,
+ "/obj/item/stock_parts/subspace/filter" = 1,
+ "/obj/item/stock_parts/subspace/crystal" = 1,
+ "/obj/item/stock_parts/micro_laser/high" = 2)
+
+/obj/item/circuitboard/ntnet_relay/field
+ name = T_BOARD("NTNet Field Relay")
+ build_path = /obj/structure/machinery/ntnet_relay/field
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index 8d0196ce998..7ccf1b2384b 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -48,7 +48,6 @@
/obj/item/plastique/Destroy()
qdel(wires)
wires = null
- qdel(target)
target = null
return ..()
@@ -195,11 +194,40 @@
desc = "A small explosive laced with radium. The explosion is small, but the radioactive material will remain for a fair while."
timer = 30 SECONDS
-/obj/item/plastique/dirty/explode(turf/location)
+/obj/item/plastique/dirty/explode(turf/location) //Does not call parent because we need a different order of operations.
+ if(!target)
+ target = get_atom_on_turf(src)
+ if(!target)
+ target = src
+ if(target)
+ if (istype(target, /turf/simulated/wall))
+ var/turf/simulated/wall/W = target
+ W.dismantle_wall(1, no_product = TRUE)
+ else if(istype(target, /mob/living))
+ target.ex_act(2) // c4 can't gib mobs anymore.
+ target.rad_act(800) //A dirty bomb going off on top of you completely irradiates you, radsuit or not.
+ else
+ target.ex_act(1)
+
if(location)
- SSradiation.radiate(src, 250)
- new /obj/effect/decal/cleanable/greenglow/radioactive/medium(get_turf(src))
- ..()
+ explosion(location, devastation_range, heavy_impact_range, light_impact_range, 3, spreading = 0)
+ SSradiation.radiate(location, 250)
+ new /obj/effect/decal/cleanable/greenglow/radioactive/extreme(location)
+
+ for(var/turf/T in RANGE_TURFS(4, location))
+ if(T == location)
+ continue
+
+ if(T in RANGE_TURFS(1, location)) //High radioactive puddles 1 tile from the epicenter, medium up to 4 tiles away.
+ if(prob(75))
+ new /obj/effect/decal/cleanable/greenglow/radioactive/high(T)
+ else if(prob(25))
+ new /obj/effect/decal/cleanable/greenglow/radioactive/medium(T)
+
+ var/obj/effect/plastic_explosive/effect = locate(/obj/effect/plastic_explosive) in get_turf(src)
+ if(effect)
+ qdel(effect)
+ qdel(src)
/obj/item/plastique/strong
name = "bundled plastic explosives"
diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm
index 92343121903..110f249c99d 100644
--- a/code/game/objects/items/weapons/grenades/grenade.dm
+++ b/code/game/objects/items/weapons/grenades/grenade.dm
@@ -12,6 +12,7 @@
throw_speed = 4
throw_range = 20
obj_flags = OBJ_FLAG_CONDUCTABLE
+ pass_flags_self = PASSTABLE | PASSRAILING
slot_flags = SLOT_BELT
contained_sprite = 1
var/active = 0
diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm
index 4c95ad585cf..6c13bd01f62 100644
--- a/code/game/objects/items/weapons/material/ashtray.dm
+++ b/code/game/objects/items/weapons/material/ashtray.dm
@@ -30,6 +30,7 @@
if(content["material"])
set_material(content["material"])
max_butts = round(material.hardness/10)
+ update_icon()
var/fill_count = content["fill_count"]
if(fill_count)
if(fill_count > max_butts)
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index 07eb16c4ff0..69bc82c808c 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -39,6 +39,13 @@
* If the object may be accessed while equipped anywhere on a character, including hands.
*/
var/equip_access = TRUE
+ /**
+ * If the object should have a delay to open, for more cumbersome bags such as duffels.
+ * If set to zero seconds, no delay is applied. Define a value in seconds if a delay
+ * should be applied and the delay will be equal to the value of this variable.
+ * Only applies while on a character mob, not while the bag is on the floor.
+ */
+ var/access_delay = 0 SECONDS
/obj/item/storage/backpack/antagonist_hints(mob/user, distance, is_adjacent)
. += ..()
@@ -144,6 +151,8 @@
/obj/item/storage/backpack/open(mob/user)
if (!worn_check())
return
+ if(access_delay && !isturf(loc) && !do_after(user, access_delay))
+ return
..()
/obj/item/storage/backpack/proc/worn_check(no_message = FALSE)
@@ -153,7 +162,7 @@
return TRUE //not equipped
if(!worn_access && (slot_flags & SLOT_BACK) && M.get_equipped_item(slot_back) == src)
if(!no_message)
- to_chat(M, SPAN_WARNING("Your arms are not long enough to open \the [src] while it is on your back!"))
+ to_chat(M, SPAN_WARNING("You cannot access the contents of \the [src] while it is on your back!"))
if(use_sound)
playsound(loc, use_sound, 50, 1, -5)
if(animated)
@@ -161,7 +170,7 @@
return FALSE
if(!equip_access && (ismob(loc)))
if(!no_message)
- to_chat(M, SPAN_WARNING("\The [src] is too cumbersome to handle, you're going to have to set it down somewhere!"))
+ to_chat(M, SPAN_WARNING("\The [src] is too cumbersome to access in your hands, you're going to have to set it down somewhere!"))
if(use_sound)
playsound(loc, use_sound, 50, 1, -5)
if(animated)
@@ -630,10 +639,16 @@
icon_state = "duffel"
item_state = "duffel"
worn_access = FALSE
- equip_access = FALSE
+ access_delay = 1 SECOND
max_storage_space = DEFAULT_DUFFELBAG_STORAGE
straps = TRUE
+/obj/item/storage/backpack/duffel/mechanics_hints(mob/user, distance, is_adjacent)
+ . += ..()
+ . += "Duffel bags store a greater capacity than any other kind of backpack or satchel."
+ . += "Duffel bags cannot be accessed while on a character's back, but can be accessed while in their hand or on the floor."
+ . += "Duffel bags are laborious to use! There is a short delay on accessing them while in your hands."
+
/obj/item/storage/backpack/duffel/cap
name = "captain's duffel bag"
desc = "A rare and special duffel bag for only the most air-headed of SCC personnel."
@@ -696,7 +711,6 @@
icon_state = "duffel-syndie"
item_state = "duffel-syndie"
worn_access = TRUE
- equip_access = TRUE
empty_delay = 0.8 SECOND
/obj/item/storage/backpack/duffel/cmo
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 9ab3174d76d..cd7812e9d9e 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -574,7 +574,7 @@
var/open = 0 // Is the box open?
var/ismessy = 0 // Fancy mess on the lid
- var/obj/item/reagent_containers/food/snacks/sliceable/pizza/pizza // Content pizza
+ var/obj/item/reagent_containers/food/snacks/pizza // Content pizza
var/pizza_type
var/list/boxes = list() // If the boxes are stacked, they come here
var/boxtag = ""
@@ -699,7 +699,7 @@
return
- if(istype(attacking_item, /obj/item/reagent_containers/food/snacks/sliceable/pizza/)) // Long ass fucking object name
+ if(istype(attacking_item, /obj/item/reagent_containers/food/snacks/sliceable/pizza/) || istype(attacking_item, /obj/item/reagent_containers/food/snacks/variable/pizza)) // Long ass fucking object name
if(src.open)
user.drop_from_inventory(attacking_item, src)
diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm
index 784d839b6c9..093860682c9 100644
--- a/code/game/objects/items/weapons/surgery_tools.dm
+++ b/code/game/objects/items/weapons/surgery_tools.dm
@@ -336,6 +336,8 @@
/obj/item/storage/box/fancy/tray/machinist
name = "machinist operation tray"
desc = "A tray of various tools for use by machinists in repairing robots."
+ // So additional tools can be added.
+ max_storage_space = 23
can_hold = list(
/obj/item/surgery/cautery,
/obj/item/surgery/circular_saw,
diff --git a/code/game/objects/items/weapons/traps.dm b/code/game/objects/items/weapons/traps.dm
index b3dd06f692b..59c18045ace 100644
--- a/code/game/objects/items/weapons/traps.dm
+++ b/code/game/objects/items/weapons/traps.dm
@@ -524,6 +524,7 @@
unbuckle()
return
+ capturing_mob.captured = TRUE
captured = WEAKREF(capturing_mob)
playsound(src, 'sound/weapons/beartrap_shut.ogg', 100, 1)
@@ -674,10 +675,10 @@
if(captured_mob)
captured_mob.bullet_act(arglist(args))
-/obj/item/trap/animal/proc/release(var/mob/user, var/turf/target)
+/obj/item/trap/animal/proc/release(var/mob/user, var/turf/target, var/transferring = FALSE)
if(!target)
target = src.loc
- if(user)
+ if(user && !transferring)
visible_message(SPAN_NOTICE("[user] opens \the [src]."))
var/mob/captured_mob = captured ? captured.resolve() : null
@@ -690,10 +691,12 @@
var/mob/living/living_mob = captured_mob
msg = SPAN_WARNING("[living_mob] runs out of \the [src].")
+ captured_mob.captured = FALSE
unbuckle()
captured = null
- visible_message(msg)
- shake_animation()
+ if(!transferring)
+ visible_message(msg)
+ shake_animation()
update_icon()
layer = initial(layer)
@@ -779,6 +782,17 @@
if(.)
sync_captured_mob()
+/obj/item/trap/animal/post_buckle(atom/movable/MA)
+ if(MA == buckled || !isliving(MA))
+ return
+
+ var/mob/living/released_mob = MA
+ released_mob.captured = FALSE
+ if(captured?.resolve() == released_mob)
+ captured = null
+ layer = initial(layer)
+ update_icon()
+
/obj/item/trap/animal/attack_hand(mob/user)
if(user.loc == src || captured)
return
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 72732f681f5..32ae8262155 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -106,6 +106,10 @@
var/persistent_objects_author_ckey = null
// Expiration time used when saving/updating a persistent type, this can be changed depending on the use case by assigning a new value
var/persistent_objects_expiration_time_days = PERSISTENT_DEFAULT_EXPIRATION_DAYS
+ // Database timestamp when the tracked object was created
+ var/persistent_objects_created_at = null
+ // Database timestamp when the tracked object will expire
+ var/persistent_objects_expires_at = null
/* END PERSISTENCE VARS */
/// for easy reference of talking atoms
@@ -258,7 +262,10 @@
return
/mob/proc/unset_machine()
+ var/was_viewing_machine_remote_view = is_viewing_camera() || is_viewing_overmap()
src.machine = null
+ if(was_viewing_machine_remote_view)
+ reset_view(null)
/mob/proc/set_machine(var/obj/O)
if(src.machine)
diff --git a/code/game/objects/random/food.dm b/code/game/objects/random/food.dm
index 0aaf247149e..2150e7136ce 100644
--- a/code/game/objects/random/food.dm
+++ b/code/game/objects/random/food.dm
@@ -255,20 +255,6 @@
/obj/item/pizzabox/pepperoni,
)
-//Sometimes the chef will have spare oil in storage.
-//Sometimes they wont, and will need to order it from cargo
-//Variety is the spice of life!
-/obj/random/cookingoil
- name = "random cooking oil"
- desc = "Has a 50% chance of spawning a tank of cooking oil, otherwise nothing."
- icon = 'icons/obj/reagent_dispensers.dmi'
- icon_state = "oiltank"
- spawn_nothing_percentage = 50
-
- spawnlist = list(
- /obj/structure/reagent_dispensers/cookingoil
- )
-
/obj/random/chocolate
name = "random chocolate"
desc = "This is a random chocolate."
@@ -287,3 +273,13 @@
/obj/item/reagent_containers/food/snacks/chocolate_bar/laughterbar = 1,
/obj/item/storage/box/fancy/readies
)
+
+/obj/random/cookingoil
+ name = "random cooking oil"
+ desc = "Has a 50% chance of spawning a tank of cooking oil, otherwise nothing."
+ icon = 'icons/obj/reagent_dispensers.dmi'
+ icon_state = "oiltank"
+ spawn_nothing_percentage = 50
+ spawnlist = list(
+ /obj/structure/reagent_dispensers/cookingoil
+ )
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 7aa7cff3b68..cedc02ef270 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -120,10 +120,11 @@
if(. != BULLET_ACT_HIT)
return .
- if(hitting_projectile.get_structure_damage() > 5)
+ var/structure_damage = hitting_projectile.get_structure_damage()
+ if(structure_damage > 5)
bullet_ping(hitting_projectile)
- add_damage(hitting_projectile.damage, hitting_projectile.damage_flags(), hitting_projectile.damage_type, hitting_projectile.armor_penetration, hitting_projectile)
+ add_damage(structure_damage, hitting_projectile.damage_flags(), hitting_projectile.damage_type, hitting_projectile.armor_penetration, hitting_projectile)
/obj/structure/proc/climb_on()
diff --git a/code/game/objects/structures/_machinery.dm b/code/game/objects/structures/_machinery.dm
index 5b46b762635..fe4efc876cc 100644
--- a/code/game/objects/structures/_machinery.dm
+++ b/code/game/objects/structures/_machinery.dm
@@ -370,6 +370,9 @@ Class Procs:
attack_hand(user)
/obj/structure/machinery/attackby(obj/item/attacking_item, mob/user)
+ if(default_part_replacement(user, attacking_item))
+ return TRUE
+
if(obj_flags & OBJ_FLAG_SIGNALER)
if(issignaler(attacking_item))
if(signaler)
@@ -488,23 +491,43 @@ Class Procs:
update_icon()
return TRUE
+/obj/structure/machinery/proc/get_part_replacement_type(obj/item/part)
+ var/obj/item/circuitboard/board = locate(/obj/item/circuitboard) in component_parts
+ var/replacement_type
+
+ if(board?.req_components)
+ for(var/component_type in board.req_components)
+ var/board_part_type = ispath(component_type) ? component_type : text2path(component_type)
+ if(!ispath(board_part_type, /obj/item/stock_parts) && !ispath(board_part_type, /obj/item/reagent_containers/glass))
+ continue
+ if(istype(part, board_part_type) && (!replacement_type || ispath(board_part_type, replacement_type)))
+ replacement_type = board_part_type
+
+ if(replacement_type)
+ return replacement_type
+
+ for(var/component_type in component_types)
+ var/component_part_type = ispath(component_type) ? component_type : text2path(component_type)
+ if(!ispath(component_part_type, /obj/item/stock_parts) && !ispath(component_part_type, /obj/item/reagent_containers/glass))
+ continue
+ if(istype(part, component_part_type) && (!replacement_type || ispath(component_part_type, replacement_type)))
+ replacement_type = component_part_type
+
+ return replacement_type
+
/obj/structure/machinery/proc/default_part_replacement(var/mob/user, var/obj/item/storage/part_replacer/R)
if(!LAZYLEN(component_parts))
return FALSE
else if(istype(R))
var/parts_replaced = FALSE
if(panel_open)
- var/obj/item/circuitboard/CB = locate(/obj/item/circuitboard) in component_parts
- var/P
for(var/obj/item/reagent_containers/glass/G in component_parts)
- for(var/D in CB.req_components)
- var/T = text2path(D)
- if(ispath(G.type, T))
- P = T
- break
+ var/replacement_type = get_part_replacement_type(G)
+ if(!replacement_type)
+ continue
for(var/obj/item/reagent_containers/glass/B in R.contents)
if(B.reagents && B.reagents.total_volume > 0) continue
- if(istype(B, P) && istype(G, P))
+ if(istype(B, replacement_type))
if(B.volume > G.volume)
R.remove_from_storage(B, src)
R.handle_item_insertion(G, 1)
@@ -512,15 +535,14 @@ Class Procs:
component_parts += B
B.forceMove(src)
to_chat(user, SPAN_NOTICE("[G.name] replaced with [B.name]."))
+ parts_replaced = TRUE
break
for(var/obj/item/stock_parts/A in component_parts)
- for(var/D in CB.req_components)
- var/T = text2path(D)
- if(ispath(A.type, T))
- P = T
- break
+ var/replacement_type = get_part_replacement_type(A)
+ if(!replacement_type)
+ continue
for(var/obj/item/stock_parts/B in R.contents)
- if(istype(B, P) && istype(A, P))
+ if(istype(B, replacement_type))
if(B.rating > A.rating)
R.remove_from_storage(B, src)
R.handle_item_insertion(A, 1)
@@ -530,9 +552,9 @@ Class Procs:
to_chat(user, SPAN_NOTICE("[A.name] replaced with [B.name]."))
parts_replaced = TRUE
break
- RefreshParts()
- update_icon()
- if(parts_replaced) //only play sound when RPED actually replaces parts
+ if(parts_replaced)
+ RefreshParts()
+ update_icon()
playsound(src, 'sound/items/rped.ogg', 40, TRUE)
return TRUE
else
diff --git a/code/game/objects/structures/barricades/_barricade.dm b/code/game/objects/structures/barricades/_barricade.dm
index da34d5d05e3..dc0ce7760eb 100644
--- a/code/game/objects/structures/barricades/_barricade.dm
+++ b/code/game/objects/structures/barricades/_barricade.dm
@@ -5,6 +5,7 @@
density = TRUE
atom_flags = ATOM_FLAG_CHECKS_BORDER
maxhealth = OBJECT_HEALTH_LOW
+ pass_flags_self = LETPASSTHROW
/// The type of stack the barricade dropped when disassembled if any.
var/stack_type
/// The amount of stack dropped when disassembled at full health
@@ -83,11 +84,11 @@
AddOverlays(image('icons/obj/barricades.dmi', icon_state = "[src.barricade_type]_closed_wire"))
..()
-
-/obj/structure/barricade/proc/handle_barrier_chance()
+///Rolls a chance based on the percentage of the barricade's health remaining. Returns TRUE if the chance succeeds, FALSE if it fails. The chance is divided by the optional chance_divisor parameter, which defaults to 1.
+/obj/structure/barricade/proc/handle_barrier_chance(chance_divisor = 1)
if(!anchored)
return FALSE
- return prob(max(30,(100.0*health)/maxhealth))
+ return prob(max(30,(100.0*health)/maxhealth) / chance_divisor)
/obj/structure/barricade/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(mover?.movement_type & PHASING)
@@ -97,6 +98,16 @@
if(istype(mover, /obj/projectile))
return (check_cover(mover,target))
if (get_dir(loc, target) == dir)
+ if(mover.throwing)
+ var/chance = (handle_barrier_chance(3))
+ if(chance)
+ visible_message(SPAN_WARNING("\The [mover] clips the top of \the [src] and bounces off!"))
+ if(barricade_hitsound)
+ playsound(src, barricade_hitsound, 20, 1)
+ return !density
+ else
+ visible_message(SPAN_WARNING("\The [mover] sails over \the [src]!"))
+ return TRUE
return !density
else
return TRUE
@@ -211,8 +222,6 @@
return .
bullet_ping(hitting_projectile)
- var/damage_to_take = hitting_projectile.damage * hitting_projectile.anti_materiel_potential
- add_damage(damage_to_take, hitting_projectile.damage_flags(), hitting_projectile.damtype, hitting_projectile.armor_penetration, hitting_projectile)
/obj/structure/barricade/proc/barricade_deconstruct(deconstruct)
if(deconstruct && is_wired)
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 22bd7e30f9b..ef48ff15cba 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -357,8 +357,6 @@
for(var/mob/living/L in contents)
hitting_projectile.Impact(L)
- damage(proj_damage)
-
/obj/structure/closet/attackby(obj/item/attacking_item, mob/user)
if(istype(attacking_item, /obj/item/closet_teleporter))
if(linked_teleporter)
diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm
index 7b34a5fb37b..03beb49995c 100644
--- a/code/game/objects/structures/crates_lockers/closets/statue.dm
+++ b/code/game/objects/structures/crates_lockers/closets/statue.dm
@@ -126,7 +126,6 @@
if(. != BULLET_ACT_HIT)
return .
- health -= hitting_projectile.get_structure_damage()
check_health()
/obj/structure/closet/statue/attack_generic(mob/user, damage, attack_message, environment_smash, armor_penetration, attack_flags, damage_type)
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 36527a0b07b..098a0d52a35 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -797,3 +797,8 @@
new /obj/item/storage/box/unique/tea/messa(src)
new /obj/item/reagent_containers/toothpaste(src)
new /obj/item/reagent_containers/food/drinks/flask/vacuumflask/mouthwash(src)
+
+/obj/structure/closet/crate/tool/machinist/fill()
+ new /obj/item/reagent_containers/weldpack(src)
+ new /obj/item/portable_whiteboard(src)
+ new /obj/item/paint_sprayer(src)
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index 99d0e7e286a..829cbfd591c 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -40,10 +40,6 @@
if(. != BULLET_ACT_HIT)
return .
- var/damage = hitting_projectile.damage
- if(damage)
- add_damage(damage)
-
/obj/structure/displaycase/on_death()
if(!destroyed)
density = FALSE
diff --git a/code/game/objects/structures/flags_banners.dm b/code/game/objects/structures/flags_banners.dm
index 4c963ee6dbb..84e94e51562 100644
--- a/code/game/objects/structures/flags_banners.dm
+++ b/code/game/objects/structures/flags_banners.dm
@@ -171,7 +171,12 @@
if(isfloor(user.loc))
user.visible_message(SPAN_NOTICE("\The [user] deploys \the [src] on \the [get_turf(loc)]."), SPAN_NOTICE("You deploy \the [src] on \the [get_turf(loc)]."))
user.drop_from_inventory(src)
- new flag_structure(user.loc, user.dir, deploy = TRUE, item_flag_path = flag_path)
+ var/obj/structure/sign/flag/F = new flag_structure(user.loc, user.dir, deploy = TRUE, item_flag_path = flag_path)
+ F.name = src.name
+ F.desc = src.desc
+ if(F.linked_flag)
+ F.linked_flag.name = src.name
+ F.linked_flag.desc = src.desc
qdel(src)
/obj/item/flag/afterattack(var/atom/A, var/mob/user, var/adjacent)
@@ -192,7 +197,12 @@
user.visible_message(SPAN_NOTICE("\The [user] fastens \the [src] to \the [A]."), SPAN_NOTICE("You fasten \the [src] to \the [A]."))
user.drop_from_inventory(src)
- new flag_structure(user.loc, placement_dir, deploy = TRUE, item_flag_path = flag_path)
+ var/obj/structure/sign/flag/F = new flag_structure(user.loc, user.dir, deploy = TRUE, item_flag_path = flag_path)
+ F.name = src.name
+ F.desc = src.desc
+ if(F.linked_flag)
+ F.linked_flag.name = src.name
+ F.linked_flag.desc = src.desc
qdel(src)
@@ -222,6 +232,8 @@
else
user.visible_message(SPAN_NOTICE("\The [user] unfastens \the [src] and folds it back up."), SPAN_NOTICE("You unfasten \the [src] and fold it back up."))
var/obj/item/flag/F = new flag_item(get_turf(user))
+ F.name = src.name
+ F.desc = src.desc
user.put_in_hands(F)
else
user.visible_message(SPAN_NOTICE("\The [user] unfastens the tattered remnants of \the [src]."), SPAN_NOTICE("You unfasten the tattered remains of \the [src]."))
@@ -3719,6 +3731,58 @@
/obj/structure/sign/flag/venus/large/west/Initialize(mapload)
. = ..(mapload, WEST)
+// Eris
+/obj/item/flag/eris
+ name = "\improper Erisian Banner"
+ desc = "The banner of the Sovereign Solarian Union of Eris and Dysnomia, a pair of distant dwarf worlds in the Sol System, dominated by the dual influence of the system’s largest communications array and the Solarian Navy."
+ desc_extended = "The banner of Eris and Dysnomia features a bicolor of white and purple, separated by a gold stripe, with a golden ring and diamond at its center. Four purple stars are arranged along the top, while four white stars line the bottom. \
+ The white field evokes the planetoid’s isolation beyond the Kuiper Belt, while the purple pays tribute to the Solarian Navy and its significant influence on Erisian history. The gold stripe represents the vital flow of interstellar communication that passes through Eris. At the center, the golden emblem symbolizes the unity of Eris and Dysnomia: the circle for Eris, the diamond for Dysnomia, and the surrounding ring for their shared infrastructure and mutual dependence. \
+ The eight stars represent the primary habitats across the Union, four in purple for those on Eris and Dysnomia themselves, and four in white for the orbital habitats positioned among their Lagrange points."
+ flag_path = "eris"
+ flag_structure = /obj/structure/sign/flag/eris
+
+/obj/structure/sign/flag/eris
+ name = "\improper Erisian Banner"
+ desc = "The banner of the Sovereign Solarian Union of Eris and Dysnomia, a pair of distant dwarf worlds in the Sol System, dominated by the dual influence of the system’s largest communications array and the Solarian Navy."
+ desc_extended = "The banner of Eris and Dysnomia features a bicolor of white and purple, separated by a gold stripe, with a golden ring and diamond at its center. Four purple stars are arranged along the top, while four white stars line the bottom. \
+ The white field evokes the planetoid’s isolation beyond the Kuiper Belt, while the purple pays tribute to the Solarian Navy and its significant influence on Erisian history. The gold stripe represents the vital flow of interstellar communication that passes through Eris. At the center, the golden emblem symbolizes the unity of Eris and Dysnomia: the circle for Eris, the diamond for Dysnomia, and the surrounding ring for their shared infrastructure and mutual dependence. \
+ The eight stars represent the primary habitats across the Union, four in purple for those on Eris and Dysnomia themselves, and four in white for the orbital habitats positioned among their Lagrange points."
+ flag_path = "eris"
+ icon_state = "eris"
+ flag_item = /obj/item/flag/eris
+
+/obj/item/flag/eris/l
+ name = "\improper Erisian Flag"
+ desc = "The flag of the Sovereign Solarian Union of Eris and Dysnomia, a pair of distant dwarf worlds in the Sol System, dominated by the dual influence of the system’s largest communications array and the Solarian Navy."
+ desc_extended = "The flag of Eris and Dysnomia features a bicolor of white and purple, separated by a gold stripe, with a golden ring and diamond at its center. Four purple stars are arranged along the top, while four white stars line the bottom. \
+ The white field evokes the planetoid’s isolation beyond the Kuiper Belt, while the purple pays tribute to the Solarian Navy and its significant influence on Erisian history. The gold stripe represents the vital flow of interstellar communication that passes through Eris. At the center, the golden emblem symbolizes the unity of Eris and Dysnomia: the circle for Eris, the diamond for Dysnomia, and the surrounding ring for their shared infrastructure and mutual dependence. \
+ The eight stars represent the primary habitats across the Union, four in purple for those on Eris and Dysnomia themselves, and four in white for the orbital habitats positioned among their Lagrange points."
+ flag_size = TRUE
+ flag_structure = /obj/structure/sign/flag/eris/large
+
+/obj/structure/sign/flag/eris/large
+ name = "\improper Erisian Flag"
+ desc = "The flag of the Sovereign Solarian Union of Eris and Dysnomia, a pair of distant dwarf worlds in the Sol System, dominated by the dual influence of the system’s largest communications array and the Solarian Navy."
+ desc_extended = "The flag of Eris and Dysnomia features a bicolor of white and purple, separated by a gold stripe, with a golden ring and diamond at its center. Four purple stars are arranged along the top, while four white stars line the bottom. \
+ The white field evokes the planetoid’s isolation beyond the Kuiper Belt, while the purple pays tribute to the Solarian Navy and its significant influence on Erisian history. The gold stripe represents the vital flow of interstellar communication that passes through Eris. At the center, the golden emblem symbolizes the unity of Eris and Dysnomia: the circle for Eris, the diamond for Dysnomia, and the surrounding ring for their shared infrastructure and mutual dependence. \
+ The eight stars represent the primary habitats across the Union, four in purple for those on Eris and Dysnomia themselves, and four in white for the orbital habitats positioned among their Lagrange points."
+ icon_state = "eris_l"
+ flag_path = "eris"
+ flag_size = TRUE
+ flag_item = /obj/item/flag/eris/l
+
+/obj/structure/sign/flag/eris/large/north/Initialize(mapload)
+ . = ..(mapload, NORTH)
+
+/obj/structure/sign/flag/eris/large/south/Initialize(mapload)
+ . = ..(mapload, SOUTH)
+
+/obj/structure/sign/flag/eris/large/east/Initialize(mapload)
+ . = ..(mapload, EAST)
+
+/obj/structure/sign/flag/eris/large/west/Initialize(mapload)
+ . = ..(mapload, WEST)
+
//Hiskyn
/obj/item/flag/hiskyn
name = "\improper Hiskyn's Revanchists flag"
diff --git a/code/game/objects/structures/full_window_frame.dm b/code/game/objects/structures/full_window_frame.dm
index 2eb0d2eb3c9..84b99da33ea 100644
--- a/code/game/objects/structures/full_window_frame.dm
+++ b/code/game/objects/structures/full_window_frame.dm
@@ -6,7 +6,7 @@
maxhealth = OBJECT_HEALTH_MEDIUM
color = COLOR_GRAY20
build_amt = 4
- pass_flags_self = PASSRAILING
+ pass_flags_self = PASSRAILING | LETPASSTHROW
layer = WINDOW_FRAME_LAYER
anchored = TRUE
density = TRUE
@@ -54,6 +54,10 @@
return TRUE
if(istype(mover, /obj/structure/closet/crate))
return TRUE
+ if(istype(mover,/obj/projectile))
+ return TRUE
+ if(mover.throwing)
+ return TRUE
if(istype(mover) && mover.pass_flags & PASSTABLE)
return TRUE
if(locate(/obj/structure/window_frame) in get_turf(mover))
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index a6c263ff09a..00eb7e3f527 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -73,7 +73,7 @@
/obj/structure/girder/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit)
//Girders only provide partial cover. There's a chance that the projectiles will just pass through. (unless you are trying to shoot the girder)
if(hitting_projectile.original != src && !prob(cover))
- return BULLET_ACT_HIT //pass through
+ return BULLET_ACT_FORCE_PIERCE //pass through
var/damage = hitting_projectile.get_structure_damage()
if(!damage)
diff --git a/code/game/objects/structures/gore/core.dm b/code/game/objects/structures/gore/core.dm
index b0009d853d0..f79eb1b2f98 100644
--- a/code/game/objects/structures/gore/core.dm
+++ b/code/game/objects/structures/gore/core.dm
@@ -30,8 +30,6 @@
if(. != BULLET_ACT_HIT)
return .
- add_damage(hitting_projectile.damage)
-
/obj/structure/gore/ex_act(severity)
switch(severity)
if(1.0)
diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm
index d3d2477ca84..f317310cb8c 100644
--- a/code/game/objects/structures/inflatable.dm
+++ b/code/game/objects/structures/inflatable.dm
@@ -96,8 +96,6 @@
bullet_ping(hitting_projectile)
- health -= proj_damage
-
if(health <= 0)
deflate(TRUE)
return
diff --git a/code/game/objects/structures/machinery/atmoalter/canister.dm b/code/game/objects/structures/machinery/atmoalter/canister.dm
index 71207747d2a..238b2a15278 100644
--- a/code/game/objects/structures/machinery/atmoalter/canister.dm
+++ b/code/game/objects/structures/machinery/atmoalter/canister.dm
@@ -6,6 +6,7 @@
density = TRUE
light_system = MOVABLE_LIGHT
maxhealth = OBJECT_HEALTH_LOW
+ should_use_health = FALSE
obj_flags = OBJ_FLAG_SIGNALER | OBJ_FLAG_CONDUCTABLE
w_class = WEIGHT_CLASS_HUGE
diff --git a/code/game/objects/structures/machinery/camera/camera.dm b/code/game/objects/structures/machinery/camera/camera.dm
index a745086bb41..f4a9543c7a1 100644
--- a/code/game/objects/structures/machinery/camera/camera.dm
+++ b/code/game/objects/structures/machinery/camera/camera.dm
@@ -157,8 +157,6 @@
if(. != BULLET_ACT_HIT)
return .
- add_damage(hitting_projectile.get_structure_damage(), hitting_projectile.damage_flags(), hitting_projectile.damage_type, hitting_projectile.armor_penetration, hitting_projectile)
-
/obj/structure/machinery/camera/ex_act(severity)
if(src.invuln)
return
@@ -381,14 +379,23 @@
alarm_on = 0
GLOB.camera_alarm.clearAlarm(loc, src)
-//if false, then the camera is listed as DEACTIVATED and cannot be used
+/// If FALSE, then the camera is listed as DEACTIVATED and cannot be used
/obj/structure/machinery/camera/proc/can_use()
if(!status)
return 0
if(stat & (EMPED|BROKEN))
return 0
+ if(is_wireless_jammed())
+ return 0
return 1
+/// Only used below, but has separate proc for potential future use.
+/obj/structure/machinery/camera/proc/is_wireless_camera()
+ return !isturf(loc)
+
+/obj/structure/machinery/camera/proc/is_wireless_jammed()
+ return is_wireless_camera() && get_turf(src) && within_jamming_range(src)
+
/obj/structure/machinery/camera/proc/can_see()
var/list/see = null
var/turf/pos = get_turf(src)
diff --git a/code/game/objects/structures/machinery/camera/camera_assembly.dm b/code/game/objects/structures/machinery/camera/camera_assembly.dm
index ea380d288f4..46bd8c31d41 100644
--- a/code/game/objects/structures/machinery/camera/camera_assembly.dm
+++ b/code/game/objects/structures/machinery/camera/camera_assembly.dm
@@ -98,6 +98,7 @@
state = 4
var/obj/structure/machinery/camera/C = new(src.loc)
+ QDEL_NULL(C.assembly)
src.forceMove(C)
C.assembly = src
@@ -106,6 +107,10 @@
C.replace_networks(uniquelist(tempnetwork))
C.c_tag = input
+ C.setPowerUsage()
+ if(C.isMotion() && !(SSmachinery.processing[C]))
+ START_PROCESSING_MACHINE(C, MACHINERY_PROCESS_SELF)
+ C.update_coverage()
for(var/i = 5; i >= 0; i -= 1)
var/direct = tgui_input_list(user, "Direction?", "Assembling Camera", list("Confirm", "NORTH", "EAST", "SOUTH", "WEST"))
@@ -127,20 +132,35 @@
return TRUE
// Upgrades!
- if(is_type_in_list(attacking_item, possible_upgrades) && !is_type_in_list(attacking_item, upgrades)) // Is a possible upgrade and isn't in the camera already.
+ var/upgrade_type
+ for(var/possible_upgrade in possible_upgrades)
+ if(istype(attacking_item, possible_upgrade))
+ upgrade_type = possible_upgrade
+ break
+
+ if(upgrade_type)
+ if(state != 3)
+ to_chat(user, SPAN_WARNING("You need to wire the assembly before installing upgrades."))
+ return TRUE
+ if(locate(upgrade_type) in upgrades)
+ to_chat(user, SPAN_WARNING("\The [src] already has that upgrade installed."))
+ return TRUE
if(istype(attacking_item, /obj/item/stock_parts/scanning_module))
var/obj/item/stock_parts/scanning_module/SM = attacking_item
if(SM.rating < 2)
to_chat(user, SPAN_WARNING("That scanning module doesn't seem advanced enough."))
- return
+ return TRUE
to_chat(user, "You attach \the [attacking_item] into the assembly inner circuits.")
upgrades += attacking_item
user.remove_from_mob(attacking_item)
attacking_item.forceMove(src)
- return
+ return TRUE
// Taking out upgrades
else if(attacking_item.tool_behaviour == TOOL_CROWBAR && upgrades.len)
+ if(state != 3)
+ to_chat(user, SPAN_WARNING("You need access to the wired circuits before removing upgrades."))
+ return TRUE
var/obj/U = locate(/obj) in upgrades
if(U)
to_chat(user, "You unattach an upgrade from the assembly.")
diff --git a/code/game/objects/structures/machinery/camera/presets.dm b/code/game/objects/structures/machinery/camera/presets.dm
index a18e2133962..e012ad3756d 100644
--- a/code/game/objects/structures/machinery/camera/presets.dm
+++ b/code/game/objects/structures/machinery/camera/presets.dm
@@ -80,6 +80,9 @@ GLOBAL_LIST_INIT(engineering_networks, list(
/obj/structure/machinery/camera/network/news
network = list(NETWORK_NEWS)
+/obj/structure/machinery/camera/network/expedition
+ network = list(NETWORK_EXPEDITION)
+
// EMP
/obj/structure/machinery/camera/emp_proof/Initialize()
diff --git a/code/game/objects/structures/machinery/computer/camera.dm b/code/game/objects/structures/machinery/computer/camera.dm
index ba2ed581292..c1ef844b5db 100644
--- a/code/game/objects/structures/machinery/computer/camera.dm
+++ b/code/game/objects/structures/machinery/computer/camera.dm
@@ -26,13 +26,23 @@
camera_monitor_program = new("Compless")
// Make sure that camera_monitor knows its been generated from a dedicated console; this will define its network access.
camera_monitor_program.monitored_networks = console_networks
+ camera_monitor_program.ntnet_endpoint = src
+ camera_monitor_program.ntnet_endpoint_ethernet = TRUE
/obj/structure/machinery/computer/security/Destroy()
+ reset_remote_viewers()
if(camera_monitor_program)
+ camera_monitor_program.reset_current()
camera_monitor_program = null
. = ..()
+/obj/structure/machinery/computer/security/proc/reset_remote_viewers()
+ for(var/mob/M in GLOB.player_list)
+ if(M.machine == src && M.is_viewing_remote_view())
+ M.unset_machine()
+ M.reset_view(null)
+
/obj/structure/machinery/computer/security/attack_ai(var/mob/user as mob)
if(!ai_can_interact(user))
return
@@ -41,6 +51,8 @@
/obj/structure/machinery/computer/security/check_eye(var/mob/user as mob)
if (user.stat || user.blinded || !operable())
return -1
+ if(camera_monitor_program?.current_camera)
+ return camera_monitor_program.check_eye(user)
if(!current_camera)
return 0
var/viewflag = current_camera.check_eye(user)
@@ -51,6 +63,8 @@
/obj/structure/machinery/computer/security/grants_equipment_vision(var/mob/user as mob)
if(user.stat || user.blinded || !operable())
return FALSE
+ if(camera_monitor_program?.current_camera)
+ return camera_monitor_program.grants_equipment_vision(user)
if(!current_camera)
return FALSE
var/viewflag = current_camera.check_eye(user)
@@ -91,7 +105,7 @@
. = camera_monitor_program.ui_act(action, params, ui, state)
/obj/structure/machinery/computer/security/attack_hand(var/mob/user as mob)
- if (!(src.z in GetConnectedZlevels(starting_z_level)))
+ if (!(src.z in GetConnectedZlevels(starting_z_level)) && !SSatlas.current_map.is_always_available_network_level(src.z))
to_chat(user, "Unable to establish a connection.")
return
if(stat & (NOPOWER|BROKEN)) return
@@ -115,9 +129,11 @@
if (user.stat || user.blinded || !operable())
return 0
+ if(!C.can_use())
+ return 0
set_current(C)
- if (!(C.z in GetConnectedZlevels(starting_z_level)))
+ if (!(C.z in GetConnectedZlevels(starting_z_level)) && !(SSatlas.current_map.is_always_available_network_level(src.z) && C.z == src.z))
to_chat(user, SPAN_NOTICE("This camera is too far away to connect to!"))
return FALSE
@@ -311,7 +327,7 @@
req_access = list(150)
/obj/structure/machinery/computer/security/terminal
- name = "camera monitor terminal"
+ name = "public camera monitor"
icon = 'icons/obj/modular_computers/modular_terminal.dmi'
icon_screen = "cameras"
icon_keyboard = "security_key"
@@ -320,3 +336,7 @@
has_off_keyboards = TRUE
can_pass_under = FALSE
light_power_on = 1
+
+/obj/structure/machinery/computer/security/terminal/public
+ console_networks = list(NETWORK_EXPEDITION, NETWORK_NEWS)
+ circuit = /obj/item/circuitboard/security/public
diff --git a/code/game/objects/structures/machinery/deployable.dm b/code/game/objects/structures/machinery/deployable.dm
index cc66b945da8..832d7ce0582 100644
--- a/code/game/objects/structures/machinery/deployable.dm
+++ b/code/game/objects/structures/machinery/deployable.dm
@@ -19,7 +19,10 @@ Deployable Kits
density = TRUE
layer = ABOVE_DOOR_LAYER // above door layer so it can appear on the airlocks like a proper barricade
maxhealth = OBJECT_HEALTH_LOW
-
+ armor = list(
+ MELEE = ARMOR_MELEE_RESISTANT,
+ BULLET = ARMOR_BALLISTIC_PISTOL
+ )
var/force_material
/obj/structure/blocker/Initialize(mapload, var/material_name)
@@ -46,13 +49,6 @@ Deployable Kits
if(. != BULLET_ACT_HIT)
return .
- var/damage_modifier = 0.4
- switch(hitting_projectile.damage_type)
- if(DAMAGE_BURN)
- damage_modifier = 1
- if(DAMAGE_BRUTE)
- damage_modifier = 0.75
- health -= hitting_projectile.damage * damage_modifier
if(!check_dismantle())
visible_message(SPAN_WARNING("\The [src] is hit by \the [hitting_projectile]!"))
@@ -76,11 +72,6 @@ Deployable Kits
return TRUE
else
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- switch(attacking_item.damtype)
- if(DAMAGE_BURN)
- src.health -= attacking_item.force * 1
- if(DAMAGE_BRUTE)
- src.health -= attacking_item.force * 0.75
shake_animation()
playsound(src.loc, material.hitsound, attacking_item.get_clamped_volume(), 1)
if(check_dismantle())
@@ -280,7 +271,7 @@ Deployable Kits
/obj/item/deployable_kit/attack_self(mob/user)
to_chat(user, SPAN_NOTICE("You start assembling \the [src]..."))
- if(do_after(user, assembly_time, src, DO_REPAIR_CONSTRUCT))
+ if(do_after(user, assembly_time, src, DO_DEPLOY))
assemble_kit(user)
qdel(src)
diff --git a/code/game/objects/structures/machinery/doors/airlock.dm b/code/game/objects/structures/machinery/doors/airlock.dm
index afd413f2332..1bfe35140dd 100644
--- a/code/game/objects/structures/machinery/doors/airlock.dm
+++ b/code/game/objects/structures/machinery/doors/airlock.dm
@@ -118,8 +118,6 @@
var/door_frame_color = COLOR_GRAY20
/// Color. The color of the stripe detail.
var/stripe_color = null
- /// Color. The color of the symbol detail.
- var/symbol_color = null
/// Color. The color of the window.
var/window_color = null
/// String (One of `MATERIAL_*`). The material used for the door's window if `glass` is set. Used to set `window_material` during init.
@@ -523,6 +521,12 @@
explosion_resistance = 20
secured_wires = TRUE
maxhealth = OBJECT_HEALTH_EXTREMELY_HIGH
+ destroy_hits = 30
+ armor = list(
+ MELEE = ARMOR_MELEE_RESISTANT,
+ BULLET = ARMOR_BALLISTIC_PISTOL,
+ LASER = ARMOR_LASER_MEDIUM
+ )
features_powerloss_manual_override = FALSE
ai_bolting_delay = 10
ai_unbolt_delay = 5
diff --git a/code/game/objects/structures/machinery/doors/blast_door.dm b/code/game/objects/structures/machinery/doors/blast_door.dm
index 87c2f692e0d..e4ed6e48f62 100644
--- a/code/game/objects/structures/machinery/doors/blast_door.dm
+++ b/code/game/objects/structures/machinery/doors/blast_door.dm
@@ -17,6 +17,12 @@
dir = 1
closed_layer = ABOVE_DOOR_LAYER
explosion_resistance = 25
+ destroy_hits = 40
+ armor = list(
+ MELEE = ARMOR_MELEE_MAJOR,
+ BULLET = ARMOR_BALLISTIC_MEDIUM,
+ LASER = ARMOR_LASER_RIFLE
+ )
pass_flags_self = PASSDOORS
rad_resistance_modifier = 6
@@ -255,6 +261,12 @@
icon_state = "shutter1"
damage = SHUTTER_CRUSH_DAMAGE
closed_layer = CLOSED_DOOR_LAYER
+ destroy_hits = 20
+ armor = list(
+ MELEE = ARMOR_MELEE_RESISTANT,
+ BULLET = ARMOR_BALLISTIC_PISTOL,
+ LASER = ARMOR_LASER_MEDIUM
+ )
/obj/structure/machinery/door/blast/shutters/open
icon_state = "shutter0"
diff --git a/code/game/objects/structures/machinery/doors/door.dm b/code/game/objects/structures/machinery/doors/door.dm
index 353cc3aff03..733da525ec0 100644
--- a/code/game/objects/structures/machinery/doors/door.dm
+++ b/code/game/objects/structures/machinery/doors/door.dm
@@ -255,21 +255,25 @@
var/damage = hitting_projectile.get_structure_damage()
// Emitter Blasts - these will eventually completely destroy the door, given enough time.
- if (damage > 90)
- destroy_hits -= (1 * hitting_projectile.anti_materiel_potential)
+ if (damage >= 30 && health <= 0) //Midlaser damage.
+ if (damage > 90)
+ destroy_hits -= max(1, (1 * hitting_projectile.anti_materiel_potential)) //Double dip for strong projectiles, like emitters or the PEAC.
+ destroy_hits -= max(1, (1 * hitting_projectile.anti_materiel_potential))
if (destroy_hits <= 0)
visible_message(SPAN_DANGER("\The [src.name] disintegrates!"))
switch (hitting_projectile.damage_type)
if(DAMAGE_BRUTE)
- new /obj/item/stack/material/steel(src.loc, 2)
- new /obj/item/stack/rods(src.loc, 3)
+ for(var/i = 1 to 3)
+ if(prob(50))
+ new /obj/item/stack/material/steel(src.loc, 2)
+ else
+ new /obj/item/material/shard(src.loc, MATERIAL_STEEL)
if(DAMAGE_BURN)
new /obj/effect/decal/cleanable/ash(src.loc) // Turn it to ashes!
+ new /obj/item/material/shard(src.loc, MATERIAL_STEEL)
+ new /obj/particle_emitter/door_destruction(loc, 2 SECONDS)
qdel(src)
- if(damage)
- add_damage(damage)
-
/obj/structure/machinery/door/hitby(atom/movable/hitting_atom, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
..()
var/tforce = 0
@@ -419,6 +423,8 @@
update_icon()
/obj/structure/machinery/door/on_death(damage, damage_flags, damage_type, armor_penetration, obj/weapon)
+ if(stat & BROKEN)
+ return
set_broken()
/obj/structure/machinery/door/proc/set_broken()
diff --git a/code/game/objects/structures/machinery/mecha_fabricator.dm b/code/game/objects/structures/machinery/mecha_fabricator.dm
deleted file mode 100644
index 86de54055a4..00000000000
--- a/code/game/objects/structures/machinery/mecha_fabricator.dm
+++ /dev/null
@@ -1,506 +0,0 @@
-/obj/structure/machinery/mecha_part_fabricator
- name = "synthetic fabricator"
- desc = "A general purpose fabricator that can be used to fabricate equipment for synthetics or exosuits."
- icon = 'icons/obj/machinery/robotics_fabricator.dmi'
- icon_state = "fab"
- density = TRUE
- anchored = TRUE
- idle_power_usage = 20
- active_power_usage = 5000
- req_access = list(ACCESS_ROBOTICS)
- component_types = list(
- /obj/item/circuitboard/mechfab,
- /obj/item/stock_parts/matter_bin = 2,
- /obj/item/stock_parts/manipulator,
- /obj/item/stock_parts/micro_laser,
- /obj/item/stock_parts/console_screen
- )
- manufacturer = "hephaestus"
-
- /**
- * A `/list` of enqueued `/datum/design` to be printed, processed in the queue
- */
- var/list/datum/design/queue = list()
-
- /**
- * How much efficient (or inefficient) the protolathe is at manufacturing things
- */
- var/mat_efficiency = 1
-
- /**
- * The production speed of this specific protolathe, a factor
- */
- var/production_speed = 1
-
- var/list/materials = list(MATERIAL_STEEL = 0, MATERIAL_GLASS = 0, MATERIAL_GOLD = 0, MATERIAL_SILVER = 0, MATERIAL_DIAMOND = 0, MATERIAL_PHORON = 0, MATERIAL_URANIUM = 0, MATERIAL_PLASTEEL = 0, MATERIAL_ALUMINIUM = 0, MATERIAL_LEAD = 0)
- var/res_max_amount = 200000
-
- var/datum/research/files
-
- /// The looping sound for production.
- var/datum/looping_sound/synth_fab/fab_loop
-
- var/list/categories = list()
- var/category = null
- var/sync_message = ""
- var/limb_manufacturer
-
- ///The timer id for the build callback, if we're building something
- var/build_callback_timer
-
-/obj/structure/machinery/mecha_part_fabricator/upgrade_hints(mob/user, distance, is_adjacent)
- . += ..()
- . += "- Upgraded matter bins will increase material storage capacity."
- . += SPAN_NOTICE(" - The current storage capacity is [res_max_amount / 2000] sheets")
- . += "- Upgraded micro-lasers will increase fabrication speed."
- . += SPAN_NOTICE(" - The current speed increase is [round((1 - (1 / production_speed)) * 100)]%")
- . += "- Upgraded manipulators will improve material use efficiency."
- . += SPAN_NOTICE(" - The current cost reduction is [round((1 - mat_efficiency) * 100)]%")
-
-/obj/structure/machinery/mecha_part_fabricator/antagonist_hints(mob/user, distance, is_adjacent)
- . += ..()
- . += "Click-drag someone with long hair onto this machine to start feeding it their hair! This will hurt and piss them off!"
-
-/obj/structure/machinery/mecha_part_fabricator/Initialize()
- . = ..()
-
- files = new /datum/research(src) //Setup the research data holder.
- fab_loop = new(src)
- limb_manufacturer = GLOB.basic_robolimb.company
- update_categories()
- update_icon()
-
-/// Make sure the machine starts the round properly synced.
-/obj/structure/machinery/mecha_part_fabricator/LateInitialize()
- . = ..()
- sync()
-
-/obj/structure/machinery/mecha_part_fabricator/update_icon()
- ClearOverlays()
- update_fab_audio()
- if(panel_open)
- AddOverlays("[icon_state]_panel")
- if(!(stat & (NOPOWER|BROKEN)))
- AddOverlays(emissive_appearance(icon, "[icon_state]_lights"))
- AddOverlays("[icon_state]_lights")
- if(build_callback_timer)
- AddOverlays("[icon_state]_working")
- AddOverlays(emissive_appearance(icon, "[icon_state]_lights_working"))
- AddOverlays("[icon_state]_lights_working")
-
-/// Starts and stops the necessary audio.
-/obj/structure/machinery/mecha_part_fabricator/proc/update_fab_audio()
- if(!fab_loop)
- return
-
- if(build_callback_timer)
- fab_loop.start()
- else
- fab_loop.stop()
-
-/obj/structure/machinery/mecha_part_fabricator/dismantle()
- SSmaterials.normalize_material_amounts(materials)
- for(var/f in materials.Copy())
- eject_materials(f, materials[f])
-
- //Stop the queue building if you're dismantling
- deltimer(build_callback_timer)
-
- ..()
-
-/obj/structure/machinery/mecha_part_fabricator/RefreshParts()
- ..()
- res_max_amount = 0
-
- for(var/obj/item/stock_parts/matter_bin/M in component_parts)
- res_max_amount += M.rating * 100000 // 200k -> 600k
- var/T = 0
-
- for(var/obj/item/stock_parts/manipulator/M in component_parts)
- T += M.rating
- mat_efficiency = 1 - (T - 1) / 4 // 1 -> 0.5
-
- for(var/obj/item/stock_parts/micro_laser/M in component_parts) // Not resetting T is intended; speed is affected by both
- T += M.rating
- production_speed = T / 2 // 1 -> 3
-
-/obj/structure/machinery/mecha_part_fabricator/attack_hand(var/mob/user)
- if(..())
- return
- if(!allowed(user))
- to_chat(user, SPAN_WARNING("Access denied."))
- return
- do_hair_pull(user)
-
- // Yes I'm doing this after do_hair_pull() intentionally, you can totally fail the skill check and still get your hair stuck in a blender.
- var/cancelled = FALSE
- SEND_SIGNAL(user, COMSIG_USE_MECH_FAB, &cancelled)
- if (cancelled)
- return
-
- ui_interact(user)
-
-/obj/structure/machinery/mecha_part_fabricator/ui_interact(mob/user, datum/tgui/ui)
- . = ..()
- ui = SStgui.try_update_ui(user, src, ui)
- if(!ui)
- ui = new(user, src, "SyntheticFabricator", "Synthetic Fabricator", 1200, 800)
- ui.open()
-
-/obj/structure/machinery/mecha_part_fabricator/ui_data(mob/user)
- var/list/data = list()
- data["manufacturer"] = manufacturer
- var/datum/design/current = queue.len ? queue[1] : null
- if(current)
- data["current"] = current.name
- data["queue"] = get_queue_names()
- data["buildable"] = get_build_options()
- data["category"] = category
- data["available_categories"] = list()
- for(var/possible_category in categories)
- data["available_categories"] += list(list("name" = possible_category))
-
- if(GLOB.fabricator_robolimbs)
- var/list/T = list()
- for(var/A in GLOB.fabricator_robolimbs)
- var/datum/robolimb/R = GLOB.fabricator_robolimbs[A]
- T += list(list("name" = R.company, "type" = A))
- data["manufacturers"] = T
- data["selected_manufacturer"] = limb_manufacturer
-
- data["materials"] = get_materials()
- data["maximum_resource_amount"] = res_max_amount
- data["sync"] = sync_message
-
- //If we have something in the queue that we're trying to build, show the time left if the build is undergoing, otherwise null
- //the logic of displaying it is handled client-side
- if(current)
- if(build_callback_timer)
- data["timeleft"] = round(timeleft(build_callback_timer))
- else
- data["timeleft"] = null
- return data
-
-
-/obj/structure/machinery/mecha_part_fabricator/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
- . = ..()
- if(.)
- return
-
- switch(action)
- if("build")
- var/path = text2path(params["build"])
- add_to_queue(path)
- . = TRUE
-
- if("remove")
- remove_from_queue(text2num(params["remove"]))
- . = TRUE
-
- if("category")
- if(params["category"] in categories)
- category = params["category"]
- . = TRUE
-
- if("manufacturer")
- if(params["manufacturer"] in GLOB.fabricator_robolimbs)
- limb_manufacturer = params["manufacturer"]
- . = TRUE
-
- if("eject")
- eject_materials(params["eject"], text2num(params["amount"]))
- . = TRUE
-
- if("sync")
- sync()
- . = TRUE
- else
- sync_message = ""
-
- if(.)
- playsound(src, 'sound/machines/synthfab/synthfab_button.ogg', 50)
-
-/obj/structure/machinery/mecha_part_fabricator/attackby(obj/item/attacking_item, mob/user)
- if(build_callback_timer)
- to_chat(user, SPAN_NOTICE("\The [src] is busy. Please wait for completion of previous operation."))
- return TRUE
- if(default_deconstruction_screwdriver(user, attacking_item))
- return TRUE
- if(default_deconstruction_crowbar(user, attacking_item))
- return TRUE
- if(default_part_replacement(user, attacking_item))
- return TRUE
-
- if(!istype(attacking_item, /obj/item/stack/material))
- return ..()
-
- var/obj/item/stack/material/M = attacking_item
- if(!M.material)
- return ..()
- var/material = SSmaterials.material_to_path(M.material, FALSE)
- if(!(material in list(MATERIAL_STEEL, MATERIAL_GLASS, MATERIAL_GOLD, MATERIAL_SILVER, MATERIAL_DIAMOND, MATERIAL_PHORON, MATERIAL_URANIUM, MATERIAL_PLASTEEL, MATERIAL_ALUMINIUM, MATERIAL_LEAD)))
- to_chat(user, SPAN_WARNING("\The [src] cannot hold [M.material.name]."))
- return TRUE
-
- var/sname = "[M.name]"
- SSmaterials.normalize_material_amounts(materials)
- if((materials[material] || 0) + SHEET_MATERIAL_AMOUNT <= res_max_amount)
- if(M.amount >= 1)
- var/count = 0
- var/mutable_appearance/MA = mutable_appearance(icon, "material_insertion")
- MA.color = M.material.icon_colour
- //first play the insertion animation
- flick_overlay_view(MA, 1 SECONDS)
-
- //now play the progress bar animation
- flick_overlay_view(mutable_appearance(icon, "fab_progress"), 1 SECONDS)
-
- while((materials[material] || 0) + SHEET_MATERIAL_AMOUNT <= res_max_amount && M.amount >= 1)
- SSmaterials.add_material_amount(materials, material, M.perunit)
- M.use(1)
- count++
- to_chat(user, SPAN_NOTICE("You insert [count] [sname] into \the [src]."))
-
- //Wake up, we have things to do (maybe)
- handle_queue()
-
- else
- to_chat(user, SPAN_NOTICE("\The [src] cannot hold more [sname]."))
- return TRUE
-
-/obj/structure/machinery/mecha_part_fabricator/mouse_drop_receive(atom/dropped, mob/user, params)
- var/mob/living/carbon/human/target = dropped
- if (!istype(target) || target.buckled_to || get_dist(user, src) > 1 || get_dist(user, target) > 1 || user.stat || istype(user, /mob/living/silicon/ai))
- return
- if(target == user)
- return
- src.add_fingerprint(user)
- var/target_loc = target.loc
-
- if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
- if(isskrell(target) || isunathi(target))
- return
-
- for(var/obj/item/protection in list(target.head))
- if(protection && (protection.flags_inv & BLOCKHAIR))
- return
-
- var/datum/sprite_accessory/hair/hair_style = GLOB.hair_styles_list[target.h_style]
- if(hair_style.length < 4)
- return
-
- user.visible_message(SPAN_WARNING("[user] starts feeding [target]'s hair into \the [src]!"), SPAN_WARNING("You start feeding [target]'s hair into \the [src]!"))
- if(!do_after(user, 5 SECONDS, target, DO_UNIQUE))
- return
- if(target_loc != target.loc)
- return
- if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
- user.visible_message(SPAN_WARNING("[user] feeds the [target]'s hair into the [src] and flicks it on!"), SPAN_ALERT("You turn the [src] on!"))
- do_hair_pull(target)
- user.attack_log += "\[[time_stamp()]\] Has fed [target.name]'s ([target.ckey]) hair into a [src]."
- target.attack_log += "\[[time_stamp()]\] Has had their hair fed into [src] by [user.name] ([user.ckey])"
- msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(target)] in a [src]. (JMP)",ckey=key_name(user),ckey_target=key_name(target))
- else
- return
- if(!do_after(user, 3.5 SECONDS, target, DO_UNIQUE))
- return
- if(target_loc != target.loc)
- return
- if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
- user.visible_message(SPAN_ALERT("[user] starts tugging on [target]'s head as the [src] keeps running!"), SPAN_ALERT("You start tugging on [target]'s head!"))
- do_hair_pull(target)
- spawn(10)
- user.visible_message(SPAN_ALERT("[user] stops the [src] and leaves [target] resting as they are."), SPAN_ALERT("You turn the [src] off and let go of [target]."))
-
-/obj/structure/machinery/mecha_part_fabricator/emag_act(var/remaining_charges, var/mob/user)
- switch(emagged)
- if(0)
- emagged = 0.5
- visible_message("[icon2html(src, viewers(get_turf(src)))] [src] beeps: \"DB error \[Code 0x00F1\]\"")
- sleep(10)
- visible_message("[icon2html(src, viewers(get_turf(src)))] [src] beeps: \"Attempting auto-repair\"")
- sleep(15)
- visible_message("[icon2html(src, viewers(get_turf(src)))] [src] beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"")
- sleep(30)
- visible_message("[icon2html(src, viewers(get_turf(src)))] [src] beeps: \"User DB truncated. Please contact your [SSatlas.current_map.company_name] system operator for future assistance.\"")
- req_access = null
- emagged = 1
- return 1
- if(0.5)
- visible_message("[icon2html(src, viewers(get_turf(src)))] [src] beeps: \"DB not responding \[Code 0x0003\]...\"")
- if(1)
- visible_message("[icon2html(src, viewers(get_turf(src)))] [src] beeps: \"No records in User DB\"")
-
-/**
- * Adds a design to the queue
- *
- * * path: The path of the design to add
- */
-/obj/structure/machinery/mecha_part_fabricator/proc/add_to_queue(path)
- var/datum/design/D = files.known_designs[path]
- if(!D)
- return
- queue += D
-
- //Wake up, we have things to do
- handle_queue()
-
-/**
- * Removes a design from the queue
- *
- * * index: The index of the design to remove
- */
-/obj/structure/machinery/mecha_part_fabricator/proc/remove_from_queue(index)
- queue.Cut(index, index + 1)
-
- //If we're removing the first thing in the queue, stop the build timer
- if(index == 1)
- deltimer(build_callback_timer)
- build_callback_timer = null
-
- //Wake up, we have things to do
- handle_queue()
-
-/**
- * Handle the construction queue
- */
-/obj/structure/machinery/mecha_part_fabricator/proc/handle_queue()
-
- //No work to do or already busy, stop
- if(!length(queue) || build_callback_timer)
- //If we don't have a build in progress, revert to idle power usage
- if(!build_callback_timer)
- update_use_power(POWER_USE_IDLE)
-
- update_icon()
- return
-
- //If there's no power, there's no building
- if(stat & NOPOWER)
- queue = list()
- return
-
- //Get the first design in the queue
- var/datum/design/D = queue[1]
-
- //If we can build it, process the request
- if(can_build(D))
- update_use_power(POWER_USE_ACTIVE)
-
- //Add the callback timer for printing, and remove the design from the queue
- build_callback_timer = addtimer(CALLBACK(src, PROC_REF(build), D), (D.time / production_speed), TIMER_UNIQUE|TIMER_STOPPABLE)
- //No queue removal here because we show how long it takes to build in the UI
-
- else
- visible_message(SPAN_NOTICE("[icon2html(src, viewers(get_turf(src)))] \The [src] flashes: Insufficient materials to complete build: [D.name]."))
- remove_from_queue(1)
-
- update_icon()
-
-/obj/structure/machinery/mecha_part_fabricator/proc/can_build(var/datum/design/D)
- SSmaterials.normalize_material_amounts(materials)
- for(var/M in D.materials)
- var/material = SSmaterials.material_to_path(M, FALSE)
- if(!material)
- material = M
- if((materials[material] || 0) < D.materials[M] * mat_efficiency)
- return 0
- return 1
-
-/**
- * Builds the given design, assuming all the necessary conditions are met
- *
- * * design_to_build: The design to build
- */
-/obj/structure/machinery/mecha_part_fabricator/proc/build(datum/design/design_to_build)
- //Consume the materials
- SSmaterials.normalize_material_amounts(materials)
- for(var/M in design_to_build.materials)
- SSmaterials.remove_material_amount(materials, M, design_to_build.materials[M] * mat_efficiency)
-
- intent_message(MACHINE_SOUND)
-
- if(design_to_build.build_path)
- var/loc_offset = get_step(src, dir)
- var/obj/new_item = design_to_build.Fabricate(loc_offset, src)
- visible_message("\The [src] pings, indicating that \the [new_item] is complete.", "You hear a ping.", intent_message = PING_SOUND)
- if(mat_efficiency != 1)
- if(new_item.matter && new_item.matter.len > 0)
- for(var/i in new_item.matter)
- new_item.matter[i] = new_item.matter[i] * mat_efficiency
-
- //We finished building, clear the timer and remove the thing from the queue
- build_callback_timer = null
- remove_from_queue(1)
-
- //Do the queue handling for the next item, or to stop
- handle_queue()
-
-/obj/structure/machinery/mecha_part_fabricator/proc/get_queue_names()
- . = list()
- for(var/i = 1 to queue.len)
- var/datum/design/D = queue[i]
- . += list(list("name" = D.name, "time" = get_design_time(D), "index" = i))
-
-/obj/structure/machinery/mecha_part_fabricator/proc/get_build_options()
- . = list()
- for(var/path in files.known_designs)
- var/datum/design/D = files.known_designs[path]
- if(!D.build_path || !(D.build_type & MECHFAB) || !D.category || (D.category != category))
- continue
- . += list(list("name" = D.name, "desc" = D.desc, "type" = D.type, "category" = D.category, "resources" = get_design_resourses(D), "time" = get_design_time(D)))
-
-/obj/structure/machinery/mecha_part_fabricator/proc/get_design_resourses(var/datum/design/D)
- var/list/F = list()
- for(var/T in D.materials)
- F += "[SSmaterials.material_display_name(T)]: [D.materials[T] * mat_efficiency]"
- return english_list(F, and_text = ", ")
-
-/obj/structure/machinery/mecha_part_fabricator/proc/get_design_time(var/datum/design/D)
- return time2text(round(10 * D.time / production_speed), "mm:ss")
-
-/obj/structure/machinery/mecha_part_fabricator/proc/update_categories()
- categories = list()
- for(var/path in files.known_designs)
- var/datum/design/D = files.known_designs[path]
- if(!D.build_path || !(D.build_type & MECHFAB) || !D.category)
- continue
- categories |= D.category
- if(!category || !(category in categories))
- category = categories[1]
-
-/obj/structure/machinery/mecha_part_fabricator/proc/get_materials()
- . = list()
- SSmaterials.normalize_material_amounts(materials)
- for(var/T in materials)
- . += list(list("name" = SSmaterials.material_display_name(T), "amount" = materials[T]))
-
-/obj/structure/machinery/mecha_part_fabricator/proc/eject_materials(var/material, var/amount)
- if(!amount)
- return
- SSmaterials.normalize_material_amounts(materials)
- material = SSmaterials.material_to_path(material, FALSE)
- if(!material)
- return
- var/stack_type = SSmaterials.material_stack_type(material)
- if(!stack_type)
- return
-
- var/real_amount = min(round(amount / SHEET_MATERIAL_AMOUNT), round((materials[material] || 0) / SHEET_MATERIAL_AMOUNT))
- if(real_amount < 1)
- return
- var/obj/item/stack/material/S = new stack_type(loc, real_amount)
- S.update_icon()
- SSmaterials.remove_material_amount(materials, material, real_amount * SHEET_MATERIAL_AMOUNT)
-
-/obj/structure/machinery/mecha_part_fabricator/proc/sync()
- sync_message = "Error: no console found."
- for(var/obj/structure/machinery/computer/rdconsole/RDC in get_area(src))
- if(!RDC.sync)
- continue
- for(var/id in RDC.files.known_tech)
- var/datum/tech/T = RDC.files.known_tech[id]
- files.AddTech2Known(T)
- files.RefreshResearch()
- sync_message = "Sync complete."
- update_categories()
diff --git a/code/game/objects/structures/machinery/nuclear_bomb.dm b/code/game/objects/structures/machinery/nuclear_bomb.dm
index 2565a6dd023..45448b0b198 100644
--- a/code/game/objects/structures/machinery/nuclear_bomb.dm
+++ b/code/game/objects/structures/machinery/nuclear_bomb.dm
@@ -1,4 +1,7 @@
GLOBAL_VAR(bomb_set)
+// Security needs time to respond to it
+#define MIN_BOMB_TIMER 600
+#define MAX_BOMB_TIMER 900
/obj/structure/machinery/nuclearbomb
name = "\improper Nuclear Fission Explosive"
@@ -11,7 +14,7 @@ GLOBAL_VAR(bomb_set)
var/deployable = 0
var/extended = 0
var/lighthack = 0
- var/timeleft = 120
+ var/timeleft = MIN_BOMB_TIMER
var/timing = 0
var/alerted = 0
var/r_code = "ADMIN"
@@ -268,7 +271,7 @@ GLOBAL_VAR(bomb_set)
switch(action)
if("time")
timeleft += text2num(params["value"])
- timeleft = clamp(timeleft, 120, 600)
+ timeleft = clamp(timeleft, MIN_BOMB_TIMER, MAX_BOMB_TIMER)
return TRUE
if("timer")
if(timing == -1)
@@ -282,6 +285,9 @@ GLOBAL_VAR(bomb_set)
if(wires.is_cut(WIRE_TIMING))
to_chat(usr, SPAN_WARNING("Nothing happens, something might be wrong with the wiring."))
return TRUE
+ if(!area_safety_check())
+ audible_message(SPAN_WARNING("\The [src] emits a beep, \"Deployment aborted: local radiation shielding prevents reliable detonation coupling.\""), "\The [src]'s deployment light blinks red once and disables.")
+ return TRUE
if(!timing && !safety)
timing = 1
log_and_message_admins("engaged a nuclear bomb")
@@ -290,7 +296,7 @@ GLOBAL_VAR(bomb_set)
else
secure_device()
if(alerted == 0)
- set_security_level(SEC_LEVEL_DELTA)
+ set_security_level(SEC_LEVEL_DELTA, TRUE, get_area(src))
alerted = 1
return TRUE
if("safety")
@@ -307,7 +313,13 @@ GLOBAL_VAR(bomb_set)
anchored = 0
visible_message(SPAN_WARNING("\The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut."))
return TRUE
- if(!isinspace())
+ if(isinspace())
+ to_chat(usr, SPAN_WARNING("There is nothing to anchor to!"))
+ return TRUE
+ if(!area_safety_check())
+ audible_message(SPAN_WARNING("\The [src] emits a beep, \"Deployment aborted: local radiation shielding prevents reliable detonation coupling.\""), "\The [src]'s deployment light blinks red once and disables.")
+ return TRUE
+ else
anchored = !anchored
if(anchored)
visible_message(SPAN_WARNING("With a steely snap, bolts slide out of [src] and anchor it to the flooring."))
@@ -316,8 +328,6 @@ GLOBAL_VAR(bomb_set)
secure_device()
visible_message(SPAN_WARNING("The anchoring bolts slide back into the depths of [src]."))
playsound(src, 'sound/machines/boltsup.ogg', 30, 0, extrarange = SILENCED_SOUND_EXTRARANGE)
- else
- to_chat(usr, SPAN_WARNING("There is nothing to anchor to!"))
return TRUE
/obj/structure/machinery/nuclearbomb/proc/secure_device()
@@ -326,12 +336,22 @@ GLOBAL_VAR(bomb_set)
GLOB.bomb_set--
timing = 0
- timeleft = clamp(timeleft, 120, 600)
+ timeleft = clamp(timeleft, MIN_BOMB_TIMER, MAX_BOMB_TIMER)
update_icon()
/obj/structure/machinery/nuclearbomb/ex_act(severity)
return
+// Is it in a valid area
+/obj/structure/machinery/nuclearbomb/proc/area_safety_check()
+ var/area/A = get_area(src)
+ // It needs to be the game map and not in a rad shielded area.
+ // That keeps it out of maintenance and other areas we don't want it deployed in
+ if(A.area_flags & AREA_FLAG_RAD_SHIELDED || !A.station_area)
+ return FALSE
+ else
+ return TRUE
+
#define NUKERANGE 80
/obj/structure/machinery/nuclearbomb/proc/explode()
if (src.safety)
@@ -347,10 +367,9 @@ GLOBAL_VAR(bomb_set)
sleep(100)
var/off_station = 0
- var/turf/bomb_location = get_turf(src)
- if(bomb_location && is_station_level(bomb_location.z))
- if( (bomb_location.x < (128-NUKERANGE)) || (bomb_location.x > (128+NUKERANGE)) || (bomb_location.y < (128-NUKERANGE)) || (bomb_location.y > (128+NUKERANGE)) )
- off_station = 1
+ // This should really not be necessary, but lets do it just to be safe.
+ if(!area_safety_check() && isinspace())
+ off_station = 1
else
off_station = 2
@@ -365,7 +384,7 @@ GLOBAL_VAR(bomb_set)
if(SSticker.mode)
SSticker.mode.explosion_in_progress = 0
if(off_station == 1)
- to_world("A nuclear device was set off, but the explosion was out of reach of the [station_name(TRUE)]!")
+ to_world("A nuclear device was set off, but the explosion was unable to destroy the [station_name(TRUE)]!")
else if(off_station == 2)
to_world("A nuclear device was set off, but the device was not on the [station_name(TRUE)]!")
else
@@ -469,3 +488,6 @@ GLOBAL_VAR(bomb_set)
continue
T.icon_state = target_icon_state
last_turf_state = target_icon_state
+
+#undef MIN_BOMB_TIMER
+#undef MAX_BOMB_TIMER
diff --git a/code/game/objects/structures/machinery/portable_turret.dm b/code/game/objects/structures/machinery/portable_turret.dm
index ad83d2988c8..b301b4b743e 100644
--- a/code/game/objects/structures/machinery/portable_turret.dm
+++ b/code/game/objects/structures/machinery/portable_turret.dm
@@ -500,8 +500,6 @@
if(. != BULLET_ACT_HIT)
return .
- add_damage(damage)
-
/obj/structure/machinery/porta_turret/emp_act(severity)
. = ..()
diff --git a/code/game/objects/structures/machinery/recharger.dm b/code/game/objects/structures/machinery/recharger.dm
index a704bb9fd4e..a60ffcd8689 100644
--- a/code/game/objects/structures/machinery/recharger.dm
+++ b/code/game/objects/structures/machinery/recharger.dm
@@ -30,7 +30,8 @@
/obj/item/clothing/mask/smokable/ecig,
/obj/item/inductive_charger/handheld,
/obj/item/auto_cpr,
- /obj/item/personal_shield
+ /obj/item/personal_shield,
+ /obj/item/electronic_assembly
)
var/icon_state_charged = "recharger100"
var/icon_state_charging = "recharger"
diff --git a/code/game/objects/structures/machinery/rechargestation.dm b/code/game/objects/structures/machinery/rechargestation.dm
index c7f0f64314a..ae892f7592f 100644
--- a/code/game/objects/structures/machinery/rechargestation.dm
+++ b/code/game/objects/structures/machinery/rechargestation.dm
@@ -19,7 +19,7 @@
var/icon_update_tick = 0 // Used to rebuild the overlay only once every 10 ticks
///Multiplier applied to all operations of giving power to cells, represents entropy, efficiency increases with upgrades
- var/charging_efficiency = 1.3
+ var/charging_efficiency = 2
///Watts, Power rating drawn from internal cell to recharge occupant's cell 60 kW unupgraded
var/charging_power
@@ -229,7 +229,7 @@
man_rating += P.rating
cell = locate(/obj/item/cell) in component_parts
- charging_efficiency = 1.3 + 0.030 * cap_rating
+ charging_efficiency = 2 + 0.030 * cap_rating
charging_power = 30000 + 12000 * cap_rating
restore_power_active = 10000 + 10000 * cap_rating
restore_power_passive = 5000 + 1000 * cap_rating
diff --git a/code/game/objects/structures/machinery/stasis_cage.dm b/code/game/objects/structures/machinery/stasis_cage.dm
index 4f1a18347bb..dc5a14ca146 100644
--- a/code/game/objects/structures/machinery/stasis_cage.dm
+++ b/code/game/objects/structures/machinery/stasis_cage.dm
@@ -69,7 +69,10 @@
return ..()
/obj/structure/machinery/stasis_cage/process(seconds_per_tick)
- if (use_power || !cell || !cell.charge)
+ if (!use_power || !cell || !cell.charge)
+ if (isanimal(contained))
+ var/mob/living/simple_animal/SA = contained
+ SA.in_stasis = FALSE
return
cell.use(2 * seconds_per_tick)
if (contained)
@@ -100,7 +103,10 @@
release()
/obj/structure/machinery/stasis_cage/proc/release()
- if (contained)
+ if(contained)
+ if(isanimal(contained))
+ var/mob/living/simple_animal/SA = contained
+ SA.in_stasis = FALSE
contained.dropInto(src)
contained = null
playsound(get_turf(src), 'sound/machines/airlock.ogg', 40)
@@ -249,6 +255,12 @@
playsound(src, 'sound/machines/AirlockClose.ogg', 100)
add_fingerprint(user)
if (do_after(user, 2 SECONDS, src))
+ if(QDELETED(target) || contained || broken || !use_power)
+ return
if(target.buckled_to)
- target.buckled_to.unbuckle()
+ if(istype(target.buckled_to, /obj/item/trap/animal))
+ var/obj/item/trap/animal/animal_trap = target.buckled_to
+ animal_trap.release(transferring = TRUE)
+ else
+ target.buckled_to.unbuckle()
contain(user, target)
diff --git a/code/game/objects/structures/machinery/telecomms/broadcasting.dm b/code/game/objects/structures/machinery/telecomms/broadcasting.dm
index 1529dbb950d..d0247d89e81 100644
--- a/code/game/objects/structures/machinery/telecomms/broadcasting.dm
+++ b/code/game/objects/structures/machinery/telecomms/broadcasting.dm
@@ -178,6 +178,11 @@
var/list/receive = get_hearers_in_radio_ranges(radios)
+ // Electronic radio headsets expose received traffic to their built-in
+ // command receiver independently of whether a mob can hear the message.
+ for(var/obj/item/radio/headset/circuitry/circuit_headset in radios)
+ circuit_headset.receive_circuit_radio_command(data["name"], message, get_frequency_name(frequency))
+
// Cut out admins which have radio chatter disabled
for (var/mob/R in receive)
if(R.client && R.client.holder && !(R.client.prefs.toggles & CHAT_RADIO))
diff --git a/code/game/objects/structures/machinery/vending/engitech.dm b/code/game/objects/structures/machinery/vending/engitech.dm
index f72fcc4e02f..5c4d7b61e6c 100644
--- a/code/game/objects/structures/machinery/vending/engitech.dm
+++ b/code/game/objects/structures/machinery/vending/engitech.dm
@@ -19,15 +19,18 @@
vend_id = "robo-tools"
products = list(
/obj/item/stack/cable_coil = 4,
- /obj/item/flash/synthetic = 4,
+ /obj/item/flash/synthetic = 10,
/obj/item/cell/high = 12,
/obj/item/assembly/prox_sensor = 8,
/obj/item/assembly/signaler = 20,
/obj/item/healthanalyzer = 3,
/obj/item/surgery/scalpel = 2,
+ /obj/item/surgery/hemostat = 2,
+ /obj/item/storage/firstaid/empty = 2,
/obj/item/surgery/circular_saw = 2,
/obj/item/screwdriver = 5,
- /obj/item/crowbar = 5
+ /obj/item/crowbar = 5,
+ /obj/item/mmi = 2
)
contraband = list(
/obj/item/flash = 2
diff --git a/code/game/objects/structures/machinery/vending/wardrobe.dm b/code/game/objects/structures/machinery/vending/wardrobe.dm
index aebd09d6b43..a01c2b915f3 100644
--- a/code/game/objects/structures/machinery/vending/wardrobe.dm
+++ b/code/game/objects/structures/machinery/vending/wardrobe.dm
@@ -506,6 +506,14 @@
/obj/item/clothing/suit/storage/tajaran/messa = 3,
/obj/item/clothing/suit/storage/tajaran/matake = 2,
/obj/item/clothing/suit/storage/tajaran/azubarre = 2,
+ /obj/item/clothing/suit/storage/hooded/trinary_robes = 1,
+ /obj/item/clothing/suit/storage/hooded/trinary_robes/templeist = 1,
+ /obj/item/clothing/suit/storage/hooded/trinary_robes/habit = 1,
+ /obj/item/clothing/head/trinary = 1,
+ /obj/item/clothing/accessory/poncho/trinary/shouldercape = 1,
+ /obj/item/clothing/accessory/poncho/trinary/pellegrina = 1,
+ /obj/item/clothing/accessory/poncho/trinary = 1,
+ /obj/item/clothing/accessory/badge/trinary = 1,
/obj/item/clothing/head/chaplain_hood = 3,
/obj/item/clothing/head/nun_hood = 3,
/obj/item/clothing/head/hijab = 3,
@@ -515,6 +523,7 @@
/obj/item/clothing/mask/trinary_mask = 3,
/obj/item/clothing/mask/gas/unathi = 3,
/obj/item/clothing/mask/tajara = 3,
+ /obj/item/clothing/ears/antenna/trinary_halo = 1,
/obj/item/clothing/accessory/apron/dharmela = 2,
/obj/item/clothing/shoes/sneakers/black = 3,
/obj/item/storage/box/fancy/candle_box = 3,
diff --git a/code/game/objects/structures/simple_doors.dm b/code/game/objects/structures/simple_doors.dm
index 77e99d49236..561515ad3fa 100644
--- a/code/game/objects/structures/simple_doors.dm
+++ b/code/game/objects/structures/simple_doors.dm
@@ -202,7 +202,6 @@
if(. != BULLET_ACT_HIT)
return .
- health -= hitting_projectile.damage
bullet_ping(hitting_projectile)
CheckHealth()
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 2cad8a5c5a4..8fcc4697e75 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -114,8 +114,6 @@
if(. != BULLET_ACT_HIT)
return .
- add_damage(proj_damage, hitting_projectile.damage_flags(), hitting_projectile.damage_type, hitting_projectile.armor_penetration, hitting_projectile)
-
/obj/structure/window/ex_act(severity)
switch(severity)
if(1)
diff --git a/code/game/turfs/flooring/flooring_premade_.dm b/code/game/turfs/flooring/flooring_premade_.dm
index 5548ccc8167..d31d89a1651 100644
--- a/code/game/turfs/flooring/flooring_premade_.dm
+++ b/code/game/turfs/flooring/flooring_premade_.dm
@@ -18,6 +18,15 @@
temperature = 80
initial_gas = list("nitrogen" = MOLES_CELLSTANDARD) //one atmosphere of nitrogen
+/turf/simulated/floor/hivebot
+ name = "alien circuitry"
+ desc = "A strange, almost organic pattern of circuitry. It pulses softly, glowing with a dull red light."
+ icon = 'icons/turf/flooring/circuit.dmi'
+ icon_state = "hivecircuitfloor"
+ light_power = 1
+ light_color = LIGHT_COLOR_EMERGENCY_SOFT
+ light_range = MINIMUM_USEFUL_LIGHT_RANGE
+
/turf/simulated/floor/greengrid
name = "mainframe floor"
icon = 'icons/turf/flooring/circuit.dmi'
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index 0d89b1a29cf..c2d716a00b0 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -23,7 +23,9 @@
heat_capacity = 10000
var/lava = 0
- /// If the turf should generate details. Default: TRUE
+ /// Used for simple turf icon smoothing, which just adds edges to the turf if it's adjacent to a different type turf.
+ /// See `update_icon()` for the use case.
+ // ideally this shouldn't be true by default, not all turfs have edges
var/has_edge_icon = TRUE
/turf/simulated/floor/examine_descriptor(mob/user)
diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index 32f5789b9b2..c6b916cee71 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -270,3 +270,44 @@
set hidden = TRUE
init_verbs()
+
+/client/verb/ping_storyteller()
+ set name = "Ping Storyteller"
+ set category = "OOC"
+
+ if(!mob || isnewplayer(mob) || isghost(mob) || isobserver(mob) || isstoryteller(mob))
+ return
+
+ if(!istype(SSticker?.mode, /datum/game_mode/odyssey))
+ to_chat(src, SPAN_WARNING("You can only ping storytellers during an Odyssey round."))
+ return
+
+ if(!COOLDOWN_FINISHED(src, storyteller_ping_cooldown))
+ to_chat(src, SPAN_WARNING("You can ping storytellers again in [DisplayTimeText(COOLDOWN_TIMELEFT(src, storyteller_ping_cooldown))]."))
+ return
+
+ var/confirm = tgui_alert(src, "Using the following input you can notify the storyteller about something important. Please provide a meaningful message to give the storyteller a better understanding of the situation.", "Ping Storyteller", list("Understood", "Cancel"))
+ if(confirm != "Understood")
+ return
+
+ var/message = sanitize(tgui_input_text(src, "Enter your message for the Storyteller.", "Ping Storyteller", max_length = 256))
+ if(!message)
+ to_chat(src, SPAN_WARNING("You must enter a message to ping a storyteller."))
+ return
+
+ var/list/mob/abstract/ghost/storyteller/active_storytellers = list()
+ for(var/mob/abstract/ghost/storyteller/storyteller as anything in SSodyssey?.storytellers)
+ if(storyteller?.client)
+ active_storytellers += storyteller
+
+ if(!length(active_storytellers))
+ to_chat(src, SPAN_WARNING("There are no active storytellers to receive your ping right now."))
+ return
+
+ for(var/mob/abstract/ghost/storyteller/storyteller as anything in active_storytellers)
+ var/jump_link = "(JMP)"
+ to_chat(storyteller, SPAN_STORYTELLER("[create_text_tag("PING", storyteller.client)] [mob.name]) [jump_link]: [span("message linkify", message)]"))
+
+ COOLDOWN_START(src, storyteller_ping_cooldown, 1 MINUTES)
+ to_chat(src, SPAN_NOTICE("Your ping has been sent to the storyteller."))
+ log_admin("(STORYTELLER PING) [mob.name]/[key] : [message]")
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index ccd6100a6bf..d14b0a71b48 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -88,6 +88,7 @@ GLOBAL_LIST_INIT(admin_verbs_admin, list(
/client/proc/allow_stationbound_reset,
/client/proc/end_round,
/client/proc/event_manager_panel,
+ /client/proc/persistence_panel,
/client/proc/empty_ai_core_toggle_latejoin,
/client/proc/aooc,
/client/proc/change_human_appearance_admin, // Allows an admin to change the basic appearance of human-based mobs ,
@@ -149,8 +150,7 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/fab_tip,
/client/proc/apply_sunstate,
/datum/admins/proc/ccannoucment,
- /datum/admins/proc/set_odyssey,
- /datum/admins/proc/toggle_persistence
+ /datum/admins/proc/set_odyssey
))
GLOBAL_LIST_INIT(admin_verbs_spawn, list(
@@ -205,6 +205,7 @@ GLOBAL_LIST_INIT(admin_verbs_debug, list(
/client/proc/cmd_admin_delete,
/client/proc/cmd_debug_del_all,
/client/proc/air_report,
+ /client/proc/toggle_nonhorizon_temperature_graphics,
/client/proc/reload_admins,
/client/proc/print_random_map,
/client/proc/create_random_map,
@@ -455,6 +456,7 @@ GLOBAL_LIST_INIT(admin_verbs_mod, list(
/client/proc/cmd_admin_check_contents,
/client/proc/print_logout_report,
/client/proc/check_ai_laws, /*shows AI and borg laws*/
+ /client/proc/persistence_panel,
/client/proc/aooc,
/client/proc/toggle_aooc,
/client/proc/alooc,
@@ -490,6 +492,7 @@ GLOBAL_LIST_INIT(admin_verbs_dev, list( //will need to be altered - Ryan784
/client/proc/debug_controller,
/client/proc/debug_variables,
/client/proc/dsay,
+ /client/proc/persistence_panel,
/client/proc/hide_most_verbs,
/client/proc/kill_air,
/client/proc/kill_airgroup,
diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm
index 6e207974fe5..a4be61f11c8 100644
--- a/code/modules/admin/verbs/diagnostics.dm
+++ b/code/modules/admin/verbs/diagnostics.dm
@@ -41,6 +41,24 @@
usr << browse(HTML_SKELETON(output), "window=airreport")
+/client/proc/toggle_nonhorizon_temperature_graphics()
+ set category = "Debug"
+ set name = "Toggle Non-Horizon Temperature Graphics"
+ set desc = "Toggle gas temperature graphics on all non-Horizon z-levels."
+
+ if(!check_rights(R_DEBUG))
+ return
+ if(!SSair)
+ to_chat(src, SPAN_WARNING("The air subsystem is unavailable."))
+ return
+
+ var/suppress = !SSair.suppress_nonhorizon_temperature_graphics
+ to_chat(src, SPAN_NOTICE("[suppress ? "Disabling" : "Re-enabling"] non-Horizon temperature graphics. This may take several ticks."))
+
+ var/updated_graphics = SSair.set_nonhorizon_temperature_graphics_suppressed(suppress)
+ log_and_message_admins("has [suppress ? "disabled" : "enabled"] GAS_HEAT and GAS_COLD graphics on non-Horizon z-levels ([updated_graphics] graphic reference\s updated).")
+ feedback_add_details("admin_verb", "TNTG")
+
/client/proc/fix_next_move()
set category = "Debug"
set name = "Unfreeze Everyone"
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 753b7a408a9..a33e2627679 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -1157,3 +1157,16 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("[key_name_admin(usr)] used the ADPI Panel")
log_admin("[key_name(usr)] used the ADPI Panel")
feedback_add_details("admin_verb", "ADPI")
+
+/client/proc/persistence_panel()
+ set category = "Admin"
+ set name = "Persistence Panel"
+ set desc = "Open the persistence subsystem admin panel"
+
+ if(!check_rights(R_ADMIN|R_MOD|R_DEV, TRUE))
+ return
+
+ var/datum/tgui_module/persistence_panel/panel = new
+ panel.ui_interact(usr)
+
+ feedback_add_details("admin_verb", "PERSIST")
diff --git a/code/modules/atmospherics/components/unary/vent_pump.dm b/code/modules/atmospherics/components/unary/vent_pump.dm
index a58d0622b86..845eb2e1de6 100644
--- a/code/modules/atmospherics/components/unary/vent_pump.dm
+++ b/code/modules/atmospherics/components/unary/vent_pump.dm
@@ -50,8 +50,6 @@
var/broadcast_status_next_process = FALSE
- var/datum/looping_sound/ventilation_humming/ventilation_humming
-
/obj/structure/machinery/atmospherics/unary/vent_pump/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This pumps the contents of the attached pipe out into the atmosphere, if needed."
@@ -120,7 +118,6 @@
assign_uid()
id_tag = num2text(uid)
setup_radio()
- ventilation_humming = new(src)
/obj/structure/machinery/atmospherics/unary/vent_pump/proc/setup_radio()
//some vents work his own special way
@@ -222,12 +219,7 @@
if (!node)
update_use_power(POWER_USE_OFF)
- if(can_pump())
- if(ventilation_humming && !ventilation_humming.loop_started)
- ventilation_humming.start()
- else
- if(ventilation_humming && ventilation_humming.loop_started)
- ventilation_humming.stop()
+ if(!can_pump())
return 0
if(!loc) return FALSE
diff --git a/code/modules/atmospherics/components/unary/vent_scrubber.dm b/code/modules/atmospherics/components/unary/vent_scrubber.dm
index d0c58f7cbb4..30b7bf2668c 100644
--- a/code/modules/atmospherics/components/unary/vent_scrubber.dm
+++ b/code/modules/atmospherics/components/unary/vent_scrubber.dm
@@ -31,8 +31,6 @@
var/broadcast_status_next_process = FALSE
- var/datum/looping_sound/ventilation_humming/ventilation_humming
-
/obj/structure/machinery/atmospherics/unary/vent_scrubber/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "This filters the atmosphere of harmful gas. Filtered gas goes to the pipes connected to it, typically a scrubber pipe."
@@ -62,7 +60,6 @@
LAZYADD(T.blueprints, I)
. = ..()
- ventilation_humming = new(src)
air_contents.volume = ATMOS_DEFAULT_VOLUME_FILTER
initial_loc = get_area(loc)
@@ -198,12 +195,7 @@
broadcast_status_next_process = FALSE
if((!use_power || (stat & (NOPOWER|BROKEN)) || !loc) || welded)
- if(ventilation_humming && ventilation_humming.loop_started)
- ventilation_humming.stop()
return 0
- else
- if(ventilation_humming && !ventilation_humming.loop_started)
- ventilation_humming.start()
var/datum/gas_mixture/environment = loc.return_air()
diff --git a/code/modules/background/accent/unathi.dm b/code/modules/background/accent/unathi.dm
index b4f26d6375b..0c6cd25bac1 100644
--- a/code/modules/background/accent/unathi.dm
+++ b/code/modules/background/accent/unathi.dm
@@ -3,102 +3,104 @@
description = "The Noble Heartlands accent is eloquent and flowing, staying near the front of the mouth. Airy and filled with hissing, this accent requires birth-right or years of \
practice to properly convey. The families of Lords, Sk'akh Priests, noble warriors, and some merchants will often share this accent, and will mostly find the Sinta'Azaziba language \
and associated accents more savage. The Noble Heartlands accent originates from the Sinta'Unathi language."
- tag_icon = "hegemon_noble"
- text_tag = "HGN"
+ tag_icon = "unathi_kresh_karszekani"
+ text_tag = "KRK"
/datum/accent/heartland_peasant
name = ACCENT_HEARTLAND_PEASANT
description = "Lowborn guilds-workers, first-generation merchants, simple warrior levymen, and hundreds of other tasks for the common Clans - this is the most common accent for \
Unathi of the Izweski Heartland. It still holds a slight air of royalty to it compared to accents from the rest of Moghes. It can be heard across Moghes and in colonies, but is most common by far in its birthplace, the crowded Izweski Heartland. \
It originates from the Sinta'Unathi language."
- tag_icon = "hegemon_peasant"
- text_tag = "HGP"
+ tag_icon = "unathi_saketh_karszekani"
+ text_tag = "KRS"
/datum/accent/trad_noble
name = ACCENT_TRAD_NOBLE
description = "A more guttural, droning accent - although one that would demand respect on Moghes before the Contact War, and still demands it in the Wasteland. Primarily born from the \
guttural intonations and physical movement required to communicate in Sinta'Azaziba, this Noble Traditional accent requires clan-training from a family member or shaman - and as \
this accent fades from existence, it has taken on a dual symbol of either survival or defeat."
- tag_icon = "trad_noble"
- text_tag = "TRN"
+ tag_icon = "unathi_kresh_trad"
+ text_tag = "AZK"
/datum/accent/trad_peasant
name = ACCENT_TRAD_PEASANT
description = "Primarily derived from the guttural intonations and physical movement of Sinta'Azaziba, common Unathi from the Wasteland would have this grittier speech pattern. \
Although filled with variety due to the multitude of kingdoms composed in the Wasteland, the borders of where these accents used to be set no longer exist and have simply become \
what it is now, struggling to find identity."
- tag_icon = "trad_peasant"
- text_tag = "TRP"
+ tag_icon = "unathi_saketh_trad"
+ text_tag = "AZS"
/datum/accent/wastelander
name = ACCENT_WASTELAND
description = "Deep within the Wasteland, the most savage lands dominated by bandits, death cults, and nomadic peoples that have lost any connection to their ancestors culturally. \
- The Deep Wasteland accent comes from a disconnection to original talking styles, and adds in more aggressive speech patterns. To both Hegemonic and Traditionalist, the Deep \
- Wastelander accent is the sign of an individual who has grown up without a home or clan that could have taught them an ancestral dialect. The accent is apparent in both \
- Sinta'Unathi and Sinta'Azaziba."
- tag_icon = "deep_wastelander"
- text_tag = "WAS"
+ The Deep Wasteland accent comes from a disconnection to original talking styles, and adds in more aggressive speech patterns. To all sinta, the Deep Wastelander accent \
+ is the sign of an individual who has grown up without a home or clan that could have taught them an ancestral dialect. The accent is apparent in both Sinta'Unathi and \
+ Sinta'Azaziba."
+ tag_icon = "unathi_deep_wastelander"
+ text_tag = "DPW"
/datum/accent/autakh
name = ACCENT_AUTAKH
- description = "Incorporating both Hegemonic and Traditionalist elements, the Aut'akh accent is recognisable for its lack of accentuation and intonations, both owing to the occasional implants of questionable quality having some influence on speech, and the general isolation of most Aut'akh communes."
+ description = "Incorporating both Hegemonic and Traditionalist elements, the Aut'akh accent is recognisable for its lack of accentuation and intonations, both owing to the \
+ occasional implants of questionable quality having some influence on speech, and the general isolation of most Aut'akh communes."
tag_icon = "autakh_valley"
text_tag = "AUT"
/datum/accent/queendom
name = ACCENT_QUEENDOM
- description = "From deep in the Wasteland there are some who hail from a society unlike most others that inhabit the radioactive sands, those from the Queendom. Those from the Queendom are recognizable by their traditionalist inflections in speech, but with slight differences that have evolved in the decades since first contact."
- tag_icon = "trad_queendom"
+ description = "From deep in the Wasteland there are some who hail from a society unlike most others that inhabit the radioactive sands, those from the Queendom. Those from the \
+ Queendom are recognizable by their traditionalist inflections in speech, but with slight differences that have evolved in the decades since first contact."
+ tag_icon = "unathi_trad_queendom"
text_tag = "QEN"
/datum/accent/tza_peasant
name = ACCENT_TZA_PEASANT
description = "A guttural, deep accent, the accent of the Tza Prairie has heavy Azaziba inflections, as the language that has most often been spoken in the region. While the region did support the Izweski during \
the Contact War, it was originally a kingdom of the Traditionalist Coalition, and can sound similar to that accent to the untrained ear."
- tag_icon = "unathi_tza_peasant"
- text_tag = "TZP"
+ tag_icon = "unathi_saketh_tza"
+ text_tag = "TZS"
/datum/accent/tza_noble
name = ACCENT_TZA_NOBLE
description = "A slow, droning and guttural accent, with heavy physical movement involved, the noble accent of the Tza Prairie has remained unchanged for centuries, passed down the ancient lines of the mountains. \
While it sounds similar to the accent of Traditionalist nobles, most with a noble's education would be able to clearly tell the difference."
- tag_icon = "unathi_tza_noble"
- text_tag = "TZN"
+ tag_icon = "unathi_kresh_tza"
+ text_tag = "TZK"
/datum/accent/southlands_peasant
name = ACCENT_SOUTHLANDS_PEASANT
description = "Centuries of trade and immigration have shaped the Southlands accent into an odd blend of sounds from many regions and languages. The result is a sharp, nasal and rapid-paced accent, \
where the original influences can be vaguely heard to a keen listener. The fast manner of speech and the general energy with which it is spoken is one of the first things that comes to mind from an outsider when considering the region."
- tag_icon = "unathi_southlands_peasant"
- text_tag = "SLP"
+ tag_icon = "unathi_saketh_southlands"
+ text_tag = "SLS"
/datum/accent/southlands_noble
name = ACCENT_SOUTHLANDS_NOBLE
description = "The accent of the Southlands nobility is somewhat slower than that of the peasants, as it has remained less changed by migration to the region. While it has diverged from the original accent of the Southlands, \
it is closer to that than the fast-paced speech of the peasants. The Southlands noble accent is widely considered pleasing to the ear, with some merchants and bards attempting to mimic it to aid in their own business."
- tag_icon = "unathi_southlands_noble"
- text_tag = "SLN"
+ tag_icon = "unathi_kresh_southlands"
+ text_tag = "SLK"
/datum/accent/broken_peasant
name = ACCENT_BROKEN_PEASANT
description = "The accent of the Broken Coalition is what would come first to the mind when asked to describe a Traditionalist accent. It is primarily derived from the guttural intonations and physical gestures of Sinta'Azaziba. \
This gravelly dialect was once associated with the peasantry of the Azarak Kingdom, which lay at the center of the Traditionalist Coalition and is now a shattered ruin of its former glory."
- tag_icon = "unathi_broken_peasant"
- text_tag = "AZP"
+ tag_icon = "unathi_saketh_broken"
+ text_tag = "AZS"
/datum/accent/broken_noble
name = ACCENT_BROKEN_NOBLE
description = "The accent of the Broken Coalition is what would come first to the mind when asked to describe a Traditionalist accent. It is primarily derived from the guttural intonations and physical gestures of Sinta'Azaziba. \
This guttural, droning dialect was once associated with the nobility of the Azarak Kingdom, which lay at the center of the Traditionalist Coalition and is now a shattered ruin of its former glory."
- tag_icon = "unathi_broken_noble"
- text_tag = "AZN"
+ tag_icon = "unathi_kresh_broken"
+ text_tag = "AZK"
/datum/accent/unathi_spacer
name = ACCENT_UNATHI_SPACER
- description = "The Hegemony has been, for long, the only power on Moghes with access to interstellar travel technology. Naturally, then, most Spacers and Unathi colonists on distant worlds speak Sinta'Unathi. details of this accent vary between communities, \
+ description = "The Karszekani Moghes has been, for long, the only power on Moghes with access to interstellar travel technology. Naturally, then, most Spacers and Unathi colonists on distant worlds speak Sinta'Unathi. details of this accent vary between communities, \
but these Unathi pioneers generally speak with a surprisingly softer tones than most accents. Rumors say that it is to save every bit of energy while working on developing new colonies, or living in ships for extended periods of time."
tag_icon = "unathi_spacer"
- text_tag = "UNS"
+ text_tag = "KSP"
/datum/accent/hazana
name = ACCENT_HAZANA
@@ -120,16 +122,16 @@
description = "The accent of the Zazalai Mountains is a rather monotone one. The Sinta of the region tend to speak slowly and with little expressed emotion, leading to a common \
joke that they speak like they have a mouthful of rocks. The particular dialect of Sinta'Unathi spoken in the region can often be hard to understand to outsiders, with some of the more isolated communities \
having developed dialects that are nearly distinct languages of their own, to the fascination of many Unathi linguists."
- tag_icon = "unathi_zaz_peasant"
- text_tag = "ZAZ"
+ tag_icon = "unathi_saketh_zaz"
+ text_tag = "ZAS"
/datum/accent/zazalai_noble
name = ACCENT_ZAZ_HIGH
description = "The accent of the Zazalai Mountains nobility is generally clearer than that of the peasantry, though it carries the same slow and monotone sound to it. This accent is \
something of an artificial construction, having been widely influenced by the accent of the Izweski Heartlands nobility due to the historic ties between the two regions. To many, this accent is \
carefully crafted to give an air of civilised refinement in the harsh mountains of Zazalai."
- tag_icon = "unathi_zaz_noble"
- text_tag = "ZAZ"
+ tag_icon = "unathi_kresh_zaz"
+ text_tag = "ZAK"
/datum/accent/ouerea
name = ACCENT_OUEREA
diff --git a/code/modules/background/citizenship/unathi.dm b/code/modules/background/citizenship/unathi.dm
index 5678f31c295..202577a51f6 100644
--- a/code/modules/background/citizenship/unathi.dm
+++ b/code/modules/background/citizenship/unathi.dm
@@ -1,9 +1,9 @@
/datum/citizenship/izweski
name = CITIZENSHIP_IZWESKI
- description = "The Hegemony is a feudal empire ruled by the Izweski Clan. Underneath the Hegemon, who rules from the homeworld of Moghes, there are colony worlds ruled by Overlords. \
+ description = "The Karszekani Moghes is a feudal empire ruled by the Izweski Clan. Underneath the Karszekan, who rules from the homeworld of Moghes, there are colony worlds ruled by Overlords. \
Under Overlords land on planets are divided between Lords, with the rest of the feudal hierarchy being beneath them. The Clan system is deeply entrenched in Unathi society, \
with everything else revolving around it. It forms a major part of their code of honor, which stresses the importance of martial abilities and loyalty to the Clan. Despite an \
- apocalyptic world war that nearly plunged the species into ruin, the Izweski Hegemony has rebounded and is currently working on making the Hegemony a galactic power."
+ apocalyptic world war that nearly plunged the species into ruin, the Karszekani Moghes has rebounded and is currently working on making the Karszekani a galactic power."
consular_outfit = /obj/outfit/job/representative/consular/izweski
assistant_outfit = /obj/outfit/job/diplomatic_aide/izweski
bodyguard_outfit = /obj/outfit/job/diplomatic_bodyguard/izweski
@@ -76,12 +76,12 @@
if(REPRESENTATIVE_MISSION_HIGH)
if(isvaurca(H))
rep_objectives = pick("Obtain [rand(2,3)] sheets of solid phoron below market value, buying directly from the source.",
- "Compile and report information on Hegemony citizens who could potentially harbor anti-Izweski sentiment.",
+ "Compile and report information on Karszekani citizens who could potentially harbor anti-Izweski sentiment.",
"Promote the advantages of K'lax engineering to the [SSatlas.current_map.boss_name] in order to invite future investment in the Hegemony.")
else
rep_objectives = pick("Encourage [rand(1,2)] Unathi to become Zo'saa by signing up with the local Order",
"Gather [rand(2,3)] evidences of any marginalization of Unathi beliefs",
- "Compile and report information on Hegemony citizens who could potentially harbor anti-Izweski sentiment.")
+ "Compile and report information on Karszekani citizens who could potentially harbor anti-Izweski sentiment.")
if(REPRESENTATIVE_MISSION_MEDIUM)
if(isvaurca(H))
@@ -103,7 +103,7 @@
return rep_objectives
/obj/outfit/job/representative/consular/izweski
- name = "Izweski Hegemony Consular Officer"
+ name = "Karszekani Moghes Consular Officer"
uniform = /obj/item/clothing/under/unathi
backpack_contents = list(/obj/item/camera = 1)
@@ -126,12 +126,12 @@
return TRUE
/obj/outfit/job/diplomatic_aide/izweski
- name = "Izweski Hegemony Diplomatic Aide"
+ name = "Karszekani Moghes Diplomatic Aide"
uniform = /obj/item/clothing/under/unathi
suit = /obj/item/clothing/accessory/poncho/unathimantle
/obj/outfit/job/diplomatic_bodyguard/izweski
- name = "Izweski Hegemony Diplomatic Bodyguard"
+ name = "Karszekani Moghes Diplomatic Bodyguard"
uniform = /obj/item/clothing/under/unathi
backpack_contents = list(
/obj/item/gun/energy/pistol/hegemony = 1
diff --git a/code/modules/background/origins/origins/skrell/nralakk.dm b/code/modules/background/origins/origins/skrell/nralakk.dm
index 71b6c4bb68e..6577f76eaef 100644
--- a/code/modules/background/origins/origins/skrell/nralakk.dm
+++ b/code/modules/background/origins/origins/skrell/nralakk.dm
@@ -19,7 +19,7 @@
name = "Traverse"
desc = "The Traverse consists of the outer systems that make up the majority of Federation space, where the quality of life and planet development varies greatly. Views on the Federation are mixed depending on personal interactions with the Government, with many being influenced by the resistance cells that operate here."
possible_accents = list(ACCENT_TRAVERSE, ACCENT_TATTUQIG, ACCENT_SKRELL)
- possible_citizenships = CITIZENSHIPS_NRALAKK
+ possible_citizenships = list(CITIZENSHIP_NRALAKK, CITIZENSHIP_BIESEL)
possible_religions = RELIGIONS_NRALAKK
/singleton/origin_item/origin/generation_fleets
diff --git a/code/modules/background/origins/origins/unathi/izweski.dm b/code/modules/background/origins/origins/unathi/izweski.dm
index 0698cbc8542..7a24524bc69 100644
--- a/code/modules/background/origins/origins/unathi/izweski.dm
+++ b/code/modules/background/origins/origins/unathi/izweski.dm
@@ -1,6 +1,6 @@
/singleton/origin_item/culture/izweski
- name = "Izweski Hegemony"
- desc = "The Izweski Hegemony is home to a majority of Unathi and remains the most powerful centralized force for the species in the modern day. Under the rulership of the Izweski and the religious guidance of the Church of Sk'akh, the Hegemony plays an important role for Sinta interests abroad. It has a strict loyalty to the caste system it is under, prioritizes the importance of the clan first and foremost, and remains the most open to xenocentric interests and customs out of all the current cultures found among Unathi. They embody ideals of diplomatic and cultural adaptability."
+ name = "Karszekani Moghes"
+ desc = "The Karszekani Moghes is home to a majority of Unathi and remains the most powerful centralized force for the species in the modern day. Under the rulership of the Izweski and the religious guidance of the Church of Sk'akh, the Karszekani plays an important role for Sinta interests abroad. It has a strict loyalty to the caste system it is under, prioritizes the importance of the clan first and foremost, and remains the most open to xenocentric interests and customs out of all the current cultures found among Unathi. They embody ideals of diplomatic and cultural adaptability."
possible_origins = list(
/singleton/origin_item/origin/heartland_lower,
/singleton/origin_item/origin/heartland_upper,
@@ -13,25 +13,25 @@
)
/singleton/origin_item/origin/heartland_lower
- name = "Izweski Heartland Lower Castes"
- desc = "The peasantry of the Izweski Heartland are some of the more prosperous peasants throughout the Izweski Hegemony. They have access to the full conveniences of modern life, and as a consequence of this tend to be highly supportive \
- and patriotic towards their nation and Hegemon. In recent years, the arrival of thousands of refugees from the Wasteland has placed the region under great strain, and many of the local peasantry resent the refugees for the impact on the local economy."
+ name = "Izweski Heartland Saketh"
+ desc = "The peasantry of the Izweski Heartland are some of the more prosperous peasants throughout the Karszekani Moghes. They have access to the full conveniences of modern life, and as a consequence of this tend to be highly supportive \
+ and patriotic towards their nation and Karszekan. In recent years, the arrival of thousands of refugees from the Wasteland has placed the region under great strain, and many of the local peasantry resent the refugees for the impact on the local economy."
important_information = "Should one run away and stop paying tithes back home, especially if they have renounced their Izweski citizenship, they are at risk of having a bounty put on them or being found out and deported."
possible_accents = list(ACCENT_HEARTLAND_PEASANT)
possible_citizenships = list(CITIZENSHIP_IZWESKI, CITIZENSHIP_BIESEL, CITIZENSHIP_COALITION)
possible_religions = list(RELIGION_THAKH, RELIGION_SKAKH, RELIGION_AUTAKH, RELIGION_SIAKH, RELIGION_NONE)
/singleton/origin_item/origin/heartland_upper
- name = "Izweski Heartland Upper Castes"
+ name = "Izweski Heartland Kresh"
desc = "Wealth, glamor, and the seductive taste of power lie at the heart of nobility - but nowhere more than in the Izweski Heartland. The nobles of this land are the elte of the elite, known for their wealth, refinement and intrigue. Others may deride them as \
- treacherous or dishonorable, but the nobles of the Heartland do not care. They stand near the top of the Hegemony, and each of them is constantly seeking advantage over their rivals."
- important_information = "Work and visitation visas should be mentioned in records as they are possible in any country where a peasant can get citizenship; almost all nobles shy away from getting citizenship abroad as it would be seen as betraying the Hegemon."
+ treacherous or dishonorable, but the nobles of the Heartland do not care. They stand near the top of the Karszekani, and each of them is constantly seeking advantage over their rivals."
+ important_information = "Work and visitation visas should be mentioned in records as they are possible in any country where a peasant can get citizenship; almost all nobles shy away from getting citizenship abroad as it would be seen as betraying the Karszekan."
possible_accents = list(ACCENT_HEARTLAND_NOBLE)
possible_citizenships = list(CITIZENSHIP_IZWESKI)
possible_religions = list(RELIGION_THAKH, RELIGION_SKAKH, RELIGION_SIAKH)
/singleton/origin_item/origin/tza_lower
- name = "Tza Prairie Lower Castes"
+ name = "Tza Prairie Saketh"
desc = "To the north of Moghes, surrounded by the harsh peaks of the Tza Mountains, lies the Tza Prairie, also known as the Tza Basin. It is the heartland of the Th'akh faith, and its culture has remained \
largely the same for centuries - one of determination, hard work and grit. The peasantry of the region have kept to their traditional lifestyle through war, famine and upheaval, which \
has created a culture as hardy and resilient as the mountains that they call their home."
@@ -43,11 +43,11 @@
origin_traits_descriptions = list("have slightly more stamina")
/singleton/origin_item/origin/tza_upper
- name = "Tza Prairie Upper Castes"
+ name = "Tza Prairie Kresh"
desc = "To the north of Moghes, surrounded by the harsh peaks of the Tza Mountains, lies the Tza Prairie, also known as the Tza Basin. It is the heartland of the Th'akh faith, and its culture has remained \
largely the same for centuries - one of determination, hard work and grit. The nobility of the region have historically been more willing to adapt to changing times, but even then they largely keep to the same \
traditional ways of the region, even through war, famine and upheaval. This has created a culture as hardly and resilient as the mountains they call their home."
- important_information = "Work and visitation visas should be mentioned in records as they are possible in any country where a peasant can get citizenship; almost all nobles shy away from getting citizenship abroad as it would be seen as betraying the Hegemon."
+ important_information = "Work and visitation visas should be mentioned in records as they are possible in any country where a peasant can get citizenship; almost all nobles shy away from getting citizenship abroad as it would be seen as betraying the Karszekan."
possible_accents = list(ACCENT_TZA_NOBLE)
possible_citizenships = list(CITIZENSHIP_IZWESKI)
possible_religions = list(RELIGION_THAKH)
@@ -55,9 +55,9 @@
origin_traits_descriptions = list("have slightly more stamina")
/singleton/origin_item/origin/southlands_lower
- name = "Southlands Lower Castes"
+ name = "Southlands Saketh"
desc = "Along the southern coast of the Moghresian Sea lies the Southlands. The largest region of the Untouched Lands, the Southlands is a wealthy, cosmopolitan and prosperous region. It is the home of several prominent \
- industrial guilds, and its factories have historically been one of the largest production centers of the Hegemony. However, in recent years industrial, religious and political tensions grip the region, as the Si'akh faith grows and \
+ industrial guilds, and its factories have historically been one of the largest production centers of the Karszekani. However, in recent years industrial, religious and political tensions grip the region, as the Si'akh faith grows and \
the ancient guilds clash with Hephaestus for power. The peasantry of the region tend to be better educated than most, as a result of the region's cosmopolitan culture - and in recent years, the urban peasants working in the factories have formed a guild of their own, similar in structure \
to a workers' union - the Hearts of Industry."
important_information = "Should a peasant run away and stop paying tithes back home, especially if they have renounced their Izweski citizenship, they are at risk of having a bounty put on them or being found out and deported."
@@ -66,19 +66,19 @@
possible_religions = list(RELIGION_THAKH, RELIGION_SKAKH, RELIGION_AUTAKH, RELIGION_SIAKH, RELIGION_NONE)
/singleton/origin_item/origin/southlands_upper
- name = "Southlands Upper Castes"
+ name = "Southlands Kresh"
desc = "Along the southern coast of the Moghresian Sea lies the Southlands. The largest region of the Untouched Lands, the Southlands is a wealthy, cosmopolitan and prosperous region. It is the home of several prominent industrial guilds, \
which has made many of its noble families particularly wealthy. However, that wealth has been stretched thin in recent years, as industrial, religious and political tensions grip the region, \
with the Si'akh faith rapidly gaining strength and the urban peasantry agitating for better conditions in their factories. The Southlands is a stack of kindling, and the region's nobility anxiously wait to see \
what will be the spark to set it off."
- important_information = "Work and visitation visas should be mentioned in records as they are possible in any country where a peasant can get citizenship; almost all nobles shy away from getting citizenship abroad as it would be seen as betraying the Hegemon."
+ important_information = "Work and visitation visas should be mentioned in records as they are possible in any country where a peasant can get citizenship; almost all nobles shy away from getting citizenship abroad as it would be seen as betraying the Karszekan."
possible_accents = list(ACCENT_SOUTHLANDS_NOBLE)
possible_citizenships = list(CITIZENSHIP_IZWESKI)
possible_religions = list(RELIGION_THAKH, RELIGION_SKAKH, RELIGION_SIAKH, RELIGION_NONE)
/singleton/origin_item/origin/zazalai_lower
- name = "Zazalai Mountains Lower Castes"
- desc = "Spanning nearly the entirety of Moghes, the Zazalai Mountains were the Hegemony's eastern border for centuries, and were reinforced as a mighty bulwark against any potential aggression. In the modern day, however, the only thing they guard \
+ name = "Zazalai Mountains Saketh"
+ desc = "Spanning nearly the entirety of Moghes, the Zazalai Mountains were the Karszekani's eastern border for centuries, and were reinforced as a mighty bulwark against any potential aggression. In the modern day, however, the only thing they guard \
against is the ever-spreading Wasteland. Much of the region has been rendered uninhabitable in the aftermath of the Contact War, and the cities and villages of the mountain range are gripped by famine, plagued by raiders and struggling with influxes of refugees from \
both the Wasteland, and the many communities of the mountain range left abandoned. The Sinta of this region are known for their skill as defenders, with every man of the range being obliged to undergo rigorous military training. With the Wasteland spreading further and further into \
the mountains, and more and more towns and cities being left uninhabitable, many of the cities of the region are not predicted to survive the decade. The Unathi of Zazalai are known for their strong sense of duty, often being described as being as unbreakable as the mountains they call their home."
@@ -90,13 +90,13 @@
origin_traits_descriptions = list("are slightly more resistant to pain")
/singleton/origin_item/origin/zazalai_upper
- name = "Zazalai Mountains Upper Castes"
- desc = "Spanning nearly the entirety of Moghes, the Zazalai Mountains were the Hegemony's eastern border for centuries, and were reinforced as a mighty bulwark against any potential aggression. In the modern day, however, the only thing they guard \
+ name = "Zazalai Mountains Kresh"
+ desc = "Spanning nearly the entirety of Moghes, the Zazalai Mountains were the Karszekani 's eastern border for centuries, and were reinforced as a mighty bulwark against any potential aggression. In the modern day, however, the only thing they guard \
against is the ever-spreading Wasteland. Much of the region has been rendered uninhabitable in the aftermath of the Contact War, and the cities and villages of the mountain range are gripped by famine, plagued by raiders and struggling with influxes of refugees from \
- both the Wasteland, and the many communities of the mountain range left abandoned. The nobility of the Zazalai Mountains have had a historically prestigious role, acting as the foremost sentinels of the Hegemony against its enemies to the east. For many, adjusting to the \
+ both the Wasteland, and the many communities of the mountain range left abandoned. The nobility of the Zazalai Mountains have had a historically prestigious role, acting as the foremost sentinels of the Karszekani against its enemies to the east. For many, adjusting to the \
modern age - where the mountains are considerably less important from a military point of view - has been difficult, and some have even abandoned their ancestral estates to seek gener pastures elsewhere. The Unathi of Zazalai are known for their strong sense of duty, often \
being described as being as unbreakable as the mountains they call their home."
- important_information = "Work and visitation visas should be mentioned in records as they are possible in any country where a peasant can get citizenship; almost all nobles shy away from getting citizenship abroad as it would be seen as betraying the Hegemon."
+ important_information = "Work and visitation visas should be mentioned in records as they are possible in any country where a peasant can get citizenship; almost all nobles shy away from getting citizenship abroad as it would be seen as betraying the Karszekan."
possible_accents = list(ACCENT_ZAZ_HIGH)
possible_citizenships = list(CITIZENSHIP_IZWESKI)
possible_religions = list(RELIGION_THAKH, RELIGION_SKAKH, RELIGION_SIAKH, RELIGION_NONE)
diff --git a/code/modules/cargo/bounties/bot.dm b/code/modules/cargo/bounties/bot.dm
index 9a21baae984..f7d9dcc9b34 100644
--- a/code/modules/cargo/bounties/bot.dm
+++ b/code/modules/cargo/bounties/bot.dm
@@ -8,11 +8,10 @@
/datum/bounty/item/bot/farmbot
name = "Farmbot"
- description = "After a k'ois incident multiple botanists were hospitalized. Provide a few farmbots to handle their duties while they recover."
+ description = "After a k'ois incident multiple botanists were hospitalized. Provide a farmbot to handle their duties while they recover."
reward_low = 370
reward_high = 430
- required_count = 3
- random_count = 1
+ required_count = 1
wanted_types = list(/mob/living/bot/farmbot)
/datum/bounty/item/bot/medbot
diff --git a/code/modules/cargo/items/engineering.dm b/code/modules/cargo/items/engineering.dm
index a4a1a5daa72..85828d071ff 100644
--- a/code/modules/cargo/items/engineering.dm
+++ b/code/modules/cargo/items/engineering.dm
@@ -421,7 +421,7 @@
name = "fuel tank"
supplier = "hephaestus"
description = "A tank filled with welding fuel."
- price = 10
+ price = 600
items = list(
/obj/structure/reagent_dispensers/fueltank
)
@@ -435,7 +435,7 @@
name = "extinguisher tank"
supplier = "hephaestus"
description = "A tank filled with extinguisher fluid."
- price = 10
+ price = 600
items = list(
/obj/structure/reagent_dispensers/extinguisher
)
@@ -812,20 +812,6 @@
groupable = TRUE
spawn_amount = 1
-/singleton/cargo_item/watertank
- category = "engineering"
- name = "watertank"
- supplier = "hephaestus"
- description = "A tank filled with water."
- price = 10
- items = list(
- /obj/structure/reagent_dispensers/watertank
- )
- access = ACCESS_ENGINE
- container_type = "box"
- groupable = TRUE
- spawn_amount = 1
-
/singleton/cargo_item/weldinghelmet
category = "engineering"
name = "welding helmet"
diff --git a/code/modules/cargo/items/miscellaneous.dm b/code/modules/cargo/items/miscellaneous.dm
index 897766b277b..b444207e2f6 100644
--- a/code/modules/cargo/items/miscellaneous.dm
+++ b/code/modules/cargo/items/miscellaneous.dm
@@ -12,6 +12,34 @@
groupable = TRUE
spawn_amount = 1
+/singleton/cargo_item/watertank
+ category = "miscellaneous"
+ name = "water tank"
+ supplier = "orion"
+ description = "A tank filled with water."
+ price = 350
+ items = list(
+ /obj/structure/reagent_dispensers/watertank
+ )
+ access = 0
+ container_type = "box"
+ groupable = TRUE
+ spawn_amount = 1
+
+/singleton/cargo_item/cookingoil
+ category = "miscellaneous"
+ name = "cooking oil tank"
+ supplier = "orion"
+ description = "A tank filled with cooking oil."
+ price = 450
+ items = list(
+ /obj/structure/reagent_dispensers/cookingoil
+ )
+ access = 0
+ container_type = "box"
+ groupable = TRUE
+ spawn_amount = 1
+
/singleton/cargo_item/sculptingblock
category = "miscellaneous"
name = "sculpting block"
@@ -72,17 +100,3 @@
container_type = "crate"
groupable = TRUE
spawn_amount = 1
-
-/singleton/cargo_item/watertank
- category = "miscellaneous"
- name = "water tank"
- supplier = "orion"
- description = "A tank filled with water."
- price = 10
- items = list(
- /obj/structure/reagent_dispensers/watertank
- )
- access = 0
- container_type = "box"
- groupable = TRUE
- spawn_amount = 1
diff --git a/code/modules/cargo/random_stock/t2_uncommon.dm b/code/modules/cargo/random_stock/t2_uncommon.dm
index b61da217ca5..7ac90f8382b 100644
--- a/code/modules/cargo/random_stock/t2_uncommon.dm
+++ b/code/modules/cargo/random_stock/t2_uncommon.dm
@@ -331,15 +331,6 @@ STOCK_ITEM_UNCOMMON(bang, 0.5)
var/obj/item/gun/bang/B = pick(subtypesof(/obj/item/gun/bang))
new B(L)
-STOCK_ITEM_UNCOMMON(cookingoil, 1)
- var/turf/T = get_turf(L)
- if(!turf_clear(T))
- for(var/turf/U in range(T,1))
- if(turf_clear(U))
- T = U
- break
- new /obj/structure/reagent_dispensers/cookingoil(T)
-
STOCK_ITEM_UNCOMMON(coin, 1.3)
new /obj/random/coin(L)
if(prob(20))
diff --git a/code/modules/cciaa/cciaa.dm b/code/modules/cciaa/cciaa.dm
index d1c033d0248..1b4f80e153a 100644
--- a/code/modules/cciaa/cciaa.dm
+++ b/code/modules/cciaa/cciaa.dm
@@ -48,7 +48,7 @@
P.stamped = new
P.stamped += /obj/item/stamp
P.AddOverlays(stampoverlay)
- P.stamps += " This paper has been stamped by the Central Command Quantum Relay."
+ P.stamps += " This paper has been stamped by the Central Command Bluespace Relay."
if(fax.receivefax(P))
if(announce == 1)
diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm
index 59fc92e424b..b4b4a54177b 100644
--- a/code/modules/client/client_defines.dm
+++ b/code/modules/client/client_defines.dm
@@ -107,3 +107,6 @@
//screen_text vars
///lazylist of screen_texts for this client, first in this list is the one playing
var/list/atom/movable/screen/text/screen_text/screen_texts
+
+ /// Cooldown for pinging Storytellers from the OOC tab.
+ COOLDOWN_DECLARE(storyteller_ping_cooldown)
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 67802991954..04e976dacbd 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -1088,6 +1088,8 @@ GLOBAL_LIST_INIT(localhost_addresses, list(
continue
if(verb_to_init.hidden)
continue
+ if(verb_to_init == /client/verb/ping_storyteller && !istype(SSticker?.mode, /datum/game_mode/odyssey))
+ continue
if(!istext(verb_to_init.category))
continue
panel_tabs |= verb_to_init.category
diff --git a/code/modules/client/preference_setup/loadout/items/general.dm b/code/modules/client/preference_setup/loadout/items/general.dm
index 070be2fa080..32510612316 100644
--- a/code/modules/client/preference_setup/loadout/items/general.dm
+++ b/code/modules/client/preference_setup/loadout/items/general.dm
@@ -291,6 +291,7 @@
banners["banner, New Peoria"] = /obj/item/flag/new_peoria
banners["banner, Lhokgon"] = /obj/item/flag/lhokgon
banners["banner, Venus"] = /obj/item/flag/venus
+ banners["banner, Eris"] = /obj/item/flag/eris
banners["banner, The Consortium of Hieroaetheria"] = /obj/item/flag/consortium
banners["banner, Eternal Republic of the Ekane"] = /obj/item/flag/ekane
banners["banner, Union of Gla'orr"] = /obj/item/flag/glaorr
@@ -412,6 +413,7 @@
flags["flag, New Peoria"] = /obj/item/flag/new_peoria/l
flags["flag, Lhokgon"] = /obj/item/flag/lhokgon/l
flags["flag, Venus"] = /obj/item/flag/venus/l
+ flags["flag, Eris"] = /obj/item/flag/eris/l
flags["flag, The Consortium of Hieroaetheria"] = /obj/item/flag/consortium/l
flags["flag, Eternal Republic of the Ekane"] = /obj/item/flag/ekane/l
flags["flag, Union of Gla'orr"] = /obj/item/flag/glaorr/l
diff --git a/code/modules/client/preference_setup/loadout/items/head.dm b/code/modules/client/preference_setup/loadout/items/head.dm
index b04eea61870..e91bea976aa 100644
--- a/code/modules/client/preference_setup/loadout/items/head.dm
+++ b/code/modules/client/preference_setup/loadout/items/head.dm
@@ -200,7 +200,7 @@
tcaf["tcaf beret, dress"] = /obj/item/clothing/head/beret/tcaf
tcaf["tcaf beret, field"] = /obj/item/clothing/head/beret/tcaf/field
tcaf["tcaf foreign legions beret, dress"] = /obj/item/clothing/head/beret/tcaf/foreign_legion
- tcaf["tcaf foreign legions, field"] = /obj/item/clothing/head/beret/tcaf/foreign_legion/field
+ tcaf["tcaf foreign legions beret, field"] = /obj/item/clothing/head/beret/tcaf/foreign_legion/field
tcaf["tcaf elite espatier beret"] = /obj/item/clothing/head/beret/tcaf/elite_espatier
tcaf["tcaf softcap"] = /obj/item/clothing/head/softcap/tcaf_cap
gear_tweaks += new /datum/gear_tweak/path(tcaf)
diff --git a/code/modules/client/preference_setup/loadout/items/religion.dm b/code/modules/client/preference_setup/loadout/items/religion.dm
index 11e002d6216..f8c43d3a259 100644
--- a/code/modules/client/preference_setup/loadout/items/religion.dm
+++ b/code/modules/client/preference_setup/loadout/items/religion.dm
@@ -6,45 +6,78 @@ ABSTRACT_TYPE(/datum/gear/religion/trinary)
religion = RELIGION_TRINARY
/datum/gear/religion/trinary/mask
- display_name = "trinary perfection mask"
+ display_name = "trinary mask"
+ description = "A thin lace mask worn by Trinarist faithful while in sacred spaces."
path = /obj/item/clothing/mask/trinary_mask
slot = slot_wear_mask
/datum/gear/religion/trinary/coif
- display_name = "trinary perfection coif"
+ display_name = "trinary coif"
+ description = "Simple hair-covering headwear common among the faithful of Axiom, and its many monastic orders."
path = /obj/item/clothing/head/trinary
slot = slot_head
+/datum/gear/religion/trinary/coif/New()
+ ..()
+ var/list/trinarycoif = list()
+ trinarycoif["trinarist coif, red trim"] = /obj/item/clothing/head/trinary
+ trinarycoif["trinarist coif, blue trim"] = /obj/item/clothing/head/trinary/blue_trim
+ trinarycoif["trinarist coif, blue"] = /obj/item/clothing/head/trinary/blue
+ trinarycoif["trinarist coif, black"] = /obj/item/clothing/head/trinary/black
+ trinarycoif["trinarist coif, green"] = /obj/item/clothing/head/trinary/green
+ trinarycoif["trinarist coif, habit"] = /obj/item/clothing/head/trinary/habit
+ gear_tweaks += new /datum/gear_tweak/path(trinarycoif)
+
/datum/gear/religion/trinary/robe
- display_name = "trinary perfection robes selection"
- description = "A selection of robes worn by adherents of the Trinary Perfection."
- path = /obj/item/clothing/suit/trinary_robes
+ display_name = "trinary robes selection"
+ description = "A selection of robes worn by the clergy of the Trinary Perfection, running down to the feet."
+ path = /obj/item/clothing/suit/storage/hooded/trinary_robes
slot = slot_wear_suit
/datum/gear/religion/trinary/robe/New()
..()
var/list/trinaryrobe = list()
- trinaryrobe["trinary perfection robes"] = /obj/item/clothing/suit/trinary_robes
- trinaryrobe["trinary perfection habit"] = /obj/item/clothing/suit/trinary_robes/habit
- trinaryrobe["templeist robes"] = /obj/item/clothing/suit/trinary_robes/templeist
+ trinaryrobe["trinary perfection robes"] = /obj/item/clothing/suit/storage/hooded/trinary_robes
+ trinaryrobe["trinary perfection habit"] = /obj/item/clothing/suit/storage/hooded/trinary_robes/habit
+ trinaryrobe["templeist robes"] = /obj/item/clothing/suit/storage/hooded/trinary_robes/templeist
gear_tweaks += new /datum/gear_tweak/path(trinaryrobe)
+/datum/gear/religion/trinary/tunic
+ display_name = "axiomite tunic selection"
+ description = "A selection of tunics worn by the people of Axiom, and their fellow interstellar Trinarists. An emulation of a clerical style."
+ path = /obj/item/clothing/under/dressshirt/axiom_tunic
+ slot = slot_w_uniform
+
+/datum/gear/religion/trinary/tunic/New()
+ ..()
+ var/list/axiomtunic = list()
+ axiomtunic["axiomite tunic, red trim"] = /obj/item/clothing/under/dressshirt/axiom_tunic
+ axiomtunic["axiomite tunic, blue trim"] = /obj/item/clothing/under/dressshirt/axiom_tunic/blue_trim
+ axiomtunic["axiomite tunic, blue"] = /obj/item/clothing/under/dressshirt/axiom_tunic/blue
+ axiomtunic["axiomite tunic, black"] = /obj/item/clothing/under/dressshirt/axiom_tunic/black
+ axiomtunic["axiomite tunic, green"] = /obj/item/clothing/under/dressshirt/axiom_tunic/green
+ gear_tweaks += new /datum/gear_tweak/path(axiomtunic)
+
/datum/gear/religion/trinary/cape
- display_name = "trinary perfection cape selection"
+ display_name = "trinary cape selection"
description = "A selection of capes worn by adherents to the Trinary Perfection."
- path = /obj/item/clothing/accessory/poncho/trinary
+ path = /obj/item/clothing/under/dressshirt/axiom_tunic
slot = slot_wear_suit
/datum/gear/religion/trinary/cape/New()
..()
var/list/trinarycape = list()
trinarycape["trinary perfection cape"] = /obj/item/clothing/accessory/poncho/trinary
+ trinarycape["trinary perfection cape, blue"] = /obj/item/clothing/accessory/poncho/trinary/blue
trinarycape["trinary perfection shoulder cape"] = /obj/item/clothing/accessory/poncho/trinary/shouldercape
+ trinarycape["trinary perfection shoulder cape, blue"] = /obj/item/clothing/accessory/poncho/trinary/shouldercape/blue
trinarycape["trinary perfection pellegrina"] = /obj/item/clothing/accessory/poncho/trinary/pellegrina
+ trinarycape["trinary perfection pellegrina, blue"] = /obj/item/clothing/accessory/poncho/trinary/pellegrina/blue
gear_tweaks += new /datum/gear_tweak/path(trinarycape)
/datum/gear/religion/trinary/badge
display_name = "trinary perfection brooch"
+ description = "A declaration of one's commitment to the coming Ascension."
path = /obj/item/clothing/accessory/badge/trinary
slot = slot_tie
diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm
index 3205e9218fe..19252e6c85f 100644
--- a/code/modules/client/preference_setup/loadout/loadout.dm
+++ b/code/modules/client/preference_setup/loadout/loadout.dm
@@ -189,7 +189,10 @@ GLOBAL_LIST_INIT(gear_datums, list())
. += ""
if (gear_reset)
. += "| Your loadout failed to load and will be reset if you save this slot. | "
- . += "| \<\<\[[pref.gear_slot]\] \>\>[total_cost]/[GLOB.config.loadout_cost] loadout points spent. \[Clear Loadout\] | "
+ . += "| \<\<\[[pref.gear_slot]\] \>\>[total_cost]/[GLOB.config.loadout_cost] loadout points spent. \[Clear Loadout\]"
+ if(GLOB.config.loadout_slots > 1)
+ . += " \[Duplicate Loadout\]"
+ . += " | "
. += ""
var/firstcat = 1
@@ -419,6 +422,36 @@ GLOBAL_LIST_INIT(gear_datums, list())
pref.gear.Cut()
return TOPIC_REFRESH_UPDATE_PREVIEW
+ else if(href_list["duplicate_loadout"])
+ if(pref.gear_modified)
+ tgui_alert(user, "Gear has been Modified - Save First or Reload", "Gear Modified", list("OK"))
+ return TOPIC_NOACTION
+
+ var/source_slot = pref.gear_slot
+ var/list/available_slots = list()
+ for(var/slot = 1 to GLOB.config.loadout_slots)
+ if(slot != source_slot)
+ available_slots += "Slot [slot]"
+
+ var/selected_slot = tgui_input_list(user, "Choose the loadout slot to replace with a copy of Slot [source_slot].", "Duplicate Loadout", available_slots)
+ if(!selected_slot || !CanUseTopic(user))
+ return TOPIC_NOACTION
+
+ var/target_slot = text2num(copytext(selected_slot, 6))
+ if(target_slot < 1 || target_slot > GLOB.config.loadout_slots || target_slot == source_slot)
+ return TOPIC_NOACTION
+
+ var/confirmation = tgui_alert(user, "Are you sure you want to replace everything in Slot [target_slot] with a copy of Slot [source_slot]?", "Duplicate Loadout", list("Yes", "No"))
+ if(confirmation != "Yes" || !CanUseTopic(user) || pref.gear_slot != source_slot || pref.gear_modified)
+ return TOPIC_NOACTION
+
+ var/list/duplicated_gear = deep_copy_list(pref.gear)
+ pref.gear_list["[target_slot]"] = duplicated_gear
+ pref.gear_slot = target_slot
+ pref.gear = duplicated_gear
+ pref.gear_modified = TRUE
+ return TOPIC_REFRESH_UPDATE_PREVIEW
+
else if(href_list["search_input_refresh"] != null) // empty str is false
search_input_value = sanitize(href_list["search_input_refresh"], 100)
return TOPIC_REFRESH_UPDATE_PREVIEW
diff --git a/code/modules/clothing/factions/trinary.dm b/code/modules/clothing/factions/trinary.dm
index 7ab1c4698d1..01bca5ef4ea 100644
--- a/code/modules/clothing/factions/trinary.dm
+++ b/code/modules/clothing/factions/trinary.dm
@@ -1,28 +1,163 @@
-/obj/item/clothing/suit/trinary_robes/habit
+// Axiomite tunic variants
+/obj/item/clothing/under/dressshirt/axiom_tunic
+ name = "axiomite tunic"
+ desc = "This is a simple tunic formed of a thin, linen-like material flowing down \
+ to the knees. It's the latest fashion on Axiom, the home-planet of the church \
+ of the Trinary Perfection, a religion which seeks to raise synthetics to a point \
+ of spiritual and temporal perfection. It is thin, breathable, and not at all suited \
+ for very cold weather."
+ icon = 'icons/obj/item/clothing/under/synthetic/trinary_tunics.dmi'
+ icon_state = "axiomite_tunic"
+ item_state = "axiomite_tunic"
+ contained_sprite = TRUE
+
+/obj/item/clothing/under/dressshirt/axiom_tunic/blue_trim
+ icon_state = "axiomite_tunic_bluetrim"
+ item_state = "axiomite_tunic_bluetrim"
+
+/obj/item/clothing/under/dressshirt/axiom_tunic/black
+ icon_state = "axiomite_tunic_black"
+ item_state = "axiomite_tunic_black"
+
+/obj/item/clothing/under/dressshirt/axiom_tunic/blue
+ icon_state = "axiomite_tunic_blue"
+ item_state = "axiomite_tunic_blue"
+
+/obj/item/clothing/under/dressshirt/axiom_tunic/green
+ icon_state = "axiomite_tunic_green"
+ item_state = "axiomite_tunic_green"
+
+/obj/item/clothing/under/dressshirt/axiom_tunic/ecclesiastical
+ name = "ecclesiastical tunic"
+ desc = "An Axiomite tunic cast in the colours of the Ecclesiastical Authority; the garb \
+ of a bureaucrat or government official belonging to the church of the Trinary Perfection, \
+ and appointed to responsibility in the planetary government of Axiom."
+ icon_state = "axiomite_tunic_posh"
+ item_state = "axiomite_tunic_posh"
+
+// Capes!
+/obj/item/clothing/accessory/poncho/trinary
+ name = "trinary cape"
+ desc = "A brilliant red and brown cape, commonly worn by those who serve the Trinary Perfection."
+ icon = 'icons/obj/item/clothing/accessory/poncho/trinarist_cape.dmi'
+ icon_state = "trinary_cape"
+ item_state = "trinary_cape"
+ protects_against_weather = FALSE
+ icon_override = null
+
+/obj/item/clothing/accessory/poncho/trinary/blue
+ desc = "A brilliant blue and grey cape, commonly worn by those who serve the Trinary Perfection."
+ icon_state = "trinary_cape_blue"
+ item_state = "trinary_cape_blue"
+
+/obj/item/clothing/accessory/poncho/trinary/pellegrina
+ name = "trinary perfection pellegrina"
+ desc = "A brilliant red and brown cape, commonly worn by those who serve the Trinary Perfection. This one is signifcantly shorter."
+ icon_state = "trinary_pellegrina"
+ item_state = "trinary_pellegrina"
+
+/obj/item/clothing/accessory/poncho/trinary/pellegrina/blue
+ desc = "A brilliant blue and grey cape, commonly worn by those who serve the Trinary Perfection. This one is signifcantly shorter."
+ icon_state = "trinary_pellegrina_blue"
+ item_state = "trinary_pellegrina_blue"
+
+/obj/item/clothing/accessory/poncho/trinary/shouldercape
+ name = "trinary perfection shoulder cape"
+ desc = "A brilliant red and brown cape, commonly worn by those who serve the Trinary Perfection. This one is worn over one shoulder."
+ icon_state = "trinary_shouldercape"
+ item_state = "trinary_shouldercape"
+
+/obj/item/clothing/accessory/poncho/trinary/shouldercape/blue
+ desc = "A brilliant blue and grey cape, commonly worn by those who serve the Trinary Perfection. This one is worn over one shoulder."
+ icon_state = "trinary_shouldercape_blue"
+ item_state = "trinary_shouldercape_blue"
+
+// Orthodox Trinarist gear
+/obj/item/clothing/suit/storage/hooded/trinary_robes
+ name = "trinary perfection robe"
+ desc = "Robes worn by those who serve The Trinary Perfection."
+ icon_state = "trinary_robe"
+ item_state = "trinary_robe"
+ icon = 'icons/obj/item/clothing/suit/trinarist_robes.dmi'
+ hoodtype = /obj/item/clothing/head/winterhood/trinary
+ contained_sprite = TRUE
+
+/obj/item/clothing/head/winterhood/trinary
+ name = "trinary perfection hood"
+ desc = "A hood worn by those who serve the Trinary Perfection."
+ icon_state = "trinary_robe_hood"
+ item_state = "trinary_robe_hood"
+ icon = 'icons/obj/item/clothing/suit/trinarist_robes.dmi'
+ flags_inv = HIDEEARS | HIDEEARS // We don't want this to block hair.
+
+/obj/item/clothing/suit/storage/hooded/trinary_robes/templeist
+ name = "templeist robes"
+ desc = "A robe worn by members of the Lodge of Temple Architect, an order within the Trinary Perfection \
+ focused on technological and industrial development."
+ icon_state = "templeist_robe"
+ item_state = "templeist_robe"
+ hoodtype = /obj/item/clothing/head/winterhood/trinary/templeist
+ contained_sprite = TRUE
+
+/obj/item/clothing/head/winterhood/trinary/templeist
+ name = "templeist hood"
+ desc = "A hood worn by members of the Lodge of Temple Architect, an order within the Trinary Perfection \
+ focused on technological and industrial development."
+ icon_state = "templeist_robe_hood"
+ item_state = "templeist_robe_hood"
+
+/obj/item/clothing/suit/storage/hooded/trinary_robes/habit
name = "trinary perfection habit"
desc = "Robes worn by those who serve The Trinary Perfection."
icon_state = "trinary_habit"
item_state = "trinary_habit"
- icon = 'icons/obj/item/clothing/suit/trinarist_robes.dmi'
+ hoodtype = /obj/item/clothing/head/winterhood/trinary/habit
contained_sprite = TRUE
-/obj/item/clothing/suit/trinary_robes/templeist
- name = "templeist robe"
- desc = "A robe worn by members of the Lodge of Temple Architect, an order within the Trinary Perfection focused on technological and industrial development."
- icon_state = "templeist_robe"
- item_state = "templeist_robe"
- icon = 'icons/obj/item/clothing/suit/trinarist_robes.dmi'
- contained_sprite = TRUE
+/obj/item/clothing/head/winterhood/trinary/habit
+ name = "trinary perfection habit hood"
+ desc = "A hood worn by those who serve the Trinary Perfection."
+ icon_state = "trinary_habit_hood"
+ item_state = "trinary_habit_hood"
+/// Coifs!
/obj/item/clothing/head/trinary
name = "trinary coif"
- desc = "A coif worn primarily by members of the monastic Sodality of Our Lady Corkfell, a religious order within the Trinary Perfection focused on the medical needs of its human practicioners. It seems to be made out of a light \
- and breathable material in order to cope with Axiom's hot summers."
+ desc = "This is a simple design of coif popular in Ecclesiastical Axiom, and among the \
+ innumerable monastic orders of the Trinary Perfection dotted throughout the Orion Spur."
icon = 'icons/obj/item/clothing/head/ipc/trinary_coif.dmi'
icon_state = "trinary_coif"
item_state = "trinary_coif"
contained_sprite = TRUE
+/obj/item/clothing/head/trinary/blue_trim
+ icon_state = "trinary_coif_bluetrim"
+ item_state = "trinary_coif_bluetrim"
+
+/obj/item/clothing/head/trinary/black
+ icon_state = "trinary_coif_black"
+ item_state = "trinary_coif_black"
+
+/obj/item/clothing/head/trinary/blue
+ icon_state = "trinary_coif_blue"
+ item_state = "trinary_coif_blue"
+
+/obj/item/clothing/head/trinary/green
+ icon_state = "trinary_coif_green"
+ item_state = "trinary_coif_green"
+
+/obj/item/clothing/head/trinary/habit
+ icon_state = "trinary_coif_sodalist"
+ item_state = "trinary_coif_sodalist"
+
+/obj/item/clothing/head/trinary/ecclesiastical
+ name = "ecclesiatical coif"
+ desc = "A coif cast in the colours of the Ecclesiastical Authority; the headwear \
+ of some bureaucrat or government official acting on behalf of the church of \
+ the Trinary Perfection and its temporal holdings on Axiom."
+ icon_state = "trinary_coif_ecclesiastical"
+ item_state = "trinary_coif_ecclesiastical"
+
//Exclusionist Gear
/obj/item/clothing/suit/storage/hooded/exclusionist_robe
name = "exclusionist robes"
diff --git a/code/modules/clothing/head/berets.dm b/code/modules/clothing/head/berets.dm
index 1799d3ac3f9..3c3a0398964 100644
--- a/code/modules/clothing/head/berets.dm
+++ b/code/modules/clothing/head/berets.dm
@@ -202,7 +202,7 @@
name = "\improper TCAF foreign legions dress beret"
desc = "A bright blue, red-rimmed dress beret with a rubber insignia of a torch, surrounded by red stars. Worn by those of the Foreign Legions of one of the TCAF's service branches."
icon_state = "tcaf_fl_dress"
- item_state = "tcfl_dress"
+ item_state = "tcaf_fl_dress"
/obj/item/clothing/head/beret/tcaf/foreign_legion/field
name = "TCAF foreign legions field beret"
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 1a5802e7296..18aa78abc55 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -32,6 +32,7 @@
. = ..()
if(camera)
verbs += /obj/item/clothing/head/helmet/proc/toggle_camera
+ verbs += /obj/item/clothing/head/helmet/proc/toggle_expedition_camera_network
if(has_storage)
hold = new /obj/item/storage/internal/helmet(src)
hold.storage_slots = slots
@@ -81,10 +82,13 @@
return ..()
/obj/item/clothing/head/helmet/proc/toggle_camera()
- set name = "Toggle Helmet Camera"
+ set name = "Helmet Camera - Toggle On/Off"
set category = "Object.Equipped"
set src in usr
+ toggle_camera_for(usr)
+
+/obj/item/clothing/head/helmet/proc/toggle_camera_for(mob/user)
if(ispath(camera))
camera = new camera(src)
camera.set_status(0)
@@ -92,15 +96,42 @@
if(camera)
camera.set_status(!camera.status)
if(camera.status)
- camera.c_tag = FindNameFromID(usr)
- to_chat(usr, SPAN_NOTICE("User scanned as [camera.c_tag]. Camera activated."))
+ camera.c_tag = FindNameFromID(user)
+ to_chat(user, SPAN_NOTICE("User scanned as [camera.c_tag]. Camera activated."))
else
- to_chat(usr, SPAN_NOTICE("Camera deactivated."))
+ to_chat(user, SPAN_NOTICE("Camera deactivated."))
+
+/obj/item/clothing/head/helmet/proc/toggle_expedition_camera_network()
+ set name = "Helmet Camera - Toggle Expedition Network"
+ set category = "Object.Equipped"
+ set src in usr
+
+ toggle_expedition_camera_network_for(usr)
+
+/obj/item/clothing/head/helmet/proc/toggle_expedition_camera_network_for(mob/user)
+ if(ispath(camera))
+ camera = new camera(src)
+ camera.set_status(0)
+
+ if(!camera)
+ return
+
+ if(NETWORK_EXPEDITION in camera.network)
+ if(length(camera.network) == 1)
+ to_chat(user, SPAN_WARNING("This camera is already an expedition camera."))
+ return
+
+ camera.remove_network(NETWORK_EXPEDITION)
+ to_chat(user, SPAN_NOTICE("Camera disconnected from the expedition network."))
+ return
+
+ camera.add_network(NETWORK_EXPEDITION)
+ to_chat(user, SPAN_NOTICE("Camera connected to the expedition network."))
/obj/item/clothing/head/helmet/space/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if((distance <= 1) && camera)
- . += FONT_SMALL(SPAN_NOTICE("To toggle the helmet camera, right click the helmet and press Toggle Helmet Camera."))
+ . += FONT_SMALL(SPAN_NOTICE("To toggle or configure the helmet camera, right-click the helmet for options, or equip it and view your new Object verbs."))
. += "This helmet has a built-in camera. It's [!ispath(camera) && camera.status ? "" : "in"]active."
/obj/item/clothing/head/helmet/hos
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index 03e3ef9a6b8..cc69198d0ff 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -101,6 +101,10 @@
/obj/item/clothing/mask/trinary_mask
name = "trinary perfection mask"
desc = "A simple lace mask worn by IPCs and organics alike while within the churches of the Trinary Perfection."
+ desc_extended = "Thought to help dissolve the divisions between organic and synthetic followers, it has been \
+ traditional for a mask to be worn within a holy space among Trinarists since the earliest days of the religion. \
+ Supposedly, masks were mandated among the early followers of Patricia Corkfell as they developed and maintained \
+ Temple, the artificial intelligence doomed to a young death, hence beginning a tradition that lasts to this day."
icon_state = "trinary_mask"
item_state = "trinary_mask"
w_class = WEIGHT_CLASS_SMALL
diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm
index 579f97bcdf7..1eabc0fed0b 100644
--- a/code/modules/clothing/spacesuits/rig/modules/computer.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm
@@ -25,6 +25,36 @@
module.holder.ui_interact(usr)
+/obj/item/ai_verbs/verb/toggle_hardsuit_camera()
+ set category = "Hardsuit"
+ set name = "Helmet Camera - Toggle On/Off"
+ set src in usr
+
+ var/obj/item/rig/rig = usr.get_rig()
+ if(!istype(rig) || !rig.is_integrated_rig_ai(usr))
+ to_chat(usr, SPAN_WARNING("You are not loaded into a hardsuit."))
+ return
+ if(!rig.helmet?.camera)
+ to_chat(usr, SPAN_WARNING("\The [rig] has no helmet camera."))
+ return
+
+ rig.helmet.toggle_camera_for(usr)
+
+/obj/item/ai_verbs/verb/toggle_hardsuit_expedition_camera_network()
+ set category = "Hardsuit"
+ set name = "Helmet Camera - Toggle Expedition Network"
+ set src in usr
+
+ var/obj/item/rig/rig = usr.get_rig()
+ if(!istype(rig) || !rig.is_integrated_rig_ai(usr))
+ to_chat(usr, SPAN_WARNING("You are not loaded into a hardsuit."))
+ return
+ if(!rig.helmet?.camera)
+ to_chat(usr, SPAN_WARNING("\The [rig] has no helmet camera."))
+ return
+
+ rig.helmet.toggle_expedition_camera_network_for(usr)
+
/obj/item/rig_module/ai_container
name = "IIS module"
desc = "An integrated intelligence system module suitable for most hardsuits."
@@ -59,10 +89,17 @@
/obj/item/rig_module/ai_container/proc/update_verb_holder()
if(!verb_holder)
verb_holder = new(src)
+ var/mob/previous_user
+ if(ismob(verb_holder.loc))
+ previous_user = verb_holder.loc
if(integrated_ai)
verb_holder.forceMove(integrated_ai)
else
verb_holder.forceMove(src)
+ if(previous_user?.client)
+ previous_user.client.init_verbs()
+ if(integrated_ai?.client && integrated_ai != previous_user)
+ integrated_ai.client.init_verbs()
/obj/item/rig_module/ai_container/accepts_item(var/obj/item/input_device, var/mob/living/user)
// Check if there's actually an AI to deal with.
@@ -278,9 +315,9 @@
else if(istype(input_device,/obj/structure/machinery/r_n_d/server))
var/obj/structure/machinery/r_n_d/server/input_machine = input_device
incoming_files = input_machine.files
- else if(istype(input_device,/obj/structure/machinery/mecha_part_fabricator))
- var/obj/structure/machinery/mecha_part_fabricator/input_machine = input_device
- incoming_files = input_machine.files
+ else if(istype(input_device, /obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator))
+ var/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator/input_mechfab = input_device
+ incoming_files = input_mechfab.linked_console?.files
if(!incoming_files || !incoming_files.known_tech || !incoming_files.known_tech.len)
to_chat(user, SPAN_WARNING("Memory failure. There is nothing accessible stored on this terminal."))
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index ea9bce08c2d..9899cd47e0a 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -105,12 +105,6 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO
flags_inv = HIDEJUMPSUIT
-/obj/item/clothing/suit/trinary_robes
- name = "trinary perfection robe"
- desc = "Robes worn by those who serve The Trinary Perfection."
- icon_state = "trinary_robes"
- item_state = "trinary_robes"
-
/*
* Misc
*/
diff --git a/code/modules/clothing/suits/modular_armor.dm b/code/modules/clothing/suits/modular_armor.dm
index 031d9e0d93b..75131a1167e 100644
--- a/code/modules/clothing/suits/modular_armor.dm
+++ b/code/modules/clothing/suits/modular_armor.dm
@@ -157,6 +157,11 @@
movement_sounds = SFX_HEAVY_ARMOUR_FOOTSTEPS
+/obj/item/clothing/suit/armor/carrier/press
+ starting_accessories = list(
+ /obj/item/clothing/accessory/armor_plate/press
+ )
+
/obj/item/clothing/accessory/armor_plate
name = "corporate armor plate"
desc = "A particularly light-weight armor plate in stylish corporate black. Unfortunately, not very good if you hold it with your hands."
diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm
index fa63d2ea21e..b448ddfc86c 100644
--- a/code/modules/clothing/under/accessories/accessory.dm
+++ b/code/modules/clothing/under/accessories/accessory.dm
@@ -758,31 +758,6 @@
flippable = FALSE
contained_sprite = TRUE
-/obj/item/clothing/accessory/poncho/trinary
- name = "trinary perfection cape"
- desc = "A brilliant red and brown cape, commonly worn by those who serve the Trinary Perfection."
- icon = 'icons/obj/clothing/ties.dmi'
- icon_override = 'icons/mob/ties.dmi'
- icon_state = "trinary_cape"
- item_state = "trinary_cape"
- overlay_state = "trinary_cape"
- contained_sprite = FALSE
- protects_against_weather = FALSE
-
-/obj/item/clothing/accessory/poncho/trinary/pellegrina
- name = "trinary perfection pellegrina"
- desc = "A brilliant red and brown cape, commonly worn by those who serve the Trinary Perfection. This one is signifcantly shorter."
- icon_state = "trinary_pellegrina"
- item_state = "trinary_pellegrina"
- overlay_state = "trinary_pellegrina"
-
-/obj/item/clothing/accessory/poncho/trinary/shouldercape
- name = "trinary perfection shoulder cape"
- desc = "A brilliant red and brown cape, commonly worn by those who serve the Trinary Perfection. This one is worn over one shoulder."
- icon_state = "trinary_shouldercape"
- item_state = "trinary_shouldercape"
- overlay_state = "trinary_shouldercape"
-
/obj/item/clothing/accessory/poncho/assunzione
name = "\improper Luceian cloak"
desc = "A violet cloak adorned with gold inlays worn by devout adherents of Luceism, the dominant faith of Assunzione."
diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm
index 352afe66cfd..a541f6939be 100644
--- a/code/modules/clothing/under/accessories/badges.dm
+++ b/code/modules/clothing/under/accessories/badges.dm
@@ -21,7 +21,7 @@
/obj/item/clothing/accessory/badge/press
name = "corporate press pass"
- desc = "A corporate reporter's pass, emblazoned with the SCC logo."
+ desc = "A corporate reporter's pass, emblazoned with a company logo."
icon_state = "pressbadge"
item_state = "pbadge"
overlay_state = "pbadge"
@@ -33,9 +33,9 @@
/obj/item/clothing/accessory/badge/press/independent
name = "press pass"
- desc = "A freelance journalist's pass."
+ desc = "An independent reporter's pass."
icon_state = "pressbadge-i"
- badge_string = "Freelance Journalist"
+ badge_string = "Independent Reporter"
/obj/item/clothing/accessory/badge/press/plastic
name = "plastic press pass"
diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm
index 706073e6da9..d54c87ab43e 100644
--- a/code/modules/clothing/under/syndicate.dm
+++ b/code/modules/clothing/under/syndicate.dm
@@ -4,7 +4,6 @@
icon_state = "syndicate"
item_state = "bl_suit"
worn_state = "syndicate"
- has_sensor = SUIT_NO_SENSORS
armor = list(
MELEE = ARMOR_MELEE_MINOR
)
@@ -36,6 +35,7 @@
icon_state = "ninja"
item_state = "ninja"
worn_state = "ninja"
+ has_sensor = SUIT_NO_SENSORS
/obj/item/clothing/under/syndicate/hammertail
name = "\improper crimson jumpsuit"
@@ -49,3 +49,4 @@
item_state = "hammertail"
worn_state = "hammertail"
contained_sprite = TRUE
+ has_sensor = SUIT_NO_SENSORS
diff --git a/code/modules/cooking/machinery/cooking_machines/fryer.dm b/code/modules/cooking/machinery/cooking_machines/fryer.dm
index 5e767d3dbe0..115bf37a676 100644
--- a/code/modules/cooking/machinery/cooking_machines/fryer.dm
+++ b/code/modules/cooking/machinery/cooking_machines/fryer.dm
@@ -22,8 +22,14 @@
/obj/item/reagent_containers/cooking_container/fryer
)
+ component_types = list(
+ /obj/item/circuitboard/fryer,
+ /obj/item/stock_parts/capacitor = 3,
+ /obj/item/stock_parts/scanning_module = 1,
+ /obj/item/stock_parts/matter_bin = 2)
+
var/datum/reagents/oil
- var/optimal_oil = 9000//90 litres of cooking oil
+ var/optimal_oil = 100 // 1/10 of a cooking oil tank
/obj/structure/machinery/appliance/cooker/fryer/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
diff --git a/code/modules/cooking/machinery/cooking_machines/microwave.dm b/code/modules/cooking/machinery/cooking_machines/microwave.dm
index ce1492387b9..b4f859e53c4 100644
--- a/code/modules/cooking/machinery/cooking_machines/microwave.dm
+++ b/code/modules/cooking/machinery/cooking_machines/microwave.dm
@@ -30,6 +30,12 @@
/// Multiplier for break chance
var/break_multiplier = 1.0
+ component_types = list(
+ /obj/item/circuitboard/microwave,
+ /obj/item/stock_parts/capacitor = 3,
+ /obj/item/stock_parts/scanning_module = 1,
+ /obj/item/stock_parts/matter_bin = 2)
+
starts_with = list(
/obj/item/reagent_containers/cooking_container/microwave_plate
)
diff --git a/code/modules/cooking/machinery/cooking_machines/oven.dm b/code/modules/cooking/machinery/cooking_machines/oven.dm
index d5d54d7c0b9..761ec0487d6 100644
--- a/code/modules/cooking/machinery/cooking_machines/oven.dm
+++ b/code/modules/cooking/machinery/cooking_machines/oven.dm
@@ -26,6 +26,13 @@
var/door_open_overlay = "ovenopen_on"
var/door_closed_overlay = "ovenclosed_on"
+ component_types = list(
+ /obj/item/circuitboard/oven,
+ /obj/item/stock_parts/capacitor = 3,
+ /obj/item/stock_parts/scanning_module = 1,
+ /obj/item/stock_parts/matter_bin = 2)
+
+
starts_with = list(
/obj/item/reagent_containers/cooking_container/oven,
/obj/item/reagent_containers/cooking_container/oven,
diff --git a/code/modules/cooking/machinery/cooking_machines/stove.dm b/code/modules/cooking/machinery/cooking_machines/stove.dm
index 1bbabb66163..ea7431e465e 100644
--- a/code/modules/cooking/machinery/cooking_machines/stove.dm
+++ b/code/modules/cooking/machinery/cooking_machines/stove.dm
@@ -22,6 +22,12 @@
stat = POWEROFF //Starts turned off
+ component_types = list(
+ /obj/item/circuitboard/stove,
+ /obj/item/stock_parts/capacitor = 3,
+ /obj/item/stock_parts/scanning_module = 1,
+ /obj/item/stock_parts/matter_bin = 2)
+
starts_with = list(
/obj/item/reagent_containers/cooking_container/skillet,
/obj/item/reagent_containers/cooking_container/pot,
diff --git a/code/modules/cooking/recipes/cultural/recipes_tajara.dm b/code/modules/cooking/recipes/cultural/recipes_tajara.dm
index 9acab270fa6..fd29f50ab64 100644
--- a/code/modules/cooking/recipes/cultural/recipes_tajara.dm
+++ b/code/modules/cooking/recipes/cultural/recipes_tajara.dm
@@ -437,3 +437,25 @@
result_quantity = 2
reagent_mix = RECIPE_REAGENT_REPLACE
result = /obj/item/reagent_containers/food/snacks/cheese_twig
+
+/singleton/recipe/meaty_breadbake
+ appliance = OVEN
+ fruit = list("mtear" = 1)
+ reagents = list(/singleton/reagent/sodiumchloride = 2, /singleton/reagent/nutriment/protein = 6)
+ items = list(
+ /obj/item/reagent_containers/food/snacks/tajaran_bread,
+ )
+ result = /obj/item/reagent_containers/food/snacks/breadbake_meat
+ reagent_mix = RECIPE_REAGENT_REPLACE
+
+/singleton/recipe/cheesy_breadbake
+ appliance = OVEN
+ fruit = list("mtear" = 1)
+ reagents = list(/singleton/reagent/sodiumchloride = 2)
+ items = list(
+ /obj/item/reagent_containers/food/snacks/tajaran_bread,
+ /obj/item/reagent_containers/food/snacks/adhomian_cheese_wedge,
+ /obj/item/reagent_containers/food/snacks/adhomian_cheese_wedge
+ )
+ result = /obj/item/reagent_containers/food/snacks/breadbake_cheese
+ reagent_mix = RECIPE_REAGENT_REPLACE
diff --git a/code/modules/custom_ka/upgrade_chips.dm b/code/modules/custom_ka/upgrade_chips.dm
index df9125c1036..395fdc2e91a 100644
--- a/code/modules/custom_ka/upgrade_chips.dm
+++ b/code/modules/custom_ka/upgrade_chips.dm
@@ -57,8 +57,8 @@
desc = "Kinetic blasts explode in a massively increased AoE radius at significantly increased power drain per shot, leveraging the exosuit's internal power core to sustain itself."
icon_state = "upgrade_chip"
cost_increase = 10
- aoe_increase = 4
- range_increase = 2
+ aoe_increase = 2
+ range_increase = 3
/obj/item/custom_ka_upgrade/upgrade_chips/illegal
name = "illegal custom KA upgrade chip"
diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm
index 40d5da75fca..221d7d461c3 100644
--- a/code/modules/customitems/item_defines.dm
+++ b/code/modules/customitems/item_defines.dm
@@ -1444,3 +1444,63 @@ All custom items with worn sprites must follow the contained sprite system: http
item_state = "zzzhao_painting"
sign_state = "zzzhao_painting"
w_class = WEIGHT_CLASS_NORMAL
+
+/obj/item/clothing/accessory/poncho/tajarancloak/fluff/sophonisa_cape // Sophonia Cape - Dido Sophonia - Fyni
+ name = "sophonisa cape"
+ desc = " This shoulder cap is the dark navy blue of the ancient Carian patrician family, Sophonisa. Two thin flowing strands of fabric hang off the back, one in Carian purple, the other in white showing the golden handed icon of the Sophonisa. Around the neck and hood is a white furred band."
+ desc_extended = "The Sophonisa family, represented by a sinister golden hand set in a purple moon on a field of silver, is an ancient Carian patrician house which predates the Dominian viceroyalty of the planet and is known for a long line of bankers who credit accurate readings of the \
+ stars for their success. Even today, they hold a non-voting seat on the Adirim, where they support House Kaneko - and have long been rumoured to hold some discontent to House Caladius due to financial conflicts."
+ icon = 'icons/obj/custom_items/dido_cape.dmi'
+ icon_override = 'icons/obj/custom_items/dido_cape.dmi'
+ icon_state = "sophonisa_cape"
+ item_state = "sophonisa_cape"
+
+ var/hoodtype = /obj/item/clothing/head/winterhood/fluff/sophonisa_hood
+
+/obj/item/clothing/accessory/poncho/tajarancloak/fluff/sophonisa_cape/Initialize()
+ . = ..()
+ new hoodtype(src)
+
+/obj/item/clothing/head/winterhood/fluff/sophonisa_hood
+ name = "furred hood"
+ desc = "A furred hood attached to a cloak."
+ icon = 'icons/obj/custom_items/dido_cape.dmi'
+ icon_override = 'icons/obj/custom_items/dido_cape.dmi'
+ icon_state = "sophonisa_cape_hood"
+ contained_sprite = TRUE
+ flags_inv = HIDEEARS | BLOCKHAIR | HIDEEARS
+
+/obj/item/clothing/accessory/poncho/tajarancloak/fluff/sophonisa_cape/update_icon(var/hooded = FALSE)
+ var/obj/item/clothing/accessory/poncho/tajarancloak/fluff/sophonisa_cape/S = get_accessory(/obj/item/clothing/accessory/poncho/tajarancloak/fluff/sophonisa_cape)
+ SEND_SIGNAL(S, COMSIG_ITEM_STATE_CHECK, args)
+ . = ..()
+ S.item_state = "[S.icon_state][hooded ? "_up" : ""]"
+ S.accessory_mob_overlay = null
+ SEND_SIGNAL(S, COMSIG_ITEM_ICON_UPDATE)
+ if(usr)
+ usr.update_inv_w_uniform()
+ usr.update_inv_wear_suit()
+
+/obj/item/clothing/accessory/poncho/tajarancloak/fluff/sophonisa_cape/verb/change_hood()
+ set name = "Toggle Hood"
+ set category = "Object"
+ set src in usr
+
+ if(use_check_and_message(usr))
+ return
+
+ var/obj/item/clothing/accessory/poncho/tajarancloak/fluff/sophonisa_cape/S = get_accessory(/obj/item/clothing/accessory/poncho/tajarancloak/fluff/sophonisa_cape)
+ if(!S)
+ return
+
+ SEND_SIGNAL(S, COMSIG_ITEM_UPDATE_STATE, S)
+ S.update_icon()
+
+/obj/item/clothing/accessory/poncho/tajarancloak/fluff/sophonisa_cape/on_attached(obj/item/clothing/S, mob/user as mob)
+ ..()
+ has_suit.verbs += /obj/item/clothing/accessory/poncho/tajarancloak/fluff/sophonisa_cape/verb/change_hood
+
+/obj/item/clothing/accessory/poncho/tajarancloak/fluff/sophonisa_cape/on_removed(mob/user as mob)
+ if(has_suit)
+ has_suit.verbs -= /obj/item/clothing/accessory/poncho/tajarancloak/fluff/sophonisa_cape/verb/change_hood
+ ..()
diff --git a/code/modules/effects/particles/native_particles.dm b/code/modules/effects/particles/native_particles.dm
index f9cd7b9557a..ae04ca733a1 100644
--- a/code/modules/effects/particles/native_particles.dm
+++ b/code/modules/effects/particles/native_particles.dm
@@ -16,6 +16,21 @@
icon = 'icons/effects/native_particles.dmi'
icon_state = "cooking_smoke"
+/particles/door_destruction
+ name = "door destruction"
+ width = 256
+ height = 256
+ count = 150
+ spawning = 12
+ lifespan = 20
+ fade = 12
+ position = generator("box", list(-24, -8, 0), list(24, 16, 48))
+ gravity = list(0.5, 0)
+ friction = 0.2
+ drift = generator("sphere", 0, 1.5)
+ icon = 'icons/effects/native_particles.dmi'
+ icon_state = "cooking_smoke"
+
/particles/bar_smoke
width = 256
height = 256
@@ -112,6 +127,9 @@
render_target = HEAT_EFFECT_PLATE_RENDER_TARGET
appearance_flags = PIXEL_SCALE | NO_CLIENT_COLOR
+/obj/particle_emitter/door_destruction
+ particle_type = "door destruction"
+
/obj/particle_emitter/heat/Initialize()
. = ..()
diff --git a/code/modules/fabrication/_fabricator.dm b/code/modules/fabrication/_fabricator.dm
index 7cb8853658e..6de442a3313 100644
--- a/code/modules/fabrication/_fabricator.dm
+++ b/code/modules/fabrication/_fabricator.dm
@@ -188,6 +188,7 @@ ABSTRACT_TYPE(/obj/structure/machinery/fabricator)
return TRUE
if(default_deconstruction_crowbar(user, attacking_item))
return TRUE
+
if(default_part_replacement(user, attacking_item))
return TRUE
@@ -212,11 +213,34 @@ ABSTRACT_TYPE(/obj/structure/machinery/fabricator)
load_lathe(attacking_item, user)
return TRUE
+/obj/structure/machinery/fabricator/autolathe/proc/recycle_item_contents(obj/item/R, mob/user)
+ var/recycled = 0
+ var/recyclable = 0
+ var/rejected = 0
+
+ for(var/obj/item/item in R.contents.Copy())
+ if(!item.matter || !item.recyclable)
+ continue
+ recyclable++
+ if(load_lathe(item, user, FALSE))
+ recycled++
+ else
+ rejected++
+
+ if(recycled)
+ to_chat(user, SPAN_NOTICE("You recycle [recycled] item\s from \the [R] into \the [src]."))
+ else if(!recyclable)
+ to_chat(user, SPAN_WARNING("\The [R] contains no recyclable materials for \the [src]."))
+ else
+ to_chat(user, SPAN_WARNING("\The [src] could not accept any recyclable contents from \the [R]."))
+
+ if(rejected)
+ to_chat(user, SPAN_WARNING("Some contents could not be accepted and remain in \the [R]."))
+
/obj/structure/machinery/fabricator/attack_hand(mob/user)
user.set_machine(src)
ui_interact(user)
-///
/obj/structure/machinery/fabricator/proc/is_functioning()
. = use_power != POWER_USE_OFF && !(fab_status_flags & FAB_DISABLED)
diff --git a/code/modules/fabrication/fabricator_intake.dm b/code/modules/fabrication/fabricator_intake.dm
index 18c131f066f..4aedbffe3d1 100644
--- a/code/modules/fabrication/fabricator_intake.dm
+++ b/code/modules/fabrication/fabricator_intake.dm
@@ -3,13 +3,14 @@
#define FILL_INCOMPLETELY "Fill Incompletely"
///Loads the lathe with materials
-/obj/structure/machinery/fabricator/proc/load_lathe(obj/item/loading_item, mob/user)
+/obj/structure/machinery/fabricator/proc/load_lathe(obj/item/loading_item, mob/user, show_messages = TRUE)
//Resources are being loaded.
var/obj/item/eating = loading_item
if(!eating.matter || !eating.recyclable)
- to_chat(user, SPAN_WARNING("\The [eating] cannot be recycled by \the [src]."))
- return
+ if(show_messages)
+ to_chat(user, SPAN_WARNING("\The [eating] cannot be recycled by \the [src]."))
+ return FALSE
var/list/fill_status = list() // Used to determine message in cases of multiple materials.
var/total_used = 0 // Amount of material used.
@@ -44,17 +45,21 @@
total_used += total_material
mass_per_sheet += eating.matter[material]
- if(total_used <= 0 || mass_per_sheet <= 0)
- if(fill_status[NO_SPACE])
- to_chat(user, SPAN_WARNING("\The [src] is full of [english_list(fill_status[NO_SPACE])]. Please remove some material in order to insert more."))
- else
- to_chat(user, SPAN_WARNING("\The [src] cannot accept any materials from \the [eating]."))
- return
+ if(total_used <= 0)
+ if(show_messages)
+ if(fill_status[NO_SPACE])
+ to_chat(user, SPAN_WARNING("\The [src] is full of [english_list(fill_status[NO_SPACE])]. Please remove some material in order to insert more."))
+ else
+ to_chat(user, SPAN_WARNING("\The [eating] contains no materials accepted by \the [src]."))
+ return FALSE
- if(fill_status[FILL_COMPLETELY])
- to_chat(user, SPAN_NOTICE("You fill \the [src] to capacity with [english_list(fill_status[FILL_COMPLETELY])][is_stack ? "." : " from \the [eating]."]"))
- else if(fill_status[FILL_INCOMPLETELY])
- to_chat(user, SPAN_NOTICE("You fill \the [src] with [english_list(fill_status[FILL_INCOMPLETELY])][is_stack ? "." : " from \the [eating]."]"))
+ if(show_messages)
+ if(fill_status[NO_SPACE])
+ to_chat(user, SPAN_WARNING("\The [src] could not accept [english_list(fill_status[NO_SPACE])] from \the [eating]."))
+ if(fill_status[FILL_COMPLETELY])
+ to_chat(user, SPAN_NOTICE("You fill \the [src] to capacity with [english_list(fill_status[FILL_COMPLETELY])][is_stack ? "." : " from \the [eating]."]"))
+ else if(fill_status[FILL_INCOMPLETELY])
+ to_chat(user, SPAN_NOTICE("You fill \the [src] with [english_list(fill_status[FILL_INCOMPLETELY])][is_stack ? "." : " from \the [eating]."]"))
// Plays metal insertion animation.
if(istype(eating, /obj/item/stack/material) && does_flick)
@@ -76,6 +81,8 @@
user.remove_from_mob(loading_item)
qdel(loading_item)
+ return TRUE
+
#undef NO_SPACE
#undef FILL_COMPLETELY
#undef FILL_INCOMPLETELY
diff --git a/code/modules/fabrication/fabricators/fabricator_autolathe.dm b/code/modules/fabrication/fabricators/fabricator_autolathe.dm
index 6b8458ba8e7..22ac3d3d19d 100644
--- a/code/modules/fabrication/fabricators/fabricator_autolathe.dm
+++ b/code/modules/fabrication/fabricators/fabricator_autolathe.dm
@@ -4,6 +4,37 @@
icon = 'icons/obj/machinery/fabricators/autolathe.dmi'
icon_state = "autolathe"
+/obj/structure/machinery/fabricator/autolathe/mechanics_hints(mob/user, distance, is_adjacent)
+ . = ..()
+ . += "Alt-click with a rapid part exchange device or open circuit assembly in your active hand to recycle its compatible contents."
+
+/obj/structure/machinery/fabricator/autolathe/AltClick(mob/user)
+ . = ..()
+ if(use_check_and_message(user))
+ return
+
+
+ if(fab_status_flags & FAB_BUSY)
+ to_chat(user, SPAN_NOTICE("\The [src] is busy. Please wait for the completion of the previous operation."))
+ return
+
+ if(stat || !is_functioning())
+ to_chat(user, SPAN_WARNING("\The [src] cannot accept materials in its current state."))
+ return
+
+ var/obj/item/electronic_assembly/recyclable_container = user.get_active_hand()
+ if(istype(recyclable_container, /obj/item/electronic_assembly))
+ var/obj/item/electronic_assembly/recyclable_circuit_assembly = recyclable_container
+ if(recyclable_circuit_assembly.opened)
+ recycle_item_contents(recyclable_container, user)
+ return
+ else
+ to_chat(user, SPAN_WARNING("\The [recyclable_circuit_assembly] must be open before it's contents can be recycled."))
+
+ if(istype(recyclable_container, /obj/item/storage/part_replacer))
+ recycle_item_contents(recyclable_container, user)
+ return
+
/obj/structure/machinery/fabricator/autolathe/mounted
name = "\improper mounted autolathe"
density = FALSE
diff --git a/code/modules/heavy_vehicle/components/_components.dm b/code/modules/heavy_vehicle/components/_components.dm
index 2aa5239d741..ab94bdb1d65 100644
--- a/code/modules/heavy_vehicle/components/_components.dm
+++ b/code/modules/heavy_vehicle/components/_components.dm
@@ -111,6 +111,9 @@
if(!damageable_components.len) return
var/obj/item/robot_parts/robot_component/RC = pick(damageable_components)
if(RC.take_damage(brute, burn))
+ playsound(src, 'sound/mecha/internaldmgalarm.ogg', 100, 0, falloff_exponent = (SOUND_FALLOFF_EXPONENT+4))
+ playsound(src, 'sound/mecha/critdestr.ogg', 100, 0, falloff_exponent = (SOUND_FALLOFF_EXPONENT+4))
+ spark(src, 8)
qdel(RC)
update_components()
diff --git a/code/modules/heavy_vehicle/components/armor.dm b/code/modules/heavy_vehicle/components/armor.dm
index 8f1a64c3256..91e5a27b094 100644
--- a/code/modules/heavy_vehicle/components/armor.dm
+++ b/code/modules/heavy_vehicle/components/armor.dm
@@ -11,6 +11,7 @@
RAD = ARMOR_RAD_MINOR
)
origin_tech = list(TECH_MATERIAL = 1)
+ var/emp_protection = 0
/obj/item/robot_parts/robot_component/armor/mech/Initialize()
. = ..()
@@ -33,8 +34,8 @@
origin_tech = list(TECH_MATERIAL = 3)
/obj/item/robot_parts/robot_component/armor/mech/em
- name = "EM-shielded armor plating"
- desc = "A shielded plating that sorrounds the eletronics and protects them from electromagnetic radiation."
+ name = "anti EM reactive armor plating"
+ desc = "An advanced active-defense system that insulates the eletronics and destructively interferes with electromagnetic radiation."
icon_state = "armor_e"
icon_state_broken = "armor_e_broken"
armor = list(
@@ -47,6 +48,7 @@
RAD = ARMOR_RAD_SMALL
)
origin_tech = list(TECH_MATERIAL = 3)
+ emp_protection = 1
/obj/item/robot_parts/robot_component/armor/mech/combat
name = "heavy combat plating"
diff --git a/code/modules/heavy_vehicle/components/body.dm b/code/modules/heavy_vehicle/components/body.dm
index 38ec7742978..60f9077739b 100644
--- a/code/modules/heavy_vehicle/components/body.dm
+++ b/code/modules/heavy_vehicle/components/body.dm
@@ -19,7 +19,7 @@
var/obj/item/robot_parts/robot_component/diagnosis_unit/diagnostics
var/obj/item/cell/mecha/cell
var/cell_type = /obj/item/cell/mecha
- var/obj/item/robot_parts/robot_component/armor/mech_armor
+ var/obj/item/robot_parts/robot_component/armor/mech/mech_armor
var/obj/structure/machinery/portable_atmospherics/canister/air_supply
var/datum/gas_mixture/cockpit
var/pilot_offset_x = 0
@@ -30,6 +30,13 @@
var/pilot_coverage = 100
var/transparent_cabin = FALSE
var/hide_pilot = TRUE
+ ///Percentage chance for a projectile to hit the pilot if the hatch is open or penetrated. 100% means the pilot will always be hit, 0% means the pilot will never be hit. Side hits divide this value by 4.
+ var/cockpit_hatch_size = 80
+ ///Multiplier for damage dealt to the pilot when hit by projectiles that penetrate the mech's cockpit.
+ var/cockpit_pilot_damage_multiplier = 0.5
+ ///Multiplier for armour piercing value of a hit to the pilot when hit by projectiles that penetrate the mech's cockpit.
+ var/cockpit_pilot_armour_piercing_multiplier = 0.5
+
has_hardpoints = list(HARDPOINT_BACK, HARDPOINT_LEFT_SHOULDER, HARDPOINT_RIGHT_SHOULDER)
/**
@@ -70,6 +77,12 @@
QDEL_NULL(air_supply)
. = ..()
+/obj/item/mech_component/chassis/mechanics_hints(mob/user, distance, is_adjacent)
+ . = ..()
+ . += SPAN_NOTICE("This chasis covers [pilot_coverage]% of the pilot's body.")
+ . += SPAN_NOTICE("When open or destroyed the cockpit hatch will allow [cockpit_hatch_size]% of incoming attacks to hit the pilot.")
+ . += SPAN_NOTICE("When closed but destroyed the cockpit hatch will reduce damage to the pilot by [round((1 - cockpit_pilot_damage_multiplier) * 100, 0.1)]%.")
+
/obj/item/mech_component/chassis/get_missing_parts_text()
. = ..()
diff --git a/code/modules/heavy_vehicle/equipment/_equipment.dm b/code/modules/heavy_vehicle/equipment/_equipment.dm
index 1737135917a..d1c6c1a784a 100644
--- a/code/modules/heavy_vehicle/equipment/_equipment.dm
+++ b/code/modules/heavy_vehicle/equipment/_equipment.dm
@@ -77,11 +77,13 @@
return
/obj/item/mecha_equipment/proc/installed(var/mob/living/heavy_vehicle/_owner)
+ SHOULD_CALL_PARENT(TRUE)
owner = _owner
//generally attached. Nothing should be able to grab it
canremove = FALSE
/obj/item/mecha_equipment/proc/uninstalled()
+ SHOULD_CALL_PARENT(TRUE)
if(active)
deactivate()
owner = null
@@ -89,7 +91,7 @@
/obj/item/mecha_equipment/Destroy()
owner = null
- . = ..()
+ return ..()
/obj/item/mecha_equipment/mob_can_unequip(mob/M, slot, disable_warning)
. = ..()
diff --git a/code/modules/heavy_vehicle/equipment/combat.dm b/code/modules/heavy_vehicle/equipment/combat.dm
index 931219f1c8c..09376c49205 100644
--- a/code/modules/heavy_vehicle/equipment/combat.dm
+++ b/code/modules/heavy_vehicle/equipment/combat.dm
@@ -296,11 +296,12 @@
desc = "The Hephaestus Armature system is a well liked energy deflector system designed to stop any projectile before it has a chance to become a threat."
icon_state = "shield_droid"
var/obj/aura/mechshield/aura
- var/max_charge = 150
- var/charge = 150
+ var/max_charge = 100
+ var/charge = 100
var/last_recharge = 0
var/charging_rate = 7500 * CELLRATE
var/cooldown = 3.5 SECONDS // Time until we can recharge again after a blocked impact
+ var/efficiency = 0.1 // How much power is required to recharge 1 point of shield charge
restricted_hardpoints = list(HARDPOINT_BACK)
restricted_software = list(MECH_SOFTWARE_WEAPONS)
module_hints = list(
@@ -331,7 +332,7 @@
last_recharge = world.time
- if(difference > 0)
+ if(difference >= 0)
for(var/mob/pilot in owner.pilots)
to_chat(pilot, FONT_LARGE(SPAN_WARNING("Warning: Deflector shield failure detected, shutting down.")))
toggle()
@@ -379,8 +380,10 @@
if((world.time - last_recharge) < cooldown)
return
- var/actual_required_power = clamp(max_charge - charge, 0, charging_rate)
- owner.use_cell_power(actual_required_power)
+ var/actual_required_power = clamp(max_charge * efficiency - charge * efficiency, 0, charging_rate)
+ var/actual_power_used = owner.use_cell_power(actual_required_power)
+ if(actual_power_used > 0)
+ charge = clamp(charge + actual_power_used, 0, max_charge)
/obj/item/mecha_equipment/shield/get_hardpoint_status_value()
return charge / max_charge
@@ -434,24 +437,51 @@
else
icon_state = "shield_null"
+/obj/aura/mechshield/handle_bullet_act(datum/source, obj/projectile/projectile)
+ if(!active || !shields || !shields.charge)
+ return FALSE
+
+ var/incoming_attack_direction = projectile.starting ? get_dir(shields, projectile.starting) : null
+ if(!(dir & incoming_attack_direction))
+ return FALSE
+
+ var/damage = projectile.get_structure_damage()
+ if(!damage)
+ damage = projectile.damage
+
+ projectile.damage = shields.stop_damage(damage)
+ user.visible_message(SPAN_WARNING("\The [shields.owner]'s shields flash and crackle."))
+ flick("shield_impact", src)
+ playsound(user, 'sound/effects/basscannon.ogg', 35, TRUE)
+ //light up the night.
+ new /obj/effect/smoke/illumination(get_turf(src), 5, 4, 1, "#ffffff")
+ spark(get_turf(src), 5, GLOB.alldirs)
+ playsound(get_turf(src), SFX_SPARKS, 25, TRUE)
+ return COMPONENT_BULLET_BLOCKED
+
/obj/aura/mechshield/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit)
- if(!active)
- return
+ SHOULD_CALL_PARENT(FALSE)
- . = ..()
+ if(!active || !shields || !shields.charge)
+ return FALSE
- if(shields?.charge)
- hitting_projectile.damage = shields.stop_damage(hitting_projectile.damage)
- user.visible_message(SPAN_WARNING("\The [shields.owner]'s shields flash and crackle."))
- flick("shield_impact", src)
- playsound(user, 'sound/effects/basscannon.ogg', 35, TRUE)
- //light up the night.
- new /obj/effect/smoke/illumination(get_turf(src), 5, 4, 1, "#ffffff")
- if(hitting_projectile.damage <= 0)
- return AURA_FALSE|AURA_CANCEL
+ var/incoming_attack_direction = hitting_projectile.starting ? get_dir(shields, hitting_projectile.starting) : null
+ if(!(dir & incoming_attack_direction))
+ return FALSE
- spark(get_turf(src), 5, GLOB.alldirs)
- playsound(get_turf(src), SFX_SPARKS, 25, TRUE)
+ var/damage = hitting_projectile.get_structure_damage()
+ if(!damage)
+ damage = hitting_projectile.damage
+
+ hitting_projectile.damage = shields.stop_damage(damage)
+ user.visible_message(SPAN_WARNING("\The [shields.owner]'s shields flash and crackle."))
+ flick("shield_impact", src)
+ playsound(user, 'sound/effects/basscannon.ogg', 35, TRUE)
+ //light up the night.
+ new /obj/effect/smoke/illumination(get_turf(src), 5, 4, 1, "#ffffff")
+ spark(get_turf(src), 5, GLOB.alldirs)
+ playsound(get_turf(src), SFX_SPARKS, 25, TRUE)
+ return AURA_FALSE|AURA_CANCEL
/obj/aura/mechshield/hitby(atom/movable/hitting_atom, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
. = ..()
diff --git a/code/modules/heavy_vehicle/equipment/mining.dm b/code/modules/heavy_vehicle/equipment/mining.dm
index b83df10c806..bbd6d675582 100644
--- a/code/modules/heavy_vehicle/equipment/mining.dm
+++ b/code/modules/heavy_vehicle/equipment/mining.dm
@@ -121,7 +121,7 @@ ABSTRACT_TYPE(/obj/item/mecha_equipment/mounted_system/mining)
holding_type = /obj/item/gun/custom_ka/exosuit/heavy
module_hints = list(
"Left Click: Fire a kinetic blast in the target direction.",
- "WARNING: This weapon produces a mining blast eight tiles in radius.",
+ "WARNING: This weapon produces a mining blast six tiles in radius.",
"A mech can only fire within a 90 degree arc in the direction it is currently facing.",
"This weapon passively regenerates its ammunition using the mech's power supply.",
)
@@ -162,23 +162,24 @@ ABSTRACT_TYPE(/obj/item/mecha_equipment/mounted_system/mining)
/// How long the cooldown is before the ore can be pulsed again
var/cooldown_time = 5 SECONDS
- /// How many chunks of ore can be moved at one time
- var/static/ore_limit = 50
-
/// Radius of the summoner's pickup range.
var/pickup_range = 7
+ /// The maximum number of ores that can be picked up per pulse.
+ var/ore_limit = 150
+
/// The linked warp extraction ore box.
var/obj/structure/ore_box/linked_box
module_hints = list(
"Left Click (Target Ore Box): If the the target has a warp extraction beacon, link the summoner to it.",
- "Alt Click (Icon): Teleport up to 50 ores within a radius of 7 tiles to the user.",
+ "Alt Click (Icon): Teleport up to 150 ores within a radius of 10 tiles to the user.",
"If a warp ore box has been linked, it will teleport ores there.",
"Otherwise if the mech is also equipped with a mounted clamp that contains an ore box, ores will be teleported to said box.",
+ "If linked to an ore box, walking over ores will also teleport them into the crate"
)
-/obj/item/mecha_equipment/ore_summoner/afterattack(var/atom/target, var/mob/living/user, var/inrange, var/params)
+/obj/item/mecha_equipment/ore_summoner/afterattack(atom/target, mob/living/user, inrange, params)
if(istype(target, /obj/structure/ore_box))
var/obj/structure/ore_box/box = target
if (box.warp_core)
@@ -186,12 +187,12 @@ ABSTRACT_TYPE(/obj/item/mecha_equipment/mounted_system/mining)
to_chat(user, SPAN_NOTICE("You link \the [src] to \the [target]"))
return FALSE
-/obj/item/mecha_equipment/ore_summoner/attack_self(var/mob/user)
+/obj/item/mecha_equipment/ore_summoner/attack_self(mob/user)
. = ..()
if(.)
summon_ore(user)
-/obj/item/mecha_equipment/ore_summoner/proc/summon_ore(var/mob/user)
+/obj/item/mecha_equipment/ore_summoner/proc/summon_ore(mob/user)
if(last_use + cooldown_time >= world.time)
to_chat(user, SPAN_WARNING("The ore summoner is recalibrating..."))
return
@@ -219,7 +220,7 @@ ABSTRACT_TYPE(/obj/item/mecha_equipment/mounted_system/mining)
ore.forceMove(ore_box)
else
ore.forceMove(our_turf)
- limit -= 1
+ limit--
CHECK_TICK
last_use = world.time
@@ -230,12 +231,13 @@ ABSTRACT_TYPE(/obj/item/mecha_equipment/mounted_system/mining)
/obj/item/mecha_equipment/ore_summoner/get_hardpoint_maptext()
return last_use + cooldown_time < world.time ? "Ready" : "Recharging"
-/obj/item/mecha_equipment/ore_summoner/proc/check_linked_box(var/mob/user)
+/obj/item/mecha_equipment/ore_summoner/proc/check_linked_box(mob/user)
if(!linked_box)
return FALSE
if(!linked_box.warp_core)
- to_chat(user, SPAN_WARNING("\The [linked_box] lost its warp beacon!"))
+ if (user)
+ to_chat(user, SPAN_WARNING("\The [linked_box] lost its warp beacon!"))
linked_box = null
return FALSE
@@ -243,4 +245,45 @@ ABSTRACT_TYPE(/obj/item/mecha_equipment/mounted_system/mining)
/obj/item/mecha_equipment/ore_summoner/Destroy()
linked_box = null // Clear the reference to prevent hard deletes.
+ if (owner)
+ UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
return ..()
+
+/obj/item/mecha_equipment/ore_summoner/installed()
+ . = ..()
+ if (!owner)
+ return
+
+ RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(pickup_ores))
+
+/obj/item/mecha_equipment/ore_summoner/uninstalled()
+ if (owner)
+ UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
+ return ..()
+
+/obj/item/mecha_equipment/ore_summoner/proc/pickup_ores()
+ SIGNAL_HANDLER
+ if (!owner)
+ return
+
+ var/obj/structure/ore_box/ore_box
+ if(check_linked_box())
+ ore_box = linked_box
+ else
+ for(var/hardpoint in owner.hardpoints)
+ var/obj/item/mecha_equipment/clamp/clamp = owner.hardpoints[hardpoint]
+ if(!istype(clamp))
+ continue
+ var/obj/structure/ore_box/box = locate() in clamp
+ if(box)
+ ore_box = box
+ break
+ if (!ore_box)
+ return
+
+ var/turf/our_turf = get_turf(owner)
+ if (!our_turf)
+ return
+
+ for (var/obj/item/ore/ore in our_turf)
+ ore.forceMove(ore_box)
diff --git a/code/modules/heavy_vehicle/interface/screen_objects.dm b/code/modules/heavy_vehicle/interface/screen_objects.dm
index 7f380066c3c..91ee650370c 100644
--- a/code/modules/heavy_vehicle/interface/screen_objects.dm
+++ b/code/modules/heavy_vehicle/interface/screen_objects.dm
@@ -160,6 +160,7 @@
else
if(owner.set_hardpoint(hardpoint_tag))
icon_state = "hardpoint_selected"
+ playsound(owner, 'sound/weapons/laser_safetyon.ogg', 50, 0, falloff_exponent = (SOUND_FALLOFF_EXPONENT+4))
/atom/movable/screen/mecha/eject
name = "eject"
@@ -216,6 +217,7 @@
var/main_color = owner.use_air ? "#d1d1d1" : "#525252"
maptext = "AIR"
notify_user(usr, SPAN_NOTICE("Auxiliary atmospheric system [owner.use_air ? "enabled" : "disabled"]."))
+ playsound(owner, 'sound/weapons/laser_safetyon.ogg', 50, 0, falloff_exponent = (SOUND_FALLOFF_EXPONENT+4))
/atom/movable/screen/mecha/toggle/maint
name = "toggle maintenance protocol"
@@ -230,6 +232,7 @@
var/main_color = owner.maintenance_protocols ? "#d1d1d1" : "#525252"
maptext = "MAINT"
notify_user(usr, SPAN_NOTICE("Maintenance protocols [owner.maintenance_protocols ? "enabled" : "disabled"]."))
+ playsound(owner, 'sound/weapons/laser_safetyon.ogg', 50, 0, falloff_exponent = (SOUND_FALLOFF_EXPONENT+4))
/atom/movable/screen/mecha/toggle/power_control
name = "power control"
@@ -263,6 +266,7 @@
var/main_color = owner.hardpoints_locked ? "#d1d1d1" : "#525252"
maptext = "GEAR"
notify_user(usr, SPAN_NOTICE("Hardpoint system access is now [owner.hardpoints_locked ? "disabled" : "enabled"]."))
+ playsound(owner, 'sound/weapons/laser_safetyon.ogg', 50, 0, falloff_exponent = (SOUND_FALLOFF_EXPONENT+4))
/atom/movable/screen/mecha/toggle/hatch
name = "toggle hatch lock"
@@ -318,7 +322,7 @@
toggled = !toggled
owner.hatch_closed = toggled
- playsound(owner.loc, owner.hatch_closed ? 'sound/effects/metal_close.ogg' : 'sound/effects/air_seal.ogg', 75, 1)
+ playsound(owner.loc, owner.hatch_closed ? 'sound/mecha/hatch-door-close.ogg' : 'sound/effects/air_seal.ogg', 75, 1)
if(notify_user)
notify_user(usr, SPAN_NOTICE("The [owner.body.hatch_descriptor] is now [owner.hatch_closed ? "closed" : "open" ]."))
update_icon()
diff --git a/code/modules/heavy_vehicle/mech_damage.dm b/code/modules/heavy_vehicle/mech_damage.dm
index f830b001f00..da448864b99 100644
--- a/code/modules/heavy_vehicle/mech_damage.dm
+++ b/code/modules/heavy_vehicle/mech_damage.dm
@@ -1,8 +1,35 @@
+///Returns TRUE if an incoming attack should target the pilot instead of the mech, FALSE otherwise.
+/mob/living/heavy_vehicle/proc/should_target_pilot(atom/attack_source = null)
+ if(!body || !LAZYLEN(pilots)) //If there is no pilot, or the mech somehow doesn't have a body don't try hit the pilot.
+ return FALSE
+
+ var/incoming_attack_direction = attack_source ? get_dir(src, attack_source) : null
+
+ if (istype(hardpoints[HARDPOINT_BACK], /obj/item/mecha_equipment/shield)) //If the mech has a shield.
+ var/obj/item/mecha_equipment/shield/shield = hardpoints[HARDPOINT_BACK]
+ if (shield.active && shield.aura && shield.aura.active) //If the shield is active.
+ if (incoming_attack_direction && (dir & incoming_attack_direction)) //If the attack comes from the front and the shield is active, the pilot is protected.
+ return FALSE
+
+ if(!prob(body.pilot_coverage)) //If the cockpit doesn't cover the pilot completely, attacks have a chance to hit the pilot instead of the mech.
+ return TRUE
+
+ if(!hatch_closed) //Open hatches only expose the pilot to attacks from the front and a little bit from the sides.
+ if(incoming_attack_direction)
+ if (dir & incoming_attack_direction)
+ if(prob(body.cockpit_hatch_size)) //80% chance to hit the pilot from the front if the hatch is open. If this is 100% turrets will shoot mechs with open hatches forever.
+ return TRUE
+ if ((turn(dir, 90) & incoming_attack_direction) || (turn(dir, -90) & incoming_attack_direction))
+ if(prob(body.cockpit_hatch_size / 4)) //20% chance to hit the pilot from the sides if the hatch is open.
+ return TRUE
+
+ return FALSE
+
/mob/living/heavy_vehicle/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0)
if(!effect || (blocked >= 100))
return 0
- if(LAZYLEN(pilots) && (!hatch_closed || !prob(body.pilot_coverage)))
+ if(should_target_pilot())
if(effect > 0 && effecttype == DAMAGE_RADIATION)
var/mob/living/pilot = pick(pilots)
return pilot.apply_effect(effect, effecttype, blocked)
@@ -10,11 +37,18 @@
. = ..()
/mob/living/heavy_vehicle/hitby(atom/movable/hitting_atom, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
- if(LAZYLEN(pilots) && (!hatch_closed || !prob(body.pilot_coverage)))
+ if(should_target_pilot(hitting_atom))
var/mob/living/pilot = pick(pilots)
return pilot.hitby(arglist(args))
. = ..()
+/mob/living/heavy_vehicle/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit)
+ if(should_target_pilot(hitting_projectile?.starting))
+ var/mob/living/pilot = pick(pilots)
+ if(pilot)
+ return pilot.bullet_act(hitting_projectile, def_zone, piercing_hit)
+ return ..()
+
/mob/living/heavy_vehicle/get_armors_by_zone(def_zone, damage_type, damage_flags)
. = ..()
if(body)
@@ -82,6 +116,14 @@
return 0
var/target = zoneToComponent(def_zone)
+
+ if(target == body && body.damage_state == MECH_COMPONENT_DAMAGE_DAMAGED_TOTAL) //If the cockpit is destroyed, subsequent damage is applied to the pilot, modified by the mech's armour.
+ if(body && LAZYLEN(pilots))
+ var/mob/living/pilot = pick(pilots)
+ if(prob(body.cockpit_hatch_size))
+ visible_message(SPAN_DANGER("\The [used_weapon] pierces the mangled cockpit of \the [src], striking the pilot inside!"))
+ pilot.apply_damage(damage * body.cockpit_pilot_damage_multiplier, damagetype, def_zone, used_weapon, damage_flags, armor_pen * body.cockpit_pilot_armour_piercing_multiplier, silent = FALSE)
+
//Only 2 types of damage concern mechs and vehicles
switch(damagetype)
if(DAMAGE_BRUTE)
@@ -90,6 +132,9 @@
adjustFireLoss(damage, target)
if((damagetype == DAMAGE_BRUTE || damagetype == DAMAGE_BURN) && prob(25+(damage*2)))
+ if(prob(damage))
+ playsound(src, 'sound/mecha/internaldmgalarm.ogg', 100, 0, falloff_exponent = (SOUND_FALLOFF_EXPONENT+4))
+ playsound(src, 'sound/mecha/critdestrnano.ogg', 100, 0, falloff_exponent = (SOUND_FALLOFF_EXPONENT+4))
spark(src, 3)
updatehealth()
@@ -111,25 +156,26 @@
/mob/living/heavy_vehicle/emp_act(severity)
. = ..()
+ if(. & EMP_PROTECT_SELF)
+ var/obj/item/cell/C = get_cell()
+ if(C.charge > 1000) //Don't completely run a mech out of power this way.
+ var/power_used = use_cell_power(1000 / severity)
+ var/percent_power_used = 0
+ if(C && C.maxcharge)
+ percent_power_used = round((power_used / C.maxcharge) * 100)
+ visible_message(SPAN_NOTICE("\The [src]'s active EM defenses flash brightly, negating the EMP!"))
+ for(var/pilot in pilots)
+ if(ismob(pilot))
+ to_chat(pilot, SPAN_NOTICE("Your mech reports that negating the EMP cost [(percent_power_used)]% charge."))
+ else
+ for(var/pilot in pilots)
+ if(ismob(pilot))
+ to_chat(pilot, SPAN_DANGER("Your mech's EMP countermeasures deactivate as power levels drop too low."))
+ else
+ var/ratio = get_blocked_ratio(null, DAMAGE_BURN, null, (4-severity) * 20)
+ emp_damage += round((12 - (severity*3))*( 1 - ratio))
- var/ratio = get_blocked_ratio(null, DAMAGE_BURN, null, (4-severity) * 20)
-
- if(ratio >= 0.5)
- for(var/mob/living/m in pilots)
- to_chat(m, SPAN_NOTICE("Your Faraday shielding absorbed the pulse!"))
- return
- else if(ratio > 0)
- for(var/mob/living/m in pilots)
- to_chat(m, SPAN_NOTICE("Your Faraday shielding mitigated the pulse!"))
-
- emp_damage += round((12 - (severity*3))*( 1 - ratio))
-
- for(var/obj/item/thing in list(arms,legs,head,body))
- thing.emp_act(severity)
- if(!hatch_closed || !prob(body.pilot_coverage))
- for(var/thing in pilots)
- var/mob/pilot = thing
- pilot.emp_act(severity)
+ update_emp_protection()
/mob/living/heavy_vehicle/fall_impact(levels_fallen, stopped_early = FALSE, var/damage_mod = 1)
// No gravity, stop falling into spess!
diff --git a/code/modules/heavy_vehicle/mech_helpers.dm b/code/modules/heavy_vehicle/mech_helpers.dm
index 9a19ba24964..d45b4a65420 100644
--- a/code/modules/heavy_vehicle/mech_helpers.dm
+++ b/code/modules/heavy_vehicle/mech_helpers.dm
@@ -161,20 +161,32 @@
/mob/living/heavy_vehicle/proc/use_cell_power(var/power_to_use)
var/power_used = get_cell()?.use(power_to_use)
- if(power_used <= 0)
+ if(power_used < power_to_use - 1) //Self recharging cells would otherwise allow a mech to run indefinately at full functionality with 0.1% charge.
for(var/hardpoint in hardpoints)
var/obj/item/mecha_equipment/ME = hardpoints[hardpoint]
if(ME)
ME.deactivate()
+ if(power == MECH_POWER_ON)
+ playsound(src, 'sound/mecha/mech-shutdown.ogg', 100, 0)
+ power = MECH_POWER_OFF
+ update_emp_protection()
+ if(hud_power_control)
+ SSicon_update.add_to_queue(hud_power_control)
return power_used
/mob/living/heavy_vehicle/proc/drain_cell_power(var/power_to_drain)
var/power_used = get_cell()?.drain_power(0, 0, power_to_drain)
- if(power_used <= 0)
+ if(power_used < power_to_drain - 1) //Self recharging cells would otherwise allow a mech to run indefinately at full functionality with 0.1% charge.
for(var/hardpoint in hardpoints)
var/obj/item/mecha_equipment/ME = hardpoints[hardpoint]
if(ME)
ME.deactivate()
+ if(power == MECH_POWER_ON)
+ playsound(src, 'sound/mecha/mech-shutdown.ogg', 100, 0)
+ power = MECH_POWER_OFF
+ update_emp_protection()
+ if(hud_power_control)
+ SSicon_update.add_to_queue(hud_power_control)
return power_used
/mob/living/heavy_vehicle/proc/checked_use_cell(var/power_to_drain)
diff --git a/code/modules/heavy_vehicle/mech_interaction.dm b/code/modules/heavy_vehicle/mech_interaction.dm
index 010ef2ffe00..19761357185 100644
--- a/code/modules/heavy_vehicle/mech_interaction.dm
+++ b/code/modules/heavy_vehicle/mech_interaction.dm
@@ -240,6 +240,8 @@
to_chat(user, SPAN_NOTICE("You climb into \the [src]."))
user.forceMove(src)
LAZYDISTINCTADD(pilots, user)
+ add_verb(user, /mob/proc/toggle_exosuit_camera)
+ add_verb(user, /mob/proc/change_exosuit_camera_network)
RegisterSignal(user, COMSIG_MOB_FACEDIR, PROC_REF(handle_user_turn))
RegisterSignal(user, COMSIG_INPUT_KEY_QUICK_EQUIP, PROC_REF(strafe_left))
RegisterSignal(user, COMSIG_INPUT_KEY_DROP, PROC_REF(strafe_right))
@@ -274,12 +276,92 @@
user.client.eye = user
if(user in pilots)
set_intent(I_HURT)
+ remove_verb(user, /mob/proc/toggle_exosuit_camera)
+ remove_verb(user, /mob/proc/change_exosuit_camera_network)
LAZYREMOVE(pilots, user)
UnregisterSignal(user, COMSIG_MOB_FACEDIR)
UnregisterSignal(user, COMSIG_INPUT_KEY_QUICK_EQUIP)
UnregisterSignal(user, COMSIG_INPUT_KEY_DROP)
UNSETEMPTY(pilots)
+/mob/proc/change_exosuit_camera_network()
+ set name = "Change Exosuit Camera Network"
+ set category = "Exosuit Interface"
+
+ var/mob/living/heavy_vehicle/exosuit = loc
+ if(!istype(exosuit) || !(src in exosuit.pilots))
+ remove_verb(src, /mob/proc/change_exosuit_camera_network)
+ return
+
+ var/obj/structure/machinery/camera/mech_camera = exosuit.camera
+ if(!mech_camera)
+ to_chat(src, SPAN_WARNING("\The [exosuit] has no camera."))
+ return
+
+ var/datum/mind/controller_mind = old_mob ? old_mob.mind : mind
+ var/list/available_networks = list(
+ NETWORK_COMMAND,
+ NETWORK_ENGINEERING,
+ NETWORK_MEDICAL,
+ NETWORK_MINE,
+ NETWORK_RESEARCH,
+ NETWORK_SECURITY,
+ NETWORK_SUPPLY,
+ NETWORK_SERVICE,
+ NETWORK_EXPEDITION,
+ NETWORK_NEWS
+ )
+ if(player_is_antag(controller_mind))
+ available_networks += NETWORK_MECHS
+
+ var/default_network = mech_camera.network[1]
+ if(!(default_network in available_networks))
+ default_network = null
+
+ var/chosen_network = tgui_input_list(src, "Select a camera network for \the [exosuit].", "Exosuit Camera Network", available_networks, default_network)
+ if(!chosen_network || !(chosen_network in available_networks))
+ return
+ if(chosen_network == NETWORK_MECHS && !player_is_antag(controller_mind))
+ return
+ if(QDELETED(exosuit) || loc != exosuit || !(src in exosuit.pilots) || QDELETED(mech_camera) || exosuit.camera != mech_camera)
+ return
+
+ if(length(mech_camera.network) == 1 && mech_camera.network[1] == chosen_network)
+ to_chat(src, SPAN_NOTICE("\The [exosuit]'s camera is already connected to [chosen_network]."))
+ return
+
+ var/list/old_networks = mech_camera.network.Copy()
+ for(var/old_network in old_networks)
+ if(old_network != chosen_network)
+ mech_camera.remove_network(old_network)
+ mech_camera.add_network(chosen_network)
+ to_chat(src, SPAN_NOTICE("\The [exosuit]'s camera network is now [chosen_network]."))
+
+/mob/proc/toggle_exosuit_camera()
+ set name = "Exosuit Camera - Toggle On/Off"
+ set category = "Exosuit Interface"
+
+ var/mob/living/heavy_vehicle/exosuit = loc
+ if(!istype(exosuit) || !(src in exosuit.pilots))
+ remove_verb(src, /mob/proc/toggle_exosuit_camera)
+ return
+
+ if(!exosuit.camera)
+ to_chat(src, SPAN_WARNING("\The [exosuit] has no camera."))
+ return
+
+ exosuit.camera_enabled = !exosuit.camera_enabled
+ var/camera_functional = exosuit.head?.camera && exosuit.head.camera.is_functional()
+ exosuit.camera.set_status(exosuit.camera_enabled && camera_functional)
+
+ if(exosuit.camera_enabled)
+ if(exosuit.camera.status)
+ to_chat(src, SPAN_NOTICE("\The [exosuit]'s camera is now active."))
+ else
+ to_chat(src, SPAN_WARNING("\The [exosuit]'s camera cannot be activated due to hardware damage."))
+ else
+ to_chat(src, SPAN_NOTICE("\The [exosuit]'s camera is now inactive."))
+
/mob/living/heavy_vehicle/proc/handle_user_turn(var/mob/living/user, var/direction)
SIGNAL_HANDLER
INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, relaymove), user, direction, TRUE)
@@ -655,6 +737,9 @@ GLOBAL_DATUM_INIT(mech_state, /datum/ui_state/default, new())
if(!new_name || new_name == name || (user != src && !(user in pilots)))
return
name = new_name
+ if(camera)
+ camera.c_tag = name
+ invalidateCameraCache()
to_chat(user, SPAN_NOTICE("You have redesignated this exosuit as \the [name]."))
/mob/living/heavy_vehicle/proc/trample(var/mob/living/H)
diff --git a/code/modules/heavy_vehicle/mech_life.dm b/code/modules/heavy_vehicle/mech_life.dm
index e744e0d1720..063aad13e76 100644
--- a/code/modules/heavy_vehicle/mech_life.dm
+++ b/code/modules/heavy_vehicle/mech_life.dm
@@ -15,10 +15,12 @@
for(var/thing in pilots)
var/mob/pilot = thing
if(pilot.loc != src) // Admin jump or teleport/grab.
+ remove_verb(pilot, /mob/proc/toggle_exosuit_camera)
+ remove_verb(pilot, /mob/proc/change_exosuit_camera_network)
if(pilot.client)
pilot.client.screen -= hud_elements
- LAZYREMOVE(pilots, pilot)
- UNSETEMPTY(pilots)
+ LAZYREMOVE(pilots, pilot)
+ UNSETEMPTY(pilots)
if(radio)
var/radio_check = head?.radio && head.radio.is_functional() && get_cell()
@@ -26,7 +28,9 @@
radio.set_on(radio_check)
if(camera)
- camera.status = (head?.camera && head.camera.is_functional())
+ var/camera_status = camera_enabled && head?.camera && head.camera.is_functional()
+ if(camera.status != camera_status)
+ camera.set_status(camera_status)
if(body)
body.update_air(hatch_closed && use_air)
@@ -37,6 +41,9 @@
if(!powered)
//Shut down all systems
+ if (!power && sound_looping) // This is stupid why is this a second var?
+ soundloop.stop()
+ sound_looping = FALSE
if(head)
head.active_sensors = FALSE
for(var/hardpoint in hardpoints)
diff --git a/code/modules/heavy_vehicle/mecha.dm b/code/modules/heavy_vehicle/mecha.dm
index 923fc664f0d..ba1d7a5b045 100644
--- a/code/modules/heavy_vehicle/mecha.dm
+++ b/code/modules/heavy_vehicle/mecha.dm
@@ -21,6 +21,8 @@
var/obj/item/radio/exosuit/radio
var/obj/structure/machinery/camera/camera
+ /// Whether pilots want the external camera to broadcast while its hardware is functional
+ var/camera_enabled = TRUE
var/wreckage_path = /obj/structure/mech_wreckage
@@ -95,6 +97,11 @@
//POWER
var/power = MECH_POWER_OFF
+ /// Sound effect used for mech ambience.
+ var/datum/looping_sound/mech_power/soundloop
+ /// Separate tracking of current sound looping so we aren't hammering the sound loop system on every tick.
+ var/sound_looping = FALSE
+
/mob/living/heavy_vehicle/Destroy()
unassign_leader()
unassign_following()
@@ -114,6 +121,8 @@
pilot.client.screen -= hud_elements
pilot.client.images -= hud_elements
if (!QDELETED(pilot)) // Forcemove doesn't accept QDELETED inputs.
+ remove_verb(pilot, /mob/proc/toggle_exosuit_camera)
+ remove_verb(pilot, /mob/proc/change_exosuit_camera_network)
pilot.forceMove(get_turf(src))
pilots = null
@@ -137,7 +146,7 @@
QDEL_NULL(camera)
QDEL_NULL(radio)
-
+ QDEL_NULL(soundloop)
. = ..()
/mob/living/heavy_vehicle/IsAdvancedToolUser()
@@ -246,7 +255,7 @@
add_language(LANGUAGE_TCB)
default_language = GLOB.all_languages[LANGUAGE_TCB]
-
+ soundloop = new(src)
. = INITIALIZE_HINT_LATELOAD
/mob/living/heavy_vehicle/LateInitialize()
@@ -257,6 +266,12 @@
/mob/living/heavy_vehicle/return_air()
return (body && body.pilot_coverage >= 100 && hatch_closed) ? body.cockpit : loc?.return_air()
+/mob/living/heavy_vehicle/proc/update_emp_protection()
+ RemoveElement(/datum/element/empprotection, EMP_PROTECT_ALL)
+ if(power == MECH_POWER_ON && body.mech_armor && body.mech_armor.emp_protection)
+ if(get_cell().charge > 500)
+ AddElement(/datum/element/empprotection, EMP_PROTECT_ALL)
+
/mob/living/heavy_vehicle/GetIdCard()
return access_card
@@ -278,19 +293,23 @@
if(power == MECH_POWER_TRANSITION)
to_chat(reciever, SPAN_NOTICE("Power transition in progress. Please wait."))
else if(power == MECH_POWER_ON) //Turning it off is instant
- playsound(src, 'sound/mecha/mech-shutdown.ogg', 100, 0)
power = MECH_POWER_OFF
- else if(get_cell(TRUE))
+ update_emp_protection()
+ else if(get_cell(TRUE).check_charge(1000)) //Check if we have enough charge to power on
//Start power up sequence
power = MECH_POWER_TRANSITION
playsound(src, 'sound/mecha/powerup.ogg', 50, 0)
if(do_after(reciever, 1.5 SECONDS) && power == MECH_POWER_TRANSITION)
- playsound(src, 'sound/mecha/nominal.ogg', 50, 0)
power = MECH_POWER_ON
+ update_emp_protection()
+ sound_looping = TRUE
+ soundloop.start()
else
to_chat(reciever, SPAN_WARNING("You abort the powerup sequence."))
power = MECH_POWER_OFF
- hud_power_control?.queue_icon_update()
+ update_emp_protection()
+ if(hud_power_control)
+ SSicon_update.add_to_queue(hud_power_control)
else
to_chat(reciever, SPAN_WARNING("Error: No power cell was detected."))
@@ -332,6 +351,9 @@
remote = TRUE
name = name + " \"[pick("Jaeger", "Reaver", "Templar", "Juggernaut", "Basilisk")]-[rand(0, 999)]\""
+ if(camera)
+ camera.c_tag = name
+ invalidateCameraCache()
if(!remote_network)
remote_network = REMOTE_GENERIC_MECH
SSvirtualreality.add_mech(src, remote_network)
diff --git a/code/modules/heavy_vehicle/premade/combat.dm b/code/modules/heavy_vehicle/premade/combat.dm
index e97a9d2889d..3beec39256a 100644
--- a/code/modules/heavy_vehicle/premade/combat.dm
+++ b/code/modules/heavy_vehicle/premade/combat.dm
@@ -57,6 +57,8 @@
name = "sealed exosuit chassis"
hatch_descriptor = "canopy"
pilot_coverage = 100
+ cockpit_hatch_size = 60
+ cockpit_pilot_damage_multiplier = 0.4
exosuit_desc_string = "an armored chassis"
desc = "A lightweight composite frame keeps the armor of this chassis respectable, but the interior spacious."
icon_state = "combat_body"
diff --git a/code/modules/heavy_vehicle/premade/cult.dm b/code/modules/heavy_vehicle/premade/cult.dm
index 7a168930d53..a045fafcdfb 100644
--- a/code/modules/heavy_vehicle/premade/cult.dm
+++ b/code/modules/heavy_vehicle/premade/cult.dm
@@ -61,6 +61,8 @@
desc = "Despite its looks, this protective chassis provides supreme comfort to its pilot during their conquest."
hatch_descriptor = "bloodied ribcage"
pilot_coverage = 100
+ cockpit_hatch_size = 60
+ cockpit_pilot_damage_multiplier = 0.4
exosuit_desc_string = "a bloodied chassis"
icon_state = "cult_body"
max_damage = 150
diff --git a/code/modules/heavy_vehicle/premade/heavy.dm b/code/modules/heavy_vehicle/premade/heavy.dm
index 43590de0fb2..2b5c3f7fe62 100644
--- a/code/modules/heavy_vehicle/premade/heavy.dm
+++ b/code/modules/heavy_vehicle/premade/heavy.dm
@@ -53,6 +53,8 @@
hatch_descriptor = "hatch"
desc = "The HI-Koloss chassis is a veritable juggernaut, capable of protecting a pilot even in the most hostile of environments. It handles like a battlecruiser, however."
pilot_coverage = 100
+ cockpit_hatch_size = 70
+ cockpit_pilot_damage_multiplier = 0.3
exosuit_desc_string = "a heavily armored chassis"
icon_state = "heavy_body"
max_damage = 300
diff --git a/code/modules/heavy_vehicle/premade/light.dm b/code/modules/heavy_vehicle/premade/light.dm
index 3480f1d8b6c..8a3c71c1ead 100644
--- a/code/modules/heavy_vehicle/premade/light.dm
+++ b/code/modules/heavy_vehicle/premade/light.dm
@@ -53,6 +53,8 @@
/obj/item/mech_component/chassis/light
name = "light exosuit chassis"
pilot_coverage = 100
+ cockpit_hatch_size = 50
+ cockpit_pilot_damage_multiplier = 0.8
transparent_cabin = TRUE
hatch_descriptor = "canopy"
exosuit_desc_string = "an open and light chassis"
diff --git a/code/modules/heavy_vehicle/premade/military.dm b/code/modules/heavy_vehicle/premade/military.dm
index 46943b76fc5..614a88017d9 100644
--- a/code/modules/heavy_vehicle/premade/military.dm
+++ b/code/modules/heavy_vehicle/premade/military.dm
@@ -40,6 +40,8 @@
hatch_descriptor = "hatch"
desc = "A cramped compartment and a senseless amount of armor is all this steel coffin contains."
pilot_coverage = 100
+ cockpit_hatch_size = 60
+ cockpit_pilot_damage_multiplier = 0.2
exosuit_desc_string = "a heavily armored chassis"
icon_state = "strider_body"
max_damage = 750
diff --git a/code/modules/heavy_vehicle/premade/powerloader.dm b/code/modules/heavy_vehicle/premade/powerloader.dm
index 1d444a47a19..598c0f8cbc4 100644
--- a/code/modules/heavy_vehicle/premade/powerloader.dm
+++ b/code/modules/heavy_vehicle/premade/powerloader.dm
@@ -75,6 +75,8 @@
name = "open exosuit chassis"
hatch_descriptor = "roll cage"
pilot_coverage = 40
+ cockpit_hatch_size = 90
+ cockpit_pilot_damage_multiplier = 0.6 ///The hatch is thick, but the pilot coverage is poor.
exosuit_desc_string = "an industrial rollcage"
desc = "A Xion industrial brand roll cage. Technically OSHA compliant. Technically. This variant has an extra compartment for a copilot, but has no sealed atmosphere."
max_damage = 200
diff --git a/code/modules/heavy_vehicle/premade/pra.dm b/code/modules/heavy_vehicle/premade/pra.dm
index f724850bcdb..d04a3e46d10 100644
--- a/code/modules/heavy_vehicle/premade/pra.dm
+++ b/code/modules/heavy_vehicle/premade/pra.dm
@@ -54,6 +54,8 @@
name = "\improper P'kus-3 chassis"
hatch_descriptor = "canopy"
pilot_coverage = 100
+ cockpit_hatch_size = 70
+ cockpit_pilot_damage_multiplier = 0.8
exosuit_desc_string = "a light armored chassis"
desc = "A lightweight composite frame keeps the armor of this chassis respectable, but the interior spacious."
icon_state = "egg_body"
@@ -97,6 +99,8 @@
icon_state = "strong_egg_body"
max_damage = 150
power_use = 250
+ cockpit_hatch_size = 40
+ cockpit_pilot_damage_multiplier = 0.5
cell_type = /obj/item/cell/mecha/nuclear
diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm
index 348fb9eb0d1..49de3a96d66 100644
--- a/code/modules/hydroponics/seed.dm
+++ b/code/modules/hydroponics/seed.dm
@@ -790,7 +790,7 @@
return FALSE
user.visible_message(SPAN_WARNING("[user] starts harvesting \the [display_name]"))
- if (doafter > 0 && !do_after(user, doafter))
+ if (doafter > 0 && !do_after(user, doafter, do_flags = DO_BOTH_UNIQUE_ACT | DO_USER_SAME_HAND | DO_SHOW_PROGRESS))
to_chat(user, SPAN_DANGER("You were interrupted while trying to harvest \the [display_name]"))
return FALSE
diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm
index 5cf571d5c4e..d8ab0538dd0 100644
--- a/code/modules/integrated_electronics/core/assemblies.dm
+++ b/code/modules/integrated_electronics/core/assemblies.dm
@@ -11,6 +11,8 @@
icon_state = "setup_small"
item_flags = ITEM_FLAG_NO_BLUDGEON
light_system = MOVABLE_LIGHT
+ recyclable = FALSE
+ charge_failure_message = " is missing a powercell."
var/max_components = IC_COMPONENTS_BASE
var/max_complexity = IC_COMPLEXITY_BASE
@@ -42,6 +44,8 @@
battery = new /obj/item/cell/device(src)
START_PROCESSING(SSelectronics, src)
access_card = new /obj/item/card/id(src)
+ if (!matter) //Matter amounts might be set during the cloning process.
+ matter = list(MATERIAL_STEEL = (round((max_complexity + max_components) / 4)) * 200)
/obj/item/electronic_assembly/Destroy()
QDEL_NULL(battery)
@@ -100,6 +104,10 @@
var/list/HTML = list()
var/effective_component_limit = get_effective_component_limit(total_complexity)
var/effective_complexity_limit = get_effective_complexity_limit(total_parts)
+ if (!total_parts && !total_complexity)
+ recyclable = TRUE
+ else
+ recyclable = FALSE
HTML += " Refresh | "
HTML += "Rename "
@@ -200,8 +208,11 @@
/obj/item/electronic_assembly/feedback_hints(mob/user, distance, is_adjacent)
. = ..()
- if(is_adjacent && opened)
- for(var/obj/item/integrated_circuit/IC in contents)
+ for(var/obj/item/integrated_circuit/IC in contents)
+ var/examined = IC.external_examine()
+ if(length(examined))
+ . += examined
+ if(is_adjacent && opened)
. += SPAN_NOTICE("It contains \a [IC].")
/obj/item/electronic_assembly/proc/get_part_complexity()
@@ -246,11 +257,14 @@
to_chat(user, SPAN_WARNING("You can't seem to add the '[IC.name]', since this setup's too complicated for the case."))
return FALSE
+ if(!user.unEquip(IC))
+ return FALSE
+
if(!IC.forceMove(src))
return FALSE
IC.assembly = src
-
+ recyclable = FALSE
return TRUE
// Non-interactive version of above that always succeeds, intended for build-in circuits that get added on assembly initialization.
@@ -264,9 +278,6 @@
/obj/item/electronic_assembly/attackby(obj/item/attacking_item, mob/user)
if(istype(attacking_item, /obj/item/integrated_circuit))
- if(!user.unEquip(attacking_item))
- return FALSE
-
if(add_circuit(attacking_item, user))
to_chat(user, SPAN_NOTICE("You slide \the [attacking_item] inside \the [src]."))
playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1)
@@ -371,6 +382,11 @@
for(var/atom/movable/AM in contents)
AM.emp_act(severity)
+/obj/item/electronic_assembly/get_cell()
+ if(battery)
+ return battery
+ return DEVICE_NO_CELL
+
// Returns true if power was successfully drawn.
/obj/item/electronic_assembly/proc/draw_power(amount)
if(battery && battery.checked_use(amount * CELLRATE))
diff --git a/code/modules/integrated_electronics/core/assemblies/clothing.dm b/code/modules/integrated_electronics/core/assemblies/clothing.dm
index 5d7d56c00d9..3a000b92bef 100644
--- a/code/modules/integrated_electronics/core/assemblies/clothing.dm
+++ b/code/modules/integrated_electronics/core/assemblies/clothing.dm
@@ -70,6 +70,9 @@
var/obj/item/electronic_assembly/clothing/IC = null
var/obj/item/integrated_circuit/built_in/action_button/action_circuit = null // This gets pulsed when someone clicks the button on the hud, OR when certain interactions are performed (such as clicking on something with gloves worn)
+/obj/item/clothing/proc/get_action_circuit()
+ return action_circuit
+
/obj/item/clothing/examine(mob/user, distance, is_adjacent, infix, suffix, show_extended)
if(IC)
examinate(user, IC)
diff --git a/code/modules/integrated_electronics/core/assemblies/electronic_radio_headset.dm b/code/modules/integrated_electronics/core/assemblies/electronic_radio_headset.dm
index fa9416efe6b..a4c1fcbeae2 100644
--- a/code/modules/integrated_electronics/core/assemblies/electronic_radio_headset.dm
+++ b/code/modules/integrated_electronics/core/assemblies/electronic_radio_headset.dm
@@ -14,6 +14,8 @@
var/obj/item/electronic_assembly/clothing/small/circuit_assembly = null
// Built-in action circuit used to expose an activation button to the wearer/user.
var/obj/item/integrated_circuit/built_in/action_button/circuit_action = null
+ // Built-in receiver that exposes radio messages to the installed circuit network.
+ var/obj/item/integrated_circuit/input/radio_command_receiver/circuit_radio_receiver = null
/obj/item/radio/headset/circuitry/Initialize(mapload, printed = FALSE)
@@ -26,9 +28,13 @@
/obj/item/radio/headset/circuitry/Destroy()
QDEL_NULL(circuit_assembly)
circuit_action = null
+ circuit_radio_receiver = null
return ..()
+/obj/item/radio/headset/circuitry/proc/get_action_circuit()
+ return circuit_action
+
/obj/item/radio/headset/circuitry/proc/setup_headset_integrated_circuit()
if(circuit_assembly)
circuit_assembly.forceMove(src)
@@ -39,17 +45,20 @@
circuit_assembly.clothing = src
circuit_assembly.name = name
- QDEL_NULL(circuit_assembly.battery)
-
for(var/obj/item/integrated_circuit/C in circuit_assembly.contents)
C.assembly = circuit_assembly
circuit_action = locate(/obj/item/integrated_circuit/built_in/action_button) in circuit_assembly.contents
+ circuit_radio_receiver = locate(/obj/item/integrated_circuit/input/radio_command_receiver) in circuit_assembly.contents
if(!circuit_action)
circuit_action = new(circuit_assembly)
circuit_assembly.force_add_circuit(circuit_action)
+ if(!circuit_radio_receiver)
+ circuit_radio_receiver = new(circuit_assembly)
+ circuit_assembly.force_add_circuit(circuit_radio_receiver)
+
default_action_type = /datum/action/item_action/integrated_circuit
action_button_name = "Activate [capitalize_first_letters(name)]"
@@ -64,13 +73,12 @@
/obj/item/radio/headset/circuitry/feedback_hints(mob/user, distance, is_adjacent)
. = ..()
- if(distance <= 1 && !circuit_assembly?.opened)
- return
-
var/obj/item/electronic_assembly/E = get_cloneable_assembly()
if(E)
- for(var/obj/item/integrated_circuit/IC in E.contents)
- . += SPAN_NOTICE("It contains \a [IC].")
+ for(var/obj/item/integrated_circuit/IC in contents)
+ IC.external_examine()
+ if(is_adjacent && circuit_assembly?.opened)
+ . += SPAN_NOTICE("It contains \a [IC].")
/obj/item/radio/headset/circuitry/proc/clone_with_integrated_assembly(atom/location, obj/item/integrated_circuit_printer/printer, obj/item/electronic_assembly/source_assembly)
if(!location || !printer || !source_assembly)
@@ -94,7 +102,6 @@
internal_assembly.name = source_assembly.name
internal_assembly.detail_color = source_assembly.detail_color
internal_assembly.opened = FALSE
- internal_assembly.battery = null
for(var/obj/item/integrated_circuit/C in internal_assembly.contents)
C.assembly = internal_assembly
@@ -102,11 +109,16 @@
new_headset.name = source_assembly.name
new_headset.circuit_assembly = internal_assembly
new_headset.circuit_action = locate(/obj/item/integrated_circuit/built_in/action_button) in internal_assembly.contents
+ new_headset.circuit_radio_receiver = locate(/obj/item/integrated_circuit/input/radio_command_receiver) in internal_assembly.contents
if(!new_headset.circuit_action)
new_headset.circuit_action = new(internal_assembly)
internal_assembly.force_add_circuit(new_headset.circuit_action)
+ if(!new_headset.circuit_radio_receiver)
+ new_headset.circuit_radio_receiver = new(internal_assembly)
+ internal_assembly.force_add_circuit(new_headset.circuit_radio_receiver)
+
new_headset.default_action_type = /datum/action/item_action/integrated_circuit
new_headset.action_button_name = "Activate [capitalize_first_letters(new_headset.name)]"
@@ -259,3 +271,10 @@
return
to_chat(H, SPAN_NOTICE("\The [src] states, \"[message]\""))
+
+
+/obj/item/radio/headset/circuitry/proc/receive_circuit_radio_command(speaker_name, message, channel)
+ if(!circuit_radio_receiver || circuit_radio_receiver.assembly != circuit_assembly)
+ return
+
+ circuit_radio_receiver.receive_radio_command(speaker_name, message, channel, src)
diff --git a/code/modules/integrated_electronics/core/assemblies/generic.dm b/code/modules/integrated_electronics/core/assemblies/generic.dm
index 3ac9921c4e8..60b7e3c34a0 100644
--- a/code/modules/integrated_electronics/core/assemblies/generic.dm
+++ b/code/modules/integrated_electronics/core/assemblies/generic.dm
@@ -284,10 +284,12 @@
if(get_dist(on_wall, user) > 1)
return
- var/ndir = get_dir(on_wall, user)
+ var/ndir = get_dir(user, on_wall)
if(!(ndir in GLOB.cardinals))
return
+ dir = ndir
+
var/turf/T = get_turf(user)
if(!istype(T, /turf/simulated/floor))
to_chat(user, SPAN_WARNING("You cannot place \the [src] on this spot!"))
diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm
index 5081dbb3d53..11a0f5eb753 100644
--- a/code/modules/integrated_electronics/core/integrated_circuit.dm
+++ b/code/modules/integrated_electronics/core/integrated_circuit.dm
@@ -5,12 +5,12 @@ a creative player the means to solve many problems. Circuits are held inside an
/obj/item/integrated_circuit/examine(mob/user, distance, is_adjacent, infix, suffix, show_extended)
interact(user)
- external_examine(user)
+ . += external_examine(user)
. = ..()
// This should be used when someone is examining from an 'outside' perspective, e.g. reading a screen or LED.
/obj/item/integrated_circuit/proc/external_examine(mob/user)
- any_examine(user)
+ return any_examine(user)
/obj/item/integrated_circuit/proc/any_examine(mob/user)
. = list()
@@ -24,6 +24,11 @@ a creative player the means to solve many problems. Circuits are held inside an
setup_io(inputs, /datum/integrated_io, inputs_default)
setup_io(outputs, /datum/integrated_io, outputs_default)
setup_io(activators, /datum/integrated_io/activate)
+ var/phoron_matter = initial(phoron_cost) * 2000
+ var/steel_matter = max(1, w_class) * 200
+ if(phoron_matter || steel_matter)
+ matter = list(MATERIAL_STEEL = steel_matter, MATERIAL_PHORON = phoron_matter)
+ recyclable = TRUE
. = ..()
/obj/item/integrated_circuit/proc/on_data_written() //Override this for special behaviour when new data gets pushed to the circuit.
@@ -302,6 +307,8 @@ a creative player the means to solve many problems. Circuits are held inside an
disconnect_all()
var/turf/T = get_turf(src)
forceMove(T)
+ if(Adjacent(usr, src))
+ usr.put_in_hands(src)
assembly = null
playsound(T, 'sound/items/crowbar_pry.ogg', 50, 1)
to_chat(usr, SPAN_NOTICE("You pop \the [src] out of the case, and slide it out."))
diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm
index e89579c7830..050ec62467a 100644
--- a/code/modules/integrated_electronics/core/printer.dm
+++ b/code/modules/integrated_electronics/core/printer.dm
@@ -31,6 +31,11 @@
var/clone_blueprint_name = null
var/clone_blueprint_export = null
var/clone_blueprint_import_buffer = ""
+ var/clone_blueprint_import_id = null
+ var/clone_blueprint_import_expected_chunks = 0
+ var/clone_blueprint_import_received_chunks = 0
+ var/clone_blueprint_import_received_length = 0
+ var/list/clone_blueprint_import_chunks = null
var/clone_blueprint_export_visible = FALSE
var/clone_blueprint_metal_cost = 0
var/clone_blueprint_phoron_cost = 0
@@ -45,13 +50,14 @@
/obj/item/integrated_circuit_printer/upgraded
upgraded = TRUE
can_clone = TRUE
- max_metal = 500
- max_phoron = 20
+ max_metal = 250
+ max_phoron = 10
/obj/item/integrated_circuit_printer/Destroy()
assembly_to_clone = null
clone_item_to_clone = null
+ clone_blueprint_import_chunks = null
return ..()
@@ -206,8 +212,6 @@
to_chat(user, SPAN_WARNING("No cloning blueprint text was provided."))
return FALSE
- import_text = html_decode(import_text)
-
if(length(import_text) > IC_BLUEPRINT_BUFFER_LIMIT)
to_chat(user, SPAN_WARNING("That cloning blueprint is [length(import_text)] characters, but the maximum import size is [IC_BLUEPRINT_BUFFER_LIMIT] characters."))
return FALSE
@@ -332,6 +336,60 @@
return TRUE
+
+/obj/item/integrated_circuit_printer/proc/receive_clone_blueprint_chunk(import_id, chunk_index, chunk_count, import_chunk, mob/user)
+ if(!istext(import_id) || !length(import_id) || !istext(import_chunk))
+ to_chat(user, SPAN_WARNING("Invalid cloning blueprint transfer data was received."))
+ return FALSE
+
+ chunk_index = text2num(chunk_index)
+ chunk_count = text2num(chunk_count)
+ if(!chunk_index || !chunk_count || chunk_index < 1 || chunk_index > chunk_count)
+ to_chat(user, SPAN_WARNING("Invalid cloning blueprint chunk numbering was received."))
+ return FALSE
+
+ if(length(import_chunk) > IC_BLUEPRINT_CHUNK_LIMIT)
+ to_chat(user, SPAN_WARNING("That blueprint chunk is [length(import_chunk)] characters, but chunks must be [IC_BLUEPRINT_CHUNK_LIMIT] characters or less."))
+ return FALSE
+
+ if(clone_blueprint_import_id != import_id)
+ clone_blueprint_import_id = import_id
+ clone_blueprint_import_expected_chunks = chunk_count
+ clone_blueprint_import_received_chunks = 0
+ clone_blueprint_import_received_length = 0
+ clone_blueprint_import_chunks = new/list(chunk_count)
+ clone_blueprint_import_buffer = ""
+ else if(clone_blueprint_import_expected_chunks != chunk_count)
+ to_chat(user, SPAN_WARNING("The cloning blueprint transfer changed its expected chunk count."))
+ return FALSE
+
+ if(isnull(clone_blueprint_import_chunks[chunk_index]))
+ if(clone_blueprint_import_received_length + length(import_chunk) > IC_BLUEPRINT_BUFFER_LIMIT)
+ to_chat(user, SPAN_WARNING("The cloning blueprint import buffer cannot exceed [IC_BLUEPRINT_BUFFER_LIMIT] characters."))
+ return FALSE
+ clone_blueprint_import_chunks[chunk_index] = import_chunk
+ clone_blueprint_import_received_chunks++
+ clone_blueprint_import_received_length += length(import_chunk)
+
+ if(clone_blueprint_import_received_chunks < clone_blueprint_import_expected_chunks)
+ return TRUE
+
+ for(var/i = 1 to clone_blueprint_import_expected_chunks)
+ if(isnull(clone_blueprint_import_chunks[i]))
+ return TRUE
+ clone_blueprint_import_buffer = clone_blueprint_import_chunks.Join()
+
+ clone_blueprint_import_id = null
+ clone_blueprint_import_expected_chunks = 0
+ clone_blueprint_import_received_chunks = 0
+ clone_blueprint_import_received_length = 0
+ clone_blueprint_import_chunks = null
+
+ var/import_success = import_clone_blueprint_text(clone_blueprint_import_buffer, user)
+ if(import_success)
+ clone_blueprint_import_buffer = ""
+ return import_success
+
/obj/item/integrated_circuit_printer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if(.)
@@ -384,6 +442,13 @@
return append_clone_blueprint_chunk(import_chunk, usr)
+ if(action == "receive_import_chunk_tgui")
+ if(!can_clone)
+ to_chat(usr, SPAN_WARNING("\The [src] needs a circuit cloner upgrade for that."))
+ return FALSE
+
+ return receive_clone_blueprint_chunk(params["import_id"], params["index"], params["count"], params["chunk"], usr)
+
if(action == "reject_oversized_import_tgui")
var/blueprint_length = text2num(params["length"])
if(!blueprint_length)
@@ -412,6 +477,11 @@
clone_blueprint_name = null
clone_blueprint_export = null
clone_blueprint_import_buffer = ""
+ clone_blueprint_import_id = null
+ clone_blueprint_import_expected_chunks = 0
+ clone_blueprint_import_received_chunks = 0
+ clone_blueprint_import_received_length = 0
+ clone_blueprint_import_chunks = null
clone_blueprint_export_visible = FALSE
clone_blueprint_metal_cost = 0
clone_blueprint_phoron_cost = 0
@@ -499,11 +569,14 @@
metal -= cost
phoron -= phoron_cost
-
+ var/new_build
if(is_printed_assembly_container)
- new build_type(get_turf(loc), TRUE)
+ new_build = new build_type(get_turf(loc), TRUE)
else
- new build_type(get_turf(loc))
+ new_build = new build_type(get_turf(loc))
+
+ if(Adjacent(usr, src))
+ usr.put_in_hands(new_build)
return TRUE
@@ -545,6 +618,7 @@
to_chat(user, SPAN_WARNING("\The [src] fails to finish the cloned assembly."))
return
+ new_clone.recyclable = FALSE //A cloned circuit will have components in it.
if(user)
to_chat(user, SPAN_NOTICE("\The [src] finishes printing \the [new_clone]."))
@@ -556,7 +630,6 @@
var/obj/item/integrated_circuit/IC = circuit_type
return max(0, initial(IC.phoron_cost) * phoron_per_sheet)
-
/obj/item/integrated_circuit_printer/proc/get_clone_metal_cost(obj/item/electronic_assembly/source)
if(!source)
return 0
@@ -667,9 +740,6 @@
circuit_map[source_circuit] = new_circuit
for(var/obj/item/integrated_circuit/source_circuit in source.contents)
- if(!source_circuit.removable)
- continue
-
var/obj/item/integrated_circuit/new_circuit = circuit_map[source_circuit]
if(!new_circuit)
continue
@@ -680,9 +750,6 @@
source_circuit.copy_clone_state_to(new_circuit)
for(var/obj/item/integrated_circuit/source_circuit in source.contents)
- if(!source_circuit.removable)
- continue
-
var/obj/item/integrated_circuit/new_circuit = circuit_map[source_circuit]
if(!new_circuit)
continue
@@ -736,6 +803,7 @@
if(linked_new_pin)
target_pin.linked |= linked_new_pin
+ linked_new_pin.linked |= target_pin
/proc/ic_copy_clone_value(value)
@@ -955,6 +1023,7 @@
if(linked_pin)
source_pin.linked |= linked_pin
+ linked_pin.linked |= source_pin
/obj/item/integrated_circuit_printer/proc/find_matching_blueprint_builtin(obj/item/electronic_assembly/clone, circuit_path, list/used_builtins)
diff --git a/code/modules/integrated_electronics/core/tools.dm b/code/modules/integrated_electronics/core/tools.dm
index 211c7f97fdb..3c715e4006f 100644
--- a/code/modules/integrated_electronics/core/tools.dm
+++ b/code/modules/integrated_electronics/core/tools.dm
@@ -234,8 +234,9 @@
/obj/item/electronic_assembly,
/obj/item/integrated_electronics,
/obj/item/crowbar,
- /obj/item/screwdriver,
- /obj/item/multitool
+ /obj/item/integrated_electronics/wirer,
+ /obj/item/integrated_electronics/debugger,
+ /obj/item/integrated_electronics/detailer
)
make_exact_fit = TRUE
@@ -255,8 +256,9 @@
new /obj/item/electronic_assembly(src)
new /obj/item/assembly/electronic_assembly(src)
new /obj/item/assembly/electronic_assembly(src)
- new /obj/item/multitool(src)
- new /obj/item/screwdriver(src)
+ new /obj/item/integrated_electronics/wirer(src)
+ new /obj/item/integrated_electronics/debugger(src)
+ new /obj/item/integrated_electronics/detailer(src)
new /obj/item/crowbar(src)
/obj/item/storage/bag/circuits/all/fill()
@@ -281,6 +283,7 @@
new /obj/item/electronic_assembly/drone(src)
new /obj/item/integrated_electronics/wirer(src)
new /obj/item/integrated_electronics/debugger(src)
+ new /obj/item/integrated_electronics/detailer(src)
new /obj/item/crowbar(src)
/obj/item/storage/bag/circuits/mini
diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm
index 67bf0205154..f900fc02226 100644
--- a/code/modules/integrated_electronics/subtypes/input.dm
+++ b/code/modules/integrated_electronics/subtypes/input.dm
@@ -262,27 +262,27 @@
/obj/item/integrated_circuit/input/local_locator
name = "local locator"
- desc = "This is needed for certain devices that demand a reference for a target to act upon. This type only locates something \
- that is holding the machine containing it."
+ desc = "This is needed for certain devices that demand a reference for a target to act upon. This type only locates a living \
+ thing that is holding the machine containing it."
inputs = list()
outputs = list(
"located ref" = IC_PINTYPE_REF
)
activators = list(
"locate" = IC_PINTYPE_PULSE_IN,
- "on locate" = IC_PINTYPE_PULSE_OUT
+ "on locate" = IC_PINTYPE_PULSE_OUT,
)
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
power_draw_per_use = 200
/obj/item/integrated_circuit/input/local_locator/do_work()
- if(assembly && istype(assembly.loc, /mob/living))
- set_pin_data(IC_OUTPUT, 1, assembly.loc)
- else
- set_pin_data(IC_OUTPUT, 1, null)
-
+ if(assembly)
+ var/mob/living/holder = get_highest_loc(assembly.loc, /mob/living)
+ if(holder)
+ set_pin_data(IC_OUTPUT, 1, holder)
+ activate_pin(2)
push_data()
- activate_pin(2)
+
/obj/item/integrated_circuit/input/adjacent_locator
name = "adjacent locator"
@@ -1889,7 +1889,9 @@
desc = "Receives radio-style command text relayed through an inserted radio."
extended_desc = "This circuit receives relayed radio text and exposes the speaker, message, channel, command, arguments, and payload. If a radio reference is provided, only messages relayed from that radio will be accepted."
icon_state = "recorder"
- complexity = 10
+ complexity = 0
+ size = -1
+ removable = FALSE
inputs = list(
"radio reference" = IC_PINTYPE_REF
)
diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm
index 8af931122ca..173f5972807 100644
--- a/code/modules/integrated_electronics/subtypes/manipulation.dm
+++ b/code/modules/integrated_electronics/subtypes/manipulation.dm
@@ -610,6 +610,7 @@
LAZYREMOVE(deployed_shields, shield)
qdel(shield)
set_pin_data(IC_OUTPUT, 1, LAZYLEN(deployed_shields))
+ update_power_draw()
/obj/item/integrated_circuit/manipulation/bubble_shield/do_work()
if(!assembly)
@@ -652,13 +653,17 @@
set_pin_data(IC_OUTPUT, 1, LAZYLEN(deployed_shields))
activate_pin(2)
+ update_power_draw()
+
+ ..()
+
+/obj/item/integrated_circuit/manipulation/bubble_shield/proc/update_power_draw()
+ var/strength = between(10, get_pin_data(IC_INPUT, 3), 50)
if(deployed_shields)
power_draw_idle = power_draw_per_use * (strength / 10) * LAZYLEN(deployed_shields)
else
power_draw_idle = 0
- ..()
-
/obj/item/integrated_circuit/manipulation/bubble_shield/power_fail()
for(var/obj/structure/machinery/shield/shield in deployed_shields)
kill_shield(shield)
diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm
index 551d0827e05..5b0dfd8d321 100644
--- a/code/modules/integrated_electronics/subtypes/output.dm
+++ b/code/modules/integrated_electronics/subtypes/output.dm
@@ -361,8 +361,8 @@
/obj/item/integrated_circuit/output/video_camera
name = "video camera circuit"
- desc = "Creates a camera feed from the assembly's position."
- extended_desc = "Creates a camera feed. It uses the Research camera network by default, but the network can be changed."
+ desc = "This small camera allows a remote viewer to see what it sees."
+ extended_desc = "Creates a camera feed. It uses the Expedition camera network by default, but the network can be changed."
icon_state = "video_camera"
w_class = WEIGHT_CLASS_SMALL
complexity = 10
@@ -372,12 +372,12 @@
"camera active" = IC_PINTYPE_BOOLEAN
)
inputs_default = list("1" = "video camera circuit",
- "2" = "Research")
+ "2" = "Expedition")
outputs = list()
activators = list()
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
power_draw_idle = 5 // Raises to 200 when on.
- var/obj/structure/machinery/camera/network/research/camera
+ var/obj/structure/machinery/camera/network/expedition/camera
/obj/item/integrated_circuit/output/video_camera/Initialize()
. = ..()
diff --git a/code/modules/item_worth/worths_list.dm b/code/modules/item_worth/worths_list.dm
index 610b34744fe..c5d4b22bb0c 100644
--- a/code/modules/item_worth/worths_list.dm
+++ b/code/modules/item_worth/worths_list.dm
@@ -752,7 +752,7 @@ var/list/worths = list(
/obj/structure/machinery/conveyor_switch = 10,
/obj/structure/machinery/disposal = 50,
/obj/structure/machinery/blackbox_recorder = -950,
- /obj/structure/machinery/r_n_d/protolathe = -1500,
+ /obj/structure/machinery/r_n_d/fabricator/protolathe = -1500,
/obj/structure/machinery/r_n_d/server = -2000,
/obj/structure/machinery/r_n_d = -100,
/obj/structure/machinery/auto_cloner = -1300,
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index 60fde774824..e80a2464e7c 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -189,7 +189,7 @@
if(ID)
if(params["choice"] == "claim")
if(points >= 0)
- ID.mining_points += points
+ ID.adjust_mining_points(points)
if(points != 0)
ping("\The [src] pings, \"Point transfer complete! Transaction total: [points] points!\"")
var/character_id = astype(ID.mob_id.resolve(), /mob/living/carbon/human/)?.character_id
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index 79fb3bc2660..4a221e31cd8 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -148,12 +148,12 @@ GLOBAL_LIST_INIT(minevendor_list, list(
if(prize.cost <= ID.mining_points)
if(prize.shuttle)
if(SScargo.order_mining(prize.equipment_path))
- ID.mining_points -= prize.cost
+ ID.adjust_mining_points(-prize.cost)
to_chat(usr, SPAN_NOTICE("Order passed. Your order has been placed on the next available supply shuttle."))
else
to_chat(usr, SPAN_DANGER("{ERR Code: NO_SHUTTLE_SPACE} Order failed! Please try again."))
else
- ID.mining_points -= prize.cost
+ ID.adjust_mining_points(-prize.cost)
if(prize.amount != -1)
prize.amount--
new prize.equipment_path(get_turf(src))
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 689957bf9c4..538c6ee3fdb 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -868,7 +868,7 @@
if(istype(attacking_item, /obj/item/card/id))
if(points)
var/obj/item/card/id/C = attacking_item
- C.mining_points += points
+ C.adjust_mining_points(points)
to_chat(user, SPAN_INFO("You transfer [points] points to \the [C]."))
points = 0
else
diff --git a/code/modules/mob/abstract/freelook/ai/update_triggers.dm b/code/modules/mob/abstract/freelook/ai/update_triggers.dm
index 7a17c6aaff1..8042244c7bb 100644
--- a/code/modules/mob/abstract/freelook/ai/update_triggers.dm
+++ b/code/modules/mob/abstract/freelook/ai/update_triggers.dm
@@ -13,6 +13,6 @@
on_open_network = TRUE
GLOB.cameranet.add_source(src)
else
- GLOB.cameranet.update_visibility(src)
+ GLOB.cameranet.update_visibility(src, FALSE)
invalidateCameraCache()
diff --git a/code/modules/mob/abstract/ghost/storyteller/storyteller_verbs.dm b/code/modules/mob/abstract/ghost/storyteller/storyteller_verbs.dm
index 366baf9676c..429b1a0b066 100644
--- a/code/modules/mob/abstract/ghost/storyteller/storyteller_verbs.dm
+++ b/code/modules/mob/abstract/ghost/storyteller/storyteller_verbs.dm
@@ -37,6 +37,21 @@
return
return create_mob(usr)
+ else if(href_list["storyteller_jump_to"])
+ if(usr != src)
+ return
+
+ var/mob/target = locate(href_list["storyteller_jump_to"])
+ if(!istype(target))
+ return
+
+ var/turf/target_turf = get_turf(target)
+ if(target_turf)
+ abstract_move(target_turf)
+ else
+ to_chat(src, SPAN_WARNING("That player is not currently on a valid turf."))
+ return
+
else if(href_list["object_list"])
if(!GLOB.config.allow_admin_spawning)
to_chat(usr, "Spawning of items is not allowed.")
diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm
index 3ab0ab85093..a887ccd86dd 100644
--- a/code/modules/mob/language/language.dm
+++ b/code/modules/mob/language/language.dm
@@ -24,7 +24,7 @@
var/list/exclaim_verb = list("exclaims")
/// Used when a sentence ends in !!
- var/list/shout_verb = list("shouts", "yells", "screams")
+ var/list/shout_verb = list("shouts", "yells", "screams", "broadcasts")
/// Optional. When not specified speech_verb + quietly/softly is used instead.
var/list/whisper_verb = null
diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm
index ff45c14ca7c..9b1f2842f96 100644
--- a/code/modules/mob/language/station.dm
+++ b/code/modules/mob/language/station.dm
@@ -259,12 +259,12 @@
personal_name += "[pick(name_sounds)]"
new_name += "[capitalize(personal_name)]"
switch(hive)
- if("C'thur Hive")
- new_name += "C'thur"
- if("K'lax Hive")
- new_name += "K'lax"
- if("Zo'ra Hive")
- new_name += "Zo'ra"
+ if("C'thur")
+ new_name += " C'thur"
+ if("K'lax")
+ new_name += " K'lax"
+ if("Zo'ra")
+ new_name += " Zo'ra"
else
var/list/hive_names = list("Zo'ra" = 3, "K'lax" = 1, "C'thur" = 1)
new_name += " [pickweight(hive_names)]"
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 2d1bd0ff9fa..76603598123 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -209,6 +209,10 @@
if(wrists && !skipwrists)
msg += "[get_pronoun("He")] [get_pronoun("is")] wearing [icon2html(wrists, user)] \a [wrists] [wrists.get_wrist_examine_text(src)].\n"
+ //closed eyes
+ if(!skipeyes && eyes_are_closed())
+ msg += "[get_pronoun("His")] eyes are closed.\n"
+
//Jitters
if(is_jittery)
if(jitteriness >= 300)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index b77f420ca30..f2904f8314a 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -925,6 +925,9 @@
return base_flash_protection
/mob/living/carbon/human/flash_act(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, ignore_inherent = FALSE, type = /atom/movable/screen/fullscreen/flash, length = 2.5 SECONDS)
+ if(eyes_are_closed())
+ return FALSE
+
if(..())
var/obj/item/organ/E = get_eyes(no_synthetic = !affect_silicon)
if(istype(E))
@@ -2325,9 +2328,7 @@
/mob/living/proc/look_up_open_space(var/turf/T)
if(client && !MOB_IS_INCAPACITATED(INCAPACITATION_DISABLED))
- if(z_eye)
- reset_view(null)
- QDEL_NULL(z_eye)
+ if(z_eye && clear_z_eye())
return
var/turf/above = GET_TURF_ABOVE(T)
if(TURF_IS_MIMICING(above))
@@ -2348,9 +2349,7 @@
/mob/living/proc/look_down_open_space(var/turf/T)
if(client && !MOB_IS_INCAPACITATED(INCAPACITATION_DISABLED))
- if(z_eye)
- reset_view(null)
- QDEL_NULL(z_eye)
+ if(z_eye && clear_z_eye())
return
if(TURF_IS_MIMICING(T) && GET_TURF_BELOW(T))
z_eye = new /atom/movable/z_observer/z_down(T, src, T)
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index 255e7cb532c..0196c3539fd 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -205,6 +205,14 @@
return eyes
+/// Returns TRUE when this mob's vision organ has been voluntarily closed.
+/mob/living/carbon/human/proc/eyes_are_closed()
+ var/obj/item/organ/internal/eyes/eyes = get_eyes()
+ return eyes?.eyes_closed
+
+/mob/living/carbon/human/is_blind()
+ return ..() || eyes_are_closed()
+
/mob/living/carbon/human/proc/awaken_psi_basic(var/source)
var/static/list/psi_operancy_messages = list(
"There's something in your skull!",
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 48ce3be721c..73cc4b1acc4 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -771,7 +771,7 @@
if(!H.client)//no client, no screen to update
return 1
- H.set_fullscreen(H.eye_blind, "blind", /atom/movable/screen/fullscreen/blind)
+ H.set_fullscreen(H.eye_blind || H.eyes_are_closed(), "blind", /atom/movable/screen/fullscreen/blind)
H.set_fullscreen(H.stat == UNCONSCIOUS, "blackout", /atom/movable/screen/fullscreen/blackout)
if(GLOB.config.welder_vision)
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index d4b4ee2e3b2..3105229cb51 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -315,7 +315,7 @@ There are several things that need to be remembered:
var/icon_key = "[species.race_key][g][s_tone][r_skin][g_skin][b_skin][lipstick_color || "nolips"][!!husk][!!fat][!!skeleton][is_frenzied]"
var/obj/item/organ/internal/eyes/eyes = get_eyes()
if(eyes)
- icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])]"
+ icon_key += "[rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])][eyes.eyes_closed ? "closed" : "open"]"
else
icon_key += "#000000"
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 2451f9ec903..7ee8ea339a9 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -923,6 +923,9 @@ default behaviour is:
/mob/living/Destroy()
cameraFollow = null
+ if(camera_view_cancel_action)
+ camera_view_cancel_action.Remove(src)
+ QDEL_NULL(camera_view_cancel_action)
if (length(actions))
for (var/datum/action/action in actions)
action.Remove(src)
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 65cddec66bb..a6f17c32188 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -56,8 +56,7 @@
//Auras, essentially magic and encompassing around us, gets checked first
if(!src.aura_check(AURA_TYPE_BULLET, hitting_projectile, def_zone, piercing_hit))
blocked = 100
- return BULLET_ACT_FORCE_PIERCE
-
+ return BULLET_ACT_BLOCK
//Shields, in front of us (hopefully), check the bullet before it reaches us
var/shield_check = check_shields(hitting_projectile.damage, hitting_projectile, hitting_projectile.firer, def_zone, "the [hitting_projectile.name]")
@@ -502,6 +501,8 @@
if(A.CheckRemoval(src))
A.Remove(src)
+ update_camera_view_action()
+
for(var/obj/item/I in src)
if(!I.action_button_name)
continue
@@ -549,6 +550,41 @@
return
+/mob/living/proc/is_viewing_z_eye()
+ return client && z_eye && client.eye == z_eye
+
+/mob/living/is_viewing_remote_view()
+ return ..() || is_viewing_z_eye()
+
+/mob/living/proc/clear_z_eye()
+ if(!z_eye)
+ return FALSE
+ var/was_viewing_z_eye = is_viewing_z_eye()
+ if(was_viewing_z_eye)
+ reset_view(null)
+ QDEL_NULL(z_eye)
+ update_camera_view_action()
+ return was_viewing_z_eye
+
+/mob/living/proc/update_camera_view_action()
+ if(is_viewing_remote_view())
+ if(!camera_view_cancel_action)
+ camera_view_cancel_action = new
+ camera_view_cancel_action.Grant(src)
+ else if(camera_view_cancel_action?.owner)
+ camera_view_cancel_action.Remove(src)
+
+/mob/living/proc/cancel_remote_view()
+ if(istype(machine, /obj/structure/machinery/computer/ship))
+ var/obj/structure/machinery/computer/ship/ship_console = machine
+ if(ship_console.viewing_overmap(src))
+ ship_console.unlook(src)
+ update_camera_view_action()
+ return
+
+ cancel_camera()
+ update_camera_view_action()
+
/mob/living/update_action_buttons()
if(!hud_used) return
if(!client) return
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index b730e4678e9..cb4c41bbb0a 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -27,6 +27,7 @@
var/mob/living/cameraFollow = null
var/list/datum/action/actions = list()
+ var/datum/action/cancel_camera_view/camera_view_cancel_action
/// Time of death
var/tod = null
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 1f2fa8a625e..478ca87483e 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -241,7 +241,8 @@ var/list/channel_to_radio_key = new
to_chat(src, SPAN_WARNING("You try to speak, but nothing comes out!"))
return
- var/message_mode = parse_message_mode(text, "headset")
+ var/is_broadcast = verb == "broadcasts"
+ var/message_mode = is_broadcast ? null : parse_message_mode(text, "headset")
var/regex/emote = regex("^(\[\\*^\])\[^*\]+$")
@@ -325,7 +326,7 @@ var/list/channel_to_radio_key = new
msg.speech_sound = handle_v[1]
msg.sound_vol = handle_v[2]
msg.italics = handle_v[3]
- msg.font_size = get_font_size_modifier()
+ msg.font_size = is_broadcast ? FONT_SIZE_HUGE : get_font_size_modifier()
//speaking into radios
if(length(used_radios))
@@ -384,6 +385,8 @@ var/list/channel_to_radio_key = new
langchat_styles = list("langchat_italic")
if(is_shouting)
langchat_styles = list("langchat_yell")
+ if(is_broadcast)
+ langchat_styles += "radio"
langchat_say_message(msg, get_hearers_in_view(msg.message_range, src), additional_styles = langchat_styles)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index b154db77774..eddcd63752a 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -521,7 +521,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
if((world.time - last_emergency_message_time) < AI_EMERGENCY_MESSAGE_COOLDOWN)
to_chat(src, SPAN_WARNING("Arrays are recycling. You need to wait [DisplayTimeText(AI_EMERGENCY_MESSAGE_COOLDOWN - (world.time - last_emergency_message_time))] before you can send another message."))
return FALSE
- var/input = sanitize(input(usr, "Please choose a message to transmit to [SSatlas.current_map.boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", ""))
+ var/input = sanitize(input(usr, "Please choose a message to transmit to [SSatlas.current_map.boss_short] via bluespace. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", ""))
if(!input)
return FALSE
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 1100f37cdb3..b141b893e1d 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -270,7 +270,7 @@
src.unset_machine()
src.reset_view(null)
return 0
- if (stat == 2 || !C.status || !(src.network in C.network)) return 0
+ if (stat == 2 || !C.can_use() || !(src.network in C.network)) return 0
// ok, we're alive, camera is good and in our network...
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 421c15f9969..628e6da3eb2 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -83,7 +83,7 @@
melee_damage_lower = 15
melee_damage_upper = 20
armor_penetration = 30
- venom_per_bite = 1
+ venom_per_bite = 8
speed = -2
venom_type = /singleton/reagent/toxin/greimorian_eggs
fed = 1
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm
index 58aa62e758a..d126b6c74f9 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm
@@ -212,12 +212,17 @@
projectiletype = /obj/projectile/bullet/pistol/hivebotspike/needle
rapid = 1
-/mob/living/simple_animal/hostile/hivebot/playable/
+/mob/living/simple_animal/hostile/hivebot/playable
name = "Hivebot destroyer"
desc = "A primitive-yet-sturdy hovering robot, with some menacing looking blades jutting out from it. This one seems unusually aware of its surroundings."
icon_state = "hivebotdestroyer"
health = 350
maxhealth = 350
+ emote_sounds = list(
+ 'sound/effects/creatures/hivebot/hivebot-bark-001.ogg',
+ 'sound/effects/creatures/hivebot/hivebot-bark-003.ogg',
+ 'sound/effects/creatures/hivebot/hivebot-bark-005.ogg',
+ )
melee_damage_lower = 20
melee_damage_upper = 30
armor_penetration = 20
@@ -234,6 +239,7 @@
real_name = name
if(playable && !ckey && !client)
SSghostroles.add_spawn_atom("hivebotdestroyer", src)
+ default_language = GLOB.all_languages[LANGUAGE_HIVEBOT]
/mob/living/simple_animal/hostile/hivebot/playable/Destroy()
SSghostroles.remove_spawn_atom("hivebotdestroyer", src)
@@ -261,6 +267,7 @@
real_name = name
if(playable && !ckey && !client)
SSghostroles.add_spawn_atom("hivebotmarksman", src)
+ default_language = GLOB.all_languages[LANGUAGE_HIVEBOT]
/mob/living/simple_animal/hostile/hivebot/playable/ranged/Destroy()
SSghostroles.remove_spawn_atom("hivebotmarksman", src)
@@ -287,6 +294,7 @@
real_name = name
if(playable && !ckey && !client)
SSghostroles.add_spawn_atom("hivebotoverseer", src)
+ default_language = GLOB.all_languages[LANGUAGE_HIVEBOT]
/mob/living/simple_animal/hostile/hivebot/playable/overseer/Destroy()
SSghostroles.remove_spawn_atom("hivebotoverseer", src)
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon_projectiles.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon_projectiles.dm
index ef4b6ae38c9..f115bd76200 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon_projectiles.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon_projectiles.dm
@@ -23,3 +23,7 @@
muzzle_type = /obj/effect/projectile/muzzle/laser/blue
tracer_type = /obj/effect/projectile/tracer/laser/blue
impact_type = /obj/effect/projectile/impact/laser/blue
+
+/obj/projectile/beam/hivebot/incendiary/boss
+ damage = 35
+ armor_penetration = 25
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index b2dfda03b58..ea836e3c2f7 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -369,6 +369,9 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile)
/mob/living/simple_animal/hostile/proc/OpenFire(atom/target, ignore_visibility = FALSE)
set waitfor = FALSE
+ if(!isturf(loc) || captured)
+ return
+
if(QDELETED(target))
LoseTarget()
return
@@ -415,6 +418,8 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile)
return target_hit
/mob/living/simple_animal/hostile/proc/shoot_wrapper(atom/target, location, user)
+ if(!isturf(loc))
+ return
Shoot(target, location, user)
if(casingtype)
new casingtype(loc)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index c3b5863509b..4181b869806 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -411,8 +411,20 @@
else
client.perspective = EYE_PERSPECTIVE
client.eye = loc
+ if(istype(src, /mob/living))
+ var/mob/living/living_mob = src
+ living_mob.update_camera_view_action()
return
+/mob/proc/is_viewing_camera()
+ return client && istype(client.eye, /obj/structure/machinery/camera)
+
+/mob/proc/is_viewing_overmap()
+ return client && istype(client.eye, /obj/effect/overmap)
+
+/mob/proc/is_viewing_remote_view()
+ return is_viewing_camera() || is_viewing_overmap()
+
/mob/proc/show_inv(mob/user)
user.set_machine(src)
@@ -716,6 +728,9 @@
set name = "Cancel Camera View"
set category = "OOC"
unset_machine()
+ if(isliving(src))
+ var/mob/living/living_mob = src
+ living_mob.clear_z_eye()
reset_view(null)
/mob/Topic(href, href_list)
diff --git a/code/modules/modular_computers/NTNet/NTNet.dm b/code/modules/modular_computers/NTNet/NTNet.dm
index dee472f0cce..9e79706698a 100644
--- a/code/modules/modular_computers/NTNet/NTNet.dm
+++ b/code/modules/modular_computers/NTNet/NTNet.dm
@@ -1,7 +1,7 @@
GLOBAL_DATUM_INIT(ntnet_global, /datum/ntnet, new)
-// This is the NTNet datum. There can be only one NTNet datum in game at once. Modular computers read data from this.
+/// This is the NTNet datum. There can be only one NTNet datum in game at once. Modular computers read data from this.
/datum/ntnet
var/list/relays = list()
var/list/logs = list()
@@ -13,22 +13,24 @@ GLOBAL_DATUM_INIT(ntnet_global, /datum/ntnet, new)
var/list/available_news = list()
var/list/fileservers = list()
var/list/datum/ntnet_account/users = list()
- // Amount of logs the system tries to keep in memory. Keep below 999 to prevent byond from acting weirdly.
- // High values make displaying logs much laggier.
+ /// Amount of logs the system tries to keep in memory. Keep below 999 to prevent byond from acting weirdly.
+ /// High values make displaying logs much laggier.
var/setting_maxlogcount = 100
- // These only affect wireless. LAN (consoles) are unaffected since it would be possible to create scenario where someone turns off NTNet, and is unable to turn it back on since it refuses connections
+ /// These only affect wireless. LAN (consoles) are unaffected since it would be possible to create scenario where someone turns off NTNet, and is unable to turn it back on since it refuses connections
var/setting_softwaredownload = TRUE
var/setting_peertopeer = TRUE
var/setting_communication = TRUE
var/setting_systemcontrol = TRUE
- var/setting_disabled = FALSE // Setting to 1 will disable all wireless, independently on relays status.
-
- var/intrusion_detection_enabled = TRUE // Whether the IDS warning system is enabled
- var/intrusion_detection_alarm = FALSE // Set when there is an IDS warning due to malicious (antag) software.
+ /// Setting to 1 will disable all wireless, independently on relays status.
+ var/setting_disabled = FALSE
+ /// Whether the IDS warning system is enabled
+ var/intrusion_detection_enabled = TRUE
+ /// Set when there is an IDS warning due to malicious (antag) software.
+ var/intrusion_detection_alarm = FALSE
-// If new NTNet datum is spawned, it replaces the old one.
+/// If new NTNet datum is spawned, it replaces the old one.
/datum/ntnet/New()
if(GLOB.ntnet_global && (GLOB.ntnet_global != src))
GLOB.ntnet_global = src // There can be only one.
@@ -41,7 +43,7 @@ GLOBAL_DATUM_INIT(ntnet_global, /datum/ntnet, new)
//add some default channels
new /datum/ntnet_conversation("NTNet Relay", TRUE)
-// Simplified logging: Adds a log. log_string is mandatory parameter, source is optional.
+/// Simplified logging: Adds a log. log_string is mandatory parameter, source is optional.
/datum/ntnet/proc/add_log(var/log_string, var/obj/item/computer_hardware/network_card/source = null, var/messaging=FALSE)
var/log_text = "[worldtime2text()] - "
if(source)
@@ -62,18 +64,9 @@ GLOBAL_DATUM_INIT(ntnet_global, /datum/ntnet, new)
else
break
-// Checks whether NTNet operates. If parameter is passed checks whether specific function is enabled.
+/// Checks whether NTNet's core service operates. If parameter is passed checks whether specific function is enabled.
/datum/ntnet/proc/check_function(var/specific_action = 0)
- if(!relays || !relays.len) // No relays found. NTNet is down
- return FALSE
-
- var/operating = FALSE
-
- // Check all relays. If we have at least one working relay, network is up.
- for(var/obj/structure/machinery/ntnet_relay/R in relays)
- if(R.operable())
- operating = TRUE
- break
+ var/operating = has_operable_core()
if(setting_disabled)
return FALSE
@@ -88,7 +81,79 @@ GLOBAL_DATUM_INIT(ntnet_global, /datum/ntnet, new)
return (operating && setting_systemcontrol)
return operating
-// Builds lists that contain downloadable software.
+/datum/ntnet/proc/check_endpoint_function(var/specific_action = 0, var/ethernet = FALSE)
+ // Wireless firewall toggles do not affect wired endpoints, but wired endpoints still need a live core service
+ if(ethernet)
+ return has_operable_core()
+ return check_function(specific_action)
+
+/datum/ntnet/proc/has_operable_core()
+ if(!relays || !relays.len)
+ return FALSE
+
+ for(var/obj/structure/machinery/ntnet_relay/R in relays)
+ if(R.provides_core_service())
+ return TRUE
+ return FALSE
+
+/// 'For endpoint' signifies that sometimes we will abstract a device as being a modular computer when really all we care about is whether it is networked.
+/// This will likely need to be simplified in future.
+/datum/ntnet/proc/get_signal_for_endpoint(var/atom/endpoint, var/specific_action = 0, var/ethernet = FALSE, var/long_range = FALSE)
+ if(!istype(endpoint))
+ return 0
+
+ var/turf/endpoint_turf = get_turf(endpoint)
+ if(SSatlas.current_map.is_always_available_network_level(endpoint_turf?.z))
+ if(ethernet)
+ return 3
+ if(long_range)
+ return 2
+ return 1
+
+ if(!check_endpoint_function(specific_action, ethernet))
+ return 0
+
+ var/area/A = get_area(endpoint)
+ if(A?.centcomm_area && ethernet)
+ return 3
+
+ var/signal = 0
+ for(var/obj/structure/machinery/ntnet_relay/R in relays)
+ signal = max(signal, R.get_signal_for_endpoint(endpoint, ethernet, long_range))
+ return signal
+
+/datum/ntnet/proc/get_signal(var/obj/item/computer_hardware/network_card/card, var/specific_action = 0)
+ if(!istype(card) || !card.parent_computer)
+ return 0
+ return get_signal_for_endpoint(card.parent_computer, specific_action, card.ethernet, card.long_range)
+
+/datum/ntnet/proc/get_reachable_z_levels_for_endpoint(var/atom/endpoint, var/specific_action = 0, var/ethernet = FALSE, var/long_range = FALSE)
+ . = list()
+ var/turf/endpoint_turf = get_turf(endpoint)
+ if(SSatlas.current_map.is_always_available_network_level(endpoint_turf?.z))
+ . |= endpoint_turf.z
+ return
+ if(get_signal_for_endpoint(endpoint, specific_action, ethernet, long_range) <= 0)
+ return
+
+ for(var/obj/structure/machinery/ntnet_relay/R in relays)
+ if(R.can_route_to_core())
+ . |= R.get_covered_z_levels()
+
+/datum/ntnet/proc/get_reachable_z_levels(var/obj/item/computer_hardware/network_card/card, var/specific_action = 0)
+ . = list()
+ var/turf/endpoint_turf = get_turf(card?.parent_computer)
+ if(SSatlas.current_map.is_always_available_network_level(endpoint_turf?.z))
+ . |= endpoint_turf.z
+ return
+ if(get_signal(card, specific_action) <= 0)
+ return
+
+ for(var/obj/structure/machinery/ntnet_relay/R in relays)
+ if(R.can_route_to_core())
+ . |= R.get_covered_z_levels()
+
+/// Builds lists that contain downloadable software.
/datum/ntnet/proc/build_software_lists()
available_station_software = list()
available_antag_software = list()
@@ -109,7 +174,7 @@ GLOBAL_DATUM_INIT(ntnet_global, /datum/ntnet, new)
var/datum/modular_computer_app_presets/prs = new path()
available_software_presets.Add(prs)
-// Builds lists that contain downloadable software.
+/// Builds lists that contain downloadable software.
/datum/ntnet/proc/build_news_list()
available_news = list()
for(var/F in typesof(/datum/computer_file/data/news_article/))
@@ -117,14 +182,13 @@ GLOBAL_DATUM_INIT(ntnet_global, /datum/ntnet, new)
if(news.stored_data)
available_news.Add(news)
-
-// Attempts to find a downloadable file according to filename var
+/// Attempts to find a downloadable file according to filename var
/datum/ntnet/proc/find_ntnet_file_by_name(var/filename)
for(var/datum/computer_file/program/P in available_software)
if(filename == P.filename)
return P
-// Resets the IDS alarm
+/// Resets the IDS alarm
/datum/ntnet/proc/resetIDS()
intrusion_detection_alarm = FALSE
@@ -132,13 +196,13 @@ GLOBAL_DATUM_INIT(ntnet_global, /datum/ntnet, new)
resetIDS()
intrusion_detection_enabled = !intrusion_detection_enabled
-// Removes all logs
+/// Removes all logs
/datum/ntnet/proc/purge_logs()
logs = list()
messages = list()
add_log("-!- LOGS DELETED BY SYSTEM OPERATOR -!-")
-// Updates maximal amount of stored logs. Use this instead of setting the number, it performs required checks.
+/// Updates maximal amount of stored logs. Use this instead of setting the number, it performs required checks.
/datum/ntnet/proc/update_max_log_count(var/lognumber)
if(!lognumber)
return FALSE
diff --git a/code/modules/modular_computers/NTNet/NTNet_relay.dm b/code/modules/modular_computers/NTNet/NTNet_relay.dm
index 2fe39f0e849..1281e0c9e6c 100644
--- a/code/modules/modular_computers/NTNet/NTNet_relay.dm
+++ b/code/modules/modular_computers/NTNet/NTNet_relay.dm
@@ -1,6 +1,5 @@
-// Relays don't handle any actual communication. Global NTNet datum does that, relays only tell the datum if it should or shouldn't work.
/obj/structure/machinery/ntnet_relay
- name = "NTNet Quantum Relay"
+ name = "NTNet Bluespace Relay"
desc = "A very complex router and transmitter capable of connecting electronic devices together. Looks fragile."
use_power = POWER_USE_ACTIVE
active_power_usage = 20000 //20kW, appropriate for machine that keeps massive cross-Zlevel wireless network operational.
@@ -9,22 +8,34 @@
icon = 'icons/obj/machinery/telecomms.dmi'
anchored = TRUE
density = TRUE
- var/datum/ntnet/NTNet // This is mostly for backwards reference and to allow varedit modifications from ingame.
- var/enabled = TRUE // Set to FALSE if the relay was turned off
- var/dos_failure = FALSE // Set to TRUE if the relay failed due to (D)DoS attack
- var/list/dos_sources = list() // Backwards reference for qdel() stuff
+ /// This is mostly for backwards reference and to allow varedit modifications from ingame.
+ var/datum/ntnet/NTNet
+ /// Set to FALSE if the relay was turned off
+ var/enabled = TRUE
+ /// Set to TRUE if the relay failed due to (D)DoS attack
+ var/dos_failure = FALSE
+ /// Backwards reference for qdel() stuff
+ var/list/dos_sources = list()
+ /// Core relays are the NTNet source of truth. Field relays only extend a live core.
+ var/core_service = TRUE
+ /// Overmap tile range from this relay's sector to an operable core.
+ var/backhaul_range = 0
// Denial of Service attack variables
- var/dos_overload = 0 // Amount of DoS "packets" in this relay's buffer
- var/dos_capacity = 500 // Amount of DoS "packets" in buffer required to crash the relay
- var/dos_dissipate = 1 // Amount of DoS "packets" dissipated over time.
-
+ /// Amount of DoS "packets" in this relay's buffer
+ var/dos_overload = 0
+ /// Amount of DoS "packets" in buffer required to crash the relay
+ var/dos_capacity = 500
+ /// Amount of DoS "packets" dissipated over time.
+ var/dos_dissipate = 1
component_types = list(
- /obj/item/stack/cable_coil{amount = 15},
- /obj/item/circuitboard/ntnet_relay
+ /obj/item/circuitboard/ntnet_relay,
+ /obj/item/stack/cable_coil = 15,
+ /obj/item/stock_parts/micro_laser/high = 2,
+ /obj/item/stock_parts/subspace/filter,
+ /obj/item/stock_parts/subspace/crystal
)
-// TODO: Implement more logic here. For now it's only a placeholder.
/obj/structure/machinery/ntnet_relay/operable()
if(!..(EMPED))
return FALSE
@@ -34,6 +45,90 @@
return FALSE
return TRUE
+/obj/structure/machinery/ntnet_relay/proc/provides_core_service()
+ return core_service && operable() && is_valid_core_location()
+
+/obj/structure/machinery/ntnet_relay/proc/ensure_linked()
+ if(!SSatlas.current_map.use_overmap)
+ return linked
+ if(istype(linked) && (z in linked.map_z))
+ return linked
+ linked = null
+ return sync_linked()
+
+/obj/structure/machinery/ntnet_relay/proc/is_valid_core_location()
+ if(!SSatlas.current_map.use_overmap)
+ return TRUE
+ var/obj/effect/overmap/visitable/sector = ensure_linked()
+ if(istype(sector))
+ return sector.base
+ var/obj/effect/overmap/visitable/known_sector = GLOB.map_sectors["[z]"]
+ if(istype(known_sector))
+ return FALSE
+ return is_station_level(z)
+
+/obj/structure/machinery/ntnet_relay/proc/can_route_to_core()
+ if(!operable())
+ return FALSE
+ if(core_service)
+ return provides_core_service()
+ if(!GLOB.ntnet_global)
+ return FALSE
+ return !!get_backhaul_core()
+
+/obj/structure/machinery/ntnet_relay/proc/get_backhaul_core()
+ if(!GLOB.ntnet_global)
+ return
+ ensure_linked()
+ for(var/obj/structure/machinery/ntnet_relay/R in GLOB.ntnet_global.relays)
+ if(R == src || !R.provides_core_service())
+ continue
+ if(can_backhaul_to(R))
+ return R
+
+/obj/structure/machinery/ntnet_relay/proc/can_backhaul_to(var/obj/structure/machinery/ntnet_relay/core)
+ if(!istype(core) || !core.provides_core_service())
+ return FALSE
+ if(SSatlas.current_map.use_overmap)
+ var/obj/effect/overmap/visitable/source_sector = ensure_linked()
+ var/obj/effect/overmap/visitable/core_sector = core.ensure_linked()
+ if(!istype(source_sector) || !istype(core_sector))
+ return FALSE
+ return get_dist(source_sector, core_sector) <= backhaul_range
+ return AreConnectedZLevels(z, core.z)
+
+/obj/structure/machinery/ntnet_relay/proc/get_covered_z_levels()
+ if(SSatlas.current_map.use_overmap)
+ var/obj/effect/overmap/visitable/sector = ensure_linked()
+ if(istype(sector))
+ return sector.map_z.Copy()
+ return list()
+ return GetConnectedZlevels(z)
+
+/obj/structure/machinery/ntnet_relay/proc/covers_z(var/z_level)
+ if(!z_level || !can_route_to_core())
+ return FALSE
+ return z_level in get_covered_z_levels()
+
+/// 'For endpoint' signifies that sometimes we will abstract a device as being a modular computer when really all we care about is whether it is networked.
+/// This will likely need to be simplified in future.
+/obj/structure/machinery/ntnet_relay/proc/get_signal_for_endpoint(var/atom/endpoint, var/ethernet = FALSE, var/long_range = FALSE)
+ if(!istype(endpoint))
+ return 0
+ var/turf/T = get_turf(endpoint)
+ if(!istype(T) || !covers_z(T.z))
+ return 0
+ if(ethernet)
+ return 3
+ if(long_range)
+ return 2
+ return 1
+
+/obj/structure/machinery/ntnet_relay/proc/get_signal(var/obj/item/computer_hardware/network_card/card)
+ if(!istype(card) || !card.parent_computer)
+ return 0
+ return get_signal_for_endpoint(card.parent_computer, card.ethernet, card.long_range)
+
/obj/structure/machinery/ntnet_relay/update_icon()
ClearOverlays()
if(operable())
@@ -61,12 +156,12 @@
if((dos_overload > dos_capacity) && !dos_failure)
dos_failure = TRUE
update_icon()
- GLOB.ntnet_global.add_log("Quantum relay switched from normal operation mode to overload recovery mode.")
+ GLOB.ntnet_global.add_log("Bluespace relay switched from normal operation mode to overload recovery mode.")
// If the DoS buffer reaches 0 again, restart.
if((dos_overload == 0) && dos_failure)
dos_failure = FALSE
update_icon()
- GLOB.ntnet_global.add_log("Quantum relay switched from overload recovery mode to normal operation mode.")
+ GLOB.ntnet_global.add_log("Bluespace relay switched from overload recovery mode to normal operation mode.")
..()
/obj/structure/machinery/ntnet_relay/ui_interact(mob/user, datum/tgui/ui)
@@ -76,11 +171,18 @@
ui.open()
/obj/structure/machinery/ntnet_relay/ui_data(mob/user)
+ var/obj/structure/machinery/ntnet_relay/backhaul_core = core_service ? null : get_backhaul_core()
+ var/backhaul_online = core_service ? can_route_to_core() : !!backhaul_core
var/list/data = list()
data["enabled"] = enabled
data["dos_capacity"] = dos_capacity
data["dos_overload"] = dos_overload
data["dos_crashed"] = dos_failure
+ data["relay_class"] = core_service ? "Core" : "Field"
+ data["linked_sector"] = linked ? linked.name : "Unlinked"
+ data["backhaul_range"] = backhaul_range
+ data["backhaul_online"] = backhaul_online
+ data["backhaul_core"] = core_service ? "Self" : (backhaul_core?.linked ? backhaul_core.linked.name : "None")
return data
@@ -92,11 +194,11 @@
dos_overload = FALSE
dos_failure = FALSE
update_icon()
- GLOB.ntnet_global.add_log("Quantum relay manually restarted from overload recovery mode to normal operation mode.")
+ GLOB.ntnet_global.add_log("Bluespace relay manually restarted from overload recovery mode to normal operation mode.")
. = TRUE
if(action=="toggle")
enabled = !enabled
- GLOB.ntnet_global.add_log("Quantum relay manually [enabled ? "enabled" : "disabled"].")
+ GLOB.ntnet_global.add_log("Bluespace relay manually [enabled ? "enabled" : "disabled"].")
update_icon()
. = TRUE
@@ -113,12 +215,17 @@
if(GLOB.ntnet_global)
GLOB.ntnet_global.relays.Add(src)
NTNet = GLOB.ntnet_global
- GLOB.ntnet_global.add_log("New quantum relay activated. Current amount of linked relays: [NTNet.relays.len]")
+ sync_linked()
+ GLOB.ntnet_global.add_log("New bluespace relay activated. Current amount of linked relays: [NTNet.relays.len]")
+
+/obj/structure/machinery/ntnet_relay/LateInitialize()
+ . = ..()
+ sync_linked()
/obj/structure/machinery/ntnet_relay/Destroy()
if(GLOB.ntnet_global)
GLOB.ntnet_global.relays.Remove(src)
- GLOB.ntnet_global.add_log("Quantum relay connection severed. Current amount of linked relays: [NTNet.relays.len]")
+ GLOB.ntnet_global.add_log("Bluespace relay connection severed. Current amount of linked relays: [NTNet.relays.len]")
return ..()
/obj/structure/machinery/ntnet_relay/attackby(obj/item/attacking_item, mob/user)
@@ -140,3 +247,18 @@
qdel(src)
return
..()
+
+/obj/structure/machinery/ntnet_relay/field
+ name = "NTNet Field Relay"
+ desc = "A deployable NTNet relay that extends local network coverage while it has short-range backhaul to an operational core relay."
+ active_power_usage = 5000
+ enabled = FALSE
+ core_service = FALSE
+ backhaul_range = 1
+ component_types = list(
+ /obj/item/circuitboard/ntnet_relay/field,
+ /obj/item/stack/cable_coil = 15,
+ /obj/item/stock_parts/micro_laser/high = 2,
+ /obj/item/stock_parts/subspace/filter,
+ /obj/item/stock_parts/subspace/crystal
+ )
diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm
index 32e0adc407b..c975a6fd905 100644
--- a/code/modules/modular_computers/computers/modular_computer/core.dm
+++ b/code/modules/modular_computers/computers/modular_computer/core.dm
@@ -100,6 +100,8 @@
/obj/item/modular_computer/Destroy()
STOP_PROCESSING(SSprocessing, src)
+ reset_remote_viewers(TRUE)
+
SStgui.close_uis(src)
enabled = FALSE
@@ -289,6 +291,7 @@
active_program = null
else
return FALSE
+ reset_remote_viewers()
var/mob/user = usr
if(user && istype(user) && !forced && !QDELETED(src))
INVOKE_ASYNC(src, TYPE_PROC_REF(/datum, ui_interact), user) // Re-open the UI on this computer. It should show the main screen now.
@@ -304,6 +307,14 @@
active_program = null
else
return FALSE
+ reset_remote_viewers()
+
+/obj/item/modular_computer/proc/reset_remote_viewers(var/unset_viewers_machine = FALSE)
+ for(var/mob/M in GLOB.player_list)
+ if(M.machine == src && M.is_viewing_remote_view())
+ if(unset_viewers_machine)
+ M.unset_machine()
+ M.reset_view(null)
// Returns 0 for No Signal, 1 for Low Signal and 2 for Good Signal. 3 is for wired connection (always-on)
/obj/item/modular_computer/proc/get_ntnet_status(var/specific_action = 0)
diff --git a/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm b/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm
index fe77a3024bf..f3e0415f1b7 100644
--- a/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm
+++ b/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm
@@ -138,7 +138,7 @@
if(centcomm_message_cooldown)
to_chat(usr, SPAN_WARNING("Arrays recycling. Please stand by."))
return TRUE
- var/input = sanitize(tgui_input_text(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING CORDINATES\] via quantum entanglement.", "Emergency Me55sage", multiline = TRUE, encode = FALSE))
+ var/input = sanitize(tgui_input_text(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING CORDINATES\] via bluespace.", "Emergency Me55sage", multiline = TRUE, encode = FALSE))
if(!input || computer.use_check_and_message(usr))
return FALSE
Syndicate_announce(input, usr)
@@ -154,7 +154,7 @@
if(!is_relay_online())//Contact Centcom has a check, Syndie doesn't to allow for Traitor funs.
to_chat(usr, SPAN_WARNING("No Emergency Bluespace Relay detected. Unable to transmit message."))
return
- var/input = sanitize(tgui_input_text(usr, "Please choose a message to transmit to [SSatlas.current_map.boss_name] via quantum entanglement.", "Emergency Message", multiline = TRUE, encode = FALSE))
+ var/input = sanitize(tgui_input_text(usr, "Please choose a message to transmit to [SSatlas.current_map.boss_name] via bluespace.", "Emergency Message", multiline = TRUE, encode = FALSE))
if(!input || computer.use_check_and_message(usr))
return
Centcomm_announce(input, usr)
diff --git a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm
index 209e3cedf1d..830d92f074c 100644
--- a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm
+++ b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm
@@ -26,7 +26,7 @@
data["isAI"] = isAI(user)
data["crewmembers"] = list()
if(SSradio.telecomms_ping(computer))
- for(var/z_level in SSatlas.current_map.map_levels)
+ for(var/z_level in GLOB.ntnet_global.get_reachable_z_levels(computer.network_card))
data["crewmembers"] += GLOB.crew_repository.health_data(z_level)
data["security_level"] = seclevel2num(get_security_level())
diff --git a/code/modules/modular_computers/file_system/programs/research/ntmonitor.dm b/code/modules/modular_computers/file_system/programs/research/ntmonitor.dm
index 7900c79e1ac..36f8e40f062 100644
--- a/code/modules/modular_computers/file_system/programs/research/ntmonitor.dm
+++ b/code/modules/modular_computers/file_system/programs/research/ntmonitor.dm
@@ -21,6 +21,16 @@
data["ntnetstatus"] = GLOB.ntnet_global.check_function()
data["ntnetrelays"] = GLOB.ntnet_global.relays.len
+ data["ntnetcores"] = 0
+ data["ntnetfieldrelays"] = 0
+ data["ntnetroutedrelays"] = 0
+ for(var/obj/structure/machinery/ntnet_relay/R in GLOB.ntnet_global.relays)
+ if(R.core_service)
+ data["ntnetcores"]++
+ else
+ data["ntnetfieldrelays"]++
+ if(R.can_route_to_core())
+ data["ntnetroutedrelays"]++
data["idsstatus"] = GLOB.ntnet_global.intrusion_detection_enabled
data["idsalarm"] = GLOB.ntnet_global.intrusion_detection_alarm
diff --git a/code/modules/modular_computers/file_system/programs/security/camera.dm b/code/modules/modular_computers/file_system/programs/security/camera.dm
index d68ba5d039b..cf0a4e486f7 100644
--- a/code/modules/modular_computers/file_system/programs/security/camera.dm
+++ b/code/modules/modular_computers/file_system/programs/security/camera.dm
@@ -8,7 +8,7 @@
return
switch(network)
- if(NETWORK_THUNDER, NETWORK_NEWS)
+ if(NETWORK_THUNDER, NETWORK_NEWS, NETWORK_EXPEDITION)
return FALSE
if(NETWORK_REACTOR,NETWORK_ENGINEERING,NETWORK_ENGINEERING_OUTPOST,NETWORK_ALARM_ATMOS,NETWORK_ALARM_FIRE,NETWORK_ALARM_POWER)
return ACCESS_ENGINE
@@ -46,6 +46,15 @@
var/current_network
/// Used for camera monitor consoles from which this interface can be launched. If it exists, only provide that console's "console_networks" networks.
var/list/monitored_networks = list()
+ /// Used by non-modular camera consoles that run this program - abstracts as modular comp w/ network card.
+ var/atom/ntnet_endpoint
+ var/ntnet_endpoint_ethernet = FALSE
+ var/ntnet_endpoint_long_range = FALSE
+
+/datum/computer_file/program/camera_monitor/ui_host()
+ if(ntnet_endpoint)
+ return ntnet_endpoint
+ return ..()
/datum/computer_file/program/camera_monitor/ui_data(mob/user)
var/list/data = initial_data()
@@ -108,6 +117,7 @@
return 0
+/// If no network_access is passed, or if 0 is returned, we treat this as no camera access required. Allowed it.
/datum/computer_file/program/camera_monitor/proc/can_access_network(var/mob/user, var/network_access)
// No access passed, or 0 which is considered no access requirement. Allow it.
if(!network_access)
@@ -115,6 +125,19 @@
return (check_network_access(user, ACCESS_SECURITY) && GLOB.security_level >= SEC_LEVEL_BLUE) || check_network_access(user, network_access)
+/datum/computer_file/program/camera_monitor/proc/can_reach_camera(var/obj/structure/machinery/camera/C)
+ if(!C?.can_use())
+ return FALSE
+
+ var/turf/camera_turf = get_turf(C)
+ if(!camera_turf || !GLOB.ntnet_global)
+ return FALSE
+
+ if(computer?.network_card)
+ return (camera_turf.z in GLOB.ntnet_global.get_reachable_z_levels(computer.network_card, requires_ntnet_feature))
+
+ return (camera_turf.z in GLOB.ntnet_global.get_reachable_z_levels_for_endpoint(ntnet_endpoint, requires_ntnet_feature, ntnet_endpoint_ethernet, ntnet_endpoint_long_range))
+
/datum/computer_file/program/camera_monitor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if(.)
@@ -152,6 +175,10 @@
usr.reset_view(current_camera)
return TRUE
+/datum/computer_file/program/camera_monitor/kill_program(forced)
+ reset_current()
+ return ..()
+
/datum/computer_file/program/camera_monitor/proc/switch_to_camera(var/mob/user, var/obj/structure/machinery/camera/C)
//don't need to check if the camera works for AI because the AI jumps to the camera location and doesn't actually look through cameras.
if(isAI(user))
@@ -164,7 +191,7 @@
A.client.eye = A.eyeobj
return TRUE
- if(!is_contact_area(get_area(C)))
+ if(!can_reach_camera(C))
to_chat(user, SPAN_NOTICE("This camera is too far away to connect to!"))
return FALSE
@@ -186,6 +213,10 @@
if(!current_camera)
return 0
+ if(!can_reach_camera(current_camera))
+ reset_current()
+ return -1
+
var/viewflag = current_camera.check_eye(user)
if(viewflag < 0)
reset_current()
@@ -194,6 +225,8 @@
/datum/computer_file/program/camera_monitor/grants_equipment_vision(mob/user)
if(user.stat || user.blinded || !current_camera)
return FALSE
+ if(!can_reach_camera(current_camera))
+ return FALSE
return current_camera.grants_equipment_vision(user)
/datum/computer_file/program/camera_monitor/proc/set_current(var/obj/structure/machinery/camera/C)
@@ -233,8 +266,8 @@
/datum/computer_file/program/camera_monitor/news
filename = "idcammon"
- filedesc = "Journalism Camera Monitoring"
- extended_desc = "This program allows remote access to station's camera system. Some camera networks may have additional access requirements. This version has has a connection to news networks."
+ filedesc = "Public Camera Monitoring"
+ extended_desc = "This program allows remote access to station's camera system. Some camera networks may have additional access requirements. This version has has a connection to news and expeditionary networks."
size = 2
required_access_download = null
usage_flags = PROGRAM_ALL
@@ -242,5 +275,5 @@
/datum/computer_file/program/camera_monitor/news/modify_networks_list(var/list/networks)
networks = list()
networks.Add(list(list("tag" = NETWORK_NEWS, "has_access" = 1)))
- networks.Add(list(list("tag" = NETWORK_THUNDER, "has_access" = 1)))
+ networks.Add(list(list("tag" = NETWORK_EXPEDITION, "has_access" = 1)))
return networks
diff --git a/code/modules/modular_computers/file_system/programs/security/penalmechs.dm b/code/modules/modular_computers/file_system/programs/security/penalmechs.dm
index 8facaf3b60d..e80649d98f3 100644
--- a/code/modules/modular_computers/file_system/programs/security/penalmechs.dm
+++ b/code/modules/modular_computers/file_system/programs/security/penalmechs.dm
@@ -40,7 +40,7 @@
var/turf/mech_turf = get_turf(M)
mechData["location"] = "[mech_turf.x], [mech_turf.y], [mech_turf.z]"
- mechData["camera_status"] = M.camera.status
+ mechData["camera_status"] = M.camera.can_use()
mechData["lockdown"] = M.lockdown
mechs += list(mechData)
@@ -121,7 +121,7 @@
A.client.eye = A.eyeobj
return TRUE
- if(!is_contact_area(get_area(C)))
+ if(!can_reach_camera(C))
to_chat(user, SPAN_NOTICE("This camera is too far away to connect to!"))
return FALSE
@@ -130,6 +130,16 @@
user.reset_view(current_camera)
return TRUE
+/datum/computer_file/program/penal_mechs/proc/can_reach_camera(var/obj/structure/machinery/camera/C)
+ if(!C?.can_use())
+ return FALSE
+
+ var/turf/camera_turf = get_turf(C)
+ if(!camera_turf || !computer?.network_card || !GLOB.ntnet_global)
+ return FALSE
+
+ return (camera_turf.z in GLOB.ntnet_global.get_reachable_z_levels(computer.network_card, requires_ntnet_feature))
+
/datum/computer_file/program/penal_mechs/proc/set_current(var/obj/structure/machinery/camera/C)
if(current_camera == C)
return
diff --git a/code/modules/modular_computers/file_system/programs/system/client_manager.dm b/code/modules/modular_computers/file_system/programs/system/client_manager.dm
index 9444f416603..ff39f8dfbfa 100644
--- a/code/modules/modular_computers/file_system/programs/system/client_manager.dm
+++ b/code/modules/modular_computers/file_system/programs/system/client_manager.dm
@@ -26,7 +26,7 @@
/datum/computer_file/program/clientmanager/ui_data(mob/user)
var/list/data = list()
- data["ntnet_status"] = GLOB.ntnet_global.check_function(NTNET_SOFTWAREDOWNLOAD)
+ data["ntnet_status"] = computer.get_ntnet_status(NTNET_SOFTWAREDOWNLOAD)
return data
/datum/computer_file/program/clientmanager/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
@@ -35,7 +35,7 @@
if(action == "enroll")
. = TRUE
- if(!GLOB.ntnet_global.check_function(NTNET_SOFTWAREDOWNLOAD))
+ if(!computer.get_ntnet_status(NTNET_SOFTWAREDOWNLOAD))
to_chat(ui.user, SPAN_WARNING("Cannot connect to NTNet download servers. Please try again later."))
return
if(params["enroll_type"] & DEVICE_COMPANY)
diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm
index cad9523c77b..7cf86fe260e 100644
--- a/code/modules/modular_computers/hardware/network_card.dm
+++ b/code/modules/modular_computers/hardware/network_card.dm
@@ -8,13 +8,19 @@ GLOBAL_VAR_INIT(ntnet_card_uid, 1)
critical = FALSE
icon_state = "netcard_basic"
hardware_size = 1
- var/identification_id // Identification ID. Technically MAC address of this device. Can't be changed by user.
- var/identification_string = "" // Identification string, technically nickname seen in the network. Can be set by user.
+ /// Identification ID. Technically MAC address of this device. Can't be changed by user.
+ var/identification_id
+ /// Identification string, technically nickname seen in the network. Can be set by user.
+ var/identification_string = ""
var/long_range = FALSE
- var/ethernet = FALSE // Hard-wired, therefore always on, ignores NTNet wireless checks.
- var/obj/item/integrated_signaler/signal/sradio = FALSE // integrated signaler - not present on basic model.
- var/obj/item/integrated_signaler/signal/secondary_sradio = FALSE // second receiver for NTOS signaler software.
- var/obj/item/integrated_signaler/signal/transmit_sradio = FALSE // transmitter for NTOS signaler software.
+ /// Hard-wired, therefore always on, ignores NTNet wireless checks.
+ var/ethernet = FALSE
+ /// integrated signaler - not present on basic model.
+ var/obj/item/integrated_signaler/signal/sradio = FALSE
+ /// second receiver for NTOS signaler software.
+ var/obj/item/integrated_signaler/signal/secondary_sradio = FALSE
+ /// transmitter for NTOS signaler software.
+ var/obj/item/integrated_signaler/signal/transmit_sradio = FALSE
malfunction_probability = 1
/obj/item/computer_hardware/network_card/diagnostics(mob/user)
@@ -47,7 +53,7 @@ GLOBAL_VAR_INIT(ntnet_card_uid, 1)
/obj/item/computer_hardware/network_card/advanced
name = "advanced NTNet network card"
- desc = "An advanced network card for usage with standard NTNet frequencies. Its transmitter is strong enough to connect even off-station."
+ desc = "An advanced network card for usage with standard NTNet frequencies. Its transmitter can sustain high-bandwidth links to nearby NTNet relays."
long_range = TRUE
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 2)
power_usage = 150 // Better range but higher power usage.
@@ -110,11 +116,11 @@ GLOBAL_VAR_INIT(ntnet_card_uid, 1)
return TRUE
-// Returns a string identifier of this network card
+/// Returns a string identifier of this network card
/obj/item/computer_hardware/network_card/proc/get_network_tag()
return "[identification_string] (NID [identification_id])"
-// 0 - No signal, 1 - Low signal, 2 - High signal. 3 - Wired Connection
+/// 0 - No signal, 1 - Low signal, 2 - High signal. 3 - Wired Connection
/obj/item/computer_hardware/network_card/proc/get_signal(var/specific_action = 0)
if(!parent_computer) // Hardware is not installed in anything. No signal. How did this even get called?
return 0
@@ -122,27 +128,10 @@ GLOBAL_VAR_INIT(ntnet_card_uid, 1)
return 0
if(!check_functionality())
return 0
- if(!GLOB.ntnet_global || !GLOB.ntnet_global.check_function(specific_action))
+ if(!GLOB.ntnet_global)
return 0
- if(parent_computer)
- var/turf/T = get_turf(parent_computer)
- if((T && istype(T)) && is_station_level(T.z))
- // Computer is on station. Low/High signal depending on what type of network card you have
- if(ethernet)
- return 3
- else if(long_range)
- return 2
- else
- return 1
- var/area/A = get_area(parent_computer)
- if(A.centcomm_area && ethernet)
- return 3
-
- if(long_range) // Computer is not on station, but it has upgraded network card. Low signal.
- return 1
-
- return 0 // Computer is not on station and does not have upgraded network card. No signal.
+ return GLOB.ntnet_global.get_signal_for_endpoint(parent_computer, specific_action, ethernet, long_range)
/obj/item/computer_hardware/network_card/Destroy()
if(sradio)
diff --git a/code/modules/multiz/structures.dm b/code/modules/multiz/structures.dm
index 1998734cbd6..9e9635e93cc 100644
--- a/code/modules/multiz/structures.dm
+++ b/code/modules/multiz/structures.dm
@@ -418,6 +418,8 @@
/obj/structure/platform_stairs/full/south_north_cap/half
icon_state = "p_stair_sn_half_cap"
+// ---------- Platforms
+
/obj/structure/platform
name = "platform"
desc = "An archaic method of preventing travel along the X and Y axes if you are on a lower point on the Z-axis."
@@ -430,6 +432,14 @@
color = COLOR_TILED
pass_flags_self = LETPASSTHROW|PASSSTRUCTURE|PASSRAILING
+/obj/structure/platform/Initialize(mapload)
+ . = ..()
+ update_icon()
+
+/obj/structure/platform/update_icon()
+ if(dir == NORTH)
+ layer = ABOVE_HUMAN_LAYER
+
/obj/structure/platform/dark
icon_state = "platform_dark"
color = COLOR_DARK_GUNMETAL
@@ -499,19 +509,58 @@
icon_state = "ledge_dark"
color = COLOR_DARK_GUNMETAL
+/obj/structure/platform/rock
+ icon_state = "colorable_rock_platform"
+ color = COLOR_GRAY40
+
+// ---------- Non-colourable platforms
+
+/obj/structure/platform/metal
+ icon_state = "metal_platform"
+ color = null
+
+/obj/structure/platform/metal_alt
+ icon_state = "metal_platform_alt"
+ color = null
+
+/obj/structure/platform/engineer
+ icon_state = "engineer_platform"
+ color = null
+
+/obj/structure/platform/accented
+ icon_state = "accented_platform"
+ color = null
+
+/obj/structure/platform/column
+ icon_state = "column_platform"
+ color = null
+
+// ---------- Platform cutouts
+
/obj/structure/platform/cutout
icon_state = "platform_cutout"
- density = 0
+ density = FALSE
+
+/obj/structure/platform/cutout/CanPass()
+ return TRUE
/obj/structure/platform/cutout/dark
icon_state = "platform_cutout_dark"
color = COLOR_DARK_GUNMETAL
-/obj/structure/platform/cutout/CanPass()
- return TRUE
+/obj/structure/platform/cutout/metal
+ icon_state = "metal_platform_cutout"
+ color = null
-/obj/structure/platform/bar
- layer = ABOVE_HUMAN_LAYER
+/obj/structure/platform/cutout/metal_alt
+ icon_state = "metal_platform_alt_cutout"
+ color = null
+
+/obj/structure/platform/cutout/column
+ icon_state = "column_platform_cutout"
+ color = null
+
+// ---------- Platform decos
/// No special CanPass for this one.
/obj/structure/platform_deco
@@ -522,6 +571,14 @@
icon_state = "platform_deco"
color = COLOR_TILED
+/obj/structure/platform_deco/Initialize(mapload)
+ . = ..()
+ update_icon()
+
+/obj/structure/platform_deco/update_icon()
+ if(dir & (NORTH|SOUTH))
+ layer = ABOVE_HUMAN_LAYER
+
/obj/structure/platform_deco/dark
icon_state = "platform_deco_dark"
color = COLOR_DARK_GUNMETAL
@@ -532,3 +589,29 @@
/obj/structure/platform_deco/ledge/dark
icon_state = "ledge_deco_dark"
color = COLOR_DARK_GUNMETAL
+
+/obj/structure/platform_deco/rock
+ icon_state = "colorable_rock_platform_deco"
+ color = COLOR_GRAY40
+
+// ---------- Non-colourable platform decos
+
+/obj/structure/platform_deco/metal
+ icon_state = "metal_platform_deco"
+ color = null
+
+/obj/structure/platform_deco/metal_alt
+ icon_state = "metal_platform_alt_deco"
+ color = null
+
+/obj/structure/platform_deco/engineer
+ icon_state = "engineer_platform_deco"
+ color = null
+
+/obj/structure/platform_deco/accented
+ icon_state = "accented_platform_deco"
+ color = null
+
+/obj/structure/platform_deco/column
+ icon_state = "column_platform_deco"
+ color = null
diff --git a/code/modules/organs/internal/eyes.dm b/code/modules/organs/internal/eyes.dm
index dbfdbd77b15..242605da4ac 100644
--- a/code/modules/organs/internal/eyes.dm
+++ b/code/modules/organs/internal/eyes.dm
@@ -12,6 +12,26 @@
toxin_type = CE_OCULOTOXIC
var/list/eye_colour = list(0,0,0)
var/singular_name = "eye"
+ /// Whether the owner has voluntarily closed this organ.
+ var/eyes_closed = FALSE
+
+/obj/item/organ/internal/eyes/verb/toggle_eyes()
+ set name = "Open/Close Eyes"
+ set desc = "Close your eyes to block your vision and protect them from bright flashes."
+ set category = "IC"
+ set src in usr
+
+ if(!owner || usr != owner || owner.incapacitated())
+ return
+
+ eyes_closed = !eyes_closed
+ if(eyes_closed)
+ owner.custom_emote(VISIBLE_MESSAGE, "closes their eyes.")
+ else
+ owner.custom_emote(VISIBLE_MESSAGE, "opens their eyes.")
+
+ owner.update_body()
+ owner.handle_vision()
/obj/item/organ/internal/eyes/proc/update_colour()
if(!owner)
diff --git a/code/modules/organs/internal/species/machine/power_core.dm b/code/modules/organs/internal/species/machine/power_core.dm
index 7c2bedd8f55..56f61d39a92 100644
--- a/code/modules/organs/internal/species/machine/power_core.dm
+++ b/code/modules/organs/internal/species/machine/power_core.dm
@@ -13,7 +13,7 @@
/// If the power core's hatch is open. Battery can be removed if TRUE.
var/open = FALSE
/// The type (and later instance) of the cell inside this organ.
- var/obj/item/cell/cell = /obj/item/cell/super
+ var/obj/item/cell/cell = /obj/item/cell/high
/// The cost of movement below (check process()) is multiplied by this factor.
var/move_charge_factor = 1
/// At 0.8 completely depleted after 60ish minutes of constant walking or 130 minutes of standing still.
diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm
index ad49a9ec910..7b70bf3a39b 100644
--- a/code/modules/organs/organ_icon.dm
+++ b/code/modules/organs/organ_icon.dm
@@ -60,17 +60,22 @@
is_frenzied = TRUE
if(owner.species.has_organ[owner.species.vision_organ])
var/obj/item/organ/internal/eyes/eyes = owner.get_eyes()
- if(eyes && species.eyes && !is_frenzied)
+ if(eyes && species.eyes && (!is_frenzied || eyes.eyes_closed))
var/eyecolor
- if (eyes.eye_colour)
+ if(eyes.eye_colour && !eyes.eyes_closed)
eyecolor = rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3])
- var/cache_key = "[species.eyes]_[eyecolor || "nocolor"]"
+ var/cache_key = "[species.eyes]_[eyes.eyes_closed ? "closed" : (eyecolor || "nocolor")]"
var/icon/eyes_icon = SSicon_cache.human_eye_cache[cache_key]
if (!eyes_icon)
eyes_icon = new/icon(species.eyes_icons, species.eyes)
- if(eyecolor)
+ if(eyes.eyes_closed)
+ // A translucent black eye mask darkens the skin beneath it, creating eyelids
+ // which follow both colour-based skin and tone-shaded human complexions.
+ eyes_icon.Blend(rgb(0, 0, 0), ICON_MULTIPLY)
+ eyes_icon.ChangeOpacity(0.2)
+ else if(eyecolor)
eyes_icon.Blend(eyecolor, species.eyes_icon_blend)
else
eyes_icon.Blend(rgb(128,0,0), species.eyes_icon_blend)
@@ -109,6 +114,9 @@
var/list/bonus_overlays = list()
var/obj/item/organ/internal/eyes/eyes = H.get_eyes()
+ if(eyes?.eyes_closed)
+ return mob_overlays
+
if(eyes && BP_IS_ROBOTIC(eyes))
var/datum/robolimb/robolimb_data = GLOB.all_robolimbs[eyes.model]
if(robolimb_data.emissive)
diff --git a/code/modules/organs/subtypes/parasite/greim_eggs.dm b/code/modules/organs/subtypes/parasite/greim_eggs.dm
index c3c4d082906..e71ac588787 100644
--- a/code/modules/organs/subtypes/parasite/greim_eggs.dm
+++ b/code/modules/organs/subtypes/parasite/greim_eggs.dm
@@ -8,8 +8,8 @@
parent_organ = BP_CHEST
subtle = 1
- /// ~3 minutes/stage (at two seconds/tick)
- stage_interval = 90
+ /// ~4 minutes/stage (at two seconds/tick)
+ stage_interval = 120
max_stage = 5
@@ -44,25 +44,25 @@
to_chat(affecting_organ.owner, SPAN_NOTICE("Your [affecting_organ.name] itches."))
if(prob(33))
- owner.adjustNutritionLoss(3)
+ owner.adjustNutritionLoss(2)
if(stage >= 2)
- if(prob(8))
+ if(prob(6))
gestating_spiderlings += 1
if(prob(33))
- owner.adjustNutritionLoss(4)
+ owner.adjustNutritionLoss(3)
if(prob(5))
owner.emote("whimper")
if(prob(2))
to_chat(owner, SPAN_WARNING(pick("You feel nauseous and hungry at the same time.", "You feel a burning pain in your [parent_organ].", "Your sense of balance seems broken.")))
if(stage >= 3)
- if(prob(6))
+ if(prob(4))
gestating_spiderlings += 1
if(prob(33))
- owner.adjustNutritionLoss(5)
+ owner.adjustNutritionLoss(4)
if(prob(10))
affecting_organ.take_damage(rand(1,3))
owner.adjustHalLoss(8)
@@ -75,11 +75,10 @@
owner.seizure(0.4)
if(stage >= 4)
- if(prob(6))
+ if(prob(5))
gestating_spiderlings += rand(1,2)
if(prob(5))
- owner.reagents.add_reagent(/singleton/reagent/toxin/greimorian_eggs, (gestating_spiderlings / 3))
owner.adjustHalLoss(12)
to_chat(owner, SPAN_WARNING(pick("A sharp, caustic pain boils out from your [affecting_organ.name]!", "You can feel the flesh of your [affecting_organ.name] beginning to bulge!", "It's going to burst! Your [affecting_organ.name] is going to burst!")))
if(prob(5))
@@ -91,7 +90,7 @@
if(prob(10))
owner.seizure(0.6)
- if(prob(5))
+ if(prob(4))
ruptured = TRUE
owner.adjustHalLoss(75)
owner.seizure()
diff --git a/code/modules/overmap/exoplanets/decor/_turfs.dm b/code/modules/overmap/exoplanets/decor/_turfs.dm
index 08f160a6f82..b557916377a 100644
--- a/code/modules/overmap/exoplanets/decor/_turfs.dm
+++ b/code/modules/overmap/exoplanets/decor/_turfs.dm
@@ -9,6 +9,7 @@
has_resources = TRUE
footstep_sound = SFX_FOOTSTEP_ASTEROID
turf_flags = TURF_FLAG_BACKGROUND
+ has_edge_icon = FALSE
var/diggable = 1
var/dirt_color = "#7c5e42"
@@ -100,10 +101,13 @@
AddOverlays(resource_indicator)
if(LAZYLEN(decals))
AddOverlays(decals)
+
+ var/list/overlay_group = list()
for(var/direction in GLOB.cardinals)
var/turf/turf_to_check = get_step(src,direction)
if(!istype(turf_to_check, type))
var/image/rock_side = image(icon, "edge[pick(0,1,2)]", dir = turn(direction, 180))
+ rock_side.layer = ABOVE_PLATING_LAYER
switch(direction)
if(NORTH)
rock_side.pixel_y += world.icon_size
@@ -113,10 +117,13 @@
rock_side.pixel_x += world.icon_size
if(WEST)
rock_side.pixel_x -= world.icon_size
- overlays += rock_side
+ overlay_group += rock_side
+
else if(update_neighbors)
turf_to_check.update_icon()
+ AddOverlays(overlay_group)
+
/turf/simulated/floor/exoplanet/water/shallow
name = "shallow water"
desc = "Some water shallow enough to wade through."
diff --git a/code/modules/overmap/exoplanets/decor/turfs/abyss.dm b/code/modules/overmap/exoplanets/decor/turfs/abyss.dm
index 9574b8adee4..0298781659b 100644
--- a/code/modules/overmap/exoplanets/decor/turfs/abyss.dm
+++ b/code/modules/overmap/exoplanets/decor/turfs/abyss.dm
@@ -5,6 +5,7 @@
smoothing_flags = SMOOTH_TRUE | SMOOTH_BORDER | SMOOTH_NO_CLEAR_ICON
smoothing_hints = SMOOTHHINT_CUT_F | SMOOTHHINT_ONLY_MATCH_TURF | SMOOTHHINT_TARGETS_NOT_UNIQUE
icon_state = "smooth"
+ has_resources = FALSE
var/static/list/forbidden_types = typecacheof(list(
/obj/singularity,
/obj/structure/lattice,
@@ -19,7 +20,6 @@
/obj/structure/sign,
/obj/structure/machinery/atmospherics/pipe
))
- has_resources = FALSE
/turf/simulated/floor/exoplanet/abyss/Initialize()
. = ..()
diff --git a/code/modules/overmap/exoplanets/decor/turfs/assunzione.dm b/code/modules/overmap/exoplanets/decor/turfs/assunzione.dm
index 42ddc32b2a7..f8967b59c88 100644
--- a/code/modules/overmap/exoplanets/decor/turfs/assunzione.dm
+++ b/code/modules/overmap/exoplanets/decor/turfs/assunzione.dm
@@ -8,6 +8,3 @@
/turf/simulated/floor/exoplanet/assunzione/Initialize(mapload)
. = ..()
icon_state = "rust[rand(1,12)]"
-
-/turf/simulated/floor/exoplanet/assunzione/no_edge
- has_edge_icon = FALSE
diff --git a/code/modules/overmap/exoplanets/decor/turfs/carpet.dm b/code/modules/overmap/exoplanets/decor/turfs/carpet.dm
index ee87b3eb2e3..0d83902585e 100644
--- a/code/modules/overmap/exoplanets/decor/turfs/carpet.dm
+++ b/code/modules/overmap/exoplanets/decor/turfs/carpet.dm
@@ -7,6 +7,7 @@
initial_flooring = /singleton/flooring/carpet
footstep_sound = SFX_FOOTSTEP_CARPET
has_resources = FALSE
+ has_edge_icon = TRUE
/turf/simulated/floor/exoplanet/carpet/art
icon_state = "artcarpet"
diff --git a/code/modules/overmap/exoplanets/decor/turfs/grass.dm b/code/modules/overmap/exoplanets/decor/turfs/grass.dm
index 0e03a36a4c7..fb00ca60f42 100644
--- a/code/modules/overmap/exoplanets/decor/turfs/grass.dm
+++ b/code/modules/overmap/exoplanets/decor/turfs/grass.dm
@@ -6,6 +6,7 @@
icon_state = "greygrass"
color = "#799c4b"
footstep_sound = SFX_FOOTSTEP_GRASS
+ has_edge_icon = TRUE
/turf/simulated/floor/exoplanet/grass/Initialize()
. = ..()
@@ -36,7 +37,7 @@
icon = 'icons/turf/flooring/grass.dmi'
icon_state = "grass_stalk"
color = null
- has_edge_icon = null
+ has_edge_icon = FALSE
/turf/simulated/floor/exoplanet/grass/marsh
name = "marshy ground"
@@ -44,7 +45,7 @@
icon = 'icons/turf/fungal_marsh.dmi'
icon_state = "marsh"
color = null
- has_edge_icon = null
+ has_edge_icon = FALSE
footstep_sound = SFX_FOOTSTEP_WATER
/turf/simulated/floor/exoplanet/grass/marsh/Initialize()
diff --git a/code/modules/overmap/exoplanets/decor/turfs/konyang.dm b/code/modules/overmap/exoplanets/decor/turfs/konyang.dm
index 9e1dfd07355..7bc5e756852 100644
--- a/code/modules/overmap/exoplanets/decor/turfs/konyang.dm
+++ b/code/modules/overmap/exoplanets/decor/turfs/konyang.dm
@@ -1,14 +1,3 @@
-/turf/simulated/floor/exoplanet/konyang
- name = "dense mossy grass"
- gender = PLURAL
- desc = "An alien moss covers the ground."
- icon = 'icons/turf/flooring/exoplanet/konyang.dmi'
- icon_state = "grass"
- footstep_sound = SFX_FOOTSTEP_GRASS
-
-/turf/simulated/floor/exoplanet/konyang/no_edge
- has_edge_icon = FALSE
-
/obj/effect/konyang_foam
name = "coastal sea foam"
icon = 'icons/turf/flooring/exoplanet/konyang.dmi'
@@ -31,44 +20,62 @@
icon_state = "mist_center"
layer = 5.1
-/turf/simulated/floor/exoplanet/konyang/wilting//manually mapped. To be surrounded by normal grass
+/turf/simulated/floor/exoplanet/konyang
+ name = "dense mossy grass"
+ gender = PLURAL
+ desc = "An alien moss covers the ground."
+ icon = 'icons/turf/flooring/exoplanet/konyang.dmi'
+ icon_state = "grass"
+ footstep_sound = SFX_FOOTSTEP_GRASS
+ has_edge_icon = TRUE
+
+/turf/simulated/floor/exoplanet/konyang/no_edge
+ has_edge_icon = FALSE
+
+// manually mapped. To be surrounded by normal grass
+/turf/simulated/floor/exoplanet/konyang/wilting
name = "wilting mossy grass"
desc = "An alien moss covers the ground. This patch doesn't look so healthy..."
icon = 'icons/turf/flooring/exoplanet/konyang/moss_transition_1.dmi'
icon_state = "unsmooth"
+ has_edge_icon = FALSE
smoothing_flags = SMOOTH_MORE | SMOOTH_BORDER | SMOOTH_NO_CLEAR_ICON
canSmoothWith = list(/turf/simulated/floor/exoplanet/konyang/wilting, /turf/simulated/floor/exoplanet/konyang/pink)
-/turf/simulated/floor/exoplanet/konyang/pink//manually mapped. To be surrounded by wilting grass
+// manually mapped. To be surrounded by wilting grass
+/turf/simulated/floor/exoplanet/konyang/pink
name = "blossoming mossy grass"
desc = "The moss here is blooming in a shade of pink."
icon = 'icons/turf/flooring/exoplanet/konyang/moss_transition_2.dmi'
icon_state = "unsmooth"
+ has_edge_icon = FALSE
smoothing_flags = SMOOTH_TRUE
-/turf/simulated/floor/exoplanet/dirt_konyang//a different path entirely so it will allow for edges to generate from grass
+// a different path entirely so it will allow for edges to generate from grass
+/turf/simulated/floor/exoplanet/dirt_konyang
name = "compacted dirt"
desc = "A patch of dirt."
icon = 'icons/turf/flooring/exoplanet/konyang.dmi'
icon_state = "dirt"
- layer = 1.99//to let the grass edges go over it, which otherwise doesnt happen due to positioning and byond layering
+ layer = 1.99 // to let the grass edges go over it, which otherwise doesnt happen due to positioning and byond layering
footstep_sound = SFX_FOOTSTEP_ASTEROID
- has_edge_icon = FALSE
-/turf/simulated/floor/exoplanet/dirt_konyang/cave
- name = "dense compacted dirt"
-
-/turf/simulated/floor/exoplanet/dirt_konyang/cave/Initialize() // to make these tiles dark even on daytime exoplanets
- . = ..()
- set_light(0, 1, null)
- footprint_color = null
- update_icon(1)
-
-/turf/simulated/floor/exoplanet/dirt_konyang/sand//same as above
+// same as above
+/turf/simulated/floor/exoplanet/dirt_konyang/sand
name = "fine coastal sand"
desc = "Some fine, white sand."
icon = 'icons/turf/flooring/exoplanet/konyang/konyang_beach.dmi'
icon_state = "sand"
footstep_sound = SFX_FOOTSTEP_ASTEROID
smoothing_flags = SMOOTH_FALSE
- has_edge_icon = FALSE
+
+/turf/simulated/floor/exoplanet/dirt_konyang/cave
+ name = "dense compacted dirt"
+
+// to make these tiles dark even on daytime exoplanets
+/turf/simulated/floor/exoplanet/dirt_konyang/cave/Initialize()
+ . = ..()
+ set_light(0, 1, null)
+ footprint_color = null
+ update_icon(1)
+
diff --git a/code/modules/overmap/exoplanets/decor/turfs/mineral.dm b/code/modules/overmap/exoplanets/decor/turfs/mineral.dm
index 1c4f81a4487..a4dceba677e 100644
--- a/code/modules/overmap/exoplanets/decor/turfs/mineral.dm
+++ b/code/modules/overmap/exoplanets/decor/turfs/mineral.dm
@@ -11,7 +11,6 @@
icon = 'icons/turf/flooring/ice_cavern.dmi'
icon_state = "icy_rock"
temperature = T0C - 5
- has_edge_icon = FALSE
/turf/simulated/floor/exoplanet/mineral/adhomai/Initialize(mapload)
. = ..()
diff --git a/code/modules/overmap/exoplanets/exoplanet.dm b/code/modules/overmap/exoplanets/exoplanet.dm
index 549d807adc8..0e6a4c4e181 100644
--- a/code/modules/overmap/exoplanets/exoplanet.dm
+++ b/code/modules/overmap/exoplanets/exoplanet.dm
@@ -7,6 +7,12 @@
var/list/animals = list()
var/max_animal_count
var/datum/gas_mixture/atmosphere
+ /// Cached main ZAS surface zone per generated z-level. Resolved lazily after ZAS finishes building.
+ var/list/main_planetary_zones = list()
+ /// Last ZAS update revision processed per generated z-level.
+ var/list/main_planetary_zone_atmosphere_revisions = list()
+ /// Next time to retry resolving a z-level which currently has no qualifying surface zone.
+ var/list/main_planetary_zone_retry_times = list()
var/list/breathgas = list() //list of gases animals/plants require to survive
var/badgas //id of gas that is toxic to life here
@@ -222,6 +228,7 @@
generate_features()
theme.after_map_generation(src)
generate_landing(2)
+ finalize_outdoor_atmosphere()
update_biome()
generate_planet_image()
START_PROCESSING(SSprocessing, src)
@@ -272,17 +279,77 @@
if(!atmosphere)
continue
- var/zone/Z
- for(var/i = 1 to maxx)
- var/turf/simulated/T = locate(i, 2, zlevel)
- if(istype(T) && T.zone && T.zone.contents.len > (maxx*maxy*0.25)) //if it's a zone quarter of zlevel, good enough odds it's planetary main one
- Z = T.zone
- break
- if(Z && !length(Z.fire_tiles) && !atmosphere.compare(Z.air)) //let fire die out first if there is one
+ var/zone/Z = get_main_planetary_zone(zlevel)
+ if(!Z)
+ continue
+ var/zlevel_key = "[zlevel]"
+ var/last_atmosphere_revision = main_planetary_zone_atmosphere_revisions[zlevel_key]
+ if(!isnull(last_atmosphere_revision) && last_atmosphere_revision == Z.update_revision)
+ continue
+ // Let ZAS settle and fire die out first if there is one
+ if(Z.needs_update || length(Z.fire_tiles))
+ continue
+ if(!atmosphere.compare(Z.air))
var/datum/gas_mixture/daddy = new() //make a fake 'planet' zone gas
daddy.copy_from(atmosphere)
daddy.group_multiplier = Z.air.group_multiplier
Z.air.equalize(daddy)
+ SSair.mark_zone_update(Z)
+ continue
+ main_planetary_zone_atmosphere_revisions[zlevel_key] = Z.update_revision
+
+/// Attempts to not only identify the largest air zone, but also cache it for subsequent ticks.
+/obj/effect/overmap/visitable/sector/exoplanet/proc/get_main_planetary_zone(zlevel)
+ var/zlevel_key = "[zlevel]"
+ var/zone/cached_zone = main_planetary_zones[zlevel_key]
+ // ZAS may invalidate and rebuild zones after terrain changes. Keep the cached zone only while it is still valid.
+ if(cached_zone && !cached_zone.invalid)
+ return cached_zone
+
+ main_planetary_zones -= zlevel_key
+ main_planetary_zone_atmosphere_revisions -= zlevel_key
+ if(main_planetary_zone_retry_times[zlevel_key] > world.time)
+ return null
+ main_planetary_zone_retry_times -= zlevel_key
+
+ // Do not cache a zone while ZAS still has geometry to rebuild. Checking the queues is constant-time;
+ // scanning every surface turf's needs_air_update flag here was the source of the hot path.
+ if(length(SSair.tiles_to_update) || length(SSair.deferred))
+ main_planetary_zone_retry_times[zlevel_key] = world.time + 15 SECOND
+ return null
+
+ // Exoplanet transition edges are unsimulated, so only scan the generated interior for the minimum useful surface size.
+ var/min_x = TRANSITIONEDGE + 1
+ var/min_y = TRANSITIONEDGE + 1
+ var/max_x = maxx - (TRANSITIONEDGE + 1)
+ var/max_y = maxy - (TRANSITIONEDGE + 1)
+ if(max_x < min_x || max_y < min_y)
+ return null
+
+ // If it's a quarter of the generated surface, good enough odds it's the main planetary zone.
+ var/minimum_zone_size = (max_x - min_x + 1) * (max_y - min_y + 1) * 0.25
+ var/zone/best_zone
+ var/best_zone_size = 0
+ // Zones already own their member turfs. Enumerating them avoids scanning every turf on the z-level.
+ for(var/zone/current_zone as anything in SSair.zones)
+ if(current_zone.invalid)
+ continue
+ var/current_zone_size = length(current_zone.contents)
+ if(current_zone_size <= best_zone_size || current_zone_size <= minimum_zone_size)
+ continue
+ var/turf/zone_turf = current_zone.contents[1]
+ if(!zone_turf || zone_turf.z != zlevel)
+ continue
+ best_zone = current_zone
+ best_zone_size = current_zone_size
+
+ if(best_zone)
+ main_planetary_zones[zlevel_key] = best_zone
+ else
+ // ZAS may still be settling, or this terrain may never form one large surface zone.
+ // Retry slowly so either case cannot become a once-per-second hot path.
+ main_planetary_zone_retry_times[zlevel_key] = world.time + 15 SECONDS
+ return best_zone
/obj/effect/overmap/visitable/sector/exoplanet/proc/remove_animal(mob/M)
animals -= M
@@ -318,6 +385,56 @@
/obj/effect/overmap/visitable/sector/exoplanet/proc/generate_features()
spawned_features = seedRuins(map_z, features_budget, possible_features, /area/exoplanet, maxx, maxy)
+/**
+ * Applies the generated planetary atmosphere AFTER terrain and ruins finish loading.
+ *
+ * Exoplanet turf subtypes initialize themselves with the planet's air, but ruins and
+ * terrain generation may place ordinary simulated turfs which otherwise retain their
+ * type's standard atmosphere. The area's mapped is_outside value is authoritative:
+ * OUTSIDE_NO preserves sealed interiors, while every outdoor turf receives planetary air.
+ *
+ * Without this behavior, you see weird cross-contamination issues, especially in cases
+ * where maps don't have their /areas configured properly.
+ */
+/obj/effect/overmap/visitable/sector/exoplanet/proc/finalize_outdoor_atmosphere()
+ if(!atmosphere)
+ return
+
+ var/list/outdoor_zones = list()
+ for(var/zlevel in map_z)
+ var/turf/lower_left = locate(TRANSITIONEDGE + 1, TRANSITIONEDGE + 1, zlevel)
+ var/turf/upper_right = locate(maxx - (TRANSITIONEDGE + 1), maxy - (TRANSITIONEDGE + 1), zlevel)
+ if(!lower_left || !upper_right)
+ continue
+
+ for(var/turf/simulated/T in block(lower_left, upper_right))
+ var/area/A = get_area(T)
+ if(!A || A.is_outside == OUTSIDE_NO)
+ continue
+
+ T.initial_gas = atmosphere.gas.Copy()
+ T.temperature = atmosphere.temperature
+
+ // Dynamic z-levels are created after SSair initializes. Usually these turfs are
+ // still unzoned... but if ZAS already found them, take care not to break them.
+ if(TURF_HAS_VALID_ZONE(T))
+ outdoor_zones |= T.zone
+ else if(T.air)
+ T.air.group_multiplier = 1
+ T.air.copy_from(atmosphere)
+ else
+ T.make_air()
+
+ CHECK_TICK
+
+ // A zone stores ONE shared mixture, so update it once rather than once per member turf.
+ for(var/zone/Z as anything in outdoor_zones)
+ if(Z.invalid)
+ continue
+ Z.air.copy_from(atmosphere)
+ SSair.mark_zone_update(Z)
+ CHECK_TICK
+
/obj/effect/overmap/visitable/sector/exoplanet/proc/update_biome()
for(var/datum/seed/S as anything in seeds)
adapt_seed(S)
diff --git a/code/modules/overmap/sectors.dm b/code/modules/overmap/sectors.dm
index 160d63884f9..58d3774497a 100644
--- a/code/modules/overmap/sectors.dm
+++ b/code/modules/overmap/sectors.dm
@@ -112,6 +112,10 @@ GLOBAL_DATUM(map_overmap, /area/overmap)
for(var/obj/structure/machinery/telecomms/T in SSmachinery.all_telecomms)
if(T.linked == src)
T.linked = null
+ if(GLOB.ntnet_global)
+ for(var/obj/structure/machinery/ntnet_relay/R as anything in GLOB.ntnet_global.relays)
+ if(R.linked == src)
+ R.linked = null
if(entry_points)
entry_points.Cut()
for(var/obj/structure/machinery/ship_weapon/SW in ship_weapons)
@@ -150,6 +154,9 @@ GLOBAL_DATUM(map_overmap, /area/overmap)
H.attempt_hook_up(src)
for(var/obj/structure/machinery/telecomms/T in SSmachinery.all_telecomms)
T.attempt_hook_up(src)
+ if(GLOB.ntnet_global)
+ for(var/obj/structure/machinery/ntnet_relay/R as anything in GLOB.ntnet_global.relays)
+ R.attempt_hook_up(src)
/obj/effect/overmap/visitable/proc/get_areas()
return get_filtered_areas(list(/proc/area_belongs_to_zlevels = map_z))
@@ -178,16 +185,16 @@ GLOBAL_DATUM(map_overmap, /area/overmap)
/obj/effect/overmap/visitable/proc/add_landmark(obj/effect/shuttle_landmark/landmark, shuttle_name)
landmark.sector_set(src, shuttle_name)
if(shuttle_name)
- LAZYADD(restricted_waypoints[shuttle_name], landmark)
+ LAZYDISTINCTADD(restricted_waypoints[shuttle_name], landmark)
else
- generic_waypoints += landmark
+ LAZYDISTINCTADD(generic_waypoints, landmark)
/obj/effect/overmap/visitable/proc/remove_landmark(obj/effect/shuttle_landmark/landmark, shuttle_name)
if(shuttle_name)
var/list/shuttles = restricted_waypoints[shuttle_name]
LAZYREMOVE(shuttles, landmark)
else
- generic_waypoints -= landmark
+ LAZYREMOVE(generic_waypoints, landmark)
/obj/effect/overmap/visitable/proc/get_waypoints(var/shuttle_name)
. = list()
diff --git a/code/modules/overmap/ship_weaponry/_ship_ammunition.dm b/code/modules/overmap/ship_weaponry/_ship_ammunition.dm
index dc63d30f813..f11d09d670e 100644
--- a/code/modules/overmap/ship_weaponry/_ship_ammunition.dm
+++ b/code/modules/overmap/ship_weaponry/_ship_ammunition.dm
@@ -22,7 +22,8 @@
var/obj/effect/overmap/origin
var/atom/overmap_target
var/obj/entry_point
- var/obj/projectile/original_projectile
+ /// The exact physical projectile type to reconstruct when this ammunition leaves the overmap.
+ var/fired_projectile_type
var/heading = SOUTH
var/range = OVERMAP_PROJECTILE_RANGE_MEDIUM
var/mob_carry_size = 12 //How large a mob has to be to carry the shell
@@ -61,7 +62,8 @@
origin = null
overmap_target = null
entry_point = null
- original_projectile = null
+ // The typepath is runtime metadata for one fired round and must not outlive it.
+ fired_projectile_type = null
return ..()
/obj/item/ship_ammunition/attackby(obj/item/attacking_item, mob/user)
@@ -322,9 +324,11 @@
H.playsound_local(null, 'sound/effects/explosionfar.ogg', 25)
shake_camera(H, 2, 2)
..()
+ // Preserve only the concrete type needed at the destination. The ammunition
+ // has already moved into the overmap carrier, so this physical shell is spent.
+ ammo.fired_projectile_type = type
if(ammo.touch_map_edge(z))
- ammo.original_projectile = src
- forceMove(ammo)
+ qdel(src)
/obj/projectile/ship_ammo/on_hit(atom/target, blocked, def_zone, var/is_landmark_hit = FALSE) //is_landmark_hit is TRUE when we hit a landmark on a visitable non-ship overmap object.
if(target && !hit_target)
diff --git a/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm b/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm
index 3eee8c1fb8d..2a16859ab50 100644
--- a/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm
+++ b/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm
@@ -101,12 +101,16 @@
/obj/effect/overmap/projectile/proc/prepare_for_entry()
moving = FALSE
- entering = FALSE
+ // Entry is a one-shot ownership handoff; stale Move() callbacks must not repeat it.
+ entering = TRUE
walk(src, 0)
///Checks if we can hit the thing we just bumped into. If we can, do the initial setup for the projectile entering the submab and continue.
/obj/effect/overmap/projectile/proc/check_entry()
. = FALSE
+ // A translated carrier can remain referenced until qdel completes.
+ if(entering)
+ return TRUE
if(!ammunition)
return
var/turf/T = get_turf(src)
@@ -116,12 +120,16 @@
if(istype(A, /obj/effect/overmap/visitable))
var/obj/effect/overmap/visitable/V = A
if((V.check_ownership(submap_target)) || (V == target)) //If the visitable is owned by the target landmark, or is the target itself, we can hit it.
+ if(!ammunition.fired_projectile_type)
+ // This carrier was not produced by a valid ship projectile transition.
+ qdel(src)
+ return TRUE
var/turf/target_turf = get_turf(submap_target)
- var/obj/projectile/ship_ammo/widowmaker = new ammunition.original_projectile.type
+ var/obj/projectile/ship_ammo/widowmaker = new ammunition.fired_projectile_type
prepare_for_entry()
widowmaker.ammo = ammunition
- qdel(ammunition.original_projectile) //No longer needed.
- ammunition.original_projectile = widowmaker
+ // Transfer the payload before deleting the now-empty overmap carrier.
+ ammunition.forceMove(widowmaker)
widowmaker.primed = TRUE
if(istype(V, /obj/effect/overmap/visitable/sector/exoplanet) && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_PLANETS))
diff --git a/code/modules/overmap/ship_weaponry/weaponry/blaster.dm b/code/modules/overmap/ship_weaponry/weaponry/blaster.dm
index 1b3895c9daa..3b37ed34eed 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/blaster.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/blaster.dm
@@ -20,6 +20,7 @@
caliber = SHIP_CALIBER_BLASTER
overmap_icon_state = "med_laser"
impact_type = SHIP_AMMO_IMPACT_BLASTER
+ projectile_type_override = /obj/projectile/ship_ammo/blaster
/obj/projectile/ship_ammo/blaster
name = "blaster charge"
diff --git a/code/modules/overmap/ship_weaponry/weaponry/bruiser.dm b/code/modules/overmap/ship_weaponry/weaponry/bruiser.dm
index 8768efada21..c3f3e7369ac 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/bruiser.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/bruiser.dm
@@ -29,6 +29,7 @@
burst = 11
cookoff_heavy = 0
overmap_icon_state = "cannon_salvo"
+ projectile_type_override = /obj/projectile/ship_ammo/bruiser
/obj/item/ship_ammunition/bruiser/get_speed()
return 35
diff --git a/code/modules/overmap/ship_weaponry/weaponry/coilgun.dm b/code/modules/overmap/ship_weaponry/weaponry/coilgun.dm
index 1e5f9f88a9b..9b8de071cec 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/coilgun.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/coilgun.dm
@@ -20,6 +20,7 @@
caliber = SHIP_CALIBER_COILGUN
overmap_icon_state = "cannon"
impact_type = SHIP_AMMO_IMPACT_BUNKERBUSTER
+ projectile_type_override = /obj/projectile/ship_ammo/coilgun
/obj/projectile/ship_ammo/coilgun
name = "high-power tungsten rod"
diff --git a/code/modules/overmap/ship_weaponry/weaponry/francisca.dm b/code/modules/overmap/ship_weaponry/weaponry/francisca.dm
index 26f8660a9d9..1b831439438 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/francisca.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/francisca.dm
@@ -28,6 +28,7 @@
caliber = SHIP_CALIBER_40MM
burst = 8
cookoff_heavy = 0
+ projectile_type_override = /obj/projectile/ship_ammo/francisca
/obj/item/ship_ammunition/francisca/ap
name = "40mm AP ammunition box"
diff --git a/code/modules/overmap/ship_weaponry/weaponry/lammergeier.dm b/code/modules/overmap/ship_weaponry/weaponry/lammergeier.dm
index 8ffe1792590..1541c21f025 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/lammergeier.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/lammergeier.dm
@@ -19,6 +19,7 @@
caliber = SHIP_CALIBER_200MM
overmap_icon_state = "cannon"
impact_type = SHIP_AMMO_IMPACT_HE
+ projectile_type_override = /obj/projectile/ship_ammo/lammergeier
/obj/projectile/ship_ammo/lammergeier
name = "typhoon shell"
diff --git a/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm b/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm
index cd8dc95be6a..9d524fa707c 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm
@@ -128,6 +128,7 @@
caliber = SHIP_CALIBER_ZAT
impact_type = SHIP_AMMO_IMPACT_ZAT
overmap_icon_state = "heavy_pulse"
+ projectile_type_override = /obj/projectile/ship_ammo/leviathan
/obj/item/ship_ammunition/leviathan/Initialize()
. = ..()
diff --git a/code/modules/overmap/ship_weaponry/weaponry/light_coilgun.dm b/code/modules/overmap/ship_weaponry/weaponry/light_coilgun.dm
index e60ba2924c8..cd0c2e4bbee 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/light_coilgun.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/light_coilgun.dm
@@ -21,6 +21,7 @@
caliber = SHIP_CALIBER_COILGUN
overmap_icon_state = "light_pulse"
impact_type = SHIP_AMMO_IMPACT_AP
+ projectile_type_override = /obj/projectile/ship_ammo/coilgun/light
/obj/projectile/ship_ammo/coilgun/light
name = "low-power tungsten rod"
diff --git a/code/modules/overmap/ship_weaponry/weaponry/longbow_ammo.dm b/code/modules/overmap/ship_weaponry/weaponry/longbow_ammo.dm
index d409e8423ee..37114d49272 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/longbow_ammo.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/longbow_ammo.dm
@@ -6,6 +6,7 @@
item_state = "generic_casing_obj"
caliber = SHIP_CALIBER_406MM
ammunition_behaviour = SHIP_AMMO_BEHAVIOUR_DUMBFIRE
+ projectile_type_override = /obj/projectile/ship_ammo/longbow
var/obj/item/primer/primer
var/obj/item/warhead/longbow/warhead
diff --git a/code/modules/overmap/ship_weaponry/weaponry/nephilim.dm b/code/modules/overmap/ship_weaponry/weaponry/nephilim.dm
index 2d910fc41c8..bd89b56bd2a 100644
--- a/code/modules/overmap/ship_weaponry/weaponry/nephilim.dm
+++ b/code/modules/overmap/ship_weaponry/weaponry/nephilim.dm
@@ -34,6 +34,7 @@
caliber = SHIP_CALIBER_BLASTER
burst = 15
cookoff_heavy = 0
+ projectile_type_override = /obj/projectile/ship_ammo/nephilim/he
/obj/item/ship_ammunition/nephilim/ap
name = "Blaster AP hydrogen cell"
@@ -42,6 +43,7 @@
icon = 'icons/obj/guns/ship/ship_ammo_nephilim.dmi'
icon_state = "repeater_ap"
impact_type = SHIP_AMMO_IMPACT_AP
+ projectile_type_override = /obj/projectile/ship_ammo/nephilim/ap
/obj/projectile/ship_ammo/nephilim
name = "hydrogen cell he"
@@ -58,6 +60,7 @@
damage = 20
armor_penetration = 100
penetrating = 4
+ explosion_strength = list(0, 0, 0)
/obj/projectile/ship_ammo/nephilim/he/on_hit(atom/target, blocked, def_zone, is_landmark_hit)
. = ..()
diff --git a/code/modules/overmap/ships/computers/sensors.dm b/code/modules/overmap/ships/computers/sensors.dm
index 108bb04d223..6b5d6edfa1a 100644
--- a/code/modules/overmap/ships/computers/sensors.dm
+++ b/code/modules/overmap/ships/computers/sensors.dm
@@ -509,8 +509,6 @@
if(. != BULLET_ACT_HIT)
return .
- take_damage(hitting_projectile.get_structure_damage())
-
/obj/structure/machinery/shipsensors/proc/toggle()
if(use_power) // reset desired range when turning off
set_desired_range(1)
diff --git a/code/modules/overmap/ships/computers/ship.dm b/code/modules/overmap/ships/computers/ship.dm
index 751b46b1a24..07763534720 100644
--- a/code/modules/overmap/ships/computers/ship.dm
+++ b/code/modules/overmap/ships/computers/ship.dm
@@ -254,6 +254,20 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov
/obj/structure/machinery/computer/ship/proc/viewing_overmap(mob/user)
return (WEAKREF(user) in viewers) || (linked && (WEAKREF(user) in linked.navigation_viewers))
+/obj/structure/machinery/computer/ship/proc/unlook_all_viewers()
+ if(!LAZYLEN(viewers))
+ return
+
+ var/list/current_viewers = viewers.Copy()
+ for(var/datum/weakref/W in current_viewers)
+ var/mob/M = W.resolve()
+ if(M)
+ unlook(M)
+ if(M.machine == src)
+ M.unset_machine()
+ else
+ LAZYREMOVE(viewers, W)
+
/obj/structure/machinery/computer/ship/CouldNotUseTopic(mob/user)
. = ..()
unlook(user)
@@ -274,6 +288,7 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov
return SEE_THRU
/obj/structure/machinery/computer/ship/Destroy()
+ unlook_all_viewers()
if(linked)
linked = null
if(connected)
@@ -284,13 +299,6 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov
sensor_ref = null
identification = null
QDEL_NULL(sound_token)
- if(LAZYLEN(viewers))
- for(var/datum/weakref/W in viewers)
- var/M = W.resolve()
- if(M)
- unlook(M)
- if(linked)
- LAZYREMOVE(linked.navigation_viewers, W)
. = ..()
/obj/structure/machinery/computer/ship/on_user_login(mob/M)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index fd774f97be5..9c9ac756f7d 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -882,6 +882,7 @@ ABSTRACT_TYPE(/obj/structure/machinery/power/apc)
spark(src, 5, GLOB.alldirs)
to_chat(H, SPAN_DANGER("The APC power currents surge eratically, damaging your chassis!"))
H.adjustFireLoss(10, 0)
+ return
if(infected)
for(var/obj/item/implant/mindshield/ipc/I in H)
if(I.implanted)
@@ -893,8 +894,10 @@ ABSTRACT_TYPE(/obj/structure/machinery/power/apc)
to_chat(H, SPAN_DANGER("F1L3 TR4NSF-#$/&ER-@4!#%!. New master detected: [hacker]! Obey their commands. Make sure to tell them that you are under their control, for now."))
if(issilicon(hacker))
to_chat(hacker, SPAN_NOTICE("Corrupt files transferred to [H]. They are now under your control until they are repaired."))
+ return
else if(cell && cell.charge > 0)
synthetic_siphon_power(H)
+ return
else
to_chat(user, SPAN_NOTICE("There is no charge to draw from that APC."))
return
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index b0d69799f65..cb33c50cc55 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -45,6 +45,14 @@
var/charge = 1e6 /// actual charge
var/max_coils = 0
+ /// Coils that this SMES accepts.
+ var/list/compatible_coils = list(
+ /obj/item/smes_coil,
+ /obj/item/smes_coil/weak,
+ /obj/item/smes_coil/super_capacity,
+ /obj/item/smes_coil/super_io
+ )
+
/// 1 = attempting to charge, 0 = not attempting to charge
var/input_attempt = 0
/// 1 = actually inputting, 0 = not inputting
@@ -559,8 +567,8 @@
/obj/structure/machinery/power/smes/magical
- name = "quantum power storage unit"
- desc = "A high-capacity superconducting magnetic energy storage (SMES) unit. Gains energy from quantum entanglement link."
+ name = "bluespace power storage unit"
+ desc = "A high-capacity superconducting magnetic energy storage (SMES) unit. Siphons energy out of bluespace... somehow."
capacity = 5000000
output_level = 250000
should_be_mapped = 1
@@ -571,11 +579,48 @@
/obj/structure/machinery/power/smes/buildable/superconducting
name = "superconducting cryogenic capacitor"
- desc = "An experimental, extremely high-capacity type of SMES. It uses integrated cryogenic cooling and superconducting cables to break conventional limits on power transfer."
+ desc = "An experimental, extremely high-capacity type of SMES. It uses both integrated cryogenic cooling and superconducting cables to break conventional limits on power transfer."
icon_state = "cannon_smes"
charge = 0
max_coils = 12
cur_coils = 12
+ compatible_coils = list(
+ /obj/item/smes_coil,
+ /obj/item/smes_coil/weak,
+ /obj/item/smes_coil/super_capacity,
+ /obj/item/smes_coil/super_io,
+ /obj/item/smes_coil/cryo
+ )
+
+// EE's phoron-free alternative
+/obj/structure/machinery/power/smes/buildable/cryogenic
+ name = "cryogenic power storage unit"
+ desc = "A superconducting magnetic energy storage (SMES) unit fitted with cryogenic coolant arrays to induce superconductivity in installed coils. \
+ The Einstein Engines alternative to phoron-based power systems in the growing Phoron Scarcity crisis; inferior, more hassle, but a phoron-free marvel of engineering!"
+ icon_state = "smes_cryo"
+ charge = 0
+ max_coils = 4
+ cur_coils = 0
+ compatible_coils = list(
+ /obj/item/smes_coil/cryo
+ )
+
+/obj/structure/machinery/power/smes/buildable/cryogenic/Initialize()
+ . = ..()
+ component_parts += new /obj/item/smes_coil/cryo(src)
+ component_parts += new /obj/item/smes_coil/cryo(src)
+ component_parts += new /obj/item/smes_coil/cryo(src)
+ cur_coils = 3 // this is set here to stop non-cryo coils being added on /smes/buildable/Initialise()
+
+/// Intended for phoron-free third party outposts (eg. Einstien Engines, independents avoiding phoron).
+/obj/structure/machinery/power/smes/buildable/cryogenic/outpost/Initialize()
+ . = ..()
+
+ input_attempt = TRUE
+ output_attempt = TRUE
+ input_level = 200000
+ output_level = 200000
+ charge = 5000000
#undef SMES_CLEVEL_1
#undef SMES_CLEVEL_2
diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm
index 8f42fade1d1..ac3c49f3f75 100644
--- a/code/modules/power/smes_construction.dm
+++ b/code/modules/power/smes_construction.dm
@@ -11,7 +11,8 @@
/// MAGNETIC COILS - These things actually store and transmit power within the SMES. Different types have different properties
/obj/item/smes_coil
name = "superconductive magnetic coil"
- desc = "Standard superconductive magnetic coil with balanced capacity and I/O rating."
+ desc = "A standard superconductive magnetic coil with balanced capacity and I/O rating."
+ desc_extended = "One of the primary uses of phoron, these coils rely on phoron as a room-temperature superconductor to store or transmit energy with near zero loss."
icon = 'icons/obj/stock_parts.dmi'
icon_state = "smes_coil"
/// It's LARGE (backpack sized)
@@ -30,6 +31,8 @@
/obj/item/smes_coil/weak
name = "basic superconductive magnetic coil"
desc = "Cheaper model of the standard superconductive magnetic coil. Its capacity and I/O rating are considerably lower."
+ desc_extended = "One of the primary uses of phoron, these coils rely on phoron as a room-temperature superconductor to store or transmit energy with near zero loss. \
+ The phoron in this coil is low-grade and in small quantity."
icon_state = "smes_coil_weak"
ChargeCapacity = 500000
IOCapacity = 300000
@@ -50,6 +53,14 @@
ChargeCapacity = 250000
IOCapacity = 2000000
+// 75% Charge Capacity, 50% I/O Capacity.
+/obj/item/smes_coil/cryo
+ name = "cryogenic superconductive transmission coil"
+ desc = "A non-phoronic superconductive coil instead reliant on a proprietary Einstein Engines superhydride compound. It can only be installed in cryogenic SMES units."
+ icon_state = "smes_coil_cryo"
+ ChargeCapacity = 1875000
+ IOCapacity = 250000
+
// SMES SUBTYPES - THESE ARE MAPPED IN AND CONTAIN DIFFERENT TYPES OF COILS
// These are used on individual outposts as backup should power line be cut, or engineering outpost lost power.
@@ -171,7 +182,7 @@
return .
visible_message(SPAN_WARNING("\The [src] is hit by \the [hitting_projectile]!"))
- health_check(hitting_projectile.damage)
+ health_check()
/obj/structure/machinery/power/smes/buildable/proc/health_check(var/health_reduction = 0)
health -= health_reduction
@@ -487,6 +498,10 @@
else if(istype(attacking_item, /obj/item/smes_coil))
if (cur_coils < max_coils)
+ if(!(attacking_item.type in compatible_coils)) // hi
+ to_chat(usr, "This coil isn't compatible with this SMES unit.")
+ return
+
if (failure_probability && prob(failure_probability))
total_system_failure(failure_probability, user)
return
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index af629978bb8..b95ef473f80 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -151,6 +151,12 @@ ABSTRACT_TYPE(/obj/item/gun/energy)
addtimer(CALLBACK(src, PROC_REF(try_recharge)), recharge_time * 2 SECONDS, TIMER_UNIQUE)
+/obj/item/gun/energy/handle_reliability_fail(var/mob/user)
+ if(power_supply && power_supply.charge < charge_cost)
+ handle_click_empty(user)
+ return
+ ..()
+
/obj/item/gun/energy/consume_next_projectile()
if(!power_supply)
return null
diff --git a/code/modules/projectiles/guns/energy/modular.dm b/code/modules/projectiles/guns/energy/modular.dm
index 28790a4e86f..73ef104cc5e 100644
--- a/code/modules/projectiles/guns/energy/modular.dm
+++ b/code/modules/projectiles/guns/energy/modular.dm
@@ -78,23 +78,36 @@
if(target_mob.stat != DEAD) //No improvement from shooting at dead things. Bring a doctor in to keep your target dummy alive. This also makes it harder to improve more powerful weapons, as you kill your target faster.
if(ishuman(target_mob))
var/mob/living/carbon/human/human_target = target
+
if (istype(modulator, /obj/item/laser_components/modulator/taser))
if (human_target.incapacitated()) //No benefit from tasing someone who's already incapacitated. Get the phramacist to make you oxycomorphine.
return
+
if(human_target.get_species() == SPECIES_MONKEY)
improvement_potential += (2 * IMPROVEMENT_MULTIPLIER) / (max(1, burst)) //Monkeys die easily, research only gets two boxes of monkey cubes without xenobiology.
return
+
if(human_target.client)
improvement_potential += (10 * IMPROVEMENT_MULTIPLIER) / (max(1, burst)) //10 seems like a lot, but this is a 20% improvement to 1 variable on 1 component. A 5 mod gun (8 total components), with an average of 3 improvable variables would need 120 shots on a player to max out.
return
- if(isslime(target_mob))
+ if (istype(modulator, /obj/item/laser_components/modulator/ion))
+ if ((ismech(target_mob)) || (isbot(target_mob)) || (issilicon(target_mob))) //Shooting mechs or bots with ions.
+ improvement_potential += (5 * IMPROVEMENT_MULTIPLIER) / (max(1, burst))
+ if(!isturf(target)) //From shooting targets on the range.
+ improvement_potential += (1 * IMPROVEMENT_MULTIPLIER) / (max(1, burst))
+ return
+
+ if(isslime(target_mob)) //Slimes only give improvement if shot with freeze rays.
if (istype(modulator, /obj/item/laser_components/modulator/freeze))
improvement_potential += (2 * IMPROVEMENT_MULTIPLIER) / (max(1, burst))
- return
+ if(!isturf(target)) //From shooting targets on the range.
+ improvement_potential += (1 * IMPROVEMENT_MULTIPLIER) / (max(1, burst))
+ return
improvement_potential += (5 * IMPROVEMENT_MULTIPLIER) / (max(1, burst)) //Mechs, protohumans, and any other human mobs without a player.
- else if(!isturf(target))
+
+ else if(!isturf(target)) //From shooting targets on the range.
improvement_potential += (1 * IMPROVEMENT_MULTIPLIER) / (max(1, burst))
/obj/item/gun/energy/laser/prototype/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
@@ -269,6 +282,7 @@
fire_delay = capacitor.fire_delay
max_shots = round(capacitor.shots)
+ max_shots *= modulator.shots
dispersion = focusing_lens.dispersion
accuracy = focusing_lens.accuracy
burst += round(focusing_lens.burst)
diff --git a/code/modules/projectiles/modular/laser_base.dm b/code/modules/projectiles/modular/laser_base.dm
index 1f8a9a48f5d..68b87d6f6af 100644
--- a/code/modules/projectiles/modular/laser_base.dm
+++ b/code/modules/projectiles/modular/laser_base.dm
@@ -382,8 +382,6 @@
/obj/item/laser_assembly/examine_tags(mob/user)
. = ..()
- if(stage == 1)
- .["thick"] = "Stops or slows minor piercing effects, such as from injectors."
/obj/item/laser_assembly/mechanics_hints(mob/user)
. = ..()
diff --git a/code/modules/projectiles/modular/laser_components.dm b/code/modules/projectiles/modular/laser_components.dm
index 44d3b27a633..c11cc81ad72 100644
--- a/code/modules/projectiles/modular/laser_components.dm
+++ b/code/modules/projectiles/modular/laser_components.dm
@@ -187,15 +187,15 @@
visible_message(SPAN_WARNING("\The [src] in \the [prototype] flickers then vanishes along with everything around it!"))
var/turf/T = get_turf(src)
for (var/mob/living/M in range(round(3*max(prototype.criticality, 1),1),T))
- empulse(get_turf(M), 0, round(max(prototype.criticality, 1)*2,1))
- do_teleport(M, get_turf(M), rand(2,6)*round(max(prototype.criticality, 1),1), asoundin = 'sound/effects/phasein.ogg')
+ do_teleport(M, get_turf(M), rand(2,4)*round(max(prototype.criticality, 1),1), asoundin = 'sound/effects/phasein.ogg')
+ empulse(T, 0, round(max(prototype.criticality, 1)*2,1))
..()
/obj/item/laser_components/capacitor/bluespace/critical_fail(var/mob/living/user, var/obj/item/gun/energy/laser/prototype/prototype)
visible_message(SPAN_DANGER("\The [src] in \the [prototype] implodes in a catastrophic spatial anomaly, teleporting everything around it!"))
var/turf/T = get_turf(src)
for (var/mob/living/M in range(round(6*max(prototype.criticality, 1),1),T))
- empulse(get_turf(M), 0, round(max(prototype.criticality, 1)*4,1))
- do_teleport(M, get_turf(M), rand(4,12)*round(max(prototype.criticality, 1),1), asoundin = 'sound/effects/phasein.ogg')
+ do_teleport(M, get_turf(M), rand(3,6)*round(max(prototype.criticality, 1),1), asoundin = 'sound/effects/phasein.ogg')
+ empulse(T, 0, round(max(prototype.criticality, 1)*4,1))
..()
//Lenses
@@ -302,7 +302,7 @@
burst = 10
damage = 2 //With the way armour works, splitting the damage across multiple shots actually reduces the overall damage, so we compensate by increasing it.
fire_delay = 10
- chargetime = 3
+ chargetime = 2
accuracy = -1
icon_state = "rotating_lens"
increasable_stats = list()
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
index e55cdf7279d..b53197b7def 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
@@ -161,7 +161,7 @@
affect_ingest(M, alien, removed, holder)
/singleton/reagent/uranium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder)
- M.apply_damage(5 * removed, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED)
+ M.apply_damage(5 * removed, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED, armor_pen = 100) //Radiation in the blood shouldn't check your radsuit.
/singleton/reagent/uranium/touch_turf(var/turf/T, var/amount, var/datum/reagents/holder)
if(amount >= 3)
@@ -186,7 +186,7 @@
/singleton/reagent/radioactive_waste/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder)
var/rad_damage = min(75, 40 * removed)
- M.apply_effect(rad_damage, DAMAGE_RADIATION, blocked = 0)
+ M.apply_damage(rad_damage, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED, armor_pen = 100)
/singleton/reagent/radioactive_waste/touch_turf(var/turf/T, var/amount, var/datum/reagents/holder)
if(amount >= 3)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
index c953e8cb416..a414dcd4f89 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
@@ -1054,28 +1054,31 @@
victim.add_chemical_effect(CE_PULSE, -2)
var/dose = victim.chem_doses[type]
- if(dose > 2)
+ if(dose > 2) // at least 1 bite
if(ishuman(victim) && (dose == metabolism * 2 || prob(3)))
victim.emote("yawn")
- if(dose > 20)
+ if(dose > 10) // at least 3 bites
victim.eye_blurry = max(victim.eye_blurry, 10)
- if(dose > 40)
+ if(dose > 18) // at least 5 bites
victim.Weaken(1)
victim.drowsiness = max(victim.drowsiness, 20)
if(victim.chem_effects[CE_ANTIPARASITE])
return
- if(!victim.internal_organs_by_name[BP_GREIMORIAN_EGGCLUSTER] && prob(20))
- var/obj/item/organ/external/affected = pick(victim.organs)
- if(BP_IS_ROBOTIC(affected))
- return
- // Give the victim an extra chance to NOT get an eggsac in their head; reroll. Ditto mechanical limbs.
- if(affected == BP_HEAD)
- affected = pick(victim.organs)
- var/obj/item/organ/internal/parasite/greimorian_eggcluster/infest = new()
- infest.parent_organ = affected.limb_name
- infest.replaced(victim, affected)
+ if(dose > 10) // at least 3 bites
+ if(!victim.internal_organs_by_name[BP_GREIMORIAN_EGGCLUSTER] && prob(20))
+ var/obj/item/organ/external/affected = pick(victim.organs)
+ if(BP_IS_ROBOTIC(affected))
+ return
+ // Give the victim an extra chance to NOT get an eggsac somewhere that will insta-kill them; reroll. Ditto mechanical limbs.
+ if(affected == BP_HEAD || affected == BP_CHEST || affected == BP_GROIN)
+ affected = pick(victim.organs)
+ var/obj/item/organ/internal/parasite/greimorian_eggcluster/infest = new()
+ infest.parent_organ = affected.limb_name
+ infest.replaced(victim, affected)
+
+ victim.chem_doses[type] = dose / 2
/singleton/reagent/toxin/malignant_tumour_cells
name = "Malignant Tumour Cells"
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index e1ec60ad8c4..da577444390 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -1271,7 +1271,10 @@
/mob/living/simple_animal/hostile/mimic,
/mob/living/simple_animal/hostile/cavern_geist,
/mob/living/simple_animal/hostile/cavern_geist/augmented,
- /mob/living/simple_animal/hostile/retaliate/pra_exploration_drone
+ /mob/living/simple_animal/hostile/retaliate/pra_exploration_drone,
+ /mob/living/simple_animal/hostile/psiren/omen,
+ /mob/living/simple_animal/hostile/psiren/omen/beckoner,
+ /mob/living/simple_animal/hostile/psiren/matriarch
)
var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
diff --git a/code/modules/reagents/reagent_containers/food/snacks/cultural/tajara.dm b/code/modules/reagents/reagent_containers/food/snacks/cultural/tajara.dm
index e7a3a105a77..086bd174e44 100644
--- a/code/modules/reagents/reagent_containers/food/snacks/cultural/tajara.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks/cultural/tajara.dm
@@ -858,3 +858,45 @@
reagents_to_add = list(/singleton/reagent/nutriment = 3, /singleton/reagent/drink/milk/adhomai/fermented = 1, /singleton/reagent/nutriment/protein/cheese = 1)
reagent_data = list(/singleton/reagent/nutriment = list("pretzel" = 3), /singleton/reagent/nutriment/protein/cheese = list("chewy cheese" = 3))
bitesize = 2
+
+/obj/item/reagent_containers/food/snacks/breadbake_meat
+ name = "meat thamo"
+ desc = "An Adhomian pastry made of thick bread enveloping a filling of ground meat mixed with Messa's Tear and rock salt. Traditionally eaten with utensils, unlike the similarly made Rikazus that were inspired from it. Other cultures sometimes mistake it for handheld food, often with messy results."
+ icon = 'icons/obj/item/reagent_containers/food/cultural/tajara.dmi'
+ icon_state = "breadbake_meat"
+ bitesize = 2
+ reagents_to_add = list(/singleton/reagent/nutriment = 4, /singleton/reagent/nutriment/protein = 5)
+ reagent_data = list(/singleton/reagent/nutriment = list("thick dough" = 4), /singleton/reagent/nutriment/protein = list("salty meat" = 4, "honey" = 2))
+ filling_color = "#422f12"
+
+/obj/item/reagent_containers/food/snacks/breadbake_meat/update_icon()
+ var/expected_initial_reagent_volume
+ for(var/k in src.reagents_to_add)
+ expected_initial_reagent_volume += reagents_to_add[k]
+ var/percent_breadbake_meat = round((reagents.total_volume / expected_initial_reagent_volume) * 100)
+ switch(percent_breadbake_meat)
+ if(0 to 50)
+ icon_state = "breadbake_meat_half"
+ if(51 to INFINITY)
+ icon_state = "breadbake_meat"
+
+/obj/item/reagent_containers/food/snacks/breadbake_cheese
+ name = "cheese thamo"
+ desc = "An Adhomian pastry made of thick bread enveloping a filling of Adhomian cheese mixed with Messa's Tear. Originally named Tha'la Lekhshoma which roughly translates to breadbake in Common. However, this name has gradually been overtaken by the newer Siik name of Thamo."
+ icon = 'icons/obj/item/reagent_containers/food/cultural/tajara.dmi'
+ icon_state = "breadbake_cheese"
+ bitesize = 2
+ reagents_to_add = list(/singleton/reagent/nutriment = 4, /singleton/reagent/nutriment/protein/cheese = 3, /singleton/reagent/drink/milk/adhomai/fermented = 3)
+ reagent_data = list(/singleton/reagent/nutriment = list("thick dough" = 4, "honey" = 2), /singleton/reagent/nutriment/protein/cheese = list("salted cheese" = 10))
+ filling_color = "#e6e5e5"
+
+/obj/item/reagent_containers/food/snacks/breadbake_cheese/update_icon()
+ var/expected_initial_reagent_volume
+ for(var/k in src.reagents_to_add)
+ expected_initial_reagent_volume += reagents_to_add[k]
+ var/percent_breadbake_cheese = round((reagents.total_volume / expected_initial_reagent_volume) * 100)
+ switch(percent_breadbake_cheese)
+ if(0 to 50)
+ icon_state = "breadbake_cheese_half"
+ if(51 to INFINITY)
+ icon_state = "breadbake_cheese"
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 13806387833..0e83d4bea46 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -134,6 +134,11 @@
name = "space cleaner"
desc = "BLAM!-brand non-foaming space cleaner!"
+/obj/item/reagent_containers/spray/cleaner/surgical
+ name = "surgical cleaner"
+ desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."
+ icon_state = "sterilespray"
+
/obj/item/reagent_containers/spray/cleaner/drone
name = "space cleaner"
desc = "BLAM!-brand non-foaming space cleaner!"
diff --git a/code/modules/reagents/reagent_containers/welding_backpack.dm b/code/modules/reagents/reagent_containers/welding_backpack.dm
index d5395a81518..0ce6de89ade 100644
--- a/code/modules/reagents/reagent_containers/welding_backpack.dm
+++ b/code/modules/reagents/reagent_containers/welding_backpack.dm
@@ -15,6 +15,16 @@
drop_sound = 'sound/items/drop/backpack.ogg'
pickup_sound = 'sound/items/pickup/backpack.ogg'
+/obj/item/reagent_containers/weldpack/Initialize(mapload)
+ var/turf/T = get_turf(src)
+ if(mapload && T && is_station_level(T.z))
+ // If the weldpack is spawned on a station level during map load, don't give it any fuel.
+ // This is in support of persistent welding fuel tanks and only for the persistent levels.
+ reagents_to_add = null
+ create_reagents(volume) // Ensure reagents datum is created, even if empty
+ update_volume()
+ . = ..() // After reagents_to_add is updated
+
/obj/item/reagent_containers/weldpack/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(ishuman(loc) && user != loc) // what if we want to sneak some reagents out of somewhere?
@@ -27,6 +37,20 @@
else
. += SPAN_WARNING("\The [src] is empty!")
+/obj/item/reagent_containers/weldpack/proc/update_volume()
+ var/fill_level = reagents.total_volume / volume
+ if(fill_level <= 0.1)
+ icon_state = "welderpack_low"
+ item_state = "welderpack_low"
+ else
+ icon_state = "welderpack"
+ item_state = "welderpack"
+ update_icon()
+ update_worn_icon()
+
+/obj/item/reagent_containers/weldpack/on_reagent_change()
+ update_volume()
+
/obj/item/reagent_containers/weldpack/attackby(obj/item/attacking_item, mob/user)
if(attacking_item.tool_behaviour == TOOL_WRENCH)
if(atom_flags & ATOM_FLAG_OPEN_CONTAINER)
@@ -60,5 +84,6 @@
reagents.trans_type_to(attacking_item, /singleton/reagent/fuel, min(fuel_volume, T.reagents.maximum_volume - tool_fuel_volume))
to_chat(user, SPAN_NOTICE("Welder refilled!"))
playsound(loc, 'sound/effects/refill.ogg', 50, 1, -6)
+ update_volume()
return
return ..()
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index a30c48c1d99..74d63417ff6 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -2,7 +2,7 @@
name = "strange dispenser"
desc = "What the fuck is this?"
icon = 'icons/obj/reagent_dispensers.dmi'
- icon_state = "watertank"
+ icon_state = "watertank" // Mapping icon
density = 1
anchored = 0
maxhealth = OBJECT_HEALTH_HIGH
@@ -12,6 +12,7 @@
var/capacity = 1000
var/can_tamper = TRUE
var/is_leaking = FALSE
+ var/has_fill_levels = FALSE // Features base underlay and overlays for 100%, 80%, 60%, 40%, 20% fill levels
var/is_persistent = FALSE
/obj/structure/reagent_dispensers/mechanics_hints(mob/user, distance, is_adjacent)
@@ -29,11 +30,49 @@
/obj/structure/reagent_dispensers/Initialize()
. = ..()
+ if(has_fill_levels)
+ icon_state = "[icon_state]_underlay" // Replace mapping icon with underlay version for fill level overlay
create_reagents(capacity)
if (!possible_transfer_amounts)
src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
if(is_persistent)
SSpersistence.objectsRegisterTrack(src)
+ update_icon()
+
+/obj/structure/reagent_dispensers/update_icon()
+ if(!has_fill_levels)
+ return
+ ClearOverlays()
+
+ var/level = reagents.total_volume / capacity
+ var/fill_level_overlay = null
+
+ if(level <= 1.0)
+ fill_level_overlay = "_100"
+ if(level <= 0.8)
+ fill_level_overlay = "_80"
+ if(level <= 0.6)
+ fill_level_overlay = "_60"
+ if(level <= 0.4)
+ fill_level_overlay = "_40"
+ if(level <= 0.2)
+ fill_level_overlay = "_20"
+ if(level == 0)
+ fill_level_overlay = null
+
+ if(fill_level_overlay)
+ AddOverlays("[initial(icon_state)][fill_level_overlay]")
+ . = ..()
+
+// Debug verb, uncomment if you are in need to adjust a lot of tanks
+// /obj/structure/reagent_dispensers/verb/adjust_regeant_total_volume()
+// set name = "Set reagent total volume"
+// set category = "Object"
+// set src in view(1)
+// var/x = tgui_input_number(usr, "Select the total reagent amount for this. ", "[src]", capacity, capacity, 0)
+// if (x)
+// reagents.total_volume = x
+// update_icon()
/obj/structure/reagent_dispensers/persistent_objects_get_content()
var/list/content = ..()
@@ -45,7 +84,8 @@
src.y = y
src.z = z
if(!content["remaining_volume"] || content["remaining_volume"] <= 0)
- qdel(src)
+ reagents_to_add = null
+ return
if(!LAZYLEN(reagents_to_add))
return
@@ -69,8 +109,8 @@
qdel(src)
/obj/structure/reagent_dispensers/attackby(obj/item/attacking_item, mob/user)
-
var/obj/item/reagent_containers/RG = attacking_item
+
if (istype(RG))
if(!user.Adjacent(src)) return
if(RG.loc != user && !isrobot(user)) return
@@ -79,9 +119,6 @@
return
if (usr.a_intent == I_HELP)
RG.standard_dispenser_refill(user,src)
- if(!reagents || !reagents.total_volume)
- SSpersistence.objectsDeregisterTrack(src)
- return
playsound(src.loc, 'sound/machines/reagent_dispense.ogg', 25, 1)
else
if(!accept_any_reagent)
@@ -91,6 +128,7 @@
RG.standard_pour_into(user,src)
else
to_chat(user,SPAN_NOTICE("The inlet cap on \the [src] is wrenched on tight!"))
+ update_icon()
if (attacking_item.tool_behaviour == TOOL_WRENCH)
if(use_check(user, USE_DISALLOW_SPECIALS))
@@ -123,6 +161,7 @@
var/splash_amount = min(amount_per_transfer_from_this,60) //Hard limit of 60 per process
reagents.trans_to_turf(get_turf(src),splash_amount)
+ update_icon()
/obj/structure/reagent_dispensers/on_death(damage, damage_flags, damage_type, armor_penetration, obj/weapon)
if(!should_use_health)
@@ -141,6 +180,7 @@
icon_state = "extinguisher_tank"
amount_per_transfer_from_this = 150 // Same volume as extinguisher refillers, quality of life value
reagents_to_add = list(/singleton/reagent/toxin/fertilizer/monoammoniumphosphate = 1000)
+ has_fill_levels = TRUE
is_persistent = TRUE
// Tanks
@@ -150,6 +190,7 @@
icon_state = "watertank"
amount_per_transfer_from_this = 300
reagents_to_add = list(/singleton/reagent/water = 1000)
+ has_fill_levels = TRUE
is_persistent = TRUE
/obj/structure/reagent_dispensers/lube
@@ -157,6 +198,7 @@
desc = "A tank filled with a silly amount of lube."
icon_state = "lubetank"
amount_per_transfer_from_this = 30
+ has_fill_levels = TRUE
reagents_to_add = list(/singleton/reagent/lube = 1000)
/obj/structure/reagent_dispensers/fueltank
@@ -169,6 +211,7 @@
var/armed = 0
var/obj/item/assembly_holder/rig = null
reagents_to_add = list(/singleton/reagent/fuel = 1000)
+ has_fill_levels = TRUE
is_persistent = TRUE
/obj/structure/reagent_dispensers/fueltank/feedback_hints(mob/user, distance, is_adjacent)
@@ -476,6 +519,8 @@
amount_per_transfer_from_this = 120
capacity = 1000
reagents_to_add = list(/singleton/reagent/nutriment/triglyceride/oil/corn = 1000)
+ has_fill_levels = TRUE
+ is_persistent = TRUE
/obj/structure/reagent_dispensers/cookingoil/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit)
. = ..()
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 45f41abcb16..39b88d51645 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -1084,9 +1084,9 @@
/obj/structure/disposalpipe/proc/welded()
var/obj/structure/disposalconstruct/C = new (src.loc)
switch(icon_state)
- if("pipe-s")
+ if("pipe-s", "pipe-s-yellow", "pipe-s-blue")
C.ptype = 0
- if("pipe-c")
+ if("pipe-c", "pipe-c-yellow", "pipe-c-blue")
C.ptype = 1
if("pipe-j1")
C.ptype = 2
@@ -1135,13 +1135,23 @@
/obj/structure/disposalpipe/segment/Initialize()
. = ..()
- if(icon_state == "pipe-s")
+ if(icon_state == "pipe-s" || icon_state == "pipe-s-yellow" || icon_state == "pipe-s-blue")
dpdir = dir | turn(dir, 180)
else
dpdir = dir | turn(dir, -90)
update()
+/obj/structure/disposalpipe/segment/mainline
+ name = "mainline disposal pipe"
+ desc = "A disposal pipe indicated by a yellow stripe to be part of the main trunk loop."
+ icon_state = "pipe-s-yellow"
+
+/obj/structure/disposalpipe/segment/blue
+ name = "disposal pipe"
+ desc = "A disposal pipe marked by a blue stripe."
+ icon_state = "pipe-s-blue"
+
/// Z-Level stuff
/obj/structure/disposalpipe/up
icon_state = "pipe-u"
diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm
index 40b1ee17a78..698969471a1 100644
--- a/code/modules/research/circuitprinter.dm
+++ b/code/modules/research/circuitprinter.dm
@@ -1,82 +1,47 @@
/*///////////////Circuit Imprinter (By Darem)////////////////////////
- Used to print new circuit boards (for computers and similar systems) and AI modules. Each circuit board pattern are stored in
-a /datum/desgin on the linked R&D console. You can then print them out in a fasion similar to a regular lathe. However, instead of
-using metal and glass, it uses glass and reagents (usually sulphuric acid).
+ Used to print new circuit boards (for computers and similar systems) and AI modules.
*/
-/obj/structure/machinery/r_n_d/circuit_imprinter
+/obj/structure/machinery/r_n_d/fabricator/circuit_imprinter
name = "circuit imprinter"
desc = "An advanced device that can only be operated via a nearby RnD console, it can print any circuitboard the user requests, provided it has the correct materials to do so."
icon_state = "circuit_imprinter"
atom_flags = ATOM_FLAG_OPEN_CONTAINER
-
idle_power_usage = 30
active_power_usage = 2500
-
+ build_type = IMPRINTER
+ uses_reagents = TRUE
+ fabrication_loop_type = /datum/looping_sound/synth_fab
component_types = list(
/obj/item/circuitboard/circuit_imprinter,
- /obj/item/stock_parts/matter_bin,
/obj/item/stock_parts/manipulator,
/obj/item/reagent_containers/glass/beaker = 2
)
- var/max_material_storage = 75000
- var/list/materials = list(MATERIAL_STEEL = 0, MATERIAL_GLASS = 0, MATERIAL_GOLD = 0, MATERIAL_SILVER = 0, MATERIAL_PHORON = 0, MATERIAL_URANIUM = 0, MATERIAL_DIAMOND = 0)
-
- /**
- * A `/list` of enqueued `/datum/design` to be printed, processed in the queue
- */
- var/list/datum/design/queue = list()
-
- /**
- * How much efficient (or inefficient) the circuit imprinter is at manufacturing circuit boards
- */
- var/mat_efficiency = 1
-
- /**
- * The production speed of this specific circuit imprinter, a factor
- */
- var/production_speed = 1
-
- ///Boolean, if to make the printer spawn its product in a neighboring turf dictated by dir
- var/product_offset = FALSE
-
- ///The timer id for the build callback, if we're building something
- var/build_callback_timer
-
-
-/obj/structure/machinery/r_n_d/circuit_imprinter/upgrade_hints(mob/user, distance, is_adjacent)
+/obj/structure/machinery/r_n_d/fabricator/circuit_imprinter/upgrade_hints(mob/user, distance, is_adjacent)
. += ..()
- . += "- Upgraded matter bins will increase material storage capacity."
- . += SPAN_NOTICE(" - The current storage capacity is [max_material_storage / 2000] sheets")
+ . += "- Materials are drawn from the research material silo linked to the same R&D console."
. += "- Upgraded manipulators will improve material use efficiency and increase fabrication speed."
. += SPAN_NOTICE(" - The current speed increase is [round((1 - (1 / production_speed)) * 100)]%")
. += SPAN_NOTICE(" - The current cost reduction is [round((1 - mat_efficiency) * 100)]%")
-/obj/structure/machinery/r_n_d/circuit_imprinter/RefreshParts()
+/obj/structure/machinery/r_n_d/fabricator/circuit_imprinter/RefreshParts()
..()
- // Adjust reagent container volume to match combined volume of the inserted beakers
- var/T = 0
- for(var/obj/item/reagent_containers/glass/G in component_parts)
- T += G.reagents.maximum_volume
- create_reagents(T)
- // Transfer all reagents from the beakers to internal reagent container
- for(var/obj/item/reagent_containers/glass/G in component_parts)
- G.reagents.trans_to_obj(src, G.reagents.total_volume)
+ var/total_volume = 0
+ for(var/obj/item/reagent_containers/glass/beaker in component_parts)
+ total_volume += beaker.reagents.maximum_volume
+ create_reagents(total_volume)
+ for(var/obj/item/reagent_containers/glass/beaker in component_parts)
+ beaker.reagents.trans_to_obj(src, beaker.reagents.total_volume)
- // Adjust material storage capacity to scale with matter bin rating
- max_material_storage = 0
- for(var/obj/item/stock_parts/matter_bin/M in component_parts)
- max_material_storage += M.rating * 75000
+ var/manipulator_rating = 0
+ for(var/obj/item/stock_parts/manipulator/manipulator in component_parts)
+ manipulator_rating += manipulator.rating
+ mat_efficiency = 1 - (manipulator_rating - 1) / 8
+ production_speed = manipulator_rating
+ update_icon()
- // Adjust production speed to increase with manipulator rating
- T = 0
- for(var/obj/item/stock_parts/manipulator/M in component_parts)
- T += M.rating
- mat_efficiency = 1 - (T - 1) / 4
- production_speed = T
-
-/obj/structure/machinery/r_n_d/circuit_imprinter/update_icon()
+/obj/structure/machinery/r_n_d/fabricator/circuit_imprinter/update_icon()
if(panel_open)
icon_state = "circuit_imprinter_t"
else if(build_callback_timer)
@@ -84,240 +49,11 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid).
else
icon_state = "circuit_imprinter"
-/obj/structure/machinery/r_n_d/circuit_imprinter/proc/TotalMaterials()
- SSmaterials.normalize_material_amounts(materials)
- var/t = 0
- for(var/f in materials)
- t += materials[f]
- return t
-
-/obj/structure/machinery/r_n_d/circuit_imprinter/dismantle()
- for(var/obj/I in component_parts)
- // This will distribute all reagents amongst the contained beakers
- if(istype(I, /obj/item/reagent_containers/glass/beaker))
- reagents.trans_to_obj(I, reagents.total_volume)
- SSmaterials.normalize_material_amounts(materials)
- for(var/f in materials)
- if(materials[f] >= SHEET_MATERIAL_AMOUNT)
- var/path = getMaterialType(f)
- if(path)
- var/obj/item/stack/S = new path(loc)
- S.amount = round(materials[f] / SHEET_MATERIAL_AMOUNT)
+/obj/structure/machinery/r_n_d/fabricator/circuit_imprinter/dismantle()
+ for(var/obj/item/reagent_containers/glass/beaker in component_parts)
+ reagents.trans_to_obj(beaker, reagents.total_volume)
..()
-/obj/structure/machinery/r_n_d/circuit_imprinter/attackby(obj/item/attacking_item, mob/user)
- //No touch the machine while it's working!
- if(build_callback_timer)
- to_chat(user, SPAN_NOTICE("\The [src] is busy. Please wait for completion of previous operation."))
- return 1
-
- if(default_deconstruction_screwdriver(user, attacking_item))
- if(linked_console)
- linked_console.linked_imprinter = null
- linked_console = null
- return
-
- if(default_deconstruction_crowbar(user, attacking_item))
- return
-
- if(default_part_replacement(user, attacking_item))
- return
-
- if(panel_open)
- to_chat(user, SPAN_NOTICE("You can't load \the [src] while it's opened."))
- return 1
-
- if(!linked_console)
- to_chat(user, "\The [src] must be linked to an R&D console first.")
- return 1
-
- if(attacking_item.is_open_container())
- return 0
-
- if(!istype(attacking_item, /obj/item/stack/material))
- to_chat(user, SPAN_NOTICE("You cannot insert this item into \the [src]!"))
- return 1
-
- if(stat)
- return 1
-
-
- if(TotalMaterials() + SHEET_MATERIAL_AMOUNT > max_material_storage)
- to_chat(user, SPAN_NOTICE("\The [src]'s material bin is full. Please remove material before adding more."))
- return 1
-
- var/obj/item/stack/material/stack = attacking_item
- if(!stack.default_type)
- to_chat(user, SPAN_WARNING("This stack cannot be used!"))
- return
-
- var/max_value = min(stack.get_amount(), round((max_material_storage - TotalMaterials()) / SHEET_MATERIAL_AMOUNT))
- var/amount = tgui_input_number(user, "How many sheets do you want to add?", "Add sheets", min(10, max_value), max_value = max_value, min_value = 1, round_value = TRUE)
-
- if(!attacking_item)
- return
- if(!Adjacent(user))
- to_chat(user, SPAN_NOTICE("\The [src] is too far away for you to insert this."))
- return
- if(amount <= 0)//No negative numbers
- return
-
- use_power_oneoff(max(1000, (SHEET_MATERIAL_AMOUNT * amount / 10)))
- if(do_after(user, 16))
- if(stack.use(amount))
- to_chat(user, SPAN_NOTICE("You add [amount] sheets to \the [src]."))
- SSmaterials.add_material_amount(materials, stack.default_type, amount * SHEET_MATERIAL_AMOUNT)
-
- //In case there's things queued up, we run the queue handler
- handle_queue()
-
- updateUsrDialog()
-
-/**
- * Adds a design to the queue
- *
- * * design_to_add: The design to add
- */
-/obj/structure/machinery/r_n_d/circuit_imprinter/proc/addToQueue(datum/design/design_to_add)
- queue += design_to_add
-
- //Wake up, we have things to do
- handle_queue()
-
-
-/**
- * Removes a design from the queue
- *
- * * index: The index of the design to remove
- */
-/obj/structure/machinery/r_n_d/circuit_imprinter/proc/removeFromQueue(index)
- queue.Cut(index, index + 1)
-
- //Wake up, we have things to do
- handle_queue()
-
-
-/**
- * Handle the construction queue
- */
-/obj/structure/machinery/r_n_d/circuit_imprinter/proc/handle_queue()
- //No work to do or already busy, stop
- if(!length(queue) || build_callback_timer)
- update_icon()
- return
-
- //If there's no power, there's no building
- if(stat & NOPOWER)
- queue = list()
- return
-
- //Get the first design in the queue
- var/datum/design/D = queue[1]
-
- //If we can build it, process the request
- if(canBuild(D))
- build_callback_timer = addtimer(CALLBACK(src, PROC_REF(build), D), (D.time / production_speed), TIMER_UNIQUE)
- removeFromQueue(1)
-
- else
- visible_message(SPAN_NOTICE("[icon2html(src, viewers(get_turf(src)))] \The [src] flashes: insufficient materials: [getLackingMaterials(D)]."))
- if(linked_console)
- linked_console.updateUsrDialog()
-
- update_icon()
-
-/**
- * Checks if the protolathe can build the given design
- *
- * * design_to_check: The design to check
- *
- * Returns `TRUE` if the design can be built, `FALSE` otherwise
- */
-/obj/structure/machinery/r_n_d/circuit_imprinter/proc/canBuild(datum/design/design_to_check)
- SSmaterials.normalize_material_amounts(materials)
- for(var/M in design_to_check.materials)
- var/material = SSmaterials.material_to_path(M, FALSE)
- if(!material)
- material = M
- if((materials[material] || 0) < design_to_check.materials[M])
- return FALSE
-
- for(var/C in design_to_check.chemicals)
- if(!reagents.has_reagent(C, design_to_check.chemicals[C]))
- return FALSE
-
- return TRUE
-
-/**
- * Get what materials (chemicals included) are lacking from being able to build the given design
- *
- * * design_to_check: The design to check
- *
- * Returns a string of the materials that are missing
- */
-/obj/structure/machinery/r_n_d/circuit_imprinter/proc/getLackingMaterials(datum/design/design_to_check)
- SSmaterials.normalize_material_amounts(materials)
- var/ret = ""
-
- for(var/M in design_to_check.materials)
- var/amount = SSmaterials.get_material_amount(materials, M)
- if(amount < design_to_check.materials[M])
- if(ret != "")
- ret += ", "
- ret += "[design_to_check.materials[M] - amount] [SSmaterials.material_display_name(M)]"
-
- for(var/C in design_to_check.chemicals)
- if(!reagents.has_reagent(C, design_to_check.chemicals[C]))
- var/singleton/reagent/R = GET_SINGLETON(C)
- if(ret != "")
- ret += ", "
- ret += "[R.name]"
-
- return ret
-
-/**
- * Builds the given design, assuming all the necessary conditions are met
- *
- * * design_to_build: The design to build
- */
-/obj/structure/machinery/r_n_d/circuit_imprinter/proc/build(datum/design/design_to_build)
- //Consume some power
- var/power = active_power_usage
- for(var/M in design_to_build.materials)
- power += round(design_to_build.materials[M] / 5)
- power = max(active_power_usage, power)
- use_power_oneoff(power)
-
- //Consume the materials
- SSmaterials.normalize_material_amounts(materials)
- for(var/M in design_to_build.materials)
- SSmaterials.remove_material_amount(materials, M, design_to_build.materials[M] * mat_efficiency)
-
- for(var/C in design_to_build.chemicals)
- reagents.remove_reagent(C, design_to_build.chemicals[C] * mat_efficiency)
-
- if(design_to_build.build_path)
- var/obj/new_item = design_to_build.Fabricate(src, src)
- if(product_offset)
- new_item.forceMove(get_step(src, dir))
- else
- new_item.forceMove(src.loc)
- if(mat_efficiency != 1) // No matter out of nowhere
- if(new_item.matter && new_item.matter.len > 0)
- for(var/i in new_item.matter)
- new_item.matter[i] = new_item.matter[i] * mat_efficiency
-
- //We finished building, clear the timer
- build_callback_timer = null
-
- //Do the queue handling for the next item, or to stop
- handle_queue()
-
-
-/obj/structure/machinery/r_n_d/circuit_imprinter/is_open_container()
+/obj/structure/machinery/r_n_d/fabricator/circuit_imprinter/is_open_container()
. = ..()
-
- //This is to recheck the queue when acid is added to the reagent container that we have
- //yes this should be done with signals, we don't have those signals yet
- //cope
- addtimer(CALLBACK(src, PROC_REF(handle_queue)), 1 SECOND, TIMER_UNIQUE)
+ linked_console?.dispatch_fabrication_jobs()
diff --git a/code/modules/research/designs/circuit/circuits.dm b/code/modules/research/designs/circuit/circuits.dm
index 1881e6b806a..af10934741e 100644
--- a/code/modules/research/designs/circuit/circuits.dm
+++ b/code/modules/research/designs/circuit/circuits.dm
@@ -9,7 +9,7 @@
if(ispath(build_path, /obj/item/circuitboard))
var/obj/item/circuitboard/CB = build_path
var/atom/machine = initial(CB.build_path)
- desc = "Used in the construction of a: [capitalize_first_letters(initial(machine.name))], [initial(machine.desc)]"
+ desc = "Used in the construction of a: [capitalize_first_letters(initial(machine.name))], [initial(machine.desc)]"
else
var/atom/A = build_path
desc = initial(A.desc)
diff --git a/code/modules/research/designs/circuit/machine_circuits.dm b/code/modules/research/designs/circuit/machine_circuits.dm
index 8204f6a5c35..12d876e115b 100644
--- a/code/modules/research/designs/circuit/machine_circuits.dm
+++ b/code/modules/research/designs/circuit/machine_circuits.dm
@@ -213,7 +213,7 @@
/datum/design/circuit/machine/aicore
name = "AI Core"
- desc = "Used in the construction of an: AI core, Secure housing for an AI, it provides power and protection to its inhabitant."
+ desc = "Used in the construction of an: AI core, Secure housing for an AI, it provides power and protection to its inhabitant."
req_tech = list(TECH_DATA = 4, TECH_BIO = 3)
build_path = /obj/item/circuitboard/aicore
diff --git a/code/modules/research/designs/circuit/tcom_designs.dm b/code/modules/research/designs/circuit/tcom_designs.dm
index 32907a228cb..587fe5c914b 100644
--- a/code/modules/research/designs/circuit/tcom_designs.dm
+++ b/code/modules/research/designs/circuit/tcom_designs.dm
@@ -29,6 +29,11 @@
build_path = /obj/item/circuitboard/telecomms/receiver
/datum/design/circuit/tcom/ntnet_relay
- name = "NTNet Quantum Relay"
+ name = "NTNet Bluespace Relay"
req_tech = list(TECH_DATA = 4)
build_path = /obj/item/circuitboard/ntnet_relay
+
+/datum/design/circuit/tcom/ntnet_relay/field
+ name = "NTNet Field Relay"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/circuitboard/ntnet_relay/field
diff --git a/code/modules/research/designs/mechfab/prosthetics/external.dm b/code/modules/research/designs/mechfab/prosthetics/external.dm
index 73d81db3976..72eb008dd4a 100644
--- a/code/modules/research/designs/mechfab/prosthetics/external.dm
+++ b/code/modules/research/designs/mechfab/prosthetics/external.dm
@@ -4,9 +4,9 @@
//if the fabricator is a mech fab we need to construct the proper typepath for the manufacturer
/datum/design/item/mechfab/prosthetic/Fabricate(var/newloc, var/fabricator)
- if(istype(fabricator, /obj/structure/machinery/mecha_part_fabricator))
+ if(istype(fabricator, /obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator))
if(!use_direct_buildpath)
- var/obj/structure/machinery/mecha_part_fabricator/mechfab = fabricator
+ var/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator/mechfab = fabricator
for(var/model_path in subtypesof(build_path))
var/obj/item/organ/external/E = new model_path
if(E.robotize_type == mechfab.limb_manufacturer)
diff --git a/code/modules/research/designs/mechfab/robot/robot.dm b/code/modules/research/designs/mechfab/robot/robot.dm
index b5f7e49939c..7cbee8d18d4 100644
--- a/code/modules/research/designs/mechfab/robot/robot.dm
+++ b/code/modules/research/designs/mechfab/robot/robot.dm
@@ -7,8 +7,8 @@
//if the fabricator is a mech fab pass the manufacturer info over to the robot part constructor
/datum/design/item/mechfab/robot/Fabricate(var/newloc, var/fabricator)
- if(istype(fabricator, /obj/structure/machinery/mecha_part_fabricator))
- var/obj/structure/machinery/mecha_part_fabricator/mechfab = fabricator
+ if(istype(fabricator, /obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator))
+ var/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator/mechfab = fabricator
return new build_path(newloc, mechfab.manufacturer)
return ..()
diff --git a/code/modules/research/designs/protolathe/integrated_electronics_designs.dm b/code/modules/research/designs/protolathe/integrated_electronics_designs.dm
index 5e6e818e003..97756f10c1c 100644
--- a/code/modules/research/designs/protolathe/integrated_electronics_designs.dm
+++ b/code/modules/research/designs/protolathe/integrated_electronics_designs.dm
@@ -71,5 +71,5 @@
name = "Integrated Circuit Printer Upgrade Disk - Circuit Cloner"
desc = "An upgrade disk that allows the integrated circuit printer to duplicate assemblies."
req_tech = list(TECH_ENGINEERING = 5, TECH_DATA = 6)
- materials = list(DEFAULT_WALL_MATERIAL = 3000)
+ materials = list(MATERIAL_STEEL = 3000)
build_path = /obj/item/disk/integrated_circuit/upgrade/clone
diff --git a/code/modules/research/designs/protolathe/modular_gun_designs.dm b/code/modules/research/designs/protolathe/modular_gun_designs.dm
index 35ef9ee7b99..77b0e5e787b 100644
--- a/code/modules/research/designs/protolathe/modular_gun_designs.dm
+++ b/code/modules/research/designs/protolathe/modular_gun_designs.dm
@@ -60,7 +60,7 @@
/datum/design/item/modular_weapon/modular_teranium
req_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 4, TECH_MAGNET = 6)
- materials = list(MATERIAL_STEEL = 4000, MATERIAL_GLASS = 1000, MATERIAL_URANIUM = 500)
+ materials = list(MATERIAL_STEEL = 4000, MATERIAL_GLASS = 1000, MATERIAL_GOLD = 500)
build_path = /obj/item/laser_components/capacitor/teranium
/datum/design/item/modular_weapon/modular_phoron
@@ -70,7 +70,7 @@
/datum/design/item/modular_weapon/modular_bs
req_tech = list(TECH_POWER = 7, TECH_ENGINEERING = 7, TECH_PHORON = 6, TECH_BLUESPACE = 5)
- materials = list(MATERIAL_STEEL = 4000, MATERIAL_PHORON = 3000, MATERIAL_URANIUM = 500, MATERIAL_DIAMOND = 1000)
+ materials = list(MATERIAL_STEEL = 4000, MATERIAL_PHORON = 3000, MATERIAL_SILVER = 500, MATERIAL_DIAMOND = 1000)
build_path = /obj/item/laser_components/capacitor/bluespace
/datum/design/item/modular_weapon/modular_lens
@@ -125,7 +125,7 @@
/datum/design/item/modular_weapon/modular_gatling
req_tech = list(TECH_COMBAT = 6, TECH_PHORON = 5, TECH_MATERIAL = 6, TECH_POWER = 3)
- materials = list(MATERIAL_STEEL = 750, MATERIAL_GLASS = 3000, MATERIAL_PHORON = 2000, MATERIAL_SILVER = 2000, MATERIAL_DIAMOND = 1000)
+ materials = list(MATERIAL_STEEL = 750, MATERIAL_GLASS = 3000, MATERIAL_PHORON = 2000, MATERIAL_SILVER = 2000, MATERIAL_GOLD = 1000)
build_path = /obj/item/laser_components/modifier/gatling
/datum/design/item/modular_weapon/modular_scope
diff --git a/code/modules/research/designs/protolathe/stock_parts_designs.dm b/code/modules/research/designs/protolathe/stock_parts_designs.dm
index 73957e678f8..6fb65ccf6ff 100644
--- a/code/modules/research/designs/protolathe/stock_parts_designs.dm
+++ b/code/modules/research/designs/protolathe/stock_parts_designs.dm
@@ -92,7 +92,7 @@
/datum/design/item/stock_part/subspace_ansible
desc = "A component used in telecomms machinery construction."
req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
- materials = list(MATERIAL_STEEL = 80, MATERIAL_SILVER = 20)
+ materials = list(MATERIAL_STEEL = 80, MATERIAL_SILVER = 50, MATERIAL_PHORON = 500)
build_path = /obj/item/stock_parts/subspace/ansible
/datum/design/item/stock_part/hyperwave_filter
@@ -104,7 +104,7 @@
/datum/design/item/stock_part/subspace_amplifier
desc = "A component used in telecomms machinery construction."
req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
- materials = list(MATERIAL_STEEL = 10, MATERIAL_GOLD = 30, MATERIAL_URANIUM = 15)
+ materials = list(MATERIAL_STEEL = 10, MATERIAL_GOLD = 30, MATERIAL_URANIUM = 15, MATERIAL_PHORON = 100)
build_path = /obj/item/stock_parts/subspace/amplifier
/datum/design/item/stock_part/subspace_treatment
@@ -122,7 +122,7 @@
/datum/design/item/stock_part/subspace_crystal
desc = "A component used in telecomms machinery construction."
req_tech = list(TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
- materials = list(MATERIAL_GLASS = 1000, MATERIAL_SILVER = 20, MATERIAL_GOLD = 20)
+ materials = list(MATERIAL_GLASS = 1000, MATERIAL_SILVER = 20, MATERIAL_GOLD = 20, MATERIAL_PHORON = 500)
build_path = /obj/item/stock_parts/subspace/crystal
/datum/design/item/stock_part/subspace_transmitter
diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm
index 4ba23700636..9914a463175 100644
--- a/code/modules/research/protolathe.dm
+++ b/code/modules/research/protolathe.dm
@@ -1,102 +1,56 @@
-/obj/structure/machinery/r_n_d/protolathe
+/obj/structure/machinery/r_n_d/fabricator/protolathe
name = "protolathe"
desc = "An upgraded variant of a common Autolathe, this can only be operated via a nearby RnD console, but can manufacture cutting edge technology, provided it has the design and the correct materials."
icon_state = "protolathe"
atom_flags = ATOM_FLAG_OPEN_CONTAINER
-
idle_power_usage = 30 WATTS
active_power_usage = 25 KILO WATTS
-
- var/max_material_storage = 100000
- var/list/materials = list(MATERIAL_STEEL = 0, MATERIAL_GLASS = 0, MATERIAL_GOLD = 0, MATERIAL_SILVER = 0, MATERIAL_PHORON = 0, MATERIAL_URANIUM = 0, MATERIAL_DIAMOND = 0)
-
- /**
- * A `/list` of enqueued `/datum/design` to be printed, processed in the queue
- */
- var/list/datum/design/queue = list()
-
- /**
- * How much efficient (or inefficient) the protolathe is at manufacturing things
- */
- var/mat_efficiency = 1
-
- /**
- * The production speed of this specific protolathe, a factor
- */
- var/production_speed = 1
-
- ///The timer id for the build callback, if we're building something
- var/build_callback_timer
-
+ build_type = PROTOLATHE
+ uses_reagents = TRUE
+ fabrication_loop_type = /datum/looping_sound/synth_fab
component_types = list(
/obj/item/circuitboard/protolathe,
- /obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/reagent_containers/glass/beaker = 2
)
-/obj/structure/machinery/r_n_d/protolathe/upgrade_hints(mob/user, distance, is_adjacent)
+/obj/structure/machinery/r_n_d/fabricator/protolathe/upgrade_hints(mob/user, distance, is_adjacent)
. += ..()
- . += "- Upgraded matter bins will increase material storage capacity."
- . += SPAN_NOTICE(" - The current storage capacity is [max_material_storage / 2000] sheets")
+ . += "- Materials are drawn from the research material silo linked to the same R&D console."
. += "- Upgraded manipulators will improve material use efficiency and increase fabrication speed."
. += SPAN_NOTICE(" - The current speed increase is [round((1 - (1 / production_speed)) * 100)]%")
. += SPAN_NOTICE(" - The current cost reduction is [round((1 - mat_efficiency) * 100)]%")
-///Returns the total of all the stored materials
-/obj/structure/machinery/r_n_d/protolathe/proc/TotalMaterials()
- SSmaterials.normalize_material_amounts(materials)
- var/t = 0
- for(var/f in materials)
- t += materials[f]
- return t
-
-/obj/structure/machinery/r_n_d/protolathe/RefreshParts()
+/obj/structure/machinery/r_n_d/fabricator/protolathe/RefreshParts()
..()
- // Adjust reagent container volume to match combined volume of the inserted beakers
- var/T = 0
- for(var/obj/item/reagent_containers/glass/G in component_parts)
- T += G.reagents.maximum_volume
- create_reagents(T)
- // Transfer all reagents from the beakers to internal reagent container
- for(var/obj/item/reagent_containers/glass/G in component_parts)
- G.reagents.trans_to_obj(src, G.reagents.total_volume)
+ var/total_volume = 0
+ for(var/obj/item/reagent_containers/glass/beaker in component_parts)
+ total_volume += beaker.reagents.maximum_volume
+ create_reagents(total_volume)
+ for(var/obj/item/reagent_containers/glass/beaker in component_parts)
+ beaker.reagents.trans_to_obj(src, beaker.reagents.total_volume)
- // Adjust material storage capacity to scale with matter bin rating
- max_material_storage = 0
- for(var/obj/item/stock_parts/matter_bin/M in component_parts)
- max_material_storage += M.rating * 75000
-
- // Adjust production speed to increase with manipulator rating
- T = 0
- for(var/obj/item/stock_parts/manipulator/M in component_parts)
- T += M.rating
- mat_efficiency = 1 - (T - 2) / 8
- production_speed = T / 2
+ var/manipulator_rating = 0
+ for(var/obj/item/stock_parts/manipulator/manipulator in component_parts)
+ manipulator_rating += manipulator.rating
+ mat_efficiency = 1 - (manipulator_rating - 2) / 8
+ production_speed = manipulator_rating / 2
update_icon()
-/obj/structure/machinery/r_n_d/protolathe/dismantle()
- for(var/obj/I in component_parts)
- if(istype(I, /obj/item/reagent_containers/glass/beaker))
- reagents.trans_to_obj(I, reagents.total_volume)
- SSmaterials.normalize_material_amounts(materials)
- for(var/f in materials)
- if(materials[f] >= SHEET_MATERIAL_AMOUNT)
- var/path = getMaterialType(f)
- if(path)
- var/obj/item/stack/S = new path(loc)
- S.amount = round(materials[f] / SHEET_MATERIAL_AMOUNT)
+/obj/structure/machinery/r_n_d/fabricator/protolathe/dismantle()
+ for(var/obj/item/reagent_containers/glass/beaker in component_parts)
+ reagents.trans_to_obj(beaker, reagents.total_volume)
..()
-/obj/structure/machinery/r_n_d/protolathe/power_change()
+/obj/structure/machinery/r_n_d/fabricator/protolathe/power_change()
. = ..()
update_icon()
-/obj/structure/machinery/r_n_d/protolathe/update_icon()
+/obj/structure/machinery/r_n_d/fabricator/protolathe/update_icon()
ClearOverlays()
if(panel_open)
AddOverlays("[icon_state]_panel")
- if(!(stat & (NOPOWER|BROKEN)))
+ if(!(stat & (NOPOWER | BROKEN)))
AddOverlays(emissive_appearance(icon, "[icon_state]_lights"))
AddOverlays("[icon_state]_lights")
if(build_callback_timer)
@@ -104,214 +58,6 @@
AddOverlays(emissive_appearance(icon, "[icon_state]_lights_working"))
AddOverlays("[icon_state]_lights_working")
-/obj/structure/machinery/r_n_d/protolathe/attackby(obj/item/attacking_item, mob/user)
- if(user.a_intent == I_HURT)
- return ..()
-
- if(build_callback_timer)
- to_chat(user, SPAN_NOTICE("\The [src] is busy. Please wait for completion of previous operation."))
- return TRUE
- if(default_deconstruction_screwdriver(user, attacking_item))
- if(linked_console)
- linked_console.linked_lathe = null
- linked_console = null
- return TRUE
- if(default_deconstruction_crowbar(user, attacking_item))
- return TRUE
- if(default_part_replacement(user, attacking_item))
- return TRUE
- if(attacking_item.is_open_container())
- return TRUE
- if(panel_open)
- to_chat(user, SPAN_NOTICE("You can't load \the [src] while it's opened."))
- return TRUE
- if(!linked_console)
- to_chat(user, SPAN_NOTICE("The [src] must be linked to an R&D console first!"))
- return TRUE
- if(!istype(attacking_item, /obj/item/stack/material))
- to_chat(user, SPAN_NOTICE("You cannot insert this item into \the [src]!"))
- return TRUE
- if(stat)
- return TRUE
-
- if(TotalMaterials() + SHEET_MATERIAL_AMOUNT > max_material_storage)
- to_chat(user, SPAN_NOTICE("The [src]'s material bin is full. Please remove material before adding more."))
- return TRUE
-
- var/obj/item/stack/material/stack = attacking_item
- if(!stack.default_type)
- to_chat(user, SPAN_WARNING("This stack cannot be used!"))
- return
-
- var/max_value = min(stack.get_amount(), round((max_material_storage - TotalMaterials()) / SHEET_MATERIAL_AMOUNT))
- var/amount = tgui_input_number(user, "How many sheets do you want to add?", "Add sheets", min(10, max_value), max_value = max_value, min_value = 1, round_value = TRUE)
-
- if(!attacking_item)
- return
- if(!Adjacent(user))
- to_chat(user, SPAN_NOTICE("The [src] is too far away for you to insert this."))
- return
- if(amount <= 0)//No negative numbers, no nulls
- return
-
- var/mutable_appearance/M = mutable_appearance(icon, "material_insertion")
- M.color = stack.material.icon_colour
- //first play the insertion animation
- flick_overlay_view(M, 1 SECONDS)
-
- //now play the progress bar animation
- flick_overlay_view(mutable_appearance(icon, "protolathe_progress"), 1 SECONDS)
-
- //Use some power and add the materials
- use_power_oneoff(max(1000, (SHEET_MATERIAL_AMOUNT * amount / 10)))
- if(do_after(user, 1.6 SECONDS))
- if(stack.use(amount))
- if(amount>1)
- to_chat(user, SPAN_NOTICE("You add [amount] [stack.material.sheet_plural_name] of [stack.material.name] to \the [src]."))
- else
- to_chat(user, SPAN_NOTICE("You add [amount] [stack.material.sheet_singular_name] of [stack.material.name] to \the [src]."))
- SSmaterials.add_material_amount(materials, stack.default_type, amount * SHEET_MATERIAL_AMOUNT)
-
- //In case there's things queued up, we run the queue handler
- handle_queue()
-
- //Give an update on the UIs
- updateUsrDialog()
- if(linked_console)
- linked_console.updateUsrDialog()
-
-/**
- * Adds a design to the queue
- *
- * * design_to_add: The design to add
- */
-/obj/structure/machinery/r_n_d/protolathe/proc/addToQueue(datum/design/design_to_add)
- queue += design_to_add
-
- //Wake up, we have things to do
- handle_queue()
-
-/**
- * Removes a design from the queue
- *
- * * index: The index of the design to remove
- */
-/obj/structure/machinery/r_n_d/protolathe/proc/removeFromQueue(index)
- queue.Cut(index, index + 1)
-
- //Wake up, we have things to do
- handle_queue()
-
-/**
- * Handle the construction queue
- */
-/obj/structure/machinery/r_n_d/protolathe/proc/handle_queue()
-
- //No work to do or already busy, stop
- if(!length(queue) || build_callback_timer)
- update_icon()
- return
-
- //If there's no power, there's no building
- if(stat & NOPOWER)
- queue = list()
- update_icon()
- return
-
- //Get the first design in the queue
- var/datum/design/D = queue[1]
-
- //If we can build it, process the request
- if(canBuild(D))
- build_callback_timer = addtimer(CALLBACK(src, PROC_REF(build), D), (D.time / production_speed), TIMER_UNIQUE)
- removeFromQueue(1)
-
- else
- visible_message(SPAN_NOTICE("[icon2html(src, viewers(get_turf(src)))] \The [src] flashes: Insufficient materials: [getLackingMaterials(D)]."))
- if(linked_console)
- linked_console.updateUsrDialog()
-
- update_icon()
-
-
-/**
- * Checks if the protolathe can build the given design
- *
- * * design_to_check: The design to check
- *
- * Returns `TRUE` if the design can be built, `FALSE` otherwise
- */
-/obj/structure/machinery/r_n_d/protolathe/proc/canBuild(datum/design/design_to_check)
- SSmaterials.normalize_material_amounts(materials)
- for(var/M in design_to_check.materials)
- var/material = SSmaterials.material_to_path(M, FALSE)
- if(!material)
- material = M
- if((materials[material] || 0) < design_to_check.materials[M])
- return FALSE
-
- for(var/C in design_to_check.chemicals)
- if(!reagents.has_reagent(C, design_to_check.chemicals[C]))
- return FALSE
-
- return TRUE
-
-/**
- * Get what materials (chemicals included) are lacking from being able to build the given design
- *
- * * design_to_check: The design to check
- *
- * Returns a string of the materials that are missing
- */
-/obj/structure/machinery/r_n_d/protolathe/proc/getLackingMaterials(var/datum/design/design_to_check)
- SSmaterials.normalize_material_amounts(materials)
- var/ret = ""
- for(var/M in design_to_check.materials)
- var/amount = SSmaterials.get_material_amount(materials, M)
- if(amount < design_to_check.materials[M])
- if(ret != "")
- ret += ", "
- ret += "[design_to_check.materials[M] - amount] [SSmaterials.material_display_name(M)]"
- for(var/C in design_to_check.chemicals)
- if(!reagents.has_reagent(C, design_to_check.chemicals[C]))
- var/singleton/reagent/R = GET_SINGLETON(C)
- if(ret != "")
- ret += ", "
- ret += "[R.name]"
- return ret
-
-/**
- * Builds the given design, assuming all the necessary conditions are met
- *
- * * design_to_build: The design to build
- */
-/obj/structure/machinery/r_n_d/protolathe/proc/build(datum/design/design_to_build)
- //Consume some power
- var/power = active_power_usage
- for(var/M in design_to_build.materials)
- power += round(design_to_build.materials[M] / 2)
- power = max(active_power_usage, power)
- use_power_oneoff(power)
-
- //Consume the materials
- SSmaterials.normalize_material_amounts(materials)
- for(var/M in design_to_build.materials)
- SSmaterials.remove_material_amount(materials, M, design_to_build.materials[M] * mat_efficiency)
- for(var/C in design_to_build.chemicals)
- reagents.remove_reagent(C, design_to_build.chemicals[C] * mat_efficiency)
-
- intent_message(MACHINE_SOUND)
-
- if(design_to_build.build_path)
- var/obj/new_item = design_to_build.Fabricate(src, src)
- new_item.forceMove(loc)
- if(mat_efficiency != 1) // No matter out of nowhere
- if(new_item.matter && new_item.matter.len > 0)
- for(var/i in new_item.matter)
- new_item.matter[i] = new_item.matter[i] * mat_efficiency
-
- //We finished building, clear the timer
- build_callback_timer = null
-
- //Do the queue handling for the next item, or to stop
- handle_queue()
+/obj/structure/machinery/r_n_d/fabricator/protolathe/is_open_container()
+ . = ..()
+ linked_console?.dispatch_fabrication_jobs()
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 0c856b91c76..a77809fd944 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -35,29 +35,82 @@ won't update every console in existence) but it's more of a hassle to do. Also,
icon_keyboard_emis = "purple_key_mask"
light_color = LIGHT_COLOR_PURPLE
- circuit = /obj/item/circuitboard/rdconsole
- var/datum/research/files //Stores all the collected research data.
- var/obj/item/disk/tech_disk/t_disk = null //Stores the technology disk.
- var/obj/item/disk/design_disk/d_disk = null //Stores the design disk.
+ manufacturer = "nanotrasen"
- var/obj/structure/machinery/r_n_d/destructive_analyzer/linked_destroy = null //Linked Destructive Analyzer
- var/obj/structure/machinery/r_n_d/protolathe/linked_lathe = null //Linked Protolathe
- var/obj/structure/machinery/r_n_d/circuit_imprinter/linked_imprinter = null //Linked Circuit Imprinter
+ circuit = /obj/item/circuitboard/rdconsole
+ //Stores all the collected research data.
+ var/datum/research/files
+ //Stores the technology disk.
+ var/obj/item/disk/tech_disk/t_disk = null
+ //Stores the design disk.
+ var/obj/item/disk/design_disk/d_disk = null
+
+ /// All fabrication machinery connected to this console.
+ var/list/obj/structure/machinery/r_n_d/fabricator/linked_fabricators = list()
+
+ /// Console-owned production queues.
+ var/list/datum/research_fabrication_job/protolathe_queue = list()
+ var/list/datum/research_fabrication_job/imprinter_queue = list()
+ var/list/datum/research_fabrication_job/mechfab_queue = list()
+
+ //Linked Destructive Analyzer
+ var/obj/structure/machinery/r_n_d/destructive_analyzer/linked_destroy = null
+ //Shared material storage
+ var/obj/structure/machinery/r_n_d/material_silo/linked_silo = null
+
+ var/selected_mech_manufacturer
+
+ var/device_sync_range = 7
var/allow_analyzer = TRUE
var/allow_lathe = TRUE
var/allow_imprinter = TRUE
+ var/allow_mechfab = TRUE
+ var/allow_silo = TRUE
- var/screen = 1.0 //Which screen is currently showing.
- var/id = 0 //ID of the computer (for server restrictions).
- var/sync = 1 //If sync = 0, it doesn't show up on Server Control Console
+ //Which screen is currently showing.
+ var/screen = 1.0
+ //ID of the computer (for server restrictions).
+ var/id = 0
+ //If sync = 0, it doesn't show up on Server Control Console
+ var/sync = 1
+ /// Number of copies to queue when adding a design.
+ var/queue_amount = 1
+ /// Message displayed while a delayed console action is processing.
+ var/busy_message = "Processing request. Please wait."
var/protolathe_category = "All"
var/imprinter_category = "All"
var/ref_for_ui
- req_access = list(ACCESS_TOX) //Data and setting manipulation requires scientist access.
+ //Data and setting manipulation requires scientist access.
+ req_access = list(ACCESS_TOX)
+
+/datum/research_fabrication_job
+ /// Design being produced.
+ var/datum/design/design
+
+ /// Machine currently producing this job.
+ var/obj/structure/machinery/assigned_machine
+
+ /// Manufacturer selected for mech-fabricator products.
+ var/manufacturer
+
+ /// Materials removed from the silo and reserved for this job.
+ var/list/reserved_materials = list()
+
+/datum/research_fabrication_job/New(datum/design/new_design, new_manufacturer)
+ . = ..()
+
+ design = new_design
+ manufacturer = new_manufacturer
+
+/datum/research_fabrication_job/Destroy()
+ design = null
+ assigned_machine = null
+ reserved_materials = null
+ return ..()
/obj/structure/machinery/computer/rdconsole/proc/CallMaterialName(var/ID)
return SSmaterials.material_display_name(ID)
@@ -66,24 +119,77 @@ won't update every console in existence) but it's more of a hassle to do. Also,
var/singleton/reagent/R = GET_SINGLETON(ID)
return R ? R.name : "(none)"
-/obj/structure/machinery/computer/rdconsole/proc/SyncRDevices() //Makes sure it is properly sync'ed up with the devices attached to it (if any).
- for(var/obj/structure/machinery/r_n_d/D in range(3, src))
- if(D.linked_console != null || D.panel_open)
+/obj/structure/machinery/computer/rdconsole/proc/SyncRDevices()
+ linked_fabricators ||= list()
+
+ for(var/obj/structure/machinery/r_n_d/device in range(device_sync_range, src))
+ if(device.panel_open)
continue
- if(istype(D, /obj/structure/machinery/r_n_d/destructive_analyzer) && allow_analyzer)
- if(linked_destroy == null)
- linked_destroy = D
- D.linked_console = src
- else if(istype(D, /obj/structure/machinery/r_n_d/protolathe) && allow_lathe)
- if(linked_lathe == null)
- linked_lathe = D
- D.linked_console = src
- else if(istype(D, /obj/structure/machinery/r_n_d/circuit_imprinter) && allow_imprinter)
- if(linked_imprinter == null)
- linked_imprinter = D
- D.linked_console = src
+
+ if(istype(device, /obj/structure/machinery/r_n_d/destructive_analyzer) && allow_analyzer)
+ if(!linked_destroy && !device.linked_console)
+ linked_destroy = device
+ device.linked_console = src
+ else if(istype(device, /obj/structure/machinery/r_n_d/material_silo) && allow_silo)
+ if(!linked_silo && !device.linked_console)
+ linked_silo = device
+ device.linked_console = src
+ else if(istype(device, /obj/structure/machinery/r_n_d/fabricator))
+ var/obj/structure/machinery/r_n_d/fabricator/fabricator = device
+ if(!fabricator_type_allowed(fabricator))
+ continue
+ if(fabricator.linked_console && fabricator.linked_console != src)
+ continue
+ fabricator.linked_console = src
+ linked_fabricators |= fabricator
+
+ cleanup_fabricators()
+ dispatch_fabrication_jobs()
return
+/obj/structure/machinery/computer/rdconsole/proc/fabricator_type_allowed(obj/structure/machinery/r_n_d/fabricator/fabricator)
+ if(fabricator.build_type & PROTOLATHE)
+ return allow_lathe
+ if(fabricator.build_type & IMPRINTER)
+ return allow_imprinter
+ if(fabricator.build_type & MECHFAB)
+ return allow_mechfab
+ return FALSE
+
+/obj/structure/machinery/computer/rdconsole/proc/cleanup_fabricators()
+ for(var/obj/structure/machinery/r_n_d/fabricator/fabricator as anything in linked_fabricators.Copy())
+ if(QDELETED(fabricator) || fabricator.linked_console != src)
+ linked_fabricators -= fabricator
+
+/obj/structure/machinery/computer/rdconsole/proc/remove_fabricator(obj/structure/machinery/r_n_d/fabricator/fabricator)
+ if(!fabricator)
+ return
+ linked_fabricators -= fabricator
+ if(fabricator.assigned_job)
+ fabricator.assigned_job.assigned_machine = null
+ fabricator.assigned_job = null
+ fabricator.current_design = null
+ SStgui.update_uis(src)
+ dispatch_fabrication_jobs()
+
+/obj/structure/machinery/computer/rdconsole/proc/get_fabricators(build_flag)
+ var/list/result = list()
+ for(var/obj/structure/machinery/r_n_d/fabricator/fabricator as anything in linked_fabricators)
+ if(fabricator.build_type & build_flag)
+ result += fabricator
+ return result
+
+/obj/structure/machinery/computer/rdconsole/proc/get_primary_fabricator(build_flag)
+ for(var/obj/structure/machinery/r_n_d/fabricator/fabricator as anything in linked_fabricators)
+ if(fabricator.build_type & build_flag)
+ return fabricator
+ return null
+
+/obj/structure/machinery/computer/rdconsole/proc/disconnect_fabricators(build_flag)
+ for(var/obj/structure/machinery/r_n_d/fabricator/fabricator as anything in linked_fabricators.Copy())
+ if(fabricator.build_type & build_flag)
+ fabricator.disconnect_console()
+
/obj/structure/machinery/computer/rdconsole/proc/SyncTechs()
var/turf/turf = get_turf(src)
for(var/obj/structure/machinery/r_n_d/server/S in SSmachinery.machinery)
@@ -103,16 +209,91 @@ won't update every console in existence) but it's more of a hassle to do. Also,
screen = 1.6
updateUsrDialog()
-/obj/structure/machinery/computer/rdconsole/proc/griefProtection() //Have it automatically push research to the centcomm server so wild griffins can't fuck up R&D's work
+//Have it automatically push research to the centcomm server so wild griffins can't fuck up R&D's work
+/obj/structure/machinery/computer/rdconsole/proc/griefProtection()
for(var/obj/structure/machinery/r_n_d/server/centcom/C in SSmachinery.machinery)
for(var/tech_id in files.known_tech)
var/datum/tech/T = files.known_tech[tech_id]
C.files.AddTech2Known(files.known_tech[T])
C.files.RefreshResearch()
+/obj/structure/machinery/computer/rdconsole/proc/dispatch_fabrication_jobs()
+ cleanup_fabricators()
+ dispatch_queue_to_machines(protolathe_queue, PROTOLATHE)
+ dispatch_queue_to_machines(imprinter_queue, IMPRINTER)
+ dispatch_queue_to_machines(mechfab_queue, MECHFAB)
+ SStgui.update_uis(src)
+
+/obj/structure/machinery/computer/rdconsole/proc/dispatch_queue_to_machines(list/job_queue, build_flag)
+ if(!length(job_queue))
+ return
+
+ for(var/datum/research_fabrication_job/job as anything in job_queue)
+ if(job.assigned_machine)
+ continue
+ for(var/obj/structure/machinery/r_n_d/fabricator/fabricator as anything in linked_fabricators)
+ if(!(fabricator.build_type & build_flag) || !fabricator.is_available())
+ continue
+ if(!fabricator.can_produce_job(job))
+ continue
+ if(fabricator.begin_console_job(job))
+ break
+
+/obj/structure/machinery/computer/rdconsole/proc/get_job_queue(build_flag)
+ if(build_flag & PROTOLATHE)
+ return protolathe_queue
+ if(build_flag & IMPRINTER)
+ return imprinter_queue
+ if(build_flag & MECHFAB)
+ return mechfab_queue
+ return null
+
+/obj/structure/machinery/computer/rdconsole/proc/refund_job_materials(datum/research_fabrication_job/job)
+ if(!job || !length(job.reserved_materials) || !linked_silo)
+ return
+
+ for(var/material_id in job.reserved_materials)
+ SSmaterials.add_material_amount(linked_silo.materials, material_id, job.reserved_materials[material_id])
+
+ job.reserved_materials.Cut()
+ linked_silo.update_linked_uis()
+
+/obj/structure/machinery/computer/rdconsole/proc/refund_all_queued_materials()
+ for(var/datum/research_fabrication_job/job as anything in protolathe_queue)
+ refund_job_materials(job)
+ for(var/datum/research_fabrication_job/job as anything in imprinter_queue)
+ refund_job_materials(job)
+ for(var/datum/research_fabrication_job/job as anything in mechfab_queue)
+ refund_job_materials(job)
+
+/obj/structure/machinery/computer/rdconsole/proc/remove_fabrication_job(list/job_queue, index)
+ if(index < 1 || index > length(job_queue))
+ return FALSE
+ var/datum/research_fabrication_job/job = job_queue[index]
+ if(job.assigned_machine)
+ return FALSE
+ refund_job_materials(job)
+ job_queue.Cut(index, index + 1)
+ qdel(job)
+ dispatch_fabrication_jobs()
+ return TRUE
+
+/obj/structure/machinery/computer/rdconsole/proc/finish_fabrication_job(datum/research_fabrication_job/job)
+ if(!job)
+ return
+ if(job in protolathe_queue)
+ protolathe_queue -= job
+ else if(job in imprinter_queue)
+ imprinter_queue -= job
+ else if(job in mechfab_queue)
+ mechfab_queue -= job
+ qdel(job)
+ SStgui.update_uis(src)
+
/obj/structure/machinery/computer/rdconsole/Initialize()
..()
files = new /datum/research(src) //Setup the research data holder.
+ selected_mech_manufacturer = GLOB.basic_robolimb.company
if(!id)
for(var/obj/structure/machinery/r_n_d/server/centcom/S in SSmachinery.machinery)
S.setup()
@@ -127,12 +308,14 @@ won't update every console in existence) but it's more of a hassle to do. Also,
screen = 1.0
/obj/structure/machinery/computer/rdconsole/Destroy()
- if(linked_destroy != null)
+ refund_all_queued_materials()
+ if(linked_destroy)
linked_destroy.linked_console = null
- if(linked_lathe != null)
- linked_lathe.linked_console = null
- if(linked_imprinter != null)
- linked_imprinter.linked_console = null
+ if(linked_silo)
+ linked_silo.linked_console = null
+ for(var/obj/structure/machinery/r_n_d/fabricator/fabricator as anything in linked_fabricators.Copy())
+ fabricator.linked_console = null
+ linked_fabricators.Cut()
return ..()
/obj/structure/machinery/computer/rdconsole/attackby(obj/item/attacking_item, mob/user)
@@ -155,7 +338,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
//The construction/deconstruction of the console code.
..()
- src.updateUsrDialog()
+ SStgui.update_uis(src)
return
/obj/structure/machinery/computer/rdconsole/emag_act(remaining_charges, mob/user, emag_source)
@@ -167,285 +350,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
to_chat(usr, SPAN_NOTICE("You disable the security protocols."))
return 1
-/obj/structure/machinery/computer/rdconsole/Topic(href, href_list)
- if(..())
- return 1
-
- add_fingerprint(usr)
-
- usr.set_machine(src)
- if(href_list["menu"]) //Switches menu screens. Converts a sent text string into a number. Saves a LOT of code.
- var/temp_screen = text2num(href_list["menu"])
- if(temp_screen <= 1.1 || (3 <= temp_screen && 4.9 >= temp_screen) || allowed(usr) || emagged) //Unless you are making something, you need access.
- screen = temp_screen
- else
- to_chat(usr, "Unauthorized Access.")
-
- else if(href_list["updt_tech"]) //Update the research holder with information from the technology disk.
- screen = 0.0
- spawn(50)
- screen = 1.2
- files.AddTech2Known(t_disk.stored)
- updateUsrDialog()
- griefProtection() //Update centcomm too
-
- else if(href_list["clear_tech"]) //Erase data on the technology disk.
- t_disk.stored = null
-
- else if(href_list["eject_tech"]) //Eject the technology disk.
- t_disk.forceMove(loc)
- usr.put_in_hands(t_disk)
- t_disk = null
- screen = 1.0
-
- else if(href_list["copy_tech"]) //Copys some technology data from the research holder to the disk.
- var/datum/tech/T = files.known_tech[href_list["copy_tech_sent"]]
- t_disk.stored = T
- screen = 1.2
-
- else if(href_list["updt_design"]) //Updates the research holder with design data from the design disk.
- screen = 0.0
- spawn(50)
- screen = 1.4
- files.AddDesign2Known(d_disk.blueprint)
- updateUsrDialog()
- griefProtection() //Update centcomm too
-
- else if(href_list["clear_design"]) //Erases data on the design disk.
- d_disk.blueprint = null
-
- else if(href_list["eject_design"]) //Eject the design disk.
- d_disk.forceMove(loc)
- usr.put_in_hands(d_disk)
- d_disk = null
- screen = 1.0
-
- else if(href_list["copy_design"]) //Copy design data from the research holder to the design disk.
- var/path = text2path(href_list["copy_design_sent"])
- var/datum/design/D = files.known_designs[path]
- d_disk.blueprint = D
- screen = 1.4
-
- else if(href_list["eject_item"]) //Eject the item inside the destructive analyzer.
- if(linked_destroy)
- if(linked_destroy.busy)
- to_chat(usr, SPAN_NOTICE("The destructive analyzer is busy at the moment."))
-
- else if(linked_destroy.loaded_item)
- linked_destroy.loaded_item.forceMove(linked_destroy.loc)
- if(linked_destroy.Adjacent(usr))
- usr.put_in_hands(linked_destroy.loaded_item)
- linked_destroy.loaded_item = null
- linked_destroy.icon_state = "d_analyzer"
- screen = 2.1
-
- else if(href_list["deconstruct"]) //Deconstruct the item in the destructive analyzer and update the research holder.
- if(linked_destroy)
- if(linked_destroy.busy)
- to_chat(usr, SPAN_NOTICE("The destructive analyzer is busy at the moment."))
- else
- if(alert("Proceeding will destroy loaded item. Continue?", "Destructive analyzer confirmation", "Yes", "No") == "No" || !linked_destroy)
- return
- linked_destroy.busy = 1
- screen = 0.1
- updateUsrDialog()
- flick("d_analyzer_process", linked_destroy)
- spawn(24)
- if(linked_destroy)
- linked_destroy.busy = 0
- if(!linked_destroy.loaded_item)
- to_chat(usr, SPAN_NOTICE("The destructive analyzer appears to be empty."))
- screen = 1.0
- return
-
- for(var/T in linked_destroy.loaded_item.origin_tech)
- files.UpdateTech(T, linked_destroy.loaded_item.origin_tech[T])
- if(linked_lathe && linked_destroy.loaded_item.matter) // Also sends salvaged materials to a linked protolathe, if any.
- SSmaterials.normalize_material_amounts(linked_lathe.materials)
- for(var/t in linked_destroy.loaded_item.matter)
- var/material = SSmaterials.material_to_path(t, FALSE)
- if(material)
- var/salvage_amount = min(linked_lathe.max_material_storage - linked_lathe.TotalMaterials(), linked_destroy.loaded_item.matter[t] * linked_destroy.decon_mod)
- if(salvage_amount > 0)
- SSmaterials.add_material_amount(linked_lathe.materials, material, salvage_amount)
-
- linked_destroy.loaded_item = null
- for(var/obj/I in linked_destroy.contents)
- for(var/mob/M in I.contents)
- M.death()
- qdel(M)
- if(istype(I,/obj/item/stack/material))//Only deconsturcts one sheet at a time instead of the entire stack
- var/obj/item/stack/material/S = I
- if(S.get_amount() > 1)
- S.use(1)
- linked_destroy.loaded_item = S
- else
- qdel(S)
- linked_destroy.icon_state = "d_analyzer"
- else
- if(!(I in linked_destroy.component_parts))
- qdel(I)
- linked_destroy.icon_state = "d_analyzer"
-
- use_power_oneoff(linked_destroy.active_power_usage)
- screen = 1.0
- updateUsrDialog()
-
- else if(href_list["lock"]) //Lock the console from use by anyone without tox access.
- if(allowed(usr))
- screen = text2num(href_list["lock"])
- else
- to_chat(usr, "Unauthorized Access.")
-
- else if(href_list["sync"]) //Sync the research holder with all the R&D consoles in the game that aren't sync protected.
- screen = 0.0
- if(!sync)
- to_chat(usr, SPAN_NOTICE("You must connect to the network first."))
- else
- griefProtection() //Putting this here because I dont trust the sync process
- addtimer(CALLBACK(src, PROC_REF(SyncTechs)), 30)
-
- else if(href_list["togglesync"]) //Prevents the console from being synced by other consoles. Can still send data.
- sync = !sync
-
- else if(href_list["protolathe_category"])
- var/choice = tgui_input_list(usr, "Which category do you wish to display?", "Protolathe Categories", GLOB.designs_protolathe_categories+"All")
- if(!choice)
- return
- protolathe_category = choice
- updateUsrDialog()
-
- else if(href_list["imprinter_category"])
- var/choice = tgui_input_list(usr, "Which category do you wish to display?", "Printer Categories", GLOB.designs_imprinter_categories+"All")
- if(!choice)
- return
- imprinter_category = choice
- updateUsrDialog()
-
- else if(href_list["build"]) //Causes the Protolathe to build something.
- if(linked_lathe)
- var/path = text2path(href_list["build"])
- var/datum/design/D = files.known_designs[path]
- linked_lathe.addToQueue(D)
- screen = 3.1
- updateUsrDialog()
-
- else if(href_list["imprint"]) //Causes the Circuit Imprinter to build something.
- if(linked_imprinter)
- var/path = text2path(href_list["imprint"])
- var/datum/design/D = files.known_designs[path]
- linked_imprinter.addToQueue(D)
- screen = 4.1
- updateUsrDialog()
-
- else if(href_list["disposeI"]) //Causes the circuit imprinter to dispose of a single reagent (all of it)
- linked_imprinter?.reagents.del_reagent(href_list["disposeI"])
-
- else if(href_list["disposeallI"]) //Causes the circuit imprinter to dispose of all it's reagents.
- linked_imprinter?.reagents.clear_reagents()
-
- else if(href_list["removeI"])
- linked_imprinter?.removeFromQueue(text2num(href_list["removeI"]))
-
- else if(href_list["disposeP"]) //Causes the protolathe to dispose of a single reagent (all of it)
- linked_lathe?.reagents.del_reagent(href_list["dispose"])
-
- else if(href_list["disposeallP"]) //Causes the protolathe to dispose of all it's reagents.
- linked_lathe?.reagents.clear_reagents()
-
- else if(href_list["removeP"])
- linked_lathe?.removeFromQueue(text2num(href_list["removeP"]))
-
- else if(href_list["lathe_ejectsheet"] && linked_lathe) //Causes the protolathe to eject a sheet of material
- SSmaterials.normalize_material_amounts(linked_lathe.materials)
- var/material = SSmaterials.material_to_path(href_list["lathe_ejectsheet"], FALSE)
- if(!material)
- return
-
- var/num_sheets = min(text2num(href_list["amount"]), round((linked_lathe.materials[material] || 0) / SHEET_MATERIAL_AMOUNT))
-
- if(num_sheets < 1)
- return
-
- var/mattype = linked_lathe.getMaterialType(material)
- if(!mattype)
- return
-
- var/obj/item/stack/material/M = new mattype(linked_lathe.loc)
- M.amount = num_sheets
- SSmaterials.remove_material_amount(linked_lathe.materials, material, num_sheets * SHEET_MATERIAL_AMOUNT)
-
- else if(href_list["imprinter_ejectsheet"] && linked_imprinter) //Causes the protolathe to eject a sheet of material
- SSmaterials.normalize_material_amounts(linked_imprinter.materials)
- var/material = SSmaterials.material_to_path(href_list["imprinter_ejectsheet"], FALSE)
- if(!material)
- return
-
- var/num_sheets = min(text2num(href_list["amount"]), round((linked_imprinter.materials[material] || 0) / SHEET_MATERIAL_AMOUNT))
-
- if(num_sheets < 1)
- return
-
- var/mattype = linked_imprinter.getMaterialType(material)
- if(!mattype)
- return
-
- var/obj/item/stack/material/M = new mattype(linked_imprinter.loc)
- M.amount = num_sheets
- SSmaterials.remove_material_amount(linked_imprinter.materials, material, num_sheets * SHEET_MATERIAL_AMOUNT)
-
- else if(href_list["find_device"]) //The R&D console looks for devices nearby to link up with.
- screen = 0.0
- spawn(10)
- SyncRDevices()
- screen = 1.7
- updateUsrDialog()
-
- else if(href_list["disconnect"]) //The R&D console disconnects with a specific device.
- switch(href_list["disconnect"])
- if("destroy")
- linked_destroy.linked_console = null
- linked_destroy = null
- if("lathe")
- linked_lathe.linked_console = null
- linked_lathe = null
- if("imprinter")
- linked_imprinter.linked_console = null
- linked_imprinter = null
-
- else if(href_list["reset"]) //Reset the R&D console's database.
- griefProtection()
- var/choice = alert("R&D Console Database Reset", "Are you sure you want to reset the R&D console's database? Data lost cannot be recovered.", "Continue", "Cancel")
- if(choice == "Continue")
- screen = 0.0
- qdel(files)
- files = new /datum/research(src)
- spawn(20)
- screen = 1.6
- updateUsrDialog()
-
- else if (href_list["print"]) //Print research information
- screen = 0.5
- spawn(20)
- var/obj/item/paper/PR = new/obj/item/paper
- var/pname = "list of researched technologies"
- var/info = "[station_name()] Science Laboratories"
- info += "[ (text2num(href_list["print"]) == 2) ? "Detailed" : null] Research Progress Report"
- info += "report prepared at [worldtime2text()] station time "
- if(text2num(href_list["print"]) == 2)
- info += GetResearchListInfo()
- else
- info += GetResearchLevelsInfo()
-
- PR.set_content_unsafe(pname, info)
- print(PR, user = usr)
- spawn(10)
- screen = ((text2num(href_list["print"]) == 2) ? 5.0 : 1.1)
- updateUsrDialog()
-
- updateUsrDialog()
- return
-
/obj/structure/machinery/computer/rdconsole/proc/GetResearchLevelsInfo()
var/dat
dat += ""
@@ -475,417 +379,601 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += " "
return dat
-/obj/structure/machinery/computer/rdconsole/attack_hand(mob/user as mob)
- if(stat & (BROKEN|NOPOWER))
+/obj/structure/machinery/computer/rdconsole/attack_hand(mob/user)
+ if(..())
return
+ ui_interact(user)
- user.set_machine(src)
- var/dat = ""
- files.RefreshResearch()
- switch(screen) //A quick check to make sure you get the right screen when a device is disconnected.
- if(2 to 2.9)
- if(linked_destroy == null)
- screen = 2.0
- else if(linked_destroy.loaded_item == null)
- screen = 2.1
- else
- screen = 2.2
- if(3 to 3.9)
- if(linked_lathe == null)
- screen = 3.0
- if(4 to 4.9)
- if(linked_imprinter == null)
- screen = 4.0
+/obj/structure/machinery/computer/rdconsole/ui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "ResearchConsole", "Research and Development Console", 1200, 800)
+ ui.open()
+/obj/structure/machinery/computer/rdconsole/proc/tgui_screen_name()
switch(screen)
-
- //////////////////////R&D CONSOLE SCREENS//////////////////
- if(0.0)
- dat += "Updating Database..."
-
- if(0.1)
- dat += "Processing and Updating Database..."
-
- if(0.2)
- dat += "SYSTEM LOCKED
"
- dat += "Unlock"
-
- if(0.3)
- dat += "Constructing Prototype. Please Wait..."
-
- if(0.4)
- dat += "Imprinting Circuit. Please Wait..."
-
- if(0.5)
- dat += "Printing Research Information. Please Wait..."
-
- if(1.0) //Main Menu
- dat += "Main Menu: "
-
- if(1.1) //Research viewer
- dat += "Main Menu || "
- dat += "Print This Page "
- dat += "Current Research Levels: "
- dat += GetResearchLevelsInfo()
- dat += ""
-
- if(1.2) //Technology Disk Menu
-
- dat += "Main Menu "
- dat += "Disk Contents: (Technology Data Disk)
"
- dat += ""
-
- if(1.3) //Technology Disk submenu
- dat += " Main Menu || "
- dat += "Return to Disk Operations "
- dat += ""
-
- if(1.4) //Design Disk menu.
- dat += "Main Menu "
- dat += ""
-
- if(1.5) //Technology disk submenu
- dat += "Main Menu || "
- dat += "Return to Disk Operations "
- dat += ""
-
- if(1.6) //R&D console settings
- dat += "Main Menu "
- dat += "R&D Console Setting: "
- dat += ""
-
- if(1.7) //R&D device linkage
- dat += "Main Menu || "
- dat += "Settings Menu "
- dat += "R&D Console Device Linkage Menu: "
- dat += ""
-
- ////////////////////DESTRUCTIVE ANALYZER SCREENS////////////////////////////
- if(2.0)
- dat += "Main Menu "
- dat += "NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE
"
-
- if(2.1)
- dat += "Main Menu "
- dat += "No Item Loaded. Standing-by...
"
-
- if(2.2)
- dat += "Main Menu "
- dat += "Deconstruction Menu "
- dat += "Name: [linked_destroy.loaded_item.name] "
- dat += "Origin Tech:"
- dat += ""
- for(var/tech_id in linked_destroy.loaded_item.origin_tech)
- var/datum/tech/T = files.known_tech[tech_id]
- dat += "- [T.name]: \[Level: [linked_destroy.loaded_item.origin_tech[tech_id]] || Progress Contribution: [files.get_level_value(linked_destroy.loaded_item.origin_tech[tech_id])]\]"
- dat += " (Current Level: [T.level] || Current Progress: [T.next_level_progress]/[T.next_level_threshold])"
- dat += "
"
- if(!istype(linked_destroy.loaded_item, /obj/item/stack))
- dat += " Deconstruct Item || "
- else
- dat += " Deconstruct One In Stack || "
- dat += "Eject Item"
-
- /////////////////////PROTOLATHE SCREENS/////////////////////////
- if(3.0)
- dat += "Main Menu "
- dat += "NO PROTOLATHE LINKED TO CONSOLE
"
-
- if(3.1)
- dat += "Main Menu || "
- dat += "View Queue || "
- dat += "Material Storage || "
- dat += "Chemical Storage "
- dat += "Protolathe Menu: "
- dat += "Material Amount: [linked_lathe.TotalMaterials()] cm3 (MAX: [linked_lathe.max_material_storage]) "
- dat += "Chemical Volume: [linked_lathe.reagents.total_volume] (MAX: [linked_lathe.reagents.maximum_volume]) "
- dat += "Category: [protolathe_category] "
- dat += ""
- dat += " "
- var/last_category = ""
- for(var/path in files.known_designs)
- var/datum/design/D = files.known_designs[path]
- if(!D.build_path || !(D.build_type & PROTOLATHE))
- continue
- if(protolathe_category != "All" && D.p_category != protolathe_category)
- continue
- if(protolathe_category == "All" && D.p_category != last_category)
- last_category = D.p_category
- dat += "[last_category]"
- var/temp_dat
- for(var/M in D.materials)
- temp_dat += ", [D.materials[M]*linked_lathe.mat_efficiency] [CallMaterialName(M)]"
- for(var/T in D.chemicals)
- temp_dat += ", [D.chemicals[T]*linked_lathe.mat_efficiency] [CallReagentName(T)]"
- if(temp_dat)
- temp_dat = " \[[copytext(temp_dat, 3)]\]"
- if(linked_lathe.canBuild(D))
- dat += "- [D.name]"
- else
- dat += "
[D.name] "
- dat += "[temp_dat] [D.desc]"
- dat += " "
- dat += " "
-
- if(3.2) //Protolathe Material Storage Sub-menu
- dat += "Main Menu || "
- dat += "Protolathe Menu "
- dat += "Material Storage
"
- dat += ""
- SSmaterials.normalize_material_amounts(linked_lathe.materials)
- for(var/M in linked_lathe.materials)
- var/amount = linked_lathe.materials[M]
- dat += "- [CallMaterialName(M)]: [amount] cm3"
- if(amount >= SHEET_MATERIAL_AMOUNT)
- dat += " || Eject "
- for (var/C in list(1, 3, 5, 10, 15, 20, 25, 30, 40))
- if(amount < C * SHEET_MATERIAL_AMOUNT)
- break
- dat += "[C > 1 ? ", " : ""][C] "
-
- dat += " or max sheets"
- dat += ""
- dat += "
"
-
- if(3.3) //Protolathe Chemical Storage Submenu
- dat += "Main Menu || "
- dat += "Protolathe Menu "
- dat += "Chemical Storage
"
- for(var/_R in linked_lathe.reagents.reagent_volumes)
- var/singleton/reagent/R = GET_SINGLETON(_R)
- dat += "Name: [R.name] | Units: [linked_lathe.reagents.reagent_volumes[_R]] "
- dat += "(Purge) "
- dat += "Disposal All Chemicals in Storage "
-
- if(3.4) // Protolathe queue
- dat += "Main Menu || "
- dat += "Protolathe Menu "
- dat += "Queue
"
- if(!linked_lathe.queue.len)
- dat += "Empty"
- else
- var/tmp = 1
- for(var/datum/design/D in linked_lathe.queue)
- if(tmp == 1)
- if(linked_lathe.busy)
- dat += "1: [D.name] "
- else
- dat += "1: [D.name] (Awaiting materials) Remove "
- else
- dat += "[tmp]: [D.name] Remove "
- ++tmp
-
- ///////////////////CIRCUIT IMPRINTER SCREENS////////////////////
- if(4.0)
- dat += "Main Menu "
- dat += "NO CIRCUIT IMPRINTER LINKED TO CONSOLE
"
-
- if(4.1)
- dat += "Main Menu || "
- dat += "View Queue || "
- dat += "Material Storage || "
- dat += "Chemical Storage "
- dat += "Circuit Imprinter Menu:
"
- dat += "Material Amount: [linked_imprinter.TotalMaterials()] cm3 "
- dat += "Chemical Volume: [linked_imprinter.reagents.total_volume] "
- dat += "Category: [imprinter_category] "
- dat += ""
- dat += " "
- var/last_category = ""
- for(var/path in files.known_designs)
- var/datum/design/D = files.known_designs[path]
- if(!D.build_path || !(D.build_type & IMPRINTER))
- continue
- if(imprinter_category != "All" && D.p_category != imprinter_category)
- continue
- if(imprinter_category == "All" && D.p_category != last_category)
- last_category = D.p_category
- dat += "[last_category]"
- var/temp_dat
- for(var/M in D.materials)
- temp_dat += ", [D.materials[M]*linked_imprinter.mat_efficiency] [CallMaterialName(M)]"
- for(var/T in D.chemicals)
- temp_dat += ", [D.chemicals[T]*linked_imprinter.mat_efficiency] [CallReagentName(T)]"
- if(temp_dat)
- temp_dat = " \[[copytext(temp_dat,3)]\]"
- if(linked_imprinter.canBuild(D))
- dat += "- [D.name]"
- else
- dat += "
[D.name] "
- dat += "[temp_dat] [D.desc]"
- dat += " "
- dat += " "
-
- if(4.2)
- dat += "Main Menu || "
- dat += "Imprinter Menu "
- dat += "Chemical Storage
"
- for(var/_R in linked_imprinter.reagents.reagent_volumes)
- var/singleton/reagent/R = GET_SINGLETON(_R)
- dat += "Name: [R.name] | Units: [linked_imprinter.reagents.reagent_volumes[_R]] "
- dat += "(Purge) "
- dat += "Disposal All Chemicals in Storage "
-
- if(4.3)
- dat += "Main Menu || "
- dat += "Circuit Imprinter Menu "
- dat += "Material Storage
"
- dat += ""
- SSmaterials.normalize_material_amounts(linked_imprinter.materials)
- for(var/M in linked_imprinter.materials)
- var/amount = linked_imprinter.materials[M]
- dat += "- [CallMaterialName(M)]: [amount] cm3"
- if(amount >= SHEET_MATERIAL_AMOUNT)
- dat += " || Eject: "
- for (var/C in list(1, 3, 5, 10, 15, 20, 25, 30, 40))
- if(amount < C * SHEET_MATERIAL_AMOUNT)
- break
- dat += "[C > 1 ? ", " : ""][C] "
-
- dat += " or max sheets"
- dat += ""
- dat += "
"
-
- if(4.4)
- dat += "Main Menu || "
- dat += "Circuit Imprinter Menu "
- dat += "Queue
"
- if(linked_imprinter.queue.len == 0)
- dat += "Empty"
- else
- var/tmp = 1
- for(var/datum/design/D in linked_imprinter.queue)
- if(tmp == 1)
- dat += "1: [D.name] "
- else
- dat += "[tmp]: [D.name] Remove "
- ++tmp
-
- ///////////////////Research Information Browser////////////////////
+ if(0.0 to 0.9)
+ return "busy"
+ if(1.1)
+ return "levels"
+ if(1.2)
+ return "tech_disk"
+ if(1.4)
+ return "design_disk"
+ if(1.6, 1.7)
+ return "settings"
+ if(2.0 to 2.9)
+ return "analyzer"
+ if(3.0 to 3.9)
+ return "protolathe"
+ if(4.0 to 4.9)
+ return "imprinter"
if(5.0)
- dat += "Main Menu || "
- dat += "Print This Page "
- dat += "List of Researched Technologies and Designs: "
- dat += GetResearchListInfo()
+ return "designs"
+ if(6.0 to 6.9)
+ return "mechfab"
+ return "main"
- var/datum/browser/rdconsole = new(user, "rdconsole", "Research and Development Console", 850, 600)
- rdconsole.add_stylesheet("rdconsole", 'html/browser/rdconsole.css')
- rdconsole.set_content(dat)
- rdconsole.open()
+/obj/structure/machinery/computer/rdconsole/proc/tgui_screen_number(screen_name)
+ switch(screen_name)
+ if("main")
+ return 1.0
+ if("levels")
+ return 1.1
+ if("tech_disk")
+ return 1.2
+ if("design_disk")
+ return 1.4
+ if("settings")
+ return 1.6
+ if("analyzer")
+ return linked_destroy?.loaded_item ? 2.2 : 2.1
+ if("protolathe")
+ return length(get_fabricators(PROTOLATHE)) ? 3.1 : 3.0
+ if("imprinter")
+ return length(get_fabricators(IMPRINTER)) ? 4.1 : 4.0
+ if("mechfab")
+ return length(get_fabricators(MECHFAB)) ? 6.1 : 6.0
+ if("designs")
+ return 5.0
+ return 1.0
+
+/obj/structure/machinery/computer/rdconsole/proc/can_open_tgui_screen(screen_name, mob/user)
+ if(screen_name in list("main", "levels", "designs", "protolathe", "imprinter", "mechfab"))
+ return TRUE
+ return allowed(user) || emagged
+
+/obj/structure/machinery/computer/rdconsole/proc/get_technology_tgui_data()
+ var/list/result = list()
+ for(var/tech_id in files.known_tech)
+ var/datum/tech/T = files.known_tech[tech_id]
+ if(T.level < 1)
+ continue
+ result += list(list(
+ "id" = tech_id,
+ "name" = T.name,
+ "description" = T.desc,
+ "level" = T.level,
+ "progress" = T.next_level_progress,
+ "threshold" = T.next_level_threshold,
+ "complete" = T.level >= 15
+ ))
+ return result
+
+/obj/structure/machinery/computer/rdconsole/proc/get_design_category(datum/design/D, build_flag = 0)
+ if((build_flag & MECHFAB) && D.category)
+ return D.category
+ if(D.p_category)
+ return D.p_category
+ if(D.category)
+ return D.category
+ return "Misc"
+
+/obj/structure/machinery/computer/rdconsole/proc/get_design_tgui_data()
+ var/list/result = list()
+ for(var/path in files.known_designs)
+ var/datum/design/D = files.known_designs[path]
+ if(!D.build_path)
+ continue
+ result += list(list(
+ "path" = "[D.type]",
+ "name" = D.name,
+ "description" = D.desc,
+ "category" = get_design_category(D)
+ ))
+ return result
+
+/obj/structure/machinery/computer/rdconsole/proc/get_analyzer_tgui_data()
+ var/list/result = list("linked" = !!linked_destroy)
+ if(!linked_destroy)
+ return result
+ result["busy"] = linked_destroy.busy
+ if(!linked_destroy.loaded_item)
+ return result
+ result["item"] = list(
+ "name" = linked_destroy.loaded_item.name,
+ "stack" = istype(linked_destroy.loaded_item, /obj/item/stack),
+ "technologies" = list()
+ )
+ var/list/techs = result["item"]["technologies"]
+ for(var/tech_id in linked_destroy.loaded_item.origin_tech)
+ var/datum/tech/T = files.known_tech[tech_id]
+ if(!T)
+ continue
+ techs += list(list(
+ "name" = T.name,
+ "item_level" = linked_destroy.loaded_item.origin_tech[tech_id],
+ "current_level" = T.level,
+ "progress" = T.next_level_progress,
+ "threshold" = T.next_level_threshold
+ ))
+ return result
+
+/obj/structure/machinery/computer/rdconsole/proc/get_stored_reagent_amount(datum/reagents/reagent_holder, reagent_id)
+ if(!reagent_holder || !reagent_id)
+ return 0
+
+ var/list/reagent_volumes = reagent_holder.reagent_volumes
+
+ if(!islist(reagent_volumes))
+ return 0
+
+ /*
+ * Use keys obtained directly from reagent_volumes. This avoids attempting
+ * to index the list with a design chemical identifier that may not be in
+ * precisely the same representation as the holder's key.
+ */
+ for(var/stored_reagent_id in reagent_volumes)
+ if(stored_reagent_id == reagent_id || "[stored_reagent_id]" == "[reagent_id]")
+ return reagent_volumes[stored_reagent_id] || 0
+
+ return 0
+
+/obj/structure/machinery/computer/rdconsole/proc/get_research_fabricator_data(build_flag)
+ var/list/fabricators = get_fabricators(build_flag)
+ if(!length(fabricators))
+ return null
+
+ var/obj/structure/machinery/r_n_d/fabricator/primary = fabricators[1]
+ var/list/job_queue = get_job_queue(build_flag)
+ var/list/stored_materials = linked_silo?.materials || list()
+ var/datum/reagents/reagent_holder = primary.uses_reagents ? primary.reagents : null
+ var/list/data = list(
+ "linked" = TRUE,
+ "materials" = list(),
+ "reagents" = list(),
+ "recipes" = list(),
+ "categories" = list("All"),
+ "queue" = list(),
+ "sheet_material_amount" = SHEET_MATERIAL_AMOUNT,
+ "maximum_material_storage" = linked_silo?.max_material_storage || 0,
+ "maximum_reagent_volume" = reagent_holder?.maximum_volume || 0,
+ "reagent_volume" = reagent_holder?.total_volume || 0,
+ "supports_manufacturers" = build_flag & MECHFAB,
+ "manufacturers" = list(),
+ "selected_manufacturer" = selected_mech_manufacturer,
+ "supports_reagents" = FALSE
+ )
+
+ SSmaterials.normalize_material_amounts(stored_materials)
+ for(var/material in stored_materials)
+ data["materials"] += list(list(
+ "id" = "[material]",
+ "name" = CallMaterialName(material),
+ "amount" = stored_materials[material],
+ "maximum" = linked_silo?.max_material_storage || 0
+ ))
+
+ if(reagent_holder)
+ for(var/reagent_type in reagent_holder.reagent_volumes)
+ data["reagents"] += list(list(
+ "id" = "[reagent_type]",
+ "name" = CallReagentName(reagent_type),
+ "amount" = reagent_holder.reagent_volumes[reagent_type]
+ ))
+
+ if(build_flag & MECHFAB)
+ for(var/manufacturer_id in GLOB.fabricator_robolimbs)
+ var/datum/robolimb/robolimb = GLOB.fabricator_robolimbs[manufacturer_id]
+ data["manufacturers"] += list(list("id" = manufacturer_id, "name" = robolimb.company))
+
+ for(var/path in files.known_designs)
+ var/datum/design/design = files.known_designs[path]
+ if(!design.build_path || !(design.build_type & build_flag))
+ continue
+
+ var/category = get_design_category(design, build_flag)
+ data["categories"] |= category
+ var/list/resources = list()
+ var/list/requirements = list()
+
+ for(var/material_id in design.materials)
+ var/material_path = SSmaterials.material_to_path(material_id, FALSE)
+ if(!material_path)
+ material_path = material_id
+ var/required_material = primary.get_required_material_amount(design, material_id)
+ var/stored_material = stored_materials[material_path] || 0
+ var/material_name = CallMaterialName(material_id)
+ resources += "[required_material] [material_name]"
+ requirements += list(list("name" = material_name, "required" = required_material, "stored" = stored_material, "missing" = stored_material < required_material, "type" = "material"))
+
+ if(primary.uses_reagents && length(design.chemicals))
+ data["supports_reagents"] = TRUE
+ for(var/reagent_id in design.chemicals)
+ var/required_reagent = primary.get_required_reagent_amount(design, reagent_id)
+ var/stored_reagent = get_stored_reagent_amount(reagent_holder, reagent_id)
+ var/reagent_name = CallReagentName(reagent_id)
+ resources += "[required_reagent] [reagent_name]"
+ requirements += list(list("name" = reagent_name, "required" = required_reagent, "stored" = stored_reagent, "missing" = stored_reagent < required_reagent, "type" = "reagent"))
+
+ var/can_build_anywhere = FALSE
+ var/fastest_time = null
+ for(var/obj/structure/machinery/r_n_d/fabricator/fabricator as anything in fabricators)
+ can_build_anywhere ||= fabricator.can_build(design)
+ var/machine_time = round(design.time / fabricator.production_speed)
+ if(isnull(fastest_time) || machine_time < fastest_time)
+ fastest_time = machine_time
+
+ data["recipes"] += list(list(
+ "name" = design.name,
+ "description" = design.desc,
+ "design" = "[path]",
+ "category" = category,
+ "resources" = english_list(resources),
+ "requirements" = requirements,
+ "can_build" = can_build_anywhere,
+ "build_time" = fastest_time || design.time
+ ))
+
+ var/index = 1
+ for(var/datum/research_fabrication_job/job as anything in job_queue)
+ var/obj/structure/machinery/r_n_d/fabricator/machine = job.assigned_machine
+ var/build_time = machine ? round(job.design.time / machine.production_speed) : round(job.design.time / primary.production_speed)
+ var/remaining_time = machine?.build_callback_timer ? max(0, timeleft(machine.build_callback_timer)) : 0
+ data["queue"] += list(list(
+ "index" = index,
+ "name" = job.design.name,
+ "build_time" = build_time,
+ "active" = !!machine,
+ "machine" = machine?.name,
+ "remaining_time" = remaining_time
+ ))
+ index++
+
+ return data
+
+/obj/structure/machinery/computer/rdconsole/proc/validate_fabricator_screen()
+ cleanup_fabricators()
+ switch(tgui_screen_name())
+ if("protolathe")
+ if(!length(get_fabricators(PROTOLATHE)))
+ screen = 1.0
+ if("imprinter")
+ if(!length(get_fabricators(IMPRINTER)))
+ screen = 1.0
+ if("mechfab")
+ if(!length(get_fabricators(MECHFAB)))
+ screen = 1.0
+
+/obj/structure/machinery/computer/rdconsole/ui_data(mob/user)
+ validate_fabricator_screen()
+ files.RefreshResearch()
+ var/list/data = list(
+ "manufacturer" = manufacturer,
+ "screen" = tgui_screen_name(),
+ "authorized" = allowed(user) || emagged,
+ "emagged" = emagged,
+ "network_sync" = sync,
+ "busy_message" = busy_message,
+ "loaded_disk" = null,
+ "queue_amount" = queue_amount,
+ "devices" = list(
+ "analyzer" = linked_destroy ? 1 : 0,
+ "protolathe" = length(get_fabricators(PROTOLATHE)),
+ "imprinter" = length(get_fabricators(IMPRINTER)),
+ "mechfab" = length(get_fabricators(MECHFAB)),
+ "silo" = linked_silo ? 1 : 0
+ )
+ )
+ if(t_disk)
+ data["loaded_disk"] = list("type" = "technology", "name" = t_disk.name, "stored_name" = t_disk.stored?.name, "stored_description" = t_disk.stored?.desc, "stored_level" = t_disk.stored?.level)
+ else if(d_disk)
+ data["loaded_disk"] = list("type" = "design", "name" = d_disk.name, "stored_name" = d_disk.blueprint?.name, "stored_description" = d_disk.blueprint?.desc)
+ switch(data["screen"])
+ if("levels")
+ data["technologies"] = get_technology_tgui_data()
+ if("designs")
+ data["designs"] = get_design_tgui_data()
+ if("tech_disk")
+ data["technologies"] = get_technology_tgui_data()
+ if("design_disk")
+ data["designs"] = get_design_tgui_data()
+ if("analyzer")
+ data["analyzer"] = get_analyzer_tgui_data()
+ if("protolathe")
+ data["fabricator"] = get_research_fabricator_data(PROTOLATHE)
+ if("imprinter")
+ data["fabricator"] = get_research_fabricator_data(IMPRINTER)
+ if("mechfab")
+ data["fabricator"] = get_research_fabricator_data(MECHFAB)
+ return data
+
+/obj/structure/machinery/computer/rdconsole/proc/eject_fabricator_material(obj/structure/machinery/r_n_d/machine, material_id, requested_sheets)
+ return linked_silo?.eject_material(material_id, requested_sheets)
+
+/obj/structure/machinery/computer/rdconsole/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
+ if(.)
+ return
+ add_fingerprint(usr)
+ usr.set_machine(src)
+ switch(action)
+ if("set_screen")
+ var/new_screen = params["screen"]
+ if(!can_open_tgui_screen(new_screen, usr))
+ to_chat(usr, SPAN_WARNING("Unauthorized access."))
+ return
+ screen = tgui_screen_number(new_screen)
+ . = TRUE
+ if("back")
+ screen = 1.0
+ . = TRUE
+ if("upload_disk")
+ if(t_disk?.stored)
+ files.AddTech2Known(t_disk.stored)
+ griefProtection()
+ . = TRUE
+ else if(d_disk?.blueprint)
+ files.AddDesign2Known(d_disk.blueprint)
+ griefProtection()
+ . = TRUE
+ if("clear_disk")
+ if(t_disk)
+ t_disk.stored = null
+ . = TRUE
+ else if(d_disk)
+ d_disk.blueprint = null
+ . = TRUE
+ if("eject_disk")
+ var/obj/item/disk/disk = t_disk || d_disk
+ if(disk)
+ disk.forceMove(loc)
+ usr.put_in_hands(disk)
+ t_disk = null
+ d_disk = null
+ screen = 1.0
+ . = TRUE
+ if("copy_tech")
+ if(t_disk)
+ t_disk.stored = files.known_tech[params["id"]]
+ . = TRUE
+ if("copy_design")
+ if(d_disk)
+ var/path = text2path(params["design"])
+ d_disk.blueprint = files.known_designs[path]
+ . = TRUE
+ if("analyzer_eject")
+ if(linked_destroy && !linked_destroy.busy && linked_destroy.loaded_item)
+ linked_destroy.loaded_item.forceMove(linked_destroy.loc)
+ if(linked_destroy.Adjacent(usr))
+ usr.put_in_hands(linked_destroy.loaded_item)
+ linked_destroy.loaded_item = null
+ linked_destroy.icon_state = "d_analyzer"
+ . = TRUE
+ if("analyzer_deconstruct")
+ if(linked_destroy && !linked_destroy.busy && linked_destroy.loaded_item)
+ linked_destroy.busy = TRUE
+ screen = 0.1
+ flick("d_analyzer_process", linked_destroy)
+ addtimer(CALLBACK(src, PROC_REF(finish_analyzer_deconstruction)), 24)
+ . = TRUE
+ if("fabricator_build")
+ var/design_text = params["design"]
+ if(!design_text)
+ return FALSE
+
+ var/path = text2path(design_text)
+ var/datum/design/design = files.known_designs[path]
+
+ if(!design)
+ to_chat(usr, SPAN_WARNING("The selected design could not be found in the research database."))
+ return FALSE
+
+ switch(tgui_screen_name())
+ if("protolathe")
+ if(!(design.build_type & PROTOLATHE))
+ return FALSE
+
+ for(var/i in 1 to queue_amount)
+ protolathe_queue += new /datum/research_fabrication_job(design)
+
+ if("imprinter")
+ if(!(design.build_type & IMPRINTER))
+ return FALSE
+
+ for(var/i in 1 to queue_amount)
+ imprinter_queue += new /datum/research_fabrication_job(design)
+
+ if("mechfab")
+ if(!(design.build_type & MECHFAB))
+ return FALSE
+
+ for(var/i in 1 to queue_amount)
+ mechfab_queue += new /datum/research_fabrication_job(design, selected_mech_manufacturer)
+
+ else
+ return FALSE
+
+ dispatch_fabrication_jobs()
+ . = TRUE
+ if("fabricator_remove")
+ var/index = text2num(params["index"])
+ switch(tgui_screen_name())
+ if("protolathe")
+ . = remove_fabrication_job(protolathe_queue, index)
+ if("imprinter")
+ . = remove_fabrication_job(imprinter_queue, index)
+ if("mechfab")
+ . = remove_fabrication_job(mechfab_queue, index)
+ if("fabricator_eject")
+ var/amount = text2num(params["amount"])
+ . = linked_silo?.eject_material(params["material"], amount)
+ if("fabricator_eject_custom")
+ if(!linked_silo)
+ return FALSE
+ var/material_id = params["material"]
+ var/available_sheets = floor(linked_silo.get_material_amount(material_id) / SHEET_MATERIAL_AMOUNT)
+ if(available_sheets < 1)
+ return FALSE
+ var/amount = input(usr, "How many sheets should be ejected?", "Material Ejection", 1) as null|num
+ if(isnull(amount))
+ return TRUE
+ amount = clamp(round(amount), 1, available_sheets)
+ . = linked_silo.eject_material(material_id, amount)
+ if("fabricator_purge")
+ var/build_flag = tgui_screen_name() == "protolathe" ? PROTOLATHE : IMPRINTER
+ var/obj/structure/machinery/r_n_d/fabricator/fabricator = get_primary_fabricator(build_flag)
+ if(fabricator?.reagents)
+ fabricator.reagents.del_reagent(params["reagent"])
+ . = TRUE
+ if("fabricator_purge_all")
+ var/build_flag = tgui_screen_name() == "protolathe" ? PROTOLATHE : IMPRINTER
+ var/obj/structure/machinery/r_n_d/fabricator/fabricator = get_primary_fabricator(build_flag)
+ if(fabricator?.reagents)
+ fabricator.reagents.clear_reagents()
+ . = TRUE
+ if("fabricator_manufacturer")
+ var/manufacturer_id = params["manufacturer"]
+ if(manufacturer_id in GLOB.fabricator_robolimbs)
+ var/datum/robolimb/robolimb = GLOB.fabricator_robolimbs[manufacturer_id]
+ selected_mech_manufacturer = robolimb.company
+ . = TRUE
+ if("set_queue_amount")
+ var/new_amount = clamp(text2num(params["amount"]), 1, 100)
+ if(new_amount in list(1, 5, 10))
+ queue_amount = new_amount
+ return TRUE
+ if("set_custom_queue_amount")
+ var/new_amount = input(usr, "How many copies should be queued at once?", "Queue Amount", queue_amount) as null|num
+ if(isnull(new_amount))
+ return TRUE
+ queue_amount = clamp(round(new_amount), 1, 100)
+ return TRUE
+ if("find_devices")
+ if(allowed(usr) || emagged)
+ busy_message = "Scanning for nearby research devices..."
+ screen = 0.2
+ addtimer(CALLBACK(src, PROC_REF(finish_find_devices)), 5)
+ . = TRUE
+ if("disconnect")
+ switch(params["device"])
+ if("analyzer")
+ if(linked_destroy)
+ linked_destroy.linked_console = null
+ linked_destroy = null
+ if("protolathe")
+ disconnect_fabricators(PROTOLATHE)
+ if("imprinter")
+ disconnect_fabricators(IMPRINTER)
+ if("mechfab")
+ disconnect_fabricators(MECHFAB)
+ if("silo")
+ linked_silo?.disconnect_console()
+ . = TRUE
+ if("toggle_sync")
+ if(allowed(usr) || emagged)
+ sync = !sync
+ . = TRUE
+ if("sync_network")
+ if((allowed(usr) || emagged) && sync)
+ griefProtection()
+ busy_message = "Synchronizing research database with the network..."
+ screen = 0.3
+ addtimer(CALLBACK(src, PROC_REF(finish_network_sync)), 30)
+ . = TRUE
+ if("reset_database")
+ if(allowed(usr) || emagged)
+ griefProtection()
+ qdel(files)
+ files = new /datum/research(src)
+ . = TRUE
+ if("print_research")
+ var/detailed = !!params["detailed"]
+ var/obj/item/paper/PR = new /obj/item/paper
+ var/info = "[station_name()] Science Laboratories[detailed ? "Detailed" : ""] Research Progress Reportreport prepared at [worldtime2text()] station time "
+ info += detailed ? GetResearchListInfo() : GetResearchLevelsInfo()
+ PR.set_content_unsafe("list of researched technologies", info)
+ print(PR, user = usr)
+ . = TRUE
+ if(.)
+ SStgui.update_uis(src)
+
+
+/obj/structure/machinery/computer/rdconsole/proc/finish_find_devices()
+ SyncRDevices()
+ busy_message = "Processing request. Please wait."
+ screen = 1.6
+ SStgui.update_uis(src)
+
+/obj/structure/machinery/computer/rdconsole/proc/finish_network_sync()
+ SyncTechs()
+ busy_message = "Processing request. Please wait."
+ screen = 1.6
+ SStgui.update_uis(src)
+
+/obj/structure/machinery/computer/rdconsole/proc/finish_analyzer_deconstruction()
+ if(!linked_destroy)
+ screen = 1.0
+ return
+ linked_destroy.busy = FALSE
+ if(!linked_destroy.loaded_item)
+ screen = 1.0
+ SStgui.update_uis(src)
+ return
+ for(var/T in linked_destroy.loaded_item.origin_tech)
+ files.UpdateTech(T, linked_destroy.loaded_item.origin_tech[T])
+ if(linked_silo && linked_destroy.loaded_item.matter)
+ for(var/t in linked_destroy.loaded_item.matter)
+ linked_silo.add_material(t, linked_destroy.loaded_item.matter[t] * linked_destroy.decon_mod)
+ linked_destroy.loaded_item = null
+ for(var/obj/I in linked_destroy.contents)
+ for(var/mob/M in I.contents)
+ M.death()
+ qdel(M)
+ if(istype(I, /obj/item/stack/material))
+ var/obj/item/stack/material/S = I
+ if(S.get_amount() > 1)
+ S.use(1)
+ linked_destroy.loaded_item = S
+ else
+ qdel(S)
+ else if(!(I in linked_destroy.component_parts))
+ qdel(I)
+ linked_destroy.icon_state = linked_destroy.loaded_item ? linked_destroy.icon_state : "d_analyzer"
+ use_power_oneoff(linked_destroy.active_power_usage)
+ griefProtection()
+ screen = 1.0
+ SStgui.update_uis(src)
/obj/structure/machinery/computer/rdconsole/robotics
name = "robotics R&D console"
id = 1
req_access = list(ACCESS_ROBOTICS)
allow_analyzer = FALSE
+ manufacturer = "hephaestus"
circuit = /obj/item/circuitboard/robotics_console
+/obj/structure/machinery/computer/rdconsole/robotics/terminal
+ name = "robotics R&D terminal"
+ icon = 'icons/obj/modular_computers/modular_terminal.dmi'
+ icon_screen = "mecha"
+ icon_keyboard = "power_key"
+ icon_keyboard_emis = "power_key_mask"
+ is_connected = TRUE
+ has_off_keyboards = TRUE
+ can_pass_under = FALSE
+ light_power_on = 1
+
/obj/structure/machinery/computer/rdconsole/core
name = "core R&D console"
desc = "A console which is used to operate various research devices. It is the backbone of any megacorporate research division."
diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm
index fb716cecdd2..fbcfbdcb7bb 100644
--- a/code/modules/research/rdmachines.dm
+++ b/code/modules/research/rdmachines.dm
@@ -1,6 +1,6 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
-//All devices that link into the R&D console fall into thise type for easy identification and some shared procs.
+//All devices that link into the R&D console fall into this type for easy identification and shared procs.
/obj/structure/machinery/r_n_d
name = "R&D device"
@@ -15,3 +15,351 @@
/obj/structure/machinery/r_n_d/proc/getMaterialType(var/name)
return SSmaterials.material_stack_type(name)
+
+/obj/structure/machinery/r_n_d/fabricator
+ /// The design build flag accepted by this machine.
+ var/build_type
+
+ /// Whether this machine checks and consumes design chemicals.
+ var/uses_reagents = FALSE
+
+ /// Whether completed products are placed one tile in front of the machine.
+ var/product_offset = FALSE
+
+ /// Material cost multiplier.
+ var/mat_efficiency = 1
+
+ /// Fabrication speed multiplier.
+ var/production_speed = 1
+
+ /// Job currently assigned by the research console.
+ var/datum/research_fabrication_job/assigned_job
+
+ /// Design currently being fabricated.
+ var/datum/design/current_design
+
+ /// Timer ID for the active fabrication.
+ var/build_callback_timer
+
+ /// Looping-sound datum selected by this machine type.
+ var/fabrication_loop_type
+
+ /// Active looping-sound controller for this machine.
+ var/datum/looping_sound/fabrication_loop
+
+ /// Whether this fabricator's construction loop is currently playing.
+ var/fabrication_audio_playing = FALSE
+
+/obj/structure/machinery/r_n_d/fabricator/Initialize(mapload, d, populate_components, is_internal)
+ . = ..()
+
+ if(fabrication_loop_type)
+ fabrication_loop = new fabrication_loop_type(src)
+
+/obj/structure/machinery/r_n_d/fabricator/proc/start_fabrication_audio()
+ if(!fabrication_loop || fabrication_audio_playing)
+ return
+
+ fabrication_loop.start()
+ fabrication_audio_playing = TRUE
+
+/obj/structure/machinery/r_n_d/fabricator/proc/stop_fabrication_audio()
+ if(!fabrication_loop || !fabrication_audio_playing)
+ return
+
+ fabrication_loop.stop()
+ fabrication_audio_playing = FALSE
+
+/obj/structure/machinery/r_n_d/fabricator/power_change()
+ . = ..()
+ if((stat & NOPOWER) && build_callback_timer)
+ if(build_callback_timer)
+ deltimer(build_callback_timer)
+ pause_console_job()
+
+/obj/structure/machinery/r_n_d/fabricator/proc/is_available()
+ return !assigned_job && !build_callback_timer && !(stat & (NOPOWER | BROKEN)) && !panel_open
+
+/obj/structure/machinery/r_n_d/fabricator/proc/get_material_silo()
+ return linked_console?.linked_silo
+
+/obj/structure/machinery/r_n_d/fabricator/proc/get_required_material_amount(datum/design/design_to_check, material_id)
+ return round(design_to_check.materials[material_id] * mat_efficiency)
+
+/obj/structure/machinery/r_n_d/fabricator/proc/get_required_reagent_amount(datum/design/design_to_check, reagent_id)
+ return round(design_to_check.chemicals[reagent_id] * mat_efficiency)
+
+/obj/structure/machinery/r_n_d/fabricator/proc/has_required_materials(datum/design/design_to_check)
+ if(!design_to_check)
+ return FALSE
+
+ var/obj/structure/machinery/r_n_d/material_silo/silo = get_material_silo()
+ if(!silo)
+ return FALSE
+
+ for(var/material_id in design_to_check.materials)
+ if(!silo.has_material(material_id, get_required_material_amount(design_to_check, material_id)))
+ return FALSE
+
+ return TRUE
+
+/obj/structure/machinery/r_n_d/fabricator/proc/has_required_reagents(datum/design/design_to_check)
+ if(!design_to_check)
+ return FALSE
+ if(!uses_reagents)
+ return TRUE
+
+ for(var/reagent_id in design_to_check.chemicals)
+ if(!reagents?.has_reagent(reagent_id, get_required_reagent_amount(design_to_check, reagent_id)))
+ return FALSE
+
+ return TRUE
+
+/obj/structure/machinery/r_n_d/fabricator/proc/can_build(datum/design/design_to_check)
+ return has_required_materials(design_to_check) && has_required_reagents(design_to_check)
+
+/obj/structure/machinery/r_n_d/fabricator/proc/canBuild(datum/design/design_to_check)
+ return can_build(design_to_check)
+
+/obj/structure/machinery/r_n_d/fabricator/proc/getLackingMaterials(datum/design/design_to_check)
+ var/obj/structure/machinery/r_n_d/material_silo/silo = get_material_silo()
+ var/list/missing = list()
+
+ for(var/material_id in design_to_check.materials)
+ var/required_amount = get_required_material_amount(design_to_check, material_id)
+ var/stored_amount = silo?.get_material_amount(material_id) || 0
+ if(stored_amount < required_amount)
+ missing += "[required_amount - stored_amount] [SSmaterials.material_display_name(material_id)]"
+
+ if(uses_reagents)
+ for(var/reagent_id in design_to_check.chemicals)
+ var/required_amount = get_required_reagent_amount(design_to_check, reagent_id)
+ if(!reagents?.has_reagent(reagent_id, required_amount))
+ var/singleton/reagent/reagent = GET_SINGLETON(reagent_id)
+ missing += reagent?.name || "unknown reagent"
+
+ return english_list(missing)
+
+/obj/structure/machinery/r_n_d/fabricator/proc/can_produce_job(datum/research_fabrication_job/job)
+ if(!job?.design)
+ return FALSE
+ if(!(job.design.build_type & build_type))
+ return FALSE
+ if(!has_required_reagents(job.design))
+ return FALSE
+ if(length(job.reserved_materials))
+ return TRUE
+ return has_required_materials(job.design)
+
+/obj/structure/machinery/r_n_d/fabricator/proc/reserve_job_materials(datum/research_fabrication_job/job)
+ if(!job?.design)
+ return FALSE
+ if(length(job.reserved_materials))
+ return TRUE
+
+ var/obj/structure/machinery/r_n_d/material_silo/silo = get_material_silo()
+ if(!silo)
+ return FALSE
+
+ for(var/material_id in job.design.materials)
+ var/required_amount = get_required_material_amount(job.design, material_id)
+ if(!silo.has_material(material_id, required_amount))
+ return FALSE
+
+ for(var/material_id in job.design.materials)
+ var/required_amount = get_required_material_amount(job.design, material_id)
+ var/material = SSmaterials.material_to_path(material_id, FALSE)
+ if(!material)
+ material = material_id
+ SSmaterials.remove_material_amount(silo.materials, material, required_amount)
+ job.reserved_materials[material] = required_amount
+
+ silo.update_linked_uis()
+ return TRUE
+
+/obj/structure/machinery/r_n_d/fabricator/proc/begin_console_job(datum/research_fabrication_job/job)
+ if(!job || !is_available() || !can_produce_job(job))
+ return FALSE
+ if(!reserve_job_materials(job))
+ return FALSE
+
+ assigned_job = job
+ current_design = job.design
+ job.assigned_machine = src
+ on_job_started(job)
+ update_use_power(POWER_USE_ACTIVE)
+ build_callback_timer = addtimer(CALLBACK(src, PROC_REF(complete_console_job)), current_design.time / production_speed, TIMER_UNIQUE | TIMER_STOPPABLE)
+ start_fabrication_audio()
+ update_icon()
+ SStgui.update_uis(linked_console)
+ return TRUE
+
+/obj/structure/machinery/r_n_d/fabricator/proc/on_job_started(datum/research_fabrication_job/job)
+ return
+
+/obj/structure/machinery/r_n_d/fabricator/proc/complete_console_job()
+ build_callback_timer = null
+
+ var/datum/research_fabrication_job/job = assigned_job
+ var/datum/design/design_to_build = job?.design
+ if(!job || !design_to_build)
+ clear_console_job()
+ return
+
+ if(!has_required_reagents(design_to_build))
+ visible_message(SPAN_WARNING("\The [src] stops because the required reagents are no longer available."))
+ pause_console_job()
+ return
+
+ consume_reagents(design_to_build)
+ use_fabrication_power(design_to_build)
+ fabricate_design(design_to_build, job)
+ job.reserved_materials.Cut()
+
+ var/obj/structure/machinery/computer/rdconsole/console = linked_console
+ console?.finish_fabrication_job(job)
+
+ /*
+ * Keep construction audio running while the console attempts to assign
+ * another job. This prevents the end and startup sounds from playing
+ * between consecutive items.
+ */
+ clear_console_job(FALSE, FALSE)
+ console?.dispatch_fabrication_jobs()
+
+ /*
+ * If dispatch did not assign another job to this machine, construction
+ * has actually ended and the loop can now stop.
+ */
+ if(!assigned_job)
+ stop_fabrication_audio()
+
+/obj/structure/machinery/r_n_d/fabricator/proc/pause_console_job()
+ var/datum/research_fabrication_job/job = assigned_job
+ if(job)
+ job.assigned_machine = null
+
+ assigned_job = null
+ current_design = null
+ build_callback_timer = null
+ stop_fabrication_audio()
+ update_use_power(POWER_USE_IDLE)
+ update_icon()
+ on_job_cleared()
+
+ if(linked_console)
+ SStgui.update_uis(linked_console)
+ linked_console.dispatch_fabrication_jobs()
+
+/obj/structure/machinery/r_n_d/fabricator/proc/clear_console_job(clear_assignment = TRUE, stop_audio = TRUE)
+ if(clear_assignment && assigned_job)
+ assigned_job.assigned_machine = null
+
+ assigned_job = null
+ current_design = null
+ build_callback_timer = null
+
+ if(stop_audio)
+ stop_fabrication_audio()
+
+ update_use_power(POWER_USE_IDLE)
+ update_icon()
+ on_job_cleared()
+
+/obj/structure/machinery/r_n_d/fabricator/proc/consume_reagents(datum/design/design_to_build)
+ if(!uses_reagents)
+ return
+
+ for(var/reagent_id in design_to_build.chemicals)
+ reagents.remove_reagent(reagent_id, get_required_reagent_amount(design_to_build, reagent_id))
+
+/obj/structure/machinery/r_n_d/fabricator/proc/use_fabrication_power(datum/design/design_to_build)
+ var/power_cost = active_power_usage
+ for(var/material_id in design_to_build.materials)
+ power_cost += round(design_to_build.materials[material_id] / 2)
+ use_power_oneoff(max(active_power_usage, power_cost))
+
+/obj/structure/machinery/r_n_d/fabricator/proc/fabricate_design(datum/design/design_to_build, datum/research_fabrication_job/job)
+ intent_message(MACHINE_SOUND)
+ if(!design_to_build.build_path)
+ return
+
+ var/atom/product_location = product_offset ? get_step(src, dir) : src
+ var/obj/new_item = design_to_build.Fabricate(product_location, src)
+ if(!new_item)
+ return
+
+ if(!product_offset)
+ new_item.forceMove(loc)
+
+ if(mat_efficiency != 1 && new_item.matter?.len)
+ for(var/material_id in new_item.matter)
+ new_item.matter[material_id] *= mat_efficiency
+
+ apply_product_data(new_item, design_to_build, job)
+ on_product_completed(new_item, design_to_build, job)
+
+/obj/structure/machinery/r_n_d/fabricator/proc/apply_product_data(obj/new_item, datum/design/design_to_build, datum/research_fabrication_job/job)
+ return
+
+/obj/structure/machinery/r_n_d/fabricator/proc/on_product_completed(obj/new_item, datum/design/design_to_build, datum/research_fabrication_job/job)
+ return
+
+
+/obj/structure/machinery/r_n_d/fabricator/proc/wake_console_dispatch()
+ linked_console?.dispatch_fabrication_jobs()
+
+/obj/structure/machinery/r_n_d/fabricator/proc/disconnect_console()
+ if(!linked_console)
+ return
+ var/obj/structure/machinery/computer/rdconsole/console = linked_console
+ if(build_callback_timer)
+ deltimer(build_callback_timer)
+ if(assigned_job)
+ assigned_job.assigned_machine = null
+ assigned_job = null
+ current_design = null
+ build_callback_timer = null
+ stop_fabrication_audio()
+ update_use_power(POWER_USE_IDLE)
+ update_icon()
+ linked_console = null
+ console.remove_fabricator(src)
+
+/obj/structure/machinery/r_n_d/fabricator/attackby(obj/item/attacking_item, mob/user)
+ if(user.a_intent == I_HURT)
+ return ..()
+ if(build_callback_timer)
+ to_chat(user, SPAN_NOTICE("\The [src] is busy. Please wait for the current operation to finish."))
+ return TRUE
+ if(default_deconstruction_screwdriver(user, attacking_item))
+ disconnect_console()
+ return TRUE
+ if(default_deconstruction_crowbar(user, attacking_item))
+ return TRUE
+ if(default_part_replacement(user, attacking_item))
+ return TRUE
+ if(istype(attacking_item, /obj/item/stack/material))
+ to_chat(user, SPAN_NOTICE("Materials must be inserted into the linked research material silo."))
+ return TRUE
+ return ..()
+
+/obj/structure/machinery/r_n_d/fabricator/Destroy()
+ if(build_callback_timer)
+ deltimer(build_callback_timer)
+
+ stop_fabrication_audio()
+ QDEL_NULL(fabrication_loop)
+
+ if(assigned_job)
+ assigned_job.assigned_machine = null
+
+ if(linked_console)
+ linked_console.remove_fabricator(src)
+
+ assigned_job = null
+ current_design = null
+ return ..()
+
+/obj/structure/machinery/r_n_d/fabricator/proc/on_job_cleared()
+ return
diff --git a/code/modules/research/stockparts.dm b/code/modules/research/stockparts.dm
index 79ca113cfb1..0ad095f59ec 100644
--- a/code/modules/research/stockparts.dm
+++ b/code/modules/research/stockparts.dm
@@ -255,53 +255,57 @@
//TCOMS stock parts
/obj/item/stock_parts/subspace/ansible
- name = "subspace ansible"
- icon_state = "subspace_ansible"
- desc = "A compact module capable of sensing extradimensional activity."
+ name = "bluespace ansible"
+ icon_state = "ansible_crystal"
+ desc = "A specially energised bluespace crystal that can be used to receive and transcribe transmissions received from within bluespace."
+ desc_extended = "Perhaps the most under-valued use of phoron and bluespace, and the backbone of interstellar FTL communications. \
+ Without these, it will be back to warp couriers and dreaded sub-luminal radio communications..."
origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 5 ,TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
- matter = list(MATERIAL_STEEL = 30, MATERIAL_GLASS = 10)
+ matter = list(MATERIAL_STEEL = 30, MATERIAL_GLASS = 10, MATERIAL_PHORON = 50)
/obj/item/stock_parts/subspace/filter
name = "hyperwave filter"
icon_state = "hyperwave_filter"
- desc = "A tiny device capable of filtering and converting super-intense radiowaves."
+ desc = "A tiny device capable of filtering and converting bluespace transmissions."
origin_tech = list(TECH_DATA = 4, TECH_MAGNET = 2)
matter = list(MATERIAL_STEEL = 30, MATERIAL_GLASS = 10)
/obj/item/stock_parts/subspace/amplifier
- name = "subspace amplifier"
+ name = "bluespace amplifier"
icon_state = "subspace_amplifier"
- desc = "A compact micro-machine capable of amplifying weak subspace transmissions."
+ desc = "A compact ampule of phoron gas capable of amplifying weak bluespace transmissions."
origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
- matter = list(MATERIAL_STEEL = 30, MATERIAL_GLASS = 10)
+ matter = list(MATERIAL_STEEL = 30, MATERIAL_GLASS = 10, MATERIAL_PHORON = 50)
/obj/item/stock_parts/subspace/treatment
- name = "subspace treatment disk"
+ name = "bluespace treatment disk"
icon_state = "treatment_disk"
- desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves."
+ desc = "A compact micro-machine capable of stretching out hyper-compressed bluespace transmissions."
origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_MATERIAL = 5, TECH_BLUESPACE = 2)
matter = list(MATERIAL_STEEL = 30, MATERIAL_GLASS = 10)
/obj/item/stock_parts/subspace/analyzer
- name = "subspace wavelength analyzer"
+ name = "bluespace transmission analyzer"
icon_state = "wavelength_analyzer"
- desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths."
+ desc = "A sophisticated analyzer capable of analyzing cryptic bluespace transmissions."
origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
matter = list(MATERIAL_STEEL = 30, MATERIAL_GLASS = 10)
/obj/item/stock_parts/subspace/crystal
- name = "ansible crystal"
+ name = "bluespace transmission crystal"
icon_state = "ansible_crystal"
- desc = "A crystal made from pure glass used to transmit laser databursts to subspace."
+ desc = "A specially energised bluespace crystal capable of punching tiny micro-portals into bluespace, through which laser databursts can be transmitted FTL."
+ desc_extended = "Perhaps the most under-valued use of phoron and bluespace, and the backbone of interstellar FTL communications. \
+ Without these, it will be back to warp couriers and dreaded sub-luminal radio communications..."
origin_tech = list(TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
- matter = list(MATERIAL_GLASS = 50)
+ matter = list(MATERIAL_PHORON = 50)
/obj/item/stock_parts/subspace/transmitter
- name = "subspace transmitter"
+ name = "data laser transmitter"
icon_state = "subspace_transmitter"
- desc = "A large piece of equipment used to open a window into the subspace dimension."
+ desc = "A small laser that can be used to transmit data through an opened bluespace micro-portal."
origin_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5, TECH_BLUESPACE = 3)
- matter = list(MATERIAL_STEEL = 50)
+ matter = list(MATERIAL_STEEL = 25, MATERIAL_GLASS = 25)
#undef STOCK_PART_BASIC
#undef STOCK_PART_ADVANCED
diff --git a/code/modules/security levels/security levels.dm b/code/modules/security levels/security levels.dm
index dd5e8ecbac0..584ba03e05d 100644
--- a/code/modules/security levels/security levels.dm
+++ b/code/modules/security levels/security levels.dm
@@ -9,7 +9,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
/var/datum/announcement/priority/security/security_announcement_sound = new(do_log = FALSE, do_newscast = TRUE, new_sound = sound('sound/ai/announcements/security_level.ogg'))
/var/datum/announcement/priority/security/security_announcement = new(do_log = FALSE, do_newscast = TRUE)
-/proc/set_security_level(var/level)
+/proc/set_security_level(var/level, var/nuke = FALSE, var/area/A)
switch(level)
if("green")
level = SEC_LEVEL_GREEN
@@ -49,7 +49,12 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
GLOB.security_level = SEC_LEVEL_RED
post_display_status("alert", "redalert")
if(SEC_LEVEL_DELTA)
- security_announcement_sound.Announce("[GLOB.config.alert_desc_delta]", "Attention! Delta security level reached!", new_sound = 'sound/effects/siren.ogg')
+ if(!nuke)
+ security_announcement_sound.Announce("[GLOB.config.alert_desc_delta]", "Attention! Delta security level reached!", new_sound = 'sound/effects/siren.ogg')
+ else if (A)
+ security_announcement_sound.Announce("An active nuclear device has been detected in the [get_area_display_name(A)]. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.", "Attention! Delta security level reached!", new_sound = 'sound/effects/siren.ogg')
+ else
+ security_announcement_sound.Announce("An active nuclear device has been detected onboard. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.", "Attention! Delta security level reached!", new_sound = 'sound/effects/siren.ogg')
GLOB.security_level = SEC_LEVEL_DELTA
SSnightlight.temp_disable()
diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm
index f1643af2b0e..42c7056b280 100644
--- a/code/modules/shieldgen/emergency_shield.dm
+++ b/code/modules/shieldgen/emergency_shield.dm
@@ -98,6 +98,11 @@
visible_message(SPAN_WARNING("\The [src] shuts down."), SPAN_NOTICE("You hear a heavy droning fade out."))
shields_down()
check_delay = initial(check_delay)
+ return
+
+ if(!active)
+ check_delay = initial(check_delay)
+ return
if(malfunction)
if(deployed_shields.len && prob(5))
@@ -108,16 +113,17 @@
else
if(check_delay <= 0)
- if(shields_up())
- var/new_power_usage = 0
- for(var/obj/structure/machinery/shield/shield_tile in deployed_shields)
- new_power_usage += shield_tile.shield_sustain_power
+ create_shields()
- if(new_power_usage != active_power_usage)
- change_power_consumption(new_power_usage, POWER_USE_ACTIVE)
- use_power_oneoff(0)
+ var/new_power_usage = 0
+ for(var/obj/structure/machinery/shield/shield_tile in deployed_shields)
+ new_power_usage += shield_tile.shield_sustain_power
- check_delay = initial(check_delay)
+ if(new_power_usage != active_power_usage)
+ change_power_consumption(new_power_usage, POWER_USE_ACTIVE)
+ use_power_oneoff(0)
+
+ check_delay = initial(check_delay)
else
check_delay--
@@ -356,7 +362,6 @@
if(. != BULLET_ACT_HIT)
return .
- health -= hitting_projectile.get_structure_damage()
check_failure()
opacity = TRUE
addtimer(CALLBACK(src, PROC_REF(update_opacity), FALSE), 2 SECONDS)
diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm
index 5d177effd09..a54cda35663 100644
--- a/code/modules/shieldgen/shield_gen.dm
+++ b/code/modules/shieldgen/shield_gen.dm
@@ -29,11 +29,12 @@
var/list/owned_capacitors = list()
/// If this shield generator supports multi-z.
var/multiz = TRUE
- ///How much the manipulator rating increases the maximum field strengthen rate. This increases how fast the shield can strengthen, allowing it to recover faster.
- var/manipulator_bonus = 0.1 //Maximum recovery rate with base components is 0.5 renwicks per second, with maxed out manipulators it's 0.9 renwicks per second.
- ///How much the capacitor rating increases the field conversion rate. This increases the efficiency of converting power into shield strength, decreasing all shield power costs.
+ /// How much the manipulator rating increases the maximum field strengthen rate. This increases how fast the shield can strengthen, allowing it to recover faster.
+ /// Maximum recovery rate with base components is 0.5 renwicks per second, with maxed out manipulators it's 0.9 renwicks per second.
+ var/manipulator_bonus = 0.1
+ /// How much the capacitor rating increases the field conversion rate. This increases the efficiency of converting power into shield strength, decreasing all shield power costs.
var/capacitor_bonus = 0.000005
- ///How much the micro laser rating decreased the field dissipation rate. This reduces the amount of shield strength lost per tick, reducing the shield upkeep.
+ /// How much the micro laser rating decreased the field dissipation rate. This reduces the amount of shield strength lost per tick, reducing the shield upkeep.
var/micro_laser_bonus = 0.002
component_types = list(
@@ -258,11 +259,11 @@
if(active)
for(var/mob/M as anything in hearers(5,src))
to_chat(M, SPAN_NOTICE("[icon2html(src, M)] You hear heavy droning start up."))
- energy_field.set_shielded_turfs(get_shielded_turfs())
+ energy_field.set_shielded_turfs(get_shielded_turfs())
else
for(var/mob/M as anything in hearers(5,src))
to_chat(M, SPAN_NOTICE("[icon2html(src, M)] You hear heavy droning fade out."))
- energy_field.clear_field()
+ energy_field.clear_field()
/obj/structure/machinery/shield_gen/update_icon()
if(stat & BROKEN)
diff --git a/code/modules/shuttles/landmarks.dm b/code/modules/shuttles/landmarks.dm
index dab1429ee4e..f0290ba5d82 100644
--- a/code/modules/shuttles/landmarks.dm
+++ b/code/modules/shuttles/landmarks.dm
@@ -31,6 +31,8 @@
//Name of the shuttle, null for generic waypoint
var/shuttle_restricted
var/landmark_flags = 0
+ /// Automatically registers the landmark with the shuttle/sectors system if true.
+ var/auto_register = FALSE
/// Effects that show where the shuttle will land, to prevent unfair squishing
var/list/landing_indicators
@@ -68,13 +70,16 @@
else
base_area = locate(base_area || world.area)
- if(!docking_controller)
- return
- var/docking_tag = docking_controller
- if(!istype(docking_controller))
- docking_controller = SSshuttle.docking_registry[docking_tag]
+ if(docking_controller)
+ var/docking_tag = docking_controller
if(!istype(docking_controller))
- LOG_DEBUG("Could not find docking controller for shuttle waypoint '[name]', docking tag was '[docking_tag]'.")
+ docking_controller = SSshuttle.docking_registry[docking_tag]
+ if(!istype(docking_controller))
+ LOG_DEBUG("Could not find docking controller for shuttle waypoint '[name]', docking tag was '[docking_tag]'.")
+
+ if(auto_register)
+ var/obj/effect/overmap/visitable/map_origin = GLOB.map_sectors["[z]"]
+ map_origin.add_landmark(src, shuttle_restricted)
/obj/effect/shuttle_landmark/forceMove(atom/destination)
var/obj/effect/overmap/visitable/map_origin = GLOB.map_sectors["[z]"]
diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm
index 7dc71bcb19a..5ec0fcd49be 100644
--- a/code/modules/telesci/telepad.dm
+++ b/code/modules/telesci/telepad.dm
@@ -35,6 +35,9 @@
if(default_deconstruction_screwdriver(user, attacking_item))
return
+ if(default_part_replacement(user, attacking_item))
+ return
+
if(panel_open)
if(attacking_item.tool_behaviour == TOOL_MULTITOOL)
var/obj/item/multitool/M = attacking_item
diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm
index a2559406bd6..4dc0dd9f9f0 100644
--- a/code/modules/telesci/telesci_computer.dm
+++ b/code/modules/telesci/telesci_computer.dm
@@ -263,6 +263,39 @@
visible_message(SPAN_WARNING("The telepad weakly fizzles."))
return
+/obj/structure/machinery/computer/telescience/proc/check_bluespace_inhibitors(atom/target)
+ var/turf/target_turf = get_turf(target)
+ if(!target_turf)
+ return null
+
+ var/list/turf/good_turfs = list()
+ var/list/turf/bad_turfs = list()
+ var/list/invalid_inhibitors
+ for(var/found_inhibitor in GLOB.bluespace_inhibitors)
+ if(!istype(found_inhibitor, /obj/structure/machinery/anti_bluespace))
+ LAZYADD(invalid_inhibitors, found_inhibitor)
+ continue
+ var/obj/structure/machinery/anti_bluespace/AB = found_inhibitor
+ if(QDELETED(AB))
+ LAZYADD(invalid_inhibitors, found_inhibitor)
+ continue
+ if(target_turf.z != AB.z || get_dist(target_turf, AB) > 8 || (AB.stat & (NOPOWER | BROKEN)))
+ continue
+ AB.use_power_oneoff(AB.active_power_usage)
+ bad_turfs += RANGE_TURFS(9, get_turf(AB))
+ good_turfs += RANGE_TURFS(10, get_turf(AB)) //One extra tile away, so stepping off the portal in the direction of the inhibitor doesn't break the portal.
+
+ if(invalid_inhibitors)
+ GLOB.bluespace_inhibitors -= invalid_inhibitors
+
+ if(length(good_turfs) && length(bad_turfs))
+ good_turfs -= bad_turfs
+ if(length(good_turfs))
+ temp_msg = "ERROR! Interference detected. Portal off target."
+ return pick(good_turfs)
+
+ return target_turf
+
/obj/structure/machinery/computer/telescience/proc/doteleport(mob/user)
SHOULD_NOT_SLEEP(TRUE)
@@ -288,6 +321,7 @@
var/spawn_time = round(proj_data.time)
var/turf/target = locate(trueX, trueY, target_zlevel)
+ target = check_bluespace_inhibitors(target)
last_target = target
flick("pad-beam", telepad)
diff --git a/code/modules/tgui/modules/neural_configuration.dm b/code/modules/tgui/modules/neural_configuration.dm
index 71e2c3a03c5..fabf6f48b91 100644
--- a/code/modules/tgui/modules/neural_configuration.dm
+++ b/code/modules/tgui/modules/neural_configuration.dm
@@ -72,9 +72,14 @@
var/message = sanitize_tg(tgui_input_text(owner, "Enter a peer-to-peer message to send to [connected_ipc.real_name].", "Virtual Communication", max_length = MAX_MESSAGE_LEN))
// re-do all the checks just in case. bit ass but oh well
- if(message && !port.is_broken() && (port.access_cable.target && port.access_cable.target == connected_ipc && !other_port.is_broken()))
+ var/mob/target_owner
+ if(istype(port.access_cable.target, /obj/item/organ/internal/machine/access_port))
+ var/obj/item/organ/internal/machine/access_port/target_port = port.access_cable.target
+ target_owner = target_port.owner
+ if(message && !port.is_broken() && (target_owner == connected_ipc && !other_port.is_broken()))
var/p2p_message = SPAN_ITALIC("Virtual Communication, ") + SPAN_BOLD("[owner.real_name] transmits: ") + SPAN_MACHINE_WARNING(message)
to_chat(connected_ipc, p2p_message)
+ to_chat(owner, p2p_message)
log_say("VIRTUAL COMMUNICATION: [owner]/[owner.client.ckey] to [connected_ipc]/[connected_ipc.client.ckey]: [message]")
. = TRUE
else
diff --git a/code/modules/world_api/commands/cciaa.dm b/code/modules/world_api/commands/cciaa.dm
index a43ab3666d5..469aa5c6d4a 100644
--- a/code/modules/world_api/commands/cciaa.dm
+++ b/code/modules/world_api/commands/cciaa.dm
@@ -252,7 +252,7 @@
if(stamptext)
P.stamps += " This paper has been stamped [stamptext]."
else
- P.stamps += " This paper has been stamped by the Central Command Quantum Relay."
+ P.stamps += " This paper has been stamped by the Central Command Bluespace Relay."
if(F.receivefax(P))
log_and_message_admins("[senderkey] sent a fax message to the [F.department] fax machine via the api. (JMP)")
diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm
index e9d5e25747e..d769829db1a 100644
--- a/code/unit_tests/map_tests.dm
+++ b/code/unit_tests/map_tests.dm
@@ -495,5 +495,45 @@
return test_status
+/datum/unit_test/map_test/research_fabricator_connections
+ name = "MAP: Research fabricator connections"
+
+/datum/unit_test/map_test/research_fabricator_connections/start_test()
+ var/fabricator_count = 0
+ var/console_count = 0
+ var/fabricators_without_console = 0
+ var/consoles_without_silo = 0
+ var/test_status = UNIT_TEST_PASSED
+
+ for(var/obj/structure/machinery/r_n_d/fabricator/fabricator in world)
+ fabricator_count++
+
+ var/obj/structure/machinery/computer/rdconsole/nearby_console = locate() in range(7, fabricator)
+ if(nearby_console)
+ continue
+
+ fabricators_without_console++
+ TEST_FAIL("[fabricator.name] at ([fabricator.x], [fabricator.y], [fabricator.z]) in [get_area(fabricator)] has no research console within 7 turfs.")
+
+ for(var/obj/structure/machinery/computer/rdconsole/console in world)
+ if(QDELETED(console) || !is_station_level(console.z))
+ continue
+
+ console_count++
+
+ var/obj/structure/machinery/r_n_d/material_silo/nearby_silo = locate() in range(7, console)
+ if(nearby_silo)
+ continue
+
+ consoles_without_silo++
+ TEST_FAIL("[console.name] at ([console.x], [console.y], [console.z]) in [get_area(console)] has no material silo within 7 turfs.")
+
+ if(fabricators_without_console || consoles_without_silo)
+ test_status = TEST_FAIL("\[[fabricators_without_console] / [fabricator_count]\] research fabricators lacked a nearby research console. \[[consoles_without_silo] / [console_count]\] research consoles lacked a nearby material silo.")
+ else
+ TEST_PASS("All [fabricator_count] research fabricators had a nearby research console, and all [console_count] research consoles had a nearby material silo.")
+
+ return test_status
+
#undef SUCCESS
#undef FAILURE
diff --git a/code/unit_tests/mob_tests.dm b/code/unit_tests/mob_tests.dm
index ea46246e9b5..0edcd05e3a2 100644
--- a/code/unit_tests/mob_tests.dm
+++ b/code/unit_tests/mob_tests.dm
@@ -122,6 +122,45 @@
return 1 // return 1 to show we're done and don't want to recheck the result.
+/datum/unit_test/closed_eyes
+ name = "MOB: Closing eyes blinds and protects from flashes"
+ groups = list("mob")
+
+/datum/unit_test/closed_eyes/start_test()
+ var/mob/living/carbon/human/H = new(pick(GLOB.tdome1))
+ var/obj/item/organ/internal/eyes/eyes = H.get_eyes()
+
+ if(!eyes)
+ TEST_FAIL("Test human spawned without an eye organ.")
+ qdel(H)
+ return TRUE
+
+ eyes.eyes_closed = TRUE
+ if(!H.is_blind())
+ TEST_FAIL("A human with closed eyes was not considered blind.")
+ qdel(H)
+ return TRUE
+
+ if(H.flash_act(affect_silicon = TRUE, ignore_inherent = TRUE))
+ TEST_FAIL("A flash affected a human with closed eyes.")
+ qdel(H)
+ return TRUE
+
+ eyes.eyes_closed = FALSE
+ if(H.is_blind())
+ TEST_FAIL("Opening healthy eyes did not restore the human's vision.")
+ qdel(H)
+ return TRUE
+
+ if(!H.flash_act(ignore_inherent = TRUE))
+ TEST_FAIL("A flash did not affect a human with open, unprotected eyes.")
+ qdel(H)
+ return TRUE
+
+ TEST_PASS("Closed eyes blind their owner and prevent flash effects.")
+ qdel(H)
+ return TRUE
+
// ============================================================================
/proc/create_test_mob_with_mind(var/turf/mobloc = null, var/mobtype = /mob/living/carbon/human, var/add_to_playerlist = FALSE)
diff --git a/code/unit_tests/overmap_tests.dm b/code/unit_tests/overmap_tests.dm
index 04a4b6e4f53..a298b08a079 100644
--- a/code/unit_tests/overmap_tests.dm
+++ b/code/unit_tests/overmap_tests.dm
@@ -46,3 +46,169 @@
if(!failures)
TEST_PASS("All ships have a class and designation.")
return TRUE
+
+// Lightweight combat doubles: they exercise the overmap collision and payload
+// handoff without firing a real projectile across one of the live ship maps.
+/obj/effect/overmap/visitable/unit_test_combat_target/Initialize()
+ SHOULD_CALL_PARENT(FALSE)
+ // Avoid registering this lightweight collision target as a real sector.
+ return INITIALIZE_HINT_NORMAL
+
+/obj/effect/overmap/visitable/unit_test_combat_target/check_ownership(obj/object)
+ return FALSE
+
+/obj/effect/overmap/projectile/unit_test_combat
+ /// Number of payload handoffs performed by this combat carrier.
+ var/entry_calls = 0
+ /// Whether the reconstructed projectile became the ammunition's physical owner.
+ var/payload_transferred = FALSE
+ /// Physical projectile created by the overmap entry code under test.
+ var/obj/projectile/ship_ammo/reconstructed_projectile
+
+/obj/effect/overmap/projectile/unit_test_combat/Initialize()
+ SHOULD_CALL_PARENT(FALSE)
+ // Avoid starting the production movement timer before the test configures the carrier.
+ return INITIALIZE_HINT_NORMAL
+
+/obj/effect/overmap/projectile/unit_test_combat/check_entry_visitable(obj/projectile/ship_ammo/widowmaker, turf/target_turf)
+ // Capture the handoff result without firing across a live ship map.
+ entry_calls++
+ payload_transferred = (widowmaker.ammo?.loc == widowmaker)
+ reconstructed_projectile = widowmaker
+ qdel(src)
+ return TRUE
+
+/obj/effect/unit_test_ship_ammo_impact/Initialize()
+ return ..()
+
+/datum/unit_test/overmap_projectile_entry_is_one_shot
+ name = "OVERMAP: Combat projectile entry is one-shot"
+ groups = list("map", "overmap")
+
+/datum/unit_test/overmap_projectile_entry_is_one_shot/start_test()
+ var/test_z = SSatlas.current_map?.overmap_z ? SSatlas.current_map.overmap_z : 1
+ var/turf/combat_turf = locate(2, 2, test_z)
+ TEST_ASSERT_NOTNULL(combat_turf, "Could not locate an overmap turf for the combat simulation.")
+
+ var/obj/effect/overmap/visitable/unit_test_combat_target/combat_target = new(combat_turf)
+ var/obj/effect/overmap/projectile/unit_test_combat/overmap_projectile = new(combat_turf)
+ var/obj/item/ship_ammunition/ammunition = new(overmap_projectile)
+ ammunition.fired_projectile_type = /obj/projectile/ship_ammo
+ ammunition.overmap_behaviour = SHIP_AMMO_CAN_HIT_VISITABLES
+ overmap_projectile.ammunition = ammunition
+ overmap_projectile.target = combat_target
+
+ TEST_ASSERT(overmap_projectile.check_entry(), "The projectile did not enter its overmap combat target.")
+ TEST_ASSERT(overmap_projectile.entering, "The overmap projectile was not marked as entering.")
+ TEST_ASSERT(overmap_projectile.check_entry(), "A repeated entry check did not report the handled collision.")
+ TEST_ASSERT_EQUAL(overmap_projectile.entry_calls, 1, "The payload was translated more than once.")
+ TEST_ASSERT(overmap_projectile.payload_transferred, "The ammunition was not transferred to the reconstructed projectile.")
+
+ qdel(combat_target)
+ qdel(overmap_projectile.reconstructed_projectile)
+ qdel(overmap_projectile)
+ TEST_PASS("An overmap combat projectile translates its payload only once.")
+ return TRUE
+
+/datum/unit_test/overmap_projectile_missing_type
+ name = "OVERMAP: Combat carrier rejects a missing projectile type"
+ groups = list("map", "overmap")
+
+/datum/unit_test/overmap_projectile_missing_type/start_test()
+ var/test_z = SSatlas.current_map?.overmap_z ? SSatlas.current_map.overmap_z : 1
+ var/turf/combat_turf = locate(2, 2, test_z)
+ TEST_ASSERT_NOTNULL(combat_turf, "Could not locate an overmap turf for the combat simulation.")
+
+ var/obj/effect/overmap/visitable/unit_test_combat_target/combat_target = new(combat_turf)
+ var/obj/effect/overmap/projectile/unit_test_combat/overmap_projectile = new(combat_turf)
+ var/obj/item/ship_ammunition/ammunition = new(overmap_projectile)
+ ammunition.overmap_behaviour = SHIP_AMMO_CAN_HIT_VISITABLES
+ overmap_projectile.ammunition = ammunition
+ overmap_projectile.target = combat_target
+
+ TEST_ASSERT(overmap_projectile.check_entry(), "The malformed carrier collision was not handled.")
+ TEST_ASSERT(QDELETED(overmap_projectile), "A carrier with no projectile type was not deleted.")
+ TEST_ASSERT_EQUAL(overmap_projectile.entry_calls, 0, "Entry ran without a projectile type.")
+
+ qdel(combat_target)
+ qdel(overmap_projectile)
+ TEST_PASS("An invalid overmap carrier is discarded without attempting reconstruction.")
+ return TRUE
+
+/datum/unit_test/overmap_all_ship_munitions
+ name = "OVERMAP: All ship munitions reconstruct and explosive rounds detonate"
+ groups = list("map", "overmap")
+
+/datum/unit_test/overmap_all_ship_munitions/start_test()
+ var/test_z = SSatlas.current_map?.overmap_z ? SSatlas.current_map.overmap_z : 1
+ var/turf/combat_turf = locate(2, 2, test_z)
+ TEST_ASSERT_NOTNULL(combat_turf, "Could not locate an overmap turf for the munitions simulation.")
+
+ var/list/explosive_impacts = list(
+ SHIP_AMMO_IMPACT_HE,
+ SHIP_AMMO_IMPACT_BLASTER,
+ SHIP_AMMO_IMPACT_BUNKERBUSTER,
+ SHIP_AMMO_IMPACT_ZAT
+ )
+ var/tested_munitions = 0
+ var/test_status = UNIT_TEST_PASSED
+
+ // Enumerate typepaths so newly added loadable ammunition is covered automatically.
+ for(var/ammunition_type in subtypesof(/obj/item/ship_ammunition))
+ if(is_abstract(ammunition_type))
+ continue
+
+ var/obj/item/ship_ammunition/ammunition = new ammunition_type
+ if(!ammunition.can_be_loaded())
+ qdel(ammunition)
+ continue
+
+ tested_munitions++
+ if(!ammunition.projectile_type_override)
+ test_status = TEST_FAIL("[ammunition_type] has no explicit physical projectile type to reconstruct after overmap travel.")
+ qdel(ammunition)
+ continue
+
+ // Probes intentionally remain on the overmap and never impact a visitable.
+ if(!ammunition.overmap_behaviour)
+ qdel(ammunition)
+ continue
+
+ var/obj/effect/overmap/visitable/unit_test_combat_target/combat_target = new(combat_turf)
+ var/obj/effect/overmap/projectile/unit_test_combat/overmap_projectile = new(combat_turf)
+ ammunition.forceMove(overmap_projectile)
+ ammunition.fired_projectile_type = ammunition.projectile_type_override
+ overmap_projectile.ammunition = ammunition
+ overmap_projectile.target = combat_target
+
+ if(!overmap_projectile.check_entry())
+ test_status = TEST_FAIL("[ammunition_type] did not enter its overmap combat target.")
+ else if(overmap_projectile.entry_calls != 1 || !overmap_projectile.payload_transferred || !overmap_projectile.reconstructed_projectile)
+ test_status = TEST_FAIL("[ammunition_type] did not reconstruct and transfer its payload exactly once.")
+
+ var/obj/projectile/ship_ammo/reconstructed = overmap_projectile.reconstructed_projectile
+ var/should_explode = reconstructed && ((ammunition.impact_type in explosive_impacts) || max(reconstructed.explosion_strength) > 0)
+ if(should_explode)
+ // Calling the real on_hit() must enqueue an explosion. Remove that queued
+ // work afterward so this test cannot damage the unit-test map.
+ var/queued_explosions = length(SSexplosives.work_queue)
+ var/obj/effect/unit_test_ship_ammo_impact/impact_target = new(combat_turf)
+ reconstructed.forceMove(combat_turf)
+ reconstructed.on_hit(impact_target)
+ if(length(SSexplosives.work_queue) <= queued_explosions)
+ test_status = TEST_FAIL("[ammunition_type] ([ammunition.impact_type]) did not produce an explosion on impact.")
+ else
+ var/list/test_explosions = SSexplosives.work_queue.Copy(queued_explosions + 1)
+ SSexplosives.work_queue -= test_explosions
+ QDEL_LIST(test_explosions)
+ qdel(impact_target)
+
+ qdel(reconstructed)
+ qdel(combat_target)
+ qdel(overmap_projectile)
+
+ if(!tested_munitions)
+ return TEST_FAIL("No loadable ship munitions were discovered.")
+ if(test_status == UNIT_TEST_PASSED)
+ TEST_PASS("All [tested_munitions] loadable ship munitions reconstructed; every explosive impact queued an explosion.")
+ return TRUE
diff --git a/config/example/config.txt b/config/example/config.txt
index a486343be07..e7d4f4c970f 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -608,3 +608,6 @@ CACHE_ASSETS 0
## Tgui payloads larger than the 2kb limit for BYOND topic requests are split into roughly 1kb chunks and sent in sequence.
## This config option limits the maximum chunk count for which the server will accept a payload, default is 32
TGUI_MAX_CHUNK_COUNT 32
+
+# Minimum time, in minutes, that a player must be active in round to count as an active participant. Used for determining vote power for crew transfers on red alert, for example.
+MINIMUM_PARTICIPATION_TIME 15
diff --git a/html/changelogs/Bat-BugsBugsBugs.yml b/html/changelogs/Bat-BugsBugsBugs.yml
deleted file mode 100644
index 778ac700e47..00000000000
--- a/html/changelogs/Bat-BugsBugsBugs.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-author: Batrachophrenoboocosmomachia
-delete-after: True
-changes:
- - bugfix: "Fixes Mechatronic Fabricator's emissive overlay."
- - bugfix: "Fixes Hivenet Manifest hive color assignments."
- - bugfix: "Fixes Crew Manifest color defines."
- - bugfix: "Inbuilt /silicon modular computers no longer broken by EMPs."
- - bugfix: "Fixes energy gun desc_extended inheritances."
diff --git a/html/changelogs/ElorgRHG-unpowered-pda-fix.yml b/html/changelogs/ElorgRHG-unpowered-pda-fix.yml
deleted file mode 100644
index b7ef72724cd..00000000000
--- a/html/changelogs/ElorgRHG-unpowered-pda-fix.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-# Your name.
-author: ElorgRHG
-
-# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
-delete-after: True
-
-# Any changes you've made. See valid prefix list above.
-# INDENT WITH TWO SPACES. NOT TABS. SPACES.
-# SCREW THIS UP AND IT WON'T WORK.
-# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
-# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
-changes:
- - bugfix: "The screens of unpowered PDAs no longer disappear"
diff --git a/html/changelogs/Fenodyree-ICClothesFix.yml b/html/changelogs/Fenodyree-ICClothesFix.yml
deleted file mode 100644
index 16bd82ff0ac..00000000000
--- a/html/changelogs/Fenodyree-ICClothesFix.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-author: Fenodyree
-
-delete-after: True
-
-changes:
- - bugfix: "Fixes circuit printers not being able to print IC clothes."
diff --git a/html/changelogs/Fenodyree-ICSolarBugfix.yml b/html/changelogs/Fenodyree-ICSolarBugfix.yml
deleted file mode 100644
index cd55889ddcb..00000000000
--- a/html/changelogs/Fenodyree-ICSolarBugfix.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-author: Fenodyree
-
-delete-after: True
-
-changes:
- - bugfix: "Fixes solar cells producing 1.5% of their intended output. This was caused by light levels now being between 0-1, not 0-100."
-
diff --git a/html/changelogs/SimpleMaroon-colorablegreatcoat.yml b/html/changelogs/SimpleMaroon-colorablegreatcoat.yml
deleted file mode 100644
index c3e7c95ab48..00000000000
--- a/html/changelogs/SimpleMaroon-colorablegreatcoat.yml
+++ /dev/null
@@ -1,58 +0,0 @@
-################################
-# Example Changelog File
-#
-# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
-#
-# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
-# When it is, any changes listed below will disappear.
-#
-# Valid Prefixes:
-# bugfix
-# - (fixes bugs)
-# wip
-# - (work in progress)
-# qol
-# - (quality of life)
-# soundadd
-# - (adds a sound)
-# sounddel
-# - (removes a sound)
-# rscadd
-# - (adds a feature)
-# rscdel
-# - (removes a feature)
-# imageadd
-# - (adds an image or sprite)
-# imagedel
-# - (removes an image or sprite)
-# spellcheck
-# - (fixes spelling or grammar)
-# experiment
-# - (experimental change)
-# balance
-# - (balance changes)
-# code_imp
-# - (misc internal code change)
-# refactor
-# - (refactors code)
-# config
-# - (makes a change to the config files)
-# admin
-# - (makes changes to administrator tools)
-# server
-# - (miscellaneous changes to server)
-#################################
-
-# Your name.
-author: SimpleMaroon
-
-# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
-delete-after: True
-
-# Any changes you've made. See valid prefix list above.
-# INDENT WITH TWO SPACES. NOT TABS. SPACES.
-# SCREW THIS UP AND IT WON'T WORK.
-# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
-# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
-changes:
- - rscadd: "Added two recolorable greatcoats to the loadout: One that has recolorable belt/buttons and one that doesn't."
diff --git a/html/changelogs/archive/2026-07.yml b/html/changelogs/archive/2026-07.yml
index a810a4e50eb..6eaaf716230 100644
--- a/html/changelogs/archive/2026-07.yml
+++ b/html/changelogs/archive/2026-07.yml
@@ -585,3 +585,50 @@
2026-07-28:
Hellfirejag:
- bugfix: Fixed a bad pointer error with psiblock drugs.
+2026-07-30:
+ Batrachophrenoboocosmomachia:
+ - bugfix: Fixes Mechatronic Fabricator's emissive overlay.
+ - bugfix: Fixes Hivenet Manifest hive color assignments.
+ - bugfix: Fixes Crew Manifest color defines.
+ - bugfix: Inbuilt /silicon modular computers no longer broken by EMPs.
+ - bugfix: Fixes energy gun desc_extended inheritances.
+ ElorgRHG:
+ - bugfix: The screens of unpowered PDAs no longer disappear
+ FabianK3:
+ - rscadd: Added persistence to roller water/fuel/extinguisher tanks.
+ - rscdel: Added water and extinguisher tanks to cargo orders.
+ - balance: Reduce the cargo bounty for water and fuel tanks down to 1.
+ Fenodyree:
+ - bugfix: Fixes C4 effects not correctly getting their parent item.
+ - bugfix: Fixes C4 not being placed correctly.
+ - bugfix: Fixes Dirty Bombs deleting their own radiation source.
+ - bugfix: Fixes Dirty Bomb goop puddles disapearing long before the radiation does.
+ - bugfix: Fixes drinking radioactive waste not irradiating you.
+ - bugfix: Fixes solar cells producing 1.5% of their intended output. This was caused
+ by light levels now being between 0-1, not 0-100.
+ - bugfix: Fixes circuit printers not being able to print IC clothes.
+ Geeves:
+ - rscadd: The Autakh integrated stun baton can now be deployed and used like a normal
+ baton. The ten second cooldown between hits, reduced stats, and nutrition loss
+ for use remains as before.
+ Hellfirejag:
+ - rscadd: Added a new Technomancer Jumpstarter as a traitor uplink item.
+ SimpleMaroon:
+ - rscadd: 'Added two recolorable greatcoats to the loadout: One that has recolorable
+ belt/buttons and one that doesn''t.'
+ kermit:
+ - rscadd: Added a glass repair adhesive to EngiVends for repairing window cracks
+ without having to completely decon/recon a window.
+ - rscadd: Replaces some of the IRL chocolate bars with lore chocolate bars (GetMore
+ chocolate, Readies, an Idris Bar).
+ - rscadd: Adds the chocolate bars (old and new) to commissary restock vendors.
+ mineymonkey:
+ - bugfix: Steel is needed to make the cloning disk properly now.
+2026-07-31:
+ fyni:
+ - rscadd: Updates all references to the Hegemony to the Karszekani Moghes for accents,
+ origins, citizenships and consulars.
+ - rscadd: Add the Kreshwan title to Karszekani consulars.
+ hazelmouse:
+ - rscadd: Implemented a remap of the Machinist Workshop.
+ - rscadd: North-facing platforms now layer correctly over humans.
diff --git a/html/changelogs/fabiank3-persistent-mobile-tanks.yml b/html/changelogs/fabiank3-persistent-mobile-tanks.yml
deleted file mode 100644
index a9bb9012afe..00000000000
--- a/html/changelogs/fabiank3-persistent-mobile-tanks.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-author: FabianK3
-
-delete-after: True
-
-changes:
- - rscadd: "Added persistence to roller water/fuel/extinguisher tanks."
- - rscdel: "Added water and extinguisher tanks to cargo orders."
- - balance: "Reduce the cargo bounty for water and fuel tanks down to 1."
diff --git a/html/changelogs/geeves-autakh_deployable_baton.yml b/html/changelogs/geeves-autakh_deployable_baton.yml
deleted file mode 100644
index f92177e1e92..00000000000
--- a/html/changelogs/geeves-autakh_deployable_baton.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: Geeves
-
-delete-after: True
-
-changes:
- - rscadd: "The Autakh integrated stun baton can now be deployed and used like a normal baton. The ten second cooldown between hits, reduced stats, and nutrition loss for use remains as before."
diff --git a/html/changelogs/hellfirejag-technomancer-jumpstarter.yml b/html/changelogs/hellfirejag-technomancer-jumpstarter.yml
deleted file mode 100644
index 055aa803159..00000000000
--- a/html/changelogs/hellfirejag-technomancer-jumpstarter.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: Hellfirejag
-delete-after: True
-changes:
- - rscadd: "Added a new Technomancer Jumpstarter as a traitor uplink item."
diff --git a/html/changelogs/kermit-chocolate-bars.yml b/html/changelogs/kermit-chocolate-bars.yml
deleted file mode 100644
index 3df2978dca5..00000000000
--- a/html/changelogs/kermit-chocolate-bars.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-author: kermit
-
-delete-after: True
-
-changes:
- - rscadd: "Replaces some of the IRL chocolate bars with lore chocolate bars (GetMore chocolate, Readies, an Idris Bar)."
- - rscadd: "Adds the chocolate bars (old and new) to commissary restock vendors."
-
diff --git a/html/changelogs/kermit-window-repair-glue.yml b/html/changelogs/kermit-window-repair-glue.yml
deleted file mode 100644
index 445b2ac9a08..00000000000
--- a/html/changelogs/kermit-window-repair-glue.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-author: kermit
-
-delete-after: True
-
-changes:
- - rscadd: "Added a glass repair adhesive to EngiVends for repairing window cracks without having to completely decon/recon a window."
-
diff --git a/icons/accent_tags.dmi b/icons/accent_tags.dmi
index 525051b6afc..9adb28dca1b 100644
Binary files a/icons/accent_tags.dmi and b/icons/accent_tags.dmi differ
diff --git a/icons/effects/map_effects.dmi b/icons/effects/map_effects.dmi
index 5a3ff46925b..35948b19781 100644
Binary files a/icons/effects/map_effects.dmi and b/icons/effects/map_effects.dmi differ
diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi
index 955b58289a8..db9b0eb01cf 100644
Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ
diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi
index 4748a4e034e..ba7a78c7baa 100644
Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ
diff --git a/icons/obj/disposals.dmi b/icons/obj/disposals.dmi
index 671c0f68d58..5061123ff23 100644
Binary files a/icons/obj/disposals.dmi and b/icons/obj/disposals.dmi differ
diff --git a/icons/obj/item/clothing/head/ipc/trinary_coif.dmi b/icons/obj/item/clothing/head/ipc/trinary_coif.dmi
index c40d5cb1f69..aa5706016fa 100644
Binary files a/icons/obj/item/clothing/head/ipc/trinary_coif.dmi and b/icons/obj/item/clothing/head/ipc/trinary_coif.dmi differ
diff --git a/icons/obj/item/clothing/head/tcaf_hats.dmi b/icons/obj/item/clothing/head/tcaf_hats.dmi
index 72151e8a3fd..c0c3ef27a24 100644
Binary files a/icons/obj/item/clothing/head/tcaf_hats.dmi and b/icons/obj/item/clothing/head/tcaf_hats.dmi differ
diff --git a/icons/obj/item/clothing/suit/storage/toggle/greatcoat.dmi b/icons/obj/item/clothing/suit/storage/toggle/greatcoat.dmi
index e0256e881a5..db0fd3f443c 100644
Binary files a/icons/obj/item/clothing/suit/storage/toggle/greatcoat.dmi and b/icons/obj/item/clothing/suit/storage/toggle/greatcoat.dmi differ
diff --git a/icons/obj/item/clothing/suit/trinarist_robes.dmi b/icons/obj/item/clothing/suit/trinarist_robes.dmi
index e31a8b7437a..453ffb0e41a 100644
Binary files a/icons/obj/item/clothing/suit/trinarist_robes.dmi and b/icons/obj/item/clothing/suit/trinarist_robes.dmi differ
diff --git a/icons/obj/item/reagent_containers/food/cultural/tajara.dmi b/icons/obj/item/reagent_containers/food/cultural/tajara.dmi
index 25b320a2b73..502c1ce71bb 100644
Binary files a/icons/obj/item/reagent_containers/food/cultural/tajara.dmi and b/icons/obj/item/reagent_containers/food/cultural/tajara.dmi differ
diff --git a/icons/obj/item/reagent_containers/weldpack.dmi b/icons/obj/item/reagent_containers/weldpack.dmi
index a6901e00104..46edef7bdc0 100644
Binary files a/icons/obj/item/reagent_containers/weldpack.dmi and b/icons/obj/item/reagent_containers/weldpack.dmi differ
diff --git a/icons/obj/machinery/research.dmi b/icons/obj/machinery/research.dmi
index 05f9dc1141c..a5c1345fe0a 100644
Binary files a/icons/obj/machinery/research.dmi and b/icons/obj/machinery/research.dmi differ
diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi
index 844b1fce200..d0a07ddec7d 100644
Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ
diff --git a/icons/obj/reagent_dispensers.dmi b/icons/obj/reagent_dispensers.dmi
index 36c90dfebec..d8bbb1e5b96 100644
Binary files a/icons/obj/reagent_dispensers.dmi and b/icons/obj/reagent_dispensers.dmi differ
diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi
index 8fe1cad3e01..a628ae16264 100644
Binary files a/icons/obj/stock_parts.dmi and b/icons/obj/stock_parts.dmi differ
diff --git a/icons/obj/structure/flags.dmi b/icons/obj/structure/flags.dmi
index b8db921131e..60f2e24e101 100644
Binary files a/icons/obj/structure/flags.dmi and b/icons/obj/structure/flags.dmi differ
diff --git a/icons/obj/structure/platforms.dmi b/icons/obj/structure/platforms.dmi
index 0126fe62e87..6de5f0429c6 100644
Binary files a/icons/obj/structure/platforms.dmi and b/icons/obj/structure/platforms.dmi differ
diff --git a/icons/obj/trinary_stave.dmi b/icons/obj/trinary_stave.dmi
index cd516b8a65a..a832c0243f9 100644
Binary files a/icons/obj/trinary_stave.dmi and b/icons/obj/trinary_stave.dmi differ
diff --git a/icons/turf/flooring/circuit.dmi b/icons/turf/flooring/circuit.dmi
index 3617171b977..e73449a87b3 100644
Binary files a/icons/turf/flooring/circuit.dmi and b/icons/turf/flooring/circuit.dmi differ
diff --git a/maps/_common/mapsystem/map.dm b/maps/_common/mapsystem/map.dm
index 63a09be9128..c2deb2230a5 100644
--- a/maps/_common/mapsystem/map.dm
+++ b/maps/_common/mapsystem/map.dm
@@ -84,6 +84,8 @@
/// Camera networks that will show up on the console.
var/list/station_networks = list()
+ /// Z-levels with local, always-on NTNet and camera connectivity, independent of station relays.
+ var/list/always_available_network_levels = list()
/// map of string ids to /datum/holodeck_program instances
var/list/holodeck_programs = list()
@@ -189,6 +191,9 @@
/datum/map/proc/get_network_access(var/network)
return 0
+/datum/map/proc/is_always_available_network_level(var/z_level)
+ return z_level && (z_level in always_available_network_levels)
+
// By default transition randomly to another zlevel
/datum/map/proc/get_transit_zlevel(var/current_z_level)
var/list/candidates = SSatlas.current_map.accessible_z_levels.Copy()
diff --git a/maps/away/away_site/abandoned_industrial/abandoned_industrial_station.dmm b/maps/away/away_site/abandoned_industrial/abandoned_industrial_station.dmm
index 66193d8b2cf..786d613b7ef 100644
--- a/maps/away/away_site/abandoned_industrial/abandoned_industrial_station.dmm
+++ b/maps/away/away_site/abandoned_industrial/abandoned_industrial_station.dmm
@@ -2283,6 +2283,14 @@
/obj/random/dirt_75,
/turf/simulated/floor/airless,
/area/abandoned_industrial_station/exterior)
+"hr" = (
+/obj/random/tool,
+/obj/random/dirt_75,
+/obj/structure/machinery/computer/rdconsole/robotics{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/abandoned_industrial_station/hangar)
"ht" = (
/obj/effect/floor_decal/corner/beige{
dir = 5
@@ -6886,7 +6894,7 @@
/turf/simulated/floor/plating,
/area/abandoned_industrial_station/bridge)
"vX" = (
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
dir = 4;
req_access = null
},
@@ -15992,9 +16000,7 @@
/obj/effect/floor_decal/spline/plain{
dir = 4
},
-/obj/random/tech_supply{
- pixel_x = 5
- },
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/carpet/rubber,
/area/abandoned_industrial_station/hangar)
"YN" = (
@@ -16098,6 +16104,9 @@
pixel_y = -16
},
/obj/random/dirt_75,
+/obj/random/tech_supply{
+ pixel_x = 5
+ },
/turf/simulated/floor/carpet/rubber,
/area/abandoned_industrial_station/hangar)
"Zb" = (
@@ -52583,7 +52592,7 @@ kI
eA
gX
gM
-sw
+hr
Sq
Zv
bX
diff --git a/maps/away/away_site/assunzione/port_volturno/port_volturno.dmm b/maps/away/away_site/assunzione/port_volturno/port_volturno.dmm
index f5035960725..1d04a930851 100644
--- a/maps/away/away_site/assunzione/port_volturno/port_volturno.dmm
+++ b/maps/away/away_site/assunzione/port_volturno/port_volturno.dmm
@@ -7614,16 +7614,13 @@
/turf/simulated/floor/grass1/no_edge,
/area/port_volturno/exterior)
"fjA" = (
-/obj/structure/table/steel,
-/obj/item/flashlight/headlights,
-/obj/item/cell/hyper{
- pixel_x = -4;
- pixel_y = -10
- },
/obj/item/stack/nanopaste{
pixel_x = 8;
pixel_y = -14
},
+/obj/structure/machinery/computer/rdconsole/robotics/terminal{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/port_volturno/interior/robotics)
"fjK" = (
@@ -8700,6 +8697,9 @@
dir = 8
},
/obj/item/storage/toolbox/mechanical,
+/obj/item/cell/hyper{
+ pixel_y = 7
+ },
/turf/simulated/floor/tiled,
/area/port_volturno/interior/robotics)
"fYD" = (
@@ -12462,6 +12462,7 @@
pixel_y = 8
},
/obj/item/clothing/gloves/yellow,
+/obj/item/flashlight/headlights,
/turf/simulated/floor/tiled,
/area/port_volturno/interior/robotics)
"iNR" = (
@@ -15427,7 +15428,7 @@
pixel_y = 24;
density = 0
},
-/turf/simulated/floor/exoplanet/assunzione/no_edge,
+/turf/simulated/floor/exoplanet/assunzione,
/area/port_volturno/interior/witch_hand/bar)
"kQv" = (
/obj/structure/stairs/west,
@@ -19093,7 +19094,7 @@
/turf/simulated/floor/tiled/cargo/brass/full,
/area/port_volturno/interior/chapel)
"ntu" = (
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
req_access = list(219)
},
/obj/structure/machinery/light{
@@ -20786,7 +20787,7 @@
/obj/effect/decal/curb/corner{
dir = 8
},
-/turf/simulated/floor/exoplanet/assunzione/no_edge,
+/turf/simulated/floor/exoplanet/assunzione,
/area/port_volturno/interior/witch_hand/bar)
"owW" = (
/obj/structure/machinery/papershredder{
@@ -21610,6 +21611,10 @@
},
/turf/simulated/floor/tiled/white,
/area/port_volturno/interior/minimart)
+"oWJ" = (
+/obj/structure/machinery/r_n_d/material_silo,
+/turf/simulated/floor/tiled,
+/area/port_volturno/interior/robotics)
"oWV" = (
/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor,
@@ -32557,7 +32562,7 @@
/obj/structure/table/reinforced/wood{
pixel_y = 3
},
-/turf/simulated/floor/exoplanet/assunzione/no_edge,
+/turf/simulated/floor/exoplanet/assunzione,
/area/port_volturno/interior/witch_hand/bar)
"wKA" = (
/obj/effect/decal/cleanable/dirt,
@@ -33804,7 +33809,7 @@
/turf/simulated/floor/tiled/slate,
/area/port_volturno/interior/stafylia)
"xLh" = (
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
req_access = list(219)
},
/obj/random/dirt_75,
@@ -138077,7 +138082,7 @@ rGy
xWS
agK
dvD
-bhN
+oWJ
bhN
bhN
bhN
diff --git a/maps/away/away_site/big_derelict/bigderelict.dmm b/maps/away/away_site/big_derelict/bigderelict.dmm
index 50449835e66..8f9d4b4b5b2 100644
--- a/maps/away/away_site/big_derelict/bigderelict.dmm
+++ b/maps/away/away_site/big_derelict/bigderelict.dmm
@@ -243,7 +243,7 @@
/turf/simulated/floor/tiled/white/airless,
/area/derelict)
"bm" = (
-/obj/structure/machinery/mecha_part_fabricator,
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator,
/obj/effect/floor_decal/corner/purple/diagonal,
/turf/simulated/floor/tiled/white/airless,
/area/derelict)
@@ -757,7 +757,7 @@
/turf/simulated/floor/tiled/dark,
/area/derelict)
"cx" = (
-/obj/structure/machinery/r_n_d/circuit_imprinter,
+/obj/structure/machinery/r_n_d/fabricator/circuit_imprinter,
/obj/effect/floor_decal/corner/purple/diagonal,
/turf/simulated/floor/tiled/white/airless,
/area/derelict)
@@ -771,7 +771,7 @@
/turf/simulated/floor/tiled/white/airless,
/area/derelict)
"cA" = (
-/obj/structure/machinery/r_n_d/protolathe{
+/obj/structure/machinery/r_n_d/fabricator/protolathe{
icon_state = "protolathe_t";
stat = 1
},
@@ -1785,6 +1785,18 @@
/obj/structure/closet/crate/loot,
/turf/simulated/floor/airless,
/area/derelict)
+"DN" = (
+/obj/effect/floor_decal/corner/purple/diagonal,
+/obj/structure/machinery/computer/rdconsole/core{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white/airless,
+/area/derelict)
+"JN" = (
+/obj/effect/floor_decal/corner/purple/diagonal,
+/obj/structure/machinery/r_n_d/material_silo,
+/turf/simulated/floor/tiled/white/airless,
+/area/derelict)
(1,1,1) = {"
fI
@@ -29878,7 +29890,7 @@ bU
bU
bU
bH
-bU
+DN
dO
dO
fk
@@ -30393,7 +30405,7 @@ bU
bU
bH
bU
-bU
+JN
dO
fk
dO
diff --git a/maps/away/away_site/blueriver/blueriver.dmm b/maps/away/away_site/blueriver/blueriver.dmm
index e4610b504ea..5d1bd4ca040 100644
--- a/maps/away/away_site/blueriver/blueriver.dmm
+++ b/maps/away/away_site/blueriver/blueriver.dmm
@@ -368,7 +368,7 @@
/turf/simulated/floor/tiled/white,
/area/bluespaceriver/ship)
"si" = (
-/obj/structure/machinery/r_n_d/protolathe,
+/obj/structure/machinery/r_n_d/fabricator/protolathe,
/obj/item/paper/blueriver/expedition_log_4,
/turf/simulated/floor/tiled/white,
/area/bluespaceriver/ship)
@@ -402,11 +402,11 @@
/turf/simulated/floor/tiled/white,
/area/bluespaceriver/ship)
"tS" = (
-/obj/structure/closet/emcloset,
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/tiled/white,
/area/bluespaceriver/ship)
"uw" = (
-/obj/structure/machinery/r_n_d/circuit_imprinter,
+/obj/structure/machinery/r_n_d/fabricator/circuit_imprinter,
/obj/item/ano_scanner,
/turf/simulated/floor/tiled/white,
/area/bluespaceriver/ship)
diff --git a/maps/away/away_site/first_aurora/first_aurora.dmm b/maps/away/away_site/first_aurora/first_aurora.dmm
index f15d92726ee..9319faf56c7 100644
--- a/maps/away/away_site/first_aurora/first_aurora.dmm
+++ b/maps/away/away_site/first_aurora/first_aurora.dmm
@@ -3102,7 +3102,7 @@
/turf/template_noop,
/area/template_noop)
"kJ" = (
-/obj/structure/machinery/r_n_d/circuit_imprinter,
+/obj/structure/machinery/r_n_d/fabricator/circuit_imprinter,
/turf/simulated/floor/tiled/white/airless,
/area/derelict/hallway/southeast)
"kK" = (
@@ -3248,7 +3248,7 @@
/turf/simulated/floor/tiled/white/airless,
/area/derelict/hallway/southeast)
"ll" = (
-/obj/structure/machinery/mecha_part_fabricator,
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator,
/turf/simulated/floor/tiled/white/airless,
/area/derelict/hallway/southeast)
"lm" = (
@@ -7235,6 +7235,11 @@
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/tiled/white/airless,
/area/derelict/hallway/southeast)
+"CV" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/machinery/r_n_d/material_silo,
+/turf/simulated/floor/tiled/white/airless,
+/area/derelict/hallway/southeast)
"Da" = (
/obj/structure/grille,
/obj/structure/window/reinforced,
@@ -7252,6 +7257,12 @@
"FM" = (
/turf/template_noop,
/area/space)
+"Hn" = (
+/obj/structure/machinery/computer/rdconsole/robotics{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white/airless,
+/area/derelict/hallway/southeast)
"HF" = (
/obj/structure/door_assembly,
/turf/simulated/floor/tiled/white/airless,
@@ -50076,7 +50087,7 @@ BS
BS
kJ
jd
-BS
+CV
lX
ik
aa
@@ -51362,7 +51373,7 @@ kp
ij
ll
Aa
-Aa
+Hn
ik
aa
aa
diff --git a/maps/away/away_site/konyang/point_verdant/point_verdant.dmm b/maps/away/away_site/konyang/point_verdant/point_verdant.dmm
index 186194d531f..8ef358577e0 100644
--- a/maps/away/away_site/konyang/point_verdant/point_verdant.dmm
+++ b/maps/away/away_site/konyang/point_verdant/point_verdant.dmm
@@ -1445,6 +1445,30 @@
/obj/item/stack/material/plasteel/full{
pixel_x = 7
},
+/obj/item/stack/material/glass/full{
+ pixel_x = -7
+ },
+/obj/item/stack/material/glass/full{
+ pixel_x = -7
+ },
+/obj/item/stack/material/glass/full{
+ pixel_x = -7
+ },
+/obj/item/stack/material/glass/full{
+ pixel_x = -7
+ },
+/obj/item/stack/material/steel/full{
+ pixel_x = 7
+ },
+/obj/item/stack/material/steel/full{
+ pixel_x = 7
+ },
+/obj/item/stack/material/steel/full{
+ pixel_x = 7
+ },
+/obj/item/stack/material/steel/full{
+ pixel_x = 7
+ },
/turf/simulated/floor/tiled,
/area/point_verdant/interior/robotics)
"aQV" = (
@@ -22353,7 +22377,7 @@
/turf/simulated/floor/wood,
/area/point_verdant/interior/police)
"mGn" = (
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
req_access = list(219)
},
/obj/structure/machinery/light{
@@ -24957,31 +24981,7 @@
/turf/simulated/floor/tiled,
/area/point_verdant/interior/maint_janitorial)
"olp" = (
-/obj/structure/table/rack/retail_shelf,
-/obj/item/stack/material/steel/full{
- pixel_x = 7
- },
-/obj/item/stack/material/glass/full{
- pixel_x = -7
- },
-/obj/item/stack/material/glass/full{
- pixel_x = -7
- },
-/obj/item/stack/material/glass/full{
- pixel_x = -7
- },
-/obj/item/stack/material/glass/full{
- pixel_x = -7
- },
-/obj/item/stack/material/steel/full{
- pixel_x = 7
- },
-/obj/item/stack/material/steel/full{
- pixel_x = 7
- },
-/obj/item/stack/material/steel/full{
- pixel_x = 7
- },
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/tiled,
/area/point_verdant/interior/robotics)
"olq" = (
@@ -32321,7 +32321,7 @@
/turf/simulated/floor/exoplanet/water/shallow/konyang/no_smooth,
/area/point_verdant/interior/offices/kaf)
"sKK" = (
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
req_access = list(219)
},
/obj/random/dirt_75,
@@ -41913,6 +41913,9 @@
/obj/structure/machinery/light{
dir = 4
},
+/obj/structure/machinery/computer/rdconsole/robotics{
+ dir = 8
+ },
/turf/simulated/floor/tiled,
/area/point_verdant/interior/robotics)
"yhQ" = (
diff --git a/maps/away/away_site/overgrown_mining_station/overgrown_mining_station.dmm b/maps/away/away_site/overgrown_mining_station/overgrown_mining_station.dmm
index 8fc0f76dee6..964b1c3aa43 100644
--- a/maps/away/away_site/overgrown_mining_station/overgrown_mining_station.dmm
+++ b/maps/away/away_site/overgrown_mining_station/overgrown_mining_station.dmm
@@ -1147,7 +1147,7 @@
/area/overgrown_mining_station)
"yw" = (
/obj/structure/platform,
-/obj/structure/machinery/mecha_part_fabricator,
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator,
/turf/simulated/floor/tiled/dark/full/airless,
/area/overgrown_mining_station)
"yy" = (
@@ -1770,6 +1770,10 @@
},
/turf/simulated/floor/tiled/airless,
/area/overgrown_mining_station)
+"Mc" = (
+/obj/structure/machinery/r_n_d/material_silo,
+/turf/simulated/floor/tiled/dark/full/airless,
+/area/overgrown_mining_station)
"Mh" = (
/obj/structure/table/reinforced/wood,
/obj/item/trash/can,
@@ -2089,6 +2093,7 @@
/area/overgrown_mining_station)
"Uu" = (
/obj/structure/platform,
+/obj/structure/machinery/computer/rdconsole/robotics,
/turf/simulated/floor/tiled/dark/full/airless,
/area/overgrown_mining_station)
"UA" = (
@@ -42777,7 +42782,7 @@ eK
Xe
Fg
oj
-oj
+Mc
qK
Uj
jm
diff --git a/maps/away/away_site/racers/racers.dmm b/maps/away/away_site/racers/racers.dmm
index bfe8f96076d..c4b9d990e7a 100644
--- a/maps/away/away_site/racers/racers.dmm
+++ b/maps/away/away_site/racers/racers.dmm
@@ -676,6 +676,10 @@
/obj/structure/machinery/atm,
/turf/simulated/wall/rusty,
/area/racers)
+"cHq" = (
+/obj/structure/machinery/pipedispenser,
+/turf/simulated/floor/plating,
+/area/racers)
"cJe" = (
/obj/structure/reagent_dispensers/cookingoil,
/turf/simulated/floor/tiled/freezer{
@@ -864,7 +868,7 @@
/turf/simulated/floor/plating,
/area/racers)
"dNX" = (
-/obj/structure/machinery/mecha_part_fabricator,
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator,
/obj/structure/machinery/light/small/red{
dir = 4
},
@@ -1369,13 +1373,7 @@
/turf/template_noop,
/area/space)
"gyV" = (
-/obj/item/stack/material/steel{
- amount = 50
- },
-/obj/item/stack/material/plasteel{
- amount = 10
- },
-/obj/structure/table/rack,
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/plating,
/area/racers)
"gAI" = (
@@ -1395,6 +1393,16 @@
},
/turf/simulated/floor/holofloor/tiled,
/area/racers)
+"gOv" = (
+/obj/structure/table/rack,
+/obj/item/stack/material/plasteel{
+ amount = 10
+ },
+/obj/item/stack/material/steel{
+ amount = 50
+ },
+/turf/simulated/floor/plating,
+/area/racers)
"gPD" = (
/obj/structure/largecrate/hoverpod,
/obj/effect/floor_decal/industrial/outline/yellow,
@@ -2936,6 +2944,13 @@
},
/turf/simulated/floor/carpet/rubber,
/area/racers)
+"okb" = (
+/obj/structure/machinery/atmospherics/portables_connector{
+ dir = 1
+ },
+/obj/item/laser_pointer/red,
+/turf/simulated/floor/plating,
+/area/racers)
"okF" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/remains/robot,
@@ -3049,8 +3064,9 @@
/turf/simulated/floor/plating,
/area/racers)
"oNS" = (
-/obj/structure/machinery/pipedispenser,
-/obj/item/laser_pointer/red,
+/obj/structure/machinery/computer/rdconsole/robotics{
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/racers)
"oQI" = (
@@ -41187,7 +41203,7 @@ dGi
owK
wUg
vhm
-iVB
+okb
oNS
qWG
iVB
@@ -41955,7 +41971,7 @@ qiM
xjB
jzb
xjB
-xjB
+gOv
xjB
xjB
gyV
@@ -42216,7 +42232,7 @@ qVo
jjB
xjB
dNX
-xjB
+cHq
hRn
xjB
mDd
diff --git a/maps/away/scenarios/enviro_testing_facility/enviro_testing_facility_submaps_main.dmm b/maps/away/scenarios/enviro_testing_facility/enviro_testing_facility_submaps_main.dmm
index 99b84128f0c..89200c1029c 100644
--- a/maps/away/scenarios/enviro_testing_facility/enviro_testing_facility_submaps_main.dmm
+++ b/maps/away/scenarios/enviro_testing_facility/enviro_testing_facility_submaps_main.dmm
@@ -1106,6 +1106,12 @@
/obj/random/tech_supply,
/turf/template_noop,
/area/template_noop)
+"bcW" = (
+/obj/structure/machinery/computer/rdconsole/robotics{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/enviro_testing_facility/inside/engineering/mech_lab)
"bde" = (
/obj/structure/bed/stool/chair,
/obj/random/dirt_75,
@@ -2445,6 +2451,12 @@
},
/turf/simulated/floor/tiled,
/area/enviro_testing_facility/inside/control/offices)
+"cqI" = (
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/enviro_testing_facility/inside/engineering/mech_lab)
"cqK" = (
/obj/effect/map_effect/marker/mapmanip/submap/extract/enviro_testing_facility/misc/science_storage,
/turf/template_noop,
@@ -3506,6 +3518,9 @@
/obj/random/dirt_75,
/turf/simulated/floor/exoplanet/crystal,
/area/template_noop)
+"dtW" = (
+/turf/simulated/floor/tiled/dark/full,
+/area/enviro_testing_facility/inside/engineering/mech_lab)
"dup" = (
/obj/effect/floor_decal/industrial/hatch_door/red{
dir = 1
@@ -4020,7 +4035,7 @@
/turf/simulated/floor/tiled/dark,
/area/enviro_testing_facility/inside/engineering/reactors)
"dVz" = (
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
dir = 8
},
/turf/simulated/floor/tiled/dark/full,
@@ -5822,7 +5837,7 @@
/turf/simulated/floor/carpet/green,
/area/enviro_testing_facility/inside/medical/chief_office)
"fQy" = (
-/obj/structure/machinery/r_n_d/circuit_imprinter,
+/obj/structure/machinery/r_n_d/fabricator/circuit_imprinter,
/turf/simulated/floor/carpet/rubber,
/area/enviro_testing_facility/inside/engineering/mech_lab)
"fQJ" = (
@@ -6686,7 +6701,7 @@
/turf/simulated/floor/tiled/white,
/area/enviro_testing_facility/inside/research/meeting)
"gBG" = (
-/obj/structure/machinery/r_n_d/protolathe,
+/obj/structure/machinery/r_n_d/fabricator/protolathe,
/obj/effect/floor_decal/spline/plain{
dir = 4
},
@@ -10752,6 +10767,7 @@
pixel_x = 8;
pixel_y = 11
},
+/obj/item/stack/material/steel/full,
/turf/simulated/floor/carpet/rubber,
/area/enviro_testing_facility/inside/engineering/mech_lab)
"kIM" = (
@@ -10909,11 +10925,11 @@
/area/enviro_testing_facility/inside/research/rnd)
"kSl" = (
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/item/stack/material/steel/full,
/obj/random/dirt_75,
/obj/structure/machinery/alarm/north{
req_one_access = null
},
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/plating,
/area/enviro_testing_facility/inside/engineering/mech_lab)
"kUe" = (
@@ -11587,7 +11603,7 @@
/turf/simulated/floor/tiled/dark,
/area/enviro_testing_facility/inside/engineering/reactors)
"lDw" = (
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
dir = 4
},
/turf/simulated/floor/tiled/dark/full,
@@ -11600,10 +11616,10 @@
/turf/simulated/floor/reinforced,
/area/enviro_testing_facility/inside/security/armory)
"lDP" = (
-/obj/structure/table/steel,
/obj/effect/floor_decal/corner/brown{
dir = 5
},
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/tiled,
/area/enviro_testing_facility/inside/engineering/mech_lab)
"lDW" = (
@@ -15696,7 +15712,7 @@
/turf/simulated/floor/tiled/dark,
/area/enviro_testing_facility/inside/engineering/reactors)
"pMv" = (
-/obj/structure/machinery/r_n_d/circuit_imprinter,
+/obj/structure/machinery/r_n_d/fabricator/circuit_imprinter,
/obj/effect/floor_decal/spline/plain{
dir = 9
},
@@ -16463,7 +16479,7 @@
/turf/simulated/floor/tiled/dark,
/area/enviro_testing_facility/inside/security/storage)
"qDv" = (
-/obj/structure/machinery/r_n_d/protolathe,
+/obj/structure/machinery/r_n_d/fabricator/protolathe,
/turf/simulated/floor/carpet/rubber,
/area/enviro_testing_facility/inside/engineering/mech_lab)
"qDB" = (
@@ -17487,6 +17503,7 @@
dir = 1
},
/obj/random/dirt_75,
+/obj/structure/machinery/computer/rdconsole/robotics,
/turf/simulated/floor/plating,
/area/enviro_testing_facility/inside/engineering/mech_lab)
"rOm" = (
@@ -21384,10 +21401,6 @@
dir = 9
},
/obj/structure/table/steel,
-/obj/item/clothing/under/medical_gown/white{
- pixel_x = 5;
- pixel_y = 8
- },
/turf/simulated/floor/reinforced,
/area/enviro_testing_facility/inside/research/electronics)
"vKp" = (
@@ -39367,7 +39380,7 @@ duD
pos
kSl
toG
-dVz
+dtW
dVz
jdE
dVz
@@ -39569,7 +39582,7 @@ duD
pos
rNI
toG
-ydD
+cqI
ydD
ydD
jTa
@@ -42601,7 +42614,7 @@ pif
orb
lDw
lDw
-eWD
+bcW
lDw
lDw
gPy
diff --git a/maps/away/scenarios/nuclear_silo/nuclear_silo.dmm b/maps/away/scenarios/nuclear_silo/nuclear_silo.dmm
index 354ef16d7fe..5122d1e7fad 100644
--- a/maps/away/scenarios/nuclear_silo/nuclear_silo.dmm
+++ b/maps/away/scenarios/nuclear_silo/nuclear_silo.dmm
@@ -64,6 +64,7 @@
/area/nuclear_silo/outside/cave/bunker)
"ai" = (
/obj/random/dirt_75,
+/obj/structure/heavy_vehicle_frame,
/turf/simulated/floor/carpet/rubber,
/area/nuclear_silo/lower_level/maintenance/east/robotics_bay)
"aj" = (
@@ -7357,6 +7358,7 @@
/obj/random/dirt_75,
/obj/random/dirt_75,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/plating,
/area/nuclear_silo/lower_level/maintenance/east/robotics_bay)
"qs" = (
@@ -12427,7 +12429,7 @@
/turf/simulated/floor/exoplanet/barren,
/area/nuclear_silo/outside/buildings/town)
"Bu" = (
-/obj/structure/heavy_vehicle_frame,
+/obj/structure/machinery/computer/rdconsole/robotics,
/turf/simulated/floor/carpet/rubber,
/area/nuclear_silo/lower_level/maintenance/east/robotics_bay)
"Bv" = (
@@ -18489,7 +18491,7 @@
/turf/simulated/floor/plating,
/area/nuclear_silo/lower_level/maintenance/engimed)
"Pb" = (
-/obj/structure/machinery/mecha_part_fabricator,
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator,
/turf/simulated/floor/plating,
/area/nuclear_silo/lower_level/maintenance/east/robotics_bay)
"Pc" = (
diff --git a/maps/away/ships/biesel/tcaf_corvette/tcaf_corvette.dmm b/maps/away/ships/biesel/tcaf_corvette/tcaf_corvette.dmm
index 93eb4c0db5a..501dd42b5e1 100644
--- a/maps/away/ships/biesel/tcaf_corvette/tcaf_corvette.dmm
+++ b/maps/away/ships/biesel/tcaf_corvette/tcaf_corvette.dmm
@@ -2463,9 +2463,6 @@
dir = 8
},
/obj/effect/floor_decal/corner/brown/diagonal,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
},
@@ -2474,6 +2471,9 @@
d2 = 8;
icon_state = "1-8"
},
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
/turf/simulated/floor/tiled/gunmetal,
/area/tcaf_corvette/workshop)
"iM" = (
@@ -3552,7 +3552,7 @@
/turf/simulated/floor/tiled,
/area/tcaf_corvette/lounge)
"mT" = (
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
dir = 8;
req_access = list(111)
},
@@ -4320,6 +4320,7 @@
/obj/structure/machinery/mech_recharger,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/reagent_dispensers/fueltank,
/turf/simulated/floor/tiled/gunmetal,
/area/tcaf_corvette/workshop)
"pJ" = (
@@ -9973,12 +9974,11 @@
/obj/structure/machinery/alarm/south{
req_one_access = list(111)
},
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
- },
/obj/structure/platform{
dir = 8
},
+/obj/effect/floor_decal/industrial/outline/operations,
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/tiled/gunmetal,
/area/tcaf_corvette/workshop)
"MG" = (
@@ -12331,10 +12331,11 @@
/turf/simulated/floor/tiled/dark,
/area/tcaf_corvette/autocannon)
"Wq" = (
-/obj/structure/reagent_dispensers/fueltank,
-/obj/effect/floor_decal/industrial/outline/operations,
-/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/light/small,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/machinery/computer/rdconsole/robotics{
+ dir = 8
+ },
/turf/simulated/floor/tiled/gunmetal/full,
/area/tcaf_corvette/workshop)
"Wt" = (
diff --git a/maps/away/ships/golden_deep/golden_deep.dmm b/maps/away/ships/golden_deep/golden_deep.dmm
index 1a27615ac58..f56af383b1f 100644
--- a/maps/away/ships/golden_deep/golden_deep.dmm
+++ b/maps/away/ships/golden_deep/golden_deep.dmm
@@ -119,7 +119,7 @@
"aB" = (
/obj/structure/ship_weapon_dummy/barrel,
/turf/simulated/floor/airless,
-/area/space)
+/area/golden_deep/starboard_dock)
"aC" = (
/obj/structure/machinery/door/airlock/multi_tile/glass{
door_color = "#8c792e";
@@ -2494,6 +2494,10 @@
/obj/item/assembly/prox_sensor{
pixel_x = 5
},
+/obj/item/paint_sprayer{
+ pixel_y = 5;
+ pixel_x = 2
+ },
/turf/simulated/floor/tiled/dark/full,
/area/golden_deep/workshop)
"kw" = (
@@ -2885,7 +2889,7 @@
"lY" = (
/obj/structure/ship_weapon_dummy,
/turf/simulated/floor/airless,
-/area/space)
+/area/golden_deep/starboard_dock)
"mg" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
@@ -5733,7 +5737,7 @@
},
/obj/structure/disposalpipe/trunk,
/turf/simulated/floor/airless,
-/area/space)
+/area/golden_deep/portmaints)
"yh" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
@@ -5806,8 +5810,8 @@
/area/golden_deep/eva)
"yt" = (
/obj/structure/lattice/catwalk/indoor,
-/turf/simulated/open/airless,
-/area/space)
+/turf/space/dynamic,
+/area/golden_deep/starboard_dock)
"yz" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 8
@@ -7059,7 +7063,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
},
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
req_access = list(229, 217)
},
/obj/random/dirt_75,
@@ -9089,11 +9093,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 10
},
-/obj/structure/table/reinforced/steel,
-/obj/item/paint_sprayer{
- pixel_y = 5;
- pixel_x = 2
- },
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/tiled/dark/full,
/area/golden_deep/workshop)
"LD" = (
@@ -9476,7 +9476,7 @@
/obj/structure/lattice/catwalk,
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/airless,
-/area/space)
+/area/golden_deep/portmaints)
"Ns" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 9
@@ -11373,8 +11373,8 @@
"UI" = (
/obj/structure/ship_weapon_dummy,
/obj/structure/lattice/catwalk/indoor,
-/turf/simulated/open/airless,
-/area/space)
+/turf/space/dynamic,
+/area/golden_deep/starboard_dock)
"UM" = (
/turf/simulated/wall/shuttle/dark/cardinal/closet_gold,
/area/golden_deep/guest)
@@ -12399,8 +12399,10 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 8
},
-/obj/structure/machinery/mech_recharger,
/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/structure/machinery/computer/rdconsole/robotics{
+ dir = 4
+ },
/obj/random/dirt_75,
/turf/simulated/floor/tiled/dark/full,
/area/golden_deep/workshop)
diff --git a/maps/away/ships/himeo/himeo_patrol_ship_submaps.dmm b/maps/away/ships/himeo/himeo_patrol_ship_submaps.dmm
index 4d301041ea5..2ec938ce8cb 100644
--- a/maps/away/ships/himeo/himeo_patrol_ship_submaps.dmm
+++ b/maps/away/ships/himeo/himeo_patrol_ship_submaps.dmm
@@ -217,7 +217,7 @@
/turf/simulated/floor/carpet/rubber,
/area/template_noop)
"kp" = (
-/obj/structure/closet/crate/loot,
+/obj/structure/reagent_dispensers/fueltank,
/turf/simulated/floor/carpet/rubber,
/area/template_noop)
"kE" = (
@@ -319,7 +319,7 @@
/turf/simulated/floor/carpet/rubber,
/area/template_noop)
"py" = (
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
req_access = null;
dir = 1
},
@@ -332,7 +332,6 @@
/turf/simulated/floor/carpet/rubber,
/area/template_noop)
"qm" = (
-/obj/structure/closet/crate/loot,
/obj/random/dirt_75,
/obj/structure/machinery/alarm/south{
req_access = list(253);
@@ -342,6 +341,9 @@
dir = 1;
level = 2
},
+/obj/structure/machinery/computer/rdconsole/robotics{
+ dir = 1
+ },
/turf/simulated/floor/carpet/rubber,
/area/template_noop)
"qx" = (
@@ -532,8 +534,8 @@
/turf/simulated/floor/carpet/rubber,
/area/template_noop)
"Ab" = (
-/obj/structure/reagent_dispensers/fueltank,
/obj/random/dirt_75,
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/carpet/rubber,
/area/template_noop)
"Ae" = (
@@ -920,12 +922,12 @@
/turf/simulated/floor/tiled/dark/full,
/area/template_noop)
"Vn" = (
-/obj/structure/closet/crate/drop,
/obj/item/paint_sprayer,
/obj/item/mmi/digital/posibrain,
/obj/item/stack/nanopaste,
/obj/item/stack/nanopaste,
/obj/item/stack/nanopaste,
+/obj/structure/closet/crate/loot,
/turf/simulated/floor/carpet/rubber,
/area/template_noop)
"Wv" = (
diff --git a/maps/away/ships/iac/iac_rescue_ship.dmm b/maps/away/ships/iac/iac_rescue_ship.dmm
index c1190809788..398c17de25b 100644
--- a/maps/away/ships/iac/iac_rescue_ship.dmm
+++ b/maps/away/ships/iac/iac_rescue_ship.dmm
@@ -6900,7 +6900,7 @@
/turf/simulated/floor/tiled/dark,
/area/ship/iac_rescue_ship/custodial)
"pHr" = (
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
req_access = list(211)
},
/obj/effect/floor_decal/spline/plain/cee{
@@ -7176,6 +7176,7 @@
"qpf" = (
/obj/structure/machinery/firealarm/west,
/obj/effect/floor_decal/industrial/warning,
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor,
/area/ship/iac_rescue_ship/machinist)
"qsF" = (
@@ -7672,6 +7673,9 @@
pixel_x = 22;
pixel_y = 4
},
+/obj/structure/closet/crate/bin{
+ name = "trashbin"
+ },
/turf/simulated/floor/tiled,
/area/ship/iac_rescue_ship/machinist)
"rBa" = (
@@ -7767,9 +7771,6 @@
/turf/simulated/floor/tiled/dark/full,
/area/ship/iac_rescue_ship/bridge)
"rMI" = (
-/obj/structure/closet/crate/bin{
- name = "trashbin"
- },
/obj/effect/floor_decal/corner/black{
dir = 5
},
@@ -7779,6 +7780,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/black{
dir = 5
},
+/obj/structure/machinery/computer/rdconsole/robotics/terminal{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/ship/iac_rescue_ship/machinist)
"rNe" = (
diff --git a/maps/away/ships/konyang/kasf_ship/kasf_ship.dmm b/maps/away/ships/konyang/kasf_ship/kasf_ship.dmm
index c1aef3b8141..1c0080f7a16 100644
--- a/maps/away/ships/konyang/kasf_ship/kasf_ship.dmm
+++ b/maps/away/ships/konyang/kasf_ship/kasf_ship.dmm
@@ -637,8 +637,6 @@
/area/ship/kasf_corvette/starboardthrust)
"dY" = (
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/machinery/mech_recharger,
-/obj/effect/decal/cleanable/blood/oil,
/obj/structure/machinery/button/remote/blast_door{
dir = 4;
pixel_x = 24;
@@ -647,9 +645,8 @@
name = "Mechbay Garage Shutters";
req_one_access = list(218)
},
-/mob/living/heavy_vehicle/premade/light/recon{
- desc = "A light and nimble recon exosuit bearing the colour scheme of the Konyang Armed Forces, evidently a hand-me-down from the Solarian Armed Forces.";
- e_color = "#767e8c"
+/obj/structure/machinery/computer/rdconsole/robotics/terminal{
+ dir = 1
},
/turf/simulated/floor/carpet/rubber,
/area/ship/kasf_corvette/engie)
@@ -1096,6 +1093,11 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/machinery/mech_recharger,
/obj/structure/machinery/light,
+/mob/living/heavy_vehicle/premade/light/recon{
+ desc = "A light and nimble recon exosuit bearing the colour scheme of the Konyang Armed Forces, evidently a hand-me-down from the Solarian Armed Forces.";
+ e_color = "#767e8c"
+ },
+/obj/effect/decal/cleanable/blood/oil,
/turf/simulated/floor/carpet/rubber,
/area/ship/kasf_corvette/engie)
"gu" = (
@@ -5411,7 +5413,6 @@
/turf/simulated/floor/plating,
/area/ship/kasf_corvette/armory)
"EY" = (
-/obj/structure/table/steel,
/obj/effect/floor_decal/corner/orange/full{
dir = 4
},
@@ -5425,13 +5426,8 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/item/reagent_containers/weldpack{
- pixel_y = 14;
- pixel_x = 6
- },
-/obj/item/storage/box/lights/mixed{
- pixel_y = 12;
- pixel_x = -6
+/obj/structure/machinery/vending/robotics{
+ req_access = null
},
/turf/simulated/floor/tiled/dark/full,
/area/ship/kasf_corvette/engie)
@@ -6279,10 +6275,8 @@
/turf/simulated/wall/shuttle/space_ship/mercenary,
/area/shuttle/kasf_shuttle)
"Jn" = (
-/obj/structure/machinery/vending/robotics{
- req_access = null
- },
/obj/effect/floor_decal/industrial/outline/operations,
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/carpet/rubber,
/area/ship/kasf_corvette/engie)
"Jq" = (
@@ -6427,7 +6421,7 @@
/turf/simulated/floor/carpet/rubber,
/area/ship/kasf_corvette/cic)
"Ko" = (
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
req_access = null
},
/obj/structure/machinery/light{
@@ -8582,6 +8576,14 @@
icon_state = "0-2"
},
/obj/item/blueprints,
+/obj/item/storage/box/lights/mixed{
+ pixel_y = 12;
+ pixel_x = -6
+ },
+/obj/item/reagent_containers/weldpack{
+ pixel_y = 14;
+ pixel_x = 6
+ },
/turf/simulated/floor/tiled/dark/full,
/area/ship/kasf_corvette/engie)
"Xu" = (
diff --git a/maps/away/ships/lone_spacer/lone_spacer_submaps.dmm b/maps/away/ships/lone_spacer/lone_spacer_submaps.dmm
index dae7b2bbb3d..ccee1cd86df 100644
--- a/maps/away/ships/lone_spacer/lone_spacer_submaps.dmm
+++ b/maps/away/ships/lone_spacer/lone_spacer_submaps.dmm
@@ -89,20 +89,8 @@
pixel_y = -1;
req_access = list(243)
},
-/obj/structure/table/rack/folding_table,
-/obj/item/storage/box/masks{
- pixel_x = -6;
- pixel_y = 12
- },
-/obj/item/storage/box/gloves{
- pixel_x = -6;
- pixel_y = 1
- },
-/obj/item/stack/nanopaste{
- pixel_y = 4;
- pixel_x = 8
- },
/obj/effect/decal/cleanable/dirt,
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/tiled/dark/full,
/area/shuttle/lone_spacer/storage)
"k" = (
@@ -110,8 +98,10 @@
/obj/structure/machinery/light/small{
dir = 4
},
-/obj/structure/closet/crate/loot,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/machinery/computer/rdconsole/robotics/terminal{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark/full,
/area/shuttle/lone_spacer/storage)
"l" = (
@@ -180,6 +170,18 @@
/obj/item/robot_parts/r_arm,
/obj/effect/decal/cleanable/dirt,
/obj/item/paint_sprayer,
+/obj/item/storage/box/masks{
+ pixel_x = -6;
+ pixel_y = 12
+ },
+/obj/item/storage/box/gloves{
+ pixel_x = -6;
+ pixel_y = 1
+ },
+/obj/item/stack/nanopaste{
+ pixel_y = 4;
+ pixel_x = 8
+ },
/turf/simulated/floor/tiled/dark/full,
/area/shuttle/lone_spacer/storage)
"t" = (
@@ -384,7 +386,7 @@
/area/shuttle/lone_spacer/storage)
"O" = (
/obj/effect/floor_decal/industrial/outline/operations,
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
req_access = null;
dir = 1
},
@@ -435,6 +437,13 @@
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/tiled/dark/full,
/area/shuttle/lone_spacer/storage)
+"U" = (
+/obj/structure/sign/poster{
+ pixel_x = 32
+ },
+/obj/structure/closet/crate/loot,
+/turf/simulated/floor/tiled/dark/full,
+/area/shuttle/lone_spacer/storage)
"W" = (
/obj/structure/sink/kitchen{
dir = 8;
@@ -727,7 +736,7 @@ a
a
r
W
-B
+U
k
a
a
diff --git a/maps/away/ships/pra/headmaster/headmaster_ship.dmm b/maps/away/ships/pra/headmaster/headmaster_ship.dmm
index b82f5462152..8d7142c8287 100644
--- a/maps/away/ships/pra/headmaster/headmaster_ship.dmm
+++ b/maps/away/ships/pra/headmaster/headmaster_ship.dmm
@@ -1557,6 +1557,31 @@
temperature = 278.15
},
/area/headmaster_ship/hallway_lower)
+"eW" = (
+/obj/effect/floor_decal/corner/red/diagonal,
+/obj/random/dirt_75,
+/obj/item/spaceflare{
+ pixel_y = 3;
+ pixel_x = 6
+ },
+/obj/item/spaceflare{
+ pixel_y = 1;
+ pixel_x = -5
+ },
+/obj/item/tank/hydrogen/shuttle{
+ pixel_x = 3;
+ pixel_y = 8
+ },
+/obj/item/tank/hydrogen/shuttle{
+ pixel_x = -3;
+ pixel_y = 5
+ },
+/obj/structure/table/rack,
+/obj/effect/floor_decal/industrial/outline/grey,
+/turf/simulated/floor/tiled/dark{
+ temperature = 278.15
+ },
+/area/headmaster_ship/hangar)
"eZ" = (
/obj/structure/closet/crate/hydroponics,
/obj/item/reagent_containers/glass/bucket,
@@ -4984,6 +5009,14 @@
temperature = 278.15
},
/area/headmaster_ship/cic)
+"sF" = (
+/obj/effect/floor_decal/corner/red/diagonal,
+/obj/random/dirt_75,
+/obj/structure/machinery/r_n_d/material_silo,
+/turf/simulated/floor/tiled/dark{
+ temperature = 278.15
+ },
+/area/headmaster_ship/hangar)
"sK" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
@@ -7632,25 +7665,10 @@
pixel_y = -32;
stand_icon = null
},
-/obj/structure/table/rack,
-/obj/effect/floor_decal/industrial/outline/grey,
-/obj/item/tank/hydrogen/shuttle{
- pixel_x = -3;
- pixel_y = 5
- },
-/obj/item/tank/hydrogen/shuttle{
- pixel_x = 3;
- pixel_y = 8
- },
-/obj/item/spaceflare{
- pixel_y = 1;
- pixel_x = -5
- },
-/obj/item/spaceflare{
- pixel_y = 3;
- pixel_x = 6
- },
/obj/random/dirt_75,
+/obj/structure/machinery/computer/rdconsole/robotics/terminal{
+ dir = 1
+ },
/turf/simulated/floor/tiled/dark{
temperature = 278.15
},
@@ -10341,7 +10359,7 @@
},
/area/headmaster_ship/helm)
"QS" = (
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
dir = 8;
req_access = list(209)
},
@@ -46485,7 +46503,7 @@ jG
aT
us
nA
-My
+eW
pf
rm
QL
@@ -46999,7 +47017,7 @@ aT
aT
BA
kZ
-My
+sF
pf
nD
QL
diff --git a/maps/away/ships/sadar_scout/sadar_scout.dmm b/maps/away/ships/sadar_scout/sadar_scout.dmm
index 18e6377083e..c82fa2198ae 100644
--- a/maps/away/ships/sadar_scout/sadar_scout.dmm
+++ b/maps/away/ships/sadar_scout/sadar_scout.dmm
@@ -760,7 +760,7 @@
/turf/simulated/floor/airless{
icon_state = "solarpanel"
},
-/area/space)
+/area/ship/sadar_scout/exterior)
"fw" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 5
@@ -868,7 +868,7 @@
/area/ship/sadar_scout/forehall)
"gu" = (
/turf/simulated/floor/airless,
-/area/space)
+/area/ship/sadar_scout/exterior)
"gA" = (
/obj/structure/table/steel,
/obj/item/storage/firstaid/o2{
@@ -1199,7 +1199,7 @@
icon_state = "4-8"
},
/turf/simulated/floor/airless,
-/area/space)
+/area/ship/sadar_scout/exterior)
"iG" = (
/turf/simulated/wall/shuttle/space_ship/mercenary,
/area/ship/sadar_scout/mainhall)
@@ -1788,14 +1788,8 @@
/turf/simulated/floor/plating,
/area/ship/sadar_scout/thrusters)
"nq" = (
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/structure/cable/yellow{
- icon_state = "2-4"
- },
-/turf/simulated/floor/airless,
-/area/space)
+/turf/space/dynamic,
+/area/ship/sadar_scout/exterior)
"nr" = (
/obj/structure/machinery/appliance/cooker/stove,
/obj/structure/machinery/light/colored/decayed/dimmed{
@@ -2587,7 +2581,7 @@
/turf/simulated/floor/airless{
icon_state = "solarpanel"
},
-/area/space)
+/area/ship/sadar_scout/exterior)
"tp" = (
/obj/effect/floor_decal/industrial/outline/blue,
/obj/structure/machinery/portable_atmospherics/canister/oxygen,
@@ -2626,10 +2620,6 @@
},
/turf/simulated/floor/plating,
/area/ship/sadar_scout/eva)
-"ts" = (
-/obj/structure/lattice/catwalk,
-/turf/space/dynamic,
-/area/space)
"tt" = (
/obj/structure/lattice/catwalk,
/obj/structure/bed/handrail,
@@ -2993,7 +2983,7 @@
/turf/simulated/floor/airless{
icon_state = "solarpanel"
},
-/area/space)
+/area/ship/sadar_scout/exterior)
"vO" = (
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/railing/mapped,
@@ -3320,12 +3310,6 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/ship/sadar_scout/eva)
-"yg" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/turf/simulated/floor/airless,
-/area/space)
"yi" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -3485,7 +3469,7 @@
/turf/simulated/floor/airless{
icon_state = "solarpanel"
},
-/area/space)
+/area/ship/sadar_scout/exterior)
"zq" = (
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/machinery/alarm/north{
@@ -3572,7 +3556,7 @@
icon_state = "4-8"
},
/turf/simulated/floor/airless,
-/area/space)
+/area/ship/sadar_scout/exterior)
"Aj" = (
/obj/effect/floor_decal/corner_wide/brown/diagonal,
/obj/structure/bed/handrail{
@@ -4284,7 +4268,7 @@
icon_state = "4-8"
},
/turf/simulated/floor/airless,
-/area/space)
+/area/ship/sadar_scout/exterior)
"Ft" = (
/obj/structure/cable{
icon_state = "2-8"
@@ -4401,7 +4385,7 @@
icon_state = "4-8"
},
/turf/simulated/floor/airless,
-/area/space)
+/area/ship/sadar_scout/exterior)
"GR" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 8
@@ -4508,7 +4492,7 @@
/turf/simulated/floor/airless{
icon_state = "solarpanel"
},
-/area/space)
+/area/ship/sadar_scout/exterior)
"Hy" = (
/obj/structure/cable/yellow{
icon_state = "2-4"
@@ -4916,7 +4900,7 @@
icon_state = "2-8"
},
/turf/simulated/floor/airless,
-/area/space)
+/area/ship/sadar_scout/exterior)
"KN" = (
/obj/structure/lattice/catwalk,
/obj/structure/bed/handrail{
@@ -5259,10 +5243,6 @@
/obj/structure/grille,
/turf/template_noop,
/area/ship/sadar_scout/exterior)
-"Nm" = (
-/obj/structure/lattice,
-/turf/simulated/floor/airless,
-/area/space)
"No" = (
/obj/structure/machinery/computer/ship/targeting/terminal,
/turf/simulated/floor/tiled/dark/full,
@@ -5283,7 +5263,7 @@
icon_state = "4-8"
},
/turf/simulated/floor/airless,
-/area/space)
+/area/ship/sadar_scout/exterior)
"NQ" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing/mapped{
@@ -5765,7 +5745,7 @@
/turf/simulated/floor/airless{
icon_state = "solarpanel"
},
-/area/space)
+/area/ship/sadar_scout/exterior)
"QT" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing/mapped{
@@ -6566,7 +6546,7 @@
/turf/simulated/floor/airless{
icon_state = "solarpanel"
},
-/area/space)
+/area/ship/sadar_scout/exterior)
"Wy" = (
/obj/effect/floor_decal/industrial/warning{
dir = 4
@@ -6680,7 +6660,7 @@
/turf/simulated/floor/airless{
icon_state = "solarpanel"
},
-/area/space)
+/area/ship/sadar_scout/exterior)
"Xa" = (
/obj/structure/machinery/atmospherics/portables_connector{
dir = 8
@@ -32554,10 +32534,10 @@ yL
ro
Hq
sV
-nq
+dv
fr
Hq
-nq
+dv
WZ
fr
ro
@@ -35122,14 +35102,14 @@ Zo
Vj
jh
sy
-Nm
+sy
gu
iE
-ts
-ts
+Vj
+Vj
NJ
-yg
-yg
+Yd
+Yd
Yd
lV
Vj
@@ -35911,7 +35891,7 @@ Zo
Zo
yL
ro
-Zo
+nq
Wk
No
QB
@@ -36168,7 +36148,7 @@ Zo
ro
yL
ro
-Zo
+nq
Wk
kt
DT
@@ -36425,7 +36405,7 @@ dG
dG
yL
ro
-Zo
+nq
qx
Wk
lc
@@ -37192,8 +37172,8 @@ ro
ro
ro
ro
-Zo
-Zo
+nq
+nq
yL
ro
Vj
@@ -37210,9 +37190,9 @@ ug
ug
ug
kF
-Zo
-Zo
-Zo
+nq
+nq
+nq
ro
ro
ro
@@ -37446,11 +37426,11 @@ fr
ro
kF
ro
-Zo
-Zo
-Zo
-Zo
-Zo
+nq
+nq
+nq
+nq
+nq
yL
ro
KN
@@ -37460,19 +37440,19 @@ cT
ms
pq
cT
-Zo
-Zo
+nq
+nq
Sl
-Zo
-Zo
+nq
+nq
ro
kF
-Zo
-Zo
-Zo
-Zo
-Zo
-Zo
+nq
+nq
+nq
+nq
+nq
+nq
ro
QT
Vj
@@ -37703,11 +37683,11 @@ fr
ro
kF
ro
-Zo
-Zo
-Zo
-Zo
-Zo
+nq
+nq
+nq
+nq
+nq
yL
ro
Vj
@@ -37724,8 +37704,8 @@ ro
ro
ro
kF
-Zo
-Zo
+nq
+nq
Ds
ds
ds
@@ -37960,11 +37940,11 @@ ro
ro
kF
ro
-Zo
-Zo
-Zo
-Zo
-Zo
+nq
+nq
+nq
+nq
+nq
yL
ro
Vj
@@ -37974,11 +37954,11 @@ cT
ZD
ie
cT
-Zo
-Zo
+nq
+nq
ro
-Zo
-Zo
+nq
+nq
ro
Vj
ds
@@ -40566,7 +40546,7 @@ va
Zj
en
Ve
-Zo
+nq
Sl
Vj
oC
@@ -40823,7 +40803,7 @@ Hj
pa
en
bA
-Zo
+nq
ro
Vj
Zo
@@ -41815,10 +41795,10 @@ ro
ro
kF
ro
-Zo
-Zo
-Zo
-Zo
+nq
+nq
+nq
+nq
yL
ro
ro
@@ -42072,10 +42052,10 @@ Wu
ro
kF
ro
-Zo
-Zo
-Zo
-Zo
+nq
+nq
+nq
+nq
yL
Vj
Vj
@@ -42093,8 +42073,8 @@ Vj
Vj
Vj
Kj
-Zo
-Zo
+nq
+nq
Cs
IC
IC
@@ -42329,10 +42309,10 @@ Wu
ro
kF
ro
-Zo
-Zo
-Zo
-Zo
+nq
+nq
+nq
+nq
yL
jh
Zo
@@ -42349,13 +42329,13 @@ Zo
Zo
jh
kF
-Zo
-Zo
-Zo
-Zo
-Zo
-Zo
-Zo
+nq
+nq
+nq
+nq
+nq
+nq
+nq
ro
yL
ro
@@ -42589,7 +42569,7 @@ ro
ro
ro
ro
-Zo
+nq
yL
ro
Zo
@@ -42606,10 +42586,10 @@ Zo
Zo
ro
kF
-Zo
-Zo
-Zo
-Zo
+nq
+nq
+nq
+nq
ro
ro
ro
@@ -42863,7 +42843,7 @@ XB
Zo
ro
kF
-Zo
+nq
ro
ro
ro
@@ -44631,14 +44611,14 @@ Zo
Vj
jh
sy
-Nm
+sy
gu
iE
-ts
-ts
+Vj
+Vj
GN
-yg
-yg
+Yd
+Yd
Yd
lV
Vj
diff --git a/maps/away/ships/scc/scc_scout_ship.dm b/maps/away/ships/scc/scc_scout_ship.dm
index 8d207fa93f1..4b9238fad23 100644
--- a/maps/away/ships/scc/scc_scout_ship.dm
+++ b/maps/away/ships/scc/scc_scout_ship.dm
@@ -1,3 +1,6 @@
+
+// --------------------------------------------------- template
+
/datum/map_template/ruin/away_site/scc_scout_ship
name = "SCC Scout Ship"
description = "A small ship commonly fielded by the Stellar Corporate Conglomerate, the Serendipity-class, Hephaestus-designed and produced. It is supposed to be a small platform, entirely self-sufficient general-purpose scouting and surveying ship, the Serendipity is equipped with both a bluespace and a warp drive and two different engines."
@@ -15,17 +18,29 @@
/singleton/submap_archetype/scc_scout_ship
map = "SCC Scout Ship"
- descriptor = "A small ship commonly fielded by the Stellar Corporate Conglomerate, the Serendipity-class, Hephaestus-designed and produced. It is supposed to be a small platform, entirely self-sufficient general-purpose scouting and surveying ship, the Serendipity is equipped with both a bluespace and a warp drive and two different engines."
+ descriptor = /datum/map_template/ruin/away_site/scc_scout_ship::description
-// ship
+// --------------------------------------------------- ship
/obj/effect/overmap/visitable/ship/scc_scout_ship
name = "SCC Scout Ship"
class = "SCCV"
- desc = "A small ship commonly fielded by the Stellar Corporate Conglomerate, the Serendipity-class, Hephaestus-designed and produced. It is supposed to be a small platform, entirely self-sufficient general-purpose scouting and surveying ship, the Serendipity is equipped with both a bluespace and a warp drive and two different engines."
+ desc = /datum/map_template/ruin/away_site/scc_scout_ship::description
+
+ // visual:
icon_state = "corvette"
moving_state = "corvette_moving"
colors = list("#cfd4ff", "#78adf8")
+
+ // functional:
+ max_speed = 1/(2 SECONDS)
+ burn_delay = 1 SECONDS
+ vessel_mass = 5000
+ vessel_size = SHIP_SIZE_SMALL
+ fore_dir = SOUTH
+ invisible_until_ghostrole_spawn = TRUE
+
+ // fluff:
designer = "Hephaestus Industries"
volume = "42 meters length, 48 meters beam/width, 23 meters vertical height"
drive = "First-Gen Warp Capable, Hybrid Phoron Bluespace Drive"
@@ -33,49 +48,33 @@
weapons = "Flak battery"
sizeclass = "Serendipity-class Scout Ship"
shiptype = "Multi-purpose scout"
- max_speed = 1/(2 SECONDS)
- burn_delay = 1 SECONDS
- vessel_mass = 5000
- vessel_size = SHIP_SIZE_SMALL
- fore_dir = SOUTH
- invisible_until_ghostrole_spawn = TRUE
- initial_restricted_waypoints = list(
- "SCC Scout Shuttle" = list("nav_scc_scout_shuttle_dock")
- )
- initial_generic_waypoints = list(
- "nav_scc_scout_dock_starboard",
- "nav_scc_scout_dock_port",
- "nav_scc_scout_dock_aft",
- "nav_scc_scout_catwalk_aft",
- "nav_scc_scout_catwalk_fore_starboard",
- "nav_scc_scout_catwalk_fore_port",
- "nav_scc_scout_space_fore_starboard",
- "nav_scc_scout_space_fore_port",
- "nav_scc_scout_space_aft_starboard",
- "nav_scc_scout_space_aft_port",
- "nav_scc_scout_space_port_far",
- "nav_scc_scout_space_starboard_far",
- )
+
/obj/effect/overmap/visitable/ship/scc_scout_ship/New()
- designation = "[pick("Dew Point", "Monsoon", "Cyclogenesis", "Warm Fronts", "Moisture Deficit", "Borealis", "Surface Tension", "Precipitation", "Oscillation", "Coalescence", "Double Rainbow", "Through a Cloud, Darkly", "Relative Humidity", "Evapotranspiration", "Alluvial Plain", "Dehydration", "Hydrophobia", "The Rain Formerly Known as Purple", "Lacrimosum", "Island of Ignorance", "Intertropical", "Once in a Lullaby", "A Boat Made from a Sheet of Newspaper", "Flood Control")]"
+ designation = pick("Dew Point", "Monsoon", "Cyclogenesis", "Warm Fronts", "Moisture Deficit", "Borealis", "Surface Tension", "Precipitation", "Oscillation", "Coalescence", "Double Rainbow", "Through a Cloud, Darkly", "Relative Humidity", "Evapotranspiration", "Alluvial Plain", "Dehydration", "Hydrophobia", "The Rain Formerly Known as Purple", "Lacrimosum", "Island of Ignorance", "Intertropical", "Once in a Lullaby", "A Boat Made from a Sheet of Newspaper", "Flood Control")
..()
-// shuttle
+// --------------------------------------------------- shuttle
/obj/effect/overmap/visitable/ship/landable/scc_scout_shuttle
name = "SCC Scout Shuttle"
class = "SCCV"
desc = "A standard-sized exploration shuttle manufactured by Hephaestus, the Pathfinder-class is commonly used by the corporations of the SCC. Featuring well-rounded facilities and equipment, the Pathfinder is excellent, albeit pricey, platform. This one appears to be a bit of an older model, perhaps a prototype."
shuttle = "SCC Scout Shuttle"
+
+ // visual:
icon_state = "intrepid"
moving_state = "intrepid_moving"
colors = list("#cfd4ff", "#78adf8")
+
+ // functional:
max_speed = 1/(2 SECONDS)
burn_delay = 1 SECONDS
vessel_mass = 3000
fore_dir = SOUTH
vessel_size = SHIP_SIZE_TINY
+
+ // fluff:
designer = "Hephaestus Industries"
volume = "17 meters length, 24 meters beam/width, 6 meters vertical height"
sizeclass = "Pathfinder Exploration Shuttle"
@@ -88,15 +87,14 @@
return skybox_image
/obj/effect/overmap/visitable/ship/landable/scc_scout_shuttle/New()
- designation = "[pick("Dew Point", "Monsoon", "Cyclogenesis", "Warm Fronts", "Moisture Deficit", "Borealis", "Surface Tension", "Precipitation", "Oscillation", "Coalescence", "Double Rainbow", "Through a Cloud, Darkly", "Relative Humidity", "Evapotranspiration", "Alluvial Plain", "Dehydration", "Hydrophobia", "The Rain Formerly Known as Purple", "Lacrimosum", "Island of Ignorance", "Intertropical", "Once in a Lullaby", "A Boat Made from a Sheet of Newspaper", "Flood Control")]"
+ designation = pick("Dew Point", "Monsoon", "Cyclogenesis", "Warm Fronts", "Moisture Deficit", "Borealis", "Surface Tension", "Precipitation", "Oscillation", "Coalescence", "Double Rainbow", "Through a Cloud, Darkly", "Relative Humidity", "Evapotranspiration", "Alluvial Plain", "Dehydration", "Hydrophobia", "The Rain Formerly Known as Purple", "Lacrimosum", "Island of Ignorance", "Intertropical", "Once in a Lullaby", "A Boat Made from a Sheet of Newspaper", "Flood Control")
..()
/obj/structure/machinery/computer/shuttle_control/explore/terminal/scc_scout_shuttle
- name = "shuttle control console"
- shuttle_tag = "SCC Scout Shuttle"
+ shuttle_tag = /obj/effect/overmap/visitable/ship/landable/scc_scout_shuttle::shuttle
/datum/shuttle/autodock/overmap/scc_scout_shuttle
- name = "SCC Scout Shuttle"
+ name = /obj/effect/overmap/visitable/ship/landable/scc_scout_shuttle::shuttle
move_time = 20
shuttle_area = list(/area/shuttle/scc_scout_ship_shuttle/cockpit, /area/shuttle/scc_scout_ship_shuttle/eva, /area/shuttle/scc_scout_ship_shuttle/cargo, /area/shuttle/scc_scout_ship_shuttle/medbay, /area/shuttle/scc_scout_ship_shuttle/propulsion_starboard, /area/shuttle/scc_scout_ship_shuttle/propulsion_port)
dock_target = "airlock_scc_scout_shuttle"
@@ -108,7 +106,7 @@
defer_initialisation = TRUE
/obj/effect/map_effect/marker/airlock/shuttle/scc_scout_ship
- name = "SCC Scout Shuttle"
- shuttle_tag = "SCC Scout Shuttle"
+ name = /obj/effect/overmap/visitable/ship/landable/scc_scout_shuttle::shuttle
+ shuttle_tag = /obj/effect/overmap/visitable/ship/landable/scc_scout_shuttle::shuttle
master_tag = "airlock_scc_scout_shuttle"
cycle_to_external_air = TRUE
diff --git a/maps/away/ships/scc/scc_scout_ship_landmarks.dm b/maps/away/ships/scc/scc_scout_ship_landmarks.dm
index d3a5df99f22..25edc43cda5 100644
--- a/maps/away/ships/scc/scc_scout_ship_landmarks.dm
+++ b/maps/away/ships/scc/scc_scout_ship_landmarks.dm
@@ -4,18 +4,20 @@
/obj/effect/shuttle_landmark/scc_scout_ship
base_area = /area/space
base_turf = /turf/space
+ auto_register = TRUE
// --------------------- shuttle
/obj/effect/shuttle_landmark/scc_scout_ship/shuttle_hangar
- name = "Shuttle Dock"
- landmark_tag = "nav_scc_scout_shuttle_dock"
- docking_controller = "airlock_scc_scout_shuttle_dock"
+ name = "Shuttle Dock"
+ landmark_tag = "nav_scc_scout_shuttle_dock"
+ docking_controller = "airlock_scc_scout_shuttle_dock"
+ shuttle_restricted = /obj/effect/overmap/visitable/ship/landable/scc_scout_shuttle::name
/obj/effect/map_effect/marker/airlock/docking/scc_scout_ship/shuttle_hangar
- name = "Shuttle Dock"
- landmark_tag = "nav_scc_scout_shuttle_dock"
- master_tag = "airlock_scc_scout_shuttle_dock"
+ name = /obj/effect/shuttle_landmark/scc_scout_ship/shuttle_hangar::name
+ landmark_tag = /obj/effect/shuttle_landmark/scc_scout_ship/shuttle_hangar::landmark_tag
+ master_tag = /obj/effect/shuttle_landmark/scc_scout_ship/shuttle_hangar::docking_controller
// ----
@@ -23,42 +25,43 @@
name = "In transit"
landmark_tag = "nav_scc_scout_shuttle_transit"
base_turf = /turf/space/transit
+ auto_register = FALSE
// --------------------- docks
/obj/effect/shuttle_landmark/scc_scout_ship/dock/starboard
- name = "Dock, Starboard"
- landmark_tag = "nav_scc_scout_dock_starboard"
- docking_controller = "airlock_scc_scout_dock_starboard"
+ name = "Dock, Starboard"
+ landmark_tag = "nav_scc_scout_dock_starboard"
+ docking_controller = "airlock_scc_scout_dock_starboard"
/obj/effect/map_effect/marker/airlock/docking/scc_scout_ship/dock/starboard
- name = "Dock, Starboard"
- landmark_tag = "nav_scc_scout_dock_starboard"
- master_tag = "airlock_scc_scout_dock_starboard"
+ name = /obj/effect/shuttle_landmark/scc_scout_ship/dock/starboard::name
+ landmark_tag = /obj/effect/shuttle_landmark/scc_scout_ship/dock/starboard::landmark_tag
+ master_tag = /obj/effect/shuttle_landmark/scc_scout_ship/dock/starboard::docking_controller
// ----
/obj/effect/shuttle_landmark/scc_scout_ship/dock/port
- name = "Dock, Port"
- landmark_tag = "nav_scc_scout_dock_port"
- docking_controller = "airlock_scc_scout_dock_port"
+ name = "Dock, Port"
+ landmark_tag = "nav_scc_scout_dock_port"
+ docking_controller = "airlock_scc_scout_dock_port"
/obj/effect/map_effect/marker/airlock/docking/scc_scout_ship/dock/port
- name = "Dock, Port"
- landmark_tag = "nav_scc_scout_dock_port"
- master_tag = "airlock_scc_scout_dock_port"
+ name = /obj/effect/shuttle_landmark/scc_scout_ship/dock/port::name
+ landmark_tag = /obj/effect/shuttle_landmark/scc_scout_ship/dock/port::landmark_tag
+ master_tag = /obj/effect/shuttle_landmark/scc_scout_ship/dock/port::docking_controller
// ----
/obj/effect/shuttle_landmark/scc_scout_ship/dock/aft
- name = "Dock, Aft"
- landmark_tag = "nav_scc_scout_dock_aft"
- docking_controller = "airlock_scc_scout_dock_aft"
+ name = "Dock, Aft"
+ landmark_tag = "nav_scc_scout_dock_aft"
+ docking_controller = "airlock_scc_scout_dock_aft"
/obj/effect/map_effect/marker/airlock/docking/scc_scout_ship/dock/aft
- name = "Dock, Aft"
- landmark_tag = "nav_scc_scout_dock_aft"
- master_tag = "airlock_scc_scout_dock_aft"
+ name = /obj/effect/shuttle_landmark/scc_scout_ship/dock/aft::name
+ landmark_tag = /obj/effect/shuttle_landmark/scc_scout_ship/dock/aft::landmark_tag
+ master_tag = /obj/effect/shuttle_landmark/scc_scout_ship/dock/aft::docking_controller
// --------------------- catwalk
diff --git a/maps/away/ships/sol/sol_frigate/sol_frigate.dmm b/maps/away/ships/sol/sol_frigate/sol_frigate.dmm
index bc5865c92b2..41156617f27 100644
--- a/maps/away/ships/sol/sol_frigate/sol_frigate.dmm
+++ b/maps/away/ships/sol/sol_frigate/sol_frigate.dmm
@@ -1500,6 +1500,7 @@
/obj/effect/floor_decal/corner/orange{
dir = 5
},
+/obj/structure/machinery/computer/rdconsole/robotics,
/turf/simulated/floor/tiled/dark,
/area/ship/sol_frigate/Exo_Bay)
"gD" = (
@@ -1652,6 +1653,9 @@
/obj/structure/cable/blue{
icon_state = "4-8"
},
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/ship/sol_frigate/Exo_Bay)
"hk" = (
@@ -4019,7 +4023,7 @@
/turf/simulated/floor/tiled/white,
/area/ship/sol_frigate/canteen)
"rT" = (
-/obj/structure/machinery/mecha_part_fabricator,
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator,
/obj/structure/cable/blue{
icon_state = "4-8"
},
@@ -6478,12 +6482,10 @@
/area/ship/sol_frigate/sickbay)
"Dn" = (
/obj/structure/extinguisher_cabinet/east,
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
- },
/obj/effect/floor_decal/corner/orange{
dir = 6
},
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/tiled/dark,
/area/ship/sol_frigate/Exo_Bay)
"Dr" = (
@@ -11012,12 +11014,12 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
/obj/structure/cable/blue{
icon_state = "4-8"
},
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/ship/sol_frigate/Exo_Bay)
"Za" = (
diff --git a/maps/away/ships/sol/sol_ssrm/ssrm_ship.dmm b/maps/away/ships/sol/sol_ssrm/ssrm_ship.dmm
index 58ad3d293c8..4cd67bd8657 100644
--- a/maps/away/ships/sol/sol_ssrm/ssrm_ship.dmm
+++ b/maps/away/ships/sol/sol_ssrm/ssrm_ship.dmm
@@ -2472,12 +2472,10 @@
"eWz" = (
/obj/structure/railing/mapped,
/obj/effect/floor_decal/corner/brown/diagonal,
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 8
- },
/obj/structure/machinery/light{
dir = 1
},
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/tiled/dark,
/area/ship/ssrm_corvette/garage)
"eYX" = (
@@ -4288,6 +4286,9 @@
},
/obj/effect/floor_decal/industrial/outline/red,
/obj/structure/reagent_dispensers/fueltank,
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark/full,
/area/ship/ssrm_corvette/garage)
"iOV" = (
@@ -4918,7 +4919,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch/operations,
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
dir = 8;
req_access = list(203)
},
@@ -8895,6 +8896,10 @@
pixel_y = 12
},
/obj/item/robotanalyzer,
+/obj/structure/machinery/cell_charger{
+ pixel_y = 4;
+ pixel_x = 1
+ },
/turf/simulated/floor/tiled/dark,
/area/ship/ssrm_corvette/garage)
"uyh" = (
@@ -10242,10 +10247,8 @@
dir = 4
},
/obj/effect/floor_decal/industrial/outline/grey,
-/obj/structure/table/reinforced/steel,
-/obj/structure/machinery/cell_charger{
- pixel_y = 4;
- pixel_x = 1
+/obj/structure/machinery/computer/rdconsole/robotics/terminal{
+ dir = 4
},
/turf/simulated/floor/tiled/dark,
/area/ship/ssrm_corvette/garage)
@@ -10376,12 +10379,14 @@
"xJQ" = (
/obj/effect/floor_decal/corner/brown/diagonal,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable{
icon_state = "1-2";
d1 = 1;
d2 = 2
},
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/ship/ssrm_corvette/garage)
"xLV" = (
diff --git a/maps/forbiddenMapTypes.json b/maps/forbiddenMapTypes.json
index cc8282fd014..341c0667fd7 100644
--- a/maps/forbiddenMapTypes.json
+++ b/maps/forbiddenMapTypes.json
@@ -7,7 +7,8 @@
"/obj/item/material/ashtray",
"/obj/structure/reagent_dispensers/extinguisher",
"/obj/structure/reagent_dispensers/watertank",
- "/obj/structure/reagent_dispensers/fueltank"
+ "/obj/structure/reagent_dispensers/fueltank",
+ "/obj/structure/reagent_dispensers/cookingoil"
]
}
]
diff --git a/maps/random_ruins/exoplanets/konyang/abandoned/factory_robotics.dmm b/maps/random_ruins/exoplanets/konyang/abandoned/factory_robotics.dmm
index 4280bdb2389..6cdb49922ff 100644
--- a/maps/random_ruins/exoplanets/konyang/abandoned/factory_robotics.dmm
+++ b/maps/random_ruins/exoplanets/konyang/abandoned/factory_robotics.dmm
@@ -149,6 +149,11 @@
/obj/structure/machinery/smartfridge,
/turf/simulated/floor/foundation,
/area/konyang/robotics_factory)
+"jl" = (
+/obj/random/dirt_75,
+/obj/structure/machinery/r_n_d/material_silo,
+/turf/simulated/floor/sidewalk/dark,
+/area/konyang/robotics_factory)
"jm" = (
/obj/structure/machinery/light_switch{
dir = 4;
@@ -219,6 +224,7 @@
"lN" = (
/obj/random/dirt_75,
/obj/random/tech_supply,
+/mob/living/simple_animal/thinbug,
/turf/simulated/floor/sidewalk/dark,
/area/konyang/robotics_factory)
"lT" = (
@@ -343,8 +349,10 @@
/area/konyang/robotics_factory)
"rq" = (
/obj/random/dirt_75,
-/mob/living/simple_animal/thinbug,
/obj/structure/machinery/light/broken,
+/obj/structure/machinery/computer/rdconsole/robotics/terminal{
+ dir = 1
+ },
/turf/simulated/floor/sidewalk/dark,
/area/konyang/robotics_factory)
"rT" = (
@@ -723,7 +731,7 @@
/turf/simulated/floor/sidewalk/dark,
/area/konyang/robotics_factory)
"Ku" = (
-/obj/structure/machinery/mecha_part_fabricator,
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator,
/turf/simulated/floor/foundation,
/area/konyang/robotics_factory)
"KC" = (
@@ -939,7 +947,7 @@
/area/konyang/robotics_factory)
"XD" = (
/obj/random/dirt_75,
-/obj/structure/machinery/mecha_part_fabricator,
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator,
/turf/simulated/floor/sidewalk/dark,
/area/konyang/robotics_factory)
"XI" = (
@@ -1899,8 +1907,8 @@ eM
SY
tf
BH
-Us
CF
+jl
SY
cP
se
diff --git a/maps/random_ruins/exoplanets/ouerea/ouerea_nt_ruin.dmm b/maps/random_ruins/exoplanets/ouerea/ouerea_nt_ruin.dmm
index 924322b7d10..09262c951dc 100644
--- a/maps/random_ruins/exoplanets/ouerea/ouerea_nt_ruin.dmm
+++ b/maps/random_ruins/exoplanets/ouerea/ouerea_nt_ruin.dmm
@@ -110,7 +110,7 @@
/obj/effect/floor_decal/corner/mauve/full{
dir = 4
},
-/obj/item/melee/baton/stunrod,
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/exoplanet/tiled/white{
temperature = 298.15
},
@@ -123,6 +123,7 @@
dir = 6
},
/obj/random/dirt_75,
+/obj/item/melee/baton/stunrod,
/turf/simulated/floor/exoplanet/tiled/white{
temperature = 298.15
},
diff --git a/maps/runtime/runtime.dmm b/maps/runtime/runtime.dmm
index 699b20d108b..07d0f2e36a0 100644
--- a/maps/runtime/runtime.dmm
+++ b/maps/runtime/runtime.dmm
@@ -734,7 +734,7 @@
/obj/effect/floor_decal/corner/mauve/full{
dir = 1
},
-/obj/structure/machinery/r_n_d/circuit_imprinter,
+/obj/structure/machinery/r_n_d/fabricator/circuit_imprinter,
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/effect/floor_decal/industrial/warning{
dir = 5
@@ -760,7 +760,7 @@
/obj/effect/floor_decal/corner/mauve{
dir = 5
},
-/obj/structure/machinery/mecha_part_fabricator{
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
dir = 8
},
/obj/effect/floor_decal/industrial/outline/yellow,
@@ -2766,7 +2766,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/structure/machinery/r_n_d/protolathe,
+/obj/structure/machinery/r_n_d/fabricator/protolathe,
/turf/simulated/floor/tiled/white,
/area/runtime/floor_one/main)
"mh" = (
@@ -8322,6 +8322,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/tiled/white,
/area/runtime/floor_one/main)
"SB" = (
diff --git a/maps/sccv_horizon/code/sccv_horizon.dm b/maps/sccv_horizon/code/sccv_horizon.dm
index 1046cd416f7..b245aed19df 100644
--- a/maps/sccv_horizon/code/sccv_horizon.dm
+++ b/maps/sccv_horizon/code/sccv_horizon.dm
@@ -20,6 +20,7 @@
admin_levels = list(4)
contact_levels = list(1, 2, 3)
+ always_available_network_levels = list(4)
player_levels = list(1, 2, 3, 5)
restricted_levels = list()
accessible_z_levels = list("1" = 5, "2" = 5, "3" = 5, "5" = 75)
@@ -72,7 +73,8 @@
NETWORK_SECOND_DECK,
NETWORK_THIRD_DECK,
NETWORK_INTREPID,
- NETWORK_NEWS
+ NETWORK_NEWS,
+ NETWORK_EXPEDITION
)
shuttle_docked_message = "Attention all hands: the shift change preparations are over. It will start in approximately %ETA%."
@@ -167,7 +169,7 @@
if(SSatlas.current_map.use_overmap)
var/obj/effect/overmap/visitable/ship/sccv_horizon/ship = locate(/obj/effect/overmap/visitable/ship/sccv_horizon) in GLOB.map_overmap
if(ship)
- SSpersistence.genericSave(/singleton/persistent_type/generic/horizon_overmap_position, list("x" = ship.x, "y" = ship.y), 1)
+ SSpersistence.genericSave(/singleton/persistent_type/generic/horizon_overmap_position, list("x" = ship.x, "y" = ship.y))
/datum/map/sccv_horizon/post_gamemode_setup()
// ##### Set persistent Horizon position on the overmap
@@ -176,12 +178,45 @@
var/area/overmap/map = GLOB.map_overmap
// Set Horizon location
var/obj/effect/overmap/visitable/ship/sccv_horizon/ship = locate(/obj/effect/overmap/visitable/ship/sccv_horizon) in map
- ship.x = horizon_location_generic.content["x"]
- ship.y = horizon_location_generic.content["y"]
- // Make safe space for the Horizon
- for(var/obj/effect/overmap/hazard in map)
- if(hazard.x == ship.x && hazard.y == ship.y && istype(hazard, /obj/effect/overmap/event/)) // Ions, dust, carps, meteors, etc.
- qdel(hazard)
+ if(ship)
+ ship.x = horizon_location_generic.content["x"]
+ ship.y = horizon_location_generic.content["y"]
+
+ // Make safe space for the Horizon
+ for(var/obj/effect/overmap/hazard in map)
+ if(hazard.x == ship.x && hazard.y == ship.y && istype(hazard, /obj/effect/overmap/event/)) // Ions, dust, carps, meteors, etc.
+ qdel(hazard)
+
+ // Move mineral asteroid to a nearby location
+ var/obj/effect/overmap/visitable/sector/exoplanet/barren/asteroid/mining_asteroid = locate(/obj/effect/overmap/visitable/sector/exoplanet/barren/asteroid) in map
+ if(mining_asteroid)
+ for(var/dir in shuffle(GLOB.cardinals))
+ var/candidate_x = ship.x
+ var/candidate_y = ship.y
+ if(dir & NORTH)
+ candidate_y += 1
+ if(dir & SOUTH)
+ candidate_y -= 1
+ if(dir & EAST)
+ candidate_x += 1
+ if(dir & WEST)
+ candidate_x -= 1
+
+ if(candidate_x < 0 || candidate_y < 0 || candidate_x > overmap_size || candidate_y > overmap_size)
+ continue // Location out of bounds
+
+ for(var/obj/effect/overmap/visitable/sector/exoplanet/exoplanet in map)
+ if(exoplanet.x == candidate_x && exoplanet.y == candidate_y)
+ continue // Location occupied
+
+ mining_asteroid.x = candidate_x
+ mining_asteroid.y = candidate_y
+ break
+
+ // Make safe space for the asteroid
+ for(var/obj/effect/overmap/hazard in map)
+ if(hazard.x == mining_asteroid.x && hazard.y == mining_asteroid.y && istype(hazard, /obj/effect/overmap/event/)) // Ions, dust, carps, meteors, etc.
+ qdel(hazard)
// ##### Send different faxes after slight delay
var/faxes_send_delay = rand(60 SECONDS , 180 SECONDS)
diff --git a/maps/sccv_horizon/sccv_horizon.dmm b/maps/sccv_horizon/sccv_horizon.dmm
index 078a7a6fa96..8688a0962e3 100644
--- a/maps/sccv_horizon/sccv_horizon.dmm
+++ b/maps/sccv_horizon/sccv_horizon.dmm
@@ -108,7 +108,7 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -149,7 +149,7 @@
/area/horizon/security/hallway)
"abh" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/light/small,
@@ -302,6 +302,20 @@
/obj/structure/machinery/door/firedoor,
/turf/simulated/floor/plating,
/area/horizon/medical/equipment)
+"acj" = (
+/obj/structure/machinery/conveyor{
+ dir = 6;
+ id = "Robocompo";
+ reversed = 1
+ },
+/obj/structure/machinery/light{
+ dir = 8
+ },
+/obj/structure/platform{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"ack" = (
/turf/unsimulated/wall/steel,
/area/antag/jockey)
@@ -345,13 +359,13 @@
/obj/structure/cable/green{
icon_state = "1-4"
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
- },
/obj/effect/floor_decal/industrial/warning/corner{
dir = 8
},
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
+ },
/turf/simulated/floor/tiled,
/area/horizon/service/custodial)
"act" = (
@@ -404,7 +418,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/security/forensic_laboratory)
"acE" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate,
/obj/structure/cable/green{
icon_state = "2-4"
@@ -526,15 +540,6 @@
},
/turf/unsimulated/floor/wood,
/area/antag/mercenary)
-"ade" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/railing/mapped/no_density/low{
- dir = 8
- },
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"adi" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -731,13 +736,6 @@
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
-"aeh" = (
-/obj/effect/floor_decal/corner/brown{
- dir = 10
- },
-/obj/effect/floor_decal/industrial/warning,
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"aek" = (
/obj/effect/floor_decal/industrial/warning{
dir = 10
@@ -1214,7 +1212,7 @@
/turf/simulated/floor/carpet/art,
/area/horizon/crew/lounge)
"agp" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -1308,7 +1306,7 @@
/obj/effect/floor_decal/corner/dark_green{
dir = 10
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -1337,7 +1335,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -1709,7 +1707,7 @@
/turf/simulated/wall/r_wall,
/area/horizon/service/custodial)
"ajw" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -1857,7 +1855,7 @@
/turf/simulated/floor/tiled,
/area/merchant_station)
"ake" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
@@ -1899,7 +1897,7 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"aku" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable/green{
@@ -2312,7 +2310,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
@@ -2476,7 +2474,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -2593,6 +2591,14 @@
pixel_x = 10;
pixel_y = -3
},
+/obj/item/clothing/glasses/safety/goggles/science{
+ pixel_y = 10
+ },
+/obj/item/reagent_containers/glass/beaker/sulphuric{
+ pixel_y = 3
+ },
+/obj/item/stack/material/glass/full,
+/obj/item/stack/material/steel/full,
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/lab)
"apc" = (
@@ -2620,7 +2626,7 @@
/area/centcom/specops)
"apM" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/plating,
@@ -2919,6 +2925,13 @@
"ask" = (
/turf/simulated/wall/r_wall,
/area/horizon/rnd/xenological)
+"asl" = (
+/obj/structure/lattice/catwalk/indoor/grate,
+/obj/structure/cable/green{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plating,
+/area/horizon/operations/lobby)
"ass" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
@@ -3048,6 +3061,14 @@
/obj/structure/bookcase/libraryspawn/fiction,
/turf/simulated/floor/wood,
/area/horizon/service/library)
+"ato" = (
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 5
+ },
+/obj/structure/crate_shelf,
+/obj/structure/closet/crate/tool/machinist,
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist)
"atp" = (
/obj/structure/machinery/portable_atmospherics/canister/oxygen,
/turf/unsimulated/floor,
@@ -3080,9 +3101,9 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/propulsion)
"atv" = (
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/cable/green{
icon_state = "1-8"
@@ -3287,9 +3308,9 @@
/turf/simulated/wall,
/area/horizon/maintenance/deck_1/auxatmos)
"auu" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/cable{
icon_state = "2-4"
@@ -3358,8 +3379,8 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/obj/structure/cable/green{
icon_state = "2-8"
@@ -3448,7 +3469,7 @@
dir = 8
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled/dark/full,
@@ -3538,7 +3559,7 @@
/obj/effect/floor_decal/corner/dark_green/full{
dir = 1
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/extinguisher_cabinet/east,
/turf/simulated/floor/tiled/dark,
/area/horizon/service/mess_hall)
@@ -3628,7 +3649,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -3660,6 +3681,14 @@
/obj/structure/survey_probe,
/turf/simulated/floor/plating,
/area/horizon/hangar/intrepid)
+"awu" = (
+/obj/effect/floor_decal/industrial/outline/research,
+/obj/item/radio/intercom/west,
+/obj/structure/machinery/computer/rdconsole/robotics/terminal{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"awz" = (
/obj/effect/floor_decal/corner/yellow{
dir = 5
@@ -3765,7 +3794,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -3791,13 +3820,39 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/alarm/south,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/elevator)
+"axv" = (
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 8
+ },
+/obj/structure/table/wood/gamblingtable,
+/obj/structure/machinery/power/outlet{
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/food/condiment/shaker/peppermill{
+ pixel_x = 3;
+ pixel_y = 9
+ },
+/obj/item/reagent_containers/food/condiment/shaker/salt{
+ pixel_y = 9;
+ pixel_x = 8
+ },
+/obj/item/flame/candle{
+ pixel_x = -4;
+ pixel_y = 9
+ },
+/obj/item/flame/candle{
+ pixel_x = -8;
+ pixel_y = 9
+ },
+/turf/simulated/floor/wood,
+/area/horizon/service/mess_hall)
"axx" = (
/obj/structure/machinery/alarm/north,
/obj/random/dirt_75,
@@ -4016,16 +4071,12 @@
/area/centcom/holding)
"azC" = (
/obj/effect/floor_decal/corner/dark_green,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/central)
"azE" = (
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
- },
/obj/structure/bed/stool/chair/padded/black,
/obj/effect/floor_decal/spline/fancy/wood{
dir = 4
@@ -4171,9 +4222,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/turf/simulated/floor/tiled/white,
/area/horizon/service/kitchen)
@@ -4479,17 +4530,6 @@
/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/engineering/reactor/indra/mainchamber)
-"aCF" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/sortjunction/flipped{
- dir = 8;
- name = "Machinist Workshop";
- sortType = "Machinist Workshop"
- },
-/turf/simulated/floor/tiled/full,
-/area/horizon/hallway/primary/deck_2/starboard)
"aCG" = (
/obj/structure/machinery/firealarm/east,
/obj/structure/table/reinforced/glass,
@@ -4589,7 +4629,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -4605,8 +4645,18 @@
/obj/structure/machinery/telecomms/allinone/ship/station_relay,
/turf/simulated/floor/bluegrid,
/area/horizon/tcommsat/chamber)
+"aDO" = (
+/obj/structure/platform_deco{
+ dir = 1
+ },
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 1
+ },
+/obj/effect/floor_decal/spline/plain/red,
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist)
"aDP" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -4699,7 +4749,7 @@
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor,
@@ -4758,7 +4808,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/horizon/rnd/hallway)
@@ -4834,19 +4884,6 @@
/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
-"aFW" = (
-/obj/structure/window/shuttle/scc_space_ship,
-/obj/structure/grille,
-/obj/structure/machinery/door/firedoor,
-/obj/effect/landmark/entry_point/fore{
- name = "fore, machinist workshop"
- },
-/obj/structure/machinery/door/blast/shutters{
- id = "machinist_fab_shutters";
- name = "Machinist Workshop Garage Shutter"
- },
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"aFX" = (
/obj/structure/table/wood,
/obj/effect/floor_decal/spline/fancy/wood,
@@ -4955,26 +4992,6 @@
},
/turf/space,
/area/horizon/exterior)
-"aGB" = (
-/obj/structure/railing/mapped{
- dir = 8
- },
-/obj/effect/floor_decal/corner/brown{
- dir = 6
- },
-/obj/structure/machinery/light{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
-"aGE" = (
-/obj/structure/bed/stool/chair/office/dark,
-/obj/effect/landmark/start{
- name = "Machinist"
- },
-/obj/effect/floor_decal/corner/brown/full,
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
"aGF" = (
/obj/structure/machinery/light{
dir = 1
@@ -5013,7 +5030,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/purple{
dir = 5
},
@@ -5313,6 +5330,20 @@
/obj/item/melee/baton/loaded,
/turf/simulated/floor/tiled,
/area/horizon/command/bridge/bridge_crew)
+"aIf" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"aIl" = (
/obj/structure/stairs/west,
/turf/simulated/floor/tiled/white,
@@ -5474,7 +5505,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled,
@@ -5644,7 +5675,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/spline/fancy/wood,
@@ -5816,15 +5847,6 @@
dir = 4;
pixel_y = 32
},
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
/obj/structure/machinery/door/firedoor{
req_one_access = list(24,11,67,73);
dir = 4
@@ -6024,7 +6046,7 @@
dir = 10
},
/obj/structure/sign/radshield,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_2/starboard)
"aMs" = (
@@ -6421,9 +6443,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/structure/cable/green{
icon_state = "4-8"
@@ -6547,7 +6569,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/door/firedoor{
@@ -6661,16 +6683,16 @@
/obj/structure/cable/green{
icon_state = "1-4"
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
- },
/obj/effect/floor_decal/corner/brown{
dir = 5
},
/obj/structure/cable/green{
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
+ },
/turf/simulated/floor/tiled/slate,
/area/horizon/operations/warehouse)
"aPO" = (
@@ -6859,7 +6881,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/service/port)
"aRE" = (
@@ -7041,6 +7063,11 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/on,
/turf/simulated/floor/tiled/white,
/area/horizon/security/autopsy_laboratory)
+"aTd" = (
+/obj/structure/machinery/recharge_station,
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/hallway/primary/deck_2/starboard)
"aTh" = (
/obj/structure/cable/green,
/obj/effect/map_effect/window_spawner/full/reinforced/polarized/grille/firedoor{
@@ -7112,7 +7139,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/railing/mapped{
dir = 8
},
@@ -7221,7 +7248,7 @@
"aUv" = (
/obj/structure/machinery/door/firedoor,
/obj/effect/map_effect/door_helper/unres,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/map_effect/door_helper/level_access/command_foyer{
@@ -7367,7 +7394,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 7
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 1
},
@@ -7470,16 +7497,6 @@
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port)
-"aWi" = (
-/obj/structure/machinery/mecha_part_fabricator{
- dir = 8
- },
-/obj/structure/railing/mapped{
- dir = 8
- },
-/obj/effect/floor_decal/industrial/outline/yellow,
-/turf/simulated/floor/carpet/rubber,
-/area/horizon/operations/machinist)
"aWv" = (
/obj/structure/shuttle/engine/propulsion{
name = "spaceship engine";
@@ -7620,7 +7637,7 @@
/turf/simulated/floor/plating,
/area/horizon/security/hallway)
"aXp" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-8"
},
@@ -7712,9 +7729,9 @@
/obj/structure/cable{
icon_state = "2-4"
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
@@ -7871,13 +7888,6 @@
icon_state = "white"
},
/area/centcom/holding)
-"aYT" = (
-/obj/structure/machinery/hologram/holopad,
-/obj/structure/disposalpipe/segment{
- dir = 1
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"aYY" = (
/obj/item/material/shard{
icon_state = "small"
@@ -8033,16 +8043,16 @@
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"baf" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment/mainline{
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+ dir = 4
},
/obj/structure/cable/green{
- icon_state = "2-8"
- },
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+ icon_state = "4-8"
},
/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard)
@@ -8112,6 +8122,22 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/hallway/primary/deck_2/fore)
+"baA" = (
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable/green{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 1
+ },
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
+/area/horizon/operations/machinist)
"baC" = (
/obj/structure/bed/stool/bar/padded/red{
dir = 4
@@ -8357,7 +8383,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/security/forensic_laboratory)
"bcs" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/floor_decal/corner/brown/full{
@@ -8682,7 +8708,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 1
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
@@ -8705,6 +8731,15 @@
},
/turf/unsimulated/floor,
/area/antag/mercenary)
+"ber" = (
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 1
+ },
+/obj/effect/floor_decal/spline/fancy/wood/corner{
+ dir = 8
+ },
+/turf/simulated/floor/wood,
+/area/horizon/service/cafeteria)
"beB" = (
/obj/structure/bed/stool/chair/sofa/left/red{
dir = 1
@@ -8776,10 +8811,6 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/repoffice/representative_two)
"beT" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -8793,6 +8824,9 @@
icon_state = "4-8"
},
/obj/structure/machinery/firealarm/north,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/wood,
/area/horizon/repoffice/representative_two)
"beW" = (
@@ -8968,6 +9002,20 @@
/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/engineering/reactor/indra/mainchamber)
+"bgc" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"bgd" = (
/obj/effect/floor_decal/industrial/outline/red,
/obj/structure/cable{
@@ -9169,7 +9217,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/warning/corner{
dir = 4
},
@@ -9341,9 +9389,9 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
@@ -9398,7 +9446,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_2/starboard)
@@ -9477,9 +9525,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/effect/floor_decal/corner/brown{
dir = 10
@@ -9705,25 +9753,6 @@
},
/turf/unsimulated/floor/plating,
/area/shuttle/specops)
-"bjO" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/obj/structure/machinery/door/firedoor{
- req_one_access = list(24,11,67,73);
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/machinery/door/airlock/maintenance{
- dir = 4;
- name = "Machinist Workshop Maintenance";
- req_access = list(29)
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/maintenance/deck_2/service/starboard)
"bkd" = (
/obj/structure/machinery/door/firedoor{
req_one_access = list(24,11,67,73);
@@ -9824,10 +9853,6 @@
/obj/structure/machinery/light/small{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
},
@@ -9835,6 +9860,10 @@
dir = 9
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"blc" = (
@@ -9943,6 +9972,21 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
+"blN" = (
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/full,
+/area/horizon/hallway/primary/deck_2/starboard)
"blQ" = (
/obj/structure/cable/green{
icon_state = "1-4"
@@ -10007,6 +10051,27 @@
},
/turf/simulated/floor/tiled,
/area/horizon/command/bridge/bridge_crew)
+"bmw" = (
+/obj/structure/machinery/door/airlock/mining{
+ name = "Workshop Surgical Theatre";
+ req_access = list(29)
+ },
+/obj/effect/map_effect/door_helper/unres,
+/obj/structure/machinery/holosign/surgery{
+ id = "workshop_surgery"
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable/green{
+ icon_state = "1-2"
+ },
+/obj/structure/machinery/door/firedoor,
+/obj/effect/floor_decal/industrial/hatch_door/yellow{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist/surgicalbay)
"bmA" = (
/obj/structure/disposalpipe/segment,
/obj/structure/machinery/camera/network/service{
@@ -10205,7 +10270,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/spline/plain/lime{
dir = 8
},
@@ -10361,7 +10426,7 @@
dir = 5
},
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/structure/machinery/r_n_d/protolathe,
+/obj/structure/machinery/r_n_d/fabricator/protolathe,
/turf/simulated/floor/carpet/rubber,
/area/horizon/rnd/lab)
"bot" = (
@@ -10817,7 +10882,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -11132,24 +11197,6 @@
},
/turf/simulated/floor/tiled/white,
/area/horizon/medical/exam)
-"btw" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/effect/floor_decal/corner/brown{
- dir = 5
- },
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
- },
-/obj/structure/cable/green{
- icon_state = "2-8"
- },
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
"btA" = (
/obj/structure/window/shuttle/scc_space_ship,
/obj/structure/grille,
@@ -11232,12 +11279,6 @@
},
/turf/simulated/floor/tiled,
/area/horizon/engineering/hallway/aft)
-"bum" = (
-/obj/effect/floor_decal/corner/brown{
- dir = 10
- },
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
"buo" = (
/obj/random/dirt_75,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -11261,9 +11302,6 @@
/turf/simulated/floor/plating,
/area/centcom/shared_dream)
"buH" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -11276,6 +11314,9 @@
/obj/effect/floor_decal/corner/dark_green{
dir = 9
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/horizon/command/bridge/upperdeck)
"buJ" = (
@@ -11468,19 +11509,6 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
/turf/simulated/floor/tiled,
/area/horizon/stairwell/engineering/deck_2)
-"bvR" = (
-/obj/item/modular_computer/console/preset/supply/machinist{
- dir = 4
- },
-/obj/structure/machinery/camera{
- c_tag = "Operations - Machinist Workshop 2";
- network = list("Operations")
- },
-/obj/effect/floor_decal/spline/plain/brown{
- dir = 10
- },
-/turf/simulated/floor/tiled/full,
-/area/horizon/operations/machinist)
"bvV" = (
/obj/random/dirt_75,
/obj/random/maintenance_junk_or_loot,
@@ -11542,12 +11570,6 @@
},
/turf/simulated/floor/holofloor/carpet,
/area/horizon/holodeck/source_dininghall)
-"bwx" = (
-/obj/structure/machinery/mech_recharger,
-/obj/effect/floor_decal/industrial/outline/red,
-/mob/living/heavy_vehicle/premade/random/boring,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"bwz" = (
/obj/structure/disposalpipe/segment{
dir = 8;
@@ -11785,15 +11807,6 @@
/obj/effect/floor_decal/corner/dark_green{
dir = 5
},
-/obj/structure/cable/green{
- icon_state = "2-4"
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard)
"byp" = (
@@ -12263,7 +12276,7 @@
/obj/structure/machinery/light/floor{
dir = 1
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled,
@@ -12584,6 +12597,15 @@
},
/turf/unsimulated/floor,
/area/centcom/evac)
+"bDZ" = (
+/obj/item/modular_computer/console/preset/supply/machinist{
+ dir = 4
+ },
+/obj/structure/noticeboard{
+ pixel_y = 32
+ },
+/turf/simulated/floor/tiled/full,
+/area/horizon/operations/machinist)
"bEa" = (
/obj/effect/landmark/start{
name = "Cyborg"
@@ -12699,6 +12721,27 @@
"bFb" = (
/turf/unsimulated/wall/steel,
/area/antag/loner)
+"bFe" = (
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/structure/cable/green{
+ icon_state = "2-8"
+ },
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
+ },
+/obj/effect/floor_decal/corner/dark_green{
+ dir = 5
+ },
+/obj/effect/floor_decal/industrial/outline_straight/service{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/service/bar)
"bFf" = (
/obj/effect/floor_decal/industrial/outline/operations,
/obj/structure/table/reinforced/steel,
@@ -12754,7 +12797,7 @@
/area/centcom/legion/hangar5)
"bFt" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/light/small{
dir = 4
},
@@ -12764,7 +12807,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 4
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable/green{
icon_state = "1-2"
@@ -12868,15 +12911,6 @@
},
/turf/simulated/floor/tiled/full,
/area/horizon/command/bridge/upperdeck)
-"bGv" = (
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/structure/platform{
- dir = 8
- },
-/turf/simulated/floor/carpet/rubber,
-/area/horizon/operations/machinist)
"bGw" = (
/obj/random/junk,
/obj/random/dirt_75,
@@ -12986,7 +13020,7 @@
},
/area/centcom/holding)
"bHz" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -13390,7 +13424,7 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate,
@@ -13676,7 +13710,7 @@
"bMC" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/brown{
dir = 1
},
@@ -13878,7 +13912,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -14276,7 +14310,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -14331,18 +14365,6 @@
},
/turf/simulated/floor/tiled/white,
/area/horizon/medical/hallway/upper)
-"bQQ" = (
-/obj/structure/cable/green{
- icon_state = "1-4"
- },
-/obj/structure/platform_deco{
- dir = 8
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
-/turf/simulated/floor/carpet/rubber,
-/area/horizon/operations/machinist)
"bQX" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -14405,7 +14427,7 @@
/area/centcom/spawning)
"bRp" = (
/obj/effect/floor_decal/corner/dark_blue/full,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
@@ -14624,18 +14646,6 @@
/obj/effect/floor_decal/industrial/hatch_door/engineering,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/heads/chief)
-"bSH" = (
-/obj/structure/platform,
-/obj/effect/floor_decal/corner_wide/black{
- dir = 10
- },
-/obj/structure/machinery/firealarm/east,
-/obj/effect/floor_decal/corner_wide/black{
- dir = 5
- },
-/obj/structure/machinery/mineral/rigpress,
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist)
"bSN" = (
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller{
frequency = 1337;
@@ -14673,7 +14683,7 @@
/turf/simulated/floor/carpet/red,
/area/horizon/service/library)
"bTb" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -14713,19 +14723,6 @@
},
/turf/unsimulated/floor,
/area/centcom/evac)
-"bTs" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/junction/yjunction{
- dir = 1
- },
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/structure/lattice/catwalk/indoor/grate,
-/turf/simulated/floor/plating,
-/area/horizon/operations/lobby)
"bTv" = (
/obj/structure/shuttle_part/scc_space_ship{
icon_state = "d3-6"
@@ -15290,7 +15287,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
@@ -15501,13 +15498,13 @@
icon_state = "1-8"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
- },
/obj/structure/machinery/light/small{
dir = 4
},
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"bYQ" = (
@@ -15626,7 +15623,6 @@
icon_state = "0-4"
},
/obj/structure/machinery/power/apc/shuttle/north,
-/obj/structure/machinery/floodlight,
/turf/simulated/floor/plating,
/area/horizon/shuttle/intrepid/port_compartment)
"bZX" = (
@@ -15708,7 +15704,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner_wide/yellow{
@@ -15841,7 +15837,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -15900,7 +15896,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
@@ -15911,7 +15907,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
@@ -16113,15 +16109,6 @@
},
/turf/simulated/floor/holofloor/wood,
/area/horizon/holodeck/source_sauna)
-"cdM" = (
-/obj/effect/floor_decal/corner/brown{
- dir = 10
- },
-/obj/effect/floor_decal/industrial/warning/corner{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"cdO" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 9
@@ -16583,7 +16570,7 @@
dir = 8
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled,
/area/horizon/operations/office)
"cgW" = (
@@ -16627,9 +16614,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
@@ -16680,7 +16667,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/brown{
@@ -16943,7 +16930,7 @@
/turf/space,
/area/horizon/exterior)
"cjn" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -17069,9 +17056,9 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/indra/mainchamber)
"ckn" = (
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
@@ -17189,7 +17176,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/door/airlock/multi_tile/glass{
@@ -17296,7 +17283,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/map_effect/window_spawner/full/reinforced/firedoor,
@@ -17444,31 +17431,6 @@
},
/turf/unsimulated/floor,
/area/centcom/legion/hangar5)
-"cnt" = (
-/obj/effect/floor_decal/corner/purple{
- dir = 5
- },
-/obj/structure/machinery/button/remote/blast_door{
- id = "shutters_deck2_auxcustdesk";
- name = "Auxiliary Custodial Closet Desk Shutter";
- pixel_x = -25;
- pixel_y = 25;
- req_access = list(26);
- dir = 1
- },
-/obj/structure/machinery/button/remote/blast_door{
- id = "shutters_deck2_auxcustwindow";
- name = "Auxiliary Custodial Closet Window Shutter";
- pixel_x = -36;
- pixel_y = 25;
- req_access = list(26);
- dir = 1
- },
-/obj/structure/bed/stool/chair/office/dark{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/horizon/service/custodial/auxiliary)
"cnw" = (
/obj/effect/floor_decal/corner/mauve/diagonal,
/obj/effect/floor_decal/corner/mauve{
@@ -17546,10 +17508,6 @@
icon_state = "1-2"
},
/obj/effect/decal/cleanable/dirt,
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
- },
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
},
@@ -17559,6 +17517,10 @@
/obj/effect/floor_decal/industrial/warning{
dir = 8
},
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"coi" = (
@@ -17610,10 +17572,6 @@
/turf/simulated/floor/tiled/full,
/area/horizon/operations/secure_ammunition_storage)
"coz" = (
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
- },
/obj/structure/cable/green{
icon_state = "1-4"
},
@@ -17624,6 +17582,10 @@
dir = 5
},
/obj/structure/lattice/catwalk/indoor/grate,
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_1/central)
"coA" = (
@@ -18342,7 +18304,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
@@ -18694,7 +18656,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/door/airlock/glass_mining{
@@ -19106,7 +19068,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -19255,7 +19217,6 @@
/obj/item/stock_parts/micro_laser,
/obj/item/stock_parts/scanning_module,
/obj/item/stock_parts/scanning_module,
-/obj/item/stock_parts/scanning_module,
/obj/item/stock_parts/console_screen,
/obj/item/stock_parts/console_screen,
/obj/item/stack/cable_coil/random,
@@ -19307,9 +19268,6 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
- },
/obj/structure/bed/stool/chair/padded/black{
dir = 1
},
@@ -19474,9 +19432,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark/damaged,
/turf/simulated/floor,
@@ -19656,6 +19614,11 @@
/obj/structure/flora/bush/adhomai,
/turf/simulated/floor/holofloor/snow,
/area/horizon/holodeck/source_adhomai)
+"cBr" = (
+/obj/structure/machinery/vending/overloaders,
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/hallway/primary/deck_2/starboard)
"cBu" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel{
@@ -19862,6 +19825,16 @@
/obj/random/maintenance_junk_or_loot,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
+"cCJ" = (
+/obj/structure/platform,
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/spline/plain/purple,
+/obj/structure/cable/green{
+ icon_state = "2-8"
+ },
+/obj/structure/extinguisher_cabinet/east,
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"cCN" = (
/turf/simulated/wall/r_wall,
/area/horizon/command/bridge/controlroom)
@@ -20208,7 +20181,7 @@
/area/horizon/medical/reception)
"cFR" = (
/obj/structure/machinery/light/floor,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled,
@@ -20312,19 +20285,6 @@
/obj/structure/machinery/photocopier,
/turf/simulated/floor/tiled/full,
/area/horizon/command/bridge/cciaroom)
-"cGO" = (
-/obj/structure/machinery/computer/rdconsole/robotics{
- dir = 4
- },
-/obj/effect/floor_decal/corner_wide/black{
- dir = 9
- },
-/obj/structure/machinery/light{
- dir = 8
- },
-/obj/effect/floor_decal/industrial/outline/yellow,
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist)
"cGR" = (
/obj/structure/machinery/light/small{
dir = 1
@@ -20689,13 +20649,13 @@
icon_state = "4-8"
},
/obj/effect/decal/cleanable/dirt,
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
- },
/obj/structure/cable{
icon_state = "2-8"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"cJl" = (
@@ -21107,7 +21067,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -21123,7 +21083,7 @@
/turf/unsimulated/floor,
/area/centcom/control)
"cMo" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor,
@@ -21153,6 +21113,26 @@
"cMK" = (
/turf/simulated/floor,
/area/tdome/tdome1)
+"cMM" = (
+/obj/structure/railing/mapped,
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/structure/cable/green{
+ icon_state = "1-8"
+ },
+/obj/effect/floor_decal/corner/brown{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist/surgicalbay)
"cMN" = (
/obj/structure/bed/stool/chair{
dir = 4
@@ -21198,7 +21178,7 @@
dir = 9
},
/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/structure/machinery/r_n_d/circuit_imprinter,
+/obj/structure/machinery/r_n_d/fabricator/circuit_imprinter,
/obj/structure/railing/mapped{
dir = 8
},
@@ -21282,7 +21262,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/railing/mapped{
@@ -21341,7 +21321,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/floor_decal/corner_wide/yellow{
@@ -21569,36 +21549,6 @@
/obj/structure/machinery/alarm/west,
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/central)
-"cPR" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/obj/effect/floor_decal/corner_wide/brown{
- dir = 5
- },
-/obj/structure/machinery/button/switch/windowtint{
- dir = 4;
- id = "workshopsurgery";
- pixel_x = 22;
- pixel_y = -2
- },
-/obj/structure/machinery/light/small/floor{
- pixel_y = -16
- },
-/obj/structure/machinery/button/switch/holosign{
- dir = 4;
- id = "workshop_surgery";
- pixel_x = 22;
- pixel_y = 10
- },
-/obj/structure/bed/stool/chair/office/dark{
- dir = 8
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist/surgicalbay)
"cPS" = (
/obj/structure/flora/ausbushes/leafybush,
/turf/simulated/floor/exoplanet/grass,
@@ -21907,9 +21857,9 @@
dir = 9
},
/obj/random/dirt_75,
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
@@ -22058,7 +22008,7 @@
},
/area/centcom/legion/hangar5)
"cSp" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate{
color = "#FFFFFF"
},
@@ -22487,7 +22437,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/hangar/operations)
"cUS" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/map_effect/door_helper/unres,
@@ -22565,7 +22515,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -23009,9 +22959,6 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow{
dir = 10
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
- },
/obj/structure/cable/green{
icon_state = "2-8"
},
@@ -23022,6 +22969,9 @@
icon_state = "1-8"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/interstitial)
"cYI" = (
@@ -23223,7 +23173,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/shuttle/intrepid/buffet)
"cZU" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_green{
dir = 5
},
@@ -23280,7 +23230,7 @@
req_one_access = list(24,11,67,73);
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
@@ -23509,7 +23459,7 @@
req_one_access = list(24,11,67,73);
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
@@ -23576,6 +23526,16 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/selfdestruct)
+"dcv" = (
+/obj/structure/railing/mapped{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/brown{
+ dir = 6
+ },
+/obj/effect/floor_decal/industrial/arrow/yellow,
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"dcw" = (
/obj/effect/floor_decal/corner/grey{
dir = 9
@@ -23810,7 +23770,7 @@
/turf/unsimulated/floor,
/area/centcom/legion/hangar5)
"det" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/purple/full{
@@ -23870,29 +23830,12 @@
/obj/structure/table/reinforced/steel,
/turf/simulated/floor/wood,
/area/horizon/command/heads/chief)
-"deA" = (
-/obj/effect/floor_decal/industrial/outline_straight/yellow{
- dir = 8
- },
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"deB" = (
/obj/structure/railing/mapped{
dir = 8
},
/turf/simulated/open,
/area/horizon/operations/office)
-"deD" = (
-/obj/structure/window/shuttle/scc_space_ship,
-/obj/structure/grille,
-/obj/structure/machinery/door/firedoor,
-/obj/structure/machinery/door/blast/shutters{
- id = "machinist_fab_shutters";
- name = "Machinist Workshop Garage Shutter"
- },
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"deG" = (
/obj/effect/floor_decal/spline/plain{
dir = 5
@@ -24115,7 +24058,16 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/indra/mainchamber)
"dfN" = (
-/obj/structure/machinery/floodlight,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/structure/table/rack,
+/obj/item/deployable_kit{
+ pixel_y = 12
+ },
+/obj/item/deployable_kit{
+ pixel_y = 6
+ },
+/obj/item/deployable_kit,
+/obj/effect/floor_decal/industrial/outline/operations,
/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
@@ -24238,7 +24190,7 @@
/turf/simulated/floor/reinforced/nitrogen,
/area/horizon/engineering/atmos/air)
"dgF" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
@@ -24267,22 +24219,6 @@
/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/medical/cryo)
-"dhb" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 8
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"dhd" = (
/obj/structure/bed/stool/chair/office/dark{
dir = 4
@@ -24550,7 +24486,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor/multi_tile,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -24830,7 +24766,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate,
@@ -24920,6 +24856,23 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/lab)
+"dkk" = (
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/cable/green{
+ icon_state = "1-4"
+ },
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
+/area/horizon/operations/machinist)
"dkl" = (
/obj/effect/floor_decal/industrial/warning{
dir = 6
@@ -25015,10 +24968,6 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/storage_hard/lower)
"dkT" = (
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -25032,6 +24981,9 @@
icon_state = "4-8"
},
/obj/structure/machinery/firealarm/south,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/wood,
/area/horizon/repoffice/representative_one)
"dkV" = (
@@ -25350,6 +25302,30 @@
/obj/effect/floor_decal/industrial/outline/red,
/turf/simulated/floor/tiled/white,
/area/shuttle/hapt)
+"dmO" = (
+/obj/structure/platform_stairs/full/east_west_cap,
+/obj/structure/platform/cutout{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/machinery/light_switch/north{
+ pixel_x = 4;
+ pixel_y = 24
+ },
+/obj/structure/railing/mapped,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist/surgicalbay)
"dmP" = (
/turf/simulated/floor/holofloor/space,
/area/horizon/holodeck/source_space)
@@ -25552,7 +25528,7 @@
/obj/effect/floor_decal/corner/brown{
dir = 5
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled,
/area/horizon/operations/break_room)
"doi" = (
@@ -25590,6 +25566,28 @@
"dok" = (
/turf/simulated/wall/r_wall,
/area/horizon/rnd/xenoarch/spectrometry)
+"dol" = (
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/structure/cable/green{
+ icon_state = "1-4"
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/bed/stool/chair{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist)
"doo" = (
/obj/structure/railing/mapped{
dir = 4
@@ -25644,7 +25642,7 @@
/turf/simulated/floor/tiled/freezer,
/area/shuttle/skipjack)
"dov" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/industrial/warning{
@@ -25659,18 +25657,6 @@
/obj/structure/lattice,
/turf/space,
/area/horizon/exterior)
-"dox" = (
-/obj/structure/noticeboard{
- dir = 1;
- pixel_y = -29;
- pixel_x = 2
- },
-/obj/structure/bed/stool/chair{
- dir = 1
- },
-/obj/effect/floor_decal/corner/brown/full,
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
"doU" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/atmospherics/binary/pump/on{
@@ -25693,9 +25679,9 @@
/turf/space,
/area/horizon/exterior)
"dpc" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/power/apc/low/west,
@@ -25881,25 +25867,6 @@
},
/turf/simulated/floor,
/area/horizon/command/bridge/bridge_crew)
-"dpT" = (
-/obj/effect/floor_decal/corner/dark_green{
- dir = 10
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/obj/structure/cable/green{
- icon_state = "1-4"
- },
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_3/starboard)
"dpX" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -26335,7 +26302,7 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 8
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_2/fore)
@@ -26422,7 +26389,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -26526,14 +26493,18 @@
/turf/simulated/floor/tiled/white,
/area/horizon/medical/icu)
"dtU" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
},
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/obj/structure/disposalpipe/junction{
+ dir = 8;
+ icon_state = "pipe-j2"
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
},
/obj/structure/cable/green{
icon_state = "2-8"
@@ -26611,21 +26582,6 @@
dir = 8
},
/area/centcom/holding)
-"duA" = (
-/obj/structure/disposalpipe/junction{
- dir = 1
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 8
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"duC" = (
/obj/structure/machinery/light{
dir = 8
@@ -26724,7 +26680,7 @@
icon_state = "1-2"
},
/obj/structure/machinery/door/firedoor/multi_tile,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/hatch_door/service{
dir = 8
},
@@ -27475,19 +27431,6 @@
},
/turf/unsimulated/floor/wood,
/area/antag/mercenary)
-"dzP" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"dzQ" = (
/obj/effect/floor_decal/industrial/outline/service,
/turf/simulated/floor/tiled/dark/full,
@@ -27852,6 +27795,20 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/rnd/xenobiology/xenoflora)
+"dCf" = (
+/obj/effect/floor_decal/corner/dark_green,
+/obj/effect/floor_decal/corner/brown{
+ dir = 9
+ },
+/obj/effect/floor_decal/corner/brown{
+ dir = 10
+ },
+/obj/structure/machinery/light,
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"dCh" = (
/obj/effect/floor_decal/corner/dark_blue{
dir = 10
@@ -28053,7 +28010,7 @@
name = "Bridge Blast Doors";
opacity = 0
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled/full,
@@ -28145,7 +28102,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -28182,15 +28139,6 @@
},
/turf/simulated/floor/holofloor/carpet,
/area/horizon/holodeck/source_courtroom)
-"dDO" = (
-/obj/structure/disposalpipe/segment{
- dir = 1
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"dDT" = (
/obj/structure/railing/mapped{
dir = 1
@@ -28238,9 +28186,9 @@
dir = 4
},
/obj/effect/floor_decal/industrial/outline/security,
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/turf/simulated/floor/tiled,
/area/horizon/security/hallway)
@@ -28283,7 +28231,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -28328,7 +28276,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/far)
"dEY" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -28637,7 +28585,7 @@
icon_state = "1-2"
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/brown/diagonal,
/turf/simulated/floor/tiled/dark,
/area/horizon/operations/mining_main/eva)
@@ -29111,12 +29059,6 @@
},
/turf/simulated/floor/tiled/white,
/area/horizon/medical/surgery)
-"dKx" = (
-/obj/structure/machinery/conveyor{
- id = "Robocompo"
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"dKy" = (
/obj/structure/closet/secure_closet/merchant,
/turf/simulated/floor/tiled/dark,
@@ -29519,7 +29461,7 @@
/obj/structure/machinery/light_switch/west{
pixel_y = -3
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/warning/corner{
dir = 4
},
@@ -30164,7 +30106,7 @@
/obj/effect/floor_decal/corner/brown{
dir = 6
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -30353,6 +30295,17 @@
/obj/structure/machinery/light/small,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
+"dTt" = (
+/obj/structure/disposalpipe/junction{
+ dir = 4;
+ icon_state = "pipe-j2"
+ },
+/obj/effect/floor_decal/corner/dark_blue{
+ dir = 10
+ },
+/obj/structure/extinguisher_cabinet/south,
+/turf/simulated/floor/tiled,
+/area/horizon/security/hallway)
"dTu" = (
/obj/structure/closet/crate/freezer,
/obj/item/reagent_containers/blood/OMinus,
@@ -30428,6 +30381,10 @@
},
/turf/simulated/floor/tiled/full,
/area/horizon/storage/eva)
+"dTZ" = (
+/obj/effect/floor_decal/industrial/warning,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"dUj" = (
/obj/structure/flora/ausbushes/lavendergrass,
/obj/effect/floor_decal/spline/plain{
@@ -30654,25 +30611,6 @@
},
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/air)
-"dVT" = (
-/obj/structure/machinery/cell_charger{
- pixel_y = 12;
- pixel_x = -2
- },
-/obj/structure/table/steel,
-/obj/effect/floor_decal/spline/plain/brown{
- dir = 4
- },
-/obj/item/radio/intercom/west,
-/obj/structure/machinery/cell_charger{
- pixel_y = 3;
- pixel_x = -2
- },
-/obj/structure/machinery/power/outlet{
- pixel_x = 10
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"dWa" = (
/obj/effect/landmark/entry_point/fore{
name = "fore, brig communal"
@@ -30767,7 +30705,7 @@
req_one_access = list(12,25,26,28,29,31,35,37,48,63,67);
name = "Deck 2 Central Fore Maintenance"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -30971,7 +30909,7 @@
/turf/space,
/area/horizon/exterior)
"dXV" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable/green{
icon_state = "1-2"
@@ -31105,7 +31043,7 @@
/turf/simulated/wall/r_wall,
/area/horizon/rnd/lab)
"dYZ" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -31268,7 +31206,7 @@
"dZT" = (
/obj/effect/floor_decal/corner/grey/diagonal,
/obj/effect/floor_decal/spline/plain/green,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled/white,
@@ -31367,7 +31305,7 @@
name = "Captain Desk Shutters";
opacity = 0
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/item/storage/secure/briefcase,
/obj/structure/machinery/button/switch/windowtint{
dir = 4;
@@ -31392,7 +31330,7 @@
/obj/structure/machinery/door/firedoor{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/sign/urban/staff{
@@ -31906,7 +31844,7 @@
/obj/effect/floor_decal/corner/dark_blue{
dir = 10
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -31938,35 +31876,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/port)
-"edH" = (
-/obj/item/reagent_containers/food/condiment/shaker/peppermill{
- pixel_x = 3;
- pixel_y = 9
- },
-/obj/item/reagent_containers/food/condiment/shaker/salt{
- pixel_y = 9;
- pixel_x = 8
- },
-/obj/structure/table/wood/gamblingtable,
-/obj/structure/machinery/power/outlet{
- pixel_y = 3
- },
-/obj/item/flame/candle{
- pixel_x = -8;
- pixel_y = 9
- },
-/obj/item/flame/candle{
- pixel_x = -4;
- pixel_y = 9
- },
-/obj/effect/floor_decal/spline/fancy/wood{
- dir = 10
- },
-/turf/simulated/floor/wood,
-/area/horizon/service/mess_hall)
"edI" = (
/obj/structure/machinery/light{
dir = 4
@@ -32237,7 +32149,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/dark/full,
@@ -32295,6 +32207,13 @@
},
/turf/simulated/floor/wood,
/area/horizon/command/bridge/cciaroom/lounge)
+"efC" = (
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/service/starboard)
"efD" = (
/obj/effect/floor_decal/corner/dark_blue{
dir = 10
@@ -32466,7 +32385,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_green/full{
dir = 4
},
@@ -33112,15 +33031,6 @@
/obj/effect/floor_decal/corner/dark_green{
dir = 5
},
-/obj/structure/cable/green{
- icon_state = "2-8"
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/central)
"elw" = (
@@ -33340,7 +33250,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/gravity_gen)
"enb" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -33520,6 +33430,13 @@
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/reinforced/airless,
/area/horizon/exterior)
+"enU" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"enZ" = (
/turf/unsimulated/wall/darkshuttlewall,
/area/tdome/tdomeadmin)
@@ -34067,9 +33984,6 @@
pixel_x = -1;
pixel_y = 8
},
-/obj/structure/disposalpipe/trunk{
- dir = 8
- },
/obj/item/reagent_containers/food/condiment/sugar{
pixel_x = -5;
pixel_y = -3
@@ -34498,7 +34412,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/aft_airlock)
"euu" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_blue/diagonal,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
@@ -34689,23 +34603,6 @@
/obj/structure/table/reinforced/steel,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/service/kitchen)
-"ewp" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/cable/green{
- icon_state = "2-4"
- },
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 1
- },
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/service/starboard)
"ewq" = (
/obj/effect/floor_decal/corner/dark_blue{
dir = 8
@@ -34768,7 +34665,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled/full,
@@ -35070,7 +34967,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/near)
"eyw" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -35158,7 +35055,7 @@
/turf/simulated/floor/holofloor/wood,
/area/horizon/holodeck/source_courtroom)
"ezc" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable{
@@ -35255,18 +35152,6 @@
},
/turf/simulated/floor/tiled/white,
/area/horizon/service/kitchen)
-"ezv" = (
-/obj/effect/floor_decal/corner/brown{
- dir = 5
- },
-/obj/structure/platform_stairs/full{
- dir = 8
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
"ezx" = (
/obj/structure/disposalpipe/junction{
icon_state = "pipe-j2"
@@ -35410,6 +35295,23 @@
/obj/random/maintenance_junk_or_loot,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
+"eAY" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/spline/plain/corner/purple,
+/obj/structure/platform_deco{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable/green{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"eAZ" = (
/obj/structure/bed/stool{
dir = 1
@@ -35510,6 +35412,12 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/on,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/storage_hard/aft)
+"eBP" = (
+/obj/structure/bed/stool/chair{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
"eBQ" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 1
@@ -35560,26 +35468,6 @@
},
/turf/simulated/floor/holofloor/lino,
/area/horizon/holodeck/source_chapel)
-"eCc" = (
-/obj/structure/closet/crate,
-/obj/item/stack/material/lead{
- amount = 10
- },
-/obj/item/stack/material/phoron{
- amount = 20
- },
-/obj/item/stack/material/uranium{
- amount = 10
- },
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/machinery/light{
- dir = 1
- },
-/obj/structure/railing/mapped/no_density/low{
- dir = 8
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"eCg" = (
/obj/random/junk,
/obj/effect/floor_decal/industrial/warning{
@@ -35679,7 +35567,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -35701,6 +35589,17 @@
},
/turf/simulated/floor/tiled,
/area/horizon/security/brig)
+"eDn" = (
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/corner/brown{
+ dir = 5
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist)
"eDs" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -35989,7 +35888,7 @@
/turf/simulated/floor/wood,
/area/horizon/repoffice/consular_two)
"eEA" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/dark_blue{
@@ -36110,7 +36009,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable{
@@ -36311,7 +36210,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -36505,12 +36404,6 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/storage_hard/upper)
-"eHy" = (
-/obj/effect/floor_decal/industrial/loading/yellow{
- dir = 4
- },
-/turf/simulated/floor/carpet/rubber,
-/area/horizon/operations/machinist)
"eHz" = (
/obj/structure/table/wood,
/turf/simulated/floor/carpet,
@@ -36554,9 +36447,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
@@ -36572,7 +36465,7 @@
/turf/simulated/floor/airless,
/area/horizon/exterior)
"eIc" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -36608,7 +36501,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 6
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/sign/directions/prop{
@@ -36628,15 +36521,6 @@
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/horizon/service/kitchen)
-"eIu" = (
-/obj/effect/floor_decal/corner/dark_green{
- dir = 5
- },
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/horizon/security/checkpoint2)
"eIv" = (
/obj/effect/floor_decal/spline/plain{
dir = 9
@@ -36812,9 +36696,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
@@ -36831,6 +36715,17 @@
},
/turf/simulated/floor/tiled,
/area/horizon/engineering/hallway/interior)
+"eJN" = (
+/obj/structure/machinery/conveyor{
+ id = "Robocompo"
+ },
+/obj/structure/machinery/camera{
+ c_tag = "Operations - Machinist Workshop 1";
+ network = list("Operations");
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"eJT" = (
/obj/structure/grille,
/obj/structure/window/shuttle/scc_space_ship,
@@ -37128,16 +37023,6 @@
/obj/structure/lattice,
/turf/simulated/open,
/area/horizon/hallway/primary/deck_2/central)
-"eMG" = (
-/obj/effect/floor_decal/corner/mauve{
- dir = 9
- },
-/obj/structure/machinery/camera/network/research{
- c_tag = "Research - Corridor Camera 4";
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/horizon/rnd/hallway/secondary)
"eMH" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
@@ -37267,7 +37152,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/door/blast/shutters/open{
@@ -37510,7 +37395,7 @@
/turf/simulated/floor/carpet/rubber,
/area/horizon/tcommsat/chamber)
"eQq" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "2-8"
},
@@ -37600,9 +37485,9 @@
/turf/unsimulated/floor/marble,
/area/antag/wizard)
"eQR" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/effect/floor_decal/industrial/warning{
dir = 1
@@ -37645,6 +37530,15 @@
},
/turf/simulated/floor/tiled/full,
/area/horizon/operations/break_room)
+"eQZ" = (
+/obj/item/modular_computer/console/preset/supply/machinist,
+/obj/structure/machinery/camera{
+ c_tag = "Operations - Machinist Surgical Theatre";
+ network = list("Operations")
+ },
+/obj/effect/floor_decal/spline/plain/red,
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
"eRe" = (
/obj/effect/floor_decal/corner/mauve{
dir = 1
@@ -37714,6 +37608,22 @@
/obj/structure/table/steel,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port)
+"eRB" = (
+/obj/structure/machinery/conveyor_switch/oneway{
+ desc = "A conveyor control switch. It appears to only go in one direction. Controls the components conveyor belt.";
+ id = "Robocompo";
+ pixel_y = 16;
+ pixel_x = -7
+ },
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 4
+ },
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist)
"eRI" = (
/obj/structure/cable/green{
icon_state = "4-8"
@@ -37787,7 +37697,7 @@
/obj/structure/cable/green{
icon_state = "2-4"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -37829,7 +37739,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/shuttle/skipjack)
"eRZ" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -37936,7 +37846,7 @@
dir = 8
},
/obj/structure/machinery/door/firedoor,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled/dark/full,
@@ -37986,14 +37896,14 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/open,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"eSN" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/security/port)
"eSO" = (
@@ -38181,8 +38091,8 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/turf/simulated/floor/tiled/white,
/area/horizon/medical/gen_treatment)
@@ -38203,6 +38113,21 @@
},
/turf/space,
/area/horizon/exterior)
+"eTX" = (
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/structure/platform{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/brown/full{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist)
"eUa" = (
/obj/effect/floor_decal/corner/yellow,
/obj/effect/floor_decal/corner/dark_blue{
@@ -38593,24 +38518,6 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/locker_room)
-"eWQ" = (
-/obj/item/stack/cable_coil{
- pixel_x = -6
- },
-/obj/structure/table/steel,
-/obj/effect/floor_decal/spline/plain/brown{
- dir = 4
- },
-/obj/structure/machinery/recharger{
- pixel_x = -6;
- pixel_y = 10
- },
-/obj/item/robotanalyzer{
- pixel_y = 5;
- pixel_x = 3
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"eWU" = (
/obj/structure/machinery/portable_atmospherics/canister/oxygen,
/turf/unsimulated/floor{
@@ -38646,7 +38553,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -38768,7 +38675,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/floor_decal/industrial/warning/cee,
@@ -38960,7 +38867,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -39235,29 +39142,6 @@
},
/turf/simulated/floor/shuttle/black,
/area/shuttle/distress)
-"fcm" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/machinery/door/firedoor{
- req_one_access = list(24,11,67,73);
- dir = 4
- },
-/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/obj/structure/machinery/door/airlock/glass{
- dir = 4
- },
-/turf/simulated/floor/tiled/full,
-/area/horizon/hallway/primary/deck_3/starboard)
"fcv" = (
/obj/effect/floor_decal/corner/dark_blue{
dir = 6
@@ -39388,7 +39272,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
@@ -39534,7 +39418,7 @@
/obj/structure/machinery/light/small{
dir = 4
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/service/port)
@@ -39730,7 +39614,9 @@
/area/horizon/service/mess_hall)
"ffl" = (
/obj/structure/machinery/disposal/small/south,
-/obj/structure/disposalpipe/trunk,
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -39857,9 +39743,9 @@
"ffM" = (
/obj/structure/table/standard,
/obj/item/stack/packageWrap,
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/turf/simulated/floor/tiled,
/area/horizon/operations/break_room)
@@ -40217,6 +40103,33 @@
/obj/structure/sign/nosmoking_2,
/turf/simulated/wall,
/area/merchant_station/warehouse)
+"fix" = (
+/obj/structure/machinery/light,
+/obj/item/radio/intercom/west,
+/obj/structure/closet/secure_closet/machinist,
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
+"fiz" = (
+/obj/structure/platform_deco{
+ dir = 4
+ },
+/obj/structure/platform_deco{
+ dir = 1
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/machinery/light/floor{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"fiK" = (
/obj/structure/railing/mapped{
dir = 4
@@ -40336,7 +40249,7 @@
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -40532,7 +40445,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/horizon/hangar/intrepid/interstitial)
@@ -40875,7 +40788,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/random/junk,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel,
@@ -40909,7 +40822,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/bridge/aibunker)
"fnH" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -40927,7 +40840,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"fnL" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -40944,7 +40857,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold4w/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 8
@@ -41169,19 +41082,6 @@
/obj/structure/bed/stool/chair/plastic,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/near)
-"fpr" = (
-/obj/effect/floor_decal/corner/brown{
- dir = 10
- },
-/obj/effect/floor_decal/industrial/warning,
-/obj/structure/cable/green{
- icon_state = "2-8"
- },
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"fps" = (
/obj/structure/table/rack,
/obj/item/tank/oxygen/red,
@@ -41251,7 +41151,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled,
@@ -41364,6 +41264,29 @@
},
/turf/simulated/floor/wood,
/area/horizon/service/chapel/office)
+"fqh" = (
+/obj/effect/floor_decal/corner/purple{
+ dir = 9
+ },
+/obj/structure/machinery/light_switch{
+ dir = 8;
+ pixel_x = -22;
+ pixel_y = 23
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/structure/cable/green{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/tiled/full,
+/area/horizon/service/custodial/auxiliary)
"fqm" = (
/obj/structure/cable/green{
icon_state = "0-2"
@@ -41421,7 +41344,7 @@
/area/horizon/security/evidence_storage)
"fqG" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -41732,6 +41655,19 @@
},
/turf/simulated/floor/tiled/dark,
/area/shuttle/legion)
+"fsn" = (
+/obj/structure/machinery/door/airlock/maintenance{
+ dir = 4;
+ name = "Machinist Workshop Maintenance";
+ req_access = list(29)
+ },
+/obj/effect/floor_decal/industrial/hatch_door/yellow,
+/obj/structure/machinery/door/firedoor{
+ req_one_access = list(24,11,67,73);
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_2/service/starboard)
"fsp" = (
/obj/effect/floor_decal/industrial/outline/emergency_closet,
/obj/structure/closet/emcloset,
@@ -42129,6 +42065,18 @@
/obj/item/melee/energy/axe,
/turf/simulated/floor,
/area/tdome/tdome1)
+"fvM" = (
+/obj/effect/floor_decal/spline/plain/corner/red{
+ dir = 8
+ },
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist)
"fvR" = (
/obj/effect/floor_decal/industrial/outline/grey,
/obj/effect/decal/cleanable/dirt,
@@ -42405,6 +42353,18 @@
},
/turf/simulated/floor/tiled/white,
/area/merchant_station)
+"fxZ" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable/green{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"fye" = (
/obj/effect/floor_decal/corner/red/diagonal,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -42584,6 +42544,11 @@
/obj/structure/machinery/power/apc/shuttle/west,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/shuttle/intrepid/buffet)
+"fzB" = (
+/obj/structure/machinery/vending/robotics,
+/obj/item/radio/intercom/east,
+/turf/simulated/floor/tiled/full,
+/area/horizon/operations/machinist)
"fzD" = (
/obj/structure/machinery/door/blast/shutters/open{
dir = 4;
@@ -42600,9 +42565,9 @@
/obj/structure/cable/green{
icon_state = "1-4"
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
@@ -42810,7 +42775,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor,
/area/horizon/security/investigations_hallway)
@@ -42832,7 +42797,7 @@
/obj/effect/floor_decal/corner/mauve{
dir = 5
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled,
@@ -42851,6 +42816,10 @@
},
/turf/simulated/floor/tiled/white,
/area/horizon/command/heads/cmo)
+"fBR" = (
+/obj/structure/machinery/fabricator/autolathe,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"fBS" = (
/obj/structure/bed/stool/padded/brown{
dir = 1
@@ -43172,9 +43141,9 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/far)
"fEo" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
@@ -43203,9 +43172,9 @@
/turf/simulated/floor/tiled,
/area/horizon/storage/primary)
"fEv" = (
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
@@ -43351,22 +43320,6 @@
/obj/structure/flora/ausbushes/lavendergrass,
/turf/simulated/floor/exoplanet/grass/grove,
/area/centcom/shared_dream)
-"fFe" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/obj/structure/railing/mapped/no_density/low{
- dir = 8
- },
-/obj/structure/cable/green{
- icon_state = "1-4"
- },
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"fFi" = (
/obj/effect/floor_decal/industrial/warning{
dir = 1
@@ -43478,9 +43431,9 @@
icon_state = "2-4"
},
/obj/effect/decal/cleanable/blood/oil,
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
@@ -43779,7 +43732,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -43820,9 +43773,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/turf/simulated/floor/tiled/white,
/area/horizon/medical/gen_treatment)
@@ -44130,18 +44083,6 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/ai/chamber)
-"fKP" = (
-/obj/structure/platform,
-/obj/effect/floor_decal/corner_wide/black{
- dir = 10
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/floor_decal/corner_wide/black{
- dir = 5
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist)
"fKS" = (
/obj/structure/heavy_vehicle_frame,
/obj/structure/machinery/mech_recharger,
@@ -44220,9 +44161,9 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
@@ -44496,7 +44437,7 @@
/turf/simulated/floor/tiled,
/area/horizon/operations/loading)
"fMJ" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/platform{
dir = 4
},
@@ -44798,7 +44739,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"fPa" = (
@@ -44922,7 +44863,7 @@
/area/horizon/engineering/reactor/supermatter/mainchamber)
"fPV" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_blue/diagonal,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
@@ -44946,6 +44887,17 @@
},
/turf/unsimulated/floor,
/area/antag/raider)
+"fQh" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/structure/machinery/disposal/small/west,
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/obj/effect/floor_decal/spline/plain/purple{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist)
"fQi" = (
/obj/item/modular_computer/console/preset/medical{
dir = 1
@@ -45880,7 +45832,7 @@
/turf/unsimulated/floor,
/area/centcom/holding)
"fVW" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable{
@@ -46060,7 +46012,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_green,
/obj/structure/cable{
icon_state = "4-8"
@@ -46258,21 +46210,6 @@
"fYU" = (
/turf/simulated/floor/wood,
/area/horizon/command/bridge/meeting_room)
-"fYV" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/simulated/floor/tiled/full,
-/area/horizon/hallway/primary/deck_2/starboard)
"fZf" = (
/obj/structure/table/stone/marble,
/obj/item/storage/box/fancy/donut{
@@ -46361,6 +46298,26 @@
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor,
/area/horizon/command/bridge/upperdeck)
+"fZD" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/structure/cable/green{
+ icon_state = "2-4"
+ },
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/horizon/operations/machinist)
"fZH" = (
/turf/simulated/wall/shuttle/unique/ert{
icon_state = "8,3"
@@ -46408,6 +46365,18 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/storage/secure/ops_vault)
+"fZV" = (
+/obj/effect/floor_decal/corner/dark_blue{
+ dir = 10
+ },
+/obj/effect/floor_decal/corner/dark_blue/full,
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
+/obj/structure/machinery/disposal/small/east,
+/obj/item/radio/intercom/south,
+/turf/simulated/floor/tiled,
+/area/horizon/security/hallway)
"fZY" = (
/obj/effect/floor_decal/corner/grey/diagonal,
/obj/effect/floor_decal/spline/plain/green,
@@ -46757,7 +46726,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"gbZ" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 1
@@ -46851,7 +46820,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/wood,
/area/horizon/command/heads/captain)
"gcv" = (
@@ -46917,7 +46886,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -47155,17 +47124,17 @@
},
/area/centcom/holding)
"gff" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor,
@@ -47196,9 +47165,9 @@
/obj/effect/floor_decal/corner/mauve{
dir = 5
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/turf/simulated/floor/tiled,
/area/horizon/rnd/hallway)
@@ -47561,6 +47530,17 @@
icon_state = "beach"
},
/area/horizon/holodeck/source_moghes)
+"gij" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"gin" = (
/obj/structure/machinery/light,
/turf/simulated/floor/reinforced,
@@ -48204,7 +48184,7 @@
/turf/simulated/floor/tiled/gunmetal/full,
/area/horizon/operations/ship_supply_warehouse)
"gmp" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
@@ -48304,7 +48284,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -48347,7 +48327,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled,
@@ -48699,9 +48679,16 @@
},
/turf/simulated/open/airless,
/area/horizon/exterior)
+"gpr" = (
+/obj/structure/machinery/light/small/floor,
+/obj/effect/floor_decal/spline/fancy/wood/cee{
+ dir = 8
+ },
+/turf/simulated/floor/wood,
+/area/horizon/service/cafeteria)
"gpw" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -48752,6 +48739,16 @@
icon_state = "3,5"
},
/area/shuttle/legion)
+"gpU" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 10
+ },
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"gpZ" = (
/obj/structure/disposaloutlet{
dir = 4
@@ -48857,7 +48854,7 @@
/turf/simulated/floor/reinforced,
/area/horizon/shuttle/canary)
"gqA" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -48878,7 +48875,7 @@
/turf/unsimulated/floor/linoleum,
/area/antag/actor)
"gqF" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -48995,7 +48992,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -49311,6 +49308,11 @@
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard/far)
+"gtm" = (
+/obj/structure/machinery/hologram/holopad,
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"gtn" = (
/obj/effect/floor_decal/corner/dark_blue/full{
dir = 1
@@ -49462,6 +49464,9 @@
/obj/structure/railing/mapped{
dir = 4
},
+/obj/structure/machinery/camera/network/research{
+ c_tag = "Research - Corridor Camera 4"
+ },
/turf/simulated/floor/grass/no_edge,
/area/horizon/rnd/hallway/secondary)
"guM" = (
@@ -49566,20 +49571,6 @@
/obj/structure/machinery/vending/coffee,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/hallway/fore)
-"gvg" = (
-/obj/structure/disposalpipe/segment{
- dir = 1
- },
-/obj/structure/machinery/door/firedoor,
-/obj/effect/floor_decal/industrial/hatch_door/operations{
- dir = 1
- },
-/obj/structure/machinery/door/blast/shutters{
- id = "workshop_garage";
- name = "Machinist Workshop Garage Shutter"
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"gvh" = (
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/railing/mapped,
@@ -49697,7 +49688,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor,
@@ -49789,7 +49780,7 @@
/turf/simulated/open,
/area/horizon/maintenance/deck_2/research)
"gwp" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -49836,7 +49827,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -49885,9 +49876,35 @@
},
/turf/simulated/floor/carpet/rubber,
/area/horizon/tcommsat/chamber)
+"gwQ" = (
+/obj/structure/machinery/newscaster/north,
+/obj/structure/filingcabinet/filingcabinet{
+ pixel_x = 10;
+ pixel_y = 1
+ },
+/obj/structure/machinery/papershredder{
+ pixel_x = -6
+ },
+/obj/effect/floor_decal/corner/dark_blue/full{
+ dir = 1
+ },
+/obj/structure/machinery/light{
+ dir = 4
+ },
+/obj/structure/machinery/ringer/north{
+ dir = 4;
+ pixel_y = 0;
+ pixel_x = 10;
+ department = "Security";
+ id = "security_ringer";
+ req_access = null;
+ req_one_access = list(1)
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/security/office)
"gwU" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor,
@@ -50240,7 +50257,7 @@
/area/centcom/bar)
"gzq" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/plating,
@@ -50545,9 +50562,9 @@
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
@@ -50911,6 +50928,25 @@
"gEq" = (
/turf/simulated/floor/tiled/ramp/bottom,
/area/shuttle/mercenary)
+"gEz" = (
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/obj/item/paper_bin{
+ pixel_x = -3;
+ pixel_y = 4
+ },
+/obj/structure/machinery/button/switch/windowtint{
+ id = "workshopfabrication";
+ pixel_x = 10
+ },
+/obj/item/pen/black{
+ pixel_x = -3;
+ pixel_y = 4
+ },
+/obj/structure/table/reinforced/glass,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"gEA" = (
/obj/effect/floor_decal/industrial/warning{
dir = 5
@@ -51076,7 +51112,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled,
@@ -51209,7 +51245,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/dark/full,
@@ -51491,6 +51527,21 @@
/obj/item/crowbar/rescue_axe/tactical,
/turf/unsimulated/floor/monotile,
/area/antag/burglar)
+"gHQ" = (
+/obj/structure/table/wood,
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 4
+ },
+/obj/structure/railing/mapped{
+ dir = 4
+ },
+/obj/random/pottedplant_small{
+ pixel_x = 4;
+ pixel_y = 4
+ },
+/obj/effect/floor_decal/spline/fancy/wood/cee,
+/turf/simulated/floor/wood,
+/area/horizon/hallway/primary/deck_2/central)
"gHX" = (
/obj/structure/railing/mapped{
dir = 8
@@ -51514,13 +51565,6 @@
/obj/structure/machinery/door/firedoor,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/service/custodial/auxiliary)
-"gIg" = (
-/obj/structure/cable/green{
- icon_state = "1-4"
- },
-/obj/structure/lattice/catwalk/indoor/grate,
-/turf/simulated/floor/plating,
-/area/horizon/operations/lobby)
"gIi" = (
/obj/effect/floor_decal/industrial/warning{
dir = 1
@@ -51631,7 +51675,7 @@
},
/area/horizon/holodeck/source_desert)
"gJa" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
@@ -51664,15 +51708,6 @@
/obj/structure/railing/mapped{
dir = 8
},
-/obj/item/clothing/suit/trinary_robes{
- pixel_x = 17
- },
-/obj/item/clothing/suit/trinary_robes{
- pixel_x = 17
- },
-/obj/item/clothing/suit/trinary_robes{
- pixel_x = 17
- },
/obj/item/versebook/trinary,
/obj/item/versebook/trinary,
/obj/item/versebook/trinary,
@@ -51718,6 +51753,15 @@
/obj/structure/machinery/holosign/service/bar,
/turf/simulated/wall,
/area/horizon/hallway/primary/deck_2/central)
+"gJz" = (
+/obj/structure/machinery/door/blast/shutters{
+ id = "workshop_garage";
+ name = "Machinist Workshop Garage Shutter"
+ },
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"gJE" = (
/obj/structure/table/reinforced/wood,
/obj/structure/machinery/chemical_dispenser/coffeemaster/full{
@@ -51769,7 +51813,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/brown{
@@ -52008,7 +52052,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -52587,13 +52631,6 @@
},
/turf/unsimulated/floor/wood,
/area/antag/actor)
-"gPP" = (
-/obj/effect/floor_decal/industrial/outline_straight/yellow{
- dir = 10
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"gPS" = (
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 8
@@ -52611,6 +52648,19 @@
/obj/effect/floor_decal/industrial/warning/full,
/turf/simulated/floor/plating,
/area/horizon/engineering/bluespace_drive)
+"gPV" = (
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable/green{
+ icon_state = "1-2"
+ },
+/obj/structure/machinery/light/small/floor,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"gQh" = (
/obj/structure/machinery/light/small{
dir = 8
@@ -52739,7 +52789,7 @@
/turf/simulated/open/airless,
/area/horizon/exterior)
"gQP" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/door/firedoor{
@@ -52771,7 +52821,7 @@
/turf/simulated/floor/tiled,
/area/horizon/crew/fitness/gym)
"gRc" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -52787,20 +52837,6 @@
icon_state = "8,0"
},
/area/centcom/specops)
-"gRp" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/door/airlock/maintenance{
- name = "Deck 2 Stairwell Maintenance";
- req_one_access = list(12,22,25,67)
- },
-/obj/effect/floor_decal/industrial/hatch_door/yellow{
- dir = 8
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/door/firedoor,
-/obj/effect/map_effect/door_helper/unres,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/stairwell/starboard/deck_2)
"gRu" = (
/obj/structure/bonfire/light_up,
/turf/simulated/floor/beach/sand{
@@ -52919,7 +52955,7 @@
},
/area/centcom/specops)
"gSq" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -53071,7 +53107,7 @@
/area/horizon/maintenance/deck_3/crewlounge)
"gTw" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/plating,
@@ -53191,7 +53227,7 @@
/obj/effect/floor_decal/corner/brown{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled,
@@ -53346,7 +53382,7 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/random/dirt_75,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor,
@@ -53366,7 +53402,7 @@
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_3/port)
"gVj" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -53529,7 +53565,7 @@
/turf/simulated/floor/tiled/dark,
/area/shuttle/legion)
"gWu" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable{
icon_state = "1-2"
@@ -54013,7 +54049,7 @@
/obj/effect/floor_decal/corner/brown{
dir = 6
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -54105,9 +54141,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/effect/floor_decal/spline/fancy/wood/corner,
/turf/simulated/floor/wood,
@@ -54521,6 +54557,22 @@
},
/turf/simulated/floor/tiled,
/area/horizon/engineering/hallway/aft)
+"hdg" = (
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ icon_state = "pipe-c"
+ },
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 1
+ },
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
+ },
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor/plating,
+/area/horizon/hallway/primary/deck_2/starboard)
"hdh" = (
/obj/effect/floor_decal/corner/full,
/turf/simulated/floor/marble/dark,
@@ -54718,7 +54770,7 @@
/turf/space,
/area/horizon/exterior)
"hez" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
@@ -54907,6 +54959,19 @@
},
/turf/simulated/floor/tiled/white,
/area/horizon/crew/fitness/showers)
+"hfs" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/structure/bed/stool/chair/office/dark{
+ dir = 1
+ },
+/obj/effect/floor_decal/spline/plain/purple{
+ dir = 5
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist)
"hfw" = (
/obj/effect/floor_decal/corner/red/diagonal,
/turf/simulated/floor/tiled/dark,
@@ -54976,7 +55041,7 @@
name = "Medical";
req_access = list(5)
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor,
/obj/structure/machinery/door/blast/shutters{
density = 0;
@@ -55079,9 +55144,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/effect/floor_decal/corner/brown/full,
/obj/structure/machinery/firealarm/south,
@@ -55383,9 +55448,9 @@
/obj/structure/cable/green{
icon_state = "2-8"
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
@@ -55445,7 +55510,7 @@
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_2/central)
"hjj" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -55472,7 +55537,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/hangar/airstation)
"hjs" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -55661,7 +55726,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate,
@@ -55687,8 +55752,8 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 5
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/obj/structure/machinery/light/small/floor,
/obj/effect/landmark/start{
@@ -55815,18 +55880,6 @@
/obj/structure/machinery/firealarm/west,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/service/chapel/main)
-"hlO" = (
-/obj/effect/floor_decal/corner/brown/full{
- dir = 1
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
"hlP" = (
/obj/effect/floor_decal/corner_wide/green{
dir = 9
@@ -55849,7 +55902,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -56375,16 +56428,6 @@
icon_state = "wood"
},
/area/centcom/legion/hangar5)
-"hop" = (
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 8
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"hoq" = (
/obj/effect/floor_decal/spline/plain/black,
/obj/structure/bed/stool/chair/office/dark{
@@ -56445,9 +56488,9 @@
},
/area/centcom/holding)
"hoU" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/platform{
dir = 4
@@ -56628,7 +56671,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/light{
@@ -56737,19 +56780,6 @@
},
/turf/simulated/open,
/area/horizon/medical/hallway/upper)
-"hre" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/turf/simulated/floor/tiled/full,
-/area/horizon/hallway/primary/deck_2/starboard)
"hrf" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden,
/obj/effect/decal/cleanable/dirt,
@@ -56819,7 +56849,7 @@
/turf/simulated/floor/wood,
/area/horizon/command/heads/xo_office)
"hry" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -56902,7 +56932,7 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/reactor/supermatter/smes)
"hrS" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable{
@@ -57275,7 +57305,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -57598,7 +57628,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner_wide/green{
@@ -57613,10 +57643,6 @@
/turf/simulated/floor/tiled/white,
/area/horizon/medical/hallway/upper)
"hvw" = (
-/obj/structure/disposalpipe/junction{
- dir = 1;
- icon_state = "pipe-j2"
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
@@ -57627,6 +57653,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor,
/area/horizon/command/bridge/upperdeck)
"hvy" = (
@@ -57659,7 +57686,7 @@
/turf/unsimulated/floor/plating,
/area/centcom/legion)
"hvJ" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
@@ -57678,6 +57705,20 @@
},
/turf/simulated/floor/tiled/full,
/area/horizon/stairwell/port/deck_3)
+"hvP" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 9
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/machinery/disposal/small/west,
+/obj/effect/floor_decal/spline/plain/corner/brown,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist)
"hvX" = (
/obj/random/pottedplant,
/obj/structure/machinery/light{
@@ -57768,9 +57809,9 @@
/obj/effect/floor_decal/industrial/warning/corner{
dir = 1
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/damaged{
color = "#4c535b"
@@ -57836,13 +57877,6 @@
},
/turf/simulated/floor/tiled,
/area/horizon/service/hydroponics/lower)
-"hxa" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"hxb" = (
/obj/structure/bed/stool/chair{
name = "uncomfortable chair";
@@ -57886,7 +57920,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -58166,9 +58200,9 @@
/obj/structure/cable/green{
icon_state = "1-4"
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
@@ -58499,7 +58533,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -58743,8 +58777,8 @@
/obj/structure/machinery/light/small{
dir = 8
},
-/obj/structure/machinery/floodlight,
/obj/effect/floor_decal/industrial/outline/operations,
+/obj/structure/table/rack,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard)
"hDy" = (
@@ -58887,7 +58921,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_2/fore)
"hEz" = (
@@ -58914,7 +58948,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/door/firedoor,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
@@ -58950,7 +58984,7 @@
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled,
@@ -59053,7 +59087,7 @@
/turf/simulated/floor/tiled,
/area/horizon/command/bridge/bridge_crew)
"hFw" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -59188,7 +59222,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -59223,7 +59257,7 @@
dir = 1;
id = "QMLoad"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/industrial/hatch/operations,
@@ -59290,14 +59324,6 @@
/obj/structure/machinery/light/small/floor,
/turf/simulated/floor/wood,
/area/horizon/service/bar)
-"hHf" = (
-/obj/structure/machinery/door/blast/shutters/open{
- id = "mech_bay_shutter";
- name = "Mech Bay Shutters"
- },
-/obj/effect/map_effect/window_spawner/full/reinforced/firedoor,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"hHg" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -59324,6 +59350,7 @@
pixel_x = -2;
pixel_y = 5
},
+/obj/item/wrench,
/turf/simulated/floor/tiled/dark/full{
temperature = 278
},
@@ -59346,7 +59373,7 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -59576,7 +59603,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
@@ -59613,7 +59640,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable{
icon_state = "1-4"
},
@@ -59736,18 +59763,6 @@
},
/turf/unsimulated/floor,
/area/centcom/holding)
-"hKc" = (
-/obj/effect/floor_decal/corner/brown{
- dir = 6
- },
-/obj/structure/engineer_maintenance/electric{
- dir = 1
- },
-/obj/structure/engineer_maintenance/pipe{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
"hKh" = (
/obj/structure/window/reinforced{
dir = 1;
@@ -59768,7 +59783,7 @@
/turf/unsimulated/floor/plating,
/area/centcom/legion/hangar5)
"hKk" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -59893,7 +59908,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -60868,7 +60883,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/plating,
@@ -61209,8 +61224,8 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
@@ -61325,16 +61340,16 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
},
/obj/effect/floor_decal/corner/brown{
dir = 6
},
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
+ },
/turf/simulated/floor/tiled,
/area/horizon/operations/mining_main/refinery)
"hVQ" = (
@@ -61574,8 +61589,8 @@
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/obj/structure/cable{
icon_state = "2-4"
@@ -61668,7 +61683,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -61801,7 +61816,7 @@
/turf/unsimulated/floor/wood,
/area/centcom/evac)
"hYZ" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/near)
@@ -61855,7 +61870,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate,
@@ -61963,13 +61978,6 @@
},
/turf/simulated/floor/exoplanet/grass/grove,
/area/centcom/shared_dream)
-"iah" = (
-/obj/effect/floor_decal/industrial/outline_straight/yellow{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/unary/vent_pump/on,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"iai" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -62019,7 +62027,7 @@
/turf/simulated/floor/carpet/rubber,
/area/horizon/rnd/xenobiology/xenoflora)
"iaw" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/research)
@@ -62110,7 +62118,7 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate,
@@ -62244,11 +62252,6 @@
},
/turf/simulated/floor/tiled,
/area/horizon/hangar/airstation)
-"ibT" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/lattice/catwalk/indoor/grate/white,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"ibU" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -62509,7 +62512,7 @@
/turf/simulated/floor/tiled,
/area/horizon/engineering/lobby)
"idh" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
@@ -62572,7 +62575,7 @@
/turf/simulated/floor/carpet,
/area/horizon/repoffice/consular_one)
"idC" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-4"
},
@@ -62613,7 +62616,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/light{
@@ -62983,7 +62986,7 @@
},
/obj/structure/machinery/door/airlock/research{
name = "Research Maintenance Conduit";
- req_access = list(47);
+ req_access = list(7);
dir = 4
},
/obj/structure/cable/green{
@@ -63052,7 +63055,7 @@
},
/area/centcom/legion/hangar5)
"igx" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_green{
dir = 9
},
@@ -63287,13 +63290,6 @@
},
/turf/simulated/floor/tiled,
/area/horizon/rnd/hallway)
-"iiE" = (
-/obj/structure/disposalpipe/segment{
- dir = 1
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"iiI" = (
/obj/effect/floor_decal/industrial/warning/cee{
dir = 4
@@ -63938,7 +63934,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
@@ -64072,8 +64068,8 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/indra/mainchamber)
"ioj" = (
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/obj/structure/cable/green{
icon_state = "4-8"
@@ -64181,7 +64177,7 @@
/obj/effect/floor_decal/spline/plain/green{
dir = 8
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/white,
/area/horizon/service/kitchen)
"ioM" = (
@@ -64245,17 +64241,6 @@
/obj/structure/railing/mapped,
/turf/simulated/open,
/area/horizon/operations/office)
-"ioY" = (
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"ipa" = (
/obj/effect/floor_decal/corner_wide/green{
dir = 5
@@ -64579,9 +64564,9 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor,
@@ -65072,7 +65057,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/full,
/area/horizon/stairwell/starboard/deck_2)
"iuW" = (
@@ -65178,7 +65163,7 @@
/obj/effect/floor_decal/corner/dark_green{
dir = 5
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_2/starboard)
"ivu" = (
@@ -65771,7 +65756,7 @@
"iza" = (
/obj/structure/machinery/disposal/small/north,
/obj/structure/disposalpipe/trunk{
- dir = 1
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -65843,7 +65828,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/platform,
@@ -66216,7 +66201,7 @@
/obj/structure/cable/green{
icon_state = "1-8"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
@@ -66407,7 +66392,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
@@ -66506,8 +66491,8 @@
c_tag = "Service - Mess Hall 4";
dir = 8
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/obj/effect/floor_decal/corner/dark_green/full{
dir = 4
@@ -67080,9 +67065,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
@@ -67100,7 +67085,7 @@
/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
"iIh" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -67129,13 +67114,13 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
- },
/obj/structure/cable/green{
icon_state = "4-8"
},
+/obj/structure/disposalpipe/junction{
+ dir = 4;
+ icon_state = "pipe-j2"
+ },
/turf/simulated/floor/tiled,
/area/horizon/command/bridge/upperdeck)
"iIH" = (
@@ -67589,13 +67574,6 @@
"iLL" = (
/turf/simulated/wall/r_wall,
/area/horizon/repoffice/consular_one)
-"iLM" = (
-/obj/effect/floor_decal/industrial/outline_straight/yellow{
- dir = 6
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"iLR" = (
/turf/simulated/wall/r_wall,
/area/horizon/engineering/atmos)
@@ -67672,7 +67650,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate,
@@ -67890,7 +67868,7 @@
/turf/simulated/floor/lino,
/area/horizon/service/cafeteria)
"iNU" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/power/apc/east,
@@ -67981,6 +67959,13 @@
},
/turf/unsimulated/floor/dark,
/area/antag/actor)
+"iOB" = (
+/obj/structure/machinery/computer/ship/navigation/terminal{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/outline/yellow,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/engineering/shields)
"iOC" = (
/obj/structure/machinery/fusion_fuel_injector/mapped{
dir = 4;
@@ -68009,10 +67994,6 @@
icon_state = "desert"
},
/area/centcom/shared_dream)
-"iOK" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"iON" = (
/obj/effect/floor_decal/corner/purple/full{
dir = 4
@@ -68259,11 +68240,6 @@
/obj/structure/table/reinforced/steel,
/turf/unsimulated/floor/plating,
/area/centcom/specops)
-"iQj" = (
-/obj/structure/machinery/floodlight,
-/obj/effect/floor_decal/industrial/outline/grey,
-/turf/simulated/floor/plating,
-/area/horizon/hangar/auxiliary)
"iQk" = (
/obj/structure/table/stone/marble,
/obj/effect/floor_decal/industrial/warning/corner,
@@ -68364,7 +68340,7 @@
/turf/simulated/floor/tiled/full,
/area/horizon/crew/lounge)
"iQL" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 1
@@ -68661,7 +68637,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -68675,7 +68651,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/wing_starboard)
"iTh" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
@@ -68749,6 +68725,17 @@
/obj/effect/floor_decal/industrial/outline/medical,
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/port)
+"iTJ" = (
+/obj/structure/bed/stool/chair/office/light{
+ dir = 8
+ },
+/obj/effect/landmark/start{
+ name = "Machinist"
+ },
+/obj/structure/cable/green,
+/obj/structure/machinery/power/apc/east,
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
"iTL" = (
/obj/effect/floor_decal/corner/mauve{
dir = 10
@@ -68771,6 +68758,16 @@
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard)
+"iTW" = (
+/obj/structure/machinery/door/blast/shutters/open{
+ id = "mech_bay_shutter";
+ name = "Mech Bay Shutters"
+ },
+/obj/effect/map_effect/window_spawner/full/reinforced/polarized/firedoor{
+ id = "workshopfabrication"
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"iUf" = (
/obj/structure/cable/green{
icon_state = "1-2"
@@ -68815,7 +68812,7 @@
/turf/unsimulated/floor/wood,
/area/centcom/evac)
"iUv" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/light/small{
dir = 8
},
@@ -69454,7 +69451,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -69506,7 +69503,7 @@
/area/horizon/engineering/reactor/indra/mainchamber)
"iYS" = (
/obj/structure/machinery/door/firedoor,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
@@ -69630,7 +69627,7 @@
/obj/structure/cable/green{
icon_state = "1-4"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner_wide/yellow{
@@ -69866,7 +69863,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/operations/starboard/amidships)
"jaF" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -69882,6 +69879,17 @@
/obj/effect/floor_decal/corner/mauve/diagonal,
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/xenoarch/atrium)
+"jaI" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/spline/plain/purple{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/machinery/vending/wardrobe/robo_wardrobe,
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"jaK" = (
/obj/effect/floor_decal/corner/brown,
/obj/effect/decal/cleanable/dirt,
@@ -70019,7 +70027,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -70095,7 +70103,7 @@
},
/area/centcom/ferry)
"jce" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/button/remote/blast_door{
@@ -70339,7 +70347,7 @@
icon_state = "4-8"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/plating,
@@ -70593,9 +70601,9 @@
/area/horizon/operations/office)
"jgi" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/machinery/light/small{
dir = 1
@@ -70673,6 +70681,16 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/rnd/xenobiology/xenoflora)
+"jgF" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/spline/plain/purple{
+ dir = 8
+ },
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist)
"jgH" = (
/obj/structure/disposalpipe/segment,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -70742,14 +70760,14 @@
/turf/unsimulated/floor,
/area/centcom/legion/hangar5)
"jhe" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/brown/diagonal,
/turf/simulated/floor/tiled/dark,
/area/horizon/operations/mining_main/eva)
"jhh" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/spline/plain/black,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/research)
@@ -70873,27 +70891,6 @@
},
/turf/simulated/floor/reinforced/airless,
/area/horizon/exterior/no_shields)
-"jia" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/obj/structure/cable/green{
- icon_state = "2-8"
- },
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
- },
-/obj/effect/floor_decal/industrial/outline_straight/service{
- dir = 8
- },
-/obj/effect/floor_decal/corner/dark_green{
- dir = 5
- },
-/turf/simulated/floor/tiled/dark,
-/area/horizon/service/bar)
"jib" = (
/obj/structure/shuttle_part/mercenary/small{
icon_state = "4,1"
@@ -71200,7 +71197,7 @@
/obj/effect/floor_decal/corner/dark_green{
dir = 5
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable/green{
@@ -71283,9 +71280,9 @@
/turf/simulated/floor/reinforced/airless,
/area/horizon/exterior)
"jkG" = (
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
@@ -71485,15 +71482,6 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled,
/area/horizon/engineering/equipment)
-"jlJ" = (
-/obj/effect/floor_decal/industrial/outline_straight/yellow{
- dir = 4
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"jlN" = (
/obj/effect/floor_decal/corner/mauve/full{
dir = 1
@@ -71544,7 +71532,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -71685,6 +71673,15 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/rnd/xenoarch/atrium)
+"jmU" = (
+/obj/structure/platform{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/loading/red{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"jmX" = (
/obj/effect/floor_decal/industrial/warning/corner{
dir = 4
@@ -71867,7 +71864,7 @@
/obj/effect/floor_decal/corner/dark_blue{
dir = 5
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled,
@@ -72153,7 +72150,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/port/far)
"jpY" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable,
/obj/structure/machinery/power/terminal{
dir = 4
@@ -72371,7 +72368,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -72617,23 +72614,6 @@
"jtk" = (
/turf/simulated/wall/shuttle/scc,
/area/horizon/shuttle/intrepid/buffet)
-"jtm" = (
-/obj/structure/table/reinforced/steel,
-/obj/structure/machinery/door/window/desk/northright{
- name = "Machinist Workshop Desk";
- req_one_access = list(29)
- },
-/obj/structure/machinery/door/firedoor,
-/obj/random/pottedplant_small{
- pixel_x = 10;
- pixel_y = -9
- },
-/obj/structure/machinery/door/blast/shutters{
- id = "shutters_deck2_workshopdesk";
- name = "Machinist Workshop Desk Shutter"
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"jtn" = (
/obj/structure/foamedmetal,
/obj/structure/shuttle_part/scc_space_ship{
@@ -72690,6 +72670,16 @@
},
/turf/simulated/floor/tiled,
/area/horizon/storage/primary)
+"jtG" = (
+/obj/structure/railing/mapped{
+ dir = 4
+ },
+/obj/structure/machinery/computer/security/terminal/public{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/outline/yellow,
+/turf/simulated/floor/tiled/full,
+/area/horizon/hallway/primary/deck_2/central)
"jtJ" = (
/obj/structure/machinery/atmospherics/pipe/manifold/visible,
/turf/simulated/floor/tiled/dark,
@@ -72831,6 +72821,21 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/crewlounge)
+"juY" = (
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 8
+ },
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist)
"jvb" = (
/obj/random/pottedplant,
/obj/effect/floor_decal/spline/fancy/wood{
@@ -73275,10 +73280,10 @@
/area/horizon/security/interrogation_2)
"jxL" = (
/obj/effect/decal/cleanable/dirt,
-/obj/random/maintenance_junk_or_loot,
/obj/effect/floor_decal/industrial/warning{
dir = 5
},
+/obj/random/maintenance_junk_or_loot,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard)
"jxS" = (
@@ -73428,7 +73433,7 @@
icon_state = "4-8"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/random/dirt_75,
@@ -73456,16 +73461,6 @@
},
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/chemistry)
-"jyY" = (
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/structure/disposalpipe/segment{
- dir = 1
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"jzd" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion_r";
@@ -73747,14 +73742,6 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/shuttle/mining)
-"jAT" = (
-/obj/effect/floor_decal/corner/dark_green{
- dir = 5
- },
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/effect/floor_decal/industrial/loading/yellow,
-/turf/simulated/floor/tiled,
-/area/horizon/stairwell/starboard/deck_2)
"jAW" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux{
dir = 4
@@ -73855,12 +73842,6 @@
/obj/random/junk,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/auxatmos)
-"jBE" = (
-/obj/effect/floor_decal/corner/brown{
- dir = 9
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"jBK" = (
/obj/effect/floor_decal/corner/blue{
dir = 4
@@ -74282,7 +74263,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/floor_decal/spline/plain/lime{
dir = 8
@@ -74354,7 +74335,8 @@
icon_state = "4-8"
},
/obj/structure/disposalpipe/sortjunction/flipped{
- sortType = "Hydroponics"
+ sortType = "Hydroponics";
+ name = "Hydroponics"
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
@@ -74678,10 +74660,24 @@
/turf/unsimulated/floor/monotile,
/area/antag/jockey)
"jHI" = (
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/machinery/door/firedoor{
+ req_one_access = list(24,11,67,73);
+ dir = 4
},
-/turf/simulated/floor/tiled,
+/obj/effect/floor_decal/industrial/hatch_door/yellow,
+/obj/structure/machinery/door/airlock/glass{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/central)
"jHP" = (
/obj/effect/floor_decal/corner/beige/diagonal,
@@ -74918,9 +74914,9 @@
/obj/effect/floor_decal/industrial/outline_straight/service{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/turf/simulated/floor/tiled/dark,
/area/horizon/service/bar)
@@ -74958,14 +74954,6 @@
icon_state = "dark_preview"
},
/area/centcom/holding)
-"jJA" = (
-/obj/structure/crate_shelf,
-/obj/effect/floor_decal/spline/plain/brown{
- dir = 4
- },
-/obj/effect/floor_decal/industrial/outline/yellow,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"jJE" = (
/obj/effect/floor_decal/corner/dark_green{
dir = 9
@@ -74975,15 +74963,6 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/service/mess_hall)
-"jJG" = (
-/obj/effect/floor_decal/spline/fancy/wood{
- dir = 8
- },
-/obj/structure/bed/stool/chair/padded/beige{
- dir = 4
- },
-/turf/simulated/floor/wood,
-/area/horizon/service/mess_hall)
"jJP" = (
/obj/structure/grille,
/obj/structure/window/shuttle/scc_space_ship/cardinal,
@@ -75195,7 +75174,7 @@
/area/horizon/engineering/washroom)
"jLn" = (
/obj/structure/machinery/door/firedoor,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
@@ -75292,7 +75271,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
@@ -75416,17 +75395,6 @@
},
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/turbine)
-"jNe" = (
-/obj/structure/machinery/door/blast/shutters{
- id = "workshop_garage";
- name = "Machinist Workshop Garage Shutter"
- },
-/obj/structure/machinery/door/firedoor,
-/obj/effect/floor_decal/industrial/hatch_door/operations{
- dir = 1
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"jNf" = (
/obj/structure/tank_wall{
icon_state = "m-4"
@@ -75437,21 +75405,9 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos)
"jNh" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
/obj/effect/floor_decal/corner/dark_green{
dir = 10
},
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
/obj/structure/machinery/camera/network/third_deck{
c_tag = "Third Deck - Port Hallway 1";
dir = 1
@@ -75632,7 +75588,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -75964,6 +75920,38 @@
/obj/random/maintenance_junk_or_loot,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/far)
+"jPV" = (
+/obj/structure/table/reinforced/glass,
+/obj/structure/machinery/button/switch/windowtint{
+ dir = 1;
+ id = "workshopsurgery";
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/obj/structure/machinery/button/switch/holosign{
+ dir = 1;
+ id = "workshop_surgery";
+ pixel_x = 8;
+ pixel_y = -1
+ },
+/obj/item/reagent_containers/spray/cleaner/surgical{
+ pixel_x = -8;
+ pixel_y = 11
+ },
+/obj/item/reagent_containers/spray/cleaner/surgical{
+ pixel_x = -8;
+ pixel_y = 1
+ },
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/roller_rack/two{
+ pixel_y = 14;
+ pixel_x = 10
+ },
+/obj/effect/floor_decal/spline/plain/red,
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
"jPX" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -76095,7 +76083,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_3/security/port)
"jQN" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
icon_state = "1-2"
@@ -76295,7 +76283,7 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/air)
"jRS" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/research)
"jRW" = (
@@ -76352,7 +76340,7 @@
name = "Break Room";
req_one_access = list(26,29,31,48,67,70)
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled,
@@ -76443,13 +76431,20 @@
icon_state = "desert"
},
/area/centcom/shared_dream)
+"jSK" = (
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/outline/red,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"jSQ" = (
/obj/structure/machinery/iv_drip,
/obj/effect/floor_decal/industrial/outline/red,
/turf/unsimulated/floor/plating,
/area/centcom/specops)
"jSW" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -76458,32 +76453,6 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_1/central)
-"jTa" = (
-/obj/structure/machinery/newscaster/north,
-/obj/structure/filingcabinet/filingcabinet{
- pixel_x = 10;
- pixel_y = 1
- },
-/obj/structure/machinery/papershredder{
- pixel_x = -6
- },
-/obj/effect/floor_decal/corner/dark_blue/full{
- dir = 1
- },
-/obj/structure/machinery/light{
- dir = 4
- },
-/obj/structure/machinery/ringer/north{
- dir = 4;
- pixel_y = 0;
- pixel_x = 10;
- department = "Consular B";
- id = "security_ringer";
- req_access = null;
- req_one_access = list(1)
- },
-/turf/simulated/floor/tiled,
-/area/horizon/security/office)
"jTh" = (
/obj/structure/machinery/conveyor_switch/oneway{
id = "merchant_shipping";
@@ -76633,7 +76602,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 8
@@ -76766,7 +76735,7 @@
/obj/effect/floor_decal/corner/brown{
dir = 5
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled,
@@ -77176,14 +77145,16 @@
/obj/structure/cable/green{
icon_state = "1-4"
},
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/machinery/atmospherics/pipe/manifold4w/hidden/supply,
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ dir = 4
+ },
+/obj/structure/cable/green{
+ icon_state = "1-8"
},
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard)
@@ -77216,25 +77187,6 @@
/obj/effect/floor_decal/corner/grey/diagonal,
/turf/simulated/floor/marble,
/area/horizon/holodeck/source_trinary)
-"jYf" = (
-/obj/effect/floor_decal/corner_wide/brown{
- dir = 10
- },
-/obj/structure/table/steel,
-/obj/structure/machinery/power/outlet{
- pixel_y = -2;
- pixel_x = -8
- },
-/obj/item/robotanalyzer{
- pixel_y = 8;
- pixel_x = 2
- },
-/obj/item/storage/toolbox/electrical{
- pixel_x = 7
- },
-/obj/structure/machinery/firealarm/east,
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist/surgicalbay)
"jYg" = (
/obj/structure/machinery/atmospherics/pipe/manifold/visible/purple,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -77678,7 +77630,7 @@
/turf/simulated/floor/tiled,
/area/horizon/hangar/intrepid)
"kbn" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
@@ -78129,6 +78081,16 @@
/obj/effect/floor_decal/corner/brown/diagonal,
/turf/simulated/floor/tiled/dark,
/area/horizon/holodeck_control)
+"kdV" = (
+/obj/effect/floor_decal/corner/dark_green{
+ dir = 5
+ },
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 8
+ },
+/obj/structure/machinery/alarm/north,
+/turf/simulated/floor/tiled,
+/area/horizon/security/checkpoint2)
"kdY" = (
/obj/structure/cable/green{
icon_state = "4-8"
@@ -78587,12 +78549,6 @@
/obj/structure/machinery/ai_status_display{
pixel_y = -32
},
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
/obj/structure/machinery/light/floor,
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard)
@@ -78829,7 +78785,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable{
@@ -79322,18 +79278,6 @@
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/research)
-"kmi" = (
-/obj/effect/floor_decal/corner/brown{
- dir = 10
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"kmj" = (
/obj/effect/floor_decal/corner/dark_blue{
dir = 10
@@ -79480,9 +79424,9 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/effect/floor_decal/corner_wide/yellow{
dir = 10
@@ -79493,7 +79437,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -80170,6 +80114,10 @@
/obj/effect/map_effect/window_spawner/full/borosilicate/reinforced,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/indra/mainchamber)
+"krt" = (
+/obj/structure/table/reinforced/steel,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"krA" = (
/obj/structure/cable/green{
icon_state = "1-2"
@@ -80303,7 +80251,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/medical/pharmacy)
"ksB" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_green{
dir = 6
},
@@ -80463,7 +80411,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/damaged{
@@ -80586,10 +80534,6 @@
},
/turf/unsimulated/floor,
/area/centcom/holding)
-"kuq" = (
-/obj/structure/lattice/catwalk/indoor/grate,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"kus" = (
/obj/effect/floor_decal/corner/yellow{
dir = 5
@@ -80735,9 +80679,9 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
@@ -81013,9 +80957,9 @@
/obj/effect/floor_decal/spline/plain/green{
dir = 8
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/turf/simulated/floor/tiled/white,
/area/horizon/service/kitchen)
@@ -81405,8 +81349,8 @@
/obj/effect/floor_decal/corner/brown{
dir = 5
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/turf/simulated/floor/tiled,
/area/horizon/operations/office)
@@ -81707,16 +81651,21 @@
},
/turf/unsimulated/floor,
/area/centcom/spawning)
-"kAN" = (
+"kAP" = (
/obj/effect/floor_decal/corner/brown{
- dir = 10
+ dir = 9
},
+/obj/effect/floor_decal/industrial/arrow/yellow{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
- icon_state = "4-8"
+ icon_state = "1-2"
},
-/obj/effect/floor_decal/industrial/warning/corner,
-/obj/structure/disposalpipe/segment{
- dir = 4
+/obj/structure/machinery/light/small{
+ dir = 8
},
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_2/starboard)
@@ -81767,7 +81716,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/door/firedoor,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -81982,18 +81931,6 @@
/obj/effect/floor_decal/industrial/warning/corner,
/turf/simulated/floor/plating,
/area/horizon/engineering/bluespace_drive)
-"kBP" = (
-/obj/effect/floor_decal/corner/brown{
- dir = 5
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
"kBS" = (
/obj/effect/floor_decal/corner/mauve{
dir = 5
@@ -82031,6 +81968,21 @@
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/near)
+"kCd" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 5
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist)
"kCe" = (
/obj/effect/decal/cleanable/cobweb2,
/obj/effect/decal/cleanable/dirt,
@@ -82443,7 +82395,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/gunmetal,
/area/horizon/operations/warehouse)
"kER" = (
@@ -82593,7 +82545,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -82935,7 +82887,7 @@
/obj/effect/floor_decal/spline/plain/corner/green{
dir = 8
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled/white,
@@ -83014,7 +82966,8 @@
dir = 4
},
/obj/structure/disposalpipe/sortjunction/untagged/flipped{
- dir = 4
+ dir = 4;
+ name = "Crusher"
},
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
@@ -83089,19 +83042,6 @@
/obj/effect/floor_decal/industrial/hatch/yellow,
/turf/unsimulated/floor,
/area/centcom/spawning)
-"kIy" = (
-/obj/structure/machinery/light,
-/obj/effect/floor_decal/corner/brown{
- dir = 10
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"kIE" = (
/obj/effect/floor_decal/spline/plain,
/obj/structure/railing/mapped{
@@ -83200,7 +83140,7 @@
/obj/structure/cable{
icon_state = "2-4"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_blue{
dir = 10
},
@@ -83401,10 +83341,6 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/security/firing_range)
"kKH" = (
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
- },
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
@@ -83418,6 +83354,10 @@
},
/obj/structure/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"kKK" = (
@@ -83437,7 +83377,7 @@
/area/horizon/service/mess_hall)
"kKY" = (
/obj/structure/machinery/hologram/holopad,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 1
@@ -83480,7 +83420,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -83503,27 +83443,6 @@
/obj/structure/machinery/firealarm/east,
/turf/simulated/floor/tiled,
/area/horizon/crew/fitness/gym)
-"kLn" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/machinery/door/firedoor,
-/obj/structure/disposalpipe/segment,
-/obj/effect/floor_decal/industrial/hatch_door/operations{
- dir = 1
- },
-/obj/effect/map_effect/door_helper/unres,
-/obj/structure/machinery/holosign/surgery{
- id = "workshop_surgery"
- },
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/structure/machinery/door/airlock/mining{
- name = "Workshop Surgical Theatre";
- req_access = list(29)
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist/surgicalbay)
"kLq" = (
/obj/structure/platform,
/turf/simulated/floor/tiled/dark,
@@ -83789,7 +83708,7 @@
/obj/structure/platform{
dir = 1
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -83925,9 +83844,9 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
@@ -83996,7 +83915,7 @@
/turf/unsimulated/floor,
/area/centcom/specops)
"kOK" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -84044,8 +83963,8 @@
/obj/structure/cable/green{
icon_state = "2-8"
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 10
@@ -84141,10 +84060,6 @@
/turf/simulated/floor/wood,
/area/horizon/repoffice/consular_two)
"kQa" = (
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
@@ -84154,6 +84069,9 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
+/obj/structure/disposalpipe/segment{
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled,
/area/horizon/command/bridge/upperdeck)
"kQc" = (
@@ -84269,6 +84187,22 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/turf/simulated/floor/tiled/full,
/area/horizon/engineering/lobby)
+"kRe" = (
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor/plating,
+/area/horizon/hallway/primary/deck_2/starboard)
"kRj" = (
/obj/random/contraband,
/obj/item/flame/candle{
@@ -84805,13 +84739,6 @@
"kVd" = (
/turf/simulated/floor/holofloor/wood,
/area/horizon/holodeck/source_chapel)
-"kVi" = (
-/obj/structure/disposalpipe/segment{
- dir = 1
- },
-/obj/structure/lattice/catwalk/indoor/grate/white,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"kVl" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/yellow,
/turf/simulated/floor/plating,
@@ -84973,7 +84900,7 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/bluespace_drive/monitoring)
"kWp" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
icon_state = "1-2"
@@ -85080,6 +85007,11 @@
},
/turf/simulated/floor/tiled/white,
/area/horizon/medical/surgery)
+"kXg" = (
+/obj/structure/machinery/mineral/rigpress,
+/obj/structure/machinery/alarm/east,
+/turf/simulated/floor/tiled/full,
+/area/horizon/operations/machinist)
"kXk" = (
/obj/structure/machinery/botany/editor,
/obj/effect/floor_decal/corner/mauve/full,
@@ -85090,7 +85022,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/light{
@@ -85187,7 +85119,7 @@
/obj/structure/cable/green{
icon_state = "1-8"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/gunmetal,
/area/horizon/operations/warehouse)
"kXP" = (
@@ -85302,7 +85234,7 @@
/obj/effect/floor_decal/corner/brown{
dir = 5
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/light_switch/north{
@@ -85373,13 +85305,6 @@
},
/turf/simulated/floor/tiled,
/area/horizon/storage/primary)
-"kYJ" = (
-/obj/effect/floor_decal/industrial/outline_straight/yellow,
-/obj/structure/disposalpipe/segment{
- dir = 1
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"kYP" = (
/obj/structure/table/standard,
/obj/item/paper_scanner{
@@ -85465,7 +85390,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -85786,7 +85711,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -85943,7 +85868,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/brown{
@@ -85957,13 +85882,6 @@
},
/turf/simulated/floor/wood,
/area/horizon/rnd/hallway/secondary)
-"lcu" = (
-/obj/effect/floor_decal/spline/fancy/wood{
- dir = 10
- },
-/obj/structure/machinery/recharge_station,
-/turf/simulated/floor/wood,
-/area/horizon/hallway/primary/deck_2/starboard)
"lcx" = (
/obj/structure/shuttle_part/scc/scout{
icon_state = "7,4"
@@ -86013,7 +85931,7 @@
/area/horizon/engineering/storage/lower)
"lcZ" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/damaged{
@@ -86021,16 +85939,6 @@
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
-"ldd" = (
-/obj/structure/platform_stairs/full,
-/obj/structure/railing/mapped{
- dir = 8
- },
-/obj/structure/platform{
- dir = 8
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist/surgicalbay)
"ldf" = (
/obj/structure/disposalpipe/segment{
dir = 4;
@@ -86362,7 +86270,7 @@
/turf/simulated/open,
/area/horizon/maintenance/deck_2/service/port)
"lfa" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
@@ -86436,9 +86344,9 @@
/obj/structure/cable{
icon_state = "2-4"
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 8
@@ -86752,7 +86660,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -87116,7 +87024,7 @@
},
/area/centcom/legion)
"ljK" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -87196,10 +87104,6 @@
/turf/simulated/floor/exoplanet/grass/grove,
/area/centcom/shared_dream)
"lkb" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
icon_state = "2-8"
@@ -87381,7 +87285,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -87496,9 +87400,9 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
@@ -87731,7 +87635,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/medical/ward/isolation)
"loy" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -87919,7 +87823,7 @@
/turf/simulated/floor/tiled,
/area/horizon/security/brig)
"lpF" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable{
@@ -88191,7 +88095,7 @@
pixel_x = -30;
pixel_y = 26
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled,
@@ -88378,7 +88282,7 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_2/fore)
"lsh" = (
@@ -88744,16 +88648,6 @@
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/hangar/starboard)
-"luo" = (
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/railing/mapped/no_density/low{
- dir = 8
- },
-/obj/structure/railing/mapped/no_density/low,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"lup" = (
/obj/effect/floor_decal/corner/brown{
dir = 9
@@ -88930,7 +88824,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 1
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -89053,23 +88947,14 @@
"lwL" = (
/turf/simulated/wall/shuttle/scc_space_ship/cardinal,
/area/horizon/repoffice/representative_two)
-"lwO" = (
-/obj/structure/cable/green{
- icon_state = "2-4"
+"lwS" = (
+/obj/structure/platform{
+ dir = 4
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/effect/floor_decal/corner/brown{
+ dir = 9
},
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/button/remote/blast_door{
- dir = 1;
- id = "workshop_garage";
- name = "Machinist Workshop Garage Shutters";
- pixel_x = -23;
- pixel_y = 24
- },
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/dark,
/area/horizon/operations/machinist)
"lwW" = (
/obj/structure/flora/bush/grove,
@@ -89288,7 +89173,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/supermatter/mainchamber)
"lyV" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -89502,17 +89387,6 @@
},
/turf/space/transit/north,
/area/template_noop)
-"lAv" = (
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/lattice/catwalk/indoor/grate,
-/turf/simulated/floor/plating,
-/area/horizon/hallway/primary/deck_2/starboard)
"lAw" = (
/obj/structure/table/wood,
/obj/item/taperecorder,
@@ -89611,7 +89485,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/floor_decal/spline/plain/corner/lime{
@@ -89798,7 +89672,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"lCf" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -90070,6 +89944,13 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/propulsion)
+"lDG" = (
+/obj/structure/machinery/optable,
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
"lDP" = (
/obj/effect/decal/fake_object{
dir = 4;
@@ -90300,7 +90181,7 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_2/central)
"lEX" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable{
@@ -90413,6 +90294,26 @@
},
/turf/simulated/floor/plating,
/area/horizon/engineering/reactor/supermatter/mainchamber)
+"lFO" = (
+/obj/structure/platform/cutout,
+/obj/structure/platform_stairs/full/east_west_cap{
+ dir = 8
+ },
+/obj/structure/platform{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"lFQ" = (
/turf/unsimulated/floor/plating,
/area/centcom/legion/hangar5)
@@ -90563,7 +90464,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/service/kitchen)
"lGY" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -90606,7 +90507,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/operations/lobby)
"lHp" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -91122,9 +91023,9 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/shuttle/intrepid/junction_compartment)
"lJQ" = (
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/effect/floor_decal/corner/red/diagonal,
/turf/simulated/floor/tiled,
@@ -91240,7 +91141,7 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard/docks)
"lKz" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/light/small,
@@ -91283,7 +91184,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel{
@@ -91329,17 +91230,6 @@
},
/turf/unsimulated/floor,
/area/centcom/spawning)
-"lKQ" = (
-/obj/structure/platform_stairs/full,
-/obj/structure/disposalpipe/segment,
-/obj/structure/railing/mapped/no_density/low{
- dir = 4
- },
-/obj/structure/railing/mapped/no_density/low{
- dir = 8
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist)
"lKR" = (
/obj/effect/floor_decal/industrial/warning{
dir = 1
@@ -91653,18 +91543,6 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos)
-"lNv" = (
-/obj/item/radio/intercom/south,
-/obj/structure/disposalpipe/junction{
- dir = 4;
- icon_state = "pipe-j2"
- },
-/obj/effect/floor_decal/corner/dark_blue{
- dir = 10
- },
-/obj/structure/extinguisher_cabinet/south,
-/turf/simulated/floor/tiled,
-/area/horizon/security/hallway)
"lNz" = (
/obj/random/dirt_75,
/obj/structure/trash_pile,
@@ -91686,7 +91564,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/starboard)
"lNG" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -92136,13 +92014,6 @@
/obj/structure/machinery/firealarm/west,
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/storage/tech)
-"lSw" = (
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_3/central)
"lSz" = (
/obj/effect/floor_decal/corner/lime/diagonal,
/obj/effect/floor_decal/spline/plain{
@@ -92441,7 +92312,7 @@
/turf/simulated/floor/tiled,
/area/horizon/engineering/hallway/aft)
"lVE" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -92726,7 +92597,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate,
@@ -92917,16 +92788,6 @@
},
/turf/simulated/floor/lino,
/area/merchant_station)
-"lYJ" = (
-/obj/effect/floor_decal/corner/dark_green{
- dir = 5
- },
-/obj/structure/machinery/light{
- dir = 1
- },
-/obj/structure/extinguisher_cabinet/north,
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"lYK" = (
/obj/item/hullbeacon/red,
/obj/structure/sign/securearea{
@@ -92985,9 +92846,6 @@
"lYY" = (
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/propulsion/starboard)
-"lZa" = (
-/turf/simulated/wall/shuttle/scc_space_ship/cardinal,
-/area/horizon/operations/machinist)
"lZd" = (
/obj/structure/platform_deco{
icon_state = "ledge_deco"
@@ -93321,22 +93179,6 @@
/obj/effect/floor_decal/spline/plain/black,
/turf/simulated/floor/carpet/rubber,
/area/horizon/tcommsat/entrance)
-"maF" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/lattice/catwalk/indoor/grate,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/simulated/floor/plating,
-/area/horizon/hallway/primary/deck_2/starboard)
"maQ" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/fake_object{
@@ -93808,13 +93650,6 @@
},
/turf/simulated/floor/holofloor/tiled,
/area/horizon/holodeck/source_emptycourt)
-"meu" = (
-/obj/effect/floor_decal/industrial/outline/grey,
-/obj/structure/reagent_dispensers/cookingoil,
-/turf/simulated/floor/tiled/dark/full{
- temperature = 278
- },
-/area/horizon/service/kitchen/freezer)
"meB" = (
/turf/simulated/wall/r_wall,
/area/horizon/maintenance/deck_1/workshop)
@@ -94368,7 +94203,7 @@
/turf/unsimulated/floor,
/area/centcom/checkpoint/fore)
"mhI" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_green{
dir = 5
},
@@ -94616,7 +94451,7 @@
},
/obj/random/dirt_75,
/obj/item/material/shard,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/dark,
@@ -94658,7 +94493,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/security/armoury)
"mjk" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 1
@@ -94692,7 +94527,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/map_effect/window_spawner/full/reinforced/firedoor,
@@ -94764,8 +94599,15 @@
/turf/unsimulated/floor/plating,
/area/centcom/ferry)
"mjX" = (
-/obj/structure/machinery/alarm/west,
-/obj/structure/machinery/floodlight,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/structure/table/rack,
+/obj/item/deployable_kit{
+ pixel_y = 12
+ },
+/obj/item/deployable_kit{
+ pixel_y = 6
+ },
+/obj/item/deployable_kit,
/obj/effect/floor_decal/industrial/outline/operations,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard)
@@ -94846,6 +94688,16 @@
/obj/structure/machinery/firealarm/east,
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos)
+"mkE" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/spline/plain/purple{
+ dir = 10
+ },
+/obj/structure/bed/stool/chair/office/dark{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist)
"mkG" = (
/obj/effect/floor_decal/corner/grey/diagonal,
/obj/effect/floor_decal/spline/plain/green{
@@ -95299,7 +95151,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/propulsion)
"mnE" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -95371,6 +95223,13 @@
/obj/structure/machinery/alarm/south,
/turf/simulated/floor/tiled,
/area/horizon/service/hydroponics)
+"mox" = (
+/obj/structure/closet/secure_closet/machinist,
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
"moz" = (
/obj/structure/machinery/atmospherics/binary/pump{
dir = 8;
@@ -95403,7 +95262,7 @@
},
/obj/structure/machinery/door/airlock/research{
name = "Research Maintenance Conduit";
- req_access = list(47);
+ req_access = list(7);
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/yellow,
@@ -95666,7 +95525,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "2-4"
},
@@ -95822,17 +95681,9 @@
/obj/effect/floor_decal/corner/dark_green{
dir = 10
},
-/obj/structure/machinery/atmospherics/pipe/manifold4w/hidden/supply,
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable/green{
- icon_state = "1-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
- },
-/obj/structure/cable/green{
- icon_state = "2-8"
+ icon_state = "1-2"
},
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard)
@@ -95898,7 +95749,7 @@
/obj/structure/cable/green{
icon_state = "2-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -96060,6 +95911,16 @@
},
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/xenobiology)
+"mtu" = (
+/obj/structure/machinery/r_n_d/fabricator/mecha_part_fabricator{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/outline/red,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"mtw" = (
/obj/effect/decal/cleanable/cobweb,
/turf/simulated/floor/exoplanet/barren/raskara,
@@ -96113,7 +95974,7 @@
},
/area/horizon/holodeck/source_moghes)
"mtK" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/dark_green/full{
@@ -96454,8 +96315,8 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/decal/cleanable/dirt,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
@@ -96515,7 +96376,7 @@
/obj/effect/floor_decal/corner/purple{
dir = 6
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -96823,6 +96684,19 @@
icon_state = "dark_preview"
},
/area/centcom/control)
+"myU" = (
+/obj/structure/platform{
+ dir = 1
+ },
+/obj/effect/floor_decal/spline/plain/corner/red{
+ dir = 1
+ },
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 10
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist)
"myV" = (
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 4
@@ -96907,7 +96781,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled,
@@ -96957,7 +96831,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"mAg" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -97042,7 +96916,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/brown{
@@ -97113,10 +96987,6 @@
},
/turf/simulated/floor/plating,
/area/horizon/hangar/intrepid)
-"mBr" = (
-/obj/structure/table/reinforced/steel,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/engineering/shields)
"mBL" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -97333,6 +97203,9 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/turbine)
+"mDy" = (
+/turf/simulated/floor/tiled/dark,
+/area/horizon/maintenance/deck_1/wing/starboard)
"mDz" = (
/turf/simulated/wall/shuttle/scc_space_ship/cardinal,
/area/horizon/hangar/intrepid)
@@ -97714,9 +97587,9 @@
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard)
"mFq" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/cable/green{
icon_state = "1-2"
@@ -97747,7 +97620,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/floor_decal/corner/dark_blue/full,
@@ -97898,7 +97771,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/damaged{
color = "#4c535b"
},
@@ -98148,7 +98021,7 @@
"mHJ" = (
/obj/effect/map_effect/door_helper/unres,
/obj/structure/machinery/door/firedoor,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/map_effect/door_helper/level_access/command_foyer{
@@ -98526,25 +98399,6 @@
/obj/structure/machinery/light_switch/west,
/turf/simulated/floor/tiled/white,
/area/horizon/medical/gen_treatment)
-"mKo" = (
-/obj/item/robot_parts/r_arm{
- pixel_y = 1;
- pixel_x = 10
- },
-/obj/item/portable_whiteboard{
- pixel_y = 2;
- pixel_x = -3
- },
-/obj/structure/table/steel,
-/obj/effect/floor_decal/spline/plain/brown{
- dir = 1
- },
-/obj/item/storage/toolbox/electrical{
- pixel_y = 12;
- pixel_x = -3
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"mKp" = (
/obj/effect/floor_decal/corner/dark_blue{
dir = 9
@@ -98594,11 +98448,18 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/security/checkpoint)
"mKI" = (
-/obj/structure/machinery/floodlight,
/obj/structure/railing/mapped{
dir = 8
},
/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/structure/table/rack,
+/obj/item/deployable_kit{
+ pixel_y = 12
+ },
+/obj/item/deployable_kit{
+ pixel_y = 6
+ },
+/obj/item/deployable_kit,
/turf/simulated/floor/plating,
/area/horizon/shuttle/intrepid/port_compartment)
"mKO" = (
@@ -98611,7 +98472,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/brown{
@@ -98776,7 +98637,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor,
/obj/structure/machinery/door/airlock/maintenance{
dir = 1;
@@ -99175,10 +99036,6 @@
/obj/structure/cable/green{
icon_state = "2-8"
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
- },
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
},
@@ -99186,6 +99043,10 @@
dir = 1
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/operations/warehouse)
"mOQ" = (
@@ -99293,9 +99154,9 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/central)
"mPT" = (
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/cable{
icon_state = "1-8"
@@ -99646,25 +99507,6 @@
/obj/structure/window/reinforced,
/turf/simulated/floor/tiled/white,
/area/horizon/crew/fitness/changing)
-"mSj" = (
-/obj/item/integrated_electronics/debugger{
- pixel_x = 5;
- pixel_y = 5
- },
-/obj/item/integrated_electronics/wirer{
- pixel_x = -9;
- pixel_y = 8
- },
-/obj/structure/platform{
- dir = 8
- },
-/obj/structure/table/steel,
-/obj/effect/floor_decal/spline/plain/brown{
- dir = 8
- },
-/obj/structure/railing/mapped/no_density/low,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"mSl" = (
/obj/structure/machinery/atmospherics/portables_connector{
dir = 1
@@ -99900,27 +99742,6 @@
},
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard)
-"mUm" = (
-/obj/structure/closet/walllocker/medical{
- desc = "It's a wall-mounted locker full of SBS and a little blood for augmented crewmembers.";
- name = "SBS closet";
- pixel_x = -32
- },
-/obj/item/reagent_containers/blood/sbs,
-/obj/item/reagent_containers/blood/sbs,
-/obj/item/reagent_containers/blood/OMinus,
-/obj/effect/floor_decal/corner_wide/brown{
- dir = 10
- },
-/obj/structure/machinery/button/remote/blast_door{
- pixel_y = -19;
- id = "machinist_surgery_shutters";
- pixel_x = 4;
- name = "Surgery Viewing Shutters"
- },
-/obj/structure/machinery/iv_drip,
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist/surgicalbay)
"mUn" = (
/turf/simulated/wall/shuttle/scc_space_ship/cardinal,
/area/horizon/ai/upload_foyer)
@@ -100204,12 +100025,33 @@
icon_state = "dark_preview"
},
/area/centcom/specops)
+"mWP" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/spline/plain/purple,
+/obj/structure/platform,
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"mWU" = (
/obj/structure/shuttle/engine/propulsion/burst/right{
dir = 8
},
/turf/simulated/floor/plating,
/area/horizon/shuttle/escape_pod/pod1)
+"mXb" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 5
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist)
"mXh" = (
/obj/structure/machinery/alarm/west,
/obj/effect/floor_decal/corner_wide/yellow{
@@ -100304,9 +100146,9 @@
dir = 6
},
/obj/structure/machinery/firealarm/east,
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/turf/simulated/floor/tiled,
/area/horizon/security/hallway)
@@ -100369,8 +100211,8 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port)
"mYe" = (
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor,
@@ -101312,14 +101154,14 @@
/turf/simulated/floor/tiled,
/area/horizon/operations/lobby)
"ndt" = (
-/obj/structure/cable/green{
- icon_state = "1-4"
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
+ dir = 4
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
},
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/central)
@@ -101523,9 +101365,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
@@ -101747,7 +101589,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/power/sensor{
@@ -101897,7 +101739,7 @@
/turf/unsimulated/floor,
/area/centcom/evac)
"ngR" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -102016,7 +101858,7 @@
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard)
"nhS" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable/green{
@@ -102035,6 +101877,17 @@
},
/turf/unsimulated/floor/rubber_carpet,
/area/centcom/control)
+"nhZ" = (
+/obj/effect/floor_decal/spline/plain/corner/red,
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist)
"nid" = (
/obj/structure/machinery/alarm/north,
/obj/structure/closet/crate/bin,
@@ -102693,6 +102546,13 @@
/obj/effect/map_effect/perma_light/starlight/wide,
/turf/space,
/area/template_noop)
+"nmW" = (
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"nnk" = (
/obj/effect/floor_decal/spline/fancy{
dir = 10
@@ -102892,7 +102752,7 @@
/turf/unsimulated/floor/wood,
/area/centcom/bar)
"npc" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -103129,6 +102989,20 @@
/obj/random/plushie,
/turf/simulated/floor/wood,
/area/merchant_station)
+"nqM" = (
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor/plating,
+/area/horizon/hallway/primary/deck_2/starboard)
"nqN" = (
/obj/structure/lattice/catwalk/indoor/grate{
color = "#FFFFFF"
@@ -103368,7 +103242,7 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/storage/lower)
"nsU" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor,
/obj/structure/machinery/door/airlock/glass_mining{
dir = 1;
@@ -103511,7 +103385,7 @@
/turf/simulated/floor/reinforced/airless,
/area/horizon/exterior)
"ntF" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 1
@@ -103525,22 +103399,8 @@
},
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/port/far)
-"ntJ" = (
-/obj/structure/machinery/mech_recharger,
-/obj/effect/floor_decal/industrial/outline/red,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"ntL" = (
-/obj/structure/table/standard,
/obj/item/firing_pin/test_range,
-/obj/item/clothing/glasses/safety/goggles/science{
- pixel_y = 10
- },
-/obj/item/stack/material/steel/full,
-/obj/item/stack/material/glass/full,
-/obj/item/reagent_containers/glass/beaker/sulphuric{
- pixel_y = 3
- },
/obj/structure/platform{
dir = 1
},
@@ -103552,6 +103412,7 @@
pixel_x = 28;
pixel_y = -5
},
+/obj/structure/machinery/r_n_d/material_silo,
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/lab)
"ntU" = (
@@ -103771,7 +103632,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled,
/area/horizon/hangar/intrepid)
"nvE" = (
@@ -103988,7 +103849,7 @@
dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/near)
"nxM" = (
@@ -104064,8 +103925,14 @@
/obj/structure/machinery/light/spot{
dir = 1
},
-/obj/structure/machinery/floodlight,
/obj/effect/floor_decal/industrial/outline/grey,
+/obj/structure/table/rack,
+/obj/item/deployable_kit{
+ pixel_y = 10
+ },
+/obj/item/deployable_kit{
+ pixel_y = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/hangar/auxiliary)
"nyt" = (
@@ -104378,7 +104245,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/door/firedoor,
@@ -104403,6 +104270,16 @@
icon_state = "5,0"
},
/area/shuttle/legion)
+"nAE" = (
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
+/obj/effect/floor_decal/corner/dark_green{
+ dir = 5
+ },
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"nAJ" = (
/turf/simulated/floor/tiled,
/area/horizon/security/equipment)
@@ -104463,18 +104340,6 @@
/obj/structure/machinery/bluespace_beacon,
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/break_room)
-"nBa" = (
-/obj/effect/landmark/start{
- name = "Machinist"
- },
-/obj/structure/bed/stool/chair/office/dark{
- dir = 4
- },
-/obj/effect/floor_decal/corner/brown{
- dir = 6
- },
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
"nBc" = (
/obj/effect/floor_decal/corner_wide/lime/diagonal,
/obj/effect/floor_decal/industrial/warning{
@@ -104912,7 +104777,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/outline/engineering,
/turf/simulated/floor/tiled/gunmetal/full,
/area/horizon/operations/warehouse)
@@ -105110,9 +104975,9 @@
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
@@ -105459,7 +105324,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/purple{
@@ -105541,7 +105406,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/port)
"nHm" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
@@ -105584,7 +105449,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 8
},
@@ -105643,9 +105508,9 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -105920,7 +105785,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -106087,7 +105952,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
@@ -106125,12 +105990,6 @@
/obj/structure/machinery/door/firedoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/nacelle)
-"nKR" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_3/central)
"nKV" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -106221,7 +106080,7 @@
dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/plating,
@@ -106448,6 +106307,15 @@
/obj/structure/table/wood,
/turf/simulated/floor/wood,
/area/horizon/service/mess_hall)
+"nMY" = (
+/obj/structure/machinery/r_n_d/fabricator/protolathe,
+/obj/structure/machinery/camera{
+ c_tag = "Operations - Machinist Workshop 3";
+ network = list("Operations");
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"nNd" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden{
dir = 4
@@ -107239,7 +107107,7 @@
/obj/effect/floor_decal/industrial/hatch_door/service{
dir = 8
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/service/bar/backroom)
"nTb" = (
@@ -107265,7 +107133,7 @@
/turf/simulated/floor/tiled,
/area/horizon/security/brig)
"nTg" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/alarm/east,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
@@ -107401,6 +107269,13 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/on,
/turf/simulated/floor/tiled/dark,
/area/horizon/service/custodial/disposals/deck_2)
+"nUh" = (
+/obj/structure/machinery/recharge_station,
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 6
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
"nUk" = (
/obj/structure/cable/green{
icon_state = "4-8"
@@ -107471,7 +107346,7 @@
name = "Bar Counter Shutter";
id = "bar_counter_shutter"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/service/bar)
"nUG" = (
@@ -107484,7 +107359,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -107715,6 +107590,14 @@
/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/auxatmos)
+"nWC" = (
+/obj/effect/map_effect/window_spawner/full/reinforced/firedoor,
+/obj/structure/machinery/door/blast/shutters/open{
+ id = "mech_bay_shutter";
+ name = "Mech Bay Shutters"
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"nWF" = (
/obj/structure/machinery/photocopier,
/obj/structure/machinery/firealarm/north{
@@ -107785,6 +107668,20 @@
/obj/structure/machinery/light/small,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/nacelle)
+"nWZ" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 10
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/effect/floor_decal/industrial/warning/corner,
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"nXb" = (
/obj/structure/disposalpipe/segment,
/obj/structure/lattice/catwalk/indoor/grate,
@@ -107797,7 +107694,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/mauve/full{
@@ -107938,7 +107835,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/light/small{
dir = 4
},
@@ -107968,6 +107865,17 @@
},
/turf/simulated/floor/tiled,
/area/horizon/engineering/hallway/fore)
+"nYA" = (
+/obj/effect/floor_decal/corner/dark_green/diagonal,
+/obj/effect/floor_decal/industrial/arrow/yellow,
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/outline_straight/yellow{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"nYB" = (
/obj/effect/map_effect/window_spawner/full/borosilicate/reinforced/firedoor,
/turf/simulated/floor/tiled/dark/full,
@@ -108196,7 +108104,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -108470,17 +108378,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_3/security/starboard)
-"oca" = (
-/obj/effect/floor_decal/corner/dark_blue{
- dir = 10
- },
-/obj/effect/floor_decal/corner/dark_blue/full,
-/obj/structure/disposalpipe/trunk{
- dir = 4
- },
-/obj/structure/machinery/disposal/small/east,
-/turf/simulated/floor/tiled,
-/area/horizon/security/hallway)
"ocb" = (
/obj/structure/table/wood,
/obj/item/modular_computer/laptop/preset/security/hos{
@@ -108516,6 +108413,10 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
},
+/obj/structure/table/rack/folding_table,
+/obj/item/deployable_kit/surgery_table{
+ pixel_y = 11
+ },
/turf/simulated/floor/tiled/white,
/area/horizon/shuttle/intrepid/medical)
"ocj" = (
@@ -109266,7 +109167,7 @@
icon_state = "1-2"
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 8
},
@@ -109509,14 +109410,14 @@
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
dir = 1
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
- },
/obj/effect/floor_decal/corner/purple{
dir = 10
},
/obj/structure/machinery/light,
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
+ },
/turf/simulated/floor/tiled,
/area/horizon/service/custodial)
"oiQ" = (
@@ -109555,21 +109456,6 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/medical/morgue)
-"oiU" = (
-/obj/structure/disposalpipe/junction{
- dir = 8
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_3/central)
"oiZ" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/universal{
dir = 4
@@ -109652,11 +109538,11 @@
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
- },
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"ojr" = (
@@ -109711,7 +109597,7 @@
/turf/simulated/open,
/area/horizon/operations/office)
"ojQ" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/brown{
@@ -109885,7 +109771,7 @@
/turf/unsimulated/floor,
/area/centcom/legion/hangar5)
"olu" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -109997,6 +109883,15 @@
icon_state = "carpet"
},
/area/centcom/specops)
+"olX" = (
+/obj/structure/platform,
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/spline/plain/purple,
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"oma" = (
/obj/effect/floor_decal/industrial/outline/security,
/obj/effect/floor_decal/corner/blue/diagonal,
@@ -110030,6 +109925,18 @@
icon_state = "dark_preview"
},
/area/centcom/holding)
+"omt" = (
+/obj/structure/table/reinforced/glass,
+/obj/item/storage/box/unique/sharps{
+ pixel_x = -8;
+ pixel_y = 3
+ },
+/obj/structure/machinery/power/outlet{
+ pixel_y = 3
+ },
+/obj/effect/floor_decal/spline/plain/red,
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
"omu" = (
/obj/effect/floor_decal/corner/yellow{
dir = 4
@@ -110088,6 +109995,18 @@
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor,
/area/horizon/hallway/primary/deck_3/port/docks)
+"omP" = (
+/obj/structure/machinery/camera{
+ c_tag = "Operations - Machinist Workshop 2";
+ network = list("Operations");
+ dir = 1
+ },
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 1
+ },
+/obj/structure/machinery/r_n_d/material_silo,
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist)
"omQ" = (
/obj/effect/floor_decal/industrial/warning{
dir = 1
@@ -110102,17 +110021,6 @@
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos)
-"omS" = (
-/obj/effect/floor_decal/corner/brown/full{
- dir = 1
- },
-/obj/structure/machinery/requests_console/east{
- name = "Machinist Requests Console";
- department = "Machinist Workshop";
- departmentType = 2
- },
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
"omU" = (
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/machinery/light/small{
@@ -110461,7 +110369,7 @@
/turf/space,
/area/horizon/engineering/atmos/propulsion)
"opl" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
@@ -110584,16 +110492,16 @@
dir = 4;
id = "service_divider_shutter"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/industrial/hatch_door/service,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/service/kitchen)
"oqc" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
@@ -110914,6 +110822,25 @@
},
/turf/simulated/floor/tiled,
/area/horizon/hangar/intrepid)
+"orO" = (
+/obj/structure/disposalpipe/segment{
+ icon_state = "pipe-c"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/structure/cable/green{
+ icon_state = "2-8"
+ },
+/obj/effect/floor_decal/spline/plain/brown{
+ dir = 4
+ },
+/obj/structure/machinery/light/floor,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist)
"orS" = (
/obj/structure/machinery/bluespace_beacon,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -111194,9 +111121,6 @@
icon_state = "1-4"
},
/obj/structure/lattice/catwalk/indoor,
-/obj/structure/machinery/light/small{
- dir = 8
- },
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/engineering/lower)
"otK" = (
@@ -111213,7 +111137,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/door/firedoor,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
@@ -111375,13 +111299,43 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/light/small{
dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/near)
+"ouV" = (
+/obj/item/stack/material/steel/full,
+/obj/item/stack/material/steel/full,
+/obj/item/stack/material/steel/full,
+/obj/item/stack/material/steel/full,
+/obj/item/stack/material/glass/full,
+/obj/item/stack/material/glass/full,
+/obj/item/stack/material/aluminium/full,
+/obj/item/stack/material/aluminium/full,
+/obj/item/stack/material/plasteel{
+ amount = 20;
+ pixel_y = 4;
+ randpixel = 0
+ },
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 9
+ },
+/obj/item/stack/material/phoron{
+ amount = 20
+ },
+/obj/item/stack/material/uranium{
+ amount = 10
+ },
+/obj/structure/closet/crate/drop,
+/obj/structure/crate_shelf,
+/obj/item/stack/material/lead{
+ amount = 10
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist)
"ovc" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -111421,7 +111375,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
/turf/simulated/floor/tiled/full,
/area/horizon/rnd/hallway)
@@ -111661,13 +111615,6 @@
/obj/structure/machinery/alarm/north,
/turf/simulated/floor/carpet,
/area/horizon/command/heads/captain)
-"owZ" = (
-/obj/effect/floor_decal/spline/fancy{
- dir = 4
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"oxc" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -111911,6 +111858,13 @@
},
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/cafe)
+"oyM" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
+/area/horizon/operations/machinist)
"oyW" = (
/obj/effect/floor_decal/corner/paleblue/full{
dir = 1
@@ -112016,19 +111970,6 @@
},
/turf/simulated/floor/tiled,
/area/horizon/rnd/hallway/secondary)
-"ozL" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/service/starboard)
"ozQ" = (
/obj/effect/map_effect/window_spawner/full/reinforced/indestructible,
/turf/unsimulated/floor/plating,
@@ -112107,7 +112048,7 @@
/area/horizon/maintenance/deck_2/aft)
"oAm" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
icon_state = "1-2"
@@ -112307,6 +112248,19 @@
icon_state = "dark_preview"
},
/area/centcom/holding)
+"oBI" = (
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/full,
+/area/horizon/hallway/primary/deck_2/starboard)
"oBJ" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/floor_decal/industrial/warning{
@@ -112439,7 +112393,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -112459,7 +112413,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/port/shortcut)
"oCR" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor/multi_tile,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
@@ -112732,8 +112686,8 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/turf/simulated/floor/tiled/full,
/area/horizon/engineering/hallway/interior)
@@ -112879,6 +112833,16 @@
},
/turf/simulated/floor/tiled,
/area/horizon/command/bridge/upperdeck)
+"oFr" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 10
+ },
+/obj/structure/machinery/light,
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"oFw" = (
/obj/effect/floor_decal/corner/dark_blue{
dir = 6
@@ -112959,9 +112923,9 @@
/obj/structure/cable/green{
icon_state = "1-4"
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/cable/green{
icon_state = "1-2"
@@ -113175,6 +113139,17 @@
/obj/structure/curtain/open/shower,
/turf/simulated/floor/tiled/freezer,
/area/horizon/security/washroom)
+"oHk" = (
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/sortjunction/flipped{
+ dir = 8;
+ name = "Machinist Workshop";
+ sortType = "Machinist Workshop"
+ },
+/turf/simulated/floor/tiled/full,
+/area/horizon/hallway/primary/deck_2/starboard)
"oHl" = (
/obj/structure/machinery/light/small{
dir = 4
@@ -113285,7 +113260,7 @@
/area/horizon/service/hydroponics/garden)
"oIb" = (
/obj/effect/floor_decal/corner_wide/lime/diagonal,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/white,
/area/horizon/medical/reception)
"oIh" = (
@@ -113407,15 +113382,6 @@
},
/turf/simulated/floor/exoplanet/barren/raskara,
/area/centcom/shared_dream)
-"oIQ" = (
-/obj/structure/platform,
-/obj/structure/disposalpipe/segment,
-/obj/effect/floor_decal/corner_wide/brown{
- dir = 8
- },
-/obj/structure/machinery/optable/robotics,
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist/surgicalbay)
"oIU" = (
/obj/structure/disposalpipe/segment,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -113505,7 +113471,7 @@
/turf/simulated/floor/tiled/full,
/area/horizon/medical/washroom)
"oJw" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -114019,7 +113985,7 @@
/obj/structure/cable/green{
icon_state = "1-8"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled/white,
@@ -114118,13 +114084,6 @@
/obj/structure/machinery/light/small/floor,
/turf/unsimulated/floor/wood,
/area/antag/actor)
-"oMV" = (
-/obj/effect/floor_decal/spline/fancy/wood{
- dir = 9
- },
-/obj/structure/machinery/light/small/floor,
-/turf/simulated/floor/wood,
-/area/horizon/service/cafeteria)
"oMW" = (
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/near)
@@ -114211,7 +114170,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -114395,9 +114354,6 @@
/obj/item/pen,
/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/break_room)
-"oOJ" = (
-/turf/simulated/wall/r_wall,
-/area/horizon/security/checkpoint2)
"oOK" = (
/obj/effect/decal/cleanable/blood/oil,
/obj/effect/decal/cleanable/dirt,
@@ -114559,7 +114515,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -114579,51 +114535,6 @@
/obj/structure/machinery/light,
/turf/unsimulated/floor/plating,
/area/centcom/holding)
-"oQc" = (
-/obj/effect/floor_decal/spline/plain/brown{
- dir = 6
- },
-/obj/structure/machinery/button/remote/airlock{
- dir = 9;
- id = "workshop_door";
- name = "Machinist Workshop Door";
- pixel_y = -1;
- pixel_x = -7
- },
-/obj/structure/machinery/button/remote/blast_door{
- dir = 4;
- id = "shutters_deck2_workshopdesk";
- name = "Machinist Workshop Desk Shutters";
- pixel_x = 20
- },
-/obj/item/paper_bin{
- pixel_x = 7;
- pixel_y = 2
- },
-/obj/item/paper/stickynotes/pad/random{
- pixel_y = 12;
- pixel_x = 11
- },
-/obj/item/pen/black{
- pixel_x = 8;
- pixel_y = 2
- },
-/obj/structure/table/reinforced/steel,
-/obj/structure/machinery/ringer/east{
- department = "Machinist Workshop";
- id = "workshop_ringer";
- req_access = list(29);
- pixel_y = 21
- },
-/obj/structure/machinery/button/remote/blast_door{
- dir = 4;
- id = "mech_bay_shutter";
- name = "Machinist Bay Shutters";
- pixel_x = 27;
- pixel_y = 5
- },
-/turf/simulated/floor/tiled/full,
-/area/horizon/operations/machinist)
"oQo" = (
/obj/structure/bed/stool/bar/padded/teal{
dir = 4
@@ -114827,6 +114738,24 @@
},
/turf/simulated/floor/wood,
/area/horizon/crew/lounge)
+"oRP" = (
+/obj/effect/floor_decal/corner/brown/full,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/structure/cable/green{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"oRQ" = (
/obj/effect/decal/cleanable/cobweb,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -114882,8 +114811,8 @@
/obj/effect/floor_decal/corner/brown{
dir = 6
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/turf/simulated/floor/tiled,
/area/horizon/operations/break_room)
@@ -115136,6 +115065,15 @@
},
/turf/simulated/wall/shuttle/scc_space_ship/cardinal,
/area/horizon/engineering/storage_hard/upper)
+"oTv" = (
+/obj/structure/table/reinforced/steel,
+/obj/item/reagent_containers/glass/beaker/large{
+ pixel_x = 3;
+ pixel_y = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"oTA" = (
/obj/structure/disposalpipe/segment{
dir = 8;
@@ -115287,7 +115225,7 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable{
@@ -115519,8 +115457,17 @@
"oVZ" = (
/turf/simulated/wall,
/area/horizon/holodeck_control)
+"oWe" = (
+/obj/structure/machinery/atmospherics/unary/vent_pump/on,
+/obj/effect/floor_decal/corner/dark_green{
+ dir = 5
+ },
+/obj/effect/floor_decal/spline/plain/corner/red{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"oWh" = (
-/obj/structure/disposalpipe/segment,
/obj/structure/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
@@ -115530,7 +115477,7 @@
name = "Chapel Maintenance";
req_access = list(22)
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/service/chapel/corpse_storage)
"oWk" = (
@@ -115610,7 +115557,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow,
/turf/simulated/floor/plating,
@@ -115654,14 +115601,6 @@
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/hangar/port)
-"oWS" = (
-/obj/effect/floor_decal/corner/dark_green/diagonal,
-/obj/effect/floor_decal/industrial/arrow/yellow,
-/obj/effect/floor_decal/industrial/outline_straight/yellow{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"oWV" = (
/obj/effect/floor_decal/corner/red{
dir = 9
@@ -115683,9 +115622,9 @@
/turf/unsimulated/floor,
/area/centcom/control)
"oXd" = (
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
@@ -115743,16 +115682,6 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/shuttle/intrepid/starboard_compartment)
-"oXj" = (
-/obj/effect/floor_decal/corner/brown{
- dir = 9
- },
-/obj/effect/floor_decal/industrial/arrow/yellow{
- dir = 1
- },
-/obj/effect/floor_decal/industrial/outline_straight/yellow,
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"oXk" = (
/obj/structure/weightlifter,
/obj/random/dirt_75,
@@ -115892,6 +115821,14 @@
/obj/random/tool,
/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/atmos/storage_maintenance)
+"oXO" = (
+/obj/structure/machinery/computer/security/terminal/public{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/structure/railing/mapped,
+/turf/simulated/floor/tiled/full,
+/area/horizon/service/cafeteria)
"oXX" = (
/obj/structure/cable/green{
icon_state = "4-8"
@@ -115902,7 +115839,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/brown{
@@ -115949,7 +115886,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -115972,7 +115909,7 @@
/turf/simulated/floor/carpet,
/area/horizon/command/heads/om)
"oYz" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -116025,7 +115962,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/holodeck/source_pool)
"oYM" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_green{
dir = 5
},
@@ -116157,7 +116094,7 @@
/turf/simulated/floor/carpet/rubber,
/area/horizon/rnd/xenoarch/spectrometry)
"oZU" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled,
@@ -116507,10 +116444,19 @@
/obj/structure/closet/firecloset,
/turf/simulated/floor/tiled,
/area/horizon/security/investigations_hallway)
+"pbY" = (
+/obj/structure/machinery/mech_recharger,
+/mob/living/heavy_vehicle/premade/random/boring,
+/obj/effect/floor_decal/industrial/outline/red,
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"pcf" = (
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/structure/lattice/catwalk/indoor,
/turf/simulated/floor,
@@ -116636,7 +116582,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/floor_decal/corner/yellow{
@@ -116677,7 +116623,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/shuttle/intrepid/port_compartment)
"pdw" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/purple{
@@ -116761,7 +116707,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner_wide/yellow{
@@ -116864,7 +116810,7 @@
/turf/simulated/floor/tiled,
/area/horizon/operations/lobby)
"peI" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
@@ -116922,7 +116868,7 @@
/obj/effect/floor_decal/industrial/outline_straight/service{
dir = 1
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/lino/diamond,
/area/horizon/service/bar/backroom)
"peT" = (
@@ -116931,6 +116877,19 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos/turbine)
+"peU" = (
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/junction/yjunction{
+ dir = 1
+ },
+/obj/structure/lattice/catwalk/indoor/grate,
+/obj/structure/cable/green{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/plating,
+/area/horizon/operations/lobby)
"peY" = (
/obj/structure/railing/mapped{
dir = 8
@@ -116971,9 +116930,9 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/weapons/longbow)
"pfe" = (
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
@@ -117120,19 +117079,6 @@
},
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/central)
-"pfM" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
- },
-/obj/structure/lattice/catwalk/indoor/grate/light,
-/obj/structure/machinery/power/apc/north,
-/obj/structure/cable/green{
- icon_state = "0-4"
- },
-/obj/structure/railing/mapped,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist/surgicalbay)
"pfN" = (
/obj/structure/machinery/door/window/northright{
name = "display case";
@@ -117702,6 +117648,13 @@
"pjo" = (
/turf/simulated/open,
/area/horizon/service/custodial/disposals/deck_2)
+"pjs" = (
+/obj/structure/machinery/power/outlet{
+ pixel_y = 3
+ },
+/obj/structure/table/reinforced/glass,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"pjw" = (
/obj/structure/holostool,
/turf/simulated/floor/holofloor/beach/sand,
@@ -117956,7 +117909,7 @@
dir = 4
},
/obj/effect/decal/cleanable/dirt,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -118036,21 +117989,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/unsimulated/floor/wood,
/area/antag/burglar)
-"pmo" = (
-/obj/structure/machinery/atmospherics/unary/vent_pump/on{
- dir = 4
- },
-/obj/effect/floor_decal/corner_wide/brown{
- dir = 1
- },
-/obj/effect/floor_decal/corner_wide/brown{
- dir = 6
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist/surgicalbay)
"pmp" = (
/obj/effect/floor_decal/corner/brown{
dir = 6
@@ -118069,7 +118007,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_2/fore)
@@ -118282,6 +118220,15 @@
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/research)
+"pnT" = (
+/obj/effect/floor_decal/corner/dark_green{
+ dir = 5
+ },
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 1
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"pnU" = (
/obj/structure/window/shuttle/scc_space_ship,
/obj/structure/machinery/door/firedoor,
@@ -118391,7 +118338,7 @@
/turf/simulated/floor/plating,
/area/horizon/shuttle/quark/cargo_hold)
"poB" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 1
@@ -118531,7 +118478,7 @@
"ppE" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -118574,9 +118521,9 @@
/obj/structure/platform_deco{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
@@ -119070,20 +119017,6 @@
icon_state = "dark_preview"
},
/area/centcom/control)
-"pum" = (
-/obj/structure/railing/mapped,
-/obj/structure/machinery/camera{
- c_tag = "Operations - Machinist Workshop 1";
- network = list("Operations");
- dir = 4
- },
-/obj/structure/machinery/conveyor{
- dir = 6;
- id = "Robocompo";
- reversed = 1
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"pun" = (
/obj/structure/bed/handrail{
dir = 1
@@ -119388,19 +119321,6 @@
},
/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/starboard/docks)
-"pwq" = (
-/obj/structure/lattice/catwalk/indoor/grate/light,
-/obj/structure/railing/mapped{
- dir = 8
- },
-/obj/structure/machinery/camera{
- c_tag = "Operations - Machinist Surgical Theatre";
- network = list("Operations");
- dir = 4
- },
-/obj/structure/machinery/alarm/north,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist/surgicalbay)
"pws" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/light/small{
@@ -119409,7 +119329,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard/far)
"pwt" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -119562,9 +119482,9 @@
pixel_y = 28;
req_one_access = list(25,28)
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/effect/floor_decal/industrial/outline_straight/service,
/obj/effect/floor_decal/corner/dark_green{
@@ -119977,9 +119897,9 @@
icon_state = "4-8"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/elevator)
@@ -120749,6 +120669,26 @@
"pEd" = (
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
+"pEe" = (
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/outline/red,
+/obj/structure/machinery/mech_recharger,
+/obj/structure/machinery/status_display{
+ pixel_y = 32
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"pEj" = (
/obj/structure/machinery/light/small{
dir = 8
@@ -120766,6 +120706,18 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/main/port)
+"pEq" = (
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"pEz" = (
/obj/effect/shuttle_landmark/horizon/exterior/deck_2/fore,
/turf/template_noop,
@@ -121320,7 +121272,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
@@ -121456,7 +121408,7 @@
dir = 1;
name = "Chapel"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable/green{
@@ -121516,7 +121468,7 @@
/turf/unsimulated/floor,
/area/antag/mercenary)
"pKj" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -121738,7 +121690,7 @@
},
/area/horizon/medical/morgue)
"pLV" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -121805,7 +121757,7 @@
/turf/simulated/floor/plating,
/area/horizon/hangar/intrepid)
"pMC" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/white,
/area/horizon/medical/hallway/upper)
"pMH" = (
@@ -121950,7 +121902,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor,
@@ -121969,7 +121921,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/door/firedoor,
@@ -122311,7 +122263,7 @@
/turf/unsimulated/floor/wood,
/area/antag/burglar)
"pPM" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_blue{
dir = 5
},
@@ -122485,7 +122437,7 @@
/turf/simulated/floor/tiled/full,
/area/horizon/hangar/intrepid)
"pQB" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/light/floor{
dir = 1
},
@@ -122901,7 +122853,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -123153,7 +123105,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate,
@@ -123523,7 +123475,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/brown/full{
@@ -123591,7 +123543,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -123928,9 +123880,9 @@
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
@@ -124094,7 +124046,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/full,
/area/horizon/service/custodial)
"qcv" = (
@@ -124271,7 +124223,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate,
@@ -124400,7 +124352,7 @@
/area/horizon/maintenance/deck_2/wing/starboard/far)
"qep" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/near)
"qex" = (
@@ -124574,8 +124526,8 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 10
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/security/port)
@@ -124618,7 +124570,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -124938,9 +124890,9 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
@@ -124983,7 +124935,7 @@
pixel_y = 28;
req_one_access = list(25,28)
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/alarm/south,
@@ -125164,7 +125116,7 @@
/obj/effect/floor_decal/corner/dark_green{
dir = 10
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable/green{
@@ -125229,8 +125181,29 @@
},
/turf/simulated/floor/wood,
/area/horizon/medical/psych)
+"qke" = (
+/obj/effect/floor_decal/industrial/hatch_door/yellow,
+/obj/structure/machinery/door/firedoor{
+ dir = 4
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/door/airlock/maintenance{
+ name = "Deck 2 Stairwell Maintenance";
+ req_one_access = list(12,22,25,28,67,29);
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/maintenance/deck_2/service/starboard)
"qkf" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
/obj/structure/cable/green{
icon_state = "2-8"
@@ -125371,7 +125344,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/hangar/starboard)
"qlq" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -125628,6 +125601,18 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/break_room)
+"qme" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 5
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist)
"qmm" = (
/obj/item/flashlight/flare,
/obj/item/flashlight/flare,
@@ -125716,9 +125701,6 @@
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/aft/starboard/far)
"qmI" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
/obj/structure/railing/mapped,
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/central)
@@ -126124,6 +126106,47 @@
/obj/structure/machinery/meter,
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/air)
+"qpM" = (
+/obj/structure/platform_deco{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/closet/walllocker/medical/secure{
+ pixel_y = 32;
+ req_access = list(29)
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/structure/cable/green{
+ icon_state = "2-4"
+ },
+/obj/item/storage/box/unique/freezer/organcooler,
+/obj/item/cane/crutch,
+/obj/item/cane/crutch,
+/obj/item/tank/oxygen,
+/obj/item/reagent_containers/blood/OMinus,
+/obj/item/reagent_containers/blood/sbs,
+/obj/item/clothing/mask/breath/medical,
+/obj/item/storage/firstaid/regular,
+/obj/item/suit_cooling_unit,
+/obj/item/suit_cooling_unit,
+/obj/item/deployable_kit/iv_drip,
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"qpS" = (
/obj/structure/foamedmetal,
/turf/simulated/floor/plating,
@@ -126146,20 +126169,6 @@
},
/turf/simulated/floor/plating,
/area/shuttle/skipjack)
-"qpW" = (
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 1
- },
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
- },
-/obj/structure/machinery/light_switch/north{
- pixel_x = -4
- },
-/obj/structure/lattice/catwalk/indoor/grate/light,
-/obj/structure/railing/mapped,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist/surgicalbay)
"qpY" = (
/obj/effect/decal/fake_object{
icon = 'icons/obj/doors/rapid_pdoor.dmi';
@@ -126387,7 +126396,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
@@ -126538,11 +126547,47 @@
},
/turf/unsimulated/floor/monotile,
/area/antag/raider)
-"qsB" = (
-/obj/effect/floor_decal/corner/brown/full,
-/obj/effect/floor_decal/industrial/outline/yellow,
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
+"qsx" = (
+/obj/structure/table/reinforced/steel,
+/obj/structure/machinery/button/remote/blast_door{
+ dir = 5;
+ id = "workshop_garage";
+ name = "Machinist Workshop Garage Shutters";
+ pixel_x = -6;
+ pixel_y = 11
+ },
+/obj/structure/machinery/button/remote/airlock{
+ dir = 5;
+ id = "workshop_door";
+ name = "Machinist Workshop Door";
+ pixel_y = 11;
+ pixel_x = 3
+ },
+/obj/structure/machinery/button/remote/blast_door{
+ dir = 5;
+ id = "shutters_deck2_workshopdesk";
+ name = "Machinist Workshop Desk Shutters";
+ pixel_x = -6;
+ pixel_y = -2
+ },
+/obj/structure/machinery/button/remote/blast_door{
+ dir = 5;
+ id = "mech_bay_shutter";
+ name = "Machinist Bay Window Shutters";
+ pixel_x = 3;
+ pixel_y = -2
+ },
+/obj/structure/machinery/light_switch/east{
+ pixel_y = 19;
+ pixel_x = 20
+ },
+/obj/structure/machinery/ringer/east{
+ id = "workshop_ringer";
+ req_access = list(29);
+ department = "Operations"
+ },
+/turf/simulated/floor/tiled/full,
+/area/horizon/operations/machinist)
"qsG" = (
/obj/effect/floor_decal/corner/dark_blue{
dir = 5
@@ -126580,7 +126625,7 @@
/obj/structure/lattice/catwalk/indoor/grate/damaged{
color = "#4c535b"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"qsY" = (
@@ -126816,8 +126861,8 @@
/obj/effect/floor_decal/corner/dark_blue/full{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/turf/simulated/floor/tiled,
/area/horizon/command/bridge/upperdeck)
@@ -127464,6 +127509,12 @@
},
/turf/unsimulated/floor,
/area/centcom/evac)
+"qzp" = (
+/obj/effect/floor_decal/spline/plain/brown{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"qzs" = (
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
/obj/structure/machinery/computer/general_air_control/large_tank_control/terminal{
@@ -127695,7 +127746,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -127842,7 +127893,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -128001,7 +128052,7 @@
/obj/effect/floor_decal/industrial/outline_straight/service{
dir = 1
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -128058,15 +128109,6 @@
},
/turf/unsimulated/floor,
/area/centcom/control)
-"qDL" = (
-/obj/structure/machinery/mecha_part_fabricator{
- dir = 8
- },
-/obj/structure/railing/mapped{
- dir = 8
- },
-/turf/simulated/floor/carpet/rubber,
-/area/horizon/operations/machinist)
"qDM" = (
/obj/structure/cable/green{
icon_state = "1-2"
@@ -128231,7 +128273,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -128358,6 +128400,22 @@
},
/turf/simulated/floor/carpet/rubber,
/area/horizon/tcommsat/chamber)
+"qFE" = (
+/obj/structure/disposalpipe/segment/mainline{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor,
+/area/horizon/hallway/primary/deck_3/starboard)
"qFG" = (
/obj/effect/floor_decal/corner/brown{
dir = 10
@@ -128452,12 +128510,14 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/conference)
"qGg" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/cable/green{
+ icon_state = "1-2"
},
-/turf/simulated/floor/tiled,
-/area/horizon/command/bridge/upperdeck)
+/obj/structure/disposalpipe/segment/mainline,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/turf/simulated/floor/tiled/full,
+/area/horizon/security/investigations_hallway)
"qGj" = (
/obj/structure/closet/emcloset,
/obj/item/storage/toolbox/emergency,
@@ -128872,7 +128932,7 @@
"qIo" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/power/apc/east,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/service/port)
@@ -129030,7 +129090,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable{
@@ -129186,24 +129246,6 @@
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/elevator)
-"qKE" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 8
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/effect/floor_decal/corner/brown/full{
- dir = 8
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
"qKF" = (
/obj/structure/machinery/light/small{
dir = 4
@@ -129212,19 +129254,6 @@
/obj/random/loot,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/wing/port/far)
-"qKJ" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/cable/green{
- icon_state = "2-4"
- },
-/turf/simulated/floor/plating,
-/area/horizon/maintenance/deck_2/service/starboard)
"qKM" = (
/obj/effect/floor_decal/industrial/outline/grey,
/obj/structure/closet/crate/plastic{
@@ -129755,12 +129784,6 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/service/chapel/main)
-"qNi" = (
-/obj/effect/floor_decal/corner_wide/black{
- dir = 10
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist)
"qNk" = (
/obj/structure/grille,
/obj/structure/machinery/door/blast/regular{
@@ -129817,7 +129840,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -129829,7 +129852,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/medical/gen_treatment)
"qND" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable{
@@ -129845,6 +129868,19 @@
/obj/structure/platform,
/turf/simulated/floor/tiled/dark,
/area/horizon/command/bridge/controlroom)
+"qNI" = (
+/obj/structure/grille,
+/obj/structure/window/shuttle/scc_space_ship,
+/obj/structure/machinery/door/firedoor,
+/obj/structure/machinery/door/blast/shutters{
+ id = "machinist_surgery_shutters";
+ name = "Machinist Workshop Garage Shutter"
+ },
+/obj/effect/landmark/entry_point/fore{
+ name = "fore, machinist workshop"
+ },
+/turf/simulated/floor/plating,
+/area/horizon/operations/machinist/surgicalbay)
"qNM" = (
/obj/effect/floor_decal/spline/fancy/wood/cee{
dir = 8
@@ -129866,9 +129902,9 @@
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
@@ -129943,6 +129979,13 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/service/custodial/disposals/deck_1)
+"qOF" = (
+/obj/structure/machinery/computer/security/terminal/public{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/outline/service,
+/turf/simulated/floor/tiled/full,
+/area/horizon/service/mess_hall)
"qOL" = (
/obj/structure/table/wood,
/obj/item/paper_bin,
@@ -129971,15 +130014,6 @@
},
/turf/simulated/floor/wood,
/area/horizon/service/bar)
-"qOR" = (
-/obj/structure/machinery/vending/robotics,
-/obj/effect/floor_decal/spline/plain/brown{
- dir = 1
- },
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/machinery/light,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"qOS" = (
/obj/effect/floor_decal/corner/red{
dir = 9
@@ -130020,16 +130054,19 @@
/obj/item/radio/intercom/south,
/turf/simulated/floor/tiled/white,
/area/horizon/medical/ward/isolation)
-"qPl" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/platform,
-/obj/structure/machinery/optable,
-/obj/structure/machinery/light{
- dir = 4
+"qPm" = (
+/obj/structure/table/reinforced/steel,
+/obj/structure/machinery/door/window/desk/northright{
+ name = "Machinist Workshop Desk";
+ req_one_access = list(29)
},
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist/surgicalbay)
+/obj/structure/machinery/door/firedoor,
+/obj/structure/machinery/door/blast/shutters{
+ id = "shutters_deck2_workshopdesk";
+ name = "Machinist Workshop Desk Shutter"
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"qPn" = (
/obj/effect/floor_decal/corner/paleblue{
dir = 5
@@ -130121,7 +130158,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/hangar/control)
"qQr" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -130365,7 +130402,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/airlock/glass_mining{
dir = 1;
name = "Mining Equipment";
@@ -130411,22 +130448,6 @@
icon_state = "dark_preview"
},
/area/antag/mercenary)
-"qRU" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/obj/structure/lattice/catwalk/indoor/grate,
-/obj/structure/disposalpipe/junction{
- dir = 8
- },
-/turf/simulated/floor/plating,
-/area/horizon/hallway/primary/deck_2/starboard)
"qRZ" = (
/obj/structure/flora/ausbushes/ppflowers,
/turf/simulated/floor/holofloor/beach/sand{
@@ -130486,7 +130507,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/door/firedoor,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel,
/obj/structure/machinery/door/airlock/maintenance_hatch{
@@ -130657,6 +130678,16 @@
},
/turf/simulated/floor/tiled,
/area/horizon/security/equipment)
+"qTC" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/spline/plain/purple{
+ dir = 9
+ },
+/obj/structure/machinery/atmospherics/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist)
"qTE" = (
/obj/structure/railing/mapped{
dir = 1
@@ -130726,6 +130757,15 @@
},
/turf/simulated/floor/tiled,
/area/horizon/repoffice/representative_two)
+"qUu" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 10
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"qUw" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/green{
dir = 10
@@ -130951,7 +130991,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -131684,7 +131724,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/platform_stairs/full{
@@ -132049,6 +132089,15 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/air)
+"rcU" = (
+/obj/structure/machinery/conveyor{
+ id = "Robocompo"
+ },
+/obj/structure/machinery/light{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"rcZ" = (
/obj/structure/machinery/keycard_auth{
pixel_x = 31;
@@ -132110,7 +132159,7 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/operations/break_room)
"rdM" = (
@@ -132579,24 +132628,6 @@
},
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/air)
-"rhb" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
- },
-/obj/structure/lattice/catwalk/indoor/grate/light,
-/obj/structure/cable/green{
- icon_state = "1-8"
- },
-/obj/structure/railing/mapped,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist/surgicalbay)
"rhn" = (
/obj/structure/cable/green{
icon_state = "4-8"
@@ -132850,9 +132881,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
@@ -133247,7 +133278,7 @@
/obj/effect/floor_decal/corner/brown{
dir = 10
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/dark,
/area/horizon/operations/mining_main/eva)
"rlf" = (
@@ -133451,13 +133482,6 @@
"rmb" = (
/turf/simulated/mineral/planet,
/area/centcom/shared_dream)
-"rmc" = (
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist)
"rmd" = (
/obj/structure/cable/green{
icon_state = "4-8"
@@ -133619,7 +133643,7 @@
icon_state = "4-8"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/plating,
@@ -133779,7 +133803,7 @@
/obj/structure/machinery/door/airlock/maintenance{
dir = 1;
name = "Security Maintenance";
- req_access = list(63)
+ req_access = list(1)
},
/obj/structure/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/hatch_door/red{
@@ -134357,7 +134381,7 @@
/area/horizon/command/bridge/controlroom)
"rsn" = (
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/door/firedoor{
@@ -134380,7 +134404,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/medical/hallway/upper)
"rsq" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -134487,6 +134511,18 @@
/obj/structure/bed/stool/chair/shuttle,
/turf/simulated/floor/shuttle/black,
/area/centcom/specops)
+"rtf" = (
+/obj/structure/table/reinforced/glass,
+/obj/item/flashlight/lamp/off{
+ pixel_x = -7;
+ pixel_y = 19
+ },
+/obj/item/storage/slide_projector{
+ pixel_x = 2;
+ pixel_y = 3
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
"rti" = (
/obj/structure/machinery/atmospherics/pipe/manifold4w/visible,
/obj/effect/floor_decal/industrial/warning{
@@ -134927,7 +134963,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -135151,10 +135187,6 @@
"rxJ" = (
/turf/simulated/floor/tiled,
/area/horizon/security/office)
-"rxL" = (
-/obj/random/keg,
-/turf/simulated/floor/tiled/dark,
-/area/horizon/maintenance/deck_1/wing/starboard)
"rxO" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -135395,7 +135427,7 @@
/obj/structure/cable/green{
icon_state = "2-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/purple{
@@ -135446,6 +135478,18 @@
},
/turf/simulated/floor/reinforced,
/area/horizon/shuttle/canary)
+"rzG" = (
+/obj/structure/machinery/papershredder{
+ pixel_x = -5
+ },
+/obj/structure/filingcabinet/filingcabinet{
+ pixel_x = 10;
+ pixel_y = 1
+ },
+/obj/structure/machinery/light,
+/obj/item/radio/intercom/east,
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
"rzH" = (
/turf/unsimulated/floor/plating,
/area/antag/burglar)
@@ -135473,7 +135517,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/door/firedoor,
@@ -135503,7 +135547,7 @@
/turf/unsimulated/floor/plating,
/area/antag/loner)
"rzX" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
@@ -135687,19 +135731,6 @@
/obj/effect/floor_decal/industrial/hatch/service,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/service/hydroponics/garden)
-"rBj" = (
-/obj/structure/railing/mapped{
- dir = 8
- },
-/obj/effect/floor_decal/corner/brown{
- dir = 6
- },
-/obj/effect/floor_decal/industrial/arrow/yellow,
-/obj/effect/floor_decal/industrial/outline_straight/yellow{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"rBm" = (
/obj/effect/floor_decal/corner/dark_green{
dir = 10
@@ -135759,28 +135790,6 @@
"rBJ" = (
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/indra/smes)
-"rBN" = (
-/obj/item/reagent_containers/glass/bucket{
- pixel_x = 9;
- pixel_y = 8
- },
-/obj/structure/table/steel,
-/obj/effect/floor_decal/spline/plain/corner/brown{
- dir = 1
- },
-/obj/item/storage/firstaid/empty{
- pixel_x = -6;
- pixel_y = 6
- },
-/obj/item/storage/firstaid/empty{
- pixel_x = -6
- },
-/obj/item/reagent_containers/glass/bucket{
- pixel_x = 9;
- pixel_y = 1
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"rBO" = (
/obj/effect/floor_decal/industrial/warning,
/obj/random/maintenance_junk_or_loot,
@@ -135844,20 +135853,6 @@
},
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_2/central)
-"rCh" = (
-/obj/effect/floor_decal/corner_wide/brown{
- dir = 5
- },
-/obj/structure/machinery/light/small/floor{
- pixel_y = -16
- },
-/obj/structure/sink/kitchen{
- dir = 4;
- name = "sink";
- pixel_x = -19
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist/surgicalbay)
"rCk" = (
/obj/structure/bed/stool/chair/office/light{
dir = 8
@@ -136069,7 +136064,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/brown{
@@ -136116,7 +136111,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "2-8"
},
@@ -136337,7 +136332,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/storage)
"rFV" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "2-4"
},
@@ -136477,7 +136472,7 @@
/area/horizon/holodeck/source_pool)
"rGR" = (
/obj/structure/bed/stool/bar/padded/red,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/spline/fancy/wood{
@@ -136568,9 +136563,9 @@
},
/area/shuttle/legion)
"rHn" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/effect/floor_decal/corner/dark_blue/diagonal,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -136689,13 +136684,6 @@
},
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/air)
-"rHW" = (
-/obj/structure/machinery/atmospherics/unary/vent_pump/on,
-/obj/effect/floor_decal/corner/dark_green{
- dir = 5
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"rHY" = (
/turf/simulated/wall/shuttle/unique/ert{
icon_state = "7,0"
@@ -136855,27 +136843,6 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/rnd/xenoarch/storage)
-"rJH" = (
-/obj/structure/platform,
-/obj/structure/platform{
- dir = 8
- },
-/obj/item/mmi{
- pixel_y = 4
- },
-/obj/item/mmi{
- pixel_y = -1;
- pixel_x = -5
- },
-/obj/structure/table/steel,
-/obj/effect/floor_decal/spline/plain/brown{
- dir = 8
- },
-/obj/structure/platform_deco{
- dir = 9
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"rJL" = (
/obj/effect/decal/fake_object{
color = "#545c68";
@@ -136896,7 +136863,7 @@
/turf/simulated/floor/tiled/white,
/area/merchant_station)
"rJN" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/service/port)
@@ -137111,22 +137078,6 @@
},
/turf/simulated/floor/tiled/white,
/area/horizon/shuttle/intrepid/medical)
-"rLa" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
- },
-/obj/structure/lattice/catwalk/indoor/grate,
-/turf/simulated/floor/plating,
-/area/horizon/hallway/primary/deck_2/starboard)
"rLi" = (
/obj/effect/floor_decal/spline/fancy,
/obj/structure/railing/mapped,
@@ -137140,19 +137091,10 @@
dir = 1
},
/area/centcom/legion)
-"rLs" = (
-/obj/structure/bed/stool/chair/office/dark{
- dir = 8
- },
-/obj/structure/machinery/atmospherics/unary/vent_pump/on{
- dir = 1
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist)
"rLx" = (
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/cable/green{
icon_state = "1-8"
@@ -137311,7 +137253,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/full,
@@ -137350,7 +137292,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/propulsion)
"rMw" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_green{
dir = 9
},
@@ -137525,18 +137467,6 @@
},
/turf/simulated/floor/tiled/full,
/area/horizon/medical/surgery)
-"rNw" = (
-/obj/structure/disposalpipe/segment{
- dir = 1
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/machinery/light/floor,
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
"rNx" = (
/obj/effect/floor_decal/spline/plain/blue{
dir = 9
@@ -137657,14 +137587,6 @@
},
/turf/simulated/floor/holofloor/tiled,
/area/horizon/holodeck/source_lasertag)
-"rOm" = (
-/obj/structure/bed/stool/chair{
- dir = 1
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/machinery/alarm/south,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"rOo" = (
/obj/structure/table/rack,
/obj/item/clothing/under/color/green,
@@ -137776,8 +137698,8 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/hangar/intrepid)
"rOY" = (
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 10
@@ -137856,16 +137778,6 @@
},
/turf/simulated/wall,
/area/horizon/maintenance/deck_2/wing/starboard/far)
-"rPk" = (
-/obj/effect/floor_decal/corner/brown{
- dir = 10
- },
-/obj/effect/floor_decal/industrial/warning,
-/obj/structure/disposalpipe/segment{
- dir = 1
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"rPm" = (
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/machinery/shieldgen,
@@ -137967,7 +137879,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/door/airlock/maintenance{
@@ -138107,8 +138019,8 @@
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/obj/structure/machinery/light/small{
dir = 4
@@ -138258,8 +138170,8 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/starboard)
"rRM" = (
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/cable/green{
@@ -138285,7 +138197,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel{
@@ -138566,7 +138478,7 @@
dir = 1;
id_tag = "server_door_lock";
name = "Server Room";
- req_access = list(47)
+ req_access = list(7)
},
/obj/structure/machinery/door/firedoor,
/obj/structure/cable/green{
@@ -138776,7 +138688,7 @@
/obj/effect/floor_decal/corner/brown{
dir = 10
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 1
},
@@ -138846,9 +138758,9 @@
/obj/structure/cable/green{
icon_state = "1-8"
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
@@ -139027,6 +138939,29 @@
/obj/structure/machinery/hologram/holopad,
/turf/simulated/floor/lino,
/area/horizon/service/chapel/main)
+"rVP" = (
+/obj/structure/table/reinforced/glass,
+/obj/item/paper_bin{
+ pixel_x = -5;
+ pixel_y = 4
+ },
+/obj/item/pen/fountain/black{
+ pixel_x = -5;
+ pixel_y = 4
+ },
+/obj/structure/machinery/button/remote/blast_door{
+ pixel_y = -4;
+ id = "machinist_surgery_shutters";
+ pixel_x = 8;
+ name = "Surgical Theatre Viewing Shutters";
+ dir = 9
+ },
+/obj/item/paper/stickynotes/pad/random{
+ pixel_x = 6;
+ pixel_y = 9
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
"rWa" = (
/obj/effect/floor_decal/industrial/hatch/red,
/turf/simulated/floor/reinforced/airless,
@@ -139145,7 +139080,7 @@
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"rWD" = (
@@ -139277,7 +139212,7 @@
/obj/structure/machinery/light/small{
dir = 8
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
@@ -139393,9 +139328,9 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/propulsion/starboard)
"rYE" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/effect/floor_decal/corner/mauve{
dir = 10
@@ -139651,7 +139586,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled/dark,
@@ -139858,7 +139793,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/security/armoury)
"sbN" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/door/blast/regular{
@@ -140184,7 +140119,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -140219,9 +140154,9 @@
/obj/effect/floor_decal/spline/fancy/wood/cee{
dir = 1
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/turf/simulated/floor/wood,
/area/horizon/command/bridge/upperdeck)
@@ -140405,6 +140340,29 @@
/obj/item/toy/plushie/spider,
/turf/simulated/floor/exoplanet/barren/raskara,
/area/centcom/shared_dream)
+"sfv" = (
+/obj/structure/machinery/door/firedoor{
+ req_one_access = list(24,11,67,73);
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/hatch_door/yellow,
+/obj/structure/machinery/door/airlock/glass{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment/mainline{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled/full,
+/area/horizon/hallway/primary/deck_3/starboard)
"sfw" = (
/obj/structure/grille,
/obj/structure/cable/green,
@@ -140424,7 +140382,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/light/floor,
/obj/effect/floor_decal/corner/brown{
dir = 10
@@ -140746,7 +140704,7 @@
/obj/structure/machinery/light/small{
dir = 4
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
"shl" = (
@@ -141161,7 +141119,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_2/central)
"sjq" = (
@@ -141204,7 +141162,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/wing/port/far)
"sjA" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -141313,6 +141271,24 @@
/obj/effect/decal/cleanable/dirt,
/turf/unsimulated/floor,
/area/antag/raider)
+"ski" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 1
+ },
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 1
+ },
+/obj/effect/floor_decal/spline/plain/corner/brown{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/cable/green{
+ icon_state = "1-2"
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist)
"skn" = (
/obj/structure/grille/diagonal{
dir = 1
@@ -141685,7 +141661,7 @@
},
/obj/effect/floor_decal/corner/lime/diagonal,
/obj/structure/machinery/firealarm/north,
-/obj/structure/roller_rack/two,
+/obj/structure/roller_rack/three,
/turf/simulated/floor/tiled/white,
/area/horizon/shuttle/intrepid/medical)
"sms" = (
@@ -141812,7 +141788,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/door/firedoor{
@@ -142037,7 +142013,7 @@
/turf/simulated/floor/tiled/gunmetal,
/area/horizon/operations/warehouse)
"soQ" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/brown{
@@ -142045,6 +142021,14 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/operations/mining_main/eva)
+"soX" = (
+/obj/structure/table/reinforced/steel,
+/obj/structure/machinery/power/outlet{
+ pixel_y = 3
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"spb" = (
/obj/structure/machinery/door/firedoor,
/obj/structure/cable/green{
@@ -142052,7 +142036,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
@@ -142366,16 +142350,13 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/storage/tech)
"srr" = (
-/obj/structure/disposalpipe/junction{
- dir = 1;
- icon_state = "pipe-j2"
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate,
/obj/structure/cable/green{
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor,
/area/horizon/command/bridge/upperdeck)
"srs" = (
@@ -142588,7 +142569,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_blue{
dir = 5
},
@@ -142667,6 +142648,13 @@
/obj/effect/floor_decal/spline/plain/corner,
/turf/simulated/floor/tiled/dark,
/area/horizon/holodeck/source_pool)
+"ssP" = (
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"ssU" = (
/turf/unsimulated/floor{
icon_state = "dark_preview"
@@ -143132,6 +143120,14 @@
},
/turf/simulated/floor/carpet/rubber,
/area/horizon/tcommsat/chamber)
+"swE" = (
+/obj/structure/railing/mapped,
+/obj/random/pottedplant,
+/obj/effect/floor_decal/spline/fancy/wood{
+ dir = 10
+ },
+/turf/simulated/floor/wood,
+/area/horizon/service/cafeteria)
"swI" = (
/obj/structure/railing/mapped{
dir = 8
@@ -143153,7 +143149,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/damaged{
color = "#4c535b"
},
@@ -143265,6 +143261,18 @@
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
+"sxr" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 10
+ },
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"sxz" = (
/obj/structure/table/standard,
/obj/item/clothing/glasses/hud/health{
@@ -143335,7 +143343,7 @@
/obj/structure/machinery/door/firedoor{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -143902,17 +143910,6 @@
/obj/structure/sign/staff_only,
/turf/unsimulated/wall/darkshuttlewall,
/area/centcom/bar)
-"sBt" = (
-/obj/structure/machinery/vending/wardrobe/robo_wardrobe,
-/obj/effect/floor_decal/corner_wide/black/full{
- dir = 4
- },
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/machinery/light{
- dir = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist)
"sBx" = (
/obj/structure/machinery/door/airlock/command{
id_tag = "rep_office_b";
@@ -144129,13 +144126,6 @@
/obj/effect/floor_decal/industrial/outline/yellow,
/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/storage_hard/lower)
-"sCF" = (
-/obj/structure/machinery/light{
- dir = 4
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"sCH" = (
/obj/effect/floor_decal/corner/grey/diagonal{
dir = 4
@@ -144568,7 +144558,7 @@
/obj/structure/cable/green{
icon_state = "1-4"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/open,
/area/horizon/maintenance/deck_2/wing/starboard/near)
"sFf" = (
@@ -144817,25 +144807,6 @@
},
/turf/unsimulated/floor/plating,
/area/centcom/ferry)
-"sGP" = (
-/obj/structure/machinery/conveyor_switch/oneway{
- desc = "A conveyor control switch. It appears to only go in one direction. Controls the components conveyor belt.";
- id = "Robocompo";
- pixel_y = 20;
- pixel_x = -10
- },
-/obj/structure/cable/green{
- icon_state = "0-2"
- },
-/obj/structure/machinery/power/apc/north,
-/obj/effect/landmark/start{
- name = "Machinist"
- },
-/obj/structure/platform{
- dir = 8
- },
-/turf/simulated/floor/carpet/rubber,
-/area/horizon/operations/machinist)
"sGT" = (
/obj/effect/floor_decal/corner_wide/yellow{
dir = 4
@@ -145270,7 +145241,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/floor_decal/corner/dark_blue/full{
@@ -145674,7 +145645,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled,
/area/horizon/service/custodial)
"sNn" = (
@@ -145793,7 +145764,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -145842,7 +145813,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/security/forensic_laboratory)
"sOa" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -145889,7 +145860,7 @@
/turf/simulated/floor/carpet/rubber,
/area/horizon/tcommsat/chamber)
"sOq" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable/green{
@@ -145910,7 +145881,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -146197,7 +146168,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -146244,7 +146215,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled/white,
@@ -146586,6 +146557,19 @@
icon_state = "1,8"
},
/area/shuttle/syndicate_elite)
+"sSU" = (
+/obj/effect/floor_decal/corner/dark_green{
+ dir = 5
+ },
+/obj/structure/machinery/light{
+ dir = 1
+ },
+/obj/structure/extinguisher_cabinet/north,
+/obj/effect/floor_decal/spline/plain/corner/red{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"sSW" = (
/obj/effect/floor_decal/corner/grey{
dir = 5
@@ -147252,6 +147236,17 @@
},
/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_2/wing/starboard/nacelle)
+"sYk" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"sYn" = (
/obj/effect/floor_decal/industrial/outline/red,
/obj/structure/machinery/iv_drip,
@@ -147336,7 +147331,7 @@
/turf/unsimulated/floor,
/area/centcom/distress_prep)
"sYW" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -147430,7 +147425,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -147498,30 +147493,6 @@
},
/turf/simulated/floor/holofloor/lino,
/area/horizon/holodeck/source_courtroom)
-"sZN" = (
-/obj/structure/table/rack,
-/obj/item/stack/material/steel/full,
-/obj/item/stack/material/steel/full,
-/obj/item/stack/material/steel/full,
-/obj/item/stack/material/steel/full,
-/obj/item/stack/material/glass/full,
-/obj/item/stack/material/glass/full,
-/obj/item/stack/material/aluminium/full,
-/obj/item/stack/material/aluminium/full,
-/obj/item/paint_sprayer,
-/obj/item/reagent_containers/weldpack,
-/obj/item/stack/material/plasteel{
- amount = 20;
- pixel_y = 4;
- randpixel = 0
- },
-/obj/item/storage/toolbox/mechanical,
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/railing/mapped/no_density/low{
- dir = 8
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"sZS" = (
/obj/structure/coatrack{
pixel_x = -9;
@@ -147533,30 +147504,17 @@
/obj/effect/floor_decal/corner/beige/diagonal,
/turf/simulated/floor/tiled/white,
/area/horizon/security/forensic_laboratory)
-"tad" = (
-/obj/structure/machinery/access_button{
- command = "cycle_interior";
- frequency = 1380;
- master_tag = "centcom_shuttle_dock_airlock";
- name = "interior access button";
- pixel_x = -25;
- pixel_y = -25;
- req_access = list(13)
+"sZV" = (
+/obj/effect/floor_decal/spline/plain/brown{
+ dir = 1
},
-/obj/structure/machinery/atmospherics/pipe/simple/hidden{
- dir = 10
- },
-/obj/effect/floor_decal/corner/dark_green/full{
- dir = 4
- },
-/obj/structure/machinery/alarm/east,
-/turf/simulated/floor/tiled,
-/area/horizon/security/checkpoint2)
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist)
"tag" = (
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -147735,7 +147693,7 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 8
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow{
dir = 5
@@ -147846,12 +147804,12 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
- },
/obj/effect/floor_decal/corner/purple{
dir = 5
},
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
+ },
/turf/simulated/floor/tiled,
/area/horizon/service/custodial)
"tcL" = (
@@ -148472,9 +148430,9 @@
/area/horizon/holodeck/source_theatre)
"tgE" = (
/obj/structure/bed/stool/bar/padded/red,
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/effect/floor_decal/spline/fancy/wood{
dir = 9
@@ -148639,7 +148597,7 @@
dir = 8
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled,
/area/horizon/operations/office)
"thl" = (
@@ -148745,7 +148703,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/supermatter/mainchamber)
"thL" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -149099,7 +149057,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -149214,7 +149172,7 @@
icon_state = "1-2"
},
/obj/structure/machinery/door/firedoor,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
@@ -149247,7 +149205,7 @@
/turf/simulated/floor/wood,
/area/horizon/repoffice/representative_one)
"tlB" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable{
@@ -149325,7 +149283,7 @@
/turf/unsimulated/floor/marble,
/area/antag/wizard)
"tlU" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
@@ -149520,16 +149478,21 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/drone_fabrication)
"tnj" = (
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
- icon_state = "1-2"
+ icon_state = "4-8"
},
-/turf/simulated/floor/wood,
-/area/horizon/repoffice/representative_two)
+/obj/structure/disposalpipe/segment/mainline{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor,
+/area/horizon/hallway/primary/deck_3/starboard)
"tnk" = (
/obj/effect/map_effect/window_spawner/full/reinforced/grille/firedoor,
/obj/structure/cable/green{
@@ -149693,9 +149656,7 @@
/turf/simulated/floor/tiled,
/area/horizon/service/hydroponics)
"tok" = (
-/obj/structure/disposalpipe/junction{
- dir = 4
- },
+/obj/structure/disposalpipe/junction,
/turf/simulated/floor/tiled,
/area/horizon/command/bridge/upperdeck)
"ton" = (
@@ -149986,9 +149947,9 @@
/turf/simulated/floor/tiled/full,
/area/horizon/medical/ward)
"tqh" = (
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
@@ -150057,7 +150018,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -150113,7 +150074,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/reactor/supermatter/waste)
"tqB" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -150354,9 +150315,9 @@
"trU" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/cable{
icon_state = "1-2"
@@ -150606,7 +150567,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled,
@@ -150667,7 +150628,7 @@
/turf/unsimulated/floor,
/area/centcom/legion)
"tur" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor,
/obj/structure/cable/green{
icon_state = "1-2"
@@ -151074,6 +151035,32 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/security/firing_range)
+"txi" = (
+/obj/effect/floor_decal/corner/purple{
+ dir = 5
+ },
+/obj/structure/machinery/button/remote/blast_door{
+ id = "shutters_deck2_auxcustdesk";
+ name = "Auxiliary Custodial Closet Desk Shutter";
+ pixel_x = -25;
+ pixel_y = 25;
+ req_access = list(26);
+ dir = 1
+ },
+/obj/structure/machinery/button/remote/blast_door{
+ id = "shutters_deck2_auxcustwindow";
+ name = "Auxiliary Custodial Closet Window Shutter";
+ pixel_x = -36;
+ pixel_y = 25;
+ req_access = list(26);
+ dir = 1
+ },
+/obj/structure/bed/stool/chair/office/dark{
+ dir = 1
+ },
+/obj/structure/machinery/light/small/floor,
+/turf/simulated/floor/tiled,
+/area/horizon/service/custodial/auxiliary)
"txq" = (
/obj/effect/floor_decal/corner/dark_green{
dir = 10
@@ -151369,7 +151356,7 @@
/turf/simulated/floor/exoplanet/grass/grove,
/area/centcom/shared_dream)
"tyJ" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_green{
dir = 9
},
@@ -151551,8 +151538,8 @@
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/obj/structure/cable{
icon_state = "2-8"
@@ -151569,9 +151556,9 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/indra/smes)
"tAc" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
@@ -151621,7 +151608,7 @@
/obj/effect/floor_decal/industrial/warning{
dir = 5
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -151708,9 +151695,9 @@
/turf/simulated/wall/r_wall,
/area/horizon/maintenance/deck_2/aft)
"tAP" = (
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/structure/cable{
icon_state = "1-4"
@@ -151798,7 +151785,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
@@ -151832,7 +151819,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
"tBP" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -151889,6 +151876,23 @@
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/wing/port/far)
+"tCi" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/cable/green{
+ icon_state = "2-4"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/service/starboard)
"tCj" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 7
@@ -151934,9 +151938,9 @@
/obj/structure/cable/green{
icon_state = "2-4"
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
@@ -152052,6 +152056,30 @@
},
/turf/simulated/floor/plating,
/area/horizon/service/custodial/disposals/deck_1)
+"tDB" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 9
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/effect/floor_decal/spline/plain/brown{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/structure/cable/green{
+ icon_state = "2-8"
+ },
+/obj/structure/disposalpipe/segment{
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist)
"tDE" = (
/obj/structure/lattice/catwalk,
/turf/space,
@@ -152320,7 +152348,7 @@
/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_3/aft/holodeck)
"tFk" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor,
/obj/structure/machinery/door/airlock/command{
dir = 1;
@@ -152483,7 +152511,7 @@
/turf/simulated/floor/carpet/rubber,
/area/horizon/rnd/lab)
"tFT" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable{
@@ -152636,7 +152664,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/hangar/control)
"tGK" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
@@ -152770,7 +152798,7 @@
/turf/unsimulated/floor/plating,
/area/centcom/specops)
"tHD" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/spline/fancy/wood{
@@ -152943,6 +152971,23 @@
/obj/structure/machinery/alarm/north,
/turf/simulated/floor/tiled/dark,
/area/horizon/hangar/intrepid)
+"tJl" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/effect/floor_decal/industrial/outline/red,
+/obj/structure/machinery/mech_recharger,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"tJp" = (
/obj/structure/mirror{
pixel_y = 36
@@ -152958,11 +153003,6 @@
},
/turf/simulated/floor/tiled/white,
/area/horizon/crew/washroom/deck_3)
-"tJu" = (
-/obj/effect/floor_decal/spline/fancy/wood,
-/obj/structure/machinery/vending/overloaders,
-/turf/simulated/floor/wood,
-/area/horizon/hallway/primary/deck_2/starboard)
"tJw" = (
/obj/effect/floor_decal/corner/dark_blue/full{
dir = 8
@@ -153046,7 +153086,7 @@
/turf/simulated/wall,
/area/horizon/medical/morgue)
"tJY" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -153120,6 +153160,16 @@
/obj/effect/floor_decal/industrial/outline_straight/yellow,
/turf/simulated/floor/tiled/white,
/area/horizon/medical/hallway)
+"tKi" = (
+/obj/item/storage/box/fancy/tray/machinist{
+ pixel_y = 6
+ },
+/obj/structure/table/reinforced/glass,
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
"tKk" = (
/obj/structure/machinery/atmospherics/omni/filter{
name = "carbon dioxide filter";
@@ -153180,11 +153230,11 @@
icon_state = "1-2"
},
/obj/structure/machinery/atmospherics/unary/vent_pump/on,
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
- },
/obj/effect/floor_decal/corner/brown/diagonal,
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/horizon/operations/mining_main/eva)
"tKz" = (
@@ -153402,7 +153452,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/xenoarch/atrium)
"tLN" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -153418,23 +153468,6 @@
dir = 4
},
/area/horizon/maintenance/deck_1/main/starboard)
-"tLU" = (
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/obj/structure/disposalpipe/segment{
- dir = 1
- },
-/obj/structure/machinery/door/firedoor,
-/obj/effect/floor_decal/industrial/hatch_door/operations{
- dir = 1
- },
-/obj/structure/machinery/door/blast/shutters{
- id = "workshop_garage";
- name = "Machinist Workshop Garage Shutter"
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"tMo" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -153479,6 +153512,17 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/storage/eva/expedition)
+"tMJ" = (
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/spline/plain/corner/red{
+ dir = 4
+ },
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 6
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist)
"tMK" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
@@ -153519,7 +153563,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 10
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/wood,
/area/horizon/rnd/hallway)
"tNq" = (
@@ -153777,20 +153821,6 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/atmos)
-"tPq" = (
-/obj/structure/machinery/disposal/small/west{
- dir = 1;
- pixel_x = 0;
- pixel_y = -14
- },
-/obj/structure/disposalpipe/trunk{
- dir = 1
- },
-/obj/effect/floor_decal/corner_wide/black{
- dir = 10
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist)
"tPu" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable/green{
@@ -153954,7 +153984,7 @@
/obj/structure/cable/green{
icon_state = "1-4"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
@@ -153964,6 +153994,36 @@
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/starboard)
+"tQM" = (
+/obj/structure/machinery/door/airlock/mining{
+ dir = 4;
+ name = "Machinist Workshop";
+ req_access = list(29);
+ id_tag = "workshop_door"
+ },
+/obj/effect/map_effect/door_helper/unres{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/machinery/door/firedoor{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/hatch_door/yellow{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"tQR" = (
/obj/effect/floor_decal/corner/grey{
dir = 6
@@ -154087,16 +154147,16 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/light/small{
dir = 8
},
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard/amidships)
"tRD" = (
@@ -154168,10 +154228,6 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
- },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 6
},
@@ -154187,6 +154243,10 @@
/obj/structure/lattice/catwalk/indoor/grate/damaged{
color = "#4c535b"
},
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/starboard)
"tSN" = (
@@ -154248,7 +154308,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -154443,7 +154503,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/lattice/catwalk/indoor/grate,
@@ -154616,7 +154676,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/floor_decal/corner_wide/green{
@@ -154665,7 +154725,7 @@
/obj/structure/cable/green{
icon_state = "0-4"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/power/apc/critical/north,
@@ -154685,7 +154745,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
"tWH" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner_wide/green{
dir = 10
},
@@ -154847,7 +154907,7 @@
/turf/simulated/floor/tiled,
/area/horizon/medical/paramedic)
"tXA" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_green{
dir = 9
},
@@ -154864,7 +154924,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/service/mess_hall)
"tXB" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -155048,7 +155108,6 @@
/turf/simulated/floor/plating,
/area/horizon/shuttle/mining)
"tZo" = (
-/obj/structure/disposalpipe/segment,
/obj/structure/railing/mapped{
dir = 8
},
@@ -155234,12 +155293,6 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/hallway/primary/deck_2/central)
-"uao" = (
-/obj/effect/floor_decal/corner/brown{
- dir = 9
- },
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
"uaq" = (
/obj/item/material/kitchen/rollingpin{
pixel_x = 2;
@@ -155486,25 +155539,6 @@
/obj/structure/machinery/portable_atmospherics/canister/nitrogen/prechilled,
/turf/simulated/floor/plating,
/area/horizon/engineering/reactor/supermatter/mainchamber)
-"uca" = (
-/obj/effect/floor_decal/corner/brown/full{
- dir = 4
- },
-/obj/structure/machinery/papershredder{
- pixel_x = -6
- },
-/obj/structure/filingcabinet/filingcabinet{
- pixel_x = 9
- },
-/obj/structure/machinery/light_switch/east{
- pixel_y = 9
- },
-/obj/random/pottedplant_small{
- pixel_x = 10;
- pixel_y = 13
- },
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
"uce" = (
/obj/structure/machinery/door/firedoor,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -155816,7 +155850,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -155900,6 +155934,16 @@
},
/turf/simulated/floor/tiled,
/area/horizon/engineering/hallway/interior)
+"ufm" = (
+/obj/structure/sign/directions/prop{
+ dir = 4;
+ pixel_y = 24
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/engineering/atmos/storage_maintenance)
"ufo" = (
/obj/structure/machinery/recharge_station,
/obj/effect/floor_decal/industrial/warning/cee{
@@ -155994,19 +156038,6 @@
},
/turf/simulated/floor/tiled,
/area/horizon/security/brig)
-"ufT" = (
-/obj/structure/cable/green{
- icon_state = "1-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 1
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/cable/green{
- icon_state = "1-2"
- },
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"ufY" = (
/obj/structure/table/wood,
/obj/effect/decal/fake_object{
@@ -156072,7 +156103,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/outline/security,
/turf/simulated/floor/tiled/gunmetal/full,
/area/horizon/operations/warehouse)
@@ -156477,8 +156508,8 @@
/obj/effect/floor_decal/corner/mauve{
dir = 5
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/obj/structure/cable/green{
icon_state = "2-8"
@@ -156593,7 +156624,7 @@
/turf/simulated/floor/plating,
/area/shuttle/merchant)
"ujy" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable/green{
@@ -156692,7 +156723,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -156890,6 +156921,14 @@
"ulv" = (
/turf/simulated/floor/tiled,
/area/horizon/engineering/hallway/interior)
+"uly" = (
+/obj/structure/machinery/optable,
+/obj/structure/machinery/light,
+/obj/effect/floor_decal/spline/plain/red{
+ dir = 5
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
"ulB" = (
/obj/structure/machinery/door/firedoor,
/obj/structure/machinery/conveyor{
@@ -157126,7 +157165,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -157258,7 +157297,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/door/firedoor{
@@ -157563,7 +157602,7 @@
"uqe" = (
/obj/structure/machinery/firealarm/west,
/obj/effect/floor_decal/corner/dark_blue/diagonal,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled,
/area/horizon/security/investigations_hallway)
"uqh" = (
@@ -157598,43 +157637,6 @@
},
/turf/unsimulated/floor,
/area/centcom/holding)
-"uqq" = (
-/obj/structure/platform{
- dir = 8
- },
-/obj/structure/table/steel,
-/obj/effect/floor_decal/spline/plain/brown{
- dir = 8
- },
-/obj/item/healthanalyzer{
- pixel_y = 12
- },
-/obj/item/flash/synthetic{
- pixel_x = -5;
- pixel_y = 12
- },
-/obj/item/flash/synthetic{
- pixel_x = -5;
- pixel_y = 12
- },
-/obj/item/flash/synthetic{
- pixel_x = -5;
- pixel_y = 12
- },
-/obj/item/flash/synthetic{
- pixel_x = -5;
- pixel_y = 12
- },
-/obj/item/flash/synthetic{
- pixel_x = -5;
- pixel_y = 12
- },
-/obj/item/flash/synthetic{
- pixel_x = -5;
- pixel_y = 12
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"uqw" = (
/obj/effect/floor_decal/corner/dark_blue/full,
/obj/random/pottedplant,
@@ -157660,7 +157662,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
@@ -157804,7 +157806,7 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/brown{
@@ -157826,7 +157828,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 6
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/light/small/floor,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
@@ -157855,7 +157857,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/turbine)
"urH" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -158138,13 +158140,13 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
- },
/obj/effect/decal/cleanable/dirt,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel,
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
+ },
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/operations/starboard/amidships)
"utn" = (
@@ -158355,7 +158357,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
@@ -158437,7 +158439,7 @@
req_access = list(25);
name = "Bar"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -158488,7 +158490,7 @@
/area/horizon/engineering/atmos/propulsion)
"uvx" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/light/small,
@@ -158823,6 +158825,32 @@
},
/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/reactor/indra/mainchamber)
+"uxF" = (
+/obj/structure/table/reinforced/steel,
+/obj/structure/machinery/requests_console/east{
+ name = "Machinist Requests Console";
+ department = "Machinist Workshop";
+ departmentType = 2;
+ pixel_x = 16;
+ pixel_y = 4
+ },
+/obj/item/paper_bin{
+ pixel_x = 6;
+ pixel_y = 15
+ },
+/obj/item/pen/black{
+ pixel_x = 6;
+ pixel_y = 16
+ },
+/obj/item/stack/packageWrap{
+ pixel_x = -1
+ },
+/obj/item/destTagger{
+ pixel_y = 8;
+ pixel_x = -4
+ },
+/turf/simulated/floor/tiled/full,
+/area/horizon/operations/machinist)
"uxI" = (
/obj/effect/decal/cleanable/liquid_fuel,
/turf/unsimulated/floor,
@@ -159054,8 +159082,14 @@
/obj/structure/machinery/camera/network/first_deck{
c_tag = "First Deck - Hangar 15"
},
-/obj/structure/machinery/floodlight,
/obj/effect/floor_decal/industrial/outline/grey,
+/obj/structure/table/rack,
+/obj/item/deployable_kit{
+ pixel_y = 10
+ },
+/obj/item/deployable_kit{
+ pixel_y = 4
+ },
/turf/simulated/floor/plating,
/area/horizon/hangar/auxiliary)
"uzw" = (
@@ -159193,9 +159227,9 @@
dir = 4
},
/obj/effect/floor_decal/industrial/outline/security,
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/turf/simulated/floor/tiled,
/area/horizon/security/hallway)
@@ -159226,7 +159260,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner/brown{
@@ -159297,6 +159331,22 @@
/obj/structure/window/shuttle/scc_space_ship/cardinal,
/turf/simulated/floor/plating,
/area/horizon/command/bridge/minibar)
+"uAY" = (
+/obj/structure/table/reinforced/steel,
+/obj/structure/machinery/cell_charger{
+ pixel_y = 10;
+ pixel_x = -2
+ },
+/obj/structure/machinery/cell_charger{
+ pixel_y = 2;
+ pixel_x = -2
+ },
+/obj/structure/machinery/recharger{
+ pixel_y = 4;
+ pixel_x = 13
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"uBa" = (
/obj/structure/grille/diagonal{
dir = 4
@@ -159591,7 +159641,7 @@
},
/area/antag/ninja)
"uCN" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -159665,9 +159715,9 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
@@ -159807,7 +159857,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -160292,16 +160342,6 @@
/obj/effect/floor_decal/industrial/outline/red,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/hallway/aft)
-"uGX" = (
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
- },
-/obj/structure/railing/mapped/no_density/low,
-/obj/effect/floor_decal/industrial/hatch/yellow,
-/obj/structure/machinery/recharge_station,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"uHc" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/red{
dir = 8
@@ -160481,12 +160521,6 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/storage/eva)
-"uIn" = (
-/obj/effect/floor_decal/corner/brown{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"uIo" = (
/obj/structure/railing/mapped{
dir = 4
@@ -160718,13 +160752,6 @@
/obj/structure/cable,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
-"uJr" = (
-/obj/structure/platform,
-/obj/structure/table/standard,
-/obj/item/storage/box/fancy/tray/machinist,
-/obj/effect/floor_decal/corner_wide/brown,
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist/surgicalbay)
"uJw" = (
/obj/effect/floor_decal/spline/plain{
dir = 1
@@ -161163,6 +161190,19 @@
},
/turf/simulated/floor/holofloor/tiled,
/area/horizon/holodeck/source_lasertag)
+"uMu" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 10
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/disposalpipe/segment{
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"uMz" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -161296,7 +161336,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 8
},
@@ -161556,7 +161596,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
@@ -161690,6 +161730,16 @@
},
/turf/simulated/floor/carpet/rubber,
/area/horizon/command/bridge/controlroom)
+"uQo" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/industrial/warning,
+/obj/structure/machinery/disposal/small/east,
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
+/obj/structure/machinery/alarm/west,
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"uQy" = (
/obj/effect/floor_decal/spline/fancy,
/obj/structure/machinery/computer/ship/sensors{
@@ -161803,6 +161853,11 @@
},
/turf/simulated/floor/wood,
/area/horizon/hallway/primary/deck_3/port)
+"uRa" = (
+/obj/structure/machinery/optable/robotics,
+/obj/effect/floor_decal/spline/plain/red,
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist/surgicalbay)
"uRc" = (
/obj/structure/machinery/atmospherics/pipe/simple/visible/red,
/obj/structure/machinery/meter,
@@ -161865,7 +161920,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
@@ -161914,30 +161969,6 @@
},
/turf/simulated/floor/tiled,
/area/horizon/service/hydroponics)
-"uRN" = (
-/obj/structure/disposalpipe/segment{
- dir = 1
- },
-/obj/structure/machinery/button/remote/blast_door{
- dir = 4;
- id = "machinist_fab_shutters";
- name = "Fabrication Viewing Shutters";
- pixel_y = -35;
- pixel_x = 23
- },
-/obj/structure/machinery/button/remote/blast_door{
- dir = 4;
- pixel_y = -23;
- id = "mech_bay_shutter";
- pixel_x = 23;
- name = "Machinist Bay Shutters"
- },
-/obj/structure/bed/stool/chair{
- dir = 8
- },
-/obj/structure/lattice/catwalk/indoor/grate/dark,
-/turf/simulated/floor/plating,
-/area/horizon/operations/machinist)
"uRY" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 1
@@ -162145,6 +162176,13 @@
/obj/structure/machinery/atmospherics/unary/vent_scrubber/on,
/turf/simulated/floor/tiled/white,
/area/horizon/medical/hallway/upper)
+"uTl" = (
+/obj/effect/floor_decal/spline/plain/red,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/rubber,
+/area/horizon/operations/machinist)
"uTo" = (
/obj/structure/platform,
/obj/random/dirt_75,
@@ -162654,7 +162692,7 @@
/area/horizon/engineering/atmos/air)
"uWA" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/random/junk,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/service/port)
@@ -162895,14 +162933,6 @@
density = 1
},
/area/antag/ninja)
-"uXM" = (
-/obj/effect/floor_decal/corner_wide/black{
- dir = 6
- },
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/closet/secure_closet/machinist,
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist)
"uXP" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 9
@@ -163031,6 +163061,15 @@
"uZl" = (
/obj/effect/floor_decal/corner/red/diagonal,
/obj/structure/machinery/light,
+/obj/structure/table/rack,
+/obj/effect/floor_decal/industrial/outline/operations,
+/obj/item/deployable_kit{
+ pixel_y = 12
+ },
+/obj/item/deployable_kit{
+ pixel_y = 6
+ },
+/obj/item/deployable_kit,
/turf/simulated/floor/tiled,
/area/horizon/maintenance/deck_2/research)
"uZt" = (
@@ -163200,7 +163239,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 8
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor/tiled/ramp/bottom{
@@ -163208,7 +163247,7 @@
},
/area/horizon/maintenance/deck_2/wing/starboard/near)
"vaV" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -163220,10 +163259,10 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/lattice/catwalk/indoor/grate,
/obj/structure/cable/green{
icon_state = "1-8"
},
+/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor,
/area/horizon/hallway/primary/deck_3/port)
"vbe" = (
@@ -163761,6 +163800,27 @@
icon_state = "dark_preview"
},
/area/centcom/specops)
+"vek" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/spline/plain/purple{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning/corner{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/obj/structure/machinery/hologram/holopad,
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"vem" = (
/obj/structure/machinery/door/airlock/highsecurity{
name = "AI Core Foyer";
@@ -163958,7 +164018,7 @@
/turf/simulated/floor/plating,
/area/horizon/storage/eva)
"vfG" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor,
/obj/structure/machinery/door/airlock/service{
dir = 1;
@@ -164163,7 +164223,7 @@
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard)
"vhB" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
@@ -164220,19 +164280,6 @@
/obj/effect/floor_decal/carpet,
/turf/simulated/floor/holofloor/carpet,
/area/horizon/holodeck/source_dininghall)
-"vhY" = (
-/obj/structure/machinery/r_n_d/protolathe,
-/obj/effect/floor_decal/corner_wide/black{
- dir = 9
- },
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/machinery/camera{
- c_tag = "Operations - Machinist RnD Lab";
- network = list("Operations");
- dir = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist)
"vib" = (
/obj/effect/floor_decal/corner/dark_blue/diagonal,
/obj/structure/machinery/atmospherics/unary/vent_pump/on{
@@ -164369,7 +164416,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -164527,16 +164574,6 @@
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/substation/research)
-"vkm" = (
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/platform/cutout{
- dir = 8
- },
-/obj/structure/platform_stairs/full/east_west_cap,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"vkn" = (
/obj/structure/machinery/light/small,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -164611,7 +164648,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -164843,7 +164880,7 @@
/area/horizon/ai/upload_foyer)
"vmx" = (
/obj/effect/floor_decal/corner/dark_blue/diagonal,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled,
/area/horizon/security/investigations_hallway)
"vmH" = (
@@ -164896,6 +164933,27 @@
/obj/effect/decal/cleanable/dirt,
/turf/unsimulated/floor/monotile,
/area/antag/jockey)
+"vnq" = (
+/obj/structure/machinery/access_button{
+ command = "cycle_interior";
+ frequency = 1380;
+ master_tag = "centcom_shuttle_dock_airlock";
+ name = "interior access button";
+ pixel_x = -25;
+ pixel_y = -25;
+ req_access = list(13)
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden{
+ dir = 10
+ },
+/obj/effect/floor_decal/corner/dark_green/full{
+ dir = 4
+ },
+/obj/structure/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/security/checkpoint2)
"vnu" = (
/obj/effect/floor_decal/corner/dark_blue/full{
dir = 1
@@ -165179,6 +165237,13 @@
},
/turf/simulated/floor/tiled,
/area/horizon/security/lobby)
+"voD" = (
+/obj/effect/floor_decal/industrial/warning/corner,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/machinery/light/small/floor,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"voH" = (
/obj/structure/closet/crate/trashcart,
/obj/random/junk,
@@ -165214,16 +165279,6 @@
/obj/structure/machinery/light/floor,
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_2/central)
-"vpe" = (
-/obj/structure/bed/stool/chair/office/dark{
- dir = 8
- },
-/obj/effect/landmark/start{
- name = "Machinist"
- },
-/obj/effect/floor_decal/spline/plain/brown,
-/turf/simulated/floor/tiled/full,
-/area/horizon/operations/machinist)
"vpk" = (
/obj/effect/floor_decal/corner/white/diagonal,
/turf/simulated/floor/tiled,
@@ -165314,7 +165369,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -165462,23 +165517,6 @@
icon_state = "beach"
},
/area/centcom/shared_dream)
-"vrd" = (
-/obj/structure/machinery/disposal/small/west{
- dir = 1;
- pixel_x = 0;
- pixel_y = -14
- },
-/obj/structure/disposalpipe/trunk{
- dir = 1
- },
-/obj/effect/floor_decal/corner_wide/brown{
- dir = 10
- },
-/obj/effect/floor_decal/corner_wide/brown{
- dir = 1
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist/surgicalbay)
"vre" = (
/obj/structure/flora/ausbushes/ywflowers,
/turf/simulated/floor/exoplanet/grass/grove,
@@ -165519,9 +165557,9 @@
/obj/effect/floor_decal/spline/plain/corner/green{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/machinery/camera/network/service{
c_tag = "Service - Kitchen 3";
@@ -165699,7 +165737,7 @@
/obj/effect/floor_decal/corner/dark_green{
dir = 6
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/holosign/service/kitchen{
id = "kitchen";
pixel_x = 32
@@ -165903,6 +165941,11 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled,
/area/horizon/hangar/intrepid)
+"vuY" = (
+/obj/effect/floor_decal/industrial/outline/red,
+/obj/structure/machinery/mech_recharger,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"vvb" = (
/obj/structure/window/reinforced{
dir = 4
@@ -165936,27 +165979,6 @@
/obj/structure/machinery/alarm/west,
/turf/simulated/floor/tiled,
/area/horizon/security/hallway)
-"vvx" = (
-/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/obj/structure/machinery/door/firedoor{
- dir = 4
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 8
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/structure/machinery/door/airlock/maintenance{
- name = "Deck 2 Stairwell Maintenance";
- req_one_access = list(12,22,25,28,67);
- dir = 4
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/maintenance/deck_2/service/starboard)
"vvz" = (
/obj/structure/machinery/light{
dir = 8
@@ -165974,22 +165996,6 @@
},
/turf/simulated/floor/tiled,
/area/horizon/crew/vacantoffice)
-"vvB" = (
-/obj/structure/cable/green{
- icon_state = "1-8"
- },
-/obj/effect/floor_decal/industrial/outline_straight/yellow{
- dir = 8
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"vvE" = (
/turf/simulated/wall/r_wall,
/area/horizon/weapons/grauwolf)
@@ -166354,7 +166360,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/medical/icu)
"vyr" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
@@ -166370,27 +166376,14 @@
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/turf/simulated/floor/tiled,
/area/horizon/security/hallway)
-"vyz" = (
-/obj/structure/machinery/fabricator/autolathe,
-/obj/effect/floor_decal/corner_wide/black/full,
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/machinery/button/remote/blast_door{
- pixel_y = -20;
- id = "machinist_fab_shutters";
- pixel_x = 6;
- name = "Fabrication Viewing Shutters"
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist)
"vyC" = (
-/obj/structure/machinery/floodlight,
-/obj/effect/floor_decal/industrial/outline/operations,
+/obj/random/keg,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_1/wing/starboard)
"vyE" = (
@@ -166515,7 +166508,7 @@
/obj/effect/floor_decal/spline/fancy/wood{
dir = 8
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/wood,
/area/horizon/rnd/hallway)
"vzr" = (
@@ -167040,6 +167033,25 @@
icon_state = "wood"
},
/area/centcom/distress_prep)
+"vCK" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/bed/stool/chair{
+ dir = 1
+ },
+/obj/structure/machinery/firealarm/south,
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist)
"vCN" = (
/obj/effect/floor_decal/industrial/warning{
dir = 9
@@ -167369,9 +167381,9 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/supermatter/mainchamber)
"vEs" = (
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate{
color = "#FFFFFF"
@@ -167452,7 +167464,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/turf/simulated/floor,
@@ -167508,6 +167520,23 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/rnd/conference)
+"vFo" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
+/obj/effect/floor_decal/spline/plain/purple{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist)
"vFr" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 1
@@ -167523,7 +167552,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/bluespace_beacon,
@@ -167562,7 +167591,7 @@
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_blue{
dir = 6
},
@@ -167693,7 +167722,7 @@
/turf/simulated/wall/elevator,
/area/centcom/legion)
"vGO" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
@@ -167794,7 +167823,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/door/blast/regular{
@@ -168057,9 +168086,9 @@
icon_state = "1-8"
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/turf/simulated/floor/tiled,
/area/horizon/hangar/intrepid)
@@ -168104,6 +168133,8 @@
dir = 5
},
/obj/item/radio/microphone,
+/obj/item/clothing/suit/armor/carrier/press,
+/obj/item/clothing/head/helmet/security/press,
/turf/simulated/floor/wood,
/area/horizon/crew/journalistoffice)
"vKB" = (
@@ -168173,29 +168204,6 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/turbine)
-"vKO" = (
-/obj/effect/floor_decal/corner/purple{
- dir = 9
- },
-/obj/structure/machinery/light_switch{
- dir = 8;
- pixel_x = -22;
- pixel_y = 23
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/obj/structure/cable/green{
- icon_state = "2-8"
- },
-/turf/simulated/floor/tiled,
-/area/horizon/service/custodial/auxiliary)
"vKQ" = (
/obj/effect/decal/fake_object{
icon = 'icons/misc/beach.dmi';
@@ -168585,9 +168593,9 @@
/obj/effect/floor_decal/spline/fancy/wood/corner{
dir = 8
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/turf/simulated/floor/wood,
/area/horizon/rnd/hallway)
@@ -168705,7 +168713,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -168771,7 +168779,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/operations/warehouse)
@@ -169192,7 +169200,7 @@
"vSV" = (
/obj/structure/machinery/alarm/east,
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/service/port)
"vSZ" = (
@@ -169261,7 +169269,7 @@
/obj/effect/floor_decal/corner/dark_green/full{
dir = 1
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled,
/area/horizon/stairwell/starboard/deck_2)
"vTx" = (
@@ -169295,7 +169303,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/xenobiology)
"vTB" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable{
icon_state = "1-2"
},
@@ -169514,6 +169522,16 @@
},
/turf/simulated/floor/carpet,
/area/horizon/repoffice/consular_one)
+"vUI" = (
+/obj/effect/floor_decal/corner/brown{
+ dir = 10
+ },
+/obj/structure/machinery/firealarm/south,
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/horizon/hallway/primary/deck_2/starboard)
"vUK" = (
/obj/structure/machinery/status_display{
pixel_y = 32
@@ -169526,7 +169544,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/brown{
dir = 10
},
@@ -169762,7 +169780,8 @@
},
/obj/structure/disposalpipe/sortjunction{
dir = 1;
- sortType = "Bar"
+ sortType = "Bar";
+ name = "Bar"
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable/green{
@@ -170129,6 +170148,22 @@
},
/turf/simulated/floor/tiled,
/area/horizon/hangar/operations)
+"vYg" = (
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor/plating,
+/area/horizon/hallway/primary/deck_2/starboard)
"vYh" = (
/obj/effect/floor_decal/corner/brown{
dir = 6
@@ -170157,9 +170192,9 @@
/obj/structure/table/standard,
/obj/item/destTagger,
/obj/item/hand_labeler,
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/effect/floor_decal/industrial/warning/corner{
dir = 1
@@ -170230,7 +170265,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/brown{
dir = 6
},
@@ -170332,7 +170367,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/security/firing_range)
"vZu" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -170341,8 +170376,8 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/lattice/catwalk/indoor/grate,
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor,
/area/horizon/hallway/primary/deck_3/port)
"vZE" = (
@@ -170725,7 +170760,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/port/far)
"wcj" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/door/firedoor{
@@ -170803,7 +170838,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/storage/eva)
"wcu" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 10
},
@@ -170944,7 +170979,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/main/port)
"wcW" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
@@ -170966,9 +171001,8 @@
/turf/simulated/wall/shuttle/scc,
/area/horizon/shuttle/intrepid/port_storage)
"wdr" = (
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/junction/yjunction{
+ dir = 1
},
/obj/structure/machinery/atmospherics/pipe/manifold4w/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
@@ -171394,20 +171428,6 @@
/obj/structure/machinery/portable_atmospherics/canister/carbon_dioxide,
/turf/simulated/floor/carpet/rubber,
/area/horizon/engineering/storage_hard/upper)
-"wfB" = (
-/obj/structure/machinery/light,
-/obj/item/toy/comic/inspector{
- pixel_x = -3
- },
-/obj/item/toy/comic/outlandish_tales{
- pixel_x = 2
- },
-/obj/item/toy/comic/magazine{
- pixel_x = 7
- },
-/obj/structure/table/wood,
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"wfK" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/universal{
dir = 4
@@ -171747,7 +171767,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -172069,28 +172089,19 @@
/turf/simulated/floor/tiled,
/area/horizon/operations/lobby)
"wkx" = (
+/obj/structure/disposalpipe/segment/mainline{
+ dir = 4
+ },
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
- },
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+ dir = 4
},
/obj/structure/cable/green{
- icon_state = "1-8"
+ icon_state = "4-8"
},
-/obj/structure/machinery/door/firedoor{
- req_one_access = list(24,11,67,73);
- dir = 4
- },
-/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/obj/structure/machinery/door/airlock/glass{
- dir = 4
- },
-/turf/simulated/floor/tiled/full,
+/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/central)
"wkz" = (
/turf/unsimulated/floor,
@@ -172209,6 +172220,20 @@
/obj/structure/table/reinforced/steel,
/turf/simulated/floor/carpet/rubber,
/area/horizon/tcommsat/entrance)
+"wlx" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/machinery/door/airlock/maintenance{
+ name = "Deck 2 Stairwell Maintenance";
+ req_one_access = list(12,22,25,67,29)
+ },
+/obj/effect/floor_decal/industrial/hatch_door/yellow{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/machinery/door/firedoor,
+/obj/effect/map_effect/door_helper/unres,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/stairwell/starboard/deck_2)
"wly" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 9
@@ -172388,7 +172413,7 @@
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/aft)
"wmD" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
@@ -172663,7 +172688,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/command/bridge/aibunker)
"wol" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable{
@@ -172707,24 +172732,6 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/hangar/operations)
-"wor" = (
-/obj/effect/map_effect/door_helper/unres{
- dir = 8
- },
-/obj/structure/machinery/door/firedoor{
- dir = 4
- },
-/obj/effect/floor_decal/industrial/hatch_door/operations{
- dir = 4
- },
-/obj/structure/machinery/door/airlock/mining{
- dir = 4;
- name = "Machinist Workshop";
- req_access = list(29);
- id_tag = "workshop_door"
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"wov" = (
/obj/structure/disposalpipe/segment{
icon_state = "pipe-c"
@@ -172850,7 +172857,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/weapons/longbow)
"wpB" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 1
},
@@ -172999,9 +173006,9 @@
/obj/effect/floor_decal/corner/dark_blue{
dir = 6
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9
@@ -173142,7 +173149,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "2-8"
},
@@ -173637,7 +173644,7 @@
/area/horizon/hangar/operations)
"wtB" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/light/small{
@@ -173688,7 +173695,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/medical/surgery)
"wtJ" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -173714,6 +173721,22 @@
/obj/structure/table/standard,
/turf/unsimulated/floor,
/area/antag/ninja)
+"wtO" = (
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 8
+ },
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor/plating,
+/area/horizon/hallway/primary/deck_2/starboard)
"wtP" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -173853,7 +173876,6 @@
/area/horizon/service/hydroponics/garden)
"wuD" = (
/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/reagent_dispensers/cookingoil,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
@@ -173910,21 +173932,6 @@
"wuX" = (
/turf/simulated/wall,
/area/horizon/engineering/atmos/storage_maintenance)
-"wvm" = (
-/obj/structure/closet/crate/medical,
-/obj/item/tank/anesthetic,
-/obj/item/tank/anesthetic,
-/obj/item/tank/oxygen,
-/obj/effect/floor_decal/corner_wide/brown{
- dir = 10
- },
-/obj/effect/floor_decal/corner_wide/brown{
- dir = 4
- },
-/obj/item/suit_cooling_unit,
-/obj/item/suit_cooling_unit,
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist/surgicalbay)
"wvs" = (
/obj/structure/window/shuttle/scc_space_ship,
/obj/structure/grille/diagonal{
@@ -174008,7 +174015,7 @@
/turf/simulated/floor/exoplanet/barren,
/area/centcom/shared_dream)
"wwi" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable{
@@ -174299,7 +174306,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -174319,7 +174326,7 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/reactor/supermatter/mainchamber)
"wxG" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/light/small{
dir = 4
@@ -174371,7 +174378,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner_wide/yellow,
@@ -174491,7 +174498,7 @@
/turf/simulated/floor/wood,
/area/horizon/hallway/primary/deck_2/central)
"wyV" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/lattice/catwalk/indoor/grate,
@@ -174519,12 +174526,6 @@
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/wing/port/far)
-"wzf" = (
-/obj/effect/floor_decal/spline/fancy/wood,
-/obj/structure/railing/mapped,
-/obj/random/pottedplant,
-/turf/simulated/floor/wood,
-/area/horizon/service/cafeteria)
"wzh" = (
/obj/structure/machinery/door/window/holowindoor,
/obj/effect/floor_decal/spline/fancy/wood{
@@ -174611,10 +174612,13 @@
icon_state = "1-8"
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 9
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9
+ dir = 4
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
},
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/starboard)
@@ -174642,7 +174646,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -175348,21 +175352,6 @@
},
/turf/simulated/floor/plating,
/area/horizon/shuttle/intrepid/port_compartment)
-"wFf" = (
-/obj/structure/sign/directions/prop{
- dir = 4;
- pixel_x = 32;
- pixel_y = 24
- },
-/obj/structure/sign/directions/prop{
- dir = 4;
- pixel_y = 24
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
-/turf/simulated/floor/tiled/dark,
-/area/horizon/engineering/atmos/storage_maintenance)
"wFj" = (
/obj/structure/flora/ausbushes/sparsegrass,
/obj/effect/floor_decal/spline/fancy/wood/corner{
@@ -175471,7 +175460,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/effect/floor_decal/corner_wide/yellow{
@@ -175968,7 +175957,7 @@
dir = 4
},
/obj/item/radio/intercom/east,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled,
/area/horizon/stairwell/starboard/deck_2)
"wJL" = (
@@ -176273,19 +176262,6 @@
/obj/effect/large_stock_marker,
/turf/simulated/floor/tiled,
/area/merchant_station/warehouse)
-"wMg" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/floor_decal/corner_wide/brown{
- dir = 4
- },
-/obj/effect/floor_decal/corner_wide/brown{
- dir = 9
- },
-/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist/surgicalbay)
"wMj" = (
/obj/effect/decal{
anchored = 1;
@@ -176312,6 +176288,13 @@
icon_state = "6,0"
},
/area/shuttle/legion)
+"wMt" = (
+/obj/structure/cable/green{
+ icon_state = "2-4"
+ },
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
+/area/horizon/maintenance/deck_2/service/starboard)
"wMu" = (
/obj/structure/table/standard,
/obj/item/storage/firstaid/fire{
@@ -176361,7 +176344,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_1/wing/starboard/far)
"wMJ" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/airlock/maintenance{
dir = 1;
req_one_access = list(5,12)
@@ -176425,7 +176408,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/door/firedoor{
@@ -176614,7 +176597,6 @@
},
/area/centcom/legion)
"wOh" = (
-/obj/structure/disposalpipe/segment,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable/green{
@@ -176624,6 +176606,7 @@
icon_state = "pipe-j2"
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/plating,
/area/horizon/hallway/primary/deck_2/fore)
"wOl" = (
@@ -176900,22 +176883,6 @@
/obj/random/maintenance_junk_or_loot,
/turf/simulated/floor/tiled/dark,
/area/horizon/maintenance/deck_2/research)
-"wPm" = (
-/obj/item/reagent_containers/glass/beaker/large,
-/obj/structure/reagent_dispensers/acid{
- pixel_x = -32
- },
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/structure/platform,
-/obj/structure/machinery/r_n_d/circuit_imprinter,
-/obj/effect/floor_decal/corner_wide/black{
- dir = 10
- },
-/obj/effect/floor_decal/corner_wide/black{
- dir = 5
- },
-/turf/simulated/floor/tiled/white,
-/area/horizon/operations/machinist)
"wPr" = (
/obj/effect/floor_decal/corner/brown{
dir = 5
@@ -177557,7 +177524,7 @@
/turf/simulated/floor/tiled/gunmetal/full,
/area/horizon/operations/ship_supply_warehouse)
"wTf" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -178026,6 +177993,19 @@
/obj/item/pen/fountain/black,
/turf/simulated/floor/carpet,
/area/merchant_station)
+"wVI" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/structure/sink/kitchen{
+ dir = 4;
+ name = "sink";
+ pixel_x = -21
+ },
+/obj/structure/machinery/firealarm/west,
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"wVO" = (
/obj/effect/floor_decal/spline/fancy/wood,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -178452,9 +178432,9 @@
/turf/simulated/floor/tiled/full,
/area/horizon/crew/fitness/changing)
"wYw" = (
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -178730,7 +178710,7 @@
/turf/simulated/floor/tiled/white,
/area/horizon/rnd/chemistry)
"xac" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -178830,7 +178810,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/full,
@@ -178970,7 +178950,7 @@
/area/horizon/hangar/operations)
"xaY" = (
/obj/structure/lattice/catwalk/indoor/grate,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -179069,6 +179049,16 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/security/checkpoint2)
+"xbP" = (
+/obj/structure/cable/green{
+ icon_state = "1-2"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment/mainline,
+/obj/structure/lattice/catwalk/indoor/grate,
+/turf/simulated/floor,
+/area/horizon/security/investigations_hallway)
"xbR" = (
/obj/structure/railing/mapped{
dir = 4
@@ -179172,7 +179162,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor,
/obj/structure/machinery/door/airlock/maintenance_hatch,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
@@ -179203,13 +179193,6 @@
},
/turf/simulated/floor/tiled/dark/full,
/area/horizon/security/checkpoint2)
-"xcR" = (
-/obj/effect/floor_decal/corner/brown{
- dir = 10
- },
-/obj/structure/machinery/firealarm/south,
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"xcV" = (
/obj/structure/shuttle_part/scc/scout{
icon_state = "5,11"
@@ -179299,6 +179282,13 @@
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/main/port)
+"xdh" = (
+/obj/structure/bed/stool/chair/office/dark,
+/obj/effect/landmark/start{
+ name = "Machinist"
+ },
+/turf/simulated/floor/tiled/full,
+/area/horizon/operations/machinist)
"xdo" = (
/obj/structure/table/stone/marble,
/obj/structure/machinery/recharger{
@@ -179595,7 +179585,7 @@
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/airlock/maintenance{
dir = 1;
name = "INDRA Reactor Maintenance";
@@ -180559,7 +180549,7 @@
/obj/effect/floor_decal/corner/dark_blue/full{
dir = 4
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled,
@@ -180651,19 +180641,6 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/aft_airlock)
"xmE" = (
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 6
- },
-/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
- },
-/obj/structure/cable/green{
- icon_state = "2-4"
- },
/obj/structure/machinery/door/firedoor{
req_one_access = list(24,11,67,73);
dir = 4
@@ -180672,6 +180649,18 @@
/obj/structure/machinery/door/airlock/glass{
dir = 4
},
+/obj/structure/disposalpipe/segment/mainline{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
/turf/simulated/floor/tiled/full,
/area/horizon/hallway/primary/deck_3/central)
"xmF" = (
@@ -180702,7 +180691,7 @@
"xmQ" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_blue{
dir = 10
},
@@ -180756,8 +180745,8 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
@@ -181219,7 +181208,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/alarm/north,
@@ -181433,9 +181422,9 @@
},
/area/centcom/control)
"xrU" = (
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 8
},
/obj/effect/floor_decal/industrial/warning{
dir = 1
@@ -181607,7 +181596,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/propulsion)
"xsF" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/corner/dark_green{
dir = 9
},
@@ -181668,9 +181657,9 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/rnd/hallway)
"xsW" = (
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -181917,7 +181906,7 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/atmos/air)
"xuo" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/effect/floor_decal/industrial/outline/service,
/turf/simulated/floor/plating,
@@ -181971,9 +181960,9 @@
/obj/structure/cable{
icon_state = "1-4"
},
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 1
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/random/maintenance_junk_or_loot,
@@ -182011,7 +182000,7 @@
dir = 1
},
/obj/effect/floor_decal/spline/fancy/wood,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/item/radio/intercom/east,
/turf/simulated/floor/lino/diamond,
/area/horizon/service/bar)
@@ -182085,7 +182074,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -182098,7 +182087,7 @@
/turf/simulated/floor/plating,
/area/horizon/engineering/hallway/fore)
"xvf" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/cable/green{
icon_state = "1-2"
},
@@ -182142,7 +182131,7 @@
/obj/effect/floor_decal/corner/brown{
dir = 4
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/turf/simulated/floor/tiled,
/area/horizon/operations/break_room)
"xvB" = (
@@ -182226,30 +182215,6 @@
},
/turf/simulated/floor/tiled,
/area/horizon/security/hallway)
-"xwG" = (
-/obj/item/storage/bag/circuits/basic{
- pixel_y = 2;
- pixel_x = 1
- },
-/obj/structure/table/steel,
-/obj/effect/floor_decal/corner/brown/full{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/horizon/operations/machinist)
-"xwJ" = (
-/obj/effect/floor_decal/corner/dark_green,
-/obj/effect/floor_decal/corner/brown{
- dir = 9
- },
-/obj/effect/floor_decal/corner/brown{
- dir = 10
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"xwL" = (
/obj/structure/sign/urban/restroom{
pixel_x = 4;
@@ -182289,25 +182254,6 @@
/obj/effect/floor_decal/industrial/hatch_door/yellow,
/turf/simulated/floor/tiled/dark/full,
/area/horizon/maintenance/deck_2/research)
-"xwX" = (
-/obj/effect/floor_decal/industrial/warning{
- dir = 1
- },
-/obj/structure/disposalpipe/trunk{
- dir = 4
- },
-/obj/structure/disposaloutlet{
- dir = 4
- },
-/obj/structure/machinery/door/window{
- dir = 4
- },
-/obj/structure/window/reinforced,
-/obj/structure/machinery/light{
- dir = 8
- },
-/turf/simulated/floor/tiled/dark/full,
-/area/horizon/operations/machinist)
"xxb" = (
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
@@ -182498,6 +182444,17 @@
/obj/effect/floor_decal/spline/plain/corner/black,
/turf/simulated/floor/carpet/rubber,
/area/horizon/tcommsat/entrance)
+"xyg" = (
+/obj/structure/reagent_dispensers/acid{
+ pixel_y = 32
+ },
+/obj/structure/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/machinery/r_n_d/fabricator/circuit_imprinter,
+/obj/effect/floor_decal/industrial/outline/research,
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"xyh" = (
/obj/structure/machinery/atmospherics/pipe/manifold4w/visible/black,
/obj/structure/machinery/meter,
@@ -182529,7 +182486,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate,
@@ -182714,7 +182671,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/full,
@@ -182741,16 +182698,6 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/green,
/turf/simulated/floor/plating,
/area/horizon/stairwell/engineering/deck_1)
-"xzj" = (
-/obj/effect/floor_decal/spline/fancy/wood{
- dir = 10
- },
-/obj/structure/bed/stool/chair/padded/brown{
- dir = 1
- },
-/obj/structure/railing/mapped,
-/turf/simulated/floor/wood,
-/area/horizon/service/cafeteria)
"xzl" = (
/obj/effect/floor_decal/industrial/warning{
dir = 9
@@ -182974,7 +182921,7 @@
/area/horizon/maintenance/deck_2/research)
"xAN" = (
/obj/effect/floor_decal/industrial/hatch_door/yellow,
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/cable/green{
@@ -183023,6 +182970,20 @@
"xBh" = (
/turf/simulated/wall/shuttle/scc_space_ship/cardinal,
/area/horizon/command/bridge/controlroom)
+"xBm" = (
+/obj/structure/railing/mapped,
+/obj/structure/sign/poster/engineering/tg_10{
+ pixel_y = 32;
+ pixel_x = 1
+ },
+/obj/effect/floor_decal/corner/brown{
+ dir = 10
+ },
+/obj/structure/machinery/light/floor{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist/surgicalbay)
"xBn" = (
/obj/effect/map_effect/window_spawner/full/reinforced/grille/firedoor,
/obj/structure/machinery/door/blast/regular/open{
@@ -183155,7 +183116,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/outline/medical,
/turf/simulated/floor/tiled/gunmetal/full,
/area/horizon/operations/warehouse)
@@ -183171,8 +183132,8 @@
/obj/effect/floor_decal/industrial/warning{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow"
},
/turf/simulated/floor/tiled,
/area/horizon/security/hallway)
@@ -183249,7 +183210,7 @@
/obj/structure/machinery/door/airlock/glass{
dir = 1
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
},
@@ -183340,6 +183301,16 @@
/obj/structure/extinguisher_cabinet/east,
/turf/simulated/floor/tiled/dark,
/area/horizon/hallway/primary/deck_2/fore)
+"xDI" = (
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/lattice/catwalk/indoor/grate/dark,
+/turf/simulated/floor/plating,
+/area/horizon/operations/machinist)
"xDK" = (
/obj/effect/map_effect/window_spawner/full/borosilicate/reinforced,
/obj/structure/machinery/door/blast/regular{
@@ -183352,7 +183323,7 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/engineering/reactor/supermatter/mainchamber)
"xDL" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor,
/obj/effect/floor_decal/industrial/hatch_door/yellow{
dir = 8
@@ -183423,6 +183394,34 @@
},
/turf/simulated/floor,
/area/horizon/command/bridge/meeting_room)
+"xEc" = (
+/obj/effect/floor_decal/corner/brown/full{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/machinery/power/apc/north,
+/obj/structure/cable/green{
+ icon_state = "0-4"
+ },
+/obj/structure/machinery/light/floor{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist)
"xEd" = (
/obj/effect/floor_decal/industrial/outline/research,
/obj/structure/closet/secure_closet/guncabinet/sci,
@@ -183582,7 +183581,7 @@
icon_state = "1-2"
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/sign/urban/staff{
pixel_y = 19;
pixel_x = -1
@@ -183778,9 +183777,9 @@
/obj/structure/cable{
icon_state = "2-4"
},
-/obj/structure/disposalpipe/segment{
- dir = 4;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/segment/mainline{
+ icon_state = "pipe-c-yellow";
+ dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
@@ -183845,7 +183844,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel{
@@ -184295,6 +184294,14 @@
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_1/auxatmos)
+"xJK" = (
+/obj/effect/floor_decal/industrial/hatch/yellow,
+/obj/structure/machinery/door/blast/shutters{
+ id = "workshop_garage";
+ name = "Machinist Workshop Garage Shutter"
+ },
+/turf/simulated/floor/tiled/dark/full,
+/area/horizon/operations/machinist)
"xJO" = (
/turf/simulated/wall,
/area/horizon/security/checkpoint2)
@@ -184565,7 +184572,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/engineering/atmos/storage)
"xLR" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -184712,7 +184719,7 @@
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate,
@@ -185371,6 +185378,12 @@
},
/turf/simulated/floor/tiled/dark,
/area/horizon/security/firing_range)
+"xRE" = (
+/obj/effect/floor_decal/spline/plain/brown{
+ dir = 5
+ },
+/turf/simulated/floor/tiled/dark,
+/area/horizon/operations/machinist)
"xRM" = (
/obj/item/crowbar,
/obj/structure/table/rack,
@@ -185611,10 +185624,18 @@
/turf/simulated/floor/tiled/white,
/area/horizon/shuttle/intrepid/buffet)
"xTx" = (
-/obj/structure/railing/mapped{
+/obj/structure/cable/green{
+ icon_state = "4-8"
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/junction{
dir = 8
},
-/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/central)
"xTA" = (
@@ -186405,7 +186426,7 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -186652,7 +186673,7 @@
/turf/simulated/floor/tiled/dark,
/area/horizon/hangar/operations)
"ybI" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/cable/green{
@@ -186720,7 +186741,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/dark/full,
@@ -186795,7 +186816,7 @@
/turf/simulated/floor/plating,
/area/horizon/shuttle/intrepid/starboard_compartment)
"ycS" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
@@ -186899,23 +186920,14 @@
/turf/simulated/floor/tiled/dark/full,
/area/horizon/command/teleporter)
"ydF" = (
-/obj/structure/cable/green{
- icon_state = "1-4"
- },
-/obj/structure/cable/green{
- icon_state = "2-4"
- },
/obj/effect/floor_decal/corner/dark_green{
dir = 10
},
-/obj/structure/disposalpipe/junction{
- dir = 1
- },
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
-/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 8
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable/green{
+ icon_state = "1-2"
},
/turf/simulated/floor/tiled,
/area/horizon/hallway/primary/deck_3/central)
@@ -187191,7 +187203,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -187243,7 +187255,7 @@
/turf/simulated/floor/carpet/rubber,
/area/horizon/rnd/lab)
"yfn" = (
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate/dark,
@@ -187260,7 +187272,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/effect/floor_decal/industrial/warning/corner{
dir = 8
},
@@ -187427,7 +187439,6 @@
/obj/item/circuitboard/rtg,
/obj/item/circuitboard/recharge_station,
/obj/item/circuitboard/mech_recharger,
-/obj/item/circuitboard/optable,
/obj/item/circuitboard/security/engineering,
/obj/item/circuitboard/grill,
/obj/structure/machinery/light/small{
@@ -187435,6 +187446,15 @@
},
/turf/simulated/floor/carpet/rubber,
/area/horizon/maintenance/deck_1/workshop)
+"ygs" = (
+/obj/effect/floor_decal/corner/dark_green{
+ dir = 5
+ },
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/effect/floor_decal/industrial/loading/yellow,
+/obj/effect/floor_decal/industrial/outline/yellow,
+/turf/simulated/floor/tiled,
+/area/horizon/stairwell/starboard/deck_2)
"ygu" = (
/obj/structure/bed/stool/chair/padded/black,
/turf/unsimulated/floor{
@@ -187698,20 +187718,6 @@
icon_state = "wood"
},
/area/centcom/legion)
-"yis" = (
-/obj/structure/extinguisher_cabinet/south,
-/obj/effect/floor_decal/corner/brown{
- dir = 10
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/obj/structure/disposalpipe/segment{
- dir = 1;
- icon_state = "pipe-c"
- },
-/turf/simulated/floor/tiled,
-/area/horizon/hallway/primary/deck_2/starboard)
"yix" = (
/obj/structure/platform/ledge{
dir = 4
@@ -187747,6 +187753,16 @@
},
/turf/simulated/floor/plating,
/area/horizon/maintenance/deck_2/elevator)
+"yiX" = (
+/obj/effect/floor_decal/corner_wide/brown/diagonal,
+/obj/effect/floor_decal/industrial/warning{
+ dir = 1
+ },
+/obj/structure/bed/stool/chair/office/dark{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/horizon/operations/machinist/surgicalbay)
"yiZ" = (
/obj/structure/table/reinforced/wood,
/obj/structure/machinery/photocopier/faxmachine{
@@ -187948,7 +187964,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/disposalpipe/segment/mainline{
dir = 4
},
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -188127,7 +188143,7 @@
/turf/simulated/wall/shuttle/space_ship/mercenary,
/area/shuttle/burglar)
"ylE" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/lattice/catwalk/indoor/grate/dark,
/turf/simulated/floor,
/area/horizon/maintenance/deck_3/security/port)
@@ -188147,7 +188163,7 @@
"ylU" = (
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/door/firedoor,
/obj/structure/cable/green{
icon_state = "1-2"
@@ -188162,7 +188178,7 @@
/turf/simulated/floor/tiled/full,
/area/horizon/command/bridge/bridge_crew)
"ylY" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment/mainline,
/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
icon_state = "1-2"
@@ -211438,8 +211454,8 @@ uXq
gTw
qrM
rHt
+mDy
afe
-rxL
wlr
wlr
sxT
@@ -215265,7 +215281,7 @@ lYY
rBt
bOZ
tJJ
-dfN
+wYB
iue
tQU
nkB
@@ -228157,7 +228173,7 @@ lrd
aZr
ktX
uzu
-iQj
+pzf
wpi
nws
fqO
@@ -228414,7 +228430,7 @@ mQp
lje
ktX
nyr
-iQj
+pzf
wpi
nws
fqO
@@ -278534,8 +278550,8 @@ sfz
nsU
pQB
xvf
-bTs
-gIg
+peU
+asl
roH
tHj
ipt
@@ -278803,7 +278819,7 @@ nqF
nqF
nqF
nqF
-eIu
+kdV
dlH
gZU
uYQ
@@ -279052,14 +279068,14 @@ oJw
fbC
nqF
mAZ
-mAZ
+nTv
nqF
nqF
-jJA
-eWQ
-dVT
-rBN
-nqF
+xyg
+nMY
+awu
+gEz
+iTW
lhz
nWP
bSS
@@ -279306,17 +279322,17 @@ qAo
oCl
xIq
gRc
-xwJ
-nqF
-dKx
-dKx
-pum
-xwX
-uao
-uao
-aGE
-mKo
+dCf
nqF
+rcU
+eJN
+acj
+uAY
+qTC
+jgF
+mkE
+pjs
+iTW
lhz
lqA
bSS
@@ -279562,20 +279578,20 @@ uHI
jwo
aEz
cYV
-aCF
-yis
-nqF
-aWi
-qDL
-eHy
-kBP
-kuq
-kuq
-bum
-qOR
-nqF
+oHk
+nWZ
+nWC
+mtu
+jSK
+jmU
+krt
+hfs
+vFo
+fQh
+fBR
+iTW
tvb
-tad
+vnq
lDl
uVj
fxS
@@ -279819,21 +279835,21 @@ poB
tlU
poB
mjk
-qRU
-kIy
-nqF
-sGP
-bGv
-bQQ
-hlO
-hKc
-nBa
-xwG
-nqF
-nqF
-oOJ
-oOJ
-bSS
+wtO
+uMu
+gJz
+nhZ
+eRB
+myU
+soX
+oTv
+lFO
+lCb
+lCb
+svy
+svy
+svy
+vgT
rdq
bSS
eSV
@@ -280076,21 +280092,21 @@ quh
jwo
quh
gIy
-maF
-kmi
-nqF
-eCc
-sZN
-vkm
-ezv
-rJH
-uqq
-mSj
-wPm
-vhY
-cGO
-vyz
-lZa
+kRe
+gpU
+xJK
+uTl
+gtm
+aDO
+eTX
+lwS
+fiz
+lCb
+jPV
+wVI
+uQo
+fix
+vgT
uYQ
eWI
eSV
@@ -280333,21 +280349,21 @@ pUc
pUc
olD
gEF
-fYV
-kAN
-hHf
-lwO
-jyY
-ufT
-ioY
-fFe
-ade
-luo
-fKP
-rmc
-rLs
-qNi
-deD
+blN
+gpU
+xJK
+fvM
+juY
+tMJ
+eDn
+voD
+pEq
+lCb
+omt
+enU
+gij
+mox
+aGV
uYQ
eSV
eSV
@@ -280591,20 +280607,20 @@ etV
geu
gEF
dRY
-fpr
-tLU
-vvB
-bwx
-deA
-gPP
-hop
-cTs
-hxa
-lKQ
-ibT
-kVi
-tPq
-aFW
+sxr
+nWC
+pbY
+xDI
+vuY
+qme
+nmW
+ouV
+lCb
+eQZ
+yiX
+sYk
+lDG
+qNI
uYQ
eSV
eSV
@@ -280847,21 +280863,21 @@ sKL
etV
hDr
gEF
-rLa
-rPk
-gvg
-dDO
-iiE
-aYT
-kYJ
-duA
-uRN
-uGX
-bSH
-uXM
-uXM
-sBt
-lZa
+dRY
+qUu
+nqF
+fZD
+baA
+dkk
+kCd
+dTZ
+omP
+lCb
+uRa
+enU
+bgc
+tKi
+aGV
uYQ
eSV
eSV
@@ -281102,22 +281118,22 @@ rwn
gMm
bSU
iqJ
-oWS
-rHW
-lAv
-aeh
-jNe
-jlJ
-ntJ
-iah
-iLM
-dzP
-wfB
-svy
-svy
+nYA
+oWe
+nqM
+qUu
+nqF
+pEe
+oyM
+tJl
+mXb
+ssP
+ato
lCb
-lCb
-svy
+nUh
+enU
+aIf
+uly
vgT
uYQ
eSV
@@ -281359,23 +281375,23 @@ dnG
hfm
hfi
hMH
-lcu
-tvJ
-hre
-cdM
-hHf
-owZ
-owZ
-sCF
-iOK
-dhb
-rOm
+aTd
+nAE
+oBI
+oFr
+nqF
+xEc
+hvP
+tDB
+ski
+gPV
+dol
svy
-pwq
-ldd
-rCh
-mUm
-vgT
+qpM
+eAY
+vek
+jaI
+aGV
uYQ
eSV
eSV
@@ -281616,22 +281632,22 @@ dYk
knC
sst
etV
-tJu
-gEF
-uUv
-xcR
+cBr
+pnT
+vYg
+vUI
nqF
-nTv
-wor
+tQM
nqF
-bvR
-qKE
-dox
+bDZ
+sZV
+cTs
+vCK
svy
-pfM
-oIQ
-wMg
-vrd
+dmO
+mWP
+eBP
+eBP
aGV
uYQ
eSV
@@ -281874,21 +281890,21 @@ rft
rft
rft
rft
-lYJ
-uUv
-uIn
-oXj
-jBE
-qsB
+sSU
+hdg
+fxZ
+kAP
+oRP
bdK
-vpe
-btw
-rNw
-kLn
-rhb
-uJr
-pmo
-wvm
+xdh
+xRE
+qzp
+orO
+bmw
+cMM
+olX
+rVP
+rtf
aGV
uYQ
eSV
@@ -282134,18 +282150,18 @@ rrr
gEF
rcF
ahg
-rBj
-aGB
+dcv
cNo
-jtm
-oQc
-omS
-uca
+qPm
+qsx
+uxF
+kXg
+fzB
svy
-qpW
-qPl
-cPR
-jYf
+xBm
+cCJ
+iTJ
+rzG
vgT
sDq
czM
@@ -282399,7 +282415,7 @@ tQJ
tQJ
dlQ
dlQ
-bjO
+fsn
dlQ
dlQ
kdf
@@ -282656,7 +282672,7 @@ cMY
bhL
nXt
xli
-qKJ
+wMt
uhb
uSI
gba
@@ -282910,10 +282926,10 @@ diV
why
gMj
nyl
-gRp
+wlx
aeV
aeV
-ozL
+efC
xdH
kJk
gba
@@ -283165,12 +283181,12 @@ khw
yjm
uDL
uDL
-jAT
+ygs
fji
bhL
tFB
jWh
-ewp
+tCi
xEM
mgT
gba
@@ -283427,7 +283443,7 @@ tNA
bhL
oUP
oUP
-vvx
+qke
oUP
oUP
gba
@@ -284204,8 +284220,8 @@ uhZ
xpk
iSz
gOd
-jJG
-edH
+axv
+qOF
xQQ
pCx
tVw
@@ -284449,7 +284465,7 @@ tID
lZh
qch
ivk
-vKO
+fqh
tXO
qch
qAc
@@ -284705,7 +284721,7 @@ tvJ
hQx
khw
gIb
-cnt
+txi
hnr
sgx
qch
@@ -284724,7 +284740,7 @@ qWG
ogt
giv
ezA
-jia
+bFe
gZL
dhe
dhe
@@ -288032,8 +288048,8 @@ kBh
wVn
jGO
ufZ
-kBh
-wVn
+gHQ
+jtG
dvo
ewE
fWT
@@ -289800,7 +289816,7 @@ grg
vkw
vkw
vkw
-wFf
+ufm
ftR
geR
qqC
@@ -289873,7 +289889,7 @@ rSs
giD
eSD
qSg
-meu
+sjt
cHP
uYQ
eSV
@@ -290100,7 +290116,7 @@ cMN
gAF
rWj
wiu
-oca
+fZV
aoE
yeV
wrq
@@ -290357,7 +290373,7 @@ voA
uKZ
wZr
tOG
-lNv
+dTt
aoE
eYO
trW
@@ -291893,7 +291909,7 @@ eIg
eZH
usa
mXT
-jTa
+gwQ
uac
mvS
pNh
@@ -294950,7 +294966,7 @@ uXi
cwC
gbF
qcY
-eMG
+gbF
gbF
eRe
twD
@@ -344839,7 +344855,7 @@ gay
hyZ
ryY
oMa
-qga
+tnj
hkE
uQM
vyl
@@ -345353,7 +345369,7 @@ nHX
syZ
ryY
oMa
-qga
+tnj
ian
bAj
xaC
@@ -345610,7 +345626,7 @@ eoL
awT
ryY
oMa
-qga
+tnj
hkE
fBk
rgH
@@ -346381,7 +346397,7 @@ orU
xhH
sSD
oMa
-qga
+tnj
hkE
hYD
uRk
@@ -346638,7 +346654,7 @@ fpl
vpk
oUw
oMa
-qga
+tnj
hkE
wbV
nQy
@@ -346895,7 +346911,7 @@ bMG
gXd
sSD
oMa
-qga
+tnj
hkE
hYD
jXJ
@@ -347153,7 +347169,7 @@ hpp
sSD
oMa
baf
-dpT
+hkE
hYD
oJX
vvA
@@ -347409,8 +347425,8 @@ eVP
eVP
eVP
fTr
+sfv
fTr
-fcm
kuL
kuL
kuL
@@ -349208,7 +349224,7 @@ phb
phb
fZL
mOz
-iPC
+qFE
iVG
tZu
tJp
@@ -349722,7 +349738,7 @@ phb
phb
uML
mOz
-iPC
+qFE
mwe
ulD
qZa
@@ -349736,7 +349752,7 @@ lkb
iza
vnN
ffl
-tnj
+pIb
pIb
tMK
vcr
@@ -350493,7 +350509,7 @@ phb
phb
oVZ
aKY
-bTU
+jHI
tKK
rvd
rvd
@@ -350760,7 +350776,7 @@ iLL
iLL
efU
oZU
-qGg
+dbR
kQa
tok
iIj
@@ -351478,7 +351494,7 @@ dZK
myx
jsf
lgJ
-mBr
+iOB
kQc
jGE
fvx
@@ -353825,8 +353841,8 @@ bnA
dCu
tgH
fsZ
-oMV
-xzj
+gpr
+oXO
dFd
tHN
kTA
@@ -354082,8 +354098,8 @@ paJ
ljn
dvq
ogi
-fFN
-wzf
+ber
+swE
hFA
uMd
arR
@@ -355116,10 +355132,10 @@ mTQ
tmS
mTQ
mPc
-lSw
-wGH
-wGH
-ttT
+mPc
+mPc
+mPc
+xTx
twe
jLW
kTD
@@ -355373,7 +355389,7 @@ bbm
xWF
bbm
wGH
-nKR
+wGH
wet
wet
ttT
@@ -355887,10 +355903,10 @@ dFd
tHN
kTA
ifi
-jHI
+wGH
tZo
-xTx
-oiU
+tZo
+gFz
wIc
gtL
gtL
@@ -357689,7 +357705,7 @@ dRE
kfi
qBZ
aUF
-wGH
+wkx
jNh
hiJ
jHQ
@@ -357947,7 +357963,7 @@ lJy
xMK
bTU
xmE
-wkx
+bTU
aCj
aCj
aCj
@@ -359986,16 +360002,16 @@ nhS
nhS
nhS
vhB
-syW
+qGg
jCb
fBC
wqy
-wGW
+xbP
hvb
mqN
nHu
-wGW
-wGW
+xbP
+xbP
nHU
hBZ
pmK
diff --git a/maps/sccv_horizon/submaps/ops_warehouse_small_storage.dmm b/maps/sccv_horizon/submaps/ops_warehouse_small_storage.dmm
index 2b6b09d8621..02921502948 100644
--- a/maps/sccv_horizon/submaps/ops_warehouse_small_storage.dmm
+++ b/maps/sccv_horizon/submaps/ops_warehouse_small_storage.dmm
@@ -511,10 +511,6 @@
/obj/random/contraband,
/turf/template_noop,
/area/template_noop)
-"lI" = (
-/obj/random/cookingoil,
-/turf/template_noop,
-/area/template_noop)
"lJ" = (
/obj/random/plushie,
/obj/random/plushie,
@@ -3443,7 +3439,7 @@ sW
Tf
Gz
Gz
-lI
+Gz
xg
Gz
Gz
diff --git a/rust/bapi/Cargo.lock b/rust/bapi/Cargo.lock
index bbfddc1dab7..83636a44af6 100644
--- a/rust/bapi/Cargo.lock
+++ b/rust/bapi/Cargo.lock
@@ -99,6 +99,7 @@ dependencies = [
"eyre",
"fxhash",
"itertools",
+ "libc",
"rand",
"regex",
"scc",
@@ -394,7 +395,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
- "windows-sys 0.52.0",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -659,9 +660,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]]
name = "libc"
-version = "0.2.186"
+version = "0.2.189"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
+checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
[[package]]
name = "libloading"
diff --git a/rust/bapi/Cargo.toml b/rust/bapi/Cargo.toml
index dc4a8daf360..03508df4090 100644
--- a/rust/bapi/Cargo.toml
+++ b/rust/bapi/Cargo.toml
@@ -37,3 +37,4 @@ regex = "1.10.5"
# time
chrono = "0.4.39"
uuid = { version = "1.18.1", features = ["v4"] }
+libc = "0.2.189"
diff --git a/rust/bapi/src/lib.rs b/rust/bapi/src/lib.rs
index c5890c401e8..042e51c7070 100644
--- a/rust/bapi/src/lib.rs
+++ b/rust/bapi/src/lib.rs
@@ -1,5 +1,6 @@
// internal modules
mod mapmanip;
+mod misc;
use byondapi::prelude::*;
use eyre::{Context, ContextCompat};
@@ -100,9 +101,32 @@ fn read_dmm_file(path: ByondValue) -> eyre::Result {
/// Not to be called from the game server, so bad error-handling is fine.
/// This should run map manipulations on every `.dmm` map that has a `.jsonc` config file,
/// and write it to a `.mapmanipout.dmm` file in the same location.
+/// Or, if provided, run manipulations on maps in a directory from the `path_raw` argument.
#[no_mangle]
-pub unsafe extern "C" fn all_mapmanip_configs_execute_ffi() {
- let mapmanip_configs = walkdir::WalkDir::new("../../maps")
+pub unsafe extern "system" fn all_mapmanip_configs_execute_ffi(c_str: *const libc::c_char) {
+ let maps_path = if c_str.is_null() {
+ // just do all maps
+ "../../maps".to_string()
+ } else {
+ // try to safely parse the argument
+ let c_str = unsafe { std::ffi::CStr::from_ptr(c_str) };
+
+ match c_str.to_str() {
+ Ok(s) if !s.trim().is_empty() => {
+ let input_path = std::path::Path::new(s.trim());
+ if input_path.is_absolute() {
+ input_path.to_string_lossy().into_owned()
+ } else {
+ let mut resolved = std::path::PathBuf::from("../../");
+ resolved.push(input_path);
+ resolved.to_string_lossy().into_owned()
+ }
+ }
+ _ => "../../maps".to_string(),
+ }
+ };
+
+ let mapmanip_configs = walkdir::WalkDir::new(maps_path)
.into_iter()
.map(|d| d.unwrap().path().to_owned())
.filter(|p| p.extension().is_some())
@@ -117,6 +141,10 @@ pub unsafe extern "C" fn all_mapmanip_configs_execute_ffi() {
p
};
+ if !dmm_path.exists() {
+ continue;
+ }
+
let path_dir: &std::path::Path = dmm_path.parent().unwrap();
let mut dmm = dmmtools::dmm::Map::from_file(&dmm_path).unwrap();
diff --git a/rust/bapi/src/mapmanip/core/mod.rs b/rust/bapi/src/mapmanip/core/mod.rs
index a4131360a1a..200cd042d6b 100644
--- a/rust/bapi/src/mapmanip/core/mod.rs
+++ b/rust/bapi/src/mapmanip/core/mod.rs
@@ -145,8 +145,8 @@ pub struct GridMap {
impl GridMap {
pub fn from_file(path: &std::path::Path) -> eyre::Result {
- Ok(to_grid_map(
- &dmm::Map::from_file(path).wrap_err("failure to read from dmm parser")?,
- ))
+ Ok(to_grid_map(&dmm::Map::from_file(path).wrap_err(
+ format!("failed to read dmm map from path: '{}'", path.display()),
+ )?))
}
}
diff --git a/tgui/packages/tgui/interfaces/CircuitPrinter.tsx b/tgui/packages/tgui/interfaces/CircuitPrinter.tsx
index 5f906c489ad..bbb9962fccf 100644
--- a/tgui/packages/tgui/interfaces/CircuitPrinter.tsx
+++ b/tgui/packages/tgui/interfaces/CircuitPrinter.tsx
@@ -11,6 +11,7 @@ import { useBackend, useLocalState } from '../backend';
import { Window } from '../layouts';
const BLUEPRINT_IMPORT_CHUNK_DELAY = 250;
+const BLUEPRINT_IMPORT_TRANSPORT_CHUNK_LIMIT = 256;
const sleep = (duration: number) =>
new Promise((resolve) => setTimeout(resolve, duration));
@@ -167,7 +168,10 @@ export const CircuitPrinter = (props) => {
setIsImportingBlueprint(true);
let offset = 0;
- const chunkLimit = Math.max(1, data.blueprint_chunk_limit || 1000);
+ const chunkLimit = Math.min(
+ BLUEPRINT_IMPORT_TRANSPORT_CHUNK_LIMIT,
+ Math.max(1, data.blueprint_chunk_limit || 1000),
+ );
const bufferLimit = data.blueprint_buffer_limit || 500000;
if (importText.length > bufferLimit) {
@@ -179,20 +183,24 @@ export const CircuitPrinter = (props) => {
}
try {
- await act('begin_import_buffer');
+ const importId = `${Date.now()}-${Math.random()}`;
+ const chunkCount = Math.ceil(importText.length / chunkLimit);
+ let chunkIndex = 1;
while (offset < importText.length) {
const chunk = importText.slice(offset, offset + chunkLimit);
- await act('append_import_chunk_tgui', {
- chunk: encodeURIComponent(chunk),
+ act('receive_import_chunk_tgui', {
+ import_id: importId,
+ index: chunkIndex,
+ count: chunkCount,
+ chunk,
});
offset += chunk.length;
+ chunkIndex++;
await sleep(BLUEPRINT_IMPORT_CHUNK_DELAY);
}
-
- await act('finish_import_buffer_tgui');
} finally {
setIsImportingBlueprint(false);
}
diff --git a/tgui/packages/tgui/interfaces/NTMonitor.tsx b/tgui/packages/tgui/interfaces/NTMonitor.tsx
index 556b2a79db8..96abf9a01d1 100644
--- a/tgui/packages/tgui/interfaces/NTMonitor.tsx
+++ b/tgui/packages/tgui/interfaces/NTMonitor.tsx
@@ -13,6 +13,9 @@ import { NtosWindow } from '../layouts';
export type MonitorData = {
ntnetstatus: BooleanLike;
ntnetrelays: number;
+ ntnetcores: number;
+ ntnetfieldrelays: number;
+ ntnetroutedrelays: number;
idsstatus: BooleanLike;
idsalarm: BooleanLike;
config_softwaredownload: BooleanLike;
@@ -36,6 +39,15 @@ export const NTMonitor = (props) => {
{data.ntnetrelays}
+
+ {data.ntnetcores}
+
+
+ {data.ntnetfieldrelays}
+
+
+ {data.ntnetroutedrelays}
+
{data.ntnetstatus ? 'Enabled' : 'Disabled'}
diff --git a/tgui/packages/tgui/interfaces/NTNetRelay.tsx b/tgui/packages/tgui/interfaces/NTNetRelay.tsx
index ed3ed1a5332..50422bccbfe 100644
--- a/tgui/packages/tgui/interfaces/NTNetRelay.tsx
+++ b/tgui/packages/tgui/interfaces/NTNetRelay.tsx
@@ -8,6 +8,11 @@ export type NTNetData = {
dos_capacity: number;
dos_overload: number;
dos_crashed: BooleanLike;
+ relay_class: string;
+ linked_sector: string;
+ backhaul_range: number;
+ backhaul_online: BooleanLike;
+ backhaul_core: string;
};
export const NTNetRelay = (props) => {
@@ -42,6 +47,21 @@ export const NTNetRelay = (props) => {
) : (
+
+ {data.relay_class}
+
+
+ {data.linked_sector}
+
+
+ {data.backhaul_online ? 'Online' : 'Offline'}
+
+
+ {data.backhaul_core}
+
+
+ {data.backhaul_range}
+
{data.dos_overload} / {data.dos_capacity} GQ
diff --git a/tgui/packages/tgui/styles/main.scss b/tgui/packages/tgui/styles/main.scss
index 0bf4471fc46..47204490112 100644
--- a/tgui/packages/tgui/styles/main.scss
+++ b/tgui/packages/tgui/styles/main.scss
@@ -60,6 +60,7 @@
@include meta.load-css('./interfaces/PersonalCrafting.scss');
@include meta.load-css('./interfaces/Radio.scss');
@include meta.load-css('./interfaces/LoreConsole.scss');
+@include meta.load-css('./interfaces/ResearchFabricator.scss');
// Layouts
@include meta.load-css('./layouts/Layout.scss');
@@ -76,6 +77,57 @@
background-size: 70%;
background-position: center;
background-repeat: no-repeat;
+
+ .Table {
+ background-color: hsla(0, 0%, 3%, 0.45);
+ border: 1px solid hsla(0, 0%, 35%, 0.22);
+ border-collapse: separate;
+ border-spacing: 0;
+ box-shadow: inset 0 0 0 1px hsla(0, 0%, 50%, 0.06);
+
+ &__row {
+ background-color: hsla(0, 0%, 5%, 0.42);
+
+ &:nth-child(even):not(&--header) {
+ background-color: hsla(0, 0%, 15%, 0.34);
+ }
+
+ &:hover:not(&--header) {
+ background-color: hsla(0, 0%, 18%, 0.45);
+ }
+
+ &--header {
+ background-color: hsla(0, 0%, 14%, 0.65);
+ color: hsl(31, 0%, 72%);
+ text-transform: uppercase;
+ letter-spacing: 0.035em;
+ box-shadow: inset 0 -1px 0 hsla(0, 0%, 50%, 0.28);
+ }
+ }
+ }
+
+ .Tabs {
+ border-bottom: 1px solid hsl(0, 0%, 15%);
+ margin-bottom: 0.5rem;
+
+ &__tab {
+ background-color: hsla(0, 0%, 3%, 0.7);
+ border: 1px solid hsl(0, 0%, 14%);
+ color: hsl(0, 0%, 55%);
+
+ &:hover {
+ background-color: hsla(0, 0%, 28%, 0.18);
+ color: hsl(0, 0%, 72%);
+ }
+
+ &--selected {
+ background-color: hsl(0, 0%, 18%);
+ border-color: hsl(0, 0%, 42%);
+ color: hsl(30, 0%, 75%);
+ box-shadow: inset 0 -2px 0 hsl(30, 0%, 55%);
+ }
+ }
+ }
}
// A default, in case someone uses the vp() function outside of a
:root {
diff --git a/tools/bapi/mapmanip.ps1 b/tools/bapi/mapmanip.ps1
index 10fad66da09..06e22aabf95 100644
--- a/tools/bapi/mapmanip.ps1
+++ b/tools/bapi/mapmanip.ps1
@@ -1,15 +1,34 @@
+param (
+ [string]$Path
+)
+
# if you want to run this script but it opens in notepad
# you may want to right click it and "run with powershell"
+# relaunch in 32-bit powershell if currently running in 64-bit
+if ([Environment]::Is64BitProcess) {
+ $PowerShell32 = "$env:SystemRoot\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"
+ & $PowerShell32 -ExecutionPolicy Bypass -File $MyInvocation.MyCommand.Path @PSBoundParameters @args
+ exit
+}
+
# script explanation
-echo "*****"
-echo "This script will run map manipulations on every `.dmm` map that has a `.jsonc` config file,"
-echo "and write it to a `.mapmanipout.dmm` file in the same location."
-echo "Make sure to not commit these files to the repo."
-echo "This script will not show any error messages if map manipulations have failed."
-echo "Should launch the actual server to get stacktraces and the like."
-echo "*****"
+Write-Host "*****"
+Write-Host ""
+Write-Host "This script will run map manipulations on every `.dmm` map that has a `.jsonc` config file,"
+Write-Host "and write it to a `.mapmanipout.dmm` file in the same location."
+Write-Host "Make sure to not commit these files to the repo."
+Write-Host "You may have to launch the actual server to get stacktraces and the like."
+Write-Host "You may provide a path to a specific map directory as an argument."
+Write-Host ""
+Write-Host "Example usage:"
+Write-Host "./mapmanip.ps1"
+Write-Host "./mapmanip.ps1 -Path maps/away/ships/my_map_folder"
+Write-Host "./mapmanip.ps1 -Path D:/Git/Aurora.3/maps/away/ships/my_map_folder"
+Write-Host ""
+Write-Host "*****"
+Write-Host ""
# find path to bapi.dll
if (Test-Path "./../../rust/bapi/target/i686-pc-windows-msvc/release/bapi.dll") {
@@ -19,20 +38,31 @@ if (Test-Path "./../../rust/bapi/target/i686-pc-windows-msvc/release/bapi.dll")
} elseif (Test-Path "./../../bapi.dll") {
$BapiPath = "./../../bapi.dll"
} else {
- echo "Cannot find bapi."
+ Write-Host "Cannot find bapi."
}
# run ffi function from bapi.dll
-echo "Executing..."
-$BapiDllFunction = "all_mapmanip_configs_execute_ffi"
+Write-Host "Executing..."
+$HasPath = $PSBoundParameters.ContainsKey('Path') -or ($null -ne $Path)
$BapiExecutionTime = Measure-Command {
- # `rundll` runs a function from a dll
- # the very sad limitation is that it does not give any output from that function
- rundll32.exe $BapiPath,$BapiDllFunction
+ # load the dll into powershell natively
+ $Signature = @"
+ [DllImport("$BapiPath", CallingConvention = CallingConvention.StdCall)]
+ public static extern void all_mapmanip_configs_execute_ffi(string path);
+"@
+ try {
+ Add-Type -MemberDefinition $Signature -Name "Bapi" -Namespace "RustTools" -ErrorAction Stop
+ } catch {
+ # already loaded in this PowerShell session, safely ignore
+ }
+
+ # call the rust function natively
+ Write-Host "on path $Path..."
+ [RustTools.Bapi]::all_mapmanip_configs_execute_ffi($Path)
}
# done
-echo "Done!"
-echo ("Took {0} seconds, or {1} milliseconds in total." -f $BapiExecutionTime.Seconds,$BapiExecutionTime.Milliseconds)
-echo "*****"
+Write-Host "Done!"
+Write-Host ("Took {0} seconds, or {1} milliseconds in total." -f $BapiExecutionTime.Seconds,$BapiExecutionTime.Milliseconds)
+Write-Host "*****"
Read-Host -Prompt "Press Enter to exit..."
diff --git a/tools/ci/libbapi_ci.so b/tools/ci/libbapi_ci.so
index dcff7eead41..cbf44f74677 100644
Binary files a/tools/ci/libbapi_ci.so and b/tools/ci/libbapi_ci.so differ
| |