diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm
index faa5cf18ae978..047d4b4c042b1 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm
@@ -6,7 +6,7 @@
/obj/item/circuitboard/machine/space_heater,
/obj/item/stack/cable_coil/five,
/obj/structure/frame/machine,
-/obj/item/stock_parts/cell/super,
+/obj/item/stock_parts/power_store/cell/super,
/turf/open/floor/wood,
/area/ruin/smoking_room/house)
"d" = (
@@ -175,11 +175,11 @@
/area/ruin/smoking_room/room)
"E" = (
/obj/item/trash/shrimp_chips,
-/obj/item/clothing/mask/cigarette/rollie/trippy{
+/obj/item/cigarette/rollie/trippy{
pixel_x = 3;
pixel_y = -1
},
-/obj/item/clothing/mask/cigarette/rollie/trippy{
+/obj/item/cigarette/rollie/trippy{
pixel_x = 3;
pixel_y = 5
},
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm
index f344652d623b4..96dec4af7207d 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm
@@ -89,7 +89,7 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell,
+/obj/item/stock_parts/power_store/cell,
/turf/open/floor/plating,
/area/ruin/plasma_facility/operations)
"bv" = (
@@ -166,7 +166,7 @@
pixel_x = -7;
pixel_y = 8
},
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = -18;
pixel_y = -3
},
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent.dmm
index 5e03988f8d3e7..ff3417fefce6d 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent.dmm
@@ -373,9 +373,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
},
-/turf/open/floor/plating/snowed{
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
- },
+/turf/open/floor/plating/snowed/standard_air,
/area/ruin/comms_agent)
"uk" = (
/obj/structure/cable,
@@ -761,9 +759,7 @@
/obj/structure/cable,
/obj/item/cultivator/rake,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/plating/snowed{
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
- },
+/turf/open/floor/plating/snowed/standard_air,
/area/ruin/comms_agent)
"Ll" = (
/obj/effect/mapping_helpers/broken_floor,
@@ -867,9 +863,7 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
},
-/turf/open/floor/plating/snowed{
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
- },
+/turf/open/floor/plating/snowed/standard_air,
/area/ruin/comms_agent)
"NJ" = (
/obj/item/storage/medkit/regular,
@@ -892,9 +886,7 @@
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/plating/snowed{
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
- },
+/turf/open/floor/plating/snowed/standard_air,
/area/ruin/comms_agent)
"OB" = (
/turf/open/lava/plasma/ice_moon,
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
index fb738781bc752..13a82feee1d21 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
@@ -1445,23 +1445,6 @@
/obj/machinery/duct,
/turf/open/floor/wood,
/area/ruin/syndicate_lava_base/dormitories)
-"lk" = (
-/obj/structure/table/wood,
-/obj/machinery/light/small/directional/east,
-/obj/machinery/computer/security/telescreen/entertainment{
- pixel_x = 30
- },
-/obj/structure/window/reinforced/spawner/directional/north{
- pixel_y = 1
- },
-/obj/item/book/manual/chef_recipes{
- pixel_x = 2;
- pixel_y = 6
- },
-/obj/item/book/manual/wiki/barman_recipes,
-/obj/item/reagent_containers/cup/glass/shaker,
-/turf/open/floor/wood,
-/area/ruin/syndicate_lava_base/bar)
"lm" = (
/obj/structure/closet/secure_closet/medical1{
req_access = list("syndicate")
@@ -1745,6 +1728,21 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible,
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ruin/syndicate_lava_base/engineering)
+"nI" = (
+/obj/structure/table/wood,
+/obj/machinery/light/small/directional/east,
+/obj/structure/window/reinforced/spawner/directional/north{
+ pixel_y = 1
+ },
+/obj/item/book/manual/chef_recipes{
+ pixel_x = 2;
+ pixel_y = 6
+ },
+/obj/item/book/manual/wiki/barman_recipes,
+/obj/item/reagent_containers/cup/glass/shaker,
+/obj/machinery/computer/security/telescreen/entertainment/directional/east,
+/turf/open/floor/wood,
+/area/ruin/syndicate_lava_base/bar)
"nK" = (
/obj/machinery/door/airlock/public/glass{
name = "Bar"
@@ -2000,16 +1998,6 @@
dir = 1
},
/area/ruin/syndicate_lava_base/medbay)
-"qv" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/structure/cable,
-/turf/open/floor/mineral/plastitanium,
-/area/ruin/syndicate_lava_base/cargo)
"qA" = (
/obj/structure/reagent_dispensers/beerkeg,
/turf/open/floor/iron/dark,
@@ -2077,15 +2065,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/ruin/syndicate_lava_base/cargo)
-"rI" = (
-/obj/machinery/firealarm/directional/west,
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron,
-/area/ruin/syndicate_lava_base/engineering)
"rO" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible,
/obj/structure/cable,
@@ -3176,6 +3155,15 @@
/obj/structure/table/reinforced,
/turf/open/floor/iron/dark,
/area/ruin/syndicate_lava_base/bar)
+"GI" = (
+/obj/machinery/firealarm/directional/west,
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron,
+/area/ruin/syndicate_lava_base/engineering)
"GV" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -3824,6 +3812,16 @@
},
/turf/open/floor/iron,
/area/ruin/syndicate_lava_base/arrivals)
+"QG" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/structure/cable,
+/turf/open/floor/mineral/plastitanium,
+/area/ruin/syndicate_lava_base/cargo)
"QN" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -5664,7 +5662,7 @@ jy
ka
ue
kM
-lk
+nI
lC
To
TN
@@ -6316,7 +6314,7 @@ Bu
kV
lp
Dr
-rI
+GI
mF
Cj
Lp
@@ -6496,7 +6494,7 @@ ab
dy
dy
eE
-qv
+QG
dy
gd
dy
diff --git a/_maps/RandomRuins/SpaceRuins/abandonedteleporter.dmm b/_maps/RandomRuins/SpaceRuins/abandonedteleporter.dmm
index 0f5ffbcb72c71..51fea0a9517c1 100644
--- a/_maps/RandomRuins/SpaceRuins/abandonedteleporter.dmm
+++ b/_maps/RandomRuins/SpaceRuins/abandonedteleporter.dmm
@@ -48,7 +48,7 @@
/turf/open/floor/plating/airless,
/area/ruin/space/abandoned_tele)
"l" = (
-/obj/item/stock_parts/cell,
+/obj/item/stock_parts/power_store/cell,
/turf/open/floor/plating/airless,
/area/ruin/space/abandoned_tele)
"m" = (
diff --git a/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm b/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm
index f7dc2f52fe328..32329cf4a5cfd 100644
--- a/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm
+++ b/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm
@@ -513,7 +513,7 @@
"yE" = (
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/machinery/power/terminal{
dir = 4
},
diff --git a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm
index 12c40f0b280db..4bdf2af01f19d 100644
--- a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm
+++ b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm
@@ -132,8 +132,8 @@
"aI" = (
/obj/structure/closet/crate/engineering/electrical,
/obj/item/storage/toolbox/electrical,
-/obj/item/stock_parts/cell/hyper,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/hyper,
+/obj/item/stock_parts/power_store/cell/high,
/turf/open/floor/mineral/titanium/yellow,
/area/ruin/space/has_grav/derelictoutpost/dockedship)
"aJ" = (
@@ -207,7 +207,7 @@
"aW" = (
/obj/structure/closet/crate/engineering/electrical,
/obj/item/storage/toolbox/electrical,
-/obj/item/stock_parts/cell/hyper,
+/obj/item/stock_parts/power_store/cell/hyper,
/turf/open/floor/mineral/titanium/yellow,
/area/ruin/space/has_grav/derelictoutpost/dockedship)
"aX" = (
@@ -233,7 +233,7 @@
/area/ruin/space/has_grav/derelictoutpost/powerstorage)
"bc" = (
/obj/structure/table,
-/obj/item/stock_parts/cell/hyper,
+/obj/item/stock_parts/power_store/cell/hyper,
/obj/structure/cable,
/turf/open/floor/iron,
/area/ruin/space/has_grav/derelictoutpost/powerstorage)
diff --git a/_maps/RandomRuins/SpaceRuins/crashedship.dmm b/_maps/RandomRuins/SpaceRuins/crashedship.dmm
index 803e0afa28cd3..60e8714e865ae 100644
--- a/_maps/RandomRuins/SpaceRuins/crashedship.dmm
+++ b/_maps/RandomRuins/SpaceRuins/crashedship.dmm
@@ -1316,7 +1316,7 @@
dir = 1
},
/obj/structure/table,
-/obj/item/stock_parts/cell/lead,
+/obj/item/stock_parts/power_store/cell/lead,
/turf/open/floor/iron/airless,
/area/ruin/space/has_grav/crashedship/aft)
"XW" = (
diff --git a/_maps/RandomRuins/SpaceRuins/cyborg_mothership.dmm b/_maps/RandomRuins/SpaceRuins/cyborg_mothership.dmm
index 7e6927290bc23..f72cdd8ecad43 100644
--- a/_maps/RandomRuins/SpaceRuins/cyborg_mothership.dmm
+++ b/_maps/RandomRuins/SpaceRuins/cyborg_mothership.dmm
@@ -62,7 +62,7 @@
/turf/template_noop,
/area/space)
"s" = (
-/obj/item/stock_parts/cell/high/empty,
+/obj/item/stock_parts/power_store/cell/high/empty,
/turf/open/misc/asteroid/airless,
/area/space)
"u" = (
diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm
index 6ee95f03755dd..f9235a874b054 100644
--- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm
+++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm
@@ -829,12 +829,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden{
dir = 4
},
-/obj/machinery/computer/security/telescreen{
- dir = 1;
- name = "Bunker Entrance monitor";
- network = list("bunker1");
- pixel_y = 2
- },
/obj/effect/decal/cleanable/dirt,
/obj/machinery/button/door/directional/west{
id = "bunkerexterior";
@@ -853,6 +847,7 @@
pixel_y = 8;
req_access = list("away_general")
},
+/obj/machinery/computer/security/telescreen/deep_storage/bunker/directional/north,
/turf/open/floor/iron,
/area/ruin/space/has_grav/deepstorage/airlock)
"eL" = (
diff --git a/_maps/RandomRuins/SpaceRuins/forgottenship.dmm b/_maps/RandomRuins/SpaceRuins/forgottenship.dmm
index 0853eb15a91a7..7b12e87992c8a 100644
--- a/_maps/RandomRuins/SpaceRuins/forgottenship.dmm
+++ b/_maps/RandomRuins/SpaceRuins/forgottenship.dmm
@@ -282,6 +282,7 @@
/obj/item/paper,
/obj/item/pen,
/obj/machinery/light/directional/south,
+/obj/machinery/computer/security/telescreen/forgotten_ship/sci/directional/south,
/turf/open/floor/carpet/royalblack,
/area/ruin/space/has_grav/syndicate_forgotten_ship)
"bp" = (
@@ -466,16 +467,6 @@
},
/turf/open/floor/mineral/plastitanium,
/area/ruin/space/has_grav/syndicate_forgotten_ship)
-"bT" = (
-/obj/structure/table/reinforced,
-/obj/machinery/computer/security/telescreen/interrogation{
- name = "Cameras monitor";
- network = list("fsci");
- req_access = list("syndicate");
- screen_loc = ""
- },
-/turf/open/floor/mineral/plastitanium,
-/area/ruin/space/has_grav/syndicate_forgotten_ship)
"bV" = (
/obj/structure/table/reinforced,
/turf/open/floor/mineral/plastitanium/red,
@@ -2067,7 +2058,7 @@ bZ
co
bZ
VF
-bT
+ah
bg
aD
cF
diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm
index 8aa85a7e1534d..a81508dbe1f40 100644
--- a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm
+++ b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm
@@ -477,7 +477,7 @@
/obj/structure/closet/cardboard,
/obj/item/toy/plush/snakeplushie,
/obj/item/clothing/glasses/eyepatch,
-/obj/item/clothing/mask/cigarette/cigar/havana,
+/obj/item/cigarette/cigar/havana,
/turf/open/floor/plating/dumpsterair,
/area/ruin/space/has_grav/garbagetruck/foodwaste)
"wR" = (
@@ -754,7 +754,7 @@
"Fz" = (
/obj/structure/table/reinforced,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/lead,
+/obj/item/stock_parts/power_store/cell/lead,
/turf/open/floor/iron/smooth,
/area/ruin/space/has_grav/garbagetruck/foodwaste)
"FL" = (
@@ -1070,7 +1070,6 @@
},
/obj/machinery/light/warm,
/obj/machinery/power/apc{
- cell_type = /obj/item/stock_parts/cell/lead;
locked = 0;
pixel_y = -25;
start_charge = 0
diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
index 9813823daeb17..c394d14f977db 100644
--- a/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
+++ b/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
@@ -238,7 +238,7 @@
"vf" = (
/obj/structure/table/reinforced,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/lead,
+/obj/item/stock_parts/power_store/cell/lead,
/turf/open/floor/iron/smooth,
/area/ruin/space/has_grav/garbagetruck/medicalwaste)
"vM" = (
@@ -537,7 +537,6 @@
},
/obj/machinery/light/warm,
/obj/machinery/power/apc{
- cell_type = /obj/item/stock_parts/cell/lead;
locked = 0;
pixel_y = -25;
start_charge = 0
diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm
index c2da1e7646cb0..03a9b87ff4edf 100644
--- a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm
+++ b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm
@@ -142,7 +142,7 @@
/area/ruin/space/has_grav/garbagetruck/squat)
"ih" = (
/obj/item/bedsheet/purple,
-/obj/item/clothing/mask/cigarette/space_cigarette,
+/obj/item/cigarette/space_cigarette,
/obj/structure/bed/maint,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/fuel_pool,
@@ -187,7 +187,7 @@
/area/ruin/space/has_grav/garbagetruck/squat)
"kb" = (
/obj/effect/decal/cleanable/fuel_pool,
-/obj/item/stock_parts/cell/crap/empty,
+/obj/item/stock_parts/power_store/cell/crap/empty,
/obj/effect/decal/cleanable/plastic,
/obj/effect/spawner/random/maintenance/two,
/turf/open/floor/plating/dumpsterair,
@@ -373,7 +373,7 @@
/turf/open/floor/iron/smooth,
/area/ruin/space/has_grav/garbagetruck/squat)
"tu" = (
-/obj/item/clothing/mask/cigarette/robust,
+/obj/item/cigarette/robust,
/obj/structure/closet/emcloset,
/obj/item/clothing/suit/utility/fire/heavy,
/obj/item/clothing/head/utility/hardhat/welding/atmos,
@@ -447,7 +447,7 @@
/obj/structure/broken_flooring/pile,
/obj/item/food/deadmouse/moldy,
/obj/item/stock_parts/water_recycler,
-/obj/item/stock_parts/cell/lead,
+/obj/item/stock_parts/power_store/cell/lead,
/turf/open/floor/plating/dumpsterair,
/area/ruin/space/has_grav/garbagetruck/squat)
"vW" = (
@@ -470,7 +470,6 @@
},
/obj/machinery/light/warm,
/obj/machinery/power/apc{
- cell_type = /obj/item/stock_parts/cell/lead;
locked = 0;
pixel_y = -25;
start_charge = 0
@@ -669,7 +668,7 @@
"HN" = (
/obj/structure/table/reinforced,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/lead,
+/obj/item/stock_parts/power_store/cell/lead,
/turf/open/floor/iron/smooth,
/area/ruin/space/has_grav/garbagetruck/squat)
"HZ" = (
@@ -755,11 +754,11 @@
/turf/open/space/basic,
/area/ruin/space/has_grav/garbagetruck/squat)
"MQ" = (
-/obj/item/stock_parts/cell/crap/empty{
+/obj/item/stock_parts/power_store/cell/crap/empty{
pixel_x = -4;
pixel_y = 10
},
-/obj/item/clothing/mask/cigarette/space_cigarette{
+/obj/item/cigarette/space_cigarette{
pixel_x = -5;
pixel_y = 7
},
@@ -906,7 +905,7 @@
"Xv" = (
/obj/item/food/deadmouse,
/obj/item/clothing/shoes/sneakers/red,
-/obj/item/clothing/mask/cigarette/carp,
+/obj/item/cigarette/carp,
/obj/item/extinguisher/mini,
/obj/effect/decal/cleanable/fuel_pool,
/turf/open/floor/plating/dumpsterair,
diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm
index 33c5893bcee4c..84ec36e943af9 100644
--- a/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm
+++ b/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm
@@ -653,7 +653,6 @@
},
/obj/machinery/light/warm,
/obj/machinery/power/apc{
- cell_type = /obj/item/stock_parts/cell/lead;
locked = 0;
pixel_y = -25;
start_charge = 0
@@ -672,7 +671,7 @@
"Mp" = (
/obj/structure/table/reinforced,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/lead,
+/obj/item/stock_parts/power_store/cell/lead,
/turf/open/floor/iron/smooth,
/area/ruin/space/has_grav/garbagetruck/toystore)
"MK" = (
@@ -758,7 +757,7 @@
/area/ruin/space/has_grav/garbagetruck/toystore)
"Rl" = (
/obj/item/paper/crumpled,
-/obj/item/stock_parts/cell/hyper,
+/obj/item/stock_parts/power_store/cell/hyper,
/obj/item/hand_labeler,
/obj/item/hand_labeler_refill,
/obj/item/hand_labeler_refill,
diff --git a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm
index bdd59fa786bb9..01ef1895a66b9 100644
--- a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm
+++ b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm
@@ -1953,7 +1953,7 @@
/area/ruin/space/has_grav/powered/hilbertresearchfacility)
"Sn" = (
/obj/structure/table/wood,
-/obj/item/stock_parts/cell/bluespace{
+/obj/item/stock_parts/power_store/cell/bluespace{
pixel_y = 4
},
/obj/machinery/cell_charger{
diff --git a/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm b/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm
index 542f64d7abd96..1976a33a4adda 100644
--- a/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm
+++ b/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm
@@ -1980,7 +1980,7 @@
/turf/open/floor/mineral/plastitanium,
/area/ruin/space/has_grav/infested_frigate)
"Fs" = (
-/mob/living/simple_animal/bot/firebot{
+/mob/living/basic/bot/firebot{
faction = list("syndicate","xenomorph");
name = "Mr. Squirtsky";
desc = "He seems much happier with the new management!"
diff --git a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm
index ad27c03ab9ad9..c1188e9866360 100644
--- a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm
+++ b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm
@@ -919,7 +919,7 @@
"WD" = (
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/item/stack/cable_coil{
pixel_x = 3;
pixel_y = 10
@@ -969,7 +969,7 @@
/obj/item/stack/sheet/mineral/plasma{
amount = 30
},
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/machinery/light/small/directional/east,
/obj/structure/closet/crate,
/obj/effect/turf_decal/delivery,
diff --git a/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm b/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm
index 4cd81c550dd77..fbdc62bae7a9a 100644
--- a/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm
+++ b/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm
@@ -49,7 +49,7 @@
/turf/open/floor/plating/airless,
/area/ruin/space/tcommsat_oldaisat)
"am" = (
-/obj/item/stock_parts/cell,
+/obj/item/stock_parts/power_store/cell,
/turf/open/floor/plating/airless,
/area/ruin/space/tcommsat_oldaisat)
"an" = (
diff --git a/_maps/RandomRuins/SpaceRuins/old_infiltrator.dmm b/_maps/RandomRuins/SpaceRuins/old_infiltrator.dmm
index afa11afbc9aa3..4b42f668c3377 100644
--- a/_maps/RandomRuins/SpaceRuins/old_infiltrator.dmm
+++ b/_maps/RandomRuins/SpaceRuins/old_infiltrator.dmm
@@ -676,11 +676,11 @@
"Ux" = (
/obj/structure/extinguisher_cabinet/directional/west,
/obj/structure/table,
-/obj/item/stock_parts/cell/high/empty{
+/obj/item/stock_parts/power_store/cell/high/empty{
pixel_y = 4;
pixel_x = 5
},
-/obj/item/stock_parts/cell/emproof/empty,
+/obj/item/stock_parts/power_store/cell/emproof/empty,
/turf/open/floor/mineral/plastitanium/red/airless,
/area/ruin/space/unpowered)
"UN" = (
diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
index 60088fb274daf..6062a970205c6 100644
--- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm
+++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
@@ -1598,13 +1598,13 @@
/obj/structure/rack,
/obj/effect/decal/cleanable/dirt,
/obj/item/crowbar,
-/obj/item/stock_parts/cell/high,
/obj/machinery/door/window/right/directional/north{
req_access = list("away_general")
},
/obj/item/paper/fluff/ruins/oldstation/apc_note,
/obj/effect/turf_decal/tile/yellow/anticorner/contrasted,
/obj/item/card/id/away/old/equipment,
+/obj/item/stock_parts/power_store/battery/high,
/turf/open/floor/iron,
/area/ruin/space/ancientstation/charlie/engie)
"hh" = (
@@ -5061,7 +5061,7 @@
pixel_x = -3;
pixel_y = 5
},
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/effect/turf_decal/tile/yellow/half/contrasted{
dir = 1
},
@@ -6079,11 +6079,11 @@
"IU" = (
/obj/structure/closet/crate/engineering,
/obj/item/circuitboard/machine/smes,
-/obj/item/stock_parts/cell/high/empty,
-/obj/item/stock_parts/cell/high/empty,
-/obj/item/stock_parts/cell/high/empty,
-/obj/item/stock_parts/cell/high/empty,
-/obj/item/stock_parts/cell/high/empty,
+/obj/item/stock_parts/power_store/cell/high/empty,
+/obj/item/stock_parts/power_store/cell/high/empty,
+/obj/item/stock_parts/power_store/cell/high/empty,
+/obj/item/stock_parts/power_store/cell/high/empty,
+/obj/item/stock_parts/power_store/cell/high/empty,
/obj/item/stock_parts/capacitor,
/obj/effect/decal/cleanable/dirt,
/obj/item/circuitboard/machine/thermomachine,
diff --git a/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm b/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm
index fc856f6858d23..f1b71baa31478 100644
--- a/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm
+++ b/_maps/RandomRuins/SpaceRuins/oldteleporter.dmm
@@ -44,7 +44,7 @@
/area/ruin/space/oldteleporter)
"l" = (
/obj/structure/table,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/turf/open/floor/iron/airless,
/area/ruin/space/oldteleporter)
"n" = (
diff --git a/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm b/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm
index 45eee5cbe8b46..58bad24369050 100644
--- a/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm
+++ b/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm
@@ -300,7 +300,7 @@
/obj/structure/rack,
/obj/item/stack/cable_coil/five,
/obj/item/screwdriver,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/turf/open/floor/iron,
/area/ruin/space/ks13/engineering/sb_bow_solars_control)
"dx" = (
@@ -898,7 +898,7 @@
/area/ruin/space/ks13/service/chapel)
"lW" = (
/obj/structure/rack,
-/obj/item/stock_parts/cell/lead,
+/obj/item/stock_parts/power_store/cell/lead,
/obj/effect/mapping_helpers/broken_floor,
/obj/machinery/power/apc/auto_name/directional/south,
/obj/effect/mapping_helpers/apc/no_charge,
@@ -3880,23 +3880,23 @@
/area/ruin/space/ks13/ai/corridor)
"DL" = (
/obj/structure/table,
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = 7;
pixel_y = 7
},
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = 7;
pixel_y = 4
},
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = 7;
pixel_y = 1
},
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = -7;
pixel_y = 7
},
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = -7;
pixel_y = 4
},
@@ -5546,7 +5546,7 @@
/area/ruin/space/ks13/security/sec)
"MM" = (
/obj/structure/table,
-/obj/item/stock_parts/cell,
+/obj/item/stock_parts/power_store/cell,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/dorms)
@@ -6410,7 +6410,7 @@
pixel_x = -7;
pixel_y = 9
},
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/engineering/tech_storage)
@@ -6745,15 +6745,15 @@
/area/ruin/space/ks13/hallway/aft)
"SO" = (
/obj/structure/rack,
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = 7;
pixel_y = 7
},
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = 7;
pixel_y = 4
},
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = 7;
pixel_y = 1
},
diff --git a/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm b/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm
index 08175777752e6..b31a11cba31ca 100644
--- a/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm
+++ b/_maps/RandomRuins/SpaceRuins/the_faceoff.dmm
@@ -347,7 +347,7 @@
/area/ruin/space)
"mn" = (
/obj/structure/table/reinforced/plastitaniumglass,
-/obj/item/clothing/mask/cigarette/syndicate,
+/obj/item/cigarette/syndicate,
/obj/item/storage/fancy/cigarettes/cigpack_syndicate{
pixel_y = 7
},
@@ -622,7 +622,7 @@
/area/ruin/space)
"yd" = (
/obj/structure/table/reinforced/plastitaniumglass,
-/obj/item/clothing/mask/cigarette/syndicate,
+/obj/item/cigarette/syndicate,
/obj/effect/spawner/random/entertainment/lighter,
/turf/open/floor/mineral/plastitanium/airless,
/area/ruin/space)
@@ -701,7 +701,7 @@
/area/ruin/space)
"Cz" = (
/obj/structure/table/reinforced/plastitaniumglass,
-/obj/item/clothing/mask/cigarette/syndicate,
+/obj/item/cigarette/syndicate,
/obj/effect/spawner/random/entertainment/lighter,
/turf/open/floor/iron/dark/airless,
/area/ruin/space)
diff --git a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm
index b2b8fd17fbed6..327b0f558ca37 100644
--- a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm
+++ b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm
@@ -564,7 +564,7 @@
/obj/item/clothing/shoes/cowboy,
/obj/item/clothing/under/costume/dutch,
/obj/item/clothing/suit/costume/poncho,
-/obj/item/clothing/mask/cigarette/cigar,
+/obj/item/cigarette/cigar,
/obj/structure/window/reinforced/spawner/directional/south,
/obj/structure/window/reinforced/spawner/directional/east,
/obj/structure/window/reinforced/spawner/directional/west,
diff --git a/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm b/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm
index 3837f2453845d..d36e65ddc2269 100644
--- a/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm
+++ b/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm
@@ -437,7 +437,7 @@
/obj/item/storage/box/lights/tubes,
/obj/item/clothing/glasses/night,
/obj/item/stock_parts/capacitor/super,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/effect/turf_decal/trimline/brown/filled/line{
dir = 6
},
diff --git a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm
index 4be262c6fd052..dce2db8cffc9f 100644
--- a/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm
+++ b/_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm
@@ -15,7 +15,7 @@
/area/ruin/space/has_grav/turretedoutpost)
"ae" = (
/obj/structure/table/reinforced,
-/obj/item/stock_parts/cell/hyper,
+/obj/item/stock_parts/power_store/cell/hyper,
/turf/open/floor/iron,
/area/ruin/space/has_grav/turretedoutpost)
"af" = (
diff --git a/_maps/RandomRuins/SpaceRuins/waystation.dmm b/_maps/RandomRuins/SpaceRuins/waystation.dmm
index e5262d324259e..baa77a700d20e 100644
--- a/_maps/RandomRuins/SpaceRuins/waystation.dmm
+++ b/_maps/RandomRuins/SpaceRuins/waystation.dmm
@@ -1505,7 +1505,7 @@
/area/ruin/space/has_grav/waystation/cargobay)
"zd" = (
/obj/structure/table,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/machinery/cell_charger,
/turf/open/floor/plating,
/area/ruin/space/has_grav/waystation/power)
diff --git a/_maps/RandomZLevels/SnowCabin.dmm b/_maps/RandomZLevels/SnowCabin.dmm
index 2451c55731215..ff38749b2060d 100644
--- a/_maps/RandomZLevels/SnowCabin.dmm
+++ b/_maps/RandomZLevels/SnowCabin.dmm
@@ -2052,7 +2052,7 @@
/turf/open/floor/wood/freezing,
/area/awaymission/cabin/lumbermill)
"jV" = (
-/mob/living/simple_animal/bot/firebot,
+/mob/living/basic/bot/firebot,
/turf/open/floor/wood/freezing,
/area/awaymission/cabin/lumbermill)
"jW" = (
diff --git a/_maps/RandomZLevels/TheBeach.dmm b/_maps/RandomZLevels/TheBeach.dmm
index 22dab6907a688..c18eba4fbc266 100644
--- a/_maps/RandomZLevels/TheBeach.dmm
+++ b/_maps/RandomZLevels/TheBeach.dmm
@@ -346,7 +346,7 @@
/area/awaymission/beach)
"eT" = (
/obj/structure/table/wood,
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_y = 16;
pixel_x = -2
},
@@ -1919,7 +1919,7 @@
pixel_y = 12;
pixel_x = 3
},
-/obj/item/stock_parts/cell/emproof{
+/obj/item/stock_parts/power_store/cell/emproof{
pixel_x = -4;
pixel_y = 6
},
diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm
index e54d1b87cbaf3..c64aa99d1aab6 100644
--- a/_maps/RandomZLevels/caves.dmm
+++ b/_maps/RandomZLevels/caves.dmm
@@ -505,7 +505,7 @@
"db" = (
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/crap,
+/obj/item/stock_parts/power_store/cell/crap,
/turf/open/floor/iron{
initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
},
diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm
index 7835def0dc251..9473a5e3ba09a 100644
--- a/_maps/RandomZLevels/moonoutpost19.dmm
+++ b/_maps/RandomZLevels/moonoutpost19.dmm
@@ -79,6 +79,16 @@
dir = 5
},
/area/awaymission/moonoutpost19/research)
+"aq" = (
+/obj/effect/turf_decal/siding/purple,
+/obj/effect/turf_decal/tile/dark/opposingcorners{
+ dir = 1
+ },
+/obj/machinery/computer/security/telescreen/moon_outpost/xenobio/directional/south,
+/turf/open/floor/iron/cafeteria{
+ dir = 5
+ },
+/area/awaymission/moonoutpost19/research)
"as" = (
/obj/item/stack/rods,
/obj/structure/cable,
@@ -305,6 +315,14 @@
/obj/effect/turf_decal/stripes/red/end,
/turf/open/floor/iron/half,
/area/awaymission/moonoutpost19/syndicate)
+"cp" = (
+/obj/structure/table/reinforced,
+/obj/structure/alien/weeds,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/awaymission/moonoutpost19/research)
"cq" = (
/obj/machinery/vending/medical{
req_access = "201"
@@ -630,12 +648,16 @@
/obj/machinery/vending/coffee,
/turf/open/floor/iron/dark,
/area/awaymission/moonoutpost19/research)
-"ex" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w{
- dir = 4
+"ez" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/radio/off{
+ pixel_x = 8;
+ pixel_y = 17
},
-/obj/structure/cable,
-/turf/open/floor/iron/white,
+/turf/open/floor/plating,
/area/awaymission/moonoutpost19/research)
"eA" = (
/obj/structure/flora/lunar_plant,
@@ -3042,13 +3064,6 @@
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
},
/area/awaymission/moonoutpost19/mines)
-"ty" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/siding/thinplating_new/light,
-/turf/open/floor/iron,
-/area/awaymission/moonoutpost19/arrivals)
"tA" = (
/obj/structure/urinal/directional/north,
/obj/machinery/duct,
@@ -3247,6 +3262,13 @@
/obj/item/clothing/under/misc/assistantformal,
/turf/open/floor/carpet/red,
/area/awaymission/moonoutpost19/arrivals)
+"uN" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/siding/thinplating_new/light,
+/turf/open/floor/iron,
+/area/awaymission/moonoutpost19/arrivals)
"uR" = (
/obj/structure/table,
/obj/item/storage/toolbox/mechanical{
@@ -3469,6 +3491,13 @@
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
},
/area/awaymission/moonoutpost19/mines)
+"wc" = (
+/obj/structure/table,
+/obj/item/stock_parts/power_store/cell/crap/empty{
+ pixel_x = -4
+ },
+/turf/open/floor/pod/dark,
+/area/awaymission/moonoutpost19/tent)
"wh" = (
/obj/structure/alien/weeds/node,
/obj/structure/alien/resin/wall,
@@ -3544,24 +3573,6 @@
/obj/item/stack/spacecash/c50,
/turf/open/floor/wood,
/area/awaymission/moonoutpost19/syndicate)
-"wU" = (
-/obj/structure/table/reinforced,
-/obj/structure/window/reinforced/spawner/directional/north,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for monitoring the research division and the labs within.";
- name = "research monitor";
- network = list("mo19x","mo19r")
- },
-/obj/effect/turf_decal/siding/purple/corner{
- dir = 4
- },
-/obj/effect/turf_decal/tile/dark/opposingcorners{
- dir = 1
- },
-/turf/open/floor/iron/cafeteria{
- dir = 5
- },
-/area/awaymission/moonoutpost19/research)
"wV" = (
/obj/structure/closet/emcloset,
/obj/item/shovel,
@@ -4061,20 +4072,6 @@
},
/turf/open/floor/iron,
/area/awaymission/moonoutpost19/arrivals)
-"AI" = (
-/obj/structure/table/reinforced,
-/obj/structure/alien/weeds,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching the contents of the xenobiology containment pen.";
- dir = 8;
- name = "xenobiology monitor";
- network = list("mo19x")
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/awaymission/moonoutpost19/research)
"AO" = (
/obj/structure/alien/weeds,
/obj/effect/decal/cleanable/blood/gibs,
@@ -4152,6 +4149,14 @@
/obj/machinery/duct,
/turf/open/floor/iron,
/area/awaymission/moonoutpost19/arrivals)
+"Bg" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/machinery/computer/security/telescreen/moon_outpost/xenobio/directional/east,
+/turf/open/floor/iron/white,
+/area/awaymission/moonoutpost19/research)
"Bk" = (
/obj/machinery/door/airlock/maintenance,
/obj/machinery/duct,
@@ -5424,18 +5429,6 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/awaymission/moonoutpost19/research)
-"JO" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/machinery/light/small/directional/west,
-/obj/item/stock_parts/cell/high,
-/obj/item/paper/fluff/awaymissions/moonoutpost19/engineering,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/awaymission/moonoutpost19/syndicate)
"JQ" = (
/turf/open/floor/iron{
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
@@ -5459,6 +5452,18 @@
},
/turf/open/floor/iron/white,
/area/awaymission/moonoutpost19/research)
+"JZ" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/machinery/light/small/directional/west,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/paper/fluff/awaymissions/moonoutpost19/engineering,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/awaymission/moonoutpost19/syndicate)
"Kb" = (
/obj/structure/alien/weeds,
/obj/structure/bed/nest,
@@ -5724,17 +5729,6 @@
dir = 5
},
/area/awaymission/moonoutpost19/arrivals)
-"MD" = (
-/obj/structure/table,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/item/radio/off{
- pixel_x = 8;
- pixel_y = 17
- },
-/turf/open/floor/plating,
-/area/awaymission/moonoutpost19/research)
"MF" = (
/obj/structure/flora/rock/style_random{
pixel_y = -2
@@ -5773,13 +5767,6 @@
},
/turf/open/floor/iron,
/area/awaymission/moonoutpost19/arrivals)
-"MW" = (
-/obj/structure/table,
-/obj/item/stock_parts/cell/crap/empty{
- pixel_x = -4
- },
-/turf/open/floor/pod/dark,
-/area/awaymission/moonoutpost19/tent)
"Nf" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -5963,6 +5950,19 @@
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
},
/area/awaymission/moonoutpost19/syndicate)
+"NY" = (
+/obj/structure/table/reinforced,
+/obj/structure/window/reinforced/spawner/directional/north,
+/obj/effect/turf_decal/siding/purple/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/dark/opposingcorners{
+ dir = 1
+ },
+/turf/open/floor/iron/cafeteria{
+ dir = 5
+ },
+/area/awaymission/moonoutpost19/research)
"Oa" = (
/obj/structure/sink{
dir = 4;
@@ -6029,7 +6029,7 @@
/obj/structure/table/wood,
/obj/item/lighter,
/obj/machinery/newscaster/directional/east,
-/obj/item/clothing/mask/cigarette/cigar,
+/obj/item/cigarette/cigar,
/turf/open/floor/carpet/orange,
/area/awaymission/moonoutpost19/arrivals)
"Ov" = (
@@ -6523,17 +6523,6 @@
},
/turf/open/floor/iron/dark,
/area/awaymission/moonoutpost19/arrivals)
-"Ro" = (
-/obj/structure/table,
-/obj/item/stock_parts/cell/crap/empty,
-/obj/item/stock_parts/cell/crap/empty,
-/obj/item/stock_parts/cell/crap/empty{
- pixel_x = -16;
- pixel_y = 4
- },
-/obj/machinery/cell_charger,
-/turf/open/floor/pod/dark,
-/area/awaymission/moonoutpost19/tent)
"Rq" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -7205,6 +7194,17 @@
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
},
/area/awaymission/moonoutpost19/mines)
+"VY" = (
+/obj/structure/table,
+/obj/item/stock_parts/power_store/cell/crap/empty,
+/obj/item/stock_parts/power_store/cell/crap/empty,
+/obj/item/stock_parts/power_store/cell/crap/empty{
+ pixel_x = -16;
+ pixel_y = 4
+ },
+/obj/machinery/cell_charger,
+/turf/open/floor/pod/dark,
+/area/awaymission/moonoutpost19/tent)
"Wg" = (
/obj/structure/flora/rock/style_random{
pixel_y = -2
@@ -7709,15 +7709,6 @@
initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"
},
/area/awaymission/moonoutpost19/mines)
-"Zw" = (
-/obj/effect/turf_decal/siding/purple,
-/obj/effect/turf_decal/tile/dark/opposingcorners{
- dir = 1
- },
-/turf/open/floor/iron/cafeteria{
- dir = 5
- },
-/area/awaymission/moonoutpost19/research)
"Zx" = (
/obj/structure/chair/office,
/turf/open/floor/iron,
@@ -32905,7 +32896,7 @@ uZ
Nj
nk
nk
-MD
+ez
eJ
eI
eJ
@@ -33942,7 +33933,7 @@ Nt
ap
aK
on
-Zw
+aq
dZ
bn
lG
@@ -34454,7 +34445,7 @@ dZ
rH
SX
Sd
-wU
+NY
ap
Ts
ea
@@ -37487,7 +37478,7 @@ xm
Ff
My
IP
-MW
+wc
ZY
CP
qY
@@ -37744,7 +37735,7 @@ xm
Bz
My
IP
-Ro
+VY
Uw
Qx
vj
@@ -38296,7 +38287,7 @@ My
My
dZ
ei
-ex
+Bg
vU
fl
fC
@@ -38553,7 +38544,7 @@ My
My
ea
ef
-AI
+cp
vx
Gh
qy
@@ -41914,7 +41905,7 @@ hI
qx
RK
bm
-ty
+uN
hJ
Gp
hI
@@ -42817,7 +42808,7 @@ ac
ac
aU
uR
-JO
+JZ
Ew
ZT
aU
diff --git a/_maps/RandomZLevels/museum.dmm b/_maps/RandomZLevels/museum.dmm
index cdea9ba141a13..2937250b1f9ba 100644
--- a/_maps/RandomZLevels/museum.dmm
+++ b/_maps/RandomZLevels/museum.dmm
@@ -4755,7 +4755,7 @@
/obj/structure/lattice/catwalk/mining,
/obj/structure/railing,
/obj/structure/table,
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
icon_state = "cigaron";
lit = 1
},
diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm
index 154522d9c253e..7f862487515fc 100644
--- a/_maps/RandomZLevels/research.dmm
+++ b/_maps/RandomZLevels/research.dmm
@@ -76,8 +76,8 @@
},
/obj/structure/frame/machine,
/obj/item/circuitboard/machine/smes,
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high/empty,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high/empty,
/turf/open/floor/plating,
/area/awaymission/research/interior/engineering)
"aw" = (
@@ -96,12 +96,12 @@
/area/awaymission/research/interior/engineering)
"az" = (
/obj/effect/gibspawner/human,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/turf/open/floor/plating,
/area/awaymission/research/interior/engineering)
"aA" = (
/obj/item/stack/sheet/plasteel,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/turf/open/floor/plating,
/area/awaymission/research/interior/engineering)
"aB" = (
@@ -125,11 +125,11 @@
"aF" = (
/obj/item/stack/rods,
/obj/item/stack/sheet/iron,
-/obj/item/stock_parts/cell/high/empty,
+/obj/item/stock_parts/power_store/cell/high/empty,
/turf/open/floor/plating,
/area/awaymission/research/interior/engineering)
"aG" = (
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/turf/open/floor/plating,
/area/awaymission/research/interior/engineering)
"aH" = (
@@ -161,7 +161,7 @@
/turf/open/floor/mineral/plastitanium/red,
/area/awaymission/research/interior/engineering)
"aM" = (
-/obj/item/stock_parts/cell/high/empty,
+/obj/item/stock_parts/power_store/cell/high/empty,
/turf/open/floor/plating,
/area/awaymission/research/interior/engineering)
"aO" = (
diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm
index 7a15d946e0282..ac13cf870c55d 100644
--- a/_maps/RandomZLevels/snowdin.dmm
+++ b/_maps/RandomZLevels/snowdin.dmm
@@ -445,7 +445,7 @@
},
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/item/storage/toolbox/electrical{
pixel_x = 4;
pixel_y = 8
diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm
index e444510605c3c..d458d3af0f987 100644
--- a/_maps/RandomZLevels/undergroundoutpost45.dmm
+++ b/_maps/RandomZLevels/undergroundoutpost45.dmm
@@ -555,6 +555,19 @@
},
/turf/open/floor/carpet,
/area/awaymission/undergroundoutpost45/central)
+"cM" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stack/cable_coil{
+ pixel_x = 3;
+ pixel_y = -7
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/awaymission/undergroundoutpost45/gateway)
"cS" = (
/obj/machinery/portable_atmospherics/scrubber,
/obj/structure/window/spawner/directional/west,
@@ -2158,14 +2171,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/white,
/area/awaymission/undergroundoutpost45/gateway)
-"iY" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/light/small/directional/west,
-/turf/open/floor/iron/white,
-/area/awaymission/undergroundoutpost45/research)
"iZ" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
@@ -2622,6 +2627,13 @@
},
/turf/open/floor/iron/white,
/area/awaymission/undergroundoutpost45/gateway)
+"kN" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/tile/yellow/anticorner/contrasted,
+/turf/open/floor/iron,
+/area/awaymission/undergroundoutpost45/engineering)
"kO" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -2982,6 +2994,15 @@
/obj/effect/turf_decal/tile/bar/opposingcorners,
/turf/open/floor/iron,
/area/awaymission/undergroundoutpost45/crew_quarters)
+"lV" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/obj/machinery/computer/security/telescreen/underground_outpost/research/directional/south,
+/turf/open/floor/iron/cafeteria{
+ dir = 5
+ },
+/area/awaymission/undergroundoutpost45/research)
"lW" = (
/obj/machinery/door/firedoor,
/obj/structure/disposalpipe/segment,
@@ -2991,16 +3012,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/awaymission/undergroundoutpost45/crew_quarters)
-"lX" = (
-/obj/structure/closet/crate,
-/obj/item/stack/sheet/mineral/plasma{
- amount = 26
- },
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/awaymission/undergroundoutpost45/engineering)
"lY" = (
/obj/machinery/light/small/directional/north,
/obj/machinery/camera/directional/north{
@@ -3016,19 +3027,6 @@
},
/turf/open/floor/plating,
/area/awaymission/undergroundoutpost45/engineering)
-"ma" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/item/stack/cable_coil{
- pixel_x = 3;
- pixel_y = -7
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/awaymission/undergroundoutpost45/gateway)
"mb" = (
/turf/open/floor/iron,
/area/awaymission/undergroundoutpost45/gateway)
@@ -3431,36 +3429,12 @@
dir = 5
},
/area/awaymission/undergroundoutpost45/research)
-"no" = (
-/obj/machinery/computer/security{
- dir = 4;
- network = list("uo45")
- },
-/obj/effect/turf_decal/tile/red/half/contrasted{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/awaymission/undergroundoutpost45/research)
"np" = (
/obj/structure/chair/office{
dir = 1
},
/turf/open/floor/iron,
/area/awaymission/undergroundoutpost45/research)
-"nq" = (
-/obj/structure/table,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for monitoring the research division and the labs within.";
- dir = 8;
- name = "research monitor";
- network = list("uo45r")
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/red/half/contrasted{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/awaymission/undergroundoutpost45/research)
"nr" = (
/obj/machinery/light/small/directional/east,
/obj/effect/turf_decal/tile/purple{
@@ -3587,18 +3561,6 @@
dir = 5
},
/area/awaymission/undergroundoutpost45/research)
-"nR" = (
-/obj/structure/table/reinforced,
-/obj/structure/window/reinforced/spawner/directional/north,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for monitoring the research division and the labs within.";
- name = "research monitor";
- network = list("uo45r")
- },
-/turf/open/floor/iron/cafeteria{
- dir = 5
- },
-/area/awaymission/undergroundoutpost45/research)
"nS" = (
/obj/machinery/light/small/directional/east,
/obj/structure/window/reinforced/spawner/directional/north,
@@ -4029,14 +3991,6 @@
dir = 5
},
/area/awaymission/undergroundoutpost45/research)
-"pf" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 8
- },
-/turf/open/floor/iron/cafeteria{
- dir = 5
- },
-/area/awaymission/undergroundoutpost45/research)
"pg" = (
/obj/structure/secure_safe{
pixel_x = 5;
@@ -4899,6 +4853,17 @@
},
/turf/open/floor/iron,
/area/awaymission/undergroundoutpost45/engineering)
+"sc" = (
+/obj/machinery/computer/security{
+ dir = 4;
+ network = list("uo45")
+ },
+/obj/effect/turf_decal/tile/red/half/contrasted{
+ dir = 8
+ },
+/obj/machinery/computer/security/telescreen/underground_outpost/research/directional/west,
+/turf/open/floor/iron,
+/area/awaymission/undergroundoutpost45/research)
"sd" = (
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 8
@@ -5954,13 +5919,6 @@
dir = 8
},
/area/awaymission/undergroundoutpost45/engineering)
-"vW" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/tile/yellow/anticorner/contrasted,
-/turf/open/floor/iron,
-/area/awaymission/undergroundoutpost45/engineering)
"vY" = (
/obj/structure/closet/emcloset,
/obj/item/clothing/mask/breath,
@@ -5991,6 +5949,16 @@
/obj/item/bedsheet,
/turf/open/floor/carpet,
/area/awaymission/undergroundoutpost45/mining)
+"we" = (
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 26
+ },
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/awaymission/undergroundoutpost45/engineering)
"wf" = (
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/iron{
@@ -6749,6 +6717,14 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron,
/area/awaymission/undergroundoutpost45/engineering)
+"CM" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/iron/white,
+/area/awaymission/undergroundoutpost45/research)
"CT" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -6758,6 +6734,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/awaymission/undergroundoutpost45/engineering)
+"CW" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/red/half/contrasted{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/awaymission/undergroundoutpost45/research)
"De" = (
/obj/machinery/computer/monitor{
name = "primary power monitoring console"
@@ -6893,6 +6877,13 @@
dir = 5
},
/area/awaymission/undergroundoutpost45/crew_quarters)
+"ET" = (
+/obj/structure/table/reinforced,
+/obj/structure/window/reinforced/spawner/directional/north,
+/turf/open/floor/iron/cafeteria{
+ dir = 5
+ },
+/area/awaymission/undergroundoutpost45/research)
"Fd" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/door/airlock/command/glass{
@@ -27483,7 +27474,7 @@ jG
gw
ky
DB
-ma
+cM
mB
gK
ad
@@ -33131,7 +33122,7 @@ gX
hB
ig
ze
-iY
+CM
jr
jO
mU
@@ -34427,7 +34418,7 @@ mP
nn
nQ
oz
-pf
+lV
gy
ql
qT
@@ -34682,7 +34673,7 @@ lL
mj
mP
mP
-nR
+ET
oA
pg
gy
@@ -35452,7 +35443,7 @@ Mg
lM
hH
mR
-no
+sc
RC
oC
ph
@@ -35966,7 +35957,7 @@ kV
lM
hH
mT
-nq
+CW
nV
WG
lu
@@ -48059,7 +48050,7 @@ rr
qb
RF
vy
-vW
+kN
ni
ln
ni
@@ -48813,7 +48804,7 @@ ad
ad
ad
ln
-lX
+we
mz
ln
nK
diff --git a/_maps/deathmatch/arena_station.dmm b/_maps/deathmatch/arena_station.dmm
index c7654810360e1..50089df45e8a0 100644
--- a/_maps/deathmatch/arena_station.dmm
+++ b/_maps/deathmatch/arena_station.dmm
@@ -930,7 +930,7 @@
/area/deathmatch)
"LY" = (
/obj/structure/closet/secure_closet,
-/obj/item/gun/energy/beam_rifle,
+/obj/item/gun/energy/xray,
/turf/open/indestructible/vault,
/area/deathmatch)
"Mc" = (
diff --git a/_maps/deathmatch/meta_brig.dmm b/_maps/deathmatch/meta_brig.dmm
index 208b2c994737d..501e03e6ec632 100644
--- a/_maps/deathmatch/meta_brig.dmm
+++ b/_maps/deathmatch/meta_brig.dmm
@@ -451,12 +451,7 @@
/area/deathmatch)
"hS" = (
/obj/structure/table/wood,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching Prison Wing holding areas.";
- name = "Prison Monitor";
- network = list("prison");
- pixel_y = 30
- },
+/obj/machinery/computer/security/telescreen/prison/directional/north,
/obj/item/flashlight/lamp/green{
pixel_x = 1;
pixel_y = 5
@@ -2880,13 +2875,7 @@
/turf/open/indestructible,
/area/deathmatch)
"PV" = (
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching Prison Wing holding areas.";
- dir = 1;
- name = "Prison Monitor";
- network = list("prison");
- pixel_y = -30
- },
+/obj/machinery/computer/security/telescreen/prison/directional/south,
/obj/structure/cable,
/obj/effect/turf_decal/tile/red{
dir = 8
diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm
index e26e63400333f..2708d4719af1b 100644
--- a/_maps/map_files/Birdshot/birdshot.dmm
+++ b/_maps/map_files/Birdshot/birdshot.dmm
@@ -44,6 +44,12 @@
/obj/structure/window/spawner/directional/west,
/turf/open/floor/iron,
/area/station/hallway/secondary/recreation)
+"aaZ" = (
+/obj/structure/closet/firecloset,
+/obj/effect/turf_decal/tile/blue,
+/obj/item/radio/intercom/directional/south,
+/turf/open/floor/iron/dark/side,
+/area/station/hallway/primary/central/fore)
"abh" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -59,6 +65,10 @@
/obj/machinery/power/tracker,
/turf/open/space/basic,
/area/station/solars/aft)
+"abB" = (
+/obj/structure/disposalpipe/segment,
+/turf/closed/wall/r_wall,
+/area/station/hallway/primary/port)
"abJ" = (
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -143,26 +153,21 @@
},
/turf/open/floor/catwalk_floor,
/area/station/engineering/hallway)
-"aeq" = (
-/obj/structure/flora/bush/flowers_yw/style_random,
-/obj/structure/flora/bush/flowers_br/style_random,
-/obj/structure/flora/bush/leavy/style_random,
-/obj/structure/flora/bush/stalky/style_random,
-/obj/structure/window/spawner/directional/north,
-/obj/structure/window/spawner/directional/south,
-/turf/open/floor/grass,
-/area/station/hallway/secondary/service)
-"aes" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door/poddoor/shutters/preopen{
- dir = 4;
- id = "kitchenshutters";
- name = "Kitchen Shutters"
+"aef" = (
+/obj/structure/flora/bush/flowers_yw/style_3{
+ pixel_x = 5;
+ pixel_y = -5
},
-/obj/item/plate,
-/obj/item/food/sandwich/peanut_butter_jelly,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
+/obj/structure/flora/bush/flowers_br/style_random{
+ pixel_y = -5;
+ pixel_x = 3
+ },
+/obj/effect/light_emitter/fake_outdoors,
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
+ },
+/turf/open/floor/grass/Airless,
+/area/station/hallway/primary/central/aft)
"aeu" = (
/obj/structure/grille,
/turf/open/floor/plating,
@@ -187,19 +192,6 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron/dark,
/area/station/science/genetics)
-"aeN" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 4
- },
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"aeX" = (
/obj/structure/window/spawner/directional/east,
/obj/item/kirbyplants/random,
@@ -264,7 +256,7 @@
/area/station/medical/virology)
"agp" = (
/obj/structure/table/wood,
-/obj/item/clothing/mask/cigarette/cigar/cohiba,
+/obj/item/cigarette/cigar/cohiba,
/turf/open/floor/carpet,
/area/station/commons/dorms)
"agy" = (
@@ -275,19 +267,6 @@
/obj/machinery/light/cold/directional/south,
/turf/open/floor/plating,
/area/station/science/ordnance/storage)
-"agC" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/structure/sign/departments/vault/directional/south,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
-"agF" = (
-/obj/effect/turf_decal/siding/wood,
-/obj/structure/chair/sofa/bamboo/right{
- dir = 1
- },
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"agI" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{
@@ -314,6 +293,39 @@
/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron/dark/small,
/area/station/engineering/storage_shared)
+"agY" = (
+/obj/machinery/door/airlock/engineering{
+ name = "Main Engineering"
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/any/engineering/construction,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/catwalk_floor,
+/area/station/engineering/break_room)
+"ahf" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/structure/flora/bush/flowers_pp/style_random,
+/turf/open/floor/grass,
+/area/station/service/chapel)
+"ahl" = (
+/obj/structure/flora/tree/jungle/style_5,
+/turf/open/floor/grass,
+/area/station/service/chapel)
+"ahr" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/supply/general,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"ahu" = (
/obj/effect/turf_decal/siding/blue{
dir = 1
@@ -353,15 +365,6 @@
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/iron/showroomfloor,
/area/station/commons/toilet/auxiliary)
-"aiE" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"aiK" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -378,6 +381,24 @@
},
/turf/open/floor/engine/airless,
/area/station/engineering/atmos)
+"aiQ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/light/small/directional/west,
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 8
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
+"ajQ" = (
+/obj/effect/spawner/random/maintenance,
+/obj/effect/spawner/random/structure/closet_maintenance,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"ako" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
@@ -458,16 +479,6 @@
/obj/item/pen,
/turf/open/floor/carpet/lone,
/area/station/service/chapel/office)
-"alh" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral,
-/obj/machinery/navbeacon{
- codes_txt = "patrol;next_patrol=1.5-PNexus-Vault";
- location = "1.0-Security-PNexus"
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"all" = (
/obj/structure/table/greyscale,
/obj/item/folder/yellow{
@@ -483,6 +494,10 @@
},
/turf/open/floor/iron/grimy,
/area/station/engineering/main)
+"als" = (
+/obj/machinery/holopad,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"alF" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -499,6 +514,18 @@
/obj/structure/cable,
/turf/open/floor/iron/small,
/area/station/maintenance/solars/starboard/aft)
+"amh" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"amE" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -523,14 +550,17 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/engineering/atmos/pumproom)
-"amI" = (
-/obj/effect/turf_decal/trimline/neutral/line{
+"amK" = (
+/obj/machinery/icecream_vat,
+/obj/effect/turf_decal/weather/snow/corner{
dir = 1
},
-/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/weather/snow,
+/obj/machinery/light/small/directional/north,
+/obj/machinery/power/apc/auto_name/directional/north,
/obj/structure/cable,
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
+/turf/open/floor/iron/freezer,
+/area/station/service/kitchen/coldroom)
"amV" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing,
@@ -546,6 +576,25 @@
},
/turf/open/floor/wood/tile,
/area/station/command/bridge)
+"ani" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
+"anD" = (
+/mob/living/basic/goat/pete,
+/obj/effect/turf_decal/weather/snow,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/weather/snow/corner,
+/turf/open/floor/iron/freezer,
+/area/station/service/kitchen/coldroom)
"anJ" = (
/obj/effect/turf_decal/tile/yellow/half/contrasted{
dir = 8
@@ -554,6 +603,10 @@
/obj/machinery/chem_heater/withbuffer,
/turf/open/floor/iron,
/area/station/medical/chemistry)
+"anX" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/station/ai_monitored/command/nuke_storage)
"aoa" = (
/obj/machinery/telecomms/server/presets/supply,
/turf/open/floor/circuit,
@@ -572,15 +625,6 @@
/obj/structure/steam_vent,
/turf/open/floor/plating,
/area/station/maintenance/starboard/lesser)
-"aoy" = (
-/obj/structure/table/wood,
-/obj/machinery/camera/directional/south{
- c_tag = "Atmospherics - South"
- },
-/obj/item/stack/cable_coil/five,
-/obj/effect/turf_decal/siding/wideplating_new/terracotta,
-/turf/open/floor/wood/tile,
-/area/station/commons/vacant_room/commissary)
"aoz" = (
/obj/structure/closet/secure_closet/captains,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -589,14 +633,6 @@
/obj/item/storage/lockbox/medal,
/turf/open/floor/carpet/executive,
/area/station/command/heads_quarters/captain/private)
-"aoJ" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"aoL" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -643,6 +679,12 @@
/obj/structure/cable,
/turf/open/floor/iron/kitchen/small,
/area/station/security/prison/mess)
+"apq" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"apB" = (
/obj/structure/disposalpipe/junction{
dir = 4
@@ -657,6 +699,15 @@
"apZ" = (
/turf/open/floor/engine/helium,
/area/station/ai_monitored/turret_protected/ai)
+"aqf" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"aqn" = (
/obj/effect/turf_decal/siding/dark{
dir = 4
@@ -757,25 +808,6 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/white,
/area/station/medical/paramedic)
-"asn" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/structure/chair/pew/right{
- dir = 4
- },
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/wood,
-/area/station/service/theater)
-"asN" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/multi_tile/public/glass{
- name = "Diner"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_half,
-/area/station/service/cafeteria)
"asZ" = (
/obj/structure/disposalpipe/trunk,
/obj/structure/disposaloutlet{
@@ -843,15 +875,29 @@
},
/turf/open/floor/plating/airless,
/area/station/science/ordnance/bomb)
-"atM" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
+"atS" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"atW" = (
/turf/open/floor/iron/chapel{
dir = 8
},
/area/station/maintenance/starboard/greater)
+"aub" = (
+/obj/structure/sign/departments/botany/alt1/directional/north,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"auc" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 5
@@ -868,11 +914,25 @@
/obj/machinery/light/small/dim/directional/south,
/turf/open/floor/iron,
/area/station/maintenance/port/aft)
+"aul" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/dark_red{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"aus" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/effect/turf_decal/bot_white,
/turf/open/floor/iron/smooth,
/area/station/commons/storage/tools)
+"auF" = (
+/obj/item/radio/intercom/directional/west,
+/turf/open/floor/glass,
+/area/station/hallway/primary/central/aft)
"auG" = (
/obj/structure/chair{
dir = 1
@@ -888,6 +948,17 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron/smooth,
/area/station/maintenance/solars/starboard/fore)
+"auP" = (
+/obj/effect/spawner/random/entertainment/arcade{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 4
+ },
+/obj/structure/sign/poster/official/random/directional/east,
+/obj/structure/cable,
+/turf/open/floor/eighties/red,
+/area/station/hallway/primary/central/fore)
"auQ" = (
/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{
dir = 4
@@ -911,6 +982,22 @@
"ave" = (
/turf/open/space,
/area/space)
+"avp" = (
+/obj/structure/cable,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
+"avr" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/pdapainter/research,
+/obj/machinery/computer/security/telescreen/rd/directional/north,
+/obj/effect/turf_decal/siding/purple{
+ dir = 5
+ },
+/turf/open/floor/iron/dark,
+/area/station/command/heads_quarters/rd)
"avB" = (
/obj/effect/turf_decal/tile/red{
dir = 4
@@ -942,17 +1029,26 @@
/obj/machinery/airalarm/directional/west,
/turf/open/floor/iron/dark,
/area/station/medical/pharmacy)
+"avY" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"awe" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 8
},
/turf/open/floor/tram,
/area/station/security/tram)
-"aws" = (
-/obj/machinery/hydroponics/constructable,
-/obj/effect/turf_decal/tile/blue/half,
-/turf/open/floor/iron/white/small,
-/area/station/service/hydroponics)
+"aww" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"awE" = (
/obj/structure/disposalpipe/sorting/mail/flip{
dir = 8
@@ -974,14 +1070,6 @@
},
/turf/open/floor/plating/airless,
/area/station/science/ordnance/bomb)
-"awN" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/start/clown,
-/turf/open/floor/stone,
-/area/station/service/theater)
"awO" = (
/turf/open/floor/iron,
/area/station/engineering/storage/tech)
@@ -1004,6 +1092,15 @@
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/misc/sandy_dirt,
/area/station/hallway/secondary/entry)
+"axd" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/sign/directions/vault/directional/south{
+ dir = 8
+ },
+/turf/closed/wall,
+/area/station/hallway/primary/central/aft)
"axj" = (
/obj/item/radio/intercom/directional/east,
/turf/open/floor/iron,
@@ -1189,6 +1286,20 @@
/obj/structure/extinguisher_cabinet/directional/west,
/turf/open/floor/iron,
/area/station/maintenance/hallway/abandoned_command)
+"azV" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/airlock/security/glass{
+ id_tag = "outerbrig";
+ name = "Brig"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/security/entrance,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "sci-entrance"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/textured_half,
+/area/station/security/brig/entrance)
"azZ" = (
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron/white/small,
@@ -1266,6 +1377,16 @@
},
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
+"aBo" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"aBu" = (
/obj/effect/turf_decal/siding/wood{
dir = 5
@@ -1285,16 +1406,14 @@
/obj/structure/cable,
/turf/open/floor/iron/small,
/area/station/medical/morgue)
-"aBy" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+"aBB" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/junction/flip{
- dir = 1
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"aBK" = (
/obj/structure/dresser,
/obj/effect/turf_decal/siding/wood{
@@ -1326,6 +1445,12 @@
},
/turf/open/floor/iron/dark,
/area/station/medical/chemistry)
+"aCz" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/machinery/light/small/directional/south,
+/obj/machinery/status_display/evac/directional/south,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"aCM" = (
/obj/effect/spawner/random/structure/crate_abandoned,
/obj/structure/alien/weeds,
@@ -1357,6 +1482,16 @@
},
/turf/open/floor/plating/airless,
/area/station/science/ordnance/bomb)
+"aDJ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/sign/directions/vault/directional/west{
+ dir = 2
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"aEa" = (
/obj/effect/turf_decal/stripes/white/line,
/turf/open/floor/tram,
@@ -1390,17 +1525,18 @@
dir = 8
},
/area/station/hallway/primary/central/fore)
-"aEl" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+"aEo" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 8
+ },
/obj/effect/turf_decal/stripes/line{
- dir = 1
+ dir = 8
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/effect/landmark/navigate_destination/teleporter,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/lobby)
"aEq" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -1441,6 +1577,13 @@
/obj/machinery/shower/directional/west,
/turf/open/floor/iron/dark/small,
/area/station/maintenance/department/engine)
+"aFb" = (
+/obj/structure/flora/grass/jungle/b/style_3{
+ pixel_y = -6;
+ pixel_x = -5
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"aFh" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -1513,6 +1656,13 @@
/obj/machinery/door/window/right/directional/west,
/turf/open/floor/engine,
/area/station/engineering/supermatter)
+"aGq" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/camera/autoname/directional/west,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"aGv" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -1543,6 +1693,23 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/station/maintenance/central/lesser)
+"aGI" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/trash/can/food/pine_nuts{
+ pixel_x = 16;
+ pixel_y = 6
+ },
+/obj/machinery/cell_charger{
+ pixel_x = -1;
+ pixel_y = 2
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = -1;
+ pixel_y = 1
+ },
+/turf/open/floor/iron/dark,
+/area/station/commons/storage/tools)
"aGU" = (
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron,
@@ -1595,6 +1762,13 @@
},
/turf/open/floor/plating,
/area/station/maintenance/central/lesser)
+"aIi" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Library"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/iron/textured_half,
+/area/station/service/library)
"aIk" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -1736,6 +1910,9 @@
/obj/machinery/light/cold/directional/south,
/turf/open/floor/iron/dark/small,
/area/station/ai_monitored/security/armory)
+"aLm" = (
+/turf/closed/wall/rust,
+/area/station/cargo/drone_bay)
"aLr" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -1765,6 +1942,23 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
+"aLB" = (
+/obj/structure/window/reinforced/spawner/directional/south,
+/obj/machinery/camera/autoname/directional/north,
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 5
+ },
+/obj/machinery/airalarm/directional/east,
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
+"aLS" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/carpet/lone,
+/area/station/service/chapel/office)
"aLU" = (
/obj/structure/chair{
dir = 4
@@ -1792,6 +1986,13 @@
/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible,
/turf/open/floor/plating,
/area/station/science/ordnance/testlab)
+"aMZ" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
+ },
+/obj/structure/table/wood,
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"aNc" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing/corner{
@@ -1799,6 +2000,16 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"aNj" = (
+/obj/machinery/door/airlock/public{
+ name = "Arcade"
+ },
+/obj/effect/turf_decal/siding/thinplating,
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable,
+/turf/open/floor/iron/textured_half,
+/area/station/hallway/primary/central/fore)
"aNk" = (
/obj/machinery/suit_storage_unit/security,
/turf/open/floor/iron/small,
@@ -1858,6 +2069,27 @@
/obj/machinery/portable_atmospherics/canister,
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
+"aOh" = (
+/obj/machinery/status_display/ai/directional/south,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/item/kirbyplants/random,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron/white/side,
+/area/station/hallway/primary/central/aft)
+"aOt" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/light/warm/dim,
+/obj/structure/extinguisher_cabinet/directional/south,
+/obj/machinery/camera/autoname/directional/south,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"aOz" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -1887,12 +2119,6 @@
},
/turf/open/floor/iron/dark,
/area/station/medical/medbay/aft)
-"aPj" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 1
- },
-/turf/open/floor/iron/smooth,
-/area/station/cargo/drone_bay)
"aPx" = (
/obj/structure/chair{
dir = 1
@@ -1926,6 +2152,13 @@
},
/turf/open/floor/plating/airless,
/area/station/science/ordnance/bomb)
+"aPK" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"aPM" = (
/obj/structure/chair/sofa/bench/right,
/obj/machinery/firealarm/directional/north,
@@ -1943,6 +2176,17 @@
/obj/machinery/holopad,
/turf/open/floor/iron/smooth_large,
/area/station/science/robotics/mechbay)
+"aQc" = (
+/obj/structure/flora/bush/flowers_br/style_random,
+/obj/machinery/status_display/evac/directional/north,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"aQf" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -2024,6 +2268,14 @@
/obj/effect/turf_decal/trimline/neutral/end,
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
+"aRS" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/computer/security/telescreen/turbine/directional/south,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/turf/open/floor/iron/smooth,
+/area/station/maintenance/disposal/incinerator)
"aRT" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/newscaster/directional/west,
@@ -2058,18 +2310,23 @@
/obj/structure/toilet{
dir = 4
},
+/obj/machinery/light/small/directional/west,
+/obj/structure/sign/poster/official/random/directional/west,
/obj/machinery/button/door/directional/north{
+ id = "Toilet1";
+ specialfunctions = 4;
name = "Lock Control";
- id = "Toilet1"
+ normaldoorcontrol = 1
},
-/obj/machinery/light/small/directional/west,
-/obj/structure/sign/poster/official/random/directional/west,
/turf/open/floor/iron/white/small,
/area/station/commons/toilet/restrooms)
"aTc" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/maintenance/department/medical/central)
+"aTg" = (
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"aTn" = (
/obj/effect/spawner/random/structure/crate,
/obj/effect/spawner/random/maintenance,
@@ -2085,12 +2342,6 @@
/obj/item/radio/intercom/directional/south,
/turf/open/floor/iron/dark,
/area/station/security/office)
-"aTr" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
"aTx" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -2100,6 +2351,15 @@
},
/turf/open/floor/plating/airless,
/area/station/science/ordnance/bomb)
+"aTz" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"aTG" = (
/obj/structure/table/reinforced,
/obj/machinery/requests_console/directional/east{
@@ -2144,6 +2404,13 @@
dir = 1
},
/area/station/engineering/supermatter/room)
+"aVA" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/stone,
+/area/station/service/bar)
"aVF" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -2190,6 +2457,13 @@
"aWc" = (
/turf/open/floor/iron/small,
/area/station/security/tram)
+"aWf" = (
+/obj/machinery/camera/autoname/directional/north,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"aWi" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -2202,18 +2476,14 @@
/obj/effect/mapping_helpers/airlock/access/all/security/general,
/turf/open/floor/iron/textured_half,
/area/station/security/execution/transfer)
+"aWr" = (
+/obj/structure/flora/tree/jungle/small,
+/turf/open/misc/dirt/jungle,
+/area/station/service/chapel)
"aWt" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/security/prison/garden)
-"aWw" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/structure/flora/bush/sunny/style_random,
-/obj/machinery/light/small/directional/west,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"aWx" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/effect/turf_decal/stripes/corner{
@@ -2242,21 +2512,18 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark/small,
/area/station/engineering/supermatter/room)
-"aXg" = (
-/obj/structure/cable,
-/obj/structure/table/reinforced,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/status_display/ai/directional/north,
-/obj/machinery/camera/autoname/directional/north,
-/turf/open/floor/iron,
-/area/station/engineering/storage/tech)
"aXy" = (
/obj/effect/turf_decal/siding/wideplating{
dir = 1
},
/turf/open/floor/iron/smooth,
/area/station/engineering/atmos/office)
+"aXC" = (
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/closed/wall,
+/area/station/hallway/primary/central/fore)
"aXI" = (
/turf/closed/wall/r_wall,
/area/station/science/lobby)
@@ -2266,6 +2533,16 @@
/obj/item/canvas/twentythree_twentythree,
/turf/open/floor/iron,
/area/station/commons/storage/art)
+"aYj" = (
+/obj/machinery/door/airlock{
+ name = "Kitchen"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/service/kitchen,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/station/service/bar/backroom)
"aYp" = (
/obj/structure/chair,
/obj/effect/turf_decal/stripes/line{
@@ -2305,6 +2582,11 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
+"aYU" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/structure/table/wood,
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"aYY" = (
/obj/structure/flora/bush/flowers_yw/style_random,
/turf/open/misc/sandy_dirt,
@@ -2319,6 +2601,12 @@
},
/turf/open/floor/plating/rust,
/area/station/engineering/supermatter/room)
+"aZh" = (
+/obj/machinery/modular_computer/preset/curator{
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/station/service/library)
"aZu" = (
/obj/machinery/power/emitter{
dir = 4
@@ -2376,6 +2664,22 @@
/obj/structure/alien/weeds,
/turf/open/misc/asteroid,
/area/station/maintenance/starboard/greater)
+"baJ" = (
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/item/radio/intercom/directional/east,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
+"baO" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/effect/spawner/random/entertainment/arcade{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"baP" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -2386,6 +2690,15 @@
/obj/machinery/camera/autoname/directional/north,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/central)
+"baW" = (
+/obj/structure/chair/stool/directional/north,
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/machinery/camera/autoname/directional/west,
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/stone,
+/area/station/service/bar)
"bba" = (
/obj/effect/turf_decal/siding/blue{
dir = 8
@@ -2441,6 +2754,13 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/white/small,
/area/station/medical/medbay/lobby)
+"bcC" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"bcK" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -2506,6 +2826,13 @@
"beg" = (
/turf/closed/wall/r_wall,
/area/station/engineering/hallway)
+"bej" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"bey" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 4
@@ -2513,20 +2840,20 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
-"beH" = (
-/obj/machinery/bookbinder,
-/obj/structure/extinguisher_cabinet/directional/south,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"beK" = (
/turf/open/floor/iron/smooth,
/area/station/security/evidence)
-"beR" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/effect/spawner/random/entertainment/arcade,
-/obj/effect/decal/cleanable/cobweb/cobweb2,
+"beN" = (
+/obj/effect/landmark/start/hangover,
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
+/area/station/hallway/primary/port)
"bfe" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/camera/autoname/directional/west,
@@ -2540,19 +2867,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark/herringbone,
/area/station/service/abandoned_gambling_den/gaming)
-"bfI" = (
-/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/brown/full,
-/obj/machinery/chem_dispenser/drinks/beer{
- dir = 1
- },
-/obj/machinery/requests_console/directional/south{
- department = "Bar";
- name = "Bar Requests Console"
- },
-/obj/effect/mapping_helpers/requests_console/supplies,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"bgg" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/table,
@@ -2584,6 +2898,18 @@
},
/turf/open/floor/iron/dark/small,
/area/station/engineering/lobby)
+"bgx" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/door/airlock/vault{
+ name = "Vault"
+ },
+/obj/effect/mapping_helpers/airlock/locked,
+/obj/effect/mapping_helpers/airlock/access/all/supply/vault,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/firedoor,
+/turf/open/floor/iron/dark/herringbone,
+/area/station/ai_monitored/command/nuke_storage)
"bgy" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
@@ -2612,11 +2938,6 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
-"bgK" = (
-/obj/structure/sink/kitchen/directional/east,
-/obj/machinery/light_switch/directional/west,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"bgQ" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
@@ -2649,6 +2970,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/cafeteria,
/area/station/security/prison/mess)
+"bie" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/light/small/directional/west,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/status_display/ai/directional/west,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"biB" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron/dark/smooth_large,
@@ -2674,6 +3005,21 @@
/obj/structure/cable/multilayer,
/turf/open/floor/plating,
/area/station/science/xenobiology)
+"bje" = (
+/obj/structure/chair/sofa/bench{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron/white/side,
+/area/station/hallway/primary/central/aft)
+"bjh" = (
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/wood,
+/area/station/cargo/boutique)
"bji" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -2700,15 +3046,6 @@
/obj/structure/marker_beacon/burgundy,
/turf/open/space/basic,
/area/space/nearstation)
-"bjV" = (
-/obj/structure/chair/plastic{
- dir = 8
- },
-/obj/effect/landmark/start/hangover,
-/obj/machinery/airalarm/directional/north,
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
"bjZ" = (
/turf/open/floor/tram,
/area/station/security/tram)
@@ -2808,19 +3145,29 @@
/obj/effect/spawner/random/engineering/flashlight,
/turf/open/floor/iron,
/area/station/cargo/miningoffice)
-"blq" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/landmark/start/hangover,
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"bly" = (
/obj/structure/closet/crate/miningcar,
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
+"blB" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/siding/wood/end{
+ dir = 1
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
+"blC" = (
+/obj/effect/spawner/random/entertainment/arcade{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 10
+ },
+/obj/structure/sign/poster/official/random/directional/south,
+/turf/open/floor/eighties/red,
+/area/station/hallway/primary/central/fore)
"blJ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -2872,13 +3219,6 @@
/mob/living/basic/bot/medbot/autopatrol,
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
-"bmM" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/steam_vent,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"bmN" = (
/obj/structure/railing{
dir = 4
@@ -2898,6 +3238,27 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/tram,
/area/station/security/tram)
+"bmY" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
+"bnn" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/fore)
"bno" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -2936,6 +3297,23 @@
/obj/machinery/suit_storage_unit/cmo,
/turf/open/floor/wood/parquet,
/area/station/command/heads_quarters/cmo)
+"bnQ" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/rock/pile/jungle/style_3,
+/turf/open/floor/grass,
+/area/station/service/chapel)
+"bnU" = (
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/aft)
"bnV" = (
/obj/machinery/airalarm/directional/east,
/obj/effect/turf_decal/tile/red/half/contrasted{
@@ -3155,10 +3533,21 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"brj" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/airalarm/directional/north,
+/turf/open/floor/iron/dark/small,
+/area/station/service/chapel/storage)
"bro" = (
/obj/structure/frame/machine,
/turf/open/floor/tram,
/area/station/security/tram)
+"brw" = (
+/obj/structure/chair{
+ pixel_y = -2
+ },
+/turf/open/floor/iron/dark/small,
+/area/station/maintenance/central/lesser)
"bry" = (
/obj/structure/table,
/obj/item/storage/toolbox/mechanical{
@@ -3282,6 +3671,17 @@
},
/turf/open/floor/wood,
/area/station/engineering/main)
+"btY" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/machinery/holopad,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"bua" = (
/obj/effect/turf_decal/siding/wood{
dir = 6
@@ -3289,6 +3689,33 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/wood,
/area/station/service/abandoned_gambling_den)
+"buc" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/chair/stool/bamboo,
+/turf/open/floor/carpet/lone,
+/area/station/service/chapel/office)
+"buf" = (
+/obj/effect/turf_decal/tile/dark_red/half/contrasted{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/security)
+"buv" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"buA" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -3307,6 +3734,17 @@
/obj/machinery/bluespace_vendor/directional/south,
/turf/open/floor/iron,
/area/station/commons/fitness/locker_room)
+"buU" = (
+/obj/structure/table,
+/obj/item/stack/sheet/iron/five,
+/obj/item/stack/cable_coil/five,
+/obj/effect/turf_decal/tile/brown/opposingcorners{
+ dir = 1
+ },
+/obj/item/radio/intercom/directional/east,
+/obj/machinery/light_switch/directional/south,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"buV" = (
/obj/effect/turf_decal/tile/green/half/contrasted{
dir = 4
@@ -3364,9 +3802,20 @@
/obj/structure/rack,
/obj/item/weldingtool/mini,
/obj/item/tank/internals/emergency_oxygen/empty,
-/obj/item/clothing/mask/cigarette/rollie,
+/obj/item/cigarette/rollie,
/turf/open/floor/iron/dark/smooth_large,
/area/station/maintenance/central/lesser)
+"bxl" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/snow,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/freezer,
+/area/station/service/kitchen/coldroom)
"bxs" = (
/obj/structure/railing{
dir = 1
@@ -3389,13 +3838,6 @@
dir = 8
},
/area/station/engineering/main)
-"bxA" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/trimline/neutral/end{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"bxI" = (
/obj/structure/cable,
/obj/structure/disposalpipe/sorting/mail/flip{
@@ -3423,6 +3865,17 @@
/obj/structure/cable,
/turf/open/floor/iron/small,
/area/station/medical/morgue)
+"byv" = (
+/obj/effect/turf_decal/tile/dark_red/half/contrasted{
+ dir = 1
+ },
+/obj/machinery/camera/autoname/directional/south,
+/obj/machinery/firealarm/directional/south,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"byx" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -3456,6 +3909,30 @@
/obj/effect/gibspawner,
/turf/open/floor/wood,
/area/station/maintenance/starboard/greater)
+"bzj" = (
+/obj/machinery/rnd/production/techfab/department/service,
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 4
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
+"bzJ" = (
+/obj/structure/table/wood,
+/obj/machinery/barsign{
+ chosen_sign = "thecavern";
+ icon_state = "thecavern";
+ pixel_y = 32
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 10
+ },
+/obj/machinery/chem_dispenser/drinks/beer,
+/turf/open/floor/iron/dark/textured,
+/area/station/service/bar)
"bzZ" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark,
@@ -3506,6 +3983,14 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos,
/turf/open/floor/catwalk_floor,
/area/station/maintenance/disposal/incinerator)
+"bBh" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/bush/flowers_br/style_3,
+/obj/machinery/firealarm/directional/north,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"bBk" = (
/obj/effect/turf_decal/tile/dark_red,
/obj/structure/cable,
@@ -3531,6 +4016,22 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/engineering/atmospherics_engine)
+"bBN" = (
+/obj/structure/window/spawner/directional/east,
+/obj/structure/table/wood,
+/obj/machinery/cell_charger{
+ pixel_y = 5
+ },
+/obj/item/stock_parts/power_store/cell/crap{
+ pixel_y = 5
+ },
+/obj/item/cigarette/pipe/cobpipe{
+ pixel_x = 1;
+ pixel_y = -2
+ },
+/obj/structure/sign/poster/official/random/directional/north,
+/turf/open/floor/wood/tile,
+/area/station/command/corporate_showroom)
"bBX" = (
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
@@ -3606,12 +4107,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/science/lower)
-"bCX" = (
-/obj/effect/turf_decal/siding/thinplating_new/light{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"bCZ" = (
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 1
@@ -3707,14 +4202,6 @@
/obj/structure/extinguisher_cabinet/directional/north,
/turf/open/floor/iron,
/area/station/science/lower)
-"bED" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/item/kirbyplants/random,
-/obj/machinery/power/apc/auto_name/directional/east,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
"bEN" = (
/obj/structure/chair/sofa/bench/left{
dir = 4
@@ -3731,6 +4218,13 @@
/obj/effect/spawner/structure/window/reinforced/shuttle,
/turf/open/floor/plating,
/area/station/maintenance/department/engine/atmos)
+"bFd" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/chair/wood{
+ dir = 4
+ },
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"bFh" = (
/obj/structure/rack,
/obj/item/binoculars,
@@ -3755,6 +4249,12 @@
/obj/machinery/telecomms/server/presets/science,
/turf/open/floor/circuit,
/area/station/tcommsat/server)
+"bFO" = (
+/obj/effect/spawner/random/trash,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"bFR" = (
/obj/machinery/door/airlock/maintenance{
name = "Maintenance"
@@ -3810,6 +4310,13 @@
},
/turf/open/floor/plating,
/area/station/hallway/secondary/construction)
+"bGq" = (
+/obj/machinery/porta_turret/ai,
+/obj/machinery/computer/security/telescreen/minisat/directional/east,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/status_display/ai/directional/north,
+/turf/open/floor/iron/smooth,
+/area/station/ai_monitored/turret_protected/aisat_interior)
"bGD" = (
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/stripes/red/line{
@@ -3838,6 +4345,28 @@
/obj/machinery/chem_heater/withbuffer,
/turf/open/floor/iron/dark,
/area/station/medical/pharmacy)
+"bHp" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/crate,
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = -11;
+ pixel_y = 2
+ },
+/obj/item/reagent_containers/cup/glass/bottle/vodka,
+/obj/item/food/grown/citrus/orange,
+/obj/item/food/grown/citrus/orange{
+ pixel_x = 4;
+ pixel_y = 2
+ },
+/obj/item/food/grown/grapes/green{
+ pixel_y = -4;
+ pixel_x = -6
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/turf/open/floor/iron/small,
+/area/station/maintenance/department/engine/atmos)
"bHs" = (
/obj/structure/rack,
/obj/effect/spawner/random/maintenance,
@@ -3876,6 +4405,21 @@
/obj/structure/window/spawner/directional/south,
/turf/open/misc/sandy_dirt,
/area/station/science/research)
+"bIJ" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
+"bIN" = (
+/obj/structure/chair/stool/bar/directional/north,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/landmark/start/assistant,
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/wood,
+/area/station/hallway/primary/central/aft)
"bJn" = (
/obj/machinery/light/small/directional/west,
/obj/effect/decal/cleanable/dirt,
@@ -3888,6 +4432,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
+"bJx" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"bJA" = (
/obj/item/kirbyplants/random,
/obj/structure/disposalpipe/segment{
@@ -3920,6 +4473,14 @@
/obj/machinery/incident_display/tram/directional/north,
/turf/open/floor/iron,
/area/station/maintenance/port/aft)
+"bKd" = (
+/obj/structure/window/spawner/directional/west,
+/obj/structure/flora/bush/jungle/a/style_random,
+/obj/structure/flora/bush/flowers_pp/style_random,
+/obj/structure/window/spawner/directional/east,
+/obj/machinery/light/floor,
+/turf/open/floor/grass,
+/area/station/service/hydroponics)
"bKl" = (
/obj/structure/railing/corner{
dir = 8
@@ -3927,6 +4488,11 @@
/obj/effect/turf_decal/siding/wideplating,
/turf/open/floor/wood,
/area/station/engineering/main)
+"bKv" = (
+/obj/structure/flora/tree/jungle/style_4,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"bKz" = (
/obj/structure/disposalpipe/junction{
dir = 4
@@ -3958,21 +4524,9 @@
},
/turf/open/floor/iron/small,
/area/station/security/tram)
-"bKP" = (
+"bKO" = (
/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/neutral/full,
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/item/lighter{
- pixel_x = 2;
- pixel_y = 5
- },
-/obj/item/lighter{
- pixel_x = -8;
- pixel_y = -2
- },
-/turf/open/floor/iron/smooth_large,
+/turf/open/floor/wood/large,
/area/station/service/bar)
"bKU" = (
/obj/item/toy/crayon/spraycan{
@@ -4010,6 +4564,15 @@
},
/turf/open/floor/iron,
/area/station/engineering/storage/tech)
+"bMV" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"bMW" = (
/obj/machinery/iv_drip,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
@@ -4045,6 +4608,15 @@
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
+"bNL" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/light/small/directional/south,
+/obj/machinery/status_display/ai/directional/south,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"bNP" = (
/obj/structure/cable,
/obj/structure/broken_flooring/pile/directional/east,
@@ -4085,36 +4657,11 @@
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
/turf/open/floor/engine,
/area/station/maintenance/disposal/incinerator)
-"bOg" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
+"bOG" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/dark_red/fourcorners,
-/obj/effect/turf_decal/siding/wideplating/dark/corner{
- dir = 1
- },
-/obj/machinery/power/apc/auto_name/directional/north,
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
-"bOl" = (
-/obj/structure/flora/bush/flowers_br/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
-"bOp" = (
-/obj/effect/spawner/random/vending/snackvend,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral/half/contrasted{
- dir = 8
- },
-/obj/machinery/airalarm/directional/east,
-/turf/open/floor/iron/dark/side{
- dir = 4
- },
-/area/station/hallway/primary/central/fore)
+/obj/effect/landmark/start/cook,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"bON" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -4130,13 +4677,6 @@
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/misc/sandy_dirt,
/area/station/hallway/secondary/entry)
-"bOV" = (
-/obj/machinery/newscaster/directional/south,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 4
- },
-/turf/open/floor/wood/parquet,
-/area/station/service/theater)
"bOY" = (
/obj/structure/sign/poster/random/directional/east,
/obj/machinery/conveyor{
@@ -4144,6 +4684,13 @@
},
/turf/open/floor/iron,
/area/station/cargo/miningfoundry)
+"bPv" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 1
+ },
+/turf/closed/wall,
+/area/station/maintenance/central/greater)
"bPU" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/purple/visible,
/turf/open/floor/iron,
@@ -4159,6 +4706,10 @@
/obj/structure/cable,
/turf/open/floor/iron/small,
/area/station/security/office)
+"bQd" = (
+/obj/structure/flora/grass/jungle/b/style_2,
+/turf/open/misc/dirt/jungle,
+/area/station/service/chapel)
"bQi" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/engine,
@@ -4171,6 +4722,17 @@
/obj/machinery/computer/records/security,
/turf/open/floor/wood/tile,
/area/station/command/bridge)
+"bQy" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/dark_red/half/contrasted{
+ dir = 8
+ },
+/obj/machinery/computer/security/telescreen/isolation/directional/east,
+/obj/machinery/photobooth/security,
+/turf/open/floor/iron,
+/area/station/security/execution/transfer)
"bQQ" = (
/obj/effect/turf_decal/tile/neutral,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -4221,6 +4783,12 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/customs/auxiliary)
+"bRK" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 4
+ },
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"bRN" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 1
@@ -4273,6 +4841,16 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"bTo" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/bush/flowers_yw,
+/obj/machinery/airalarm/directional/north,
+/obj/machinery/camera/directional/north,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"bTE" = (
/obj/effect/turf_decal/tile/brown/half,
/obj/effect/turf_decal/tile/brown/half{
@@ -4293,19 +4871,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/commons/fitness/recreation/entertainment)
-"bUf" = (
-/obj/structure/disposalpipe/trunk{
- dir = 8
- },
-/obj/machinery/disposal/bin,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/machinery/light/cold/directional/east,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"bUr" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/tile/blue{
@@ -4314,20 +4879,6 @@
/obj/machinery/light/cold/directional/east,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
-"bUt" = (
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral/half/contrasted{
- dir = 4
- },
-/turf/open/floor/iron/dark/corner{
- dir = 1
- },
-/area/station/hallway/primary/central/fore)
"bUv" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -4362,20 +4913,6 @@
/obj/machinery/light/cold/directional/west,
/turf/open/floor/tram,
/area/station/security/tram)
-"bVv" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/obj/machinery/navbeacon{
- codes_txt = "patrol;next_patrol=1.0-Security-PNexus";
- location = "23.2-Evac-Garden"
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"bVD" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -4388,6 +4925,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white/small,
/area/station/security/execution/education)
+"bVJ" = (
+/obj/effect/turf_decal/plaque{
+ icon_state = "L13";
+ pixel_y = -15
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"bVO" = (
/obj/structure/chair/stool/directional/north,
/obj/effect/turf_decal/siding/red,
@@ -4464,6 +5011,13 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"bWp" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"bWs" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -4476,6 +5030,18 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/maintenance/department/electrical)
+"bXi" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/door/airlock/maintenance{
+ name = "Crematorium"
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/all/security/general,
+/turf/open/floor/iron/textured_half{
+ dir = 8
+ },
+/area/station/security/brig/entrance)
"bXu" = (
/obj/item/kirbyplants/random,
/obj/machinery/firealarm/directional/south,
@@ -4504,6 +5070,13 @@
},
/turf/open/floor/iron/white/small,
/area/station/medical/storage)
+"bXR" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/structure/table/wood,
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"bYe" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -4522,6 +5095,10 @@
},
/turf/open/floor/plating,
/area/station/construction/mining/aux_base)
+"bYh" = (
+/obj/structure/flora/bush/flowers_yw/style_3,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"bYk" = (
/obj/effect/spawner/random/engineering/tracking_beacon,
/turf/open/floor/iron/white/small,
@@ -4535,6 +5112,11 @@
dir = 1
},
/area/station/engineering/hallway)
+"bYE" = (
+/obj/structure/cable,
+/obj/item/radio/intercom/directional/east,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"bYK" = (
/obj/effect/spawner/random/maintenance,
/obj/effect/decal/cleanable/dirt,
@@ -4643,6 +5225,15 @@
},
/turf/open/floor/plating,
/area/station/engineering/supermatter)
+"caD" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/wood,
+/area/station/service/chapel/office)
"caI" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/glass,
@@ -4653,6 +5244,14 @@
/obj/item/radio/intercom/directional/south,
/turf/open/floor/iron,
/area/station/commons/fitness/locker_room)
+"caW" = (
+/obj/structure/sign/warning/no_smoking/circle/directional/north,
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
+/turf/open/floor/wood/large,
+/area/station/service/bar)
"cbg" = (
/obj/structure/table/wood,
/obj/item/storage/fancy/candle_box,
@@ -4735,21 +5334,6 @@
/obj/effect/turf_decal/bot_white,
/turf/open/floor/iron/small,
/area/station/medical/storage)
-"cbT" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/public/glass{
- name = "Services Corridor"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_half{
- dir = 8
- },
-/area/station/hallway/primary/central/aft)
"cbU" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 5
@@ -4786,6 +5370,17 @@
},
/turf/open/space/basic,
/area/station/engineering/atmos/space_catwalk)
+"ccv" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/stone,
+/area/station/service/bar)
"ccx" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -4818,15 +5413,6 @@
/obj/machinery/light/cold/dim/directional/east,
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
-"ccH" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/obj/machinery/light/cold/directional/north,
-/turf/open/floor/iron/dark/side{
- dir = 9
- },
-/area/station/science/ordnance/testlab)
"ccL" = (
/obj/structure/closet/firecloset,
/obj/machinery/light_switch/directional/north,
@@ -4861,7 +5447,7 @@
pixel_y = 9;
pixel_x = 14
},
-/obj/item/clothing/mask/cigarette{
+/obj/item/cigarette{
pixel_y = 2
},
/turf/open/floor/iron/small,
@@ -4883,6 +5469,14 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/smooth,
/area/station/engineering/main)
+"cdB" = (
+/obj/machinery/camera/directional/south,
+/obj/structure/flora/bush/flowers_pp/style_2,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"cdW" = (
/obj/structure/cable,
/turf/open/floor/catwalk_floor/iron_smooth,
@@ -4908,17 +5502,6 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron/dark/small,
/area/station/engineering/supermatter/room)
-"ceE" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/door/airlock{
- name = "Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"ceP" = (
/obj/effect/turf_decal/tile/yellow/opposingcorners,
/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{
@@ -4933,6 +5516,14 @@
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/ce)
+"ceS" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"cfa" = (
/obj/structure/closet/lasertag/red,
/obj/effect/turf_decal/stripes/red/line{
@@ -5016,6 +5607,14 @@
"cgM" = (
/turf/open/misc/asteroid,
/area/station/maintenance/starboard/greater)
+"cgV" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/obj/structure/flora/bush/flowers_yw/style_3,
+/obj/machinery/firealarm/directional/west,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"cgZ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -5038,6 +5637,17 @@
/obj/effect/decal/cleanable/greenglow,
/turf/open/floor/plating,
/area/station/engineering/atmospherics_engine)
+"chh" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/dark_red/half/contrasted{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wideplating/dark/corner{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"chj" = (
/obj/structure/grille,
/turf/closed/wall/mineral/titanium/nodiagonal,
@@ -5064,6 +5674,26 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/smooth,
/area/station/engineering/supermatter/room)
+"chC" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/light/cold/directional/north,
+/obj/machinery/firealarm/directional/north,
+/obj/machinery/camera/directional/north,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
+"chI" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 10
+ },
+/turf/open/floor/eighties,
+/area/station/hallway/primary/central/fore)
"chO" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -5072,11 +5702,6 @@
/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/iron/smooth,
/area/station/maintenance/solars/port/aft)
-"chP" = (
-/obj/machinery/deepfryer,
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"chU" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -5086,13 +5711,19 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron,
/area/station/security)
-"cij" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/effect/spawner/random/entertainment/arcade{
+"cib" = (
+/obj/effect/turf_decal/weather/dirt{
dir = 1
},
-/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
+/mob/living/basic/deer,
+/obj/structure/flora/bush/flowers_pp/style_random,
+/turf/open/floor/grass,
+/area/station/service/chapel)
+"cik" = (
+/obj/structure/bookcase/random,
+/obj/item/radio/intercom/directional/west,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"cip" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/red/opposingcorners{
@@ -5124,6 +5755,11 @@
/obj/machinery/recharger,
/turf/open/floor/iron/white,
/area/station/science/auxlab/firing_range)
+"ciV" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/commons/fitness/locker_room)
"ciW" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/purple/opposingcorners,
@@ -5168,7 +5804,9 @@
},
/obj/machinery/button/door/directional/north{
id = "CabinS";
- name = "Bolt Control"
+ name = "Bolt Control";
+ normaldoorcontrol = 1;
+ specialfunctions = 4
},
/turf/open/floor/carpet/green,
/area/station/commons/dorms)
@@ -5213,6 +5851,16 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/security)
+"ckP" = (
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"ckV" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -5244,13 +5892,6 @@
/obj/structure/chair/stool/directional/north,
/turf/open/floor/iron/kitchen/small,
/area/station/maintenance/aft)
-"clc" = (
-/obj/effect/turf_decal/siding/wood,
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/turf/open/floor/iron/grimy,
-/area/station/service/theater)
"clf" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -5280,6 +5921,18 @@
/obj/structure/cable,
/turf/open/floor/iron/white/small,
/area/station/command/heads_quarters/cmo)
+"clV" = (
+/obj/structure/table,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/clothing/mask/breath{
+ pixel_x = 15;
+ pixel_y = 5
+ },
+/obj/machinery/light/small/directional/south,
+/turf/open/floor/iron/smooth,
+/area/station/command/gateway)
"clX" = (
/obj/structure/railing/corner,
/turf/open/floor/wood,
@@ -5350,6 +6003,14 @@
/obj/structure/barricade/wooden/crude,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
+"cmB" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/obj/machinery/light/floor,
+/obj/structure/table/wood,
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"cmD" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -5359,15 +6020,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
-"cmH" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/wood,
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/iron/grimy,
-/area/station/service/theater)
"cmX" = (
/obj/effect/turf_decal/tile/dark_red{
dir = 8
@@ -5392,18 +6044,6 @@
},
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
-"cnu" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 6
- },
-/obj/structure/table/glass,
-/obj/item/book/codex_gigas,
-/obj/item/camera{
- pixel_y = 18
- },
-/obj/item/radio/intercom/directional/south,
-/turf/open/floor/iron/grimy,
-/area/station/service/library)
"cnG" = (
/obj/machinery/suit_storage_unit/rd,
/turf/open/floor/iron/dark/small,
@@ -5441,21 +6081,22 @@
"cow" = (
/turf/closed/wall,
/area/station/engineering/lobby)
+"coC" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"coO" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/wood,
/area/station/engineering/atmos)
-"cpc" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/thinplating_new/light{
- dir = 4
- },
-/obj/structure/extinguisher_cabinet/directional/north,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"cpA" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -5545,6 +6186,23 @@
},
/turf/open/floor/plating,
/area/station/science/ordnance/storage)
+"cqD" = (
+/obj/structure/table/wood,
+/obj/item/holosign_creator/robot_seat/bar{
+ pixel_x = 2;
+ pixel_y = 9
+ },
+/obj/structure/sign/picture_frame/portrait/bar{
+ pixel_y = 32
+ },
+/obj/item/roulette_wheel_beacon,
+/obj/machinery/light/small/directional/north,
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/floor/stone,
+/area/station/service/bar/backroom)
"cqM" = (
/obj/structure/railing{
dir = 8
@@ -5570,6 +6228,19 @@
},
/turf/open/floor/plating,
/area/station/service/janitor)
+"cri" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
+"crm" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"cro" = (
/obj/structure/cable,
/obj/structure/chair/sofa/corp/left{
@@ -5585,6 +6256,12 @@
/obj/machinery/light/cold/directional/north,
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
+"crx" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral,
+/obj/item/radio/intercom/directional/east,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"crE" = (
/obj/structure/window/spawner/directional/north,
/turf/open/space/basic,
@@ -5595,39 +6272,12 @@
},
/turf/open/floor/iron/small,
/area/station/security/brig)
-"crV" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
- },
-/obj/machinery/airalarm/directional/south,
-/turf/open/floor/iron/smooth,
-/area/station/service/greenroom)
-"crX" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/power/apc/auto_name/directional/west,
-/obj/machinery/duct,
-/turf/open/floor/stone,
-/area/station/service/bar/backroom)
"csl" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/ai_monitored/turret_protected/aisat/maint)
-"csp" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/structure/flora/bush/flowers_pp/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"css" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 10
@@ -5636,6 +6286,16 @@
/obj/structure/tram,
/turf/open/floor/tram,
/area/station/maintenance/port/aft)
+"csv" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/white/corner,
+/area/station/hallway/secondary/exit/departure_lounge)
"csw" = (
/obj/structure/window/reinforced/spawner/directional/south,
/obj/effect/turf_decal/stripes/end,
@@ -5683,6 +6343,11 @@
/obj/machinery/power/apc/auto_name/directional/east,
/turf/open/floor/iron/smooth,
/area/station/ai_monitored/turret_protected/aisat/foyer)
+"csZ" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"ctb" = (
/obj/effect/turf_decal/siding/yellow{
dir = 6
@@ -5694,14 +6359,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/diagonal,
/area/station/engineering/lobby)
-"ctc" = (
-/obj/structure/cable,
-/obj/item/kirbyplants/random,
-/obj/effect/decal/cleanable/cobweb,
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/machinery/firealarm/directional/west,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"ctl" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -5712,6 +6369,34 @@
"ctH" = (
/turf/open/floor/iron/herringbone,
/area/station/commons/dorms)
+"ctN" = (
+/obj/structure/closet/secure_closet/freezer/empty,
+/obj/item/food/grown/tomato{
+ pixel_y = 2;
+ pixel_x = 2
+ },
+/obj/item/food/grown/tomato{
+ pixel_y = 2;
+ pixel_x = 2
+ },
+/obj/item/food/grown/eggplant{
+ pixel_y = 5;
+ pixel_x = 5
+ },
+/obj/item/food/grown/eggplant{
+ pixel_y = 5;
+ pixel_x = 5
+ },
+/obj/item/storage/fancy/egg_box,
+/obj/item/storage/fancy/egg_box,
+/obj/item/reagent_containers/condiment/milk,
+/obj/item/reagent_containers/condiment/milk,
+/obj/item/reagent_containers/condiment/soymilk,
+/obj/item/reagent_containers/condiment/soymilk,
+/obj/item/reagent_containers/condiment/flour,
+/obj/item/reagent_containers/condiment/flour,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"cua" = (
/obj/effect/spawner/random/maintenance,
/obj/effect/spawner/random/structure/crate,
@@ -5781,6 +6466,18 @@
dir = 1
},
/area/station/cargo/bitrunning/den)
+"cvX" = (
+/obj/structure/sign/poster/official/random/directional/south,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/obj/machinery/airalarm/directional/east,
+/obj/item/kirbyplants/random,
+/turf/open/floor/stone,
+/area/station/service/bar)
"cwb" = (
/obj/effect/turf_decal/stripes/white/end{
dir = 1
@@ -5850,11 +6547,6 @@
},
/turf/open/floor/catwalk_floor,
/area/station/engineering/atmos/office)
-"cxT" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/structure/table/wood,
-/turf/open/floor/wood,
-/area/station/cargo/boutique)
"cyf" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -5865,14 +6557,6 @@
/obj/structure/extinguisher_cabinet/directional/south,
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
-"cyh" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"cyk" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron/dark,
@@ -5974,6 +6658,18 @@
},
/turf/open/floor/iron/white/small,
/area/station/medical/surgery/theatre)
+"cAl" = (
+/obj/machinery/camera/autoname/directional/east,
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/machinery/light/small/directional/east,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/item/radio/intercom/directional/east,
+/turf/open/floor/stone,
+/area/station/service/bar)
"cAm" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/box/corners{
@@ -6001,6 +6697,14 @@
},
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/science/robotics/mechbay)
+"cAZ" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/spawner/random/trash,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"cBw" = (
/obj/effect/turf_decal/tile/yellow/opposingcorners,
/obj/structure/filingcabinet/chestdrawer,
@@ -6049,10 +6753,22 @@
/obj/item/storage/bag/xeno,
/turf/open/floor/iron/white,
/area/station/science/cytology)
+"cCe" = (
+/obj/structure/bed/maint,
+/obj/effect/spawner/random/trash,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"cCl" = (
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
+"cCv" = (
+/obj/item/radio/intercom/directional/south,
+/obj/effect/turf_decal/siding/wideplating_new/terracotta,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/mapping_helpers/broken_floor,
+/turf/open/floor/wood/tile,
+/area/station/maintenance/central/lesser)
"cCx" = (
/obj/structure/chair{
pixel_y = -2
@@ -6171,6 +6887,14 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
+"cEo" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"cEs" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/door/window/brigdoor/right/directional/north{
@@ -6321,22 +7045,6 @@
},
/turf/open/floor/iron/small,
/area/station/maintenance/port/lesser)
-"cGb" = (
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/stack/rods/fifty,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/electronics/airlock,
-/obj/item/electronics/airlock,
-/obj/item/stock_parts/cell/high,
-/obj/item/stack/sheet/mineral/plasma{
- amount = 30
- },
-/obj/item/gps,
-/obj/structure/closet/crate/engineering,
-/obj/machinery/light/cold/directional/east,
-/obj/item/clothing/gloves/color/yellow,
-/turf/open/floor/iron/dark/small,
-/area/station/engineering/storage_shared)
"cGj" = (
/turf/closed/wall/r_wall,
/area/station/security/execution/education)
@@ -6412,17 +7120,19 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron/dark/herringbone,
/area/station/ai_monitored/command/nuke_storage)
-"cIC" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/machinery/light/small/directional/east,
-/obj/structure/chair/stool/bar/directional/south,
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
"cIU" = (
/mob/living/carbon/human/species/monkey,
/turf/open/floor/grass,
/area/station/medical/virology)
+"cIX" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/structure/chair/wood{
+ dir = 8
+ },
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"cJb" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -6430,6 +7140,22 @@
},
/turf/open/space/basic,
/area/station/engineering/atmos/space_catwalk)
+"cJv" = (
+/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics,
+/obj/machinery/door/airlock/hydroponics/glass{
+ name = "Hydroponics"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/textured_half{
+ dir = 8
+ },
+/area/station/service/hydroponics)
"cJz" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -6490,6 +7216,13 @@
"cKk" = (
/turf/closed/mineral/random/stationside,
/area/station/ai_monitored/turret_protected/aisat/maint)
+"cKt" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"cKv" = (
/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{
dir = 4
@@ -6522,6 +7255,15 @@
/obj/structure/marker_beacon/indigo,
/turf/open/space/basic,
/area/space/nearstation)
+"cLy" = (
+/obj/effect/spawner/random/trash,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"cLD" = (
/obj/structure/window/spawner/directional/north,
/obj/effect/turf_decal/siding/thinplating_new/dark{
@@ -6538,6 +7280,13 @@
},
/turf/open/floor/wood,
/area/station/service/abandoned_gambling_den)
+"cLL" = (
+/obj/structure/flora/rock/pile/jungle/style_5{
+ pixel_x = -5;
+ pixel_y = 5
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"cLS" = (
/obj/effect/turf_decal/siding/white{
dir = 10
@@ -6572,6 +7321,19 @@
/obj/structure/lattice,
/turf/open/space/basic,
/area/space/nearstation)
+"cME" = (
+/obj/structure/extinguisher_cabinet/directional/north,
+/obj/machinery/camera/autoname/directional/north,
+/obj/machinery/button/door/directional/east{
+ id = "kitchenshutters";
+ name = "Kitchen Shutter Control"
+ },
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"cMS" = (
/obj/structure/cable,
/obj/structure/chair/stool/directional/north,
@@ -6605,20 +7367,6 @@
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/iron,
/area/station/commons/fitness/locker_room)
-"cNu" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral,
-/obj/machinery/status_display/evac/directional/south,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
-"cNF" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/spawner/random/structure/closet_maintenance,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"cNR" = (
/obj/structure/chair/office{
dir = 4
@@ -6649,10 +7397,6 @@
/obj/structure/window/spawner/directional/west,
/turf/open/misc/sandy_dirt,
/area/station/commons/fitness/recreation/entertainment)
-"cOm" = (
-/obj/effect/turf_decal/tile/brown/full,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"cOC" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -6678,13 +7422,6 @@
/obj/effect/turf_decal/stripes/white/line,
/turf/open/floor/plating,
/area/station/construction/mining/aux_base)
-"cPd" = (
-/obj/effect/turf_decal/siding/wood/corner{
- dir = 4
- },
-/obj/structure/flora/bush/flowers_yw/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"cPe" = (
/obj/structure/spider/stickyweb,
/turf/open/floor/iron/small,
@@ -6696,6 +7433,16 @@
/obj/effect/turf_decal/siding/blue/corner,
/turf/open/floor/iron/white/small,
/area/station/medical/storage)
+"cPj" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"cPp" = (
/obj/structure/urinal/directional/east,
/turf/open/floor/iron/white/small,
@@ -6748,6 +7495,32 @@
/obj/machinery/light/small/dim/directional/west,
/turf/open/floor/iron/dark/small,
/area/station/maintenance/aft)
+"cQG" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/sign/departments/holy/directional/west,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
+"cQI" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/item/radio/intercom/directional/south,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
+"cQN" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/obj/structure/table/wood,
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"cQP" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -6759,6 +7532,14 @@
},
/turf/open/floor/plating,
/area/station/ai_monitored/turret_protected/aisat/maint)
+"cRc" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/sign/departments/court/directional/east,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"cRm" = (
/obj/effect/spawner/random/structure/closet_maintenance,
/obj/effect/spawner/random/maintenance,
@@ -6813,6 +7594,15 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark/textured,
/area/station/ai_monitored/turret_protected/ai)
+"cRL" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/firealarm/directional/west,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"cRS" = (
/obj/structure/table,
/obj/item/vending_refill/hydroseeds,
@@ -6824,6 +7614,13 @@
},
/turf/open/floor/tram,
/area/station/security/tram)
+"cSb" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/structure/flora/bush/sparsegrass,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"cSk" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/closet/l3closet,
@@ -6871,6 +7668,15 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmospherics_engine)
+"cTn" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"cTp" = (
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
dir = 4
@@ -6927,6 +7733,26 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/dark/small,
/area/station/engineering/supermatter/room)
+"cUf" = (
+/obj/structure/sign/directions/engineering{
+ dir = 1;
+ pixel_y = 8
+ },
+/obj/structure/sign/directions/command{
+ dir = 1
+ },
+/obj/structure/sign/directions/supply{
+ dir = 1;
+ pixel_y = -8
+ },
+/turf/closed/wall,
+/area/station/service/library)
+"cUB" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/structure/chair/stool/bar/directional/south,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"cUH" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
@@ -7029,6 +7855,30 @@
dir = 4
},
/area/station/maintenance/fore/lesser)
+"cWB" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/cup/rag{
+ pixel_x = -6;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/cup/glass/drinkingglass{
+ pixel_x = 10;
+ pixel_y = 8
+ },
+/obj/item/reagent_containers/cup/glass/drinkingglass{
+ pixel_x = 5;
+ pixel_y = 16
+ },
+/obj/item/reagent_containers/cup/glass/drinkingglass{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/item/reagent_containers/cup/glass/shaker{
+ pixel_x = -7;
+ pixel_y = 15
+ },
+/turf/open/floor/iron/dark/textured,
+/area/station/service/bar)
"cWM" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -7047,18 +7897,6 @@
/obj/structure/barricade/wooden,
/turf/open/floor/iron,
/area/station/engineering/atmospherics_engine)
-"cWT" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/pdapainter/research,
-/obj/machinery/computer/security/telescreen/rd{
- pixel_y = 30
- },
-/obj/effect/turf_decal/siding/purple{
- dir = 5
- },
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/rd)
"cWZ" = (
/obj/machinery/door/airlock/external{
name = "Primary Docking Bay"
@@ -7070,14 +7908,17 @@
dir = 1
},
/area/station/hallway/secondary/entry)
-"cXm" = (
-/obj/structure/cable,
+"cXb" = (
+/obj/machinery/light/small/directional/north,
+/turf/open/misc/dirt/jungle,
+/area/station/service/chapel)
+"cXh" = (
/obj/structure/disposalpipe/segment{
- dir = 5
+ dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"cXu" = (
/obj/effect/landmark/atmospheric_sanity/ignore_area,
/turf/open/floor/plating,
@@ -7092,6 +7933,10 @@
},
/turf/open/floor/iron/kitchen/small,
/area/station/security/breakroom)
+"cXH" = (
+/obj/effect/landmark/start/cook,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"cXJ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/siding/wood{
@@ -7114,6 +7959,16 @@
/obj/structure/sign/departments/telecomms/directional/south,
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
+"cYp" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"cYt" = (
/obj/structure/cable,
/turf/open/floor/plating,
@@ -7153,6 +8008,13 @@
},
/turf/open/floor/iron/dark/small,
/area/station/maintenance/department/engine)
+"cYS" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/iron/smooth,
+/area/station/cargo/drone_bay)
"cYT" = (
/obj/structure/hedge,
/obj/structure/sign/poster/contraband/random/directional/east,
@@ -7167,6 +8029,25 @@
/obj/effect/spawner/random/structure/steam_vent,
/turf/open/floor/plating,
/area/station/ai_monitored/turret_protected/aisat/maint)
+"cYY" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/structure/disposalpipe/junction/flip{
+ dir = 4
+ },
+/turf/open/floor/iron/dark/side{
+ dir = 1
+ },
+/area/station/hallway/primary/central/fore)
+"cZi" = (
+/obj/structure/extinguisher_cabinet/directional/south,
+/obj/machinery/camera/autoname/directional/south,
+/obj/item/kirbyplants/random,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"cZk" = (
/obj/structure/chair{
dir = 1
@@ -7325,6 +8206,15 @@
/obj/structure/railing,
/turf/open/space/basic,
/area/space)
+"dbZ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/open/floor/stone,
+/area/station/service/chapel)
"dcc" = (
/obj/item/kirbyplants/random/fullysynthetic,
/obj/machinery/holopad,
@@ -7344,6 +8234,23 @@
/obj/item/clothing/suit/hooded/wintercoat/science,
/turf/open/floor/iron/dark/small,
/area/station/science/xenobiology)
+"dcD" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/port)
"dcH" = (
/obj/structure/cable,
/obj/structure/disposalpipe/junction{
@@ -7394,11 +8301,27 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
+"ddB" = (
+/obj/structure/closet/secure_closet/personal,
+/obj/effect/turf_decal/tile/brown/opposingcorners{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"ddE" = (
/obj/structure/cable,
/obj/structure/chair/stool/directional/west,
/turf/open/floor/carpet/red,
/area/station/command/heads_quarters/hos)
+"ddG" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 1
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/fore)
"ddK" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -7443,6 +8366,23 @@
},
/turf/open/floor/catwalk_floor/iron,
/area/station/science/xenobiology)
+"deR" = (
+/obj/machinery/camera/autoname/directional/west,
+/obj/machinery/status_display/evac/directional/west,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
+"deS" = (
+/obj/structure/table/wood,
+/obj/machinery/light/small/directional/south,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/siding/wideplating_new/terracotta{
+ dir = 10
+ },
+/turf/open/floor/wood/tile,
+/area/station/maintenance/central/lesser)
"dfb" = (
/obj/structure/cable,
/obj/structure/table/glass,
@@ -7450,6 +8390,20 @@
/obj/machinery/power/apc/auto_name/directional/north,
/turf/open/floor/iron/white/small,
/area/station/medical/psychology)
+"dfc" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 10
+ },
+/obj/machinery/restaurant_portal/restaurant,
+/turf/open/floor/stone,
+/area/station/service/bar)
+"dff" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/airalarm/directional/east,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"dfo" = (
/obj/structure/cable,
/obj/machinery/status_display/ai/directional/north,
@@ -7472,13 +8426,6 @@
/obj/structure/window/spawner/directional/south,
/turf/open/floor/grass,
/area/station/cargo/storage)
-"dfW" = (
-/obj/structure/chair{
- dir = 8
- },
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"dgm" = (
/obj/structure/railing/corner{
dir = 1
@@ -7528,6 +8475,16 @@
},
/turf/open/floor/circuit/red,
/area/station/ai_monitored/turret_protected/ai)
+"dhu" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/structure/flora/bush/sparsegrass{
+ pixel_x = -5;
+ pixel_y = 9
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"dhy" = (
/obj/structure/cable,
/obj/structure/disposalpipe/trunk{
@@ -7563,6 +8520,15 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
+"dib" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/eighties/red,
+/area/station/hallway/primary/central/fore)
"dim" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -7599,6 +8565,22 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/textured_half,
/area/station/commons/fitness/locker_room)
+"diG" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/machinery/light/small/directional/east,
+/obj/structure/chair/stool/bar/directional/south,
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
+"diI" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/camera/autoname/directional/south,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"diK" = (
/obj/effect/turf_decal/tile/red/opposingcorners,
/obj/effect/turf_decal/tile/blue/opposingcorners{
@@ -7620,6 +8602,9 @@
/obj/machinery/atmospherics/pipe/smart/simple/brown/visible,
/turf/open/space/basic,
/area/station/engineering/atmos/space_catwalk)
+"diP" = (
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"diS" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -7632,6 +8617,16 @@
/obj/machinery/light/floor,
/turf/open/floor/iron/smooth,
/area/station/hallway/secondary/command)
+"djf" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/landmark/start/hangover,
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"djg" = (
/obj/structure/bed{
dir = 4
@@ -7662,29 +8657,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/textured_half,
/area/station/commons/dorms)
-"dks" = (
-/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/neutral/full,
-/obj/item/reagent_containers/cup/glass/drinkingglass{
- pixel_x = -5;
- pixel_y = 22
- },
-/obj/item/reagent_containers/cup/glass/drinkingglass{
- pixel_x = -1;
- pixel_y = 13
- },
-/obj/item/reagent_containers/cup/glass/drinkingglass{
- pixel_x = -8;
- pixel_y = 6
- },
-/obj/item/reagent_containers/cup/glass/drinkingglass{
- pixel_x = 5;
- pixel_y = 4
- },
-/obj/machinery/camera/autoname/directional/south,
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"dkz" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -8009,6 +8981,14 @@
/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/open/floor/iron/showroomfloor,
/area/station/medical/virology)
+"drC" = (
+/obj/machinery/vending/cola,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/light/small/directional/south,
+/turf/open/floor/iron/dark/side,
+/area/station/hallway/primary/central/fore)
"drF" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -8058,6 +9038,11 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/department/engine/atmos)
+"dsl" = (
+/obj/item/kirbyplants/random,
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"dsp" = (
/obj/effect/turf_decal/sand/plating,
/obj/structure/rack,
@@ -8086,10 +9071,24 @@
/obj/item/screwdriver,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
+"dsK" = (
+/obj/effect/turf_decal/tile/red/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/smooth,
+/area/station/service/greenroom)
"dsN" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/station/security/lockers)
+"dsP" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/turf/open/floor/stone,
+/area/station/service/bar/backroom)
"dsU" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 6
@@ -8098,15 +9097,6 @@
/obj/structure/tram,
/turf/open/floor/tram,
/area/station/maintenance/port/aft)
-"dtj" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/tile/dark_red/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"dtk" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden,
/turf/closed/wall,
@@ -8123,12 +9113,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/commons/fitness/locker_room)
-"dty" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/light/floor,
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"dtC" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/effect/turf_decal/siding/purple{
@@ -8153,6 +9137,16 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/genetics)
+"dtO" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"dua" = (
/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
dir = 4
@@ -8183,6 +9177,18 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron,
/area/station/security/checkpoint/escape)
+"duE" = (
+/obj/effect/landmark/start/assistant,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"duI" = (
/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{
dir = 10
@@ -8205,18 +9211,6 @@
},
/turf/open/floor/wood,
/area/station/engineering/atmos/office)
-"dvl" = (
-/obj/structure/table,
-/obj/item/reagent_containers/condiment/enzyme{
- pixel_x = 4;
- pixel_y = 6
- },
-/obj/machinery/reagentgrinder{
- pixel_x = -9;
- pixel_y = 8
- },
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"dvo" = (
/obj/machinery/ore_silo,
/obj/effect/turf_decal/bot_white,
@@ -8359,6 +9353,13 @@
/obj/item/stack/rods/fifty,
/turf/open/floor/plating,
/area/station/construction/mining/aux_base)
+"dxV" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"dxZ" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -8453,13 +9454,6 @@
/obj/item/radio/intercom/chapel/directional/east,
/turf/open/floor/iron/terracotta/diagonal,
/area/station/service/chapel/office)
-"dzq" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
"dzA" = (
/obj/effect/spawner/structure/window/reinforced/plasma,
/obj/machinery/atmospherics/pipe/smart/simple/brown/visible,
@@ -8493,6 +9487,14 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
+"dAC" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters{
+ id = "meow";
+ name = "Commissary"
+ },
+/turf/open/floor/plating,
+/area/station/commons/vacant_room/commissary)
"dAF" = (
/obj/effect/turf_decal/siding/thinplating_new{
dir = 4
@@ -8587,27 +9589,6 @@
/obj/machinery/atmospherics/components/unary/passive_vent,
/turf/open/floor/circuit/red,
/area/station/ai_monitored/turret_protected/ai)
-"dCm" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/machinery/door/airlock/public/glass{
- name = "Study"
- },
-/obj/machinery/door/firedoor,
-/obj/structure/cable,
-/turf/open/floor/iron/smooth_half{
- dir = 1
- },
-/area/station/service/library)
"dCs" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 9
@@ -8616,6 +9597,19 @@
/obj/structure/tram,
/turf/open/floor/tram,
/area/station/maintenance/port/aft)
+"dCu" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"dCR" = (
/obj/structure/cable/layer3,
/turf/open/floor/circuit/red,
@@ -8638,6 +9632,16 @@
},
/turf/open/floor/iron/smooth,
/area/station/cargo/drone_bay)
+"dDi" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"dDk" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/chapel{
@@ -8701,6 +9705,13 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/textured_half,
/area/station/commons/fitness/recreation/entertainment)
+"dEq" = (
+/obj/effect/turf_decal/siding/thinplating_new/light,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"dEu" = (
/obj/machinery/vending/cigarette,
/turf/open/floor/iron/kitchen/small,
@@ -8723,30 +9734,44 @@
dir = 1
},
/area/station/science/ordnance/testlab)
-"dEV" = (
-/obj/structure/table,
-/obj/item/circuitboard/machine/coffeemaker/impressa,
-/obj/item/coffee_cartridge/decaf{
- pixel_y = 9
- },
-/turf/open/floor/iron/dark/small,
-/area/station/commons/vacant_room/commissary)
+"dEQ" = (
+/obj/structure/cable,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"dFN" = (
/obj/structure/window/spawner/directional/east,
/obj/structure/window/spawner/directional/north,
/turf/open/floor/iron/dark,
/area/station/commons/dorms)
+"dFQ" = (
+/obj/structure/cable,
+/obj/effect/spawner/random/trash,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/lesser)
+"dGm" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/airlock/wood{
+ name = "Bar Backroom"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/service/bar,
+/turf/open/floor/iron/textured_half{
+ dir = 8
+ },
+/area/station/service/bar)
"dGV" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/closed/wall,
/area/station/engineering/atmos/storage/gas)
-"dHi" = (
-/obj/machinery/door/firedoor,
-/obj/effect/landmark/navigate_destination/bar,
-/turf/open/floor/catwalk_floor/iron,
-/area/station/service/bar)
"dHk" = (
/obj/effect/turf_decal/tile/blue/half/contrasted{
dir = 8
@@ -8810,6 +9835,15 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
+"dIQ" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/structure/flora/bush/flowers_yw/style_3,
+/obj/machinery/firealarm/directional/south,
+/obj/machinery/light/small/directional/south,
+/obj/machinery/camera/directional/south,
+/obj/machinery/status_display/evac/directional/south,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"dIZ" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{
dir = 6
@@ -8837,6 +9871,12 @@
/obj/effect/spawner/random/structure/girder,
/turf/open/floor/plating,
/area/station/maintenance/fore/lesser)
+"dJv" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/open/floor/wood/tile,
+/area/station/service/bar)
"dJT" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -8868,6 +9908,14 @@
/obj/effect/spawner/random/engineering/material,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
+"dKm" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/light/cold/directional/east,
+/obj/effect/turf_decal/tile/neutral,
+/obj/item/radio/intercom/directional/east,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"dKq" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -8946,6 +9994,13 @@
/obj/machinery/light_switch/directional/west,
/turf/open/floor/iron/small,
/area/station/security/office)
+"dLW" = (
+/obj/structure/chair/office{
+ dir = 8
+ },
+/obj/effect/landmark/start/librarian,
+/turf/open/floor/carpet,
+/area/station/service/library)
"dMg" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 4;
@@ -8953,6 +10008,19 @@
},
/turf/open/floor/circuit/red,
/area/station/ai_monitored/turret_protected/ai)
+"dMi" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"dMm" = (
/obj/effect/spawner/random/structure/crate,
/obj/effect/turf_decal/stripes/line{
@@ -8988,17 +10056,6 @@
"dNq" = (
/turf/closed/wall/r_wall/rust,
/area/station/ai_monitored/aisat/exterior)
-"dNw" = (
-/obj/effect/turf_decal/siding/wood,
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/machinery/door/airlock/multi_tile/public/glass{
- name = "Library"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_half,
-/area/station/service/library)
"dNy" = (
/obj/effect/spawner/random/structure/closet_maintenance,
/turf/open/floor/plating,
@@ -9013,13 +10070,6 @@
/obj/structure/chair/stool/directional/south,
/turf/open/floor/light/colour_cycle/dancefloor_b,
/area/station/maintenance/starboard/central)
-"dNI" = (
-/obj/structure/chair/sofa/left/maroon,
-/obj/machinery/light/small/directional/east,
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
"dNL" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -9056,6 +10106,12 @@
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron/dark,
/area/station/security/office)
+"dOf" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/junction,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"dOz" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -9114,15 +10170,22 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/security/interrogation)
-"dPI" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 9
+"dPp" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/spawner/random/trash,
-/turf/open/floor/plating,
-/area/station/maintenance/port/lesser)
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
+"dPx" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/stone,
+/area/station/service/chapel)
"dQi" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -9151,30 +10214,21 @@
},
/turf/open/floor/engine,
/area/station/science/cytology)
-"dRf" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/door/airlock{
- name = "Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/any/command/maintenance,
-/obj/effect/mapping_helpers/airlock/unres{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/station/maintenance/hallway/abandoned_command)
-"dRh" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/trimline/neutral/line{
+"dQY" = (
+/obj/machinery/status_display/evac/directional/north,
+/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/effect/turf_decal/trimline/neutral/line{
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
+"dRb" = (
+/obj/effect/landmark/start/bartender,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
},
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/stone,
+/area/station/service/bar/backroom)
"dRk" = (
/obj/structure/flora/bush/lavendergrass/style_random,
/obj/structure/flora/bush/fullgrass/style_random,
@@ -9195,6 +10249,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
+"dRT" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"dSb" = (
/obj/machinery/atmospherics/pipe/smart/simple/general/visible{
dir = 4
@@ -9236,15 +10296,6 @@
},
/turf/open/floor/iron/showroomfloor,
/area/station/commons/toilet/auxiliary)
-"dSK" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/structure/cable,
-/obj/machinery/duct,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/plating,
-/area/station/maintenance/central/lesser)
"dSO" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -9274,6 +10325,14 @@
"dTd" = (
/turf/open/floor/stone,
/area/station/service/abandoned_gambling_den)
+"dTg" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/light/floor,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"dTB" = (
/obj/structure/broken_flooring/pile/directional/east,
/obj/effect/decal/cleanable/dirt,
@@ -9284,20 +10343,18 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
+"dTH" = (
+/obj/effect/landmark/start/hangover,
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"dTI" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
-"dTS" = (
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/red/line{
- dir = 4
- },
-/turf/open/floor/iron/small,
-/area/station/hallway/primary/central/fore)
"dTW" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/machinery/computer/shuttle/mining{
@@ -9348,6 +10405,13 @@
/obj/machinery/holopad,
/turf/open/floor/iron/dark/small,
/area/station/science/xenobiology)
+"dVQ" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/obj/structure/flora/bush/sparsegrass,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"dVW" = (
/obj/structure/chair{
dir = 8
@@ -9475,19 +10539,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/catwalk_floor/iron,
/area/station/science/lower)
-"dXo" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/red{
- dir = 6
- },
-/obj/machinery/firealarm/directional/south,
-/turf/open/floor/iron/white/small,
-/area/station/security/warden)
"dXO" = (
/obj/effect/spawner/structure/window/reinforced/tinted,
/obj/structure/disposalpipe/segment{
@@ -9515,7 +10566,7 @@
pixel_x = -6;
pixel_y = 3
},
-/obj/item/clothing/mask/cigarette{
+/obj/item/cigarette{
pixel_x = 5;
pixel_y = 2
},
@@ -9540,6 +10591,11 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/port/aft)
+"dYu" = (
+/obj/machinery/light/floor,
+/obj/effect/landmark/start/cook,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"dYw" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/structure/chair{
@@ -9711,23 +10767,34 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/wood,
/area/station/commons/fitness/recreation)
+"ebk" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/machinery/light/floor,
+/turf/open/floor/stone,
+/area/station/service/bar)
"ebo" = (
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
/obj/machinery/camera/autoname/directional/east,
/obj/machinery/light/cold/directional/east,
+/obj/machinery/power/apc/auto_name/directional/east{
+ areastring = "/area/station/science/ordnance/burnchamber"
+ },
+/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
-"ebB" = (
-/obj/effect/turf_decal/tile/green/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
- },
-/obj/machinery/light/small/directional/south,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
+"ebE" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/dark_red/opposingcorners,
+/obj/machinery/flasher/directional/west{
+ id = "brigentry"
},
+/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
-/area/station/service/hydroponics)
+/area/station/security/brig/entrance)
"ebK" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 4
@@ -9807,6 +10874,19 @@
},
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
+"edG" = (
+/obj/machinery/vending/hydronutrients,
+/obj/effect/turf_decal/tile/green/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/effect/turf_decal/delivery/white{
+ color = "#52B4E9"
+ },
+/obj/item/radio/intercom/directional/north,
+/obj/machinery/firealarm/directional/east,
+/turf/open/floor/iron,
+/area/station/service/hydroponics)
"edJ" = (
/obj/machinery/teleport/station,
/obj/machinery/airalarm/directional/north,
@@ -9832,19 +10912,6 @@
/obj/machinery/status_display/ai/directional/north,
/turf/open/floor/iron/smooth,
/area/station/ai_monitored/turret_protected/aisat/teleporter)
-"edU" = (
-/obj/machinery/porta_turret/ai,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching the RD's goons from the safety of his office.";
- dir = 4;
- name = "Research Monitor";
- network = list("rd");
- pixel_x = -28
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/status_display/ai/directional/north,
-/turf/open/floor/iron/smooth,
-/area/station/ai_monitored/turret_protected/aisat_interior)
"eeb" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -9882,13 +10949,6 @@
},
/turf/open/floor/plating,
/area/station/maintenance/department/engine/atmos)
-"efj" = (
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/structure/sign/poster/official/random/directional/north,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"efl" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -9896,6 +10956,13 @@
/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible,
/turf/open/floor/iron,
/area/station/engineering/atmos)
+"efm" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"efy" = (
/obj/item/kirbyplants/organic/plant21,
/obj/machinery/status_display/ai/directional/west,
@@ -9926,13 +10993,6 @@
dir = 10
},
/area/station/science/lower)
-"efL" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"efS" = (
/obj/machinery/computer/security/qm{
dir = 1
@@ -9950,6 +11010,18 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/station/security/prison/rec)
+"egc" = (
+/obj/effect/turf_decal/tile/green/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/machinery/reagentgrinder{
+ pixel_y = 10;
+ pixel_x = -5
+ },
+/turf/open/floor/iron,
+/area/station/service/hydroponics)
"egr" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -9996,6 +11068,16 @@
/obj/structure/sign/poster/official/random/directional/east,
/turf/open/floor/iron/smooth,
/area/station/engineering/atmos/office)
+"ehT" = (
+/obj/machinery/door/airlock{
+ id_tag = "commiss2";
+ name = "Commissary"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/firedoor,
+/turf/open/floor/iron/textured_half,
+/area/station/commons/vacant_room/commissary)
"ehV" = (
/obj/structure/cable,
/obj/structure/chair/sofa/right{
@@ -10071,16 +11153,6 @@
"eiU" = (
/turf/open/floor/plating/rust,
/area/station/maintenance/department/engine/atmos)
-"ejc" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/tile/dark_red/half/contrasted{
- dir = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/security)
"ejn" = (
/obj/item/stack/cable_coil/five,
/obj/effect/decal/cleanable/cobweb,
@@ -10134,6 +11206,14 @@
},
/turf/open/floor/catwalk_floor,
/area/station/engineering/main)
+"ejX" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/vending/cigarette,
+/turf/open/floor/stone,
+/area/station/service/bar)
"ekf" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -10218,6 +11298,13 @@
/obj/machinery/camera/autoname/directional/west,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
+"eln" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/tree/jungle/small/style_4,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"elv" = (
/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{
dir = 4
@@ -10280,6 +11367,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
+"elN" = (
+/obj/machinery/computer/security/telescreen/entertainment/directional/north,
+/obj/effect/landmark/start/hangover,
+/obj/machinery/light/small/directional/north,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"elR" = (
/obj/structure/table,
/obj/structure/window/spawner/directional/south,
@@ -10304,6 +11400,13 @@
/obj/machinery/holopad,
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/rd)
+"emp" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"emB" = (
/obj/machinery/door/airlock/maintenance{
name = "Maintenance"
@@ -10333,15 +11436,15 @@
/obj/effect/landmark/navigate_destination/aiupload,
/turf/open/floor/iron/white,
/area/station/hallway/primary/starboard)
-"enD" = (
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue/opposingcorners,
-/obj/machinery/camera/autoname/directional/west,
-/obj/machinery/light_switch/directional/west,
+"enq" = (
+/obj/structure/cable,
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/status_display/ai/directional/north,
+/obj/machinery/camera/autoname/directional/north,
/turf/open/floor/iron,
-/area/station/service/hydroponics)
+/area/station/engineering/storage/tech)
"enE" = (
/obj/item/cultivator/rake,
/obj/structure/cable,
@@ -10366,6 +11469,16 @@
},
/turf/open/floor/iron,
/area/station/security/prison)
+"eof" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/dark_red/fourcorners,
+/obj/effect/turf_decal/siding/wideplating/dark/corner{
+ dir = 1
+ },
+/obj/machinery/power/apc/auto_name/directional/north,
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"eoz" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -10381,6 +11494,10 @@
/obj/structure/broken_flooring/pile/directional/east,
/turf/open/floor/plating,
/area/station/maintenance/starboard/aft)
+"eoM" = (
+/obj/structure/disposalpipe/segment,
+/turf/closed/wall,
+/area/station/maintenance/central/greater)
"eoU" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -10443,6 +11560,24 @@
/obj/effect/mapping_helpers/airlock/access/all/security/general,
/turf/open/floor/catwalk_floor/flat_white,
/area/station/security/checkpoint/science)
+"equ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/aft)
"eqz" = (
/obj/effect/turf_decal/siding/white/corner{
dir = 8
@@ -10464,20 +11599,24 @@
/obj/machinery/power/energy_accumulator/tesla_coil/anchored,
/turf/open/floor/engine,
/area/station/engineering/supermatter)
-"eqP" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/structure/chair/comfy/black{
- dir = 1
- },
-/obj/effect/landmark/start/chaplain,
-/turf/open/floor/carpet/lone,
-/area/station/service/chapel/office)
+"eqG" = (
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/iron/dark/small,
+/area/station/maintenance/central/lesser)
"eqS" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/station/engineering/atmos/storage/gas)
+"erf" = (
+/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics,
+/obj/machinery/door/airlock/hydroponics/glass{
+ name = "Hydroponics"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/iron/textured_half{
+ dir = 8
+ },
+/area/station/service/hydroponics)
"erg" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -10529,6 +11668,11 @@
/obj/machinery/computer/records/security,
/turf/open/floor/iron/small,
/area/station/security/office)
+"esr" = (
+/obj/structure/closet/emcloset,
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/iron/dark/side,
+/area/station/hallway/primary/central/fore)
"ess" = (
/obj/structure/filingcabinet/chestdrawer,
/obj/item/radio/intercom/directional/west,
@@ -10577,6 +11721,18 @@
/obj/structure/sign/departments/medbay/directional/east,
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
+"ete" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"etl" = (
/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{
dir = 5
@@ -10647,6 +11803,10 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/security)
+"euz" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/closed/wall,
+/area/station/hallway/primary/central/aft)
"euO" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/white/line{
@@ -10723,15 +11883,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/small,
/area/station/maintenance/department/engine)
-"ewi" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/light/cold/directional/west,
-/obj/machinery/duct,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"ewo" = (
/obj/effect/turf_decal/box/corners{
dir = 4
@@ -10914,6 +12065,10 @@
},
/turf/open/floor/iron/smooth,
/area/station/ai_monitored/turret_protected/aisat/teleporter)
+"ezV" = (
+/obj/machinery/computer/security/telescreen/prison/directional/south,
+/turf/open/floor/iron/dark,
+/area/station/security/office)
"eAc" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -10927,6 +12082,14 @@
/obj/machinery/light/floor,
/turf/open/floor/iron,
/area/station/cargo/storage)
+"eAm" = (
+/obj/structure/cable,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"eAn" = (
/obj/machinery/computer/mech_bay_power_console,
/obj/effect/turf_decal/siding/thinplating_new/light{
@@ -10981,17 +12144,6 @@
/obj/machinery/status_display/evac/directional/west,
/turf/open/floor/circuit/red,
/area/station/ai_monitored/turret_protected/ai)
-"eAX" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/dark_red/fourcorners,
-/obj/effect/landmark/start/security_officer,
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"eAY" = (
/turf/open/floor/grass,
/area/station/science/xenobiology)
@@ -11014,6 +12166,17 @@
},
/turf/open/floor/iron,
/area/station/commons/storage/art)
+"eBC" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/item/radio/intercom/directional/south,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"eBH" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -11075,6 +12238,13 @@
/obj/effect/spawner/structure/window/survival_pod,
/turf/open/floor/engine,
/area/station/ai_monitored/turret_protected/ai)
+"eDi" = (
+/obj/structure/flora/bush/flowers_br,
+/obj/structure/flora/bush/flowers_pp,
+/obj/structure/flora/bush/flowers_yw,
+/obj/structure/flora/bush/pale,
+/turf/open/floor/grass,
+/area/station/hallway/primary/central/fore)
"eDl" = (
/obj/structure/cable/layer3,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -11095,6 +12265,20 @@
},
/turf/open/floor/catwalk_floor,
/area/station/engineering/break_room)
+"eDr" = (
+/obj/structure/table/glass,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell,
+/obj/machinery/status_display/evac/directional/north,
+/obj/structure/sign/directions/supply/directional/west,
+/obj/structure/sign/directions/engineering/directional/west{
+ pixel_y = 8
+ },
+/obj/structure/sign/directions/command/directional/west{
+ pixel_y = -8
+ },
+/turf/open/floor/iron/white,
+/area/station/hallway/primary/starboard)
"eDt" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 1
@@ -11295,14 +12479,6 @@
dir = 1
},
/area/station/science/lobby)
-"eGl" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/machinery/photocopier,
-/turf/open/floor/iron/smooth,
-/area/station/service/library)
"eGw" = (
/obj/machinery/camera/directional/west{
c_tag = "Engineering - Public Desk"
@@ -11340,6 +12516,10 @@
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron/white,
/area/station/medical/paramedic)
+"eGU" = (
+/obj/structure/chair/stool/bar/directional/north,
+/turf/open/floor/wood/large,
+/area/station/service/bar)
"eHa" = (
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/iron/showroomfloor,
@@ -11424,6 +12604,20 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
+"eIO" = (
+/obj/structure/chair/sofa/bench/right{
+ dir = 1
+ },
+/obj/machinery/camera/directional/south{
+ c_tag = "Atmospherics - South"
+ },
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/landmark/start/hangover,
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 1
+ },
+/turf/open/floor/iron/dark/side,
+/area/station/hallway/primary/central/fore)
"eIT" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/obj/effect/turf_decal/stripes/line{
@@ -11433,6 +12627,13 @@
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/plating,
/area/station/engineering/atmos/storage/gas)
+"eIW" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/structure/sign/poster/official/random/directional/west,
+/turf/open/floor/iron/grimy,
+/area/station/service/library)
"eIX" = (
/obj/machinery/light/cold/directional/south,
/obj/effect/turf_decal/stripes/end{
@@ -11477,13 +12678,6 @@
/obj/effect/turf_decal/stripes/asteroid/end,
/turf/open/floor/circuit/green,
/area/station/science/robotics/mechbay)
-"eJY" = (
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/obj/structure/extinguisher_cabinet/directional/north,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"eKf" = (
/obj/structure/table,
/obj/item/storage/box/donkpockets/donkpocketpizza,
@@ -11499,6 +12693,13 @@
dir = 4
},
/area/station/maintenance/starboard/greater)
+"eKD" = (
+/obj/structure/disposalpipe/sorting/mail{
+ dir = 1
+ },
+/obj/effect/mapping_helpers/mail_sorting/service/library,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"eKP" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -11633,6 +12834,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark/textured,
/area/station/ai_monitored/turret_protected/ai)
+"eNM" = (
+/obj/structure/table/wood,
+/obj/structure/reagent_dispensers/beerkeg,
+/obj/effect/turf_decal/siding/wood/end{
+ dir = 8
+ },
+/obj/structure/extinguisher_cabinet/directional/west,
+/turf/open/floor/stone,
+/area/station/service/bar)
"eNU" = (
/obj/structure/table/reinforced,
/obj/item/phone{
@@ -11676,17 +12886,18 @@
/obj/effect/landmark/start/atmospheric_technician,
/turf/open/floor/iron/small,
/area/station/engineering/atmos)
+"eOX" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/item/kirbyplants/random,
+/obj/machinery/airalarm/directional/east,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"eOZ" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/obj/machinery/airalarm/directional/north,
/turf/open/floor/iron/showroomfloor,
/area/station/medical/coldroom)
-"ePg" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/circuit,
-/area/station/maintenance/port/aft)
"ePn" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/light/small/directional/south,
@@ -11696,6 +12907,10 @@
},
/turf/open/floor/iron,
/area/station/cargo/miningfoundry)
+"ePt" = (
+/obj/structure/flora/grass/jungle/a/style_4,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"ePP" = (
/obj/structure/cable,
/obj/effect/turf_decal/siding/dark_red{
@@ -11748,12 +12963,6 @@
"eQt" = (
/turf/closed/wall,
/area/station/command/heads_quarters/rd)
-"eQv" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/power/apc/auto_name/directional/east,
-/turf/open/floor/carpet/lone,
-/area/station/service/theater)
"eQC" = (
/obj/effect/spawner/random/maintenance,
/obj/effect/spawner/random/structure/girder,
@@ -11780,6 +12989,26 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
+"eRa" = (
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 8
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
+"eRy" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/spawner/random/structure/steam_vent,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"eRX" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -11849,19 +13078,13 @@
/obj/item/kirbyplants/random/fullysynthetic,
/turf/open/floor/iron,
/area/station/security/prison)
-"eTt" = (
-/obj/structure/disposalpipe/sorting/mail{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/mapping_helpers/mail_sorting/service/hydroponics,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+"eTJ" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
},
-/obj/effect/landmark/navigate_destination/hydro,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
+/turf/open/floor/stone,
+/area/station/service/bar)
"eTT" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -11927,10 +13150,6 @@
dir = 1
},
/area/station/engineering/supermatter/room)
-"eUW" = (
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"eUZ" = (
/obj/effect/turf_decal/tile/dark_red{
dir = 1
@@ -12015,6 +13234,20 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
+"eVX" = (
+/obj/structure/statue/sandstone/venus{
+ dir = 8;
+ pixel_y = -15
+ },
+/obj/structure/flora/bush/flowers_pp,
+/obj/structure/flora/bush/flowers_br/style_3,
+/obj/effect/dummy/lighting_obj,
+/obj/effect/light_emitter/fake_outdoors,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/floor/grass/Airless,
+/area/station/hallway/primary/central/aft)
"eVY" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/structure/disposalpipe/segment,
@@ -12040,15 +13273,15 @@
/obj/machinery/firealarm/directional/west,
/turf/open/floor/iron/small,
/area/station/engineering/atmos/pumproom)
-"eWA" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral,
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 6
+"eWk" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
},
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"eWB" = (
/obj/effect/turf_decal/tile/dark_red/half/contrasted{
dir = 1
@@ -12057,6 +13290,12 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron,
/area/station/security/tram)
+"eWC" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"eWD" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white,
@@ -12096,6 +13335,16 @@
/obj/item/storage/crayons,
/turf/open/floor/iron,
/area/station/security/prison/workout)
+"eXB" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
+ },
+/obj/item/storage/fancy/candle_box,
+/obj/machinery/light_switch/directional/west,
+/obj/structure/rack/skeletal,
+/obj/machinery/camera/autoname/directional/west,
+/turf/open/floor/iron/grimy,
+/area/station/service/library)
"eXK" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/structure/table/wood,
@@ -12111,6 +13360,14 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron/cafeteria,
/area/station/science/breakroom)
+"eXZ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/trimline/neutral/end{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"eYc" = (
/turf/open/floor/iron/dark/textured,
/area/station/ai_monitored/turret_protected/ai)
@@ -12125,16 +13382,6 @@
},
/turf/open/floor/iron/smooth,
/area/station/ai_monitored/turret_protected/aisat/equipment)
-"eYn" = (
-/obj/machinery/computer/monitor{
- dir = 1
- },
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 1;
- pixel_y = -29
- },
-/turf/open/floor/iron/smooth,
-/area/station/ai_monitored/turret_protected/aisat/equipment)
"eYp" = (
/obj/machinery/recharge_station,
/obj/machinery/camera/motion/directional/east{
@@ -12143,6 +13390,13 @@
},
/turf/open/floor/iron/smooth,
/area/station/ai_monitored/turret_protected/aisat/equipment)
+"eYB" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/open/floor/stone,
+/area/station/service/chapel)
"eYD" = (
/obj/structure/railing{
dir = 8
@@ -12165,19 +13419,6 @@
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/iron,
/area/station/science/lower)
-"eYT" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/door/airlock{
- name = "Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/plating,
-/area/station/commons/fitness/recreation/entertainment)
"eYY" = (
/obj/structure/window/spawner/directional/west,
/obj/structure/window/spawner/directional/east,
@@ -12187,6 +13428,16 @@
},
/turf/open/misc/sandy_dirt,
/area/station/maintenance/port/lesser)
+"eZi" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"eZj" = (
/obj/structure/window/spawner/directional/east,
/turf/open/floor/iron/dark,
@@ -12195,19 +13446,18 @@
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/plating,
/area/station/engineering/engine_smes)
-"eZJ" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral/full,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"eZM" = (
/obj/structure/cable/layer3,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark/textured,
/area/station/ai_monitored/turret_protected/ai)
+"fap" = (
+/obj/effect/spawner/structure/window,
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/service/bar)
"fav" = (
/obj/item/kirbyplants/random/fullysynthetic,
/obj/machinery/computer/security/telescreen/entertainment/directional/west,
@@ -12338,14 +13588,6 @@
/obj/structure/sign/warning/vacuum/external/directional/north,
/turf/open/floor/iron,
/area/station/engineering/atmos/space_catwalk)
-"fcM" = (
-/obj/structure/disposalpipe/trunk{
- dir = 8
- },
-/obj/machinery/disposal/bin,
-/obj/machinery/camera/autoname/directional/east,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"fcU" = (
/obj/structure/window/spawner/directional/south,
/obj/structure/flora/bush/large/style_random{
@@ -12430,6 +13672,22 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/smooth,
/area/station/engineering/main)
+"feL" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/bush/flowers_pp,
+/obj/structure/cable,
+/turf/open/floor/grass,
+/area/station/service/chapel)
+"feR" = (
+/turf/open/floor/carpet,
+/area/station/service/library)
+"ffi" = (
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/north,
+/turf/open/floor/iron/dark/small,
+/area/station/maintenance/central/lesser)
"ffp" = (
/obj/structure/closet/firecloset,
/obj/effect/spawner/random/maintenance,
@@ -12450,15 +13708,6 @@
/obj/structure/sign/poster/official/random/directional/south,
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
-"ffX" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/door/poddoor/shutters/preopen{
- dir = 4;
- id = "kihall"
- },
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"fgk" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/machinery/status_display/door_timer{
@@ -12499,6 +13748,27 @@
},
/turf/open/floor/iron/diagonal,
/area/station/engineering/lobby)
+"fgJ" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
+"fgT" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/bush/flowers_br/style_random,
+/obj/structure/flora/bush/flowers_pp,
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/north{
+ low_power_nightshift_lights = 1
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"fgW" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/vending/drugs,
@@ -12527,17 +13797,6 @@
},
/turf/open/floor/iron/small,
/area/station/security/office)
-"fhC" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/structure/chair{
- dir = 1
- },
-/obj/machinery/light_switch/directional/west,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"fhT" = (
/obj/structure/sink/directional/east,
/obj/structure/mirror/directional/west,
@@ -12625,17 +13884,13 @@
},
/turf/open/floor/carpet/orange,
/area/station/commons/dorms)
-"fju" = (
-/obj/structure/closet/emcloset,
-/obj/effect/turf_decal/bot,
+"fjq" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron,
-/area/station/hallway/primary/port)
-"fjF" = (
-/obj/effect/turf_decal/bot_red,
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/structure/reagent_dispensers/cooking_oil,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
+/area/station/hallway/primary/central/aft)
"fjL" = (
/obj/effect/turf_decal/siding/wood{
dir = 9
@@ -12685,6 +13940,37 @@
/obj/item/mod/module/signlang_radio,
/turf/open/floor/iron/small,
/area/station/medical/storage)
+"fkF" = (
+/obj/structure/table/wood,
+/obj/item/pen/red{
+ pixel_x = 3;
+ pixel_y = 12
+ },
+/obj/item/pen/blue{
+ pixel_x = -6;
+ pixel_y = 12
+ },
+/turf/open/floor/carpet,
+/area/station/service/library)
+"fkN" = (
+/obj/structure/mannequin/plastic,
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/turf/open/floor/plating,
+/area/station/cargo/boutique)
+"fkS" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/red/line,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/fore)
"fkT" = (
/obj/effect/turf_decal/sand/plating,
/obj/structure/alien/weeds,
@@ -12710,6 +13996,11 @@
},
/turf/open/floor/iron/dark,
/area/station/security/interrogation)
+"flw" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/structure/flora/bush/flowers_yw/style_3,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"flD" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/stripes/corner{
@@ -12735,6 +14026,14 @@
/obj/item/flashlight/lantern,
/turf/open/floor/plating/rust,
/area/station/maintenance/starboard/greater)
+"fme" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/extinguisher_cabinet/directional/north,
+/obj/structure/flora/bush/sparsegrass,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"fmf" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/landmark/event_spawn,
@@ -12778,10 +14077,6 @@
/obj/effect/landmark/start/depsec/science,
/turf/open/floor/iron,
/area/station/security/checkpoint/science)
-"fnm" = (
-/obj/structure/filingcabinet/chestdrawer,
-/turf/open/floor/iron/grimy,
-/area/station/engineering/main)
"fnw" = (
/obj/structure/chair{
pixel_y = -2
@@ -12873,16 +14168,6 @@
/obj/structure/lattice,
/turf/open/space/basic,
/area/space/nearstation)
-"fpd" = (
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching Prison Wing holding areas.";
- dir = 1;
- name = "Prison Monitor";
- network = list("prison");
- pixel_y = -30
- },
-/turf/open/floor/iron/dark,
-/area/station/security/office)
"fpg" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -12932,6 +14217,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/catwalk_floor,
/area/station/maintenance/disposal/incinerator)
+"fpN" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"fpO" = (
/turf/closed/wall/r_wall,
/area/station/command/heads_quarters/ce)
@@ -12950,17 +14245,6 @@
/obj/structure/cable,
/turf/open/floor/iron/white/side,
/area/station/science/research)
-"fqL" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"fqQ" = (
/obj/effect/turf_decal/stripes/corner,
/obj/effect/decal/cleanable/dirt/dust,
@@ -12981,6 +14265,15 @@
/obj/item/defibrillator/loaded,
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
+"fri" = (
+/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
+/obj/structure/cable,
+/obj/machinery/door/airlock{
+ id_tag = "commiss2";
+ name = "Commissary"
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"frC" = (
/obj/effect/turf_decal/tile/neutral/full,
/turf/open/floor/iron/dark/smooth_large,
@@ -12998,6 +14291,15 @@
/obj/machinery/door/window/brigdoor/right/directional/north,
/turf/open/floor/iron/textured_large,
/area/station/security/checkpoint/customs)
+"fsb" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron/white,
+/area/station/hallway/primary/central/aft)
"fsk" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -13143,6 +14445,17 @@
/obj/effect/mapping_helpers/airlock/access/all/command/minisat,
/turf/open/floor/circuit/red,
/area/station/ai_monitored/turret_protected/ai)
+"fuu" = (
+/obj/effect/turf_decal/tile/dark_red/half/contrasted{
+ dir = 1
+ },
+/obj/machinery/light/cold/directional/south,
+/obj/structure/disposalpipe/sorting/mail/flip{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/mail_sorting/security/detectives_office,
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"fuB" = (
/obj/structure/railing{
dir = 4
@@ -13237,6 +14550,29 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/engine,
/area/station/science/xenobiology)
+"fvK" = (
+/obj/item/holosign_creator/robot_seat/restaurant,
+/obj/item/book/manual/chef_recipes,
+/obj/item/stack/package_wrap{
+ pixel_y = 2
+ },
+/obj/item/reagent_containers/condiment/enzyme{
+ pixel_x = -7;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/condiment/saltshaker{
+ pixel_x = -3
+ },
+/obj/item/reagent_containers/condiment/peppermill{
+ pixel_x = 3
+ },
+/obj/machinery/light_switch/directional/north,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/table,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"fvL" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
@@ -13324,6 +14660,15 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/small,
/area/station/engineering/atmos)
+"fxW" = (
+/obj/item/kirbyplants/random,
+/obj/structure/extinguisher_cabinet/directional/south,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/stone,
+/area/station/service/bar)
"fyo" = (
/obj/structure/table,
/obj/machinery/light/small/directional/east,
@@ -13381,6 +14726,18 @@
/obj/machinery/light_switch/directional/north,
/turf/open/floor/iron/dark,
/area/station/science/genetics)
+"fyW" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"fyZ" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -13396,11 +14753,6 @@
/obj/machinery/power/apc/auto_name/directional/north,
/turf/open/floor/plating,
/area/station/ai_monitored/turret_protected/aisat/maint)
-"fzf" = (
-/obj/machinery/vending/boozeomat,
-/obj/machinery/light/cold/directional/east,
-/turf/closed/wall,
-/area/station/service/bar)
"fzq" = (
/obj/structure/closet/crate/trashcart/filled,
/turf/open/floor/plating,
@@ -13417,6 +14769,12 @@
},
/turf/open/floor/iron/white,
/area/station/medical/virology)
+"fzw" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 10
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"fzx" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -13432,6 +14790,19 @@
},
/turf/open/floor/carpet/blue,
/area/station/commons/dorms)
+"fzT" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/plaque{
+ icon_state = "L6";
+ pixel_y = -15
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"fAr" = (
/obj/structure/window/reinforced/spawner/directional/south,
/obj/structure/barricade/wooden/crude,
@@ -13525,6 +14896,26 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
+"fBB" = (
+/obj/structure/table/wood,
+/obj/item/plate,
+/obj/item/food/cheesynachos{
+ pixel_y = 2
+ },
+/turf/open/floor/wood/large,
+/area/station/service/bar)
+"fBN" = (
+/obj/structure/flora/bush/flowers_yw/style_3{
+ pixel_x = 3;
+ pixel_y = 2
+ },
+/obj/machinery/light/floor,
+/obj/effect/light_emitter/fake_outdoors,
+/obj/effect/turf_decal/siding/wood{
+ dir = 10
+ },
+/turf/open/floor/grass/Airless,
+/area/station/hallway/primary/central/aft)
"fBO" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/tank_holder/extinguisher,
@@ -13619,14 +15010,6 @@
},
/turf/open/floor/plating,
/area/station/ai_monitored/turret_protected/aisat/maint)
-"fDp" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/plating,
-/area/station/hallway/secondary/service)
"fDI" = (
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
@@ -13676,6 +15059,16 @@
},
/turf/open/floor/iron/smooth,
/area/station/engineering/break_room)
+"fDX" = (
+/obj/effect/turf_decal/tile/neutral/full,
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new/light/corner{
+ dir = 8
+ },
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"fDY" = (
/obj/structure/cable,
/obj/structure/flora/bush/flowers_pp/style_random,
@@ -13739,6 +15132,13 @@
"fEC" = (
/turf/closed/wall,
/area/station/maintenance/port/lesser)
+"fEF" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 9
+ },
+/obj/structure/cable,
+/turf/open/floor/eighties,
+/area/station/hallway/primary/central/fore)
"fEU" = (
/obj/structure/table,
/obj/item/multitool{
@@ -13751,16 +15151,14 @@
},
/turf/open/floor/iron/dark,
/area/station/maintenance/department/engine/atmos)
-"fEV" = (
-/obj/machinery/porta_turret/ai,
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 8;
- pixel_x = 28
+"fEX" = (
+/obj/structure/table/wood,
+/obj/item/flashlight/lamp/green{
+ pixel_x = 1;
+ pixel_y = 7
},
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/status_display/ai/directional/north,
-/turf/open/floor/iron/smooth,
-/area/station/ai_monitored/turret_protected/aisat_interior)
+/turf/open/floor/carpet,
+/area/station/service/library)
"fFe" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -13772,6 +15170,11 @@
/obj/machinery/atmospherics/pipe/smart/simple/green/visible,
/turf/open/space/basic,
/area/station/engineering/atmos/space_catwalk)
+"fFr" = (
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/trimline/neutral/end,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"fFt" = (
/obj/structure/chair/wood{
dir = 8
@@ -13862,6 +15265,16 @@
},
/turf/open/floor/plating/rust,
/area/station/ai_monitored/turret_protected/aisat/maint)
+"fGT" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/vending/cigarette,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron/white/side,
+/area/station/hallway/primary/central/aft)
"fGU" = (
/obj/effect/turf_decal/stripes/red/line{
dir = 1
@@ -13872,12 +15285,13 @@
/obj/structure/sign/warning/pods/directional/west,
/turf/open/floor/iron/dark,
/area/station/engineering/hallway)
-"fHb" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
+"fGW" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/obj/structure/flora/bush/large/style_random,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"fHf" = (
/obj/structure/bed/maint,
/obj/effect/spawner/random/maintenance,
@@ -13907,7 +15321,9 @@
},
/obj/machinery/button/door/directional/north{
name = "Lock Control";
- id = "Toilet2"
+ id = "Toilet2";
+ specialfunctions = 4;
+ normaldoorcontrol = 1
},
/obj/machinery/light/small/directional/west,
/obj/structure/sign/poster/contraband/random/directional/west,
@@ -13938,6 +15354,15 @@
/obj/machinery/airalarm/directional/west,
/turf/open/floor/iron/grimy,
/area/station/science/cubicle)
+"fIj" = (
+/turf/open/floor/iron/white/side,
+/area/station/hallway/primary/central/aft)
+"fIl" = (
+/obj/structure/chair/wood{
+ dir = 8
+ },
+/turf/open/floor/wood/tile,
+/area/station/service/bar)
"fIw" = (
/obj/effect/landmark/navigate_destination/dockescpod,
/turf/open/floor/plating,
@@ -14037,6 +15462,19 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/smooth,
/area/station/ai_monitored/turret_protected/aisat_interior)
+"fKr" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/security/glass{
+ id_tag = "outerbrig";
+ name = "Brig"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/security/entrance,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "sci-entrance"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/textured_half,
+/area/station/security/brig/entrance)
"fKx" = (
/obj/structure/transit_tube/horizontal,
/obj/structure/lattice/catwalk,
@@ -14053,13 +15491,13 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos/pumproom)
-"fKO" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral,
-/obj/structure/sign/departments/court/directional/east,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
+"fKN" = (
+/obj/effect/landmark/event_spawn,
+/obj/machinery/computer/security/telescreen/test_chamber/directional/west,
+/turf/open/floor/iron/white/side{
+ dir = 4
+ },
+/area/station/science/xenobiology)
"fKP" = (
/obj/structure/disposalpipe/trunk{
dir = 8
@@ -14187,10 +15625,35 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
+"fLF" = (
+/obj/machinery/navbeacon{
+ codes_txt = "delivery;dir=8";
+ location = "QM #2"
+ },
+/obj/effect/turf_decal/delivery,
+/obj/machinery/camera/autoname/directional/south,
+/obj/machinery/light/small/directional/south,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/cargo/storage)
"fLI" = (
/obj/effect/spawner/random/structure/crate,
/turf/open/floor/iron/dark/small,
/area/station/maintenance/aft)
+"fLJ" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/dark_red/fourcorners,
+/obj/machinery/holopad,
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"fLK" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -14218,18 +15681,6 @@
/obj/structure/chair/stool/directional/north,
/turf/open/floor/iron/smooth,
/area/station/maintenance/solars/starboard/fore)
-"fMj" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 8
- },
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"fMs" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -14270,9 +15721,6 @@
/obj/effect/turf_decal/stripes/box,
/turf/open/floor/mineral/titanium,
/area/station/command/heads_quarters/ce)
-"fMD" = (
-/turf/open/floor/iron/white/small,
-/area/station/service/hydroponics)
"fMP" = (
/obj/structure/table/reinforced/titaniumglass,
/obj/item/binoculars{
@@ -14299,6 +15747,10 @@
},
/turf/open/floor/iron/cafeteria,
/area/station/hallway/secondary/exit/departure_lounge)
+"fMX" = (
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/open/floor/stone,
+/area/station/service/chapel)
"fNb" = (
/obj/effect/turf_decal/arrows{
dir = 8
@@ -14326,6 +15778,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
+"fNC" = (
+/obj/structure/chair/sofa/bench/right{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/iron/dark/side{
+ dir = 4
+ },
+/area/station/hallway/primary/central/fore)
"fNF" = (
/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
dir = 4
@@ -14360,6 +15821,32 @@
/obj/effect/turf_decal/bot_white,
/turf/open/floor/iron/small,
/area/station/medical/storage)
+"fNW" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
+"fNZ" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock{
+ name = "Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/plating,
+/area/station/maintenance/central/lesser)
"fOg" = (
/obj/effect/spawner/random/maintenance,
/obj/effect/turf_decal/sand/plating,
@@ -14372,11 +15859,24 @@
},
/turf/open/floor/iron/smooth,
/area/station/ai_monitored/turret_protected/aisat_interior)
+"fOJ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/dark/herringbone,
+/area/station/ai_monitored/command/nuke_storage)
"fOQ" = (
/obj/structure/cable,
/obj/structure/window/reinforced/spawner/directional/north,
/turf/open/floor/iron,
/area/station/security/prison/workout)
+"fOW" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"fPb" = (
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/engine,
@@ -14431,6 +15931,19 @@
/obj/structure/cable,
/turf/open/floor/iron/diagonal,
/area/station/engineering/lobby)
+"fQd" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment,
+/obj/structure/window/reinforced/spawner/directional/north,
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 4
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"fQA" = (
/obj/effect/spawner/random/structure/chair_maintenance{
dir = 8
@@ -14523,6 +16036,21 @@
/obj/machinery/power/apc/auto_name/directional/west,
/turf/open/floor/iron,
/area/station/commons/fitness/locker_room)
+"fRX" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Study"
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/siding/wood/end,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"fSe" = (
/turf/closed/wall/rust,
/area/station/cargo/miningfoundry)
@@ -14537,14 +16065,6 @@
},
/turf/open/floor/engine,
/area/station/science/xenobiology)
-"fSq" = (
-/obj/effect/mapping_helpers/broken_floor,
-/obj/structure/rack,
-/obj/item/scalpel,
-/obj/item/wirecutters,
-/obj/machinery/light/small/broken/directional/west,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"fSx" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -14639,12 +16159,6 @@
/obj/effect/spawner/random/structure/girder,
/turf/open/floor/plating,
/area/station/ai_monitored/turret_protected/aisat/maint)
-"fUj" = (
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
"fUo" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -14659,6 +16173,20 @@
/obj/effect/mapping_helpers/airlock/access/all/science/general,
/turf/open/floor/plating,
/area/station/maintenance/starboard/aft)
+"fUz" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
+"fUC" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"fUI" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -14712,6 +16240,14 @@
},
/turf/open/floor/plating,
/area/station/construction/mining/aux_base)
+"fVl" = (
+/obj/structure/table/wood,
+/obj/item/storage/fancy/cigarettes/cigars/cohiba{
+ pixel_x = 2;
+ pixel_y = 10
+ },
+/turf/open/floor/wood/large,
+/area/station/service/bar)
"fVy" = (
/obj/effect/turf_decal/tile/purple/opposingcorners,
/obj/effect/turf_decal/siding/green{
@@ -14725,10 +16261,29 @@
/obj/structure/sign/poster/official/random/directional/west,
/turf/open/floor/iron/small,
/area/station/security/checkpoint/engineering)
+"fVF" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/structure/flora/bush/sparsegrass,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"fVG" = (
/obj/structure/cable,
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/customs)
+"fVM" = (
+/obj/structure/extinguisher_cabinet/directional/west,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
+"fVQ" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"fVU" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -14736,15 +16291,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/ai_monitored/turret_protected/aisat/maint)
-"fVV" = (
-/obj/structure/sink/kitchen/directional/west,
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/machinery/camera/directional/east,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"fWe" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -14778,16 +16324,6 @@
/obj/item/kirbyplants/random,
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/maintenance/port/aft)
-"fWw" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/dark_red/half/contrasted,
-/obj/machinery/computer/security/telescreen/interrogation{
- pixel_y = 29
- },
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/station/security)
"fWJ" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
@@ -14889,10 +16425,6 @@
/obj/machinery/atmospherics/components/binary/valve,
/turf/open/floor/iron/smooth,
/area/station/maintenance/disposal/incinerator)
-"fYp" = (
-/obj/effect/landmark/navigate_destination/vault,
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
"fYr" = (
/obj/structure/table,
/obj/item/extinguisher/empty,
@@ -14905,28 +16437,17 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/herringbone,
/area/station/commons/dorms)
+"fYJ" = (
+/obj/structure/table/wood,
+/obj/item/food/lizard_fries,
+/turf/open/floor/wood/large,
+/area/station/service/bar)
"fYU" = (
/obj/effect/spawner/random/structure/crate_loot,
/obj/item/pickaxe,
/obj/effect/spawner/random/maintenance,
/turf/open/misc/asteroid,
/area/station/maintenance/department/engine/atmos)
-"fYX" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/access/all/security/armory,
-/obj/machinery/door/airlock/security{
- name = "Warden's Office"
- },
-/turf/open/floor/iron/textured_half{
- dir = 8
- },
-/area/station/security/warden)
"fZp" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -14947,6 +16468,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white/small,
/area/station/science/ordnance/storage)
+"fZK" = (
+/obj/structure/table/wood,
+/obj/machinery/computer/libraryconsole/bookmanagement{
+ dir = 1;
+ pixel_y = 5
+ },
+/turf/open/floor/carpet,
+/area/station/service/library)
"fZL" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -14964,6 +16493,15 @@
},
/turf/open/floor/iron/smooth,
/area/station/engineering/supermatter/room)
+"fZZ" = (
+/obj/structure/chair/sofa/bench/left{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron/white/side,
+/area/station/hallway/primary/central/aft)
"gad" = (
/obj/structure/table/bronze,
/obj/item/food/grown/cannabis{
@@ -14996,25 +16534,18 @@
},
/turf/open/floor/iron/grimy,
/area/station/command/heads_quarters/hop)
-"gal" = (
-/obj/structure/table,
-/obj/item/reagent_containers/condiment/saltshaker{
- desc = "Salt. From space oceans, presumably. A staple of modern medicine.";
- pixel_x = 8;
- pixel_y = 7
- },
-/obj/item/reagent_containers/condiment/peppermill{
- desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table.";
- pixel_x = 8;
- pixel_y = 2
+"gaj" = (
+/obj/effect/landmark/event_spawn,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
},
-/obj/item/radio/intercom/directional/east,
-/obj/effect/spawner/random/food_or_drink/condiment{
- pixel_x = -8;
- pixel_y = 3
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 10
},
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"gan" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/door/airlock/research{
@@ -15233,13 +16764,6 @@
},
/turf/open/floor/plating,
/area/station/medical/treatment_center)
-"geC" = (
-/obj/structure/reagent_dispensers/beerkeg,
-/obj/structure/sign/picture_frame/portrait/bar{
- pixel_y = 32
- },
-/turf/open/floor/stone,
-/area/station/service/bar/backroom)
"geE" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/structure/window/reinforced/spawner/directional/south,
@@ -15250,6 +16774,16 @@
/obj/machinery/light/small/directional/west,
/turf/open/misc/sandy_dirt,
/area/station/hallway/primary/central/fore)
+"geH" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/dark_red,
+/obj/structure/sign/warning/no_smoking/circle/directional/north,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/iron,
+/area/station/security)
"geJ" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
@@ -15282,6 +16816,16 @@
/obj/effect/mapping_helpers/airlock/access/all/command/general,
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/ai_monitored/turret_protected/aisat/foyer)
+"gfm" = (
+/obj/structure/chair/office{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"gfs" = (
/turf/closed/wall/r_wall,
/area/station/hallway/secondary/command)
@@ -15328,6 +16872,18 @@
/obj/effect/turf_decal/sand/plating,
/turf/open/floor/plating/airless,
/area/space/nearstation)
+"ggc" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/airlock/public/glass{
+ name = "Departure Lounge"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/textured_half{
+ dir = 1
+ },
+/area/station/hallway/secondary/exit/departure_lounge)
"ggh" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 8
@@ -15344,17 +16900,6 @@
/obj/machinery/camera/autoname/directional/west,
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
-"ggq" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/duct,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"ggw" = (
/obj/effect/turf_decal/stripes/white/end{
dir = 1
@@ -15391,6 +16936,15 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/port/lesser)
+"ghj" = (
+/obj/effect/turf_decal/tile/green/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/machinery/hydroponics/constructable,
+/obj/machinery/light/small/directional/east,
+/turf/open/floor/iron,
+/area/station/service/hydroponics)
"ghs" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -15443,6 +16997,15 @@
/obj/item/kirbyplants/random,
/turf/open/floor/iron,
/area/station/science/lower)
+"ghL" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/obj/item/radio/intercom/directional/west,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"ghQ" = (
/obj/machinery/nuclearbomb/selfdestruct,
/turf/open/floor/circuit/green,
@@ -15458,16 +17021,6 @@
/obj/structure/cable,
/turf/open/floor/stone,
/area/station/service/abandoned_gambling_den)
-"gih" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"giq" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -15479,6 +17032,24 @@
/obj/machinery/nuclearbomb/beer,
/turf/open/floor/iron/freezer,
/area/station/command/corporate_suite)
+"giB" = (
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/aft)
"giU" = (
/obj/effect/turf_decal/siding/thinplating_new/terracotta{
dir = 1
@@ -15514,6 +17085,13 @@
},
/turf/open/floor/iron/dark/corner,
/area/station/science/xenobiology)
+"gjn" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"gjL" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
@@ -15620,13 +17198,18 @@
"gla" = (
/turf/open/floor/iron/grimy,
/area/station/commons)
-"glb" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/brown/full,
-/obj/structure/reagent_dispensers/beerkeg,
-/obj/effect/turf_decal/bot_red/left,
-/obj/machinery/power/apc/auto_name/directional/north,
-/turf/open/floor/iron/smooth_large,
+"gls" = (
+/obj/item/radio/intercom/directional/south,
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/grimy,
+/area/station/service/library)
+"glA" = (
+/obj/effect/landmark/start/hangover,
+/obj/structure/chair/wood{
+ dir = 8
+ },
+/turf/open/floor/wood/tile,
/area/station/service/bar)
"glJ" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
@@ -15892,6 +17475,23 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/catwalk_floor,
/area/station/maintenance/department/engine/atmos)
+"grH" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/dark_red/half/contrasted,
+/obj/machinery/computer/security/telescreen/interrogation/directional/north,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/security)
+"grI" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/turf/open/floor/wood/tile,
+/area/station/service/bar)
"gsh" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -16009,26 +17609,9 @@
/obj/machinery/camera/autoname/directional/south,
/turf/open/floor/iron/dark/small,
/area/station/security/brig)
-"guR" = (
-/obj/machinery/modular_computer/preset/curator,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/machinery/firealarm/directional/north,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"guY" = (
/turf/closed/wall,
/area/station/service/chapel/storage)
-"gvn" = (
-/obj/machinery/door/airlock/security/glass{
- id_tag = "outerbrig";
- name = "Brig"
- },
-/obj/effect/mapping_helpers/airlock/access/all/security/entrance,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "sci-entrance"
- },
-/turf/open/floor/iron/textured_half,
-/area/station/security/brig/entrance)
"gvB" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -16068,6 +17651,19 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron/small,
/area/station/engineering/atmos/storage/gas)
+"gwx" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"gwQ" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/radio/intercom/directional/east,
@@ -16210,6 +17806,12 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
+"gyc" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"gyd" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/structure/window/spawner/directional/east,
@@ -16243,13 +17845,21 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
-"gzj" = (
-/obj/structure/flora/bush/flowers_br/style_random,
-/obj/structure/beebox,
-/obj/machinery/camera/autoname/directional/north,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/grass,
-/area/station/service/hydroponics)
+"gyx" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/dark_red/fourcorners,
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
+"gyy" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/structure/chair/wood{
+ dir = 4
+ },
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"gzs" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 5
@@ -16316,6 +17926,14 @@
dir = 5
},
/area/station/science/research)
+"gAH" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/wood/corner,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"gAJ" = (
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/iron,
@@ -16339,6 +17957,13 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"gBg" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/lobby)
"gBh" = (
/turf/closed/mineral/random/stationside,
/area/station/maintenance/department/engine/atmos)
@@ -16429,6 +18054,13 @@
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/wood/tile,
/area/station/command/bridge)
+"gCl" = (
+/obj/machinery/light/floor,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"gCo" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -16574,6 +18206,15 @@
/obj/machinery/digital_clock/directional/north,
/turf/open/floor/iron,
/area/station/maintenance/port/aft)
+"gEx" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/airalarm/directional/south,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"gEy" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing/corner{
@@ -16729,6 +18370,16 @@
/obj/structure/chair,
/turf/open/floor/wood,
/area/station/cargo/miningfoundry)
+"gGx" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/obj/item/kirbyplants/random,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"gGB" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -16759,6 +18410,10 @@
/obj/item/melee/chainofcommand,
/turf/open/floor/iron/smooth,
/area/station/command/bridge)
+"gHg" = (
+/obj/machinery/status_display/ai/directional/east,
+/turf/open/floor/glass,
+/area/station/hallway/primary/central/aft)
"gHl" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/dark_red/half/contrasted{
@@ -16766,12 +18421,6 @@
},
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/customs)
-"gHt" = (
-/obj/structure/kitchenspike,
-/obj/effect/turf_decal/bot_red,
-/obj/effect/mapping_helpers/broken_floor,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
"gHD" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/effect/decal/cleanable/dirt,
@@ -16826,6 +18475,17 @@
/obj/effect/spawner/random/trash,
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
+"gIv" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"gIx" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -16925,7 +18585,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/table,
/obj/item/stack/spacecash/c1,
-/obj/item/clothing/mask/cigarette/cigar/havana,
+/obj/item/cigarette/cigar/havana,
/turf/open/floor/light/colour_cycle/dancefloor_b,
/area/station/maintenance/starboard/central)
"gJS" = (
@@ -16999,6 +18659,24 @@
"gLb" = (
/turf/closed/wall,
/area/station/medical/virology)
+"gLg" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/camera/autoname/directional/north,
+/obj/structure/cable,
+/obj/structure/sign/painting/large/library{
+ dir = 1
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
+"gLo" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"gLr" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -17038,6 +18716,29 @@
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron/smooth,
/area/station/command/bridge)
+"gLO" = (
+/obj/effect/turf_decal/plaque{
+ icon_state = "L11";
+ pixel_y = -15
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
+"gLV" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/spawner/random/trash,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"gLY" = (
/obj/effect/spawner/structure/window/reinforced/tinted,
/turf/open/floor/plating,
@@ -17088,6 +18789,20 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron,
/area/station/hallway/secondary/recreation)
+"gMM" = (
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/delivery/red,
+/obj/machinery/door/airlock/medical/glass{
+ id_tag = "MedbayFoyer";
+ name = "Medbay Clinic"
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "medlock";
+ name = "Lockdown Shutters"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/white/small,
+/area/station/medical/medbay/lobby)
"gMQ" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/displaycase/labcage,
@@ -17109,6 +18824,15 @@
},
/turf/open/floor/catwalk_floor/iron,
/area/station/science/xenobiology)
+"gMX" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"gNb" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
@@ -17145,6 +18869,17 @@
/obj/structure/cable,
/turf/open/floor/wood,
/area/station/engineering/atmos)
+"gNP" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"gNS" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{
@@ -17154,16 +18889,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/engineering/atmos/space_catwalk)
-"gNU" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 1
- },
-/turf/open/floor/iron/small,
-/area/station/hallway/primary/central/fore)
"gNV" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/stairs{
@@ -17173,6 +18898,13 @@
"gOm" = (
/turf/closed/wall/r_wall,
/area/station/ai_monitored/turret_protected/aisat/equipment)
+"gOt" = (
+/obj/structure/flora/tree/jungle/small/style_2,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"gOw" = (
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/obj/structure/chair{
@@ -17223,6 +18955,13 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/engine,
/area/station/engineering/atmos)
+"gPm" = (
+/obj/machinery/computer/monitor{
+ dir = 1
+ },
+/obj/machinery/computer/security/telescreen/minisat/directional/south,
+/turf/open/floor/iron/smooth,
+/area/station/ai_monitored/turret_protected/aisat/equipment)
"gPN" = (
/obj/structure/fermenting_barrel,
/turf/open/floor/plating,
@@ -17287,6 +19026,11 @@
/obj/structure/cable,
/turf/open/floor/iron/small,
/area/station/engineering/supermatter/room)
+"gRm" = (
+/obj/structure/flora/bush/flowers_br,
+/obj/structure/flora/bush/flowers_pp/style_random,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"gRp" = (
/obj/effect/mapping_helpers/airlock/access/all/security/general,
/obj/machinery/door/airlock/security{
@@ -17307,6 +19051,14 @@
/obj/machinery/light_switch/directional/east,
/turf/open/floor/iron/freezer,
/area/station/command/heads_quarters/captain/private)
+"gRH" = (
+/obj/machinery/button/door/directional/north{
+ id = "Cabin4";
+ name = "Cabin Bolt Control";
+ normaldoorcontrol = 1
+ },
+/turf/closed/wall,
+/area/station/service/abandoned_gambling_den)
"gRL" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -17379,18 +19131,6 @@
},
/turf/open/floor/plating,
/area/station/service/chapel/funeral)
-"gSQ" = (
-/obj/structure/table/glass,
-/obj/item/stock_parts/cell/high{
- pixel_x = 11;
- pixel_y = 6
- },
-/obj/item/folder/blue{
- pixel_x = -3;
- pixel_y = 2
- },
-/turf/open/floor/carpet/executive,
-/area/station/command/meeting_room)
"gSX" = (
/obj/machinery/computer/piratepad_control/civilian{
dir = 1
@@ -17474,15 +19214,6 @@
/obj/machinery/light/small/directional/north,
/turf/open/floor/iron/cafeteria,
/area/station/science/circuits)
-"gTV" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/machinery/power/apc/auto_name/directional/north,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"gTW" = (
/obj/machinery/door/airlock/hatch,
/turf/open/floor/iron,
@@ -17530,16 +19261,6 @@
/obj/item/kirbyplants/random,
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
-"gUo" = (
-/obj/structure/table/greyscale,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/wrench,
-/obj/item/multitool{
- pixel_x = 4;
- pixel_y = 5
- },
-/turf/open/floor/iron/grimy,
-/area/station/engineering/main)
"gUC" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -17553,6 +19274,11 @@
/obj/effect/turf_decal/tile/blue/half/contrasted,
/turf/open/floor/iron/white,
/area/station/security/medical)
+"gUN" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/structure/flora/tree/jungle/style_5,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"gUV" = (
/obj/structure/cable,
/obj/structure/chair/stool/directional/south{
@@ -17581,24 +19307,19 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/wood/large,
/area/station/command/corporate_suite)
-"gVq" = (
-/obj/structure/table/wood,
-/obj/machinery/firealarm/directional/east,
-/obj/item/gun/ballistic/shotgun/doublebarrel,
-/obj/item/holosign_creator/robot_seat/bar{
- pixel_x = 2;
- pixel_y = 9
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/camera/autoname/directional/south,
-/turf/open/floor/stone,
-/area/station/service/bar/backroom)
"gVA" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
/obj/effect/spawner/random/structure/grille,
/turf/open/floor/iron,
/area/station/maintenance/port/aft)
+"gVL" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/bush/sparsegrass,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"gVW" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/light/small/directional/east,
@@ -17679,11 +19400,6 @@
/obj/machinery/status_display/ai/directional/north,
/turf/open/floor/iron/cafeteria,
/area/station/science/breakroom)
-"gXD" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/machinery/computer/security/telescreen/entertainment/directional/north,
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"gXL" = (
/obj/structure/cable,
/obj/machinery/door/airlock{
@@ -17710,19 +19426,6 @@
},
/turf/open/floor/plating,
/area/station/hallway/secondary/construction)
-"gYg" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/wood{
- name = "Bar Backroom"
- },
-/obj/effect/mapping_helpers/airlock/access/all/service/bar,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/duct,
-/turf/open/floor/catwalk_floor/iron_smooth,
-/area/station/service/bar)
"gYq" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -17733,14 +19436,6 @@
/obj/machinery/vending/wardrobe/robo_wardrobe,
/turf/open/floor/catwalk_floor/flat_white,
/area/station/science/robotics/augments)
-"gYK" = (
-/obj/machinery/firealarm/directional/south,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
-"gYX" = (
-/turf/open/floor/iron/dark/small,
-/area/station/commons/vacant_room/commissary)
"gZf" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 4
@@ -17766,19 +19461,25 @@
/obj/structure/barricade/wooden,
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
-"gZo" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/structure/cable,
-/obj/machinery/duct,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/plating,
-/area/station/maintenance/central/lesser)
"gZt" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/security/checkpoint/escape)
+"gZy" = (
+/obj/structure/table,
+/obj/machinery/cell_charger{
+ pixel_y = 18
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_y = 18
+ },
+/obj/item/clothing/suit/hazardvest,
+/obj/effect/turf_decal/siding/thinplating_new/terracotta{
+ dir = 4
+ },
+/obj/machinery/firealarm/directional/west,
+/turf/open/floor/iron,
+/area/station/command/teleporter)
"gZM" = (
/obj/item/kirbyplants/random,
/obj/machinery/light/cold/directional/east,
@@ -17787,9 +19488,6 @@
dir = 4
},
/area/station/hallway/secondary/entry)
-"gZR" = (
-/turf/open/floor/stone,
-/area/station/service/bar/backroom)
"gZS" = (
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/west,
@@ -17838,6 +19536,14 @@
/obj/machinery/light/cold/directional/south,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/central)
+"haH" = (
+/obj/machinery/food_cart,
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
+/obj/effect/turf_decal/weather/snow,
+/turf/open/floor/iron/freezer,
+/area/station/service/kitchen/coldroom)
"haO" = (
/obj/effect/turf_decal/stripes/white/end,
/obj/machinery/door/poddoor/shutters{
@@ -18027,12 +19733,6 @@
/obj/effect/mapping_helpers/requests_console/assistance,
/turf/open/floor/iron/dark/small,
/area/station/ai_monitored/security/armory)
-"hcB" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"hcE" = (
/obj/effect/turf_decal/siding/thinplating_new/terracotta{
dir = 1
@@ -18122,6 +19822,18 @@
},
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/command/bridge)
+"hdI" = (
+/obj/structure/table/wood,
+/obj/item/pai_card,
+/obj/item/storage/crayons,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/firealarm/directional/north,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"hdQ" = (
/obj/effect/turf_decal/tile/yellow/half/contrasted{
dir = 4
@@ -18138,15 +19850,23 @@
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
-"hee" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 9
+"hdW" = (
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/machinery/camera/autoname/directional/east,
+/obj/effect/spawner/random/entertainment/arcade{
+ dir = 8
},
-/obj/item/storage/fancy/candle_box,
-/obj/machinery/light_switch/directional/west,
-/obj/structure/rack/skeletal,
-/turf/open/floor/iron/grimy,
-/area/station/service/library)
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/eighties/red,
+/area/station/hallway/primary/central/fore)
+"hdZ" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/station/maintenance/central/lesser)
"hei" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -18237,6 +19957,12 @@
},
/turf/open/floor/iron,
/area/station/science/ordnance/testlab)
+"heY" = (
+/obj/effect/turf_decal/tile/dark_red/opposingcorners,
+/obj/machinery/computer/security,
+/obj/machinery/computer/security/telescreen/prison/directional/north,
+/turf/open/floor/iron,
+/area/station/security/warden)
"hfc" = (
/obj/structure/rack,
/obj/effect/spawner/random/maintenance/three,
@@ -18267,23 +19993,6 @@
dir = 4
},
/area/station/commons/storage/tools)
-"hgb" = (
-/obj/structure/table,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/trash/can/food/pine_nuts{
- pixel_x = 16;
- pixel_y = 6
- },
-/obj/machinery/cell_charger{
- pixel_x = -1;
- pixel_y = 2
- },
-/obj/item/stock_parts/cell/high{
- pixel_x = -1;
- pixel_y = 1
- },
-/turf/open/floor/iron/dark,
-/area/station/commons/storage/tools)
"hgd" = (
/obj/structure/table,
/obj/item/clothing/head/collectable/paper{
@@ -18335,11 +20044,6 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron/smooth,
/area/station/engineering/main)
-"hgE" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"hgF" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -18463,6 +20167,22 @@
},
/turf/open/floor/iron/small,
/area/station/security/office)
+"hiD" = (
+/obj/machinery/door/airlock/multi_tile/public{
+ dir = 1
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/iron/textured_half,
+/area/station/service/bar)
+"hiK" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"hiU" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
@@ -18585,12 +20305,6 @@
/obj/structure/cable,
/turf/open/floor/iron/smooth,
/area/station/engineering/main)
-"hkJ" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/turf/open/floor/iron/dark/small,
-/area/station/service/chapel/storage)
"hkL" = (
/obj/structure/cable,
/turf/open/floor/wood/large,
@@ -18620,12 +20334,14 @@
/obj/machinery/status_display/ai/directional/west,
/turf/open/floor/iron/dark/herringbone,
/area/station/ai_monitored/command/nuke_storage)
-"hlo" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/machinery/camera/autoname/directional/north,
-/obj/machinery/light/cold/directional/north,
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
+"hla" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Public Shrine"
+ },
+/obj/effect/turf_decal/siding/wood/end,
+/obj/machinery/door/firedoor,
+/turf/open/floor/stone,
+/area/station/hallway/primary/port)
"hlE" = (
/obj/effect/turf_decal/siding/wideplating/dark{
dir = 4
@@ -18718,6 +20434,13 @@
},
/turf/open/floor/iron/dark,
/area/station/engineering/atmospherics_engine)
+"hmC" = (
+/obj/effect/turf_decal/siding/wood/corner,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"hmQ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/table,
@@ -18750,6 +20473,13 @@
},
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
+"hnn" = (
+/obj/effect/turf_decal/tile/brown/opposingcorners{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"hnG" = (
/obj/machinery/atmospherics/components/unary/thermomachine/heater/on{
dir = 8;
@@ -18801,6 +20531,16 @@
},
/turf/open/floor/plating,
/area/station/engineering/gravity_generator)
+"hoc" = (
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/item/radio/intercom/directional/west,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"hok" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -18840,21 +20580,6 @@
/obj/structure/flora/bush/flowers_pp/style_random,
/turf/open/misc/sandy_dirt,
/area/station/medical/medbay/lobby)
-"hoU" = (
-/obj/structure/disposalpipe/trunk{
- dir = 8
- },
-/obj/effect/turf_decal/tile/red/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
- },
-/obj/machinery/disposal/bin,
-/obj/machinery/light_switch/directional/south,
-/obj/machinery/camera/directional/south{
- c_tag = "Atmospherics - South"
- },
-/turf/open/floor/iron/smooth,
-/area/station/service/greenroom)
"hoV" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -18899,13 +20624,6 @@
/obj/effect/turf_decal/siding,
/turf/open/floor/iron/white,
/area/station/science/cytology)
-"hpP" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 6
- },
-/obj/structure/flora/tree/jungle/small/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"hpQ" = (
/obj/structure/closet/crate/coffin,
/obj/structure/window/spawner/directional/south,
@@ -18996,6 +20714,10 @@
},
/turf/open/floor/plating,
/area/station/maintenance/hallway/abandoned_command)
+"hrc" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"hrx" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -19080,6 +20802,11 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/small,
/area/station/engineering/break_room)
+"hsx" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/light/floor,
+/turf/open/floor/stone,
+/area/station/service/bar)
"hsy" = (
/obj/structure/railing/corner{
dir = 4
@@ -19132,26 +20859,6 @@
"htp" = (
/turf/closed/wall,
/area/station/service/barber)
-"htt" = (
-/obj/effect/mapping_helpers/broken_floor,
-/obj/structure/table/wood,
-/obj/machinery/light/small/built/directional/north,
-/obj/item/stack/sheet/iron/ten,
-/obj/effect/turf_decal/siding/wideplating_new/terracotta{
- dir = 9
- },
-/turf/open/floor/wood/tile,
-/area/station/commons/vacant_room/commissary)
-"htI" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock{
- name = "Backstage Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/all/service/theatre,
-/turf/open/floor/stone,
-/area/station/maintenance/central/greater)
"htM" = (
/obj/effect/turf_decal/tile/dark_red{
dir = 4
@@ -19192,19 +20899,6 @@
dir = 8
},
/area/station/engineering/supermatter/room)
-"htV" = (
-/obj/structure/disposalpipe/sorting/mail{
- dir = 1
- },
-/obj/effect/turf_decal/tile/dark_red/half/contrasted{
- dir = 4
- },
-/obj/effect/mapping_helpers/mail_sorting/security/general,
-/obj/effect/turf_decal/siding/wideplating/dark/corner{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/security)
"hua" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -19223,6 +20917,17 @@
/obj/structure/sign/poster/official/random/directional/west,
/turf/open/floor/iron/smooth,
/area/station/commons/storage/tools)
+"huj" = (
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"hur" = (
/obj/structure/table/glass,
/obj/item/storage/briefcase/secure,
@@ -19284,12 +20989,6 @@
/obj/machinery/light/small/directional/north,
/turf/open/floor/grass,
/area/station/medical/virology)
-"hvM" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"hvT" = (
/obj/structure/railing,
/obj/effect/decal/cleanable/dirt/dust,
@@ -19327,12 +21026,6 @@
},
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
-"hwe" = (
-/obj/machinery/hydroponics/constructable,
-/obj/effect/turf_decal/tile/blue/half,
-/obj/structure/sign/poster/official/random/directional/north,
-/turf/open/floor/iron/white/small,
-/area/station/service/hydroponics)
"hwh" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
@@ -19392,13 +21085,6 @@
"hwJ" = (
/turf/closed/wall/rust,
/area/space/nearstation)
-"hwN" = (
-/obj/effect/turf_decal/tile/yellow/half/contrasted{
- dir = 8
- },
-/obj/machinery/chem_heater/withbuffer,
-/turf/open/floor/iron/white,
-/area/station/maintenance/central/greater)
"hwZ" = (
/obj/structure/chair/bronze{
dir = 8
@@ -19486,26 +21172,6 @@
/obj/machinery/digital_clock/directional/north,
/turf/open/floor/iron,
/area/station/security/execution/transfer)
-"hyl" = (
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/red/line,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/small,
-/area/station/hallway/secondary/spacebridge)
-"hym" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/structure/table,
-/obj/item/trash/cnds,
-/obj/item/radio/intercom/directional/west,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"hyv" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -19539,6 +21205,16 @@
/obj/structure/steam_vent,
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
+"hyW" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/obj/structure/flora/bush/flowers_pp/style_random,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"hyX" = (
/obj/structure/window/spawner/directional/north,
/obj/machinery/hydroponics/soil,
@@ -19557,6 +21233,17 @@
"hzm" = (
/turf/closed/wall/rust,
/area/station/cargo/miningoffice)
+"hzp" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"hzK" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
@@ -19573,28 +21260,6 @@
/obj/effect/mapping_helpers/airlock/access/all/supply/mining,
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/cargo/miningoffice)
-"hzY" = (
-/obj/structure/cable,
-/obj/machinery/light/directional/east,
-/obj/item/radio/intercom/directional/east,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
-"hAd" = (
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/obj/structure/reagent_dispensers/watertank/high,
-/obj/item/reagent_containers/cup/watering_can,
-/obj/machinery/light/small/directional/west,
-/obj/item/radio/intercom/directional/north,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"hAu" = (
/obj/machinery/door/airlock{
name = "Maintenance"
@@ -19603,6 +21268,12 @@
/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
+"hAB" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 10
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"hAC" = (
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron/dark/small,
@@ -19627,18 +21298,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/maintenance/department/engine/atmos)
-"hAQ" = (
-/obj/structure/table,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/item/clothing/mask/breath{
- pixel_x = 15;
- pixel_y = 5
- },
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/iron/smooth,
-/area/station/command/gateway)
"hAW" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -19656,19 +21315,6 @@
/obj/item/radio/intercom/directional/north,
/turf/open/floor/plating,
/area/station/commons/storage/tools)
-"hBr" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/table/reinforced,
-/obj/machinery/door/poddoor/shutters/preopen{
- dir = 4;
- id = "kitchenshutters";
- name = "Kitchen Shutters"
- },
-/obj/item/plate,
-/obj/item/food/sandwich/peanut_butter_jelly,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"hBt" = (
/obj/effect/turf_decal/trimline/neutral/line{
dir = 8
@@ -19688,17 +21334,6 @@
},
/turf/open/floor/plating,
/area/station/command/heads_quarters/cmo)
-"hBK" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/red/line{
- dir = 4
- },
-/turf/open/floor/iron/small,
-/area/station/hallway/primary/central/fore)
"hBR" = (
/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{
dir = 4
@@ -19721,6 +21356,17 @@
/obj/machinery/airalarm/directional/west,
/turf/open/floor/iron,
/area/station/maintenance/hallway/abandoned_command)
+"hCd" = (
+/obj/effect/turf_decal/tile/dark_red/half/contrasted{
+ dir = 4
+ },
+/mob/living/simple_animal/bot/secbot/beepsky/officer,
+/obj/effect/turf_decal/siding/wideplating/dark/corner{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/security)
"hCl" = (
/obj/machinery/firealarm/directional/south,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -19794,11 +21440,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/diagonal,
/area/station/engineering/lobby)
-"hDm" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/structure/chair/stool/bar/directional/north,
-/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
"hDt" = (
/obj/structure/toilet{
pixel_y = 8
@@ -19873,6 +21514,22 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/smooth,
/area/station/engineering/engine_smes)
+"hEu" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
+"hEw" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/machinery/light/small/directional/east,
+/obj/structure/chair/stool/bar/directional/north,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"hED" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -19880,6 +21537,9 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/smooth,
/area/station/hallway/secondary/command)
+"hEJ" = (
+/turf/open/floor/iron/smooth,
+/area/station/service/library)
"hFb" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -19954,6 +21614,10 @@
},
/turf/open/floor/wood,
/area/station/engineering/main)
+"hGr" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/station/tcommsat/server)
"hGt" = (
/obj/effect/turf_decal/tile/blue{
dir = 1
@@ -19976,6 +21640,32 @@
/obj/structure/sign/departments/telecomms/directional/south,
/turf/open/floor/iron,
/area/station/science/lobby)
+"hHj" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/sorting/mail{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/mail_sorting/service/bar,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
+"hHn" = (
+/obj/effect/turf_decal/weather/snow,
+/obj/structure/closet/secure_closet/freezer/fridge,
+/obj/effect/turf_decal/weather/snow/corner,
+/obj/item/food/meat/bacon,
+/obj/item/food/meat/bacon,
+/obj/item/food/meat/slab/monkey,
+/obj/item/food/meat/slab/monkey,
+/obj/item/food/meat/slab/monkey,
+/turf/open/floor/iron/freezer,
+/area/station/service/kitchen/coldroom)
+"hHy" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"hHE" = (
/obj/effect/turf_decal/bot_white,
/turf/open/floor/engine,
@@ -20008,6 +21698,12 @@
},
/turf/open/floor/iron/smooth,
/area/station/command/gateway)
+"hIm" = (
+/obj/machinery/libraryscanner,
+/obj/machinery/camera/autoname/directional/north,
+/obj/machinery/airalarm/directional/north,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"hIE" = (
/obj/structure/table/glass,
/obj/machinery/light/small/directional/east,
@@ -20121,9 +21817,21 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark/small,
/area/station/security/detectives_office)
+"hKV" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"hKX" = (
/turf/closed/mineral/random/stationside,
/area/station/hallway/primary/fore)
+"hKZ" = (
+/obj/structure/flora/bush/jungle/a/style_random,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"hLa" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -20132,6 +21840,10 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/aft)
+"hLb" = (
+/obj/machinery/holopad,
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"hLc" = (
/turf/open/floor/plating,
/area/station/science/xenobiology)
@@ -20214,10 +21926,6 @@
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/iron,
/area/station/security/lockers)
-"hMz" = (
-/obj/machinery/computer/order_console/cook,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
"hMA" = (
/obj/machinery/status_display/ai/directional/east,
/turf/open/floor/iron,
@@ -20228,11 +21936,25 @@
/obj/machinery/light/cold/directional/west,
/turf/open/floor/iron/smooth,
/area/station/command/bridge)
+"hML" = (
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/glass,
+/area/station/hallway/primary/central/aft)
"hNb" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron,
/area/station/cargo/miningoffice)
+"hNj" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/dark_red/half/contrasted,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"hNo" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -20269,13 +21991,6 @@
},
/turf/open/floor/iron/dark,
/area/station/security/office)
-"hNT" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 10
- },
-/obj/structure/flora/bush/flowers_br/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"hNU" = (
/obj/structure/table/reinforced,
/obj/structure/spider/stickyweb,
@@ -20320,6 +22035,16 @@
dir = 1
},
/area/station/security/execution/transfer)
+"hOO" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/obj/structure/flora/bush/large/style_random,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"hOX" = (
/obj/item/chair,
/obj/effect/decal/cleanable/dirt/dust,
@@ -20330,6 +22055,15 @@
/obj/structure/sign/poster/contraband/random/directional/north,
/turf/open/floor/carpet/lone,
/area/station/service/abandoned_gambling_den)
+"hPb" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/rack,
+/obj/effect/spawner/random/maintenance,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"hPd" = (
/obj/structure/hedge,
/obj/effect/turf_decal/tile/brown{
@@ -20395,6 +22129,16 @@
/obj/machinery/firealarm/directional/north,
/turf/open/floor/circuit,
/area/station/tcommsat/server)
+"hQx" = (
+/obj/effect/turf_decal/siding/wideplating/dark/corner,
+/obj/effect/turf_decal/tile/dark_red/half/contrasted{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"hQz" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/line,
@@ -20557,6 +22301,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/grimy,
/area/station/engineering/main)
+"hUj" = (
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"hUq" = (
/obj/structure/table/glass,
/turf/open/floor/iron/smooth,
@@ -20650,6 +22398,13 @@
},
/turf/open/floor/plating,
/area/station/maintenance/fore/lesser)
+"hVO" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/machinery/light/small/directional/south,
+/obj/item/radio/intercom/directional/south,
+/obj/structure/flora/bush/flowers_yw,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"hVX" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/tile/neutral{
@@ -20674,6 +22429,13 @@
/obj/structure/extinguisher_cabinet/directional/south,
/turf/open/floor/iron,
/area/station/commons/fitness/locker_room)
+"hWm" = (
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"hWu" = (
/obj/machinery/door/airlock/medical{
name = "CMO Bedroom"
@@ -20695,6 +22457,15 @@
},
/turf/open/floor/iron/showroomfloor,
/area/station/commons/toilet/auxiliary)
+"hWG" = (
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"hWJ" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -20704,11 +22475,6 @@
/obj/machinery/camera/autoname/directional/west,
/turf/open/floor/iron,
/area/station/security)
-"hWQ" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
"hWU" = (
/obj/machinery/door/airlock{
name = "Maintenance"
@@ -20772,13 +22538,13 @@
/obj/effect/landmark/navigate_destination/research,
/turf/open/floor/iron/white,
/area/station/hallway/primary/starboard)
-"hYm" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/light/floor,
-/turf/open/floor/iron/large,
-/area/station/hallway/secondary/spacebridge)
+"hYh" = (
+/obj/structure/flora/bush/jungle/c/style_3,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"hYn" = (
/obj/effect/spawner/random/structure/crate,
/turf/open/floor/plating,
@@ -20997,6 +22763,13 @@
/obj/effect/spawner/random/engineering/atmospherics_portable,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
+"ibF" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"ibI" = (
/obj/effect/turf_decal/siding/white/corner{
dir = 8
@@ -21031,6 +22804,18 @@
},
/turf/open/floor/wood,
/area/station/hallway/secondary/entry)
+"icN" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 8
+ },
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"icT" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -21084,6 +22869,20 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
+"ids" = (
+/obj/effect/turf_decal/tile/brown/opposingcorners{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/button/door/directional/north{
+ name = "Door Bolt Control";
+ id = "commiss2";
+ normaldoorcontrol = 1;
+ specialfunctions = 4
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"idt" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -21180,6 +22979,28 @@
/obj/machinery/light/dim/directional/north,
/turf/open/floor/iron/white,
/area/station/science/cytology)
+"ifl" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/spawner/random/trash,
+/turf/open/floor/iron/stairs{
+ dir = 8
+ },
+/area/station/maintenance/port/greater)
+"ifH" = (
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/aft)
"ifI" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/effect/turf_decal/stripes/line{
@@ -21237,6 +23058,10 @@
/obj/effect/spawner/random/structure/girder,
/turf/open/floor/tram,
/area/station/maintenance/department/medical/central)
+"ihb" = (
+/obj/effect/spawner/random/trash,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"ihc" = (
/obj/structure/cable,
/obj/machinery/door/airlock/command/glass{
@@ -21246,6 +23071,12 @@
/obj/effect/mapping_helpers/airlock/access/all/command/teleporter,
/turf/open/floor/iron/dark/textured_half,
/area/station/command/teleporter)
+"ihd" = (
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/lobby)
"ihh" = (
/obj/effect/turf_decal/sand/plating,
/obj/effect/decal/cleanable/dirt,
@@ -21274,11 +23105,6 @@
/obj/machinery/firealarm/directional/west,
/turf/open/floor/carpet/royalblue,
/area/station/command/heads_quarters/captain)
-"iho" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/closed/wall,
-/area/station/hallway/secondary/spacebridge)
"ihq" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -21361,6 +23187,15 @@
},
/turf/open/space/basic,
/area/space)
+"iiI" = (
+/obj/structure/table/reinforced,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/poddoor/shutters{
+ id = "meow";
+ name = "Commissary"
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"iiW" = (
/obj/structure/cable,
/turf/open/floor/catwalk_floor/iron_dark,
@@ -21374,17 +23209,6 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
-"ijm" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/machinery/light/cold/directional/north,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"ijn" = (
/obj/effect/turf_decal/siding/purple{
dir = 5
@@ -21520,27 +23344,32 @@
},
/turf/open/space/basic,
/area/station/engineering/atmos/space_catwalk)
-"ild" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/sorting/mail/flip{
+"ile" = (
+/obj/structure/chair{
dir = 1
},
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/dark_red/half/contrasted{
- dir = 4
- },
-/obj/effect/mapping_helpers/mail_sorting/security/hos_office,
-/obj/effect/turf_decal/siding/wideplating/dark{
- dir = 8
+/obj/structure/disposalpipe/segment{
+ dir = 5
},
-/turf/open/floor/iron,
-/area/station/security)
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/lobby)
"ill" = (
/obj/structure/frame/machine,
/obj/item/circuitboard/computer/security,
/turf/open/floor/plating,
/area/station/maintenance/fore/lesser)
+"ilo" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/spawner/random/trash,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"ilw" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -21548,6 +23377,17 @@
dir = 4
},
/area/station/science/research)
+"ilx" = (
+/obj/effect/turf_decal/delivery,
+/obj/effect/turf_decal/stripes/end{
+ dir = 1
+ },
+/obj/structure/window/reinforced/spawner/directional/east,
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 4
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"ilz" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/decal/cleanable/dirt/dust,
@@ -21613,6 +23453,11 @@
/obj/structure/table,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
+"ind" = (
+/obj/machinery/light/floor,
+/obj/structure/flora/bush/flowers_br,
+/turf/open/floor/grass,
+/area/station/hallway/primary/central/fore)
"inh" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/trimline/neutral/line{
@@ -21636,6 +23481,18 @@
/obj/effect/landmark/start/shaft_miner,
/turf/open/floor/iron,
/area/station/cargo/miningoffice)
+"inU" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/white/side,
+/area/station/hallway/primary/central/aft)
+"ioa" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"iob" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -21768,10 +23625,6 @@
dir = 8
},
/area/station/command/bridge)
-"ipt" = (
-/obj/effect/spawner/random/engineering/atmospherics_portable,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"ipx" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -21800,6 +23653,12 @@
/obj/machinery/airalarm/directional/south,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/lobby)
+"ipG" = (
+/obj/machinery/deepfryer,
+/obj/structure/sign/poster/official/random/directional/north,
+/obj/structure/cable,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"ipP" = (
/obj/effect/turf_decal/bot_white,
/obj/effect/turf_decal/stripes/corner{
@@ -21887,16 +23746,6 @@
/obj/machinery/airalarm/directional/west,
/turf/open/floor/iron/dark,
/area/station/security/interrogation)
-"iqN" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/camera/autoname/directional/west,
-/obj/machinery/firealarm/directional/west,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"iqY" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 1;
@@ -22039,6 +23888,19 @@
},
/turf/closed/wall,
/area/station/hallway/primary/port)
+"isO" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/structure/extinguisher_cabinet/directional/west,
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 8
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"isQ" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -22132,11 +23994,18 @@
/obj/effect/mapping_helpers/airlock/access/all/science/research,
/turf/open/floor/plating,
/area/station/maintenance/starboard/aft)
-"iuL" = (
-/obj/machinery/vending/games,
-/obj/effect/mapping_helpers/broken_floor,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
+"iuF" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/light_switch/directional/north,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/station/cargo/boutique)
+"iuR" = (
+/turf/closed/wall/r_wall,
+/area/station/hallway/primary/central/aft)
"iuW" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/small/directional/west,
@@ -22152,6 +24021,17 @@
/obj/item/melee/baseball_bat,
/turf/open/floor/wood,
/area/station/maintenance/starboard/greater)
+"ivh" = (
+/obj/structure/cable,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/spawner/random/trash,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"ivk" = (
/obj/machinery/atmospherics/components/tank/air{
dir = 8
@@ -22210,20 +24090,6 @@
/obj/machinery/light/cold/directional/east,
/turf/open/floor/iron,
/area/station/engineering/storage/tech)
-"iwa" = (
-/obj/effect/turf_decal/siding/thinplating_new/light{
- dir = 4
- },
-/obj/effect/turf_decal/siding/thinplating_new/light{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"iwi" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -22235,35 +24101,16 @@
},
/turf/open/space/basic,
/area/station/engineering/atmos/space_catwalk)
+"iwt" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"iwz" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/smooth,
/area/station/engineering/break_room)
-"iwJ" = (
-/obj/structure/table/wood,
-/obj/machinery/light/small/directional/south,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for monitoring the engine.";
- dir = 4;
- name = "Engine Monitor";
- network = list("engine");
- pixel_x = -32
- },
-/obj/machinery/status_display/evac/directional/south,
-/obj/item/radio/off{
- pixel_x = 1;
- pixel_y = 3
- },
-/turf/open/floor/wood,
-/area/station/command/heads_quarters/ce)
-"iwZ" = (
-/obj/structure/disposalpipe/junction/flip{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"ixl" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -22349,6 +24196,16 @@
},
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/ai)
+"iyr" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 8
+ },
+/obj/machinery/light/cold/directional/north,
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron/dark/side{
+ dir = 9
+ },
+/area/station/science/ordnance/testlab)
"iyt" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -22369,6 +24226,12 @@
/obj/item/radio/intercom/directional/east,
/turf/open/floor/iron/dark,
/area/station/science/genetics)
+"iyR" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"izh" = (
/obj/item/shovel,
/turf/open/floor/plating,
@@ -22386,19 +24249,16 @@
},
/turf/open/floor/engine/co2,
/area/station/engineering/atmos/space_catwalk)
-"izw" = (
-/obj/machinery/transport/tram_controller/tcomms{
- configured_transport_id = "bird_2"
+"izo" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/airlock/grunge{
+ name = "Vacant Comissary"
},
-/turf/open/floor/circuit,
-/area/station/tcommsat/server)
-"izB" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/sign/painting/library{
- pixel_y = 32
+/turf/open/floor/iron/textured_half{
+ dir = 1
},
-/turf/open/floor/iron/smooth,
-/area/station/service/library)
+/area/station/maintenance/central/lesser)
"izD" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -22444,7 +24304,7 @@
name = "Cabin Bolt Control";
normaldoorcontrol = 1;
specialfunctions = 4;
- id = "Cabin4"
+ id = "Cabin1"
},
/turf/open/floor/carpet/orange,
/area/station/commons/dorms)
@@ -22517,6 +24377,14 @@
},
/turf/open/floor/iron/white,
/area/station/security/medical)
+"iBa" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/chair/wood{
+ dir = 4
+ },
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"iBc" = (
/obj/effect/turf_decal/siding/thinplating_new/terracotta{
dir = 5
@@ -22524,11 +24392,6 @@
/obj/machinery/power/shieldwallgen,
/turf/open/floor/iron/smooth_large,
/area/station/command/teleporter)
-"iBg" = (
-/obj/structure/table,
-/obj/item/trash/candle,
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
"iBj" = (
/obj/structure/table/glass,
/obj/item/folder/red{
@@ -22582,6 +24445,22 @@
},
/turf/open/floor/carpet/royalblue,
/area/station/command/heads_quarters/captain)
+"iCi" = (
+/obj/machinery/computer/security/telescreen/isolation/directional/north{
+ name = "reflection room monitor"
+ },
+/obj/effect/turf_decal/stripes/white/corner{
+ dir = 1
+ },
+/obj/item/kirbyplants/random,
+/obj/machinery/firealarm/directional/east,
+/obj/machinery/button/flasher{
+ id = "IsolationFlash";
+ pixel_x = 28;
+ pixel_y = 28
+ },
+/turf/open/floor/iron/dark/small,
+/area/station/security/execution/education)
"iCj" = (
/obj/effect/turf_decal/stripes/red/line{
dir = 4
@@ -22706,17 +24585,6 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/engine,
/area/station/science/explab)
-"iEE" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 8
- },
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"iEG" = (
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/iron/dark/side{
@@ -22743,20 +24611,6 @@
/obj/machinery/power/apc/auto_name/directional/east,
/turf/open/floor/wood/large,
/area/station/command/corporate_suite)
-"iEX" = (
-/obj/structure/disposalpipe/trunk{
- dir = 1
- },
-/obj/structure/window/spawner/directional/north,
-/obj/effect/turf_decal/stripes/end{
- dir = 8
- },
-/obj/structure/disposaloutlet{
- dir = 4;
- name = "Cargo Deliveries"
- },
-/turf/open/floor/plating,
-/area/station/hallway/secondary/service)
"iFb" = (
/obj/effect/turf_decal/tile/blue,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
@@ -22776,6 +24630,16 @@
/obj/structure/window/spawner/directional/east,
/turf/open/misc/sandy_dirt,
/area/station/medical/medbay/lobby)
+"iFD" = (
+/obj/effect/turf_decal/plaque{
+ icon_state = "L5";
+ pixel_y = -15
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"iFE" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/structure/chair/office{
@@ -22809,6 +24673,10 @@
},
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/maintenance/solars/port/aft)
+"iGq" = (
+/obj/effect/landmark/start/librarian,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"iGt" = (
/obj/structure/cable,
/obj/machinery/duct,
@@ -22825,11 +24693,43 @@
/obj/structure/chair/stool/directional/east,
/turf/open/floor/iron/cafeteria,
/area/station/security/prison/mess)
+"iGM" = (
+/obj/effect/turf_decal/bot,
+/obj/machinery/light/cold/dim/directional/east,
+/obj/machinery/newscaster/directional/east,
+/obj/structure/cable,
+/obj/structure/table/reinforced,
+/obj/item/paper_bin{
+ pixel_x = 5;
+ pixel_y = 19
+ },
+/obj/item/pen{
+ pixel_x = 5;
+ pixel_y = 20
+ },
+/obj/machinery/cell_charger{
+ pixel_x = 2;
+ pixel_y = 1
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/turf/open/floor/iron/smooth,
+/area/station/engineering/break_room)
"iGO" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/broken_flooring/pile/directional/east,
/turf/open/floor/plating,
/area/station/maintenance/starboard/aft)
+"iGS" = (
+/obj/effect/turf_decal/tile/brown/opposingcorners{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"iHg" = (
/obj/structure/cable,
/obj/machinery/door/airlock/maintenance/external{
@@ -22839,6 +24739,22 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/station/maintenance/fore/lesser)
+"iHq" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/dark_red/opposingcorners,
+/obj/machinery/camera/autoname/directional/west,
+/obj/machinery/light/small/directional/west,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
+"iHv" = (
+/obj/structure/table,
+/obj/machinery/computer/security/telescreen/ordnance/directional/north,
+/turf/open/floor/iron/dark/side{
+ dir = 1
+ },
+/area/station/science/ordnance/testlab)
"iHw" = (
/obj/effect/spawner/random/structure/barricade,
/turf/open/floor/plating,
@@ -22847,12 +24763,6 @@
/obj/machinery/airalarm/directional/east,
/turf/open/floor/stone,
/area/station/service/abandoned_gambling_den)
-"iHL" = (
-/obj/structure/bookcase/random,
-/obj/machinery/camera/autoname/directional/south,
-/obj/machinery/airalarm/directional/south,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"iHM" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -22861,6 +24771,13 @@
dir = 1
},
/area/station/science/lower)
+"iHT" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"iIs" = (
/obj/effect/turf_decal/tile/neutral{
dir = 4
@@ -22892,6 +24809,22 @@
},
/turf/open/floor/iron/dark/textured_edge,
/area/station/command/heads_quarters/hop)
+"iIK" = (
+/obj/effect/turf_decal/bot,
+/obj/structure/rack,
+/obj/item/stack/sheet/plasteel/fifty,
+/obj/item/stack/sheet/plastic/five,
+/obj/item/stack/sheet/rglass/fifty,
+/obj/item/storage/medkit/fire{
+ pixel_x = 1;
+ pixel_y = 4
+ },
+/obj/machinery/airalarm/directional/east,
+/obj/item/stock_parts/power_store/cell/emproof{
+ pixel_y = 9
+ },
+/turf/open/floor/iron/small,
+/area/station/engineering/break_room)
"iIN" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -22908,6 +24841,12 @@
},
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/escape)
+"iIU" = (
+/obj/machinery/vending/wardrobe/det_wardrobe,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/security/telescreen/normal/directional/west,
+/turf/open/floor/wood,
+/area/station/security/detectives_office)
"iIW" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -23028,9 +24967,6 @@
/obj/structure/sign/warning/no_smoking/circle/directional/north,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
-"iJN" = (
-/turf/open/floor/iron/grimy,
-/area/station/service/library)
"iJO" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
@@ -23095,6 +25031,10 @@
/obj/effect/turf_decal/siding/red,
/turf/open/floor/iron/white/small,
/area/station/security/warden)
+"iLh" = (
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/iron/smooth,
+/area/station/service/library)
"iLp" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -23107,10 +25047,19 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
-"iLq" = (
-/obj/structure/cable,
-/turf/open/floor/iron/dark/small,
-/area/station/commons/vacant_room/commissary)
+"iLA" = (
+/obj/structure/closet/firecloset,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 4
+ },
+/obj/item/radio/intercom/directional/west,
+/turf/open/floor/iron/dark/side{
+ dir = 8
+ },
+/area/station/hallway/primary/central/fore)
"iLC" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -23130,14 +25079,17 @@
dir = 8
},
/area/station/hallway/primary/central/fore)
-"iLK" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+"iLH" = (
+/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
+/obj/machinery/door/airlock/maintenance{
+ name = "Maintenance"
},
-/obj/structure/sign/departments/holy/directional/north,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
+/obj/structure/cable,
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"iLN" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -23157,6 +25109,12 @@
/obj/machinery/recharge_station,
/turf/open/floor/plating,
/area/station/maintenance/department/bridge)
+"iLZ" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/circuit,
+/area/station/maintenance/port/aft)
"iMg" = (
/obj/structure/closet/crate,
/obj/effect/turf_decal/stripes/line{
@@ -23244,11 +25202,31 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
+"iNC" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/exit/departure_lounge)
"iNE" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/spawner/random/vending/snackvend,
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
+"iNF" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"iNO" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 6
@@ -23427,10 +25405,20 @@
/obj/structure/curtain,
/turf/open/floor/iron/freezer,
/area/station/command/heads_quarters/captain/private)
+"iQe" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"iQl" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/maintenance/hallway/abandoned_command)
+"iQp" = (
+/obj/structure/flora/bush/sparsegrass,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"iQr" = (
/obj/effect/turf_decal/tile/brown{
dir = 1
@@ -23538,6 +25526,9 @@
"iSr" = (
/turf/open/floor/iron,
/area/station/security/execution/transfer)
+"iSD" = (
+/turf/open/misc/dirt/jungle,
+/area/station/service/chapel)
"iSE" = (
/obj/machinery/atmospherics/pipe/layer_manifold/cyan/visible,
/obj/effect/landmark/start/atmospheric_technician,
@@ -23636,6 +25627,26 @@
/obj/item/crowbar/large/old,
/turf/open/floor/plating,
/area/station/maintenance/hallway/abandoned_command)
+"iUh" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
+"iUH" = (
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/camera/autoname/directional/south,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"iUK" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 8
@@ -23717,6 +25728,23 @@
},
/turf/open/floor/plating,
/area/station/cargo/miningoffice)
+"iVP" = (
+/obj/structure/rack,
+/obj/effect/turf_decal/tile/brown/opposingcorners{
+ dir = 1
+ },
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = 2;
+ pixel_y = 3
+ },
+/obj/item/storage/toolbox/electrical{
+ pixel_x = 4;
+ pixel_y = 6
+ },
+/obj/item/clothing/head/utility/welding,
+/obj/structure/extinguisher_cabinet/directional/west,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"iVT" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -23846,6 +25874,12 @@
dir = 8
},
/area/station/engineering/supermatter/room)
+"iXi" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/closed/wall/r_wall,
+/area/station/hallway/primary/central/aft)
"iXm" = (
/obj/structure/cable,
/obj/structure/disposalpipe/sorting/mail/flip{
@@ -23884,6 +25918,36 @@
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/iron/dark,
/area/station/science/server)
+"iXW" = (
+/obj/structure/sign/poster/official/random/directional/north,
+/obj/structure/table/wood,
+/obj/item/gun/ballistic/shotgun/doublebarrel,
+/obj/structure/reagent_dispensers/beerkeg,
+/obj/structure/reagent_dispensers/beerkeg{
+ pixel_y = 5
+ },
+/obj/machinery/camera/autoname/directional/north,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/floor/stone,
+/area/station/service/bar/backroom)
+"iXZ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/junction/flip{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
+"iYd" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/grimy,
+/area/station/service/library)
"iYh" = (
/obj/structure/fluff/broken_canister_frame,
/turf/open/floor/plating,
@@ -23924,15 +25988,6 @@
/obj/structure/cable,
/turf/open/floor/iron/small,
/area/station/security/processing)
-"iZc" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/chair/office{
- dir = 4
- },
-/obj/machinery/holopad,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"iZu" = (
/obj/effect/turf_decal/tile/neutral/full,
/obj/item/kirbyplants/random,
@@ -23971,16 +26026,6 @@
/obj/effect/spawner/random/food_or_drink/seed,
/turf/open/misc/sandy_dirt,
/area/station/maintenance/starboard/aft)
-"iZI" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/neutral/full,
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"iZK" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -23998,12 +26043,28 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
+"iZM" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/structure/cable,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"iZU" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/light/directional/east,
/turf/open/floor/wood/large,
/area/station/command/heads_quarters/captain)
+"iZW" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"jad" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -24074,20 +26135,6 @@
"jaQ" = (
/turf/open/floor/catwalk_floor/iron_dark,
/area/station/security/processing)
-"jbc" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/table/reinforced,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high{
- pixel_x = 4;
- pixel_y = 5
- },
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/iron/dark,
-/area/station/science/robotics/lab)
"jbd" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -24124,11 +26171,23 @@
},
/turf/open/floor/tram,
/area/station/maintenance/department/medical/central)
-"jbL" = (
-/obj/structure/disposalpipe/segment,
+"jby" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/door/airlock/maintenance{
+ name = "Maintenance"
+ },
/obj/effect/decal/cleanable/dirt,
+/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
+/area/station/maintenance/port/greater)
"jbV" = (
/obj/machinery/photocopier,
/turf/open/floor/iron/dark,
@@ -24166,13 +26225,6 @@
/obj/machinery/door/window/right/directional/south,
/turf/open/floor/plating,
/area/station/service/chapel/funeral)
-"jcx" = (
-/obj/structure/filingcabinet/chestdrawer,
-/obj/item/stock_parts/cell/emproof{
- pixel_y = 9
- },
-/turf/open/floor/iron/grimy,
-/area/station/engineering/main)
"jcE" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -24180,6 +26232,11 @@
/obj/structure/lattice/catwalk,
/turf/open/space/basic,
/area/space/nearstation)
+"jcG" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"jcU" = (
/obj/structure/chair/wood/wings{
dir = 1
@@ -24203,6 +26260,10 @@
/obj/effect/landmark/start/captain,
/turf/open/floor/iron/freezer,
/area/station/command/heads_quarters/captain/private)
+"jdx" = (
+/obj/structure/table/wood,
+/turf/open/floor/carpet,
+/area/station/service/library)
"jdU" = (
/obj/effect/turf_decal/stripes/corner{
dir = 1
@@ -24220,6 +26281,13 @@
"jeh" = (
/turf/open/floor/noslip,
/area/station/security/tram)
+"jep" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/firealarm/directional/north,
+/obj/machinery/light_switch/directional/south,
+/turf/open/floor/iron/dark/small,
+/area/station/service/chapel/storage)
"jeC" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -24235,13 +26303,6 @@
/obj/machinery/light_switch/directional/west,
/turf/open/floor/iron/smooth_large,
/area/station/science/ordnance/storage)
-"jeV" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/turf/open/floor/iron/white/corner,
-/area/station/hallway/secondary/exit/departure_lounge)
"jeW" = (
/obj/effect/spawner/structure/window,
/obj/structure/sign/departments/medbay/alt/directional/west,
@@ -24291,6 +26352,42 @@
/obj/machinery/light/dim/directional/north,
/turf/open/floor/iron/smooth,
/area/station/security/evidence)
+"jfT" = (
+/obj/structure/closet/secure_closet/hydroponics,
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 1
+ },
+/obj/structure/sign/poster/official/random/directional/north,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
+"jgb" = (
+/obj/effect/turf_decal/tile/red/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/smooth,
+/area/station/service/greenroom)
+"jgq" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/obj/structure/flora/bush/jungle/a/style_3,
+/turf/open/misc/dirt/jungle,
+/area/station/service/chapel)
+"jgx" = (
+/obj/effect/turf_decal/tile/green/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/structure/extinguisher_cabinet/directional/east,
+/obj/machinery/hydroponics/constructable,
+/turf/open/floor/iron,
+/area/station/service/hydroponics)
"jgF" = (
/obj/effect/turf_decal/siding/wideplating/dark{
dir = 1
@@ -24432,19 +26529,6 @@
},
/turf/open/floor/iron/small,
/area/station/maintenance/department/engine/atmos)
-"jiN" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock{
- name = "Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
-/obj/effect/mapping_helpers/airlock/unres{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"jiR" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/engine/vacuum,
@@ -24498,17 +26582,13 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/iron,
/area/station/medical/chemistry)
-"jjS" = (
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/obj/machinery/navbeacon{
- codes_txt = "patrol;next_patrol=23.1-Evac";
- location = "22.0-Porthall-Evac"
+"jjZ" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
+/obj/structure/cable,
/turf/open/floor/iron,
-/area/station/hallway/primary/port)
+/area/station/hallway/primary/central/aft)
"jkz" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
@@ -24543,6 +26623,11 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/cargo/storage)
+"jkT" = (
+/obj/structure/table/wood,
+/obj/machinery/fax/auto_name,
+/turf/open/floor/carpet,
+/area/station/service/library)
"jkV" = (
/obj/machinery/door/airlock/external/glass{
name = "ATMOS PROJECT Airlock"
@@ -24571,6 +26656,12 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/cargo/storage)
+"jlz" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/power/apc/auto_name/directional/north,
+/turf/open/floor/iron/dark/small,
+/area/station/service/chapel/storage)
"jlL" = (
/obj/structure/closet/secure_closet/engineering_chief,
/obj/item/storage/briefcase/secure,
@@ -24604,6 +26695,11 @@
/obj/machinery/duct,
/turf/open/floor/iron/white/small,
/area/station/medical/storage)
+"jlW" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/structure/flora/bush/flowers_pp/style_2,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"jlZ" = (
/obj/effect/turf_decal/tile/dark_red/half/contrasted{
dir = 1
@@ -24619,12 +26715,6 @@
/obj/effect/decal/cleanable/cobweb,
/turf/open/floor/wood,
/area/station/maintenance/starboard/greater)
-"jme" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/door/firedoor,
-/obj/effect/landmark/navigate_destination,
-/turf/open/floor/iron/textured_half,
-/area/station/service/theater)
"jmi" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
@@ -24719,6 +26809,10 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/iron/smooth,
/area/station/security/evidence)
+"jnO" = (
+/obj/machinery/space_heater,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"jnZ" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -24730,10 +26824,29 @@
},
/turf/open/floor/plating,
/area/station/command/corporate_showroom)
-"joy" = (
+"joH" = (
+/obj/structure/table/reinforced,
+/obj/item/paper_bin{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/obj/item/pen,
+/obj/machinery/door/poddoor/shutters{
+ id = "meow";
+ name = "Commissary"
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"joR" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/structure/cable,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
+/obj/effect/spawner/random/structure/steam_vent,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"joS" = (
/obj/machinery/light/broken/directional/north,
/obj/effect/decal/cleanable/dirt,
@@ -24785,16 +26898,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/smooth_large,
/area/station/science/auxlab/firing_range)
-"jpK" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
- dir = 1
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/station/medical/medbay/lobby)
"jpM" = (
/obj/structure/closet{
name = "Evidence Closet 3"
@@ -24881,12 +26984,6 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron/diagonal,
/area/station/engineering/lobby)
-"jqQ" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/machinery/light/small/directional/west,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
"jqZ" = (
/obj/structure/cable,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -24916,6 +27013,20 @@
},
/turf/open/floor/iron/dark,
/area/station/medical/chemistry)
+"jrl" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/landmark/navigate_destination/teleporter,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"jrs" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -24936,6 +27047,17 @@
/obj/structure/closet/firecloset,
/turf/open/floor/plating/rust,
/area/station/maintenance/fore/lesser)
+"jrN" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"jrS" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 10
@@ -24962,13 +27084,6 @@
dir = 1
},
/area/station/cargo/office)
-"jrZ" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/structure/flora/tree/jungle/small/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"jsa" = (
/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron/white/side{
@@ -24998,6 +27113,15 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
+"jsJ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/status_display/evac/directional/north,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"jsN" = (
/obj/structure/hedge,
/obj/effect/decal/cleanable/cobweb/cobweb2,
@@ -25107,6 +27231,12 @@
/obj/item/storage/box/matches,
/turf/open/floor/iron,
/area/station/cargo/sorting)
+"juP" = (
+/obj/machinery/light/small/directional/south,
+/obj/machinery/status_display/evac/directional/south,
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/stone,
+/area/station/service/chapel)
"juS" = (
/obj/structure/bed,
/obj/item/bedsheet/hop,
@@ -25114,6 +27244,16 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/iron/grimy,
/area/station/command/heads_quarters/hop)
+"jvd" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 1
+ },
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/eighties/red,
+/area/station/hallway/primary/central/fore)
"jvl" = (
/obj/machinery/holopad,
/obj/structure/cable,
@@ -25132,6 +27272,23 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
+"jvL" = (
+/obj/structure/table/reinforced,
+/obj/item/reagent_containers/condiment/peppermill{
+ pixel_x = 3
+ },
+/obj/item/reagent_containers/condiment/saltshaker{
+ pixel_x = -3
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/door/poddoor/shutters{
+ name = "Kitchen Shutters";
+ id = "kitchenshutters"
+ },
+/turf/open/floor/plating,
+/area/station/service/kitchen)
"jvN" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/tile/dark_red/half/contrasted{
@@ -25201,6 +27358,26 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/wood/tile,
/area/station/command/corporate_showroom)
+"jwl" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/dark_red/half/contrasted{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 8
+ },
+/obj/structure/disposalpipe/junction/flip{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/security)
+"jwt" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/table,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"jwC" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{
dir = 5
@@ -25258,12 +27435,6 @@
"jxp" = (
/turf/closed/wall/r_wall,
/area/station/ai_monitored/turret_protected/aisat/foyer)
-"jxy" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/landmark/navigate_destination/library,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"jxC" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -25412,14 +27583,23 @@
/obj/effect/mapping_helpers/airlock/abandoned,
/turf/open/floor/wood,
/area/station/maintenance/starboard/greater)
-"jza" = (
-/obj/machinery/rnd/production/techfab/department/service,
-/obj/effect/turf_decal/delivery,
-/obj/effect/turf_decal/siding/wood/corner{
+"jzf" = (
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/open/floor/iron/kitchen/small,
-/area/station/hallway/secondary/service)
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/airlock{
+ name = "Library Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/service/library)
"jzg" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 1
@@ -25453,6 +27633,14 @@
/obj/structure/broken_flooring/singular/directional/south,
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
+"jzr" = (
+/obj/machinery/holopad,
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"jzJ" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/structure/closet/firecloset,
@@ -25540,15 +27728,14 @@
/obj/effect/mapping_helpers/airlock/access/all/supply/general,
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
+"jCm" = (
+/obj/effect/landmark/start/hangover,
+/turf/open/misc/dirt/jungle,
+/area/station/service/chapel)
"jCo" = (
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
-"jCA" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/table,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"jCP" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -25556,22 +27743,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/smooth,
/area/station/cargo/warehouse)
-"jCY" = (
-/obj/structure/table/greyscale,
-/obj/item/screwdriver,
-/obj/item/stack/cable_coil/cut{
- pixel_x = 11;
- pixel_y = 7
- },
-/obj/machinery/camera/directional/west{
- c_tag = "Engineering - Office"
- },
-/obj/item/stock_parts/cell/emproof{
- pixel_x = -6;
- pixel_y = 9
- },
-/turf/open/floor/iron/grimy,
-/area/station/engineering/main)
"jCZ" = (
/obj/machinery/door/window/brigdoor/left/directional/west{
id = "Cell 1";
@@ -25625,22 +27796,6 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron/dark,
/area/station/command/corporate_dock)
-"jDP" = (
-/obj/effect/turf_decal/tile/yellow{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/item/storage/box{
- pixel_x = -8;
- pixel_y = 15
- },
-/obj/effect/turf_decal/tile/neutral/half/contrasted{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/fore)
"jDS" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -25755,24 +27910,12 @@
dir = 8
},
/area/station/commons/storage/tools)
-"jEU" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/effect/landmark/start/chaplain,
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"jEZ" = (
/obj/structure/hedge,
/obj/effect/decal/cleanable/dirt,
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/iron/smooth,
/area/station/hallway/secondary/command)
-"jFf" = (
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/obj/machinery/status_display/ai/directional/north,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"jFh" = (
/obj/item/kirbyplants/random,
/turf/open/floor/iron,
@@ -25784,6 +27927,14 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"jFm" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/spawner/random/vending/snackvend,
+/turf/open/floor/stone,
+/area/station/service/bar)
"jFw" = (
/obj/item/kirbyplants/random,
/obj/effect/turf_decal/tile/yellow{
@@ -25813,11 +27964,13 @@
/obj/machinery/power/apc/auto_name/directional/north,
/turf/open/floor/plating,
/area/station/maintenance/fore/lesser)
-"jFY" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/machinery/light/floor,
-/turf/open/floor/iron/smooth,
-/area/station/service/library)
+"jFK" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/stone,
+/area/station/service/bar)
"jGc" = (
/obj/structure/window/spawner/directional/east,
/turf/open/floor/iron/showroomfloor,
@@ -26077,6 +28230,20 @@
},
/turf/open/floor/iron,
/area/station/cargo/office)
+"jJd" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 8
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"jJg" = (
/obj/effect/turf_decal/siding/wideplating,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -26130,30 +28297,6 @@
dir = 1
},
/area/station/science/xenobiology)
-"jKh" = (
-/obj/machinery/vending/hydroseeds{
- slogan_delay = 700
- },
-/obj/effect/turf_decal/delivery/white{
- color = "#52B4E9"
- },
-/obj/machinery/light/directional/north,
-/turf/open/floor/iron/white/small,
-/area/station/service/hydroponics)
-"jKm" = (
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/effect/turf_decal/tile/dark_red/half/contrasted{
- dir = 1
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 1
- },
-/obj/machinery/light/cold/directional/south,
-/obj/machinery/airalarm/directional/south,
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"jKq" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -26194,22 +28337,20 @@
"jKU" = (
/turf/closed/wall,
/area/station/engineering/atmos/storage/gas)
+"jKV" = (
+/obj/machinery/processor{
+ pixel_y = 6
+ },
+/obj/machinery/camera/autoname/directional/west,
+/obj/structure/table,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"jLb" = (
/obj/effect/turf_decal/tile/yellow{
dir = 1
},
/turf/open/floor/iron,
/area/station/commons/storage/tools)
-"jLh" = (
-/obj/machinery/light/small/directional/south,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 1
- },
-/obj/effect/turf_decal/siding/wideplating_new/terracotta{
- dir = 6
- },
-/turf/open/floor/wood/tile,
-/area/station/commons/vacant_room/commissary)
"jLl" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -26255,6 +28396,18 @@
"jLR" = (
/turf/open/floor/iron/small,
/area/station/command/teleporter)
+"jLS" = (
+/obj/structure/table/wood,
+/obj/item/paper_bin{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/obj/item/pen{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/turf/open/floor/carpet,
+/area/station/service/library)
"jLV" = (
/obj/effect/turf_decal/tile/blue,
/turf/open/floor/iron/white,
@@ -26287,6 +28440,10 @@
},
/turf/open/floor/iron/small,
/area/station/engineering/atmos/pumproom)
+"jMA" = (
+/obj/structure/chair/stool/bar/directional/east,
+/turf/open/floor/wood/large,
+/area/station/service/bar)
"jMC" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/on{
dir = 8
@@ -26361,13 +28518,6 @@
},
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
-"jNJ" = (
-/obj/structure/chair{
- dir = 8
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/wood/tile,
-/area/station/commons/vacant_room/commissary)
"jNL" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -26468,6 +28618,15 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/fore/greater)
+"jPo" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock/maintenance{
+ name = "Security Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/security/general,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/station/maintenance/port/lesser)
"jPq" = (
/obj/structure/disposalpipe/segment,
/obj/effect/spawner/structure/window/reinforced/tinted,
@@ -26486,15 +28645,6 @@
/obj/item/radio/intercom/directional/north,
/turf/open/floor/iron,
/area/station/security/execution/transfer)
-"jQg" = (
-/obj/structure/table/wood,
-/obj/machinery/light/small/directional/south,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/siding/wideplating_new/terracotta{
- dir = 10
- },
-/turf/open/floor/wood/tile,
-/area/station/commons/vacant_room/commissary)
"jQj" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -26508,6 +28658,16 @@
/obj/effect/mapping_helpers/airlock/access/all/science/research,
/turf/open/floor/catwalk_floor/flat_white,
/area/station/science/research)
+"jQv" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"jQB" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
@@ -26531,6 +28691,22 @@
},
/turf/open/floor/iron/smooth,
/area/station/command/corporate_showroom)
+"jRl" = (
+/obj/effect/turf_decal/tile/brown/opposingcorners{
+ dir = 1
+ },
+/obj/machinery/firealarm/directional/east,
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/obj/machinery/button/door/directional/north{
+ id = "meow";
+ name = "Comissary Shutters";
+ pixel_x = 29
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"jRs" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
@@ -26556,10 +28732,16 @@
},
/turf/open/floor/iron,
/area/station/security)
-"jRI" = (
-/obj/structure/table,
-/turf/open/floor/iron/dark/small,
-/area/station/commons/vacant_room/commissary)
+"jRJ" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"jRR" = (
/obj/machinery/atmospherics/components/binary/crystallizer{
dir = 4
@@ -26592,10 +28774,13 @@
/obj/structure/railing,
/turf/open/floor/catwalk_floor,
/area/station/hallway/secondary/entry)
-"jSK" = (
-/obj/structure/table/wood,
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
+"jSJ" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/cable,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"jSQ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/item/kirbyplants/random,
@@ -26650,6 +28835,13 @@
/obj/machinery/camera/autoname/directional/north,
/turf/open/floor/iron,
/area/station/cargo/storage)
+"jTC" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/camera/autoname/directional/east,
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"jTU" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -26695,10 +28887,35 @@
/obj/item/instrument/harmonica,
/turf/open/floor/iron,
/area/station/security/prison/rec)
+"jUr" = (
+/obj/item/cigarette,
+/obj/item/storage/fancy/cigarettes/cigpack_robust{
+ pixel_y = 5;
+ pixel_x = 6
+ },
+/obj/item/lighter,
+/obj/structure/sign/poster/official/random/directional/east,
+/obj/structure/table,
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 6
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"jUx" = (
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/maintenance/department/electrical)
+"jUA" = (
+/obj/structure/table,
+/obj/item/storage/bag/tray,
+/obj/item/knife/kitchen{
+ pixel_y = 2
+ },
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"jUU" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -26712,12 +28929,6 @@
/obj/structure/cable,
/turf/open/floor/iron/smooth,
/area/station/hallway/secondary/command)
-"jVg" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"jVs" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -26776,6 +28987,14 @@
},
/turf/open/floor/iron/dark/small,
/area/station/maintenance/department/engine/atmos)
+"jWj" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/obj/structure/flora/bush/flowers_pp/style_random,
+/obj/structure/flora/bush/large/style_3,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"jWk" = (
/obj/machinery/door/firedoor,
/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos,
@@ -26837,6 +29056,12 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/iron/textured_large,
/area/station/cargo/office)
+"jXc" = (
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"jXe" = (
/obj/machinery/holopad/secure,
/turf/open/floor/iron/smooth,
@@ -26890,6 +29115,10 @@
/obj/effect/turf_decal/siding/wideplating/dark/corner,
/turf/open/floor/iron,
/area/station/security)
+"jXJ" = (
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/white/side,
+/area/station/hallway/primary/central/aft)
"jXQ" = (
/obj/structure/flora/bush/large/style_random{
pixel_x = -18;
@@ -27011,11 +29240,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/dark,
/area/station/science/ordnance/storage)
-"kai" = (
-/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/directional/east,
-/turf/open/floor/iron/smooth,
-/area/station/cargo/drone_bay)
"kam" = (
/obj/effect/decal/cleanable/cobweb,
/obj/machinery/disposal/delivery_chute{
@@ -27028,19 +29252,6 @@
/obj/effect/turf_decal/stripes/box,
/turf/open/floor/plating,
/area/station/service/janitor)
-"kar" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/effect/turf_decal/siding/wood,
-/obj/machinery/door/airlock/public/glass{
- name = "Chapel Office"
- },
-/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office,
-/turf/open/floor/iron/textured_half,
-/area/station/service/chapel/office)
"kat" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -27114,11 +29325,24 @@
/obj/structure/thermoplastic/light,
/turf/open/floor/tram,
/area/station/maintenance/port/aft)
+"kbk" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/wood,
+/area/station/cargo/boutique)
"kbm" = (
/obj/item/kirbyplants/random,
/obj/machinery/airalarm/directional/south,
/turf/open/floor/iron/smooth,
/area/station/maintenance/solars/starboard/fore)
+"kbI" = (
+/obj/structure/table/glass,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell,
+/turf/open/floor/iron/white,
+/area/station/science/auxlab/firing_range)
"kci" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -27132,11 +29356,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/construction)
-"kcs" = (
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/obj/effect/landmark/navigate_destination/kitchen,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"kcA" = (
/obj/structure/cable,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -27145,6 +29364,20 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron/showroomfloor,
/area/station/medical/surgery/theatre)
+"kcM" = (
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/machinery/camera/autoname/directional/west,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/light/small/directional/west,
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 8
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"kcQ" = (
/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{
dir = 1
@@ -27157,12 +29390,13 @@
/obj/structure/cable,
/turf/open/floor/circuit,
/area/station/tcommsat/server)
-"kdl" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/structure/sign/departments/vault/directional/south,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
+"kdg" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/structure/displaycase/trophy,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"kdn" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
@@ -27192,6 +29426,11 @@
/obj/machinery/light_switch/directional/west,
/turf/open/floor/iron/white/small,
/area/station/science/server)
+"keb" = (
+/obj/structure/cable,
+/obj/effect/spawner/random/structure/girder,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"kee" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/stripes/corner{
@@ -27221,9 +29460,10 @@
"ket" = (
/turf/open/floor/iron,
/area/station/security/prison/work)
-"kev" = (
-/turf/closed/wall,
-/area/station/hallway/secondary/spacebridge)
+"keL" = (
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/stone,
+/area/station/service/chapel)
"keO" = (
/obj/effect/spawner/random/trash,
/obj/effect/turf_decal/siding/white{
@@ -27235,6 +29475,10 @@
/obj/item/kirbyplants/random,
/turf/open/floor/iron,
/area/station/science/lower)
+"keQ" = (
+/obj/structure/flora/grass/jungle/b/style_3,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"keS" = (
/obj/effect/turf_decal/siding/white{
dir = 5
@@ -27251,17 +29495,6 @@
/obj/machinery/power/energy_accumulator/tesla_coil,
/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
-"keZ" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/dark_red/fourcorners,
-/obj/machinery/newscaster/directional/north,
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"kft" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -27303,6 +29536,15 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
+"kfO" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/structure/chair/wood{
+ dir = 4
+ },
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"kfW" = (
/obj/effect/turf_decal/siding/yellow{
dir = 1
@@ -27355,16 +29597,6 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/service/abandoned_gambling_den)
-"kgz" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"kgG" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -27444,15 +29676,6 @@
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plating,
/area/station/maintenance/starboard/aft)
-"khE" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral,
-/obj/structure/sign/departments/holy/directional/south,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"khG" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -27481,6 +29704,12 @@
dir = 1
},
/area/station/hallway/primary/central/fore)
+"khY" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"khZ" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -27493,6 +29722,25 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/smooth,
/area/station/cargo/warehouse)
+"kii" = (
+/obj/structure/flora/bush/flowers_yw/style_3{
+ pixel_y = -3
+ },
+/obj/structure/flora/bush/flowers_br/style_random{
+ pixel_x = -6;
+ pixel_y = -6
+ },
+/obj/structure/flora/bush/flowers_pp{
+ pixel_y = -5;
+ pixel_x = -3
+ },
+/obj/machinery/light/floor,
+/obj/effect/light_emitter/fake_outdoors,
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/turf/open/floor/grass/Airless,
+/area/station/hallway/primary/central/aft)
"kit" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -27690,6 +29938,15 @@
/obj/effect/landmark/start/atmospheric_technician,
/turf/open/floor/iron/smooth,
/area/station/maintenance/disposal/incinerator)
+"klN" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/structure/flora/bush/large/style_random{
+ pixel_y = 0
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"klY" = (
/obj/effect/turf_decal/stripes/white/line,
/obj/effect/spawner/random/maintenance,
@@ -27751,6 +30008,19 @@
/obj/machinery/firealarm/directional/east,
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
+"kmz" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/neutral/end{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"kmC" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -27770,6 +30040,18 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/small,
/area/station/maintenance/department/engine/atmos)
+"kmP" = (
+/obj/effect/turf_decal/tile/purple/opposingcorners,
+/obj/effect/turf_decal/siding/green{
+ dir = 9
+ },
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/structure/cable,
+/turf/open/floor/iron/cafeteria,
+/area/station/science/circuits)
"kmT" = (
/obj/structure/closet/firecloset,
/turf/open/floor/plating,
@@ -27941,11 +30223,6 @@
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/turf/open/floor/iron,
/area/station/security/brig/entrance)
-"kqo" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/closed/wall/r_wall,
-/area/station/hallway/secondary/spacebridge)
"kqr" = (
/obj/item/radio/intercom/directional/north,
/obj/effect/turf_decal/tile/red/anticorner/contrasted{
@@ -28051,6 +30328,18 @@
"kqX" = (
/turf/closed/wall,
/area/station/ai_monitored/aisat/exterior)
+"kqZ" = (
+/obj/structure/table,
+/obj/item/stack/package_wrap,
+/obj/item/hand_labeler,
+/obj/effect/turf_decal/tile/brown/opposingcorners{
+ dir = 1
+ },
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/structure/cable,
+/obj/machinery/light/cold/directional/east,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"krd" = (
/obj/machinery/rnd/production/circuit_imprinter/department/science,
/obj/machinery/newscaster/directional/north,
@@ -28119,6 +30408,10 @@
/obj/machinery/telecomms/server/presets/common,
/turf/open/floor/circuit,
/area/station/tcommsat/server)
+"ksm" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/stone,
+/area/station/service/bar)
"kso" = (
/obj/structure/disposalpipe/junction{
dir = 8
@@ -28128,15 +30421,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/maintenance/port/fore)
-"kst" = (
-/obj/structure/chair/plastic{
- dir = 4
- },
-/obj/item/radio/intercom/directional/north,
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/machinery/camera/autoname/directional/north,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
"ksv" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 8
@@ -28182,6 +30466,16 @@
},
/turf/open/floor/catwalk_floor/iron,
/area/station/engineering/gravity_generator)
+"ksJ" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/sorting/mail{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/mail_sorting/service/hydroponics,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"ksN" = (
/obj/structure/transit_tube/station/dispenser,
/obj/effect/decal/cleanable/dirt,
@@ -28292,6 +30586,14 @@
},
/turf/open/floor/iron/dark,
/area/station/cargo/office)
+"kuk" = (
+/obj/machinery/light/warm/dim,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"kuq" = (
/obj/machinery/computer/cargo/request,
/turf/open/floor/plating,
@@ -28350,6 +30652,16 @@
/obj/effect/turf_decal/trimline/neutral/line,
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
+"kvD" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"kvI" = (
/obj/docking_port/stationary/random{
dir = 8;
@@ -28395,6 +30707,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/maintenance/starboard/greater)
+"kwy" = (
+/obj/structure/cable,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"kwA" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
@@ -28472,6 +30794,22 @@
/obj/structure/window/spawner/directional/east,
/turf/open/floor/plating/rust,
/area/station/maintenance/fore/lesser)
+"kxY" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/window/left/directional/south{
+ name = "Hydroponics Desk"
+ },
+/obj/machinery/door/firedoor,
+/obj/item/paper/guides/jobs/hydroponics,
+/obj/item/pen{
+ pixel_x = 4
+ },
+/obj/machinery/door/window/right/directional/north{
+ name = "Hydroponics Desk";
+ req_access = list("hydroponics")
+ },
+/turf/open/floor/plating,
+/area/station/service/hydroponics)
"kya" = (
/obj/structure/table/greyscale,
/obj/item/paper{
@@ -28494,6 +30832,13 @@
/obj/structure/sign/warning/no_smoking/circle/directional/west,
/turf/open/floor/iron/smooth,
/area/station/engineering/atmos)
+"kym" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/station/cargo/boutique)
"kyr" = (
/obj/structure/window/reinforced/spawner/directional/south,
/obj/machinery/airalarm/directional/west,
@@ -28528,13 +30873,6 @@
/obj/effect/turf_decal/trimline/neutral/line,
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
-"kzd" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/carpet/lone,
-/area/station/service/chapel/office)
"kzu" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -28569,6 +30907,12 @@
},
/turf/open/floor/iron/small,
/area/station/hallway/primary/central/fore)
+"kzz" = (
+/obj/effect/turf_decal/weather/dirt,
+/mob/living/basic/deer,
+/obj/structure/flora/bush/flowers_yw,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"kzI" = (
/obj/effect/turf_decal/bot_white,
/obj/effect/spawner/random/structure/closet_empty/crate,
@@ -28580,6 +30924,13 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
+"kzV" = (
+/obj/effect/landmark/start/hangover,
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"kAf" = (
/obj/structure/transit_tube/station/dispenser/flipped{
dir = 1
@@ -28651,6 +31002,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold/pink/visible,
/turf/closed/wall/mineral/titanium/nodiagonal,
/area/station/engineering/supermatter)
+"kBM" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/obj/machinery/firealarm/directional/west,
+/turf/open/floor/eighties/red,
+/area/station/hallway/primary/central/fore)
"kBZ" = (
/obj/machinery/door/airlock/command{
name = "Chief Engineer's Office"
@@ -28667,6 +31028,16 @@
/obj/effect/spawner/structure/window/reinforced/tinted,
/turf/open/floor/plating,
/area/station/command/heads_quarters/captain)
+"kCB" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/holopad,
+/obj/effect/landmark/event_spawn,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/station/cargo/boutique)
"kCC" = (
/obj/structure/sink/directional/west,
/obj/structure/table/bronze,
@@ -28870,6 +31241,15 @@
},
/turf/open/floor/iron/dark,
/area/station/medical/medbay/central)
+"kGw" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 4
+ },
+/turf/open/floor/eighties/red,
+/area/station/hallway/primary/central/fore)
"kGB" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
@@ -28888,9 +31268,6 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/wood/parquet,
/area/station/service/library)
-"kGS" = (
-/turf/open/floor/iron/white,
-/area/station/maintenance/central/greater)
"kGY" = (
/obj/structure/plasticflaps/opaque,
/obj/effect/turf_decal/bot,
@@ -28977,6 +31354,17 @@
},
/turf/open/space/basic,
/area/station/engineering/atmos/space_catwalk)
+"kHU" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 8
+ },
+/obj/effect/landmark/start/botanist,
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
+"kHX" = (
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"kIj" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -29138,6 +31526,28 @@
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
+"kKh" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/security/glass{
+ id_tag = "outerbrig";
+ name = "Brig"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/security/entrance,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "sci-entrance"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/textured_half,
+/area/station/security/brig/entrance)
+"kKD" = (
+/obj/structure/chair/comfy/brown,
+/obj/structure/sign/painting/library{
+ pixel_x = 30
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"kKT" = (
/obj/machinery/computer/camera_advanced/xenobio{
dir = 4
@@ -29184,6 +31594,16 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/carpet,
/area/station/medical/psychology)
+"kMA" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/light/warm/dim,
+/obj/machinery/camera/autoname/directional/south,
+/obj/structure/extinguisher_cabinet/directional/south,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"kMW" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -29315,6 +31735,28 @@
},
/turf/open/floor/iron/dark/side,
/area/station/security/execution/transfer)
+"kPo" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
+"kPp" = (
+/obj/structure/closet/secure_closet/bar,
+/obj/item/stack/spacecash/c1,
+/obj/item/stack/spacecash/c1,
+/obj/item/stack/spacecash/c1,
+/obj/item/stack/spacecash/c1,
+/obj/item/stack/spacecash/c1,
+/obj/machinery/airalarm/directional/north,
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/turf/open/floor/stone,
+/area/station/service/bar/backroom)
"kPv" = (
/obj/structure/table,
/obj/item/paper_bin{
@@ -29340,6 +31782,19 @@
"kPW" = (
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
+"kQc" = (
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"kQe" = (
/obj/machinery/button/door/directional/west{
id = "QMLoaddoor";
@@ -29388,22 +31843,18 @@
"kQt" = (
/turf/closed/wall/r_wall,
/area/station/maintenance/starboard/aft)
-"kQA" = (
-/obj/structure/table,
-/obj/machinery/microwave{
- pixel_y = 5
- },
-/obj/machinery/requests_console/directional/south{
- department = "Kitchen";
- name = "Kitchen Requests Console"
- },
-/obj/effect/mapping_helpers/requests_console/supplies,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"kQM" = (
/obj/machinery/holopad,
/turf/open/floor/iron,
/area/station/cargo/storage)
+"kRs" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/structure/table/wood,
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"kRt" = (
/obj/machinery/monkey_recycler,
/obj/effect/turf_decal/siding/white{
@@ -29423,6 +31874,17 @@
},
/turf/open/floor/engine/air,
/area/station/engineering/atmos/space_catwalk)
+"kRA" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/obj/effect/landmark/start/hangover,
+/obj/structure/chair/office{
+ dir = 8
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"kRE" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -29525,21 +31987,33 @@
/obj/machinery/photocopier,
/turf/open/floor/wood,
/area/station/command/heads_quarters/qm)
-"kSV" = (
-/obj/structure/chair/stool/bamboo{
+"kTm" = (
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/floor/iron/textured_half{
dir = 8
},
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
-"kTd" = (
-/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/directional/north,
-/turf/open/floor/wood/parquet,
/area/station/service/library)
"kTp" = (
/obj/structure/disposalpipe/segment,
/turf/closed/wall,
/area/station/command/heads_quarters/qm)
+"kTr" = (
+/obj/machinery/door/airlock/wood{
+ name = "Bar Backroom"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/service/bar,
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"kTt" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -29571,6 +32045,15 @@
/obj/structure/tank_holder/extinguisher,
/turf/open/floor/catwalk_floor,
/area/station/science/xenobiology)
+"kTF" = (
+/obj/machinery/light/warm/dim,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/item/radio/intercom/directional/south,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"kTG" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -29582,6 +32065,17 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/hallway/secondary/command)
+"kTX" = (
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/fore)
"kUf" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -29595,6 +32089,13 @@
},
/turf/open/floor/plating,
/area/station/maintenance/department/science/xenobiology)
+"kUL" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"kVb" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -29606,6 +32107,14 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/smooth,
/area/station/hallway/secondary/command)
+"kVg" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/landmark/start/hangover,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"kVn" = (
/obj/structure/disposalpipe/segment,
/obj/structure/table/reinforced,
@@ -29644,18 +32153,6 @@
/obj/effect/mapping_helpers/airlock/abandoned,
/turf/open/floor/wood,
/area/station/maintenance/starboard/greater)
-"kWg" = (
-/obj/structure/table/greyscale,
-/obj/item/pen{
- pixel_x = 13;
- pixel_y = 4
- },
-/obj/machinery/light/small/directional/south,
-/obj/item/book/manual/wiki/engineering_guide{
- pixel_y = 4
- },
-/turf/open/floor/iron/grimy,
-/area/station/engineering/main)
"kWk" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -29669,18 +32166,6 @@
/obj/machinery/firealarm/directional/west,
/turf/open/floor/iron/small,
/area/station/security/office)
-"kWF" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/window/right/directional/north{
- name = "Kitchen Delivery Access";
- req_access = list("kitchen")
- },
-/obj/effect/turf_decal/delivery/white{
- color = "#52B4E9"
- },
-/obj/machinery/duct,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
"kWJ" = (
/obj/structure/chair/sofa/bench/left{
dir = 1
@@ -29732,18 +32217,20 @@
},
/turf/open/floor/iron/white/small,
/area/station/security/warden)
+"kXC" = (
+/obj/structure/sign/clock/directional/north,
+/obj/structure/table/wood,
+/obj/machinery/reagentgrinder{
+ pixel_x = -5;
+ pixel_y = 10
+ },
+/turf/open/floor/iron/dark/textured,
+/area/station/service/bar)
"kXM" = (
/obj/effect/spawner/random/structure/girder,
/obj/structure/barricade/wooden,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"kXO" = (
-/obj/effect/mapping_helpers/broken_floor,
-/obj/structure/frame/machine,
-/obj/item/circuitboard/machine/chem_dispenser,
-/obj/item/stack/cable_coil/five,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"kXQ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -29836,6 +32323,13 @@
/obj/item/modular_computer/laptop,
/turf/open/floor/iron/grimy,
/area/station/science/cubicle)
+"kZj" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/grass/jungle/b/style_3,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"kZx" = (
/obj/machinery/button/door/directional/north{
id = "main_surgery";
@@ -29874,6 +32368,13 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden,
/turf/open/floor/plating,
/area/station/science/ordnance/testlab)
+"kZI" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"lae" = (
/obj/machinery/atmospherics/components/binary/pump/on{
name = "Cold Loop to Gas"
@@ -29900,6 +32401,19 @@
},
/turf/open/floor/iron/dark/small,
/area/station/maintenance/department/engine/atmos)
+"laK" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"laL" = (
/obj/effect/turf_decal/tile/brown/half/contrasted{
dir = 4
@@ -29925,18 +32439,6 @@
/obj/machinery/airalarm/directional/west,
/turf/open/floor/iron/smooth,
/area/station/maintenance/solars/port/aft)
-"lbh" = (
-/obj/structure/sign/directions/evac,
-/obj/structure/sign/directions/engineering{
- dir = 1;
- pixel_y = 8
- },
-/obj/structure/sign/directions/medical{
- dir = 4;
- pixel_y = -9
- },
-/turf/closed/wall,
-/area/station/hallway/primary/central/fore)
"lbF" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 1
@@ -29968,15 +32470,6 @@
},
/turf/open/floor/iron,
/area/station/security/brig/entrance)
-"lca" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/airlock{
- name = "Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
-/obj/effect/mapping_helpers/airlock/unres,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"lce" = (
/obj/machinery/atmospherics/pipe/smart/simple/general/visible{
dir = 9
@@ -30024,6 +32517,30 @@
/obj/machinery/camera/directional/east,
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
+"lcD" = (
+/obj/effect/landmark/start/hangover,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
+"lcF" = (
+/obj/machinery/status_display/evac/directional/east,
+/turf/open/floor/glass,
+/area/station/hallway/primary/central/aft)
+"lcY" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/landmark/navigate_destination/hop,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"lda" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -30062,15 +32579,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/textured_half,
/area/station/security/brig)
-"ldZ" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 1
- },
-/turf/open/floor/iron/small,
-/area/station/hallway/primary/central/fore)
"lee" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/purple/opposingcorners,
@@ -30079,11 +32587,20 @@
},
/turf/open/floor/iron/cafeteria,
/area/station/science/circuits)
-"lej" = (
-/obj/structure/kitchenspike,
-/obj/effect/turf_decal/bot_red,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
+"lei" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/door/airlock/public/glass{
+ name = "Chapel Office"
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office,
+/turf/open/floor/iron/textured_half,
+/area/station/service/chapel/office)
"lek" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white/corner{
@@ -30105,7 +32622,7 @@
pixel_x = 5;
pixel_y = 9
},
-/obj/item/clothing/mask/cigarette/candy{
+/obj/item/cigarette/candy{
pixel_x = -3;
pixel_y = 10
},
@@ -30352,25 +32869,25 @@
dir = 1
},
/area/station/hallway/secondary/exit/departure_lounge)
+"lgQ" = (
+/obj/machinery/computer/security/telescreen/cmo/directional/west,
+/turf/open/floor/wood/parquet,
+/area/station/command/heads_quarters/cmo)
"lgV" = (
/obj/structure/table,
/obj/item/camera,
/turf/open/floor/iron,
/area/station/security/prison/workout)
-"lhg" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/delivery/red,
-/obj/machinery/door/airlock/medical/glass{
- id_tag = "MedbayFoyer";
- name = "Medbay Clinic"
- },
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "medlock";
- name = "Lockdown Shutters"
+"lhi" = (
+/obj/machinery/airalarm/directional/north,
+/obj/machinery/button/door/directional/north{
+ id = "vaco";
+ name = "Comissary Shutters";
+ pixel_x = 29
},
-/turf/open/floor/iron/white/small,
-/area/station/medical/medbay/lobby)
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/dark/small,
+/area/station/maintenance/central/lesser)
"lhl" = (
/obj/effect/spawner/random/trash/graffiti{
pixel_x = 32;
@@ -30426,12 +32943,35 @@
/obj/item/pickaxe,
/turf/open/misc/asteroid,
/area/station/maintenance/starboard/greater)
+"lhT" = (
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"lhZ" = (
/obj/machinery/suit_storage_unit/engine,
/obj/structure/cable,
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
+"lir" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/firealarm/directional/south,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
+"liw" = (
+/obj/effect/turf_decal/siding/wood/end{
+ dir = 8
+ },
+/obj/effect/landmark/navigate_destination/kitchen,
+/turf/open/floor/wood,
+/area/station/hallway/primary/central/aft)
"lix" = (
/obj/structure/table/reinforced,
/obj/item/grenade/chem_grenade/cleaner{
@@ -30510,6 +33050,27 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating/rust,
/area/station/maintenance/department/engine/atmos)
+"ljg" = (
+/obj/structure/kitchenspike,
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 5
+ },
+/obj/effect/turf_decal/weather/snow,
+/obj/machinery/airalarm/directional/north,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron/freezer,
+/area/station/service/kitchen/coldroom)
+"lji" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/bush/flowers_yw/style_3,
+/obj/structure/extinguisher_cabinet/directional/north,
+/obj/machinery/camera/directional/north,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"ljl" = (
/obj/structure/lattice,
/obj/structure/railing/corner{
@@ -30570,6 +33131,16 @@
},
/turf/open/floor/iron/white/small,
/area/station/command/heads_quarters/cmo)
+"ljT" = (
+/obj/structure/window/spawner/directional/east,
+/obj/structure/window/spawner/directional/west,
+/obj/machinery/light/floor,
+/obj/structure/flora/bush/sparsegrass,
+/obj/structure/flora/bush/flowers_br,
+/obj/structure/flora/bush/flowers_pp,
+/obj/structure/flora/bush/flowers_yw,
+/turf/open/floor/grass,
+/area/station/service/hydroponics)
"ljZ" = (
/obj/machinery/modular_computer/preset/civilian{
dir = 1
@@ -30631,22 +33202,10 @@
},
/turf/open/floor/iron,
/area/station/cargo/storage)
-"lkQ" = (
-/obj/effect/turf_decal/bot,
-/obj/structure/rack,
-/obj/item/stack/sheet/plasteel/fifty,
-/obj/item/stack/sheet/plastic/five,
-/obj/item/stack/sheet/rglass/fifty,
-/obj/item/storage/medkit/fire{
- pixel_x = 1;
- pixel_y = 4
- },
-/obj/machinery/airalarm/directional/east,
-/obj/item/stock_parts/cell/emproof{
- pixel_y = 9
- },
-/turf/open/floor/iron/small,
-/area/station/engineering/break_room)
+"lkJ" = (
+/obj/structure/flora/rock/pile/jungle/style_4,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"lkR" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -30658,17 +33217,6 @@
"lkV" = (
/turf/closed/wall/r_wall,
/area/station/science/ordnance)
-"lkZ" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/airalarm/directional/south,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"llg" = (
/obj/effect/turf_decal/stripes/white/line,
/turf/open/floor/iron/dark,
@@ -30722,6 +33270,15 @@
"llW" = (
/turf/closed/wall,
/area/station/ai_monitored/security/armory)
+"llY" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/siding/wideplating_new/terracotta{
+ dir = 4
+ },
+/turf/open/floor/wood/tile,
+/area/station/maintenance/central/lesser)
"lmb" = (
/obj/structure/cable,
/obj/machinery/door/airlock{
@@ -30735,17 +33292,23 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/carpet/donk,
/area/station/command/heads_quarters/qm)
-"lmo" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/structure/extinguisher_cabinet/directional/west,
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
+"lmm" = (
+/mob/living/basic/frog,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/obj/structure/flora/rock/pile/jungle/style_4,
+/obj/structure/flora/bush/flowers_pp/style_2,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"lmv" = (
/obj/structure/disposalpipe/segment,
/obj/item/kirbyplants/random,
/turf/open/floor/iron/grimy,
/area/station/command/heads_quarters/qm)
+"lmz" = (
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"lmR" = (
/obj/structure/dresser,
/obj/structure/sign/poster/contraband/random/directional/east,
@@ -30773,11 +33336,43 @@
dir = 4
},
/area/station/hallway/secondary/construction)
+"lnD" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"lnI" = (
/obj/effect/turf_decal/sand/plating,
/obj/structure/ore_box,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
+"lnN" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/green/opposingcorners,
+/obj/structure/table,
+/obj/item/reagent_containers/cup/bottle/mutagen{
+ pixel_x = -5;
+ pixel_y = 8
+ },
+/obj/item/reagent_containers/syringe{
+ pixel_x = -3;
+ pixel_y = -1
+ },
+/obj/item/reagent_containers/cup/watering_can{
+ pixel_x = 7;
+ pixel_y = 13
+ },
+/obj/item/reagent_containers/spray/plantbgone{
+ pixel_x = 6;
+ pixel_y = 1
+ },
+/obj/machinery/light/small/directional/west,
+/obj/structure/sign/poster/official/random/directional/north,
+/turf/open/floor/iron,
+/area/station/service/hydroponics)
"lnW" = (
/obj/effect/turf_decal/tile/neutral/full,
/obj/structure/chair{
@@ -30846,11 +33441,15 @@
/obj/machinery/holopad,
/turf/open/floor/stone,
/area/station/command/heads_quarters/hos)
-"lpa" = (
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/structure/bookcase/random,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
+"loN" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"lpC" = (
/turf/open/floor/plating,
/area/station/service/chapel/funeral)
@@ -30930,6 +33529,14 @@
"lql" = (
/turf/open/floor/wood/parquet,
/area/station/service/library)
+"lqq" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/landmark/navigate_destination/chapel,
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"lqt" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -30939,17 +33546,6 @@
"lqC" = (
/turf/open/floor/iron/smooth,
/area/station/maintenance/solars/starboard/aft)
-"lqF" = (
-/obj/structure/table,
-/obj/item/camera_film{
- pixel_x = -3;
- pixel_y = 5
- },
-/obj/item/camera_film{
- pixel_y = 9
- },
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"lqL" = (
/obj/effect/landmark/transport/nav_beacon/tram/platform/birdshot/prison_wing,
/turf/open/floor/tram,
@@ -31017,14 +33613,19 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/small,
/area/station/service/barber)
-"lsJ" = (
-/obj/structure/window/spawner/directional/north,
-/obj/effect/turf_decal/stripes/end{
+"lso" = (
+/obj/effect/mapping_helpers/airlock/access/all/service/bar,
+/obj/machinery/door/airlock/wood{
+ name = "Bar Backroom"
+ },
+/obj/effect/turf_decal/siding/wood{
dir = 4
},
-/obj/structure/window/reinforced/spawner/directional/east,
-/turf/open/floor/plating,
-/area/station/hallway/secondary/service)
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"lsK" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/smart/simple/brown/visible,
@@ -31036,6 +33637,10 @@
dir = 1
},
/area/station/science/lower)
+"lsP" = (
+/obj/structure/flora/grass/jungle/b/style_5,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"lsY" = (
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/obj/structure/closet/secure_closet/security/sec,
@@ -31043,11 +33648,15 @@
dir = 1
},
/area/station/security/execution/transfer)
-"lti" = (
-/obj/machinery/libraryscanner,
-/obj/machinery/newscaster/directional/north,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
+"lte" = (
+/obj/effect/turf_decal/tile/brown/opposingcorners{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"lto" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
@@ -31063,14 +33672,12 @@
/obj/structure/holosign/barrier/atmos/tram,
/turf/open/floor/plating,
/area/station/security/tram)
-"lty" = (
-/obj/structure/cable,
-/obj/machinery/door/morgue{
- name = "Secret Corridor";
- req_access = list("library")
+"ltr" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 6
},
-/turf/open/floor/catwalk_floor/iron_dark,
-/area/station/service/library)
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"ltz" = (
/obj/effect/turf_decal/siding/red{
dir = 4
@@ -31132,13 +33739,6 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/engineering/storage/tcomms)
-"lus" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/cobweb/cobweb2,
-/turf/open/floor/catwalk_floor/iron_dark,
-/area/station/service/library)
"lut" = (
/obj/structure/table/wood/fancy/red,
/obj/structure/sign/painting/large/library{
@@ -31160,17 +33760,39 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"luD" = (
+/obj/structure/table/reinforced,
+/obj/structure/desk_bell{
+ pixel_x = 4;
+ pixel_y = 3
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/door/poddoor/shutters{
+ name = "Kitchen Shutters";
+ id = "kitchenshutters"
+ },
+/turf/open/floor/plating,
+/area/station/service/kitchen)
+"luE" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/wood/tile,
+/area/station/service/bar)
"luG" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/tile/neutral/opposingcorners,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/commons/fitness/recreation/entertainment)
-"luU" = (
-/obj/machinery/smartfridge/food,
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
+"luP" = (
+/obj/effect/landmark/start/hangover,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/turf/open/floor/wood/tile,
+/area/station/service/bar)
"lvc" = (
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/escape)
@@ -31188,6 +33810,15 @@
/obj/structure/lattice,
/turf/open/space/basic,
/area/space/nearstation)
+"lvr" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/landmark/navigate_destination/bar,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"lvu" = (
/obj/effect/turf_decal/tile/brown{
dir = 4
@@ -31226,6 +33857,10 @@
/obj/machinery/atmospherics/components/trinary/filter/critical,
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/engineering/supermatter/room)
+"lvJ" = (
+/obj/structure/flora/bush/flowers_br,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"lvK" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/line{
@@ -31245,18 +33880,6 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
-"lwa" = (
-/obj/structure/closet/firecloset,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral/half/contrasted{
- dir = 4
- },
-/turf/open/floor/iron/dark/side{
- dir = 8
- },
-/area/station/hallway/primary/central/fore)
"lwc" = (
/obj/structure/table/optable,
/obj/structure/cable,
@@ -31294,6 +33917,15 @@
},
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
+"lwC" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/landmark/generic_maintenance_landmark,
+/obj/structure/table,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"lwI" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/machinery/computer/security/mining{
@@ -31353,15 +33985,6 @@
/obj/effect/spawner/random/engineering/atmospherics_portable,
/turf/open/floor/iron/small,
/area/station/maintenance/port/lesser)
-"lxK" = (
-/obj/machinery/airalarm/directional/north,
-/obj/machinery/door/window/right/directional/west{
- name = "Bar Delivery";
- req_access = list("bar")
- },
-/obj/machinery/duct,
-/turf/open/floor/stone,
-/area/station/service/bar/backroom)
"lxN" = (
/obj/structure/broken_flooring/pile/directional/east,
/turf/open/floor/plating,
@@ -31481,18 +34104,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/cargo/storage)
-"lzv" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/camera/directional/north,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/structure/sign/departments/botany/alt1/directional/north,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"lzA" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -31500,6 +34111,22 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron,
/area/station/cargo/storage)
+"lzB" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
+"lzG" = (
+/obj/structure/flora/bush/jungle/c/style_3{
+ pixel_x = -7;
+ pixel_y = 10
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"lzM" = (
/turf/closed/wall,
/area/station/security/tram)
@@ -31542,6 +34169,16 @@
},
/turf/open/floor/iron,
/area/station/cargo/office)
+"lAt" = (
+/obj/machinery/door/airlock{
+ name = "Kitchen"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/service/kitchen,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/firedoor,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"lAO" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/effect/decal/cleanable/dirt,
@@ -31574,6 +34211,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/smooth,
/area/station/maintenance/solars/starboard/aft)
+"lAV" = (
+/obj/structure/table/wood,
+/obj/structure/displaycase/forsale/kitchen{
+ pixel_y = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/wood/large,
+/area/station/service/bar)
"lBf" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/siding/wood{
@@ -31623,6 +34270,19 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"lBq" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/airalarm/directional/west,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/iron/small,
+/area/station/medical/medbay/lobby)
"lBw" = (
/obj/effect/turf_decal/siding/yellow,
/obj/effect/turf_decal/siding/yellow{
@@ -31702,6 +34362,13 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron,
/area/station/engineering/lobby)
+"lCK" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/camera/directional/east,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"lCN" = (
/obj/structure/falsewall,
/turf/open/floor/plating,
@@ -31781,6 +34448,20 @@
/obj/effect/landmark/start/cargo_technician,
/turf/open/floor/iron/dark,
/area/station/cargo/office)
+"lEs" = (
+/obj/structure/extinguisher_cabinet/directional/east,
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 4
+ },
+/obj/machinery/computer/order_console/cook{
+ dir = 8
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"lEJ" = (
/obj/machinery/door/poddoor{
id = "QMLoaddoor";
@@ -31817,6 +34498,14 @@
},
/turf/open/floor/wood/tile,
/area/station/maintenance/aft)
+"lEO" = (
+/obj/structure/cable,
+/obj/effect/spawner/random/structure/steam_vent,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"lER" = (
/turf/open/floor/iron/dark,
/area/station/maintenance/department/engine/atmos)
@@ -31826,6 +34515,12 @@
},
/turf/open/floor/plating,
/area/station/maintenance/hallway/abandoned_command)
+"lFq" = (
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/machinery/exodrone_launcher,
+/turf/open/floor/iron/smooth,
+/area/station/cargo/drone_bay)
"lFE" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/corner{
@@ -31909,6 +34604,13 @@
/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron/smooth,
/area/station/command/gateway)
+"lGJ" = (
+/obj/structure/filingcabinet/chestdrawer,
+/obj/item/book/manual/wiki/engineering_guide{
+ pixel_y = 6
+ },
+/turf/open/floor/iron/grimy,
+/area/station/engineering/main)
"lGK" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -31974,6 +34676,13 @@
dir = 1
},
/area/station/science/lower)
+"lHp" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 9
+ },
+/obj/structure/sign/poster/official/tactical_game_cards/directional/west,
+/turf/open/floor/eighties/red,
+/area/station/hallway/primary/central/fore)
"lHt" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/tile/blue/fourcorners,
@@ -32108,16 +34817,39 @@
dir = 8
},
/area/station/science/xenobiology)
-"lJc" = (
-/obj/machinery/door/firedoor,
-/obj/effect/landmark/navigate_destination,
-/turf/open/floor/iron/textured_half,
-/area/station/service/cafeteria)
"lJe" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/freezer,
/area/station/command/heads_quarters/captain/private)
+"lJg" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/lobby)
+"lJm" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/spawner/random/vending/colavend,
+/turf/open/floor/stone,
+/area/station/service/bar)
+"lJB" = (
+/obj/item/radio/intercom/directional/north{
+ broadcasting = 1;
+ frequency = 1447;
+ name = "Private Channel";
+ pixel_x = -26
+ },
+/obj/machinery/computer/security/telescreen/aiupload/directional/west,
+/obj/item/radio/intercom/directional/north,
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/turret_protected/ai_upload_foyer)
"lJF" = (
/obj/machinery/meter,
/obj/machinery/atmospherics/pipe/smart/manifold/cyan/visible{
@@ -32137,13 +34869,6 @@
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/iron/grimy,
/area/station/command/heads_quarters/qm)
-"lJY" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"lKg" = (
/obj/machinery/firealarm/directional/east,
/turf/open/floor/wood,
@@ -32154,24 +34879,6 @@
},
/turf/open/floor/plating,
/area/station/construction/mining/aux_base)
-"lKt" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/spawner/random/trash,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
-"lKu" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/structure/reagent_dispensers/fueltank,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"lKA" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -32186,6 +34893,13 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
+"lKB" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/lobby)
"lKG" = (
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/iron,
@@ -32224,6 +34938,17 @@
},
/turf/open/floor/plating,
/area/station/maintenance/department/engine/atmos)
+"lLi" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/airlock/mining{
+ name = "Drone Bay"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance,
+/obj/machinery/door/firedoor,
+/turf/open/floor/plating,
+/area/station/cargo/drone_bay)
"lLq" = (
/obj/machinery/firealarm/directional/east,
/obj/effect/decal/cleanable/oil,
@@ -32266,10 +34991,6 @@
/obj/effect/spawner/random/trash,
/turf/open/floor/iron,
/area/station/maintenance/department/medical/central)
-"lLJ" = (
-/obj/structure/table,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"lLL" = (
/turf/open/floor/iron/dark/side{
dir = 9
@@ -32323,30 +35044,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/station/engineering/lobby)
-"lMy" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/structure/table/glass,
-/obj/item/storage/photo_album/library,
-/turf/open/floor/iron/grimy,
-/area/station/service/library)
-"lMz" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/structure/table/glass,
-/obj/item/paper_bin{
- pixel_x = -3;
- pixel_y = 7
- },
-/obj/item/pen/invisible{
- pixel_x = -2;
- pixel_y = 7
- },
-/obj/machinery/newscaster/directional/north,
-/turf/open/floor/iron/grimy,
-/area/station/service/library)
"lMF" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -32373,17 +35070,6 @@
/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/open/floor/iron/grimy,
/area/station/service/library)
-"lMK" = (
-/obj/structure/barricade/wooden/crude,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
-"lMN" = (
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/rack,
-/obj/effect/spawner/random/maintenance,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"lNf" = (
/obj/effect/turf_decal/siding/blue,
/turf/open/floor/iron/white/small,
@@ -32443,11 +35129,11 @@
/area/station/engineering/atmos)
"lNF" = (
/obj/effect/spawner/random/entertainment/lighter,
-/obj/item/clothing/mask/cigarette/rollie/mindbreaker{
+/obj/item/cigarette/rollie/mindbreaker{
pixel_x = -2;
pixel_y = 6
},
-/obj/item/clothing/mask/cigarette/rollie/trippy{
+/obj/item/cigarette/rollie/trippy{
pixel_x = 4
},
/obj/effect/mapping_helpers/burnt_floor,
@@ -32544,12 +35230,24 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
+"lPq" = (
+/obj/structure/flora/bush/flowers_yw/style_2,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"lPw" = (
/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2{
dir = 5
},
/turf/open/floor/iron,
/area/station/engineering/atmos/pumproom)
+"lPB" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"lPC" = (
/obj/structure/bookcase/random,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -32566,6 +35264,12 @@
/obj/machinery/announcement_system,
/turf/open/floor/iron/grimy,
/area/station/tcommsat/server)
+"lPK" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/reagent_dispensers/fueltank,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"lPO" = (
/obj/structure/table,
/obj/item/surgery_tray/full{
@@ -32681,13 +35385,12 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos/pumproom)
-"lRD" = (
-/obj/item/radio/intercom/directional/south,
-/obj/effect/turf_decal/siding/wideplating_new/terracotta,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/mapping_helpers/broken_floor,
-/turf/open/floor/wood/tile,
-/area/station/commons/vacant_room/commissary)
+"lRU" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/dark/herringbone,
+/area/station/ai_monitored/command/nuke_storage)
"lRV" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/siding/dark_red{
@@ -32723,16 +35426,6 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron/cafeteria,
/area/station/science/breakroom)
-"lSw" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/structure/chair,
-/obj/effect/landmark/start/hangover,
-/obj/machinery/light/cold/directional/west,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"lSF" = (
/obj/effect/decal/cleanable/generic,
/obj/machinery/light/cold/directional/south,
@@ -32755,6 +35448,18 @@
/obj/machinery/chem_heater/withbuffer,
/turf/open/floor/iron/dark,
/area/station/medical/pharmacy)
+"lTa" = (
+/obj/effect/turf_decal/siding/wideplating/dark/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/dark_red/half/contrasted{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"lTg" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/mapping_helpers/broken_floor,
@@ -32777,6 +35482,13 @@
},
/turf/open/floor/iron/dark,
/area/station/cargo/storage)
+"lTy" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/stone,
+/area/station/service/bar)
"lTA" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/siding/wood{
@@ -32811,13 +35523,19 @@
},
/turf/open/floor/tram,
/area/station/maintenance/department/medical/central)
-"lTZ" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/duct,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/turf/open/floor/stone,
-/area/station/service/bar/backroom)
+"lUl" = (
+/obj/effect/turf_decal/plaque{
+ icon_state = "L1";
+ pixel_y = -15
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"lUo" = (
/turf/open/floor/iron,
/area/station/science/lobby)
@@ -32884,14 +35602,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
-"lVm" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/green/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"lVv" = (
/obj/structure/chair/stool/directional/south,
/obj/effect/turf_decal/siding/yellow{
@@ -32918,31 +35628,12 @@
/obj/effect/spawner/random/structure/grille,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
-"lVL" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"lVN" = (
/obj/effect/spawner/random/structure/crate,
/obj/effect/spawner/random/maintenance,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/starboard/lesser)
-"lVP" = (
-/obj/machinery/computer/security/telescreen/cmo{
- dir = 4;
- pixel_x = -30
- },
-/turf/open/floor/wood/parquet,
-/area/station/command/heads_quarters/cmo)
"lVW" = (
/obj/machinery/power/turbine/core_rotor{
dir = 8;
@@ -32951,11 +35642,6 @@
/obj/structure/cable,
/turf/open/floor/engine,
/area/station/maintenance/disposal/incinerator)
-"lWb" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/sign/warning/no_smoking/circle/directional/north,
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"lWk" = (
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron/large,
@@ -32971,7 +35657,7 @@
pixel_x = 5;
pixel_y = -5
},
-/obj/item/clothing/mask/cigarette/cigar/cohiba{
+/obj/item/cigarette/cigar/cohiba{
pixel_y = 4
},
/turf/open/floor/iron/dark/small,
@@ -33094,6 +35780,17 @@
},
/turf/open/floor/iron/dark,
/area/station/medical/cryo)
+"lXU" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/machinery/light/cold/directional/north,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"lXX" = (
/obj/machinery/light/warm/directional/north,
/turf/open/floor/iron,
@@ -33119,13 +35816,24 @@
"lYj" = (
/turf/closed/wall/r_wall,
/area/station/hallway/primary/fore)
+"lYl" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/status_display/ai/directional/north,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"lYt" = (
/obj/structure/table/wood/fancy/green,
/obj/item/storage/wallet{
pixel_x = -3;
pixel_y = 10
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = -1;
pixel_y = -2
},
@@ -33165,17 +35873,6 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
-"lYU" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"lYV" = (
/obj/effect/turf_decal/siding/wideplating/dark{
dir = 4
@@ -33197,6 +35894,20 @@
},
/turf/open/floor/iron/grimy,
/area/station/tcommsat/server)
+"lZf" = (
+/obj/machinery/vending/hydroseeds{
+ slogan_delay = 700
+ },
+/obj/effect/turf_decal/tile/green/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/effect/turf_decal/delivery/white{
+ color = "#52B4E9"
+ },
+/obj/machinery/camera/autoname/directional/north,
+/turf/open/floor/iron,
+/area/station/service/hydroponics)
"lZt" = (
/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/plating,
@@ -33246,22 +35957,6 @@
/obj/machinery/light/cold/directional/east,
/turf/open/floor/iron/dark,
/area/station/science/robotics/lab)
-"lZD" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/camera/directional/east,
-/obj/structure/sign/directions/security/directional/east{
- dir = 2
- },
-/obj/structure/sign/directions/medical/directional/east{
- pixel_y = 8
- },
-/obj/structure/sign/directions/science/directional/east{
- pixel_y = -8
- },
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"lZH" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -33289,31 +35984,32 @@
/obj/machinery/duct,
/turf/open/floor/iron,
/area/station/maintenance/department/medical/central)
-"maa" = (
-/obj/structure/table,
-/obj/item/tape,
-/obj/item/pen/red{
- pixel_x = 3;
- pixel_y = 12
+"lZT" = (
+/obj/structure/flora/bush/flowers_pp/style_random,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
},
-/obj/item/pen/blue{
- pixel_x = -6;
- pixel_y = 12
+/turf/open/floor/grass,
+/area/station/service/chapel)
+"lZW" = (
+/obj/structure/disposalpipe/segment{
+ dir = 6
},
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
-"mad" = (
-/obj/structure/table,
-/obj/item/taperecorder{
- pixel_x = -16;
- pixel_y = 3
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
},
-/obj/item/flashlight/lamp/green{
- pixel_x = 8;
- pixel_y = 3
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
+"mae" = (
+/obj/structure/table/wood,
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
},
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
+/obj/machinery/chem_dispenser/drinks,
+/turf/open/floor/iron/dark/textured,
+/area/station/service/bar)
"maf" = (
/turf/closed/wall/rust,
/area/station/hallway/primary/fore)
@@ -33329,26 +36025,12 @@
/obj/machinery/keycard_auth/directional/south,
/turf/open/floor/wood/large,
/area/station/command/heads_quarters/captain)
-"mam" = (
-/obj/structure/table,
-/obj/machinery/computer/libraryconsole/bookmanagement{
- dir = 1
- },
-/obj/effect/mapping_helpers/broken_floor,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"mau" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
},
/turf/open/floor/iron/white/small,
/area/station/science/cubicle)
-"maz" = (
-/obj/structure/chair/office,
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"maE" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -33365,6 +36047,19 @@
},
/turf/open/floor/sepia,
/area/station/maintenance/aft)
+"mbf" = (
+/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
+/obj/machinery/door/airlock{
+ name = "Maintenance"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"mbp" = (
/obj/structure/hedge,
/obj/machinery/light_switch/directional/east,
@@ -33376,16 +36071,24 @@
/obj/machinery/pdapainter/medbay,
/turf/open/floor/wood/parquet,
/area/station/command/heads_quarters/cmo)
+"mbC" = (
+/obj/structure/table/reinforced,
+/obj/structure/displaycase/forsale/kitchen{
+ pixel_y = 5
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/door/poddoor/shutters{
+ name = "Kitchen Shutters";
+ id = "kitchenshutters"
+ },
+/turf/open/floor/plating,
+/area/station/service/kitchen)
"mbG" = (
/obj/structure/fluff/broken_canister_frame,
/turf/open/floor/plating,
/area/station/maintenance/department/engine/atmos)
-"mbK" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/turf/open/floor/iron/grimy,
-/area/station/service/library)
"mbV" = (
/obj/effect/spawner/random/entertainment/arcade,
/turf/open/floor/eighties/red,
@@ -33395,6 +36098,16 @@
/obj/machinery/cell_charger,
/turf/open/floor/iron/grimy,
/area/station/science/cubicle)
+"mce" = (
+/obj/machinery/computer/slot_machine{
+ pixel_y = 2
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/obj/machinery/status_display/evac/directional/north,
+/turf/open/floor/stone,
+/area/station/service/bar)
"mch" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -33403,6 +36116,17 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/starboard/aft)
+"mcj" = (
+/obj/effect/turf_decal/tile/yellow/opposingcorners,
+/obj/structure/table/reinforced/titaniumglass,
+/obj/item/rcl/pre_loaded,
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_y = 17
+ },
+/obj/machinery/light/small/directional/south,
+/obj/structure/secure_safe/directional/east,
+/turf/open/floor/iron,
+/area/station/command/heads_quarters/ce)
"mcl" = (
/obj/structure/alien/weeds,
/obj/effect/gibspawner/xeno,
@@ -33427,6 +36151,16 @@
/obj/item/phone,
/turf/open/floor/iron/smooth,
/area/station/maintenance/port/aft)
+"mcI" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"mcP" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -33435,6 +36169,14 @@
/obj/effect/landmark/start/medical_doctor,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/aft)
+"mcS" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/light/cold/directional/east,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"mcT" = (
/obj/effect/turf_decal/bot,
/obj/effect/decal/cleanable/dirt,
@@ -33445,10 +36187,13 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/engineering/supermatter)
-"mdj" = (
-/obj/machinery/portable_atmospherics/scrubber,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
+"mcV" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"mdm" = (
/obj/structure/chair/office/light{
dir = 8
@@ -33471,15 +36216,6 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron/showroomfloor,
/area/station/commons/toilet/auxiliary)
-"mdU" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/camera/directional/north,
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"mdX" = (
/obj/machinery/light/small/directional/north,
/obj/machinery/conveyor_switch{
@@ -33526,6 +36262,16 @@
dir = 4
},
/area/station/hallway/secondary/entry)
+"mfa" = (
+/obj/effect/landmark/start/assistant,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/neutral/end{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"mfl" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/firealarm/directional/west,
@@ -33601,6 +36347,21 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
/area/station/engineering/atmospherics_engine)
+"mgW" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 9
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"mhk" = (
/turf/closed/wall,
/area/station/maintenance/port/greater)
@@ -33626,6 +36387,12 @@
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/iron/dark/smooth_large,
/area/station/service/lawoffice)
+"mib" = (
+/obj/machinery/door/firedoor,
+/turf/open/floor/iron/textured_half{
+ dir = 8
+ },
+/area/station/service/bar)
"mid" = (
/obj/effect/spawner/random/structure/crate_loot,
/turf/open/floor/plating,
@@ -33653,6 +36420,9 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
+"miF" = (
+/turf/open/floor/stone,
+/area/station/service/chapel)
"miN" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 4
@@ -33698,17 +36468,12 @@
/obj/item/clothing/under/costume/skeleton,
/turf/open/floor/eighties,
/area/station/service/abandoned_gambling_den/gaming)
-"mjs" = (
-/obj/structure/chair/office,
-/obj/machinery/light/directional/north,
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
-"mjB" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
+"mjr" = (
+/obj/machinery/vending/dinnerware,
+/obj/machinery/requests_console/auto_name/directional/south,
+/obj/effect/mapping_helpers/requests_console/supplies,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"mjF" = (
/obj/structure/table/glass,
/obj/item/clothing/suit/costume/cyborg_suit,
@@ -33750,6 +36515,17 @@
},
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/supply)
+"mka" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/landmark/navigate_destination/hydro,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"mkh" = (
/obj/structure/chair{
dir = 8
@@ -33769,12 +36545,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/maintenance/port/aft)
-"mku" = (
-/obj/structure/chair/sofa/bench/right,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
+"mkz" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"mkA" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -33784,6 +36563,14 @@
/obj/machinery/power/apc/auto_name/directional/north,
/turf/open/floor/iron/white/textured_large,
/area/station/command/heads_quarters/cmo)
+"mkD" = (
+/obj/machinery/vending/boozeomat,
+/obj/effect/turf_decal/siding/wood/end{
+ dir = 4
+ },
+/obj/machinery/status_display/ai/directional/north,
+/turf/open/floor/iron/dark/textured,
+/area/station/service/bar)
"mkF" = (
/obj/structure/disposalpipe/segment,
/obj/effect/landmark/start/depsec/supply,
@@ -33864,15 +36651,6 @@
},
/turf/open/floor/iron/cafeteria,
/area/station/security/prison/mess)
-"mmp" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/light/small/directional/west,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/status_display/ai/directional/west,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"mms" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/tile/yellow/opposingcorners,
@@ -33914,6 +36692,15 @@
},
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
+"mmL" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"mmT" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -33958,23 +36745,24 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/exit/departure_lounge)
-"mnn" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/structure/sign/painting/library{
- pixel_y = 32
+"mnl" = (
+/obj/structure/table,
+/obj/item/circuitboard/machine/coffeemaker/impressa,
+/obj/item/coffee_cartridge/decaf{
+ pixel_y = 9
},
-/turf/open/floor/iron/smooth,
-/area/station/service/library)
-"mnu" = (
-/obj/structure/chair/office{
- dir = 4
+/turf/open/floor/iron/dark/small,
+/area/station/maintenance/central/lesser)
+"mno" = (
+/obj/machinery/light/small/directional/south,
+/obj/machinery/firealarm/directional/south,
+/obj/item/kirbyplants/random,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
},
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/stone,
+/area/station/service/bar)
"mnw" = (
/obj/effect/spawner/random/vending/colavend,
/obj/machinery/firealarm/directional/east,
@@ -34040,6 +36828,26 @@
},
/turf/open/floor/plating,
/area/station/cargo/storage)
+"mog" = (
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
+"moj" = (
+/obj/machinery/door/airlock{
+ name = "Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/command/maintenance,
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 4
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/hallway/abandoned_command)
"mom" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/atmospherics/components/binary/pump{
@@ -34062,6 +36870,14 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/station/cargo/storage)
+"moG" = (
+/obj/effect/spawner/random/trash,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"mpk" = (
/obj/machinery/airalarm/directional/south,
/turf/open/floor/circuit/green,
@@ -34073,24 +36889,30 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/carpet/lone,
/area/station/service/abandoned_gambling_den)
+"mpx" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/eighties,
+/area/station/hallway/primary/central/fore)
"mpy" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
},
/turf/open/floor/wood/parquet,
/area/station/medical/psychology)
-"mpC" = (
-/obj/structure/table,
-/obj/item/paper_bin{
- pixel_x = -2;
- pixel_y = 4
- },
-/obj/item/pen{
- pixel_x = -2;
- pixel_y = 4
+"mpB" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
},
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
+/obj/effect/turf_decal/siding/wood/corner,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/light/floor,
+/turf/open/floor/stone,
+/area/station/service/bar)
"mpE" = (
/obj/machinery/light/cold/dim/directional/north,
/obj/structure/disposalpipe/segment{
@@ -34099,17 +36921,6 @@
/obj/structure/sign/poster/official/moth_piping/directional/north,
/turf/open/floor/iron/small,
/area/station/engineering/break_room)
-"mpO" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"mpQ" = (
/obj/structure/bed{
dir = 4
@@ -34121,12 +36932,6 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron/small,
/area/station/security/brig)
-"mqc" = (
-/obj/structure/table,
-/obj/item/pai_card,
-/obj/machinery/newscaster/directional/east,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"mql" = (
/obj/effect/turf_decal/siding/wideplating/dark{
dir = 1
@@ -34183,11 +36988,37 @@
},
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
+"mrn" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"mrt" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/small/directional/north,
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
+"mru" = (
+/obj/effect/mapping_helpers/requests_console/supplies,
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/requests_console/auto_name/directional/south,
+/turf/open/floor/stone,
+/area/station/service/bar)
"mrP" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -34220,6 +37051,16 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
+"msk" = (
+/obj/effect/turf_decal/plaque{
+ icon_state = "L3";
+ pixel_y = -15
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"msq" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -34237,6 +37078,15 @@
"msJ" = (
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
+"mtc" = (
+/obj/structure/table/wood,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/screwdriver,
+/obj/effect/turf_decal/siding/wideplating_new/terracotta{
+ dir = 8
+ },
+/turf/open/floor/wood/tile,
+/area/station/maintenance/central/lesser)
"mtP" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -34245,17 +37095,6 @@
/obj/machinery/power/apc/auto_name/directional/east,
/turf/open/floor/iron,
/area/station/security/prison)
-"mtV" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock{
- name = "Theater Greenroom"
- },
-/obj/effect/mapping_helpers/airlock/access/all/service/theatre,
-/turf/open/floor/iron/textured_half{
- dir = 8
- },
-/area/station/service/greenroom)
"mud" = (
/obj/structure/cable,
/obj/machinery/door/airlock{
@@ -34323,6 +37162,16 @@
/obj/machinery/status_display/ai/directional/north,
/turf/open/floor/wood/tile,
/area/station/command/meeting_room)
+"mvd" = (
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/structure/cable,
+/obj/machinery/duct,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/plating,
+/area/station/maintenance/central/lesser)
"mvh" = (
/obj/structure/window/reinforced/spawner/directional/west,
/obj/machinery/holopad,
@@ -34424,13 +37273,6 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
-"mwP" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/mapping_helpers/broken_floor,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
"mxa" = (
/obj/structure/window/reinforced/spawner/directional/east,
/turf/open/floor/glass/reinforced,
@@ -34462,14 +37304,6 @@
/obj/structure/barricade/wooden/crude,
/turf/open/floor/noslip,
/area/station/maintenance/port/aft)
-"mxN" = (
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"mxP" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -34479,6 +37313,14 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
+"mxS" = (
+/obj/item/kirbyplants/random,
+/obj/machinery/camera/autoname/directional/west,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/iron/white,
+/area/station/hallway/primary/central/aft)
"mxX" = (
/obj/structure/transit_tube/curved/flipped,
/obj/structure/lattice,
@@ -34494,6 +37336,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/starboard/aft)
+"mye" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/rock/pile/jungle/style_5{
+ pixel_y = -5;
+ pixel_x = -8
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"myi" = (
/obj/structure/lattice/catwalk,
/obj/machinery/atmospherics/pipe/smart/simple/brown/visible{
@@ -34563,21 +37415,15 @@
/obj/item/paper/fluff/jobs/engineering/frequencies,
/turf/open/floor/carpet/executive,
/area/station/command/meeting_room)
-"mzc" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line{
+"mze" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/table,
-/obj/machinery/door/poddoor/shutters{
- dir = 4;
- id = "vaco";
- name = "Comissary Shutters"
- },
/turf/open/floor/plating,
-/area/station/commons/vacant_room/commissary)
+/area/station/maintenance/port/greater)
"mzf" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/table,
@@ -34617,22 +37463,6 @@
/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/open/floor/iron,
/area/station/maintenance/fore/greater)
-"mAn" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
-"mAo" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/firealarm/directional/west,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"mAs" = (
/obj/structure/rack,
/obj/item/storage/toolbox/electrical{
@@ -34652,6 +37482,12 @@
/obj/machinery/light/small/directional/east,
/turf/open/misc/sandy_dirt,
/area/station/hallway/primary/central/fore)
+"mAK" = (
+/obj/structure/table/greyscale,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/wrench,
+/turf/open/floor/iron/grimy,
+/area/station/engineering/main)
"mAL" = (
/obj/structure/window/reinforced/spawner/directional/north,
/turf/open/floor/iron,
@@ -34664,6 +37500,17 @@
},
/turf/open/floor/iron/showroomfloor,
/area/station/commons/toilet/auxiliary)
+"mAR" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"mBo" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -34678,30 +37525,10 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmospherics_engine)
-"mBy" = (
-/obj/effect/turf_decal/tile/blue/half/contrasted{
- dir = 4
- },
-/obj/item/kirbyplants/random/fullysynthetic,
-/obj/machinery/light/small/directional/east,
-/turf/open/floor/iron/white,
-/area/station/maintenance/central/greater)
"mBC" = (
/obj/structure/sign/poster/official/soft_cap_pop_art/directional/north,
/turf/open/floor/iron/grimy,
/area/station/commons/vacant_room/office)
-"mCb" = (
-/obj/machinery/computer/cargo{
- dir = 1
- },
-/obj/machinery/computer/security/telescreen/vault{
- dir = 1;
- pixel_y = -30
- },
-/obj/machinery/camera/autoname/directional/south,
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/wood,
-/area/station/command/heads_quarters/qm)
"mCf" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/door/airlock/external/glass{
@@ -34738,6 +37565,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/department/electrical)
+"mDf" = (
+/obj/structure/table/wood,
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"mDh" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -34754,15 +37585,16 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"mDq" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+"mDA" = (
+/obj/structure/table/wood,
+/obj/machinery/computer/libraryconsole{
+ dir = 1
},
-/obj/structure/sign/departments/cargo/directional/west,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
+/obj/structure/sign/painting/library{
+ pixel_x = 30
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"mDG" = (
/obj/effect/turf_decal/tile/dark_red/half/contrasted{
dir = 1
@@ -34807,6 +37639,13 @@
/obj/machinery/door/firedoor,
/turf/open/floor/catwalk_floor/flat_white,
/area/station/science/robotics/lab)
+"mEb" = (
+/obj/structure/flora/bush/jungle/c/style_random,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"mEq" = (
/obj/structure/closet/crate/wooden{
name = "Alms Box"
@@ -34908,6 +37747,22 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/circuit,
/area/station/tcommsat/server)
+"mFH" = (
+/obj/structure/table/greyscale,
+/obj/item/screwdriver,
+/obj/item/stack/cable_coil/cut{
+ pixel_x = 11;
+ pixel_y = 7
+ },
+/obj/machinery/camera/directional/west{
+ c_tag = "Engineering - Office"
+ },
+/obj/item/stock_parts/power_store/cell/emproof{
+ pixel_x = -6;
+ pixel_y = 9
+ },
+/turf/open/floor/iron/grimy,
+/area/station/engineering/main)
"mFL" = (
/obj/structure/table,
/obj/effect/turf_decal/siding/thinplating_new/terracotta{
@@ -34958,7 +37813,7 @@
pixel_y = 2
},
/obj/item/wrench,
-/obj/item/clothing/mask/cigarette/xeno{
+/obj/item/cigarette/xeno{
pixel_x = -3;
pixel_y = -9
},
@@ -35015,6 +37870,10 @@
/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron/white/small,
/area/station/medical/virology)
+"mHh" = (
+/obj/structure/cable,
+/turf/open/floor/iron/dark/small,
+/area/station/maintenance/central/lesser)
"mHZ" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -35082,6 +37941,23 @@
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/wood/tile,
/area/station/command/corporate_showroom)
+"mIE" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Public Shrine"
+ },
+/obj/effect/turf_decal/siding/wood/end{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/stone,
+/area/station/hallway/primary/port)
+"mIP" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/wood/tile,
+/area/station/maintenance/central/lesser)
"mIR" = (
/obj/structure/chair/stool/directional/east,
/obj/effect/landmark/start/hangover,
@@ -35171,16 +38047,6 @@
/obj/effect/spawner/random/food_or_drink/seed,
/turf/open/misc/sandy_dirt,
/area/station/maintenance/starboard/aft)
-"mJW" = (
-/obj/machinery/biogenerator,
-/obj/effect/turf_decal/delivery,
-/obj/machinery/door/window/left/directional/south{
- name = "Bio-Generator";
- req_access = list("hydroponics")
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_large,
-/area/station/service/hydroponics)
"mJX" = (
/obj/effect/turf_decal/siding/thinplating_new{
dir = 8
@@ -35207,13 +38073,18 @@
dir = 1
},
/area/station/hallway/primary/aft)
-"mKs" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/item/kirbyplants/random,
-/obj/machinery/airalarm/directional/east,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+"mKm" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
+/area/station/hallway/primary/port)
"mKB" = (
/obj/machinery/navbeacon{
codes_txt = "delivery;dir=8";
@@ -35230,17 +38101,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/exit/departure_lounge)
-"mKH" = (
-/obj/structure/disposalpipe/trunk{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/effect/turf_decal/bot,
-/obj/machinery/disposal/bin,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"mKK" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -35270,15 +38130,6 @@
},
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/supply)
-"mLi" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/duct,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/structure/sign/departments/botany/alt1/directional/west,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"mLk" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -35332,6 +38183,24 @@
},
/turf/open/floor/iron,
/area/station/science/cytology)
+"mLT" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/structure/table/glass,
+/obj/item/paper_bin{
+ pixel_x = -3;
+ pixel_y = 7
+ },
+/obj/item/pen/invisible{
+ pixel_x = -2;
+ pixel_y = 7
+ },
+/obj/machinery/newscaster/directional/north,
+/obj/item/storage/photo_album/library,
+/obj/item/book/codex_gigas,
+/turf/open/floor/iron/grimy,
+/area/station/service/library)
"mLU" = (
/obj/machinery/vending/autodrobe,
/obj/machinery/light/small/directional/west,
@@ -35381,6 +38250,13 @@
},
/turf/open/floor/iron,
/area/station/science/robotics/lab)
+"mMO" = (
+/obj/structure/cable,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"mMY" = (
/obj/effect/turf_decal/tile/dark_red/half/contrasted{
dir = 1
@@ -35454,6 +38330,22 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
+"mOx" = (
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/rods/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/electronics/airlock,
+/obj/item/electronics/airlock,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 30
+ },
+/obj/item/gps,
+/obj/structure/closet/crate/engineering,
+/obj/machinery/light/cold/directional/east,
+/obj/item/clothing/gloves/color/yellow,
+/turf/open/floor/iron/dark/small,
+/area/station/engineering/storage_shared)
"mOI" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/small/directional/south,
@@ -35468,6 +38360,15 @@
/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/light/colour_cycle/dancefloor_b,
/area/station/maintenance/starboard/central)
+"mOV" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/extinguisher_cabinet/directional/west,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"mPe" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{
dir = 4
@@ -35548,14 +38449,6 @@
dir = 8
},
/area/station/command/heads_quarters/hos)
-"mRp" = (
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/structure/hedge,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"mRA" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible,
/turf/open/floor/iron/stairs/left,
@@ -35600,15 +38493,28 @@
},
/turf/open/space/basic,
/area/station/engineering/atmos/space_catwalk)
-"mSi" = (
-/obj/structure/mannequin/plastic,
+"mSA" = (
+/obj/structure/cable,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/open/floor/plating,
-/area/station/cargo/boutique)
+/area/station/maintenance/port/greater)
"mSH" = (
/obj/effect/spawner/random/structure/crate,
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/starboard/central)
+"mSQ" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/obj/structure/extinguisher_cabinet/directional/west,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"mSS" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -35665,13 +38571,6 @@
"mTl" = (
/turf/closed/wall,
/area/station/cargo/sorting)
-"mTq" = (
-/obj/effect/turf_decal/tile/neutral/half/contrasted{
- dir = 1
- },
-/obj/effect/turf_decal/tile/dark_red/half/contrasted,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"mTs" = (
/turf/closed/wall/r_wall,
/area/station/security/prison/work)
@@ -35740,6 +38639,13 @@
},
/turf/open/misc/sandy_dirt,
/area/station/security/tram)
+"mTT" = (
+/obj/effect/spawner/random/entertainment/arcade{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating,
+/turf/open/floor/eighties/red,
+/area/station/hallway/primary/central/fore)
"mTU" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/transit_tube/horizontal,
@@ -35755,6 +38661,16 @@
/obj/effect/landmark/start/paramedic,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
+"mUi" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"mUn" = (
/obj/structure/cable,
/obj/machinery/door/airlock{
@@ -35793,11 +38709,18 @@
/obj/machinery/firealarm/directional/west,
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
-"mVa" = (
-/obj/effect/turf_decal/tile/neutral,
+"mVc" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/aft)
"mVm" = (
/obj/effect/turf_decal/tile/green/anticorner/contrasted{
dir = 1
@@ -35846,11 +38769,6 @@
dir = 4
},
/area/station/medical/medbay/central)
-"mVY" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/closed/wall,
-/area/station/hallway/secondary/spacebridge)
"mWc" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -35868,6 +38786,27 @@
/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
/turf/open/floor/iron/dark/small,
/area/station/tcommsat/server)
+"mWF" = (
+/obj/machinery/status_display/evac/directional/north,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
+"mWT" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"mWY" = (
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/obj/structure/chair/sofa/bench/left{
@@ -35920,6 +38859,18 @@
/obj/machinery/firealarm/directional/north,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
+"mXZ" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"mYd" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -35971,15 +38922,6 @@
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/security/armory)
-"mYS" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/structure/flora/bush/flowers_br/style_random,
-/obj/machinery/camera/autoname/directional/north,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"mYT" = (
/obj/structure/table,
/obj/item/assembly/igniter{
@@ -36037,21 +38979,25 @@
dir = 1
},
/area/station/security/execution/education)
-"mZg" = (
-/obj/structure/disposalpipe/segment{
+"mZd" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/trimline/neutral/line{
dir = 4
},
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
+/obj/effect/turf_decal/trimline/neutral/line{
dir = 8
},
+/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
-"mZh" = (
+"mZg" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/status_display/evac/directional/north,
/obj/effect/turf_decal/tile/neutral{
- dir = 1
+ dir = 8
},
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
@@ -36081,12 +39027,6 @@
/obj/machinery/airalarm/directional/north,
/turf/open/floor/iron/smooth,
/area/station/maintenance/solars/starboard/aft)
-"nau" = (
-/obj/structure/disposalpipe/junction,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"nay" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/door/airlock/public/glass{
@@ -36107,11 +39047,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/maintenance/starboard/greater)
-"naE" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/iron/stairs,
-/area/station/maintenance/port/greater)
"naF" = (
/turf/open/floor/iron/dark/smooth_corner{
dir = 1
@@ -36125,17 +39060,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/station/security/brig/entrance)
-"naI" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/item/storage/box{
- pixel_x = -8;
- pixel_y = 15
- },
-/obj/machinery/light_switch/directional/north,
-/turf/open/floor/stone,
-/area/station/service/theater)
"naN" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/door/airlock{
@@ -36144,13 +39068,6 @@
},
/turf/open/floor/iron/showroomfloor,
/area/station/commons/toilet/auxiliary)
-"naO" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/turf/open/floor/iron/smooth,
-/area/station/service/library)
"nbj" = (
/obj/structure/railing{
dir = 1
@@ -36161,11 +39078,6 @@
},
/turf/open/floor/iron/small,
/area/station/engineering/supermatter/room)
-"nbu" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/machinery/holopad,
-/turf/open/floor/iron/smooth,
-/area/station/service/library)
"nbF" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/light/small/directional/west,
@@ -36181,13 +39093,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/port/lesser)
-"nbZ" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/turf/open/floor/iron/smooth,
-/area/station/service/library)
"ncb" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/table/wood,
@@ -36234,13 +39139,6 @@
/obj/effect/landmark/start/lawyer,
/turf/open/floor/wood/tile,
/area/station/service/lawoffice)
-"ncs" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/camera/autoname/directional/east,
-/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
"ncD" = (
/obj/structure/lattice,
/obj/structure/disposalpipe/segment{
@@ -36277,16 +39175,6 @@
},
/turf/open/floor/tram,
/area/station/maintenance/department/medical/central)
-"ndq" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/morgue{
- name = "Secret Corridor";
- req_access = list("library")
- },
-/turf/open/floor/catwalk_floor/iron_dark,
-/area/station/maintenance/central/greater)
"ndM" = (
/obj/structure/tank_dispenser/oxygen,
/turf/open/floor/iron,
@@ -36311,6 +39199,12 @@
},
/turf/open/floor/iron/dark,
/area/station/medical/chemistry)
+"neF" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"neL" = (
/obj/structure/closet/crate{
name = "Materials Crate"
@@ -36354,6 +39248,10 @@
},
/turf/open/floor/iron,
/area/station/security)
+"ngd" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"ngq" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -36361,27 +39259,18 @@
},
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
+"ngv" = (
+/obj/structure/window/reinforced/spawner/directional/north,
+/obj/structure/window/reinforced/spawner/directional/south,
+/obj/structure/grille,
+/obj/structure/window/reinforced/spawner/directional/west,
+/turf/open/floor/plating,
+/area/station/hallway/primary/central/fore)
"ngL" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/security/prison)
-"nha" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/dark_red/half/contrasted{
- dir = 8
- },
-/obj/machinery/computer/security/telescreen/interrogation{
- dir = 8;
- name = "isolation room monitor";
- network = list("isolation");
- pixel_x = 30
- },
-/obj/machinery/photobooth/security,
-/turf/open/floor/iron,
-/area/station/security/execution/transfer)
"nhe" = (
/obj/structure/railing{
dir = 4
@@ -36565,6 +39454,13 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/department/science/xenobiology)
+"njs" = (
+/obj/structure/chair/comfy/black{
+ dir = 1
+ },
+/obj/effect/landmark/start/chaplain,
+/turf/open/floor/carpet/lone,
+/area/station/service/chapel/office)
"nju" = (
/obj/machinery/duct,
/obj/effect/decal/cleanable/dirt,
@@ -36656,6 +39552,12 @@
/obj/effect/turf_decal/trimline/neutral/line,
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
+"nkW" = (
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/lobby)
"nla" = (
/turf/closed/wall,
/area/station/commons/storage/art)
@@ -36701,6 +39603,13 @@
},
/turf/open/floor/iron/smooth,
/area/station/engineering/atmos)
+"nlQ" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 8
+ },
+/obj/machinery/holopad,
+/turf/open/floor/eighties,
+/area/station/hallway/primary/central/fore)
"nlS" = (
/turf/open/floor/iron/white/small,
/area/station/medical/virology)
@@ -36747,23 +39656,20 @@
/obj/structure/cable,
/turf/open/floor/iron/smooth,
/area/station/command/heads_quarters/qm)
+"nnd" = (
+/obj/effect/turf_decal/tile/dark_red/half/contrasted{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"nne" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/turf/open/floor/iron,
/area/station/security/tram)
-"nnk" = (
-/obj/machinery/camera/motion/directional/north{
- c_tag = "Vault Exterior";
- id_tag = list("vault")
- },
-/turf/open/space/basic,
-/area/space)
-"nnR" = (
-/obj/effect/landmark/start/hangover,
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
"noe" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -36865,9 +39771,6 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/station/cargo/drone_bay)
-"npF" = (
-/turf/closed/wall/rust,
-/area/station/maintenance/port/greater)
"npH" = (
/obj/effect/spawner/random/trash,
/turf/open/floor/iron,
@@ -36879,33 +39782,12 @@
},
/turf/open/floor/engine,
/area/station/engineering/supermatter)
-"npS" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/maintenance{
- name = "Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/all/supply/general,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"npV" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/station/service/lawoffice)
-"npY" = (
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/red/line,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron/small,
-/area/station/hallway/secondary/spacebridge)
"npZ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/tile/neutral{
@@ -36964,6 +39846,13 @@
},
/turf/open/floor/iron/white,
/area/station/medical/virology)
+"nqY" = (
+/obj/effect/landmark/event_spawn,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"nra" = (
/obj/effect/turf_decal/siding/wood,
/obj/structure/window/spawner/directional/south,
@@ -36971,6 +39860,21 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron,
/area/station/engineering/main)
+"nrg" = (
+/obj/structure/closet/secure_closet/hydroponics,
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 1
+ },
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
+"nrp" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/item/flashlight/lantern/on,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"nry" = (
/obj/effect/turf_decal/tile/red/anticorner/contrasted{
dir = 8
@@ -37020,13 +39924,15 @@
"nsy" = (
/turf/closed/wall/r_wall/rust,
/area/station/engineering/hallway)
-"nsH" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+"nsz" = (
+/obj/effect/spawner/random/vending/snackvend,
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/south,
+/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
+/turf/open/floor/iron/white/side,
+/area/station/hallway/primary/central/aft)
"nsL" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/tile/red{
@@ -37087,14 +39993,14 @@
/obj/effect/spawner/random/maintenance/two,
/turf/open/floor/plating,
/area/station/maintenance/fore/lesser)
-"ntw" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/public/glass{
- name = "Public Shrine"
+"ntu" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 1
},
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_half,
-/area/station/hallway/primary/port)
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"ntF" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/status_display/ai/directional/south,
@@ -37116,6 +40022,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/cafeteria,
/area/station/science/breakroom)
+"ntP" = (
+/obj/structure/displaycase/trophy,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/machinery/camera/autoname/directional/west,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"ntW" = (
/obj/machinery/light/small/directional/north,
/obj/machinery/vending/wardrobe/coroner_wardrobe,
@@ -37124,15 +40038,6 @@
},
/turf/open/floor/iron/small,
/area/station/medical/morgue)
-"ntY" = (
-/obj/structure/hedge,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/item/radio/intercom/directional/south,
-/turf/open/floor/iron/smooth,
-/area/station/service/library)
"ntZ" = (
/obj/machinery/door/airlock/public/glass{
name = "Recreation"
@@ -37153,6 +40058,17 @@
/obj/effect/turf_decal/sand/plating,
/turf/closed/wall,
/area/station/maintenance/port/lesser)
+"nun" = (
+/obj/structure/flora/bush/flowers_br/style_random{
+ pixel_x = -3;
+ pixel_y = 4
+ },
+/obj/effect/light_emitter/fake_outdoors,
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/turf/open/floor/grass/Airless,
+/area/station/hallway/primary/central/aft)
"nuo" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/effect/decal/cleanable/dirt,
@@ -37178,15 +40094,6 @@
},
/turf/open/floor/iron/small,
/area/station/engineering/break_room)
-"nuv" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"nuC" = (
/obj/effect/turf_decal/siding,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -37218,14 +40125,17 @@
},
/turf/open/floor/iron/smooth,
/area/station/maintenance/solars/starboard/aft)
-"nuX" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 6
+"nuV" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/structure/mannequin/plastic,
-/obj/machinery/firealarm/directional/south,
-/turf/open/floor/carpet/blue,
-/area/station/cargo/boutique)
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/structure/chair/sofa/bench/left{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"nuY" = (
/obj/structure/broken_flooring/pile/directional/east,
/obj/structure/alien/weeds/node,
@@ -37280,11 +40190,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
-"nwS" = (
-/obj/structure/flora/ash/tall_shroom,
-/obj/structure/sign/poster/random/directional/north,
-/turf/open/floor/grass,
-/area/station/service/hydroponics)
"nxo" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -37293,6 +40198,18 @@
},
/turf/open/floor/iron/dark,
/area/station/cargo/storage)
+"nxy" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
+/obj/effect/turf_decal/weather/snow,
+/obj/structure/closet/secure_closet/freezer/meat,
+/obj/effect/turf_decal/weather/snow/corner,
+/obj/item/food/meat/slab/monkey,
+/obj/item/food/meat/slab/monkey,
+/obj/item/food/meat/slab/monkey,
+/turf/open/floor/iron/freezer,
+/area/station/service/kitchen/coldroom)
"nxD" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -37304,6 +40221,16 @@
},
/turf/open/floor/iron/dark/small,
/area/station/medical/morgue)
+"nxI" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/fore)
"nxJ" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/machinery/modular_computer/preset/id{
@@ -37312,6 +40239,11 @@
/obj/machinery/keycard_auth/directional/south,
/turf/open/floor/wood,
/area/station/command/heads_quarters/qm)
+"nxK" = (
+/mob/living/basic/deer,
+/obj/structure/flora/bush/sparsegrass,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"nxO" = (
/obj/effect/spawner/structure/window,
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible,
@@ -37361,17 +40293,6 @@
},
/turf/open/floor/iron/white,
/area/station/medical/virology)
-"nys" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/structure/sign/directions/vault/directional/west{
- dir = 2
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"nyx" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -37491,11 +40412,6 @@
},
/turf/open/space/basic,
/area/space)
-"nAi" = (
-/obj/structure/table,
-/obj/structure/sign/poster/official/random/directional/north,
-/turf/open/floor/wood,
-/area/station/service/theater)
"nAn" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron,
@@ -37508,10 +40424,12 @@
/obj/machinery/light/small/broken/directional/west,
/turf/open/misc/sandy_dirt,
/area/station/maintenance/starboard/aft)
-"nAx" = (
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
+"nAq" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/iron/grimy,
+/area/station/service/library)
"nAy" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -37527,17 +40445,6 @@
/obj/effect/landmark/start/roboticist,
/turf/open/floor/iron,
/area/station/science/robotics/lab)
-"nAO" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/red/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
- },
-/turf/open/floor/iron/smooth,
-/area/station/service/greenroom)
"nBd" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -37643,6 +40550,13 @@
/obj/machinery/camera/autoname/directional/south,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/lobby)
+"nCX" = (
+/obj/machinery/light/floor,
+/obj/structure/flora/bush/flowers_pp,
+/obj/structure/flora/bush/flowers_yw,
+/obj/structure/flora/bush/fullgrass,
+/turf/open/floor/grass,
+/area/station/hallway/primary/central/fore)
"nCY" = (
/obj/structure/cable,
/turf/open/floor/iron/kitchen/small,
@@ -37660,6 +40574,13 @@
},
/turf/open/floor/iron,
/area/station/security)
+"nDm" = (
+/obj/structure/table,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/effect/spawner/random/food_or_drink/cake_ingredients,
+/obj/item/kitchen/rollingpin,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"nDQ" = (
/obj/structure/chair{
dir = 4
@@ -37693,6 +40614,19 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/dark/textured_large,
/area/station/cargo/bitrunning/den)
+"nEq" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Library"
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/floor/iron/textured_half,
+/area/station/service/library)
"nEx" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -37809,17 +40743,6 @@
/obj/machinery/portable_atmospherics/pump,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
-"nGd" = (
-/obj/machinery/vending/wardrobe/det_wardrobe,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/security/telescreen{
- dir = 4;
- name = "Station Monitor";
- network = list("ss13");
- pixel_x = -26
- },
-/turf/open/floor/wood,
-/area/station/security/detectives_office)
"nGe" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -37882,15 +40805,6 @@
},
/turf/open/floor/iron/showroomfloor,
/area/station/medical/virology)
-"nGJ" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/table,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"nGP" = (
/obj/effect/turf_decal/tile/yellow{
dir = 1
@@ -37941,16 +40855,6 @@
/obj/effect/spawner/random/structure/closet_maintenance,
/turf/open/floor/plating,
/area/station/maintenance/port/lesser)
-"nHB" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/red/line,
-/turf/open/floor/iron/small,
-/area/station/hallway/primary/central/fore)
"nHN" = (
/obj/structure/table,
/obj/item/stack/pipe_cleaner_coil/random,
@@ -38047,14 +40951,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/small,
/area/station/engineering/atmos)
-"nIS" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/airlock{
- name = "Library Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"nIT" = (
/obj/structure/railing{
dir = 6
@@ -38068,6 +40964,32 @@
/obj/structure/cable,
/turf/open/floor/iron/small,
/area/station/maintenance/solars/starboard/fore)
+"nJj" = (
+/obj/effect/spawner/random/vending/snackvend,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 8
+ },
+/obj/machinery/airalarm/directional/east,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/iron/dark/side{
+ dir = 4
+ },
+/area/station/hallway/primary/central/fore)
+"nJo" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/spawner/random/structure/steam_vent,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"nJG" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -38106,37 +41028,10 @@
/obj/machinery/light/floor,
/turf/open/floor/iron/dark,
/area/station/tcommsat/server)
-"nKk" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/sorting/mail{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/mapping_helpers/mail_sorting/service/kitchen,
-/obj/machinery/duct,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
-"nKm" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"nKz" = (
/obj/machinery/light/floor,
/turf/open/floor/iron/smooth,
/area/station/hallway/secondary/command)
-"nKL" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/spawner/random/trash,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"nKO" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 1
@@ -38144,22 +41039,25 @@
/obj/machinery/portable_atmospherics/canister,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
-"nKX" = (
-/obj/effect/spawner/random/structure/grille,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"nLH" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/smooth,
/area/station/cargo/warehouse)
-"nLN" = (
+"nLM" = (
/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
+/obj/structure/table/reinforced,
+/obj/item/stack/cable_coil{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/electronics/airlock{
+ pixel_y = 13
+ },
+/turf/open/floor/iron,
+/area/station/engineering/storage/tech)
"nMn" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -38214,16 +41112,6 @@
name = "Holodeck Projector Floor"
},
/area/station/holodeck/rec_center)
-"nNb" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/dark_red,
-/obj/structure/sign/warning/no_smoking/circle/directional/north,
-/turf/open/floor/iron,
-/area/station/security)
"nNe" = (
/obj/structure/window/reinforced/spawner/directional/north,
/turf/open/floor/iron/dark/textured_half{
@@ -38240,6 +41128,24 @@
},
/turf/open/floor/plating,
/area/station/maintenance/hallway/abandoned_command)
+"nNz" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
+"nNA" = (
+/obj/machinery/light/small/broken/directional/west,
+/turf/open/floor/iron/dark/small,
+/area/station/maintenance/central/lesser)
"nNB" = (
/obj/machinery/door/airlock{
name = "Gardening Supplies"
@@ -38270,6 +41176,13 @@
},
/turf/open/floor/plating,
/area/station/medical/pharmacy)
+"nPe" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/dark_red/fourcorners,
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"nPt" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -38454,6 +41367,19 @@
/obj/effect/turf_decal/tile/dark_red/half/contrasted,
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/customs)
+"nSb" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"nSd" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -38514,17 +41440,6 @@
},
/turf/open/floor/iron,
/area/station/cargo/storage)
-"nTj" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"nTt" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/machinery/computer/shuttle/mining/common{
@@ -38563,6 +41478,12 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/grimy,
/area/station/engineering/main)
+"nUd" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"nUo" = (
/obj/effect/turf_decal/tile/purple/opposingcorners,
/obj/effect/turf_decal/siding/green{
@@ -38605,6 +41526,12 @@
/obj/machinery/atmospherics/pipe/bridge_pipe/brown/visible,
/turf/open/space/basic,
/area/station/engineering/atmos/space_catwalk)
+"nUK" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/structure/barricade/wooden/crude,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/station/cargo/boutique)
"nUQ" = (
/obj/structure/chair{
dir = 8
@@ -38655,6 +41582,18 @@
/obj/item/wirecutters,
/turf/open/floor/iron/dark,
/area/station/security/office)
+"nVw" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 8
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"nVx" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -38674,20 +41613,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/maintenance/hallway/abandoned_command)
-"nVD" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/item/chair{
- pixel_x = 2;
- pixel_y = -5
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"nVF" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced/tinted,
@@ -38738,6 +41663,20 @@
},
/turf/open/floor/iron/white/textured_large,
/area/station/medical/pharmacy)
+"nXx" = (
+/obj/effect/turf_decal/tile/dark_red/half/contrasted{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/obj/machinery/light/cold/directional/south,
+/obj/machinery/airalarm/directional/south,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"nXC" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
@@ -38870,6 +41809,10 @@
/obj/structure/holosign/barrier/atmos/tram,
/turf/open/floor/tram,
/area/station/maintenance/department/medical/central)
+"nZG" = (
+/obj/machinery/vending/wardrobe/chef_wardrobe,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"nZQ" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/white/line{
@@ -38930,17 +41873,20 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark,
/area/station/commons/dorms)
-"oaV" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/public/glass{
- name = "Cargo Botique"
+"oaY" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
},
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_half{
- dir = 1
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = 4;
+ pixel_y = 5
},
-/area/station/hallway/primary/central/fore)
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/iron/dark,
+/area/station/science/robotics/lab)
"obd" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{
dir = 10
@@ -38957,13 +41903,15 @@
},
/turf/open/floor/iron/smooth,
/area/station/engineering/break_room)
-"obm" = (
-/obj/structure/disposalpipe/segment,
+"obi" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/firealarm/directional/east,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
+/obj/structure/cable,
+/obj/structure/disposalpipe/junction/flip{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"obq" = (
/obj/structure/cable,
/obj/structure/lattice/catwalk,
@@ -38993,10 +41941,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/textured_half,
/area/station/hallway/secondary/dock)
-"obU" = (
-/obj/structure/reagent_dispensers/plumbed,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"obW" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -39004,6 +41948,18 @@
"ocb" = (
/turf/open/floor/iron/white/small,
/area/station/science/cubicle)
+"ocv" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/landmark/navigate_destination/library,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"ocx" = (
/obj/structure/sign/warning/vacuum/external,
/turf/closed/wall,
@@ -39025,6 +41981,16 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/grimy,
/area/station/commons/vacant_room/office)
+"odD" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/table/wood,
+/obj/machinery/light/small/built/directional/north,
+/obj/item/stack/sheet/iron/ten,
+/obj/effect/turf_decal/siding/wideplating_new/terracotta{
+ dir = 9
+ },
+/turf/open/floor/wood/tile,
+/area/station/maintenance/central/lesser)
"odE" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -39035,6 +42001,10 @@
/obj/effect/decal/cleanable/leaper_sludge,
/turf/open/floor/plating/rust,
/area/station/engineering/supermatter/room)
+"odH" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/stone,
+/area/station/service/chapel)
"odP" = (
/obj/machinery/firealarm/directional/west,
/turf/open/floor/iron/dark/small,
@@ -39073,15 +42043,6 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/white/small,
/area/station/command/heads_quarters/cmo)
-"oeF" = (
-/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
-/obj/machinery/door/airlock{
- name = "Abandoned Treatment Room"
- },
-/obj/effect/mapping_helpers/airlock/abandoned,
-/obj/structure/barricade/wooden/crude,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"oeI" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -39103,6 +42064,14 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/station/medical/storage)
+"oeZ" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/chair/wood{
+ dir = 8
+ },
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"off" = (
/obj/effect/turf_decal/siding/wood{
dir = 6
@@ -39110,26 +42079,18 @@
/obj/machinery/vending/coffee,
/turf/open/floor/iron/grimy,
/area/station/hallway/secondary/entry)
-"ofk" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
-"ofo" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/duct,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/structure/extinguisher_cabinet/directional/west,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"ofu" = (
/obj/effect/turf_decal/stripes/white/end{
dir = 8
},
/turf/open/floor/iron/smooth_large,
/area/station/maintenance/department/medical/central)
+"ofU" = (
+/obj/structure/chair/wood{
+ dir = 8
+ },
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"ofZ" = (
/turf/closed/mineral/random/stationside,
/area/station/maintenance/port/lesser)
@@ -39148,11 +42109,6 @@
},
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
-"ogu" = (
-/obj/effect/turf_decal/siding/white,
-/obj/structure/railing,
-/turf/open/floor/stone,
-/area/station/service/theater)
"ogv" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -39211,10 +42167,6 @@
dir = 1
},
/area/station/hallway/secondary/entry)
-"ogX" = (
-/obj/structure/disposalpipe/segment,
-/turf/closed/wall,
-/area/station/hallway/primary/port)
"ohb" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -39274,6 +42226,17 @@
/obj/structure/flora/bush/flowers_yw/style_random,
/turf/open/floor/grass,
/area/station/medical/treatment_center)
+"ohy" = (
+/obj/effect/turf_decal/siding/white/corner{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/access/all/service/kitchen,
+/obj/machinery/door/airlock{
+ name = "Kitchen"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"ohz" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/yellow/opposingcorners,
@@ -39293,6 +42256,13 @@
},
/turf/open/floor/iron/dark,
/area/station/science/robotics/lab)
+"ohK" = (
+/obj/structure/chair/stool/directional/north,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"ohM" = (
/obj/structure/chair{
dir = 8
@@ -39385,10 +42355,6 @@
/obj/structure/alien/weeds,
/turf/open/floor/wood,
/area/station/maintenance/starboard/greater)
-"ojl" = (
-/obj/machinery/duct,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"ojz" = (
/obj/structure/railing{
dir = 1
@@ -39404,6 +42370,13 @@
},
/turf/open/floor/wood,
/area/station/engineering/main)
+"ojA" = (
+/obj/structure/flora/bush/jungle/a/style_random,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"ojD" = (
/obj/structure/cable,
/obj/machinery/light/floor,
@@ -39460,16 +42433,6 @@
/obj/machinery/status_display/ai,
/turf/closed/wall,
/area/station/hallway/secondary/entry)
-"okp" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/wood,
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_half,
-/area/station/service/library)
"okt" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{
dir = 4
@@ -39487,14 +42450,6 @@
/obj/effect/turf_decal/stripes/white/line,
/turf/open/floor/engine,
/area/station/science/xenobiology)
-"okK" = (
-/obj/structure/chair/stool/bamboo,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
- },
-/obj/effect/landmark/start/bartender,
-/turf/open/floor/stone,
-/area/station/service/bar/backroom)
"okW" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -39557,20 +42512,22 @@
/obj/machinery/light/small/dim/directional/west,
/turf/open/floor/iron,
/area/station/maintenance/port/aft)
-"omA" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
+"omb" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/structure/chair/wood{
+ dir = 8
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
+"omk" = (
+/obj/effect/turf_decal/siding/wood{
dir = 1
},
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
-"omU" = (
-/obj/machinery/light/small/broken/directional/east,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"omW" = (
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/iron/white/corner,
@@ -39585,12 +42542,20 @@
/obj/structure/lattice,
/turf/open/space/basic,
/area/space/nearstation)
-"ono" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
+"onc" = (
+/obj/machinery/door/morgue{
+ name = "Private Study";
+ req_access = list("library")
},
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
+"ong" = (
+/obj/item/radio/intercom/directional/south,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"onv" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{
@@ -39748,6 +42713,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/commons/fitness/locker_room)
+"opV" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/obj/effect/landmark/start/bartender,
+/turf/open/floor/stone,
+/area/station/service/bar)
"opW" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -39775,18 +42748,19 @@
},
/turf/open/floor/iron/dark,
/area/station/science/ordnance/testlab)
-"oqE" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/structure/flora/bush/flowers_yw/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"oqK" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/kirbyplants/random,
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
+"oqT" = (
+/obj/machinery/camera/autoname/directional/north,
+/obj/machinery/firealarm/directional/north,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"oqU" = (
/obj/effect/turf_decal/siding/wideplating/dark{
dir = 9
@@ -39810,14 +42784,6 @@
/obj/structure/cable,
/turf/open/floor/iron/smooth,
/area/station/maintenance/solars/starboard/fore)
-"orH" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/neutral/full,
-/obj/structure/reagent_dispensers/beerkeg,
-/obj/effect/turf_decal/bot_red/left,
-/obj/structure/sign/clock/directional/north,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"orW" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden,
@@ -39843,6 +42809,18 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"ose" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"osj" = (
/obj/structure/cable,
/obj/machinery/power/terminal,
@@ -39913,6 +42891,18 @@
},
/turf/open/floor/iron/dark,
/area/station/cargo/office)
+"otJ" = (
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"otX" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -39939,30 +42929,34 @@
},
/turf/open/space/basic,
/area/space/nearstation)
-"ouf" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 1
- },
-/turf/open/floor/iron/small,
-/area/station/hallway/primary/starboard)
"ouj" = (
/turf/closed/wall,
/area/station/engineering/engine_smes)
-"oup" = (
-/obj/structure/chair/sofa/right/maroon{
- dir = 1
+"oul" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/structure/flora/bush/flowers_yw/style_2,
+/obj/structure/flora/tree/jungle/style_5,
+/turf/open/floor/grass,
+/area/station/service/chapel)
+"oun" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 10
},
-/obj/machinery/firealarm/directional/south,
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"ouz" = (
/turf/open/floor/iron/dark/small,
/area/station/command/heads_quarters/rd)
+"ouF" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/window/right/directional/west,
+/obj/machinery/door/poddoor/shutters{
+ name = "Kitchen Shutters";
+ id = "kitchenshutters"
+ },
+/turf/open/floor/iron,
+/area/station/service/kitchen)
"ouH" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
@@ -40002,6 +42996,11 @@
/obj/machinery/airalarm/directional/west,
/turf/open/floor/iron/smooth,
/area/station/cargo/warehouse)
+"ove" = (
+/obj/effect/spawner/structure/window,
+/obj/machinery/door/firedoor/border_only,
+/turf/open/floor/plating,
+/area/station/service/bar)
"ovf" = (
/obj/structure/lattice/catwalk,
/turf/open/space/basic,
@@ -40151,6 +43150,18 @@
},
/turf/open/floor/wood/tile,
/area/station/command/corporate_showroom)
+"oxn" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"oxw" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/stripes/white/line{
@@ -40158,17 +43169,20 @@
},
/turf/open/floor/iron/dark,
/area/station/cargo/storage)
+"oxy" = (
+/obj/effect/spawner/random/entertainment/arcade{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating,
+/obj/structure/sign/poster/official/random/directional/south,
+/turf/open/floor/eighties/red,
+/area/station/hallway/primary/central/fore)
"oxK" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 8
},
/turf/open/floor/engine,
/area/station/science/cytology)
-"oxS" = (
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
"oyn" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/door/airlock/public/glass{
@@ -40176,10 +43190,26 @@
},
/turf/open/floor/iron/textured_half,
/area/station/maintenance/hallway/abandoned_command)
+"oyp" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/firealarm/directional/west,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"oyq" = (
/obj/machinery/light/warm/directional/south,
/turf/open/floor/iron,
/area/station/commons/fitness/locker_room)
+"oyz" = (
+/obj/structure/flora/grass/jungle/b/style_3,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/cable,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"oyQ" = (
/turf/closed/wall,
/area/station/science/auxlab/firing_range)
@@ -40203,13 +43233,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/grimy,
/area/station/command/heads_quarters/qm)
-"ozd" = (
-/obj/effect/landmark/event_spawn,
-/obj/effect/turf_decal/plaque{
- icon_state = "L8"
- },
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
"ozn" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -40217,10 +43240,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
-"ozo" = (
-/obj/structure/window/spawner/directional/south,
-/turf/open/floor/grass,
-/area/station/service/hydroponics)
"ozs" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -40263,15 +43282,6 @@
dir = 8
},
/area/station/maintenance/starboard/greater)
-"oAk" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"oAn" = (
/obj/effect/turf_decal/siding/brown{
dir = 10
@@ -40279,11 +43289,6 @@
/obj/structure/steam_vent,
/turf/open/floor/iron/smooth,
/area/station/maintenance/port/aft)
-"oAp" = (
-/obj/structure/chair/sofa/right/maroon,
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
"oAr" = (
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/obj/structure/closet/bombcloset/security,
@@ -40295,11 +43300,6 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
-"oAF" = (
-/obj/effect/spawner/random/vending/colavend,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"oAY" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/security/glass{
@@ -40320,11 +43320,6 @@
/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer4,
/turf/open/space/basic,
/area/space/nearstation)
-"oBm" = (
-/obj/structure/chair/sofa/bench/left,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"oBv" = (
/obj/machinery/door/airlock/external{
name = "Labor Camp Shuttle Airlock";
@@ -40349,11 +43344,22 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
-"oBV" = (
+"oBT" = (
/obj/structure/cable,
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/catwalk_floor/iron_dark,
-/area/station/service/library)
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/all/security/armory,
+/obj/machinery/door/airlock/security{
+ name = "Warden's Office"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/textured_half{
+ dir = 8
+ },
+/area/station/security/warden)
"oBX" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -40368,15 +43374,17 @@
},
/turf/open/floor/iron/dark,
/area/station/science/genetics)
-"oCc" = (
-/obj/structure/cable,
-/turf/open/floor/catwalk_floor/iron_dark,
-/area/station/service/library)
"oCg" = (
/obj/structure/rack,
/obj/effect/spawner/random/techstorage/medical_all,
/turf/open/floor/iron,
/area/station/engineering/storage/tech)
+"oCi" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/light/small/directional/east,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"oCq" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -40410,21 +43418,23 @@
/obj/structure/broken_flooring/pile/directional/east,
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
+"oCV" = (
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"oDa" = (
/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{
dir = 1
},
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
-"oDs" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/public/glass{
- name = "Fore Primary Hallway"
- },
-/turf/open/floor/iron/textured_half,
-/area/station/hallway/primary/central/fore)
"oDB" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -40438,14 +43448,17 @@
},
/turf/open/space/basic,
/area/space/nearstation)
-"oDK" = (
-/obj/structure/cable,
-/obj/machinery/door/airlock{
- name = "Hydroponics Maintenance"
+"oDX" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
},
-/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/chair/wood{
+ dir = 4
+ },
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"oDY" = (
/obj/effect/turf_decal/stripes/corner,
/obj/effect/turf_decal/stripes/corner{
@@ -40478,36 +43491,25 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/hallway/secondary/recreation)
-"oEr" = (
+"oEn" = (
+/obj/structure/cable,
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/status_display/ai/directional/south,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
-"oEt" = (
-/obj/structure/railing{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/requests_console/directional/north{
- department = "Chief Engineer's Desk";
- name = "Chief Engineer's Requests Console";
- pixel_y = -32
- },
-/obj/effect/mapping_helpers/requests_console/announcement,
-/obj/effect/mapping_helpers/requests_console/information,
-/turf/open/floor/iron/stairs/old{
- dir = 4
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
+"oEz" = (
+/obj/machinery/camera/autoname/directional/north,
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 1
},
-/area/station/command/heads_quarters/ce)
+/obj/machinery/firealarm/directional/north,
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk,
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"oEB" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/effect/turf_decal/box/red/corners{
@@ -40524,13 +43526,6 @@
},
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
-"oEN" = (
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"oFc" = (
/obj/effect/spawner/random/trash,
/obj/machinery/light/small/directional/west,
@@ -40566,11 +43561,34 @@
"oFu" = (
/turf/closed/wall,
/area/station/security/office)
+"oFy" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/airlock/public/glass{
+ name = "Cargo Botique"
+ },
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/textured_half{
+ dir = 1
+ },
+/area/station/hallway/primary/central/fore)
"oFI" = (
/obj/machinery/airalarm/directional/north,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron,
/area/station/engineering/storage/tech)
+"oFM" = (
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"oGk" = (
/turf/open/floor/circuit,
/area/station/tcommsat/server)
@@ -40590,6 +43608,18 @@
/obj/machinery/atmospherics/pipe/layer_manifold/visible,
/turf/open/floor/plating,
/area/station/engineering/atmos/space_catwalk)
+"oGo" = (
+/obj/structure/table/glass,
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = 11;
+ pixel_y = 6
+ },
+/obj/item/folder/blue{
+ pixel_x = -3;
+ pixel_y = 2
+ },
+/turf/open/floor/carpet/executive,
+/area/station/command/meeting_room)
"oGJ" = (
/obj/effect/turf_decal/trimline/neutral/line{
dir = 1
@@ -40624,6 +43654,13 @@
/obj/structure/flora/rock/pile/style_2,
/turf/open/misc/sandy_dirt,
/area/station/science/research)
+"oHk" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/stairs,
+/area/station/maintenance/port/greater)
"oHw" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -40650,6 +43687,24 @@
dir = 1
},
/area/station/security/execution/transfer)
+"oHJ" = (
+/obj/structure/table/greyscale,
+/obj/item/pen{
+ pixel_x = 13;
+ pixel_y = 4
+ },
+/obj/machinery/light/small/directional/south,
+/obj/item/flatpack{
+ board = /obj/item/circuitboard/machine/flatpacker;
+ pixel_x = -6;
+ pixel_y = 5
+ },
+/obj/item/multitool{
+ pixel_x = 7;
+ pixel_y = -2
+ },
+/turf/open/floor/iron/grimy,
+/area/station/engineering/main)
"oHO" = (
/obj/structure/chair/plastic{
dir = 1
@@ -40693,6 +43748,12 @@
/obj/structure/frame/machine,
/turf/open/floor/tram,
/area/station/maintenance/department/medical/central)
+"oIL" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"oIP" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -40708,23 +43769,24 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/station/commons/fitness/recreation)
+"oIS" = (
+/obj/machinery/light/small/directional/south,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/status_display/evac/directional/south,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"oIT" = (
/obj/structure/frame/machine,
/obj/item/circuitboard/machine/biogenerator,
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
-"oJl" = (
-/obj/machinery/door/airlock/engineering{
- name = "Main Engineering"
- },
+"oIY" = (
+/obj/effect/turf_decal/delivery,
/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/access/any/engineering/construction,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/structure/disposalpipe/segment,
-/obj/effect/mapping_helpers/airlock/access/any/engineering/general,
-/turf/open/floor/catwalk_floor,
-/area/station/engineering/break_room)
+/obj/machinery/smartfridge,
+/turf/open/floor/plating,
+/area/station/service/hydroponics)
"oJn" = (
/obj/structure/cable,
/obj/structure/disposalpipe/sorting/mail{
@@ -40745,6 +43807,21 @@
/obj/machinery/firealarm/directional/east,
/turf/open/floor/circuit,
/area/station/tcommsat/server)
+"oJx" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/rack,
+/obj/machinery/door/poddoor/shutters{
+ dir = 4;
+ id = "vaco";
+ name = "Comissary Shutters"
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/lesser)
"oJz" = (
/obj/structure/bodycontainer/morgue{
dir = 2
@@ -40838,6 +43915,16 @@
/obj/effect/spawner/random/engineering/atmospherics_portable,
/turf/open/floor/plating,
/area/station/maintenance/aft)
+"oLo" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/dark_red/half/contrasted,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"oLr" = (
/obj/effect/turf_decal/siding/wood{
dir = 9
@@ -40862,12 +43949,6 @@
/obj/structure/lattice/catwalk,
/turf/open/space/basic,
/area/station/solars/starboard/aft)
-"oMC" = (
-/obj/machinery/hydroponics/constructable,
-/obj/effect/turf_decal/tile/blue/half,
-/obj/machinery/airalarm/directional/south,
-/turf/open/floor/iron/white/small,
-/area/station/service/hydroponics)
"oMF" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/tile/neutral,
@@ -40909,6 +43990,22 @@
},
/turf/open/floor/plating,
/area/station/construction/mining/aux_base)
+"oNF" = (
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/machinery/firealarm/directional/east,
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 4
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"oNH" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -40988,6 +44085,13 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/port)
+"oOC" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/bush/flowers_br/style_random,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"oOK" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 1
@@ -41030,6 +44134,12 @@
/obj/machinery/air_sensor/mix_tank,
/turf/open/floor/engine/airless,
/area/station/engineering/atmos)
+"oPh" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/light/floor,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"oPi" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -41055,6 +44165,13 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
+"oPy" = (
+/obj/structure/bookcase/random,
+/obj/structure/sign/painting/library{
+ pixel_x = -30
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"oPG" = (
/obj/machinery/door/airlock/research{
name = "Research Director's Bedroom"
@@ -41124,16 +44241,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/hallway)
-"oQD" = (
-/obj/machinery/airalarm/directional/north,
-/obj/machinery/button/door/directional/north{
- id = "vaco";
- name = "Comissary Shutters";
- pixel_x = 29
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron/dark/small,
-/area/station/commons/vacant_room/commissary)
"oQF" = (
/turf/closed/wall/r_wall,
/area/station/security/execution/transfer)
@@ -41172,6 +44279,41 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron,
/area/station/cargo/storage)
+"oRv" = (
+/obj/effect/turf_decal/tile/red/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/item/kirbyplants/random,
+/obj/machinery/light/small/directional/west,
+/obj/item/radio/intercom/directional/south,
+/turf/open/floor/iron/smooth,
+/area/station/service/greenroom)
+"oRw" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/airalarm/directional/south,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
+"oRy" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/machinery/door/airlock/maintenance{
+ name = "Crematorium"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office,
+/turf/open/floor/iron/textured_half{
+ dir = 8
+ },
+/area/station/service/chapel/storage)
"oRB" = (
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/east,
@@ -41223,11 +44365,6 @@
},
/turf/open/floor/iron,
/area/station/cargo/storage)
-"oSh" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"oSv" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/computer/rdconsole{
@@ -41254,33 +44391,21 @@
/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
-"oSP" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 6
+"oTg" = (
+/obj/effect/turf_decal/tile/brown/opposingcorners{
+ dir = 1
},
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/duct,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
-"oSS" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 9
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
},
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"oTj" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/spawner/random/trash,
/turf/open/floor/plating,
/area/station/maintenance/starboard/aft)
-"oTo" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/firedoor,
-/turf/open/floor/catwalk_floor/iron,
-/area/station/service/bar)
"oTH" = (
/obj/effect/spawner/random/structure/closet_maintenance,
/obj/effect/decal/cleanable/dirt,
@@ -41302,11 +44427,6 @@
},
/turf/open/floor/iron,
/area/station/security/execution/transfer)
-"oTO" = (
-/obj/structure/dresser,
-/obj/machinery/airalarm/directional/south,
-/turf/open/floor/wood,
-/area/station/cargo/boutique)
"oTT" = (
/obj/structure/disposalpipe/trunk{
dir = 4
@@ -41332,6 +44452,15 @@
"oUd" = (
/turf/open/floor/iron/smooth,
/area/station/hallway/secondary/command)
+"oUi" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"oUq" = (
/obj/machinery/meter,
/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible,
@@ -41343,16 +44472,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos/pumproom)
-"oUx" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/navbeacon{
- codes_txt = "patrol;next_patrol=23.2-Evac-Garden";
- location = "23.4-Evac"
- },
-/turf/open/floor/iron,
-/area/station/hallway/secondary/exit/departure_lounge)
"oUz" = (
/obj/machinery/power/smes/engineering,
/obj/structure/cable,
@@ -41391,15 +44510,23 @@
/obj/structure/cable,
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/security/evidence)
-"oUO" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/iron/stairs{
+"oUV" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/window/right/directional/east,
+/turf/open/floor/iron/textured_half{
dir = 8
},
-/area/station/maintenance/port/greater)
+/area/station/service/hydroponics)
+"oVl" = (
+/obj/machinery/vending/wardrobe/bar_wardrobe,
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
+ },
+/turf/open/floor/stone,
+/area/station/service/bar/backroom)
"oVt" = (
/obj/machinery/atmospherics/pipe/smart/simple/orange/hidden,
/obj/effect/turf_decal/tile/yellow,
@@ -41421,6 +44548,13 @@
/obj/machinery/light/cold/directional/north,
/turf/open/floor/iron,
/area/station/security/execution/transfer)
+"oVW" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/obj/structure/flora/bush/large/style_3,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"oVY" = (
/obj/effect/turf_decal/siding/wood{
dir = 10
@@ -41433,12 +44567,6 @@
/obj/machinery/light_switch/directional/west,
/turf/open/floor/carpet/royalblue,
/area/station/command/heads_quarters/captain)
-"oWb" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/light/cold/directional/east,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"oWg" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -41458,12 +44586,6 @@
/obj/effect/mapping_helpers/airlock/access/any/command/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/hallway/abandoned_command)
-"oWp" = (
-/obj/structure/chair{
- pixel_y = -2
- },
-/turf/open/floor/iron/dark/small,
-/area/station/commons/vacant_room/commissary)
"oWr" = (
/obj/structure/cable,
/obj/machinery/door/airlock{
@@ -41499,15 +44621,6 @@
/obj/structure/closet/emcloset,
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
-"oXt" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"oXK" = (
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/west,
@@ -41533,23 +44646,25 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
-"oXZ" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+"oYi" = (
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/machinery/navbeacon{
+ codes_txt = "patrol;next_patrol=23.1-Evac";
+ location = "22.0-Porthall-Evac"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/machinery/camera/autoname/directional/west,
/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
+/area/station/hallway/primary/port)
"oYj" = (
/obj/machinery/light_switch/directional/north,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron,
/area/station/commons/fitness/locker_room)
-"oYu" = (
-/obj/machinery/vending/dinnerware,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"oYv" = (
/obj/effect/turf_decal/siding/wood,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -41599,6 +44714,16 @@
/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
+"oZy" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/effect/spawner/random/structure/steam_vent,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"oZz" = (
/obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior{
name = "Burn Chamber Exterior Airlock"
@@ -41656,21 +44781,13 @@
/obj/structure/tram,
/turf/open/floor/tram,
/area/station/security/tram)
-"paL" = (
-/obj/structure/fireplace,
-/obj/effect/turf_decal/siding/wood/end,
-/obj/machinery/camera/directional/east,
-/turf/open/floor/stone,
-/area/station/service/bar)
-"paV" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 6
+"paJ" = (
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/spawner/random/trash,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"paW" = (
/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{
dir = 8
@@ -41732,11 +44849,26 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
-"pbu" = (
-/obj/structure/cable,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
+"pbw" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/obj/structure/flora/bush/flowers_pp/style_random,
+/turf/open/floor/grass,
+/area/station/service/chapel)
+"pbD" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/plaque{
+ icon_state = "L12";
+ pixel_y = -15
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"pbE" = (
/obj/machinery/firealarm/directional/west,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -41755,6 +44887,16 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron/smooth,
/area/station/service/greenroom)
+"pbK" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/bush/flowers_br/style_random,
+/obj/structure/flora/bush/jungle/b/style_2,
+/obj/machinery/light/small/directional/north,
+/obj/item/radio/intercom/directional/north,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"pbT" = (
/obj/effect/turf_decal/stripes/corner{
dir = 4
@@ -41763,13 +44905,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/engineering/atmospherics_engine)
-"pbZ" = (
+"pca" = (
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/red/line,
/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/stone,
-/area/station/service/theater)
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/fore)
"pcb" = (
/obj/effect/turf_decal/tile/dark_red{
dir = 4
@@ -41910,15 +45055,6 @@
/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
-"pev" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"peN" = (
/obj/structure/lattice,
/obj/machinery/camera/motion/directional/north{
@@ -41928,6 +45064,11 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"peU" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/structure/flora/rock/pile/jungle/style_2,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"peW" = (
/obj/effect/turf_decal/siding/dark{
dir = 5
@@ -42037,29 +45178,10 @@
},
/turf/open/floor/iron/smooth,
/area/station/engineering/atmos)
-"pfO" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/camera/directional/east,
-/obj/machinery/status_display/evac/directional/east,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"pfT" = (
/obj/structure/training_machine,
/turf/open/floor/iron/smooth_large,
/area/station/science/auxlab/firing_range)
-"pfU" = (
-/obj/machinery/door/airlock{
- name = "Kitchen Cold Room"
- },
-/obj/effect/mapping_helpers/airlock/abandoned,
-/obj/structure/barricade/wooden/crude,
-/obj/effect/mapping_helpers/airlock/locked,
-/obj/effect/mapping_helpers/airlock/welded,
-/turf/open/floor/iron/textured_half{
- dir = 8
- },
-/area/station/service/bar/backroom)
"pfW" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
@@ -42077,6 +45199,11 @@
dir = 8
},
/area/station/commons/fitness/locker_room)
+"pgm" = (
+/obj/machinery/computer/security/telescreen/prison/directional/north,
+/obj/machinery/computer/records/security,
+/turf/open/floor/wood,
+/area/station/security/detectives_office)
"pgq" = (
/obj/structure/chair/stool/directional/north,
/obj/effect/turf_decal/siding/wood{
@@ -42108,12 +45235,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
/area/station/engineering/atmospherics_engine)
-"pgW" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
"phd" = (
/obj/effect/turf_decal/siding/red{
dir = 4
@@ -42161,6 +45282,12 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
+"phG" = (
+/obj/structure/chair/wood{
+ dir = 4
+ },
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"phY" = (
/obj/structure/railing{
dir = 1
@@ -42226,14 +45353,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
-"piZ" = (
-/obj/structure/chair/sofa/right/maroon{
- dir = 1
- },
-/obj/effect/landmark/start/hangover,
-/obj/structure/extinguisher_cabinet/directional/east,
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
"pjb" = (
/obj/structure/broken_flooring/singular/directional/south,
/turf/open/floor/iron,
@@ -42358,6 +45477,15 @@
/obj/item/book/manual/wiki/security_space_law,
/turf/open/floor/wood/tile,
/area/station/service/lawoffice)
+"pkU" = (
+/obj/effect/mapping_helpers/airlock/access/any/service/general,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/glass{
+ name = "Service Hallway"
+ },
+/turf/open/floor/iron/textured_half,
+/area/station/hallway/secondary/service)
"plf" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -42462,6 +45590,25 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
+"pnF" = (
+/obj/effect/turf_decal/tile/green/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/machinery/hydroponics/constructable,
+/obj/machinery/airalarm/directional/west,
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/iron,
+/area/station/service/hydroponics)
+"pnK" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/structure/flora/bush/flowers_yw/style_3,
+/obj/structure/flora/bush/jungle/c/style_random,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"pnQ" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 6
@@ -42482,6 +45629,17 @@
},
/turf/open/floor/iron,
/area/station/science/cytology)
+"pnW" = (
+/obj/machinery/computer/slot_machine{
+ pixel_y = 2
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
+ },
+/obj/structure/extinguisher_cabinet/directional/west,
+/obj/machinery/computer/security/telescreen/entertainment/directional/north,
+/turf/open/floor/stone,
+/area/station/service/bar)
"pnZ" = (
/obj/effect/turf_decal/tile/blue/fourcorners,
/obj/machinery/firealarm/directional/west,
@@ -42496,15 +45654,9 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/iron/freezer,
/area/station/command/corporate_suite)
-"poh" = (
-/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/directional/north,
-/obj/machinery/oven/range,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"pot" = (
/obj/structure/table/wood,
-/obj/item/clothing/mask/cigarette/cigar/premium{
+/obj/item/cigarette/cigar/premium{
pixel_y = 5
},
/turf/open/floor/stone,
@@ -42750,17 +45902,17 @@
/obj/effect/landmark/start/prisoner,
/turf/open/floor/iron/dark,
/area/station/security/prison/safe)
-"prI" = (
-/turf/closed/wall,
-/area/station/engineering/hallway)
-"prQ" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
+"prt" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
+"prI" = (
+/turf/closed/wall,
+/area/station/engineering/hallway)
"prV" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/tile/yellow/opposingcorners{
@@ -42849,30 +46001,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white/small,
/area/station/service/janitor)
-"psL" = (
-/obj/effect/turf_decal/bot,
-/obj/machinery/light/cold/dim/directional/east,
-/obj/machinery/newscaster/directional/east,
-/obj/structure/cable,
-/obj/structure/table/reinforced,
-/obj/item/paper_bin{
- pixel_x = 5;
- pixel_y = 19
- },
-/obj/item/pen{
- pixel_x = 5;
- pixel_y = 20
- },
-/obj/machinery/cell_charger{
- pixel_x = 2;
- pixel_y = 1
- },
-/obj/item/stock_parts/cell/high{
- pixel_x = 2;
- pixel_y = 2
- },
-/turf/open/floor/iron/smooth,
-/area/station/engineering/break_room)
"psP" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -42889,6 +46017,14 @@
/obj/structure/broken_flooring/corner/directional/south,
/turf/open/floor/plating,
/area/station/maintenance/port/aft)
+"ptf" = (
+/obj/machinery/status_display/ai/directional/west,
+/obj/machinery/camera/autoname/directional/north,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"ptj" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -42896,11 +46032,6 @@
/obj/machinery/power/apc/auto_name/directional/east,
/turf/open/floor/iron/diagonal,
/area/station/science/auxlab/firing_range)
-"ptk" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/mapping_helpers/broken_floor,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"ptl" = (
/obj/machinery/duct,
/turf/open/floor/plating,
@@ -42943,35 +46074,19 @@
},
/turf/open/floor/iron/smooth,
/area/station/maintenance/port/aft)
-"ptZ" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 5
- },
-/obj/machinery/airalarm/directional/north,
-/turf/open/floor/grass,
-/area/station/service/chapel)
-"pug" = (
+"ptT" = (
+/obj/effect/turf_decal/siding/thinplating_new/light,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
dir = 5
},
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
-"puj" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/disposalpipe/segment,
-/obj/machinery/duct,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
-"pup" = (
-/obj/structure/chair/sofa/right,
-/obj/machinery/light/small/directional/west,
-/obj/structure/sign/poster/official/random/directional/north,
-/turf/open/floor/wood,
-/area/station/hallway/secondary/service)
+/obj/machinery/light/small/directional/south,
+/obj/machinery/requests_console/auto_name/directional/south,
+/obj/effect/mapping_helpers/requests_console/supplies,
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"pus" = (
/obj/effect/turf_decal/box/red/corners,
/obj/effect/turf_decal/stripes/white/line{
@@ -42979,23 +46094,6 @@
},
/turf/open/floor/engine,
/area/station/science/xenobiology)
-"puv" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/hydroponics{
- name = "Hydroponics Supply Room"
- },
-/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics,
-/turf/open/floor/iron/textured_half,
-/area/station/service/hydroponics)
-"puw" = (
-/obj/machinery/door/morgue{
- name = "Private Study";
- req_access = list("library")
- },
-/turf/open/floor/catwalk_floor/iron_dark,
-/area/station/service/library)
"pux" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -43003,12 +46101,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron/diagonal,
/area/station/command/heads_quarters/hop)
-"puD" = (
-/obj/structure/bookcase/random/nonfiction,
-/obj/machinery/newscaster/directional/west,
-/obj/machinery/digital_clock/directional/north,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
"puI" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -43024,17 +46116,11 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plating,
/area/station/engineering/atmos/space_catwalk)
-"puY" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/tile/dark_red/half/contrasted{
- dir = 1
- },
-/obj/machinery/camera/autoname/directional/south,
-/obj/machinery/firealarm/directional/south,
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
+"pvi" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/wood,
+/area/station/service/chapel/office)
"pvk" = (
/obj/structure/closet/boxinggloves,
/obj/effect/turf_decal/stripes/red/line{
@@ -43047,6 +46133,12 @@
/obj/machinery/camera/autoname/directional/south,
/turf/open/floor/iron/herringbone,
/area/station/commons/dorms)
+"pvC" = (
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/turf/open/floor/wood,
+/area/station/service/chapel/office)
"pvE" = (
/obj/effect/turf_decal/siding/wideplating{
dir = 4
@@ -43070,24 +46162,6 @@
},
/turf/open/floor/iron/smooth,
/area/station/engineering/atmos)
-"pvR" = (
-/obj/structure/table/wood,
-/obj/machinery/light_switch/directional/south,
-/turf/open/floor/stone,
-/area/station/service/bar/backroom)
-"pvS" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/mapping_helpers/broken_floor,
-/obj/item/radio/intercom/directional/south,
-/obj/machinery/duct,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
- },
-/obj/effect/landmark/start/cook,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
"pvY" = (
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 1
@@ -43110,14 +46184,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/closed/wall,
/area/station/engineering/atmos)
-"pww" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/duct,
-/obj/effect/landmark/generic_maintenance_landmark,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
"pwA" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
@@ -43154,21 +46220,12 @@
/obj/machinery/firealarm/directional/west,
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
-"pxg" = (
-/obj/machinery/light/small/broken/directional/west,
-/turf/open/floor/iron/dark/small,
-/area/station/commons/vacant_room/commissary)
"pxj" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark/herringbone,
/area/station/security/execution/education)
-"pxl" = (
-/obj/machinery/smartfridge,
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"pxx" = (
/obj/effect/turf_decal/tile/yellow/half/contrasted{
dir = 8
@@ -43193,23 +46250,19 @@
dir = 1
},
/area/station/security/prison/safe)
-"pxO" = (
-/obj/structure/disposalpipe/segment{
- dir = 9
+"pxW" = (
+/obj/structure/table,
+/obj/machinery/cell_charger{
+ pixel_y = 5
},
-/obj/machinery/duct,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/engine,
+/area/station/science/xenobiology)
"pxZ" = (
/obj/structure/rack,
/obj/effect/spawner/random/maintenance,
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
-"pya" = (
-/obj/structure/chair/sofa/right/maroon,
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
"pyh" = (
/obj/structure/cable,
/obj/structure/broken_flooring/singular/directional/east,
@@ -43233,26 +46286,23 @@
/obj/structure/cable,
/turf/open/floor/iron/smooth,
/area/station/engineering/atmos/office)
+"pyt" = (
+/obj/machinery/light/floor,
+/turf/open/floor/grass,
+/area/station/service/chapel)
+"pyA" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"pyF" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron,
/area/station/maintenance/hallway/abandoned_command)
-"pyS" = (
-/obj/structure/chair/sofa/left/maroon,
-/obj/effect/landmark/start/assistant,
-/obj/machinery/camera/autoname/directional/east,
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
-"pyY" = (
-/obj/effect/turf_decal/tile/yellow/half/contrasted{
- dir = 8
- },
-/obj/structure/table,
-/obj/item/weldingtool/mini,
-/turf/open/floor/iron/white,
-/area/station/maintenance/central/greater)
"pzb" = (
/obj/effect/turf_decal/trimline/blue/corner{
dir = 1
@@ -43268,17 +46318,6 @@
/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible,
/turf/closed/wall/r_wall,
/area/station/engineering/hallway)
-"pzn" = (
-/obj/structure/table,
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/item/toy/foamfinger,
-/obj/item/toy/eightball{
- pixel_y = 13
- },
-/turf/open/floor/plating,
-/area/station/service/theater)
"pzy" = (
/obj/structure/table,
/obj/item/storage/box/prisoner{
@@ -43307,16 +46346,13 @@
/obj/item/stack/sheet/mineral/titanium,
/turf/open/floor/tram,
/area/station/maintenance/department/medical/central)
-"pzX" = (
-/obj/structure/railing,
-/obj/structure/table,
+"pzW" = (
/obj/effect/turf_decal/siding/wood{
- dir = 8
+ dir = 9
},
-/obj/effect/turf_decal/siding/white,
-/obj/effect/spawner/random/entertainment/toy,
-/turf/open/floor/plating,
-/area/station/service/theater)
+/obj/machinery/light/floor,
+/turf/open/floor/stone,
+/area/station/service/bar)
"pAa" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/spawner/random/structure/barricade,
@@ -43508,11 +46544,6 @@
},
/turf/open/floor/plating,
/area/station/maintenance/aft)
-"pCX" = (
-/obj/structure/chair/stool/directional/west,
-/obj/effect/landmark/start/clown,
-/turf/open/floor/carpet/lone,
-/area/station/service/theater)
"pDr" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -43660,16 +46691,23 @@
},
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
+"pEO" = (
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/machinery/navbeacon{
+ codes_txt = "patrol;next_patrol=1.0-Security-PNexus";
+ location = "23.2-Evac-Garden"
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"pFk" = (
/obj/structure/broken_flooring/singular/directional/east,
/obj/effect/decal/cleanable/dirt,
/obj/structure/alien/weeds,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
-"pFr" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/carpet/lone,
-/area/station/service/theater)
"pFI" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -43765,6 +46803,11 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/department/prison)
+"pGS" = (
+/obj/machinery/status_display/evac/directional/north,
+/obj/machinery/camera/directional/north,
+/turf/open/misc/dirt/jungle,
+/area/station/service/chapel)
"pGU" = (
/obj/effect/turf_decal/trimline/white/line{
dir = 5
@@ -43811,12 +46854,33 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
+"pHs" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/siding/red{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/iron,
+/area/station/cargo/storage)
"pHw" = (
/obj/structure/table,
/obj/effect/decal/cleanable/dirt,
/obj/item/airlock_painter,
/turf/open/floor/iron,
/area/station/commons/storage/art)
+"pHA" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/mob/living/basic/frog,
+/obj/structure/flora/bush/flowers_br/style_3,
+/obj/structure/flora/tree/jungle/small,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"pHC" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -43851,16 +46915,26 @@
},
/turf/open/floor/wood,
/area/station/commons/fitness/recreation)
-"pHN" = (
-/obj/effect/turf_decal/siding/wood,
-/obj/structure/flora/bush/sunny/style_random,
-/obj/machinery/newscaster/directional/south,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"pHS" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
+"pHY" = (
+/obj/effect/turf_decal/tile/red/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/machinery/disposal/bin,
+/obj/machinery/light_switch/directional/south,
+/obj/machinery/camera/directional/south{
+ c_tag = "Atmospherics - South"
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/turf/open/floor/iron/smooth,
+/area/station/service/greenroom)
"pId" = (
/obj/structure/reagent_dispensers/plumbed,
/turf/open/floor/iron/kitchen/small,
@@ -43877,20 +46951,6 @@
},
/turf/open/floor/iron/dark/small,
/area/station/commons/fitness/locker_room)
-"pIg" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/dark_red/half/contrasted{
- dir = 4
- },
-/obj/effect/turf_decal/siding/wideplating/dark/corner{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"pIi" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/structure/rack,
@@ -43941,6 +47001,12 @@
/obj/structure/extinguisher_cabinet/directional/north,
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
+"pIC" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 8
+ },
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"pIS" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/preopen{
@@ -43949,6 +47015,10 @@
},
/turf/open/floor/plating,
/area/station/command/bridge)
+"pJc" = (
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/stone,
+/area/station/service/bar)
"pJj" = (
/obj/structure/chair/sofa/bench/left{
dir = 1
@@ -44145,24 +47215,18 @@
/obj/machinery/computer/security/telescreen/entertainment/directional/north,
/turf/open/floor/iron/cafeteria,
/area/station/hallway/secondary/exit/departure_lounge)
-"pMg" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 9
- },
-/turf/open/floor/grass,
-/area/station/service/chapel)
+"pMc" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"pMs" = (
/obj/structure/transit_tube/horizontal,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
-"pMu" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/siding/wood/corner{
- dir = 1
- },
-/turf/open/floor/grass,
-/area/station/service/chapel)
"pMA" = (
/obj/machinery/light/small/directional/east,
/turf/open/floor/catwalk_floor/iron_dark,
@@ -44200,12 +47264,6 @@
},
/turf/open/floor/plating,
/area/station/engineering/gravity_generator)
-"pNa" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/spawner/random/engineering/tracking_beacon,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"pNh" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -44225,13 +47283,6 @@
},
/turf/open/floor/wood/tile,
/area/station/command/corporate_showroom)
-"pNy" = (
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/effect/spawner/random/engineering/atmospherics_portable,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"pNC" = (
/turf/open/floor/iron/dark/side{
dir = 1
@@ -44260,14 +47311,6 @@
},
/turf/closed/wall,
/area/station/commons/fitness/locker_room)
-"pOb" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/machinery/duct,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"pOg" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -44294,18 +47337,6 @@
},
/turf/open/floor/iron/small,
/area/station/engineering/main)
-"pOj" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/door/airlock{
- name = "Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/any/service/general,
-/obj/machinery/duct,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"pOm" = (
/obj/structure/window/reinforced/spawner/directional/west,
/obj/effect/turf_decal/tile/blue/half/contrasted{
@@ -44348,14 +47379,34 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/department/prison)
-"pOK" = (
-/obj/structure/cable,
+"pOM" = (
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
/obj/structure/disposalpipe/segment{
- dir = 10
+ dir = 4
},
-/obj/machinery/duct,
-/turf/open/floor/iron/kitchen/small,
-/area/station/hallway/secondary/service)
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/port)
+"pOQ" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/machinery/camera/autoname/directional/east,
+/obj/machinery/firealarm/directional/east,
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
+"pOT" = (
+/turf/closed/wall,
+/area/station/holodeck/rec_center)
"pOX" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
@@ -44396,26 +47447,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/smooth,
/area/station/hallway/secondary/command)
-"pPT" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"pPZ" = (
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
/area/station/maintenance/aft)
-"pQe" = (
-/obj/structure/chair/sofa/left{
- dir = 4
- },
-/obj/machinery/airalarm/directional/west,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
"pQj" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
@@ -44446,11 +47481,6 @@
},
/turf/open/floor/engine,
/area/station/hallway/secondary/entry)
-"pQO" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/effect/spawner/random/entertainment/arcade,
-/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
"pQY" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/half/contrasted,
@@ -44459,6 +47489,15 @@
},
/turf/open/floor/iron/dark/side,
/area/station/science/xenobiology)
+"pRc" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"pRe" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/structure/table/wood,
@@ -44496,22 +47535,10 @@
/obj/effect/mapping_helpers/airlock/access/any/security/general,
/turf/open/floor/iron/textured_half,
/area/station/security/checkpoint/customs/auxiliary)
-"pRP" = (
-/obj/machinery/icecream_vat,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/machinery/light_switch/directional/west,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
"pRQ" = (
/obj/effect/turf_decal/tile/blue/half/contrasted,
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
-"pRU" = (
-/obj/machinery/gibber,
-/obj/effect/turf_decal/bot_red,
-/obj/item/radio/intercom/directional/south,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
"pSc" = (
/obj/item/bikehorn/rubberducky{
pixel_x = 6;
@@ -44531,40 +47558,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/department/prison)
-"pSm" = (
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{
- dir = 8
- },
-/obj/structure/table,
-/obj/item/reagent_containers/cup/beaker{
- pixel_x = 5;
- pixel_y = 17
- },
-/obj/item/reagent_containers/syringe/epinephrine,
-/obj/item/reagent_containers/syringe{
- pixel_x = -4;
- pixel_y = 6
- },
-/obj/machinery/light/small/red/directional/west,
-/turf/open/floor/iron/white,
-/area/station/maintenance/central/greater)
"pSq" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/sign/poster/official/random/directional/north,
/obj/structure/broken_flooring/pile/directional/east,
/turf/open/floor/plating,
/area/station/hallway/secondary/dock)
-"pSr" = (
-/obj/effect/turf_decal/tile/yellow/anticorner/contrasted,
-/obj/structure/table,
-/obj/item/reagent_containers/dropper{
- pixel_x = -5;
- pixel_y = 5
- },
-/obj/item/crowbar/large/emergency,
-/turf/open/floor/iron/white,
-/area/station/maintenance/central/greater)
"pSs" = (
/obj/structure/railing/corner{
dir = 1
@@ -44584,18 +47583,24 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron/grimy,
/area/station/service/library)
-"pSK" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 6
- },
-/obj/structure/bookcase/random/adult,
-/turf/open/floor/iron/grimy,
-/area/station/service/library)
"pSN" = (
/obj/item/radio/intercom/directional/south,
/obj/machinery/holopad,
/turf/open/floor/iron/dark/smooth_large,
/area/station/service/lawoffice)
+"pSO" = (
+/obj/machinery/portable_atmospherics/canister/air,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
+"pSP" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"pSQ" = (
/obj/structure/cable,
/turf/closed/wall,
@@ -44609,32 +47614,19 @@
/obj/machinery/camera/autoname/directional/west,
/turf/open/floor/iron,
/area/station/engineering/storage/tech)
-"pTc" = (
+"pTk" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/red/line{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/red/line{
- dir = 8
+/obj/machinery/door/airlock{
+ name = "Maintenance"
},
-/turf/open/floor/iron/small,
-/area/station/hallway/primary/port)
-"pTl" = (
+/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/start/mime,
-/obj/machinery/camera/autoname/directional/south,
-/turf/open/floor/stone,
-/area/station/service/theater)
+/turf/open/floor/plating,
+/area/station/holodeck/rec_center)
"pTp" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{
dir = 4
@@ -44671,13 +47663,12 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark/smooth_large,
/area/station/service/lawoffice)
-"pTC" = (
-/obj/structure/disposalpipe/sorting/mail{
- dir = 1
- },
-/obj/effect/mapping_helpers/mail_sorting/service/theater,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
+"pTA" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/effect/spawner/random/entertainment/arcade,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"pTZ" = (
/obj/effect/turf_decal/siding/wideplating/dark{
dir = 8
@@ -44774,6 +47765,14 @@
/obj/machinery/firealarm/directional/west,
/turf/open/floor/iron/white,
/area/station/science/auxlab/firing_range)
+"pVj" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"pVq" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/trimline/neutral/line{
@@ -44817,6 +47816,13 @@
},
/turf/open/floor/iron/dark/side,
/area/station/science/xenobiology)
+"pWj" = (
+/obj/machinery/door/airlock{
+ name = "Kitchen"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"pWl" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -44932,6 +47938,10 @@
/obj/effect/spawner/random/structure/girder,
/turf/open/floor/tram,
/area/station/maintenance/department/medical/central)
+"pXk" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/wood/tile,
+/area/station/maintenance/central/lesser)
"pXo" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -44976,6 +47986,14 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
+"pXH" = (
+/obj/effect/landmark/event_spawn,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/obj/structure/table,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"pXL" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -45034,14 +48052,6 @@
},
/turf/open/floor/engine,
/area/station/science/explab)
-"pYE" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/structure/flora/bush/flowers_yw/style_random,
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"pYP" = (
/obj/machinery/door/poddoor/preopen{
id = "atmos";
@@ -45062,18 +48072,20 @@
dir = 4
},
/area/station/science/lower)
-"pZi" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"pZu" = (
/obj/structure/hedge,
/turf/open/floor/plating,
/area/station/cargo/storage)
+"pZv" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"pZz" = (
/obj/structure/rack,
/obj/item/clothing/gloves/cargo_gauntlet{
@@ -45097,29 +48109,11 @@
/obj/item/shard/titanium,
/turf/open/floor/plating,
/area/station/maintenance/department/engine/atmos)
-"qaA" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"qaF" = (
/obj/structure/sink/directional/south,
/obj/structure/mirror/directional/north,
/turf/open/floor/iron/white/small,
/area/station/maintenance/port/aft)
-"qaH" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/siding/dark_red/corner{
- dir = 1
- },
-/obj/structure/rack,
-/obj/effect/spawner/random/armory/riot_helmet,
-/obj/effect/spawner/random/armory/bulletproof_helmet,
-/obj/item/gun/energy/e_gun/dragnet,
-/turf/open/floor/iron/dark/small,
-/area/station/ai_monitored/security/armory)
"qaV" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -45127,11 +48121,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/herringbone,
/area/station/commons/dorms)
-"qbi" = (
-/obj/machinery/photocopier,
-/obj/machinery/airalarm/directional/west,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"qbj" = (
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/obj/structure/closet/secure_closet/security/sec,
@@ -45158,14 +48147,6 @@
/obj/machinery/airalarm/directional/west,
/turf/open/floor/iron/checker,
/area/station/security/breakroom)
-"qbr" = (
-/obj/structure/flora/bush/flowers_pp/style_random,
-/obj/effect/landmark/start/hangover,
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/turf/open/floor/grass,
-/area/station/service/chapel)
"qbv" = (
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible,
/obj/structure/disposalpipe/segment{
@@ -45173,37 +48154,28 @@
},
/turf/open/floor/iron/small,
/area/station/engineering/atmos)
-"qbw" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/red{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/cargo/storage)
"qby" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/security/checkpoint/supply)
-"qbC" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+"qbA" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
+"qbB" = (
+/obj/effect/turf_decal/siding/wood{
dir = 1
},
-/turf/open/floor/iron/kitchen/small,
-/area/station/hallway/secondary/service)
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"qbE" = (
/obj/item/stack/tile/catwalk_tile/iron,
/turf/open/floor/plating,
/area/station/maintenance/department/engine/atmos)
-"qbK" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/turf/open/floor/iron/kitchen/small,
-/area/station/hallway/secondary/service)
"qbN" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -45240,10 +48212,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark/side,
/area/station/hallway/secondary/construction)
-"qcl" = (
-/obj/item/radio/intercom/directional/south,
-/turf/open/floor/wood,
-/area/station/hallway/secondary/service)
"qcr" = (
/obj/structure/flora/bush/flowers_yw/style_random,
/mob/living/carbon/human/species/monkey,
@@ -45255,6 +48223,10 @@
/obj/effect/landmark/navigate_destination/dockarrival,
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
+"qcB" = (
+/obj/structure/sign/nanotrasen,
+/turf/closed/wall,
+/area/station/maintenance/central/greater)
"qcC" = (
/obj/effect/turf_decal/tile/neutral/opposingcorners,
/obj/structure/disposalpipe/segment,
@@ -45280,16 +48252,6 @@
},
/turf/open/misc/sandy_dirt,
/area/station/security/tram)
-"qdm" = (
-/turf/open/floor/wood,
-/area/station/hallway/secondary/service)
-"qdp" = (
-/obj/structure/chair/sofa/right{
- dir = 4
- },
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
"qdu" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -45300,15 +48262,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/department/prison)
-"qdC" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral/full,
-/obj/machinery/duct,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"qdJ" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -45376,15 +48329,6 @@
"qei" = (
/turf/closed/wall,
/area/station/science/ordnance/storage)
-"qej" = (
-/obj/machinery/door/airlock/public/glass{
- name = "Library"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_half{
- dir = 1
- },
-/area/station/service/library)
"qen" = (
/obj/structure/table,
/obj/item/clothing/gloves/boxing,
@@ -45490,14 +48434,6 @@
},
/turf/open/floor/iron,
/area/station/science/lower)
-"qgr" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"qgs" = (
/obj/structure/cable,
/obj/item/kirbyplants/random/fullysynthetic,
@@ -45525,24 +48461,6 @@
/obj/effect/mapping_helpers/airlock/access/any/service/lawyer,
/turf/open/floor/plating,
/area/station/maintenance/starboard/lesser)
-"qgA" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
-"qgH" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/cable,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"qgJ" = (
/obj/machinery/light/dim/directional/west,
/obj/machinery/duct,
@@ -45557,16 +48475,6 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/iron/smooth,
/area/station/commons/storage/tools)
-"qgN" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/landmark/event_spawn,
-/obj/structure/cable,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"qhh" = (
/obj/structure/cable,
/obj/structure/table/glass,
@@ -45585,27 +48493,6 @@
/obj/machinery/power/apc/auto_name/directional/north,
/turf/open/floor/iron/white,
/area/station/science/cytology)
-"qhi" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/obj/effect/turf_decal/siding/wideplating_new/terracotta{
- dir = 1
- },
-/turf/open/floor/wood/tile,
-/area/station/commons/vacant_room/commissary)
-"qhm" = (
-/obj/structure/table,
-/obj/item/storage/crayons,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
-"qhp" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"qhs" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/red/opposingcorners,
@@ -45667,6 +48554,18 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos/pumproom)
+"qie" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"qin" = (
/obj/docking_port/stationary/escape_pod,
/turf/open/space/basic,
@@ -45698,6 +48597,22 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/station/commons/storage/tools)
+"qiC" = (
+/obj/effect/turf_decal/tile/green/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/machinery/hydroponics/constructable,
+/turf/open/floor/iron,
+/area/station/service/hydroponics)
+"qiI" = (
+/obj/structure/cable,
+/obj/effect/spawner/random/structure/steam_vent,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"qiL" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
@@ -45714,14 +48629,6 @@
},
/turf/open/floor/plating,
/area/station/tcommsat/server)
-"qiO" = (
-/obj/structure/table,
-/obj/machinery/cell_charger{
- pixel_y = 5
- },
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/engine,
-/area/station/science/xenobiology)
"qjh" = (
/obj/machinery/light_switch/directional/west,
/turf/open/floor/iron/white,
@@ -45751,6 +48658,17 @@
/obj/effect/turf_decal/stripes/white/full,
/turf/open/floor/engine,
/area/station/engineering/supermatter)
+"qjt" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"qju" = (
/obj/structure/cable,
/obj/machinery/door/poddoor/preopen{
@@ -45812,15 +48730,6 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
-"qkv" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/light/floor,
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
-"qkw" = (
-/obj/machinery/light/floor,
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"qkI" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{
dir = 1
@@ -45900,16 +48809,6 @@
/obj/structure/broken_flooring/corner/directional/south,
/turf/open/floor/plating,
/area/station/hallway/secondary/dock)
-"qme" = (
-/obj/item/kirbyplants/random,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
-"qmf" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/light/cold/directional/east,
-/turf/open/floor/carpet/lone,
-/area/station/service/theater)
"qmo" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -45925,35 +48824,16 @@
/obj/effect/mapping_helpers/airlock/access/any/engineering/construction,
/turf/open/floor/plating,
/area/station/maintenance/department/engine/atmos)
-"qmx" = (
-/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/neutral/full,
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/item/storage/fancy/cigarettes/cigars/cohiba{
- pixel_x = 2;
- pixel_y = 10
- },
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"qmz" = (
/obj/structure/table/wood,
/turf/open/floor/wood,
/area/station/cargo/boutique)
-"qmI" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/brown/full,
-/obj/machinery/duct,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
-"qmO" = (
-/obj/effect/turf_decal/tile/neutral/full,
-/obj/machinery/duct,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
+"qmM" = (
+/obj/structure/sign/painting/library{
+ pixel_y = 32
+ },
+/turf/open/floor/iron/smooth,
+/area/station/service/library)
"qmZ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -45962,6 +48842,21 @@
},
/turf/open/floor/iron/dark/small,
/area/station/medical/chemistry)
+"qnb" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/machinery/door/poddoor/shutters{
+ dir = 4;
+ id = "vaco";
+ name = "Comissary Shutters"
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/lesser)
"qnc" = (
/obj/machinery/door/airlock/external{
name = "Labor Camp Shuttle Airlock";
@@ -45981,58 +48876,12 @@
},
/turf/open/floor/iron/solarpanel/airless,
/area/station/solars/starboard/fore)
-"qnu" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/effect/turf_decal/siding/wood,
-/obj/machinery/door/airlock/public/glass{
- name = "Chapel Office"
- },
-/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office,
-/turf/open/floor/iron/textured_half,
-/area/station/service/chapel/office)
-"qnz" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral/half/contrasted{
- dir = 1
- },
-/obj/effect/turf_decal/tile/dark_red/half/contrasted,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
-"qnA" = (
-/obj/structure/table,
-/obj/machinery/door/poddoor/shutters/preopen{
- dir = 8;
- id = "barki";
- name = "Shutters"
- },
-/turf/open/floor/catwalk_floor/iron,
-/area/station/service/kitchen)
"qnJ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron/white/small,
/area/station/science/ordnance/storage)
-"qnL" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
-"qoi" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/iron/kitchen/small,
-/area/station/hallway/secondary/service)
"qoj" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/door/window/right/directional/west{
@@ -46049,11 +48898,6 @@
},
/turf/open/floor/engine,
/area/station/engineering/atmos)
-"qon" = (
-/obj/machinery/vending/wardrobe/chef_wardrobe,
-/obj/structure/extinguisher_cabinet/directional/north,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"qop" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -46089,12 +48933,6 @@
/obj/effect/turf_decal/stripes/box,
/turf/open/floor/iron/white/small,
/area/station/service/janitor)
-"qpg" = (
-/obj/effect/turf_decal/plaque{
- icon_state = "L3"
- },
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
"qpu" = (
/obj/effect/turf_decal/siding/brown{
dir = 9
@@ -46118,13 +48956,6 @@
/obj/item/restraints/handcuffs,
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/escape)
-"qpX" = (
-/obj/machinery/door/airlock{
- name = "Kitchen"
- },
-/obj/effect/mapping_helpers/airlock/access/all/service/kitchen,
-/turf/open/floor/catwalk_floor/flat_white,
-/area/station/service/kitchen)
"qqd" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -46132,22 +48963,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/department/science/xenobiology)
-"qqh" = (
-/obj/structure/cable,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/machinery/power/apc/auto_name/directional/north,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/obj/structure/table,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
-"qqq" = (
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/obj/machinery/light/small/directional/north,
-/obj/machinery/status_display/ai/directional/north,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"qqr" = (
/obj/machinery/atmospherics/components/binary/pump/off/general/visible{
dir = 4;
@@ -46162,6 +48977,16 @@
/obj/machinery/light/floor,
/turf/open/floor/glass/reinforced,
/area/station/command/bridge)
+"qqH" = (
+/obj/effect/spawner/random/entertainment/arcade{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 8
+ },
+/obj/item/radio/intercom/directional/west,
+/turf/open/floor/eighties/red,
+/area/station/hallway/primary/central/fore)
"qqJ" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -46206,34 +49031,11 @@
/obj/machinery/power/apc/auto_name/directional/south,
/turf/open/floor/eighties,
/area/station/service/abandoned_gambling_den/gaming)
-"qrw" = (
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/item/trash/popcorn{
- pixel_x = 17;
- pixel_y = 14
- },
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"qrB" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/science/xenobiology)
-"qrI" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/textured_half{
- dir = 1
- },
-/area/station/service/cafeteria)
-"qrN" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/wood{
- dir = 9
- },
-/turf/open/floor/iron/grimy,
-/area/station/service/theater)
"qsa" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/camera/directional/south{
@@ -46260,15 +49062,6 @@
/obj/effect/landmark/blobstart,
/turf/open/floor/iron,
/area/station/hallway/secondary/construction)
-"qsA" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/wood,
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/machinery/airalarm/directional/north,
-/turf/open/floor/iron/grimy,
-/area/station/service/theater)
"qsR" = (
/obj/structure/table/reinforced,
/obj/effect/mapping_helpers/broken_floor,
@@ -46284,13 +49077,17 @@
},
/turf/open/floor/engine/vacuum,
/area/station/science/ordnance/freezerchamber)
+"qsY" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 10
+ },
+/obj/machinery/light/floor,
+/obj/structure/table/wood,
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"qtd" = (
/turf/open/floor/wood/tile,
/area/station/command/corporate_showroom)
-"qtl" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/station/hallway/secondary/spacebridge)
"qto" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/tile/brown/half/contrasted{
@@ -46355,16 +49152,6 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/fore/lesser)
-"qtW" = (
-/obj/structure/window/reinforced/spawner/directional/south,
-/turf/open/floor/iron/stairs{
- dir = 8
- },
-/area/station/service/theater)
-"qui" = (
-/obj/machinery/camera/autoname/directional/north,
-/turf/open/floor/wood/parquet,
-/area/station/service/theater)
"qul" = (
/obj/machinery/light/small/directional/east,
/obj/machinery/light_switch/directional/east,
@@ -46377,13 +49164,6 @@
},
/turf/open/floor/iron/smooth,
/area/station/cargo/warehouse)
-"quo" = (
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/turf/open/floor/wood/parquet,
-/area/station/service/theater)
"quq" = (
/obj/effect/turf_decal/stripes/line,
/obj/structure/closet/crate/cardboard,
@@ -46406,12 +49186,6 @@
},
/turf/open/floor/iron/dark/small,
/area/station/maintenance/aft)
-"quJ" = (
-/obj/effect/turf_decal/siding/wood,
-/obj/machinery/light/small/directional/south,
-/obj/structure/flora/tree/jungle/small/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"quO" = (
/obj/structure/reagent_dispensers/wall/peppertank/directional/east,
/obj/effect/turf_decal/tile/red/half/contrasted{
@@ -46475,16 +49249,6 @@
/obj/item/kirbyplants/random,
/turf/open/floor/iron/grimy,
/area/station/hallway/secondary/entry)
-"qvQ" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/firealarm/directional/north,
-/obj/machinery/light_switch/directional/south,
-/turf/open/floor/iron/dark/small,
-/area/station/service/chapel/storage)
"qwa" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 8
@@ -46541,6 +49305,9 @@
/obj/effect/turf_decal/siding/wideplating/dark,
/turf/open/floor/iron,
/area/station/security)
+"qwK" = (
+/turf/open/floor/carpet/lone,
+/area/station/service/chapel/office)
"qwU" = (
/obj/effect/turf_decal/siding/wood,
/obj/structure/table/glass,
@@ -46713,6 +49480,14 @@
/obj/effect/turf_decal/tile/dark_red/half/contrasted,
/turf/open/floor/iron,
/area/station/security/tram)
+"qzt" = (
+/obj/structure/window/spawner/directional/east,
+/obj/structure/window/spawner/directional/west,
+/obj/structure/flora/bush/large/style_2,
+/obj/structure/flora/bush/sparsegrass,
+/obj/structure/flora/bush/flowers_yw,
+/turf/open/floor/grass,
+/area/station/service/hydroponics)
"qzv" = (
/obj/structure/table,
/obj/item/canvas{
@@ -46761,6 +49536,10 @@
/obj/structure/steam_vent,
/turf/open/floor/plating,
/area/station/maintenance/fore/greater)
+"qzP" = (
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"qzT" = (
/obj/item/bikehorn/rubberducky{
pixel_x = -6;
@@ -46822,12 +49601,6 @@
/obj/machinery/firealarm/directional/north,
/turf/open/floor/iron,
/area/station/hallway/secondary/recreation)
-"qAE" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/generic_maintenance_landmark,
-/obj/structure/table,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"qAJ" = (
/obj/effect/spawner/random/structure/closet_private,
/obj/machinery/light/small/directional/east,
@@ -46877,11 +49650,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/security/tram)
-"qBj" = (
-/obj/effect/turf_decal/siding/wood,
-/obj/structure/barricade/wooden/crude,
-/turf/open/floor/plating,
-/area/station/cargo/boutique)
"qBl" = (
/obj/machinery/camera/directional/north{
c_tag = "Holodeck - Fore";
@@ -46891,35 +49659,19 @@
name = "Holodeck Projector Floor"
},
/area/station/holodeck/rec_center)
-"qBy" = (
-/obj/effect/turf_decal/plaque{
- icon_state = "L5"
- },
-/obj/effect/turf_decal/tile/neutral{
+"qBn" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
+/area/station/hallway/primary/central/aft)
"qBz" = (
/obj/effect/turf_decal/siding/wood,
/obj/structure/mannequin/plastic,
/obj/machinery/light/small/directional/east,
/turf/open/floor/plating,
/area/station/cargo/boutique)
-"qBD" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching the turbine vent.";
- dir = 1;
- name = "turbine vent monitor";
- network = list("turbine");
- pixel_y = -28
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 1
- },
-/turf/open/floor/iron/smooth,
-/area/station/maintenance/disposal/incinerator)
"qBG" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -46961,17 +49713,6 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
-"qCg" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/structure/flora/bush/flowers_br/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
-"qCi" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"qCj" = (
/obj/machinery/airalarm/directional/south,
/obj/item/kirbyplants/organic/applebush,
@@ -46987,10 +49728,6 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/dark,
/area/station/science/xenobiology)
-"qCC" = (
-/obj/effect/turf_decal/tile/blue/anticorner/contrasted,
-/turf/open/floor/iron/white,
-/area/station/maintenance/central/greater)
"qCJ" = (
/obj/structure/cable,
/obj/effect/turf_decal/siding/wood{
@@ -47010,9 +49747,13 @@
},
/turf/open/floor/iron/large,
/area/station/command/heads_quarters/hop)
-"qCR" = (
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
+"qCK" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 5
+ },
+/obj/effect/landmark/start/botanist,
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"qCT" = (
/obj/effect/turf_decal/siding/wood{
dir = 9
@@ -47047,6 +49788,22 @@
},
/turf/open/floor/wood/tile,
/area/station/tcommsat/server)
+"qDd" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/airlock{
+ name = "Theater Greenroom"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/service/theatre,
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/textured_half{
+ dir = 8
+ },
+/area/station/service/greenroom)
"qDi" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -47057,14 +49814,6 @@
/obj/machinery/atmospherics/pipe/smart/simple/dark/hidden,
/turf/open/floor/wood/tile,
/area/station/tcommsat/server)
-"qDp" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/thinplating_new/light{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"qDq" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -47109,6 +49858,14 @@
},
/turf/open/floor/catwalk_floor,
/area/station/engineering/main)
+"qDC" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"qDJ" = (
/obj/machinery/door/airlock/maintenance{
name = "Maintenance"
@@ -47128,6 +49885,10 @@
/obj/structure/reagent_dispensers/water_cooler,
/turf/open/floor/wood/parquet,
/area/station/medical/psychology)
+"qDL" = (
+/obj/machinery/chem_master/condimaster,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"qDN" = (
/obj/effect/turf_decal/tile/blue,
/obj/machinery/status_display/evac/directional/west,
@@ -47147,15 +49908,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron,
/area/station/cargo/sorting)
-"qEa" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/airlock{
- name = "Bar Backroom Maintenence"
- },
-/obj/effect/mapping_helpers/airlock/access/all/service/bar,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"qEe" = (
/turf/open/floor/iron/white/side{
dir = 8
@@ -47177,23 +49929,6 @@
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/ce)
-"qEp" = (
-/obj/machinery/chem_master/condimaster{
- desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments.";
- name = "BrewMaster 2199"
- },
-/obj/effect/turf_decal/delivery,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/effect/turf_decal/siding/thinplating_new/light{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"qEz" = (
/obj/machinery/door/window/brigdoor/left/directional/west{
name = "Holding Cell";
@@ -47205,6 +49940,22 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/science/lower)
+"qEO" = (
+/obj/machinery/camera/autoname/directional/east,
+/obj/machinery/status_display/evac/directional/east,
+/obj/structure/disposalpipe/trunk,
+/obj/effect/turf_decal/stripes/end,
+/obj/structure/window/reinforced/spawner/directional/east,
+/obj/structure/disposaloutlet{
+ dir = 1
+ },
+/obj/structure/window/reinforced/spawner/directional/west,
+/obj/effect/turf_decal/tile/green/fourcorners,
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 4
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"qEP" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -47223,6 +49974,19 @@
/obj/machinery/power/apc/auto_name/directional/north,
/turf/open/floor/iron/white/side,
/area/station/science/lower)
+"qFc" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/plaque{
+ icon_state = "L10";
+ pixel_y = -15
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"qFh" = (
/obj/effect/turf_decal/tile/dark_red{
dir = 4
@@ -47250,20 +50014,35 @@
},
/turf/open/floor/plating/elevatorshaft,
/area/station/engineering/atmos)
-"qFB" = (
-/obj/structure/table,
-/obj/effect/turf_decal/tile/blue{
+"qGc" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/public/glass{
+ name = "Fore Primary Hallway"
+ },
+/turf/open/floor/iron/textured_half,
+/area/station/hallway/primary/central/fore)
+"qGe" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line,
+/obj/effect/turf_decal/stripes/red/line{
dir = 1
},
-/obj/effect/turf_decal/tile/green{
- dir = 4
+/obj/structure/disposalpipe/segment{
+ dir = 9
},
-/obj/item/paper/guides/jobs/hydroponics,
-/obj/item/pen{
- pixel_x = 11
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/fore)
+"qGf" = (
+/obj/structure/flora/bush/flowers_pp{
+ pixel_y = 3
},
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
+/obj/effect/dummy/lighting_obj,
+/obj/effect/light_emitter/fake_outdoors,
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/grass/Airless,
+/area/station/hallway/primary/central/aft)
"qGk" = (
/obj/structure/chair/stool/directional/east,
/turf/open/floor/plating,
@@ -47276,20 +50055,6 @@
},
/turf/open/floor/stone,
/area/station/command/heads_quarters/hos)
-"qGw" = (
-/obj/machinery/holopad,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
-"qGA" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/green/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"qGB" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -47310,35 +50075,15 @@
/obj/effect/turf_decal/siding/wideplating/dark/corner,
/turf/open/floor/iron,
/area/station/security)
-"qGU" = (
-/obj/structure/table/wood,
-/obj/machinery/computer/libraryconsole{
- dir = 4
- },
-/obj/machinery/newscaster/directional/south,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
-"qGY" = (
-/obj/effect/landmark/start/cook,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
-"qHm" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door/poddoor/shutters/preopen{
- dir = 4;
- id = "kitchenshutters";
- name = "Kitchen Shutters"
- },
-/obj/structure/desk_bell{
- pixel_x = 8;
- pixel_y = 11
- },
-/obj/effect/spawner/random/food_or_drink/condiment{
- pixel_x = -8;
- pixel_y = 3
+"qHr" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
},
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
+/obj/machinery/light/small/directional/west,
+/obj/machinery/camera/directional/west,
+/obj/machinery/status_display/ai/directional/west,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"qHt" = (
/obj/structure/cable,
/turf/open/floor/iron,
@@ -47367,20 +50112,6 @@
"qIf" = (
/turf/closed/wall,
/area/station/medical/cryo)
-"qIg" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/red/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
- },
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/item/kirbyplants/random,
-/obj/machinery/light/small/directional/west,
-/obj/item/radio/intercom/directional/south,
-/turf/open/floor/iron/smooth,
-/area/station/service/greenroom)
"qIk" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden,
/turf/open/floor/circuit/telecomms/mainframe,
@@ -47421,14 +50152,6 @@
},
/turf/open/floor/iron/white,
/area/station/science/cytology)
-"qIP" = (
-/obj/machinery/food_cart,
-/obj/machinery/button/door/directional/west{
- id = "barki";
- name = "Shutters Control"
- },
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"qIQ" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -47440,13 +50163,6 @@
/obj/structure/broken_flooring/pile/directional/east,
/turf/open/floor/plating,
/area/station/hallway/secondary/dock)
-"qJa" = (
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/machinery/restaurant_portal/restaurant,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"qJq" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -47517,20 +50233,10 @@
},
/turf/open/floor/iron/showroomfloor,
/area/station/commons/dorms)
-"qKE" = (
-/obj/effect/spawner/structure/window,
-/turf/open/floor/plating,
-/area/station/service/cafeteria)
"qKI" = (
/obj/machinery/portable_atmospherics/pump,
/turf/open/floor/iron/small,
/area/station/maintenance/port/aft)
-"qKN" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 1
- },
-/turf/open/floor/wood,
-/area/station/service/theater)
"qKS" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -47584,6 +50290,16 @@
/obj/machinery/airalarm/directional/north,
/turf/open/floor/iron,
/area/station/security/courtroom)
+"qLU" = (
+/obj/effect/turf_decal/tile/green/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/machinery/camera/autoname/directional/west,
+/obj/machinery/hydroponics/constructable,
+/obj/item/radio/intercom/directional/west,
+/turf/open/floor/iron,
+/area/station/service/hydroponics)
"qMa" = (
/obj/effect/turf_decal/stripes/red/line{
dir = 4
@@ -47653,13 +50369,6 @@
/obj/structure/hedge,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
-"qNz" = (
-/obj/structure/cable,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/spawner/random/trash,
-/turf/open/floor/plating,
-/area/station/maintenance/central/lesser)
"qNF" = (
/obj/effect/spawner/random/structure/closet_maintenance,
/obj/effect/spawner/random/maintenance,
@@ -47687,6 +50396,11 @@
/obj/effect/spawner/random/structure/crate,
/turf/open/floor/iron,
/area/station/maintenance/department/medical/central)
+"qOb" = (
+/obj/structure/flora/bush/sparsegrass,
+/obj/structure/flora/bush/flowers_yw,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"qOm" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/effect/turf_decal/stripes/corner{
@@ -47694,17 +50408,14 @@
},
/turf/open/floor/plating,
/area/station/commons/storage/tools)
-"qOp" = (
-/obj/structure/table/wood,
-/obj/item/book/bible,
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
-"qOt" = (
-/obj/item/kirbyplants/random,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/machinery/light/cold/directional/north,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
+"qOG" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/effect/turf_decal/siding/wideplating_new/terracotta{
+ dir = 1
+ },
+/turf/open/floor/wood/tile,
+/area/station/maintenance/central/lesser)
"qOJ" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -47825,6 +50536,17 @@
},
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
+"qQR" = (
+/obj/structure/table/wood,
+/obj/machinery/light/small/directional/south,
+/obj/machinery/computer/security/telescreen/engine/directional/west,
+/obj/machinery/status_display/evac/directional/south,
+/obj/item/radio/off{
+ pixel_x = 1;
+ pixel_y = 3
+ },
+/turf/open/floor/wood,
+/area/station/command/heads_quarters/ce)
"qRh" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
@@ -47862,6 +50584,13 @@
/obj/effect/decal/cleanable/cobweb,
/turf/open/floor/iron,
/area/station/security/prison/rec)
+"qRE" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 4
+ },
+/obj/effect/landmark/start/botanist,
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"qRN" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -47891,18 +50620,19 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/port/aft)
+"qSa" = (
+/obj/machinery/door/window/right/directional/north{
+ name = "Library Desk Door";
+ req_access = list("library")
+ },
+/obj/machinery/firealarm/directional/east,
+/turf/open/floor/carpet,
+/area/station/service/library)
"qSh" = (
/obj/structure/cable,
/obj/machinery/firealarm/directional/east,
/turf/open/floor/iron,
/area/station/hallway/secondary/recreation)
-"qSv" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"qSC" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/white/line,
@@ -47930,15 +50660,6 @@
/obj/machinery/camera/autoname/directional/south,
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/supply)
-"qSU" = (
-/obj/effect/turf_decal/plaque{
- icon_state = "L9"
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
"qSZ" = (
/obj/structure/hedge,
/obj/machinery/light/cold/directional/west,
@@ -48006,27 +50727,6 @@
/obj/machinery/firealarm/directional/east,
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
-"qTL" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/effect/turf_decal/siding/wood,
-/turf/open/floor/iron/grimy,
-/area/station/service/theater)
-"qTM" = (
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
-"qTP" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/grunge{
- name = "Vacant Comissary"
- },
-/turf/open/floor/iron/textured_half{
- dir = 1
- },
-/area/station/commons/vacant_room/commissary)
"qTR" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/wood,
@@ -48215,16 +50915,6 @@
},
/turf/open/floor/wood/tile,
/area/station/command/corporate_showroom)
-"qWm" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/red/line,
-/turf/open/floor/iron/small,
-/area/station/hallway/primary/central/fore)
"qWo" = (
/obj/effect/spawner/structure/window/reinforced/tinted,
/turf/open/floor/plating,
@@ -48241,6 +50931,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white/corner,
/area/station/science/research)
+"qWG" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"qWJ" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -48269,6 +50967,17 @@
/obj/effect/mapping_helpers/airlock/access/all/command/general,
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/ai_monitored/turret_protected/aisat/maint)
+"qWV" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"qXb" = (
/obj/effect/turf_decal/siding/wood{
dir = 5
@@ -48347,6 +51056,10 @@
/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
+"qXr" = (
+/obj/structure/water_source/puddle,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"qXB" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -48369,6 +51082,20 @@
/obj/machinery/camera/autoname/directional/south,
/turf/open/floor/iron/cafeteria,
/area/station/science/breakroom)
+"qXP" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/plaque{
+ icon_state = "L8";
+ pixel_y = -15
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/effect/landmark/observer_start,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"qYh" = (
/obj/structure/closet/crate/silvercrate,
/obj/effect/turf_decal/bot_white/left,
@@ -48392,23 +51119,6 @@
},
/turf/open/floor/iron/smooth,
/area/station/engineering/atmos)
-"qYq" = (
-/obj/structure/table/glass,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell,
-/turf/open/floor/iron/white,
-/area/station/science/auxlab/firing_range)
-"qYu" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/firealarm/directional/south,
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"qYv" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -48465,18 +51175,21 @@
/obj/effect/landmark/start/scientist,
/turf/open/floor/iron/dark/small,
/area/station/science/xenobiology)
-"qZf" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/junction/flip{
- dir = 2
- },
-/obj/effect/turf_decal/tile/red{
- dir = 4
+"qZj" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/item/ammo_casing/spent{
+ pixel_x = 5;
+ pixel_y = 6
},
-/turf/open/floor/iron/white/corner{
- dir = 1
+/obj/item/ammo_casing/spent,
+/obj/item/ammo_casing/spent{
+ pixel_x = 4;
+ pixel_y = -2
},
-/area/station/hallway/secondary/exit/departure_lounge)
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"qZm" = (
/obj/structure/lattice/catwalk,
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
@@ -48502,12 +51215,11 @@
dir = 8
},
/area/station/commons/fitness/locker_room)
-"qZB" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/turf/open/floor/grass,
-/area/station/service/chapel)
+"qZy" = (
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/white/small,
+/area/station/medical/medbay/lobby)
"qZE" = (
/obj/machinery/door/airlock/engineering{
name = "Engineering Office"
@@ -48553,10 +51265,6 @@
},
/turf/open/floor/tram,
/area/station/security/tram)
-"ram" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"rao" = (
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
dir = 9
@@ -48570,14 +51278,6 @@
},
/turf/open/floor/iron,
/area/station/commons/dorms)
-"raC" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/landmark/start/assistant,
-/obj/structure/chair/sofa/bamboo/left{
- dir = 1
- },
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"raE" = (
/obj/machinery/duct,
/turf/open/floor/iron,
@@ -48609,13 +51309,6 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/wood,
/area/station/service/abandoned_gambling_den)
-"raX" = (
-/obj/effect/landmark/start/assistant,
-/obj/structure/chair/sofa/bamboo/right{
- dir = 1
- },
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"raZ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -48623,10 +51316,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/hallway/secondary/recreation)
-"rba" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"rbc" = (
/obj/structure/transport/linear/tram,
/obj/structure/tram,
@@ -48638,25 +51327,12 @@
"rbg" = (
/turf/open/floor/iron/smooth,
/area/station/engineering/atmos)
-"rbh" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/machinery/power/apc/auto_name/directional/east,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"rbl" = (
/obj/structure/filingcabinet/chestdrawer,
/obj/machinery/light/cold/dim/directional/east,
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/grimy,
/area/station/engineering/main)
-"rbo" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/white/small,
-/area/station/medical/medbay/lobby)
"rbp" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/delivery,
@@ -48694,14 +51370,14 @@
},
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
-"rbU" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
+"rbW" = (
+/obj/machinery/door/airlock{
+ name = "Maintenance"
},
-/obj/effect/turf_decal/trimline/neutral/line,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
+/obj/effect/mapping_helpers/airlock/access/any/security/general,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/station/maintenance/central/lesser)
"rce" = (
/obj/machinery/camera{
c_tag = "Xenobiology - Cell 3";
@@ -48742,7 +51418,7 @@
pixel_y = -3;
pixel_x = -2
},
-/obj/item/clothing/mask/cigarette{
+/obj/item/cigarette{
pixel_x = 6;
pixel_y = 4
},
@@ -48755,22 +51431,27 @@
},
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
-"rcr" = (
-/obj/structure/closet/crate/hydroponics,
-/obj/item/crowbar/red,
-/obj/item/reagent_containers/cup/watering_can,
-/obj/item/circuitboard/machine/biogenerator,
-/obj/item/wirecutters,
-/obj/item/wrench,
-/obj/item/shovel/spade,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/green/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
+"rcE" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/structure/disposalpipe/junction{
+ dir = 1
},
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
+"rcP" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Public Shrine"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/siding/wood/end{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/hallway/primary/central/fore)
"rcQ" = (
/obj/item/kirbyplants/random,
/obj/effect/decal/cleanable/dirt,
@@ -48778,13 +51459,6 @@
/obj/machinery/light/small/dim/directional/east,
/turf/open/floor/iron,
/area/station/maintenance/department/engine/atmos)
-"rdo" = (
-/obj/structure/window/spawner/directional/west,
-/obj/structure/flora/bush/jungle/a/style_random,
-/obj/structure/flora/bush/flowers_pp/style_random,
-/obj/structure/window/spawner/directional/east,
-/turf/open/misc/sandy_dirt,
-/area/station/service/hydroponics)
"rds" = (
/obj/machinery/computer/slot_machine{
pixel_y = 2
@@ -48794,28 +51468,39 @@
"rdw" = (
/turf/open/floor/eighties/red,
/area/station/service/abandoned_gambling_den/gaming)
+"rdA" = (
+/obj/machinery/light/small/directional/south,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wideplating_new/terracotta{
+ dir = 6
+ },
+/turf/open/floor/wood/tile,
+/area/station/maintenance/central/lesser)
"rdH" = (
/obj/machinery/keycard_auth/directional/south,
/turf/open/floor/mineral/titanium,
/area/station/command/heads_quarters/ce)
-"rdK" = (
-/obj/structure/chair/office,
-/obj/effect/landmark/start/botanist,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"rdM" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 4
},
/turf/open/floor/engine,
/area/station/science/cytology)
-"ree" = (
+"rdW" = (
+/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/holopad,
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
+/obj/effect/turf_decal/siding/red{
+ dir = 6
+ },
+/obj/machinery/firealarm/directional/south,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/white/small,
+/area/station/security/warden)
"reg" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -48905,25 +51590,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/fore/greater)
-"reT" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/wideplating/dark,
-/obj/effect/turf_decal/tile/dark_red/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
-"reW" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/chair/stool/bar/directional/east,
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
"reZ" = (
/obj/effect/turf_decal/tile/dark_red{
dir = 4
@@ -48958,13 +51624,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/cargo/drone_bay)
-"rfI" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral/full,
-/obj/effect/landmark/start/bartender,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"rfJ" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/engine,
@@ -48979,22 +51638,6 @@
/obj/structure/cable,
/turf/open/floor/iron/grimy,
/area/station/commons/vacant_room/office)
-"rgc" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
-"rgf" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/plasticflaps/opaque,
-/obj/machinery/duct,
-/turf/open/floor/iron,
-/area/station/maintenance/central/greater)
-"rgx" = (
-/obj/structure/table,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"rgA" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/mapping_helpers/broken_floor,
@@ -49008,6 +51651,10 @@
/obj/item/kirbyplants/random/fullysynthetic,
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
+"rgM" = (
+/obj/structure/extinguisher_cabinet/directional/west,
+/turf/open/floor/glass,
+/area/station/hallway/primary/central/aft)
"rgS" = (
/obj/structure/railing/corner/end{
dir = 1
@@ -49019,16 +51666,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/small,
/area/station/maintenance/department/engine/atmos)
-"rgT" = (
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/red/line{
- dir = 8
- },
-/turf/open/floor/iron/small,
-/area/station/hallway/primary/port)
"rhg" = (
/obj/machinery/air_sensor/engine_chamber,
/obj/effect/turf_decal/stripes/white/line{
@@ -49048,7 +51685,7 @@
dir = 10
},
/obj/structure/table,
-/obj/item/clothing/mask/cigarette,
+/obj/item/cigarette,
/obj/item/toy/toy_dagger,
/obj/item/clothing/head/collectable/paper,
/obj/item/toy/figure/roboticist{
@@ -49099,12 +51736,6 @@
/obj/structure/chair/office,
/turf/open/floor/iron/smooth,
/area/station/cargo/drone_bay)
-"rhD" = (
-/obj/structure/cable,
-/obj/structure/rack,
-/obj/effect/spawner/random/maintenance,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"rhH" = (
/obj/effect/turf_decal/tile/blue,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -49133,24 +51764,10 @@
/obj/machinery/door/poddoor/massdriver_chapel,
/turf/open/floor/plating,
/area/station/service/chapel/funeral)
-"rij" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/effect/landmark/start/cook,
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
-"ril" = (
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/machinery/holopad,
-/obj/effect/spawner/random/engineering/tracking_beacon,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
+"rik" = (
+/obj/structure/flora/grass/jungle/b/style_random,
+/turf/open/misc/dirt/jungle,
+/area/station/service/chapel)
"riq" = (
/obj/machinery/atmospherics/pipe/smart/simple/general/visible{
dir = 4
@@ -49165,53 +51782,21 @@
"rir" = (
/turf/open/floor/iron/grimy,
/area/station/commons/vacant_room/office)
-"riu" = (
-/obj/machinery/vending/coffee,
-/obj/effect/turf_decal/delivery,
-/obj/machinery/light/small/directional/east,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
-"riM" = (
-/turf/open/floor/iron/textured_half{
+"riS" = (
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 1
},
-/area/station/service/cafeteria)
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/lobby)
"riV" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/smooth,
/area/station/cargo/drone_bay)
-"riZ" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/mining{
- name = "Drone Bay"
- },
-/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance,
-/obj/machinery/door/firedoor,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
-"rjb" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/structure/chair/pew{
- dir = 4
- },
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/wood,
-/area/station/service/theater)
-"rje" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/item/radio/intercom/directional/south,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"rji" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -49249,27 +51834,10 @@
/obj/structure/sign/poster/official/random/directional/east,
/turf/open/floor/iron/dark/small,
/area/station/hallway/primary/fore)
-"rjz" = (
-/obj/effect/turf_decal/plaque{
- icon_state = "L11"
- },
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
"rjE" = (
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
-"rjH" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/status_display/ai/directional/north,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"rjN" = (
/obj/structure/cable,
/obj/structure/chair{
@@ -49277,15 +51845,6 @@
},
/turf/open/floor/iron/dark,
/area/station/security/interrogation)
-"rkb" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/structure/chair/pew{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/station/service/theater)
"rkk" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -49295,10 +51854,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
-"rkF" = (
-/obj/effect/spawner/random/structure/musician/piano/random_piano,
-/turf/open/floor/carpet/lone,
-/area/station/service/theater)
"rkI" = (
/obj/structure/disposalpipe/trunk,
/obj/structure/disposaloutlet{
@@ -49309,10 +51864,6 @@
/obj/structure/window/reinforced/spawner/directional/east,
/turf/open/floor/plating,
/area/station/medical/morgue)
-"rkR" = (
-/obj/structure/cable,
-/turf/open/floor/wood,
-/area/station/cargo/boutique)
"rkS" = (
/obj/effect/turf_decal/siding/yellow{
dir = 8
@@ -49373,25 +51924,16 @@
dir = 4
},
/obj/machinery/button/door/directional/north{
- id = "Cabin4";
- name = "Cabin Bolt Control"
+ id = "Cabin3";
+ name = "Cabin Bolt Control";
+ normaldoorcontrol = 1;
+ specialfunctions = 4
},
/turf/open/floor/carpet/blue,
/area/station/commons/dorms)
"rlr" = (
/turf/closed/wall,
/area/station/medical/storage)
-"rlz" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/wood,
-/area/station/cargo/boutique)
-"rlB" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/holopad,
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/wood,
-/area/station/cargo/boutique)
"rlH" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -49403,11 +51945,6 @@
/obj/machinery/air_sensor/ordnance_burn_chamber,
/turf/open/floor/engine/vacuum,
/area/station/science/ordnance/burnchamber)
-"rlN" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/wood,
-/area/station/cargo/boutique)
"rma" = (
/obj/machinery/atmospherics/pipe/smart/simple/general/visible{
dir = 6
@@ -49415,6 +51952,13 @@
/obj/machinery/camera/autoname/directional/north,
/turf/open/floor/iron/dark,
/area/station/science/ordnance/testlab)
+"rmk" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/structure/flora/bush/jungle/c/style_3{
+ pixel_x = -7
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"rmD" = (
/obj/machinery/door/firedoor,
/obj/effect/mapping_helpers/airlock/access/any/engineering/general,
@@ -49425,12 +51969,6 @@
/obj/structure/cable,
/turf/open/floor/catwalk_floor,
/area/station/engineering/engine_smes)
-"rmG" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/light_switch/directional/north,
-/turf/open/floor/wood,
-/area/station/cargo/boutique)
"rmM" = (
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/iron/edge{
@@ -49453,11 +51991,15 @@
/obj/machinery/firealarm/directional/north,
/turf/open/floor/iron/dark/herringbone,
/area/station/security/courtroom)
-"rnw" = (
-/obj/machinery/vending/wardrobe/bar_wardrobe,
-/obj/machinery/light/small/directional/west,
-/turf/open/floor/stone,
-/area/station/service/bar/backroom)
+"rnr" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/bush/jungle/c/style_3{
+ pixel_x = 8
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"rnD" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -49475,15 +52017,6 @@
/obj/structure/cable,
/turf/open/floor/iron/showroomfloor,
/area/station/medical/surgery/theatre)
-"rnY" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/sorting/mail/flip{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/mapping_helpers/mail_sorting/service/library,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"rnZ" = (
/obj/structure/transport/linear/tram,
/obj/effect/landmark/transport/nav_beacon/tram/nav/birdshot/maint,
@@ -49520,13 +52053,6 @@
/obj/effect/turf_decal/sand/plating,
/turf/open/floor/wood/tile,
/area/station/maintenance/port/lesser)
-"row" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/reagent_dispensers/plumbed{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"roz" = (
/obj/structure/cable,
/turf/open/floor/plating,
@@ -49548,11 +52074,6 @@
/obj/structure/chair/stool/directional/west,
/turf/open/floor/iron/cafeteria,
/area/station/security/prison/mess)
-"roV" = (
-/obj/machinery/vending/cigarette,
-/obj/machinery/firealarm/directional/north,
-/turf/open/floor/wood,
-/area/station/hallway/secondary/service)
"roZ" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/computer/rdconsole{
@@ -49578,19 +52099,47 @@
"rpk" = (
/turf/open/floor/iron/white,
/area/station/science/research)
+"rpo" = (
+/obj/machinery/light/floor,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"rpq" = (
/obj/machinery/camera/autoname/directional/east,
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron/smooth,
/area/station/security/evidence)
-"rpy" = (
-/obj/structure/cable,
+"rpv" = (
+/obj/structure/chair/sofa/bench/left{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/iron/dark/side{
+ dir = 4
+ },
+/area/station/hallway/primary/central/fore)
+"rpB" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/structure/sign/departments/holy/directional/north,
+/obj/machinery/camera/directional/north,
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
+"rpE" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/landmark/navigate_destination/chapel,
/obj/structure/disposalpipe/segment{
- dir = 5
+ dir = 10
},
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
+"rpF" = (
+/obj/structure/flora/tree/jungle/small/style_4,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"rpV" = (
/obj/effect/spawner/random/structure/crate,
/obj/effect/spawner/random/maintenance,
@@ -49631,6 +52180,13 @@
},
/turf/open/floor/iron,
/area/station/commons/fitness/locker_room)
+"rqF" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/bush/large/style_3,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"rqR" = (
/obj/machinery/door/airlock/external/glass,
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
@@ -49681,21 +52237,6 @@
/obj/effect/spawner/structure/window/reinforced/tinted,
/turf/open/floor/plating,
/area/station/science/robotics/augments)
-"rrx" = (
-/obj/effect/turf_decal/plaque{
- icon_state = "L13"
- },
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
-"rrC" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/airalarm/directional/west,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"rrG" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -49718,12 +52259,12 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/station/service/lawoffice)
-"rrV" = (
-/obj/effect/turf_decal/siding/wideplating_new/terracotta{
- dir = 5
+"rrX" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
},
-/turf/open/floor/wood/tile,
-/area/station/commons/vacant_room/commissary)
+/turf/open/floor/stone,
+/area/station/service/bar)
"rrZ" = (
/obj/structure/closet/crate/trashcart,
/obj/effect/spawner/random/trash/garbage,
@@ -49797,24 +52338,6 @@
"rsL" = (
/turf/closed/wall/r_wall,
/area/station/maintenance/starboard/fore)
-"rsQ" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/landmark/navigate_destination/chapel,
-/obj/effect/landmark/transport/nav_beacon/tram/nav/immovable_rod,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
-"rsV" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock{
- name = "Coldroom Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/all/service/kitchen,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"rsZ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/decal/cleanable/dirt,
@@ -49897,12 +52420,31 @@
"ruD" = (
/turf/open/floor/plating,
/area/station/maintenance/starboard/lesser)
+"ruS" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/sorting/mail{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/mail_sorting/service/kitchen,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"ruY" = (
/turf/open/floor/plating,
/area/station/maintenance/fore/lesser)
"rvp" = (
/turf/closed/mineral/random/stationside,
/area/station/maintenance/hallway/abandoned_command)
+"rvr" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/airalarm/directional/west,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"rvs" = (
/obj/effect/turf_decal/stripes/white/line,
/obj/item/stack/sheet/mineral/titanium,
@@ -49924,14 +52466,6 @@
},
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/escape)
-"rvH" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/machinery/light/small/directional/east,
-/obj/structure/chair/stool/bar/directional/north,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
"rvX" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/left/directional/south{
@@ -50019,6 +52553,13 @@
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/plating,
/area/station/maintenance/department/prison)
+"rxa" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/obj/structure/mannequin/plastic,
+/turf/open/floor/carpet/blue,
+/area/station/cargo/boutique)
"rxo" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -50092,6 +52633,12 @@
},
/turf/open/floor/iron/smooth,
/area/station/hallway/secondary/command)
+"rya" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"ryi" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -50107,22 +52654,6 @@
dir = 1
},
/area/station/science/research)
-"rym" = (
-/obj/machinery/door/airlock/public/glass{
- name = "Public Shrine"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_half{
- dir = 1
- },
-/area/station/hallway/secondary/exit/departure_lounge)
-"ryp" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/siding/wood{
- dir = 5
- },
-/turf/open/floor/grass,
-/area/station/service/chapel)
"ryt" = (
/obj/machinery/light/dim/directional/north,
/obj/effect/turf_decal/tile/neutral{
@@ -50142,6 +52673,11 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/aft)
+"ryW" = (
+/obj/machinery/camera/autoname/directional/east,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"rza" = (
/obj/structure/disposalpipe/junction{
dir = 1
@@ -50162,22 +52698,25 @@
},
/turf/open/floor/iron,
/area/station/commons/dorms)
-"rzu" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/light/floor,
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
-"rzG" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/tile/dark_red/half/contrasted{
- dir = 4
+"rzy" = (
+/obj/effect/turf_decal/plaque{
+ icon_state = "L9";
+ pixel_y = -15
},
-/mob/living/simple_animal/bot/secbot/beepsky/officer,
-/obj/effect/turf_decal/siding/wideplating/dark/corner{
- dir = 8
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
},
/turf/open/floor/iron,
-/area/station/security)
+/area/station/hallway/primary/central/aft)
+"rzH" = (
+/obj/effect/mapping_helpers/airlock/access/all/service/kitchen,
+/obj/machinery/door/airlock/freezer{
+ name = "Freezer"
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable,
+/turf/open/floor/iron/freezer,
+/area/station/service/kitchen/coldroom)
"rzJ" = (
/obj/structure/chair/sofa/bench/left{
dir = 4
@@ -50203,24 +52742,6 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/iron,
/area/station/maintenance/department/medical/central)
-"rAb" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/wood{
- dir = 9
- },
-/turf/open/floor/grass,
-/area/station/service/chapel)
-"rAn" = (
-/obj/structure/closet/secure_closet/hydroponics,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/green/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
- },
-/obj/machinery/airalarm/directional/west,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"rAt" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -50325,19 +52846,6 @@
dir = 8
},
/area/station/commons)
-"rBx" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/green/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/vending/wardrobe/hydro_wardrobe,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"rBy" = (
/obj/machinery/camera/autoname/directional/west,
/turf/open/floor/iron,
@@ -50357,16 +52865,6 @@
/obj/effect/landmark/secequipment,
/turf/open/floor/iron,
/area/station/security/tram)
-"rBG" = (
-/obj/structure/window/spawner/directional/west,
-/obj/structure/flora/bush/large/style_random{
- pixel_x = -17;
- pixel_y = 2
- },
-/obj/structure/flora/bush/flowers_yw/style_random,
-/obj/structure/window/spawner/directional/east,
-/turf/open/misc/sandy_dirt,
-/area/station/service/hydroponics)
"rBI" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/tile/neutral{
@@ -50375,18 +52873,6 @@
/obj/machinery/camera/autoname/directional/north,
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
-"rBK" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/structure/chair/sofa/bench/right{
- dir = 4
- },
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
-"rBN" = (
-/obj/effect/landmark/start/botanist,
-/turf/open/floor/iron/white/small,
-/area/station/service/hydroponics)
"rBO" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -50396,10 +52882,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/commons/dorms)
-"rBQ" = (
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/iron/white/small,
-/area/station/service/hydroponics)
"rBY" = (
/obj/effect/turf_decal/tile/blue,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -50413,12 +52895,6 @@
dir = 1
},
/area/station/science/ordnance/testlab)
-"rCd" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/airalarm/directional/east,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"rCj" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
@@ -50465,13 +52941,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/wood,
/area/station/engineering/break_room)
-"rDf" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"rDj" = (
/obj/structure/chair/sofa/bench/left{
dir = 8
@@ -50482,12 +52951,16 @@
dir = 4
},
/area/station/hallway/secondary/entry)
-"rDy" = (
-/obj/structure/disposalpipe/segment,
+"rDv" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/light/cold/directional/west,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/firealarm/directional/west,
+/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
-/area/station/service/hydroponics)
+/area/station/hallway/primary/central/fore)
"rDD" = (
/obj/structure/railing{
dir = 1
@@ -50537,6 +53010,13 @@
"rEd" = (
/turf/open/floor/iron,
/area/station/maintenance/fore/greater)
+"rEF" = (
+/obj/machinery/photocopier,
+/obj/structure/sign/painting/library{
+ pixel_y = 32
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"rEH" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{
dir = 4
@@ -50548,6 +53028,14 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos,
/turf/open/floor/catwalk_floor,
/area/station/engineering/atmos)
+"rEJ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/camera/directional/east,
+/obj/machinery/status_display/evac/directional/east,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"rEY" = (
/obj/effect/turf_decal/tile/blue,
/obj/machinery/pdapainter{
@@ -50653,12 +53141,6 @@
/obj/effect/turf_decal/delivery/white,
/turf/open/floor/iron,
/area/station/cargo/sorting)
-"rFQ" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 1
- },
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
"rFV" = (
/obj/effect/turf_decal/trimline/blue/filled/corner,
/turf/open/floor/iron/white,
@@ -50679,17 +53161,6 @@
/obj/machinery/light/cold/directional/north,
/turf/open/floor/iron,
/area/station/cargo/sorting)
-"rGm" = (
-/obj/effect/turf_decal/tile/dark_red/opposingcorners,
-/obj/machinery/computer/security,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching Prison Wing holding areas.";
- name = "Prison Monitor";
- network = list("prison");
- pixel_y = 30
- },
-/turf/open/floor/iron,
-/area/station/security/warden)
"rGp" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -50713,11 +53184,6 @@
/obj/effect/turf_decal/delivery/white,
/turf/open/floor/iron,
/area/station/cargo/sorting)
-"rGt" = (
-/obj/machinery/exodrone_launcher,
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/iron/smooth,
-/area/station/cargo/drone_bay)
"rGB" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -50745,11 +53211,6 @@
/obj/item/screwdriver,
/turf/open/floor/iron/dark,
/area/station/hallway/secondary/construction)
-"rHd" = (
-/obj/effect/turf_decal/tile/brown/full,
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"rHe" = (
/obj/effect/turf_decal/tile/yellow{
dir = 1
@@ -50760,15 +53221,6 @@
/obj/structure/cable,
/turf/open/floor/iron/smooth,
/area/station/engineering/main)
-"rHm" = (
-/obj/effect/turf_decal/tile/brown/full,
-/obj/machinery/chem_master/condimaster{
- desc = "Looks like a knock-off chem-master. Perhaps useful for separating liquids when mixing drinks precisely. Also dispenses condiments.";
- name = "HoochMaster Deluxe";
- pixel_x = -4
- },
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"rHp" = (
/obj/effect/turf_decal/siding/wood,
/obj/effect/landmark/event_spawn,
@@ -50806,22 +53258,17 @@
/obj/effect/spawner/random/structure/girder,
/turf/open/floor/plating,
/area/station/maintenance/department/engine/atmos)
-"rHL" = (
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/turf_decal/delivery,
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/machinery/modular_computer/preset/cargochat/service,
-/turf/open/floor/iron/kitchen/small,
-/area/station/hallway/secondary/service)
"rHO" = (
/obj/structure/closet/emcloset,
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron,
/area/station/maintenance/hallway/abandoned_command)
-"rHQ" = (
-/obj/machinery/deepfryer,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
+"rHY" = (
+/obj/effect/turf_decal/siding/wideplating_new/terracotta{
+ dir = 1
+ },
+/turf/open/floor/wood/tile,
+/area/station/maintenance/central/lesser)
"rIb" = (
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/obj/structure/closet/secure_closet/security/sec,
@@ -50830,10 +53277,6 @@
/obj/structure/reagent_dispensers/wall/peppertank/directional/north,
/turf/open/floor/iron,
/area/station/security/lockers)
-"rIg" = (
-/obj/machinery/griddle,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"rIn" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/tile/neutral{
@@ -50847,45 +53290,13 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark/herringbone,
/area/station/service/abandoned_gambling_den/gaming)
-"rIH" = (
-/obj/structure/disposalpipe/junction/flip{
- dir = 1
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/dark_red/half/contrasted{
- dir = 4
- },
-/obj/effect/turf_decal/siding/wideplating/dark{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/security)
"rIJ" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/engine,
/area/station/engineering/gravity_generator)
-"rIS" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"rIY" = (
/turf/closed/wall/r_wall,
/area/station/construction/mining/aux_base)
-"rJh" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
-"rJl" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door/poddoor/shutters/preopen{
- dir = 4;
- id = "kitchenshutters";
- name = "Kitchen Shutters"
- },
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"rJo" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -50897,31 +53308,25 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/department/prison)
-"rJv" = (
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/structure/chair/stool/bar/directional/west,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"rJw" = (
/mob/living/carbon/human/species/monkey{
name = "George"
},
/turf/open/floor/grass,
/area/station/science/xenobiology)
-"rJT" = (
-/obj/structure/chair/sofa/left/maroon,
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
"rJW" = (
/obj/machinery/suit_storage_unit/hos,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/checker,
/area/station/command/heads_quarters/hos)
+"rJZ" = (
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"rKv" = (
/obj/structure/broken_flooring/singular/directional/east,
/turf/open/floor/iron,
@@ -50932,16 +53337,6 @@
},
/turf/open/floor/iron,
/area/station/science/cytology)
-"rKL" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/structure/chair/pew{
- dir = 4
- },
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/wood,
-/area/station/service/theater)
"rKR" = (
/obj/effect/turf_decal/tile/yellow{
dir = 1
@@ -50996,44 +53391,24 @@
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
-"rLu" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/closet/crate,
-/obj/item/stock_parts/cell/high{
- pixel_x = -11;
- pixel_y = 2
- },
-/obj/item/reagent_containers/cup/glass/bottle/vodka,
-/obj/item/food/grown/citrus/orange,
-/obj/item/food/grown/citrus/orange{
- pixel_x = 4;
- pixel_y = 2
- },
-/obj/item/food/grown/grapes/green{
- pixel_y = -4;
- pixel_x = -6
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
- },
-/turf/open/floor/iron/small,
-/area/station/maintenance/department/engine/atmos)
-"rLw" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"rLx" = (
/obj/effect/turf_decal/siding/thinplating/terracotta,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/commons/dorms)
+"rLA" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/fore)
"rLK" = (
/obj/machinery/hydroponics/soil{
pixel_y = 8
@@ -51051,11 +53426,6 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/station/ai_monitored/command/nuke_storage)
-"rLT" = (
-/obj/effect/turf_decal/siding/wood/corner,
-/obj/structure/flora/tree/jungle/small/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"rMb" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/obj/effect/landmark/generic_maintenance_landmark,
@@ -51124,15 +53494,6 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/circuit/red,
/area/station/ai_monitored/turret_protected/ai_upload)
-"rMM" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/siding/wideplating_new/terracotta{
- dir = 4
- },
-/turf/open/floor/wood/tile,
-/area/station/commons/vacant_room/commissary)
"rMR" = (
/obj/effect/turf_decal/siding/yellow{
dir = 10
@@ -51144,28 +53505,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/diagonal,
/area/station/engineering/lobby)
-"rMV" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
-"rMY" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/steam_vent,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"rNd" = (
/obj/structure/cable,
/obj/machinery/door/airlock{
@@ -51184,16 +53523,6 @@
/obj/machinery/digital_clock/directional/north,
/turf/open/floor/iron,
/area/station/security)
-"rNq" = (
-/obj/machinery/door/airlock/multi_tile/public/glass{
- name = "Theatre"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_half,
-/area/station/service/theater)
-"rNA" = (
-/turf/open/floor/wood,
-/area/station/service/theater)
"rNB" = (
/obj/machinery/light/small/directional/west,
/turf/open/floor/catwalk_floor/iron_smooth,
@@ -51211,35 +53540,20 @@
/obj/effect/spawner/random/entertainment/arcade,
/turf/open/floor/iron/cafeteria,
/area/station/security/prison/mess)
-"rOb" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
-"rOm" = (
+"rNL" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
},
-/obj/structure/chair/pew{
- dir = 4
- },
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/wood,
-/area/station/service/theater)
-"rOx" = (
-/obj/structure/window/reinforced/spawner/directional/west,
+/obj/structure/displaycase/trophy,
/turf/open/floor/wood/parquet,
-/area/station/service/theater)
-"rOy" = (
-/obj/structure/chair/plastic{
- dir = 8
- },
+/area/station/service/library)
+"rNN" = (
/obj/effect/landmark/start/hangover,
-/obj/machinery/light/small/directional/east,
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"rOG" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -51306,6 +53620,26 @@
},
/turf/open/floor/iron/white/small,
/area/station/medical/psychology)
+"rPA" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/fore)
+"rPL" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/lesser)
"rPT" = (
/obj/structure/chair/stool/bar/directional/east,
/obj/effect/turf_decal/siding/red/corner{
@@ -51335,6 +53669,19 @@
/obj/structure/sign/poster/official/random/directional/west,
/turf/open/floor/iron,
/area/station/engineering/main)
+"rPW" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/structure/flora/bush/flowers_br/style_random,
+/turf/open/floor/grass,
+/area/station/service/chapel)
+"rPX" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/obj/machinery/holopad,
+/turf/open/floor/stone,
+/area/station/service/bar)
"rQi" = (
/turf/closed/wall/r_wall,
/area/station/engineering/main)
@@ -51342,10 +53689,6 @@
/obj/structure/lattice,
/turf/open/space/basic,
/area/station/engineering/atmos/space_catwalk)
-"rQt" = (
-/obj/effect/landmark/start/mime,
-/turf/open/floor/carpet/lone,
-/area/station/service/theater)
"rQw" = (
/obj/machinery/light/small/directional/north,
/turf/open/floor/engine,
@@ -51422,11 +53765,6 @@
dir = 1
},
/area/station/security/courtroom)
-"rRn" = (
-/obj/structure/lattice,
-/obj/structure/window/reinforced/spawner/directional/west,
-/turf/open/space/basic,
-/area/space/nearstation)
"rRq" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
@@ -51461,14 +53799,6 @@
},
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/escape)
-"rSj" = (
-/obj/structure/cable,
-/obj/machinery/door/airlock{
- name = "Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/any/security/general,
-/turf/open/floor/plating,
-/area/station/maintenance/central/lesser)
"rSt" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -51527,20 +53857,23 @@
},
/turf/open/floor/iron/smooth,
/area/station/engineering/main)
+"rTl" = (
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"rTq" = (
/obj/machinery/photocopier,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/grimy,
/area/station/commons/vacant_room/office)
-"rTt" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/red/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
- },
-/turf/open/floor/iron/smooth,
-/area/station/service/greenroom)
"rTy" = (
/obj/structure/cable,
/turf/open/floor/iron,
@@ -51651,12 +53984,6 @@
},
/turf/open/floor/iron,
/area/station/cargo/sorting)
-"rUB" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/large,
-/area/station/hallway/secondary/spacebridge)
"rUD" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -51689,12 +54016,6 @@
/obj/effect/spawner/random/structure/table_or_rack,
/turf/open/floor/plating,
/area/station/maintenance/department/science/xenobiology)
-"rUS" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"rUV" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -51718,6 +54039,15 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark,
/area/station/security/prison/safe)
+"rVt" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/structure/chair/wood{
+ dir = 4
+ },
+/turf/open/floor/wood/tile,
+/area/station/service/bar)
"rVy" = (
/obj/effect/turf_decal/stripes/red/line{
dir = 4
@@ -51876,6 +54206,13 @@
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
+"rXy" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"rXM" = (
/obj/structure/cable,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -51883,6 +54220,14 @@
},
/turf/open/floor/iron,
/area/station/engineering/storage/tech)
+"rXO" = (
+/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
+/obj/machinery/door/airlock{
+ name = "Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/unres,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"rXW" = (
/obj/structure/flora/bush/flowers_yw,
/obj/machinery/door/window/left/directional/west{
@@ -51901,12 +54246,6 @@
"rYc" = (
/turf/open/floor/iron/small,
/area/station/maintenance/port/lesser)
-"rYd" = (
-/obj/structure/chair/sofa/left,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/machinery/airalarm/directional/north,
-/turf/open/floor/wood,
-/area/station/hallway/secondary/service)
"rYm" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/chair/office/light{
@@ -51922,17 +54261,19 @@
"rYp" = (
/turf/open/floor/iron/dark/small,
/area/station/tcommsat/server)
+"rYs" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/obj/structure/flora/bush/flowers_yw/style_3,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"rYt" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
},
/turf/open/floor/iron/white,
/area/station/science/cytology)
-"rYv" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"rYx" = (
/obj/effect/turf_decal/siding/wideplating/dark,
/obj/structure/cable,
@@ -51940,16 +54281,18 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/small,
/area/station/service/barber)
-"rYD" = (
-/obj/structure/cable,
-/obj/effect/mapping_helpers/broken_floor,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"rYG" = (
/obj/structure/cable,
/obj/machinery/door/firedoor,
/turf/open/floor/iron,
/area/station/security/prison/workout)
+"rYJ" = (
+/obj/machinery/skill_station,
+/obj/structure/sign/painting/library{
+ pixel_x = 30
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"rYL" = (
/obj/effect/turf_decal/tile/yellow/opposingcorners,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -51960,6 +54303,12 @@
/obj/structure/extinguisher_cabinet/directional/south,
/turf/open/floor/iron,
/area/station/command/heads_quarters/ce)
+"rZb" = (
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"rZc" = (
/obj/machinery/holopad,
/obj/effect/turf_decal/box/white{
@@ -52010,6 +54359,17 @@
},
/turf/open/floor/iron/dark,
/area/station/service/lawoffice)
+"rZz" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"rZG" = (
/obj/structure/closet/crate/trashcart,
/obj/effect/spawner/random/trash/food_packaging,
@@ -52019,27 +54379,20 @@
/obj/structure/alien/weeds,
/turf/open/floor/iron,
/area/station/maintenance/starboard/greater)
-"rZK" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/power/apc/auto_name/directional/north,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"rZM" = (
/obj/structure/table/wood,
/obj/item/clothing/glasses/eyepatch/medical,
/turf/open/floor/carpet/orange,
/area/station/commons/dorms)
-"rZN" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
+"sar" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
},
-/obj/effect/turf_decal/tile/brown/full,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
+/obj/machinery/camera/autoname/directional/west,
+/obj/machinery/firealarm/directional/west,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"sas" = (
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/carpet/blue,
@@ -52056,25 +54409,23 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos/pumproom)
-"say" = (
-/obj/machinery/hydroponics/constructable,
-/obj/effect/turf_decal/tile/blue/half,
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/iron/white/small,
-/area/station/service/hydroponics)
+"saz" = (
+/obj/machinery/status_display/ai/directional/west,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
+"saL" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"saY" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/science/robotics/augments)
-"saZ" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/machinery/status_display/evac/directional/north,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"sbf" = (
/obj/structure/railing{
dir = 1
@@ -52087,11 +54438,6 @@
/obj/structure/cable,
/turf/open/floor/iron/smooth,
/area/station/engineering/atmos)
-"sbm" = (
-/obj/structure/plasticflaps/opaque,
-/obj/machinery/duct,
-/turf/open/floor/iron,
-/area/station/maintenance/central/greater)
"sbq" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/closed/wall/r_wall,
@@ -52192,41 +54538,26 @@
/obj/machinery/light/small/broken/directional/south,
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
-"scz" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/door/airlock/maintenance{
- name = "Maintenance"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
-/obj/effect/mapping_helpers/airlock/unres{
+"scR" = (
+/obj/effect/turf_decal/siding/wood{
dir = 8
},
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
-"scC" = (
-/obj/machinery/chem_master/condimaster{
- name = "CondiMaster Neo"
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/wood/tile,
+/area/station/service/bar)
+"scY" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/machinery/camera/autoname/directional/north,
-/obj/machinery/airalarm/directional/north,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
+/turf/open/floor/wood,
+/area/station/cargo/boutique)
"sdf" = (
/obj/item/kirbyplants/random/fullysynthetic,
/obj/machinery/light_switch/directional/east,
/turf/open/floor/iron/dark,
/area/station/security/interrogation)
-"sdg" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/turf/open/floor/grass,
-/area/station/service/chapel)
"sdF" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -52234,20 +54565,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmospherics_engine)
-"sdQ" = (
-/obj/structure/cable,
-/obj/machinery/door/airlock/maintenance{
- name = "Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
-"sdT" = (
-/obj/machinery/hydroponics/constructable,
-/obj/effect/turf_decal/tile/blue/half,
-/obj/machinery/camera/autoname/directional/west,
-/turf/open/floor/iron/white/small,
-/area/station/service/hydroponics)
"sea" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -52262,18 +54579,17 @@
/obj/effect/spawner/random/engineering/tracking_beacon,
/turf/open/floor/iron/smooth,
/area/station/engineering/supermatter/room)
-"sei" = (
-/obj/effect/turf_decal/siding/thinplating_new/light{
- dir = 8
+"sem" = (
+/obj/machinery/door/airlock{
+ name = "Kitchen"
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
-"sel" = (
-/obj/structure/disposalpipe/segment,
+/obj/effect/mapping_helpers/airlock/access/all/service/kitchen,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"ser" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -52315,19 +54631,6 @@
},
/turf/open/floor/engine/o2,
/area/station/engineering/atmos/space_catwalk)
-"sfh" = (
-/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/brown/full,
-/obj/item/reagent_containers/cup/glass/shaker{
- pixel_x = 5;
- pixel_y = 10
- },
-/obj/item/reagent_containers/cup/rag{
- pixel_x = 7;
- pixel_y = -1
- },
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"sfk" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/tile/neutral,
@@ -52348,6 +54651,11 @@
dir = 1
},
/area/station/science/research)
+"sfu" = (
+/obj/effect/turf_decal/tile/dark_red/opposingcorners,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"sfF" = (
/obj/machinery/door/airlock/engineering{
name = "Engineering Office"
@@ -52369,29 +54677,15 @@
dir = 8
},
/area/station/engineering/main)
-"sfK" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
-"sfL" = (
-/obj/machinery/door/airlock/maintenance{
- name = "Maintenance"
+"sfU" = (
+/obj/machinery/light/small/directional/south,
+/obj/machinery/camera/autoname/directional/south,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
},
-/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
-"sfX" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/steam_vent,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/stone,
+/area/station/service/bar)
"sge" = (
/obj/structure/reagent_dispensers/beerkeg,
/obj/item/clothing/head/costume/festive,
@@ -52445,15 +54739,6 @@
},
/turf/open/floor/iron,
/area/station/cargo/sorting)
-"sgS" = (
-/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/neutral/full,
-/obj/machinery/reagentgrinder{
- pixel_x = 3;
- pixel_y = 4
- },
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"sgY" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -52469,26 +54754,6 @@
/obj/structure/filingcabinet/chestdrawer,
/turf/open/floor/iron,
/area/station/science/xenobiology)
-"shw" = (
-/obj/structure/table,
-/obj/item/reagent_containers/cup/glass/sillycup{
- pixel_x = 7;
- pixel_y = 8
- },
-/obj/item/reagent_containers/cup/glass/sillycup{
- pixel_x = 4;
- pixel_y = 4
- },
-/obj/item/reagent_containers/cup/glass/sillycup{
- pixel_x = 7
- },
-/obj/item/reagent_containers/cup/glass/sillycup,
-/obj/item/reagent_containers/cup/glass/mug/coco{
- pixel_x = -6;
- pixel_y = 9
- },
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"shD" = (
/turf/closed/wall,
/area/station/hallway/secondary/recreation)
@@ -52514,38 +54779,19 @@
},
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"shU" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
+"shR" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/landmark/start/cook,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
+/obj/structure/cable,
+/obj/machinery/light/small/directional/north,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"sib" = (
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/north,
/turf/open/floor/iron/dark,
/area/station/hallway/secondary/construction)
-"sih" = (
-/obj/structure/table,
-/obj/item/reagent_containers/condiment/saltshaker{
- desc = "Salt. From space oceans, presumably. A staple of modern medicine.";
- pixel_x = 8;
- pixel_y = 7
- },
-/obj/item/reagent_containers/condiment/peppermill{
- desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table.";
- pixel_x = 8;
- pixel_y = 2
- },
-/obj/effect/spawner/random/food_or_drink/condiment{
- pixel_x = -8;
- pixel_y = 3
- },
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
"sio" = (
/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible{
dir = 4
@@ -52568,26 +54814,6 @@
"sis" = (
/turf/open/floor/grass,
/area/station/security/prison/garden)
-"siv" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/structure/chair/pew/left{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/station/service/theater)
-"siz" = (
-/obj/structure/closet/secure_closet/freezer/fridge,
-/obj/effect/turf_decal/bot_red,
-/obj/machinery/airalarm/directional/north,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
-"siC" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"siG" = (
/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{
dir = 1
@@ -52599,10 +54825,11 @@
},
/turf/open/floor/iron,
/area/station/maintenance/port/fore)
-"siP" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/turf/open/floor/wood,
-/area/station/service/theater)
+"siN" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/structure/chair/stool/bar/directional/north,
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"sjl" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -52618,6 +54845,15 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
+"sjL" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"sjZ" = (
/obj/effect/turf_decal/delivery,
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{
@@ -52664,11 +54900,15 @@
/obj/machinery/camera/autoname/directional/west,
/turf/open/floor/iron,
/area/station/medical/chemistry)
-"skI" = (
-/obj/structure/cable,
-/obj/machinery/light_switch/directional/north,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
+"skN" = (
+/obj/structure/table/wood,
+/obj/machinery/camera/directional/south{
+ c_tag = "Atmospherics - South"
+ },
+/obj/item/stack/cable_coil/five,
+/obj/effect/turf_decal/siding/wideplating_new/terracotta,
+/turf/open/floor/wood/tile,
+/area/station/maintenance/central/lesser)
"skP" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -52706,15 +54946,6 @@
/obj/effect/spawner/random/structure/crate,
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
-"skY" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/structure/chair/pew/left{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/station/service/theater)
"slp" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -52728,11 +54959,6 @@
/obj/structure/flora/bush/flowers_pp/style_random,
/turf/open/floor/grass,
/area/station/medical/virology)
-"slv" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/carpet/lone,
-/area/station/service/theater)
"slw" = (
/turf/closed/wall,
/area/station/cargo/drone_bay)
@@ -52835,14 +55061,6 @@
},
/turf/open/floor/iron,
/area/station/security/courtroom)
-"snc" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"snj" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/disposalpipe/segment{
@@ -52959,6 +55177,18 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/maintenance/port/aft)
+"sot" = (
+/obj/machinery/door/airlock/multi_tile/public{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/floor/iron/textured_half{
+ dir = 8
+ },
+/area/station/service/library)
"sox" = (
/obj/effect/turf_decal/stripes/white/line,
/obj/structure/transport/linear/tram,
@@ -53015,6 +55245,25 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron/dark/small,
/area/station/security/checkpoint/customs/auxiliary)
+"spk" = (
+/obj/machinery/camera/directional/east,
+/obj/machinery/light/small/directional/east,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
+"spo" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/structure/extinguisher_cabinet/directional/north,
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"spx" = (
/obj/machinery/portable_atmospherics/canister/anesthetic_mix,
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
@@ -53038,17 +55287,6 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/customs/auxiliary)
-"spW" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"sqa" = (
/obj/effect/turf_decal/tile/blue,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -53056,17 +55294,6 @@
},
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
-"sqe" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"sqg" = (
/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,
/turf/closed/wall/r_wall,
@@ -53152,6 +55379,16 @@
/obj/structure/disposalpipe/segment,
/turf/closed/wall,
/area/station/maintenance/port/greater)
+"sry" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/bush/jungle/c/style_3{
+ pixel_x = 6;
+ pixel_y = -6
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"srA" = (
/obj/structure/chair/sofa/bench/left{
dir = 4
@@ -53228,6 +55465,32 @@
/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible,
/turf/closed/wall/r_wall,
/area/station/engineering/hallway)
+"ssR" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/structure/chair/stool/directional/west,
+/turf/open/floor/stone,
+/area/station/service/bar)
+"sta" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/item/trash/flare{
+ pixel_x = 11;
+ pixel_y = 21
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/dark/corner{
+ dir = 4
+ },
+/area/station/hallway/primary/central/fore)
"stj" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -53290,6 +55553,14 @@
},
/turf/open/floor/carpet/purple,
/area/station/commons/dorms)
+"sue" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/structure/chair/sofa/bench/right{
+ dir = 4
+ },
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"sul" = (
/obj/effect/turf_decal/siding{
dir = 1
@@ -53297,19 +55568,20 @@
/obj/machinery/holopad,
/turf/open/floor/iron/white/small,
/area/station/science/lab)
-"suq" = (
-/obj/structure/chair/plastic{
- dir = 4
- },
-/obj/effect/landmark/start/hangover,
-/obj/machinery/light/small/directional/west,
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
"suw" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/radio/intercom/directional/south,
/turf/open/floor/iron/checker,
/area/station/command/heads_quarters/hos)
+"suM" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/firealarm/directional/south,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"svh" = (
/obj/structure/cable,
/obj/machinery/door/airlock{
@@ -53379,6 +55651,14 @@
/mob/living/carbon/human/species/monkey,
/turf/open/floor/grass,
/area/station/science/genetics)
+"svE" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/stone,
+/area/station/service/bar)
"svG" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/engine,
@@ -53478,13 +55758,15 @@
/obj/structure/steam_vent,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"swL" = (
-/obj/structure/closet/secure_closet/freezer/kitchen,
-/obj/effect/turf_decal/bot_red,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/structure/sign/poster/official/random/directional/north,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
+"swM" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/bush/jungle/a/style_random{
+ pixel_y = -5
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"swO" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -53525,23 +55807,20 @@
},
/turf/open/floor/wood,
/area/station/command/heads_quarters/qm)
-"sxd" = (
-/obj/structure/disposalpipe/trunk{
+"swW" = (
+/obj/effect/turf_decal/siding/wood{
dir = 1
},
-/obj/machinery/disposal/bin,
-/obj/effect/turf_decal/bot,
-/obj/machinery/button/door/directional/south{
- id = "kihall";
- name = "Hallway Cutoff";
- pixel_x = -7
- },
-/obj/machinery/button/door/directional/south{
- id = "kitchenshutters";
- name = "Kitchen Shutters";
- pixel_x = 7
- },
-/turf/open/floor/iron/cafeteria,
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/restaurant_portal/bar,
+/turf/open/floor/stone,
+/area/station/service/bar)
+"sxl" = (
+/obj/machinery/oven/range,
+/obj/machinery/airalarm/directional/north,
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/structure/cable,
+/turf/open/floor/iron/kitchen/small,
/area/station/service/kitchen)
"sxm" = (
/turf/closed/wall,
@@ -53563,14 +55842,6 @@
},
/turf/open/space/basic,
/area/space/nearstation)
-"sxw" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"sxA" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -53596,22 +55867,18 @@
dir = 8
},
/area/station/science/research)
-"sxL" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/dark_red/fourcorners,
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"sxT" = (
/obj/structure/cable,
/obj/structure/lattice/catwalk,
/turf/open/space/basic,
/area/station/solars/aft)
+"sxZ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/fore)
"syb" = (
/obj/docking_port/stationary/random{
dir = 4;
@@ -53657,10 +55924,6 @@
"syk" = (
/turf/closed/wall,
/area/station/security/warden)
-"syv" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"syx" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -53685,10 +55948,6 @@
/obj/structure/flora/bush/flowers_yw/style_random,
/turf/open/misc/sandy_dirt,
/area/station/medical/medbay/lobby)
-"syG" = (
-/obj/effect/spawner/xmastree,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"syN" = (
/obj/effect/spawner/random/trash,
/turf/open/floor/plating,
@@ -53701,82 +55960,6 @@
},
/turf/open/floor/iron/dark/small,
/area/station/security/brig)
-"sze" = (
-/obj/structure/chair/sofa/left/maroon{
- dir = 1
- },
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
-"szy" = (
-/obj/effect/spawner/random/engineering/tracking_beacon,
-/turf/open/floor/grass,
-/area/station/service/chapel)
-"szz" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/power/apc/auto_name/directional/north,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
-"szG" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/structure/chair/office{
- dir = 4
- },
-/obj/machinery/duct,
-/obj/effect/landmark/start/botanist,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
-"szH" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door/window/right/directional/west{
- name = "Hydroponics Desk";
- req_access = list("hydroponics")
- },
-/obj/machinery/door/firedoor,
-/obj/machinery/duct,
-/turf/open/floor/iron/textured_large,
-/area/station/hallway/primary/central/fore)
-"szM" = (
-/obj/machinery/computer/slot_machine{
- pixel_y = 2
- },
-/obj/machinery/newscaster/directional/east,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
-"szS" = (
-/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/neutral/full,
-/obj/machinery/chem_dispenser/drinks{
- dir = 1
- },
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
-"szZ" = (
-/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/brown/full,
-/obj/item/reagent_containers/cup/glass/waterbottle/large{
- pixel_x = 7;
- pixel_y = 17
- },
-/obj/item/reagent_containers/cup/glass/waterbottle/large{
- pixel_x = -6;
- pixel_y = 15
- },
-/obj/item/reagent_containers/cup/glass/waterbottle/large{
- pixel_x = 4;
- pixel_y = 10
- },
-/obj/item/reagent_containers/cup/glass/waterbottle/large{
- pixel_x = -7;
- pixel_y = 8
- },
-/obj/structure/extinguisher_cabinet/directional/south,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"sAb" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible/layer1{
@@ -53816,28 +55999,23 @@
},
/turf/open/space/basic,
/area/station/engineering/atmos/space_catwalk)
+"sBf" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/spawner/random/structure/steam_vent,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"sBm" = (
/obj/structure/transport/linear/tram,
/obj/structure/fluff/tram_rail/floor,
/obj/structure/thermoplastic/light,
/turf/open/floor/tram,
/area/station/maintenance/port/aft)
-"sBp" = (
-/obj/structure/table,
-/obj/machinery/processor{
- pixel_y = 6
- },
-/obj/machinery/firealarm/directional/south,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
-"sBz" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 10
- },
-/obj/machinery/light/small/directional/south,
-/obj/machinery/camera/autoname/directional/south,
-/turf/open/floor/iron/grimy,
-/area/station/service/theater)
"sBL" = (
/obj/structure/sign/directions/science{
dir = 4;
@@ -53901,6 +56079,14 @@
/obj/effect/mapping_helpers/airlock/access/all/medical/general,
/turf/open/floor/iron/dark/small,
/area/station/medical/medbay/central)
+"sCq" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/dark_red/fourcorners,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"sCu" = (
/obj/machinery/computer/prisoner/management{
dir = 8
@@ -54008,13 +56194,6 @@
dir = 4
},
/area/station/science/lab)
-"sDT" = (
-/obj/machinery/firealarm/directional/north,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
"sDZ" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/trimline/neutral/line{
@@ -54060,13 +56239,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/grimy,
/area/station/commons/vacant_room/office)
-"sED" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/effect/turf_decal/siding/wood,
-/turf/open/floor/iron/grimy,
-/area/station/service/theater)
"sES" = (
/obj/machinery/door/airlock/hatch{
name = "Creature Pen"
@@ -54081,42 +56253,21 @@
},
/turf/open/floor/plating,
/area/station/maintenance/department/prison)
-"sFz" = (
-/obj/structure/chair/stool/directional/east,
-/obj/machinery/camera/autoname/directional/south,
-/turf/open/floor/iron/cafeteria,
-/area/station/security/prison/mess)
-"sFD" = (
-/obj/effect/turf_decal/tile/purple/opposingcorners,
-/obj/effect/turf_decal/siding/green{
- dir = 9
- },
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/power/apc/auto_name/directional/west,
+"sFs" = (
/obj/structure/cable,
-/turf/open/floor/iron/cafeteria,
-/area/station/science/circuits)
-"sFH" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
},
/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
-"sFJ" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 6
- },
-/obj/machinery/light/small/directional/south,
-/obj/machinery/firealarm/directional/south,
-/turf/open/floor/iron/grimy,
-/area/station/service/theater)
+/area/station/hallway/primary/central/aft)
+"sFz" = (
+/obj/structure/chair/stool/directional/east,
+/obj/machinery/camera/autoname/directional/south,
+/turf/open/floor/iron/cafeteria,
+/area/station/security/prison/mess)
"sGh" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/effect/turf_decal/stripes/white/line{
@@ -54124,6 +56275,11 @@
},
/turf/open/floor/engine,
/area/station/science/xenobiology)
+"sGk" = (
+/obj/structure/flora/bush/jungle/c/style_random,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"sGp" = (
/obj/structure/flora/rock/pile/style_random,
/obj/structure/window/reinforced/spawner/directional/west,
@@ -54150,6 +56306,20 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/science/ordnance/storage)
+"sGN" = (
+/obj/machinery/modular_computer/preset/cargochat/service{
+ dir = 8
+ },
+/obj/effect/turf_decal/delivery,
+/obj/machinery/requests_console/auto_name/directional/east,
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 4
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"sHe" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -54200,12 +56370,6 @@
/obj/machinery/camera/autoname/directional/north,
/turf/open/floor/engine,
/area/station/science/cytology)
-"sIh" = (
-/obj/structure/window/reinforced/spawner/directional/north,
-/turf/open/floor/iron/stairs{
- dir = 8
- },
-/area/station/service/theater)
"sIj" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -54226,21 +56390,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/dark,
/area/station/engineering/atmospherics_engine)
-"sIG" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/sign/directions/evac/directional/west,
-/obj/structure/sign/directions/science/directional/west{
- dir = 4;
- pixel_y = -8
- },
-/obj/structure/sign/directions/security/directional/west{
- pixel_y = 8
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"sIO" = (
/obj/structure/grille/broken,
/obj/item/shard/titanium,
@@ -54264,6 +56413,17 @@
/obj/machinery/holopad,
/turf/open/floor/iron/smooth_large,
/area/station/science/auxlab/firing_range)
+"sJv" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/navbeacon{
+ codes_txt = "patrol;next_patrol=1.5-PNexus-Vault";
+ location = "1.0-Security-PNexus"
+ },
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"sJw" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -54289,6 +56449,17 @@
"sJR" = (
/turf/open/floor/plating,
/area/station/maintenance/fore/greater)
+"sJV" = (
+/obj/effect/turf_decal/tile/green/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/machinery/chem_master/condimaster{
+ desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments.";
+ name = "BrewMaster 2199"
+ },
+/turf/open/floor/iron,
+/area/station/service/hydroponics)
"sKk" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -54327,17 +56498,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
-"sKD" = (
-/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/access/any/engineering/construction,
-/obj/structure/cable,
-/obj/effect/landmark/navigate_destination,
-/obj/effect/mapping_helpers/airlock/access/any/engineering/general,
-/obj/machinery/door/airlock/engineering{
- name = "Main Engineering"
- },
-/turf/open/floor/catwalk_floor,
-/area/station/engineering/break_room)
"sKE" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron/white/small,
@@ -54349,14 +56509,6 @@
/obj/effect/gibspawner,
/turf/open/floor/wood,
/area/station/maintenance/starboard/greater)
-"sLc" = (
-/obj/structure/cable,
-/obj/machinery/door/window/right/directional/north{
- name = "Library Desk Door";
- req_access = list("library")
- },
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"sLu" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -54436,18 +56588,27 @@
dir = 1
},
/area/station/science/research)
-"sMi" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/siding/wood{
- dir = 9
+"sMj" = (
+/obj/machinery/light/floor,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
},
-/obj/effect/decal/cleanable/cobweb,
-/turf/open/floor/grass,
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/open/floor/stone,
/area/station/service/chapel)
"sMq" = (
/obj/machinery/light/warm/directional/west,
/turf/open/floor/iron,
/area/station/security/prison)
+"sMt" = (
+/obj/structure/chair/sofa/bench/right{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron/white/side,
+/area/station/hallway/primary/central/aft)
"sMu" = (
/obj/structure/cable,
/obj/structure/railing,
@@ -54456,13 +56617,6 @@
"sMD" = (
/turf/closed/wall,
/area/station/science/server)
-"sMG" = (
-/obj/structure/cable,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/steam_vent,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"sMT" = (
/obj/structure/table,
/obj/item/emergency_bed{
@@ -54514,24 +56668,27 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/exit/departure_lounge)
-"sNv" = (
+"sNr" = (
/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/airlock/maintenance{
- name = "Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
-/obj/effect/mapping_helpers/airlock/unres{
+/obj/effect/turf_decal/siding/dark_red/corner{
dir = 1
},
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
+/obj/structure/rack,
+/obj/effect/spawner/random/armory/riot_helmet,
+/obj/effect/spawner/random/armory/bulletproof_helmet,
+/obj/effect/spawner/random/armory/dragnet,
+/turf/open/floor/iron/dark/small,
+/area/station/ai_monitored/security/armory)
"sNz" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
+"sNA" = (
+/obj/effect/spawner/xmastree,
+/turf/open/misc/dirt/jungle,
+/area/station/service/chapel)
"sNW" = (
/obj/structure/rack,
/obj/effect/spawner/random/maintenance,
@@ -54607,16 +56764,6 @@
/obj/effect/landmark/navigate_destination,
/turf/open/floor/iron/textured_half,
/area/station/commons/storage/art)
-"sOW" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
"sPa" = (
/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
/obj/machinery/door/airlock/grunge{
@@ -54643,42 +56790,17 @@
dir = 4
},
/area/station/engineering/main)
-"sPt" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"sPx" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/broken_flooring/pile/directional/east,
/turf/open/floor/plating,
/area/station/hallway/secondary/dock)
-"sPE" = (
-/obj/structure/closet/secure_closet/freezer/meat,
-/obj/effect/turf_decal/bot_red,
-/obj/machinery/light/cold/directional/north,
-/obj/machinery/camera/autoname/directional/north,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
"sPO" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
/obj/effect/spawner/random/trash,
/turf/open/floor/plating,
/area/station/maintenance/department/science/xenobiology)
-"sPT" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/mob/living/basic/goat/pete,
-/obj/machinery/duct,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
"sQa" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -54735,12 +56857,6 @@
/obj/structure/alien/weeds,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
-"sQA" = (
-/obj/effect/turf_decal/siding/white,
-/obj/structure/bed/maint,
-/obj/structure/railing,
-/turf/open/floor/stone,
-/area/station/service/theater)
"sQI" = (
/obj/effect/turf_decal/tile/blue,
/obj/machinery/modular_computer/preset/id,
@@ -54779,13 +56895,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/engine,
/area/station/science/explab)
-"sQU" = (
-/obj/machinery/vending/hydronutrients,
-/obj/effect/turf_decal/delivery/white{
- color = "#52B4E9"
- },
-/turf/open/floor/iron/white/small,
-/area/station/service/hydroponics)
"sQX" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -54795,16 +56904,6 @@
},
/turf/open/floor/iron/white/small,
/area/station/science/ordnance/storage)
-"sQY" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/obj/effect/turf_decal/siding/thinplating_new/light{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"sRf" = (
/obj/machinery/power/turbine/inlet_compressor{
dir = 8
@@ -54823,15 +56922,6 @@
dir = 8
},
/area/station/science/lobby)
-"sRv" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door/window/left/directional/west{
- name = "Hydroponics Desk";
- req_access = list("hydroponics")
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_large,
-/area/station/hallway/primary/central/fore)
"sRD" = (
/obj/machinery/shower/directional/west,
/obj/effect/turf_decal/siding/thinplating/dark{
@@ -54852,6 +56942,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/cargo/storage)
+"sRT" = (
+/obj/machinery/disposal/bin,
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 5
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/turf/open/floor/eighties/red,
+/area/station/hallway/primary/central/fore)
"sRV" = (
/obj/structure/cable,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
@@ -54872,18 +56972,6 @@
/obj/effect/turf_decal/tile/blue,
/turf/open/floor/iron/white,
/area/station/medical/medbay/aft)
-"sSr" = (
-/obj/machinery/door/airlock{
- name = "Kitchen"
- },
-/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/access/all/service/kitchen,
-/turf/open/floor/catwalk_floor/flat_white,
-/area/station/service/kitchen)
-"sSt" = (
-/obj/effect/spawner/structure/window,
-/turf/open/floor/plating,
-/area/station/service/kitchen)
"sSx" = (
/obj/structure/table,
/obj/item/restraints/handcuffs/cable{
@@ -54917,6 +57005,13 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron/textured_half,
/area/station/engineering/atmos)
+"sSN" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/obj/structure/flora/bush/flowers_pp/style_2,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"sSQ" = (
/turf/closed/wall,
/area/station/maintenance/department/medical/central)
@@ -54952,6 +57047,19 @@
},
/turf/open/floor/iron/dark,
/area/station/science/genetics)
+"sTb" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/plaque{
+ icon_state = "L14";
+ pixel_y = -15
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"sTi" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -54963,9 +57071,6 @@
/obj/structure/broken_flooring/singular/directional/south,
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
-"sTp" = (
-/turf/closed/wall,
-/area/station/service/cafeteria)
"sTq" = (
/obj/structure/railing{
dir = 10
@@ -55036,6 +57141,13 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/checker,
/area/station/security/breakroom)
+"sUN" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/bush/flowers_yw,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"sUV" = (
/obj/structure/table,
/obj/item/folder/yellow,
@@ -55062,16 +57174,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/maintenance/starboard/greater)
-"sVl" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/green/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/obj/effect/landmark/start/botanist,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"sVp" = (
/obj/structure/table,
/obj/structure/sign/poster/official/corporate_perks_vacation/directional/east,
@@ -55107,6 +57209,14 @@
/obj/machinery/chem_master,
/turf/open/floor/iron,
/area/station/science/xenobiology)
+"sWq" = (
+/obj/structure/chair/stool/bar/directional/north,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/wood,
+/area/station/hallway/primary/central/aft)
"sWA" = (
/obj/machinery/door/airlock/glass{
name = "Gold Standard Law Firm"
@@ -55122,20 +57232,6 @@
/obj/machinery/light/broken/directional/south,
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
-"sWJ" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/security/glass{
- id_tag = "outerbrig";
- name = "Brig"
- },
-/obj/effect/mapping_helpers/airlock/access/all/security/entrance,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "sci-entrance"
- },
-/turf/open/floor/iron/textured_half,
-/area/station/security/brig/entrance)
"sWQ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -55146,10 +57242,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/white,
/area/station/science/cytology)
-"sXk" = (
-/obj/effect/spawner/structure/window,
-/turf/open/floor/plating,
-/area/station/service/theater)
"sXm" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -55157,26 +57249,25 @@
},
/turf/open/floor/iron,
/area/station/maintenance/department/engine/atmos)
-"sXo" = (
-/obj/structure/sign/directions/engineering{
- dir = 1;
- pixel_y = 8
- },
-/obj/structure/sign/directions/command{
- dir = 1
- },
-/obj/structure/sign/directions/supply{
- dir = 1;
- pixel_y = -8
- },
-/turf/closed/wall,
-/area/station/service/theater)
"sXq" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/siding/thinplating_new,
/turf/open/floor/iron/dark/herringbone,
/area/station/security/courtroom)
+"sXs" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/obj/effect/landmark/event_spawn,
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"sXw" = (
/obj/machinery/telecomms/receiver/preset_left,
/turf/open/floor/circuit,
@@ -55187,6 +57278,19 @@
},
/turf/open/floor/iron/white,
/area/station/science/cytology)
+"sXD" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/structure/cable,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
+"sXE" = (
+/mob/living/basic/bot/firebot,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/holopad,
+/turf/open/floor/iron/smooth_large,
+/area/station/engineering/storage_shared)
"sXG" = (
/obj/machinery/atmospherics/pipe/smart/simple/general/visible{
dir = 4
@@ -55255,6 +57359,23 @@
/obj/machinery/camera/autoname/directional/north,
/turf/open/floor/iron/cafeteria,
/area/station/hallway/secondary/exit/departure_lounge)
+"sYp" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/aft)
"sYs" = (
/obj/structure/closet/firecloset,
/obj/effect/turf_decal/tile/red/opposingcorners{
@@ -55285,37 +57406,18 @@
/obj/machinery/camera/autoname/directional/north,
/turf/open/floor/iron/white/small,
/area/station/medical/cryo)
-"sYF" = (
-/obj/effect/turf_decal/siding/wood/corner{
+"sZo" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
},
-/turf/open/floor/grass,
-/area/station/service/chapel)
-"sYK" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 5
- },
-/obj/structure/flora/bush/sunny/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
-"sZj" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
+/obj/effect/turf_decal/siding/thinplating_new/light{
dir = 10
},
-/obj/machinery/duct,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
-"sZn" = (
-/obj/structure/table,
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/item/toy/windup_toolbox,
-/obj/machinery/light/small/directional/north,
-/obj/structure/sign/poster/official/random/directional/north,
-/turf/open/floor/plating,
-/area/station/service/theater)
+/obj/structure/extinguisher_cabinet/directional/west,
+/obj/machinery/light/small/directional/south,
+/obj/effect/landmark/start/botanist,
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"sZx" = (
/obj/structure/cable,
/obj/structure/disposalpipe/trunk{
@@ -55349,16 +57451,6 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/station/science/robotics/lab)
-"sZQ" = (
-/obj/structure/disposalpipe/trunk{
- dir = 8
- },
-/obj/effect/turf_decal/tile/brown/full,
-/obj/machinery/disposal/bin,
-/obj/effect/turf_decal/bot,
-/obj/machinery/airalarm/directional/east,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"tab" = (
/obj/structure/rack,
/obj/item/restraints/handcuffs,
@@ -55394,15 +57486,6 @@
/obj/structure/cable,
/turf/open/floor/iron/smooth,
/area/station/engineering/break_room)
-"tax" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/structure/chair/stool/bar/directional/west,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"taB" = (
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
@@ -55468,12 +57551,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/catwalk_floor/iron,
/area/station/science/explab)
-"tbq" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
-/turf/open/floor/wood,
-/area/station/hallway/secondary/service)
"tbr" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/mapping_helpers/airlock/abandoned,
@@ -55544,18 +57621,13 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
-"tcB" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/hydroponics/glass{
- name = "Service Breakroom"
- },
-/obj/effect/mapping_helpers/airlock/access/any/service/general,
-/obj/machinery/duct,
-/turf/open/floor/iron/textured_half{
- dir = 8
+"tcA" = (
+/obj/structure/filingcabinet/chestdrawer,
+/obj/item/stock_parts/power_store/cell/emproof{
+ pixel_y = 9
},
-/area/station/hallway/secondary/service)
+/turf/open/floor/iron/grimy,
+/area/station/engineering/main)
"tcC" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -55564,24 +57636,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/dark,
/area/station/security/processing)
-"tcP" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/duct,
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral/half/contrasted{
- dir = 4
- },
-/turf/open/floor/iron/dark/corner{
- dir = 1
- },
-/area/station/hallway/primary/central/fore)
"tcZ" = (
/obj/effect/turf_decal/siding/red{
dir = 6
@@ -55593,11 +57647,6 @@
},
/turf/open/floor/engine/n2,
/area/station/engineering/atmos/space_catwalk)
-"tdg" = (
-/obj/effect/turf_decal/siding/wood,
-/obj/structure/flora/bush/flowers_br/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"tdh" = (
/obj/structure/chair/sofa/corp/right{
dir = 4
@@ -55694,6 +57743,18 @@
/obj/structure/steam_vent,
/turf/open/floor/plating,
/area/station/maintenance/starboard/central)
+"tes" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/obj/machinery/light/floor,
+/turf/open/floor/stone,
+/area/station/service/bar)
+"tev" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/structure/flora/bush/flowers_pp/style_random,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"tey" = (
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/obj/machinery/computer/records/security{
@@ -55734,14 +57795,6 @@
dir = 1
},
/area/station/hallway/secondary/entry)
-"tfa" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
-/turf/open/floor/iron/freezer,
-/area/station/service/kitchen/coldroom)
"tfc" = (
/obj/structure/reagent_dispensers/beerkeg,
/obj/effect/decal/cleanable/dirt,
@@ -55786,6 +57839,14 @@
/obj/item/clipboard,
/turf/open/floor/iron/white/small,
/area/station/science/server)
+"tfM" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"tfX" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/tile/brown{
@@ -55821,6 +57882,14 @@
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/wood/tile,
/area/station/command/heads_quarters/hop)
+"tgx" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/extinguisher_cabinet/directional/south,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"tgD" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -55836,24 +57905,6 @@
},
/turf/open/floor/iron/small,
/area/station/medical/cryo)
-"tgR" = (
-/obj/structure/disposalpipe/junction/flip{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/fore)
-"tgS" = (
-/obj/structure/table,
-/obj/item/trash/cheesie{
- pixel_x = 7;
- pixel_y = 8
- },
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
"thb" = (
/obj/structure/chair/stool/directional/south,
/obj/effect/turf_decal/siding/yellow{
@@ -55871,16 +57922,6 @@
dir = 1
},
/area/station/science/research)
-"thv" = (
-/obj/machinery/seed_extractor,
-/obj/effect/turf_decal/delivery,
-/obj/machinery/door/window/right/directional/south{
- name = "Seed Extractor";
- req_access = list("hydroponics")
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_large,
-/area/station/service/hydroponics)
"thx" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
@@ -56009,11 +58050,6 @@
/obj/effect/mapping_helpers/airlock/access/all/medical/general,
/turf/open/floor/iron/white/small,
/area/station/medical/medbay/central)
-"tjb" = (
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"tjd" = (
/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden,
/obj/machinery/door/poddoor/preopen{
@@ -56034,6 +58070,17 @@
"tjj" = (
/turf/closed/wall/r_wall,
/area/station/ai_monitored/turret_protected/ai_upload)
+"tjs" = (
+/obj/machinery/airalarm/directional/west,
+/obj/effect/spawner/random/entertainment/arcade{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 8
+ },
+/obj/machinery/light/small/dim/directional/west,
+/turf/open/floor/eighties/red,
+/area/station/hallway/primary/central/fore)
"tjH" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -56042,6 +58089,21 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/small,
/area/station/engineering/supermatter/room)
+"tjT" = (
+/obj/structure/sink/kitchen/directional/south,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/machinery/camera/autoname/directional/north,
+/obj/machinery/light/floor,
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"tjY" = (
/obj/machinery/atmospherics/components/binary/pump/on{
dir = 4;
@@ -56051,15 +58113,16 @@
/obj/item/kirbyplants/random,
/turf/open/floor/iron,
/area/station/maintenance/port/fore)
-"tkp" = (
-/obj/machinery/door/airlock/public/glass{
- name = "Services Corridor"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_half{
- dir = 8
+"tkm" = (
+/obj/structure/window/spawner/directional/west,
+/obj/structure/flora/bush/large/style_random{
+ pixel_x = -17;
+ pixel_y = 2
},
-/area/station/hallway/primary/central/aft)
+/obj/structure/flora/bush/flowers_yw/style_random,
+/obj/structure/window/spawner/directional/east,
+/turf/open/floor/grass,
+/area/station/service/hydroponics)
"tkq" = (
/obj/structure/barricade/wooden/crude,
/turf/open/floor/plating,
@@ -56113,16 +58176,23 @@
},
/turf/open/misc/sandy_dirt,
/area/station/security/tram)
+"tlJ" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/item/kirbyplants/random,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/power/apc/auto_name/directional/east,
+/turf/open/floor/iron,
+/area/station/holodeck/rec_center)
"tlX" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/blue/fourcorners,
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
-"tmc" = (
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/obj/machinery/camera/autoname/directional/north,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
+"tmi" = (
+/obj/structure/flora/bush/flowers_br/style_3,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"tmk" = (
/obj/machinery/power/emitter,
/obj/effect/turf_decal/stripes/line{
@@ -56134,6 +58204,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/hallway/secondary/exit/departure_lounge)
+"tmD" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 4
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"tmL" = (
/obj/structure/lattice,
/obj/structure/transit_tube/curved/flipped{
@@ -56169,14 +58248,13 @@
},
/turf/open/floor/iron/small,
/area/station/maintenance/port/lesser)
-"tmV" = (
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"tnb" = (
/turf/open/floor/plating,
/area/station/maintenance/central/lesser)
+"tnj" = (
+/obj/machinery/door/firedoor,
+/turf/open/floor/iron/textured_half,
+/area/station/service/bar)
"tns" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/effect/decal/cleanable/dirt,
@@ -56235,6 +58313,14 @@
/obj/effect/landmark/start/atmospheric_technician,
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
+"tnZ" = (
+/obj/structure/bookcase/random,
+/obj/structure/sign/poster/official/random/directional/west,
+/obj/structure/sign/painting/library{
+ pixel_y = 32
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"tof" = (
/turf/closed/wall/rust,
/area/station/ai_monitored/turret_protected/ai)
@@ -56338,13 +58424,6 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
-"toY" = (
-/obj/effect/turf_decal/siding/wideplating/dark{
- dir = 1
- },
-/obj/effect/turf_decal/tile/dark_red/half/contrasted,
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"tpk" = (
/obj/machinery/vending/wardrobe/law_wardrobe,
/obj/effect/turf_decal/siding/wood{
@@ -56399,6 +58478,15 @@
},
/turf/open/floor/wood,
/area/station/commons/fitness/recreation)
+"tpQ" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"tqh" = (
/obj/effect/turf_decal/trimline/white/line{
dir = 8
@@ -56413,11 +58501,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/port/lesser)
-"tqq" = (
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"tqs" = (
/obj/structure/bodycontainer/morgue{
dir = 1
@@ -56425,11 +58508,6 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron/dark/small,
/area/station/medical/morgue)
-"tqz" = (
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"tqD" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -56441,11 +58519,6 @@
/obj/structure/window/spawner/directional/north,
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
-"tqK" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"tqV" = (
/obj/effect/turf_decal/stripes/red/line{
dir = 5
@@ -56471,22 +58544,6 @@
dir = 1
},
/area/station/hallway/secondary/dock)
-"trc" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/structure/chair/sofa/bench/left{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
-"trl" = (
-/obj/effect/spawner/random/structure/tank_holder,
-/obj/machinery/light_switch/directional/east,
-/turf/open/floor/iron/smooth,
-/area/station/cargo/drone_bay)
"tro" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron/smooth,
@@ -56513,6 +58570,9 @@
/obj/machinery/firealarm/directional/east,
/turf/open/floor/iron/dark/small,
/area/station/engineering/supermatter/room)
+"trB" = (
+/turf/open/floor/glass,
+/area/station/hallway/primary/central/aft)
"trI" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -56555,13 +58615,33 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden,
/turf/open/floor/iron/grimy,
/area/station/tcommsat/server)
+"tsB" = (
+/obj/effect/turf_decal/tile/brown/opposingcorners{
+ dir = 1
+ },
+/obj/machinery/holopad,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"tsF" = (
/turf/closed/wall/r_wall,
/area/station/hallway/primary/central/fore)
+"tsO" = (
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"tsR" = (
/obj/machinery/electrolyzer,
/turf/open/floor/catwalk_floor,
/area/station/maintenance/disposal/incinerator)
+"ttb" = (
+/obj/structure/flora/grass/jungle/b/style_random,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"ttg" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -56569,16 +58649,16 @@
},
/turf/open/space/basic,
/area/station/engineering/atmos/space_catwalk)
-"ttA" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 8
+"tts" = (
+/obj/machinery/light/floor,
+/obj/structure/altar_of_gods,
+/obj/item/book/bible,
+/obj/effect/landmark/start/hangover,
+/obj/item/flashlight/lantern{
+ pixel_y = 5
},
-/turf/open/floor/iron/grimy,
-/area/station/service/theater)
-"ttC" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
+/turf/open/floor/wood/tile,
+/area/station/service/chapel)
"ttD" = (
/obj/effect/turf_decal/stripes/red/line{
dir = 9
@@ -56693,13 +58773,16 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/port/lesser)
-"twf" = (
-/obj/structure/disposalpipe/trunk,
-/obj/machinery/disposal/bin,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
+"twe" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/status_display/evac/directional/west,
+/obj/structure/disposalpipe/segment,
+/obj/effect/landmark/start/hangover,
/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
+/area/station/hallway/primary/central/fore)
"twg" = (
/obj/structure/railing{
dir = 5
@@ -56713,16 +58796,12 @@
/obj/structure/steam_vent,
/turf/open/floor/plating,
/area/station/maintenance/starboard/central)
-"twj" = (
-/obj/machinery/vending/coffee,
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
-"twl" = (
-/obj/effect/spawner/structure/window,
-/turf/open/floor/plating,
-/area/station/hallway/primary/starboard)
+"twm" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/station/maintenance/port/greater)
"two" = (
/obj/structure/table/reinforced,
/obj/structure/desk_bell{
@@ -56776,26 +58855,19 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron/grimy,
/area/station/command/heads_quarters/ce)
+"twN" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"twQ" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 9
},
/turf/open/floor/tram,
/area/station/maintenance/department/medical/central)
-"twR" = (
-/obj/structure/table/glass,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell,
-/obj/machinery/status_display/evac/directional/north,
-/obj/structure/sign/directions/supply/directional/west,
-/obj/structure/sign/directions/engineering/directional/west{
- pixel_y = 8
- },
-/obj/structure/sign/directions/command/directional/west{
- pixel_y = -8
- },
-/turf/open/floor/iron/white,
-/area/station/hallway/primary/starboard)
"twZ" = (
/obj/structure/chair/sofa/bench/right,
/obj/machinery/newscaster/directional/north,
@@ -56849,6 +58921,12 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron/showroomfloor,
/area/station/commons/toilet/auxiliary)
+"txW" = (
+/obj/structure/window/reinforced/spawner/directional/north,
+/obj/structure/window/reinforced/spawner/directional/south,
+/obj/structure/grille,
+/turf/open/floor/plating,
+/area/station/hallway/primary/central/fore)
"tyh" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -56895,6 +58973,12 @@
},
/turf/open/floor/iron/dark/small,
/area/station/engineering/supermatter/room)
+"tyz" = (
+/obj/effect/turf_decal/siding/wood/corner,
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/stone,
+/area/station/service/bar)
"tyA" = (
/obj/machinery/vending/modularpc,
/obj/structure/sign/departments/science/alt/directional/east,
@@ -56979,8 +59063,12 @@
},
/turf/open/floor/iron/dark,
/area/station/science/genetics)
-"tzJ" = (
-/obj/structure/flora/bush/flowers_yw/style_random,
+"tzN" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/obj/structure/flora/bush/flowers_yw/style_2,
+/obj/structure/flora/bush/large/style_random,
/turf/open/floor/grass,
/area/station/service/chapel)
"tzZ" = (
@@ -57053,6 +59141,19 @@
/obj/effect/spawner/random/engineering/flashlight,
/turf/open/floor/catwalk_floor/iron,
/area/station/maintenance/department/medical/central)
+"tAF" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/door/airlock/public/glass{
+ name = "Chapel Office"
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/textured_half,
+/area/station/service/chapel/office)
"tAH" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/trimline/blue/filled/line{
@@ -57083,6 +59184,12 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/iron/grimy,
/area/station/tcommsat/server)
+"tBk" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"tBm" = (
/obj/machinery/hydroponics/soil,
/turf/open/floor/grass,
@@ -57131,13 +59238,6 @@
/obj/effect/landmark/start/security_officer,
/turf/open/floor/iron/small,
/area/station/security/office)
-"tCk" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 5
- },
-/obj/machinery/light/directional/east,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"tCm" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/tile/red{
@@ -57231,23 +59331,17 @@
dir = 1
},
/area/station/hallway/secondary/exit/departure_lounge)
-"tDJ" = (
-/obj/structure/disposalpipe/segment,
+"tDM" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/tile/neutral{
- dir = 4
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 10
},
/turf/open/floor/iron,
-/area/station/hallway/primary/port)
-"tDP" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
-/turf/open/floor/iron/kitchen/small,
-/area/station/hallway/secondary/service)
-"tDT" = (
-/turf/open/floor/iron/kitchen/small,
-/area/station/hallway/secondary/service)
+/area/station/hallway/primary/central/fore)
"tEg" = (
/obj/structure/transport/linear/tram,
/obj/effect/turf_decal/stripes/white/line{
@@ -57275,10 +59369,6 @@
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron,
/area/station/security/tram)
-"tEI" = (
-/mob/living/simple_animal/hostile/retaliate/goose/vomit,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
"tEL" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -57288,37 +59378,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
-"tET" = (
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
-"tEU" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/machinery/light/small/directional/east,
-/turf/open/floor/grass,
-/area/station/service/chapel)
-"tEW" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
-"tFg" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/wood/tile,
-/area/station/commons/vacant_room/commissary)
"tFs" = (
/obj/structure/table/glass,
/obj/item/storage/medkit/regular{
@@ -57338,19 +59397,6 @@
/obj/machinery/portable_atmospherics/canister,
/turf/open/floor/iron,
/area/station/engineering/atmos)
-"tFG" = (
-/obj/effect/turf_decal/tile/brown/full,
-/obj/machinery/door/window/right/directional/west{
- name = "Bar Access";
- req_access = list("bar")
- },
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/machinery/light/small/directional/north,
-/obj/machinery/light_switch/directional/north,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"tFH" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -57373,17 +59419,6 @@
/obj/machinery/chem_master,
/turf/open/floor/iron,
/area/station/medical/chemistry)
-"tFY" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"tGp" = (
/obj/machinery/light/small/directional/south,
/turf/open/floor/engine,
@@ -57438,18 +59473,6 @@
},
/turf/open/floor/iron/smooth_large,
/area/station/engineering/storage_shared)
-"tHh" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock{
- name = "Kitchen Cold Room"
- },
-/obj/effect/mapping_helpers/airlock/access/all/service/kitchen,
-/obj/machinery/duct,
-/turf/open/floor/catwalk_floor/flat_white,
-/area/station/service/kitchen/coldroom)
"tHi" = (
/obj/effect/decal/cleanable/dirt,
/mob/living/carbon/human/species/monkey/punpun,
@@ -57486,17 +59509,6 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron,
/area/station/security/brig/entrance)
-"tIc" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"tIz" = (
/obj/structure/chair/wood{
dir = 8
@@ -57504,16 +59516,6 @@
/obj/effect/landmark/blobstart,
/turf/open/floor/wood,
/area/station/service/chapel/funeral)
-"tIA" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/airalarm/directional/south,
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"tIB" = (
/obj/item/clothing/head/cone{
pixel_x = 16;
@@ -57526,19 +59528,6 @@
/obj/effect/landmark/blobstart,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
-"tII" = (
-/obj/effect/spawner/random/structure/closet_maintenance,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
-"tIL" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"tIN" = (
/obj/structure/table/reinforced,
/obj/item/folder/yellow{
@@ -57593,16 +59582,6 @@
},
/turf/open/floor/plating,
/area/station/security/brig/entrance)
-"tJD" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/light/small/directional/south,
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"tJF" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/rack,
@@ -57610,25 +59589,11 @@
pixel_x = -2;
pixel_y = -3
},
-/obj/item/clothing/mask/cigarette/cigar,
+/obj/item/cigarette/cigar,
/obj/effect/mapping_helpers/broken_floor,
/obj/machinery/light_switch/directional/south,
/turf/open/floor/iron/smooth,
/area/station/command/bridge)
-"tJG" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/delivery,
-/obj/machinery/door/poddoor/shutters/preopen{
- dir = 4;
- id = "kihall"
- },
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"tJX" = (
/turf/open/floor/plating,
/area/station/maintenance/aft)
@@ -57644,25 +59609,12 @@
/obj/structure/closet/emcloset,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
-"tKm" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/item/radio/intercom/directional/south,
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
-"tKC" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
+"tKl" = (
+/obj/effect/landmark/start/assistant,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/firealarm/directional/south,
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
+/turf/open/floor/iron,
/area/station/hallway/primary/central/aft)
"tKG" = (
/obj/effect/turf_decal/stripes/line,
@@ -57727,29 +59679,6 @@
dir = 1
},
/area/station/command/bridge)
-"tMi" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/public/glass{
- name = "Services Corridor"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_half{
- dir = 8
- },
-/area/station/hallway/primary/central/aft)
-"tMj" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"tMm" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -57768,17 +59697,6 @@
},
/turf/open/floor/circuit,
/area/station/tcommsat/server)
-"tMy" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"tMJ" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -57786,17 +59704,6 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
-"tMR" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"tMS" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -57807,9 +59714,17 @@
/obj/machinery/light/cold/directional/east,
/turf/open/floor/iron,
/area/station/security/execution/transfer)
-"tNc" = (
-/turf/open/floor/wood/parquet,
-/area/station/service/theater)
+"tNf" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"tNn" = (
/obj/structure/cable,
/obj/machinery/door/airlock{
@@ -57895,21 +59810,6 @@
/obj/effect/turf_decal/tile/neutral/half/contrasted,
/turf/open/floor/iron/dark/side,
/area/station/science/xenobiology)
-"tNS" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/rack,
-/obj/machinery/door/poddoor/shutters{
- dir = 4;
- id = "vaco";
- name = "Comissary Shutters"
- },
-/turf/open/floor/plating,
-/area/station/commons/vacant_room/commissary)
"tNT" = (
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/iron/kitchen/small,
@@ -57931,6 +59831,10 @@
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
/area/station/maintenance/department/electrical)
+"tOd" = (
+/obj/structure/flora/bush/jungle/a/style_3,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"tOg" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -57962,6 +59866,11 @@
},
/turf/open/floor/iron,
/area/station/commons/storage/tools)
+"tOK" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/griddle,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"tOO" = (
/obj/structure/flora/bush/large/style_random{
pixel_x = -20;
@@ -57970,14 +59879,6 @@
/obj/machinery/light/small/directional/west,
/turf/open/misc/sandy_dirt,
/area/station/service/lawoffice)
-"tOS" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
-/turf/open/floor/stone,
-/area/station/service/bar/backroom)
"tOZ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/light/cold/directional/north,
@@ -57998,14 +59899,6 @@
},
/turf/open/floor/wood,
/area/station/cargo/miningfoundry)
-"tPd" = (
-/obj/structure/chair/sofa/left/maroon{
- dir = 1
- },
-/obj/effect/landmark/start/hangover,
-/obj/machinery/light/cold/directional/south,
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
"tPf" = (
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron/dark,
@@ -58034,6 +59927,16 @@
/obj/machinery/airalarm/directional/south,
/turf/open/floor/wood,
/area/station/commons/fitness/recreation)
+"tPM" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"tPP" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -58044,6 +59947,27 @@
/obj/machinery/status_display/evac/directional/south,
/turf/open/floor/iron,
/area/station/commons/fitness/locker_room)
+"tPX" = (
+/obj/structure/table/wood,
+/obj/item/paper_bin{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/obj/item/pen{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/obj/machinery/light/small/directional/north,
+/obj/structure/sign/painting/library{
+ pixel_y = 32
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"tPZ" = (
/obj/machinery/netpod,
/obj/machinery/power/apc/auto_name/directional/north,
@@ -58075,6 +59999,14 @@
},
/turf/open/floor/iron/white,
/area/station/medical/virology)
+"tQC" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/seed_extractor,
+/obj/machinery/door/window/right/directional/east,
+/turf/open/floor/iron/textured_half{
+ dir = 8
+ },
+/area/station/service/hydroponics)
"tQQ" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -58135,20 +60067,14 @@
/obj/effect/turf_decal/tile/dark_red/fourcorners,
/turf/open/floor/iron,
/area/station/security/tram)
+"tRJ" = (
+/obj/effect/turf_decal/siding/thinplating_new/light,
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"tRR" = (
/obj/structure/chair/stool/directional/east,
/turf/open/floor/iron/smooth,
/area/station/maintenance/department/medical/central)
-"tSe" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"tSg" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible,
/obj/machinery/light_switch/directional/east,
@@ -58158,10 +60084,6 @@
},
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
-"tSh" = (
-/obj/item/kirbyplants/random,
-/turf/open/floor/wood,
-/area/station/hallway/secondary/service)
"tSi" = (
/obj/machinery/light/cold/directional/west,
/obj/machinery/disposal/bin,
@@ -58197,6 +60119,14 @@
/obj/machinery/light/small/broken/directional/west,
/turf/open/floor/eighties,
/area/station/service/abandoned_gambling_den/gaming)
+"tSA" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/sign/departments/cargo/directional/west,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"tSB" = (
/obj/structure/cable,
/obj/structure/table/reinforced,
@@ -58271,15 +60201,6 @@
/obj/machinery/light/very_dim/directional/east,
/turf/open/floor/iron/grimy,
/area/station/commons/vacant_room/office)
-"tTG" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/structure/flora/bush/flowers_pp/style_random,
-/obj/machinery/firealarm/directional/east,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"tTK" = (
/obj/effect/turf_decal/stripes/corner{
dir = 8
@@ -58346,6 +60267,12 @@
/obj/machinery/light/small/directional/north,
/turf/open/floor/iron/dark/smooth_large,
/area/station/command/meeting_room)
+"tUj" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"tUo" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -58367,12 +60294,6 @@
/obj/machinery/disposal/bin,
/turf/open/floor/iron/dark,
/area/station/medical/pharmacy)
-"tUD" = (
-/obj/machinery/transport/tram_controller/tcomms{
- configured_transport_id = "bird_1"
- },
-/turf/open/floor/circuit,
-/area/station/tcommsat/server)
"tUH" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
@@ -58387,26 +60308,6 @@
},
/turf/open/floor/circuit,
/area/station/tcommsat/server)
-"tUK" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/obj/item/storage/box{
- pixel_x = -8;
- pixel_y = 15
- },
-/obj/item/trash/flare{
- pixel_x = 11;
- pixel_y = 21
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/turf/open/floor/iron/dark/corner{
- dir = 4
- },
-/area/station/hallway/primary/central/fore)
"tUZ" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -58425,6 +60326,12 @@
"tVe" = (
/turf/open/floor/carpet/red,
/area/station/command/heads_quarters/hos)
+"tVp" = (
+/obj/effect/turf_decal/siding/wood/corner,
+/obj/machinery/holopad,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/stone,
+/area/station/service/bar)
"tVt" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/effect/turf_decal/stripes/corner{
@@ -58450,6 +60357,11 @@
},
/turf/open/floor/iron,
/area/station/cargo/storage)
+"tWm" = (
+/obj/structure/flora/bush/jungle/c/style_3,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"tWo" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -58478,19 +60390,6 @@
/obj/effect/spawner/random/engineering/tracking_beacon,
/turf/open/floor/iron,
/area/station/hallway/secondary/exit/departure_lounge)
-"tWE" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/dark_red/fourcorners,
-/obj/effect/turf_decal/siding/wideplating/dark{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"tWG" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -58499,15 +60398,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron/cafeteria,
/area/station/science/breakroom)
-"tWL" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/turf/open/floor/iron/dark/side{
- dir = 1
- },
-/area/station/hallway/primary/central/fore)
"tWQ" = (
/obj/machinery/door/airlock/public/glass{
name = "Departure Lounge"
@@ -58521,6 +60411,13 @@
/obj/structure/table/bronze,
/turf/open/floor/wood/tile,
/area/station/maintenance/port/lesser)
+"tXy" = (
+/obj/structure/flora/tree/jungle/small/style_3,
+/obj/effect/turf_decal/weather/dirt,
+/obj/machinery/light/small/directional/south,
+/obj/machinery/status_display/ai/directional/south,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"tXG" = (
/obj/structure/chair{
dir = 8
@@ -58552,39 +60449,6 @@
/obj/item/clothing/suit/hooded/wintercoat/engineering,
/turf/open/floor/catwalk_floor,
/area/station/engineering/supermatter/room)
-"tXT" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
-"tYb" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/obj/effect/landmark/event_spawn,
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
-"tYd" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 1
- },
-/obj/machinery/navbeacon{
- codes_txt = "patrol;next_patrol=2.0-Vault-SNexus";
- location = "1.5-PNexus-Vault"
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"tYj" = (
/obj/item/exodrone,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
@@ -58619,11 +60483,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/small,
/area/station/engineering/atmos/storage/gas)
-"tYH" = (
-/obj/machinery/airalarm/directional/east,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"tYL" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
@@ -58641,19 +60500,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
-"tYQ" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/turf/open/floor/iron/dark/side{
- dir = 1
- },
-/area/station/hallway/primary/central/fore)
"tYT" = (
/turf/open/misc/asteroid/airless,
/area/space/nearstation)
@@ -58661,21 +60507,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/hallway/primary/central/aft)
-"tZd" = (
-/obj/structure/cable,
-/obj/machinery/door/airlock{
- name = "Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
-/obj/effect/mapping_helpers/airlock/unres{
- dir = 4
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/plating,
-/area/station/maintenance/central/lesser)
"tZi" = (
/obj/structure/sign/poster/contraband/got_wood/directional/north,
/turf/open/floor/light/colour_cycle/dancefloor_b,
@@ -58717,15 +60548,6 @@
},
/turf/open/floor/wood,
/area/station/maintenance/starboard/greater)
-"tZG" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable,
-/obj/machinery/navbeacon{
- codes_txt = "patrol;next_patrol=3.0-StarboardHall-TechStorage";
- location = "2.5-SNexus-StarboardHall"
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"tZI" = (
/obj/machinery/power/apc/auto_name/directional/east,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -58748,35 +60570,6 @@
/obj/machinery/light/cold/dim/directional/east,
/turf/open/floor/iron,
/area/station/engineering/main)
-"tZR" = (
-/obj/effect/turf_decal/tile/neutral/full,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 1
- },
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
-"tZU" = (
-/obj/effect/turf_decal/siding/wideplating_new/terracotta{
- dir = 1
- },
-/turf/open/floor/wood/tile,
-/area/station/commons/vacant_room/commissary)
-"tZV" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 1
- },
-/obj/effect/turf_decal/trimline/neutral/end{
- dir = 8
- },
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
-"uaa" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 6
- },
-/turf/open/floor/grass,
-/area/station/service/chapel)
"uab" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -58797,13 +60590,6 @@
},
/turf/open/floor/plating,
/area/station/engineering/atmospherics_engine)
-"uao" = (
-/obj/effect/turf_decal/siding/wood/corner{
- dir = 8
- },
-/obj/structure/flora/tree/stump,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"uax" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -58813,13 +60599,6 @@
},
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/customs)
-"uaE" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/structure/flora/tree/jungle/small/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"uaF" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -58880,15 +60659,6 @@
/obj/machinery/light_switch/directional/north,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/lobby)
-"ubf" = (
-/obj/effect/landmark/start/assistant,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"ubh" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -58920,11 +60690,6 @@
"uby" = (
/turf/closed/wall,
/area/station/security/prison/garden)
-"ubB" = (
-/obj/structure/flora/bush/flowers_pp/style_random,
-/obj/structure/sign/poster/random/directional/north,
-/turf/open/floor/grass,
-/area/station/service/hydroponics)
"ubK" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -58964,23 +60729,6 @@
},
/turf/open/floor/engine,
/area/station/science/explab)
-"ucr" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/landmark/event_spawn,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
-"ucw" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
"ucy" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/siding/red{
@@ -58995,19 +60743,6 @@
/obj/structure/chair/wood,
/turf/open/floor/iron/small,
/area/station/service/barber)
-"ucH" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"ucJ" = (
/obj/machinery/door/window/left/directional/south{
req_access = list("chapel_office")
@@ -59025,13 +60760,6 @@
},
/turf/open/floor/iron/showroomfloor,
/area/station/security/prison/shower)
-"ucV" = (
-/obj/structure/chair/wood{
- dir = 4
- },
-/obj/machinery/light/cold/directional/south,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
"ucY" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -59052,12 +60780,16 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
-"udt" = (
-/obj/structure/cable,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/spawner/random/trash,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
+"udf" = (
+/obj/effect/turf_decal/delivery/white{
+ color = "#52B4E9"
+ },
+/obj/structure/reagent_dispensers/watertank/high,
+/obj/effect/turf_decal/siding/thinplating/light/end{
+ dir = 8
+ },
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"udv" = (
/obj/machinery/telecomms/receiver/preset_right,
/turf/open/floor/circuit,
@@ -59122,9 +60854,6 @@
/obj/machinery/airalarm/directional/south,
/turf/open/floor/iron,
/area/station/engineering/atmos/space_catwalk)
-"uej" = (
-/turf/closed/wall,
-/area/station/hallway/secondary/service)
"uek" = (
/obj/effect/turf_decal/siding/wideplating/dark{
dir = 8
@@ -59238,6 +60967,18 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/catwalk_floor,
/area/station/engineering/supermatter/room)
+"ugb" = (
+/obj/machinery/door/airlock/security/glass{
+ id_tag = "outerbrig";
+ name = "Brig"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/security/entrance,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "sci-entrance"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/textured_half,
+/area/station/security/brig/entrance)
"uge" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -59307,6 +61048,10 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/station/security/courtroom)
+"ugI" = (
+/obj/structure/flora/tree/jungle/style_3,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"ugJ" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -59392,6 +61137,12 @@
/obj/effect/spawner/random/engineering/tracking_beacon,
/turf/open/floor/iron/smooth,
/area/station/command/gateway)
+"uhM" = (
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/turf/open/floor/iron/white,
+/area/station/hallway/primary/central/aft)
"uhT" = (
/turf/open/floor/iron,
/area/station/maintenance/aft)
@@ -59434,12 +61185,12 @@
},
/turf/open/floor/plating,
/area/station/construction/mining/aux_base)
-"uio" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 5
+"uiw" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/open/floor/iron/grimy,
-/area/station/service/theater)
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"uiz" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -59462,14 +61213,6 @@
dir = 1
},
/area/station/science/research)
-"uiW" = (
-/obj/structure/cable,
-/obj/machinery/door/airlock{
- name = "Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
-/turf/open/floor/plating,
-/area/station/maintenance/central/lesser)
"uiY" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -59496,6 +61239,17 @@
"ujA" = (
/turf/closed/wall/r_wall,
/area/station/security/warden)
+"ujB" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/status_display/evac/directional/north,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"ujE" = (
/obj/item/kirbyplants/random/fullysynthetic,
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
@@ -59624,6 +61378,16 @@
/obj/machinery/light_switch/directional/north,
/turf/open/floor/iron/dark/smooth_large,
/area/station/command/meeting_room)
+"ulE" = (
+/obj/effect/spawner/random/trash,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"ulK" = (
/obj/structure/cable,
/obj/machinery/ntnet_relay,
@@ -59686,11 +61450,6 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/port/aft)
-"umM" = (
-/obj/structure/cable,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/lesser)
"unc" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -59706,15 +61465,6 @@
},
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/customs/auxiliary)
-"uny" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/duct,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/firealarm/directional/west,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"unG" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 4
@@ -59726,15 +61476,6 @@
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
/area/station/maintenance/fore/greater)
-"unM" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/public/glass{
- name = "Departure Lounge"
- },
-/turf/open/floor/iron/textured_half{
- dir = 1
- },
-/area/station/hallway/secondary/exit/departure_lounge)
"unT" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -59771,24 +61512,12 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron,
/area/station/maintenance/hallway/abandoned_command)
-"uoM" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/airalarm/directional/south,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
-"uoW" = (
-/obj/structure/disposalpipe/segment{
- dir = 9
+"uoR" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
},
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/airalarm/directional/south,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
+/turf/open/floor/grass,
+/area/station/service/chapel)
"upe" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -59815,20 +61544,6 @@
},
/turf/open/floor/iron/small,
/area/station/hallway/primary/port)
-"upj" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/item/ammo_casing/spent{
- pixel_x = 5;
- pixel_y = 6
- },
-/obj/item/ammo_casing/spent,
-/obj/item/ammo_casing/spent{
- pixel_x = 4;
- pixel_y = -2
- },
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"upr" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -59897,6 +61612,10 @@
/obj/machinery/light/small/directional/north,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
+"uqq" = (
+/obj/structure/table,
+/turf/open/floor/iron/dark/small,
+/area/station/maintenance/central/lesser)
"uqw" = (
/turf/closed/wall/r_wall,
/area/station/commons/fitness/recreation)
@@ -59922,6 +61641,13 @@
},
/turf/open/floor/iron,
/area/station/cargo/sorting)
+"uqF" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/extinguisher_cabinet/directional/east,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"uqG" = (
/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible{
dir = 4
@@ -59973,6 +61699,19 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/cafeteria,
/area/station/science/breakroom)
+"urf" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/plaque{
+ icon_state = "L2";
+ pixel_y = -15
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"urg" = (
/obj/machinery/door/airlock/engineering{
name = "Engineering Office"
@@ -59993,11 +61732,6 @@
dir = 8
},
/area/station/engineering/main)
-"urh" = (
-/obj/structure/closet/firecloset,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"urk" = (
/obj/structure/disposalpipe/junction{
dir = 1
@@ -60034,6 +61768,14 @@
/obj/effect/landmark/start/assistant,
/turf/open/floor/iron/grimy,
/area/station/hallway/secondary/entry)
+"urq" = (
+/obj/effect/turf_decal/tile/brown/opposingcorners{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"uru" = (
/obj/machinery/door/airlock/maintenance{
name = "Maintenance"
@@ -60068,6 +61810,15 @@
/obj/machinery/light/cold/dim/directional/west,
/turf/open/floor/iron/grimy,
/area/station/engineering/main)
+"urF" = (
+/obj/machinery/computer/cargo{
+ dir = 1
+ },
+/obj/machinery/computer/security/telescreen/vault/directional/south,
+/obj/machinery/camera/autoname/directional/south,
+/obj/machinery/light/small/directional/south,
+/turf/open/floor/wood,
+/area/station/command/heads_quarters/qm)
"urK" = (
/obj/machinery/light/warm/directional/south,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -60098,11 +61849,16 @@
/obj/structure/cable,
/turf/open/floor/iron/smooth,
/area/station/command/heads_quarters/qm)
-"usl" = (
-/obj/machinery/status_display/evac/directional/south,
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
+"usA" = (
+/obj/machinery/door/window/left/directional/south{
+ name = "Bio-Generator";
+ req_access = list("hydroponics")
+ },
+/obj/machinery/biogenerator,
+/obj/effect/turf_decal/delivery,
+/obj/machinery/door/firedoor,
+/turf/open/floor/plating,
+/area/station/service/hydroponics)
"usF" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/structure/easel,
@@ -60137,12 +61893,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
-"uth" = (
-/obj/effect/turf_decal/plaque{
- icon_state = "L2"
- },
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
"utm" = (
/turf/closed/wall/r_wall,
/area/station/science/auxlab/firing_range)
@@ -60158,14 +61908,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/engineering/atmos/space_catwalk)
-"uty" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/structure/flora/bush/flowers_yw/style_random,
-/obj/machinery/light/small/directional/east,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"utD" = (
/obj/machinery/light_switch/directional/west,
/obj/effect/turf_decal/stripes/corner{
@@ -60232,12 +61974,16 @@
/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron/dark/small,
/area/station/engineering/supermatter/room)
-"uuv" = (
-/obj/effect/turf_decal/plaque{
- icon_state = "L4"
+"uuz" = (
+/obj/structure/rack,
+/obj/effect/turf_decal/tile/brown/opposingcorners{
+ dir = 1
},
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
+/obj/item/clothing/mask/gas,
+/obj/machinery/airalarm/directional/west,
+/obj/machinery/camera/directional/west,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"uuN" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -60264,6 +62010,10 @@
},
/turf/open/floor/iron/white/small,
/area/station/medical/storage)
+"uvb" = (
+/obj/structure/dresser,
+/turf/open/floor/wood,
+/area/station/cargo/boutique)
"uvf" = (
/obj/structure/cable,
/obj/machinery/button/door/directional/south{
@@ -60273,20 +62023,6 @@
},
/turf/open/floor/iron/dark,
/area/station/security/office)
-"uvh" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/vault{
- name = "Vault"
- },
-/obj/effect/mapping_helpers/airlock/locked,
-/obj/effect/mapping_helpers/airlock/access/all/supply/vault,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 1
- },
-/turf/open/floor/catwalk_floor,
-/area/station/ai_monitored/command/nuke_storage)
"uvo" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 4;
@@ -60300,6 +62036,22 @@
},
/turf/open/floor/iron/small,
/area/station/engineering/atmos/pumproom)
+"uvs" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/turf/open/floor/eighties,
+/area/station/hallway/primary/central/fore)
+"uvx" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"uvz" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/carpet/lone,
@@ -60321,28 +62073,11 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/smooth,
/area/station/engineering/supermatter/room)
-"uwl" = (
-/obj/effect/turf_decal/plaque{
- icon_state = "L6"
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/navbeacon{
- codes_txt = "patrol;next_patrol=2.5-SNexus-StarboardHall";
- location = "2.0-Vault-SNexus"
- },
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
-"uwx" = (
-/obj/effect/turf_decal/plaque{
- icon_state = "L10"
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
+"uvG" = (
+/obj/effect/turf_decal/tile/neutral/opposingcorners,
+/obj/effect/spawner/random/entertainment/arcade,
/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
+/area/station/holodeck/rec_center)
"uwB" = (
/obj/effect/turf_decal/tile/dark_red/half/contrasted{
dir = 4
@@ -60359,16 +62094,6 @@
/obj/effect/landmark/transport/nav_beacon/tram/nav/immovable_rod,
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
-"uwU" = (
-/obj/structure/closet/secure_closet/hydroponics,
-/obj/effect/turf_decal/bot,
-/obj/structure/window/spawner/directional/east,
-/obj/effect/turf_decal/tile/green/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"uxd" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -60378,12 +62103,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/maintenance/port/fore)
-"uxi" = (
-/obj/effect/turf_decal/plaque{
- icon_state = "L12"
- },
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
"uxJ" = (
/obj/machinery/smartfridge/chemistry/preloaded,
/obj/machinery/door/firedoor,
@@ -60404,21 +62123,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/engineering/storage/tech)
-"uye" = (
-/obj/machinery/door/window/right/directional/south,
-/turf/open/floor/grass,
-/area/station/service/hydroponics)
-"uyg" = (
-/obj/effect/turf_decal/plaque{
- icon_state = "L14"
- },
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
-"uyp" = (
-/obj/structure/closet/emcloset,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"uyA" = (
/obj/structure/disposalpipe/segment,
/obj/effect/decal/cleanable/dirt,
@@ -60447,22 +62151,20 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos/pumproom)
-"uzd" = (
-/obj/structure/table,
-/obj/effect/turf_decal/bot,
-/obj/machinery/reagentgrinder{
- pixel_y = 5
+"uyV" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
},
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
dir = 1
},
-/obj/effect/turf_decal/tile/green{
- dir = 4
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 8
},
-/obj/structure/sign/poster/official/random/directional/north,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"uzj" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -60510,22 +62212,19 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
-"uAb" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/structure/sign/directions/vault/directional/south{
- dir = 8
- },
-/turf/open/floor/iron/white/corner,
-/area/station/hallway/primary/starboard)
"uAi" = (
/obj/structure/table/wood,
/turf/open/floor/carpet/lone,
/area/station/service/chapel/office)
+"uAk" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/sign/departments/holy/directional/south,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"uAo" = (
/obj/effect/turf_decal/trimline/neutral/line{
dir = 8
@@ -60535,26 +62234,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
-"uAw" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/white/side,
-/area/station/hallway/primary/starboard)
-"uAF" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/obj/effect/spawner/random/engineering/tracking_beacon,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
-"uAH" = (
-/obj/structure/bed/medical{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue/fourcorners,
-/obj/item/bedsheet/medical,
-/turf/open/floor/iron/white,
-/area/station/maintenance/central/greater)
"uAK" = (
/obj/machinery/computer/security,
/obj/effect/turf_decal/siding/red{
@@ -60569,18 +62248,6 @@
},
/turf/closed/wall/mineral/titanium/nodiagonal,
/area/station/engineering/supermatter)
-"uAV" = (
-/obj/structure/cable,
-/obj/machinery/duct,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/turf/open/floor/iron/kitchen/small,
-/area/station/hallway/secondary/service)
-"uAX" = (
-/obj/structure/chair/stool/bar/directional/east,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
"uAY" = (
/turf/open/floor/plating,
/area/station/maintenance/department/bridge)
@@ -60605,18 +62272,6 @@
},
/turf/open/floor/iron/dark,
/area/station/medical/medbay/aft)
-"uBn" = (
-/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/brown/full,
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/item/plate,
-/obj/item/food/cheesynachos{
- pixel_y = 2
- },
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"uBo" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -60642,6 +62297,20 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/stairs,
/area/station/engineering/storage/tech)
+"uBI" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/fore)
"uBM" = (
/obj/machinery/door/poddoor/preopen{
id = "Engineering";
@@ -60651,6 +62320,15 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/station/engineering/lobby)
+"uBN" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/siding/wood{
+ dir = 10
+ },
+/turf/open/floor/stone,
+/area/station/service/bar/backroom)
"uBQ" = (
/obj/structure/table/bronze,
/obj/machinery/microwave{
@@ -60692,29 +62370,28 @@
/obj/item/mop,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"uCh" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
+"uCo" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral/full,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
+/obj/structure/cable,
+/obj/structure/extinguisher_cabinet/directional/north,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"uCp" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/firealarm/directional/south,
/turf/open/floor/iron/white/side,
/area/station/hallway/primary/starboard)
-"uCv" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
+"uCB" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
},
-/obj/effect/spawner/xmastree,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
+/obj/structure/flora/bush/sparsegrass,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"uCE" = (
/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{
dir = 5
@@ -60731,16 +62408,6 @@
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/plating,
/area/station/engineering/atmos/storage/gas)
-"uCJ" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/structure/chair/pew/right{
- dir = 4
- },
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/wood,
-/area/station/service/theater)
"uCL" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -60751,11 +62418,6 @@
/obj/structure/cable,
/turf/open/floor/iron/smooth,
/area/station/engineering/supermatter/room)
-"uCS" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/holopad,
-/turf/open/floor/wood/parquet,
-/area/station/service/theater)
"uDg" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/half/contrasted{
@@ -60793,6 +62455,10 @@
"uDE" = (
/obj/structure/window/spawner/directional/north,
/obj/structure/flora/bush/flowers_yw/style_random,
+/obj/machinery/door/airlock{
+ id_tag = "Toilet1";
+ name = "Unit 1"
+ },
/turf/open/misc/sandy_dirt,
/area/station/commons/fitness/locker_room)
"uDF" = (
@@ -60826,10 +62492,6 @@
},
/turf/open/floor/plating,
/area/station/maintenance/port/aft)
-"uEg" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/carpet/lone,
-/area/station/service/theater)
"uEh" = (
/obj/structure/table/glass,
/obj/effect/turf_decal/siding/wood,
@@ -60993,11 +62655,6 @@
/obj/effect/mapping_helpers/requests_console/ore_update,
/turf/open/floor/iron/white,
/area/station/medical/virology)
-"uGp" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/sign/warning/no_smoking/circle/directional/north,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"uGy" = (
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/grimy,
@@ -61033,6 +62690,14 @@
},
/turf/open/floor/iron,
/area/station/engineering/hallway)
+"uGD" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/structure/bookcase/random/adult,
+/obj/structure/sign/poster/official/random/directional/north,
+/turf/open/floor/iron/grimy,
+/area/station/service/library)
"uGH" = (
/obj/machinery/rnd/production/circuit_imprinter,
/obj/effect/turf_decal/bot,
@@ -61200,14 +62865,6 @@
/obj/structure/flora/bush/fullgrass/style_random,
/turf/open/floor/grass,
/area/station/medical/treatment_center)
-"uIt" = (
-/obj/structure/disposalpipe/trunk{
- dir = 1
- },
-/obj/machinery/disposal/bin,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"uIv" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -61223,17 +62880,31 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/hallway/secondary/recreation)
+"uIA" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 9
+ },
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
+"uIP" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/red/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/machinery/firealarm/directional/north,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/iron/smooth,
+/area/station/service/greenroom)
"uIT" = (
/obj/effect/turf_decal/sand/plating,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/hallway/abandoned_command)
-"uIW" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/duct,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"uIX" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/modular_computer/preset/civilian{
@@ -61246,6 +62917,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold/green/visible,
/turf/open/floor/iron/smooth,
/area/station/engineering/supermatter/room)
+"uJi" = (
+/obj/effect/turf_decal/tile/green/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/station/service/hydroponics)
"uJq" = (
/obj/effect/spawner/random/structure/crate_abandoned,
/turf/open/floor/plating,
@@ -61356,18 +63036,36 @@
"uLj" = (
/turf/closed/wall,
/area/station/commons/toilet/auxiliary)
-"uLn" = (
+"uLD" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/directional/east,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/duct,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
-"uLu" = (
-/obj/machinery/status_display/ai/directional/south,
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
+/turf/open/floor/plating,
+/area/station/maintenance/central/lesser)
+"uLK" = (
+/obj/structure/sign/directions/evac/directional/west,
+/obj/structure/sign/directions/science/directional/west{
+ dir = 4;
+ pixel_y = -8
+ },
+/obj/structure/sign/directions/security/directional/west{
+ pixel_y = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 1
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/fore)
"uLO" = (
/obj/item/stack/sheet/cardboard{
amount = 14
@@ -61421,12 +63119,6 @@
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/turf/open/floor/iron,
/area/station/security/tram)
-"uMC" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/plating,
-/area/station/hallway/secondary/spacebridge)
"uME" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/table/greyscale,
@@ -61441,15 +63133,6 @@
"uMH" = (
/turf/open/floor/iron/white/side,
/area/station/science/research)
-"uMI" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/airlock/maintenance{
- name = "Security Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/all/security/general,
-/turf/open/floor/plating,
-/area/station/maintenance/port/lesser)
"uMN" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/hedge,
@@ -61481,14 +63164,6 @@
},
/turf/open/space/basic,
/area/space/nearstation)
-"uMW" = (
-/obj/effect/spawner/random/vending/snackvend,
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
-"uMX" = (
-/obj/item/kirbyplants/random,
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
"uNa" = (
/obj/structure/closet/emcloset,
/turf/open/floor/plating,
@@ -61512,10 +63187,6 @@
/obj/machinery/shower/directional/east,
/turf/open/floor/iron/dark/small,
/area/station/engineering/break_room)
-"uNn" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
"uNz" = (
/obj/structure/cable,
/obj/effect/turf_decal/siding/dark_red{
@@ -61537,10 +63208,6 @@
},
/turf/open/floor/iron/cafeteria,
/area/station/science/breakroom)
-"uNW" = (
-/obj/machinery/barsign,
-/turf/closed/wall,
-/area/station/service/bar)
"uNX" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -61553,14 +63220,6 @@
},
/turf/open/floor/iron/white/corner,
/area/station/hallway/primary/aft)
-"uOh" = (
-/obj/structure/chair{
- dir = 1;
- pixel_y = -2
- },
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
"uOk" = (
/obj/effect/turf_decal/siding/wood,
/obj/structure/window/spawner/directional/south,
@@ -61571,6 +63230,19 @@
"uOw" = (
/turf/open/floor/iron,
/area/station/maintenance/department/medical/central)
+"uOx" = (
+/obj/effect/turf_decal/siding/wideplating_new/terracotta{
+ dir = 5
+ },
+/turf/open/floor/wood/tile,
+/area/station/maintenance/central/lesser)
+"uOz" = (
+/obj/structure/flora/rock/pile/jungle/style_4,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"uOH" = (
/obj/item/kirbyplants/random,
/obj/machinery/light_switch/directional/west,
@@ -61588,14 +63260,6 @@
/obj/machinery/airalarm/directional/north,
/turf/open/floor/wood/tile,
/area/station/command/meeting_room)
-"uPd" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"uPf" = (
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
@@ -61605,13 +63269,6 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/dark,
/area/station/security/prison/workout)
-"uPs" = (
-/obj/machinery/airalarm/directional/west,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
"uPw" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 4
@@ -61643,10 +63300,11 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/closed/wall,
/area/station/engineering/supermatter/room)
-"uPO" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
+"uPW" = (
+/obj/structure/flora/bush/flowers_pp/style_2,
+/obj/structure/flora/bush/large/style_3,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"uPX" = (
/obj/structure/railing{
dir = 8
@@ -61689,20 +63347,20 @@
},
/turf/open/floor/iron/dark/small,
/area/station/security/brig)
-"uQC" = (
-/obj/item/kirbyplants/random,
-/obj/machinery/camera/autoname/directional/west,
-/turf/open/floor/iron/white,
-/area/station/hallway/primary/starboard)
"uQG" = (
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron,
/area/station/commons/fitness/locker_room)
-"uQR" = (
-/obj/machinery/exodrone_launcher,
-/obj/machinery/firealarm/directional/east,
-/turf/open/floor/iron/smooth,
-/area/station/cargo/drone_bay)
+"uQK" = (
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"uRe" = (
/obj/structure/reagent_dispensers/water_cooler,
/obj/effect/turf_decal/tile/red{
@@ -61728,6 +63386,12 @@
dir = 1
},
/area/station/hallway/secondary/exit/departure_lounge)
+"uRv" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"uRF" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -61767,14 +63431,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark/small,
/area/station/security/execution/education)
-"uRX" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 9
- },
-/obj/structure/flora/tree/jungle/small/style_random,
-/obj/structure/flora/bush/flowers_pp/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"uRY" = (
/obj/effect/spawner/random/structure/table_or_rack,
/obj/effect/decal/cleanable/dirt/dust,
@@ -61783,6 +63439,19 @@
"uSa" = (
/turf/open/floor/iron,
/area/station/maintenance/department/engine/atmos)
+"uSb" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/turf/open/floor/iron/grimy,
+/area/station/service/library)
+"uSh" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"uSi" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -61818,14 +63487,6 @@
/obj/effect/landmark/navigate_destination/tcomms,
/turf/open/floor/iron,
/area/station/science/lower)
-"uSC" = (
-/obj/effect/landmark/start/assistant,
-/obj/effect/landmark/start/assistant,
-/obj/structure/chair/sofa/bamboo/left{
- dir = 1
- },
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"uSG" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -61837,12 +63498,6 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/wood,
/area/station/cargo/boutique)
-"uSM" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"uSN" = (
/obj/effect/spawner/random/vending/snackvend,
/obj/effect/turf_decal/tile/neutral/half/contrasted{
@@ -61864,9 +63519,27 @@
/obj/structure/table/glass,
/turf/open/floor/iron/dark,
/area/station/service/lawoffice)
+"uTz" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/siding/wideplating/dark,
+/obj/effect/turf_decal/tile/dark_red/half/contrasted{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"uTA" = (
/turf/closed/wall,
/area/station/ai_monitored/turret_protected/ai)
+"uTE" = (
+/obj/structure/disposalpipe/segment{
+ dir = 6
+ },
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"uTK" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
@@ -61936,55 +63609,12 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
-"uUE" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/power/apc/auto_name/directional/south,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"uUG" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/iron/small,
/area/station/engineering/supermatter/room)
-"uUI" = (
-/obj/structure/table,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/green{
- dir = 4
- },
-/obj/item/reagent_containers/cup/watering_can{
- pixel_x = 7;
- pixel_y = 13
- },
-/obj/item/reagent_containers/cup/bottle/mutagen{
- pixel_x = -5;
- pixel_y = 8
- },
-/obj/item/reagent_containers/syringe{
- pixel_x = -3;
- pixel_y = -1
- },
-/obj/item/reagent_containers/spray/plantbgone{
- pixel_x = 6;
- pixel_y = 1
- },
-/obj/machinery/newscaster/directional/east,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
-"uVb" = (
-/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/directional/west,
-/turf/open/floor/wood,
-/area/station/cargo/boutique)
"uVo" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -62002,15 +63632,6 @@
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron/dark,
/area/station/hallway/secondary/construction)
-"uVE" = (
-/obj/structure/table,
-/obj/item/storage/bag/tray{
- pixel_x = 1;
- pixel_y = -1
- },
-/obj/item/food/cake/apple,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"uVO" = (
/obj/structure/disposalpipe/segment,
/obj/effect/mapping_helpers/broken_floor,
@@ -62077,16 +63698,6 @@
dir = 1
},
/area/station/security/prison/safe)
-"uWB" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"uWG" = (
/obj/structure/closet/firecloset,
/obj/machinery/status_display/ai/directional/south,
@@ -62106,9 +63717,6 @@
/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"uXb" = (
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"uXs" = (
/obj/structure/window/spawner/directional/east,
/obj/structure/window/spawner/directional/west,
@@ -62117,17 +63725,6 @@
/obj/structure/flora/bush/fullgrass/style_random,
/turf/open/floor/grass,
/area/station/medical/treatment_center)
-"uXw" = (
-/obj/structure/table,
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
-"uXB" = (
-/obj/structure/chair{
- dir = 1
- },
-/turf/open/floor/iron/white,
-/area/station/medical/medbay/lobby)
"uXC" = (
/turf/closed/wall,
/area/station/science/lower)
@@ -62138,10 +63735,6 @@
},
/turf/open/floor/plating,
/area/station/engineering/atmos)
-"uXN" = (
-/obj/structure/altar_of_gods,
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"uXS" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/holopad,
@@ -62210,18 +63803,6 @@
/obj/structure/sign/poster/official/random/directional/south,
/turf/open/floor/iron/small,
/area/station/commons/fitness/locker_room)
-"uZb" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/siding/wideplating/dark/corner{
- dir = 8
- },
-/obj/effect/turf_decal/tile/dark_red/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"uZc" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron,
@@ -62233,6 +63814,15 @@
},
/turf/open/floor/iron,
/area/station/security/brig/entrance)
+"uZy" = (
+/obj/effect/turf_decal/weather/snow,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/effect/turf_decal/weather/snow/corner,
+/turf/open/floor/iron/freezer,
+/area/station/service/kitchen/coldroom)
"uZA" = (
/obj/structure/chair{
dir = 1;
@@ -62258,12 +63848,6 @@
},
/turf/open/floor/plating,
/area/station/maintenance/central/lesser)
-"uZY" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor/iron_dark,
-/area/station/service/library)
"vaf" = (
/obj/item/kirbyplants/random/fullysynthetic,
/obj/machinery/status_display/ai/directional/south,
@@ -62398,14 +63982,6 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/station/security/courtroom)
-"vcP" = (
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"vcR" = (
/turf/open/floor/iron/stairs/medium{
dir = 1
@@ -62524,6 +64100,13 @@
},
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
+"vdL" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/spawner/random/structure/steam_vent,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"vdS" = (
/obj/structure/closet/firecloset,
/obj/item/clothing/glasses/meson,
@@ -62634,6 +64217,16 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/lab)
+"vfo" = (
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/tile/neutral/opposingcorners{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new{
+ dir = 10
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/secondary/service)
"vfD" = (
/obj/effect/turf_decal/siding/thinplating_new/light,
/obj/structure/reagent_dispensers/fueltank,
@@ -62657,6 +64250,17 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
+"vfM" = (
+/obj/machinery/door/airlock/multi_tile/public{
+ dir = 8
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/textured_half{
+ dir = 8
+ },
+/area/station/service/bar)
"vfN" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -62681,13 +64285,18 @@
/obj/item/toy/crayon/purple,
/turf/open/floor/iron/white,
/area/station/science/research)
-"vgc" = (
-/obj/structure/chair/sofa/right/maroon{
+"vgh" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/structure/disposalpipe/junction/flip{
+ dir = 2
+ },
+/turf/open/floor/iron/white/corner{
dir = 1
},
-/obj/machinery/airalarm/directional/east,
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
+/area/station/hallway/secondary/exit/departure_lounge)
"vgp" = (
/obj/machinery/door/airlock/maintenance{
name = "Atmospherics Maintenance"
@@ -62724,19 +64333,6 @@
/obj/effect/mapping_helpers/airlock/access/any/science/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/department/science/xenobiology)
-"vgJ" = (
-/obj/structure/table,
-/obj/effect/turf_decal/bot,
-/obj/machinery/light/small/directional/north,
-/obj/item/pen{
- pixel_x = 11
- },
-/obj/item/paper_bin{
- pixel_x = -7;
- pixel_y = 6
- },
-/turf/open/floor/iron/kitchen/small,
-/area/station/hallway/secondary/service)
"vgN" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/yellow/opposingcorners,
@@ -62757,6 +64353,15 @@
/obj/structure/filingcabinet/chestdrawer,
/turf/open/floor/iron/smooth,
/area/station/cargo/office)
+"vhr" = (
+/obj/structure/sink/directional/west,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/obj/machinery/camera/autoname/directional/north,
+/obj/machinery/light/cold/directional/north,
+/turf/open/floor/iron/dark/small,
+/area/station/service/chapel/storage)
"vht" = (
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/obj/machinery/holopad,
@@ -62795,6 +64400,11 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/wood,
/area/station/service/chapel/office)
+"vip" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"vir" = (
/turf/open/floor/iron/white/side{
dir = 8
@@ -62885,16 +64495,6 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
-"vjc" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
"vjp" = (
/obj/structure/cable,
/obj/effect/turf_decal/sand/plating,
@@ -62902,21 +64502,6 @@
/obj/structure/alien/weeds,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
-"vjx" = (
-/obj/structure/table,
-/obj/machinery/cell_charger{
- pixel_y = 18
- },
-/obj/item/stock_parts/cell/high{
- pixel_y = 18
- },
-/obj/item/clothing/suit/hazardvest,
-/obj/effect/turf_decal/siding/thinplating_new/terracotta{
- dir = 4
- },
-/obj/machinery/firealarm/directional/west,
-/turf/open/floor/iron,
-/area/station/command/teleporter)
"vjI" = (
/obj/machinery/door/airlock{
name = "Bathrooms"
@@ -62981,10 +64566,13 @@
},
/turf/open/floor/iron,
/area/station/science/research)
-"vkz" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
+"vkC" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/firealarm/directional/east,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"vkD" = (
/obj/structure/table,
/obj/item/stack/ore/gold{
@@ -62996,12 +64584,10 @@
},
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
-"vkG" = (
-/obj/effect/turf_decal/siding/wood/corner{
- dir = 1
- },
-/turf/open/floor/grass,
-/area/station/service/chapel)
+"vkI" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/wood/tile,
+/area/station/service/bar)
"vkJ" = (
/obj/item/book/manual/wiki/security_space_law{
pixel_x = 9;
@@ -63145,19 +64731,22 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/science/genetics)
+"vmr" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock{
+ name = "Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/plating,
+/area/station/maintenance/central/lesser)
"vmt" = (
/obj/structure/chair/stool/bamboo{
dir = 4
},
/turf/open/floor/iron/terracotta/diagonal,
/area/station/service/chapel/office)
-"vmz" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/spawner/random/trash,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"vmB" = (
/obj/item/radio/intercom/directional/west,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -63199,12 +64788,6 @@
/obj/machinery/light/small/directional/north,
/turf/open/floor/wood,
/area/station/service/chapel/office)
-"vnb" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/plating,
-/area/station/hallway/secondary/spacebridge)
"vne" = (
/turf/open/floor/wood,
/area/station/service/chapel/office)
@@ -63242,13 +64825,6 @@
/obj/machinery/airalarm/directional/north,
/turf/open/floor/iron/dark,
/area/station/security/execution/transfer)
-"vnn" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/mapping_helpers/broken_floor,
-/turf/open/floor/wood,
-/area/station/service/chapel/office)
"vnp" = (
/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{
dir = 9
@@ -63310,6 +64886,19 @@
},
/turf/open/floor/iron/smooth,
/area/station/security/evidence)
+"vnD" = (
+/obj/effect/turf_decal/tile/dark_red/half/contrasted{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wideplating/dark/corner{
+ dir = 8
+ },
+/obj/structure/disposalpipe/sorting/mail{
+ dir = 1
+ },
+/obj/effect/mapping_helpers/mail_sorting/security/general,
+/turf/open/floor/iron,
+/area/station/security)
"vnF" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -63320,16 +64909,6 @@
"vnI" = (
/turf/closed/mineral/random/stationside,
/area/station/maintenance/department/engine)
-"vnK" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/red/line,
-/obj/structure/cable,
-/turf/open/floor/iron/small,
-/area/station/hallway/primary/central/fore)
"vnN" = (
/obj/structure/window/reinforced/spawner/directional/west,
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
@@ -63341,15 +64920,6 @@
/obj/machinery/medical_kiosk,
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
-"voa" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/morgue{
- name = "Secret Corridor";
- req_access = list("library")
- },
-/turf/open/floor/catwalk_floor/iron_dark,
-/area/station/service/library)
"voe" = (
/obj/structure/chair/sofa/bench/right{
dir = 1
@@ -63378,13 +64948,6 @@
/obj/effect/turf_decal/bot_white,
/turf/open/floor/iron/smooth,
/area/station/commons/storage/tools)
-"voF" = (
-/obj/structure/table,
-/obj/machinery/chem_dispenser/drinks,
-/obj/machinery/light/cold/directional/north,
-/obj/structure/sign/poster/official/random/directional/north,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"voJ" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/tile/dark_red/half/contrasted{
@@ -63397,10 +64960,10 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron,
/area/station/security)
-"voL" = (
-/obj/item/radio/intercom/directional/north,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
+"voN" = (
+/obj/structure/sign/nanotrasen,
+/turf/closed/wall/r_wall,
+/area/station/command/teleporter)
"voO" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -63415,6 +64978,15 @@
/obj/effect/mapping_helpers/airlock/access/all/supply/general,
/turf/open/floor/catwalk_floor/iron_dark,
/area/station/cargo/office)
+"vpg" = (
+/obj/machinery/disposal/bin,
+/obj/effect/turf_decal/bot,
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/obj/machinery/power/apc/auto_name/directional/south,
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"vpk" = (
/obj/structure/cable,
/turf/open/floor/iron/smooth,
@@ -63448,10 +65020,6 @@
/obj/machinery/smartfridge/petri/preloaded,
/turf/open/floor/iron/white,
/area/station/science/cytology)
-"vpN" = (
-/obj/machinery/door/firedoor,
-/turf/open/floor/catwalk_floor/iron,
-/area/station/service/bar)
"vpP" = (
/obj/effect/spawner/random/structure/closet_private,
/obj/machinery/light/small/directional/south,
@@ -63482,19 +65050,6 @@
},
/turf/open/floor/iron/dark/side,
/area/station/hallway/primary/central/fore)
-"vpU" = (
-/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/brown/full,
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/item/food/lizard_fries,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
-"vpY" = (
-/obj/effect/turf_decal/tile/neutral/full,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"vpZ" = (
/obj/effect/turf_decal/siding/yellow{
dir = 8
@@ -63519,14 +65074,17 @@
},
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
-"vqp" = (
-/turf/open/floor/carpet/lone,
-/area/station/service/theater)
"vqw" = (
/obj/effect/decal/cleanable/glass/titanium,
/obj/item/stack/rods/two,
/turf/open/floor/plating,
/area/station/maintenance/department/engine/atmos)
+"vqF" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"vqH" = (
/obj/structure/railing{
dir = 8
@@ -63577,22 +65135,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
-"vrt" = (
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching Prison Wing holding areas.";
- name = "Prison Monitor";
- network = list("prison");
- pixel_y = 30
- },
-/obj/machinery/computer/records/security,
-/turf/open/floor/wood,
-/area/station/security/detectives_office)
-"vrv" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/extinguisher_cabinet/directional/east,
-/turf/open/floor/carpet/lone,
-/area/station/service/theater)
"vrz" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -63640,6 +65182,14 @@
dir = 1
},
/area/station/security/courtroom)
+"vrS" = (
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/dark_red/half/contrasted,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"vrT" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
@@ -63670,15 +65220,6 @@
},
/turf/open/floor/wood,
/area/station/commons/fitness/recreation)
-"vsl" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/duct,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/machinery/status_display/ai/directional/west,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"vso" = (
/obj/effect/landmark/start/scientist,
/obj/structure/chair{
@@ -63688,14 +65229,6 @@
/obj/structure/extinguisher_cabinet/directional/west,
/turf/open/floor/iron/white,
/area/station/science/research)
-"vsq" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/item/radio/intercom/directional/north,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/stone,
-/area/station/service/theater)
"vsx" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -63720,25 +65253,10 @@
},
/turf/open/floor/engine,
/area/station/science/xenobiology)
-"vtc" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/security/glass{
- id_tag = "outerbrig";
- name = "Brig"
- },
-/obj/effect/mapping_helpers/airlock/access/all/security/entrance,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "sci-entrance"
- },
-/turf/open/floor/iron/textured_half,
-/area/station/security/brig/entrance)
-"vtv" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/station/hallway/primary/port)
+"vtr" = (
+/obj/machinery/light/floor,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"vtw" = (
/obj/effect/turf_decal/stripes/line,
/obj/structure/cable,
@@ -63778,6 +65296,11 @@
/obj/machinery/duct,
/turf/open/floor/plating,
/area/station/maintenance/fore/greater)
+"vtX" = (
+/obj/effect/landmark/start/assistant,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"vuj" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/item/fuel_pellet,
@@ -63799,9 +65322,6 @@
},
/turf/open/floor/iron/smooth,
/area/station/maintenance/solars/starboard/aft)
-"vuo" = (
-/turf/closed/wall/r_wall,
-/area/station/commons/vacant_room/commissary)
"vuq" = (
/obj/effect/turf_decal/tile/yellow{
dir = 1
@@ -63851,30 +65371,6 @@
},
/turf/open/floor/iron,
/area/station/cargo/sorting)
-"vuK" = (
-/obj/structure/cable,
-/obj/structure/table/reinforced,
-/obj/item/stack/cable_coil{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/stock_parts/cell/high,
-/obj/item/electronics/airlock{
- pixel_y = 13
- },
-/turf/open/floor/iron,
-/area/station/engineering/storage/tech)
-"vuL" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"vuR" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -63915,7 +65411,9 @@
},
/obj/machinery/button/door/directional/south{
id = "Cabin4";
- name = "Cabin Bolt Control"
+ name = "Cabin Bolt Control";
+ normaldoorcontrol = 1;
+ specialfunctions = 4
},
/turf/open/floor/carpet,
/area/station/commons/dorms)
@@ -63950,6 +65448,16 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/construction)
+"vvC" = (
+/obj/machinery/door/airlock/engineering{
+ name = "Engine Airlock"
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/any/engineering/construction,
+/obj/structure/cable,
+/obj/effect/landmark/navigate_destination,
+/turf/open/floor/catwalk_floor,
+/area/station/engineering/break_room)
"vvK" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/green/fourcorners,
@@ -63992,11 +65500,6 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
-"vwg" = (
-/obj/structure/bookcase/random/nonfiction,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
"vwh" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/door/airlock/public/glass{
@@ -64148,6 +65651,13 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/dark,
/area/station/engineering/atmospherics_engine)
+"vyP" = (
+/obj/machinery/vending/wardrobe/hydro_wardrobe,
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 5
+ },
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"vyR" = (
/turf/open/floor/glass,
/area/station/command/corporate_dock)
@@ -64203,11 +65713,17 @@
/obj/structure/cable,
/turf/open/floor/iron/cafeteria,
/area/station/security/prison/mess)
-"vzI" = (
-/obj/machinery/skill_station,
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
+"vzE" = (
+/obj/structure/window/spawner/directional/east,
+/obj/structure/window/spawner/directional/west,
+/obj/structure/flora/bush/sparsegrass,
+/obj/structure/flora/bush/flowers_br,
+/obj/structure/flora/bush/flowers_pp,
+/obj/structure/flora/bush/large/style_random{
+ pixel_y = -1
+ },
+/turf/open/floor/grass,
+/area/station/service/hydroponics)
"vzK" = (
/obj/machinery/light/small/directional/west,
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/helium_output{
@@ -64216,18 +65732,6 @@
},
/turf/open/floor/engine/helium,
/area/station/ai_monitored/turret_protected/ai)
-"vzM" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/brown/full,
-/obj/structure/sink/kitchen/directional/south,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
-"vzP" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/turf/open/floor/grass,
-/area/station/service/chapel)
"vzV" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -64236,14 +65740,6 @@
},
/turf/open/floor/iron,
/area/station/security/tram)
-"vzW" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/siding/wood,
-/obj/structure/chair/sofa/bamboo/left{
- dir = 1
- },
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"vzX" = (
/obj/machinery/door/airlock/command{
name = "Centcom Dock"
@@ -64278,23 +65774,14 @@
},
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
-"vAo" = (
-/obj/item/radio/intercom/directional/north{
- broadcasting = 1;
- frequency = 1447;
- name = "Private Channel";
- pixel_x = -26
- },
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching the ai_upload.";
- dir = 4;
- name = "AI Upload Monitor";
- network = list("aiupload");
- pixel_x = -29
+"vAl" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/table/wood,
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/obj/item/radio/intercom/directional/north,
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/turret_protected/ai_upload_foyer)
+/turf/open/floor/wood,
+/area/station/cargo/boutique)
"vAq" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -64316,14 +65803,6 @@
},
/turf/open/floor/iron/small,
/area/station/security/tram)
-"vAA" = (
-/obj/effect/landmark/start/hangover,
-/obj/effect/turf_decal/siding/wood,
-/obj/structure/chair/sofa/bamboo/left{
- dir = 1
- },
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"vAC" = (
/obj/structure/flora/bush/large/style_random{
pixel_y = -3
@@ -64346,14 +65825,6 @@
/obj/effect/mapping_helpers/airlock/unres,
/turf/open/floor/plating,
/area/station/maintenance/department/science/xenobiology)
-"vAR" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/turf/open/floor/grass,
-/area/station/service/chapel)
"vAT" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -64376,11 +65847,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/white/textured_half,
/area/station/science/lobby)
-"vBm" = (
-/obj/machinery/holopad,
-/obj/effect/spawner/random/engineering/tracking_beacon,
-/turf/open/floor/iron/white/small,
-/area/station/service/hydroponics)
"vBG" = (
/obj/structure/table,
/obj/machinery/microwave{
@@ -64516,11 +65982,6 @@
dir = 8
},
/area/station/hallway/secondary/dock)
-"vEq" = (
-/obj/structure/chair/stool/bar/directional/east,
-/obj/effect/landmark/start/assistant,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
"vEz" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -64542,14 +66003,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
-"vEI" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"vEP" = (
/turf/closed/wall/r_wall,
/area/station/security/brig)
@@ -64564,9 +66017,27 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron/smooth,
/area/station/engineering/engine_smes)
+"vET" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"vEW" = (
/turf/closed/wall/r_wall,
/area/station/security/prison/shower)
+"vEY" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"vEZ" = (
/obj/structure/railing,
/obj/structure/railing/corner{
@@ -64622,15 +66093,6 @@
dir = 6
},
/area/station/hallway/secondary/construction)
-"vFv" = (
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
- },
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"vFy" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -64658,27 +66120,12 @@
dir = 1
},
/area/station/hallway/secondary/exit/departure_lounge)
-"vFE" = (
-/obj/structure/table,
-/obj/item/trash/energybar,
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
"vFG" = (
/obj/machinery/computer/rdservercontrol{
dir = 8
},
/turf/open/floor/iron/white/small,
/area/station/science/server)
-"vFQ" = (
-/obj/machinery/navbeacon{
- codes_txt = "delivery;dir=8";
- location = "QM #2"
- },
-/obj/effect/turf_decal/delivery,
-/obj/machinery/camera/autoname/directional/south,
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/iron,
-/area/station/cargo/storage)
"vFR" = (
/obj/structure/bed,
/obj/effect/turf_decal/siding/red{
@@ -64769,14 +66216,6 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/station/security/courtroom)
-"vHL" = (
-/obj/effect/spawner/random/engineering/tracking_beacon,
-/obj/effect/turf_decal/plaque{
- icon_state = "L7"
- },
-/obj/effect/landmark/observer_start,
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
"vHT" = (
/obj/effect/turf_decal/box/red/corners{
dir = 8
@@ -64799,20 +66238,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white/corner,
/area/station/science/lower)
-"vIg" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/wood,
-/area/station/service/chapel/office)
-"vIh" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
- },
-/turf/open/floor/wood,
-/area/station/service/chapel/office)
"vIp" = (
/obj/structure/table,
/obj/item/folder/yellow{
@@ -64850,12 +66275,6 @@
"vIF" = (
/turf/closed/wall,
/area/station/engineering/atmos/pumproom)
-"vII" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/wood/parquet,
-/area/station/service/theater)
"vIJ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/door/firedoor,
@@ -65068,16 +66487,6 @@
/obj/machinery/light/cold/directional/north,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
-"vLf" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/dark_red/opposingcorners,
-/obj/machinery/flasher/directional/west{
- id = "brigentry"
- },
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"vLi" = (
/obj/effect/turf_decal/tile/purple/opposingcorners,
/obj/effect/turf_decal/siding/green{
@@ -65115,25 +66524,6 @@
/obj/item/gavelhammer,
/turf/open/floor/plating,
/area/station/maintenance/central/lesser)
-"vLO" = (
-/obj/structure/table,
-/obj/item/reagent_containers/condiment/saltshaker{
- desc = "Salt. From space oceans, presumably. A staple of modern medicine.";
- pixel_x = 8;
- pixel_y = 7
- },
-/obj/item/reagent_containers/condiment/peppermill{
- desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table.";
- pixel_x = 8;
- pixel_y = 2
- },
-/obj/machinery/newscaster/directional/east,
-/obj/effect/spawner/random/food_or_drink/condiment{
- pixel_x = -8;
- pixel_y = 3
- },
-/turf/open/floor/iron/showroomfloor,
-/area/station/service/cafeteria)
"vLP" = (
/turf/closed/wall/rust,
/area/station/command/heads_quarters/qm)
@@ -65205,11 +66595,14 @@
dir = 1
},
/area/station/hallway/primary/aft)
-"vML" = (
-/obj/effect/mapping_helpers/broken_floor,
-/obj/machinery/portable_atmospherics/canister/air,
+"vMP" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
+/area/station/maintenance/port/greater)
"vMT" = (
/obj/machinery/hydroponics/soil,
/obj/item/food/grown/mushroom/libertycap,
@@ -65276,14 +66669,6 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/iron,
/area/station/science/lower)
-"vOh" = (
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/red/line,
-/turf/open/floor/iron/small,
-/area/station/hallway/secondary/spacebridge)
"vOm" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -65358,11 +66743,6 @@
},
/turf/open/floor/iron/small,
/area/station/hallway/secondary/recreation)
-"vPC" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/closed/wall/r_wall,
-/area/station/hallway/secondary/spacebridge)
"vPJ" = (
/obj/structure/broken_flooring/singular/directional/east,
/obj/structure/alien/weeds,
@@ -65413,20 +66793,27 @@
/obj/structure/flora/bush/large/style_random,
/turf/open/misc/sandy_dirt,
/area/station/medical/medbay/lobby)
-"vQA" = (
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/obj/machinery/camera/autoname/directional/north,
-/obj/structure/sign/warning/no_smoking/circle/directional/north,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
+"vQx" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 6
+ },
+/obj/machinery/light/small/directional/south,
+/obj/structure/sign/poster/official/random/directional/east,
+/turf/open/floor/eighties/red,
+/area/station/hallway/primary/central/fore)
"vRd" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/dark_red,
/obj/item/flashlight/lamp,
/turf/open/floor/iron,
/area/station/security/tram)
+"vRg" = (
+/obj/machinery/porta_turret/ai,
+/obj/machinery/computer/security/telescreen/research/directional/west,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/status_display/ai/directional/north,
+/turf/open/floor/iron/smooth,
+/area/station/ai_monitored/turret_protected/aisat_interior)
"vRh" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -65434,6 +66821,11 @@
dir = 1
},
/area/station/science/research)
+"vRn" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/turf/closed/wall,
+/area/station/maintenance/port/greater)
"vRt" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -65445,12 +66837,6 @@
/obj/machinery/power/apc/auto_name/directional/west,
/turf/open/floor/iron/dark,
/area/station/security/interrogation)
-"vRE" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/brown/full,
-/turf/open/floor/iron/smooth_large,
-/area/station/service/bar)
"vRH" = (
/obj/structure/reagent_dispensers/beerkeg,
/turf/open/floor/plating,
@@ -65465,6 +66851,14 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
/area/station/engineering/atmospherics_engine)
+"vSi" = (
+/obj/structure/hedge,
+/obj/effect/turf_decal/siding/wood/end,
+/obj/effect/turf_decal/siding/wood/end{
+ dir = 1
+ },
+/turf/open/floor/iron/smooth,
+/area/station/service/library)
"vSj" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/firealarm/directional/west,
@@ -65485,12 +66879,6 @@
},
/turf/open/floor/iron/kitchen/small,
/area/station/security/prison/mess)
-"vSE" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/flora/bush/flowers_yw/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"vSL" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/tile/neutral{
@@ -65501,20 +66889,10 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
-"vST" = (
-/obj/machinery/hydroponics/constructable,
-/obj/effect/turf_decal/tile/blue/half,
-/obj/machinery/firealarm/directional/south,
-/turf/open/floor/iron/white/small,
-/area/station/service/hydroponics)
"vSW" = (
/obj/effect/spawner/random/engineering/atmospherics_portable,
/turf/open/floor/plating,
/area/station/maintenance/port/lesser)
-"vSX" = (
-/obj/structure/flora/bush/sunny/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"vSY" = (
/obj/structure/table,
/obj/item/chisel{
@@ -65560,6 +66938,15 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron/cafeteria,
/area/station/science/breakroom)
+"vTn" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/structure/flora/bush/flowers_yw/style_2,
+/obj/structure/flora/bush/large/style_random{
+ pixel_x = 0;
+ pixel_y = 2
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"vTo" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -65608,11 +66995,11 @@
},
/turf/open/floor/iron/dark,
/area/station/command/corporate_dock)
-"vTN" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/white/small,
-/area/station/service/hydroponics)
+"vTP" = (
+/obj/structure/sink/kitchen/directional/east,
+/obj/machinery/firealarm/directional/west,
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"vTV" = (
/turf/closed/wall/r_wall,
/area/station/command/heads_quarters/hos)
@@ -65646,11 +67033,6 @@
},
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
-"vUq" = (
-/obj/machinery/restaurant_portal/bar,
-/obj/machinery/firealarm/directional/west,
-/turf/open/floor/wood/tile,
-/area/station/service/bar)
"vUz" = (
/obj/structure/table_frame,
/obj/effect/decal/cleanable/glass,
@@ -65661,18 +67043,6 @@
},
/turf/open/floor/eighties,
/area/station/service/abandoned_gambling_den/gaming)
-"vUG" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door/poddoor/shutters/preopen{
- dir = 4;
- id = "kitchenshutters";
- name = "Kitchen Shutters"
- },
-/obj/structure/displaycase/forsale/kitchen{
- pixel_y = 8
- },
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"vUM" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -65703,13 +67073,6 @@
},
/turf/open/floor/iron/white/small,
/area/station/security/prison/safe)
-"vUZ" = (
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/item/kirbyplants/random,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"vVo" = (
/obj/machinery/light/cold/directional/south,
/obj/structure/table/reinforced,
@@ -65717,12 +67080,6 @@
/obj/machinery/airalarm/directional/south,
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/escape)
-"vVw" = (
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"vVx" = (
/obj/machinery/hydroponics/soil,
/obj/item/food/grown/mushroom/plumphelmet,
@@ -65814,6 +67171,19 @@
/obj/structure/cable,
/turf/open/floor/iron/smooth,
/area/station/maintenance/solars/starboard/fore)
+"vWw" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/fore)
"vWA" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/machinery/firealarm/directional/south,
@@ -65861,6 +67231,11 @@
/obj/item/clothing/gloves/boxing/blue,
/turf/open/floor/iron,
/area/station/security/prison/workout)
+"vXd" = (
+/obj/item/flashlight/lantern/on,
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/stone,
+/area/station/service/chapel)
"vXi" = (
/obj/structure/table,
/obj/item/reagent_containers/cup/bowl,
@@ -65870,14 +67245,6 @@
/obj/item/wirecutters,
/turf/open/floor/iron/white/diagonal,
/area/station/maintenance/department/science/xenobiology)
-"vXo" = (
-/obj/effect/turf_decal/siding/wood/corner,
-/obj/structure/chair/comfy/brown{
- dir = 4
- },
-/obj/effect/landmark/start/librarian,
-/turf/open/floor/iron/grimy,
-/area/station/service/library)
"vXr" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -65915,28 +67282,11 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/security)
-"vXW" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"vYj" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"vYt" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 8
- },
-/obj/effect/turf_decal/trimline/neutral/end,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"vYx" = (
/obj/effect/turf_decal/siding/thinplating_new/light{
dir = 1
@@ -65979,6 +67329,18 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/station/security/courtroom)
+"vYJ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/siding/wood/corner,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/turf/open/floor/stone,
+/area/station/service/bar/backroom)
"vYL" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -66017,6 +67379,13 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron/white,
/area/station/medical/paramedic)
+"vYW" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/structure/table/wood,
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
"vZb" = (
/obj/structure/cable,
/obj/structure/table,
@@ -66093,18 +67462,6 @@
},
/turf/open/floor/iron,
/area/station/security/courtroom)
-"wav" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/obj/effect/mapping_helpers/broken_floor,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
-"waw" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/machinery/light/small/directional/east,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
"way" = (
/obj/effect/turf_decal/tile/yellow{
dir = 1
@@ -66112,6 +67469,13 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/smooth,
/area/station/engineering/main)
+"waD" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/plating,
+/area/station/hallway/primary/central/aft)
"waH" = (
/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{
dir = 5
@@ -66121,6 +67485,10 @@
/obj/structure/sign/poster/official/random/directional/west,
/turf/open/floor/iron/smooth,
/area/station/engineering/main)
+"waI" = (
+/obj/machinery/vending/games,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"waN" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 4
@@ -66132,17 +67500,6 @@
/obj/structure/bookcase/random/religion,
/turf/open/floor/wood,
/area/station/service/chapel/office)
-"waS" = (
-/obj/structure/table,
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/item/toy/foamblade,
-/obj/item/toy/dummy,
-/obj/machinery/light/small/directional/north,
-/obj/structure/sign/poster/official/random/directional/north,
-/turf/open/floor/plating,
-/area/station/service/theater)
"waX" = (
/obj/effect/turf_decal/tile/yellow/opposingcorners,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -66150,6 +67507,25 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
/area/station/command/heads_quarters/ce)
+"waY" = (
+/obj/effect/turf_decal/weather/snow,
+/obj/machinery/gibber,
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/turf/open/floor/iron/freezer,
+/area/station/service/kitchen/coldroom)
+"wbd" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/dark_red/fourcorners,
+/obj/effect/landmark/start/security_officer,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"wbf" = (
/turf/closed/wall,
/area/station/security/prison/safe)
@@ -66303,12 +67679,6 @@
/obj/machinery/camera/autoname/directional/west,
/turf/open/floor/circuit,
/area/station/tcommsat/server)
-"wdV" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/chair/stool/bamboo,
-/turf/open/floor/carpet/lone,
-/area/station/service/chapel/office)
"wdY" = (
/obj/effect/spawner/random/structure/table,
/turf/open/floor/plating,
@@ -66356,14 +67726,6 @@
},
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
-"wfb" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/chair/stool/bamboo,
-/turf/open/floor/carpet/lone,
-/area/station/service/chapel/office)
"wfi" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/siding/green{
@@ -66400,39 +67762,6 @@
/obj/machinery/firealarm/directional/west,
/turf/open/floor/iron,
/area/station/maintenance/hallway/abandoned_command)
-"wfP" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/security/glass{
- id_tag = "outerbrig";
- name = "Brig"
- },
-/obj/effect/mapping_helpers/airlock/access/all/security/entrance,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "sci-entrance"
- },
-/turf/open/floor/iron/textured_half,
-/area/station/security/brig/entrance)
-"wfU" = (
-/obj/structure/disposalpipe/segment{
- dir = 5
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/airalarm/directional/west,
-/turf/open/floor/iron/small,
-/area/station/medical/medbay/lobby)
-"wgj" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/carpet/lone,
-/area/station/service/chapel/office)
"wgl" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -66497,6 +67826,14 @@
/obj/item/reagent_containers/cup/glass/bottle/beer,
/turf/open/floor/wood,
/area/station/maintenance/starboard/greater)
+"wgI" = (
+/obj/effect/turf_decal/tile/brown/opposingcorners{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
"wgL" = (
/turf/closed/wall/r_wall,
/area/station/maintenance/department/medical/central)
@@ -66505,6 +67842,12 @@
/obj/effect/turf_decal/weather,
/turf/open/floor/plating,
/area/station/service/chapel/office)
+"wha" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"whc" = (
/obj/effect/turf_decal/tile/dark_red/anticorner/contrasted{
dir = 1
@@ -66518,14 +67861,6 @@
},
/turf/open/floor/plating,
/area/station/engineering/atmos/storage/gas)
-"wht" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"whu" = (
/obj/structure/cable,
/obj/machinery/blackbox_recorder,
@@ -66585,16 +67920,6 @@
},
/turf/closed/wall/r_wall,
/area/station/security/brig/entrance)
-"wix" = (
-/obj/item/kirbyplants/random,
-/obj/machinery/newscaster/directional/west,
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/neutral/half/contrasted{
- dir = 1
- },
-/obj/item/radio/intercom/directional/south,
-/turf/open/floor/iron/dark/side,
-/area/station/hallway/primary/central/fore)
"wiC" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -66623,13 +67948,6 @@
/obj/structure/cable,
/turf/closed/wall,
/area/station/engineering/engine_smes)
-"wiU" = (
-/obj/structure/chair/office{
- dir = 8
- },
-/obj/effect/landmark/start/librarian,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"wja" = (
/turf/closed/wall/r_wall,
/area/station/commons/toilet/auxiliary)
@@ -66647,29 +67965,17 @@
/obj/structure/filingcabinet,
/turf/open/floor/iron/dark/small,
/area/station/security/detectives_office)
-"wjK" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 10
- },
-/obj/structure/flora/bush/sunny/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
-"wjY" = (
-/obj/structure/window/spawner/directional/east,
-/obj/structure/table/wood,
-/obj/machinery/cell_charger{
- pixel_y = 5
- },
-/obj/item/stock_parts/cell/crap{
- pixel_y = 5
+"wjT" = (
+/obj/machinery/barsign{
+ chosen_sign = "thecavern";
+ icon_state = "thecavern";
+ pixel_y = 32
},
-/obj/item/clothing/mask/cigarette/pipe/cobpipe{
- pixel_x = 1;
- pixel_y = -2
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
},
-/obj/structure/sign/poster/official/random/directional/north,
-/turf/open/floor/wood/tile,
-/area/station/command/corporate_showroom)
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"wjZ" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -66690,13 +67996,13 @@
},
/turf/open/floor/wood/tile,
/area/station/command/bridge)
-"wkk" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/red/opposingcorners{
+"wku" = (
+/obj/effect/turf_decal/weather/dirt{
dir = 1
},
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
+/obj/machinery/light/floor,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"wkF" = (
/obj/effect/spawner/structure/window/reinforced/tinted,
/turf/open/floor/plating,
@@ -66711,6 +68017,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
+"wkK" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"wkU" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing{
@@ -66724,56 +68040,12 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/chapel,
/area/station/maintenance/starboard/greater)
-"wld" = (
-/obj/effect/turf_decal/tile/yellow/opposingcorners,
-/obj/structure/table/reinforced/titaniumglass,
-/obj/item/rcl/pre_loaded,
-/obj/item/stock_parts/cell/high{
- pixel_y = 17
- },
-/obj/machinery/light/small/directional/south,
-/obj/structure/secure_safe/directional/east,
-/turf/open/floor/iron,
-/area/station/command/heads_quarters/ce)
-"wlf" = (
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
"wlk" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 4
},
/turf/open/floor/engine,
/area/station/science/xenobiology)
-"wlu" = (
-/obj/structure/closet/secure_closet/bar,
-/obj/item/stack/spacecash/c100,
-/obj/item/stack/spacecash/c10,
-/obj/item/stack/spacecash/c1,
-/obj/item/stack/spacecash/c1,
-/obj/item/stack/spacecash/c1,
-/obj/machinery/light/small/directional/north,
-/obj/structure/sign/poster/official/random/directional/north,
-/obj/item/radio/intercom/directional/east,
-/turf/open/floor/stone,
-/area/station/service/bar/backroom)
-"wlF" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/siding/wood,
-/turf/open/floor/grass,
-/area/station/service/chapel)
-"wlL" = (
-/obj/machinery/firealarm/directional/north,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
-"wlQ" = (
-/obj/effect/turf_decal/siding/wood,
-/obj/structure/flora/bush/flowers_pp/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"wlS" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{
@@ -66807,16 +68079,6 @@
/obj/effect/spawner/random/structure/crate,
/turf/open/floor/plating,
/area/station/maintenance/aft)
-"wms" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/machinery/newscaster/directional/north,
-/obj/machinery/duct,
-/turf/open/floor/iron/kitchen/small,
-/area/station/hallway/secondary/service)
"wmu" = (
/obj/structure/disposalpipe/trunk{
dir = 1
@@ -66879,11 +68141,22 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/port/lesser)
-"wmY" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/machinery/camera/autoname/directional/north,
+"wmX" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/plaque{
+ icon_state = "L4";
+ pixel_y = -15
+ },
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
+/area/station/hallway/primary/central/aft)
"wnd" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -66916,12 +68189,6 @@
/obj/machinery/light/small/broken/directional/north,
/turf/open/floor/wood,
/area/station/service/abandoned_gambling_den)
-"wnB" = (
-/obj/effect/turf_decal/plaque{
- icon_state = "L1"
- },
-/turf/open/floor/glass,
-/area/station/hallway/secondary/spacebridge)
"wnE" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -66929,19 +68196,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/maintenance/department/medical/central)
-"wnK" = (
-/obj/structure/table,
-/obj/effect/spawner/random/entertainment/toy,
-/obj/item/radio/intercom/directional/north,
-/turf/open/floor/wood,
-/area/station/service/theater)
-"wnO" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/station/medical/medbay/lobby)
"wnR" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -66968,22 +68222,13 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/tcommsat/server)
-"wow" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/green{
- dir = 8
- },
-/obj/effect/turf_decal/tile/green{
- dir = 4
+"woz" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 5
},
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
-"woB" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/wood,
-/turf/open/floor/grass,
-/area/station/service/chapel)
+/obj/structure/cable,
+/turf/open/floor/eighties,
+/area/station/hallway/primary/central/fore)
"woD" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -67073,15 +68318,6 @@
"wqj" = (
/turf/closed/wall,
/area/station/commons/toilet/restrooms)
-"wqs" = (
-/obj/effect/spawner/structure/window,
-/obj/machinery/door/poddoor/shutters/preopen{
- dir = 8;
- id = "barki";
- name = "Shutters"
- },
-/turf/open/floor/plating,
-/area/station/service/kitchen)
"wqD" = (
/obj/structure/reagent_dispensers/water_cooler,
/obj/effect/decal/cleanable/dirt,
@@ -67129,6 +68365,14 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron/dark,
/area/station/security/prison/workout)
+"wrk" = (
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/dark_red/half/contrasted,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"wrw" = (
/obj/machinery/light/small/directional/east,
/obj/structure/disposalpipe/segment,
@@ -67138,7 +68382,9 @@
"wrx" = (
/obj/machinery/button/door/directional/north{
name = "Lock Control";
- id = "Toilet3"
+ id = "Toilet3";
+ specialfunctions = 4;
+ normaldoorcontrol = 1
},
/obj/machinery/recharge_station,
/obj/structure/sign/poster/official/random/directional/east,
@@ -67189,6 +68435,16 @@
/obj/machinery/power/apc/auto_name/directional/east,
/turf/open/floor/iron/dark,
/area/station/command/corporate_dock)
+"wrZ" = (
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/obj/structure/cable,
+/obj/machinery/duct,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/plating,
+/area/station/maintenance/central/lesser)
"wsa" = (
/obj/structure/window/reinforced/spawner/directional/west,
/obj/effect/turf_decal/tile/red/anticorner/contrasted{
@@ -67241,12 +68497,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"wsX" = (
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/obj/structure/chair/stool/bar/directional/south,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron,
-/area/station/commons/fitness/recreation/entertainment)
"wtc" = (
/obj/structure/cable,
/obj/structure/window/reinforced/spawner/directional/north,
@@ -67313,6 +68563,10 @@
},
/turf/open/floor/iron/smooth,
/area/station/service/greenroom)
+"wtw" = (
+/obj/structure/chair/stool/bar/directional/west,
+/turf/open/floor/wood/large,
+/area/station/service/bar)
"wtx" = (
/obj/structure/cannon{
dir = 4
@@ -67341,6 +68595,12 @@
dir = 4
},
/area/station/science/lobby)
+"wtV" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"wtX" = (
/turf/closed/wall/r_wall,
/area/station/security/checkpoint/customs/auxiliary)
@@ -67389,11 +68649,6 @@
/obj/machinery/light/small/directional/north,
/turf/open/floor/plating,
/area/station/command/gateway)
-"wuw" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"wuH" = (
/obj/structure/broken_flooring/singular/directional/south,
/obj/effect/landmark/generic_maintenance_landmark,
@@ -67414,13 +68669,26 @@
"wuM" = (
/turf/closed/wall,
/area/station/command/heads_quarters/qm)
-"wvn" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+"wuY" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/light/small/directional/west,
-/turf/open/floor/catwalk_floor/iron_dark,
-/area/station/service/library)
+/obj/structure/chair/wood{
+ dir = 8
+ },
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
+"wvk" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/red/line,
+/obj/structure/extinguisher_cabinet/directional/east,
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/fore)
"wvv" = (
/obj/effect/turf_decal/tile/red/opposingcorners,
/obj/effect/turf_decal/tile/blue/opposingcorners{
@@ -67439,15 +68707,6 @@
/obj/machinery/light/floor,
/turf/open/floor/iron/white/small,
/area/station/science/cubicle)
-"wvP" = (
-/obj/structure/table/wood,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/screwdriver,
-/obj/effect/turf_decal/siding/wideplating_new/terracotta{
- dir = 8
- },
-/turf/open/floor/wood/tile,
-/area/station/commons/vacant_room/commissary)
"wvT" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{
dir = 10
@@ -67671,12 +68930,6 @@
/obj/machinery/meter,
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
-"wyY" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/table/wood,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/carpet/lone,
-/area/station/service/chapel/office)
"wyZ" = (
/obj/effect/turf_decal/siding/wideplating{
dir = 4
@@ -67689,11 +68942,6 @@
"wzj" = (
/turf/open/floor/plating,
/area/station/maintenance/central/greater)
-"wzk" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/spawner/structure/window,
-/turf/open/floor/plating,
-/area/station/hallway/primary/port)
"wzo" = (
/obj/machinery/light/small/directional/north,
/obj/effect/landmark/start/cargo_technician,
@@ -67733,18 +68981,11 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/carpet/lone,
/area/station/service/chapel/office)
-"wzU" = (
-/obj/effect/landmark/event_spawn,
-/obj/machinery/computer/security/telescreen{
- dir = 4;
- name = "Test Chamber Monitor";
- network = list("xeno");
- pixel_x = -29
- },
-/turf/open/floor/iron/white/side{
- dir = 4
- },
-/area/station/science/xenobiology)
+"wAa" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/wood/tile,
+/area/station/service/bar)
"wAb" = (
/obj/structure/table,
/obj/effect/spawner/random/food_or_drink/donkpockets,
@@ -67790,16 +69031,16 @@
"wAW" = (
/turf/closed/wall,
/area/station/hallway/primary/port)
-"wAZ" = (
-/obj/machinery/door/airlock/public/glass{
- name = "Public Shrine"
- },
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_half,
-/area/station/hallway/primary/port)
"wBa" = (
/turf/open/floor/iron/dark/smooth_corner,
/area/station/maintenance/starboard/greater)
+"wBc" = (
+/obj/effect/turf_decal/tile/green/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/service/hydroponics)
"wBf" = (
/obj/effect/spawner/random/structure/closet_maintenance,
/turf/open/floor/plating/rust,
@@ -67910,6 +69151,18 @@
},
/turf/open/floor/iron/dark,
/area/station/medical/pharmacy)
+"wCM" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/dark/side{
+ dir = 1
+ },
+/area/station/hallway/primary/central/fore)
"wCR" = (
/turf/closed/wall,
/area/station/cargo/boutique)
@@ -67938,17 +69191,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
/area/station/engineering/atmos/pumproom)
-"wDJ" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/status_display/ai/directional/north,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"wDM" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -67956,19 +69198,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/station/maintenance/department/engine/atmos)
-"wDV" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/power/apc/auto_name/directional/east,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
-"wDZ" = (
-/obj/item/radio/intercom/directional/south,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
"wEc" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 9
@@ -67989,10 +69218,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
-"wEp" = (
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"wEs" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -68002,6 +69227,16 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/maintenance/hallway/abandoned_command)
+"wEv" = (
+/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics,
+/obj/machinery/door/airlock/hydroponics/glass{
+ name = "Hydroponics"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/door/firedoor,
+/turf/open/floor/iron/textured_half,
+/area/station/service/hydroponics)
"wEC" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
@@ -68021,12 +69256,6 @@
/obj/effect/spawner/structure/window/reinforced/tinted,
/turf/open/floor/iron/dark,
/area/station/service/chapel/office)
-"wEI" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"wER" = (
/obj/effect/spawner/random/trash,
/obj/machinery/duct,
@@ -68052,6 +69281,10 @@
/obj/structure/filingcabinet/chestdrawer,
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/rd)
+"wFd" = (
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/smooth,
+/area/station/service/library)
"wFe" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -68059,15 +69292,6 @@
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/iron,
/area/station/maintenance/hallway/abandoned_command)
-"wFl" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 1
- },
-/turf/open/floor/iron/small,
-/area/station/hallway/primary/starboard)
"wFq" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -68091,6 +69315,13 @@
/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/department/engine/atmos)
+"wFY" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/obj/structure/flora/bush/jungle/c/style_3,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"wGh" = (
/obj/structure/broken_flooring/corner/directional/south,
/turf/open/floor/plating,
@@ -68156,13 +69387,6 @@
/obj/structure/filingcabinet/filingcabinet,
/turf/open/floor/iron/grimy,
/area/station/science/cubicle)
-"wHE" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"wHH" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing/corner/end{
@@ -68210,29 +69434,11 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
-"wHX" = (
-/obj/item/radio/intercom/directional/south,
-/obj/effect/landmark/start/hangover,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral/opposingcorners,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/spacebridge)
"wIc" = (
/obj/structure/window/spawner/directional/west,
/obj/structure/flora/rock/pile/jungle/style_random,
/turf/open/misc/sandy_dirt,
/area/station/medical/medbay/lobby)
-"wId" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/dark_red/fourcorners,
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"wIm" = (
/obj/machinery/door/airlock/hatch{
name = "Centcom Dock"
@@ -68328,14 +69534,14 @@
/obj/effect/turf_decal/tile/blue/fourcorners,
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
-"wJV" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/sign/painting/large/library{
- dir = 1
+"wJT" = (
+/obj/structure/flora/tree/jungle/small/style_4,
+/obj/structure/flora/grass/jungle/b/style_random{
+ pixel_y = -3;
+ pixel_x = 3
},
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/iron/smooth,
-/area/station/service/library)
+/turf/open/floor/grass,
+/area/station/service/chapel)
"wJX" = (
/obj/structure/closet/secure_closet/personal,
/turf/open/floor/iron/herringbone,
@@ -68414,6 +69620,33 @@
/obj/structure/alien/weeds,
/turf/open/floor/wood,
/area/station/maintenance/starboard/greater)
+"wKH" = (
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/camera/autoname/directional/east,
+/obj/machinery/computer/security/telescreen/entertainment/directional/east,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
+"wKM" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/airlock{
+ name = "Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
+/obj/effect/mapping_helpers/airlock/unres,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"wKO" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/camera/directional/east,
@@ -68435,6 +69668,21 @@
/obj/machinery/incident_display/dual/directional/north,
/turf/open/floor/iron/smooth,
/area/station/command/bridge)
+"wKX" = (
+/obj/structure/table,
+/obj/machinery/microwave{
+ pixel_y = 5
+ },
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
+"wLa" = (
+/obj/machinery/smartfridge,
+/obj/machinery/door/poddoor/shutters{
+ name = "Kitchen Shutters";
+ id = "kitchenshutters"
+ },
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"wLd" = (
/turf/closed/wall/r_wall,
/area/station/maintenance/solars/port/aft)
@@ -68447,17 +69695,11 @@
/obj/effect/mapping_helpers/airlock/access/any/security/court,
/turf/open/floor/plating,
/area/station/security/courtroom)
-"wLA" = (
-/obj/machinery/holopad,
-/turf/open/floor/wood,
-/area/station/service/theater)
-"wLJ" = (
+"wLo" = (
/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"wLM" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -68482,6 +69724,13 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/station/service/library)
+"wMz" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/structure/bookcase/random,
+/turf/open/floor/wood/parquet,
+/area/station/service/library)
"wMA" = (
/obj/machinery/camera/directional/west,
/obj/structure/bookcase/random/religion,
@@ -68620,15 +69869,6 @@
},
/turf/open/space/basic,
/area/space)
-"wNR" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"wNS" = (
/obj/structure/rack,
/obj/structure/transport/linear/tram,
@@ -68719,6 +69959,15 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/science/genetics)
+"wOt" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"wOz" = (
/obj/effect/landmark/generic_maintenance_landmark,
/obj/effect/turf_decal/stripes/line{
@@ -68984,16 +70233,6 @@
/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_freezer_chamber_input,
/turf/open/floor/engine/vacuum,
/area/station/science/ordnance/freezerchamber)
-"wRD" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/red/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
- },
-/obj/machinery/firealarm/directional/north,
-/turf/open/floor/iron/smooth,
-/area/station/service/greenroom)
"wRN" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -69004,6 +70243,20 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/exit/departure_lounge)
+"wRO" = (
+/obj/machinery/door/airlock{
+ name = "Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"wRP" = (
/obj/machinery/camera/directional/south{
c_tag = "Atmospherics - South"
@@ -69212,6 +70465,14 @@
},
/turf/open/floor/iron,
/area/station/security)
+"wUc" = (
+/obj/machinery/light/small/directional/east,
+/obj/structure/sign/poster/official/random/directional/north,
+/obj/effect/turf_decal/siding/wood/end{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/station/hallway/primary/central/aft)
"wUS" = (
/obj/structure/window/reinforced/spawner/directional/north,
/obj/effect/turf_decal/stripes/line{
@@ -69241,45 +70502,11 @@
/obj/machinery/light/small/directional/north,
/turf/open/floor/iron/small,
/area/station/engineering/atmos)
-"wVs" = (
-/obj/machinery/computer/security/telescreen/interrogation{
- name = "reflection room monitor";
- network = list("isolation");
- pixel_y = 31
- },
-/obj/effect/turf_decal/stripes/white/corner{
- dir = 1
- },
-/obj/item/kirbyplants/random,
-/obj/machinery/firealarm/directional/east,
-/obj/machinery/button/flasher{
- id = "IsolationFlash";
- pixel_x = 28;
- pixel_y = 28
- },
-/turf/open/floor/iron/dark/small,
-/area/station/security/execution/education)
"wVI" = (
/obj/machinery/biogenerator,
/obj/machinery/light/small/dim/directional/north,
/turf/open/floor/plating,
/area/station/maintenance/department/prison)
-"wVZ" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/structure/extinguisher_cabinet/directional/south,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
-"wWa" = (
-/obj/structure/flora/bush/flowers_pp/style_random,
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"wWb" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible,
/obj/structure/railing{
@@ -69302,6 +70529,24 @@
dir = 1
},
/area/station/hallway/secondary/construction)
+"wWC" = (
+/obj/structure/chair/comfy/brown{
+ dir = 4
+ },
+/obj/effect/landmark/start/librarian,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/grimy,
+/area/station/service/library)
+"wWD" = (
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/landmark/start/hangover,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"wWP" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
@@ -69321,16 +70566,6 @@
"wWS" = (
/turf/open/floor/iron,
/area/station/security/prison)
-"wWT" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"wWU" = (
/obj/structure/cable,
/obj/effect/spawner/random/trash,
@@ -69356,6 +70591,16 @@
/obj/structure/reagent_dispensers/wall/peppertank/directional/east,
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/customs/auxiliary)
+"wXe" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/dark_red/fourcorners,
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/security/brig/entrance)
"wXg" = (
/obj/structure/disposalpipe/trunk,
/obj/structure/window/reinforced/spawner/directional/east,
@@ -69386,31 +70631,12 @@
},
/turf/open/floor/iron/small,
/area/station/security/brig)
-"wXO" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"wXV" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{
dir = 4
},
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
-"wXZ" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 1
- },
-/turf/open/floor/iron/small,
-/area/station/hallway/primary/central/fore)
"wYa" = (
/obj/effect/turf_decal/siding/wood{
dir = 5
@@ -69425,18 +70651,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/engineering/storage/tech)
-"wYr" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"wYv" = (
/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{
dir = 9
@@ -69450,26 +70664,6 @@
"wYA" = (
/turf/closed/wall/r_wall,
/area/station/medical/chemistry)
-"wYD" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/landmark/navigate_destination/hop,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
-"wYF" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/item/grown/bananapeel,
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"wYH" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -69482,17 +70676,6 @@
},
/turf/open/misc/sandy_dirt,
/area/station/security/tram)
-"wYV" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/power/apc/auto_name/directional/south,
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"wZa" = (
/obj/docking_port/stationary{
dir = 8;
@@ -69513,15 +70696,6 @@
},
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/hallway/secondary/exit/departure_lounge)
-"wZd" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/dark_red/opposingcorners,
-/obj/machinery/camera/autoname/directional/west,
-/obj/machinery/light/small/directional/west,
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"wZk" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -69534,16 +70708,6 @@
"wZl" = (
/turf/closed/wall,
/area/station/commons)
-"wZo" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/green/diagonal_centre,
-/turf/open/floor/iron/diagonal,
-/area/station/hallway/primary/central/aft)
"wZp" = (
/obj/effect/turf_decal/arrows{
dir = 8
@@ -69559,6 +70723,18 @@
},
/turf/open/floor/iron/dark/small,
/area/station/maintenance/department/engine/atmos)
+"wZx" = (
+/obj/machinery/door/airlock/vault{
+ name = "Vault"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/supply/vault,
+/obj/effect/mapping_helpers/airlock/locked,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/door/firedoor,
+/turf/open/floor/iron/dark/herringbone,
+/area/station/hallway/primary/central/aft)
"wZA" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
@@ -69567,14 +70743,6 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/starboard/central)
-"wZE" = (
-/obj/structure/disposalpipe/junction,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"wZF" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -69717,18 +70885,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
-"xbP" = (
-/obj/structure/cable,
-/obj/machinery/door/airlock/public/glass{
- name = "Vault Storage"
- },
-/obj/effect/mapping_helpers/airlock/access/all/supply/vault,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/catwalk_floor,
-/area/station/hallway/secondary/spacebridge)
"xbR" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/structure/hedge,
@@ -69778,6 +70934,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/maintenance/starboard/greater)
+"xcK" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/closed/wall,
+/area/station/hallway/primary/central/aft)
"xcS" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -69842,18 +71004,24 @@
},
/turf/open/floor/iron/white/corner,
/area/station/hallway/secondary/exit/departure_lounge)
-"xdD" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
+"xdy" = (
+/obj/structure/table,
+/obj/machinery/reagentgrinder{
+ pixel_y = 9;
+ pixel_x = 4
},
-/obj/structure/sink/directional/west,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 8
+/obj/item/reagent_containers/condiment/enzyme{
+ pixel_x = -7;
+ pixel_y = 6
},
-/obj/machinery/camera/autoname/directional/north,
-/obj/machinery/light/cold/directional/north,
-/turf/open/floor/iron/dark/small,
-/area/station/service/chapel/storage)
+/obj/item/reagent_containers/condiment/peppermill{
+ pixel_x = 3
+ },
+/obj/item/reagent_containers/condiment/saltshaker{
+ pixel_x = -3
+ },
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"xdJ" = (
/obj/machinery/door/airlock/engineering{
name = "Engine Airlock"
@@ -69894,13 +71062,6 @@
},
/turf/open/floor/engine,
/area/station/engineering/atmos)
-"xen" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"xeo" = (
/obj/structure/window/spawner/directional/south,
/obj/structure/lattice,
@@ -69993,12 +71154,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/white/textured_large,
/area/station/science/research)
-"xeY" = (
-/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/directional/north,
-/obj/machinery/light/small/directional/west,
-/turf/open/floor/iron/dark/small,
-/area/station/commons/vacant_room/commissary)
"xfa" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
@@ -70007,6 +71162,17 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/science/research)
+"xfe" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"xff" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -70017,6 +71183,22 @@
/obj/machinery/door/firedoor,
/turf/open/floor/catwalk_floor/flat_white,
/area/station/science/server)
+"xfm" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/dark_red/half/contrasted{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wideplating/dark{
+ dir = 8
+ },
+/obj/structure/disposalpipe/sorting/mail/flip{
+ dir = 1
+ },
+/obj/effect/mapping_helpers/mail_sorting/security/hos_office,
+/turf/open/floor/iron,
+/area/station/security)
"xfu" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/simple/general/visible{
@@ -70024,12 +71206,6 @@
},
/turf/open/floor/iron/white,
/area/station/science/cytology)
-"xfw" = (
-/obj/structure/table,
-/obj/item/flashlight/lantern,
-/obj/item/radio/intercom/directional/east,
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"xfy" = (
/obj/structure/transport/linear/tram,
/obj/structure/fluff/tram_rail/floor{
@@ -70048,13 +71224,6 @@
},
/turf/open/floor/iron/smooth,
/area/station/engineering/break_room)
-"xfB" = (
-/mob/living/simple_animal/bot/firebot,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/holopad,
-/turf/open/floor/iron/smooth_large,
-/area/station/engineering/storage_shared)
"xfH" = (
/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/iron,
@@ -70067,13 +71236,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/security)
-"xfU" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/carpet/lone,
-/area/station/service/chapel/office)
"xfV" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -70087,6 +71249,19 @@
},
/turf/open/floor/iron/dark/small,
/area/station/medical/chemistry)
+"xfX" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/red/line,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/small,
+/area/station/hallway/primary/central/fore)
"xgg" = (
/obj/structure/chair{
pixel_y = -2
@@ -70136,53 +71311,16 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/port)
-"xgN" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/machinery/holopad,
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
-"xhe" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
-"xhj" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/wood,
-/area/station/service/chapel/office)
-"xhA" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/wood{
- dir = 8
+"xhk" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Public Shrine"
},
-/obj/effect/turf_decal/siding/wood{
+/obj/machinery/door/firedoor,
+/obj/effect/turf_decal/siding/wood/end{
dir = 4
},
-/obj/machinery/door/airlock/maintenance{
- name = "Crematorium"
- },
-/obj/effect/mapping_helpers/airlock/access/all/service/chapel_office,
-/turf/open/floor/iron/textured_half{
- dir = 8
- },
-/area/station/service/chapel/storage)
+/turf/open/floor/stone,
+/area/station/hallway/primary/central/fore)
"xhD" = (
/obj/structure/table,
/obj/item/clothing/shoes/ducky_shoes{
@@ -70200,30 +71338,11 @@
/obj/effect/landmark/navigate_destination/lawyer,
/turf/open/floor/iron,
/area/station/hallway/secondary/recreation)
-"xhH" = (
-/obj/structure/disposalpipe/sorting/mail/flip{
- dir = 1
- },
-/obj/effect/mapping_helpers/mail_sorting/service/chapel,
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"xhM" = (
/obj/structure/table,
/obj/item/book/manual/wiki/tcomms,
/turf/open/floor/circuit,
/area/station/tcommsat/server)
-"xhQ" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"xhU" = (
/obj/structure/flora/bush/large/style_random{
pixel_x = -18;
@@ -70268,14 +71387,6 @@
/obj/machinery/airalarm/directional/west,
/turf/open/floor/iron/cafeteria,
/area/station/security/prison/mess)
-"xiA" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/airalarm/directional/north,
-/turf/open/floor/iron/dark/small,
-/area/station/service/chapel/storage)
"xiE" = (
/turf/closed/wall/r_wall,
/area/station/medical/virology)
@@ -70287,13 +71398,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/port)
-"xiL" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"xiN" = (
/obj/machinery/door/window/left/directional/north{
name = "Equipment Storage";
@@ -70316,6 +71420,17 @@
},
/turf/open/floor/iron/large,
/area/station/ai_monitored/command/storage/eva)
+"xiS" = (
+/obj/effect/turf_decal/trimline/neutral/line,
+/obj/effect/turf_decal/trimline/neutral/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"xiT" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -70343,17 +71458,6 @@
"xjg" = (
/turf/open/floor/iron/dark,
/area/station/security/interrogation)
-"xjh" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"xjo" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -70365,15 +71469,6 @@
dir = 8
},
/area/station/science/lower)
-"xjq" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/power/apc/auto_name/directional/north,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"xjz" = (
/turf/closed/wall/r_wall,
/area/station/security/prison/garden)
@@ -70438,16 +71533,6 @@
/obj/effect/spawner/random/trash,
/turf/open/floor/plating,
/area/station/maintenance/fore/lesser)
-"xkg" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/siding/wideplating/dark{
- dir = 1
- },
-/obj/effect/turf_decal/tile/dark_red/half/contrasted,
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"xkn" = (
/obj/structure/steam_vent,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -70480,10 +71565,6 @@
/obj/item/kirbyplants/random,
/turf/open/floor/iron/white,
/area/station/science/cytology)
-"xkS" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"xkU" = (
/obj/effect/turf_decal/siding/thinplating_new/terracotta{
dir = 9
@@ -70491,16 +71572,6 @@
/obj/machinery/power/shieldwallgen,
/turf/open/floor/iron/smooth_large,
/area/station/command/teleporter)
-"xkW" = (
-/obj/effect/turf_decal/tile/red/opposingcorners,
-/obj/effect/turf_decal/tile/blue/opposingcorners{
- dir = 8
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 1
- },
-/turf/open/floor/iron/smooth,
-/area/station/service/greenroom)
"xkX" = (
/obj/effect/turf_decal/tile/yellow/diagonal_centre,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -70599,6 +71670,18 @@
"xmO" = (
/turf/closed/wall/r_wall,
/area/station/maintenance/fore/greater)
+"xnb" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 6
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"xng" = (
/obj/structure/disposalpipe/trunk,
/obj/machinery/disposal/delivery_chute{
@@ -70618,6 +71701,14 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/tile,
/area/station/service/lawoffice)
+"xno" = (
+/obj/effect/turf_decal/tile/red/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/machinery/airalarm/directional/south,
+/turf/open/floor/iron/smooth,
+/area/station/service/greenroom)
"xnA" = (
/obj/effect/spawner/structure/window/reinforced/plasma,
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible,
@@ -70777,6 +71868,10 @@
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
+"xpL" = (
+/obj/structure/disposalpipe/segment,
+/turf/closed/wall,
+/area/station/maintenance/hallway/abandoned_command)
"xpR" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{
@@ -70787,13 +71882,6 @@
/obj/machinery/power/apc/auto_name/directional/south,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
-"xpT" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/structure/flora/bush/flowers_br/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"xpU" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -70890,6 +71978,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/commons/fitness/locker_room)
+"xrc" = (
+/obj/machinery/door/airlock{
+ name = "Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/station/maintenance/central/lesser)
"xri" = (
/obj/effect/turf_decal/stripes/corner{
dir = 4
@@ -70924,14 +72020,6 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
-"xrz" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/stairs{
- dir = 8
- },
-/area/station/service/theater)
"xrA" = (
/obj/structure/sign/warning/pods/directional/west,
/turf/open/floor/plating,
@@ -70944,6 +72032,35 @@
},
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
+"xrE" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/landmark/navigate_destination/vault,
+/obj/effect/turf_decal/tile/neutral,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
+"xrN" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/requests_console/directional/north{
+ department = "Chief Engineer's Desk";
+ name = "Chief Engineer's Requests Console";
+ pixel_y = -32;
+ pixel_x = 2
+ },
+/obj/effect/mapping_helpers/requests_console/announcement,
+/obj/effect/mapping_helpers/requests_console/information,
+/turf/open/floor/iron/stairs/old{
+ dir = 4
+ },
+/area/station/command/heads_quarters/ce)
"xrX" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -71015,6 +72132,16 @@
/obj/structure/cable,
/turf/open/floor/iron/herringbone,
/area/station/commons/dorms)
+"xsD" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"xsF" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -71104,6 +72231,15 @@
},
/turf/open/floor/iron/checker,
/area/station/security/breakroom)
+"xtD" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/service/bar)
"xtI" = (
/turf/closed/wall/r_wall,
/area/station/science/breakroom)
@@ -71129,15 +72265,6 @@
"xtW" = (
/turf/open/floor/engine/vacuum,
/area/station/science/ordnance/burnchamber)
-"xtZ" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/starboard)
"xug" = (
/obj/machinery/atmospherics/components/unary/thermomachine/freezer,
/obj/effect/turf_decal/tile/brown/opposingcorners,
@@ -71198,6 +72325,12 @@
/obj/structure/window/reinforced/spawner/directional/west,
/turf/open/space/basic,
/area/space/nearstation)
+"xuJ" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"xuO" = (
/obj/structure/disposalpipe/segment,
/obj/structure/disposalpipe/segment{
@@ -71213,10 +72346,6 @@
/obj/machinery/camera/autoname/directional/south,
/turf/open/floor/iron/cafeteria,
/area/station/commons/dorms)
-"xuU" = (
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"xuW" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -71290,6 +72419,16 @@
},
/turf/closed/wall,
/area/station/cargo/miningfoundry)
+"xvK" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/red/opposingcorners,
+/obj/effect/turf_decal/tile/blue/opposingcorners{
+ dir = 8
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/smooth,
+/area/station/service/greenroom)
"xvM" = (
/obj/effect/turf_decal/tile/neutral,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -71310,9 +72449,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
-"xvW" = (
-/turf/closed/wall,
-/area/station/service/theater)
"xwd" = (
/obj/structure/rack,
/obj/item/storage/toolbox/emergency,
@@ -71401,6 +72537,15 @@
/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input,
/turf/open/floor/engine/vacuum,
/area/station/science/ordnance/burnchamber)
+"xxj" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/flora/bush/jungle/a,
+/obj/machinery/light/small/directional/north,
+/obj/machinery/status_display/ai/directional/north,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"xxo" = (
/obj/structure/lattice/catwalk,
/obj/structure/marker_beacon/yellow,
@@ -71426,21 +72571,6 @@
/obj/structure/closet/secure_closet/personal,
/turf/open/floor/iron,
/area/station/commons/fitness/locker_room)
-"xxE" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/door/airlock/maintenance{
- name = "Crematorium"
- },
-/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/access/all/security/general,
-/turf/open/floor/iron/textured_half{
- dir = 8
- },
-/area/station/security/brig/entrance)
"xxL" = (
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/turf/open/floor/iron/checker{
@@ -71452,18 +72582,14 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/command/heads_quarters/hos)
-"xye" = (
+"xxT" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/dark_red/fourcorners,
-/obj/machinery/holopad,
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
+/turf/open/floor/plating,
+/area/station/maintenance/port/greater)
"xyh" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -71501,16 +72627,40 @@
},
/turf/open/floor/iron/white/textured_large,
/area/station/medical/medbay/lobby)
+"xym" = (
+/obj/machinery/door/airlock{
+ name = "Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/service/general,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
+"xyt" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/structure/flora/bush/flowers_yw,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"xyx" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
},
/turf/open/floor/iron/dark,
/area/station/security/interrogation)
-"xyJ" = (
-/obj/structure/disposalpipe/segment,
+"xyM" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/navbeacon{
+ codes_txt = "patrol;next_patrol=23.2-Evac-Garden";
+ location = "23.4-Evac"
+ },
+/obj/structure/disposalpipe/junction/flip{
+ dir = 2
+ },
/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
+/area/station/hallway/secondary/exit/departure_lounge)
"xyQ" = (
/obj/structure/cable,
/obj/machinery/light_switch/directional/south,
@@ -71524,11 +72674,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/catwalk_floor,
/area/station/hallway/secondary/entry)
-"xyY" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/displaycase/trophy,
-/turf/open/floor/iron/smooth,
-/area/station/service/library)
"xyZ" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -71571,11 +72716,6 @@
},
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/hallway/secondary/exit/departure_lounge)
-"xzp" = (
-/obj/structure/window/reinforced/spawner/directional/west,
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/wood/parquet,
-/area/station/service/theater)
"xzE" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/dark_red,
@@ -71657,16 +72797,6 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/ai_upload)
-"xAP" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"xAR" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -71707,6 +72837,16 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plating,
/area/station/engineering/atmos/space_catwalk)
+"xBd" = (
+/obj/effect/turf_decal/plaque{
+ icon_state = "L7";
+ pixel_y = -15
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"xBe" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
@@ -71755,30 +72895,10 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
-"xBK" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/chair/office{
- dir = 1
- },
-/turf/open/floor/wood/parquet,
-/area/station/service/library)
"xBV" = (
/obj/effect/spawner/random/structure/chair_flipped,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
-"xBZ" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/red/line{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/red/line{
- dir = 8
- },
-/turf/open/floor/iron/small,
-/area/station/hallway/secondary/exit/departure_lounge)
"xCc" = (
/obj/machinery/modular_computer/preset/id{
dir = 8
@@ -71795,19 +72915,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/stairs,
/area/station/hallway/primary/central/fore)
-"xCu" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
-"xCz" = (
-/obj/effect/spawner/random/structure/crate,
-/obj/effect/spawner/random/maintenance,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"xCH" = (
/obj/structure/railing{
dir = 9
@@ -71954,12 +73061,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
-"xEC" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/turf/open/floor/iron/white,
-/area/station/medical/medbay/lobby)
"xEM" = (
/obj/structure/window/spawner/directional/north,
/obj/structure/flora/bush/large/style_random{
@@ -72063,12 +73164,13 @@
/obj/structure/hedge,
/turf/open/floor/iron/herringbone,
/area/station/commons/dorms)
-"xFO" = (
+"xFS" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/machinery/status_display/evac/directional/south,
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron,
/area/station/hallway/primary/port)
"xFT" = (
@@ -72083,15 +73185,6 @@
},
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
-"xGc" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/trimline/neutral/line,
-/obj/effect/turf_decal/trimline/neutral/line{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"xGf" = (
/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{
dir = 1
@@ -72150,6 +73243,10 @@
/obj/effect/spawner/random/trash,
/turf/open/floor/plating,
/area/station/maintenance/department/science/xenobiology)
+"xHb" = (
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"xHc" = (
/obj/effect/turf_decal/siding/wood{
dir = 6
@@ -72177,16 +73274,6 @@
},
/turf/open/floor/carpet/purple,
/area/station/commons/dorms)
-"xHB" = (
-/obj/effect/mapping_helpers/broken_floor,
-/obj/structure/table,
-/obj/effect/turf_decal/bot,
-/obj/machinery/light_switch/directional/north,
-/obj/machinery/camera/autoname/directional/west,
-/obj/machinery/power/apc/auto_name/directional/west,
-/obj/structure/cable,
-/turf/open/floor/iron/kitchen/small,
-/area/station/hallway/secondary/service)
"xHD" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -72242,14 +73329,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/catwalk_floor/iron,
/area/station/science/lobby)
-"xIl" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/duct,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"xIr" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/decal/cleanable/dirt/dust,
@@ -72274,11 +73353,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
-"xIy" = (
-/obj/effect/turf_decal/tile/neutral,
-/obj/machinery/camera/autoname/directional/south,
-/turf/open/floor/iron,
-/area/station/hallway/primary/port)
"xIA" = (
/obj/effect/turf_decal/arrows{
dir = 8
@@ -72303,22 +73377,6 @@
/obj/item/radio/intercom/directional/south,
/turf/open/floor/plating,
/area/station/engineering/gravity_generator)
-"xIK" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/white/side,
-/area/station/hallway/primary/starboard)
-"xIM" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/white/side,
-/area/station/hallway/primary/starboard)
"xIP" = (
/turf/closed/wall/r_wall,
/area/station/hallway/secondary/construction)
@@ -72338,6 +73396,24 @@
/obj/machinery/status_display/evac/directional/north,
/turf/open/floor/iron,
/area/station/hallway/secondary/dock)
+"xJv" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/item/reagent_containers/cup/bowl{
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/cup/bowl{
+ pixel_y = 8;
+ pixel_x = 3
+ },
+/obj/machinery/door/poddoor/shutters{
+ name = "Kitchen Shutters";
+ id = "kitchenshutters"
+ },
+/turf/open/floor/plating,
+/area/station/service/kitchen)
"xJw" = (
/obj/structure/cable,
/obj/effect/turf_decal/trimline/neutral/line{
@@ -72351,14 +73427,6 @@
"xJB" = (
/turf/closed/wall,
/area/station/security/courtroom)
-"xJR" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/duct,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/central/fore)
"xJZ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -72372,13 +73440,6 @@
/obj/effect/mapping_helpers/airlock/access/all/medical/general,
/turf/open/floor/iron/white/small,
/area/station/medical/medbay/central)
-"xKa" = (
-/obj/effect/turf_decal/tile/red/opposingcorners{
- dir = 1
- },
-/obj/structure/chair/stool/bar/directional/west,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/cafeteria)
"xKg" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/trimline/blue/filled/line{
@@ -72418,15 +73479,6 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/security/processing)
-"xKx" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/power/apc/auto_name/directional/north,
-/turf/open/floor/iron/dark/small,
-/area/station/service/chapel/storage)
"xKz" = (
/obj/effect/turf_decal/tile/brown/opposingcorners,
/obj/effect/turf_decal/siding/wideplating,
@@ -72509,10 +73561,6 @@
/obj/structure/barricade/wooden/crude,
/turf/open/floor/plating,
/area/station/maintenance/port/lesser)
-"xLO" = (
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/station/maintenance/port/greater)
"xLY" = (
/obj/item/reagent_containers/cup/glass/bottle/beer{
pixel_y = 11
@@ -72568,6 +73616,10 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
+"xMu" = (
+/obj/effect/turf_decal/siding/wood,
+/turf/closed/wall,
+/area/station/service/library)
"xMv" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -72611,6 +73663,23 @@
"xNw" = (
/turf/closed/wall,
/area/station/science/breakroom)
+"xNA" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/chair/wood{
+ dir = 8
+ },
+/turf/open/floor/iron/grimy,
+/area/station/service/bar)
+"xND" = (
+/obj/structure/window/reinforced/spawner/directional/north,
+/obj/structure/window/reinforced/spawner/directional/south,
+/obj/structure/grille,
+/obj/structure/window/reinforced/spawner/directional/east,
+/turf/open/floor/plating,
+/area/station/hallway/primary/central/fore)
"xNE" = (
/obj/structure/steam_vent,
/obj/structure/closet/crate,
@@ -72623,23 +73692,6 @@
/obj/item/clothing/gloves/color/red/insulated,
/turf/open/floor/iron,
/area/station/engineering/atmospherics_engine)
-"xNI" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 6
- },
-/obj/effect/turf_decal/tile/dark_red{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
-"xNL" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/light_switch/directional/east,
-/turf/open/floor/wood/parquet,
-/area/station/service/theater)
"xNV" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -72654,16 +73706,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/catwalk_floor/flat_white,
/area/station/science/auxlab/firing_range)
-"xNZ" = (
-/obj/structure/disposalpipe/sorting/mail/flip{
- dir = 4
- },
-/obj/effect/turf_decal/tile/dark_red/half/contrasted{
- dir = 1
- },
-/obj/machinery/light/cold/directional/south,
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"xOm" = (
/obj/effect/turf_decal/delivery,
/obj/machinery/door/poddoor/shutters{
@@ -72687,12 +73729,6 @@
/obj/effect/landmark/start/research_director,
/turf/open/floor/iron/dark/small,
/area/station/command/heads_quarters/rd)
-"xOB" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/turf/open/floor/iron/grimy,
-/area/station/service/theater)
"xOE" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -72722,16 +73758,6 @@
/obj/machinery/airalarm/directional/north,
/turf/open/floor/iron/smooth,
/area/station/engineering/supermatter/room)
-"xOP" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/siding/wideplating/dark/corner,
-/obj/effect/turf_decal/tile/dark_red/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/security/brig/entrance)
"xOR" = (
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{
dir = 8
@@ -72775,6 +73801,12 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron,
/area/station/security/prison/rec)
+"xPs" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/floor/grass,
+/area/station/service/chapel)
"xPv" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -72797,10 +73829,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
-"xPR" = (
-/obj/structure/flora/tree/jungle/small/style_random,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"xPW" = (
/obj/item/kirbyplants/random/fullysynthetic,
/turf/open/floor/wood/parquet,
@@ -72868,16 +73896,6 @@
},
/turf/open/floor/plating,
/area/station/command/heads_quarters/hop)
-"xQx" = (
-/obj/structure/table,
-/obj/machinery/computer/security/telescreen/ordnance{
- pixel_y = 2
- },
-/obj/machinery/newscaster/directional/north,
-/turf/open/floor/iron/dark/side{
- dir = 1
- },
-/area/station/science/ordnance/testlab)
"xQy" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -72892,6 +73910,14 @@
/obj/structure/cable,
/turf/open/floor/stone,
/area/station/command/heads_quarters/captain/private)
+"xQE" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/landmark/start/hangover,
+/turf/open/floor/stone,
+/area/station/service/bar)
"xQG" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -73041,10 +74067,6 @@
/obj/structure/barricade/wooden/crude,
/turf/open/floor/plating,
/area/station/service/abandoned_gambling_den/gaming)
-"xRZ" = (
-/obj/effect/turf_decal/siding/wood,
-/turf/open/floor/grass,
-/area/station/service/chapel)
"xSd" = (
/obj/structure/closet/firecloset,
/obj/effect/turf_decal/tile/red,
@@ -73068,13 +74090,6 @@
/obj/structure/cable,
/turf/open/floor/iron/smooth,
/area/station/engineering/atmos)
-"xSp" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/turf_decal/tile/blue/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron/white,
-/area/station/medical/medbay/lobby)
"xSt" = (
/obj/structure/window/reinforced/spawner/directional/west,
/obj/effect/turf_decal/stripes/white/line{
@@ -73221,6 +74236,15 @@
},
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
+"xUp" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/window/right/directional/south,
+/obj/machinery/door/poddoor/shutters{
+ name = "Kitchen Shutters";
+ id = "kitchenshutters"
+ },
+/turf/open/floor/iron/kitchen/small,
+/area/station/service/kitchen)
"xUr" = (
/obj/structure/rack,
/obj/machinery/flasher/directional/west,
@@ -73245,13 +74269,6 @@
},
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/ai_upload)
-"xUG" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/obj/structure/sign/poster/official/random/directional/north,
-/turf/open/floor/iron/cafeteria,
-/area/station/service/kitchen)
"xUL" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -73327,12 +74344,6 @@
},
/turf/open/floor/iron,
/area/station/science/robotics/lab)
-"xVo" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron,
-/area/station/service/hydroponics)
"xVv" = (
/obj/structure/cable,
/turf/open/floor/iron/white/small,
@@ -73459,6 +74470,11 @@
/obj/effect/turf_decal/tile/blue,
/turf/open/floor/iron/white,
/area/station/medical/medbay/aft)
+"xXe" = (
+/obj/effect/spawner/random/structure/closet_maintenance,
+/obj/effect/spawner/random/maintenance,
+/turf/open/floor/plating,
+/area/station/maintenance/central/greater)
"xXi" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -73498,6 +74514,13 @@
/obj/machinery/power/apc/auto_name/directional/north,
/turf/open/floor/plating,
/area/station/maintenance/starboard/aft)
+"xXD" = (
+/obj/effect/turf_decal/siding/thinplating_new/light,
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/south,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/white/small,
+/area/station/service/hydroponics)
"xXG" = (
/obj/structure/bed,
/obj/item/bedsheet/cmo,
@@ -73630,6 +74653,13 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
+"xZe" = (
+/obj/effect/landmark/start/chaplain,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/floor/stone,
+/area/station/service/chapel)
"xZg" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/tile/neutral,
@@ -73749,12 +74779,6 @@
/mob/living/basic/spider/giant/sgt_araneus,
/turf/open/floor/stone,
/area/station/command/heads_quarters/hos)
-"yaG" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/turf/open/floor/wood/large,
-/area/station/service/chapel)
"yaI" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -73843,18 +74867,6 @@
/obj/effect/mapping_helpers/airlock/access/all/security/entrance,
/turf/open/floor/iron/textured_half,
/area/station/security/brig)
-"ybL" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue/half/contrasted{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/station/medical/medbay/lobby)
"ybM" = (
/obj/structure/window/spawner/directional/west,
/obj/structure/window/spawner/directional/east,
@@ -73865,6 +74877,13 @@
"ybO" = (
/turf/closed/wall/r_wall,
/area/station/engineering/atmos)
+"ycb" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/obj/structure/flora/grass/jungle,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"ycd" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -73909,21 +74928,6 @@
},
/turf/open/floor/iron/white,
/area/station/science/research)
-"ycx" = (
-/obj/structure/chair/sofa/bench/right{
- dir = 1
- },
-/obj/machinery/camera/directional/south{
- c_tag = "Atmospherics - South"
- },
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/landmark/start/hangover,
-/obj/effect/turf_decal/tile/neutral/half/contrasted{
- dir = 1
- },
-/obj/machinery/computer/security/telescreen/entertainment/directional/south,
-/turf/open/floor/iron/dark/side,
-/area/station/hallway/primary/central/fore)
"ycC" = (
/turf/closed/wall/r_wall,
/area/station/command/bridge)
@@ -73942,15 +74946,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/smooth_edge,
/area/station/engineering/supermatter/room)
-"ycZ" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/white,
-/area/station/medical/medbay/lobby)
"ydf" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -73992,15 +74987,11 @@
/obj/item/radio/intercom/directional/north,
/turf/open/floor/wood/tile,
/area/station/command/bridge)
-"ydu" = (
-/obj/structure/cable,
-/obj/structure/disposalpipe/sorting/mail{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/mapping_helpers/mail_sorting/service/bar,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
+"ydz" = (
+/obj/machinery/vending/cigarette,
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/iron/dark/side,
+/area/station/hallway/primary/central/fore)
"ydH" = (
/obj/effect/turf_decal/box/corners,
/obj/effect/turf_decal/box/corners{
@@ -74067,17 +75058,6 @@
/obj/structure/sign/warning/test_chamber/directional/east,
/turf/open/floor/iron/white,
/area/station/science/robotics/augments)
-"yeu" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/hydroponics/glass{
- name = "Hydroponics"
- },
-/obj/effect/mapping_helpers/airlock/access/any/service/hydroponics,
-/obj/machinery/door/firedoor,
-/turf/open/floor/iron/textured_half,
-/area/station/service/hydroponics)
"yeD" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -74138,12 +75118,6 @@
dir = 8
},
/area/station/maintenance/starboard/greater)
-"yfj" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/white,
-/area/station/hallway/primary/starboard)
"yfs" = (
/obj/structure/closet/l3closet/scientist,
/obj/item/storage/bag/xeno,
@@ -74171,15 +75145,14 @@
},
/turf/open/floor/iron/small,
/area/station/commons/fitness/locker_room)
-"yfH" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/effect/turf_decal/siding/wood{
+"yfG" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/trimline/neutral/end{
dir = 8
},
-/obj/structure/displaycase/trophy,
-/obj/machinery/firealarm/directional/south,
-/turf/open/floor/iron/smooth,
-/area/station/service/library)
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/aft)
"yfJ" = (
/obj/effect/spawner/random/structure/closet_maintenance,
/obj/effect/decal/cleanable/dirt,
@@ -74216,15 +75189,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/security)
-"yga" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/iron/white,
-/area/station/hallway/primary/starboard)
-"ygd" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/spawner/random/engineering/atmospherics_portable,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"ygf" = (
/obj/machinery/camera/directional/east{
c_tag = "Xenobiology Lab - Test Chamber";
@@ -74235,16 +75199,6 @@
"ygu" = (
/turf/open/floor/iron/white,
/area/station/hallway/primary/starboard)
-"ygB" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/airlock/bronze{
- name = "Backstage"
- },
-/obj/effect/mapping_helpers/airlock/access/all/service/theatre,
-/turf/open/floor/wood/parquet,
-/area/station/service/theater)
"ygK" = (
/obj/structure/table,
/obj/structure/window/reinforced/spawner/directional/west,
@@ -74416,15 +75370,6 @@
/obj/item/clothing/head/utility/welding,
/turf/open/floor/iron,
/area/station/science/robotics/lab)
-"yiv" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/cable,
-/obj/machinery/door/airlock{
- name = "Greenroom Maintenance"
- },
-/obj/effect/mapping_helpers/airlock/access/all/service/theatre,
-/turf/open/floor/plating,
-/area/station/maintenance/central/greater)
"yiL" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/tile/neutral/half/contrasted{
@@ -74445,6 +75390,17 @@
},
/turf/open/floor/iron,
/area/station/science/robotics/lab)
+"yiY" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/structure/sign/departments/holy/directional/north,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/port)
"yjc" = (
/obj/machinery/rnd/production/techfab/department/cargo,
/obj/effect/turf_decal/delivery/white,
@@ -74461,12 +75417,6 @@
/obj/machinery/newscaster/directional/west,
/turf/open/floor/iron/white/small,
/area/station/science/cubicle)
-"yjD" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/turf/open/floor/grass,
-/area/station/service/chapel)
"yjE" = (
/turf/closed/wall/r_wall,
/area/station/maintenance/department/engine)
@@ -74483,6 +75433,10 @@
/obj/structure/cable,
/turf/open/floor/iron/smooth,
/area/station/engineering/supermatter/room)
+"yjP" = (
+/obj/structure/flora/tree/jungle/style_2,
+/turf/open/floor/grass,
+/area/station/service/chapel)
"yjQ" = (
/obj/structure/window/reinforced/spawner/directional/south,
/obj/machinery/power/apc/auto_name/directional/east,
@@ -84180,7 +85134,7 @@ vmL
wBo
mnx
ylK
-qBD
+aRS
gKs
hXt
mXm
@@ -85278,7 +86232,7 @@ jxJ
slw
dDd
vuj
-aPj
+cYS
rhC
pee
qyT
@@ -85286,7 +86240,7 @@ pLZ
pWF
fMQ
qCb
-qZf
+vgh
yaI
qRN
erg
@@ -85294,7 +86248,7 @@ sNg
yaI
wRN
yaI
-oUx
+xyM
yaI
xQy
qRN
@@ -85536,7 +86490,7 @@ slw
qtJ
qdu
tyD
-kai
+lFq
sor
whL
sYs
@@ -85551,7 +86505,7 @@ jch
wZS
tCm
onw
-jeV
+csv
gun
mKD
snZ
@@ -85792,7 +86746,7 @@ pZK
npA
tYj
riV
-rGt
+slw
mhk
mhk
mhk
@@ -85808,7 +86762,7 @@ gdn
qyT
tDb
ttX
-xBZ
+iNC
qyT
nvK
xBe
@@ -86046,26 +87000,26 @@ oRr
poM
uzJ
mKB
-npA
-trl
-riV
-uQR
-mhk
-spW
+aLm
+slw
+lLi
+slw
+gMX
+hEu
ozn
ozn
pXC
-xYJ
mhk
+mhk
+qyT
whL
-rym
whL
-rym
whL
qyT
+qyT
tDE
tWQ
-unM
+ggc
qyT
sbx
lgj
@@ -86302,27 +87256,27 @@ owl
oSb
ppk
mjQ
-vFQ
-npF
-mhk
-riZ
-npF
-mhk
-pev
+fLF
+ahr
+nFX
+nFX
+ozn
+pSP
mhk
mhk
mhk
mhk
mhk
-uRX
-vzP
-vzP
-vzP
-wjK
+cgV
+qHr
+gyc
+dVQ
+wFY
+ahf
wBm
wXk
xKG
-qHH
+suM
yea
yea
yea
@@ -86559,27 +87513,27 @@ lkI
oSg
lWF
mjV
-qbw
-npS
-nFX
-nFX
-ozn
-ozn
-sqe
+pHs
+mhk
+ihb
+ozt
+dEQ
+sqz
mhk
-pMg
-pYE
-vzP
-aWw
-vkG
+iSD
+pbw
+twN
+mSQ
+jWj
+bIJ
+bIJ
xYD
-xPR
-tzJ
-xRZ
-wBm
+yjP
+hVO
+wAW
wXk
oOy
-xOS
+atS
uHI
vlY
vGp
@@ -86819,24 +87773,24 @@ qby
qby
mhk
mhk
-xYJ
-udt
-rXw
-sqz
mhk
-yjD
-xYD
-rLT
-qCg
-qZB
-cPd
-wWa
-xYD
-quJ
-wAW
+xxT
+mhk
+mhk
+pGS
+sUN
+lsP
+pHA
+iSD
+iSD
+iSD
+oVW
+ePt
+jlW
+wBm
hDT
glM
-xOS
+atS
wEG
wEG
wEG
@@ -87077,23 +88031,23 @@ mLh
nry
qRq
mhk
-xLO
-mhk
+vdL
mhk
mhk
-csp
-qZB
-uaa
-qCR
-ram
-ryp
-qZB
-xYD
-xRZ
+cXb
+sry
+uoR
+neF
+hHy
+hAB
+jCm
+iSD
+bnQ
+fVF
wBm
wXk
jte
-uoh
+diI
yea
vmt
dzi
@@ -87112,7 +88066,7 @@ blb
blb
blb
xkt
-rGm
+heY
xOq
mxg
nPu
@@ -87334,23 +88288,23 @@ mLk
nsL
kVn
srn
-uSM
-rYv
-srn
-sMi
-pMu
-qaA
-qkv
-qCi
-raC
-dty
-vzW
-syv
-wlF
-wzk
-tDJ
-blq
-cNu
+iHT
+pRc
+mhk
+pbw
+rpF
+neF
+hmC
+xZe
+eWk
+hAB
+iSD
+cib
+vTn
+wBm
+wXk
+dTH
+xFS
yea
vmH
yea
@@ -87592,22 +88546,22 @@ dVW
qSS
mhk
tKf
-rYD
+kwy
mhk
-jrZ
-xYD
-jEU
-uXN
-qCR
-raX
-vkz
-agF
-syG
-pHN
+bBh
+qzP
+tBk
+keL
+tts
+tBk
+keL
+iSD
+rnr
+aCz
wAW
-wXk
+spo
xiF
-uoM
+gEx
yea
vne
wMA
@@ -87849,22 +88803,22 @@ mhk
mhk
mhk
xmI
-pbu
+ivh
mhk
-mYS
+fme
+flw
+apq
+bJx
+hHy
+sMj
+vqF
+iyR
xYD
-yaG
-qOp
-qCR
-uSC
-vkz
-vAA
-szy
-xRZ
-wAW
-iLK
+tev
+wBm
+wXk
glM
-khE
+uAk
yea
vmX
vij
@@ -87900,7 +88854,7 @@ qVP
kvO
tug
hXU
-wVs
+iCi
pxj
hAC
cVC
@@ -88106,22 +89060,22 @@ mhk
nFY
mhk
mhk
-xLO
-mhk
-ptZ
-sYF
-yaG
-qkw
-qCR
-raX
-rzu
-agF
-xYD
-wlQ
+mze
+iLH
+oyz
+tmi
+klN
+tBk
+miF
+keL
+lvJ
+ahl
+gRm
+rmk
wBm
wXk
glM
-xFO
+atS
rQC
vne
vHV
@@ -88363,28 +89317,28 @@ mhk
xYJ
xYJ
tYL
-pbu
-mhk
+mSA
mhk
-oqE
-qbr
-hNT
-qCR
-rba
-rAb
-vAR
-vSE
-woB
-ntw
+jSJ
+tOd
+qzP
+tBk
+miF
+keL
+xPs
+qOb
+iQp
+xyt
+wBm
vuR
xgA
-wNR
-qnu
-vnn
-vIg
-wdV
-wyY
-eqP
+hiK
+lei
+pvi
+pvi
+buc
+uAi
+njs
uAi
fEC
rui
@@ -88396,11 +89350,11 @@ mVt
dIt
huN
jBr
-qaH
+sNr
syk
vYD
lox
-dXo
+rdW
vTV
iWj
lRV
@@ -88615,33 +89569,33 @@ lme
lHe
lWU
tca
-mCb
+urF
mhk
xZd
mhk
sNW
-xLO
-xLO
+mze
mhk
-sYK
-sYF
-uao
-vzP
-vzP
-vkG
-bOl
-xYD
-xRZ
-wAZ
-wXk
-xgN
-rsQ
-kar
+shR
+ugI
+rYs
+dPx
+nqY
+keL
+iSD
+fGW
+bIJ
+cdB
+wAW
+rpB
+jzr
+rpE
+tAF
vnr
-vIh
-wfb
+caD
+buc
alg
-xfU
+qwK
xjU
fEC
kJJ
@@ -88657,7 +89611,7 @@ xkt
ujA
cDH
fFH
-fYX
+oBT
vTV
vTV
xxO
@@ -88877,28 +89831,28 @@ mhk
qTJ
mhk
rGN
-xYJ
-pbu
+mze
mhk
-mhk
-xpT
-xYD
-xYD
-xYD
-xPR
-xYD
-vSX
-tdg
+feL
+peU
+iSD
+dPx
+miF
+keL
+iSD
+iSD
+iSD
+iSD
wBm
wXk
-bVv
+pEO
xOS
rQC
von
-vne
-wgj
+pvC
+aLS
+wzS
wzS
-kzd
tAu
fEC
rui
@@ -88908,17 +89862,17 @@ qVP
llW
llW
xkt
-nNb
-ejc
+geH
+buf
dah
urw
urw
-rzG
-rIH
+hCd
+jwl
cFg
hWJ
-htV
-ild
+vnD
+xfm
voJ
qxv
apk
@@ -89134,28 +90088,28 @@ mhk
mhk
mhk
mhk
-sqz
-xLO
-xLO
+mze
mhk
-tCk
-uaE
-uty
-rbh
-tTG
-sdg
-tEU
-hpP
-wAW
-mdU
-xhe
+fgT
+ycb
+aWr
+dPx
+miF
+oIL
+hHy
+kzV
+hHy
+eYB
+mIE
+wXk
+glM
oMF
yea
vrf
von
wgn
pRe
-xhj
+wgn
aHq
xMg
rui
@@ -89387,32 +90341,32 @@ lIf
lXn
srn
ntJ
-jCA
nGu
+xYJ
ina
mhk
+gLV
mhk
-mhk
-sMG
-mhk
-mhk
-mhk
-mhk
-mhk
-mhk
-sdQ
-mhk
-mhk
+bTo
+sNA
+iSD
+dPx
+miF
+miF
+miF
+miF
+miF
+juP
wAW
-wDJ
-xhH
-rje
+lqq
+ckP
+cQI
yea
yea
vJn
wgA
guY
-xhA
+oRy
guY
fEC
fEC
@@ -89596,7 +90550,7 @@ ojz
sLu
urE
ess
-jCY
+mFH
vfG
oSw
jyl
@@ -89607,7 +90561,7 @@ obW
grF
ecn
kmH
-rLu
+bHp
cPe
obW
blb
@@ -89644,32 +90598,32 @@ lIn
lXY
mhk
ina
-tYL
-nGJ
-ntJ
+pyA
+ina
+xYJ
+xYJ
+xsD
srn
-oSh
-ntJ
-pug
-mhk
-lJY
-bmM
-uSM
-uSM
-vmz
-rYv
-pug
-mhk
-fju
-wWT
-glM
-iwZ
-uIt
+xxj
+cSb
+iSD
+dPx
+miF
+fMX
+wha
+wha
+wha
+mkz
+hla
+wXk
+uQK
+iXZ
+vpg
yea
vJA
vKa
guY
-xiA
+brj
iQU
pIw
pIw
@@ -89901,33 +90855,33 @@ lIq
lYt
mhk
xYJ
-qAE
-tYL
-mhk
-mhk
+lwC
tYL
mhk
-xen
-lJY
-oSS
-mhk
mhk
-oDK
+fpN
mhk
-mhk
-qSv
-sNv
-wDV
-tET
-glM
-xFO
+kZj
+kzz
+iSD
+nrp
+miF
+keL
+iSD
+iSD
+iyR
+rya
+wBm
+kvD
+xiS
+crm
dyq
yea
vKa
wgM
guY
-xdD
-hkJ
+vhr
+pwN
liJ
pwN
pTq
@@ -90097,7 +91051,7 @@ hyx
cDE
fCW
oPa
-xfB
+sXE
qKx
xed
rbp
@@ -90158,33 +91112,33 @@ lIw
lYw
mhk
qjn
-xYJ
+uiw
ina
mhk
ozt
-oSP
-uIW
-puj
-pNy
-mhk
-mhk
-uwU
-lVm
-rAn
-mhk
-mhk
-mhk
+mrn
+vRn
+wku
+bKv
+jCm
+dPx
+miF
+keL
+iSD
+iSD
+uOz
+qzP
wAW
-wXk
-jte
-xFO
+yiY
+nSb
+xOS
yeF
xle
xle
xle
xle
xle
-xKx
+jlz
kte
cVh
fEC
@@ -90206,7 +91160,7 @@ myy
dDQ
utP
bVO
-fpd
+ezV
wuc
iiX
sos
@@ -90370,7 +91324,7 @@ euP
all
eWf
eIx
-kWg
+oHJ
bNq
wxG
uIX
@@ -90415,33 +91369,33 @@ lJV
cYT
mhk
mhk
-sfL
+dDi
mhk
mhk
sNW
-wht
-mhk
-xIl
+jQv
mhk
-mhk
-nwS
-ozo
-lVm
-ebB
-yfC
-hAd
-enD
-thv
-tEW
-blq
-uoW
+oOC
+qXr
+dhu
+kZI
+miF
+keL
+jCm
+hOO
+lzG
+tWm
+wBm
+fNW
+beN
+oRw
xle
xle
slZ
-nGd
+iIU
wAj
xle
-qvQ
+jep
guY
yaW
fEC
@@ -90609,7 +91563,7 @@ ufR
xYG
xYG
rDV
-cGb
+mOx
dwC
iAk
sql
@@ -90623,11 +91577,11 @@ sHO
drI
cRq
rbl
-jcx
+tcA
uKO
vfG
-fnm
-gUo
+lGJ
+mAK
bNq
hOX
fEU
@@ -90671,38 +91625,38 @@ slY
mhk
mhk
mhk
-xYJ
-xYJ
+rZb
+jXc
xYJ
nZW
xYJ
-wht
-mhk
-sZj
-pOb
+jQv
mhk
-gzj
-uye
-sVl
-qGA
-puv
-xVo
-sPt
-mKY
-wWT
-xiF
-xOS
+rqF
+aFb
+fVF
+kZI
+miF
+keL
+iSD
+iyR
+cLL
+rPW
+wBm
+fNW
+iZW
+uoh
xle
-vrt
+pgm
swu
iDA
wAS
xle
-xxE
+bXi
tuZ
fEC
fEC
-xpo
+rPL
lGd
dAn
cjR
@@ -90928,26 +91882,26 @@ slY
rXw
lYT
mhk
-xYJ
-mhk
+uiw
mhk
mhk
mhk
-rZK
mhk
-sNW
-xIl
+ete
mhk
-ubB
-ozo
-rcr
-rBx
-yfC
-szz
-efL
-mJW
-wWT
-glM
+ani
+wJT
+sGk
+kZI
+miF
+keL
+iSD
+iSD
+eln
+jlW
+wBm
+fNW
+uQK
xOS
yeS
vrz
@@ -90955,11 +91909,11 @@ dxG
wiC
dOT
xle
-pIg
-xNI
-uMI
+chh
+aul
+jPo
rOG
-dPI
+dFQ
fEq
rpV
qVP
@@ -91182,29 +92136,29 @@ kso
kYG
kYG
pep
-lJY
-uSM
-naE
-rYv
-rYv
-rYv
-rYv
-rYv
-oSS
-mhk
+nJo
+avY
+oHk
+jRJ
+cAZ
+iHT
+vMP
+vMP
+eRy
mhk
-pOj
-mhk
-yfC
-yfC
-rdo
-rBG
-yfC
-cpc
-iwa
-yfC
-wWT
-jjS
+pbK
+keQ
+qzP
+kZI
+miF
+keL
+iyR
+sSN
+ttb
+dIQ
+wAW
+fNW
+oYi
xZg
lBN
hKU
@@ -91212,8 +92166,8 @@ ixl
qyx
vXr
jTh
-tWE
-xNZ
+wXe
+fuu
qVP
qVP
qVP
@@ -91439,29 +92393,29 @@ uxd
xaZ
dZm
slY
-lKt
+ilo
tYL
mhk
-mhk
+twm
mhk
mhk
oaa
mhk
oTH
mhk
-xHB
-pOK
-qoi
-iEX
-yfC
-aws
-fMD
-sdT
-vTN
-aws
-yfC
-lzv
-glM
+lji
+ttb
+qzP
+kZI
+miF
+keL
+lmm
+lkJ
+nxK
+fVF
+wBm
+fNW
+uQK
qHH
xle
dnK
@@ -91469,8 +92423,8 @@ vKV
wjG
wPh
xle
-bOg
-xOP
+eof
+hQx
hDN
dcc
vRC
@@ -91540,7 +92494,7 @@ xIj
eoz
eoz
tTW
-nha
+bQy
tMS
xIj
vfN
@@ -91696,29 +92650,29 @@ ksx
mEB
slY
ueX
-wht
+jQv
sNW
mhk
-mSi
-qBj
-uVb
-rkR
+fkN
+nUK
+bjh
+kbk
mhk
mhk
mhk
-vgJ
-uAV
-tDT
-fDp
-yfC
-hwe
-rBN
-aws
-vTN
-oMC
-yfC
-pTc
-rgT
+oOC
+lPq
+uCB
+kZI
+miF
+keL
+jgq
+hYh
+qXr
+oul
+wBm
+dcD
+pOM
upg
xle
xle
@@ -91726,8 +92680,8 @@ xle
xle
xle
xle
-keZ
-reT
+gyx
+uTz
ybj
uab
rjN
@@ -91953,29 +92907,29 @@ ksA
oJR
oiw
mhk
-wht
+jQv
sqz
mhk
mTd
qBz
qTR
-rlz
+kym
rHD
qVR
wCR
-rHL
-tDP
-qbC
-lsJ
-yfC
-jKh
-fMD
-vBm
-vTN
-sQU
-mKY
-wWT
-glM
+ani
+gUN
+iSD
+kVg
+miF
+keL
+bQd
+ani
+hKZ
+fVF
+wBm
+fNW
+uQK
xOS
kWJ
tJz
@@ -91983,8 +92937,8 @@ tIa
mvv
jsS
ocz
-wId
-uZb
+nPe
+lTa
hDN
xyx
xjg
@@ -92165,7 +93119,7 @@ gKL
upG
daC
jBo
-oEt
+xrN
gpI
lhq
cBw
@@ -92193,7 +93147,7 @@ eEq
sRg
gQG
hbw
-hgb
+aGI
hmQ
pGE
jug
@@ -92210,29 +93164,29 @@ khZ
nSY
nYQ
mhk
-oUO
+ifl
mhk
mhk
wCR
wCR
qUs
-cxT
+vAl
qmz
-oTO
+uvb
wCR
-uej
-wms
-qbK
-jza
-yfC
-hwe
-fMD
-aws
-vTN
-vST
-yfC
-ijm
-jte
+swM
+mEb
+iSD
+kZI
+miF
+vXd
+iSD
+gVL
+pyt
+tXy
+wAW
+chC
+nSb
xOS
par
tJz
@@ -92240,8 +93194,8 @@ kql
kql
rAR
ezM
-wId
-dtj
+nPe
+nnd
hDN
vcl
tPf
@@ -92281,7 +93235,7 @@ xAR
trp
etx
fwS
-ePg
+iLZ
trp
jRx
xul
@@ -92428,7 +93382,7 @@ hpj
rYL
gpI
jlL
-iwJ
+qQR
bNq
neg
wZr
@@ -92467,29 +93421,29 @@ ktM
sOP
otG
mhk
-xen
-ptk
+oEn
+lPK
mhk
mTN
wTO
qVR
-rlz
+kym
rHH
oUJ
wCR
-pup
-tbq
-qcl
-uej
-yfC
-aws
-rBQ
-aws
-vTN
-say
-yfC
-rjH
-glM
+aQc
+iSD
+iSD
+kZI
+wtV
+keL
+iSD
+ojA
+uPW
+rPW
+wBm
+fNW
+uQK
xOS
uJD
tJz
@@ -92497,8 +93451,8 @@ uZk
gOw
jsS
iAM
-wId
-puY
+nPe
+byv
vEP
qVV
qVV
@@ -92506,7 +93460,7 @@ qVV
qVV
qVV
qVV
-fWw
+grH
qlc
xur
nGi
@@ -92724,29 +93678,29 @@ kua
lEm
oiL
mhk
-lKu
-cXm
+kPo
+wkK
mhk
wCR
wCR
qVZ
-rlB
+kCB
rJo
sas
wCR
-rYd
-tbq
-qdm
-aeq
-qEp
-bCX
-bCX
-sei
-qDp
-sQY
-mKY
-wWT
-glM
+cXb
+iSD
+iSD
+lPB
+odH
+keL
+iSD
+gOt
+bYh
+uoR
+wBm
+fNW
+uQK
xOS
uKA
uBc
@@ -92754,8 +93708,8 @@ tuZ
tuZ
uBc
xjX
-wId
-dtj
+nPe
+nnd
vEP
gxg
djg
@@ -92939,7 +93893,7 @@ paX
rdH
gpI
ceP
-wld
+mcj
gpI
qCT
rWH
@@ -92982,37 +93936,37 @@ kIO
wnd
mhk
mhk
-wht
+sBf
mhk
mUt
wTO
uSI
-rlN
+scY
rJo
bHU
wCR
-roV
-tbq
-tSh
-aeq
-qFB
-rdK
-rDf
-sel
-rDy
-uWB
-yeu
-eTt
-tXT
-wHE
-qnz
-vtc
-vLf
-wZd
-sWJ
-xkg
-sxL
-jKm
+rik
+hyW
+iSD
+lPB
+miF
+keL
+mye
+lZT
+uoR
+iSD
+wBm
+mcI
+fyW
+bcC
+hNj
+kKh
+ebE
+iHq
+azV
+oLo
+sCq
+nXx
vEP
wXC
crJ
@@ -93188,7 +94142,7 @@ cED
nQE
rLj
gNt
-lkQ
+iIK
gKL
fMA
gFF
@@ -93239,36 +94193,36 @@ msq
laD
gSX
mhk
-wht
+jQv
mhk
wCR
wCR
wCR
-rmG
+iuF
ozO
-nuX
+rxa
wCR
-uMg
-tcB
-uMg
-uej
-uzd
-uUI
-bUf
-fVV
-szG
-wow
-pxl
-wXO
-xjh
-alh
+iSD
+tzN
+pnK
+dbZ
+wha
+bej
+spk
+iSD
+iSD
+iSD
+wAW
+wXk
+qjt
+sJv
slM
tJz
vLC
rRq
jsS
ezM
-xye
+fLJ
oZi
vEP
uQu
@@ -93478,7 +94432,7 @@ hCX
vwZ
gEM
iCw
-jDP
+bnn
lBz
mJe
iDO
@@ -93496,36 +94450,36 @@ kJb
laL
loj
mhk
-scz
+jby
mhk
mVM
aSI
xRV
-oaV
+oFy
xZS
xZS
xRV
-bUt
-tcP
-bUt
-xRV
+xZS
xRV
xRV
+rcP
xRV
+xhk
xRV
-szH
-sRv
+xZS
+xZS
xRV
-saZ
-sxw
-upj
-mTq
-wfP
-mJB
-mJB
-gvn
-toY
-eAX
+aXC
+jsJ
+mKm
+qZj
+vrS
+fKr
+sfu
+sfu
+ugb
+wrk
+wbd
lbO
ybJ
fbe
@@ -93702,7 +94656,7 @@ sHM
iqB
fdy
hnS
-sKD
+vvC
hxY
vpZ
oRj
@@ -93737,45 +94691,45 @@ wbi
wbi
wbi
hnO
-tgR
-wbi
-oDs
-rrC
-iqN
-mDq
-snc
-snc
-lVL
-snc
-nys
-snc
-nTj
-snc
-snc
-mAo
-lYU
-mmp
-mZg
+nxI
+sxZ
+qGc
+pfw
+sar
+tSA
frI
-uQi
-sfK
frI
+uIv
frI
-pfw
+aDJ
+hKV
+mZg
frI
-pPT
-xJR
-ofo
-mLi
-vsl
-ewi
-uny
-xJR
frI
-ldZ
-wXk
-sxw
-xOS
+oyp
+mXZ
+bie
+mAR
+qWG
+fkS
+tDM
+qWG
+qWG
+rvr
+qWG
+mOV
+cQG
+oUi
+twe
+qWG
+rDv
+qWG
+qWG
+ghL
+vWw
+aBo
+rZz
+tfM
nsO
uBc
tJz
@@ -93959,7 +94913,7 @@ qjx
iqB
phY
jmZ
-oJl
+agY
bDh
fPY
xkX
@@ -94010,29 +94964,29 @@ pWM
foe
jpu
lKA
-jpu
+amh
jpu
qdS
jpu
-qWm
+xfX
xmu
jpu
jpu
jpu
foe
-xmu
+jpu
lKA
+amh
jpu
jpu
-fMj
fXJ
jpu
aRJ
wRg
-gNU
-tFY
-tYb
-xOS
+rPA
+iUh
+sXs
+atS
ftX
udA
mJB
@@ -94265,31 +95219,31 @@ kfw
yeD
kJj
yjZ
+fUC
yjZ
+lCK
yjZ
-lZD
-yjZ
-nau
-yjZ
-nHB
-obm
-oAk
-oWb
-pfO
-siC
-siC
-siC
-siC
-siC
-qio
-siC
-siC
-siC
-rCd
-wXZ
-tIc
-xGc
-xOS
+dOf
+wWD
+wvk
+vkC
+fUC
+dKm
+rEJ
+fUC
+fUC
+fUC
+fUC
+fUC
+fUC
+fUC
+fUC
+uqF
+dff
+qGe
+gNP
+hzp
+atS
ftX
fnP
gvV
@@ -94521,32 +95475,32 @@ xRV
vIJ
kux
wGz
-lbh
-oAF
-riu
+yaL
+dAC
+dAC
+yaL
+fNC
+rpv
+cXh
+jVM
xeO
wMg
-qej
+xeO
+xeO
+xeO
+xeO
+kTm
+sot
+xeO
wMg
-jVM
-jVM
-ceE
-jVM
-jVM
-vkh
-vkh
-efC
-efC
-vpN
-oTo
-dHi
-vpN
-vkh
-vkh
-wBm
-tIc
-sxw
-xIy
+wMg
+wMg
+xeO
+xeO
+cUf
+gNP
+uQK
+iUH
isK
uBc
uBc
@@ -94776,36 +95730,36 @@ lEa
lWk
xRV
owR
-nAx
-tmQ
-xeO
-xeO
-xeO
-xeO
-mnn
-naO
-yfH
+wLo
+xfe
+ehT
+urq
+ddB
+yaL
+yaL
jVM
-wzj
-uPd
-row
+wRO
jVM
-puD
-pQe
-qdp
-qme
-ycS
-hWQ
-ycS
-ycS
-vUq
-uNW
-mku
-tIc
-sxw
-xuU
+rEF
+kGE
+waI
+xeO
+tnZ
+oPy
+lql
+lql
+cik
+wKr
+dsl
+wMz
+ntP
+rNL
+xeO
+gNP
+uQK
+hWm
fvh
-ogX
+abB
tCF
ncD
blb
@@ -95034,39 +95988,39 @@ jLI
xZS
vrn
nzK
-lkZ
-xeO
-lpa
-iTv
-xeO
-izB
-jFY
-xyY
+wQB
+yaL
+ids
+wgI
+uuz
+iVP
jVM
-paV
-wLJ
-ojl
+cKt
jVM
-vwg
-ycS
-tEI
-ycS
-uAF
-ree
-rFQ
-ycS
-ucV
-vkh
-oBm
-tIc
-bxA
-gYK
-wAW
-vtv
-kev
-qtl
-qtl
-qtl
+hIm
+azq
+iTv
+wMg
+wKr
+vtr
+mcV
+iGq
+uTE
+eKD
+oCi
+wFd
+wFd
+wFd
+nEq
+qie
+oCV
+kuk
+iuR
+iuR
+dDB
+dDB
+dDB
+dDB
dDB
dDB
dDB
@@ -95241,7 +96195,7 @@ gwl
pPm
jKU
qbP
-psL
+iGM
nck
tau
gKL
@@ -95291,39 +96245,39 @@ gBw
xZS
vrn
ncL
-qwz
-xeO
-wKr
-lql
-xeO
-wJV
-nbu
-xyY
-jVM
-uPd
-jVM
-sbm
+wQB
+joH
+lte
+tsB
+iGS
+oTg
+fri
+moG
jVM
-vkh
-paL
-ycS
-uAX
-uAX
-reW
-uAX
-vEq
-szM
-vkh
-qOt
-wYr
-tYd
-hgE
-jqQ
-uNn
-vOh
-qTM
-qTM
-qtl
+tPX
+gfm
+rcE
+fRX
+gAH
+mmL
+mmL
+qDC
+btY
+mUi
+xMu
+qmM
+vSi
+hEJ
+wMg
+ocv
+eZi
+kHX
+tYX
+dDB
+dDB
+dDB
+dDB
+dDB
dDB
dDB
dDB
@@ -95532,7 +96486,7 @@ sUy
muW
mOk
iap
-gSQ
+oGo
iDk
sUy
jaK
@@ -95546,41 +96500,41 @@ qCJ
xQw
jLI
jYU
-vrn
-ncL
-wQB
-wMg
-wKr
-eUW
-xeO
-eGl
-nbZ
-ntY
+pZv
+sjL
+tNf
+iiI
+hnn
+jRl
+kqZ
+buU
jVM
-uPd
+rpg
jVM
-lxK
-rnw
-sON
-vkh
-tFG
-qmx
-uBn
-iZI
-vpU
-bKP
-vkh
-vkh
-uGp
-wYr
-tYH
-mVa
-uLn
-aTr
-hyl
-wlf
-qTM
-qtl
+hdI
+kRA
+paJ
+wMg
+iZM
+fEX
+fkF
+jLS
+jkT
+oxn
+saL
+iLh
+hEJ
+hEJ
+aIi
+qWV
+eZi
+kHX
+tYX
+dDB
+dDB
+dDB
+dDB
+dDB
dDB
dDB
dDB
@@ -95803,41 +96757,41 @@ eHk
xQw
gtr
xZS
-vrn
+vET
ncL
-wQB
-dNw
-lql
-azq
-lql
-lql
-wav
-qGU
+qwz
jVM
-ydu
-qEa
-lTZ
-tOS
-crX
-gYg
-qdC
-qmI
-uCh
-vRE
-vpY
-sfh
-dks
-vkh
-tjb
-xAP
-wAW
-urh
-wAW
-vtv
-iho
-wlL
-wDZ
-iho
+jVM
+jVM
+jVM
+jVM
+jVM
+eAm
+jVM
+uCo
+bYE
+rYJ
+xeO
+gLg
+jdx
+dLW
+feR
+fZK
+qbB
+iwt
+uSh
+uSh
+kdg
+xeO
+mWF
+eZi
+kHX
+tYX
+dDB
+dDB
+dDB
+dDB
+dDB
dDB
dDB
dDB
@@ -96060,41 +97014,41 @@ iWW
uVT
uVT
uVT
-vrn
+vET
nAy
uIv
-okp
-wuw
-wuw
-jxy
-pNa
-wuw
-dfW
jVM
-uPd
jVM
-geC
-okK
-pvR
-vkh
-vzM
-qmO
-rZN
-rfI
-rHd
-vpY
-bfI
-vkh
-tkp
-cbT
-xli
-urv
-yeh
-blb
-kev
-fUj
-nnR
-iho
+rXy
+bFO
+avp
+avp
+qiI
+jVM
+jzf
+xeO
+xeO
+xeO
+sXD
+qSa
+feR
+aZh
+jdx
+pOQ
+wKr
+wKr
+kKD
+mDA
+wMg
+jrN
+eZi
+kHX
+tYX
+dDB
+dDB
+dDB
+dDB
+dDB
dDB
dDB
dDB
@@ -96317,42 +97271,42 @@ qJq
oIP
azm
xQw
-vrn
+vET
ncL
wQB
-wMg
-lqF
-lLJ
-maa
-wKr
-qgr
-ttC
-nIS
-rnY
+aaZ
jVM
-wlu
-gZR
-gVq
-vkh
-orH
-cOm
-eZJ
-vRE
-tZR
-cOm
-szS
-efC
-wEp
-qYu
+eAm
+jVM
+jVM
+jVM
+jVM
+jVM
+lzB
+jVM
+udf
+yfC
+yfC
+yfC
+qzt
+ljT
+vzE
+yfC
+yfC
+yfC
+yfC
+yfC
xli
-dDB
-dDB
-dDB
-qtl
-qTM
-qTM
-uMC
-dDB
+equ
+sYp
+ifH
+iuR
+tYX
+tYX
+iuR
+tYX
+tYX
+iuR
dDB
dDB
dDB
@@ -96574,42 +97528,42 @@ iLC
jts
wzK
eAc
-wYD
+lcY
kuE
wQB
-xeO
-guR
-wiU
-mad
-wKr
-qgA
-beH
+esr
jVM
rpg
jVM
+eXB
+eIW
+mqz
jVM
-pfU
-sON
-vkh
-glb
-vpY
-sZQ
-fzf
-rHm
-sgS
-szZ
-vkh
-wEp
-wZo
-tYX
-dDB
-dDB
-dDB
-qtl
-qTM
-qTM
-uMC
-dDB
+fgJ
+pWj
+fDX
+sZo
+yfC
+lnN
+egc
+qiC
+qiC
+qiC
+qLU
+pnF
+qiC
+mKY
+hoc
+lhT
+mfa
+diP
+rgM
+trB
+trB
+saz
+lcD
+gCl
+euz
dDB
dDB
dDB
@@ -96831,45 +97785,45 @@ eku
uVT
uVT
uVT
-lAS
+lYl
kvl
wQB
-xeO
-lti
-kGE
-mam
-wKr
-pZi
-iHL
-jVM
+lmz
+rXO
rpg
-ipt
jVM
-qqh
-hMz
-tGq
-tGq
-qnA
-xmt
-xmt
-wqs
-wqs
-wqs
-xmt
-eJY
-wZo
+uGD
+nAq
+pSI
+jVM
+fgJ
+jVM
+nrg
+xXD
+yfC
+sJV
+uIA
+mWT
+kHU
+pIC
+pIC
+oun
+wBc
+kxY
+mka
+yfG
+fVQ
+diP
+trB
+trB
+trB
+ryW
+diP
+kHX
tYX
blb
blb
blb
-qtl
-qTM
-qTM
-uMC
-blb
-blb
-blb
-blb
blb
blb
blb
@@ -97077,7 +98031,7 @@ xMk
xsh
hcc
xGJ
-wjY
+bBN
jwi
qtd
hOg
@@ -97088,46 +98042,46 @@ ghD
gaf
xQw
mvT
-vrn
+vET
kvT
-nVD
-xeO
-skI
-hzY
-sLc
-joy
-qgH
-wKr
+wQB
+cZi
jVM
-qhp
-rLw
-rsV
-pgW
-mwP
-pRP
-tGq
-xUG
-bgK
-qIP
-rHQ
-shw
-kQA
-xmt
-tmc
-wZo
+moG
+jVM
+mLT
+wWC
+gls
+jVM
+lzB
+jVM
+jfT
+dEq
+wEv
+uJi
+ntu
+jcG
+qbA
+qbA
+hLb
+tRJ
+wBc
+oIY
+bMV
+dPp
+kMA
+iuR
+tYX
+tYX
+tYX
+iuR
+nUd
+ong
+iuR
tYX
dDB
dDB
-dDB
-kev
-wmY
-uPO
-iho
-dDB
-dDB
-dDB
-dDB
-dDB
+blb
dDB
dDB
dDB
@@ -97345,46 +98299,46 @@ hMh
juS
uVT
mvT
-vrn
+vET
kyO
-smf
-xeO
-lty
-xeO
-xeO
-wMg
-dCm
-wMg
+wQB
+drC
jVM
+eAm
jVM
-rMV
+lMH
+uSb
+iYd
+onc
+lzB
jVM
-swL
-sOW
-tfa
-tHh
-qnL
-xiL
-rgc
-rgc
-shU
-dvl
-luU
-tmV
-wZo
+oEz
+ptT
+yfC
+lZf
+qCK
+bRK
+bRK
+aTz
+qRE
+ltr
+wBc
+usA
+bMV
+dPp
+kUL
tYX
+blb
+blb
dDB
+tYX
+trB
+trB
+trB
+tYX
dDB
dDB
-kev
-uPO
-mjB
-iho
-dDB
-dDB
-dDB
-dDB
-dDB
+blb
dDB
dDB
dDB
@@ -97602,46 +98556,46 @@ cpT
xQv
xQw
mvT
-vrn
+vET
ncL
-uUE
-xeO
-oCc
-xeO
-ctc
-joy
-qgN
-jVg
-qbi
+wQB
+ydz
jVM
-rMY
+lEO
jVM
-sPE
-pvS
-tGq
-tGq
-poh
-ono
-rgx
-rIg
-prQ
-uXb
-sSr
-kcs
-wYV
-xli
-blb
-blb
-blb
-qtl
-wlf
-qTM
-uMC
-dDB
+jVM
+jVM
+jVM
+jVM
+joR
+jVM
+vyP
+xnb
+yfC
+edG
+wBc
+qiC
+qiC
+ghj
+wBc
+wBc
+jgx
+mKY
+bMV
+djf
+kUL
+tYX
dDB
+blb
dDB
+tYX
+lcF
+trB
+trB
+tYX
dDB
dDB
+blb
dDB
dDB
dDB
@@ -97859,46 +98813,46 @@ xYO
xYO
xYO
xYO
-qlV
-oGJ
+lXU
+rJZ
wQB
-xeO
-oCc
-xeO
-kTd
-mnu
-iZc
-omA
-vzI
jVM
-vXW
jVM
-siz
-sPT
-lej
-tGq
-voF
-qGw
-uVE
-rgx
-prQ
-chP
-xmt
-qqq
-tIA
-xli
-dDB
-dDB
-kev
-kev
-oxS
-usl
-iho
-iho
-dDB
-dDB
-dDB
+pXU
+avp
+bFO
+avp
+csZ
+mMO
+obi
+jVM
+jVM
+cJv
+yfC
+yfC
+erf
+bKd
+tkm
+yfC
+oUV
+tQC
+yfC
+yfC
+aub
+dPp
+lir
+iuR
+blb
+blb
+blb
+iuR
+iuR
+bnU
+bnU
+iuR
+tYX
dDB
+blb
dDB
dDB
dDB
@@ -98116,51 +99070,51 @@ oXK
uAY
uAY
xRU
-vrn
-oGJ
-wVZ
-xeO
-oBV
-xeO
-mjs
-mpC
-qhm
-xBK
-iuL
+vET
+rJZ
+wQB
jVM
-vXW
jVM
-fjF
-pww
-pRU
-tGq
-qon
-uXb
-uXw
-rgx
-prQ
-sBp
-xmt
-wEp
-tIL
+jVM
+jVM
+jVM
+jVM
+jVM
+jVM
+ksJ
+emp
+xym
+mgW
+isO
+aiQ
+nVw
+jJd
+uyV
+kcM
+eRa
+eRa
+vfo
+pkU
+lUl
+urf
+cPj
tYX
dDB
dDB
-qtl
-suq
-wnB
-uth
-uMW
-uMC
-dDB
+blb
dDB
+tYX
+iNF
+diP
+fVM
+tYX
+blb
+blb
uXY
uXY
uXY
uXY
uXY
-blb
-dDB
dDB
dDB
blb
@@ -98373,53 +99327,53 @@ iYh
lZt
lZt
xYO
-hBK
-dTS
+uBI
+kTX
sbU
-xeO
-oCc
-xeO
-maz
-mqc
-xfw
-fcM
+xZS
+lHp
+tjs
+qqH
+kBM
+blC
jVM
+gLo
+cTn
+ajQ
jVM
-nKk
-rgf
-kWF
-pxO
-gHt
-tGq
-scC
-qGY
-uXb
-rIS
-prQ
-oYu
-sSt
-tqq
-wYF
+aLB
+ilx
+qEO
+fQd
+oNF
+sGN
+bzj
+tmD
+lEs
+jUr
+uMg
+msk
+wmX
+kUL
tYX
-dDB
-dDB
-qtl
-jSK
-qpg
-uuv
-uMX
-uMC
blb
blb
+blb
+blb
+tYX
+iNF
+trB
+fOW
+tYX
+dDB
+dDB
uXY
dvo
hkW
rLN
uXY
uXY
-dDB
-dDB
-dDB
+blb
blb
dDB
dDB
@@ -98630,44 +99584,46 @@ xYO
xYO
xYO
xYO
-mZh
-rbU
-uIv
-voa
-uZY
-xeO
-xeO
-xeO
-jVM
-jVM
+ujB
+dtO
+gwx
+aNj
+jvd
+fEF
+nlQ
+chI
+mTT
jVM
-obU
-ggq
+tpQ
+keb
jVM
-jVM
-jVM
-jVM
-jVM
-voL
-uXb
-uXb
-rJh
-vEI
-sxd
+tGq
+tGq
+xmt
+xmt
+lAt
+xmt
+xmt
+xmt
+ouF
+xmt
xmt
-wEp
-tIL
xli
+iFD
+fzT
+kUL
+tYX
+blb
+aef
+fBN
dDB
-dDB
-kev
-bjV
-qBy
-uwl
-kdl
-vPC
-qtl
-qtl
+tYX
+tKl
+trB
+oIS
+iuR
+anX
+anX
uXY
iTn
nBw
@@ -98675,8 +99631,6 @@ nId
mpk
uXY
dDB
-dDB
-dDB
blb
dDB
dDB
@@ -98885,55 +99839,55 @@ myT
iMg
iYj
sDp
-vjx
+gZy
kke
-kgz
+laK
oGJ
wQB
-xeO
-lus
-uZY
-wvn
-uZY
-ndq
-nuv
-nKm
-aoJ
-aBy
-mAn
-wzj
-atM
-cNF
+xZS
+dib
+woz
+uvs
+mpx
+oxy
jVM
-qpX
-qHm
-aes
-rJl
-hBr
-vUG
+tpQ
+jVM
+tGq
+nxy
+tGq
+sxl
+aTg
+oPh
+qDL
+jKV
+vTP
+rpo
+mjr
xmt
-ffX
-tJG
-xli
-blb
-blb
-qtl
-qTM
-vHL
-ozd
-fYp
-xbP
-hYm
-rUB
-uvh
+ptf
+xBd
+qXP
+kTF
+iuR
+dDB
+eVX
+qGf
+blb
+iuR
+oqT
+trB
+xrE
+wZx
+lRU
+fOJ
+bgx
xcv
nBw
ghQ
nId
uXY
dDB
-dDB
-dDB
blb
blb
blb
@@ -99144,52 +100098,52 @@ opn
jwa
opn
jYY
-aEl
+jrl
oGJ
wQB
-xeO
-xeO
-xeO
-puw
-xeO
-jVM
-uPd
-wzj
-jVM
-jVM
-ceE
-jVM
-jVM
+xZS
+sRT
+hdW
+auP
+kGw
+vQx
jVM
+lzB
jVM
-efj
-xKa
-xKa
-rJv
-tax
-vUZ
-qKE
-wEp
-tJD
-xli
-dDB
+haH
+hHn
+tGq
+ipG
+aTg
+cri
+bOG
+uRv
+als
+cXH
+nZG
+xmt
+liw
+rzy
+qFc
+cEo
+tYX
dDB
-kev
-kst
-qSU
-uwx
-agC
-kqo
-qtl
-qtl
+kii
+nun
+blb
+tYX
+rNN
+trB
+bNL
+iuR
+anX
+anX
uXY
hzb
erK
iPj
bob
uXY
-nnk
-dDB
dDB
blb
dDB
@@ -99401,53 +100355,53 @@ iYD
jLR
jLR
xMY
-tSe
-oGJ
-wQB
-wix
-xeO
-hee
-mbK
-mqz
+dCu
+tsO
+eBC
+bPv
+jVM
jVM
-uPd
jVM
+mbf
jVM
-mRp
-aeN
-lSw
-hym
-fhC
-mKH
-qrw
-xCu
-rij
-xCu
-xCu
-xCu
-asN
-wEI
-tIL
+jVM
+ulE
+jVM
+amK
+anD
+rzH
+mog
+aTg
+jwt
+xdy
+jUA
+tOK
+aTg
+aTg
+xUp
+sWq
+gLO
+pbD
+kUL
tYX
-dDB
-dDB
-qtl
-jSK
-rjz
-uxi
-uMX
-vnb
blb
blb
+dDB
+dDB
+tYX
+iNF
+trB
+fjq
+tYX
+dDB
+dDB
uXY
cHX
qYh
qXG
uXY
uXY
-dDB
-dDB
-dDB
+blb
blb
dDB
dDB
@@ -99658,51 +100612,51 @@ qTD
azv
jNe
psc
-tSe
+dCu
oGJ
wQB
xAV
-xeO
-lMy
-iJN
-pSI
+ngv
+nCX
jVM
-qhp
-rpy
+tUj
+xXe
jVM
-gTV
-oXt
-xCu
-xCu
-xCu
-xCu
-xCu
-uCv
-ril
-vVw
-vFv
-vVw
-lJc
-wEp
-tIL
+ruS
+sem
+bxl
+uZy
+tGq
+fvK
+aTg
+pXH
+wKX
+nDm
+tOK
+aTg
+aTg
+xUp
+bIN
+bVJ
+sTb
+kUL
tYX
dDB
-dDB
-qtl
-rOy
-rrx
-uyg
-uOh
-vnb
-dDB
-dDB
+blb
+blb
+blb
+tYX
+iNF
+hrc
+fjq
+tYX
+blb
+blb
uXY
uXY
uXY
uXY
uXY
-blb
-dDB
dDB
dDB
blb
@@ -99914,45 +100868,45 @@ xMY
xMY
xMY
xMY
-xMY
-tUK
+voN
+sta
oGJ
wQB
vpT
-xeO
-lMz
-vXo
-pSK
+txW
+eDi
jVM
+tUj
jVM
-nKL
jVM
-oAp
-iBg
-sze
-pya
-tgS
-sze
-wkk
-vVw
-vVw
-oAp
-vFE
-tPd
-sTp
-jFf
-tKm
-xli
-dDB
-dDB
-kev
-kev
-oxS
-uLu
-mVY
-mVY
-dDB
+tpQ
+jVM
+ljg
+waY
+tGq
+cME
+aTg
+dYu
+aTg
+aTg
+aTg
+dYu
+ctN
+xmt
+wUc
+nUd
+bmY
+lir
+iuR
+blb
+blb
dDB
+iuR
+iuR
+ifH
+ifH
+iXi
+tYX
dDB
dDB
dDB
@@ -100140,7 +101094,7 @@ cRI
dbs
fkj
wct
-edU
+vRg
fKc
eVz
fTe
@@ -100172,53 +101126,53 @@ hHF
lGo
jNO
geE
-tWL
+wCM
oGJ
wQB
-ycx
-xeO
-lMH
-cnu
+eIO
+xND
+ind
jVM
+oZy
+pMc
+pMc
+uvx
jVM
-xCz
-rpg
-jVM
-dNI
-vLO
-piZ
-pyS
-gal
-vgc
-wkk
-qJa
-vVw
-rJT
-sih
-oup
-sTp
-wEp
-tIA
+tGq
+tGq
+tGq
+xmt
+ohy
+wLa
+xJv
+luD
+jvL
+mbC
+xmt
+xmt
xli
+dQY
+bmY
+kUL
+tYX
+dDB
blb
+dDB
+tYX
+auF
+trB
+trB
+waD
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
blb
-blb
-qtl
-qTM
-qTM
-vnb
-blb
-blb
-blb
-blb
-blb
-blb
-blb
-blb
-blb
-blb
-blb
-blb
+dDB
+dDB
+dDB
blb
dDB
dDB
@@ -100429,50 +101383,50 @@ oUd
lun
wNv
mzM
-tWL
+wCM
kyZ
kJR
+qcB
jVM
jVM
jVM
+cLy
jVM
-jVM
-xhQ
-nLN
-cyh
-jVM
-jVM
-jVM
-jVM
-jVM
-jVM
-jVM
-qrI
-qKE
-riM
-qKE
-qKE
-qKE
-sTp
-vQA
-tIL
+sON
+aYj
+vkh
+vkh
+vkh
+pnW
+baW
+iQe
+iQe
+ssR
+ssR
+ssR
+ssR
+aVA
+dfc
+vkh
+wjT
+dPp
+kUL
tYX
dDB
+blb
dDB
-dDB
-kev
-uPO
-mjB
-mVY
-dDB
-dDB
-dDB
+tYX
+trB
+trB
+trB
+waD
dDB
dDB
dDB
dDB
dDB
dDB
+blb
dDB
dDB
dDB
@@ -100686,53 +101640,53 @@ soO
gfs
ivl
mzM
-tWL
+wCM
uFG
-vpI
+tgx
jVM
-vML
-atM
-mdj
-jVM
-uPd
-jVM
-nKX
-jVM
-fSq
-hwN
-kXO
-pyY
-pSm
+jnO
+pSO
+wzj
+vEY
jVM
-qrN
-ttA
-ttA
-ttA
-ttA
-sBz
-xvW
-tqz
-tIL
+oVl
+uBN
+vkh
+eNM
+vkh
+mce
+ohK
+rrX
+tyz
+dJv
+rVt
+rVt
+rVt
+scR
+sfU
+vkh
+nUd
+dPp
+aOt
+iuR
tYX
-dDB
-dDB
-dDB
-kev
-wmY
-uPO
-mVY
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
+tYX
+tYX
+iuR
+iNF
+xuJ
+iXi
+waD
+blb
+blb
+blb
+blb
+blb
+blb
+blb
+blb
+blb
+blb
blb
dDB
dDB
@@ -100943,42 +101897,42 @@ xSx
jxC
ufb
xCl
-tYQ
+cYY
kzu
wiF
jVM
jVM
-lMK
-jVM
jVM
-xjq
jVM
-tII
-oeF
-kGS
-kGS
-kGS
-kSV
-pSr
-jVM
-qsA
-uCJ
-rjb
-rKL
-siv
-sED
-rNq
-tmV
-tIL
-tYX
-blb
-blb
-blb
-qtl
-qTM
-qTM
-vnb
-dDB
+hHj
+eoM
+cqD
+vYJ
+kTr
+dMi
+vkh
+caW
+jMA
+tes
+rPX
+ycS
+aMZ
+kRs
+qsY
+ycS
+fxW
+vkh
+nUd
+dPp
+aww
+xuJ
+trB
+trB
+hML
+deR
+diP
+efm
+waD
dDB
dDB
dDB
@@ -101168,7 +102122,7 @@ eND
dbz
fkj
wct
-fEV
+bGq
eBN
fQY
fTh
@@ -101205,40 +102159,40 @@ dIN
mwN
jVM
vMV
-jbL
-xkS
-pTC
-wLJ
+eWC
+eWC
+fUz
jVM
-ygd
-jVM
-mBy
-wzj
-kGS
-qCC
-jVM
-jVM
-cmH
-qKN
-wLA
-rNA
-siP
-qTL
-jme
-tqK
-tIL
+iXW
+dRb
+vkh
+tjT
+svE
+lAV
+fYJ
+eGU
+eTJ
+vkI
+xNA
+wuY
+oeZ
+luP
+jFK
+hiD
+nUd
+dPp
+aww
+vtX
+gHg
+trB
+trB
+kHX
+kHX
+dTg
tYX
dDB
dDB
dDB
-qtl
-qTM
-qTM
-vnb
-dDB
-dDB
-dDB
-dDB
dDB
dDB
dDB
@@ -101458,41 +102412,41 @@ quU
quU
tsF
ubK
-uFG
-gih
-lca
-oEN
-lMN
-jVM
-hcB
-mAn
-jVM
-jVM
+buv
+lZW
+wKM
+oFM
+hPb
jVM
+cCe
jVM
-wzj
-omU
-uAH
-jVM
-wnK
-clc
-asn
-rkb
-rOm
-skY
-sED
-sXk
-wEp
-tKC
-xli
-dDB
-dDB
-dDB
-qtl
-qTM
-qTM
-vnb
-dDB
+kPp
+dsP
+vkh
+bzJ
+lnD
+fzw
+bKO
+eGU
+eTJ
+luE
+kfO
+phG
+gyy
+ycS
+jFK
+tnj
+nUd
+dPp
+aqf
+xcK
+iXi
+waD
+waD
+iXi
+waD
+waD
+iuR
dDB
dDB
dDB
@@ -101722,34 +102676,34 @@ jVM
jVM
jVM
jVM
-qhp
-sfX
-nLN
-rpy
-jVM
-jVM
-jVM
jVM
-jVM
-nAi
-uio
-xOB
-xOB
-xOB
-xOB
-sFJ
-xvW
-tkp
-tMi
-xli
-urv
-yeh
-blb
-kev
-fUj
-uPO
-mVY
-blb
+sON
+sON
+vkh
+mae
+ksm
+opV
+fVl
+eGU
+ebk
+vkI
+vYW
+mDf
+aYU
+ycS
+mno
+vkh
+nUd
+dPp
+qBn
+nsz
+iuR
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
blb
qIf
qIf
@@ -101941,7 +102895,7 @@ xvT
itb
eip
eFk
-eYn
+gPm
xvT
fDk
gcL
@@ -101978,34 +102932,34 @@ tgl
iSi
fLn
mLU
-jVM
-jVM
-jVM
-jVM
-pXU
-mAn
-jVM
-waS
-pzn
-xvW
-xvW
-qtW
-rRn
-rRn
-rRn
-rRn
-sIh
-xvW
-gXD
-tMj
-yeh
-uyp
-yeh
-urv
-mVY
-sDT
-wHX
-mVY
+tgl
+tgl
+tgl
+vkh
+kXC
+omk
+hsx
+pJc
+bKO
+eGU
+xQE
+vkI
+cIX
+ofU
+omb
+ycS
+lJm
+vkh
+elN
+dPp
+sFs
+fZZ
+tYX
+dDB
+dDB
+dDB
+dDB
+dDB
dDB
dDB
qIf
@@ -102237,32 +103191,32 @@ pbd
wtv
hxp
qhs
-qIg
-jVM
-jVM
-uPd
-jVM
-vsq
-pbZ
-pTl
-xvW
-qtW
-xzp
-rOx
-rOx
-rOx
-sIh
-xvW
-lWb
-mpO
-lmo
-vcP
-uPs
-fHb
-npY
-qTM
-qTM
-qtl
+oRv
+vkh
+cWB
+ccv
+tVp
+ioa
+fBB
+eGU
+eTJ
+wAa
+oDX
+bFd
+iBa
+grI
+ejX
+ove
+nUd
+dPp
+jjZ
+bje
+tYX
+dDB
+dDB
+dDB
+dDB
+dDB
dDB
dDB
qIf
@@ -102302,7 +103256,7 @@ nFD
ljP
pKS
bkY
-lVP
+lgQ
mbq
wgL
hgF
@@ -102492,34 +103446,34 @@ tgl
lvA
nyy
diK
-rTt
-xkW
-nAO
-yiv
-ofk
-cyh
-jVM
-naI
-ogu
-xrz
-xvW
-qui
-vqp
-rkF
-rQt
-uEg
-tNc
-xvW
-hlo
-tMy
-tZG
-aiE
-waw
-uNn
-vOh
-qTM
-qTM
-qtl
+xvK
+jgb
+hRc
+vkh
+mkD
+mpB
+dxV
+bKO
+bKO
+eGU
+eTJ
+wAa
+cQN
+bXR
+cmB
+ycS
+swW
+ove
+nUd
+eXZ
+qBn
+sMt
+tYX
+dDB
+dDB
+dDB
+dDB
+dDB
dDB
dDB
qIf
@@ -102749,34 +103703,34 @@ tgl
wHO
pbG
wvv
-rTt
+xvK
vGe
-crV
-jVM
-rUS
-rOb
-htI
-awN
-sQA
-xrz
-xvW
-quo
-uEg
-pCX
-vqp
-slv
-bOV
-xvW
-twf
-tMR
-tZV
-xtZ
-yeh
-urv
-kev
-qtl
-qtl
-qtl
+xno
+vkh
+vkh
+mru
+vkh
+wtw
+wtw
+pzW
+lTy
+wAa
+fIl
+fIl
+glA
+ycS
+jFm
+ove
+nUd
+vip
+kmz
+fGT
+tYX
+dDB
+dDB
+dDB
+dDB
+dDB
dDB
dDB
qIf
@@ -103006,29 +103960,29 @@ tgl
tgl
tgl
tgl
-wRD
-hRc
-hoU
-jVM
-rOb
-rhD
-jVM
-sZn
-pzX
-vII
-ygB
-xNL
-eQv
-qmf
-vrv
-pFr
-uCS
-xvW
-twj
-mpO
-ubf
-oEr
-yeh
+uIP
+dsK
+pHY
+vkh
+blB
+wKH
+lso
+wOt
+wOt
+gGx
+xtD
+gIv
+cAl
+wOt
+wOt
+wOt
+cvX
+vkh
+aWf
+vip
+duE
+aOh
+xli
blb
blb
blb
@@ -103260,32 +104214,32 @@ vrn
uFG
smf
aCO
-lwa
+iLA
pcK
tgl
-mtV
+qDd
xHD
xHD
-jVM
-jiN
-jVM
-jVM
-xvW
-xvW
-xvW
-xvW
-xvW
-xvW
-xvW
-xvW
-xvW
-xvW
-sXo
-twl
-mpO
-amI
-uAb
-yeh
+vkh
+dGm
+vkh
+vkh
+vkh
+efC
+vkh
+mib
+vfM
+vkh
+fap
+fap
+fap
+vkh
+vkh
+bnU
+mVc
+giB
+axd
+xli
qir
qir
qir
@@ -103516,13 +104470,13 @@ tsF
kiO
nDV
wNW
+coC
+pVj
+pVj
+cRL
+ose
vpI
-vpI
-vpI
-pwO
-sfK
-vpI
-vpI
+aBB
nMW
tEL
rQN
@@ -103531,18 +104485,18 @@ rZq
vpI
pBu
vpI
-vpI
-oXZ
-rQN
-vpI
-pwO
-sIG
-vpI
-xDs
-mpO
-ucr
-xIK
-uQC
+lvr
+aGq
+khY
+khY
+khY
+lmz
+uLK
+diP
+prt
+gaj
+jXJ
+mxS
jeW
pvY
xry
@@ -103550,7 +104504,7 @@ ppu
wSF
qir
kIS
-wfU
+lBq
csw
tlX
rVH
@@ -103773,41 +104727,41 @@ tsF
kjg
oXV
kJX
-xIw
+kQc
vrH
xIw
xIw
-fqL
-dRh
+icN
+mZd
sDZ
-vnK
+pca
uVo
oBA
mut
pjA
mut
-iEE
-xIw
+otJ
xIw
+rTl
xIw
rlh
vrH
xIw
-vYt
-xyJ
-wFl
-sFH
-vuL
-xIK
-ygu
-mHb
-ona
-xEC
-ona
-uXB
+fFr
+ddG
+hUj
+hWG
+huj
+fIj
+uhM
+qZy
+vCO
+lKB
+vCO
+ile
wMZ
vnN
-ybL
+aEo
pOm
lwk
gUn
@@ -104027,10 +104981,10 @@ gcz
jyM
uoB
jZn
-mxN
+baJ
rji
vAw
-nvE
+ceS
nvE
nvE
nvE
@@ -104040,31 +104994,31 @@ vCZ
uQi
nvE
oCx
-nvE
+crx
rFn
nvE
-eWA
+tPM
kfM
-fKO
-hvM
-hvM
-hvM
-hvM
-hvM
-hvM
-ouf
-wZE
-ucH
-xIM
-yfj
+cRc
+aPK
+aPK
+aPK
+aPK
+mcS
+rLA
+dRT
+loN
+nNz
+inU
+fsb
bcv
kov
viy
efB
-kov
+lJg
xyh
xRI
-ycZ
+lJg
hVh
elM
pYr
@@ -104285,9 +105239,9 @@ jzo
uoB
uoB
wSZ
-dRf
-xqC
-bOp
+moj
+xpL
+nJj
dyF
lNp
xRA
@@ -104300,27 +105254,27 @@ qUt
qUt
qUt
qUt
-tZd
+fNZ
qUt
qUt
xJB
vYy
vrO
vYy
-vYy
+xJB
xJB
xJB
wZO
xpU
-uAw
-yga
-rbo
-vCO
-wnO
-jpK
-vCO
-lhg
-xSp
+uBY
+ygu
+mHb
+ona
+nkW
+riS
+ihd
+gMM
+gBg
dUC
qTK
vnF
@@ -104557,8 +105511,8 @@ qUt
uZK
ptl
ptl
-dSK
-gZo
+wrZ
+mvd
qUt
rnc
ugH
@@ -104786,7 +105740,7 @@ gKg
xbl
uhI
yhW
-hAQ
+clV
gcz
hyv
fyH
@@ -104815,8 +105769,8 @@ qUt
aIb
qUt
qUt
-aGH
-uiW
+uLD
+vmr
qLt
vrY
vrY
@@ -106348,7 +107302,7 @@ oyn
fSU
fRV
skd
-skd
+ciV
rrp
wqj
aTb
@@ -107128,7 +108082,7 @@ knO
adh
hbz
vIC
-gfJ
+hdZ
wua
wua
wua
@@ -107385,7 +108339,7 @@ wqj
qUt
qUt
qUt
-gfJ
+hdZ
qUt
dWW
tnb
@@ -107641,8 +108595,8 @@ gmf
qva
nqf
qUt
-tnb
-tnb
+tNs
+tNs
qUt
uEP
gfJ
@@ -107898,7 +108852,7 @@ cPp
wqj
wrx
qUt
-gfJ
+hdZ
qUt
qUt
qUt
@@ -108155,7 +109109,7 @@ eeJ
eeJ
eeJ
qUt
-gfJ
+hdZ
tnb
tnb
tnb
@@ -108412,7 +109366,7 @@ gMq
duT
gtk
qUt
-gfJ
+hdZ
tnb
qUt
tkq
@@ -108669,12 +109623,12 @@ rsZ
jQB
kAJ
qUt
-umM
tNs
-umM
-qNz
-umM
-rSj
+tNs
+tNs
+tNs
+tNs
+rbW
spP
bRt
wsb
@@ -109183,12 +110137,12 @@ opN
eeJ
eeJ
qUt
-uiW
+xrc
qUt
-htt
-wvP
-jQg
-vuo
+odD
+mtc
+deS
+wua
sqA
sJi
wty
@@ -109438,14 +110392,14 @@ ohr
rqD
opN
xEM
-yaL
-xeY
-iLq
-pxg
-tZU
-jNJ
-aoy
-vuo
+qUt
+eqG
+mHh
+nNA
+rHY
+mIP
+skN
+wua
wWX
blf
unf
@@ -109471,9 +110425,9 @@ aZL
ciR
mwu
yeP
-aXg
+enq
ivY
-vuK
+nLM
ssz
ssz
kHo
@@ -109695,14 +110649,14 @@ fvj
uDz
jXB
nYs
-yaL
-gYX
-gYX
-jRI
-qhi
-tFg
-lRD
-vuo
+qUt
+ffi
+mHh
+uqq
+qOG
+pXk
+cCv
+wua
wtX
wtX
wtX
@@ -109952,14 +110906,14 @@ fcU
rem
xvM
uDE
-yaL
-oQD
-oWp
-dEV
-rrV
-rMM
-jLh
-yaL
+qUt
+lhi
+brw
+mnl
+uOx
+llY
+rdA
+qUt
sqY
ata
taZ
@@ -110209,14 +111163,14 @@ pzd
iIs
axw
shD
-yaL
-mzc
-mzc
-tNS
-yaL
-qTP
-yaL
-yaL
+qUt
+qnb
+qnb
+oJx
+qUt
+izo
+qUt
+qUt
srA
lrH
aaH
@@ -112019,7 +112973,7 @@ vDX
vDX
xww
vDX
-twR
+eDr
xdc
xtL
xQW
@@ -113052,7 +114006,7 @@ tPm
fTM
bAs
ykL
-vAo
+lJB
oah
wtt
fDQ
@@ -114051,15 +115005,15 @@ fcW
jVY
cvk
nFW
-pQO
-hDm
-jpp
-trc
-rBK
-jpp
-wsX
-cij
-pzd
+uvG
+siN
+ngd
+nuV
+sue
+ngd
+cUB
+baO
+pOT
gMz
rem
rQA
@@ -114308,15 +115262,15 @@ xUy
rEd
aWb
nFW
-beR
-rvH
-ucw
-dzq
-jpp
-nsH
-cIC
-cij
-pzd
+pTA
+hEw
+bWp
+gjn
+ngd
+ibF
+diG
+baO
+pOT
ycQ
rem
nvB
@@ -114565,13 +115519,13 @@ eav
eav
nFW
nFW
-pzd
-pzd
-bED
-vjc
-ncs
-mKs
-pzd
+pOT
+pOT
+tlJ
+cYp
+jTC
+eOX
+pOT
xQJ
xQJ
xQJ
@@ -114823,12 +115777,12 @@ tLj
wOp
fsq
iRl
-pzd
-pzd
-eYT
-pzd
-pzd
-pzd
+pOT
+pOT
+pTk
+pOT
+pOT
+pOT
xqs
xMO
xQJ
@@ -115840,267 +116794,267 @@ aJq
aJq
aJq
aJq
-aJq
-aJq
-wOp
-rds
-hcT
-wOp
-wny
-bua
-wOp
-vZK
-dTd
-ghX
-kgw
-xvV
-xQJ
-xQJ
-bfE
-rIo
-xQJ
-ohN
-oUC
-oPM
-sDj
-uqw
-uqw
-uqw
-uqw
-vMC
-eJm
-noe
-hYK
-pNO
-iyt
-vMC
-wMP
-uUf
-biM
-ylo
-ylq
-cRn
-gsh
-euR
-xIk
-xIk
-xIk
-xIk
-xIk
-euR
-hok
-oOh
-aXI
-qHY
-wML
-wMH
-wMH
-aSy
-aSy
-aFY
-pWZ
-qZe
-xvF
-eqz
-cLS
-hOl
-eWI
-eWI
-wNZ
-idF
-eWI
-gpf
-ycE
-ycE
-ycE
-ycE
-ycE
-ycE
-ycE
-cOW
-aLr
-tqX
-kfy
-svs
-svs
-svs
-svs
-grm
-svs
-jUl
-svs
-grm
-svs
-svs
-blb
-blb
-blb
-fDS
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-"}
-(162,1,1) = {"
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-dDB
-aJq
-aJq
-aJq
-aJq
+aJq
+aJq
wOp
+rds
+hcT
wOp
+wny
+bua
+wOp
+vZK
+dTd
+ghX
+kgw
+xvV
+xQJ
+xQJ
+bfE
+rIo
+xQJ
+ohN
+oUC
+oPM
+sDj
+uqw
+uqw
+uqw
+uqw
+vMC
+eJm
+noe
+hYK
+pNO
+iyt
+vMC
+wMP
+uUf
+biM
+ylo
+ylq
+cRn
+gsh
+euR
+xIk
+xIk
+xIk
+xIk
+xIk
+euR
+hok
+oOh
+aXI
+qHY
+wML
+wMH
+wMH
+aSy
+aSy
+aFY
+pWZ
+qZe
+xvF
+eqz
+cLS
+hOl
+eWI
+eWI
+wNZ
+idF
+eWI
+gpf
+ycE
+ycE
+ycE
+ycE
+ycE
+ycE
+ycE
+cOW
+aLr
+tqX
+kfy
+svs
+svs
+svs
+svs
+grm
+svs
+jUl
+svs
+grm
+svs
+svs
+blb
+blb
+blb
+fDS
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+"}
+(162,1,1) = {"
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+dDB
+aJq
+aJq
+aJq
+aJq
+wOp
+gRH
wOp
wOp
nWk
@@ -117184,7 +118138,7 @@ sYa
yfs
hPU
xKX
-wzU
+fKN
xMc
xKX
jsa
@@ -118456,7 +119410,7 @@ wHg
mbZ
xia
jYr
-jbc
+oaY
lZB
ivz
jYr
@@ -119239,7 +120193,7 @@ pXQ
kwA
xaR
sYa
-qiO
+pxW
xlP
gpy
xlP
@@ -121041,7 +121995,7 @@ wos
sXw
vVX
sTK
-tUD
+hGr
vbQ
iVE
ksg
@@ -121279,7 +122233,7 @@ cyx
xok
upe
xok
-cWT
+avr
nuo
eQt
eQt
@@ -121522,7 +122476,7 @@ oyQ
pVa
qjh
qzL
-qYq
+kbI
xok
vhC
sHV
@@ -121812,7 +122766,7 @@ wos
udv
tSq
mvo
-izw
+hGr
bFw
ulK
cdn
@@ -122839,7 +123793,7 @@ ifa
ifa
ifa
ifa
-sFD
+kmP
vLi
tQr
ifa
@@ -124369,9 +125323,9 @@ oZz
xZJ
aVT
enG
-enG
-enG
-enG
+xHb
+xHb
+xHb
pHS
xpR
kQt
@@ -125648,7 +126602,7 @@ dDB
dDB
blb
yeZ
-ccH
+iyr
dEL
wVg
nzL
@@ -126162,7 +127116,7 @@ blb
blb
nzL
yeZ
-xQx
+iHv
lDw
fKd
lDw
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 57ff65acf22af..ea6076af43a99 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -386,22 +386,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/cargo/sorting)
-"aeE" = (
-/obj/structure/table/reinforced,
-/obj/item/stack/package_wrap,
-/obj/item/stack/cable_coil{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/stack/cable_coil,
-/obj/item/stock_parts/cell/high,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/radio/intercom/directional/north,
-/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/construction/mining/aux_base)
"aeF" = (
/turf/open/floor/plating,
/area/station/construction/mining/aux_base)
@@ -882,11 +866,8 @@
pixel_x = 3
},
/obj/structure/window/reinforced/spawner/directional/north,
-/obj/item/gun/energy/e_gun/dragnet{
- pixel_y = 4
- },
-/obj/item/gun/energy/e_gun/dragnet,
/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/effect/spawner/random/armory/dragnet,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/security/armory)
"alG" = (
@@ -2246,6 +2227,18 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron,
/area/station/command/heads_quarters/qm)
+"aBf" = (
+/obj/structure/table/glass,
+/obj/item/folder/blue{
+ pixel_x = 4;
+ pixel_y = 4
+ },
+/obj/item/folder/white,
+/obj/item/pen,
+/obj/machinery/computer/security/telescreen/cmo/directional/south,
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/turf/open/floor/iron/white,
+/area/station/command/heads_quarters/cmo)
"aBn" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -2719,15 +2712,15 @@
pixel_x = -2;
pixel_y = 3
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 2;
pixel_y = 2
},
-/obj/item/clothing/mask/cigarette/cigar/cohiba{
+/obj/item/cigarette/cigar/cohiba{
pixel_x = 3;
pixel_y = 1
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 4
},
/obj/effect/turf_decal/tile/blue/half/contrasted{
@@ -3055,6 +3048,17 @@
dir = 4
},
/area/station/commons/fitness/recreation)
+"aLM" = (
+/obj/machinery/computer/security/telescreen/prison/directional/east,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/machinery/light/directional/east,
+/turf/open/floor/iron,
+/area/station/security/execution/transfer)
"aLN" = (
/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{
dir = 4
@@ -5386,14 +5390,6 @@
/obj/effect/turf_decal/box/red,
/turf/open/floor/iron/dark/textured_large,
/area/station/science/xenobiology)
-"bpL" = (
-/obj/structure/table/reinforced,
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/cell_charger,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/iron,
-/area/station/engineering/main)
"bpM" = (
/obj/effect/spawner/random/engineering/tracking_beacon,
/obj/effect/landmark/event_spawn,
@@ -6193,15 +6189,15 @@
"bAS" = (
/obj/structure/table/wood,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/item/clothing/mask/cigarette/cigar/havana{
+/obj/item/cigarette/cigar/havana{
pixel_x = 2;
pixel_y = 2
},
-/obj/item/clothing/mask/cigarette/cigar/cohiba{
+/obj/item/cigarette/cigar/cohiba{
pixel_x = 6;
pixel_y = 2
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = -2;
pixel_y = 2
},
@@ -6678,6 +6674,17 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/herringbone,
/area/station/cargo/miningoffice)
+"bFD" = (
+/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 8
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"bFS" = (
/obj/effect/turf_decal/trimline/blue/filled/warning,
/obj/structure/cable,
@@ -6892,6 +6899,14 @@
/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance,
/turf/open/floor/iron,
/area/station/maintenance/fore)
+"bHr" = (
+/obj/structure/table/reinforced,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/cell_charger,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron,
+/area/station/engineering/main)
"bHA" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/door/airlock/maintenance_hatch{
@@ -7690,15 +7705,6 @@
/obj/machinery/airalarm/directional/north,
/turf/open/floor/plating,
/area/station/ai_monitored/turret_protected/aisat_interior)
-"bRC" = (
-/obj/machinery/cell_charger,
-/obj/structure/table/reinforced,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/station/ai_monitored/turret_protected/aisat_interior)
"bRD" = (
/obj/structure/sign/nanotrasen,
/turf/closed/wall/r_wall,
@@ -8044,6 +8050,20 @@
/obj/effect/turf_decal/tile/neutral/full,
/turf/open/floor/iron/large,
/area/station/security/checkpoint/escape)
+"bUN" = (
+/obj/structure/table,
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/machinery/cell_charger,
+/obj/item/screwdriver{
+ pixel_y = -1
+ },
+/obj/effect/turf_decal/siding/purple{
+ dir = 8
+ },
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/iron,
+/area/station/science/robotics/lab)
"bUQ" = (
/obj/structure/chair/stool/directional/west,
/turf/open/floor/iron,
@@ -8314,15 +8334,6 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/maintenance/port)
-"bYv" = (
-/obj/structure/table/reinforced,
-/obj/item/stack/cable_coil,
-/obj/item/electronics/airalarm,
-/obj/item/electronics/firealarm,
-/obj/item/stock_parts/cell/high,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron,
-/area/station/maintenance/port)
"bYG" = (
/obj/item/clipboard,
/obj/item/folder/yellow,
@@ -8805,6 +8816,16 @@
"cfu" = (
/turf/open/floor/circuit/green,
/area/station/ai_monitored/turret_protected/ai_upload)
+"cfx" = (
+/obj/structure/cable,
+/obj/machinery/computer/station_alert{
+ dir = 4
+ },
+/obj/effect/turf_decal/bot,
+/obj/machinery/computer/security/telescreen/ce/directional/west,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/command/heads_quarters/ce)
"cfy" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -9417,6 +9438,11 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
+"cmy" = (
+/obj/structure/cable,
+/obj/machinery/computer/security/telescreen/prison/directional/east,
+/turf/open/floor/iron,
+/area/station/security/execution/transfer)
"cmE" = (
/obj/item/kirbyplants/random,
/obj/effect/turf_decal/tile/blue/half/contrasted{
@@ -11740,17 +11766,6 @@
},
/turf/open/floor/iron/large,
/area/station/science/xenobiology)
-"cQT" = (
-/obj/structure/table/reinforced,
-/obj/machinery/computer/security/telescreen{
- dir = 4;
- network = list("xeno")
- },
-/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/science/xenobiology)
"cQZ" = (
/obj/structure/sign/warning/chem_diamond/directional/west,
/obj/machinery/chem_dispenser,
@@ -12534,17 +12549,6 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/turf/open/floor/iron,
/area/station/engineering/atmos)
-"dbC" = (
-/obj/structure/table/reinforced,
-/obj/item/folder/white,
-/obj/item/stock_parts/cell/high,
-/obj/item/stack/sheet/glass,
-/obj/item/stack/sheet/glass,
-/obj/item/stack/sheet/glass,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/machinery/airalarm/directional/east,
-/turf/open/floor/iron/dark,
-/area/station/engineering/storage/tech)
"dbO" = (
/obj/structure/chair/sofa/bench/right{
dir = 8
@@ -13613,19 +13617,6 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron,
/area/station/maintenance/port/aft)
-"dqs" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/computer/security/telescreen/interrogation{
- dir = 4;
- pixel_x = -32
- },
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/security/brig)
"dqv" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -13930,7 +13921,7 @@
/area/station/commons/vacant_room/office)
"dtk" = (
/obj/structure/table/wood/poker,
-/obj/item/clothing/mask/cigarette/pipe,
+/obj/item/cigarette/pipe,
/turf/open/floor/carpet/green,
/area/station/commons/lounge)
"dtn" = (
@@ -14686,6 +14677,10 @@
},
/turf/open/floor/iron/dark,
/area/station/science/xenobiology)
+"dDB" = (
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"dDT" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/trinary/filter{
@@ -17105,15 +17100,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white,
/area/station/medical/virology)
-"ejX" = (
-/obj/machinery/computer/security/telescreen/vault{
- pixel_y = 30
- },
-/obj/effect/turf_decal/tile/brown/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/command/heads_quarters/qm)
"ekF" = (
/obj/structure/sign/poster/official/random/directional/south,
/obj/machinery/light/directional/south,
@@ -20770,7 +20756,9 @@
/turf/open/floor/iron/white,
/area/station/science/research)
"fff" = (
-/obj/machinery/power/apc/auto_name/directional/north,
+/obj/machinery/power/apc/auto_name/directional/north{
+ areastring = "/area/station/science/ordnance/burnchamber"
+ },
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/atmospherics/pipe/layer_manifold/supply/visible{
@@ -21360,6 +21348,15 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/service/abandoned_gambling_den)
+"fmw" = (
+/obj/machinery/cell_charger,
+/obj/structure/table/reinforced,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/station/ai_monitored/turret_protected/aisat_interior)
"fmB" = (
/obj/structure/window/reinforced/spawner/directional/west,
/obj/structure/window/reinforced/spawner/directional/south,
@@ -22367,6 +22364,13 @@
},
/turf/open/floor/iron,
/area/station/engineering/lobby)
+"fzK" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/airalarm/directional/east,
+/turf/open/floor/plating,
+/area/station/maintenance/department/electrical)
"fzV" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -26173,22 +26177,6 @@
},
/turf/open/floor/iron,
/area/station/service/lawoffice)
-"guI" = (
-/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching the Engine.";
- dir = 4;
- layer = 4;
- name = "Engine Monitor";
- network = list("engine");
- pixel_x = -24
- },
-/obj/effect/turf_decal/bot,
-/obj/machinery/computer/atmos_control/nocontrol/master{
- dir = 4
- },
-/turf/open/floor/iron/dark/textured_large,
-/area/station/engineering/atmos/storage/gas)
"guK" = (
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/north,
@@ -27904,6 +27892,7 @@
dir = 6
},
/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
"gQH" = (
@@ -27991,6 +27980,16 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron,
/area/station/engineering/main)
+"gRN" = (
+/obj/structure/cable,
+/obj/machinery/computer/security/telescreen/prison/directional/east,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/security/execution/transfer)
"gRU" = (
/obj/structure/table/reinforced,
/obj/machinery/button/ignition{
@@ -28180,6 +28179,25 @@
/obj/effect/mapping_helpers/airlock/access/all/supply/general,
/turf/open/floor/iron,
/area/station/cargo/storage)
+"gUt" = (
+/obj/structure/table/reinforced,
+/obj/item/stack/cable_coil{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/stack/cable_coil,
+/obj/item/electronics/airlock,
+/obj/item/electronics/airlock,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/stock_parts/power_store/cell/emproof{
+ pixel_x = -3;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/bot,
+/obj/item/clothing/gloves/color/yellow,
+/obj/machinery/newscaster/directional/east,
+/turf/open/floor/iron,
+/area/station/engineering/storage)
"gUy" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/table,
@@ -28839,6 +28857,16 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron/white/smooth_large,
/area/station/command/heads_quarters/cmo)
+"hdI" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 8
+ },
+/obj/effect/turf_decal/box,
+/obj/structure/extinguisher_cabinet/directional/north,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/item/radio/intercom/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance/testlab)
"hdK" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -29988,13 +30016,6 @@
},
/turf/open/floor/iron/white,
/area/station/science/robotics/lab)
-"hub" = (
-/obj/machinery/vending/coffee,
-/obj/effect/turf_decal/tile/blue/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/station/command/bridge)
"hup" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -30739,17 +30760,6 @@
},
/turf/open/floor/carpet/blue,
/area/station/commons/vacant_room/office)
-"hFx" = (
-/obj/structure/table/reinforced,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching the RD's goons and the AI's satellite from the safety of his office.";
- name = "Research Monitor";
- network = list("rd","minisat");
- pixel_y = 2
- },
-/obj/item/radio/intercom/directional/north,
-/turf/open/floor/iron/dark,
-/area/station/command/bridge)
"hFP" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/siding/white/corner{
@@ -32263,11 +32273,6 @@
/obj/effect/turf_decal/tile/yellow/opposingcorners,
/turf/open/floor/iron/dark,
/area/station/medical/chemistry)
-"hZb" = (
-/obj/effect/turf_decal/tile/blue/half/contrasted,
-/obj/machinery/digital_clock/directional/south,
-/turf/open/floor/iron/dark,
-/area/station/command/bridge)
"hZl" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/door/morgue{
@@ -33015,6 +33020,13 @@
},
/turf/open/floor/plating,
/area/station/medical/virology)
+"iij" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/radio/intercom/directional/north,
+/turf/open/floor/iron,
+/area/station/command/teleporter)
"iiy" = (
/obj/structure/easel,
/turf/open/floor/iron,
@@ -33619,6 +33631,7 @@
/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/tile/neutral/full,
/obj/machinery/holopad,
+/obj/structure/cable,
/turf/open/floor/iron/dark/smooth_large,
/area/station/science/ordnance)
"iqj" = (
@@ -34764,6 +34777,11 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron,
/area/station/hallway/secondary/exit)
+"iFt" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"iFD" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/table/wood,
@@ -35541,6 +35559,13 @@
/obj/effect/turf_decal/tile/yellow/opposingcorners,
/turf/open/floor/iron,
/area/station/engineering/supermatter/room)
+"iRd" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/science/xenobiology)
"iRf" = (
/obj/machinery/power/turbine/turbine_outlet,
/turf/open/floor/engine,
@@ -35753,25 +35778,6 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/medical/coldroom)
-"iTM" = (
-/obj/structure/table/reinforced,
-/obj/item/stack/sheet/rglass{
- amount = 50;
- pixel_x = 2;
- pixel_y = -2
- },
-/obj/item/stock_parts/cell/emproof{
- pixel_x = 1;
- pixel_y = 3
- },
-/obj/effect/turf_decal/bot,
-/obj/machinery/newscaster/directional/east,
-/obj/item/mod/module/plasma_stabilizer,
-/obj/item/mod/module/thermal_regulator,
-/obj/item/mod/module/magboot,
-/obj/item/mod/module/signlang_radio,
-/turf/open/floor/iron,
-/area/station/engineering/storage)
"iTW" = (
/obj/structure/closet/emcloset,
/obj/effect/decal/cleanable/dirt,
@@ -35979,6 +35985,13 @@
/obj/effect/turf_decal/tile/red/fourcorners,
/turf/open/floor/iron,
/area/station/security/checkpoint/supply)
+"iWz" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/structure/sign/poster/contraband/self_ai_liberation/directional/north,
+/turf/open/floor/iron,
+/area/station/science/research/abandoned)
"iWA" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -36417,16 +36430,6 @@
/obj/item/pen,
/turf/open/floor/iron,
/area/station/medical/chemistry)
-"jbn" = (
-/obj/structure/cable,
-/obj/machinery/computer/security/telescreen{
- dir = 8;
- name = "Prisoner Telescreen";
- network = list("prison");
- pixel_x = 27
- },
-/turf/open/floor/iron,
-/area/station/security/execution/transfer)
"jbr" = (
/obj/structure/curtain/cloth/fancy/mechanical/start_closed{
desc = "A set of curtains serving as a fancy theater backdrop. They can only be opened by a button.";
@@ -36518,17 +36521,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/station/maintenance/starboard/aft)
-"jce" = (
-/obj/structure/table/wood,
-/obj/machinery/light/directional/south,
-/obj/item/stack/package_wrap,
-/obj/item/hand_labeler,
-/obj/machinery/computer/security/telescreen/vault{
- dir = 8;
- pixel_x = 26
- },
-/turf/open/floor/wood,
-/area/station/command/heads_quarters/hop)
"jcg" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible,
@@ -38006,6 +37998,13 @@
"jtC" = (
/turf/open/floor/plating,
/area/station/service/abandoned_gambling_den)
+"jtD" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron/dark,
+/area/station/engineering/atmos/storage)
"jtV" = (
/obj/structure/sign/warning/electric_shock,
/turf/closed/wall/r_wall,
@@ -38217,6 +38216,14 @@
},
/turf/open/floor/iron/dark,
/area/station/security/execution/education)
+"jxj" = (
+/obj/structure/table,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/cell_charger,
+/obj/structure/extinguisher_cabinet/directional/west,
+/turf/open/floor/iron,
+/area/station/science/robotics/mechbay)
"jxm" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -38531,13 +38538,6 @@
},
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
-"jBs" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/item/radio/intercom/directional/north,
-/turf/open/floor/iron,
-/area/station/command/teleporter)
"jBt" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -40386,18 +40386,6 @@
/obj/effect/turf_decal/tile/red/opposingcorners,
/turf/open/floor/iron,
/area/station/service/theater)
-"jYv" = (
-/obj/structure/table/reinforced,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/firealarm/directional/south,
-/obj/machinery/light_switch/directional/east,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/neutral/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/station/engineering/break_room)
"jYA" = (
/obj/effect/turf_decal/box/red/corners{
dir = 1
@@ -40837,15 +40825,6 @@
},
/turf/open/floor/iron,
/area/station/cargo/storage)
-"kdL" = (
-/obj/machinery/cell_charger,
-/obj/structure/table/reinforced,
-/obj/item/stock_parts/cell/high,
-/obj/structure/window/reinforced/spawner/directional/south,
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/command/storage/eva)
"kdM" = (
/obj/structure/sign/poster/official/do_not_question/directional/south,
/obj/effect/turf_decal/tile/blue/half/contrasted,
@@ -41079,25 +41058,6 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/service/chapel/funeral)
-"kgi" = (
-/obj/structure/table/reinforced,
-/obj/item/stack/cable_coil{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/stack/cable_coil,
-/obj/item/electronics/airlock,
-/obj/item/electronics/airlock,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/stock_parts/cell/emproof{
- pixel_x = -3;
- pixel_y = 5
- },
-/obj/effect/turf_decal/bot,
-/obj/item/clothing/gloves/color/yellow,
-/obj/machinery/newscaster/directional/east,
-/turf/open/floor/iron,
-/area/station/engineering/storage)
"kgm" = (
/obj/structure/table/wood,
/obj/item/folder/red,
@@ -42454,44 +42414,6 @@
/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/station/science/research)
-"kyI" = (
-/obj/item/stack/cable_coil,
-/obj/item/bodypart/arm/right/robot{
- pixel_x = 3
- },
-/obj/item/bodypart/arm/left/robot{
- pixel_x = -3
- },
-/obj/structure/table,
-/obj/item/radio/intercom/directional/west,
-/obj/item/assembly/prox_sensor{
- pixel_x = 5
- },
-/obj/item/assembly/prox_sensor{
- pixel_x = 5
- },
-/obj/item/assembly/prox_sensor{
- pixel_x = 5
- },
-/obj/item/assembly/flash/handheld,
-/obj/item/assembly/flash/handheld,
-/obj/item/assembly/flash/handheld,
-/obj/item/assembly/flash/handheld,
-/obj/item/assembly/flash/handheld,
-/obj/item/assembly/flash/handheld,
-/obj/item/stock_parts/cell/high{
- pixel_x = 3;
- pixel_y = 16
- },
-/obj/item/stock_parts/cell/high{
- pixel_x = -3;
- pixel_y = 16
- },
-/obj/item/stock_parts/cell/high{
- pixel_y = 15
- },
-/turf/open/floor/iron,
-/area/station/science/robotics/lab)
"kyR" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/railing/corner,
@@ -43803,14 +43725,6 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron,
/area/station/maintenance/department/eva/abandoned)
-"kSn" = (
-/obj/structure/table/reinforced,
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/cell_charger,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/engineering/storage/tech)
"kSt" = (
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
/obj/effect/turf_decal/stripes/line{
@@ -44631,6 +44545,8 @@
"lcP" = (
/obj/machinery/atmospherics/pipe/smart/simple/purple/visible/layer2,
/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
"lcT" = (
@@ -45475,6 +45391,22 @@
/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/department/chapel)
+"lnk" = (
+/obj/structure/table/reinforced,
+/obj/item/stack/package_wrap,
+/obj/item/stack/cable_coil{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/stack/cable_coil,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/radio/intercom/directional/north,
+/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/construction/mining/aux_base)
"lnm" = (
/obj/structure/closet/secure_closet/captains,
/obj/effect/turf_decal/stripes/line{
@@ -45657,18 +45589,6 @@
},
/turf/open/floor/iron,
/area/station/cargo/storage)
-"lpC" = (
-/obj/machinery/light_switch/directional/east,
-/obj/structure/table,
-/obj/item/crowbar,
-/obj/item/wrench,
-/obj/item/clothing/mask/gas,
-/obj/effect/turf_decal/tile/neutral/half/contrasted{
- dir = 8
- },
-/obj/machinery/light/cold/directional/north,
-/turf/open/floor/iron,
-/area/station/science/xenobiology)
"lpG" = (
/obj/structure/chair/office{
dir = 1
@@ -47701,6 +47621,7 @@
/obj/machinery/meter/layer2,
/obj/structure/sign/warning/no_smoking/directional/east,
/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
"lOA" = (
@@ -47983,17 +47904,6 @@
},
/turf/open/floor/iron,
/area/station/cargo/storage)
-"lTh" = (
-/obj/structure/table/wood,
-/obj/machinery/computer/security/telescreen/interrogation{
- dir = 1
- },
-/obj/item/pen,
-/obj/effect/turf_decal/siding/dark_red{
- dir = 4
- },
-/turf/open/floor/iron/checker,
-/area/station/security/interrogation)
"lTt" = (
/obj/machinery/door/window/brigdoor/right/directional/west{
name = "Shooting Range";
@@ -48703,6 +48613,19 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/port)
+"mdG" = (
+/obj/structure/rack,
+/obj/item/tank/internals/emergency_oxygen/engi,
+/obj/item/tank/internals/emergency_oxygen/engi,
+/obj/item/wrench,
+/obj/item/stock_parts/power_store/cell/emproof{
+ pixel_x = 4;
+ pixel_y = 2
+ },
+/obj/item/lightreplacer,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron/dark,
+/area/station/engineering/atmos/storage)
"mdM" = (
/obj/machinery/computer/records/medical{
dir = 1
@@ -49677,6 +49600,13 @@
},
/turf/open/floor/wood/tile,
/area/station/service/library/artgallery)
+"msO" = (
+/obj/structure/table/reinforced,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/cell_charger,
+/turf/open/floor/iron,
+/area/station/commons/storage/primary)
"msR" = (
/obj/effect/turf_decal/tile/red/opposingcorners{
dir = 1
@@ -50475,6 +50405,13 @@
/obj/structure/sign/poster/official/safety_eye_protection/directional/south,
/turf/open/floor/plating,
/area/station/maintenance/space_hut/observatory)
+"mCe" = (
+/obj/structure/table/wood,
+/obj/item/paper_bin,
+/obj/item/pen,
+/obj/machinery/computer/security/telescreen/interrogation/directional/west,
+/turf/open/floor/iron/checker,
+/area/station/security/interrogation)
"mCf" = (
/obj/structure/disposalpipe/trunk{
dir = 1
@@ -50978,18 +50915,6 @@
"mHE" = (
/turf/open/floor/iron/dark,
/area/station/service/chapel)
-"mHL" = (
-/obj/structure/table/reinforced,
-/obj/machinery/cell_charger,
-/obj/effect/turf_decal/siding/purple{
- dir = 8
- },
-/obj/effect/turf_decal/siding/purple{
- dir = 4
- },
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/iron,
-/area/station/science/lab)
"mHM" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -51266,6 +51191,13 @@
},
/turf/open/floor/iron,
/area/station/cargo/office)
+"mKn" = (
+/obj/machinery/portable_atmospherics/canister,
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
+/obj/effect/turf_decal/box,
+/obj/machinery/computer/security/telescreen/test_chamber/directional/north,
+/turf/open/floor/iron,
+/area/station/science/xenobiology)
"mKp" = (
/obj/structure/chair/comfy/brown{
dir = 4
@@ -51557,13 +51489,6 @@
},
/turf/open/floor/iron,
/area/station/command/teleporter)
-"mOS" = (
-/obj/machinery/portable_atmospherics/canister,
-/obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/obj/effect/turf_decal/box,
-/obj/machinery/airalarm/directional/north,
-/turf/open/floor/iron,
-/area/station/science/xenobiology)
"mPg" = (
/obj/machinery/door/airlock/external{
name = "External Docking Port"
@@ -52138,13 +52063,13 @@
"mXr" = (
/obj/structure/cable,
/obj/structure/table/wood,
-/obj/item/clothing/mask/cigarette/cigar/cohiba{
+/obj/item/cigarette/cigar/cohiba{
pixel_x = 3
},
-/obj/item/clothing/mask/cigarette/cigar/havana{
+/obj/item/cigarette/cigar/havana{
pixel_x = -3
},
-/obj/item/clothing/mask/cigarette/cigar,
+/obj/item/cigarette/cigar,
/turf/open/floor/iron/grimy,
/area/station/command/heads_quarters/captain)
"mXy" = (
@@ -52506,17 +52431,6 @@
/obj/effect/turf_decal/tile/neutral/half/contrasted,
/turf/open/floor/iron/dark,
/area/station/service/chapel)
-"ncT" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/table/reinforced,
-/obj/item/storage/box/lights/mixed,
-/obj/machinery/airalarm/directional/north,
-/obj/item/stock_parts/cell/high/empty,
-/obj/effect/turf_decal/tile/brown/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/cargo/storage)
"ncY" = (
/obj/structure/table/wood,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -54251,11 +54165,6 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/aisat/exterior)
-"nBC" = (
-/obj/item/kirbyplants/random,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/iron/dark,
-/area/station/security/interrogation)
"nBF" = (
/obj/structure/cable,
/obj/machinery/computer/rdconsole,
@@ -54645,13 +54554,13 @@
/area/station/commons/vacant_room/commissary)
"nHc" = (
/obj/structure/table/wood,
-/obj/item/clothing/mask/cigarette/cigar/cohiba{
+/obj/item/cigarette/cigar/cohiba{
pixel_x = 3
},
-/obj/item/clothing/mask/cigarette/cigar/havana{
+/obj/item/cigarette/cigar/havana{
pixel_x = -3
},
-/obj/item/clothing/mask/cigarette/cigar,
+/obj/item/cigarette/cigar,
/turf/open/floor/wood,
/area/station/command/meeting_room/council)
"nHd" = (
@@ -54698,13 +54607,6 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
-"nHx" = (
-/obj/structure/table/wood,
-/obj/item/paper_bin,
-/obj/item/pen,
-/obj/structure/extinguisher_cabinet/directional/west,
-/turf/open/floor/iron/checker,
-/area/station/security/interrogation)
"nHB" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -54889,6 +54791,14 @@
},
/turf/open/floor/iron/white,
/area/station/medical/pharmacy)
+"nJu" = (
+/obj/structure/table/wood,
+/obj/item/pen,
+/obj/effect/turf_decal/siding/dark_red{
+ dir = 4
+ },
+/turf/open/floor/iron/checker,
+/area/station/security/interrogation)
"nJx" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
@@ -55260,6 +55170,18 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
+"nOJ" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/firealarm/directional/south,
+/obj/machinery/light_switch/directional/east,
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 1
+ },
+/turf/open/floor/iron/dark,
+/area/station/engineering/break_room)
"nOP" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral{
@@ -57163,15 +57085,6 @@
},
/turf/open/floor/iron,
/area/station/maintenance/department/chapel)
-"onq" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/obj/effect/turf_decal/box,
-/obj/structure/extinguisher_cabinet/directional/north,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance/testlab)
"onK" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -57246,15 +57159,6 @@
/obj/machinery/airalarm/directional/north,
/turf/open/floor/iron,
/area/station/command/gateway)
-"ooJ" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/secondary/construction)
"ooP" = (
/obj/machinery/power/apc/auto_name/directional/west,
/obj/structure/cable,
@@ -58526,6 +58430,19 @@
},
/turf/closed/wall/r_wall,
/area/station/science/ordnance/burnchamber)
+"oHO" = (
+/obj/machinery/light_switch/directional/east,
+/obj/structure/table,
+/obj/item/crowbar,
+/obj/item/wrench,
+/obj/item/clothing/mask/gas,
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 8
+ },
+/obj/machinery/light/cold/directional/north,
+/obj/machinery/airalarm/directional/north,
+/turf/open/floor/iron,
+/area/station/science/xenobiology)
"oHQ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -58924,13 +58841,6 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/maintenance/port)
-"oNm" = (
-/obj/structure/table/reinforced,
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/cell_charger,
-/turf/open/floor/iron,
-/area/station/commons/storage/primary)
"oNy" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/disposalpipe/segment,
@@ -59224,6 +59134,15 @@
},
/turf/open/floor/iron/white,
/area/station/science/lobby)
+"oRA" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/hallway/secondary/construction)
"oRD" = (
/obj/structure/cable,
/obj/item/circuitboard/computer/secure_data,
@@ -59281,13 +59200,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/main)
-"oSo" = (
-/obj/structure/table/reinforced,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/structure/sign/poster/contraband/self_ai_liberation/directional/north,
-/turf/open/floor/iron,
-/area/station/science/research/abandoned)
"oSv" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron,
@@ -59626,6 +59538,14 @@
/obj/machinery/newscaster/directional/east,
/turf/open/floor/wood,
/area/station/hallway/secondary/service)
+"oXg" = (
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/structure/table,
+/obj/machinery/newscaster/directional/west,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/science/circuits)
"oXi" = (
/obj/effect/turf_decal/bot_white/left,
/obj/effect/turf_decal/tile/neutral{
@@ -59990,19 +59910,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/science/robotics/mechbay)
-"pcS" = (
-/obj/structure/cable,
-/obj/machinery/computer/station_alert{
- dir = 4
- },
-/obj/effect/turf_decal/bot,
-/obj/machinery/computer/security/telescreen/ce{
- dir = 4;
- pixel_x = -30
- },
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/ce)
"pdb" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/obj/effect/turf_decal/stripes/line,
@@ -60936,6 +60843,8 @@
/obj/structure/table/reinforced,
/obj/item/stack/sheet/iron/fifty,
/obj/item/stack/sheet/glass/fifty,
+/obj/item/circuitboard/machine/crystallizer,
+/obj/item/stack/cable_coil/thirty,
/turf/open/floor/iron/dark,
/area/station/engineering/atmos/hfr_room)
"pnV" = (
@@ -62132,20 +62041,22 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/science/xenobiology)
-"pDi" = (
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/structure/table,
-/obj/machinery/newscaster/directional/west,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/science/circuits)
"pDt" = (
/obj/machinery/flasher/portable,
/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/security/armory)
+"pDx" = (
+/obj/effect/turf_decal/siding/purple{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"pDz" = (
/obj/machinery/quantum_server,
/obj/effect/turf_decal/bot/left,
@@ -62469,6 +62380,12 @@
},
/turf/open/floor/iron/dark/corner,
/area/station/maintenance/disposal/incinerator)
+"pGv" = (
+/obj/item/kirbyplants/random,
+/obj/machinery/light/small/directional/north,
+/obj/structure/extinguisher_cabinet/directional/north,
+/turf/open/floor/iron/dark,
+/area/station/security/interrogation)
"pGw" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/sign/poster/random/directional/east,
@@ -62486,6 +62403,14 @@
/obj/item/knife/kitchen,
/turf/open/floor/iron,
/area/station/service/kitchen/abandoned)
+"pGz" = (
+/obj/machinery/vending/coffee,
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
+ },
+/obj/machinery/digital_clock/directional/north,
+/turf/open/floor/iron/dark,
+/area/station/command/bridge)
"pGC" = (
/obj/item/kirbyplants/random,
/obj/machinery/light_switch/directional/north{
@@ -62649,21 +62574,6 @@
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/turf/open/floor/iron,
/area/station/maintenance/port/aft)
-"pJo" = (
-/obj/structure/cable,
-/obj/machinery/computer/security/telescreen{
- dir = 8;
- name = "Prisoner Telescreen";
- network = list("prison");
- pixel_x = 27
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/security/execution/transfer)
"pJp" = (
/obj/effect/turf_decal/siding/wood,
/obj/machinery/power/apc/auto_name/directional/south,
@@ -63254,17 +63164,6 @@
"pPl" = (
/turf/open/floor/wood/tile,
/area/station/service/library/artgallery)
-"pPs" = (
-/obj/structure/chair/office/light{
- dir = 8
- },
-/obj/machinery/computer/security/telescreen/ordnance{
- dir = 1;
- pixel_y = -32
- },
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance/testlab)
"pPv" = (
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -63713,6 +63612,14 @@
},
/turf/open/floor/iron/dark/corner,
/area/station/engineering/atmos/pumproom)
+"pUq" = (
+/obj/structure/table/reinforced,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/cell_charger,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/engineering/storage/tech)
"pUw" = (
/obj/machinery/holopad,
/obj/effect/turf_decal/bot,
@@ -64033,22 +63940,6 @@
/obj/machinery/coffeemaker/impressa,
/turf/open/floor/wood,
/area/station/engineering/break_room)
-"pXI" = (
-/obj/machinery/computer/security/telescreen{
- dir = 8;
- name = "Prisoner Telescreen";
- network = list("prison");
- pixel_x = 27
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/machinery/light/directional/east,
-/turf/open/floor/iron,
-/area/station/security/execution/transfer)
"pXK" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -65180,6 +65071,13 @@
},
/turf/open/floor/iron/cafeteria,
/area/station/engineering/atmos)
+"qnC" = (
+/obj/structure/chair/office/light{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance/testlab)
"qnG" = (
/obj/machinery/airalarm/directional/south,
/obj/structure/extinguisher_cabinet/directional/east,
@@ -65381,6 +65279,14 @@
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/ce)
+"qpI" = (
+/obj/structure/table,
+/obj/item/binoculars,
+/obj/structure/window/reinforced/spawner/directional/south,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/computer/security/telescreen/ordnance/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance/testlab)
"qpQ" = (
/obj/structure/window/reinforced/spawner/directional/north,
/obj/structure/window/reinforced/spawner/directional/west,
@@ -66070,14 +65976,6 @@
/obj/machinery/duct,
/turf/open/floor/iron,
/area/station/engineering/main)
-"qzK" = (
-/obj/structure/sign/warning/secure_area/directional/south,
-/obj/structure/table/reinforced,
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/station/engineering/transit_tube)
"qzR" = (
/obj/structure/toilet{
dir = 8
@@ -66710,14 +66608,6 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos,
/turf/open/floor/iron,
/area/station/engineering/atmos/pumproom)
-"qHo" = (
-/obj/structure/table,
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/cell_charger,
-/obj/structure/extinguisher_cabinet/directional/west,
-/turf/open/floor/iron,
-/area/station/science/robotics/mechbay)
"qHs" = (
/obj/structure/statue/sandstone/venus{
dir = 1;
@@ -68101,6 +67991,13 @@
/obj/effect/turf_decal/trimline/blue/end,
/turf/open/floor/iron/dark/textured,
/area/station/engineering/atmos/project)
+"raF" = (
+/obj/machinery/computer/security/telescreen/vault/directional/north,
+/obj/effect/turf_decal/tile/brown/half/contrasted{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/command/heads_quarters/qm)
"raI" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -69145,6 +69042,25 @@
/obj/machinery/light/dim/directional/east,
/turf/open/floor/iron/dark,
/area/station/tcommsat/computer)
+"rmz" = (
+/obj/structure/table/reinforced,
+/obj/item/stack/sheet/rglass{
+ amount = 50;
+ pixel_x = 2;
+ pixel_y = -2
+ },
+/obj/item/stock_parts/power_store/cell/emproof{
+ pixel_x = 1;
+ pixel_y = 3
+ },
+/obj/effect/turf_decal/bot,
+/obj/machinery/newscaster/directional/east,
+/obj/item/mod/module/plasma_stabilizer,
+/obj/item/mod/module/thermal_regulator,
+/obj/item/mod/module/magboot,
+/obj/item/mod/module/signlang_radio,
+/turf/open/floor/iron,
+/area/station/engineering/storage)
"rmI" = (
/obj/structure/table/reinforced,
/obj/item/electronics/apc,
@@ -69359,19 +69275,6 @@
},
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
-"rpm" = (
-/obj/structure/rack,
-/obj/item/tank/internals/emergency_oxygen/engi,
-/obj/item/tank/internals/emergency_oxygen/engi,
-/obj/item/wrench,
-/obj/item/stock_parts/cell/emproof{
- pixel_x = 4;
- pixel_y = 2
- },
-/obj/item/lightreplacer,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/iron/dark,
-/area/station/engineering/atmos/storage)
"rpK" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -71051,14 +70954,6 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
-"rMQ" = (
-/obj/structure/table,
-/obj/item/binoculars,
-/obj/structure/window/reinforced/spawner/directional/south,
-/obj/item/radio/intercom/directional/west,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance/testlab)
"rMR" = (
/obj/structure/chair{
dir = 8
@@ -71573,6 +71468,17 @@
},
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay)
+"rRF" = (
+/obj/structure/table/reinforced,
+/obj/item/folder/white,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stack/sheet/glass,
+/obj/item/stack/sheet/glass,
+/obj/item/stack/sheet/glass,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/airalarm/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/engineering/storage/tech)
"rRR" = (
/obj/structure/rack,
/obj/effect/turf_decal/bot,
@@ -73893,16 +73799,6 @@
/obj/effect/turf_decal/tile/red/fourcorners,
/turf/open/floor/iron/dark/side,
/area/station/security/checkpoint/medical/medsci)
-"swg" = (
-/obj/machinery/cell_charger,
-/obj/structure/table/reinforced,
-/obj/machinery/status_display/ai/directional/north,
-/obj/item/rcl/pre_loaded,
-/obj/effect/turf_decal/bot,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/ce)
"swj" = (
/obj/structure/table/wood,
/obj/machinery/fax{
@@ -73939,13 +73835,13 @@
pixel_x = -3;
pixel_y = 3
},
-/obj/item/clothing/mask/cigarette/cigar/cohiba{
+/obj/item/cigarette/cigar/cohiba{
pixel_x = 6
},
-/obj/item/clothing/mask/cigarette/cigar/havana{
+/obj/item/cigarette/cigar/havana{
pixel_x = 2
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 4.5
},
/obj/structure/table/reinforced,
@@ -74750,20 +74646,6 @@
"sHt" = (
/turf/open/space/basic,
/area/space/nearstation)
-"sHv" = (
-/obj/machinery/computer/mecha{
- dir = 8
- },
-/obj/machinery/computer/security/telescreen/rd{
- dir = 8;
- pixel_x = 32
- },
-/obj/effect/turf_decal/tile/neutral/half/contrasted{
- dir = 1
- },
-/obj/effect/turf_decal/tile/purple,
-/turf/open/floor/iron,
-/area/station/command/heads_quarters/rd)
"sHw" = (
/obj/machinery/firealarm/directional/east,
/obj/effect/turf_decal/tile/neutral/half/contrasted{
@@ -75989,6 +75871,15 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/iron,
/area/station/hallway/primary/central/fore)
+"sWJ" = (
+/obj/structure/table/reinforced,
+/obj/item/stack/cable_coil,
+/obj/item/electronics/airalarm,
+/obj/item/electronics/firealarm,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron,
+/area/station/maintenance/port)
"sWO" = (
/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{
dir = 8
@@ -77371,14 +77262,14 @@
/obj/item/restraints/handcuffs{
pixel_y = 6
},
-/obj/item/clothing/mask/cigarette/cigar/cohiba{
+/obj/item/cigarette/cigar/cohiba{
pixel_x = 7;
pixel_y = -7
},
-/obj/item/clothing/mask/cigarette/cigar/havana{
+/obj/item/cigarette/cigar/havana{
pixel_x = -3
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = -1;
pixel_y = -7
},
@@ -78021,6 +77912,18 @@
},
/turf/open/floor/plating,
/area/station/engineering/atmos/hfr_room)
+"tzc" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/effect/turf_decal/siding/purple{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/purple{
+ dir = 4
+ },
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/iron,
+/area/station/science/lab)
"tzj" = (
/obj/structure/disposalpipe/trunk{
dir = 1
@@ -78577,6 +78480,15 @@
/obj/structure/cable,
/obj/machinery/firealarm/directional/east,
/obj/effect/decal/cleanable/dirt,
+/obj/item/flatpack{
+ board = /obj/item/circuitboard/machine/flatpacker;
+ pixel_x = -6;
+ pixel_y = 5
+ },
+/obj/item/multitool{
+ pixel_x = 8
+ },
+/obj/structure/table,
/turf/open/floor/iron,
/area/station/engineering/storage_shared)
"tFG" = (
@@ -78907,13 +78819,6 @@
},
/turf/open/floor/iron,
/area/station/security/courtroom)
-"tJB" = (
-/obj/structure/table/reinforced,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/airalarm/directional/east,
-/turf/open/floor/plating,
-/area/station/maintenance/department/electrical)
"tJE" = (
/obj/structure/table/wood,
/obj/item/folder,
@@ -80895,6 +80800,11 @@
/obj/machinery/light/directional/east,
/turf/open/floor/iron,
/area/station/engineering/main)
+"uiH" = (
+/obj/structure/table/reinforced,
+/obj/machinery/computer/security/telescreen/research/directional/north,
+/turf/open/floor/iron/dark,
+/area/station/command/bridge)
"uiK" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -80964,6 +80874,13 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron,
/area/station/ai_monitored/command/storage/eva)
+"ujL" = (
+/obj/structure/table/reinforced,
+/obj/item/clipboard,
+/obj/item/mining_voucher,
+/obj/item/radio/intercom/directional/north,
+/turf/open/floor/iron/dark,
+/area/station/command/bridge)
"ujQ" = (
/obj/machinery/status_display/ai/directional/west,
/obj/structure/filingcabinet/security,
@@ -81053,6 +80970,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/medical/medbay)
+"ukO" = (
+/obj/machinery/cell_charger,
+/obj/structure/table/reinforced,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/structure/window/reinforced/spawner/directional/south,
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/command/storage/eva)
"ukR" = (
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
@@ -82063,6 +81989,15 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/psychology)
+"uxC" = (
+/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden,
+/obj/machinery/computer/security/telescreen/engine/directional/west,
+/obj/effect/turf_decal/bot,
+/obj/machinery/computer/atmos_control/nocontrol/master{
+ dir = 4
+ },
+/turf/open/floor/iron/dark/textured_large,
+/area/station/engineering/atmos/storage/gas)
"uxG" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -83228,6 +83163,11 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron,
/area/station/maintenance/department/science)
+"uLX" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted,
+/obj/machinery/computer/security/telescreen/minisat/directional/south,
+/turf/open/floor/iron/dark,
+/area/station/command/bridge)
"uMb" = (
/obj/structure/table,
/obj/item/analyzer,
@@ -84341,6 +84281,16 @@
},
/turf/open/floor/iron,
/area/station/science/research)
+"uZy" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/computer/security/telescreen/interrogation/directional/west,
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/red{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/security/brig)
"uZH" = (
/obj/effect/turf_decal/tile/neutral/half/contrasted{
dir = 1
@@ -86071,6 +86021,17 @@
/obj/effect/turf_decal/tile/neutral/half/contrasted,
/turf/open/floor/iron,
/area/station/maintenance/starboard/aft)
+"vxq" = (
+/obj/structure/cable,
+/obj/machinery/computer/security/telescreen/prison/directional/east,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/machinery/light/directional/east,
+/turf/open/floor/iron,
+/area/station/security/execution/transfer)
"vxr" = (
/turf/open/floor/iron,
/area/station/security/prison)
@@ -89118,6 +89079,16 @@
/obj/item/pen,
/turf/open/floor/iron/white,
/area/station/medical/medbay)
+"wmo" = (
+/obj/machinery/cell_charger,
+/obj/structure/table/reinforced,
+/obj/machinery/status_display/ai/directional/north,
+/obj/item/rcl/pre_loaded,
+/obj/effect/turf_decal/bot,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/command/heads_quarters/ce)
"wmp" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
@@ -89539,21 +89510,6 @@
},
/turf/open/floor/iron/grimy,
/area/station/service/library/abandoned)
-"wqz" = (
-/obj/structure/table/glass,
-/obj/item/folder/blue{
- pixel_x = 4;
- pixel_y = 4
- },
-/obj/item/folder/white,
-/obj/item/pen,
-/obj/machinery/computer/security/telescreen/cmo{
- dir = 1;
- pixel_y = -32
- },
-/obj/effect/turf_decal/tile/blue/opposingcorners,
-/turf/open/floor/iron/white,
-/area/station/command/heads_quarters/cmo)
"wqF" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{
dir = 4
@@ -90700,12 +90656,6 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron,
/area/station/maintenance/port)
-"wEx" = (
-/obj/structure/table/reinforced,
-/obj/item/clipboard,
-/obj/item/mining_voucher,
-/turf/open/floor/iron/dark,
-/area/station/command/bridge)
"wEy" = (
/obj/structure/disposalpipe/trunk{
dir = 4
@@ -90935,22 +90885,6 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/dark/textured_large,
/area/station/engineering/atmos/storage/gas)
-"wGQ" = (
-/obj/structure/cable,
-/obj/machinery/computer/security/telescreen{
- dir = 8;
- name = "Prisoner Telescreen";
- network = list("prison");
- pixel_x = 27
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/machinery/light/directional/east,
-/turf/open/floor/iron,
-/area/station/security/execution/transfer)
"wGS" = (
/obj/structure/chair/sofa/bench/left{
dir = 4
@@ -91266,6 +91200,44 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron,
/area/station/medical/pharmacy)
+"wLA" = (
+/obj/item/stack/cable_coil,
+/obj/item/bodypart/arm/right/robot{
+ pixel_x = 3
+ },
+/obj/item/bodypart/arm/left/robot{
+ pixel_x = -3
+ },
+/obj/structure/table,
+/obj/item/radio/intercom/directional/west,
+/obj/item/assembly/prox_sensor{
+ pixel_x = 5
+ },
+/obj/item/assembly/prox_sensor{
+ pixel_x = 5
+ },
+/obj/item/assembly/prox_sensor{
+ pixel_x = 5
+ },
+/obj/item/assembly/flash/handheld,
+/obj/item/assembly/flash/handheld,
+/obj/item/assembly/flash/handheld,
+/obj/item/assembly/flash/handheld,
+/obj/item/assembly/flash/handheld,
+/obj/item/assembly/flash/handheld,
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = 3;
+ pixel_y = 16
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = -3;
+ pixel_y = 16
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_y = 15
+ },
+/turf/open/floor/iron,
+/area/station/science/robotics/lab)
"wLK" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/line{
@@ -92594,6 +92566,17 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"xfG" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table/reinforced,
+/obj/item/storage/box/lights/mixed,
+/obj/machinery/airalarm/directional/north,
+/obj/item/stock_parts/power_store/cell/high/empty,
+/obj/effect/turf_decal/tile/brown/half/contrasted{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/cargo/storage)
"xfR" = (
/obj/machinery/camera/directional/east{
c_tag = "Security - Interrogation Monitoring"
@@ -93017,20 +93000,6 @@
/obj/structure/closet/crate/freezer/blood,
/turf/open/floor/iron/freezer,
/area/station/medical/coldroom)
-"xkV" = (
-/obj/structure/table,
-/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/directional/east,
-/obj/machinery/cell_charger,
-/obj/item/screwdriver{
- pixel_y = -1
- },
-/obj/effect/turf_decal/siding/purple{
- dir = 8
- },
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/iron,
-/area/station/science/robotics/lab)
"xkW" = (
/obj/structure/window/reinforced/spawner/directional/west,
/obj/structure/window/reinforced/spawner/directional/north,
@@ -93883,6 +93852,17 @@
},
/turf/open/floor/iron,
/area/station/maintenance/disposal)
+"xwC" = (
+/obj/machinery/computer/mecha{
+ dir = 8
+ },
+/obj/machinery/computer/security/telescreen/rd/directional/east,
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/purple,
+/turf/open/floor/iron,
+/area/station/command/heads_quarters/rd)
"xwK" = (
/obj/structure/cable,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -95699,13 +95679,6 @@
/obj/effect/turf_decal/tile/neutral/half/contrasted,
/turf/open/floor/iron,
/area/station/command/heads_quarters/rd)
-"xTC" = (
-/obj/structure/table/reinforced,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/iron/dark,
-/area/station/engineering/atmos/storage)
"xTD" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -96032,6 +96005,14 @@
/obj/machinery/light/warm/directional/west,
/turf/open/floor/wood,
/area/station/service/lawoffice)
+"xYf" = (
+/obj/structure/table/wood,
+/obj/machinery/light/directional/south,
+/obj/item/stack/package_wrap,
+/obj/item/hand_labeler,
+/obj/machinery/computer/security/telescreen/vault/directional/east,
+/turf/open/floor/wood,
+/area/station/command/heads_quarters/hop)
"xYl" = (
/obj/structure/lattice,
/obj/item/toy/figure/ninja,
@@ -96839,6 +96820,12 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron/white,
/area/station/medical/virology)
+"yjJ" = (
+/obj/structure/sign/warning/secure_area/directional/south,
+/obj/structure/table/reinforced,
+/obj/machinery/computer/security/telescreen/minisat/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/engineering/transit_tube)
"yjK" = (
/obj/machinery/holopad,
/obj/effect/turf_decal/bot_white,
@@ -104076,7 +104063,7 @@ ueB
uhL
btH
bPC
-bRC
+fmw
bTs
rPe
vvL
@@ -116158,7 +116145,7 @@ dgk
eqg
uYy
jCY
-qzK
+yjJ
vmt
nUT
aaa
@@ -116960,7 +116947,7 @@ aFU
nCi
uhb
xIa
-cQT
+iRd
gxT
kPD
rxX
@@ -117215,7 +117202,7 @@ nCi
cTO
uOn
uhb
-mOS
+mKn
fPl
jqr
vxQ
@@ -117729,7 +117716,7 @@ nCi
fsC
nOv
uhb
-lpC
+oHO
aqF
rqy
jKx
@@ -119240,7 +119227,7 @@ viB
pOz
hEL
gyR
-pcS
+cfx
vyn
eMN
gAw
@@ -119749,7 +119736,7 @@ jLx
dFw
mPr
bAR
-swg
+wmo
gsV
auh
tMl
@@ -120518,7 +120505,7 @@ pQo
uCa
wkj
bqP
-jYv
+nOJ
bAR
gHt
bAV
@@ -122292,10 +122279,10 @@ sID
pUW
qSm
wIf
-rpm
+mdG
lvJ
jYA
-xTC
+jtD
eVG
wqF
npE
@@ -122887,7 +122874,7 @@ wEI
qNb
naL
nEc
-oSo
+iWz
kGQ
bGz
nzb
@@ -123111,7 +123098,7 @@ grl
iJU
pJM
pec
-bpL
+bHr
fii
fii
lBz
@@ -123340,7 +123327,7 @@ vnq
ftU
dCX
wdZ
-guI
+uxC
bYK
xLZ
iXc
@@ -124399,11 +124386,11 @@ swD
baw
fii
iqz
-kgi
+gUt
hps
hkJ
tum
-iTM
+rmz
abO
pTC
sNd
@@ -125469,7 +125456,7 @@ szJ
xoR
hfe
sKR
-rMQ
+qpI
fYU
kzc
dqo
@@ -125725,7 +125712,7 @@ fLf
cfL
xoR
aJy
-pPs
+qnC
dkF
fYU
kzc
@@ -125938,7 +125925,7 @@ rnr
lRx
gRl
iQr
-bYv
+sWJ
pTC
qcM
vcB
@@ -126172,7 +126159,7 @@ aJU
keE
tbf
sdB
-kSn
+pUq
urC
aZo
jPJ
@@ -126750,7 +126737,7 @@ vSX
wEI
qYo
blX
-onq
+hdI
vQu
dSo
jCf
@@ -126999,7 +126986,7 @@ jqt
qub
uFt
elq
-pDi
+oXg
bWH
jDd
plP
@@ -127482,7 +127469,7 @@ pTC
pTC
unj
fKQ
-kyI
+wLA
xGw
iCI
pTC
@@ -127716,7 +127703,7 @@ tlp
nLY
uyf
klO
-dbC
+rRF
iNR
bCj
tjp
@@ -127761,7 +127748,7 @@ vgu
tYP
hBT
ipr
-sHv
+xwC
eIh
urt
mjW
@@ -127986,7 +127973,7 @@ vcB
vcB
vcB
pTC
-qHo
+jxj
ydp
uTm
nfR
@@ -129322,7 +129309,7 @@ nJK
yex
iML
tgI
-uUG
+iFt
djT
kzc
kzc
@@ -129836,7 +129823,7 @@ hGI
esH
owX
asW
-nSb
+bFD
nSb
jHm
ucu
@@ -130093,7 +130080,7 @@ hNW
hNW
hNW
hNW
-hNW
+dDB
hNW
nLP
hNW
@@ -130289,7 +130276,7 @@ uQt
nia
vBY
eYN
-oNm
+msO
iyq
iCO
uED
@@ -130350,7 +130337,7 @@ lzo
vbO
uXN
eqB
-eyH
+pDx
eyH
pwD
eyH
@@ -130566,7 +130553,7 @@ fHD
tCD
khb
rNZ
-xkV
+bUN
ryp
khb
gmZ
@@ -132125,7 +132112,7 @@ bgL
mfI
fvi
tpg
-mHL
+tzc
oZz
bpM
vzA
@@ -133893,7 +133880,7 @@ pRS
kNB
lAv
nAz
-jce
+xYf
lZx
pgs
lbt
@@ -133942,7 +133929,7 @@ dQT
deW
pMF
uZm
-wqz
+aBf
loe
gaC
lpx
@@ -134164,7 +134151,7 @@ bMB
drM
mlE
odw
-kdL
+ukO
eAY
fot
mpb
@@ -134393,7 +134380,7 @@ aaa
wyH
wyH
diL
-wEx
+ujL
drj
bog
wuV
@@ -137477,10 +137464,10 @@ aaa
wyH
wyH
diL
-hFx
+uiH
drj
bog
-hZb
+uLX
gOU
gOU
vDo
@@ -138505,7 +138492,7 @@ aaa
aad
aaa
diL
-hub
+pGz
bsC
bog
nkU
@@ -139039,7 +139026,7 @@ nrd
ivA
cVy
kSu
-jBs
+iij
dsT
qBq
fQw
@@ -139210,7 +139197,7 @@ coH
xrr
adR
abi
-aeE
+lnk
aff
afG
afY
@@ -140266,7 +140253,7 @@ xGK
jdL
juz
jdL
-ncT
+xfG
hTl
tjl
kdE
@@ -143109,7 +143096,7 @@ aad
aad
aad
aJE
-ejX
+raF
aAU
uQZ
xhJ
@@ -146531,7 +146518,7 @@ feV
wZE
xvr
rmI
-tJB
+fzK
vTn
wZE
dre
@@ -146716,7 +146703,7 @@ jrA
qIH
vgQ
hYa
-nHx
+mCe
nup
iSk
jLe
@@ -146973,7 +146960,7 @@ xzJ
hXi
vgQ
csD
-lTh
+nJu
nup
mTT
hgS
@@ -147486,7 +147473,7 @@ xPo
krO
pUP
vgQ
-nBC
+pGv
xfR
vgQ
eAW
@@ -148003,7 +147990,7 @@ ybk
jgS
aub
ivK
-dqs
+uZy
fND
ukX
stA
@@ -148238,19 +148225,19 @@ aaa
uHd
aaa
vXr
-jbn
+cmy
xIl
obL
-pXI
+aLM
xIl
gjc
-pJo
+gRN
xIl
aSW
-wGQ
+vxq
xIl
sTq
-pJo
+gRN
ayM
fXC
iKL
@@ -148843,7 +148830,7 @@ iBx
nXH
qAu
kZE
-ooJ
+oRA
mzX
xin
dJP
diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
index 984cf0ca1298e..5d70bb72e8081 100644
--- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm
+++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
@@ -935,6 +935,14 @@
},
/turf/open/floor/iron,
/area/station/command/gateway)
+"apL" = (
+/obj/machinery/modular_computer/preset/engineering,
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/light/small/directional/north,
+/obj/machinery/computer/security/telescreen/engine/directional/north,
+/turf/open/floor/iron/dark,
+/area/station/engineering/engine_smes)
"apS" = (
/obj/structure/cable,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
@@ -1204,20 +1212,6 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron/freezer,
/area/station/commons/toilet)
-"atC" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/structure/cable,
-/obj/effect/turf_decal/trimline/red/filled/line{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/red/filled/corner{
- dir = 8
- },
-/obj/machinery/holopad,
-/obj/effect/landmark/start/depsec/medical,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/security/checkpoint/medical)
"atN" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -1938,7 +1932,7 @@
dir = 4
},
/turf/open/floor/engine,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"aEM" = (
/obj/structure/sign/departments/cargo,
/turf/closed/wall/r_wall,
@@ -2627,6 +2621,7 @@
/obj/effect/turf_decal/box,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
/turf/open/floor/iron,
/area/station/science/ordnance)
"aQy" = (
@@ -2790,6 +2785,17 @@
/obj/effect/turf_decal/siding/yellow,
/turf/open/floor/iron,
/area/station/engineering/atmos/storage/gas)
+"aSw" = (
+/obj/structure/rack,
+/obj/item/lighter,
+/obj/item/clothing/glasses/meson{
+ pixel_y = 4
+ },
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/reagent_containers/pill/patch/aiuri,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/command/heads_quarters/ce)
"aSB" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/obj/effect/turf_decal/box,
@@ -3222,6 +3228,26 @@
/obj/item/bikehorn/rubberducky/plasticducky,
/turf/open/floor/iron/freezer,
/area/mine/laborcamp)
+"aYS" = (
+/obj/effect/turf_decal/bot{
+ dir = 1
+ },
+/obj/structure/cable,
+/obj/structure/table,
+/obj/item/storage/box/lights/mixed,
+/obj/item/stack/cable_coil,
+/obj/item/stack/cable_coil,
+/obj/item/stock_parts/power_store/cell/emproof,
+/obj/item/stock_parts/power_store/cell/emproof{
+ pixel_x = 6;
+ pixel_y = -2
+ },
+/obj/machinery/light_switch/directional/south{
+ pixel_x = 10
+ },
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/engineering/engine_smes)
"aZd" = (
/turf/open/floor/plating,
/area/station/medical/virology)
@@ -3845,7 +3871,7 @@
"bil" = (
/obj/structure/railing/wooden_fence,
/turf/open/misc/hay/icemoon,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"bin" = (
/obj/effect/turf_decal/stripes/asteroid/line{
dir = 4
@@ -3923,19 +3949,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible,
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
-"bjm" = (
-/obj/structure/table/reinforced,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for monitoring medbay to ensure patient safety.";
- dir = 8;
- name = "Medbay Monitor";
- network = list("medbay");
- pixel_y = 4
- },
-/obj/structure/reagent_dispensers/wall/peppertank/directional/east,
-/obj/effect/turf_decal/tile/red/full,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/security/checkpoint/medical)
"bjn" = (
/obj/machinery/door/window/left/directional/east{
name = "Containment Pen 11";
@@ -4470,7 +4483,7 @@
"bqX" = (
/obj/machinery/air_sensor/ordnance_burn_chamber,
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"bqY" = (
/obj/structure/closet,
/obj/effect/spawner/random/maintenance/two,
@@ -4562,6 +4575,15 @@
},
/turf/open/floor/plating,
/area/mine/eva/lower)
+"bsc" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/iron,
+/area/station/maintenance/department/electrical)
"bsd" = (
/obj/structure/chair/stool/directional/south,
/obj/structure/sign/poster/official/obey/directional/north,
@@ -5652,6 +5674,12 @@
/obj/structure/sign/departments/xenobio/directional/south,
/turf/open/floor/plating,
/area/station/science/xenobiology)
+"bGD" = (
+/obj/structure/table/reinforced,
+/obj/structure/reagent_dispensers/wall/peppertank/directional/east,
+/obj/effect/turf_decal/tile/red/full,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/security/checkpoint/medical)
"bGP" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/obj/effect/turf_decal/tile/brown/half/contrasted{
@@ -5743,6 +5771,10 @@
},
/obj/machinery/door/firedoor/heavy,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/power/apc/auto_name/directional/north{
+ areastring = "/area/station/science/ordnance/burnchamber"
+ },
+/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
"bIl" = (
@@ -6109,16 +6141,6 @@
},
/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/surface/outdoors/nospawn)
-"bMC" = (
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/item/radio/intercom/directional/north,
-/obj/structure/table/reinforced,
-/obj/effect/turf_decal/tile/neutral/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/command/storage/eva)
"bMF" = (
/obj/machinery/door/airlock/maintenance,
/obj/effect/mapping_helpers/airlock/abandoned,
@@ -6355,7 +6377,7 @@
dir = 1
},
/turf/open/misc/hay/icemoon,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"bPV" = (
/obj/item/kirbyplants/random/dead,
/turf/open/floor/plating/snowed/icemoon,
@@ -8052,16 +8074,6 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/plating,
/area/station/maintenance/fore)
-"cnU" = (
-/obj/machinery/modular_computer/preset/id,
-/obj/machinery/computer/security/telescreen/vault{
- pixel_y = 30
- },
-/obj/effect/turf_decal/tile/brown/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/command/heads_quarters/qm)
"coT" = (
/obj/structure/table,
/obj/item/storage/wallet,
@@ -8252,17 +8264,6 @@
/obj/item/radio/intercom/directional/east,
/turf/open/floor/iron/white,
/area/station/science/genetics)
-"crH" = (
-/obj/effect/turf_decal/tile/blue/half/contrasted{
- dir = 8
- },
-/obj/machinery/light/small/directional/west,
-/obj/machinery/requests_console/directional/west,
-/obj/effect/mapping_helpers/requests_console/assistance,
-/obj/effect/mapping_helpers/requests_console/announcement,
-/obj/effect/mapping_helpers/requests_console/information,
-/turf/open/floor/iron,
-/area/station/command/heads_quarters/hop)
"crO" = (
/obj/effect/turf_decal/siding/wood,
/obj/structure/railing/corner/end/flip{
@@ -8443,7 +8444,7 @@
"cuB" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input,
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"cuJ" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 4
@@ -9080,14 +9081,6 @@
/obj/machinery/newscaster/directional/east,
/turf/open/floor/iron/white/smooth_large,
/area/station/science/genetics)
-"cCC" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/potato{
- name = "\improper Beepsky's emergency battery"
- },
-/turf/open/floor/plating,
-/area/station/maintenance/fore)
"cCD" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 1
@@ -9716,20 +9709,6 @@
},
/turf/open/floor/iron/white/corner,
/area/station/hallway/secondary/exit/departure_lounge)
-"cMy" = (
-/obj/structure/table,
-/obj/item/folder/white,
-/obj/item/folder/white,
-/obj/item/pen,
-/obj/item/taperecorder,
-/obj/item/paper_bin{
- pixel_y = 6
- },
-/obj/machinery/power/apc/auto_name/directional/east,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable,
-/turf/open/floor/iron/dark,
-/area/station/science/explab)
"cMA" = (
/obj/machinery/door/airlock/security/glass{
name = "Brig Control"
@@ -11342,7 +11321,7 @@
/area/icemoon/surface/outdoors/nospawn)
"dlu" = (
/turf/closed/wall/mineral/wood/nonmetal,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"dlB" = (
/obj/structure/table/wood,
/obj/item/storage/photo_album/chapel,
@@ -11468,18 +11447,6 @@
/obj/effect/turf_decal/tile/red/half/contrasted,
/turf/open/floor/iron,
/area/station/security/checkpoint/supply)
-"dnU" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/light/directional/west,
-/obj/item/kirbyplants/random/dead/research_director,
-/obj/machinery/computer/security/telescreen/rd{
- dir = 4;
- pixel_x = -26
- },
-/turf/open/floor/iron/smooth_half,
-/area/station/command/heads_quarters/rd)
"dnX" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -11838,18 +11805,6 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/carpet/red,
/area/station/security/prison/work)
-"dsk" = (
-/obj/machinery/computer/station_alert{
- dir = 4
- },
-/obj/machinery/computer/security/telescreen/ce{
- dir = 4;
- pixel_x = -24;
- pixel_y = -1
- },
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/ce)
"dsl" = (
/obj/machinery/computer/rdservercontrol{
dir = 1
@@ -11936,6 +11891,16 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment,
/turf/open/floor/iron,
/area/station/engineering/engine_smes)
+"dtq" = (
+/obj/structure/table/wood,
+/obj/machinery/computer/security/telescreen/prison/directional/north,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/machinery/fax{
+ fax_name = "Law Office";
+ name = "Law Office Fax Machine"
+ },
+/turf/open/floor/wood,
+/area/station/service/lawoffice)
"dtr" = (
/obj/machinery/computer/records/medical,
/obj/effect/turf_decal/tile/green/anticorner/contrasted,
@@ -12211,19 +12176,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/maintenance/port/lesser)
-"dxJ" = (
-/obj/structure/table,
-/obj/item/crowbar/red,
-/obj/item/stock_parts/cell/high{
- pixel_x = 6;
- pixel_y = -3
- },
-/obj/structure/sign/poster/random/directional/west,
-/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/hallway/primary/aft)
"dxK" = (
/turf/closed/wall/r_wall,
/area/station/command/meeting_room)
@@ -12580,18 +12532,6 @@
},
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"dDQ" = (
-/obj/structure/table,
-/obj/machinery/cell_charger{
- pixel_y = 3
- },
-/obj/item/stock_parts/cell/high{
- pixel_y = 3
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/obj/machinery/airalarm/directional/north,
-/turf/open/floor/iron/textured,
-/area/mine/mechbay)
"dDV" = (
/obj/effect/spawner/random/structure/girder,
/turf/open/floor/plating,
@@ -12719,27 +12659,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/engineering/atmos/pumproom)
-"dFr" = (
-/obj/structure/table,
-/obj/machinery/computer/security/telescreen/interrogation{
- dir = 1;
- name = "isolation room monitor";
- network = list("isolation");
- pixel_y = -32
- },
-/obj/item/clothing/suit/jacket/straight_jacket,
-/obj/item/clothing/suit/jacket/straight_jacket{
- pixel_x = 6
- },
-/obj/machinery/camera/directional/east{
- c_tag = "Security - Permabrig Prep";
- network = list("ss13","prison");
- view_range = 5
- },
-/obj/structure/cable,
-/obj/machinery/light/small/directional/east,
-/turf/open/floor/iron/smooth,
-/area/station/security/execution/transfer)
"dFt" = (
/turf/closed/wall,
/area/station/hallway/secondary/exit/departure_lounge)
@@ -13004,6 +12923,22 @@
/obj/effect/turf_decal/tile/yellow,
/turf/open/floor/iron,
/area/station/tcommsat/computer)
+"dKr" = (
+/obj/structure/table,
+/obj/machinery/computer/security/telescreen/isolation/directional/south,
+/obj/item/clothing/suit/jacket/straight_jacket,
+/obj/item/clothing/suit/jacket/straight_jacket{
+ pixel_x = 6
+ },
+/obj/machinery/camera/directional/east{
+ c_tag = "Security - Permabrig Prep";
+ network = list("ss13","prison");
+ view_range = 5
+ },
+/obj/structure/cable,
+/obj/machinery/light/small/directional/east,
+/turf/open/floor/iron/smooth,
+/area/station/security/execution/transfer)
"dKy" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/preopen{
@@ -14823,15 +14758,6 @@
},
/turf/open/floor/iron,
/area/station/commons/locker)
-"epd" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable,
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/iron,
-/area/station/maintenance/department/electrical)
"eph" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -15282,7 +15208,7 @@
"evc" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"evk" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -15784,6 +15710,19 @@
/obj/item/flashlight,
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
+"eEm" = (
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/rods/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/electronics/airlock,
+/obj/item/electronics/airlock,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 30
+ },
+/turf/open/floor/plating,
+/area/station/engineering/engine_smes)
"eEr" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/sign/warning/directional/south,
@@ -17163,10 +17102,8 @@
/turf/open/floor/iron,
/area/station/engineering/main)
"fcj" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron,
-/area/station/science/ordnance)
+/turf/closed/wall/r_wall,
+/area/station/science/ordnance/burnchamber)
"fco" = (
/obj/effect/turf_decal/tile/bar/opposingcorners,
/obj/effect/turf_decal/siding/wood{
@@ -18530,6 +18467,18 @@
},
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
+"fyT" = (
+/obj/structure/table,
+/obj/machinery/cell_charger{
+ pixel_y = 3
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_y = 3
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/machinery/airalarm/directional/north,
+/turf/open/floor/iron/textured,
+/area/mine/mechbay)
"fyZ" = (
/obj/machinery/status_display/evac/directional/north,
/turf/open/floor/iron,
@@ -18752,7 +18701,7 @@
"fCS" = (
/obj/machinery/door/poddoor/incinerator_ordmix,
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"fCW" = (
/obj/structure/extinguisher_cabinet/directional/east,
/turf/open/floor/iron/dark/textured,
@@ -18801,6 +18750,15 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/service/janitor)
+"fDM" = (
+/obj/machinery/camera/directional/east{
+ c_tag = "Security Post - Engineering"
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/red,
+/obj/machinery/computer/security/telescreen/engine/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/security/checkpoint/engineering)
"fDP" = (
/obj/structure/cable,
/obj/item/radio/intercom/prison/directional/north,
@@ -19307,6 +19265,14 @@
/obj/machinery/duct,
/turf/open/floor/iron,
/area/station/service/hydroponics)
+"fLH" = (
+/obj/machinery/computer/station_alert{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/computer/security/telescreen/ce/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/command/heads_quarters/ce)
"fLK" = (
/obj/structure/railing/corner{
dir = 8
@@ -19530,6 +19496,13 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/smooth_large,
/area/station/cargo/warehouse)
+"fPO" = (
+/obj/machinery/light/small/directional/north,
+/obj/machinery/computer/security/telescreen/test_chamber/directional/north,
+/turf/open/floor/iron/white/side{
+ dir = 1
+ },
+/area/station/command/heads_quarters/rd)
"fPP" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -19609,6 +19582,12 @@
dir = 1
},
/area/station/security/prison)
+"fQU" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/iron,
+/area/station/engineering/engine_smes)
"fRb" = (
/obj/machinery/door/airlock/maintenance,
/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance,
@@ -19835,6 +19814,16 @@
},
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
+"fVC" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/ecto_sniffer{
+ pixel_x = 6;
+ pixel_y = 6
+ },
+/turf/open/floor/iron,
+/area/station/science/robotics/lab)
"fVD" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/door/airlock/engineering{
@@ -20348,6 +20337,7 @@
/obj/machinery/door/firedoor/heavy,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
"gcB" = (
@@ -20638,7 +20628,7 @@
dir = 5
},
/turf/open/misc/hay/icemoon,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"ghE" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/camera/directional/west{
@@ -22033,6 +22023,12 @@
},
/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/surface/outdoors/nospawn)
+"gEe" = (
+/obj/structure/table,
+/obj/item/binoculars,
+/obj/machinery/computer/security/telescreen/ordnance/directional/north,
+/turf/open/floor/iron,
+/area/station/science/ordnance/testlab)
"gEl" = (
/obj/machinery/door/airlock/maintenance,
/obj/effect/mapping_helpers/airlock/access/any/service/maintenance,
@@ -22046,16 +22042,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/station/science/server)
-"gEo" = (
-/obj/structure/table,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/cell_charger{
- pixel_y = 5
- },
-/turf/open/floor/iron/white/corner{
- dir = 4
- },
-/area/station/science/explab)
"gEq" = (
/obj/structure/chair/office{
dir = 4
@@ -22393,6 +22379,34 @@
"gIY" = (
/turf/closed/wall,
/area/station/medical/medbay/central)
+"gJi" = (
+/obj/structure/table,
+/obj/item/assembly/prox_sensor{
+ pixel_x = -8;
+ pixel_y = 4
+ },
+/obj/item/assembly/prox_sensor{
+ pixel_x = -8;
+ pixel_y = 4
+ },
+/obj/item/assembly/prox_sensor{
+ pixel_x = -8;
+ pixel_y = 4
+ },
+/obj/item/assembly/prox_sensor{
+ pixel_x = -8;
+ pixel_y = 4
+ },
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/crowbar,
+/obj/item/radio/headset/headset_sci{
+ pixel_x = -3
+ },
+/obj/machinery/newscaster/directional/east,
+/obj/machinery/light/directional/east,
+/turf/open/floor/iron,
+/area/station/science/robotics/lab)
"gJs" = (
/obj/machinery/portable_atmospherics/canister,
/obj/structure/disposalpipe/segment,
@@ -23004,6 +23018,19 @@
/obj/effect/turf_decal/tile/brown/half/contrasted,
/turf/open/floor/iron/dark/side,
/area/mine/eva/lower)
+"gSQ" = (
+/obj/structure/table,
+/obj/item/crowbar/red,
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = 6;
+ pixel_y = -3
+ },
+/obj/structure/sign/poster/random/directional/west,
+/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/aft)
"gSU" = (
/obj/item/popsicle_stick{
pixel_y = 1;
@@ -23048,7 +23075,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
-/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry,
+/obj/effect/mapping_helpers/airlock/access/all/medical/general,
/obj/effect/turf_decal/tile/yellow/full,
/turf/open/floor/iron/large,
/area/station/medical/treatment_center)
@@ -23128,6 +23155,15 @@
/obj/structure/sign/poster/contraband/random/directional/east,
/turf/open/floor/plating,
/area/station/maintenance/starboard/aft)
+"gUX" = (
+/obj/effect/turf_decal/trimline/purple/filled/warning{
+ dir = 8
+ },
+/obj/machinery/computer/security/telescreen/test_chamber/directional/east{
+ name = "Xenobio Monitor"
+ },
+/turf/open/floor/iron/white,
+/area/station/science/xenobiology)
"gUY" = (
/obj/machinery/power/apc/auto_name/directional/north,
/obj/structure/cable,
@@ -24660,13 +24696,6 @@
/obj/structure/tank_holder/oxygen,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
-"htc" = (
-/obj/structure/table/reinforced,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/item/rcl/pre_loaded,
-/turf/open/floor/iron,
-/area/station/command/heads_quarters/ce)
"htd" = (
/obj/structure/sign/warning/docking/directional/north,
/turf/open/misc/asteroid/snow/icemoon,
@@ -24745,6 +24774,13 @@
/obj/machinery/vending/autodrobe/all_access,
/turf/open/floor/iron,
/area/station/commons/locker)
+"hut" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/rcl/pre_loaded,
+/turf/open/floor/iron,
+/area/station/command/heads_quarters/ce)
"huB" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -25221,14 +25257,6 @@
/obj/structure/cable,
/turf/open/floor/iron/cafeteria,
/area/station/security/prison/mess)
-"hCx" = (
-/obj/structure/table,
-/obj/item/binoculars,
-/obj/machinery/computer/security/telescreen/ordnance{
- pixel_y = 32
- },
-/turf/open/floor/iron,
-/area/station/science/ordnance/testlab)
"hCC" = (
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 1
@@ -26341,6 +26369,27 @@
/obj/machinery/status_display/evac/directional/south,
/turf/open/floor/wood,
/area/station/service/library)
+"hUf" = (
+/obj/structure/table/glass,
+/obj/item/assembly/signaler{
+ pixel_x = 6;
+ pixel_y = 5
+ },
+/obj/item/reagent_containers/dropper{
+ pixel_x = -4;
+ pixel_y = 4
+ },
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stack/cable_coil,
+/obj/item/pen{
+ pixel_x = -5;
+ pixel_y = 3
+ },
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/iron/cafeteria{
+ dir = 8
+ },
+/area/station/science/research)
"hUi" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -26902,6 +26951,19 @@
/obj/effect/landmark/start/depsec/science,
/turf/open/floor/iron/dark,
/area/station/security/checkpoint/science)
+"idp" = (
+/obj/machinery/button/door/directional/east{
+ id = "cmoprivacy";
+ name = "CMO Shutter Control";
+ pixel_y = 23;
+ req_access = list("cmo")
+ },
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 4
+ },
+/obj/machinery/computer/security/telescreen/cmo/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/command/heads_quarters/cmo)
"idr" = (
/obj/structure/stairs/north,
/obj/structure/railing{
@@ -26929,7 +26991,7 @@
dir = 6
},
/turf/open/misc/hay/icemoon,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"idN" = (
/obj/structure/window/reinforced/spawner/directional/north,
/obj/machinery/door/window/brigdoor/left/directional/south{
@@ -27181,28 +27243,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/maintenance/starboard/fore)
-"iji" = (
-/obj/structure/table,
-/obj/item/multitool/circuit{
- pixel_x = -8
- },
-/obj/item/multitool/circuit{
- pixel_x = -4
- },
-/obj/item/multitool/circuit,
-/obj/item/stock_parts/cell/high{
- pixel_x = 8;
- pixel_y = 9
- },
-/obj/item/stock_parts/cell/high{
- pixel_x = 8;
- pixel_y = -2
- },
-/obj/item/radio/intercom/directional/west,
-/turf/open/floor/iron/white/side{
- dir = 4
- },
-/area/station/science/explab)
"ijj" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -27264,6 +27304,11 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron,
/area/station/security/brig/upper)
+"ijW" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible,
+/obj/structure/sign/warning/secure_area/directional/north,
+/turf/open/floor/iron/dark,
+/area/station/science/explab)
"ijY" = (
/obj/structure/flora/rock/icy/style_random,
/turf/open/misc/asteroid/snow/icemoon,
@@ -28088,7 +28133,7 @@
/area/station/maintenance/port/fore)
"iwq" = (
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"iwx" = (
/obj/machinery/door/airlock/maintenance{
name = "Xenobiology Maintenance"
@@ -28296,26 +28341,6 @@
"izC" = (
/turf/closed/wall,
/area/station/service/bar/atrium)
-"izF" = (
-/obj/effect/turf_decal/bot{
- dir = 1
- },
-/obj/structure/cable,
-/obj/structure/table,
-/obj/item/storage/box/lights/mixed,
-/obj/item/stack/cable_coil,
-/obj/item/stack/cable_coil,
-/obj/item/stock_parts/cell/emproof,
-/obj/item/stock_parts/cell/emproof{
- pixel_x = 6;
- pixel_y = -2
- },
-/obj/machinery/light_switch/directional/south{
- pixel_x = 10
- },
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/engineering/engine_smes)
"izI" = (
/obj/machinery/door/airlock/maintenance,
/obj/structure/disposalpipe/segment,
@@ -28490,7 +28515,7 @@
"iCe" = (
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
/turf/closed/wall/r_wall,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"iCg" = (
/obj/effect/turf_decal/stripes/corner{
dir = 1
@@ -28874,12 +28899,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
-"iIW" = (
-/obj/structure/table,
-/obj/item/plant_analyzer,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/plating,
-/area/station/engineering/storage/tech)
"iJl" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/turf_decal/siding/wood{
@@ -29545,6 +29564,21 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/morgue)
+"iTE" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/effect/turf_decal/trimline/red/filled/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/red/filled/corner{
+ dir = 8
+ },
+/obj/machinery/holopad,
+/obj/effect/landmark/start/depsec/medical,
+/obj/machinery/computer/security/telescreen/cmo/directional/east,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/security/checkpoint/medical)
"iTJ" = (
/obj/structure/table,
/obj/item/paper_bin{
@@ -29736,16 +29770,6 @@
/obj/structure/table/reinforced,
/turf/open/floor/iron/dark,
/area/station/medical/morgue)
-"iWO" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/requests_console/auto_name/directional/north,
-/obj/effect/turf_decal/tile/neutral/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/station/commons/storage/primary)
"iWP" = (
/obj/effect/turf_decal/trimline/blue/filled/warning{
dir = 1
@@ -30518,29 +30542,14 @@
"jko" = (
/obj/structure/railing,
/obj/structure/rack,
-/obj/item/gun/energy/e_gun/dragnet{
- pixel_y = 4
- },
-/obj/item/gun/energy/e_gun/dragnet,
/obj/structure/cable,
/obj/machinery/door/firedoor/border_only,
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 1
},
+/obj/effect/spawner/random/armory/dragnet,
/turf/open/floor/iron/dark/textured,
/area/station/ai_monitored/security/armory/upper)
-"jkx" = (
-/obj/machinery/computer/security/telescreen/engine{
- dir = 8;
- pixel_x = 24
- },
-/obj/machinery/camera/directional/east{
- c_tag = "Security Post - Engineering"
- },
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/red,
-/turf/open/floor/iron/dark,
-/area/station/security/checkpoint/engineering)
"jkH" = (
/obj/structure/training_machine,
/obj/effect/landmark/blobstart,
@@ -30551,7 +30560,7 @@
dir = 9
},
/turf/open/misc/hay/icemoon,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"jkN" = (
/obj/effect/spawner/random/entertainment/arcade,
/obj/machinery/status_display/ai/directional/north,
@@ -31082,34 +31091,6 @@
dir = 1
},
/area/station/service/bar)
-"jth" = (
-/obj/structure/table,
-/obj/item/assembly/prox_sensor{
- pixel_x = -8;
- pixel_y = 4
- },
-/obj/item/assembly/prox_sensor{
- pixel_x = -8;
- pixel_y = 4
- },
-/obj/item/assembly/prox_sensor{
- pixel_x = -8;
- pixel_y = 4
- },
-/obj/item/assembly/prox_sensor{
- pixel_x = -8;
- pixel_y = 4
- },
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high,
-/obj/item/crowbar,
-/obj/item/radio/headset/headset_sci{
- pixel_x = -3
- },
-/obj/machinery/newscaster/directional/east,
-/obj/machinery/light/directional/east,
-/turf/open/floor/iron,
-/area/station/science/robotics/lab)
"jtm" = (
/obj/machinery/porta_turret/ai{
dir = 4;
@@ -33572,16 +33553,6 @@
dir = 4
},
/area/station/maintenance/port/fore)
-"keX" = (
-/obj/structure/table,
-/obj/item/stack/cable_coil{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/stack/cable_coil,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/plating,
-/area/station/engineering/storage/tech)
"keZ" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -33907,13 +33878,6 @@
/obj/effect/spawner/random/armory/bulletproof_helmet,
/turf/open/floor/iron/dark/textured,
/area/station/ai_monitored/security/armory)
-"kjh" = (
-/obj/machinery/modular_computer/preset/engineering,
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/iron/dark,
-/area/station/engineering/engine_smes)
"kjo" = (
/obj/effect/mapping_helpers/airlock/access/any/supply/maintenance,
/obj/machinery/door/airlock/engineering{
@@ -36851,7 +36815,7 @@
/obj/structure/table/wood,
/obj/item/flashlight/lantern/on,
/turf/open/misc/hay/icemoon,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"kZa" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -37310,7 +37274,7 @@
dir = 8
},
/turf/open/floor/engine,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"lgW" = (
/obj/machinery/meter/monitored/distro_loop,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible,
@@ -39007,6 +38971,16 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
+"lHm" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/computer/security/telescreen/test_chamber/directional/north,
+/turf/open/floor/iron,
+/area/station/science/explab)
"lHr" = (
/obj/structure/stairs/north,
/turf/open/floor/iron/freezer,
@@ -39327,18 +39301,6 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/engine/o2,
/area/station/engineering/atmos)
-"lMi" = (
-/obj/structure/table/wood,
-/obj/machinery/computer/security/telescreen/prison{
- pixel_y = 32
- },
-/obj/effect/decal/cleanable/cobweb/cobweb2,
-/obj/machinery/fax{
- fax_name = "Law Office";
- name = "Law Office Fax Machine"
- },
-/turf/open/floor/wood,
-/area/station/service/lawoffice)
"lMu" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -40040,13 +40002,6 @@
dir = 10
},
/area/station/science/research)
-"lYz" = (
-/obj/machinery/computer/records/security,
-/obj/machinery/light_switch/directional/north,
-/turf/open/floor/iron/dark/textured_edge{
- dir = 8
- },
-/area/station/security/brig/entrance)
"lYR" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
@@ -40487,16 +40442,6 @@
/obj/effect/turf_decal/tile/blue,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
-"mgu" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/ecto_sniffer{
- pixel_x = 6;
- pixel_y = 6
- },
-/turf/open/floor/iron,
-/area/station/science/robotics/lab)
"mgy" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -40539,7 +40484,7 @@
dir = 10
},
/turf/open/misc/hay/icemoon,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"mhq" = (
/obj/structure/closet,
/obj/effect/spawner/random/maintenance,
@@ -40646,16 +40591,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark,
/area/station/maintenance/disposal/incinerator)
-"mko" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4
- },
-/obj/structure/sign/warning/secure_area/directional/north,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/science/explab)
"mkr" = (
/obj/structure/closet/secure_closet/hydroponics,
/obj/effect/turf_decal/tile/green/opposingcorners{
@@ -41329,22 +41264,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
-"mvU" = (
-/obj/machinery/button/door/directional/east{
- id = "cmoprivacy";
- name = "CMO Shutter Control";
- pixel_y = 23;
- req_access = list("cmo")
- },
-/obj/effect/turf_decal/trimline/blue/filled/line{
- dir = 4
- },
-/obj/machinery/computer/security/telescreen/cmo{
- dir = 8;
- pixel_x = 27
- },
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/cmo)
"mwh" = (
/obj/structure/table,
/obj/item/storage/fancy/donut_box,
@@ -41526,27 +41445,6 @@
},
/turf/open/floor/iron,
/area/station/service/hydroponics)
-"myU" = (
-/obj/structure/table/glass,
-/obj/item/assembly/signaler{
- pixel_x = 6;
- pixel_y = 5
- },
-/obj/item/reagent_containers/dropper{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/item/stock_parts/cell/high,
-/obj/item/stack/cable_coil,
-/obj/item/pen{
- pixel_x = -5;
- pixel_y = 3
- },
-/obj/machinery/newscaster/directional/west,
-/turf/open/floor/iron/cafeteria{
- dir = 8
- },
-/area/station/science/research)
"myX" = (
/obj/machinery/light/directional/north,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -42072,7 +41970,7 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/decal/cleanable/dirt,
/obj/structure/table,
-/obj/item/clothing/mask/cigarette{
+/obj/item/cigarette{
pixel_x = 6;
pixel_y = 12
},
@@ -42266,16 +42164,6 @@
},
/turf/open/floor/wood/parquet,
/area/station/service/bar/atrium)
-"mNj" = (
-/obj/machinery/computer/security{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/computer/security/telescreen/prison{
- pixel_y = 32
- },
-/turf/open/floor/iron/showroomfloor,
-/area/station/security/warden)
"mNy" = (
/obj/effect/turf_decal/tile/green{
dir = 8
@@ -43322,7 +43210,7 @@
},
/obj/item/soap/deluxe,
/turf/open/misc/hay/icemoon,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"ncB" = (
/obj/machinery/door/airlock/security/glass{
name = "Brig Walkway"
@@ -43531,6 +43419,27 @@
/obj/machinery/meter,
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
+"neV" = (
+/obj/effect/turf_decal/bot{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/gloves/color/yellow,
+/obj/structure/cable,
+/obj/item/mod/module/plasma_stabilizer,
+/obj/item/stock_parts/power_store/cell/emproof{
+ pixel_x = -4;
+ pixel_y = -1
+ },
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/item/mod/module/signlang_radio,
+/obj/item/mod/module/thermal_regulator,
+/turf/open/floor/iron/dark,
+/area/station/engineering/engine_smes)
"nfd" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/firealarm/directional/west,
@@ -44142,6 +44051,16 @@
/obj/machinery/vending/assist,
/turf/open/floor/plating,
/area/station/engineering/storage/tech)
+"nnM" = (
+/obj/structure/table,
+/obj/item/stack/cable_coil{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/stack/cable_coil,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/plating,
+/area/station/engineering/storage/tech)
"nnR" = (
/obj/machinery/holopad,
/turf/open/floor/carpet,
@@ -45291,6 +45210,12 @@
},
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
+"nCW" = (
+/obj/structure/table,
+/turf/open/floor/iron/dark/textured_edge{
+ dir = 8
+ },
+/area/station/security/brig/entrance)
"nDd" = (
/obj/machinery/status_display/evac/directional/west,
/obj/effect/turf_decal/stripes/corner,
@@ -45443,7 +45368,7 @@
"nEI" = (
/obj/item/flashlight/lantern/on,
/turf/open/misc/hay/icemoon,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"nEV" = (
/obj/machinery/vending/wardrobe/sec_wardrobe,
/obj/structure/cable,
@@ -46184,6 +46109,18 @@
},
/turf/open/floor/wood,
/area/station/hallway/secondary/service)
+"nQq" = (
+/obj/machinery/cell_charger{
+ pixel_y = 5
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_y = 6
+ },
+/obj/structure/table/glass,
+/turf/open/floor/iron/white/side{
+ dir = 9
+ },
+/area/station/science/lab)
"nQu" = (
/obj/machinery/holopad,
/obj/effect/turf_decal/bot,
@@ -46514,6 +46451,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark/smooth_half,
/area/station/ai_monitored/command/storage/eva)
+"nUI" = (
+/obj/machinery/computer/records/security,
+/obj/machinery/light_switch/directional/north{
+ pixel_x = -16
+ },
+/obj/machinery/computer/security/telescreen/normal/directional/north,
+/turf/open/floor/iron/dark/textured_edge{
+ dir = 8
+ },
+/area/station/security/brig/entrance)
"nUJ" = (
/obj/machinery/flasher/directional/east{
id = "brigentry"
@@ -46933,7 +46880,7 @@
"ocd" = (
/obj/machinery/igniter/incinerator_ordmix,
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"ocp" = (
/obj/effect/landmark/start/hangover,
/obj/effect/decal/cleanable/dirt,
@@ -47295,7 +47242,7 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/mapping_helpers/airlock/access/all/medical/chemistry,
+/obj/effect/mapping_helpers/airlock/access/all/medical/general,
/turf/open/floor/iron/smooth,
/area/station/maintenance/department/medical/central)
"oiD" = (
@@ -48151,16 +48098,6 @@
},
/turf/open/floor/plating,
/area/station/maintenance/fore)
-"ouE" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/computer/security/telescreen/engine{
- dir = 8;
- pixel_x = 24
- },
-/turf/open/floor/iron,
-/area/station/engineering/engine_smes)
"ouP" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible,
@@ -49277,20 +49214,6 @@
/obj/structure/sign/warning/gas_mask,
/turf/open/floor/plating,
/area/station/maintenance/solars/port/fore)
-"oLW" = (
-/obj/machinery/computer/security/telescreen{
- desc = "Used to access the various cameras on the station.";
- dir = 1;
- layer = 3.1;
- name = "Security Camera Monitor";
- network = list("ss13");
- pixel_y = 2
- },
-/obj/structure/table,
-/turf/open/floor/iron/dark/textured_edge{
- dir = 8
- },
-/area/station/security/brig/entrance)
"oMa" = (
/obj/structure/marker_beacon/burgundy,
/obj/effect/turf_decal/weather/snow/corner{
@@ -49502,18 +49425,6 @@
/obj/item/soap/nanotrasen,
/turf/open/floor/iron/dark,
/area/station/security/execution/education)
-"oPq" = (
-/obj/machinery/cell_charger{
- pixel_y = 5
- },
-/obj/item/stock_parts/cell/high{
- pixel_y = 6
- },
-/obj/structure/table/glass,
-/turf/open/floor/iron/white/side{
- dir = 9
- },
-/area/station/science/lab)
"oPr" = (
/obj/effect/landmark/start/bartender,
/obj/effect/turf_decal/siding/wood{
@@ -51430,19 +51341,6 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/stone,
/area/station/service/bar/atrium)
-"ptx" = (
-/obj/structure/closet/crate,
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/stack/rods/fifty,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/electronics/airlock,
-/obj/item/electronics/airlock,
-/obj/item/stock_parts/cell/high,
-/obj/item/stack/sheet/mineral/plasma{
- amount = 30
- },
-/turf/open/floor/plating,
-/area/station/engineering/engine_smes)
"ptB" = (
/obj/machinery/modular_computer/preset/id{
dir = 8
@@ -51515,27 +51413,6 @@
/obj/effect/mapping_helpers/airlock/access/all/medical/cmo,
/turf/open/floor/plating,
/area/station/maintenance/aft/greater)
-"puI" = (
-/obj/effect/turf_decal/bot{
- dir = 1
- },
-/obj/structure/table,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/gloves/color/yellow,
-/obj/structure/cable,
-/obj/item/mod/module/plasma_stabilizer,
-/obj/item/stock_parts/cell/emproof{
- pixel_x = -4;
- pixel_y = -1
- },
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/item/mod/module/signlang_radio,
-/obj/item/mod/module/thermal_regulator,
-/turf/open/floor/iron/dark,
-/area/station/engineering/engine_smes)
"puN" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -52239,6 +52116,12 @@
},
/turf/open/floor/iron,
/area/station/security/prison/mess)
+"pEY" = (
+/obj/structure/table,
+/obj/item/plant_analyzer,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/plating,
+/area/station/engineering/storage/tech)
"pFg" = (
/obj/structure/chair{
dir = 8
@@ -52450,17 +52333,6 @@
/obj/machinery/vending/wardrobe/curator_wardrobe,
/turf/open/floor/engine/cult,
/area/station/service/library)
-"pIF" = (
-/obj/structure/rack,
-/obj/item/lighter,
-/obj/item/clothing/glasses/meson{
- pixel_y = 4
- },
-/obj/item/stock_parts/cell/high,
-/obj/item/reagent_containers/pill/patch/aiuri,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/ce)
"pJb" = (
/obj/structure/sign/nanotrasen{
pixel_x = -32
@@ -52693,6 +52565,14 @@
},
/turf/open/floor/iron/freezer,
/area/station/commons/toilet/locker)
+"pLx" = (
+/obj/machinery/computer/security{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/computer/security/telescreen/prison/directional/north,
+/turf/open/floor/iron/showroomfloor,
+/area/station/security/warden)
"pLZ" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -52950,6 +52830,14 @@
},
/turf/open/floor/iron/white,
/area/station/medical/virology)
+"pPE" = (
+/obj/machinery/modular_computer/preset/id,
+/obj/machinery/computer/security/telescreen/vault/directional/north,
+/obj/effect/turf_decal/tile/brown/half/contrasted{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/command/heads_quarters/qm)
"pPK" = (
/obj/structure/stairs/east,
/turf/open/floor/iron/dark/textured,
@@ -53518,6 +53406,15 @@
},
/turf/open/floor/iron,
/area/station/engineering/lobby)
+"pZA" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/light/directional/west,
+/obj/item/kirbyplants/random/dead/research_director,
+/obj/machinery/computer/security/telescreen/rd/directional/west,
+/turf/open/floor/iron/smooth_half,
+/area/station/command/heads_quarters/rd)
"pZD" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -53710,7 +53607,7 @@
"qbM" = (
/obj/structure/ore_container/food_trough/raptor_trough,
/turf/open/misc/hay/icemoon,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"qbO" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -53770,12 +53667,6 @@
/obj/machinery/plumbing/sender,
/turf/open/floor/plating,
/area/station/medical/chemistry)
-"qde" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high/empty,
-/turf/open/floor/iron/dark,
-/area/station/engineering/storage)
"qdl" = (
/obj/machinery/light/small/directional/east,
/obj/effect/decal/cleanable/dirt,
@@ -55751,17 +55642,6 @@
/obj/item/crowbar/red,
/turf/open/floor/glass/reinforced,
/area/station/science/xenobiology)
-"qFq" = (
-/obj/machinery/computer/security/telescreen/interrogation{
- pixel_y = 30
- },
-/obj/effect/turf_decal/tile/red/anticorner/contrasted{
- dir = 4
- },
-/turf/open/floor/iron/dark/corner{
- dir = 8
- },
-/area/station/security/processing)
"qFs" = (
/obj/effect/spawner/random/vending/snackvend,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -55844,18 +55724,6 @@
/obj/structure/cable,
/turf/open/floor/iron/grimy,
/area/station/service/bar/backroom)
-"qGi" = (
-/obj/effect/turf_decal/trimline/purple/filled/warning{
- dir = 8
- },
-/obj/machinery/computer/security/telescreen{
- dir = 8;
- name = "Xenobio Monitor";
- network = list("xeno");
- pixel_x = 26
- },
-/turf/open/floor/iron/white,
-/area/station/science/xenobiology)
"qGJ" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -56828,7 +56696,7 @@
"qTp" = (
/obj/structure/table/wood,
/obj/item/clothing/mask/fakemoustache,
-/obj/item/clothing/mask/cigarette/pipe,
+/obj/item/cigarette/pipe,
/obj/item/clothing/glasses/monocle,
/obj/item/radio/intercom/directional/north,
/turf/open/floor/iron/grimy,
@@ -58016,6 +57884,16 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
+"rlL" = (
+/obj/machinery/light_switch/directional/north{
+ pixel_x = -7
+ },
+/obj/structure/table,
+/obj/item/stock_parts/power_store/cell/high/empty,
+/obj/machinery/cell_charger,
+/obj/effect/turf_decal/tile/brown/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/engineering/lobby)
"rlS" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -58050,6 +57928,17 @@
/obj/machinery/firealarm/directional/north,
/turf/open/floor/iron/white,
/area/station/science/ordnance)
+"rms" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/paper_bin{
+ pixel_y = 6
+ },
+/obj/item/taperecorder{
+ pixel_x = 9
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/explab)
"rmv" = (
/obj/structure/rack,
/obj/item/wrench,
@@ -58081,7 +57970,7 @@
/obj/effect/mapping_helpers/airlock/locked,
/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"rmM" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
@@ -58237,7 +58126,7 @@
"roW" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/closed/wall/r_wall,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"roX" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -58860,7 +58749,7 @@
dir = 8
},
/turf/open/floor/engine,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"rzj" = (
/obj/structure/table,
/obj/item/stack/sheet/iron/fifty{
@@ -58945,7 +58834,7 @@
},
/obj/item/raptor_dex,
/turf/open/misc/hay/icemoon,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"rAr" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -59327,6 +59216,7 @@
"rEj" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
/turf/open/floor/iron,
/area/station/science/ordnance)
"rEn" = (
@@ -59334,7 +59224,7 @@
dir = 4
},
/turf/open/misc/hay/icemoon,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"rEp" = (
/obj/structure/table,
/obj/item/hand_labeler,
@@ -61706,7 +61596,7 @@
},
/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
/turf/open/floor/engine,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"sqN" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -62983,6 +62873,16 @@
/obj/machinery/duct,
/turf/open/floor/iron/kitchen/diagonal,
/area/station/service/kitchen)
+"sHy" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/requests_console/auto_name/directional/north,
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 1
+ },
+/turf/open/floor/iron/dark,
+/area/station/commons/storage/primary)
"sHC" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -63226,17 +63126,6 @@
/obj/machinery/airalarm/directional/west,
/turf/open/floor/wood,
/area/station/command/meeting_room)
-"sKV" = (
-/obj/machinery/computer/security/telescreen{
- name = "Test Chamber Monitor";
- network = list("xeno");
- pixel_y = 26
- },
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/iron/white/side{
- dir = 1
- },
-/area/station/command/heads_quarters/rd)
"sKW" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
@@ -65040,16 +64929,6 @@
},
/turf/open/floor/plating/snowed/icemoon,
/area/icemoon/surface/outdoors/nospawn)
-"trb" = (
-/obj/structure/table,
-/obj/machinery/computer/security/telescreen{
- dir = 8;
- name = "Test Chamber Monitor";
- network = list("test")
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/iron/dark,
-/area/station/science/explab)
"trc" = (
/obj/machinery/conveyor{
dir = 4;
@@ -65061,6 +64940,16 @@
"trm" = (
/turf/open/floor/plating,
/area/station/science/ordnance/testlab)
+"trn" = (
+/obj/structure/table,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/cell_charger{
+ pixel_y = 5
+ },
+/turf/open/floor/iron/white/corner{
+ dir = 4
+ },
+/area/station/science/explab)
"tru" = (
/obj/structure/chair/pew/left{
dir = 1
@@ -65615,6 +65504,15 @@
dir = 4
},
/area/station/service/chapel)
+"tAK" = (
+/obj/machinery/computer/security/telescreen/interrogation/directional/north,
+/obj/effect/turf_decal/tile/red/anticorner/contrasted{
+ dir = 4
+ },
+/turf/open/floor/iron/dark/corner{
+ dir = 8
+ },
+/area/station/security/processing)
"tAL" = (
/obj/structure/table,
/obj/machinery/light/small/directional/south,
@@ -65866,6 +65764,16 @@
},
/turf/open/floor/plating,
/area/station/cargo/storage)
+"tEn" = (
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/radio/intercom/directional/north,
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 1
+ },
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/command/storage/eva)
"tEs" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -66627,6 +66535,28 @@
/obj/item/trash/energybar,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
+"tPx" = (
+/obj/structure/table,
+/obj/item/multitool/circuit{
+ pixel_x = -8
+ },
+/obj/item/multitool/circuit{
+ pixel_x = -4
+ },
+/obj/item/multitool/circuit,
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = 8;
+ pixel_y = 9
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = 8;
+ pixel_y = -2
+ },
+/obj/item/radio/intercom/directional/west,
+/turf/open/floor/iron/white/side{
+ dir = 4
+ },
+/area/station/science/explab)
"tPz" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white/side{
@@ -67478,6 +67408,14 @@
/obj/structure/cable,
/turf/open/floor/plating/snowed/icemoon,
/area/icemoon/surface/outdoors/nospawn)
+"uek" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/potato{
+ name = "\improper Beepsky's emergency battery"
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/fore)
"uep" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -67833,10 +67771,6 @@
/obj/effect/decal/cleanable/plastic,
/turf/open/floor/plating,
/area/station/maintenance/port/lesser)
-"ukf" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible,
-/turf/open/floor/iron/dark,
-/area/station/science/explab)
"uko" = (
/obj/structure/chair/pew/left{
dir = 1
@@ -72337,7 +72271,7 @@
/area/station/cargo/drone_bay)
"vFb" = (
/obj/structure/table/wood,
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 7;
pixel_y = 10
},
@@ -73344,6 +73278,20 @@
/obj/item/toy/snowball,
/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/surface/outdoors/nospawn)
+"vXV" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 8
+ },
+/obj/machinery/light/small/directional/west,
+/obj/machinery/requests_console/directional/west{
+ department = "Head of Personnel's Desk";
+ name = "Head of Personnel's Requests Console"
+ },
+/obj/effect/mapping_helpers/requests_console/assistance,
+/obj/effect/mapping_helpers/requests_console/announcement,
+/obj/effect/mapping_helpers/requests_console/information,
+/turf/open/floor/iron,
+/area/station/command/heads_quarters/hop)
"vYa" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/effect/turf_decal/delivery,
@@ -74888,8 +74836,13 @@
/obj/effect/turf_decal/siding/yellow/corner,
/obj/machinery/status_display/evac/directional/south,
/obj/structure/table,
-/obj/effect/spawner/random/trash/food_packaging,
-/obj/effect/spawner/random/trash/cigbutt,
+/obj/item/flatpack{
+ board = /obj/item/circuitboard/machine/flatpacker;
+ pixel_x = -5
+ },
+/obj/item/multitool{
+ pixel_x = 8
+ },
/turf/open/floor/iron,
/area/station/engineering/lobby)
"wve" = (
@@ -74902,7 +74855,7 @@
/area/station/service/chapel)
"wvu" = (
/turf/open/misc/hay/icemoon,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"wvv" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -75855,7 +75808,7 @@
"wKh" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible,
/turf/closed/wall/r_wall,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"wKv" = (
/obj/structure/table,
/obj/item/radio/off,
@@ -76320,6 +76273,12 @@
"wRa" = (
/turf/open/openspace,
/area/station/security/prison)
+"wRc" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high/empty,
+/turf/open/floor/iron/dark,
+/area/station/engineering/storage)
"wRd" = (
/turf/open/floor/iron,
/area/station/engineering/main)
@@ -76585,16 +76544,6 @@
/obj/effect/mapping_helpers/no_atoms_ontop,
/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/surface/outdoors/nospawn)
-"wUE" = (
-/obj/machinery/light_switch/directional/north{
- pixel_x = -7
- },
-/obj/structure/table,
-/obj/item/stock_parts/cell/high/empty,
-/obj/machinery/cell_charger,
-/obj/effect/turf_decal/tile/brown/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/engineering/lobby)
"wUJ" = (
/obj/machinery/computer/atmos_alert,
/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{
@@ -78115,6 +78064,16 @@
/obj/item/food/grown/carrot,
/turf/open/misc/asteroid/snow/standard_air,
/area/station/science/research)
+"xsP" = (
+/obj/structure/table,
+/obj/item/folder/white,
+/obj/item/folder/white,
+/obj/item/pen,
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/explab)
"xtc" = (
/obj/effect/turf_decal/trimline/blue/filled/warning{
dir = 1
@@ -78456,7 +78415,7 @@
dir = 8
},
/turf/open/misc/hay/icemoon,
-/area/icemoon/surface)
+/area/icemoon/underground/explored)
"xxI" = (
/obj/machinery/airalarm/directional/north,
/obj/item/kirbyplants/random,
@@ -79003,6 +78962,7 @@
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
/turf/open/floor/iron,
/area/station/science/ordnance)
"xEW" = (
@@ -169285,7 +169245,7 @@ hdb
avh
qGg
uUT
-dDQ
+fyT
lQh
diI
uUT
@@ -169988,7 +169948,7 @@ iDt
ijY
pfw
wUj
-lMi
+dtq
jeJ
aFg
vwl
@@ -174873,7 +174833,7 @@ ihB
ddp
hBg
nzj
-dFr
+dKr
pOk
par
rsM
@@ -194477,7 +194437,7 @@ opD
mxc
hFb
hFb
-fcj
+qRO
mEL
vqv
fkN
@@ -194991,7 +194951,7 @@ opD
jGR
hFb
hFb
-fcj
+qRO
rRl
vfI
vUY
@@ -195246,9 +195206,9 @@ odm
odm
nqy
jGR
-fcj
-fcj
-fcj
+qRO
+qRO
+qRO
rRl
ndb
bnZ
@@ -195496,10 +195456,10 @@ thA
thA
rcY
iDt
-uIf
-uIf
-uIf
-uIf
+fcj
+fcj
+fcj
+fcj
roW
roW
bId
@@ -230665,7 +230625,7 @@ lJO
qzs
jnV
lJO
-iWO
+sHy
gHS
iMT
hqx
@@ -233252,7 +233212,7 @@ pdf
pdf
wBb
tKI
-cnU
+pPE
alT
dcs
kin
@@ -237673,7 +237633,7 @@ mNY
kCn
mNY
dUn
-ptx
+eEm
cpH
kbJ
kbJ
@@ -237684,7 +237644,7 @@ epY
vWe
kIt
kMY
-qde
+wRc
lha
kAK
iLY
@@ -238147,7 +238107,7 @@ dkb
kmi
iYb
xaA
-crH
+vXV
wjv
pec
fJl
@@ -238703,7 +238663,7 @@ mNY
akL
tvF
tvF
-izF
+aYS
gTK
ruO
fKe
@@ -238930,7 +238890,7 @@ ylU
bep
paM
xxQ
-keX
+nnM
kzO
gdP
ykL
@@ -239379,7 +239339,7 @@ feJ
uGr
uGr
iDq
-mNj
+pLx
lAL
gPp
iDq
@@ -239400,7 +239360,7 @@ wqx
gEb
gYp
bWn
-bMC
+tEn
cGt
wRI
qdE
@@ -239957,7 +239917,7 @@ dnq
vrX
pua
paM
-iIW
+pEY
vJI
uud
gdP
@@ -239988,7 +239948,7 @@ mNY
ixG
aPf
dzJ
-puI
+neV
twt
mEw
sSJ
@@ -240163,9 +240123,9 @@ sDl
sDl
sDl
psN
-lYz
+nUI
dkY
-oLW
+nCW
hzY
bRn
fng
@@ -240232,7 +240192,7 @@ dPT
pRj
pMu
gVD
-dxJ
+gSQ
ajF
qwe
uJH
@@ -240756,7 +240716,7 @@ kKH
pRj
eAj
sro
-kjh
+apL
qkT
kzA
whW
@@ -241015,7 +240975,7 @@ fFy
mNY
bTq
xUP
-ouE
+fQU
rpF
twt
fcg
@@ -241529,7 +241489,7 @@ vkz
uoF
pcg
deD
-dsk
+fLH
qnC
isX
eBI
@@ -241774,7 +241734,7 @@ vvv
tTV
jtA
bID
-wUE
+rlL
miw
gCK
cMd
@@ -242039,7 +241999,7 @@ dcC
jGB
akz
sCA
-pIF
+aSw
ojv
bAT
eri
@@ -242284,7 +242244,7 @@ oyj
gwK
nEV
bry
-jkx
+fDM
fLq
hro
tKi
@@ -242298,7 +242258,7 @@ wHj
mBB
juH
ojv
-htc
+hut
mDw
jDT
qKQ
@@ -245030,7 +244990,7 @@ ihb
bnM
iRM
kkl
-qFq
+tAK
gUs
ykw
lbk
@@ -245554,7 +245514,7 @@ bln
bln
fsm
bUx
-cCC
+uek
wph
fnS
skl
@@ -250993,7 +250953,7 @@ pJC
nKa
dhk
cDT
-atC
+iTE
cAI
cMN
uYm
@@ -251250,7 +251210,7 @@ nGA
nKa
nTV
jPl
-bjm
+bGD
kXM
nKa
xXV
@@ -252277,7 +252237,7 @@ vwO
pxn
vBG
mQr
-mvU
+idp
rZZ
opc
qPI
@@ -254863,7 +254823,7 @@ jIP
qOH
veX
wHc
-sKV
+fPO
pTU
itt
ily
@@ -255640,7 +255600,7 @@ mfV
xpA
uHc
cpg
-qGi
+gUX
cpg
cdl
pMF
@@ -256152,7 +256112,7 @@ mYq
nyH
lFW
rEd
-dnU
+pZA
gSN
jbU
wnX
@@ -257421,8 +257381,8 @@ gqK
nxU
gjg
dxg
-jth
-mgu
+gJi
+fVC
dkr
cHQ
jDm
@@ -257703,7 +257663,7 @@ kLy
bGA
lKq
bNu
-myU
+hUf
bKm
xMT
hjE
@@ -257711,8 +257671,8 @@ sJP
bkS
pJc
iBO
-iji
-gEo
+tPx
+trn
bgx
buv
jhC
@@ -259187,7 +259147,7 @@ fLb
oHh
kKL
bpQ
-epd
+bsc
oih
dmL
lUC
@@ -260019,7 +259979,7 @@ xUk
aSB
tHT
nsZ
-mko
+lHm
oZn
sFj
rck
@@ -260249,7 +260209,7 @@ mrw
kuV
cAi
qWn
-oPq
+nQq
fOR
tFF
tia
@@ -260276,9 +260236,9 @@ xUk
sqt
duE
nsZ
-ukf
-cMy
-trb
+ijW
+xsP
+rms
sXC
rDZ
rDZ
@@ -262832,7 +262792,7 @@ xnt
egR
pSz
elw
-hCx
+gEe
mEU
enq
kuy
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index dc42fb3fe9ce6..1713d3784311d 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -216,13 +216,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/main)
-"aev" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/structure/disposalpipe/segment,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/plating,
-/area/station/maintenance/starboard/greater)
"aez" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -276,6 +269,13 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/carpet,
/area/station/commons/dorms)
+"afM" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/iron,
+/area/station/engineering/main)
"afZ" = (
/obj/machinery/vending/coffee,
/obj/structure/disposalpipe/segment,
@@ -805,6 +805,14 @@
/obj/machinery/power/apc/auto_name/directional/south,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/security/armory)
+"apO" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/light/cold/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/engineering/transit_tube)
"apS" = (
/obj/structure/sink/directional/east,
/obj/effect/turf_decal/stripes/line{
@@ -1105,14 +1113,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/wood,
/area/station/command/corporate_showroom)
-"avJ" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron,
-/area/station/ai_monitored/command/storage/eva)
"avK" = (
/turf/closed/wall,
/area/station/maintenance/fore/lesser)
@@ -1747,7 +1747,10 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
},
-/obj/machinery/firealarm/directional/east,
+/obj/machinery/power/apc/auto_name/directional/east{
+ areastring = "/area/station/science/ordnance/burnchamber"
+ },
+/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
"aHM" = (
@@ -1874,20 +1877,6 @@
/obj/structure/sign/warning/fire,
/turf/closed/wall/r_wall,
/area/station/engineering/supermatter)
-"aJz" = (
-/obj/structure/table/glass,
-/obj/item/tank/internals/emergency_oxygen{
- pixel_x = -8
- },
-/obj/item/clothing/mask/breath{
- pixel_x = 4
- },
-/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/station/engineering/transit_tube)
"aJI" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -2382,15 +2371,6 @@
"aRI" = (
/turf/open/floor/circuit/green,
/area/station/science/robotics/mechbay)
-"aRS" = (
-/obj/machinery/computer/security/telescreen/ce{
- dir = 1;
- pixel_y = -30
- },
-/obj/machinery/pdapainter/engineering,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/ce)
"aRV" = (
/obj/machinery/porta_turret/ai{
dir = 1
@@ -2951,6 +2931,12 @@
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
+"baG" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/plating,
+/area/station/maintenance/port/aft)
"baM" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -3806,7 +3792,7 @@
/obj/item/clothing/mask/animal/horsehead,
/obj/structure/table/wood,
/obj/machinery/airalarm/directional/south,
-/obj/item/clothing/mask/cigarette/pipe,
+/obj/item/cigarette/pipe,
/obj/item/clothing/mask/fakemoustache,
/obj/structure/sign/poster/contraband/random/directional/west,
/turf/open/floor/wood,
@@ -3829,7 +3815,7 @@
/area/station/engineering/atmospherics_engine)
"bqC" = (
/obj/structure/table/wood,
-/obj/item/clothing/mask/cigarette/pipe,
+/obj/item/cigarette/pipe,
/turf/open/floor/wood,
/area/station/commons/lounge)
"bqJ" = (
@@ -4312,6 +4298,31 @@
/obj/effect/landmark/start/assistant,
/turf/open/floor/iron,
/area/station/commons/fitness/recreation)
+"byE" = (
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 1
+ },
+/obj/machinery/button/door/directional/north{
+ id = "rdrnd";
+ name = "Research and Development Containment Control";
+ pixel_x = -6;
+ req_access = list("rd")
+ },
+/obj/machinery/button/door/directional/north{
+ id = "rdordnance";
+ name = "Ordnance Containment Control";
+ pixel_x = 6;
+ req_access = list("rd")
+ },
+/obj/machinery/button/door/directional/north{
+ id = "rdoffice";
+ name = "Privacy Control";
+ pixel_y = 34;
+ req_access = list("rd")
+ },
+/obj/machinery/light/small/directional/north,
+/turf/open/floor/iron/white,
+/area/station/command/heads_quarters/rd)
"byQ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -4569,7 +4580,7 @@
/obj/effect/mapping_helpers/airlock/locked,
/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"bEA" = (
/obj/structure/cable,
/obj/machinery/camera/directional/south{
@@ -5167,16 +5178,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/security/brig)
-"bPu" = (
-/obj/structure/table,
-/obj/machinery/cell_charger{
- pixel_y = 5
- },
-/obj/item/stack/cable_coil,
-/obj/item/multitool,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/engine,
-/area/station/science/xenobiology)
"bPB" = (
/obj/structure/sign/warning/biohazard,
/turf/closed/wall,
@@ -5638,6 +5639,18 @@
},
/turf/open/floor/iron,
/area/station/science/lab)
+"bXg" = (
+/obj/effect/turf_decal/trimline/purple/filled/warning{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/siding/purple{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/science/explab)
"bXk" = (
/obj/machinery/telecomms/server/presets/command,
/turf/open/floor/circuit/telecomms/mainframe,
@@ -5818,6 +5831,17 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
+"cbp" = (
+/obj/structure/chair/office{
+ dir = 8
+ },
+/obj/machinery/computer/security/telescreen/normal/directional/north,
+/obj/effect/turf_decal/tile/red/anticorner/contrasted{
+ dir = 1
+ },
+/obj/machinery/light/small/directional/north,
+/turf/open/floor/iron,
+/area/station/hallway/secondary/exit/departure_lounge)
"cbz" = (
/turf/closed/wall,
/area/station/cargo/storage)
@@ -5873,6 +5897,11 @@
},
/turf/open/floor/iron/dark,
/area/station/command/bridge)
+"cdS" = (
+/obj/structure/table,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance/testlab)
"cdX" = (
/turf/closed/wall,
/area/station/engineering/storage/tech)
@@ -6015,7 +6044,7 @@
"cgP" = (
/obj/machinery/air_sensor/ordnance_burn_chamber,
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"cgZ" = (
/obj/machinery/light_switch/directional/east,
/obj/structure/cable,
@@ -7198,7 +7227,7 @@
pixel_x = 6;
pixel_y = -4
},
-/obj/item/clothing/mask/cigarette/rollie/cannabis{
+/obj/item/cigarette/rollie/cannabis{
pixel_y = -3
},
/turf/open/space/basic,
@@ -7258,6 +7287,17 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/science/genetics)
+"cDO" = (
+/obj/structure/table,
+/obj/item/stack/cable_coil{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/stack/cable_coil,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/structure/extinguisher_cabinet/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/engineering/storage/tech)
"cDP" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -7459,12 +7499,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/station/maintenance/aft/greater)
-"cIS" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/plating,
-/area/station/maintenance/port/aft)
"cIU" = (
/obj/machinery/vending/coffee,
/turf/open/floor/wood,
@@ -7765,7 +7799,7 @@
dir = 1
},
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"cOX" = (
/obj/structure/sign/warning/radiation/rad_area/directional/north,
/obj/effect/turf_decal/stripes/line{
@@ -8949,6 +8983,12 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/hallway/primary/central)
+"dkX" = (
+/obj/structure/cable,
+/obj/machinery/light/cold/directional/north,
+/obj/machinery/computer/security/telescreen/isolation/directional/north,
+/turf/open/floor/iron,
+/area/station/security/execution/transfer)
"dla" = (
/obj/structure/chair/stool/directional/west,
/obj/effect/turf_decal/trimline/red/warning{
@@ -9208,6 +9248,13 @@
/obj/structure/closet/emcloset,
/turf/open/floor/plating,
/area/station/hallway/secondary/entry)
+"dqy" = (
+/obj/machinery/status_display/evac/directional/north,
+/obj/machinery/porta_turret/ai,
+/obj/machinery/computer/security/telescreen/minisat/directional/east,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/turret_protected/aisat_interior)
"dqE" = (
/obj/structure/closet/toolcloset,
/obj/effect/turf_decal/bot,
@@ -9215,6 +9262,9 @@
dir = 4
},
/obj/machinery/light/small/directional/north,
+/obj/item/lightreplacer{
+ pixel_y = 7
+ },
/turf/open/floor/iron/dark/corner{
dir = 1
},
@@ -9671,6 +9721,14 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/science/robotics/mechbay)
+"dzX" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/light_switch/directional/north,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/command/teleporter)
"dzY" = (
/obj/machinery/light/small/directional/south,
/turf/open/floor/engine/n2o,
@@ -9857,7 +9915,7 @@
dir = 4
},
/turf/open/floor/engine,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"dEH" = (
/obj/effect/landmark/generic_maintenance_landmark,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -10551,6 +10609,20 @@
},
/turf/open/floor/circuit/green/telecomms/mainframe,
/area/station/tcommsat/server)
+"dQL" = (
+/obj/machinery/light_switch/directional/west{
+ pixel_x = -20
+ },
+/obj/machinery/computer/records/medical{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/red/fourcorners,
+/obj/machinery/light/small/directional/west,
+/obj/machinery/computer/security/telescreen/cmo/directional/west{
+ name = "Medbay Monitor"
+ },
+/turf/open/floor/iron/dark,
+/area/station/security/checkpoint/medical)
"dQO" = (
/obj/effect/landmark/start/atmospheric_technician,
/obj/effect/decal/cleanable/dirt,
@@ -10762,7 +10834,7 @@
"dTN" = (
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
/turf/closed/wall/r_wall,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"dTQ" = (
/obj/effect/turf_decal/trimline/green/filled/corner{
dir = 4
@@ -11023,7 +11095,7 @@
/area/station/security/execution/education)
"dXU" = (
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"dYa" = (
/obj/effect/turf_decal/tile/blue/fourcorners,
/turf/open/floor/iron,
@@ -11672,6 +11744,16 @@
dir = 8
},
/area/station/service/chapel)
+"ehN" = (
+/obj/structure/table,
+/obj/machinery/cell_charger{
+ pixel_y = 5
+ },
+/obj/item/stack/cable_coil,
+/obj/item/multitool,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/engine,
+/area/station/science/xenobiology)
"ehX" = (
/turf/open/floor/iron/dark,
/area/station/medical/storage)
@@ -12455,6 +12537,25 @@
"eut" = (
/turf/closed/wall,
/area/station/science/robotics/lab)
+"euw" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/firealarm/directional/west,
+/obj/machinery/camera/directional/north{
+ c_tag = "Science Mechbay";
+ network = list("ss13","rd")
+ },
+/obj/machinery/button/door/directional/north{
+ id = "mechbay";
+ name = "Mech Bay Shutters Control";
+ req_access = list("robotics")
+ },
+/turf/open/floor/iron,
+/area/station/science/robotics/mechbay)
"euQ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -12703,22 +12804,6 @@
/obj/structure/extinguisher_cabinet/directional/north,
/turf/open/floor/wood/large,
/area/station/command/heads_quarters/qm)
-"ezP" = (
-/obj/structure/chair/office{
- dir = 8
- },
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching output from station security cameras.";
- name = "Security Camera Monitor";
- network = list("ss13");
- pixel_y = 30
- },
-/obj/effect/turf_decal/tile/red/anticorner/contrasted{
- dir = 1
- },
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/exit/departure_lounge)
"ezT" = (
/obj/machinery/door/airlock/research{
name = "Research Division Access"
@@ -13095,6 +13180,16 @@
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron/white,
/area/station/science/research)
+"eJd" = (
+/obj/structure/table/wood,
+/obj/machinery/computer/security/telescreen/prison/directional/north,
+/obj/item/flashlight/lamp/green{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/obj/item/book/manual/wiki/security_space_law,
+/turf/open/floor/wood,
+/area/station/service/lawoffice)
"eJh" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -13607,7 +13702,7 @@
"eRn" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/closed/wall/r_wall,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"eRR" = (
/obj/structure/table,
/obj/item/screwdriver{
@@ -13696,16 +13791,19 @@
pixel_x = -7;
pixel_y = 8
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 4;
pixel_y = 3
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 8
},
/obj/effect/turf_decal/siding/wood{
dir = 9
},
+/obj/machinery/keycard_auth/directional/north{
+ pixel_x = -5
+ },
/turf/open/floor/wood/large,
/area/station/command/heads_quarters/qm)
"eTI" = (
@@ -14496,6 +14594,15 @@
},
/turf/open/floor/wood/large,
/area/station/commons/lounge)
+"fhU" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/obj/machinery/light/small/directional/east,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/computer/security/telescreen/ordnance/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance/testlab)
"fia" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/hatch{
@@ -15489,6 +15596,13 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron/grimy,
/area/station/service/chapel/office)
+"fAA" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/machinery/airalarm/directional/east,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/iron/dark,
+/area/station/engineering/storage/tech)
"fAE" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -16785,6 +16899,25 @@
},
/turf/open/floor/iron/white,
/area/station/medical/storage)
+"gbn" = (
+/obj/machinery/computer/crew{
+ dir = 4
+ },
+/obj/machinery/keycard_auth/directional/south{
+ pixel_x = 6
+ },
+/obj/machinery/button/door/directional/south{
+ id = "cmoprivacy";
+ name = "CMO Privacy Shutters";
+ pixel_x = -8;
+ req_access = list("cmo")
+ },
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
+ dir = 8
+ },
+/obj/machinery/computer/security/telescreen/cmo/directional/west,
+/turf/open/floor/iron/white,
+/area/station/command/heads_quarters/cmo)
"gbG" = (
/obj/effect/spawner/random/structure/closet_maintenance,
/obj/item/storage/box/lights/mixed,
@@ -16911,20 +17044,6 @@
/obj/effect/spawner/random/engineering/flashlight,
/turf/open/floor/iron/dark,
/area/station/security/office)
-"gen" = (
-/obj/structure/table/glass,
-/obj/item/folder/blue{
- pixel_y = 3
- },
-/obj/item/pen,
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 1;
- pixel_y = -28
- },
-/obj/effect/turf_decal/tile/blue,
-/obj/structure/window/reinforced/spawner/directional/east,
-/turf/open/floor/iron/dark,
-/area/station/engineering/transit_tube)
"gev" = (
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron,
@@ -17041,17 +17160,6 @@
/obj/machinery/firealarm/directional/west,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
-"ggw" = (
-/obj/structure/filingcabinet,
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 8;
- pixel_x = 26
- },
-/obj/effect/turf_decal/tile/red/half/contrasted{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/security/checkpoint/engineering)
"ggH" = (
/obj/effect/spawner/random/structure/chair_maintenance,
/turf/open/floor/iron/checker,
@@ -17132,7 +17240,7 @@
dir = 4
},
/turf/open/floor/engine,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"giA" = (
/turf/closed/wall/r_wall,
/area/station/tcommsat/computer)
@@ -17141,15 +17249,6 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron,
/area/station/engineering/main)
-"giR" = (
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 1;
- pixel_y = -29
- },
-/obj/structure/bed/dogbed/renault,
-/mob/living/basic/pet/fox/renault,
-/turf/open/floor/carpet,
-/area/station/command/heads_quarters/captain/private)
"giT" = (
/obj/effect/spawner/random/structure/closet_maintenance,
/obj/effect/spawner/random/maintenance/two,
@@ -19238,6 +19337,19 @@
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
+"gVE" = (
+/obj/structure/table/glass,
+/obj/machinery/cell_charger,
+/obj/item/stack/cable_coil,
+/obj/item/assembly/igniter,
+/obj/item/stock_parts/power_store/cell,
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
+ dir = 4
+ },
+/turf/open/floor/iron/white,
+/area/station/science/lobby)
"gVO" = (
/obj/effect/turf_decal/trimline/purple/corner{
dir = 1
@@ -19326,21 +19438,6 @@
/obj/structure/table,
/turf/open/floor/plating,
/area/station/maintenance/port)
-"gXg" = (
-/obj/structure/table/wood,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching Prison Wing holding areas.";
- name = "Prison Monitor";
- network = list("prison");
- pixel_y = 30
- },
-/obj/item/flashlight/lamp/green{
- pixel_x = 1;
- pixel_y = 5
- },
-/obj/item/restraints/handcuffs,
-/turf/open/floor/carpet,
-/area/station/security/detectives_office)
"gXl" = (
/obj/structure/flora/rock/pile/jungle/style_random,
/turf/open/floor/grass,
@@ -19501,19 +19598,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/engineering/main)
-"hac" = (
-/obj/machinery/status_display/ai/directional/north,
-/obj/machinery/porta_turret/ai,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching the RD's goons from the safety of his office.";
- dir = 4;
- name = "Research Monitor";
- network = list("rd");
- pixel_x = -28
- },
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/turret_protected/aisat_interior)
"hav" = (
/obj/machinery/door/airlock/maintenance,
/obj/structure/cable,
@@ -21909,6 +21993,20 @@
},
/turf/open/floor/wood,
/area/station/service/cafeteria)
+"hSi" = (
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/rods/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/electronics/airlock,
+/obj/item/electronics/airlock,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 30
+ },
+/obj/item/gps,
+/obj/structure/closet/crate/engineering,
+/turf/open/floor/plating,
+/area/station/engineering/main)
"hSl" = (
/obj/machinery/atmospherics/pipe/smart/simple/purple/visible{
dir = 4
@@ -21971,19 +22069,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/yellow/visible,
/turf/open/floor/iron,
/area/station/engineering/atmos)
-"hTt" = (
-/obj/machinery/computer/station_alert{
- dir = 1
- },
-/obj/machinery/light/directional/south,
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 1;
- pixel_y = -29
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/command/storage/satellite)
"hTE" = (
/obj/structure/chair{
dir = 4
@@ -22343,6 +22428,23 @@
},
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
+"hZg" = (
+/obj/structure/closet/crate,
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/item/stack/cable_coil{
+ pixel_x = 3;
+ pixel_y = -7
+ },
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/light_switch/directional/north,
+/obj/effect/spawner/random/engineering/flashlight,
+/obj/effect/spawner/random/engineering/flashlight,
+/obj/effect/turf_decal/tile/brown/half/contrasted{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/cargo/miningoffice)
"hZn" = (
/obj/structure/cable,
/obj/effect/turf_decal/siding/wood{
@@ -22686,19 +22788,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/maintenance/space_hut)
-"igr" = (
-/obj/structure/table/glass,
-/obj/machinery/cell_charger,
-/obj/item/stack/cable_coil,
-/obj/item/assembly/igniter,
-/obj/item/stock_parts/cell,
-/obj/machinery/power/apc/auto_name/directional/north,
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
- dir = 4
- },
-/turf/open/floor/iron/white,
-/area/station/science/lobby)
"igy" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible,
/obj/machinery/requests_console/directional/east{
@@ -22784,25 +22873,15 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/engineering/storage/tech)
-"ihF" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/obj/structure/table/reinforced,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/firealarm/directional/west,
-/obj/machinery/camera/directional/north{
- c_tag = "Science Mechbay";
- network = list("ss13","rd")
- },
-/obj/machinery/button/door/directional/north{
- id = "mechbay";
- name = "Mech Bay Shutters Control";
- req_access = list("robotics")
+"ihN" = (
+/obj/machinery/computer/security/telescreen/prison/directional/south,
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
},
+/obj/effect/landmark/event_spawn,
/turf/open/floor/iron,
-/area/station/science/robotics/mechbay)
+/area/station/security/office)
"ihW" = (
/obj/structure/lattice/catwalk,
/obj/structure/disposalpipe/trunk{
@@ -23516,19 +23595,6 @@
},
/turf/open/floor/carpet,
/area/station/command/bridge)
-"itB" = (
-/obj/machinery/computer/security/telescreen{
- dir = 8;
- name = "Telecomms Camera Monitor";
- network = list("tcomms");
- pixel_x = 26
- },
-/obj/machinery/computer/telecomms/monitor{
- dir = 8;
- network = "tcommsat"
- },
-/turf/open/floor/iron/grimy,
-/area/station/tcommsat/computer)
"itC" = (
/obj/effect/turf_decal/siding/purple{
dir = 1
@@ -24998,6 +25064,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/engineering/main)
+"iSU" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/rcl/pre_loaded,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/command/heads_quarters/ce)
"iTc" = (
/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{
dir = 4
@@ -25561,13 +25637,6 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/carpet,
/area/station/command/heads_quarters/captain/private)
-"jdB" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/iron,
-/area/station/engineering/main)
"jdH" = (
/obj/structure/closet/crate/freezer/blood,
/obj/effect/turf_decal/siding/white,
@@ -26385,20 +26454,6 @@
},
/turf/open/floor/iron,
/area/station/commons/locker)
-"jrR" = (
-/obj/structure/table/reinforced,
-/obj/item/stock_parts/cell/high{
- pixel_x = 4;
- pixel_y = 5
- },
-/obj/item/stock_parts/cell/high{
- pixel_x = -8;
- pixel_y = 9
- },
-/obj/item/stock_parts/cell/high,
-/obj/machinery/cell_charger,
-/turf/open/floor/iron,
-/area/station/science/robotics/lab)
"jrY" = (
/obj/machinery/door/airlock/external{
name = "Transport Airlock"
@@ -26607,6 +26662,8 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/firealarm/directional/east,
+/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
"jvr" = (
@@ -27198,16 +27255,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/station/maintenance/fore)
-"jEh" = (
-/obj/structure/table/reinforced,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/item/rcl/pre_loaded,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/command/heads_quarters/ce)
"jEr" = (
/obj/machinery/holopad/secure,
/obj/machinery/flasher/directional/west{
@@ -27347,6 +27394,16 @@
},
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/treatment_center)
+"jGN" = (
+/obj/machinery/computer/station_alert{
+ dir = 1
+ },
+/obj/machinery/light/directional/south,
+/obj/machinery/computer/security/telescreen/minisat/directional/south,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/command/storage/satellite)
"jGO" = (
/obj/machinery/hydroponics/soil,
/obj/item/cultivator,
@@ -27387,21 +27444,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/circuit,
/area/station/ai_monitored/turret_protected/ai_upload)
-"jHN" = (
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching Prison Wing holding areas.";
- dir = 1;
- name = "Prison Monitor";
- network = list("prison");
- pixel_y = -30
- },
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/effect/landmark/event_spawn,
-/turf/open/floor/iron,
-/area/station/security/office)
"jHQ" = (
/obj/structure/chair/sofa/corp/left{
dir = 1
@@ -27894,14 +27936,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
-"jPi" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 8
- },
-/obj/machinery/light/small/directional/east,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance/testlab)
"jPm" = (
/obj/machinery/atmospherics/components/tank/air,
/obj/effect/turf_decal/tile/green/half/contrasted{
@@ -28895,7 +28929,7 @@
"kgC" = (
/obj/machinery/door/poddoor/incinerator_ordmix,
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"kgV" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -29571,36 +29605,6 @@
},
/turf/open/floor/iron,
/area/station/service/hydroponics/garden)
-"ktt" = (
-/obj/machinery/turretid{
- control_area = "/area/station/ai_monitored/turret_protected/ai_upload";
- icon_state = "control_stun";
- name = "AI Upload Turret Control";
- pixel_y = 28
- },
-/obj/item/radio/intercom/directional/north{
- broadcasting = 1;
- frequency = 1447;
- name = "Private Channel";
- pixel_x = -26
- },
-/obj/effect/landmark/start/cyborg,
-/obj/machinery/light/small/directional/west,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching the ai_upload.";
- dir = 4;
- name = "AI Upload Monitor";
- network = list("aiupload");
- pixel_x = -29
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/obj/machinery/power/apc/auto_name/directional/south,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/turret_protected/ai_upload_foyer)
"ktw" = (
/obj/structure/sign/warning/electric_shock/directional/north,
/turf/open/space/basic,
@@ -29800,16 +29804,6 @@
/obj/effect/turf_decal/tile/yellow/anticorner/contrasted,
/turf/open/floor/iron/white,
/area/station/medical/pharmacy)
-"kxq" = (
-/obj/machinery/status_display/evac/directional/north,
-/obj/machinery/porta_turret/ai,
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 8;
- pixel_x = 28
- },
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/turret_protected/aisat_interior)
"kxw" = (
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/east,
@@ -29833,6 +29827,32 @@
/obj/effect/turf_decal/tile/red/half/contrasted,
/turf/open/floor/iron,
/area/station/security/office)
+"kxC" = (
+/obj/structure/table,
+/obj/item/paper_bin{
+ pixel_x = -1;
+ pixel_y = 5
+ },
+/obj/item/pen,
+/obj/machinery/button/door/directional/east{
+ id = "Engineering";
+ name = "Engineering Lockdown";
+ pixel_y = 16;
+ req_access = list("engineering")
+ },
+/obj/machinery/button/door/directional/east{
+ id = "atmos";
+ name = "Atmospherics Lockdown";
+ pixel_y = 24;
+ req_access = list("atmospherics")
+ },
+/obj/effect/turf_decal/tile/red/half/contrasted{
+ dir = 4
+ },
+/obj/machinery/light/small/directional/east,
+/obj/machinery/computer/security/telescreen/engine/directional/east,
+/turf/open/floor/iron,
+/area/station/security/checkpoint/engineering)
"kxH" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -29968,23 +29988,6 @@
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
-"kAh" = (
-/obj/structure/closet/crate,
-/obj/machinery/power/apc/auto_name/directional/west,
-/obj/item/stack/cable_coil{
- pixel_x = 3;
- pixel_y = -7
- },
-/obj/item/stock_parts/cell/high,
-/obj/machinery/light_switch/directional/north,
-/obj/effect/spawner/random/engineering/flashlight,
-/obj/effect/spawner/random/engineering/flashlight,
-/obj/effect/turf_decal/tile/brown/half/contrasted{
- dir = 4
- },
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/station/cargo/miningoffice)
"kAp" = (
/obj/machinery/door/window/left/directional/west{
name = "Disposals Chute"
@@ -30338,6 +30341,24 @@
/obj/machinery/light/small/directional/north,
/turf/open/floor/iron/white,
/area/station/science/lab)
+"kGR" = (
+/obj/machinery/button/ignition{
+ id = "Xenobio";
+ pixel_x = -4;
+ pixel_y = -3
+ },
+/obj/machinery/button/door/directional/north{
+ id = "Xenolab";
+ name = "Test Chamber Blast Doors";
+ pixel_x = 6;
+ pixel_y = -2;
+ req_access = list("xenobiology")
+ },
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/structure/window/reinforced/spawner/directional/west,
+/obj/machinery/computer/security/telescreen/test_chamber/directional/north,
+/turf/open/floor/iron,
+/area/station/science/xenobiology)
"kHg" = (
/obj/structure/cable,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -30850,30 +30871,6 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/commons/locker)
-"kRc" = (
-/obj/structure/table,
-/obj/item/multitool{
- pixel_x = 4;
- pixel_y = 12
- },
-/obj/item/multitool{
- pixel_x = -4;
- pixel_y = 8
- },
-/obj/item/stock_parts/cell/high{
- pixel_y = -4
- },
-/obj/item/stock_parts/cell/high{
- pixel_x = -4;
- pixel_y = -6
- },
-/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5,
-/obj/machinery/atmospherics/pipe/smart/simple/purple/visible,
-/obj/item/multitool{
- pixel_y = 10
- },
-/turf/open/floor/iron/dark/textured,
-/area/station/engineering/atmos)
"kRe" = (
/turf/open/floor/iron,
/area/station/cargo/miningoffice)
@@ -32127,12 +32124,11 @@
/area/station/maintenance/fore)
"loY" = (
/obj/structure/rack,
-/obj/item/gun/energy/e_gun/dragnet,
-/obj/item/gun/energy/e_gun/dragnet,
/obj/effect/turf_decal/tile/blue/half/contrasted{
dir = 4
},
/obj/machinery/light/small/directional/west,
+/obj/effect/spawner/random/armory/dragnet,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/security/armory)
"lpo" = (
@@ -32749,6 +32745,14 @@
"lBA" = (
/turf/open/floor/wood/large,
/area/station/commons/lounge)
+"lBN" = (
+/obj/machinery/computer/security/telescreen/tcomms/directional/east,
+/obj/machinery/computer/telecomms/monitor{
+ dir = 8;
+ network = "tcommsat"
+ },
+/turf/open/floor/iron/grimy,
+/area/station/tcommsat/computer)
"lCb" = (
/obj/structure/cable,
/obj/structure/sign/poster/ripped/directional/south,
@@ -33577,15 +33581,6 @@
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron/dark,
/area/station/security/courtroom)
-"lUo" = (
-/obj/machinery/cell_charger{
- pixel_y = 4
- },
-/obj/structure/table/glass,
-/obj/item/stock_parts/cell/high,
-/obj/structure/window/reinforced/spawner/directional/west,
-/turf/open/floor/iron/dark,
-/area/station/command/bridge)
"lUp" = (
/obj/structure/sink/kitchen/directional/south{
desc = "A sink used for washing one's hands and face. It looks rusty and home-made";
@@ -33754,12 +33749,6 @@
/obj/structure/sign/warning/vacuum/directional/east,
/turf/open/floor/plating,
/area/station/maintenance/aft/lesser)
-"lWS" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/obj/effect/turf_decal/box,
-/obj/machinery/portable_atmospherics/canister,
-/turf/open/floor/iron,
-/area/station/science/xenobiology)
"lXl" = (
/obj/machinery/hydroponics/constructable,
/obj/effect/turf_decal/bot,
@@ -33866,22 +33855,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
-"lYM" = (
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching the turbine vent.";
- dir = 8;
- name = "turbine vent monitor";
- network = list("turbine");
- pixel_x = 29
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible,
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/station/maintenance/disposal/incinerator)
"lYP" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
@@ -34939,16 +34912,6 @@
/obj/structure/sign/warning/pods,
/turf/closed/wall,
/area/station/hallway/secondary/entry)
-"mtM" = (
-/obj/machinery/light/directional/south,
-/obj/effect/turf_decal/delivery,
-/obj/structure/table,
-/obj/machinery/computer/security/telescreen/ordnance{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance/testlab)
"mtO" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron,
@@ -35618,19 +35581,6 @@
/obj/machinery/light/directional/north,
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
-"mES" = (
-/obj/structure/rack,
-/obj/item/aicard,
-/obj/item/radio/off,
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 1;
- pixel_y = -29
- },
-/obj/effect/turf_decal/tile/blue/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/station/command/bridge)
"mET" = (
/obj/item/wrench,
/obj/effect/decal/cleanable/dirt,
@@ -36403,6 +36353,30 @@
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
+"mSI" = (
+/obj/machinery/turretid{
+ control_area = "/area/station/ai_monitored/turret_protected/ai_upload";
+ icon_state = "control_stun";
+ name = "AI Upload Turret Control";
+ pixel_y = 28
+ },
+/obj/item/radio/intercom/directional/north{
+ broadcasting = 1;
+ frequency = 1447;
+ name = "Private Channel";
+ pixel_x = -26
+ },
+/obj/effect/landmark/start/cyborg,
+/obj/machinery/light/small/directional/west,
+/obj/machinery/computer/security/telescreen/aiupload/directional/west,
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/obj/machinery/power/apc/auto_name/directional/south,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/turret_protected/ai_upload_foyer)
"mSM" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -36712,6 +36686,11 @@
},
/turf/open/floor/plating,
/area/station/command/heads_quarters/qm)
+"mYb" = (
+/obj/structure/chair,
+/obj/machinery/computer/security/telescreen/interrogation/directional/west,
+/turf/open/floor/iron/grimy,
+/area/station/security/interrogation)
"mYq" = (
/obj/effect/turf_decal/plaque{
icon_state = "L8"
@@ -37197,30 +37176,6 @@
/obj/structure/cable,
/turf/open/floor/iron/white,
/area/station/security/prison)
-"ngY" = (
-/obj/structure/table,
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/crowbar,
-/obj/item/grenade/chem_grenade/smart_metal_foam,
-/obj/item/grenade/chem_grenade/smart_metal_foam,
-/obj/effect/turf_decal/bot{
- dir = 1
- },
-/obj/item/stock_parts/cell/emproof{
- pixel_x = -6;
- pixel_y = 2
- },
-/obj/item/stock_parts/cell/emproof{
- pixel_x = 4;
- pixel_y = 6
- },
-/turf/open/floor/iron,
-/area/station/engineering/main)
"nhh" = (
/obj/structure/table/wood,
/obj/item/gavelblock,
@@ -37247,6 +37202,13 @@
/obj/structure/sign/poster/official/random/directional/east,
/turf/open/floor/plating,
/area/station/commons/toilet/auxiliary)
+"nhU" = (
+/obj/machinery/status_display/ai/directional/north,
+/obj/machinery/porta_turret/ai,
+/obj/machinery/computer/security/telescreen/research/directional/west,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/turret_protected/aisat_interior)
"nib" = (
/obj/effect/turf_decal/trimline/red/filled/line{
dir = 4
@@ -37523,7 +37485,7 @@
pixel_x = -4;
pixel_y = 2
},
-/obj/item/clothing/mask/cigarette/cigar,
+/obj/item/cigarette/cigar,
/obj/item/reagent_containers/cup/glass/flask/gold,
/turf/open/floor/carpet,
/area/station/command/heads_quarters/captain/private)
@@ -38884,7 +38846,7 @@
},
/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
/turf/open/floor/engine,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"nJG" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -39370,6 +39332,14 @@
/obj/structure/window/reinforced/spawner/directional/west,
/turf/open/floor/wood,
/area/station/command/heads_quarters/captain/private)
+"nRQ" = (
+/obj/machinery/light/directional/south,
+/obj/effect/turf_decal/delivery,
+/obj/structure/table,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/computer/security/telescreen/ordnance/directional/south,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance/testlab)
"nRU" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -39713,7 +39683,7 @@
dir = 8
},
/turf/open/floor/engine,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"oac" = (
/obj/structure/cable,
/turf/open/floor/iron,
@@ -39810,20 +39780,6 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/science/research)
-"oaC" = (
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/stack/rods/fifty,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/electronics/airlock,
-/obj/item/electronics/airlock,
-/obj/item/stock_parts/cell/high,
-/obj/item/stack/sheet/mineral/plasma{
- amount = 30
- },
-/obj/item/gps,
-/obj/structure/closet/crate/engineering,
-/turf/open/floor/plating,
-/area/station/engineering/main)
"obk" = (
/obj/item/target/alien,
/turf/open/floor/plating,
@@ -40034,7 +39990,7 @@
dir = 1
},
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"oew" = (
/turf/open/floor/iron,
/area/station/commons/fitness/recreation)
@@ -40367,6 +40323,14 @@
/obj/structure/sign/poster/random/directional/south,
/turf/open/floor/plating,
/area/station/hallway/secondary/service)
+"omd" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/ai_monitored/command/storage/eva)
"ome" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -40863,37 +40827,6 @@
},
/turf/open/floor/iron,
/area/station/maintenance/starboard/greater)
-"ouU" = (
-/obj/machinery/light/directional/east,
-/obj/structure/table,
-/obj/machinery/recharger{
- pixel_x = 6;
- pixel_y = 4
- },
-/obj/item/paper_bin{
- pixel_x = -11;
- pixel_y = 7
- },
-/obj/item/pen{
- pixel_x = -11;
- pixel_y = 7
- },
-/obj/item/hand_labeler{
- pixel_x = -10;
- pixel_y = -6
- },
-/obj/effect/turf_decal/trimline/dark_red/filled/line{
- dir = 4
- },
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching Prison Wing holding areas.";
- dir = 8;
- name = "Prison Monitor";
- network = list("prison");
- pixel_x = 30
- },
-/turf/open/floor/iron,
-/area/station/security/warden)
"ouX" = (
/obj/effect/turf_decal/box,
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
@@ -41277,6 +41210,30 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
+"oDH" = (
+/obj/structure/table,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/crowbar,
+/obj/item/grenade/chem_grenade/smart_metal_foam,
+/obj/item/grenade/chem_grenade/smart_metal_foam,
+/obj/effect/turf_decal/bot{
+ dir = 1
+ },
+/obj/item/stock_parts/power_store/cell/emproof{
+ pixel_x = -6;
+ pixel_y = 2
+ },
+/obj/item/stock_parts/power_store/cell/emproof{
+ pixel_x = 4;
+ pixel_y = 6
+ },
+/turf/open/floor/iron,
+/area/station/engineering/main)
"oDJ" = (
/obj/structure/sign/warning/vacuum/external,
/turf/closed/wall,
@@ -41487,6 +41444,13 @@
/obj/effect/mapping_helpers/airlock/access/any/medical/maintenance,
/turf/open/floor/plating,
/area/station/medical/medbay/central)
+"oGj" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
+/obj/effect/turf_decal/box,
+/obj/machinery/portable_atmospherics/canister,
+/obj/item/radio/intercom/directional/north,
+/turf/open/floor/iron,
+/area/station/science/xenobiology)
"oGn" = (
/obj/machinery/door/airlock/maintenance{
name = "Fuel Closet"
@@ -41502,6 +41466,31 @@
/obj/machinery/atmospherics/pipe/smart/simple/orange/visible,
/turf/open/space/basic,
/area/space/nearstation)
+"oGH" = (
+/obj/machinery/light/directional/east,
+/obj/structure/table,
+/obj/machinery/recharger{
+ pixel_x = 6;
+ pixel_y = 4
+ },
+/obj/item/paper_bin{
+ pixel_x = -11;
+ pixel_y = 7
+ },
+/obj/item/pen{
+ pixel_x = -11;
+ pixel_y = 7
+ },
+/obj/item/hand_labeler{
+ pixel_x = -10;
+ pixel_y = -6
+ },
+/obj/effect/turf_decal/trimline/dark_red/filled/line{
+ dir = 4
+ },
+/obj/machinery/computer/security/telescreen/prison/directional/east,
+/turf/open/floor/iron,
+/area/station/security/warden)
"oGK" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -41624,15 +41613,6 @@
},
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
-"oIO" = (
-/obj/machinery/computer/security/telescreen/interrogation{
- dir = 8;
- pixel_x = 30
- },
-/obj/effect/turf_decal/trimline/red/filled/corner,
-/obj/machinery/light/directional/east,
-/turf/open/floor/iron,
-/area/station/security/brig)
"oIW" = (
/obj/structure/sign/warning/vacuum/directional/east,
/obj/effect/turf_decal/delivery,
@@ -41797,6 +41777,14 @@
},
/turf/open/floor/plating,
/area/station/command/heads_quarters/hos)
+"oMh" = (
+/obj/structure/filingcabinet,
+/obj/machinery/computer/security/telescreen/minisat/directional/east,
+/obj/effect/turf_decal/tile/red/half/contrasted{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/security/checkpoint/engineering)
"oMx" = (
/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den,
/obj/machinery/door/airlock/maintenance{
@@ -41977,21 +41965,6 @@
/obj/structure/grille,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
-"oQc" = (
-/obj/machinery/computer/security/telescreen{
- desc = "Used for the Auxiliary Mining Base.";
- dir = 1;
- name = "Auxiliary Base Monitor";
- network = list("auxbase");
- pixel_y = -28
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
- },
-/obj/effect/turf_decal/tile/yellow/half/contrasted,
-/turf/open/floor/iron,
-/area/station/construction/mining/aux_base)
"oQg" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -42018,12 +41991,6 @@
/obj/structure/window/reinforced/spawner/directional/east,
/turf/open/floor/iron,
/area/station/science/xenobiology)
-"oQS" = (
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/crap,
-/obj/structure/table/wood,
-/turf/open/floor/carpet,
-/area/station/command/corporate_showroom)
"oQZ" = (
/obj/machinery/navbeacon{
codes_txt = "patrol;next_patrol=1.5-Fore-Central";
@@ -42284,6 +42251,14 @@
"oWk" = (
/turf/closed/wall/r_wall,
/area/station/maintenance/starboard/aft)
+"oWm" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/computer/security/telescreen/engine/directional/east,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/command/heads_quarters/ce)
"oWF" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
@@ -43279,16 +43254,6 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/science/genetics)
-"ppm" = (
-/obj/structure/cable,
-/obj/machinery/computer/security/telescreen/interrogation{
- name = "isolation room monitor";
- network = list("isolation");
- pixel_y = 31
- },
-/obj/machinery/light/cold/directional/north,
-/turf/open/floor/iron,
-/area/station/security/execution/transfer)
"ppB" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/carpet,
@@ -45439,6 +45404,16 @@
},
/turf/open/floor/iron/dark,
/area/station/security/courtroom)
+"qcD" = (
+/obj/structure/rack,
+/obj/item/aicard,
+/obj/item/radio/off,
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
+ },
+/obj/machinery/computer/security/telescreen/minisat/directional/south,
+/turf/open/floor/iron/dark,
+/area/station/command/bridge)
"qcP" = (
/obj/effect/landmark/blobstart,
/obj/effect/mapping_helpers/burnt_floor,
@@ -46151,26 +46126,36 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/carpet,
/area/station/service/library)
-"qqp" = (
-/obj/structure/closet/crate,
-/obj/item/stock_parts/cell/high,
-/obj/item/stack/cable_coil{
- pixel_x = 3;
- pixel_y = -7
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/obj/effect/spawner/random/engineering/flashlight,
-/obj/effect/spawner/random/engineering/flashlight,
-/turf/open/floor/iron,
-/area/station/cargo/miningoffice)
"qqr" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/turf_decal/stripes/line,
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/cargo/miningoffice)
+"qqs" = (
+/obj/structure/table,
+/obj/item/multitool{
+ pixel_x = 4;
+ pixel_y = 12
+ },
+/obj/item/multitool{
+ pixel_x = -4;
+ pixel_y = 8
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_y = -4
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = -4;
+ pixel_y = -6
+ },
+/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5,
+/obj/machinery/atmospherics/pipe/smart/simple/purple/visible,
+/obj/item/multitool{
+ pixel_y = 10
+ },
+/turf/open/floor/iron/dark/textured,
+/area/station/engineering/atmos)
"qrg" = (
/obj/machinery/light_switch/directional/north,
/turf/open/floor/circuit/green{
@@ -46201,6 +46186,12 @@
},
/turf/open/floor/engine/co2,
/area/station/engineering/atmos)
+"qrw" = (
+/obj/structure/bed/dogbed/renault,
+/mob/living/basic/pet/fox/renault,
+/obj/machinery/computer/security/telescreen/minisat/directional/south,
+/turf/open/floor/carpet,
+/area/station/command/heads_quarters/captain/private)
"qrF" = (
/obj/machinery/computer/exodrone_control_console{
dir = 1
@@ -46337,6 +46328,12 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/ce)
+"qtq" = (
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/crap,
+/obj/structure/table/wood,
+/turf/open/floor/carpet,
+/area/station/command/corporate_showroom)
"qua" = (
/obj/machinery/atmospherics/pipe/smart/manifold/yellow/visible{
dir = 1
@@ -46938,15 +46935,6 @@
},
/turf/open/floor/iron/dark,
/area/station/security/courtroom)
-"qGc" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/bot{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/command/gateway)
"qGn" = (
/obj/structure/table,
/obj/item/hfr_box/body/waste_output,
@@ -47019,6 +47007,12 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
+"qHm" = (
+/obj/machinery/pdapainter/engineering,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/computer/security/telescreen/ce/directional/south,
+/turf/open/floor/iron/dark,
+/area/station/command/heads_quarters/ce)
"qHs" = (
/obj/structure/sign/warning/docking,
/turf/closed/wall,
@@ -47442,6 +47436,17 @@
},
/turf/open/floor/iron,
/area/station/security/prison)
+"qNO" = (
+/obj/structure/table/glass,
+/obj/item/folder/blue{
+ pixel_y = 3
+ },
+/obj/item/pen,
+/obj/machinery/computer/security/telescreen/minisat/directional/south,
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/window/reinforced/spawner/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/engineering/transit_tube)
"qNV" = (
/obj/machinery/holopad,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -47678,6 +47683,21 @@
},
/turf/open/floor/iron,
/area/station/commons/locker)
+"qRq" = (
+/obj/structure/table/glass,
+/obj/item/tank/internals/emergency_oxygen{
+ pixel_x = -8
+ },
+/obj/item/clothing/mask/breath{
+ pixel_x = 4
+ },
+/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/firealarm/directional/south,
+/turf/open/floor/iron/dark,
+/area/station/engineering/transit_tube)
"qRz" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/obj/effect/spawner/random/trash/janitor_supplies,
@@ -47952,20 +47972,6 @@
/obj/effect/turf_decal/tile/neutral/half/contrasted,
/turf/open/floor/iron,
/area/station/service/hydroponics/garden)
-"qVD" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for monitoring the engine.";
- dir = 8;
- name = "Engine Monitor";
- network = list("engine");
- pixel_x = 32
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/ce)
"qWg" = (
/obj/structure/lattice,
/obj/structure/sign/warning/secure_area/directional/east,
@@ -48722,6 +48728,32 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
+"rkx" = (
+/obj/structure/table,
+/obj/item/stack/cable_coil{
+ pixel_x = 3;
+ pixel_y = -7
+ },
+/obj/item/stack/cable_coil,
+/obj/item/electronics/airlock,
+/obj/item/electronics/airlock,
+/obj/item/clothing/ears/earmuffs{
+ pixel_x = -3;
+ pixel_y = -2
+ },
+/obj/item/clothing/ears/earmuffs{
+ pixel_x = -5;
+ pixel_y = 6
+ },
+/obj/effect/turf_decal/bot{
+ dir = 1
+ },
+/obj/item/stock_parts/power_store/cell/emproof{
+ pixel_x = -4;
+ pixel_y = 6
+ },
+/turf/open/floor/iron,
+/area/station/engineering/main)
"rkA" = (
/obj/structure/table,
/obj/item/cultivator,
@@ -49044,24 +49076,6 @@
},
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
-"rqc" = (
-/obj/machinery/computer/security/telescreen{
- desc = "Used for monitoring medbay to ensure patient safety.";
- dir = 4;
- name = "Medbay Monitor";
- network = list("medbay");
- pixel_x = -32
- },
-/obj/machinery/light_switch/directional/west{
- pixel_x = -20
- },
-/obj/machinery/computer/records/medical{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red/fourcorners,
-/obj/machinery/light/small/directional/west,
-/turf/open/floor/iron/dark,
-/area/station/security/checkpoint/medical)
"rqs" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -49209,7 +49223,7 @@
"rtj" = (
/obj/machinery/igniter/incinerator_ordmix,
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"rtz" = (
/obj/effect/turf_decal/siding/wood/corner,
/obj/effect/turf_decal/siding/wood{
@@ -49576,13 +49590,6 @@
},
/turf/open/floor/iron,
/area/station/medical/medbay/lobby)
-"ryp" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/machinery/airalarm/directional/east,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/iron/dark,
-/area/station/engineering/storage/tech)
"ryA" = (
/obj/item/cigbutt,
/obj/structure/table/reinforced,
@@ -49751,32 +49758,6 @@
"rAW" = (
/turf/closed/wall,
/area/station/security/prison/work)
-"rBe" = (
-/obj/structure/table,
-/obj/item/stack/cable_coil{
- pixel_x = 3;
- pixel_y = -7
- },
-/obj/item/stack/cable_coil,
-/obj/item/electronics/airlock,
-/obj/item/electronics/airlock,
-/obj/item/clothing/ears/earmuffs{
- pixel_x = -3;
- pixel_y = -2
- },
-/obj/item/clothing/ears/earmuffs{
- pixel_x = -5;
- pixel_y = 6
- },
-/obj/effect/turf_decal/bot{
- dir = 1
- },
-/obj/item/stock_parts/cell/emproof{
- pixel_x = -4;
- pixel_y = 6
- },
-/turf/open/floor/iron,
-/area/station/engineering/main)
"rBi" = (
/obj/machinery/airalarm/directional/west,
/obj/effect/turf_decal/stripes/line{
@@ -50578,7 +50559,7 @@
/obj/machinery/light/small/directional/north,
/obj/structure/table/reinforced,
/obj/machinery/requests_console/directional/north{
- department = "Quartermaster's Desk";
+ department = "Security";
name = "Security Requests Console"
},
/obj/effect/mapping_helpers/requests_console/assistance,
@@ -50651,29 +50632,6 @@
/obj/effect/spawner/random/entertainment/cigarette,
/turf/open/floor/wood,
/area/station/commons/lounge)
-"rRo" = (
-/obj/machinery/button/ignition{
- id = "Xenobio";
- pixel_x = -4;
- pixel_y = -3
- },
-/obj/machinery/button/door/directional/north{
- id = "Xenolab";
- name = "Test Chamber Blast Doors";
- pixel_x = 6;
- pixel_y = -2;
- req_access = list("xenobiology")
- },
-/obj/structure/table/reinforced/plastitaniumglass,
-/obj/machinery/computer/security/telescreen{
- name = "Test Chamber Monitor";
- network = list("xeno");
- pixel_y = 9
- },
-/obj/item/radio/intercom/directional/north,
-/obj/structure/window/reinforced/spawner/directional/west,
-/turf/open/floor/iron,
-/area/station/science/xenobiology)
"rRB" = (
/obj/machinery/door/airlock/external{
name = "Solar Maintenance"
@@ -51005,6 +50963,9 @@
},
/turf/open/floor/iron,
/area/station/security/prison/visit)
+"rXT" = (
+/turf/closed/wall/r_wall,
+/area/station/science/ordnance/burnchamber)
"rXW" = (
/obj/item/radio/intercom/directional/west,
/obj/structure/table/glass,
@@ -54478,6 +54439,20 @@
/obj/item/kirbyplants/random,
/turf/open/floor/iron,
/area/station/hallway/primary/port)
+"tjc" = (
+/obj/structure/table/reinforced,
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = 4;
+ pixel_y = 5
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = -8;
+ pixel_y = 9
+ },
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/cell_charger,
+/turf/open/floor/iron,
+/area/station/science/robotics/lab)
"tjf" = (
/obj/machinery/hydroponics/soil{
pixel_y = 8
@@ -54823,6 +54798,15 @@
/obj/structure/window/reinforced/spawner/directional/south,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/aisat/exterior)
+"tpA" = (
+/obj/machinery/cell_charger{
+ pixel_y = 4
+ },
+/obj/structure/table/glass,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/structure/window/reinforced/spawner/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/command/bridge)
"tpD" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -56577,7 +56561,7 @@
/obj/machinery/firealarm/directional/south,
/obj/structure/rack,
/obj/item/storage/briefcase/secure,
-/obj/item/clothing/mask/cigarette/cigar,
+/obj/item/cigarette/cigar,
/obj/effect/turf_decal/tile/blue/half/contrasted{
dir = 1
},
@@ -56715,17 +56699,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/maintenance/starboard/greater)
-"tXl" = (
-/obj/structure/table,
-/obj/item/stack/cable_coil{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/stack/cable_coil,
-/obj/item/stock_parts/cell/high,
-/obj/structure/extinguisher_cabinet/directional/east,
-/turf/open/floor/iron/dark,
-/area/station/engineering/storage/tech)
"tXx" = (
/obj/effect/turf_decal/trimline/green/filled/corner{
dir = 8
@@ -57592,6 +57565,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/commons/fitness/recreation)
+"unK" = (
+/obj/structure/table/wood,
+/obj/machinery/computer/security/telescreen/prison/directional/north,
+/obj/item/flashlight/lamp/green{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/obj/item/restraints/handcuffs,
+/turf/open/floor/carpet,
+/area/station/security/detectives_office)
"unL" = (
/turf/closed/wall,
/area/station/maintenance/starboard/greater)
@@ -58915,13 +58898,17 @@
"uJz" = (
/obj/effect/turf_decal/bot,
/obj/structure/rack,
-/obj/item/lightreplacer{
- pixel_y = 7
- },
/obj/machinery/status_display/evac/directional/east,
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
+/obj/item/flatpack{
+ board = /obj/item/circuitboard/machine/flatpacker;
+ pixel_x = -5
+ },
+/obj/item/multitool{
+ pixel_x = 8
+ },
/turf/open/floor/iron/checker,
/area/station/engineering/storage_shared)
"uJB" = (
@@ -59399,21 +59386,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/security/prison)
-"uSq" = (
-/obj/structure/table/wood,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching Prison Wing holding areas.";
- name = "Prison Monitor";
- network = list("prison");
- pixel_y = 30
- },
-/obj/item/flashlight/lamp/green{
- pixel_x = 1;
- pixel_y = 5
- },
-/obj/item/book/manual/wiki/security_space_law,
-/turf/open/floor/wood,
-/area/station/service/lawoffice)
"uSz" = (
/obj/structure/table,
/obj/item/phone{
@@ -59612,12 +59584,6 @@
/obj/machinery/light/directional/south,
/turf/open/floor/iron/white,
/area/station/science/research)
-"uVG" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable,
-/obj/machinery/door/poddoor/preopen,
-/turf/open/floor/plating,
-/area/station/command/heads_quarters/qm)
"uVJ" = (
/obj/effect/spawner/random/structure/grille,
/obj/structure/girder,
@@ -59698,38 +59664,6 @@
/obj/structure/cable,
/turf/open/floor/circuit,
/area/station/maintenance/port/aft)
-"uWN" = (
-/obj/structure/table,
-/obj/item/paper_bin{
- pixel_x = -1;
- pixel_y = 5
- },
-/obj/item/pen,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for monitoring the engine.";
- dir = 8;
- name = "Engine Monitor";
- network = list("engine");
- pixel_x = 26
- },
-/obj/machinery/button/door/directional/east{
- id = "Engineering";
- name = "Engineering Lockdown";
- pixel_y = 16;
- req_access = list("engineering")
- },
-/obj/machinery/button/door/directional/east{
- id = "atmos";
- name = "Atmospherics Lockdown";
- pixel_y = 24;
- req_access = list("atmospherics")
- },
-/obj/effect/turf_decal/tile/red/half/contrasted{
- dir = 4
- },
-/obj/machinery/light/small/directional/east,
-/turf/open/floor/iron,
-/area/station/security/checkpoint/engineering)
"uWS" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -59916,14 +59850,6 @@
/obj/structure/aquarium/lawyer,
/turf/open/floor/wood,
/area/station/service/lawoffice)
-"uZM" = (
-/obj/structure/table,
-/obj/machinery/computer/security/telescreen/ordnance{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance/testlab)
"uZP" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -59943,6 +59869,13 @@
/obj/effect/turf_decal/tile/red/fourcorners,
/turf/open/floor/iron/white,
/area/station/security/prison/safe)
+"vag" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/plating,
+/area/station/maintenance/starboard/greater)
"vaB" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -61112,6 +61045,20 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
+"vuz" = (
+/obj/structure/closet/crate,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stack/cable_coil{
+ pixel_x = 3;
+ pixel_y = -7
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/effect/spawner/random/engineering/flashlight,
+/obj/effect/spawner/random/engineering/flashlight,
+/turf/open/floor/iron,
+/area/station/cargo/miningoffice)
"vuJ" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/engineering/glass{
@@ -61195,7 +61142,7 @@
/area/station/hallway/secondary/entry)
"vwi" = (
/obj/structure/table,
-/obj/item/clothing/mask/cigarette/pipe,
+/obj/item/cigarette/pipe,
/turf/open/floor/plating,
/area/station/maintenance/port)
"vwn" = (
@@ -61566,18 +61513,6 @@
},
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/rd)
-"vCR" = (
-/obj/effect/turf_decal/trimline/purple/filled/warning{
- dir = 1
- },
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/siding/purple{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/science/explab)
"vDc" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -61676,6 +61611,23 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/port)
+"vEv" = (
+/obj/machinery/computer/mecha{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 5
+ },
+/obj/machinery/requests_console/directional/east{
+ department = "Research Director's Desk";
+ name = "Research Director's Requests Console"
+ },
+/obj/effect/mapping_helpers/requests_console/announcement,
+/obj/effect/mapping_helpers/requests_console/information,
+/obj/effect/mapping_helpers/requests_console/assistance,
+/obj/machinery/computer/security/telescreen/rd/directional/north,
+/turf/open/floor/iron/white,
+/area/station/command/heads_quarters/rd)
"vEw" = (
/obj/structure/chair/stool/directional/south,
/obj/item/radio/intercom/prison/directional/north,
@@ -62297,28 +62249,6 @@
},
/turf/open/floor/iron/dark/textured,
/area/station/engineering/atmos)
-"vPO" = (
-/obj/machinery/computer/crew{
- dir = 4
- },
-/obj/machinery/computer/security/telescreen/cmo{
- dir = 4;
- pixel_x = -30
- },
-/obj/machinery/keycard_auth/directional/south{
- pixel_x = 6
- },
-/obj/machinery/button/door/directional/south{
- id = "cmoprivacy";
- name = "CMO Privacy Shutters";
- pixel_x = -8;
- req_access = list("cmo")
- },
-/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/station/command/heads_quarters/cmo)
"vPV" = (
/obj/structure/rack,
/obj/effect/turf_decal/bot,
@@ -63026,6 +62956,16 @@
},
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
+"waf" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible,
+/obj/structure/cable,
+/obj/machinery/computer/security/telescreen/turbine/directional/east,
+/turf/open/floor/iron,
+/area/station/maintenance/disposal/incinerator)
"wag" = (
/obj/machinery/computer/records/medical,
/obj/structure/cable,
@@ -63721,14 +63661,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
-"wne" = (
-/obj/structure/chair,
-/obj/machinery/computer/security/telescreen/interrogation{
- dir = 4;
- pixel_x = -30
- },
-/turf/open/floor/iron/grimy,
-/area/station/security/interrogation)
"wnQ" = (
/obj/structure/sign/map/left{
desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown).";
@@ -63845,15 +63777,15 @@
pixel_x = -2;
pixel_y = 3
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 4;
pixel_y = 1
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = -4;
pixel_y = 1
},
-/obj/item/clothing/mask/cigarette/cigar/cohiba,
+/obj/item/cigarette/cigar/cohiba,
/obj/structure/table/wood,
/turf/open/floor/carpet,
/area/station/command/corporate_showroom)
@@ -65808,15 +65740,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/engineering/main)
-"xbb" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/firealarm/directional/west,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/machinery/light/cold/directional/west,
-/turf/open/floor/iron/dark,
-/area/station/engineering/transit_tube)
"xbd" = (
/obj/structure/extinguisher_cabinet/directional/south,
/obj/structure/disposalpipe/segment{
@@ -65827,6 +65750,15 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/port)
+"xbg" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/bot{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/command/gateway)
"xbT" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -66823,6 +66755,15 @@
/obj/effect/turf_decal/trimline/brown/filled/corner,
/turf/open/floor/iron,
/area/station/cargo/storage)
+"xtY" = (
+/obj/machinery/computer/security/telescreen/auxbase/directional/south,
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/yellow/half/contrasted,
+/turf/open/floor/iron,
+/area/station/construction/mining/aux_base)
"xtZ" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/smart/simple/green/visible,
@@ -67009,48 +66950,11 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/port)
-"xxh" = (
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 1
- },
-/obj/machinery/button/door/directional/north{
- id = "rdrnd";
- name = "Research and Development Containment Control";
- pixel_x = -6;
- req_access = list("rd")
- },
-/obj/machinery/button/door/directional/north{
- id = "rdordnance";
- name = "Ordnance Containment Control";
- pixel_x = 6;
- req_access = list("rd")
- },
-/obj/machinery/button/door/directional/north{
- id = "rdoffice";
- name = "Privacy Control";
- pixel_y = 34;
- req_access = list("rd")
- },
-/obj/machinery/computer/security/telescreen/rd{
- pixel_x = 31;
- pixel_y = 30
- },
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/iron/white,
-/area/station/command/heads_quarters/rd)
"xxk" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
/turf/open/floor/iron/dark,
/area/station/hallway/primary/central)
-"xxn" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/light_switch/directional/north,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/command/teleporter)
"xxF" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -68340,6 +68244,12 @@
},
/turf/open/floor/engine/vacuum,
/area/station/engineering/atmos)
+"xWr" = (
+/obj/effect/turf_decal/trimline/red/filled/corner,
+/obj/machinery/light/directional/east,
+/obj/machinery/computer/security/telescreen/interrogation/directional/east,
+/turf/open/floor/iron,
+/area/station/security/brig)
"xWE" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/turf_decal/tile/yellow/half/contrasted{
@@ -68556,7 +68466,7 @@
"xYZ" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible,
/turf/closed/wall/r_wall,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"xZb" = (
/obj/effect/spawner/random/structure/grille,
/turf/open/floor/plating,
@@ -68897,22 +68807,6 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/hos)
-"yfa" = (
-/obj/machinery/computer/mecha{
- dir = 8
- },
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 5
- },
-/obj/machinery/requests_console/directional/east{
- department = "Research Director's Desk";
- name = "Research Director's Requests Console"
- },
-/obj/effect/mapping_helpers/requests_console/announcement,
-/obj/effect/mapping_helpers/requests_console/information,
-/obj/effect/mapping_helpers/requests_console/assistance,
-/turf/open/floor/iron/white,
-/area/station/command/heads_quarters/rd)
"yfg" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/shutters/preopen{
@@ -81473,7 +81367,7 @@ aDa
aDa
iYU
oSc
-oQc
+xtY
aDb
rew
lGL
@@ -85312,7 +85206,7 @@ lMJ
lMJ
lMJ
pnI
-qqp
+vuz
xDu
pcS
pnI
@@ -86853,7 +86747,7 @@ jXu
bZz
vRr
paD
-kAh
+hZg
dSG
apC
sUD
@@ -88195,7 +88089,7 @@ kRA
jUb
xYq
dqN
-cIS
+baG
jUb
rvI
jUb
@@ -90720,7 +90614,7 @@ cNg
kQP
kQP
mXO
-uVG
+mXO
kQP
kQP
kQP
@@ -92833,7 +92727,7 @@ rQd
cJm
jGw
bJG
-vPO
+gbn
bqX
ulR
qXL
@@ -93067,7 +92961,7 @@ jIg
dTr
rIL
bwN
-avJ
+omd
ukk
rGm
gqX
@@ -93077,7 +92971,7 @@ qPJ
luN
wde
jJd
-rqc
+dQL
umS
qPJ
bgS
@@ -94023,7 +93917,7 @@ sjP
sjP
sjP
sjP
-ppm
+dkX
yey
jTZ
aBL
@@ -94324,7 +94218,7 @@ aPv
oWF
eQg
aJS
-ktt
+mSI
aUx
qhF
htd
@@ -94347,7 +94241,7 @@ ndS
urA
pFG
gBD
-xxn
+dzX
fRu
hVE
xXw
@@ -95879,7 +95773,7 @@ dUj
gGy
hmq
fUj
-mES
+qcD
duI
duI
lwt
@@ -96136,7 +96030,7 @@ gGy
qVc
dMY
jYL
-lUo
+tpA
aAt
duI
pCO
@@ -96408,7 +96302,7 @@ haP
jzN
fEC
eQe
-oQS
+qtq
iAA
oSo
cgF
@@ -96877,7 +96771,7 @@ ewj
bkl
wZU
pMy
-ouU
+oGH
orx
eeq
sDS
@@ -97449,7 +97343,7 @@ rgZ
suW
hJF
cZK
-ihF
+euw
cXg
nyy
gVl
@@ -97485,7 +97379,7 @@ jjs
dKC
xLu
dKC
-ezP
+cbp
ctL
oPD
iUm
@@ -98484,7 +98378,7 @@ cBV
xlv
eut
bUo
-jrR
+tjc
jtS
bFH
mMl
@@ -98979,7 +98873,7 @@ nse
bmb
lwg
aAK
-qGc
+xbg
tvE
qJU
hPM
@@ -99500,7 +99394,7 @@ kON
ylQ
bGC
wHu
-igr
+gVE
ibw
ibw
nIP
@@ -99698,7 +99592,7 @@ wVt
jzD
wxj
kZG
-jHN
+ihN
kYg
kYg
ylZ
@@ -99739,7 +99633,7 @@ jxv
sqJ
gPA
lZM
-giR
+qrw
syo
lSz
vQe
@@ -100226,7 +100120,7 @@ jAP
fEn
xXC
xNU
-uSq
+eJd
xlf
lWg
byw
@@ -100565,12 +100459,12 @@ fhi
fhi
uEo
fiS
-gyQ
+rXT
eRn
-gyQ
-gyQ
-gyQ
-gyQ
+rXT
+rXT
+rXT
+rXT
lMJ
uGg
nFa
@@ -100729,11 +100623,11 @@ pyY
sNB
xWm
mLL
-oIO
+xWr
vkb
cLl
sWV
-gXg
+unK
mOt
clq
aKa
@@ -101498,7 +101392,7 @@ gMZ
cju
gMZ
mFf
-wne
+mYb
sHt
qrn
qRg
@@ -102077,7 +101971,7 @@ ftj
wXF
doM
tZo
-vCR
+bXg
oFT
gvS
oYZ
@@ -103391,7 +103285,7 @@ guG
iAs
coe
tfV
-mtM
+nRQ
oLS
lMJ
aaa
@@ -103623,7 +103517,7 @@ sIW
bRb
cKm
tAg
-xxh
+byE
poq
vYE
lAH
@@ -103880,7 +103774,7 @@ sIW
jSk
rkT
tAg
-yfa
+vEv
pkx
hBB
wnY
@@ -104933,8 +104827,8 @@ qBF
nCG
tqx
bOm
-jPi
-uZM
+fhU
+cdS
kYD
aaa
aaa
@@ -107691,10 +107585,10 @@ psZ
psZ
qXB
gAU
-tXl
+cDO
oUK
eRR
-ryp
+fAA
cdX
sDE
hjS
@@ -107705,7 +107599,7 @@ ggM
ggM
dLq
lzL
-aev
+vag
lzL
lzL
scG
@@ -108448,7 +108342,7 @@ rpx
dPy
loA
poc
-ngY
+oDH
uXd
tfg
tfg
@@ -108705,12 +108599,12 @@ oKx
gLK
joo
sHT
-rBe
+rkx
uXd
dVc
bYp
gXu
-oaC
+hSi
uXd
gMG
dWG
@@ -108722,7 +108616,7 @@ nLz
fEL
rSi
pCt
-aRS
+qHm
sqE
mEO
gnS
@@ -109233,7 +109127,7 @@ woL
jLo
nwC
nLz
-jEh
+iSU
hYE
rEd
sby
@@ -109481,7 +109375,7 @@ cnK
jPe
dPy
poc
-jdB
+afM
cnK
giH
aJj
@@ -109491,7 +109385,7 @@ fbf
nie
qtm
fyJ
-qVD
+oWm
cuc
adz
tUw
@@ -109528,7 +109422,7 @@ svK
yec
xhb
uQk
-lYM
+waf
vzc
gUY
pnH
@@ -112070,8 +111964,8 @@ dRA
wCe
khu
hUu
-uWN
-ggw
+kxC
+oMh
mEG
nRp
dtY
@@ -112584,9 +112478,9 @@ wsI
fia
sRW
hKi
-xbb
+apO
lLB
-aJz
+qRq
rzT
cWy
xRZ
@@ -113355,7 +113249,7 @@ rLZ
fJy
ygp
tyE
-gen
+qNO
bDq
rRR
laE
@@ -113624,7 +113518,7 @@ efd
nwK
fFC
uVf
-kRc
+qqs
gDq
ich
jnQ
@@ -116999,7 +116893,7 @@ goW
msN
xiL
jlU
-rRo
+kGR
lyL
mao
mCu
@@ -117256,7 +117150,7 @@ rDf
uhs
fjd
jlU
-lWS
+oGj
sZN
msR
xkv
@@ -118799,7 +118693,7 @@ aaa
lMJ
jlU
jlU
-bPu
+ehN
aYl
kcu
jlU
@@ -123631,7 +123525,7 @@ uUX
azv
dKG
bjQ
-hac
+nhU
pQv
tSP
qiH
@@ -124659,7 +124553,7 @@ iCV
mCL
pIE
bjQ
-kxq
+dqy
rNs
tSP
mZW
@@ -124922,7 +124816,7 @@ txh
bjQ
giA
hSe
-itB
+lBN
pDe
ueE
jGr
@@ -125433,7 +125327,7 @@ ldP
xgE
uFw
tXz
-hTt
+jGN
gfU
gfU
gfU
diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm
index 1ae71b1799f2c..5bc3a711a1b03 100644
--- a/_maps/map_files/Mining/Lavaland.dmm
+++ b/_maps/map_files/Mining/Lavaland.dmm
@@ -1006,15 +1006,15 @@
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
/obj/structure/rack,
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = 6;
pixel_y = 7
},
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = -3;
pixel_y = 5
},
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = 3
},
/turf/open/floor/plating,
@@ -4390,7 +4390,7 @@
/area/mine/maintenance/public/south)
"zd" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/stock_parts/cell/crap{
+/obj/item/stock_parts/power_store/cell/crap{
desc = "A legendary infinite-capacity power cell. This one looks like a poor quality AA battery with a coat of flaking gold paint.";
icon_state = "icell";
name = "infinite-capacity power cell"
@@ -6728,8 +6728,8 @@
/obj/machinery/cell_charger{
pixel_y = 3
},
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high{
pixel_y = 3
},
/obj/effect/turf_decal/trimline/purple/filled/line{
@@ -7308,7 +7308,7 @@
},
/area/mine/laborcamp)
"Sc" = (
-/obj/item/clothing/mask/cigarette/robust{
+/obj/item/cigarette/robust{
pixel_x = 3;
pixel_y = -10
},
@@ -7608,7 +7608,7 @@
/turf/open/floor/plating,
/area/mine/laborcamp/security/maintenance)
"TX" = (
-/obj/item/clothing/mask/cigarette/robust{
+/obj/item/cigarette/robust{
pixel_x = 8;
pixel_y = 8
},
diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm
index 3c8cf0e7cb56c..3e9ca40048097 100644
--- a/_maps/map_files/NorthStar/north_star.dmm
+++ b/_maps/map_files/NorthStar/north_star.dmm
@@ -72,6 +72,13 @@
/obj/machinery/duct,
/turf/open/floor/iron,
/area/station/commons/toilet)
+"aaN" = (
+/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer4{
+ dir = 8
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance/testlab)
"aaO" = (
/obj/machinery/computer/atmos_alert{
dir = 4
@@ -284,7 +291,7 @@
/area/station/maintenance/floor3/starboard/fore)
"acL" = (
/obj/structure/table/wood,
-/obj/item/clothing/mask/cigarette/cigar/cohiba,
+/obj/item/cigarette/cigar/cohiba,
/obj/effect/turf_decal/trimline/blue/line{
dir = 1
},
@@ -2709,28 +2716,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/textured_large,
/area/station/cargo/storage)
-"aJO" = (
-/obj/structure/window/reinforced/plasma/spawner/directional/east,
-/obj/structure/table/reinforced/plasmarglass,
-/obj/item/stock_parts/cell/lead{
- pixel_x = -5;
- pixel_y = 8
- },
-/obj/item/usb_cable{
- name = "jumper cable";
- pixel_x = -10;
- pixel_y = 12
- },
-/obj/item/lead_pipe{
- pixel_x = -5
- },
-/obj/item/reagent_containers/spray/cleaner{
- pixel_x = 6;
- pixel_y = 7
- },
-/obj/item/reagent_containers/syringe,
-/turf/open/floor/pod/dark,
-/area/station/service/kitchen/abandoned)
"aJT" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -3241,19 +3226,6 @@
},
/turf/open/floor/engine/xenobio,
/area/station/science/xenobiology)
-"aRl" = (
-/obj/machinery/door/airlock/highsecurity{
- name = "AI Upload"
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/cable,
-/obj/effect/mapping_helpers/airlock/access/any/command/ai_upload,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/turret_protected/ai_upload_foyer)
"aRz" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 1
@@ -3270,20 +3242,6 @@
/obj/machinery/newscaster/directional/north,
/turf/open/floor/iron/dark,
/area/station/maintenance/disposal/incinerator)
-"aRG" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/stripes/white/line{
- dir = 4
- },
-/obj/item/folder/white{
- pixel_y = 13
- },
-/obj/machinery/power/apc/auto_name/directional/west,
-/obj/structure/cable,
-/turf/open/floor/iron/dark,
-/area/station/science/lab)
"aRI" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -4183,11 +4141,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/pod/light,
/area/station/maintenance/floor2/port/aft)
-"bbN" = (
-/obj/machinery/pdapainter/engineering,
-/obj/machinery/camera/autoname/directional/west,
-/turf/open/floor/iron/dark/textured,
-/area/station/command/heads_quarters/ce)
"bcb" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -4468,14 +4421,6 @@
},
/turf/open/floor/pod/light,
/area/station/maintenance/floor4/starboard/fore)
-"bfA" = (
-/obj/effect/turf_decal/bot,
-/obj/structure/table/reinforced,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/cell_charger,
-/obj/structure/window/reinforced/spawner/directional/south,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/robotics/mechbay)
"bfC" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
@@ -5284,13 +5229,6 @@
/obj/item/radio/intercom/directional/east,
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
-"bnI" = (
-/obj/structure/table/reinforced,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/item/radio/intercom/directional/west,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/robotics/lab)
"bnL" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 1
@@ -5442,14 +5380,6 @@
/obj/item/crowbar/mechremoval,
/turf/open/floor/iron/large,
/area/station/science/robotics/lab)
-"bpD" = (
-/obj/effect/turf_decal/siding/white,
-/obj/structure/railing,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/structure/table/reinforced/rglass,
-/turf/open/floor/iron/large,
-/area/station/science/robotics/lab)
"bpE" = (
/obj/effect/spawner/random/trash/mess,
/obj/effect/decal/cleanable/dirt,
@@ -6956,6 +6886,7 @@
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer4{
dir = 8
},
+/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/ordnance/testlab)
"bJQ" = (
@@ -7162,14 +7093,6 @@
/obj/machinery/light/floor,
/turf/open/floor/wood/tile,
/area/station/service/library)
-"bMu" = (
-/obj/effect/turf_decal/tile/purple/opposingcorners,
-/obj/machinery/computer/security/telescreen/rd{
- pixel_x = -30
- },
-/obj/machinery/pdapainter/research,
-/turf/open/floor/iron/white,
-/area/station/command/heads_quarters/rd)
"bMz" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/girder,
@@ -8508,6 +8431,12 @@
/obj/structure/closet/firecloset,
/turf/open/floor/pod/dark,
/area/station/maintenance/floor2/port/aft)
+"cep" = (
+/obj/effect/turf_decal/tile/blue/opposingcorners,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/obj/machinery/computer/security/telescreen/minisat/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/command/teleporter)
"cev" = (
/obj/structure/cable,
/obj/machinery/door/airlock/hatch{
@@ -10741,6 +10670,20 @@
/obj/structure/lattice,
/turf/open/space/basic,
/area/space/nearstation)
+"cIc" = (
+/obj/machinery/door/airlock/highsecurity{
+ name = "AI Upload"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/effect/mapping_helpers/airlock/access/any/command/ai_upload,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/obj/structure/sign/departments/aiupload/directional/south,
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/turret_protected/ai_upload_foyer)
"cId" = (
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 8
@@ -12898,6 +12841,17 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/security/prison/safe)
+"dlR" = (
+/obj/item/radio/intercom/directional/north{
+ broadcasting = 1;
+ frequency = 1447;
+ listening = 0;
+ name = "Private Channel"
+ },
+/obj/machinery/recharge_station,
+/obj/machinery/computer/security/telescreen/minisat/directional/east,
+/turf/open/floor/circuit,
+/area/station/ai_monitored/turret_protected/aisat/service)
"dlW" = (
/turf/closed/wall,
/area/station/maintenance/floor4/starboard/aft)
@@ -14501,6 +14455,7 @@
/area/station/maintenance/floor1/starboard/fore)
"dIJ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
/turf/open/floor/iron/white,
/area/station/science/ordnance/testlab)
"dIO" = (
@@ -14785,6 +14740,16 @@
},
/turf/open/floor/iron/dark/textured_large,
/area/station/hallway/secondary/exit/departure_lounge)
+"dMt" = (
+/obj/machinery/computer/security/telescreen/minisat/directional/east,
+/obj/machinery/camera/directional/south{
+ c_tag = "MiniSat Exterior Access";
+ network = list("minisat")
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/firealarm/directional/south,
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/turret_protected/aisat)
"dMA" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -17183,6 +17148,21 @@
},
/turf/open/floor/plating,
/area/station/engineering/supermatter)
+"etb" = (
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/brown{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/machinery/airalarm/directional/north,
+/obj/structure/rack,
+/obj/item/stock_parts/power_store/cell/lead,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/cargo/storage)
"etj" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
@@ -18241,6 +18221,21 @@
dir = 4
},
/area/station/command/bridge)
+"eIg" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 9
+ },
+/obj/effect/turf_decal/trimline/blue/filled/corner,
+/obj/machinery/turretid{
+ control_area = "/area/station/ai_monitored/turret_protected/ai_upload";
+ icon_state = "control_stun";
+ name = "AI Upload turret control";
+ pixel_y = 28
+ },
+/obj/machinery/computer/security/telescreen/aiupload/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/turret_protected/ai_upload_foyer)
"eIq" = (
/obj/structure/chair/stool/directional/west,
/obj/effect/turf_decal/trimline/red/warning{
@@ -18861,10 +18856,10 @@
/area/station/service/kitchen)
"eSq" = (
/obj/structure/railing/corner,
-/obj/machinery/atmospherics/pipe/smart/simple/purple,
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer4{
dir = 8
},
+/obj/machinery/atmospherics/pipe/smart/simple/purple/visible,
/turf/open/floor/iron/dark,
/area/station/science/ordnance/testlab)
"eSw" = (
@@ -23660,6 +23655,26 @@
},
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/maintenance/disposal)
+"ghy" = (
+/obj/effect/turf_decal/tile/blue/fourcorners,
+/obj/structure/table/reinforced/rglass,
+/obj/machinery/cell_charger{
+ pixel_y = 10
+ },
+/obj/machinery/cell_charger{
+ pixel_y = 1;
+ layer = 2.91
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_y = 9;
+ pixel_x = -1
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = -1;
+ layer = 3.01
+ },
+/turf/open/floor/iron/white/textured,
+/area/station/medical/treatment_center)
"ghH" = (
/obj/effect/turf_decal/tile/blue/half{
dir = 4
@@ -24693,6 +24708,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
},
+/obj/structure/cable,
/turf/open/floor/iron/white,
/area/station/science/ordnance/testlab)
"gwl" = (
@@ -25328,14 +25344,6 @@
},
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/cmo)
-"gEo" = (
-/obj/structure/table/reinforced,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/cell_charger,
-/obj/effect/turf_decal/tile/blue/fourcorners,
-/obj/machinery/airalarm/directional/east,
-/turf/open/floor/iron/dark,
-/area/station/command/bridge)
"gEv" = (
/obj/machinery/camera/directional/south{
c_tag = "Genetics Lab"
@@ -25703,6 +25711,10 @@
/obj/effect/landmark/start/captain,
/turf/open/floor/wood/tile,
/area/station/command/heads_quarters/captain/private)
+"gJl" = (
+/obj/machinery/computer/security/telescreen/engine_waste/directional/north,
+/turf/open/floor/engine,
+/area/station/engineering/supermatter/room)
"gJm" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
@@ -26336,16 +26348,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/pod/light,
/area/station/maintenance/floor1/starboard)
-"gSr" = (
-/obj/structure/table/reinforced/plastitaniumglass,
-/obj/structure/window/reinforced/spawner/directional/west,
-/obj/structure/cable,
-/obj/machinery/computer/security/telescreen/engine{
- name = "Engineering and atmospherics monitor"
- },
-/mob/living/basic/parrot/poly,
-/turf/open/floor/catwalk_floor/iron_dark,
-/area/station/command/heads_quarters/ce)
"gSs" = (
/obj/effect/turf_decal/trimline/neutral/warning{
dir = 1
@@ -26456,6 +26458,14 @@
/obj/machinery/light/small/directional/south,
/turf/open/floor/engine,
/area/station/maintenance/disposal/incinerator)
+"gTZ" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/computer/security/telescreen/engine_waste/directional/east,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/dark/textured_large,
+/area/station/engineering/atmos/pumproom)
"gUc" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/light_switch/directional/south,
@@ -26749,21 +26759,6 @@
dir = 4
},
/area/station/engineering/storage/tech)
-"gYy" = (
-/obj/effect/turf_decal/tile/yellow{
- dir = 1
- },
-/obj/effect/turf_decal/tile/brown{
- dir = 4
- },
-/obj/structure/cable,
-/obj/machinery/airalarm/directional/north,
-/obj/structure/rack,
-/obj/item/stock_parts/cell/lead,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron,
-/area/station/cargo/storage)
"gYI" = (
/obj/structure/fluff/shower_drain,
/obj/machinery/duct,
@@ -28874,7 +28869,7 @@
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{
dir = 4
},
-/obj/machinery/atmospherics/pipe/smart/simple/purple,
+/obj/machinery/atmospherics/pipe/smart/simple/purple/visible,
/turf/open/floor/iron/dark,
/area/station/science/ordnance/testlab)
"hAI" = (
@@ -28966,12 +28961,6 @@
/obj/machinery/duct,
/turf/open/floor/iron/white,
/area/station/command/heads_quarters/captain/private)
-"hBF" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/catwalk_floor/iron_dark,
-/area/station/ai_monitored/command/storage/eva)
"hBG" = (
/obj/structure/railing{
dir = 1
@@ -29339,6 +29328,24 @@
/obj/machinery/atmospherics/pipe/smart/simple/purple,
/turf/open/floor/engine/vacuum,
/area/station/science/ordnance/freezerchamber)
+"hGG" = (
+/obj/structure/rack,
+/obj/item/stock_parts/micro_laser{
+ pixel_y = 7
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = -4;
+ pixel_y = -6
+ },
+/obj/item/vending_refill/wardrobe/science_wardrobe{
+ pixel_y = 18
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/obj/item/radio/intercom/directional/east,
+/turf/open/floor/iron/white,
+/area/station/science/lower)
"hGL" = (
/obj/machinery/light/small/directional/north,
/obj/effect/decal/cleanable/dirt,
@@ -31320,20 +31327,6 @@
/obj/machinery/vending/drugs,
/turf/open/floor/iron/white,
/area/station/medical/pharmacy)
-"iht" = (
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/stack/rods/fifty,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/electronics/airlock,
-/obj/item/electronics/airlock,
-/obj/item/stock_parts/cell/high,
-/obj/item/stack/sheet/mineral/plasma{
- amount = 30
- },
-/obj/item/gps,
-/obj/structure/closet/crate/engineering,
-/turf/open/floor/plating,
-/area/station/engineering/lobby)
"ihC" = (
/obj/item/stack/sheet/iron,
/turf/open/floor/plating,
@@ -31507,6 +31500,12 @@
dir = 1
},
/area/station/security/office)
+"ijV" = (
+/obj/effect/turf_decal/tile/purple/opposingcorners,
+/obj/machinery/computer/security/telescreen/rd/directional/west,
+/obj/machinery/pdapainter/research,
+/turf/open/floor/iron/white,
+/area/station/command/heads_quarters/rd)
"ijX" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/hollow/directional,
@@ -32171,14 +32170,6 @@
/obj/structure/railing/corner,
/turf/open/floor/catwalk_floor,
/area/station/maintenance/floor2/starboard/aft)
-"isp" = (
-/obj/machinery/computer/security/telescreen{
- name = "\improper Engine Waste Monitor";
- network = list("waste");
- pixel_y = 26
- },
-/turf/open/floor/engine,
-/area/station/engineering/supermatter/room)
"isq" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/landmark/navigate_destination/dockaux,
@@ -33273,6 +33264,13 @@
},
/turf/open/floor/engine,
/area/station/engineering/supermatter)
+"iGR" = (
+/obj/structure/table,
+/obj/effect/turf_decal/tile/purple/opposingcorners,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/iron/white,
+/area/station/science/circuits)
"iGY" = (
/obj/machinery/door/airlock/medical{
name = "Medical Break Room"
@@ -33327,6 +33325,12 @@
name = "lab floor"
},
/area/station/science/robotics/lab)
+"iHL" = (
+/obj/machinery/pdapainter/engineering,
+/obj/machinery/camera/autoname/directional/west,
+/obj/machinery/computer/security/telescreen/engine/directional/south,
+/turf/open/floor/iron/dark/textured,
+/area/station/command/heads_quarters/ce)
"iHM" = (
/obj/machinery/vending/wallmed/directional/west,
/obj/effect/turf_decal/tile/blue/opposingcorners,
@@ -33348,20 +33352,6 @@
/obj/item/weldingtool/largetank,
/turf/open/floor/iron,
/area/station/cargo/warehouse)
-"iIb" = (
-/obj/item/kirbyplants/random,
-/obj/machinery/airalarm/directional/west,
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/obj/machinery/computer/security/telescreen/interrogation{
- pixel_y = 30
- },
-/turf/open/floor/iron/dark,
-/area/station/security/interrogation)
"iIm" = (
/obj/machinery/door/airlock/hatch{
name = "Maintenance Hatch"
@@ -33683,16 +33673,6 @@
dir = 1
},
/area/station/hallway/floor2/fore)
-"iNA" = (
-/obj/machinery/computer/security/telescreen/vault{
- dir = 8;
- pixel_x = 26
- },
-/obj/machinery/computer/security{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/hop)
"iNB" = (
/obj/machinery/light/directional/north,
/obj/machinery/camera/autoname/directional/east,
@@ -35319,6 +35299,7 @@
/obj/effect/turf_decal/stripes{
dir = 1
},
+/obj/structure/cable,
/turf/open/floor/iron/white,
/area/station/science/ordnance/testlab)
"jjo" = (
@@ -35402,6 +35383,17 @@
},
/turf/open/floor/mineral/silver,
/area/station/service/chapel)
+"jkD" = (
+/obj/structure/cable,
+/obj/machinery/power/apc/auto_name/directional/east{
+ cell_type = /obj/item/stock_parts/power_store/battery/hyper
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/obj/machinery/light/small/directional/north,
+/turf/open/floor/iron/smooth_large,
+/area/station/tcommsat/server)
"jkH" = (
/obj/machinery/holopad,
/turf/open/floor/iron/white,
@@ -36627,15 +36619,6 @@
/obj/effect/turf_decal/trimline/green/filled/line,
/turf/open/floor/iron,
/area/station/service/hydroponics)
-"jAe" = (
-/obj/effect/turf_decal/tile/blue/opposingcorners,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 4;
- pixel_x = -32
- },
-/turf/open/floor/iron/dark,
-/area/station/command/teleporter)
"jAl" = (
/obj/structure/table/wood/fancy/red,
/obj/effect/turf_decal/siding/wood{
@@ -37370,7 +37353,7 @@
/area/station/maintenance/floor4/starboard)
"jJM" = (
/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible/layer2,
-/obj/machinery/atmospherics/pipe/smart/simple/purple,
+/obj/machinery/atmospherics/pipe/smart/simple/purple/visible,
/turf/open/floor/iron/dark,
/area/station/science/ordnance/testlab)
"jJP" = (
@@ -40931,21 +40914,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/station/cargo/miningdock)
-"kFk" = (
-/obj/machinery/atmospherics/pipe/smart/simple/purple/hidden/layer1{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/computer/security/telescreen{
- dir = 1;
- name = "\improper Engine Waste Monitor";
- network = list("waste");
- pixel_y = -26
- },
-/turf/open/floor/catwalk_floor/iron,
-/area/station/engineering/atmos/pumproom)
"kFp" = (
/obj/effect/turf_decal/trimline/blue/warning{
dir = 10
@@ -41277,19 +41245,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/floor2/fore)
-"kIT" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/computer/security/telescreen{
- dir = 8;
- name = "\improper Engine Waste Monitor";
- network = list("waste");
- pixel_x = 26
- },
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/iron/dark/textured_large,
-/area/station/engineering/atmos/pumproom)
"kJg" = (
/obj/effect/turf_decal/trimline/purple/line{
dir = 1
@@ -41536,28 +41491,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/pod/dark,
/area/station/maintenance/floor2/starboard)
-"kMl" = (
-/obj/structure/table,
-/obj/item/ai_module/reset/purge,
-/obj/effect/turf_decal/trimline/blue/filled/line{
- dir = 10
- },
-/obj/effect/turf_decal/trimline/blue/filled/corner{
- dir = 4
- },
-/obj/structure/window/reinforced/spawner/directional/north,
-/obj/effect/spawner/random/aimodule/neutral{
- pixel_x = 15
- },
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching the AI Upload.";
- dir = 4;
- name = "AI Upload Monitor";
- network = list("aiupload");
- pixel_x = -29
- },
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/turret_protected/ai_upload_foyer)
"kMv" = (
/obj/machinery/plumbing/receiver,
/obj/effect/turf_decal/tile/yellow/opposingcorners,
@@ -42140,26 +42073,6 @@
},
/turf/open/floor/catwalk_floor,
/area/station/maintenance/floor1/port/aft)
-"kUf" = (
-/obj/effect/turf_decal/tile/blue/fourcorners,
-/obj/structure/table/reinforced/rglass,
-/obj/machinery/cell_charger{
- pixel_y = 10
- },
-/obj/machinery/cell_charger{
- pixel_y = 1;
- layer = 2.91
- },
-/obj/item/stock_parts/cell/high{
- pixel_y = 9;
- pixel_x = -1
- },
-/obj/item/stock_parts/cell/high{
- pixel_x = -1;
- layer = 3.01
- },
-/turf/open/floor/iron/white/textured,
-/area/station/medical/treatment_center)
"kUh" = (
/obj/item/paper_bin,
/obj/structure/table/reinforced/rglass,
@@ -42246,19 +42159,6 @@
"kVp" = (
/turf/open/floor/engine/hull,
/area/space/nearstation)
-"kVs" = (
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 8;
- pixel_x = 28
- },
-/obj/machinery/camera/directional/south{
- c_tag = "MiniSat Exterior Access";
- network = list("minisat")
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/firealarm/directional/south,
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/turret_protected/aisat)
"kVu" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/structure/cable,
@@ -42582,6 +42482,20 @@
/obj/machinery/light/directional/north,
/turf/open/floor/eighties,
/area/station/commons/dorms/room2)
+"kZr" = (
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/rods/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/electronics/airlock,
+/obj/item/electronics/airlock,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 30
+ },
+/obj/item/gps,
+/obj/structure/closet/crate/engineering,
+/turf/open/floor/plating,
+/area/station/engineering/lobby)
"kZv" = (
/obj/machinery/power/apc/auto_name/directional/east,
/obj/structure/cable,
@@ -47504,6 +47418,22 @@
/obj/machinery/duct,
/turf/open/floor/iron/dark/textured,
/area/station/commons/fitness)
+"mko" = (
+/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
+ dir = 4
+ },
+/obj/machinery/computer/security/telescreen/ordnance/directional/north,
+/obj/machinery/computer/pod/old/mass_driver_controller/ordnancedriver,
+/obj/structure/table,
+/obj/item/binoculars{
+ pixel_x = 6;
+ pixel_y = 6
+ },
+/obj/effect/turf_decal/siding/thinplating/dark{
+ dir = 5
+ },
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/storage)
"mkE" = (
/obj/effect/turf_decal/tile/blue/opposingcorners,
/obj/item/wrench,
@@ -47566,22 +47496,6 @@
dir = 4
},
/area/station/hallway/secondary/exit)
-"mlC" = (
-/obj/structure/table,
-/obj/item/storage/toolbox/emergency{
- pixel_y = 12
- },
-/obj/item/stack/cable_coil/cut{
- pixel_y = 7
- },
-/obj/item/stock_parts/cell/lead{
- pixel_x = 5;
- pixel_y = 4
- },
-/obj/item/wirecutters,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/pod/light,
-/area/station/maintenance/floor1/starboard/fore)
"mlH" = (
/obj/structure/sign/departments/court{
pixel_y = 32
@@ -49157,6 +49071,12 @@
dir = 1
},
/area/station/hallway/secondary/exit)
+"mFQ" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/catwalk_floor/iron_dark,
+/area/station/ai_monitored/command/storage/eva)
"mFV" = (
/obj/structure/bodycontainer/morgue,
/obj/machinery/light/small/directional/west,
@@ -49279,12 +49199,6 @@
},
/turf/open/floor/iron/dark,
/area/station/security/execution/education)
-"mHo" = (
-/obj/structure/rack,
-/obj/item/mod/core/standard,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/pod/light,
-/area/station/maintenance/floor3/port/aft)
"mHu" = (
/obj/effect/turf_decal/trimline/green/filled/line{
dir = 10
@@ -49387,21 +49301,6 @@
},
/turf/open/floor/wood/tile,
/area/station/command/heads_quarters/captain)
-"mIV" = (
-/obj/machinery/computer/security/telescreen{
- desc = "Used for the Auxiliary Mining Base.";
- dir = 1;
- name = "Auxiliary Base Monitor";
- network = list("auxbase");
- pixel_y = -28
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
- },
-/obj/effect/turf_decal/tile/yellow/half/contrasted,
-/turf/open/floor/iron,
-/area/station/construction/mining/aux_base)
"mIX" = (
/obj/machinery/ai_slipper{
uses = 10
@@ -50918,16 +50817,6 @@
},
/turf/open/floor/iron/dark,
/area/station/hallway/floor1/aft)
-"ndG" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/stripes/white/line{
- dir = 8
- },
-/obj/machinery/status_display/ai/directional/east,
-/turf/open/floor/iron/dark,
-/area/station/science/auxlab)
"ndL" = (
/obj/effect/turf_decal/trimline/green/warning{
dir = 1
@@ -52076,6 +51965,28 @@
},
/turf/open/floor/iron/dark/textured,
/area/station/medical/cryo)
+"nqP" = (
+/obj/structure/window/reinforced/plasma/spawner/directional/east,
+/obj/structure/table/reinforced/plasmarglass,
+/obj/item/stock_parts/power_store/cell/lead{
+ pixel_x = -5;
+ pixel_y = 8
+ },
+/obj/item/usb_cable{
+ name = "jumper cable";
+ pixel_x = -10;
+ pixel_y = 12
+ },
+/obj/item/lead_pipe{
+ pixel_x = -5
+ },
+/obj/item/reagent_containers/spray/cleaner{
+ pixel_x = 6;
+ pixel_y = 7
+ },
+/obj/item/reagent_containers/syringe,
+/turf/open/floor/pod/dark,
+/area/station/service/kitchen/abandoned)
"nqU" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
@@ -53022,7 +52933,19 @@
/obj/effect/turf_decal/trimline/yellow/corner{
dir = 4
},
-/obj/item/storage/toolbox/mechanical,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = 8;
+ pixel_y = -4
+ },
+/obj/item/flatpack{
+ board = /obj/item/circuitboard/machine/flatpacker;
+ pixel_x = -6;
+ pixel_y = 5
+ },
+/obj/item/multitool{
+ pixel_x = 7;
+ pixel_y = 10
+ },
/turf/open/floor/iron/corner{
dir = 4
},
@@ -53087,7 +53010,7 @@
/obj/item/fishing_rod,
/obj/structure/closet,
/obj/effect/spawner/random/maintenance/three,
-/obj/item/clothing/mask/cigarette/pipe,
+/obj/item/cigarette/pipe,
/turf/open/floor/pod/light,
/area/station/maintenance/floor2/starboard/fore)
"nEO" = (
@@ -55610,6 +55533,13 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance,
/turf/open/floor/catwalk_floor,
/area/station/maintenance/floor2/port/aft)
+"omq" = (
+/obj/machinery/computer/security/telescreen/vault/directional/east,
+/obj/machinery/computer/security{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/station/command/heads_quarters/hop)
"omr" = (
/turf/open/floor/iron/stairs{
dir = 8
@@ -55799,6 +55729,20 @@
/obj/machinery/light/warm/directional/north,
/turf/open/floor/carpet/orange,
/area/station/service/chapel/funeral)
+"ooT" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/stripes/white/line{
+ dir = 4
+ },
+/obj/item/folder/white{
+ pixel_y = 13
+ },
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/lab)
"ooV" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/ammo_casing/c38{
@@ -56185,6 +56129,16 @@
/obj/structure/chair,
/turf/open/floor/iron/kitchen/herringbone,
/area/station/service/kitchen/diner)
+"ouy" = (
+/obj/machinery/atmospherics/pipe/smart/simple/purple/hidden/layer1{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/computer/security/telescreen/engine_waste/directional/south,
+/turf/open/floor/catwalk_floor/iron,
+/area/station/engineering/atmos/pumproom)
"ouD" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -56737,16 +56691,6 @@
},
/turf/open/floor/pod/dark,
/area/station/maintenance/floor1/port)
-"oCb" = (
-/obj/effect/turf_decal/trimline/neutral/warning{
- dir = 8
- },
-/obj/machinery/airalarm/directional/east,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/structure/table/reinforced,
-/turf/open/floor/iron/dark,
-/area/station/command/gateway)
"oCc" = (
/obj/effect/turf_decal/tile/red/anticorner/contrasted,
/obj/machinery/flasher/directional/east{
@@ -57418,6 +57362,16 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/service)
+"oLE" = (
+/obj/effect/turf_decal/trimline/neutral/warning{
+ dir = 8
+ },
+/obj/machinery/airalarm/directional/east,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/structure/table/reinforced,
+/turf/open/floor/iron/dark,
+/area/station/command/gateway)
"oLG" = (
/obj/structure/beebox,
/turf/open/floor/grass,
@@ -57656,7 +57610,7 @@
/area/station/science/lower)
"oOW" = (
/obj/structure/rack,
-/obj/item/gun/energy/e_gun/dragnet,
+/obj/effect/spawner/random/armory/dragnet,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/security/armory)
"oOY" = (
@@ -58426,6 +58380,15 @@
/obj/item/tank/internals/emergency_oxygen,
/turf/open/floor/iron/smooth,
/area/station/tcommsat/computer)
+"oZd" = (
+/obj/machinery/computer/security/telescreen/auxbase/directional/south,
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/yellow/half/contrasted,
+/turf/open/floor/iron,
+/area/station/construction/mining/aux_base)
"oZj" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -58464,12 +58427,6 @@
/obj/structure/sign/poster/official/random/directional/west,
/turf/open/floor/iron/dark,
/area/station/security/checkpoint/second)
-"oZB" = (
-/obj/structure/sign/departments/aiupload/directional/east,
-/turf/open/floor/iron/dark/side{
- dir = 4
- },
-/area/station/hallway/floor2/aft)
"oZE" = (
/obj/machinery/door/airlock/hatch{
name = "Maintenance Hatch"
@@ -58782,13 +58739,6 @@
/obj/machinery/atmospherics/pipe/smart/simple/green/visible,
/turf/open/floor/plating,
/area/station/engineering/atmos)
-"peN" = (
-/obj/structure/table,
-/obj/effect/turf_decal/tile/purple/opposingcorners,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/iron/white,
-/area/station/science/circuits)
"pfd" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/blood/old,
@@ -59608,6 +59558,10 @@
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible{
dir = 4
},
+/obj/machinery/power/apc/auto_name/directional/north{
+ areastring = "/area/station/science/ordnance/burnchamber"
+ },
+/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/ordnance/testlab)
"pqO" = (
@@ -60720,6 +60674,14 @@
/obj/structure/closet/firecloset,
/turf/open/floor/pod/dark,
/area/station/maintenance/floor3/starboard/aft)
+"pEY" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high/empty,
+/obj/structure/sign/poster/contraband/random/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/commons/vacant_room/commissary)
"pEZ" = (
/obj/structure/closet/radiation,
/obj/effect/turf_decal/box,
@@ -60826,6 +60788,10 @@
dir = 8
},
/area/station/security/office)
+"pGz" = (
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance/testlab)
"pGG" = (
/obj/structure/ladder,
/obj/structure/lattice/catwalk,
@@ -66546,6 +66512,12 @@
},
/turf/open/floor/glass/reinforced,
/area/station/service/library)
+"rdv" = (
+/obj/structure/rack,
+/obj/item/mod/core/standard,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/pod/light,
+/area/station/maintenance/floor3/port/aft)
"rdx" = (
/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible{
dir = 4
@@ -66815,6 +66787,16 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/catwalk_floor/iron,
/area/station/engineering/atmos)
+"rgx" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/stripes/white/line{
+ dir = 8
+ },
+/obj/machinery/status_display/ai/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/science/auxlab)
"rgy" = (
/obj/effect/turf_decal/tile/purple/opposingcorners,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -66934,6 +66916,18 @@
/obj/machinery/light/small/blacklight/directional/east,
/turf/open/floor/pod/light,
/area/station/maintenance/floor4/starboard)
+"rhO" = (
+/obj/item/kirbyplants/random,
+/obj/machinery/airalarm/directional/west,
+/obj/effect/turf_decal/tile/red{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/red{
+ dir = 4
+ },
+/obj/machinery/computer/security/telescreen/interrogation/directional/north,
+/turf/open/floor/iron/dark,
+/area/station/security/interrogation)
"rhR" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -67909,20 +67903,6 @@
},
/turf/open/floor/iron/dark/side,
/area/station/hallway/secondary/entry)
-"rxu" = (
-/obj/item/radio/intercom/directional/north{
- broadcasting = 1;
- frequency = 1447;
- listening = 0;
- name = "Private Channel"
- },
-/obj/machinery/recharge_station,
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 8;
- pixel_x = 28
- },
-/turf/open/floor/circuit,
-/area/station/ai_monitored/turret_protected/aisat/service)
"rxz" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/effect/turf_decal/trimline/blue/filled/line{
@@ -70631,6 +70611,13 @@
/obj/structure/bookcase/random/fiction,
/turf/open/floor/wood/tile,
/area/station/service/library)
+"slC" = (
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/structure/window/reinforced/spawner/directional/west,
+/obj/structure/cable,
+/mob/living/basic/parrot/poly,
+/turf/open/floor/catwalk_floor/iron_dark,
+/area/station/command/heads_quarters/ce)
"slI" = (
/obj/item/radio/intercom/directional/west,
/obj/structure/window/reinforced/spawner/directional/south,
@@ -71953,20 +71940,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/stairs/old,
/area/station/service/theater)
-"sEw" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/obj/effect/turf_decal/trimline/blue/filled/line{
- dir = 9
- },
-/obj/effect/turf_decal/trimline/blue/filled/corner,
-/obj/machinery/turretid{
- control_area = "/area/station/ai_monitored/turret_protected/ai_upload";
- icon_state = "control_stun";
- name = "AI Upload turret control";
- pixel_y = 28
- },
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/turret_protected/ai_upload_foyer)
"sEA" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 8
@@ -74082,24 +74055,6 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/floor2/starboard)
-"tdM" = (
-/obj/structure/rack,
-/obj/item/stock_parts/micro_laser{
- pixel_y = 7
- },
-/obj/item/stock_parts/cell/high{
- pixel_x = -4;
- pixel_y = -6
- },
-/obj/item/vending_refill/wardrobe/science_wardrobe{
- pixel_y = 18
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 8
- },
-/obj/item/radio/intercom/directional/east,
-/turf/open/floor/iron/white,
-/area/station/science/lower)
"tdN" = (
/obj/machinery/door/airlock/hatch{
name = "Maintenance Bulkhead"
@@ -74598,17 +74553,6 @@
name = "lab floor"
},
/area/station/science/genetics)
-"tlq" = (
-/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/directional/east{
- cell_type = /obj/item/stock_parts/cell/hyper
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
- },
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/iron/smooth_large,
-/area/station/tcommsat/server)
"tlr" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -74782,6 +74726,16 @@
/obj/effect/spawner/random/contraband/prison,
/turf/open/floor/iron/dark,
/area/station/maintenance/floor2/starboard/aft)
+"tnM" = (
+/obj/structure/table,
+/obj/machinery/cell_charger{
+ pixel_y = 5
+ },
+/obj/item/stack/cable_coil,
+/obj/item/multitool,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/pod,
+/area/station/maintenance/floor4/port/fore)
"tnN" = (
/obj/structure/railing{
dir = 8
@@ -75184,6 +75138,14 @@
dir = 8
},
/area/station/hallway/floor2/aft)
+"tsB" = (
+/obj/effect/turf_decal/siding/white,
+/obj/structure/railing,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/structure/table/reinforced/rglass,
+/turf/open/floor/iron/large,
+/area/station/science/robotics/lab)
"tsN" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -80930,6 +80892,14 @@
},
/turf/open/floor/iron/checker,
/area/station/cargo/miningdock)
+"uSL" = (
+/obj/effect/turf_decal/bot,
+/obj/structure/table/reinforced,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/cell_charger,
+/obj/structure/window/reinforced/spawner/directional/south,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/robotics/mechbay)
"uSN" = (
/obj/structure/railing,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -82765,24 +82735,6 @@
/obj/structure/marker_beacon/burgundy,
/turf/open/floor/pod/light,
/area/station/maintenance/floor4/starboard/aft)
-"vqW" = (
-/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
- dir = 4
- },
-/obj/machinery/computer/security/telescreen/ordnance{
- pixel_y = 32
- },
-/obj/machinery/computer/pod/old/mass_driver_controller/ordnancedriver,
-/obj/structure/table,
-/obj/item/binoculars{
- pixel_x = 6;
- pixel_y = 6
- },
-/obj/effect/turf_decal/siding/thinplating/dark{
- dir = 5
- },
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
"vrh" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 4
@@ -84687,6 +84639,21 @@
/obj/structure/window/reinforced/spawner/directional/north,
/turf/open/floor/iron/cafeteria,
/area/station/engineering/atmos)
+"vQf" = (
+/obj/structure/table,
+/obj/item/ai_module/reset/purge,
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 10
+ },
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 4
+ },
+/obj/structure/window/reinforced/spawner/directional/north,
+/obj/effect/spawner/random/aimodule/neutral{
+ pixel_x = 15
+ },
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/turret_protected/ai_upload_foyer)
"vQg" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -85188,6 +85155,13 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/textured_large,
/area/station/hallway/secondary/entry)
+"vWP" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/radio/intercom/directional/west,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/robotics/lab)
"vWQ" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -88106,16 +88080,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/textured_large,
/area/station/engineering/lobby)
-"wHe" = (
-/obj/structure/table,
-/obj/machinery/cell_charger{
- pixel_y = 5
- },
-/obj/item/stack/cable_coil,
-/obj/item/multitool,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/pod,
-/area/station/maintenance/floor4/port/fore)
"wHj" = (
/obj/structure/table,
/obj/item/hfr_box/body/waste_output,
@@ -88316,6 +88280,22 @@
},
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/hos)
+"wIX" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/emergency{
+ pixel_y = 12
+ },
+/obj/item/stack/cable_coil/cut{
+ pixel_y = 7
+ },
+/obj/item/stock_parts/power_store/cell/lead{
+ pixel_x = 5;
+ pixel_y = 4
+ },
+/obj/item/wirecutters,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/light,
+/area/station/maintenance/floor1/starboard/fore)
"wJf" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
@@ -91292,6 +91272,7 @@
/area/station/commons/vacant_room/office)
"xxA" = (
/obj/machinery/holopad,
+/obj/structure/cable,
/turf/open/floor/iron/white,
/area/station/science/ordnance/testlab)
"xxC" = (
@@ -92327,7 +92308,7 @@
/area/station/maintenance/floor3/port)
"xJX" = (
/obj/structure/table,
-/obj/item/clothing/mask/cigarette/candy{
+/obj/item/cigarette/candy{
pixel_x = 4
},
/turf/open/floor/iron/dark/smooth_large,
@@ -92518,6 +92499,14 @@
dir = 8
},
/area/station/hallway/floor3/aft)
+"xMV" = (
+/obj/structure/table/reinforced,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/cell_charger,
+/obj/effect/turf_decal/tile/blue/fourcorners,
+/obj/machinery/airalarm/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/command/bridge)
"xMW" = (
/obj/structure/cable,
/obj/structure/disposalpipe/junction{
@@ -94082,14 +94071,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/smooth,
/area/station/cargo/warehouse)
-"yjm" = (
-/obj/structure/table,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high/empty,
-/obj/structure/sign/poster/contraband/random/directional/east,
-/turf/open/floor/iron/dark,
-/area/station/commons/vacant_room/commissary)
"yjJ" = (
/obj/effect/turf_decal/siding/wideplating_new/dark/corner,
/turf/open/floor/engine/co2,
@@ -110637,7 +110618,7 @@ wUH
hyN
wBR
pTR
-mIV
+oZd
wBR
wBR
wBR
@@ -116254,7 +116235,7 @@ owI
owI
oic
oic
-mlC
+wIX
laR
oic
jdc
@@ -118579,7 +118560,7 @@ eaW
lSJ
mxC
jUP
-gYy
+etb
myW
kga
uTH
@@ -131964,7 +131945,7 @@ nor
rcc
sHG
uxT
-tlq
+jkD
qkL
snO
jRp
@@ -136595,7 +136576,7 @@ sQD
lOI
sjs
oFr
-bbN
+iHL
kzE
fmb
xgH
@@ -136850,7 +136831,7 @@ nPb
rCO
cjc
aRI
-gSr
+slC
bgs
hZt
kzE
@@ -138627,7 +138608,7 @@ kDg
vsL
kDg
rBP
-iht
+kZr
ykU
mMO
tCC
@@ -140427,7 +140408,7 @@ oIy
irk
nDr
kBz
-kIT
+gTZ
bwl
wlA
kGK
@@ -141453,13 +141434,13 @@ hQy
vmr
vmr
skj
-kFk
+ouy
sAH
hhb
gGt
qEw
sAH
-isp
+gJl
jSD
ppd
uyD
@@ -181580,7 +181561,7 @@ lQI
lQI
ozr
jJu
-aJO
+nqP
qiR
rkZ
kms
@@ -182059,7 +182040,7 @@ mKZ
sxl
naI
lNN
-peN
+iGR
xuv
jBm
xuv
@@ -182838,7 +182819,7 @@ oFY
mBZ
ijS
obj
-ndG
+rgx
sEL
biW
xWe
@@ -184638,7 +184619,7 @@ kJg
kmR
lcB
kGf
-aRG
+ooT
wXC
ePa
rNg
@@ -187966,7 +187947,7 @@ hge
hge
hge
oiO
-bMu
+ijV
pKO
aiN
jDc
@@ -189006,7 +188987,7 @@ kXZ
wbS
eGF
dpL
-tdM
+hGG
bvx
btp
dpL
@@ -197245,7 +197226,7 @@ woE
biz
dzM
kUl
-kUf
+ghy
dzM
dYM
scx
@@ -200847,7 +200828,7 @@ bet
iAb
bif
fSi
-bnI
+vWP
aal
aAK
ybG
@@ -202887,7 +202868,7 @@ xDM
ddA
pZW
wCG
-oZB
+jZS
caF
dKS
bsv
@@ -203145,7 +203126,7 @@ lkA
pZW
nyE
nyE
-aRl
+cIc
nyE
nyE
kuB
@@ -203156,7 +203137,7 @@ igE
hcr
jbR
cqR
-bfA
+uSL
aFs
jeF
blv
@@ -203401,9 +203382,9 @@ sBb
ybB
rkY
nyE
-sEw
+eIg
eiD
-kMl
+vQf
nyE
sgJ
kzK
@@ -204188,7 +204169,7 @@ bgz
bid
grk
bmL
-bpD
+tsB
mOH
jhU
btW
@@ -262014,7 +261995,7 @@ oNV
eLw
cmh
kSU
-yjm
+pEY
piR
piR
roj
@@ -267676,7 +267657,7 @@ hLo
piR
xRs
bKR
-mHo
+rdv
piR
mom
hcT
@@ -309542,7 +309523,7 @@ bfx
eGK
onE
aNs
-gEo
+xMV
wFT
gaJ
qOq
@@ -309554,7 +309535,7 @@ qNY
iTN
qGF
uIx
-wHe
+tnM
lvm
vSG
mpK
@@ -313156,7 +313137,7 @@ fUm
oTx
uqc
nYe
-jAe
+cep
fwj
lOe
uIx
@@ -315694,8 +315675,8 @@ dWz
lYx
unQ
wMU
-oUW
-rDL
+aaN
+pGz
jjj
dIJ
oTq
@@ -316222,7 +316203,7 @@ fkN
fQx
nTJ
iXS
-hBF
+mFQ
hNh
hNh
hNh
@@ -317765,7 +317746,7 @@ xvr
hIB
nTo
hns
-oCb
+oLE
jbr
iXS
eHr
@@ -318773,7 +318754,7 @@ ucA
xuh
lln
lln
-vqW
+mko
eNX
bNP
nQj
@@ -320076,7 +320057,7 @@ nPE
qPv
iQe
wqP
-iNA
+omq
obK
kpI
dJC
@@ -326526,7 +326507,7 @@ bJm
oZo
gXi
gDx
-iIb
+rhO
ftZ
tBk
sCO
@@ -333449,7 +333430,7 @@ oyh
nbP
tIl
fEv
-kVs
+dMt
nbP
oyh
oyh
@@ -337810,7 +337791,7 @@ oyh
aFj
aFj
aFj
-rxu
+dlR
cRs
uEb
uEb
diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm
index 584ba1eb7ee9d..a2d6ba70275d9 100644
--- a/_maps/map_files/debug/runtimestation.dmm
+++ b/_maps/map_files/debug/runtimestation.dmm
@@ -162,7 +162,7 @@
pixel_y = 5
},
/obj/item/storage/toolbox/syndicate,
-/obj/item/stock_parts/cell/infinite,
+/obj/item/stock_parts/power_store/cell/infinite,
/turf/open/floor/iron,
/area/station/engineering/main)
"aT" = (
@@ -2338,9 +2338,9 @@
"Ov" = (
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/bluespace,
-/obj/item/stock_parts/cell/bluespace,
-/obj/item/stock_parts/cell/bluespace,
+/obj/item/stock_parts/power_store/cell/bluespace,
+/obj/item/stock_parts/power_store/cell/bluespace,
+/obj/item/stock_parts/power_store/cell/bluespace,
/turf/open/floor/iron/dark,
/area/station/science/explab)
"OU" = (
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 0a8c38681990b..9b5baa411fa10 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -3259,6 +3259,7 @@
pixel_x = 32
},
/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/computer/security/telescreen/research/directional/south,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin)
"oW" = (
@@ -7496,12 +7497,6 @@
/area/centcom/tdome/administration)
"JO" = (
/obj/machinery/modular_computer/preset/id/centcom,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching the RD's goons and the AI's satellite from the safety of his office.";
- name = "Research Monitor";
- network = list("rd","minisat");
- pixel_y = 28
- },
/turf/open/floor/iron/grimy,
/area/centcom/central_command_areas/admin)
"JU" = (
@@ -8583,13 +8578,13 @@
pixel_x = -3;
pixel_y = 3
},
-/obj/item/clothing/mask/cigarette/cigar/cohiba{
+/obj/item/cigarette/cigar/cohiba{
pixel_x = 6
},
-/obj/item/clothing/mask/cigarette/cigar/havana{
+/obj/item/cigarette/cigar/havana{
pixel_x = 2
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 4.5
},
/obj/machinery/status_display/evac/directional/north,
@@ -8770,13 +8765,13 @@
pixel_x = -3;
pixel_y = 3
},
-/obj/item/clothing/mask/cigarette/cigar/cohiba{
+/obj/item/cigarette/cigar/cohiba{
pixel_x = 6
},
-/obj/item/clothing/mask/cigarette/cigar/havana{
+/obj/item/cigarette/cigar/havana{
pixel_x = 2
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 4.5
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{
@@ -9001,13 +8996,13 @@
pixel_x = -3;
pixel_y = 3
},
-/obj/item/clothing/mask/cigarette/cigar/cohiba{
+/obj/item/cigarette/cigar/cohiba{
pixel_x = 6
},
-/obj/item/clothing/mask/cigarette/cigar/havana{
+/obj/item/cigarette/cigar/havana{
pixel_x = 2
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 4.5
},
/obj/machinery/airalarm/directional/south,
@@ -9480,7 +9475,7 @@
pixel_y = 19;
pixel_x = 7
},
-/obj/item/clothing/mask/cigarette/cigar/havana{
+/obj/item/cigarette/cigar/havana{
pixel_x = -6;
pixel_y = 5
},
@@ -10247,13 +10242,13 @@
pixel_x = -3;
pixel_y = 3
},
-/obj/item/clothing/mask/cigarette/cigar/cohiba{
+/obj/item/cigarette/cigar/cohiba{
pixel_x = 6
},
-/obj/item/clothing/mask/cigarette/cigar/havana{
+/obj/item/cigarette/cigar/havana{
pixel_x = 2
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 4.5
},
/obj/machinery/newscaster/directional/north,
diff --git a/_maps/map_files/tramstation/maintenance_modules/atmoscilower_attachment_a_3.dmm b/_maps/map_files/tramstation/maintenance_modules/atmoscilower_attachment_a_3.dmm
index 45f4b361a61c8..670386ca82910 100644
--- a/_maps/map_files/tramstation/maintenance_modules/atmoscilower_attachment_a_3.dmm
+++ b/_maps/map_files/tramstation/maintenance_modules/atmoscilower_attachment_a_3.dmm
@@ -177,7 +177,7 @@
"Q" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/oil,
-/obj/item/stock_parts/cell/empty,
+/obj/item/stock_parts/power_store/cell/empty,
/obj/item/screwdriver{
pixel_y = -10;
pixel_x = 7
diff --git a/_maps/map_files/tramstation/maintenance_modules/cargoscilower_3.dmm b/_maps/map_files/tramstation/maintenance_modules/cargoscilower_3.dmm
index 12b320b284492..53d727123ce66 100644
--- a/_maps/map_files/tramstation/maintenance_modules/cargoscilower_3.dmm
+++ b/_maps/map_files/tramstation/maintenance_modules/cargoscilower_3.dmm
@@ -179,7 +179,7 @@
dir = 8
},
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high/empty,
+/obj/item/stock_parts/power_store/cell/high/empty,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/maintenance/starboard/central)
diff --git a/_maps/map_files/tramstation/maintenance_modules/cargoscilower_attachment_a_3.dmm b/_maps/map_files/tramstation/maintenance_modules/cargoscilower_attachment_a_3.dmm
index c37683fdf40c9..b11609c9d357c 100644
--- a/_maps/map_files/tramstation/maintenance_modules/cargoscilower_attachment_a_3.dmm
+++ b/_maps/map_files/tramstation/maintenance_modules/cargoscilower_attachment_a_3.dmm
@@ -21,7 +21,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high/empty,
+/obj/item/stock_parts/power_store/cell/high/empty,
/turf/open/floor/iron/smooth,
/area/station/maintenance/starboard/central)
"n" = (
@@ -86,14 +86,14 @@
"Y" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/table,
-/obj/item/stock_parts/cell/empty{
+/obj/item/stock_parts/power_store/cell/empty{
pixel_x = -5
},
-/obj/item/stock_parts/cell/empty{
+/obj/item/stock_parts/power_store/cell/empty{
pixel_x = 2;
pixel_y = 8
},
-/obj/item/stock_parts/cell/empty{
+/obj/item/stock_parts/power_store/cell/empty{
pixel_x = 7
},
/turf/open/floor/iron/smooth,
diff --git a/_maps/map_files/tramstation/maintenance_modules/dormenginelower_2.dmm b/_maps/map_files/tramstation/maintenance_modules/dormenginelower_2.dmm
index 6f30c2bb7be2e..e7c0c22ad0575 100644
--- a/_maps/map_files/tramstation/maintenance_modules/dormenginelower_2.dmm
+++ b/_maps/map_files/tramstation/maintenance_modules/dormenginelower_2.dmm
@@ -321,7 +321,7 @@
/obj/structure/closet/crate,
/obj/item/wallframe/apc,
/obj/item/electronics/apc,
-/obj/item/stock_parts/cell/empty,
+/obj/item/stock_parts/power_store/cell/empty,
/obj/item/stack/cable_coil/five,
/obj/item/wallframe/apc,
/obj/item/electronics/apc,
diff --git a/_maps/map_files/tramstation/maintenance_modules/dormenginelower_attachment_b_1.dmm b/_maps/map_files/tramstation/maintenance_modules/dormenginelower_attachment_b_1.dmm
index 0be86766e3f21..bfe095561311a 100644
--- a/_maps/map_files/tramstation/maintenance_modules/dormenginelower_attachment_b_1.dmm
+++ b/_maps/map_files/tramstation/maintenance_modules/dormenginelower_attachment_b_1.dmm
@@ -91,7 +91,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high/empty,
+/obj/item/stock_parts/power_store/cell/high/empty,
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 4
},
diff --git a/_maps/map_files/tramstation/maintenance_modules/medsciupper_attachment_a_1.dmm b/_maps/map_files/tramstation/maintenance_modules/medsciupper_attachment_a_1.dmm
index 32d140f88c93a..f58d6cd2a20e0 100644
--- a/_maps/map_files/tramstation/maintenance_modules/medsciupper_attachment_a_1.dmm
+++ b/_maps/map_files/tramstation/maintenance_modules/medsciupper_attachment_a_1.dmm
@@ -122,7 +122,7 @@
},
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high/empty,
+/obj/item/stock_parts/power_store/cell/high/empty,
/turf/open/floor/iron,
/area/station/maintenance/department/science)
"V" = (
diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm
index b0c8d17c83315..c7686749c5031 100644
--- a/_maps/map_files/tramstation/tramstation.dmm
+++ b/_maps/map_files/tramstation/tramstation.dmm
@@ -1962,7 +1962,7 @@
/area/station/commons/vacant_room)
"agG" = (
/obj/structure/dresser,
-/obj/item/clothing/mask/cigarette/cigar/havana,
+/obj/item/cigarette/cigar/havana,
/turf/open/floor/iron/grimy,
/area/station/commons/vacant_room)
"agH" = (
@@ -3171,20 +3171,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/engineering/atmospherics_engine)
-"arT" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 10
- },
-/obj/structure/closet/radiation,
-/obj/effect/turf_decal/bot{
- dir = 1
- },
-/obj/machinery/computer/security/telescreen/engine{
- dir = 1;
- pixel_y = -32
- },
-/turf/open/floor/iron,
-/area/station/engineering/main)
"arV" = (
/obj/effect/turf_decal/trimline/yellow/filled/line,
/obj/effect/turf_decal/box,
@@ -3277,6 +3263,17 @@
},
/turf/open/floor/iron,
/area/station/security/office)
+"asI" = (
+/obj/structure/table,
+/obj/machinery/requests_console/directional/east{
+ name = "EVA Requests Console";
+ department = "EVA"
+ },
+/obj/effect/mapping_helpers/requests_console/assistance,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/iron,
+/area/station/ai_monitored/command/storage/eva)
"asQ" = (
/obj/structure/sign/warning/no_smoking,
/turf/closed/wall,
@@ -3736,23 +3733,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/hallway/secondary/service)
-"axh" = (
-/obj/structure/rack,
-/obj/item/clothing/glasses/meson{
- pixel_y = 4
- },
-/obj/item/lighter,
-/obj/item/reagent_containers/pill/patch/aiuri,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 1
- },
-/obj/structure/window/reinforced/spawner/directional/west,
-/obj/item/computer_disk/engineering,
-/obj/item/computer_disk/engineering,
-/obj/item/computer_disk/engineering,
-/turf/open/floor/iron,
-/area/station/command/heads_quarters/ce)
"axp" = (
/obj/effect/turf_decal/trimline/red/filled/line{
dir = 8
@@ -4117,16 +4097,6 @@
"aBY" = (
/turf/open/floor/iron,
/area/station/hallway/secondary/command)
-"aBZ" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 1;
- pixel_y = -29
- },
-/turf/open/floor/carpet,
-/area/station/command/heads_quarters/captain)
"aCa" = (
/obj/machinery/power/apc/auto_name/directional/west,
/obj/structure/cable,
@@ -4200,11 +4170,6 @@
},
/turf/open/floor/iron,
/area/station/command/bridge)
-"aCE" = (
-/obj/structure/filingcabinet,
-/obj/machinery/firealarm/directional/north,
-/turf/open/floor/iron/grimy,
-/area/station/security/detectives_office)
"aCJ" = (
/obj/effect/turf_decal/loading_area,
/obj/effect/turf_decal/trimline/brown/filled/corner{
@@ -6825,21 +6790,6 @@
/obj/effect/turf_decal/tile/blue,
/turf/open/floor/iron/dark,
/area/station/command/bridge)
-"bpa" = (
-/obj/structure/table/reinforced,
-/obj/item/stock_parts/cell/high{
- pixel_x = -5;
- pixel_y = 8
- },
-/obj/item/stock_parts/cell/high{
- pixel_x = 7;
- pixel_y = 8
- },
-/obj/item/stock_parts/cell/high,
-/obj/machinery/cell_charger,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/science/robotics/lab)
"bpl" = (
/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/trimline/yellow/filled/line{
@@ -7732,6 +7682,16 @@
"bGJ" = (
/turf/open/floor/wood,
/area/station/service/theater)
+"bGP" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/computer/security/telescreen/ordnance/directional/south,
+/turf/open/floor/iron,
+/area/station/science/ordnance/testlab)
"bGV" = (
/obj/effect/turf_decal/trimline/green/filled/line{
dir = 5
@@ -8499,6 +8459,16 @@
/obj/effect/turf_decal/siding/thinplating,
/turf/open/floor/iron,
/area/station/cargo/storage)
+"bTI" = (
+/obj/effect/turf_decal/trimline/red/filled/line{
+ dir = 6
+ },
+/obj/machinery/computer/security/telescreen/prison/directional/east,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/turf/open/floor/iron,
+/area/station/security/office)
"bTN" = (
/obj/effect/turf_decal/trimline/neutral/filled/corner,
/obj/structure/disposalpipe/segment{
@@ -9220,6 +9190,16 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/science/robotics/lab)
+"cdM" = (
+/obj/structure/table,
+/obj/machinery/cell_charger{
+ pixel_y = 5
+ },
+/obj/item/stack/cable_coil,
+/obj/item/multitool,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/engine,
+/area/station/science/xenobiology)
"cdN" = (
/obj/machinery/button/ignition/incinerator/atmos,
/turf/closed/wall/r_wall,
@@ -9765,6 +9745,13 @@
},
/turf/open/floor/wood,
/area/station/service/library)
+"coV" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/trimline/neutral/filled/line,
+/turf/open/floor/iron,
+/area/station/commons/storage/primary)
"cpl" = (
/obj/effect/turf_decal/trimline/blue/filled/line,
/turf/open/floor/iron/white,
@@ -10748,15 +10735,15 @@
pixel_x = -2;
pixel_y = 3
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = -4;
pixel_y = 1
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 4;
pixel_y = 1
},
-/obj/item/clothing/mask/cigarette/cigar/cohiba,
+/obj/item/cigarette/cigar/cohiba,
/turf/open/floor/wood,
/area/station/command/meeting_room)
"cFP" = (
@@ -15035,6 +15022,21 @@
/obj/effect/turf_decal/stripes/white/line,
/turf/open/floor/plating,
/area/station/maintenance/tram/left)
+"egx" = (
+/obj/structure/table/reinforced,
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = -5;
+ pixel_y = 8
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = 7;
+ pixel_y = 8
+ },
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/cell_charger,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/science/robotics/lab)
"egD" = (
/obj/machinery/door/airlock/highsecurity{
name = "Prison Maintenance Access";
@@ -15110,6 +15112,11 @@
/obj/machinery/status_display/ai/directional/south,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/aisat_interior)
+"eiy" = (
+/obj/structure/table/reinforced,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible,
+/turf/open/floor/iron/dark,
+/area/station/science/xenobiology)
"eiR" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -15812,13 +15819,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
-"exq" = (
-/obj/structure/table,
-/obj/structure/extinguisher_cabinet/directional/north,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/iron,
-/area/station/ai_monitored/command/storage/eva)
"exr" = (
/obj/machinery/computer/mech_bay_power_console,
/obj/effect/turf_decal/siding/thinplating/corner{
@@ -15947,6 +15947,13 @@
/obj/structure/cable,
/turf/open/floor/iron/freezer,
/area/station/medical/coldroom)
+"eyh" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/machinery/computer/security/telescreen/minisat/directional/south,
+/turf/open/floor/carpet,
+/area/station/command/heads_quarters/captain)
"eyy" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 4
@@ -19588,20 +19595,6 @@
/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron,
/area/station/cargo/office)
-"fSY" = (
-/obj/structure/table/reinforced,
-/obj/machinery/computer/security/telescreen{
- name = "Cargo Camera Monitor";
- dir = 4;
- network = list("ss13","cargo")
- },
-/obj/item/radio/intercom/directional/west,
-/obj/effect/turf_decal/trimline/red/filled/line{
- dir = 9
- },
-/obj/machinery/firealarm/directional/north,
-/turf/open/floor/iron,
-/area/station/security/checkpoint/supply)
"fSZ" = (
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
/turf/open/floor/iron,
@@ -19631,17 +19624,6 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/station/commons/vacant_room)
-"fTM" = (
-/obj/structure/table,
-/obj/machinery/requests_console/directional/east{
- name = "EVA Requests Console";
- department = "EVA"
- },
-/obj/effect/mapping_helpers/requests_console/assistance,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/iron,
-/area/station/ai_monitored/command/storage/eva)
"fUh" = (
/obj/structure/chair,
/obj/structure/sign/poster/official/random/directional/north,
@@ -19889,6 +19871,16 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/security/checkpoint/engineering)
+"fXX" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/engineering/main)
"fXY" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -22286,22 +22278,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/hallway/secondary/service)
-"gRO" = (
-/obj/effect/turf_decal/trimline/red/filled/line{
- dir = 6
- },
-/obj/machinery/computer/security/telescreen{
- name = "Prison Monitor";
- desc = "Used for watching Prison Wing holding areas.";
- dir = 8;
- pixel_x = 30;
- network = list("prison")
- },
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/turf/open/floor/iron,
-/area/station/security/office)
"gRQ" = (
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 8
@@ -23151,6 +23127,7 @@
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/item/circuitboard/machine/crystallizer,
/turf/open/floor/iron/dark,
/area/station/engineering/atmospherics_engine)
"hiZ" = (
@@ -23222,6 +23199,18 @@
},
/turf/open/floor/iron/white,
/area/station/science/xenobiology)
+"hks" = (
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/potato{
+ pixel_x = 6;
+ pixel_y = 10
+ },
+/turf/open/floor/iron/white,
+/area/station/science/lobby)
"hkt" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/trimline/yellow/corner{
@@ -23545,24 +23534,6 @@
/obj/machinery/computer/security/telescreen/entertainment/directional/east,
/turf/open/floor/wood/large,
/area/station/service/barber)
-"hqx" = (
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 8
- },
-/obj/machinery/computer/security/telescreen{
- name = "AI Upload Monitor";
- desc = "Used for watching the ai_upload.";
- dir = 4;
- pixel_x = -28;
- network = list("aiupload")
- },
-/obj/item/kirbyplants/photosynthetic,
-/obj/machinery/camera/directional/west{
- network = list("ss13","rd");
- c_tag = "Science - AI Access Hallway"
- },
-/turf/open/floor/iron/dark,
-/area/station/science/lower)
"hqN" = (
/obj/structure/weightmachine/weightlifter,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -24002,18 +23973,6 @@
},
/turf/open/floor/iron,
/area/station/commons/fitness)
-"hBY" = (
-/obj/machinery/computer/security/telescreen{
- name = "turbine vent monitor";
- desc = "Used for watching the turbine vent.";
- dir = 8;
- pixel_x = 29;
- network = list("turbine")
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/station/maintenance/disposal/incinerator)
"hCp" = (
/obj/structure/chair/stool/bar/directional/north,
/obj/effect/turf_decal/siding/thinplating/dark{
@@ -24074,6 +24033,19 @@
/obj/structure/cable/layer1,
/turf/open/floor/plating/airless,
/area/station/solars/starboard/fore)
+"hDF" = (
+/obj/machinery/computer/apc_control{
+ dir = 1
+ },
+/obj/machinery/requests_console/directional/south{
+ name = "Chief Engineer's Request Console";
+ department = "Chief Engineer's Desk"
+ },
+/obj/effect/mapping_helpers/requests_console/announcement,
+/obj/effect/mapping_helpers/requests_console/supplies,
+/obj/machinery/computer/security/telescreen/engine/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/command/heads_quarters/ce)
"hDI" = (
/turf/closed/wall/r_wall,
/area/station/engineering/supermatter)
@@ -24222,6 +24194,18 @@
},
/turf/open/floor/iron,
/area/station/cargo/storage)
+"hGd" = (
+/obj/effect/turf_decal/trimline/purple/filled/line{
+ dir = 8
+ },
+/obj/machinery/computer/security/telescreen/aiupload/directional/west,
+/obj/item/kirbyplants/photosynthetic,
+/obj/machinery/camera/directional/west{
+ network = list("ss13","rd");
+ c_tag = "Science - AI Access Hallway"
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/lower)
"hGt" = (
/obj/structure/table,
/obj/item/stack/sheet/glass/fifty,
@@ -24518,17 +24502,6 @@
},
/turf/open/floor/iron/dark,
/area/station/ai_monitored/command/nuke_storage)
-"hMU" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/trimline/neutral/filled/line{
- dir = 4
- },
-/obj/effect/turf_decal/bot,
-/obj/structure/closet/crate/preopen,
-/obj/item/stock_parts/cell/empty,
-/obj/effect/spawner/random/engineering/flashlight,
-/turf/open/floor/iron,
-/area/station/cargo/warehouse)
"hNe" = (
/obj/effect/turf_decal/trimline/neutral/filled/line{
dir = 4
@@ -25648,16 +25621,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/station/service/hydroponics)
-"iih" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/storage/toolbox/electrical{
- pixel_x = 4;
- pixel_y = 9
- },
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/iron/dark,
-/area/station/science/explab)
"iij" = (
/obj/machinery/door/airlock/command{
name = "Research Director's Office"
@@ -26018,29 +25981,6 @@
/obj/machinery/transport/crossing_signal/northwest,
/turf/open/floor/iron,
/area/station/hallway/primary/tram/right)
-"ipP" = (
-/obj/structure/table,
-/obj/item/multitool/circuit{
- pixel_x = -8
- },
-/obj/item/multitool/circuit{
- pixel_x = -4
- },
-/obj/item/multitool/circuit,
-/obj/item/stock_parts/cell/high{
- pixel_x = 8;
- pixel_y = 9
- },
-/obj/item/stock_parts/cell/high{
- pixel_x = 8;
- pixel_y = -2
- },
-/obj/machinery/camera/directional/south{
- network = list("ss13","rd");
- c_tag = "Science - Testing Lab"
- },
-/turf/open/floor/iron,
-/area/station/science/explab)
"iqg" = (
/obj/machinery/airalarm/directional/west,
/turf/open/floor/iron/freezer,
@@ -26199,6 +26139,14 @@
},
/turf/open/floor/iron/stairs/medium,
/area/station/commons/dorms)
+"itq" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating/corner,
+/obj/machinery/computer/security/telescreen/test_chamber/directional/north,
+/turf/open/floor/iron/dark,
+/area/station/science/xenobiology)
"itE" = (
/obj/modular_map_root/tramstation{
name = "atmoscilower";
@@ -26580,6 +26528,13 @@
},
/turf/open/floor/plating,
/area/station/hallway/secondary/exit)
+"iAr" = (
+/obj/effect/turf_decal/bot,
+/obj/effect/spawner/random/structure/closet_empty/crate,
+/obj/effect/spawner/random/maintenance/two,
+/obj/item/stock_parts/power_store/cell/high/empty,
+/turf/open/floor/iron,
+/area/station/cargo/storage)
"iAt" = (
/obj/structure/lattice/catwalk,
/turf/open/openspace/airless,
@@ -27587,19 +27542,6 @@
/obj/item/kirbyplants/photosynthetic,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/aisat_interior)
-"iTL" = (
-/obj/structure/closet/crate,
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/stack/rods/fifty,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/electronics/airlock,
-/obj/item/electronics/airlock,
-/obj/item/stock_parts/cell/high,
-/obj/item/stack/sheet/mineral/plasma{
- amount = 30
- },
-/turf/open/floor/plating,
-/area/station/engineering/engine_smes)
"iTQ" = (
/obj/effect/turf_decal/trimline/neutral/filled/line{
dir = 8
@@ -27845,20 +27787,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/tram/right)
-"iYa" = (
-/obj/structure/railing/corner{
- dir = 4
- },
-/obj/effect/turf_decal/trimline/red/filled/line,
-/obj/effect/turf_decal/trimline/red/corner{
- dir = 4
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 4
- },
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/iron,
-/area/station/security/checkpoint/supply)
"iYd" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/disposalpipe/segment{
@@ -28696,10 +28624,9 @@
/area/station/cargo/storage)
"jlQ" = (
/obj/structure/rack,
-/obj/item/gun/energy/e_gun/dragnet,
-/obj/item/gun/energy/e_gun/dragnet,
/obj/item/radio/intercom/directional/north,
/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/effect/spawner/random/armory/dragnet,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/security/armory)
"jlX" = (
@@ -29315,6 +29242,21 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white,
/area/station/medical/virology)
+"jvW" = (
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/red/filled/line,
+/obj/effect/turf_decal/trimline/red/corner{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 4
+ },
+/obj/machinery/light/small/directional/south,
+/obj/item/radio/intercom/directional/south,
+/turf/open/floor/iron,
+/area/station/security/checkpoint/supply)
"jwa" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
dir = 8
@@ -29714,18 +29656,6 @@
/obj/machinery/power/apc/auto_name/directional/north,
/turf/open/floor/iron,
/area/station/maintenance/tram/mid)
-"jCw" = (
-/obj/effect/turf_decal/trimline/purple/filled/line{
- dir = 1
- },
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/potato{
- pixel_x = 6;
- pixel_y = 10
- },
-/turf/open/floor/iron/white,
-/area/station/science/lobby)
"jCH" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/obj/effect/turf_decal/tile/bar/opposingcorners,
@@ -31826,19 +31756,6 @@
},
/turf/open/floor/iron/dark,
/area/station/engineering/storage/tech)
-"klY" = (
-/obj/structure/table,
-/obj/item/stack/cable_coil{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/stack/cable_coil,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/trimline/white/filled/corner{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/station/engineering/storage/tech)
"kmb" = (
/obj/machinery/door/airlock/engineering/glass{
name = "Tram Mechanical Room"
@@ -32556,6 +32473,15 @@
/obj/structure/cable,
/turf/open/floor/iron/showroomfloor,
/area/station/security/lockers)
+"kzq" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/trimline/red/filled/line{
+ dir = 9
+ },
+/obj/machinery/firealarm/directional/north,
+/obj/machinery/computer/security/telescreen/cargo_sec/directional/west,
+/turf/open/floor/iron,
+/area/station/security/checkpoint/supply)
"kzw" = (
/obj/effect/spawner/random/vending/snackvend,
/obj/effect/turf_decal/stripes/line{
@@ -33588,6 +33514,13 @@
},
/turf/open/floor/iron/white,
/area/station/science/xenobiology)
+"kQP" = (
+/obj/structure/table,
+/obj/structure/extinguisher_cabinet/directional/north,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/iron,
+/area/station/ai_monitored/command/storage/eva)
"kQR" = (
/obj/structure/flora/bush/lavendergrass/style_random,
/obj/item/food/grown/banana/bunch{
@@ -34082,28 +34015,6 @@
},
/turf/open/floor/catwalk_floor,
/area/station/hallway/primary/tram/right)
-"kYl" = (
-/obj/structure/rack,
-/obj/structure/table,
-/obj/machinery/computer/security/telescreen{
- name = "Test Chamber Monitor";
- pixel_y = 28;
- network = list("test")
- },
-/obj/item/storage/box/beakers{
- pixel_x = 5;
- pixel_y = 3
- },
-/obj/item/grenade/chem_grenade{
- pixel_x = -7;
- pixel_y = 7
- },
-/obj/item/grenade/chem_grenade{
- pixel_x = -7;
- pixel_y = 1
- },
-/turf/open/floor/iron/dark,
-/area/station/science/explab)
"kYL" = (
/obj/effect/spawner/random/structure/closet_private,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -35440,6 +35351,16 @@
},
/turf/open/floor/engine/plasma,
/area/station/engineering/atmos)
+"lxd" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/obj/machinery/computer/security/telescreen/aiupload,
+/turf/open/floor/iron/white,
+/area/station/science/xenobiology)
"lxi" = (
/obj/structure/window/reinforced/spawner/directional/north,
/obj/structure/cable,
@@ -36067,6 +35988,11 @@
/obj/machinery/newscaster/directional/east,
/turf/open/floor/iron,
/area/station/commons/dorms)
+"lHJ" = (
+/obj/machinery/pdapainter/research,
+/obj/machinery/computer/security/telescreen/rd/directional/south,
+/turf/open/floor/iron/cafeteria,
+/area/station/command/heads_quarters/rd)
"lHU" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -37680,6 +37606,16 @@
/obj/effect/mapping_helpers/airlock/locked,
/turf/open/floor/plating,
/area/station/hallway/primary/tram/center)
+"mhJ" = (
+/obj/effect/turf_decal/trimline/brown/filled/corner{
+ dir = 1
+ },
+/obj/machinery/computer/security/telescreen/vault/directional/north,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/command/heads_quarters/qm)
"min" = (
/obj/effect/turf_decal/trimline/green/filled/line{
dir = 4
@@ -37727,6 +37663,12 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/carpet,
/area/station/command/heads_quarters/captain)
+"mjl" = (
+/obj/machinery/computer/security/telescreen/turbine/directional/east,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/maintenance/disposal/incinerator)
"mjp" = (
/obj/structure/transport/linear/tram/corner/southeast,
/obj/structure/tram/spoiler{
@@ -38435,13 +38377,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron,
/area/station/science/explab)
-"myN" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/trimline/neutral/filled/line,
-/turf/open/floor/iron,
-/area/station/commons/storage/primary)
"mzb" = (
/obj/effect/turf_decal/siding/thinplating/dark{
dir = 5
@@ -38466,6 +38401,23 @@
/obj/machinery/light/dim/directional/east,
/turf/open/floor/iron,
/area/station/maintenance/port/central)
+"mzi" = (
+/obj/structure/rack,
+/obj/item/clothing/glasses/meson{
+ pixel_y = 4
+ },
+/obj/item/lighter,
+/obj/item/reagent_containers/pill/patch/aiuri,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 1
+ },
+/obj/structure/window/reinforced/spawner/directional/west,
+/obj/item/computer_disk/engineering,
+/obj/item/computer_disk/engineering,
+/obj/item/computer_disk/engineering,
+/turf/open/floor/iron,
+/area/station/command/heads_quarters/ce)
"mzs" = (
/obj/effect/turf_decal/trimline/neutral/filled/line{
dir = 8
@@ -38839,6 +38791,10 @@
"mGw" = (
/turf/closed/wall,
/area/station/service/barber)
+"mGB" = (
+/obj/structure/filingcabinet,
+/turf/open/floor/iron/grimy,
+/area/station/security/detectives_office)
"mGN" = (
/obj/effect/turf_decal/siding/thinplating/end,
/obj/machinery/button/door{
@@ -41106,14 +41062,6 @@
/obj/effect/turf_decal/sand/plating,
/turf/open/misc/asteroid,
/area/station/medical/chemistry)
-"nwE" = (
-/obj/machinery/pdapainter/research,
-/obj/machinery/computer/security/telescreen/rd{
- dir = 1;
- pixel_y = -32
- },
-/turf/open/floor/iron/cafeteria,
-/area/station/command/heads_quarters/rd)
"nwI" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
@@ -41980,20 +41928,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/smooth,
/area/station/maintenance/central/greater)
-"nMw" = (
-/obj/structure/window/reinforced/spawner/directional/north,
-/obj/structure/chair/office/light{
- dir = 4
- },
-/obj/machinery/computer/security/telescreen/ordnance{
- dir = 8;
- pixel_x = 30
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance/testlab)
"nMB" = (
/turf/open/floor/iron,
/area/station/science/ordnance/testlab)
@@ -42482,18 +42416,6 @@
/obj/machinery/atmospherics/pipe/smart/simple/green/visible,
/turf/open/floor/plating,
/area/station/engineering/atmos/pumproom)
-"nVd" = (
-/obj/machinery/power/apc/auto_name/directional/west,
-/obj/effect/turf_decal/trimline/red/filled/line{
- dir = 10
- },
-/obj/structure/cable,
-/obj/machinery/light_switch/directional/south{
- pixel_x = 10;
- pixel_y = -24
- },
-/turf/open/floor/iron,
-/area/station/security/checkpoint/supply)
"nVg" = (
/obj/machinery/door/airlock/hatch{
name = "Radstorm Shelter"
@@ -44811,6 +44733,25 @@
/obj/machinery/light/warm/directional/south,
/turf/open/floor/wood,
/area/station/service/theater)
+"oSi" = (
+/obj/structure/table,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/storage/box/lights/mixed,
+/obj/item/stack/cable_coil,
+/obj/item/stock_parts/power_store/cell/emproof,
+/obj/item/stock_parts/power_store/cell/emproof,
+/obj/machinery/camera/emp_proof{
+ dir = 10;
+ network = list("ss13","engineering");
+ c_tag = "Engineering - SMES Misc"
+ },
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/engineering/engine_smes)
"oSl" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -44836,23 +44777,6 @@
},
/turf/open/floor/iron,
/area/station/security/office)
-"oSB" = (
-/obj/machinery/camera/directional/west{
- network = list("ss13","Security","cargo");
- c_tag = "Cargo - Security Outpost"
- },
-/obj/effect/turf_decal/trimline/red/filled/line{
- dir = 8
- },
-/obj/machinery/button/door/directional/west{
- name = "Cargo Cell Control";
- id = "crgdoor";
- req_access = list("brig_entrance");
- normaldoorcontrol = 1
- },
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/station/security/checkpoint/supply)
"oTa" = (
/obj/structure/railing{
dir = 9
@@ -45424,6 +45348,13 @@
},
/turf/open/floor/iron/dark,
/area/station/command/bridge)
+"pdX" = (
+/obj/machinery/computer/security/telescreen/cmo/directional/north,
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/station/command/heads_quarters/cmo)
"pdZ" = (
/obj/machinery/door/airlock/research/glass{
name = "Robotics Lab"
@@ -46698,6 +46629,19 @@
/obj/effect/turf_decal/tile/bar/opposingcorners,
/turf/open/floor/iron,
/area/station/cargo/miningdock/cafeteria)
+"pzq" = (
+/obj/structure/table,
+/obj/item/stack/cable_coil{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/stack/cable_coil,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/trimline/white/filled/corner{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/station/engineering/storage/tech)
"pzv" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 8
@@ -47627,6 +47571,16 @@
dir = 10
},
/area/station/service/chapel)
+"pPk" = (
+/obj/structure/window/reinforced/spawner/directional/north,
+/obj/structure/chair/office/light{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance/testlab)
"pPn" = (
/obj/effect/turf_decal/trimline/purple/filled/corner{
dir = 8
@@ -47674,6 +47628,29 @@
"pQx" = (
/turf/open/misc/asteroid/dug,
/area/station/science/explab)
+"pQy" = (
+/obj/structure/table,
+/obj/item/multitool/circuit{
+ pixel_x = -8
+ },
+/obj/item/multitool/circuit{
+ pixel_x = -4
+ },
+/obj/item/multitool/circuit,
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = 8;
+ pixel_y = 9
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = 8;
+ pixel_y = -2
+ },
+/obj/machinery/camera/directional/south{
+ network = list("ss13","rd");
+ c_tag = "Science - Testing Lab"
+ },
+/turf/open/floor/iron,
+/area/station/science/explab)
"pQF" = (
/obj/structure/table,
/obj/machinery/reagentgrinder,
@@ -47681,6 +47658,18 @@
/obj/effect/turf_decal/tile/green/fourcorners,
/turf/open/floor/iron/dark,
/area/station/service/hydroponics)
+"pQL" = (
+/obj/machinery/camera{
+ dir = 9;
+ network = list("ss13","Security");
+ c_tag = "Security - Detective's Office"
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/machinery/light/warm/directional/north,
+/obj/machinery/firealarm/directional/north,
+/turf/open/floor/iron/grimy,
+/area/station/security/detectives_office)
"pQO" = (
/obj/machinery/atmospherics/components/binary/pump/on{
name = "Gas to Cooling Loop";
@@ -47770,13 +47759,6 @@
},
/turf/open/floor/tram,
/area/station/hallway/primary/tram/right)
-"pTP" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/effect/turf_decal/siding/thinplating/corner,
-/turf/open/floor/iron/dark,
-/area/station/science/xenobiology)
"pTW" = (
/obj/effect/turf_decal/trimline/neutral/filled/line{
dir = 4
@@ -48071,22 +48053,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/tram/right)
-"pYU" = (
-/obj/machinery/computer/apc_control{
- dir = 1
- },
-/obj/machinery/requests_console/directional/south{
- name = "Chief Engineer's Request Console";
- department = "Chief Engineer's Desk"
- },
-/obj/effect/mapping_helpers/requests_console/announcement,
-/obj/effect/mapping_helpers/requests_console/supplies,
-/obj/machinery/computer/security/telescreen/engine{
- dir = 4;
- pixel_x = -24
- },
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/ce)
"pYZ" = (
/obj/effect/turf_decal/stripes/corner{
dir = 1
@@ -48190,6 +48156,24 @@
"qas" = (
/turf/closed/wall/rust,
/area/station/hallway/primary/tram/center)
+"qaH" = (
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/effect/turf_decal/trimline/red/filled/line{
+ dir = 10
+ },
+/obj/structure/cable,
+/obj/machinery/light_switch/directional/south{
+ pixel_x = 10;
+ pixel_y = -24
+ },
+/obj/machinery/button/door/directional/south{
+ id = "crgdoor";
+ req_access = list("brig_entrance");
+ name = "Cargo Cell Control";
+ normaldoorcontrol = 1
+ },
+/turf/open/floor/iron,
+/area/station/security/checkpoint/supply)
"qaM" = (
/obj/machinery/holopad,
/obj/effect/turf_decal/bot,
@@ -48544,14 +48528,6 @@
"qgt" = (
/turf/closed/wall/rock/porous,
/area/station/medical/chemistry)
-"qgy" = (
-/obj/structure/table/reinforced,
-/obj/machinery/cell_charger{
- pixel_y = 4
- },
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/iron,
-/area/station/command/bridge)
"qgB" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -48862,6 +48838,17 @@
},
/turf/open/floor/iron/white,
/area/station/science/xenobiology)
+"qlK" = (
+/obj/machinery/camera/directional/west{
+ network = list("ss13","Security","cargo");
+ c_tag = "Cargo - Security Outpost"
+ },
+/obj/effect/turf_decal/trimline/red/filled/line{
+ dir = 8
+ },
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/security/checkpoint/supply)
"qmc" = (
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 5
@@ -49035,6 +49022,14 @@
/obj/effect/landmark/start/prisoner,
/turf/open/floor/iron,
/area/station/security/prison)
+"qpr" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger{
+ pixel_y = 4
+ },
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/iron,
+/area/station/command/bridge)
"qpu" = (
/obj/effect/turf_decal/trimline/red/filled/corner{
dir = 8
@@ -49189,13 +49184,6 @@
/obj/structure/sign/poster/official/safety_report/directional/south,
/turf/open/floor/iron,
/area/station/security/checkpoint/science)
-"qsI" = (
-/obj/structure/table/wood,
-/obj/structure/sign/flag/nanotrasen/directional/north,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/crap,
-/turf/open/floor/wood,
-/area/station/command/meeting_room)
"qsJ" = (
/obj/structure/window/reinforced/spawner/directional/north,
/obj/structure/table,
@@ -49386,6 +49374,13 @@
},
/obj/structure/cable,
/obj/structure/table,
+/obj/item/multitool{
+ pixel_x = 8
+ },
+/obj/item/flatpack{
+ board = /obj/item/circuitboard/machine/flatpacker;
+ pixel_x = -5
+ },
/turf/open/floor/iron,
/area/station/engineering/break_room)
"qwq" = (
@@ -50204,6 +50199,18 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/server)
+"qKW" = (
+/obj/structure/table/reinforced,
+/obj/machinery/keycard_auth/directional/south,
+/obj/item/rcl/pre_loaded,
+/obj/machinery/computer/security/telescreen/ce/directional/west,
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 1
+ },
+/obj/item/clipboard,
+/obj/item/paper/monitorkey,
+/turf/open/floor/iron/dark,
+/area/station/command/heads_quarters/ce)
"qLD" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -50441,6 +50448,17 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/commons/dorms)
+"qPQ" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 10
+ },
+/obj/structure/closet/radiation,
+/obj/effect/turf_decal/bot{
+ dir = 1
+ },
+/obj/machinery/computer/security/telescreen/engine/directional/south,
+/turf/open/floor/iron,
+/area/station/engineering/main)
"qPV" = (
/obj/machinery/power/apc/auto_name/directional/south,
/obj/structure/cable,
@@ -50883,15 +50901,6 @@
},
/turf/open/floor/iron,
/area/station/maintenance/tram/mid)
-"qXs" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/station/science/xenobiology)
"qXv" = (
/obj/effect/turf_decal/trimline/neutral/filled/line,
/obj/machinery/light/directional/south,
@@ -50902,27 +50911,6 @@
/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible,
/turf/open/floor/iron,
/area/station/engineering/atmos)
-"qXK" = (
-/obj/structure/table,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/stock_parts/cell/crap/empty{
- pixel_x = 6;
- pixel_y = 10
- },
-/obj/item/stock_parts/cell/crap/empty{
- pixel_x = 6;
- pixel_y = 2
- },
-/obj/item/stock_parts/cell/crap/empty{
- pixel_x = -7;
- pixel_y = 7
- },
-/obj/item/stock_parts/cell/crap/empty{
- pixel_x = -2;
- pixel_y = -2
- },
-/turf/open/floor/iron/smooth,
-/area/station/security/mechbay)
"qXS" = (
/obj/structure/disposalpipe/segment{
dir = 5
@@ -52402,15 +52390,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/medical/storage)
-"ryI" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 8
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/science/ordnance/testlab)
"ryJ" = (
/obj/effect/turf_decal/trimline/yellow/filled/corner{
dir = 1
@@ -52510,16 +52489,6 @@
/obj/machinery/disposal/bin,
/turf/open/floor/iron,
/area/station/command/bridge)
-"rAB" = (
-/obj/structure/table,
-/obj/machinery/cell_charger{
- pixel_y = 5
- },
-/obj/item/stack/cable_coil,
-/obj/item/multitool,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/engine,
-/area/station/science/xenobiology)
"rAS" = (
/turf/closed/wall,
/area/station/service/library/lounge)
@@ -52928,6 +52897,16 @@
/obj/structure/sign/clock/directional/north,
/turf/open/floor/iron,
/area/station/security/prison)
+"rKD" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/storage/toolbox/electrical{
+ pixel_x = 4;
+ pixel_y = 9
+ },
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/iron/dark,
+/area/station/science/explab)
"rKL" = (
/obj/machinery/newscaster/directional/east,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -53979,15 +53958,6 @@
},
/turf/open/floor/iron,
/area/station/maintenance/port/central)
-"scn" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/trimline/white/filled/line{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/station/engineering/storage/tech)
"sct" = (
/obj/structure/table/reinforced,
/obj/structure/window/spawner/directional/north,
@@ -54969,6 +54939,13 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
+"stg" = (
+/obj/structure/table/wood,
+/obj/structure/sign/flag/nanotrasen/directional/north,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/crap,
+/turf/open/floor/wood,
+/area/station/command/meeting_room)
"stk" = (
/turf/open/floor/iron/smooth,
/area/station/maintenance/department/science)
@@ -56810,16 +56787,6 @@
"tby" = (
/turf/open/floor/iron/white,
/area/station/science/research)
-"tbC" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 8
- },
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/iron,
-/area/station/engineering/main)
"tbK" = (
/obj/structure/table,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -57069,15 +57036,6 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron,
/area/station/commons/dorms)
-"tgw" = (
-/obj/machinery/computer/security/telescreen/cmo{
- pixel_y = 32
- },
-/obj/effect/turf_decal/trimline/blue/filled/line{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/cmo)
"tgB" = (
/obj/structure/toilet{
pixel_y = 13
@@ -57837,6 +57795,17 @@
},
/turf/open/floor/iron,
/area/station/cargo/miningdock)
+"ttS" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/bot,
+/obj/structure/closet/crate/preopen,
+/obj/item/stock_parts/power_store/cell/empty,
+/obj/effect/spawner/random/engineering/flashlight,
+/turf/open/floor/iron,
+/area/station/cargo/warehouse)
"tuf" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/structure/table,
@@ -59531,21 +59500,6 @@
},
/turf/open/floor/plating,
/area/station/maintenance/tram/right)
-"tYe" = (
-/obj/structure/table/reinforced,
-/obj/machinery/keycard_auth/directional/south,
-/obj/item/rcl/pre_loaded,
-/obj/machinery/computer/security/telescreen/ce{
- dir = 4;
- pixel_x = -24
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 1
- },
-/obj/item/clipboard,
-/obj/item/paper/monitorkey,
-/turf/open/floor/iron/dark,
-/area/station/command/heads_quarters/ce)
"tYp" = (
/turf/closed/wall/r_wall,
/area/station/command/heads_quarters/rd)
@@ -59914,6 +59868,15 @@
"ufO" = (
/turf/open/floor/iron,
/area/station/commons/fitness/recreation)
+"ugd" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/trimline/white/filled/line{
+ dir = 1
+ },
+/turf/open/floor/iron/dark,
+/area/station/engineering/storage/tech)
"ugf" = (
/obj/structure/bed{
dir = 8
@@ -61532,25 +61495,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/carpet,
/area/station/cargo/miningdock)
-"uEx" = (
-/obj/structure/table,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/storage/box/lights/mixed,
-/obj/item/stack/cable_coil,
-/obj/item/stock_parts/cell/emproof,
-/obj/item/stock_parts/cell/emproof,
-/obj/machinery/camera/emp_proof{
- dir = 10;
- network = list("ss13","engineering");
- c_tag = "Engineering - SMES Misc"
- },
-/obj/machinery/light/small/directional/west,
-/turf/open/floor/iron/dark,
-/area/station/engineering/engine_smes)
"uEB" = (
/obj/structure/closet/secure_closet/freezer/fridge,
/obj/effect/turf_decal/bot_white,
@@ -61708,16 +61652,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/engineering/engine_smes)
-"uGJ" = (
-/obj/structure/table/reinforced,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible,
-/obj/machinery/computer/security/telescreen{
- name = "Test Chamber Monitor";
- pixel_y = 2;
- network = list("xeno")
- },
-/turf/open/floor/iron/dark,
-/area/station/science/xenobiology)
"uGL" = (
/obj/structure/bed/medical/emergency,
/obj/effect/turf_decal/bot,
@@ -65413,35 +65347,12 @@
},
/turf/open/floor/plating,
/area/station/ai_monitored/turret_protected/ai)
-"vTE" = (
-/obj/machinery/camera{
- dir = 9;
- network = list("ss13","Security");
- c_tag = "Security - Detective's Office"
- },
-/obj/structure/cable,
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
-/obj/machinery/light/warm/directional/north,
-/turf/open/floor/iron/grimy,
-/area/station/security/detectives_office)
"vTF" = (
/obj/structure/tank_dispenser{
pixel_x = -1
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
-"vTH" = (
-/obj/effect/turf_decal/trimline/brown/filled/corner{
- dir = 1
- },
-/obj/machinery/computer/security/telescreen/vault{
- pixel_y = 30
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/command/heads_quarters/qm)
"vTZ" = (
/obj/effect/turf_decal/trimline/brown/filled/corner{
dir = 8
@@ -66404,6 +66315,19 @@
},
/turf/open/floor/iron/dark,
/area/station/service/chapel/monastery)
+"wnM" = (
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/rods/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/electronics/airlock,
+/obj/item/electronics/airlock,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 30
+ },
+/turf/open/floor/plating,
+/area/station/engineering/engine_smes)
"wnP" = (
/obj/machinery/door/airlock/hatch{
name = "Emergency Exit"
@@ -66572,6 +66496,24 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/service)
+"wrz" = (
+/obj/structure/rack,
+/obj/structure/table,
+/obj/machinery/computer/security/telescreen/test_chamber/directional/north,
+/obj/item/storage/box/beakers{
+ pixel_x = 5;
+ pixel_y = 3
+ },
+/obj/item/grenade/chem_grenade{
+ pixel_x = -7;
+ pixel_y = 7
+ },
+/obj/item/grenade/chem_grenade{
+ pixel_x = -7;
+ pixel_y = 1
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/explab)
"wrJ" = (
/obj/structure/railing{
dir = 4;
@@ -67100,6 +67042,27 @@
/obj/structure/reagent_dispensers/foamtank,
/turf/open/floor/iron,
/area/station/engineering/atmos)
+"wAH" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/stock_parts/power_store/cell/crap/empty{
+ pixel_x = 6;
+ pixel_y = 10
+ },
+/obj/item/stock_parts/power_store/cell/crap/empty{
+ pixel_x = 6;
+ pixel_y = 2
+ },
+/obj/item/stock_parts/power_store/cell/crap/empty{
+ pixel_x = -7;
+ pixel_y = 7
+ },
+/obj/item/stock_parts/power_store/cell/crap/empty{
+ pixel_x = -2;
+ pixel_y = -2
+ },
+/turf/open/floor/iron/smooth,
+/area/station/security/mechbay)
"wAI" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -71401,13 +71364,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/exit)
-"yiX" = (
-/obj/effect/turf_decal/bot,
-/obj/effect/spawner/random/structure/closet_empty/crate,
-/obj/effect/spawner/random/maintenance/two,
-/obj/item/stock_parts/cell/high/empty,
-/turf/open/floor/iron,
-/area/station/cargo/storage)
"yjf" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/structure/window/reinforced/spawner/directional/north,
@@ -99246,7 +99202,7 @@ jIG
jHb
tPW
tPW
-uEx
+oSi
jIG
abM
abM
@@ -100009,7 +99965,7 @@ mOW
iwV
nav
fEK
-scn
+ugd
pkp
jYz
kSp
@@ -100525,7 +100481,7 @@ bUj
kdb
yih
pkp
-iTL
+wnM
ifX
iRe
wJt
@@ -101034,7 +100990,7 @@ abM
jnq
jIy
tsa
-klY
+pzq
hJa
kdb
msU
@@ -101570,10 +101526,10 @@ lku
oxs
sna
gRQ
-tbC
+fXX
cuQ
arO
-arT
+qPQ
qHs
asA
bWN
@@ -103111,7 +103067,7 @@ kHR
tga
rnf
xBD
-tYe
+qKW
sHH
sHH
sHH
@@ -103370,7 +103326,7 @@ pTl
ozd
eOP
wGk
-pYU
+hDF
sHH
ydk
qHs
@@ -103878,7 +103834,7 @@ dor
fSp
vKv
roB
-axh
+mzi
iHK
bAK
jsW
@@ -106135,7 +106091,7 @@ pCM
kzx
oSl
kzx
-myN
+coV
alg
aes
khE
@@ -111348,7 +111304,7 @@ pts
gEs
nXQ
rnA
-hBY
+mjl
atX
wAQ
qWU
@@ -118280,7 +118236,7 @@ qVr
qVr
kkx
cJP
-qXs
+lxd
mLE
dGs
dGs
@@ -119030,7 +118986,7 @@ cJS
nhj
cVU
oRz
-ipP
+pQy
sQZ
nhj
prI
@@ -119284,7 +119240,7 @@ owO
owO
owO
cJS
-iih
+rKD
cVU
cFW
cFW
@@ -119541,7 +119497,7 @@ sQZ
sQZ
sQZ
sQZ
-kYl
+wrz
hIY
tVK
vIF
@@ -120339,7 +120295,7 @@ lxW
iix
qQa
vtd
-hqx
+hGd
iGF
xkg
tXA
@@ -124182,7 +124138,7 @@ kNE
nMB
qAl
nMB
-ryI
+bGP
frV
wco
lwt
@@ -124694,7 +124650,7 @@ ign
olR
vvF
vjA
-nMw
+pPk
dWM
ign
ign
@@ -150848,7 +150804,7 @@ fLY
tFk
kcV
xNL
-qXK
+wAH
tFk
aaa
aaa
@@ -151116,8 +151072,8 @@ hzN
hzN
hzN
hzN
-exq
-fTM
+kQP
+asI
rcx
hzN
xQv
@@ -154712,7 +154668,7 @@ mwg
ceF
avX
qyZ
-qsI
+stg
joF
kSZ
bvq
@@ -156526,7 +156482,7 @@ aQO
rup
wzm
rAh
-qgy
+qpr
eUy
mgq
nhV
@@ -158296,7 +158252,7 @@ wbH
wbH
qPI
cQM
-gRO
+bTI
ppr
gki
cGg
@@ -158580,9 +158536,9 @@ kOr
cvf
iUw
moq
-aBZ
+eyh
xEo
-aCE
+mGB
aCS
pIl
gdF
@@ -158839,7 +158795,7 @@ aBt
crE
tEl
xEo
-vTE
+pQL
kyq
pIl
dUl
@@ -166588,7 +166544,7 @@ gnM
apC
abM
mBq
-tgw
+pdX
kHy
fxM
qUL
@@ -174534,7 +174490,7 @@ afy
age
afy
afy
-agm
+abW
aaa
abM
abM
@@ -179913,7 +179869,7 @@ abM
abM
abM
usY
-fSY
+kzq
tJR
usY
abM
@@ -180171,7 +180127,7 @@ abM
abM
usY
kiT
-iYa
+jvW
usY
usY
usY
@@ -180197,7 +180153,7 @@ ixu
eeE
muZ
gSF
-bpa
+egx
uje
dLO
dLO
@@ -180429,8 +180385,8 @@ lZW
usY
mgh
uYZ
-oSB
-nVd
+qlK
+qaH
vUE
bMb
kdz
@@ -180934,7 +180890,7 @@ uax
uax
mur
qza
-vTH
+mhJ
aAJ
riJ
aAJ
@@ -181215,7 +181171,7 @@ mEd
kuq
aHq
lfQ
-jCw
+hks
aHQ
tFB
vnu
@@ -182275,8 +182231,8 @@ bfH
bfH
qVr
pNa
-uGJ
-pTP
+eiy
+itq
qyQ
qyQ
gun
@@ -182466,7 +182422,7 @@ cdy
iWz
hFV
gDr
-yiX
+iAr
uax
axG
bTx
@@ -183292,7 +183248,7 @@ kye
tes
kye
kye
-nwE
+lHJ
pbH
mAL
nKU
@@ -183555,7 +183511,7 @@ vSa
cJR
qVr
qVr
-rAB
+cdM
qVL
tBo
qVr
@@ -185297,7 +185253,7 @@ udQ
udQ
aWL
tft
-hMU
+ttS
qyg
utY
fHV
diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm
index 3116f34a2033b..8f3fb14e377c7 100644
--- a/_maps/map_files/wawastation/wawastation.dmm
+++ b/_maps/map_files/wawastation/wawastation.dmm
@@ -9,18 +9,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/station/security/office)
-"aat" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/structure/window/reinforced/survival_pod/spawner/directional/south,
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/bot{
- dir = 1
- },
-/obj/machinery/airalarm/directional/west,
-/turf/open/floor/iron,
-/area/station/command/gateway)
"aaB" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -141,15 +129,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/command/gateway)
-"abP" = (
-/obj/effect/turf_decal/caution/stand_clear/red,
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/door/poddoor/shutters/window/preopen{
- id = "ordstorage"
- },
-/obj/structure/cable,
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
"abX" = (
/obj/machinery/door/airlock/public/glass{
name = "Library"
@@ -602,6 +581,19 @@
},
/turf/open/floor/iron/textured_large,
/area/station/medical/treatment_center)
+"ajs" = (
+/obj/machinery/door/poddoor/shutters/window{
+ id = "ordauxgarage";
+ dir = 1
+ },
+/obj/effect/turf_decal/caution/stand_clear,
+/obj/effect/turf_decal/sand/plating,
+/obj/effect/turf_decal/stripes/asteroid/line,
+/obj/effect/turf_decal/stripes/asteroid/line{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/station/science/ordnance)
"ajK" = (
/obj/machinery/door/firedoor,
/obj/effect/landmark/navigate_destination/bar,
@@ -784,13 +776,6 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/iron/white/textured,
/area/station/science/genetics)
-"amE" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/iron,
-/area/station/hallway/primary/central)
"amJ" = (
/obj/machinery/iv_drip,
/obj/effect/turf_decal/tile/blue/fourcorners,
@@ -994,6 +979,14 @@
"apQ" = (
/turf/closed/wall,
/area/station/service/library)
+"apW" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/spawner/random/structure/closet_empty/crate,
+/obj/item/stock_parts/power_store/cell,
+/obj/structure/broken_flooring,
+/obj/machinery/airalarm/directional/north,
+/turf/open/floor/plating,
+/area/station/cargo/warehouse)
"aqa" = (
/obj/structure/railing,
/obj/machinery/door/firedoor/border_only,
@@ -1221,6 +1214,16 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron/textured_large,
/area/station/service/hydroponics/garden)
+"auA" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{
+ dir = 5
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"auB" = (
/turf/open/floor/engine,
/area/station/medical/chemistry)
@@ -1356,7 +1359,7 @@
"awf" = (
/obj/machinery/igniter/incinerator_ordmix,
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"awi" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/cable,
@@ -1707,15 +1710,6 @@
},
/turf/open/openspace,
/area/station/security/prison/shower)
-"aCh" = (
-/obj/structure/window/spawner/directional/east,
-/obj/machinery/portable_atmospherics/canister,
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/ordnance)
"aCp" = (
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 1
@@ -2373,6 +2367,11 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/wood,
/area/station/commons/lounge)
+"aMS" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"aMU" = (
/obj/structure/window/reinforced/spawner/directional/west,
/obj/structure/flora/bush/fullgrass/style_random,
@@ -3528,14 +3527,6 @@
/obj/effect/spawner/random/structure/steam_vent,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
-"bjK" = (
-/obj/structure/barricade/wooden,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/station/maintenance/department/science)
"bjM" = (
/obj/effect/turf_decal/tile/brown/opposingcorners{
dir = 1
@@ -3650,6 +3641,13 @@
/obj/effect/spawner/random/engineering/tracking_beacon,
/turf/open/floor/carpet,
/area/station/service/theater)
+"bnb" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/binary/valve{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/department/science)
"bnn" = (
/obj/effect/turf_decal/tile/purple/full,
/turf/open/floor/iron/dark/smooth_large,
@@ -3959,13 +3957,6 @@
},
/turf/open/floor/iron/herringbone,
/area/station/hallway/primary/central)
-"btY" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/light_switch/directional/south,
-/turf/open/floor/iron/white,
-/area/station/science/lab)
"btZ" = (
/obj/machinery/computer/atmos_control/nocontrol/master,
/turf/open/floor/iron,
@@ -4483,7 +4474,7 @@
/obj/machinery/computer/security/mining{
dir = 8
},
-/obj/structure/sign/poster/official/random/directional/east,
+/obj/machinery/keycard_auth/directional/east,
/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
dir = 4
},
@@ -5209,6 +5200,21 @@
},
/turf/open/floor/iron/white,
/area/station/medical/exam_room)
+"bRl" = (
+/obj/machinery/suit_storage_unit/captain{
+ req_access = list("captain")
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/machinery/airalarm/directional/north,
+/obj/machinery/computer/security/telescreen/minisat/directional/west,
+/turf/open/floor/carpet/royalblue,
+/area/station/command/heads_quarters/captain/private)
+"bRD" = (
+/obj/structure/table,
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/testlab)
"bRI" = (
/obj/machinery/rnd/production/techfab/department/medical,
/obj/effect/turf_decal/tile/blue/fourcorners,
@@ -5225,12 +5231,6 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
-"bRZ" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/machinery/firealarm/directional/north,
-/obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"bSr" = (
/obj/effect/turf_decal/siding/purple{
dir = 4
@@ -5371,6 +5371,16 @@
dir = 8
},
/area/station/science/xenobiology)
+"bUu" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell,
+/obj/effect/turf_decal/tile/purple/half/contrasted{
+ dir = 1
+ },
+/obj/machinery/airalarm/directional/north,
+/turf/open/floor/iron/white,
+/area/station/science/lobby)
"bUx" = (
/obj/effect/landmark/event_spawn,
/obj/effect/decal/cleanable/dirt,
@@ -6173,9 +6183,7 @@
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"ckb" = (
-/obj/effect/turf_decal/siding/dark_blue{
- dir = 2
- },
+/obj/effect/turf_decal/siding/dark_blue,
/obj/machinery/holopad,
/turf/open/floor/iron/textured_large,
/area/station/command/bridge)
@@ -6241,6 +6249,15 @@
/obj/item/storage/box/hug/medical,
/turf/open/floor/iron,
/area/station/hallway/secondary/exit/departure_lounge)
+"clQ" = (
+/obj/effect/spawner/structure/window/reinforced/plasma,
+/obj/machinery/door/poddoor/preopen{
+ id = "rdoffice";
+ name = "Research Director's Shutters"
+ },
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/station/command/heads_quarters/rd)
"clX" = (
/obj/machinery/seed_extractor,
/obj/effect/turf_decal/stripes/line{
@@ -6395,6 +6412,12 @@
dir = 4
},
/area/station/hallway/secondary/exit/departure_lounge)
+"cqf" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"cqm" = (
/obj/structure/cable,
/obj/machinery/camera/autoname/directional/south{
@@ -6404,6 +6427,17 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/aisat/foyer)
+"cqt" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 8
+ },
+/obj/effect/turf_decal/bot,
+/obj/machinery/button/door/directional/east{
+ name = "shutter control";
+ id = "ordauxgarage"
+ },
+/turf/open/floor/plating,
+/area/station/science/ordnance)
"cqH" = (
/obj/structure/transit_tube,
/obj/structure/lattice,
@@ -6617,6 +6651,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/effect/mapping_helpers/airlock/access/all/science/general,
/turf/open/floor/iron/white,
/area/station/science/research)
"ctL" = (
@@ -6900,7 +6935,13 @@
/area/station/cargo/storage)
"cAy" = (
/obj/structure/table/glass,
-/obj/effect/spawner/random/food_or_drink/refreshing_beverage,
+/obj/item/flatpack{
+ board = /obj/item/circuitboard/machine/flatpacker;
+ pixel_x = -5
+ },
+/obj/item/multitool{
+ pixel_x = 8
+ },
/turf/open/floor/iron,
/area/station/engineering/lobby)
"cAC" = (
@@ -6920,7 +6961,7 @@
network = list("ss13","rd")
},
/turf/open/floor/engine,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"cAQ" = (
/obj/vehicle/sealed/mecha/ripley/cargo,
/obj/effect/decal/cleanable/dirt,
@@ -7654,10 +7695,6 @@
dir = 4
},
/area/station/science/research)
-"cPs" = (
-/obj/item/coin/plasma,
-/turf/open/misc/asteroid,
-/area/station/maintenance/department/science)
"cPt" = (
/turf/closed/wall/r_wall,
/area/station/science/lab)
@@ -7738,7 +7775,7 @@
dir = 8
},
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"cQK" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 4
@@ -7769,6 +7806,13 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/exit/departure_lounge)
+"cQX" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/storage)
"cRa" = (
/obj/structure/window/reinforced/spawner/directional/south,
/obj/structure/chair/office{
@@ -7865,6 +7909,13 @@
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/ce)
+"cSI" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/portable_atmospherics/scrubber,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/ordnance)
"cSJ" = (
/obj/structure/table,
/obj/effect/spawner/random/food_or_drink/snack,
@@ -8314,29 +8365,17 @@
},
/turf/open/floor/carpet/executive,
/area/station/command/meeting_room)
-"dbA" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"dbJ" = (
-/obj/effect/mapping_helpers/airlock/access/all/command/general,
/obj/machinery/door/airlock/command/glass{
name = "Bridge"
},
+/obj/effect/mapping_helpers/airlock/access/any/command/general,
/obj/machinery/door/firedoor,
/obj/structure/cable,
/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
cycle_id = "bridgec"
},
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
/turf/open/floor/iron,
/area/station/hallway/secondary/command)
"dbN" = (
@@ -9041,6 +9080,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/effect/mapping_helpers/airlock/access/all/science/general,
/turf/open/floor/iron/white,
/area/station/science/research)
"dmH" = (
@@ -9205,7 +9245,7 @@
/area/station/medical/virology)
"dpf" = (
/obj/structure/transport/linear/public,
-/obj/machinery/light/floor,
+/obj/machinery/light/floor/transport,
/turf/open/floor/plating/elevatorshaft,
/area/station/medical/treatment_center)
"dpj" = (
@@ -9379,7 +9419,6 @@
dir = 4
},
/obj/structure/chair{
- dir = 2;
name = "Defense"
},
/obj/structure/cable,
@@ -9536,6 +9575,7 @@
"duB" = (
/obj/structure/cable,
/obj/structure/window/reinforced/spawner/directional/west,
+/obj/machinery/firealarm/directional/east,
/turf/open/floor/iron/dark,
/area/station/security/prison)
"duS" = (
@@ -9697,7 +9737,7 @@
dir = 8
},
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"dyV" = (
/obj/structure/railing{
dir = 1
@@ -10307,6 +10347,22 @@
},
/turf/open/floor/iron/white,
/area/station/medical/paramedic)
+"dHy" = (
+/obj/machinery/light/small/directional/north,
+/obj/machinery/cell_charger,
+/obj/structure/table/reinforced,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/camera/autoname/directional/east{
+ network = list("ss13","rd")
+ },
+/obj/effect/turf_decal/siding/purple/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/science/robotics/mechbay)
"dHL" = (
/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible,
/obj/effect/turf_decal/tile/yellow{
@@ -11389,22 +11445,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/main)
-"eaY" = (
-/obj/effect/turf_decal/tile/red/anticorner/contrasted{
- dir = 1
- },
-/obj/structure/table,
-/obj/item/restraints/handcuffs/cable/yellow,
-/obj/item/restraints/handcuffs,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching output from station security cameras.";
- name = "Security Camera Monitor";
- network = list("ss13");
- pixel_x = -30;
- dir = 4
- },
-/turf/open/floor/iron,
-/area/station/hallway/secondary/exit/departure_lounge)
"ebi" = (
/obj/structure/curtain/cloth/fancy/mechanical/start_closed{
desc = "A set of curtains serving as a fancy theater backdrop. They can only be opened by a button.";
@@ -11479,9 +11519,7 @@
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
"ebE" = (
-/obj/effect/spawner/structure/window/hollow/end{
- dir = 2
- },
+/obj/effect/spawner/structure/window/hollow/end,
/turf/open/floor/plating,
/area/station/security/courtroom)
"ebN" = (
@@ -11564,6 +11602,7 @@
pixel_x = 3;
pixel_y = -2
},
+/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
"edv" = (
@@ -11660,7 +11699,7 @@
"efL" = (
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"efQ" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -11708,7 +11747,7 @@
dir = 8
},
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"egY" = (
/obj/machinery/light_switch/directional/west,
/turf/open/openspace,
@@ -11984,6 +12023,11 @@
/obj/structure/door_assembly,
/turf/open/misc/asteroid,
/area/station/asteroid)
+"elG" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"elT" = (
/obj/effect/turf_decal/tile/neutral/opposingcorners{
dir = 1
@@ -11995,14 +12039,6 @@
/obj/machinery/igniter/incinerator_atmos,
/turf/open/floor/engine/airless,
/area/station/maintenance/disposal/incinerator)
-"emb" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/power/apc/auto_name/directional/west,
-/obj/structure/cable,
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
"emf" = (
/obj/structure/window/spawner/directional/south,
/obj/structure/window/spawner/directional/north,
@@ -12061,6 +12097,18 @@
/obj/structure/stairs/north,
/turf/open/floor/iron,
/area/station/command/corporate_showroom)
+"enX" = (
+/obj/effect/turf_decal/caution/stand_clear/red,
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/door/poddoor/shutters/window/preopen{
+ id = "ordstorage"
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/storage)
"eon" = (
/obj/effect/spawner/random/structure/chair_comfy{
dir = 4
@@ -12350,6 +12398,24 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating,
/area/station/maintenance/central/greater)
+"esX" = (
+/obj/structure/table/reinforced,
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = 4;
+ pixel_y = 5
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = -8;
+ pixel_y = 9
+ },
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/cell_charger,
+/obj/item/borg/upgrade/rename{
+ pixel_x = 3;
+ pixel_y = 18
+ },
+/turf/open/floor/iron/dark/textured,
+/area/station/science/robotics/lab)
"etg" = (
/obj/machinery/shower/directional/north,
/obj/effect/turf_decal/tile/green/anticorner/contrasted{
@@ -12507,6 +12573,18 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
/area/station/maintenance/department/medical/central)
+"ewa" = (
+/obj/effect/turf_decal/tile/yellow/fourcorners,
+/obj/structure/table,
+/obj/item/stock_parts/power_store/cell/emproof{
+ pixel_y = 6
+ },
+/obj/item/stock_parts/power_store/cell/emproof{
+ pixel_y = 3
+ },
+/obj/item/stock_parts/power_store/cell/emproof,
+/turf/open/floor/iron,
+/area/station/engineering/main)
"ewr" = (
/obj/effect/spawner/random/trash/botanical_waste,
/obj/effect/mapping_helpers/burnt_floor,
@@ -13162,10 +13240,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/commons/storage/art)
-"eGL" = (
-/obj/structure/grille/broken,
-/turf/open/misc/asteroid,
-/area/station/maintenance/department/science)
"eGN" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -13177,14 +13251,10 @@
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"eHa" = (
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 8;
- pixel_x = 29;
- pixel_y = 1
- },
/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
dir = 4
},
+/obj/structure/sign/poster/official/random/directional/east,
/turf/open/floor/iron,
/area/station/command/bridge)
"eHc" = (
@@ -13334,6 +13404,10 @@
pixel_y = 7
},
/obj/item/pipe_dispenser,
+/obj/machinery/power/apc/auto_name/directional/south{
+ areastring = "/area/station/science/ordnance/burnchamber"
+ },
+/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
"eLe" = (
@@ -13538,12 +13612,11 @@
/area/station/maintenance/department/medical)
"eQJ" = (
/obj/structure/rack,
-/obj/item/gun/energy/e_gun/dragnet,
-/obj/item/gun/energy/e_gun/dragnet,
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 1
},
/obj/item/radio/intercom/directional/south,
+/obj/effect/spawner/random/armory/dragnet,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/security/armory)
"eQQ" = (
@@ -14063,6 +14136,12 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
+"fbN" = (
+/obj/machinery/light/small/directional/south,
+/obj/effect/spawner/random/structure/closet_empty/crate/with_loot,
+/obj/item/coin/plasma,
+/turf/open/misc/asteroid,
+/area/station/maintenance/department/science)
"fcH" = (
/obj/structure/frame/computer{
anchored = 1;
@@ -14177,6 +14256,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2,
/turf/open/floor/plating,
/area/station/maintenance/disposal/incinerator)
+"feR" = (
+/obj/machinery/computer/security/telescreen/ordnance/directional/south,
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/testlab)
"feU" = (
/obj/structure/cable,
/obj/machinery/door/airlock/maintenance/external,
@@ -14227,6 +14310,19 @@
},
/turf/closed/wall/r_wall,
/area/station/engineering/atmos/pumproom)
+"ffK" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"ffT" = (
/obj/structure/rack,
/obj/effect/spawner/random/maintenance/no_decals/two,
@@ -14530,15 +14626,6 @@
"fma" = (
/turf/closed/wall,
/area/station/medical/coldroom)
-"fmm" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/table,
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/structure/cable/multilayer/connected,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/command/storage/satellite)
"fmr" = (
/obj/structure/grille,
/obj/structure/lattice,
@@ -14877,6 +14964,28 @@
},
/turf/open/floor/iron/dark/smooth_large,
/area/station/hallway/primary/central)
+"fst" = (
+/obj/machinery/light/dim/directional/west,
+/obj/structure/cable,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment,
+/obj/item/holosign_creator/atmos{
+ pixel_y = 5
+ },
+/obj/structure/table,
+/obj/item/holosign_creator/atmos{
+ pixel_y = 7
+ },
+/turf/open/floor/iron/dark/corner{
+ dir = 8
+ },
+/area/station/engineering/atmos/upper)
"fsu" = (
/obj/structure/railing{
dir = 1
@@ -15356,6 +15465,12 @@
/obj/machinery/air_sensor/carbon_tank,
/turf/open/floor/engine/co2,
/area/station/engineering/atmos)
+"fzW" = (
+/obj/structure/table/glass,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/iron,
+/area/station/engineering/lobby)
"fzY" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -15963,14 +16078,6 @@
/obj/machinery/camera/autoname/directional/west,
/turf/open/floor/plating,
/area/station/engineering/storage)
-"fJs" = (
-/obj/item/stock_parts/cell/bluespace{
- rigged = 1;
- pixel_x = -5;
- pixel_y = -8
- },
-/turf/open/misc/asteroid,
-/area/station/asteroid)
"fJz" = (
/obj/item/reagent_containers/condiment/vegetable_oil,
/obj/machinery/grill,
@@ -16051,9 +16158,7 @@
/area/station/security/breakroom)
"fLM" = (
/obj/structure/transport/linear/public,
-/obj/machinery/light/floor{
- _status_traits = list("underfloor" = list("innate"))
- },
+/obj/machinery/light/floor/transport,
/turf/open/floor/plating/elevatorshaft,
/area/station/cargo/storage)
"fLU" = (
@@ -16358,6 +16463,18 @@
/obj/structure/disposalpipe/trunk,
/turf/open/floor/iron,
/area/station/engineering/lobby)
+"fQr" = (
+/obj/machinery/atmospherics/components/binary/pump{
+ dir = 8
+ },
+/obj/machinery/airalarm/directional/south,
+/obj/effect/mapping_helpers/airalarm/mixingchamber_access,
+/obj/effect/mapping_helpers/airalarm/link{
+ chamber_id = "ordnancefreezer"
+ },
+/obj/effect/mapping_helpers/airalarm/tlv_no_checks,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"fQG" = (
/obj/machinery/door/airlock/virology/glass{
name = "Virology Lab";
@@ -16663,21 +16780,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating/airless,
/area/station/cargo/storage)
-"fWa" = (
-/obj/machinery/suit_storage_unit/captain{
- req_access = list("captain")
- },
-/obj/effect/turf_decal/siding/wood{
- dir = 4
- },
-/obj/machinery/airalarm/directional/north,
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 4;
- pixel_x = -30;
- pixel_y = 1
- },
-/turf/open/floor/carpet/royalblue,
-/area/station/command/heads_quarters/captain/private)
"fWp" = (
/obj/effect/turf_decal/siding/white{
dir = 10
@@ -17629,6 +17731,16 @@
/obj/effect/spawner/random/structure/crate,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
+"gop" = (
+/obj/effect/landmark/blobstart,
+/obj/structure/closet/crate/science{
+ opened = 1;
+ icon_state = "scicrateopen"
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/ordnance)
"goB" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/blood/tracks,
@@ -17762,6 +17874,15 @@
/obj/structure/cable,
/turf/open/floor/iron/white,
/area/station/science/lobby)
+"grm" = (
+/obj/machinery/door/poddoor/shutters/window{
+ dir = 4;
+ id = "ordauxgarage"
+ },
+/obj/effect/turf_decal/stripes/asteroid/end,
+/obj/effect/turf_decal/sand/plating,
+/turf/open/floor/plating,
+/area/station/science/ordnance)
"grv" = (
/obj/structure/table/glass,
/obj/item/clothing/head/cone{
@@ -17870,6 +17991,9 @@
},
/turf/open/floor/iron,
/area/station/engineering/lobby)
+"gsW" = (
+/turf/closed/wall/rock/porous,
+/area/station/science/ordnance)
"gtj" = (
/obj/effect/turf_decal/tile/brown/anticorner/contrasted{
dir = 4
@@ -18702,6 +18826,41 @@
/obj/machinery/light/small/broken/directional/east,
/turf/open/floor/iron/freezer,
/area/station/maintenance/department/medical/central)
+"gHL" = (
+/obj/structure/table,
+/obj/effect/turf_decal/bot,
+/obj/machinery/camera/directional/west{
+ c_tag = "Science Ordnance Test Lab";
+ network = list("ss13","rd")
+ },
+/obj/item/assembly/prox_sensor{
+ pixel_y = 2
+ },
+/obj/item/assembly/prox_sensor{
+ pixel_x = 9;
+ pixel_y = -2
+ },
+/obj/item/assembly/prox_sensor{
+ pixel_x = -4;
+ pixel_y = 1
+ },
+/obj/item/assembly/prox_sensor{
+ pixel_x = 8;
+ pixel_y = 9
+ },
+/obj/machinery/requests_console/directional/west{
+ department = "Ordnance Test Range";
+ name = "Test Range Requests Console"
+ },
+/obj/effect/mapping_helpers/requests_console/information,
+/obj/effect/mapping_helpers/requests_console/assistance,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/item/binoculars{
+ pixel_y = -10;
+ pixel_x = -5
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance/testlab)
"gHN" = (
/turf/closed/wall,
/area/station/medical/chemistry/minisat)
@@ -18822,12 +18981,6 @@
},
/turf/open/floor/plating,
/area/station/service/chapel/funeral)
-"gKe" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/machinery/airalarm/directional/north,
-/obj/structure/filingcabinet,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"gKt" = (
/turf/closed/wall,
/area/station/science/auxlab/firing_range)
@@ -18936,6 +19089,21 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/white/textured_large,
/area/station/science/xenobiology)
+"gME" = (
+/obj/effect/turf_decal/delivery,
+/obj/structure/table,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/item/raw_anomaly_core/random{
+ pixel_x = -5;
+ pixel_y = 7
+ },
+/obj/item/raw_anomaly_core/random,
+/obj/item/raw_anomaly_core/random{
+ pixel_x = 7;
+ pixel_y = 9
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance/testlab)
"gMH" = (
/obj/machinery/door/airlock/maintenance,
/obj/effect/mapping_helpers/airlock/abandoned,
@@ -19220,7 +19388,7 @@
dir = 8
},
/obj/effect/spawner/random/entertainment/cigarette_pack,
-/obj/item/clothing/mask/cigarette/rollie/mindbreaker,
+/obj/item/cigarette/rollie/mindbreaker,
/obj/machinery/airalarm/directional/east,
/turf/open/floor/iron,
/area/station/cargo/miningoffice)
@@ -20071,11 +20239,6 @@
},
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
-"hgq" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/grille,
-/turf/open/floor/plating,
-/area/station/maintenance/department/science)
"hgB" = (
/obj/machinery/door/airlock/maintenance/external,
/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance,
@@ -21362,6 +21525,17 @@
"hDo" = (
/turf/closed/wall/r_wall,
/area/station/security/evidence)
+"hDJ" = (
+/obj/machinery/door/poddoor/shutters{
+ dir = 4;
+ id = "ordauxgarage"
+ },
+/obj/effect/turf_decal/sand/plating,
+/obj/effect/turf_decal/stripes/asteroid/end{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/station/science/ordnance)
"hDK" = (
/obj/effect/turf_decal/tile/neutral,
/obj/machinery/camera/autoname/directional/south,
@@ -21440,13 +21614,6 @@
/obj/machinery/atmospherics/components/tank/plasma,
/turf/open/misc/asteroid,
/area/station/maintenance/disposal/incinerator)
-"hFq" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/station/maintenance/department/science)
"hFA" = (
/obj/machinery/light/small/directional/south,
/obj/effect/turf_decal/stripes/asteroid/line{
@@ -21650,19 +21817,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/science/robotics/mechbay)
-"hJj" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
- dir = 5
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"hJo" = (
/obj/structure/closet/emcloset,
/turf/open/floor/plating,
@@ -22327,6 +22481,14 @@
/obj/machinery/airalarm/directional/west,
/turf/open/floor/iron,
/area/station/engineering/storage)
+"hVm" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{
+ dir = 6
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"hVs" = (
/obj/structure/cable,
/turf/open/floor/plating,
@@ -22387,10 +22549,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/wood/tile,
/area/station/service/bar)
-"hWN" = (
-/obj/machinery/firealarm/directional/south,
-/turf/open/openspace,
-/area/station/security/prison)
"hWW" = (
/obj/structure/cable,
/obj/effect/landmark/start/atmospheric_technician,
@@ -22701,37 +22859,6 @@
/obj/item/radio/intercom/directional/west,
/turf/open/floor/plating,
/area/station/hallway/secondary/entry)
-"idN" = (
-/obj/structure/table,
-/obj/effect/turf_decal/bot,
-/obj/machinery/camera/directional/west{
- c_tag = "Science Ordnance Test Lab";
- network = list("ss13","rd")
- },
-/obj/item/assembly/prox_sensor{
- pixel_y = 2
- },
-/obj/item/assembly/prox_sensor{
- pixel_x = 9;
- pixel_y = -2
- },
-/obj/item/assembly/prox_sensor{
- pixel_x = -4;
- pixel_y = 1
- },
-/obj/item/assembly/prox_sensor{
- pixel_x = 8;
- pixel_y = 9
- },
-/obj/machinery/requests_console/directional/west{
- department = "Ordnance Test Range";
- name = "Test Range Requests Console"
- },
-/obj/effect/mapping_helpers/requests_console/information,
-/obj/effect/mapping_helpers/requests_console/assistance,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance/testlab)
"idU" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
@@ -23288,6 +23415,11 @@
/obj/item/storage/box/monkeycubes,
/turf/open/floor/iron/white/textured_half,
/area/station/science/xenobiology)
+"ioL" = (
+/obj/item/radio/intercom/directional/east,
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/storage)
"ioP" = (
/obj/structure/cable/multilayer/multiz,
/obj/effect/decal/cleanable/dirt,
@@ -23936,6 +24068,10 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"iAM" = (
+/obj/machinery/computer/security/telescreen/rd/directional/south,
+/turf/open/floor/glass/reinforced/plasma,
+/area/station/command/heads_quarters/rd)
"iBe" = (
/obj/structure/chair/pew/right{
dir = 4
@@ -24173,6 +24309,19 @@
},
/turf/open/floor/iron/white,
/area/station/security/medical)
+"iFn" = (
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/rods/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/electronics/airlock,
+/obj/item/electronics/airlock,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 30
+ },
+/turf/open/floor/plating,
+/area/station/engineering/storage)
"iFq" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -24196,24 +24345,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/maintenance/solars/port/aft)
-"iFD" = (
-/obj/structure/table/reinforced,
-/obj/item/stock_parts/cell/high{
- pixel_x = 4;
- pixel_y = 5
- },
-/obj/item/stock_parts/cell/high{
- pixel_x = -8;
- pixel_y = 9
- },
-/obj/item/stock_parts/cell/high,
-/obj/machinery/cell_charger,
-/obj/item/borg/upgrade/rename{
- pixel_x = 3;
- pixel_y = 18
- },
-/turf/open/floor/iron/dark/textured,
-/area/station/science/robotics/lab)
"iFK" = (
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output{
dir = 8
@@ -24480,19 +24611,13 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark/small,
/area/station/science/cytology)
-"iKb" = (
-/obj/machinery/door/poddoor/shutters/window/preopen{
- id = "ordstorage"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/button/door/directional/east{
- req_access = list("ordnance");
- name = "Ordnance Storage Shutter Control";
- id = "ordstorage"
- },
-/obj/effect/turf_decal/caution/stand_clear/red,
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
+"iJZ" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/airalarm/directional/north,
+/obj/structure/filingcabinet,
+/obj/machinery/firealarm/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"iKc" = (
/turf/open/floor/iron/white,
/area/station/science/lobby)
@@ -24743,6 +24868,18 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
/area/station/maintenance/disposal)
+"iPz" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/window/reinforced/survival_pod/spawner/directional/south,
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/bot{
+ dir = 1
+ },
+/obj/machinery/airalarm/directional/west,
+/turf/open/floor/iron,
+/area/station/command/gateway)
"iPH" = (
/obj/structure/cable,
/turf/open/floor/iron/dark,
@@ -24756,6 +24893,13 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/station/command/corporate_showroom)
+"iPW" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/tank/oxygen{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/department/science)
"iQt" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/spawner/random/trash/food_packaging,
@@ -25215,9 +25359,7 @@
/area/station/medical/medbay/central)
"jbL" = (
/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
- dir = 2
- },
+/obj/effect/turf_decal/tile/purple/anticorner/contrasted,
/turf/open/floor/iron/white,
/area/station/science/lobby)
"jbM" = (
@@ -26975,6 +27117,17 @@
},
/turf/open/floor/engine,
/area/station/medical/chemistry)
+"jEw" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/closet/crate/science{
+ opened = 1;
+ icon_state = "scicrateopen"
+ },
+/obj/item/tank,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/ordnance)
"jED" = (
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/iron/freezer,
@@ -27139,15 +27292,6 @@
/obj/machinery/firealarm/directional/west,
/turf/open/floor/iron/dark,
/area/station/command/corporate_showroom)
-"jHE" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
- dir = 9
- },
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/testlab)
"jHH" = (
/obj/machinery/disposal/bin,
/obj/machinery/airalarm/directional/east,
@@ -27254,7 +27398,6 @@
/area/station/maintenance/central/greater)
"jIY" = (
/obj/structure/chair{
- dir = 2;
name = "Defense"
},
/obj/machinery/power/apc/auto_name/directional/north,
@@ -27768,6 +27911,9 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/structure/cable,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "bridgehop"
+ },
/turf/open/floor/carpet/green,
/area/station/command/heads_quarters/hop)
"jSu" = (
@@ -28021,13 +28167,6 @@
"jXb" = (
/turf/open/floor/iron/white/textured_large,
/area/station/science/genetics)
-"jXk" = (
-/obj/structure/closet/secure_closet/security/med,
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/red/fourcorners,
-/obj/item/radio/intercom/directional/north,
-/turf/open/floor/iron/dark,
-/area/station/security/checkpoint/medical)
"jXl" = (
/obj/effect/turf_decal/trimline/dark_red/arrow_cw{
dir = 5
@@ -28852,6 +28991,18 @@
/obj/machinery/light/directional/east,
/turf/open/floor/iron/kitchen,
/area/station/service/kitchen)
+"kkJ" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/button/door/directional/south{
+ id = "evashutter";
+ name = "E.V.A. Storage Shutter Control";
+ req_access = list("command")
+ },
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/command/storage/eva)
"kkK" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 4
@@ -29886,6 +30037,18 @@
/obj/structure/cable,
/turf/open/floor/iron/large,
/area/station/service/hydroponics/garden)
+"kBr" = (
+/obj/structure/barricade/wooden,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
+ dir = 4
+ },
+/obj/item/flashlight/glowstick/blue{
+ start_on = 1;
+ light_range = 2
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/department/science)
"kBt" = (
/obj/machinery/modular_computer/preset/civilian,
/obj/machinery/button/door/directional/north{
@@ -30708,6 +30871,16 @@
/obj/structure/sign/poster/random/directional/north,
/turf/open/floor/iron,
/area/station/cargo/storage)
+"kQV" = (
+/obj/effect/turf_decal/trimline/dark_blue/filled/line{
+ dir = 4
+ },
+/obj/machinery/computer/security/telescreen/cmo/directional/east,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/turf/open/floor/holofloor/dark,
+/area/station/command/heads_quarters/cmo)
"kRl" = (
/obj/effect/landmark/event_spawn,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -31505,7 +31678,7 @@
dir = 8
},
/turf/closed/wall/r_wall,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"lfu" = (
/obj/effect/turf_decal/tile/dark_red/opposingcorners,
/obj/effect/landmark/start/bartender,
@@ -31820,13 +31993,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/maintenance/disposal/incinerator)
-"lmc" = (
-/obj/machinery/computer/records/medical,
-/obj/effect/turf_decal/tile/red/fourcorners,
-/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/directional/north,
-/turf/open/floor/iron/dark,
-/area/station/security/checkpoint/medical)
"lmd" = (
/obj/effect/turf_decal/siding/wood/end{
dir = 1
@@ -31976,6 +32142,9 @@
/obj/effect/turf_decal/siding/wood,
/obj/machinery/door/firedoor,
/obj/effect/mapping_helpers/airlock/access/any/command/hop,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "bridgehop"
+ },
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"loR" = (
@@ -32070,27 +32239,10 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/solars/starboard/fore)
-"lqP" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell,
-/obj/effect/turf_decal/tile/purple/half/contrasted{
- dir = 1
- },
-/obj/machinery/airalarm/directional/north,
-/turf/open/floor/iron/white,
-/area/station/science/lobby)
"lqR" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron,
/area/station/cargo/drone_bay)
-"lqZ" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/item/radio/intercom/directional/east,
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
"lrc" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -32625,6 +32777,15 @@
dir = 4
},
/area/station/command/meeting_room)
+"lBm" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{
+ dir = 9
+ },
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/testlab)
"lBu" = (
/obj/effect/turf_decal/tile/brown/half/contrasted{
dir = 1
@@ -32701,9 +32862,7 @@
/turf/open/floor/iron/white,
/area/station/medical/chemistry/minisat)
"lCK" = (
-/obj/effect/turf_decal/siding/dark_blue{
- dir = 2
- },
+/obj/effect/turf_decal/siding/dark_blue,
/turf/open/floor/iron/textured_large,
/area/station/command/bridge)
"lCO" = (
@@ -33024,28 +33183,6 @@
/obj/structure/table/reinforced/rglass,
/turf/open/floor/iron/dark,
/area/station/security/office)
-"lHF" = (
-/obj/machinery/light/dim/directional/west,
-/obj/structure/cable,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/tile/yellow{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/segment,
-/obj/item/holosign_creator/atmos{
- pixel_y = 5
- },
-/obj/structure/table,
-/obj/item/holosign_creator/atmos{
- pixel_y = 7
- },
-/turf/open/floor/iron/dark/corner{
- dir = 8
- },
-/area/station/engineering/atmos/upper)
"lHX" = (
/obj/machinery/holopad,
/obj/effect/turf_decal/box/white{
@@ -33424,6 +33561,15 @@
},
/turf/open/floor/plating,
/area/station/maintenance/central/lesser)
+"lQe" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/cable/multilayer/connected,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/command/storage/satellite)
"lQl" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/hollow/reinforced/end{
@@ -33850,6 +33996,13 @@
},
/turf/open/floor/iron/dark/textured,
/area/station/science/robotics/lab)
+"lYo" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central)
"lYp" = (
/obj/structure/railing/corner{
dir = 4
@@ -34170,6 +34323,7 @@
/obj/structure/disposalpipe/trunk{
dir = 1
},
+/obj/machinery/digital_clock/directional/south,
/turf/open/floor/iron,
/area/station/cargo/storage)
"mff" = (
@@ -34197,6 +34351,17 @@
/obj/effect/baseturf_helper/reinforced_plating/ceiling,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
+"mgi" = (
+/obj/machinery/door/poddoor/shutters{
+ id = "ordauxgarage";
+ dir = 1
+ },
+/obj/effect/turf_decal/sand/plating,
+/obj/effect/turf_decal/stripes/asteroid/end{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/station/science/ordnance)
"mgn" = (
/obj/docking_port/stationary{
dir = 8;
@@ -34208,13 +34373,6 @@
},
/turf/open/space/basic,
/area/space)
-"mgD" = (
-/obj/machinery/computer/security/telescreen/ordnance{
- dir = 1;
- pixel_y = -30
- },
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/testlab)
"mgH" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable,
@@ -34385,7 +34543,7 @@
dir = 8
},
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"miR" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -34716,6 +34874,14 @@
"mnP" = (
/turf/open/floor/iron,
/area/station/service/hydroponics)
+"mnS" = (
+/obj/machinery/portable_atmospherics/pump,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/ordnance)
"mnU" = (
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 1
@@ -35003,13 +35169,14 @@
"mtG" = (
/obj/machinery/door/airlock/command,
/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/access/all/command/general,
+/obj/effect/mapping_helpers/airlock/access/any/command/general,
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
cycle_id = "bridgec"
},
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
/turf/open/floor/iron/dark/side{
dir = 4
},
@@ -35463,6 +35630,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/effect/mapping_helpers/airlock/access/any/engineering/construction,
/turf/open/floor/iron,
/area/station/engineering/lobby)
"mBY" = (
@@ -35561,7 +35729,7 @@
"mDx" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/closed/wall/r_wall,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"mDF" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 4
@@ -35640,6 +35808,17 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
+"mFa" = (
+/obj/machinery/door/firedoor/heavy,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/door/airlock/research{
+ name = "Ordnance Auxiliary Storage"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"mFb" = (
/obj/structure/fans/tiny,
/obj/machinery/door/poddoor/massdriver_chapel,
@@ -35668,6 +35847,16 @@
/obj/item/clothing/gloves/color/yellow,
/turf/open/floor/iron/dark,
/area/station/security/execution/education)
+"mFR" = (
+/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{
+ dir = 4
+ },
+/obj/structure/closet/toolcloset,
+/obj/machinery/computer/security/telescreen/auxbase/directional/east,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light_switch/directional/north,
+/turf/open/floor/iron,
+/area/station/construction/mining/aux_base)
"mFT" = (
/obj/machinery/newscaster/directional/west,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -35821,6 +36010,15 @@
},
/turf/open/floor/wood/large,
/area/station/cargo/boutique)
+"mIG" = (
+/obj/structure/window/spawner/directional/east,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/portable_atmospherics/scrubber,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/ordnance)
"mIH" = (
/obj/structure/lattice,
/obj/effect/turf_decal/stripes/asteroid/line{
@@ -35945,6 +36143,13 @@
"mKD" = (
/turf/closed/wall,
/area/station/hallway/secondary/command)
+"mKF" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/machinery/light_switch/directional/south,
+/turf/open/floor/iron/white,
+/area/station/science/lab)
"mKJ" = (
/obj/structure/lattice/catwalk,
/obj/machinery/camera/autoname/directional/south,
@@ -36121,6 +36326,7 @@
dir = 4
},
/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/all/science/general,
/turf/open/floor/iron/white,
/area/station/science/research)
"mOo" = (
@@ -36349,6 +36555,14 @@
/obj/item/pen,
/turf/open/floor/carpet,
/area/station/service/lawoffice)
+"mTZ" = (
+/obj/structure/closet/secure_closet/security/med,
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/red/fourcorners,
+/obj/item/radio/intercom/directional/north,
+/obj/machinery/power/apc/auto_name/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/security/checkpoint/medical)
"mUg" = (
/obj/effect/turf_decal/trimline/yellow/filled/line,
/turf/open/floor/iron,
@@ -36817,7 +37031,7 @@
/area/station/medical/medbay/central)
"nbS" = (
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"ncc" = (
/obj/structure/flora/bush/flowers_br/style_random,
/obj/structure/window/spawner/directional/north,
@@ -36894,19 +37108,6 @@
/obj/machinery/light_switch/directional/east,
/turf/open/floor/iron/dark,
/area/station/security/lockers)
-"ndk" = (
-/obj/effect/turf_decal/trimline/dark_blue/filled/line{
- dir = 4
- },
-/obj/machinery/computer/security/telescreen/cmo{
- dir = 8;
- pixel_x = 30
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
- dir = 1
- },
-/turf/open/floor/holofloor/dark,
-/area/station/command/heads_quarters/cmo)
"ndo" = (
/obj/structure/flora/bush/flowers_br/style_random,
/obj/structure/window/spawner/directional/west,
@@ -37049,6 +37250,13 @@
},
/turf/open/floor/engine,
/area/station/engineering/supermatter)
+"neH" = (
+/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
+ dir = 8
+ },
+/obj/machinery/computer/security/telescreen/minisat/directional/west,
+/turf/open/floor/iron,
+/area/station/command/bridge)
"neM" = (
/obj/effect/turf_decal/trimline/yellow/filled/line,
/obj/structure/cable,
@@ -37407,6 +37615,20 @@
dir = 1
},
/area/station/engineering/atmos)
+"nkM" = (
+/turf/closed/wall/r_wall,
+/area/station/science/ordnance/burnchamber)
+"nli" = (
+/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
+/obj/machinery/airalarm/directional/east,
+/obj/effect/mapping_helpers/airalarm/mixingchamber_access,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/mapping_helpers/airalarm/link{
+ chamber_id = "ordnanceburn"
+ },
+/obj/effect/mapping_helpers/airalarm/tlv_no_checks,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"nlu" = (
/obj/effect/turf_decal/trimline/blue/filled/line,
/obj/structure/cable,
@@ -37499,6 +37721,21 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
+"nnt" = (
+/obj/machinery/computer/security/qm,
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
+ },
+/obj/machinery/computer/security/telescreen/vault/directional/north,
+/obj/machinery/button/door/directional/west{
+ id = "qmprivacy";
+ name = "Privacy Shutters Control"
+ },
+/obj/machinery/keycard_auth/directional/west{
+ pixel_y = 12
+ },
+/turf/open/floor/wood,
+/area/station/command/heads_quarters/qm)
"nnv" = (
/obj/structure/table/reinforced/rglass,
/obj/effect/turf_decal/tile/blue/fourcorners,
@@ -38275,12 +38512,6 @@
/obj/machinery/power/port_gen/pacman/pre_loaded,
/turf/open/floor/plating,
/area/station/maintenance/aft/upper)
-"nCv" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
"nCH" = (
/obj/effect/turf_decal/tile/blue/anticorner/contrasted,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -38463,19 +38694,6 @@
/obj/structure/cable,
/turf/open/floor/catwalk_floor/iron,
/area/station/hallway/secondary/exit/departure_lounge)
-"nHk" = (
-/obj/machinery/computer/security/telescreen/interrogation{
- dir = 8;
- pixel_x = 30
- },
-/obj/effect/turf_decal/tile/red/half/contrasted{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/iron,
-/area/station/security/interrogation)
"nHm" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt/dust,
@@ -38612,6 +38830,8 @@
color = "#52B4E9"
},
/obj/structure/disposalpipe/trunk,
+/obj/machinery/requests_console/auto_name/directional/north,
+/obj/effect/mapping_helpers/requests_console/assistance,
/turf/open/floor/iron/white,
/area/station/medical/storage)
"nKc" = (
@@ -38838,6 +39058,12 @@
/obj/machinery/camera/autoname/directional/south,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"nNl" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/storage)
"nNo" = (
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 1
@@ -39037,13 +39263,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
-"nSZ" = (
-/obj/machinery/portable_atmospherics/scrubber,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/science/ordnance)
"nTm" = (
/obj/structure/chair/office{
dir = 1
@@ -39721,6 +39940,12 @@
},
/turf/open/floor/iron/textured,
/area/station/cargo/drone_bay)
+"ojR" = (
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden,
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/testlab)
"oka" = (
/obj/effect/turf_decal/siding/purple{
dir = 1
@@ -39840,22 +40065,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
-"oml" = (
-/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{
- dir = 4
- },
-/obj/structure/closet/toolcloset,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for the Auxiliary Mining Base.";
- dir = 8;
- name = "Auxiliary Base Monitor";
- network = list("auxbase");
- pixel_x = 28
- },
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/machinery/light_switch/directional/north,
-/turf/open/floor/iron,
-/area/station/construction/mining/aux_base)
"omv" = (
/obj/structure/rack,
/obj/effect/spawner/random/clothing/backpack,
@@ -39883,6 +40092,7 @@
"omE" = (
/obj/structure/table/glass,
/obj/effect/spawner/random/food_or_drink/snack,
+/obj/effect/spawner/random/food_or_drink/refreshing_beverage,
/turf/open/floor/iron,
/area/station/engineering/lobby)
"omL" = (
@@ -40419,13 +40629,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/engineering/atmospherics_engine)
-"oxg" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/structure/cable,
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/storage)
"oxB" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -40454,13 +40657,14 @@
/obj/machinery/door/airlock/multi_tile/public{
dir = 4
},
-/obj/effect/mapping_helpers/airlock/access/all/command/general,
+/obj/effect/mapping_helpers/airlock/access/any/command/general,
/obj/machinery/door/firedoor,
/obj/effect/mapping_helpers/airlock/unres{
dir = 8
},
/obj/structure/cable,
/obj/effect/mapping_helpers/airlock/autoname,
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
/turf/open/floor/iron/dark/smooth_large,
/area/station/command/meeting_room)
"oxU" = (
@@ -41194,17 +41398,6 @@
/obj/effect/spawner/random/engineering/tracking_beacon,
/turf/open/floor/plating/airless,
/area/station/science/ordnance/bomb)
-"oLg" = (
-/obj/structure/table/wood,
-/obj/item/stock_parts/cell/crap,
-/obj/item/clothing/head/collectable/hop{
- name = "novelty HoP hat"
- },
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/turf/open/floor/wood/tile,
-/area/station/command/corporate_showroom)
"oLh" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -42386,6 +42579,12 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
/area/station/security/detectives_office)
+"pgJ" = (
+/obj/structure/table/reinforced,
+/obj/effect/turf_decal/tile/red/fourcorners,
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/security/checkpoint/medical)
"pgN" = (
/obj/machinery/light/small/dim/directional/east,
/obj/structure/closet/crate/medical,
@@ -42401,6 +42600,7 @@
/obj/effect/turf_decal/siding/thinplating/dark{
dir = 9
},
+/obj/machinery/firealarm/directional/west,
/turf/open/floor/iron/checker,
/area/station/science/research)
"pgW" = (
@@ -42623,11 +42823,6 @@
dir = 1
},
/area/station/engineering/atmos/storage/gas)
-"pka" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/light/small/broken/directional/north,
-/turf/open/floor/plating,
-/area/station/maintenance/department/science)
"pkl" = (
/turf/closed/wall,
/area/station/maintenance/solars/starboard/fore)
@@ -43323,6 +43518,18 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron/dark,
/area/station/commons/locker)
+"pwE" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 8
+ },
+/obj/effect/turf_decal/box/red,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/machinery/camera/autoname/directional/north{
+ network = list("ss13","rd")
+ },
+/obj/machinery/portable_atmospherics/canister,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance/testlab)
"pwO" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
@@ -44601,20 +44808,6 @@
/obj/item/food/sandwich/cheese,
/turf/open/floor/iron/dark/textured,
/area/station/command/heads_quarters/cmo)
-"pTx" = (
-/obj/machinery/door/airlock/research{
- name = "Ordnance Lab"
- },
-/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
-/obj/structure/cable,
-/obj/machinery/door/firedoor/heavy,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
- dir = 4
- },
-/turf/open/floor/iron/white,
-/area/station/science/ordnance)
"pTC" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
@@ -44787,6 +44980,16 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/cargo/warehouse/upper)
+"pWh" = (
+/obj/machinery/computer/security/telescreen/interrogation/directional/east,
+/obj/effect/turf_decal/tile/red/half/contrasted{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron,
+/area/station/security/interrogation)
"pWn" = (
/obj/structure/railing/corner{
dir = 8
@@ -45010,7 +45213,7 @@
dir = 4
},
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"pZP" = (
/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/multiz/scrubbers/visible/layer2,
@@ -45381,24 +45584,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/textured_large,
/area/station/engineering/storage/tech)
-"qgZ" = (
-/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
-/obj/machinery/airalarm/directional/east,
-/obj/effect/mapping_helpers/airalarm/mixingchamber_access,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/mapping_helpers/airalarm/link{
- chamber_id = "ordnanceburn"
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"qhg" = (
/obj/structure/cable,
-/obj/effect/mapping_helpers/airlock/access/all/command/general,
/obj/machinery/door/airlock/command,
+/obj/effect/mapping_helpers/airlock/access/any/command/general,
/obj/effect/mapping_helpers/airlock/autoname,
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
/turf/open/floor/iron/dark/smooth_large,
/area/station/command/emergency_closet)
"qhm" = (
@@ -45649,6 +45843,17 @@
/obj/machinery/airalarm/directional/west,
/turf/open/floor/circuit/green,
/area/station/ai_monitored/command/nuke_storage)
+"qmg" = (
+/obj/structure/table/wood,
+/obj/item/stock_parts/power_store/cell/crap,
+/obj/item/clothing/head/collectable/hop{
+ name = "novelty HoP hat"
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/open/floor/wood/tile,
+/area/station/command/corporate_showroom)
"qml" = (
/obj/machinery/chem_master,
/obj/effect/turf_decal/trimline/yellow/filled/line,
@@ -45690,7 +45895,7 @@
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/plating,
+/turf/open/floor/iron,
/area/station/commons/storage/primary)
"qmI" = (
/obj/effect/turf_decal/tile/purple/fourcorners,
@@ -45743,6 +45948,14 @@
},
/turf/open/floor/iron/white/smooth_half,
/area/station/science/robotics/lab)
+"qnV" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/small/broken/directional/north,
+/obj/machinery/atmospherics/components/tank/oxygen{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/department/science)
"qob" = (
/obj/structure/table,
/obj/item/stock_parts/micro_laser{
@@ -46621,6 +46834,10 @@
},
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/aisat/teleporter)
+"qFS" = (
+/obj/structure/window/reinforced/spawner/directional/south,
+/turf/open/floor/glass/reinforced,
+/area/station/security/prison)
"qGk" = (
/turf/closed/wall/r_wall,
/area/station/hallway/secondary/command)
@@ -46760,13 +46977,6 @@
/obj/structure/girder,
/turf/open/misc/asteroid,
/area/station/asteroid)
-"qII" = (
-/obj/effect/turf_decal/delivery,
-/obj/structure/table,
-/obj/item/binoculars,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance/testlab)
"qIJ" = (
/obj/structure/table/wood,
/obj/effect/spawner/random/engineering/tool,
@@ -47049,13 +47259,6 @@
/obj/item/airlock_painter/decal,
/turf/open/floor/iron,
/area/station/cargo/warehouse)
-"qOO" = (
-/obj/structure/sign/poster/official/random/directional/west,
-/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/station/command/bridge)
"qOP" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/rack,
@@ -47601,17 +47804,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/catwalk_floor/iron_dark,
/area/station/maintenance/department/engine)
-"qZf" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/cable,
-/obj/machinery/light/directional/east,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
- dir = 10
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"qZh" = (
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
@@ -47867,7 +48059,7 @@
/obj/machinery/computer/security{
dir = 4
},
-/obj/machinery/keycard_auth/directional/west,
+/obj/structure/sign/poster/official/random/directional/west,
/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
dir = 8
},
@@ -48365,13 +48557,6 @@
},
/turf/open/floor/iron/dark,
/area/station/hallway/primary/fore)
-"rjv" = (
-/obj/machinery/computer/security/telescreen/rd{
- pixel_y = -30;
- dir = 1
- },
-/turf/open/floor/glass/reinforced/plasma,
-/area/station/command/heads_quarters/rd)
"rjx" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -48419,6 +48604,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/science/xenobiology)
+"rkd" = (
+/obj/structure/closet/crate/science,
+/obj/item/wrench,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/firealarm/directional/west,
+/obj/effect/spawner/random/maintenance,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/science/ordnance)
"rkm" = (
/obj/machinery/washing_machine,
/turf/open/floor/iron/freezer,
@@ -48519,6 +48713,18 @@
},
/turf/open/floor/engine,
/area/station/engineering/atmospherics_engine)
+"rkZ" = (
+/obj/machinery/suit_storage_unit/ce,
+/obj/machinery/requests_console/directional/south{
+ department = "Chief Engineer's Desk";
+ name = "Chief Engineer's Request Console"
+ },
+/obj/machinery/computer/security/telescreen/ce/directional/west,
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 10
+ },
+/turf/open/floor/iron,
+/area/station/command/heads_quarters/ce)
"rlp" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -48665,6 +48871,20 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/security)
+"roK" = (
+/obj/machinery/door/airlock/research{
+ name = "Ordnance Lab"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/science/ordnance,
+/obj/structure/cable,
+/obj/machinery/door/firedoor/heavy,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{
+ dir = 4
+ },
+/turf/open/floor/catwalk_floor/flat_white,
+/area/station/science/ordnance)
"roO" = (
/obj/machinery/door/airlock/security/glass{
name = "Prison Wing"
@@ -49240,7 +49460,6 @@
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
"ryG" = (
-/obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental,
/obj/structure/cable,
/obj/machinery/door/airlock/engineering/glass{
name = "Break Room"
@@ -49249,6 +49468,8 @@
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/mapping_helpers/airlock/access/any/engineering/general,
+/obj/effect/mapping_helpers/airlock/access/any/engineering/construction,
/turf/open/floor/iron,
/area/station/engineering/break_room)
"ryP" = (
@@ -49993,16 +50214,6 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/hallway/secondary/exit/departure_lounge)
-"rKH" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
- dir = 5
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"rKW" = (
/obj/machinery/photocopier,
/obj/effect/turf_decal/bot_red,
@@ -50110,18 +50321,6 @@
},
/turf/open/floor/iron/textured,
/area/station/hallway/primary/central)
-"rOz" = (
-/obj/effect/turf_decal/tile/yellow/fourcorners,
-/obj/structure/table,
-/obj/item/stock_parts/cell/emproof{
- pixel_y = 6
- },
-/obj/item/stock_parts/cell/emproof{
- pixel_y = 3
- },
-/obj/item/stock_parts/cell/emproof,
-/turf/open/floor/iron,
-/area/station/engineering/main)
"rOF" = (
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 4
@@ -51057,17 +51256,6 @@
},
/turf/open/floor/engine,
/area/station/hallway/secondary/entry)
-"sbE" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/obj/effect/turf_decal/box/red,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/machinery/camera/autoname/directional/north{
- network = list("ss13","rd")
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance/testlab)
"sbL" = (
/obj/machinery/door/airlock/engineering{
name = "Aft Port Solar Access"
@@ -51086,14 +51274,6 @@
/obj/structure/lattice/catwalk,
/turf/open/openspace,
/area/station/science/xenobiology)
-"sbS" = (
-/obj/machinery/power/apc/auto_name/directional/west,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
- dir = 1
- },
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/testlab)
"sbU" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/spawner/random/structure/crate,
@@ -51337,7 +51517,8 @@
/obj/machinery/door/firedoor/border_only{
dir = 4
},
-/obj/machinery/newscaster/directional/north,
+/obj/machinery/requests_console/auto_name/directional/north,
+/obj/effect/mapping_helpers/requests_console/assistance,
/turf/open/floor/iron,
/area/station/cargo/storage)
"sgW" = (
@@ -53016,18 +53197,6 @@
"sJT" = (
/turf/closed/wall/r_wall,
/area/station/ai_monitored/turret_protected/aisat/uppersouth)
-"sJV" = (
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/button/door/directional/south{
- id = "evashutter";
- name = "E.V.A. Storage Shutter Control";
- req_access = list("command")
- },
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/command/storage/eva)
"sJX" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron,
@@ -53091,7 +53260,7 @@
pixel_y = -24
},
/turf/open/floor/engine,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"sLt" = (
/obj/machinery/camera/autoname/directional/east,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -53343,23 +53512,6 @@
},
/turf/open/floor/plating,
/area/station/maintenance/port/lesser)
-"sQi" = (
-/obj/machinery/computer/security/qm,
-/obj/effect/turf_decal/siding/wood{
- dir = 9
- },
-/obj/machinery/computer/security/telescreen/vault{
- pixel_y = 30
- },
-/obj/machinery/button/door/directional/west{
- id = "qmprivacy";
- name = "Privacy Shutters Control"
- },
-/obj/machinery/keycard_auth/directional/west{
- pixel_y = 12
- },
-/turf/open/floor/wood,
-/area/station/command/heads_quarters/qm)
"sQC" = (
/obj/structure/chair/pew/left{
dir = 4
@@ -54983,6 +55135,13 @@
/obj/structure/railing,
/turf/open/floor/plating,
/area/station/maintenance/central/greater)
+"tuT" = (
+/obj/effect/turf_decal/siding/purple{
+ dir = 1
+ },
+/obj/machinery/computer/security/telescreen/ordnance/directional/south,
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/testlab)
"tuY" = (
/obj/effect/turf_decal/trimline/blue/arrow_ccw{
dir = 1
@@ -55033,19 +55192,6 @@
/obj/effect/landmark/start/prisoner,
/turf/open/floor/iron,
/area/station/security/prison)
-"tvW" = (
-/obj/structure/closet/crate,
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/stack/rods/fifty,
-/obj/item/stack/sheet/glass/fifty,
-/obj/item/electronics/airlock,
-/obj/item/electronics/airlock,
-/obj/item/stock_parts/cell/high,
-/obj/item/stack/sheet/mineral/plasma{
- amount = 30
- },
-/turf/open/floor/plating,
-/area/station/engineering/storage)
"twf" = (
/obj/machinery/door/poddoor/shutters/radiation/preopen{
id = "soup";
@@ -55272,7 +55418,8 @@
"tBe" = (
/obj/machinery/computer/pod/old/mass_driver_controller/trash{
pixel_x = -32;
- pixel_y = 6
+ pixel_y = 6;
+ range = 5
},
/obj/structure/cable,
/obj/machinery/button/door/directional/west{
@@ -56139,17 +56286,6 @@
/obj/machinery/telecomms/bus/preset_one,
/turf/open/floor/circuit/green/telecomms/mainframe,
/area/station/tcommsat/server)
-"tOz" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8
- },
-/obj/machinery/airalarm/directional/south,
-/obj/effect/mapping_helpers/airalarm/mixingchamber_access,
-/obj/effect/mapping_helpers/airalarm/link{
- chamber_id = "ordnancefreezer"
- },
-/turf/open/floor/iron/dark,
-/area/station/science/ordnance)
"tOA" = (
/obj/machinery/door/airlock/highsecurity{
name = "Gravity Generator Room"
@@ -56484,6 +56620,7 @@
/obj/structure/table/wood,
/obj/item/flashlight/lamp,
/obj/machinery/camera/autoname/directional/north,
+/obj/machinery/keycard_auth/directional/north,
/turf/open/floor/carpet/green,
/area/station/command/heads_quarters/hop)
"tUG" = (
@@ -57103,6 +57240,16 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/command/gateway)
+"ufW" = (
+/obj/effect/turf_decal/tile/red/anticorner/contrasted{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/item/restraints/handcuffs/cable/yellow,
+/obj/item/restraints/handcuffs,
+/obj/machinery/computer/security/telescreen/normal/directional/west,
+/turf/open/floor/iron,
+/area/station/hallway/secondary/exit/departure_lounge)
"ugh" = (
/obj/machinery/door/airlock/research{
name = "Research and Development Lab"
@@ -57612,9 +57759,7 @@
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
"uoP" = (
-/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2{
- dir = 2
- },
+/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2,
/obj/effect/turf_decal/tile/blue/fourcorners,
/turf/open/floor/catwalk_floor/flat_white,
/area/station/medical/treatment_center)
@@ -58067,6 +58212,22 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/engineering/storage)
+"uwV" = (
+/obj/machinery/door/poddoor/shutters/window/preopen{
+ id = "ordstorage"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/button/door/directional/east{
+ req_access = list("ordnance");
+ name = "Ordnance Storage Shutter Control";
+ id = "ordstorage"
+ },
+/obj/effect/turf_decal/caution/stand_clear/red,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/storage)
"uwW" = (
/obj/structure/cable/layer1,
/turf/open/floor/iron,
@@ -58716,6 +58877,14 @@
/obj/structure/cable,
/turf/open/floor/plating/airless,
/area/station/solars/port)
+"uJq" = (
+/obj/machinery/computer/records/medical,
+/obj/effect/turf_decal/tile/red/fourcorners,
+/obj/machinery/computer/security/telescreen/cmo/directional/north{
+ name = "Medbay Monitor"
+ },
+/turf/open/floor/iron/dark,
+/area/station/security/checkpoint/medical)
"uJt" = (
/obj/effect/mapping_helpers/engraving,
/turf/closed/wall,
@@ -59086,6 +59255,20 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/large,
/area/station/service/hydroponics/garden)
+"uPg" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 9
+ },
+/obj/machinery/lift_indicator/directional/south{
+ linked_elevator_id = "medbay1";
+ pixel_x = -32
+ },
+/obj/machinery/button/elevator/directional/south{
+ id = "medbay1";
+ pixel_x = -32
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/treatment_center)
"uPi" = (
/obj/effect/turf_decal/tile/brown/half/contrasted,
/obj/effect/decal/cleanable/dirt,
@@ -59460,6 +59643,19 @@
},
/turf/open/floor/iron/dark/corner,
/area/station/engineering/atmos/upper)
+"uXb" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{
+ dir = 5
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"uXe" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -59469,20 +59665,6 @@
},
/turf/open/floor/iron,
/area/station/maintenance/disposal/incinerator)
-"uXk" = (
-/obj/effect/turf_decal/tile/red/anticorner/contrasted,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for watching Prison Wing holding areas.";
- dir = 1;
- name = "Prison Monitor";
- network = list("prison");
- pixel_y = -30
- },
-/obj/machinery/modular_computer/preset/cargochat/security{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/security/office)
"uXp" = (
/obj/docking_port/stationary{
dir = 2;
@@ -59673,7 +59855,7 @@
/area/station/medical/virology)
"vay" = (
/obj/structure/table/reinforced,
-/obj/item/storage/medkit,
+/obj/item/storage/medkit/regular,
/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
dir = 1
},
@@ -59766,6 +59948,22 @@
/obj/effect/mapping_helpers/airlock/access/all/service/crematorium,
/turf/open/floor/iron/dark,
/area/station/service/chapel/office)
+"vcZ" = (
+/obj/item/circuitboard/machine/thermomachine,
+/obj/item/circuitboard/machine/thermomachine,
+/obj/item/storage/bag/construction,
+/obj/item/storage/bag/construction,
+/obj/item/storage/bag/construction,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/structure/closet/crate,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/light/dim/directional/south,
+/turf/open/floor/iron/large,
+/area/station/engineering/atmos)
"vdb" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 1
@@ -59961,12 +60159,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/catwalk_floor/iron_dark,
/area/station/maintenance/department/engine)
-"vgS" = (
-/obj/structure/table/glass,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/turf/open/floor/iron,
-/area/station/engineering/lobby)
"vgW" = (
/obj/structure/lattice,
/turf/open/floor/engine/airless,
@@ -60023,7 +60215,7 @@
dir = 4
},
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"viK" = (
/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
dir = 8
@@ -60093,6 +60285,17 @@
/obj/effect/turf_decal/tile/red/half/contrasted,
/turf/open/floor/iron,
/area/station/security/warden)
+"vjB" = (
+/obj/machinery/door/poddoor/shutters{
+ id = "ordauxgarage";
+ dir = 1
+ },
+/obj/effect/turf_decal/sand/plating,
+/obj/effect/turf_decal/stripes/asteroid/end{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/science/ordnance)
"vjD" = (
/obj/structure/cable,
/obj/structure/sign/poster/random/directional/north,
@@ -60137,6 +60340,14 @@
/obj/effect/turf_decal/stripes/full,
/turf/open/floor/iron,
/area/station/science/robotics/mechbay)
+"vkv" = (
+/obj/item/stock_parts/power_store/cell/bluespace{
+ rigged = 1;
+ pixel_x = -5;
+ pixel_y = -8
+ },
+/turf/open/misc/asteroid,
+/area/station/asteroid)
"vkx" = (
/obj/machinery/recycler{
dir = 4
@@ -60762,7 +60973,7 @@
dir = 4
},
/turf/closed/wall/r_wall,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"vyj" = (
/obj/structure/stairs/east,
/obj/structure/railing,
@@ -60952,13 +61163,6 @@
/obj/effect/turf_decal/box,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/aisat/foyer)
-"vBA" = (
-/obj/machinery/light/floor{
- _status_traits = list("underfloor" = list("innate"))
- },
-/obj/structure/transport/linear/public,
-/turf/open/floor/plating/elevatorshaft,
-/area/station/cargo/storage)
"vBD" = (
/obj/structure/chair/office/light{
dir = 1
@@ -60979,22 +61183,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
-"vCq" = (
-/obj/machinery/light/small/directional/north,
-/obj/machinery/cell_charger,
-/obj/structure/table/reinforced,
-/obj/item/stock_parts/cell/high,
-/obj/machinery/camera/autoname/directional/east{
- network = list("ss13","rd")
- },
-/obj/effect/turf_decal/siding/purple/corner{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/station/science/robotics/mechbay)
"vCw" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -61565,6 +61753,7 @@
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/mapping_helpers/airlock/access/any/engineering/construction,
/turf/open/floor/iron,
/area/station/engineering/break_room)
"vMN" = (
@@ -61574,7 +61763,7 @@
"vMR" = (
/obj/machinery/door/poddoor/incinerator_ordmix,
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"vNc" = (
/obj/machinery/modular_computer/preset/id{
dir = 1
@@ -61765,21 +61954,6 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/department/cargo)
-"vPL" = (
-/obj/machinery/suit_storage_unit/ce,
-/obj/machinery/requests_console/directional/south{
- department = "Chief Engineer's Desk";
- name = "Chief Engineer's Request Console"
- },
-/obj/machinery/computer/security/telescreen/ce{
- dir = 4;
- pixel_x = -30
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 10
- },
-/turf/open/floor/iron,
-/area/station/command/heads_quarters/ce)
"vPN" = (
/obj/structure/urinal/directional/north,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -61823,7 +61997,7 @@
"vQf" = (
/obj/machinery/suit_storage_unit/standard_unit,
/obj/machinery/door/window/brigdoor/right/directional/east{
- req_access = list("bridge")
+ req_access = list("command")
},
/obj/effect/turf_decal/bot,
/obj/machinery/light/small/dim/directional/west,
@@ -62702,7 +62876,7 @@
"wgI" = (
/obj/machinery/air_sensor/ordnance_burn_chamber,
/turf/open/floor/engine/vacuum,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"wgK" = (
/obj/effect/turf_decal/box/corners{
dir = 8
@@ -62998,6 +63172,17 @@
/obj/effect/turf_decal/stripes,
/turf/open/floor/iron/dark,
/area/station/engineering/atmospherics_engine)
+"wmM" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/structure/cable,
+/obj/machinery/light/directional/east,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{
+ dir = 10
+ },
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"wmO" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/glass/reinforced,
@@ -63033,6 +63218,12 @@
dir = 8
},
/area/station/science/xenobiology)
+"wnH" = (
+/obj/machinery/power/apc/auto_name/directional/west,
+/obj/structure/cable,
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/storage)
"wnL" = (
/turf/open/floor/plating,
/area/station/medical/medbay/central)
@@ -64860,6 +65051,7 @@
},
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/mapping_helpers/airlock/access/all/science/general,
/turf/open/floor/iron/white,
/area/station/science/research)
"wWk" = (
@@ -65005,6 +65197,14 @@
/obj/effect/mapping_helpers/airlock/autoname,
/turf/open/floor/iron,
/area/station/command/heads_quarters/rd)
+"wYO" = (
+/obj/effect/turf_decal/tile/red/anticorner/contrasted,
+/obj/machinery/computer/security/telescreen/prison/directional/south,
+/obj/machinery/modular_computer/preset/cargochat/security{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/security/office)
"wYW" = (
/obj/machinery/door/airlock/research{
autoclose = 0;
@@ -65161,12 +65361,6 @@
/turf/open/floor/iron/white/smooth_large,
/area/station/science/research)
"xaC" = (
-/obj/machinery/button/elevator/directional/south{
- id = "medbay1"
- },
-/obj/machinery/lift_indicator/directional/south{
- linked_elevator_id = "medbay1"
- },
/obj/machinery/portable_atmospherics/canister/anesthetic_mix,
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
dir = 1
@@ -65253,6 +65447,10 @@
/obj/structure/rack,
/turf/open/floor/plating,
/area/station/asteroid)
+"xbr" = (
+/obj/structure/window/reinforced/spawner/directional/west,
+/turf/open/floor/glass/reinforced,
+/area/station/security/prison)
"xbs" = (
/obj/machinery/airalarm/directional/south,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -65505,7 +65703,7 @@
"xfQ" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/closed/wall/r_wall,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"xfS" = (
/obj/structure/sign/departments/aisat/directional/east,
/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{
@@ -65888,10 +66086,10 @@
/turf/open/floor/engine,
/area/station/science/xenobiology)
"xnc" = (
-/obj/effect/mapping_helpers/airlock/access/all/command/general,
/obj/machinery/door/airlock/command/glass{
name = "Bridge"
},
+/obj/effect/mapping_helpers/airlock/access/any/command/general,
/obj/structure/cable,
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -65900,6 +66098,7 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
cycle_id = "bridgec"
},
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
/turf/open/floor/iron,
/area/station/hallway/secondary/command)
"xne" = (
@@ -66439,7 +66638,8 @@
},
/obj/structure/cable,
/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/access/all/command/general,
+/obj/effect/mapping_helpers/airlock/access/any/command/general,
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
/turf/open/floor/iron/dark/smooth_large,
/area/station/command/corporate_dock)
"xxH" = (
@@ -66531,22 +66731,6 @@
},
/turf/open/floor/engine,
/area/station/command/corporate_dock)
-"xzC" = (
-/obj/item/circuitboard/machine/thermomachine,
-/obj/item/circuitboard/machine/thermomachine,
-/obj/item/storage/bag/construction,
-/obj/item/storage/bag/construction,
-/obj/item/storage/bag/construction,
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high,
-/obj/structure/closet/crate,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/light/dim/directional/south,
-/turf/open/floor/iron/large,
-/area/station/engineering/atmos)
"xzG" = (
/obj/item/kirbyplants/random,
/turf/open/floor/iron/white,
@@ -66900,14 +67084,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/port/lesser)
-"xFj" = (
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/effect/spawner/random/structure/closet_empty/crate,
-/obj/item/stock_parts/cell,
-/obj/structure/broken_flooring,
-/obj/machinery/airalarm/directional/north,
-/turf/open/floor/plating,
-/area/station/cargo/warehouse)
"xFt" = (
/obj/structure/railing/corner{
dir = 4
@@ -67087,6 +67263,16 @@
/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"xJt" = (
+/obj/effect/turf_decal/sand/plating,
+/obj/machinery/light/small/directional/south,
+/obj/structure/broken_flooring/pile,
+/obj/machinery/atmospherics/components/binary/pump/off/green/hidden{
+ dir = 4;
+ name = "Aux Oxygen To Port"
+ },
+/turf/open/floor/plating,
+/area/station/science/ordnance)
"xJA" = (
/obj/structure/table/wood/fancy/blue,
/obj/effect/spawner/random/aimodule/neutral,
@@ -67238,6 +67424,10 @@
name = "Captain's Fax Machine"
},
/obj/structure/table/reinforced,
+/obj/machinery/keycard_auth/directional/south{
+ pixel_y = -24;
+ pixel_x = 8
+ },
/turf/open/floor/carpet/royalblue,
/area/station/command/heads_quarters/captain/private)
"xNh" = (
@@ -67457,20 +67647,6 @@
/obj/effect/spawner/random/structure/crate,
/turf/open/floor/plating,
/area/station/maintenance/central/greater)
-"xQY" = (
-/obj/structure/table/reinforced,
-/obj/machinery/computer/security/telescreen{
- desc = "Used for monitoring medbay to ensure patient safety.";
- dir = 1;
- name = "Medbay Monitor";
- network = list("medbay");
- pixel_x = -2;
- pixel_y = 3
- },
-/obj/effect/turf_decal/tile/red/fourcorners,
-/obj/structure/cable,
-/turf/open/floor/iron/dark,
-/area/station/security/checkpoint/medical)
"xRj" = (
/obj/structure/fence{
dir = 4
@@ -67509,15 +67685,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
-"xSa" = (
-/obj/structure/table,
-/obj/machinery/computer/security/telescreen/ordnance{
- dir = 1;
- pixel_y = 4;
- pixel_x = 1
- },
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/testlab)
"xSE" = (
/obj/machinery/door/poddoor/lift/preopen{
transport_linked_id = "cargo"
@@ -67786,7 +67953,7 @@
"xXF" = (
/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix,
/turf/open/floor/engine,
-/area/station/science/ordnance)
+/area/station/science/ordnance/burnchamber)
"xXY" = (
/obj/effect/turf_decal/tile/neutral/opposingcorners,
/obj/effect/turf_decal/siding/wideplating/dark/end{
@@ -68121,7 +68288,7 @@
name = "Primary Tool Storage"
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/plating,
+/turf/open/floor/iron,
/area/station/commons/storage/primary)
"ydC" = (
/obj/effect/decal/cleanable/dirt/dust,
@@ -80303,7 +80470,7 @@ uMa
sdc
sdc
hCS
-xFj
+apW
lLk
lLk
sWd
@@ -82101,7 +82268,7 @@ ghU
icM
hoX
wOU
-sQi
+nnt
dNW
hdK
xiV
@@ -82379,7 +82546,7 @@ pzx
jgH
yds
kFT
-jXk
+mTZ
hQK
dPg
fvo
@@ -82636,7 +82803,7 @@ mBj
jHx
iJF
kFT
-lmc
+uJq
sGt
ltj
fvo
@@ -82644,11 +82811,11 @@ pwn
eaL
eUB
dgR
-xDp
+uPg
bui
yit
-yit
dpf
+yit
dKw
miD
dFY
@@ -82895,7 +83062,7 @@ vGn
kFT
moH
bhZ
-xQY
+pgJ
fvo
lcM
eaL
@@ -83632,7 +83799,7 @@ uDB
uDB
uDB
sdc
-vBA
+fLM
soZ
jCX
jCX
@@ -83899,10 +84066,10 @@ lwW
uyL
esN
fXZ
-fEi
gli
gli
gli
+fEi
gli
gli
hgi
@@ -88780,7 +88947,7 @@ axi
bAw
cGP
ygb
-aat
+iPz
lQN
qsI
haf
@@ -89007,7 +89174,7 @@ gPZ
pDG
nGd
xst
-uXk
+wYO
ecC
wrx
gpV
@@ -90540,7 +90707,7 @@ laF
mnX
rkt
bqr
-nHk
+pWh
pyF
waJ
lEM
@@ -91359,7 +91526,7 @@ tWs
acc
oRa
hWx
-amE
+lYo
acc
vjq
pKb
@@ -93112,7 +93279,7 @@ axD
axD
axD
axD
-fWa
+bRl
jxq
vEF
axD
@@ -94657,7 +94824,7 @@ eYO
mrq
eBK
bQc
-qOO
+neH
nZB
fCY
loC
@@ -98266,7 +98433,7 @@ juw
juw
juw
wxW
-oLg
+qmg
dTd
npg
juw
@@ -100841,7 +101008,7 @@ lnZ
dCu
xUR
vRm
-sJV
+kkJ
utM
xsv
tHF
@@ -102122,7 +102289,7 @@ vfJ
vfJ
vfJ
vfJ
-lqP
+bUu
grl
pJN
iKc
@@ -102657,7 +102824,7 @@ nJF
stw
azv
dZd
-iFD
+esX
lYm
azv
azv
@@ -103382,7 +103549,7 @@ cLf
vxX
dZy
fhG
-fmm
+lQe
qrt
rmx
wHJ
@@ -103673,7 +103840,7 @@ ipv
tdk
hkc
swi
-vCq
+dHy
cBB
trL
nMP
@@ -104181,7 +104348,7 @@ cPt
lcj
tCz
dfr
-btY
+mKF
cPt
iQZ
oqp
@@ -106800,7 +106967,7 @@ gTV
aGQ
kEn
jxd
-vgS
+fzW
gur
mkE
jxd
@@ -108815,7 +108982,7 @@ pQG
atb
qVB
iOH
-tOz
+fQr
gOY
tDS
cpJ
@@ -109066,7 +109233,7 @@ ilp
jTB
jTB
mHc
-emb
+wnH
gOY
nQl
jSR
@@ -109323,8 +109490,8 @@ ilp
jTB
jGd
eBH
-oxg
-abP
+cQX
+enX
rSB
bwj
mSG
@@ -110121,7 +110288,7 @@ rFZ
bND
mjR
bND
-xzC
+vcZ
fTX
fTX
fTX
@@ -110608,13 +110775,13 @@ ilp
jTB
cuA
cuA
-nCv
-iKb
+nNl
+uwV
vNl
nCo
tGW
tGW
-qgZ
+nli
pLk
vvE
aWM
@@ -110865,13 +111032,13 @@ ilp
jTB
jTB
kQB
-lqZ
+ioL
gOY
aks
tTK
tvB
-nSZ
-gOY
+cSI
+nkM
vxZ
dyS
lfq
@@ -111127,7 +111294,7 @@ gOY
gOY
tTK
rFA
-aCh
+mIG
xfQ
cAG
xXF
@@ -111375,21 +111542,21 @@ aku
uOo
aku
aku
-uro
-rji
-ilp
-ilp
-cPs
+fbN
+gsW
+gsW
+mnS
+mnS
gOY
-gKe
+iJZ
lcd
ecM
eKT
-gOY
+nkM
vxZ
pZK
lfq
-gOY
+nkM
cxg
cxg
vxX
@@ -111633,13 +111800,13 @@ uOo
aku
aku
pkw
-foX
-aku
-ilp
-foX
-gOY
-bRZ
-hJj
+mgi
+rkd
+aMS
+hVm
+mFa
+elG
+uXb
cmn
jgl
efL
@@ -111701,7 +111868,7 @@ cvL
mCm
cpG
hRX
-tvW
+iFn
prc
prc
prc
@@ -111890,13 +112057,13 @@ uOo
aku
aku
aku
-foX
-ouA
-aku
-aku
+ajs
+gop
+cqf
+xJt
gOY
joD
-dbA
+ffK
cut
rcR
efL
@@ -112147,14 +112314,14 @@ aku
aku
aku
aku
-foX
-aku
-jJe
-ieo
+vjB
+jEw
+cmn
+cqt
gOY
kke
-qZf
-rKH
+wmM
+auA
icz
efL
nbS
@@ -112404,20 +112571,20 @@ aku
aku
aku
uro
-rji
-eGL
-hgq
-vfJ
-gOY
-gOY
-gOY
-pTx
-gOY
-gOY
+gsW
+hDJ
+grm
+gsW
gOY
gOY
gOY
+roK
gOY
+nkM
+nkM
+nkM
+nkM
+nkM
bwC
cLf
bwC
@@ -112663,16 +112830,16 @@ aku
aku
aku
aku
-upd
+xAd
wfU
rbS
kAI
-sbS
-jHE
+ojR
+lBm
uvx
mna
gXw
-idN
+gHL
jGy
moe
bwC
@@ -113178,7 +113345,7 @@ tsz
lJq
obA
vfJ
-bjK
+kBr
vfJ
moe
tLh
@@ -113435,7 +113602,7 @@ uYH
aQm
obA
upd
-hFq
+bnb
upd
moe
rHG
@@ -113691,8 +113858,8 @@ lJq
jBM
lJq
obA
-pka
-hkG
+qnV
+iPW
hkG
moe
mJU
@@ -113700,7 +113867,7 @@ bpW
oix
oix
hmG
-qII
+gME
xGg
moe
bwC
@@ -113940,274 +114107,274 @@ cLf
cLf
cLf
cLf
-vxX
-vxX
-vxX
-obA
+vxX
+vxX
+vxX
+obA
+cLf
+cPl
+cLf
+obA
+vfJ
+vfJ
+vfJ
+moe
+pwE
+dlE
+xjq
+feR
+moe
+fDj
+fDj
+moe
+bwC
+cLf
+iUF
+cLf
+cLf
+cLf
+bwC
+vxX
+vxX
+nbu
+nbu
+nbu
+nbu
+nbu
+nbu
+nbu
+nbu
+nbu
+nbu
+nbu
+nbu
+nbu
+vxX
+mUQ
+cLf
+bwC
+cLf
+cLf
+cLf
+bwC
+cLf
+vxX
+vxX
+vxX
+vxX
+uFC
+uFC
+jnY
+oaG
+uFC
+oTv
+fhH
+oTv
+uFC
+oTv
+uFC
+oTv
+spw
+oTv
+uFC
+uFC
+pqJ
+uFC
+fnI
+dqK
+mlk
+dqK
+wtF
+vxX
+vxX
+vxX
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+"}
+(178,1,1) = {"
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
+cLf
cLf
-cPl
cLf
-obA
-upd
-hkG
-hkG
-moe
-sbE
-dlE
-xjq
-mgD
-moe
-fDj
-fDj
-moe
-bwC
-cLf
-iUF
-cLf
-cLf
-cLf
-bwC
-vxX
-vxX
-nbu
-nbu
-nbu
-nbu
-nbu
-nbu
-nbu
-nbu
-nbu
-nbu
-nbu
-nbu
-nbu
-vxX
-mUQ
-cLf
-bwC
-cLf
-cLf
-cLf
-bwC
-cLf
-vxX
-vxX
-vxX
-vxX
-uFC
-uFC
-jnY
-oaG
-uFC
-oTv
-fhH
-oTv
-uFC
-oTv
-uFC
-oTv
-spw
-oTv
-uFC
-uFC
-pqJ
-uFC
-fnI
-dqK
-mlk
-dqK
-wtF
vxX
vxX
-vxX
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-"}
-(178,1,1) = {"
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
-cLf
+obA
cLf
cLf
cLf
-vxX
-vxX
obA
cLf
cLf
cLf
-obA
-vfJ
-vfJ
-vfJ
moe
fDj
fDj
@@ -151186,9 +151353,9 @@ hHw
uRG
oyP
dAq
+xbr
+qFS
wSc
-rwW
-hWN
jOV
vxX
vxX
@@ -153059,7 +153226,7 @@ vxX
gvw
gjt
jEf
-ndk
+kQV
uKv
evg
gvw
@@ -161540,7 +161707,7 @@ mGW
mGW
iZz
nHK
-eaY
+ufW
vwn
eRf
vRC
@@ -165652,7 +165819,7 @@ vDa
gMk
gMk
lAj
-oml
+mFR
kRX
hRO
ajS
@@ -170515,7 +170682,7 @@ vxX
vxX
vxX
gMk
-fJs
+vkv
vxX
dtQ
vxX
@@ -172855,7 +173022,7 @@ vHa
aWD
aWD
aWD
-rOz
+ewa
gCT
kgb
gaI
@@ -174126,7 +174293,7 @@ kHU
kHU
kHU
ouG
-lHF
+fst
dBp
bPH
dUi
@@ -174400,7 +174567,7 @@ wtH
wtH
rsw
vEq
-vPL
+rkZ
wtH
wtH
aWD
@@ -176404,7 +176571,7 @@ raz
raz
nzk
fpY
-lsx
+clQ
ssg
vtN
ylR
@@ -177695,7 +177862,7 @@ gmH
rXS
tOL
fPv
-rjv
+iAM
iFN
mZn
oND
@@ -180777,8 +180944,8 @@ fDj
wou
qSt
jYT
-hQq
-xSa
+tuT
+bRD
fDj
hhX
hhX
diff --git a/_maps/shuttles/emergency_birdshot.dmm b/_maps/shuttles/emergency_birdshot.dmm
index 20ffeb679d7d8..aef9231e620ed 100644
--- a/_maps/shuttles/emergency_birdshot.dmm
+++ b/_maps/shuttles/emergency_birdshot.dmm
@@ -99,7 +99,7 @@
pixel_x = 3;
pixel_y = 2
},
-/obj/item/clothing/mask/cigarette/dromedary{
+/obj/item/cigarette/dromedary{
pixel_x = 8;
pixel_y = 15
},
@@ -697,7 +697,7 @@
/obj/structure/window/reinforced/survival_pod/spawner/directional/north,
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell,
+/obj/item/stock_parts/power_store/cell,
/turf/open/floor/glass/reinforced,
/area/shuttle/escape)
"Id" = (
diff --git a/_maps/shuttles/emergency_cruise.dmm b/_maps/shuttles/emergency_cruise.dmm
index 7e20dc7d47d58..8045930388cef 100644
--- a/_maps/shuttles/emergency_cruise.dmm
+++ b/_maps/shuttles/emergency_cruise.dmm
@@ -1648,7 +1648,7 @@
/turf/open/floor/carpet/executive,
/area/shuttle/escape)
"Jl" = (
-/mob/living/simple_animal/bot/vibebot,
+/mob/living/basic/bot/vibebot,
/turf/open/floor/iron,
/area/shuttle/escape)
"Jo" = (
diff --git a/_maps/shuttles/emergency_delta.dmm b/_maps/shuttles/emergency_delta.dmm
index 5cca48f0d8fa3..854f76f7a154f 100644
--- a/_maps/shuttles/emergency_delta.dmm
+++ b/_maps/shuttles/emergency_delta.dmm
@@ -533,7 +533,7 @@
"bs" = (
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/effect/turf_decal/bot,
/obj/machinery/camera/autoname,
/turf/open/floor/iron,
@@ -1058,7 +1058,7 @@
"Rz" = (
/obj/structure/table/reinforced,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/shuttle/escape)
diff --git a/_maps/shuttles/emergency_kilo.dmm b/_maps/shuttles/emergency_kilo.dmm
index b8710eb116450..4ebd7843239aa 100644
--- a/_maps/shuttles/emergency_kilo.dmm
+++ b/_maps/shuttles/emergency_kilo.dmm
@@ -630,11 +630,8 @@
/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/obj/machinery/computer/security/telescreen{
- dir = 8;
- name = "Shuttle Camera Monitor";
- network = list("ss13");
- pixel_x = 26
+/obj/machinery/computer/security/telescreen/normal/directional/east{
+ name = "Shuttle Camera Monitor"
},
/turf/open/floor/mineral/plastitanium,
/area/shuttle/escape)
diff --git a/_maps/shuttles/emergency_lance.dmm b/_maps/shuttles/emergency_lance.dmm
index 56aa9fb25f5cd..c17d1767b13af 100644
--- a/_maps/shuttles/emergency_lance.dmm
+++ b/_maps/shuttles/emergency_lance.dmm
@@ -1285,7 +1285,7 @@
"Nx" = (
/obj/structure/table/reinforced,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/effect/turf_decal/tile/dark_blue/opposingcorners{
dir = 1
},
diff --git a/_maps/shuttles/emergency_medisim.dmm b/_maps/shuttles/emergency_medisim.dmm
index 4e62c20d74b65..0876b69f520f9 100644
--- a/_maps/shuttles/emergency_medisim.dmm
+++ b/_maps/shuttles/emergency_medisim.dmm
@@ -693,17 +693,7 @@
/turf/open/misc/sandy_dirt,
/area/shuttle/escape/simulation)
"Cv" = (
-/obj/machinery/drone_dispenser{
- desc = "A hefty machine that periodically creates a pair of binoculars. Really, Nanotrasen? We're getting this lazy?";
- dispense_type = /obj/item/binoculars;
- end_create_message = "dispenses a pair of binoculars.";
- glass_cost = 0;
- iron_cost = 0;
- maximum_idle = 1;
- name = "binoculars fabricator";
- energy_used = 0;
- starting_amount = 25000
- },
+/obj/machinery/drone_dispenser/binoculars,
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/escape)
"Cy" = (
diff --git a/_maps/shuttles/emergency_northstar.dmm b/_maps/shuttles/emergency_northstar.dmm
index 85b807d843157..e934a65b722fa 100644
--- a/_maps/shuttles/emergency_northstar.dmm
+++ b/_maps/shuttles/emergency_northstar.dmm
@@ -559,7 +559,7 @@
"Wd" = (
/obj/structure/table/reinforced,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/turf/open/floor/iron/smooth_large,
/area/shuttle/escape)
"Wz" = (
diff --git a/_maps/shuttles/emergency_omega.dmm b/_maps/shuttles/emergency_omega.dmm
index e3f867a613047..7a183d4ac448a 100644
--- a/_maps/shuttles/emergency_omega.dmm
+++ b/_maps/shuttles/emergency_omega.dmm
@@ -337,7 +337,7 @@
"bm" = (
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/structure/extinguisher_cabinet/directional/east,
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/bot,
diff --git a/_maps/shuttles/emergency_raven.dmm b/_maps/shuttles/emergency_raven.dmm
index ce552c3764b5d..7e3937568001f 100644
--- a/_maps/shuttles/emergency_raven.dmm
+++ b/_maps/shuttles/emergency_raven.dmm
@@ -1524,7 +1524,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/bot,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/structure/table/reinforced,
/turf/open/floor/plating,
/area/shuttle/escape)
diff --git a/_maps/shuttles/emergency_shadow.dmm b/_maps/shuttles/emergency_shadow.dmm
index 19bbf8f786e14..5afa72919cb28 100644
--- a/_maps/shuttles/emergency_shadow.dmm
+++ b/_maps/shuttles/emergency_shadow.dmm
@@ -69,10 +69,10 @@
pixel_y = 9
},
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_y = 9
},
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/effect/turf_decal/tile/neutral/opposingcorners,
/turf/open/floor/iron/dark/smooth_large,
/area/shuttle/escape)
@@ -468,7 +468,7 @@
},
/obj/item/kirbyplants/organic/plant21,
/obj/structure/sign/warning/hot_temp/directional/west,
-/obj/item/clothing/mask/cigarette/rollie/cannabis,
+/obj/item/cigarette/rollie/cannabis,
/turf/open/floor/iron/dark/textured_large,
/area/shuttle/escape)
"yg" = (
diff --git a/_maps/shuttles/emergency_wawa.dmm b/_maps/shuttles/emergency_wawa.dmm
new file mode 100644
index 0000000000000..01d03aa7c5d9c
--- /dev/null
+++ b/_maps/shuttles/emergency_wawa.dmm
@@ -0,0 +1,1101 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/template_noop,
+/area/template_noop)
+"ac" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/escape/brig)
+"ad" = (
+/obj/machinery/door/poddoor/preopen{
+ id = "dont close or i will kill you"
+ },
+/obj/machinery/door/airlock/external/glass,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "es4"
+ },
+/turf/open/floor/catwalk_floor,
+/area/shuttle/escape)
+"ae" = (
+/obj/structure/girder/reinforced,
+/obj/effect/spawner/structure/window/hollow/reinforced/middle{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"af" = (
+/obj/machinery/conveyor/auto{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"ag" = (
+/obj/structure/girder/reinforced,
+/obj/structure/window/reinforced/spawner/directional/north,
+/obj/structure/grille/broken,
+/obj/effect/decal/cleanable/glass,
+/turf/open/floor/plating,
+/area/shuttle/escape/brig)
+"ah" = (
+/obj/structure/girder/reinforced,
+/obj/effect/spawner/structure/window/hollow/reinforced/middle{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape/brig)
+"ai" = (
+/obj/structure/table,
+/obj/item/restraints/handcuffs,
+/obj/item/restraints/handcuffs,
+/obj/effect/decal/cleanable/glass,
+/obj/item/restraints/handcuffs{
+ pixel_x = 12;
+ pixel_y = 6
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/escape/brig)
+"al" = (
+/turf/closed/wall/r_wall,
+/area/shuttle/escape/brig)
+"am" = (
+/obj/structure/table,
+/obj/machinery/recharger,
+/obj/effect/decal/cleanable/blood/old,
+/obj/item/book/manual/wiki/security_space_law{
+ pixel_x = 12
+ },
+/obj/effect/decal/cleanable/glass,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/escape/brig)
+"an" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/turf_decal/siding/dark_blue{
+ dir = 5
+ },
+/turf/open/floor/iron,
+/area/shuttle/escape)
+"ao" = (
+/obj/machinery/computer/crew,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/grimy,
+/area/shuttle/escape)
+"ap" = (
+/obj/machinery/computer/emergency_shuttle,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/grimy,
+/area/shuttle/escape)
+"aq" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/escape/brig)
+"ar" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/escape/brig)
+"as" = (
+/obj/machinery/conveyor/auto{
+ dir = 8
+ },
+/obj/machinery/light/small/dim/directional/north,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"at" = (
+/obj/structure/lattice,
+/obj/structure/marker_beacon/burgundy,
+/turf/template_noop,
+/area/template_noop)
+"au" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/turf/open/floor/iron/grimy,
+/area/shuttle/escape)
+"ay" = (
+/obj/structure/girder/reinforced,
+/obj/effect/spawner/structure/window/hollow/reinforced/middle{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape/brig)
+"aA" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/engine,
+/area/shuttle/escape)
+"aC" = (
+/obj/effect/turf_decal/tile/yellow/opposingcorners{
+ dir = 8
+ },
+/obj/machinery/light/warm/directional/north,
+/obj/structure/chair/comfy/shuttle,
+/turf/open/floor/iron/checker,
+/area/shuttle/escape)
+"aE" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/obj/structure/window/spawner/directional/south,
+/turf/open/floor/iron/grimy,
+/area/shuttle/escape)
+"aG" = (
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/escape/brig)
+"aH" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron,
+/area/shuttle/escape/brig)
+"aI" = (
+/obj/machinery/door/airlock/external,
+/obj/effect/mapping_helpers/airlock/access/all/security/general,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "es1"
+ },
+/turf/open/floor/catwalk_floor,
+/area/shuttle/escape/brig)
+"aJ" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron,
+/area/shuttle/escape)
+"aK" = (
+/obj/machinery/light/small/dim/directional/north,
+/turf/open/floor/catwalk_floor,
+/area/shuttle/escape)
+"aM" = (
+/obj/machinery/light/warm/directional/north,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/chair/comfy/shuttle,
+/turf/open/floor/engine,
+/area/shuttle/escape)
+"aP" = (
+/obj/docking_port/mobile/emergency{
+ name = "Wawa stand-in emergency shuttle"
+ },
+/obj/machinery/door/airlock/external,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "es2"
+ },
+/turf/open/floor/catwalk_floor,
+/area/shuttle/escape)
+"aQ" = (
+/obj/machinery/door/airlock/external/glass,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "es2"
+ },
+/turf/open/floor/catwalk_floor,
+/area/shuttle/escape)
+"aR" = (
+/obj/machinery/conveyor/auto/inverted{
+ dir = 5
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"aV" = (
+/obj/machinery/door/poddoor/preopen{
+ id = "dont close or i will kill you"
+ },
+/obj/machinery/conveyor/auto{
+ dir = 4
+ },
+/obj/structure/fans/tiny/shield{
+ max_integrity = 400;
+ name = "recycling shield";
+ layer = 2.61
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"aW" = (
+/obj/machinery/recycler{
+ dir = 8
+ },
+/obj/machinery/conveyor/auto{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"aX" = (
+/obj/machinery/conveyor/auto,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"aY" = (
+/obj/machinery/door/airlock/external,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "es4"
+ },
+/turf/open/floor/catwalk_floor,
+/area/shuttle/escape)
+"aZ" = (
+/obj/effect/turf_decal/tile/yellow/opposingcorners{
+ dir = 8
+ },
+/turf/open/floor/iron/checker,
+/area/shuttle/escape)
+"bb" = (
+/obj/machinery/conveyor/auto,
+/obj/structure/plasticflaps/opaque,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"bc" = (
+/obj/effect/turf_decal/tile/yellow/opposingcorners{
+ dir = 8
+ },
+/obj/structure/chair/plastic{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/checker,
+/area/shuttle/escape)
+"bd" = (
+/obj/machinery/conveyor/auto{
+ dir = 10
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"be" = (
+/obj/machinery/conveyor/auto/inverted{
+ dir = 1
+ },
+/obj/structure/plasticflaps/opaque,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"bf" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/item/toy/plush/lizard_plushie,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"bg" = (
+/obj/machinery/conveyor/auto{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light/small/dim/directional/north,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"bj" = (
+/obj/effect/turf_decal/siding/dark_blue{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron,
+/area/shuttle/escape)
+"bk" = (
+/obj/machinery/power/shuttle_engine/propulsion,
+/turf/open/floor/plating/airless,
+/area/shuttle/escape)
+"bp" = (
+/obj/effect/turf_decal/tile/yellow/opposingcorners{
+ dir = 8
+ },
+/obj/structure/chair/comfy/shuttle,
+/turf/open/floor/iron/checker,
+/area/shuttle/escape)
+"bq" = (
+/turf/closed/wall/r_wall,
+/area/shuttle/escape)
+"br" = (
+/turf/closed/wall,
+/area/shuttle/escape)
+"bs" = (
+/obj/machinery/conveyor/auto{
+ dir = 1
+ },
+/obj/structure/plasticflaps/opaque,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"cH" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/structure/broken_flooring/singular{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"cY" = (
+/obj/structure/window/reinforced/spawner/directional/north,
+/obj/machinery/power/shuttle_engine/heater,
+/turf/open/floor/plating/airless,
+/area/shuttle/escape)
+"dj" = (
+/obj/machinery/conveyor/auto{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"dC" = (
+/obj/machinery/door/airlock/external/glass,
+/obj/effect/mapping_helpers/airlock/access/all/security/general,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "es1"
+ },
+/obj/structure/broken_flooring/side,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/shuttle/escape/brig)
+"dZ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/structure/chair/comfy/shuttle,
+/turf/open/floor/engine,
+/area/shuttle/escape)
+"ga" = (
+/obj/effect/turf_decal/tile/yellow/opposingcorners{
+ dir = 8
+ },
+/obj/machinery/mineral/stacking_machine{
+ input_dir = 8;
+ output_dir = 1
+ },
+/obj/structure/window/reinforced/spawner/directional/east,
+/turf/open/floor/iron/checker,
+/area/shuttle/escape)
+"gn" = (
+/obj/effect/decal/cleanable/rubble,
+/obj/effect/turf_decal/stripes/box,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"gX" = (
+/obj/effect/turf_decal/tile/yellow/opposingcorners{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/checker,
+/area/shuttle/escape)
+"hq" = (
+/obj/machinery/recycler{
+ dir = 4
+ },
+/obj/machinery/conveyor/auto{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"hV" = (
+/obj/machinery/door/airlock/external,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "es3"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/command/general,
+/turf/open/floor/catwalk_floor,
+/area/shuttle/escape)
+"iN" = (
+/obj/effect/decal/cleanable/glass,
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"jA" = (
+/obj/effect/turf_decal/tile/yellow/opposingcorners{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/checker,
+/area/shuttle/escape)
+"jK" = (
+/obj/machinery/light/small/dim/directional/south,
+/turf/open/floor/catwalk_floor,
+/area/shuttle/escape)
+"ks" = (
+/obj/structure/closet/crate/medical,
+/obj/item/storage/medkit/regular{
+ pixel_x = 2;
+ pixel_y = 3
+ },
+/obj/item/storage/medkit/fire,
+/mob/living/basic/bot/medbot/derelict,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/grimy,
+/area/shuttle/escape)
+"ld" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/escape)
+"lI" = (
+/obj/effect/turf_decal/tile/yellow/opposingcorners{
+ dir = 8
+ },
+/obj/structure/window/reinforced/spawner/directional/west,
+/obj/structure/closet/crate/preopen,
+/turf/open/floor/iron/checker,
+/area/shuttle/escape)
+"lP" = (
+/obj/machinery/vending/wallmed/directional/south,
+/turf/open/floor/catwalk_floor,
+/area/shuttle/escape)
+"mT" = (
+/obj/machinery/computer/atmos_alert{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/grimy,
+/area/shuttle/escape)
+"nN" = (
+/obj/effect/turf_decal/tile/yellow/opposingcorners{
+ dir = 8
+ },
+/obj/structure/chair/plastic,
+/turf/open/floor/iron/checker,
+/area/shuttle/escape)
+"nZ" = (
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light/warm/dim/directional/south,
+/turf/open/floor/plating,
+/area/shuttle/escape/brig)
+"oY" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/structure/chair/comfy/shuttle,
+/turf/open/floor/engine,
+/area/shuttle/escape)
+"pQ" = (
+/obj/structure/girder/reinforced,
+/obj/structure/grille/broken,
+/obj/structure/window/reinforced/spawner/directional/west,
+/obj/effect/decal/cleanable/glass,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"pW" = (
+/turf/open/floor/catwalk_floor,
+/area/shuttle/escape/brig)
+"qJ" = (
+/obj/machinery/conveyor/auto{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light/small/dim/directional/north,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"qQ" = (
+/obj/structure/girder/reinforced,
+/obj/effect/spawner/structure/window/hollow/reinforced/middle{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"rX" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/engine,
+/area/shuttle/escape)
+"sj" = (
+/obj/machinery/conveyor/auto{
+ dir = 6
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"tw" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron,
+/area/shuttle/escape)
+"tQ" = (
+/obj/effect/mapping_helpers/broken_floor,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/escape/brig)
+"uQ" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron,
+/area/shuttle/escape)
+"vz" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/glass,
+/obj/item/restraints/handcuffs,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/escape/brig)
+"wj" = (
+/obj/effect/turf_decal/tile/yellow/opposingcorners{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/mineral/stacking_unit_console{
+ pixel_y = 32
+ },
+/obj/structure/chair/comfy/shuttle,
+/turf/open/floor/iron/checker,
+/area/shuttle/escape)
+"xg" = (
+/obj/effect/spawner/structure/window/hollow/middle{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"xT" = (
+/obj/machinery/conveyor/auto{
+ dir = 8
+ },
+/obj/machinery/light/small/dim/directional/south,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"xY" = (
+/obj/machinery/conveyor/auto{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"za" = (
+/obj/machinery/conveyor/auto{
+ dir = 8
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "dont close or i will kill you"
+ },
+/obj/structure/fans/tiny/shield{
+ max_integrity = 400;
+ name = "recycling shield";
+ layer = 2.61
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"zT" = (
+/obj/effect/turf_decal/siding/dark_blue{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/item/storage/fancy/cigarettes/cigars/cohiba,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light/warm/dim/directional/south,
+/turf/open/floor/iron,
+/area/shuttle/escape)
+"Di" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"Dk" = (
+/obj/machinery/door/poddoor/preopen{
+ id = "dont close or i will kill you"
+ },
+/obj/machinery/door/airlock/external/glass,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "es3"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/command/general,
+/turf/open/floor/catwalk_floor,
+/area/shuttle/escape)
+"DT" = (
+/obj/effect/mapping_helpers/broken_floor,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/escape)
+"ER" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/escape)
+"FH" = (
+/obj/machinery/conveyor/auto{
+ dir = 4
+ },
+/obj/machinery/light/small/dim/directional/north,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"FL" = (
+/obj/machinery/computer/communications,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/grimy,
+/area/shuttle/escape)
+"Gw" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron,
+/area/shuttle/escape/brig)
+"Ic" = (
+/obj/effect/mapping_helpers/airlock/access/all/security/general,
+/obj/machinery/door/airlock/security/glass{
+ name = "Brig"
+ },
+/turf/open/floor/catwalk_floor,
+/area/shuttle/escape/brig)
+"Iw" = (
+/obj/structure/table,
+/obj/item/storage/medkit/fire,
+/obj/item/storage/medkit/regular{
+ pixel_x = 2;
+ pixel_y = 3
+ },
+/obj/item/crowbar,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/escape)
+"IR" = (
+/obj/machinery/conveyor/auto{
+ dir = 4
+ },
+/obj/machinery/light/small/dim/directional/south,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"Lq" = (
+/obj/structure/broken_flooring/pile{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light/small/dim/directional/north,
+/turf/open/floor/plating,
+/area/shuttle/escape/brig)
+"LJ" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/broken_flooring/singular{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"LQ" = (
+/obj/structure/window/spawner/directional/south,
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/turf/open/floor/iron/grimy,
+/area/shuttle/escape)
+"MN" = (
+/obj/machinery/door/airlock/command/glass{
+ name = "Cockpit"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/command/general,
+/turf/open/floor/catwalk_floor,
+/area/shuttle/escape)
+"Ne" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/escape)
+"ND" = (
+/obj/machinery/conveyor/auto/inverted{
+ dir = 9
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"NW" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/broken_flooring/pile,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"Oi" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/item/reagent_containers/pill/maintenance,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"Oq" = (
+/obj/structure/broken_flooring/pile,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"Pp" = (
+/obj/machinery/stasis,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/mineral/titanium/white,
+/area/shuttle/escape)
+"Pw" = (
+/obj/structure/lattice,
+/turf/template_noop,
+/area/template_noop)
+"QP" = (
+/obj/machinery/conveyor/auto/inverted{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"Rm" = (
+/turf/open/floor/catwalk_floor,
+/area/shuttle/escape)
+"SI" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/open/floor/iron/grimy,
+/area/shuttle/escape)
+"SX" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/grimy,
+/area/shuttle/escape)
+"Tq" = (
+/turf/closed/wall/rust,
+/area/shuttle/escape)
+"Xl" = (
+/obj/machinery/stasis,
+/obj/structure/broken_flooring/singular,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"Xw" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/obj/structure/window/spawner/directional/south,
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/escape/brig)
+"XE" = (
+/turf/open/floor/iron/grimy,
+/area/shuttle/escape)
+"Yk" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+
+(1,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+al
+al
+aI
+bq
+aP
+bq
+aa
+aa
+aa
+bq
+aV
+bq
+aV
+bq
+aa
+aa
+aa
+"}
+(2,1,1) = {"
+aa
+at
+Pw
+al
+al
+al
+al
+Lq
+pW
+bq
+jK
+bq
+qQ
+pQ
+qQ
+bq
+FH
+bq
+IR
+bq
+bq
+bq
+aa
+"}
+(3,1,1) = {"
+aa
+aa
+al
+al
+aq
+aq
+al
+dC
+al
+bq
+aQ
+bq
+LJ
+iN
+iN
+bq
+aW
+bq
+aW
+bq
+bf
+bq
+bq
+"}
+(4,1,1) = {"
+aa
+aa
+ah
+am
+ar
+aG
+Xw
+Gw
+al
+dZ
+Rm
+rX
+aJ
+NW
+Yk
+aA
+sj
+aX
+aX
+bb
+ND
+cY
+bk
+"}
+(5,1,1) = {"
+aa
+aa
+ag
+ai
+aG
+tQ
+ac
+aH
+Ic
+Rm
+Rm
+aA
+Yk
+Yk
+aJ
+rX
+jA
+gX
+bc
+br
+bg
+cY
+bk
+"}
+(6,1,1) = {"
+aa
+aa
+ah
+vz
+aG
+ar
+Xw
+nZ
+al
+oY
+Rm
+rX
+tw
+uQ
+tw
+bq
+bp
+jA
+lI
+Tq
+af
+cY
+bk
+"}
+(7,1,1) = {"
+aa
+at
+al
+al
+ay
+ay
+ay
+al
+al
+aM
+lP
+bq
+xg
+xg
+xg
+bq
+aC
+jA
+gn
+bs
+xY
+cY
+bk
+"}
+(8,1,1) = {"
+aa
+aa
+ae
+ao
+SX
+SX
+LQ
+zT
+bq
+dZ
+Rm
+aA
+Di
+cH
+ER
+bq
+wj
+aZ
+ga
+br
+dj
+cY
+bk
+"}
+(9,1,1) = {"
+aa
+aa
+ae
+ap
+au
+XE
+SX
+bj
+MN
+Rm
+Rm
+aA
+Oq
+DT
+ld
+rX
+aZ
+gX
+nN
+Tq
+qJ
+cY
+bk
+"}
+(10,1,1) = {"
+aa
+aa
+ae
+FL
+SI
+XE
+aE
+an
+bq
+oY
+Rm
+rX
+Yk
+Ne
+DT
+aA
+aR
+QP
+QP
+be
+bd
+cY
+bk
+"}
+(11,1,1) = {"
+aa
+aa
+bq
+bq
+mT
+ks
+bq
+Dk
+bq
+bq
+ad
+bq
+Xl
+Iw
+Pp
+bq
+hq
+bq
+hq
+bq
+Oi
+bq
+bq
+"}
+(12,1,1) = {"
+at
+Pw
+Pw
+bq
+bq
+bq
+bq
+aK
+Rm
+bq
+jK
+bq
+qQ
+qQ
+qQ
+bq
+as
+bq
+xT
+bq
+bq
+bq
+aa
+"}
+(13,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+bq
+bq
+hV
+bq
+aY
+bq
+aa
+aa
+aa
+bq
+za
+bq
+za
+bq
+aa
+aa
+aa
+"}
diff --git a/_maps/shuttles/emergency_zeta.dmm b/_maps/shuttles/emergency_zeta.dmm
index 399b40156ceb6..720a906a767c8 100644
--- a/_maps/shuttles/emergency_zeta.dmm
+++ b/_maps/shuttles/emergency_zeta.dmm
@@ -23,7 +23,7 @@
pixel_x = -10;
pixel_y = 6
},
-/obj/item/stock_parts/cell/infinite/abductor{
+/obj/item/stock_parts/power_store/cell/infinite/abductor{
pixel_x = 5
},
/turf/open/floor/plating/abductor,
diff --git a/_maps/shuttles/infiltrator_advanced.dmm b/_maps/shuttles/infiltrator_advanced.dmm
index c9123066874f0..9f93df25b0479 100644
--- a/_maps/shuttles/infiltrator_advanced.dmm
+++ b/_maps/shuttles/infiltrator_advanced.dmm
@@ -1219,11 +1219,11 @@
pixel_x = 32
},
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = 4;
pixel_y = 4
},
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/item/multitool,
/turf/open/floor/pod/dark,
/area/shuttle/syndicate/armory)
diff --git a/_maps/shuttles/infiltrator_basic.dmm b/_maps/shuttles/infiltrator_basic.dmm
index 31b85a89f2cd9..805f9053e2476 100644
--- a/_maps/shuttles/infiltrator_basic.dmm
+++ b/_maps/shuttles/infiltrator_basic.dmm
@@ -462,11 +462,11 @@
/area/shuttle/syndicate/medical)
"ce" = (
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = -3;
pixel_y = 3
},
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/structure/extinguisher_cabinet/directional/west,
/obj/structure/table/reinforced/plastitaniumglass,
/obj/effect/turf_decal/tile/yellow{
diff --git a/_maps/shuttles/mining_kilo.dmm b/_maps/shuttles/mining_kilo.dmm
index 3352abdf14d5a..f52a5c947f3e6 100644
--- a/_maps/shuttles/mining_kilo.dmm
+++ b/_maps/shuttles/mining_kilo.dmm
@@ -102,7 +102,7 @@
/area/shuttle/mining/large)
"p" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/item/screwdriver{
pixel_y = 18
},
diff --git a/_maps/shuttles/mining_large.dmm b/_maps/shuttles/mining_large.dmm
index 3be1c617cfc92..56cf2ef7d3333 100644
--- a/_maps/shuttles/mining_large.dmm
+++ b/_maps/shuttles/mining_large.dmm
@@ -128,7 +128,7 @@
"p" = (
/obj/structure/table/reinforced,
/obj/effect/decal/cleanable/dirt,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/item/screwdriver{
pixel_y = 18
},
diff --git a/_maps/shuttles/pirate_default.dmm b/_maps/shuttles/pirate_default.dmm
index 0f588e1df27bc..b60aae281e0f8 100644
--- a/_maps/shuttles/pirate_default.dmm
+++ b/_maps/shuttles/pirate_default.dmm
@@ -451,7 +451,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/turf/open/floor/pod/light,
/area/shuttle/pirate)
"bm" = (
@@ -475,7 +475,7 @@
pixel_x = 6;
pixel_y = 12
},
-/obj/item/clothing/mask/cigarette/cigar,
+/obj/item/cigarette/cigar,
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/wood,
diff --git a/_maps/shuttles/pirate_dutchman.dmm b/_maps/shuttles/pirate_dutchman.dmm
index fb36638173ed1..b599698bc6f5c 100644
--- a/_maps/shuttles/pirate_dutchman.dmm
+++ b/_maps/shuttles/pirate_dutchman.dmm
@@ -618,7 +618,7 @@
pixel_x = -4;
pixel_y = 12
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 4
},
/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{
diff --git a/_maps/shuttles/pirate_ex_interdyne.dmm b/_maps/shuttles/pirate_ex_interdyne.dmm
index 77f5ddecaab1c..e5e576e3d65f9 100644
--- a/_maps/shuttles/pirate_ex_interdyne.dmm
+++ b/_maps/shuttles/pirate_ex_interdyne.dmm
@@ -154,7 +154,7 @@
/area/shuttle/pirate)
"aD" = (
/obj/machinery/power/apc/auto_name/directional/north{
- cell_type = /obj/item/stock_parts/cell/bluespace;
+ cell_type = /obj/item/stock_parts/power_store/battery/bluespace;
start_charge = 100
},
/obj/effect/mapping_helpers/apc/cut_AI_wire,
diff --git a/_maps/shuttles/pirate_geode.dmm b/_maps/shuttles/pirate_geode.dmm
index 3a75c42779401..afb582e432203 100644
--- a/_maps/shuttles/pirate_geode.dmm
+++ b/_maps/shuttles/pirate_geode.dmm
@@ -237,9 +237,9 @@
},
/obj/structure/table/wood,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/turf/open/floor/plating,
/area/shuttle/pirate)
"oa" = (
diff --git a/_maps/shuttles/pirate_grey.dmm b/_maps/shuttles/pirate_grey.dmm
index 522576fdf0264..23bc06b5dc922 100644
--- a/_maps/shuttles/pirate_grey.dmm
+++ b/_maps/shuttles/pirate_grey.dmm
@@ -861,7 +861,7 @@
/area/shuttle/pirate)
"Bu" = (
/obj/machinery/power/apc/auto_name/directional/north{
- cell_type = /obj/item/stock_parts/cell/bluespace
+ cell_type = /obj/item/stock_parts/power_store/battery/bluespace
},
/obj/structure/reagent_dispensers/watertank,
/obj/effect/turf_decal/bot,
@@ -927,7 +927,7 @@
"De" = (
/obj/structure/table/reinforced,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/machinery/airalarm/directional/east,
/turf/open/floor/plating,
/area/shuttle/pirate)
diff --git a/_maps/shuttles/pirate_irs.dmm b/_maps/shuttles/pirate_irs.dmm
index c352bb02c3e82..e01639a9a9fe6 100644
--- a/_maps/shuttles/pirate_irs.dmm
+++ b/_maps/shuttles/pirate_irs.dmm
@@ -281,7 +281,7 @@
pixel_x = -9;
pixel_y = -4
},
-/obj/item/stock_parts/cell/lead{
+/obj/item/stock_parts/power_store/cell/lead{
pixel_y = -8;
pixel_x = 2
},
diff --git a/_maps/shuttles/ruin_cyborg_mothership.dmm b/_maps/shuttles/ruin_cyborg_mothership.dmm
index cb12e49ee631c..8ee4eb11a6a32 100644
--- a/_maps/shuttles/ruin_cyborg_mothership.dmm
+++ b/_maps/shuttles/ruin_cyborg_mothership.dmm
@@ -59,7 +59,7 @@
pixel_y = 10
},
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/turf/open/floor/circuit/green/airless,
/area/shuttle/ruin/cyborg_mothership)
"eO" = (
diff --git a/_maps/shuttles/ruin_pirate_cutter.dmm b/_maps/shuttles/ruin_pirate_cutter.dmm
index 2777f06ce8cbd..422d5bfb2cdd5 100644
--- a/_maps/shuttles/ruin_pirate_cutter.dmm
+++ b/_maps/shuttles/ruin_pirate_cutter.dmm
@@ -266,7 +266,7 @@
/obj/structure/table,
/obj/machinery/cell_charger,
/obj/item/stack/cable_coil,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/effect/turf_decal/bot,
/turf/open/floor/plating,
/area/shuttle/ruin/caravan/pirate)
diff --git a/_maps/shuttles/whiteship_birdshot.dmm b/_maps/shuttles/whiteship_birdshot.dmm
index b6bb7f6155bb7..f6b31535db634 100644
--- a/_maps/shuttles/whiteship_birdshot.dmm
+++ b/_maps/shuttles/whiteship_birdshot.dmm
@@ -26,9 +26,6 @@
/obj/machinery/meter,
/turf/open/floor/catwalk_floor,
/area/shuttle/abandoned/engine)
-"bp" = (
-/turf/closed/wall/mineral/titanium/overspace,
-/area/shuttle/abandoned/engine)
"bq" = (
/obj/effect/turf_decal/siding/thinplating/dark{
dir = 1
@@ -181,11 +178,12 @@
/obj/machinery/porta_turret/centcom_shuttle/weak{
dir = 4
},
-/turf/closed/wall/mineral/titanium/overspace,
+/turf/closed/wall/mineral/titanium,
/area/shuttle/abandoned/crew)
"gj" = (
/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{
- dir = 1
+ dir = 1;
+ x_offset = 4
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark/small,
@@ -339,9 +337,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/iron/smooth_large,
/area/shuttle/abandoned/cargo)
-"ma" = (
-/turf/closed/wall/mineral/titanium/overspace,
-/area/shuttle/abandoned/cargo)
"mU" = (
/obj/structure/toilet{
pixel_y = 8
@@ -538,7 +533,7 @@
/turf/open/floor/iron/small,
/area/shuttle/abandoned/medbay)
"ry" = (
-/turf/closed/wall/mineral/titanium/overspace,
+/turf/closed/wall/mineral/titanium,
/area/shuttle/abandoned/bar)
"rO" = (
/obj/effect/decal/cleanable/dirt,
@@ -598,9 +593,6 @@
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/catwalk_floor,
/area/shuttle/abandoned/engine)
-"uk" = (
-/turf/closed/wall/mineral/titanium/overspace,
-/area/shuttle/abandoned/pod)
"ur" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -1033,7 +1025,7 @@
pixel_x = 4;
pixel_y = 11
},
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = 4;
pixel_y = 11
},
@@ -1170,7 +1162,7 @@
/obj/machinery/porta_turret/centcom_shuttle/weak{
dir = 4
},
-/turf/closed/wall/mineral/titanium/overspace,
+/turf/closed/wall/mineral/titanium,
/area/shuttle/abandoned/pod)
"Ll" = (
/obj/structure/cable,
@@ -1199,7 +1191,7 @@
/obj/machinery/cell_charger{
pixel_y = 11
},
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_y = 11
},
/obj/item/stack/cable_coil{
@@ -1277,7 +1269,7 @@
/obj/machinery/porta_turret/centcom_shuttle/weak{
dir = 4
},
-/turf/closed/wall/mineral/titanium/overspace,
+/turf/closed/wall/mineral/titanium,
/area/shuttle/abandoned/bridge)
"Ql" = (
/obj/effect/decal/cleanable/dirt,
@@ -1448,9 +1440,6 @@
/obj/machinery/light/built/directional/west,
/turf/open/floor/carpet/green,
/area/shuttle/abandoned/bar)
-"WG" = (
-/turf/closed/wall/mineral/titanium/overspace,
-/area/shuttle/abandoned/bridge)
"WW" = (
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 4
@@ -1538,9 +1527,9 @@
(1,1,1) = {"
lt
lt
-bp
+Gi
BH
-bp
+Gi
lt
lt
lt
@@ -1552,15 +1541,15 @@ lt
lt
lt
lt
-bp
+Gi
BH
-bp
+Gi
lt
lt
"}
(2,1,1) = {"
lt
-bp
+Gi
Om
oe
Gi
@@ -1578,7 +1567,7 @@ BH
Gi
oe
Om
-bp
+Gi
lt
"}
(3,1,1) = {"
@@ -1588,7 +1577,7 @@ Wu
RH
Gi
oe
-bp
+Gi
lt
lt
lt
@@ -1596,7 +1585,7 @@ lt
lt
lt
lt
-bp
+Gi
oe
Gi
qn
@@ -1674,7 +1663,7 @@ Gi
lt
"}
(7,1,1) = {"
-ma
+Tg
kQ
DK
er
@@ -1694,7 +1683,7 @@ uF
uF
BR
kQ
-ma
+Tg
"}
(8,1,1) = {"
kQ
@@ -1928,7 +1917,7 @@ lt
"}
(18,1,1) = {"
lt
-uk
+PN
pv
pv
pv
@@ -1946,7 +1935,7 @@ KR
JP
JP
JP
-WG
+XB
lt
"}
(19,1,1) = {"
@@ -2021,7 +2010,7 @@ lt
(22,1,1) = {"
lt
lt
-uk
+PN
pv
xr
qO
@@ -2032,12 +2021,12 @@ lt
lt
lt
lt
-WG
+XB
JP
Hk
Bs
JP
-WG
+XB
lt
lt
"}
@@ -2045,7 +2034,7 @@ lt
lt
lt
lt
-uk
+PN
BZ
BZ
Lj
@@ -2059,7 +2048,7 @@ lt
Qf
YJ
YJ
-WG
+XB
lt
lt
lt
diff --git a/_maps/shuttles/whiteship_cere.dmm b/_maps/shuttles/whiteship_cere.dmm
index 4e53e54651e16..df697dc1739c1 100644
--- a/_maps/shuttles/whiteship_cere.dmm
+++ b/_maps/shuttles/whiteship_cere.dmm
@@ -502,7 +502,7 @@
/obj/structure/table/reinforced/titaniumglass,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/turf/open/floor/catwalk_floor/iron_dark,
/area/shuttle/abandoned/cargo)
"wN" = (
@@ -685,7 +685,9 @@
"Hw" = (
/obj/machinery/light/small/directional/east,
/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{
- dir = 1
+ dir = 1;
+ x_offset = 0;
+ y_offset = 10
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark,
diff --git a/_maps/shuttles/whiteship_delta.dmm b/_maps/shuttles/whiteship_delta.dmm
index 53e09ce34d3c8..efc2302379730 100644
--- a/_maps/shuttles/whiteship_delta.dmm
+++ b/_maps/shuttles/whiteship_delta.dmm
@@ -1168,7 +1168,7 @@
/obj/structure/table,
/obj/machinery/cell_charger,
/obj/item/stack/cable_coil,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/item/multitool{
pixel_y = -13
},
@@ -1819,7 +1819,7 @@
pixel_x = -3;
pixel_y = 8
},
-/obj/item/stock_parts/cell/high{
+/obj/item/stock_parts/power_store/cell/high{
pixel_x = 3;
pixel_y = -1
},
diff --git a/_maps/shuttles/whiteship_donut.dmm b/_maps/shuttles/whiteship_donut.dmm
index ff9d17b5e36b1..daf150b4cdf2f 100644
--- a/_maps/shuttles/whiteship_donut.dmm
+++ b/_maps/shuttles/whiteship_donut.dmm
@@ -55,7 +55,7 @@
/area/shuttle/abandoned)
"cm" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/turf/open/floor/iron/airless,
/area/shuttle/abandoned)
"da" = (
@@ -389,7 +389,7 @@
/area/shuttle/abandoned)
"NG" = (
/obj/effect/decal/cleanable/dirt,
-/obj/item/stock_parts/cell/high/empty,
+/obj/item/stock_parts/power_store/cell/high/empty,
/turf/open/floor/plating/airless,
/area/shuttle/abandoned)
"Ot" = (
@@ -468,7 +468,9 @@
/area/shuttle/abandoned)
"XY" = (
/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{
- dir = 1
+ dir = 1;
+ x_offset = 0;
+ y_offset = 9
},
/obj/effect/decal/cleanable/dirt,
/obj/item/disk/holodisk/donutstation/whiteship,
diff --git a/_maps/shuttles/whiteship_kilo.dmm b/_maps/shuttles/whiteship_kilo.dmm
index cbc214f21d828..3dda9d34da2a1 100644
--- a/_maps/shuttles/whiteship_kilo.dmm
+++ b/_maps/shuttles/whiteship_kilo.dmm
@@ -207,7 +207,7 @@
/obj/machinery/power/shuttle_engine/propulsion/left{
dir = 8
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/shuttle/abandoned/engine)
"jM" = (
/obj/structure/table,
@@ -249,8 +249,8 @@
launch_status = 0;
movement_force = list("KNOCKDOWN"=0,"THROW"=0);
name = "Mining Shuttle";
- port_direction = 4;
- preferred_direction = 8
+ port_direction = 8;
+ preferred_direction = 4
},
/turf/open/floor/plating,
/area/shuttle/abandoned/cargo)
@@ -327,7 +327,7 @@
/obj/machinery/power/shuttle_engine/propulsion{
dir = 8
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/shuttle/abandoned/engine)
"nt" = (
/obj/effect/turf_decal/stripes/line{
@@ -355,7 +355,7 @@
/obj/machinery/power/shuttle_engine/propulsion/right{
dir = 8
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/shuttle/abandoned/bar)
"pI" = (
/obj/effect/turf_decal/delivery,
@@ -416,7 +416,7 @@
/obj/machinery/power/shuttle_engine/propulsion/right{
dir = 8
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/shuttle/abandoned/engine)
"rX" = (
/obj/effect/decal/cleanable/dirt,
@@ -570,7 +570,7 @@
/obj/machinery/cell_charger,
/obj/structure/table,
/obj/effect/decal/cleanable/dirt,
-/obj/item/stock_parts/cell/emproof/empty{
+/obj/item/stock_parts/power_store/cell/emproof/empty{
pixel_y = 7;
pixel_x = 5
},
@@ -868,7 +868,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/shuttle/abandoned/engine)
"Nh" = (
/turf/closed/wall/mineral/plastitanium,
@@ -909,7 +909,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/shuttle/abandoned/bar)
"Pe" = (
/obj/machinery/button/door/directional/north{
@@ -931,7 +931,7 @@
/obj/machinery/power/shuttle_engine/propulsion/left{
dir = 8
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/shuttle/abandoned/bar)
"PR" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{
@@ -1031,7 +1031,9 @@
},
/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{
dir = 4;
- view_range = 14
+ view_range = 14;
+ y_offset = 5;
+ x_offset = 0
},
/obj/effect/turf_decal/stripes/corner{
dir = 8
diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm
index c01d6742975ab..9939b4b55ff87 100644
--- a/_maps/shuttles/whiteship_meta.dmm
+++ b/_maps/shuttles/whiteship_meta.dmm
@@ -792,7 +792,7 @@
pixel_x = 2;
pixel_y = 6
},
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/turf/open/floor/iron/dark,
/area/shuttle/abandoned/engine)
"cy" = (
@@ -836,7 +836,7 @@
/obj/machinery/light/small/built/directional/west,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/item/radio/off{
pixel_x = 6;
pixel_y = 7
@@ -1000,7 +1000,7 @@
/obj/structure/table,
/obj/machinery/cell_charger,
/obj/item/stack/cable_coil,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/item/multitool,
/obj/structure/cable,
/turf/open/floor/plating,
@@ -1933,7 +1933,7 @@
/obj/item/stack/cable_coil{
pixel_x = 2
},
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/shuttle/abandoned/cargo)
diff --git a/_maps/shuttles/whiteship_obelisk.dmm b/_maps/shuttles/whiteship_obelisk.dmm
index 4b8eb9ee91b84..0f1e07b1a213e 100644
--- a/_maps/shuttles/whiteship_obelisk.dmm
+++ b/_maps/shuttles/whiteship_obelisk.dmm
@@ -206,7 +206,7 @@
/obj/machinery/power/shuttle_engine/propulsion/left{
dir = 4
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/shuttle/abandoned/engine)
"mQ" = (
/obj/structure/cable,
@@ -271,14 +271,14 @@
dir = 4
},
/obj/structure/window/reinforced/spawner/directional/west,
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/shuttle/abandoned/engine)
"ot" = (
/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{
dir = 4;
view_range = 14;
- x_offset = -3;
- y_offset = -3
+ x_offset = -2;
+ y_offset = -7
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/dark_blue/anticorner{
@@ -438,7 +438,7 @@
/obj/effect/turf_decal/stripes{
dir = 4
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/shuttle/abandoned/engine)
"zj" = (
/obj/structure/cable,
@@ -699,7 +699,7 @@
/obj/machinery/power/shuttle_engine/propulsion/right{
dir = 4
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/shuttle/abandoned/engine)
"PR" = (
/obj/structure/table/wood,
diff --git a/_maps/shuttles/whiteship_personalshuttle.dmm b/_maps/shuttles/whiteship_personalshuttle.dmm
index 8e041082bc6d9..7666f6c63add1 100644
--- a/_maps/shuttles/whiteship_personalshuttle.dmm
+++ b/_maps/shuttles/whiteship_personalshuttle.dmm
@@ -90,7 +90,7 @@
/obj/machinery/power/shuttle_engine/propulsion/right{
dir = 1
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/shuttle/abandoned/engine)
"cM" = (
/turf/template_noop,
@@ -100,7 +100,7 @@
dir = 1
},
/obj/structure/window/reinforced/spawner/directional/south,
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/shuttle/abandoned/engine)
"cY" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
@@ -372,9 +372,8 @@
"DT" = (
/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{
dir = 1;
- view_range = 14;
- x_offset = -3;
- y_offset = -3
+ x_offset = 0;
+ y_offset = -5
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/mineral/plastitanium,
@@ -523,7 +522,7 @@
/obj/machinery/power/shuttle_engine/propulsion/left{
dir = 1
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/shuttle/abandoned/engine)
"WL" = (
/obj/machinery/light/cold/no_nightlight/directional/west,
diff --git a/_maps/shuttles/whiteship_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm
index 807d1385899ab..db7f00e5149c6 100644
--- a/_maps/shuttles/whiteship_pubby.dmm
+++ b/_maps/shuttles/whiteship_pubby.dmm
@@ -271,7 +271,7 @@
"lV" = (
/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{
y_offset = 2;
- x_offset = -7
+ x_offset = -8
},
/obj/effect/decal/cleanable/cobweb/cobweb2,
/obj/effect/decal/cleanable/dirt,
@@ -406,7 +406,7 @@
"qS" = (
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/effect/turf_decal/bot_white,
/obj/effect/turf_decal/siding/purple{
dir = 9
@@ -550,7 +550,7 @@
shuttle_id = "whiteship";
launch_status = 0;
name = "White Ship";
- port_direction = 2
+ port_direction = 4
},
/turf/open/floor/plating,
/area/shuttle/abandoned)
diff --git a/_maps/shuttles/whiteship_tram.dmm b/_maps/shuttles/whiteship_tram.dmm
index 0dfa8b414bdd6..7666e2c70ac85 100644
--- a/_maps/shuttles/whiteship_tram.dmm
+++ b/_maps/shuttles/whiteship_tram.dmm
@@ -500,7 +500,7 @@
/obj/structure/cable,
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/item/multitool{
pixel_x = 7;
pixel_y = 5
@@ -1164,7 +1164,9 @@
/area/shuttle/abandoned/cargo)
"Ft" = (
/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{
- dir = 8
+ dir = 8;
+ x_offset = 0;
+ y_offset = 13
},
/obj/effect/turf_decal/stripes/white/corner{
dir = 1
diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm
index 001a937e97b3b..dae5d84a869b4 100644
--- a/_maps/templates/battlecruiser_starfury.dmm
+++ b/_maps/templates/battlecruiser_starfury.dmm
@@ -645,14 +645,6 @@
},
/turf/open/floor/iron/dark,
/area/shuttle/sbc_starfury)
-"cy" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/siding/thinplating_new/dark,
-/obj/effect/turf_decal/stripes/red/line,
-/turf/open/floor/mineral/plastitanium/red,
-/area/shuttle/sbc_starfury)
"cz" = (
/obj/machinery/newscaster/directional/south,
/obj/structure/table/reinforced/plastitaniumglass,
@@ -1592,6 +1584,15 @@
/obj/machinery/door/airlock/multi_tile/public/glass,
/turf/open/floor/pod/light,
/area/shuttle/sbc_starfury)
+"fE" = (
+/obj/structure/table/reinforced,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/shuttle/sbc_starfury)
"fF" = (
/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
/obj/machinery/door/firedoor/heavy,
@@ -1614,6 +1615,14 @@
/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
/turf/open/floor/iron/showroomfloor,
/area/shuttle/sbc_starfury)
+"fR" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/obj/effect/turf_decal/stripes/red/line,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/sbc_starfury)
"fS" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -1732,19 +1741,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/shuttle/sbc_starfury)
-"gN" = (
-/obj/structure/table,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/structure/cable,
-/obj/effect/turf_decal/siding/thinplating_new/dark{
- dir = 8
- },
-/obj/effect/turf_decal/stripes/red/line{
- dir = 8
- },
-/turf/open/floor/mineral/plastitanium/red,
-/area/shuttle/sbc_starfury)
"gO" = (
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 8
@@ -2258,21 +2254,6 @@
/obj/structure/extinguisher_cabinet/directional/east,
/turf/open/floor/pod/light,
/area/shuttle/sbc_starfury)
-"ic" = (
-/obj/machinery/computer/security/telescreen/entertainment{
- pixel_x = -31
- },
-/obj/item/book/manual/wiki/barman_recipes,
-/obj/item/reagent_containers/cup/glass/shaker{
- pixel_x = 10
- },
-/obj/structure/table/reinforced/plastitaniumglass,
-/obj/effect/turf_decal/siding/dark{
- dir = 1
- },
-/obj/effect/turf_decal/tile/bar,
-/turf/open/floor/iron/dark,
-/area/shuttle/sbc_starfury)
"id" = (
/obj/item/toy/cards/deck/syndicate{
pixel_x = -6;
@@ -2537,7 +2518,7 @@
pixel_x = -5;
pixel_y = 2
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 5;
pixel_y = 7
},
@@ -3276,15 +3257,6 @@
/obj/machinery/light/small/red/directional/north,
/turf/open/floor/plating,
/area/shuttle/sbc_starfury)
-"lg" = (
-/obj/structure/table/reinforced,
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{
- dir = 8
- },
-/turf/open/floor/iron,
-/area/shuttle/sbc_starfury)
"lh" = (
/obj/effect/turf_decal/tile/yellow{
dir = 8
@@ -4577,6 +4549,19 @@
/obj/structure/cable,
/turf/open/floor/iron/dark/textured,
/area/shuttle/sbc_starfury)
+"Dy" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/sbc_starfury)
"Dz" = (
/obj/item/crowbar/red,
/obj/structure/cable,
@@ -5088,17 +5073,6 @@
/obj/machinery/light/small/red/directional/north,
/turf/open/floor/plating,
/area/shuttle/sbc_starfury)
-"MQ" = (
-/obj/structure/closet/crate,
-/obj/item/stock_parts/cell/high,
-/obj/item/stock_parts/cell/high{
- pixel_x = -3;
- pixel_y = -3
- },
-/obj/item/inducer/syndicate,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/shuttle/sbc_starfury)
"MR" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -5371,6 +5345,19 @@
/obj/machinery/firealarm/directional/south,
/turf/open/floor/engine,
/area/shuttle/sbc_starfury)
+"RX" = (
+/obj/item/book/manual/wiki/barman_recipes,
+/obj/item/reagent_containers/cup/glass/shaker{
+ pixel_x = 10
+ },
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/effect/turf_decal/siding/dark{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/machinery/computer/security/telescreen/entertainment/directional/west,
+/turf/open/floor/iron/dark,
+/area/shuttle/sbc_starfury)
"Sb" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/centcom{
@@ -5631,6 +5618,17 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark/side,
/area/shuttle/sbc_starfury)
+"WI" = (
+/obj/structure/closet/crate,
+/obj/item/stock_parts/power_store/cell/high,
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_x = -3;
+ pixel_y = -3
+ },
+/obj/item/inducer/syndicate,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/shuttle/sbc_starfury)
"WV" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
@@ -6066,7 +6064,7 @@ ce
ae
hd
hD
-ic
+RX
iq
iy
ae
@@ -6486,7 +6484,7 @@ Jf
ae
kz
kO
-lg
+fE
ae
ae
Fc
@@ -6720,7 +6718,7 @@ ay
ag
dY
UB
-cy
+fR
ec
eB
aH
@@ -7286,7 +7284,7 @@ ST
ae
ae
gB
-gN
+Dy
gY
Fl
hS
@@ -7772,7 +7770,7 @@ mQ
ae
nR
Xr
-MQ
+WI
ae
ko
ae
diff --git a/_maps/templates/holodeck_lounge.dmm b/_maps/templates/holodeck_lounge.dmm
index 3807be667cbf9..defc5771555d5 100644
--- a/_maps/templates/holodeck_lounge.dmm
+++ b/_maps/templates/holodeck_lounge.dmm
@@ -43,7 +43,7 @@
/area/template_noop)
"h" = (
/obj/structure/table/wood,
-/obj/item/clothing/mask/cigarette/pipe,
+/obj/item/cigarette/pipe,
/obj/effect/holodeck_effect/random_book,
/turf/open/floor/holofloor/carpet,
/area/template_noop)
@@ -256,7 +256,7 @@
/area/template_noop)
"T" = (
/obj/structure/table/wood/poker,
-/obj/item/clothing/mask/cigarette/pipe,
+/obj/item/cigarette/pipe,
/turf/open/floor/holofloor{
dir = 9;
icon_state = "wood"
diff --git a/_maps/templates/lazy_templates/nukie_base.dmm b/_maps/templates/lazy_templates/nukie_base.dmm
index febfc926cdc0e..bc136b886becf 100644
--- a/_maps/templates/lazy_templates/nukie_base.dmm
+++ b/_maps/templates/lazy_templates/nukie_base.dmm
@@ -2590,7 +2590,7 @@
pixel_x = 3;
pixel_y = 6
},
-/obj/item/clothing/mask/cigarette/robust{
+/obj/item/cigarette/robust{
pixel_x = -4;
pixel_y = 1
},
diff --git a/_maps/templates/lazy_templates/wizard_den.dmm b/_maps/templates/lazy_templates/wizard_den.dmm
index 472dde511c475..2415fe227c6b0 100644
--- a/_maps/templates/lazy_templates/wizard_den.dmm
+++ b/_maps/templates/lazy_templates/wizard_den.dmm
@@ -46,7 +46,7 @@
/area/centcom/wizard_station)
"dr" = (
/obj/structure/table/wood,
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_y = -9;
pixel_x = -5
},
diff --git a/_maps/virtual_domains/abductor_ship.dmm b/_maps/virtual_domains/abductor_ship.dmm
index ebb4a042bb97b..35bf563eb45c4 100644
--- a/_maps/virtual_domains/abductor_ship.dmm
+++ b/_maps/virtual_domains/abductor_ship.dmm
@@ -153,7 +153,7 @@
"sv" = (
/obj/structure/table/abductor,
/obj/item/crowbar/abductor,
-/obj/item/stock_parts/cell/infinite/abductor{
+/obj/item/stock_parts/power_store/cell/infinite/abductor{
pixel_x = 5;
pixel_y = -3
},
diff --git a/_maps/virtual_domains/fredingtonfastingbear.dmm b/_maps/virtual_domains/fredingtonfastingbear.dmm
index a9118edf73487..4da8210c90e1a 100644
--- a/_maps/virtual_domains/fredingtonfastingbear.dmm
+++ b/_maps/virtual_domains/fredingtonfastingbear.dmm
@@ -535,6 +535,10 @@
},
/turf/open/floor/iron/kitchen,
/area/ruin/space/has_grav/powered/virtual_domain)
+"Ak" = (
+/obj/effect/landmark/bitrunning/cache_spawn,
+/turf/open/floor/iron/kitchen,
+/area/ruin/space/has_grav/powered/virtual_domain)
"AF" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/cup/glass/bottle/goldschlager{
@@ -594,7 +598,7 @@
/turf/open/floor/iron/kitchen,
/area/ruin/space/has_grav/powered/virtual_domain)
"DV" = (
-/obj/machinery/door,
+/obj/machinery/door/airlock,
/turf/open/floor/iron/cafeteria,
/area/virtual_domain/protected_space/fullbright)
"EO" = (
@@ -633,6 +637,7 @@
"Gn" = (
/obj/machinery/light/built/directional/east,
/obj/effect/decal/cleanable/food/tomato_smudge,
+/obj/effect/landmark/bitrunning/cache_spawn,
/turf/open/floor/iron/kitchen/small,
/area/ruin/space/has_grav/powered/virtual_domain)
"GD" = (
@@ -947,7 +952,7 @@
/area/ruin/space/has_grav/powered/virtual_domain)
"VS" = (
/obj/structure/table/reinforced,
-/obj/machinery/computer/camera_advanced,
+/obj/item/modular_computer/laptop/preset/civilian,
/turf/open/floor/iron/cafeteria,
/area/virtual_domain/protected_space/fullbright)
"VW" = (
@@ -2802,7 +2807,7 @@ Cm
Ne
Ne
ve
-Ux
+Ak
Ux
Ux
Ux
diff --git a/_maps/virtual_domains/pirates.dmm b/_maps/virtual_domains/pirates.dmm
index 28e64519e5738..5ad9c23595d64 100644
--- a/_maps/virtual_domains/pirates.dmm
+++ b/_maps/virtual_domains/pirates.dmm
@@ -186,7 +186,7 @@
/obj/item/melee/energy/sword/pirate{
pixel_y = 10
},
-/obj/item/clothing/mask/cigarette/cigar{
+/obj/item/cigarette/cigar{
pixel_x = 4
},
/obj/item/lighter{
diff --git a/_maps/virtual_domains/starfront_saloon.dmm b/_maps/virtual_domains/starfront_saloon.dmm
deleted file mode 100644
index 277382b6dbbf2..0000000000000
--- a/_maps/virtual_domains/starfront_saloon.dmm
+++ /dev/null
@@ -1,1834 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"ae" = (
-/obj/item/kirbyplants/random,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"cK" = (
-/obj/effect/landmark/bitrunning/mob_segment,
-/turf/template_noop,
-/area/virtual_domain)
-"cU" = (
-/turf/template_noop,
-/area/virtual_domain/safehouse)
-"df" = (
-/obj/effect/spawner/random/vending/snackvend,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"do" = (
-/obj/effect/spawner/random/trash/garbage,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"eU" = (
-/obj/effect/spawner/random/structure/crate,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"gh" = (
-/obj/effect/spawner/random/vending/colavend,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"hz" = (
-/obj/item/clothing/head/cowboy,
-/obj/item/clothing/head/cowboy,
-/obj/item/clothing/head/cowboy,
-/obj/structure/closet,
-/turf/template_noop,
-/area/virtual_domain/safehouse)
-"il" = (
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"it" = (
-/obj/modular_map_root/generic{
- key = "station_medium"
- },
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"iJ" = (
-/obj/machinery/light/directional/south,
-/obj/effect/spawner/random/structure/table,
-/obj/effect/spawner/random/entertainment/plushie,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"iO" = (
-/obj/effect/spawner/random/structure/crate,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"jt" = (
-/obj/item/gun/energy/marksman_revolver{
- pixel_x = 8;
- pixel_y = 4
- },
-/obj/item/gun/energy/marksman_revolver{
- pixel_x = 4
- },
-/obj/item/gun/energy/marksman_revolver{
- pixel_x = -4;
- pixel_y = -4
- },
-/obj/structure/table,
-/turf/template_noop,
-/area/virtual_domain/safehouse)
-"ma" = (
-/obj/machinery/light/directional/south,
-/obj/effect/spawner/random/structure/table,
-/obj/effect/spawner/random/decoration/generic,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"mq" = (
-/obj/effect/baseturf_helper/virtual_domain,
-/turf/closed/indestructible/binary,
-/area/virtual_domain)
-"mu" = (
-/turf/closed/wall,
-/area/virtual_domain)
-"on" = (
-/obj/structure/table/greyscale,
-/obj/machinery/recharger{
- pixel_x = 8;
- pixel_y = 4
- },
-/obj/machinery/recharger{
- pixel_x = -8;
- pixel_y = 4
- },
-/turf/template_noop,
-/area/virtual_domain/safehouse)
-"oR" = (
-/obj/effect/spawner/random/structure/chair_maintenance{
- dir = 8
- },
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"po" = (
-/obj/effect/baseturf_helper/virtual_domain,
-/obj/modular_map_root/safehouse{
- key = "den"
- },
-/turf/template_noop,
-/area/virtual_domain/safehouse)
-"sX" = (
-/obj/effect/spawner/random/decoration/statue,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"uW" = (
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"ve" = (
-/obj/effect/spawner/random/trash/graffiti,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"wB" = (
-/obj/effect/spawner/random/engineering/tank,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"wK" = (
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"yF" = (
-/obj/machinery/light/directional/south,
-/obj/effect/spawner/random/structure/table,
-/obj/effect/spawner/random/food_or_drink/snack,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"zU" = (
-/obj/machinery/light/directional/south,
-/obj/effect/spawner/random/structure/table,
-/obj/effect/turf_decal/tile/dark_red/half,
-/obj/machinery/recharger{
- pixel_x = 8;
- pixel_y = 4
- },
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Au" = (
-/obj/effect/spawner/random/trash/garbage,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"AF" = (
-/obj/effect/turf_decal/tile/dark_red/half,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Bi" = (
-/obj/effect/spawner/random/structure/chair_maintenance{
- dir = 4
- },
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"BX" = (
-/obj/effect/spawner/random/trash/graffiti,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Ey" = (
-/obj/machinery/light/directional/south,
-/obj/effect/spawner/random/structure/table,
-/obj/effect/spawner/random/decoration/ornament,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"EK" = (
-/obj/effect/spawner/random/structure/chair_maintenance{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Gz" = (
-/obj/effect/spawner/random/structure/crate,
-/obj/effect/turf_decal/tile/dark_red/half,
-/obj/effect/spawner/random/armory/shotgun,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"GY" = (
-/obj/effect/spawner/random/entertainment/arcade,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Ib" = (
-/obj/effect/spawner/random/trash/bin,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Il" = (
-/obj/effect/turf_decal/tile/dark_red/half,
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Ix" = (
-/obj/structure/closet,
-/obj/effect/spawner/random/maintenance/three,
-/obj/effect/spawner/random/exotic/antag_gear,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"Ja" = (
-/turf/closed/indestructible/binary,
-/area/virtual_domain)
-"JA" = (
-/obj/effect/spawner/random/structure/crate,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"KD" = (
-/obj/effect/landmark/bitrunning/cache_spawn,
-/turf/template_noop,
-/area/virtual_domain)
-"KN" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/virtual_domain)
-"Lu" = (
-/obj/structure/table/greyscale,
-/obj/machinery/recharger{
- pixel_x = 8;
- pixel_y = 4
- },
-/obj/machinery/recharger{
- pixel_x = -8;
- pixel_y = 4
- },
-/obj/effect/turf_decal/tile/dark_red/half,
-/obj/machinery/light/directional/south,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"MG" = (
-/obj/effect/spawner/random/trash/graffiti,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"Oq" = (
-/obj/machinery/light/small/directional/south,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Ox" = (
-/obj/structure/closet,
-/obj/effect/spawner/random/maintenance/five,
-/obj/effect/spawner/random/armory/laser_gun,
-/obj/machinery/light/small/directional/north,
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"OX" = (
-/turf/open/floor/catwalk_floor,
-/area/virtual_domain)
-"OZ" = (
-/obj/effect/spawner/random/structure/billboard,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"PE" = (
-/turf/template_noop,
-/area/virtual_domain)
-"Qi" = (
-/obj/modular_map_root/generic{
- key = "station_small"
- },
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"QM" = (
-/obj/modular_map_root/generic{
- key = "station_large"
- },
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"QO" = (
-/obj/machinery/light/directional/east,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Rk" = (
-/obj/effect/spawner/random/trash/graffiti,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Te" = (
-/obj/machinery/light/directional/south,
-/obj/effect/spawner/random/structure/table,
-/obj/effect/spawner/random/engineering/toolbox,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Tn" = (
-/turf/open/space/basic,
-/area/virtual_domain)
-"TM" = (
-/obj/machinery/light/directional/south,
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"VX" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Wd" = (
-/obj/effect/turf_decal/tile/dark_red/half,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-"Wp" = (
-/obj/effect/landmark/bitrunning/mob_segment,
-/turf/open/floor/sepia,
-/area/virtual_domain)
-
-(1,1,1) = {"
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-mq
-"}
-(2,1,1) = {"
-Ja
-il
-il
-il
-il
-mu
-df
-il
-cU
-cU
-cU
-cU
-cU
-po
-il
-OX
-Ja
-"}
-(3,1,1) = {"
-Ja
-mu
-mu
-mu
-mu
-mu
-il
-il
-cU
-jt
-on
-hz
-cU
-cU
-il
-OX
-Ja
-"}
-(4,1,1) = {"
-Ja
-OX
-OX
-OX
-OX
-OX
-Qi
-il
-cU
-cU
-cU
-cU
-cU
-cU
-il
-OX
-Ja
-"}
-(5,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-gh
-il
-cU
-cU
-cU
-cU
-cU
-cU
-il
-OX
-Ja
-"}
-(6,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-il
-il
-cU
-cU
-cU
-cU
-cU
-cU
-il
-OX
-Ja
-"}
-(7,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-il
-il
-cU
-cU
-cU
-cU
-cU
-cU
-il
-OX
-Ja
-"}
-(8,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-il
-il
-cU
-cU
-cU
-cU
-cU
-cU
-il
-il
-Ja
-"}
-(9,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-il
-il
-il
-il
-il
-il
-Ja
-"}
-(10,1,1) = {"
-Ja
-Ix
-OX
-OX
-OX
-OX
-il
-il
-it
-il
-il
-il
-TM
-mu
-KN
-KN
-Ja
-"}
-(11,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-Ib
-il
-il
-il
-ae
-KN
-Tn
-Tn
-Ja
-"}
-(12,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(13,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Il
-KN
-Tn
-Tn
-Ja
-"}
-(14,1,1) = {"
-Ja
-PE
-PE
-PE
-cK
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(15,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(16,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-VX
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(17,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(18,1,1) = {"
-Ja
-Au
-OX
-OX
-OX
-OX
-il
-il
-it
-il
-sX
-il
-iO
-KN
-Tn
-Tn
-Ja
-"}
-(19,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Te
-mu
-Tn
-Tn
-Ja
-"}
-(20,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(21,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-AF
-KN
-Tn
-Tn
-Ja
-"}
-(22,1,1) = {"
-Ja
-PE
-PE
-PE
-cK
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(23,1,1) = {"
-Ja
-PE
-KD
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-Wp
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(24,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(25,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-VX
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(26,1,1) = {"
-Ja
-wB
-OX
-OX
-OX
-OX
-il
-il
-it
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(27,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-Ib
-il
-il
-il
-iJ
-mu
-Tn
-Tn
-Ja
-"}
-(28,1,1) = {"
-Ja
-PE
-KD
-PE
-PE
-PE
-PE
-PE
-il
-uW
-il
-il
-ae
-KN
-Tn
-Tn
-Ja
-"}
-(29,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-oR
-oR
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(30,1,1) = {"
-Ja
-PE
-PE
-PE
-cK
-PE
-PE
-PE
-Oq
-mu
-mu
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(31,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-Bi
-EK
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(32,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(33,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(34,1,1) = {"
-Ja
-wK
-ve
-OX
-OX
-OX
-VX
-il
-it
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(35,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-OZ
-il
-zU
-mu
-Tn
-Tn
-Ja
-"}
-(36,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(37,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-VX
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(38,1,1) = {"
-Ja
-PE
-PE
-PE
-cK
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(39,1,1) = {"
-Ja
-PE
-KD
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(40,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(41,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-uW
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(42,1,1) = {"
-Ja
-Ox
-OX
-OX
-OX
-OX
-il
-il
-it
-uW
-il
-Wp
-Gz
-KN
-Tn
-Tn
-Ja
-"}
-(43,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-uW
-il
-il
-Lu
-mu
-Tn
-Tn
-Ja
-"}
-(44,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-do
-il
-il
-il
-ae
-KN
-Tn
-Tn
-Ja
-"}
-(45,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(46,1,1) = {"
-Ja
-PE
-KD
-PE
-cK
-PE
-PE
-PE
-il
-il
-il
-VX
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(47,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-KD
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(48,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(49,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-Ib
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(50,1,1) = {"
-Ja
-MG
-OX
-OX
-OX
-OX
-VX
-il
-il
-il
-QM
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(51,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-yF
-mu
-Tn
-Tn
-Ja
-"}
-(52,1,1) = {"
-Ja
-PE
-KD
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(53,1,1) = {"
-Ja
-PE
-PE
-cK
-PE
-PE
-KD
-PE
-PE
-PE
-uW
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(54,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-uW
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(55,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(56,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-cK
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(57,1,1) = {"
-Ja
-PE
-KD
-PE
-PE
-PE
-KD
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(58,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-GY
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(59,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(60,1,1) = {"
-Ja
-eU
-OX
-OX
-OX
-OX
-il
-il
-it
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(61,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-Ib
-il
-il
-il
-Ey
-mu
-Tn
-Tn
-Ja
-"}
-(62,1,1) = {"
-Ja
-PE
-PE
-KD
-PE
-PE
-PE
-PE
-do
-il
-il
-VX
-ae
-KN
-Tn
-Tn
-Ja
-"}
-(63,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(64,1,1) = {"
-Ja
-PE
-PE
-PE
-cK
-PE
-PE
-PE
-il
-il
-Wp
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(65,1,1) = {"
-Ja
-PE
-KD
-PE
-PE
-KD
-PE
-PE
-il
-il
-sX
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(66,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(67,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-Rk
-il
-il
-uW
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(68,1,1) = {"
-Ja
-wB
-OX
-OX
-OX
-OX
-VX
-il
-il
-il
-QM
-uW
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(69,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-ma
-mu
-Tn
-Tn
-Ja
-"}
-(70,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(71,1,1) = {"
-Ja
-PE
-PE
-KD
-PE
-PE
-PE
-KD
-PE
-PE
-il
-uW
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(72,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(73,1,1) = {"
-Ja
-PE
-PE
-cK
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(74,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-cK
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(75,1,1) = {"
-Ja
-PE
-KD
-PE
-PE
-PE
-KD
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(76,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(77,1,1) = {"
-Ja
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-PE
-il
-VX
-BX
-KN
-Tn
-Tn
-Ja
-"}
-(78,1,1) = {"
-Ja
-eU
-JA
-OX
-OX
-OX
-OX
-OX
-OX
-il
-QO
-il
-Wd
-KN
-Tn
-Tn
-Ja
-"}
-(79,1,1) = {"
-Ja
-mu
-mu
-mu
-mu
-mu
-mu
-mu
-mu
-mu
-mu
-mu
-mu
-mu
-Tn
-Tn
-Ja
-"}
-(80,1,1) = {"
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-Ja
-"}
diff --git a/_maps/virtual_domains/syndicate_assault.dmm b/_maps/virtual_domains/syndicate_assault.dmm
index 81bb35a257a75..a40945410c11b 100644
--- a/_maps/virtual_domains/syndicate_assault.dmm
+++ b/_maps/virtual_domains/syndicate_assault.dmm
@@ -65,6 +65,7 @@
req_access = list("syndicate");
secure = 1
},
+/obj/item/gun/ballistic/automatic/pistol,
/turf/open/floor/mineral/plastitanium/red,
/area/ruin/space/has_grav/powered/virtual_domain)
"cw" = (
@@ -295,16 +296,6 @@
},
/turf/open/floor/mineral/plastitanium,
/area/ruin/space/has_grav/powered/virtual_domain)
-"ki" = (
-/obj/structure/table/reinforced,
-/obj/machinery/computer/security/telescreen/interrogation{
- name = "Cameras monitor";
- network = list("fsci");
- req_access = list("syndicate");
- screen_loc = ""
- },
-/turf/open/floor/mineral/plastitanium,
-/area/ruin/space/has_grav/powered/virtual_domain)
"kI" = (
/obj/machinery/computer/atmos_alert{
dir = 8
@@ -388,6 +379,11 @@
/obj/structure/sign/poster/contraband/syndicate_pistol,
/turf/closed/wall/r_wall/syndicate,
/area/ruin/space/has_grav/powered/virtual_domain)
+"og" = (
+/obj/structure/table/reinforced,
+/obj/item/reagent_containers/cup/glass/trophy/silver_cup,
+/turf/open/floor/mineral/plastitanium/red,
+/area/ruin/space/has_grav/powered/virtual_domain)
"oM" = (
/obj/structure/cable,
/turf/open/floor/mineral/plastitanium,
@@ -498,10 +494,16 @@
/turf/open/floor/mineral/plastitanium/red,
/area/ruin/space/has_grav/powered/virtual_domain)
"sH" = (
-/obj/structure/displaycase{
+/obj/structure/closet/syndicate{
+ anchored = 1;
+ desc = "A basic closet for all your villainous needs.";
+ locked = 1;
+ name = "Closet";
req_access = list("syndicate");
- start_showpiece_type = /obj/item/gun/ballistic/automatic/pistol/deagle/camo
+ secure = 1
},
+/obj/item/ammo_box/c9mm,
+/obj/item/gun/ballistic/automatic/pistol,
/turf/open/floor/mineral/plastitanium/red,
/area/ruin/space/has_grav/powered/virtual_domain)
"sK" = (
@@ -600,6 +602,9 @@
/obj/item/ammo_box/c9mm,
/turf/open/floor/mineral/plastitanium/red,
/area/ruin/space/has_grav/powered/virtual_domain)
+"xS" = (
+/turf/closed/wall/r_wall/syndicate/nodiagonal,
+/area/ruin/space/has_grav/powered/virtual_domain)
"yl" = (
/obj/machinery/door/airlock/grunge{
name = "Captain's Room"
@@ -688,6 +693,7 @@
/obj/item/crowbar/red,
/obj/item/ammo_box/magazine/m9mm_aps,
/obj/item/ammo_box/magazine/m9mm_aps,
+/obj/item/gun/ballistic/automatic/pistol,
/turf/open/floor/carpet/royalblack,
/area/ruin/space/has_grav/powered/virtual_domain)
"Cn" = (
@@ -848,6 +854,7 @@
/obj/structure/table/reinforced,
/obj/item/paper,
/obj/item/pen,
+/obj/machinery/computer/security/telescreen/forgotten_ship/sci/directional/south,
/turf/open/floor/carpet/royalblack,
/area/ruin/space/has_grav/powered/virtual_domain)
"IH" = (
@@ -927,6 +934,7 @@
/obj/item/crowbar/red,
/obj/item/ammo_box/magazine/m9mm,
/obj/item/ammo_box/magazine/m9mm,
+/obj/item/gun/ballistic/automatic/pistol,
/turf/open/floor/mineral/plastitanium,
/area/ruin/space/has_grav/powered/virtual_domain)
"Mm" = (
@@ -1076,6 +1084,7 @@
/obj/item/ammo_box/magazine/m9mm,
/obj/item/ammo_box/magazine/m9mm,
/obj/machinery/light/small/directional/north,
+/obj/item/gun/ballistic/automatic/pistol,
/turf/open/floor/mineral/plastitanium,
/area/ruin/space/has_grav/powered/virtual_domain)
"Sq" = (
@@ -2206,7 +2215,7 @@ qx
qx
qx
ru
-vp
+og
Jg
ru
bh
@@ -2264,7 +2273,7 @@ qx
qx
qx
ru
-sH
+Kz
Kz
yl
bh
@@ -2442,7 +2451,7 @@ ru
Lo
ru
tv
-ki
+hD
nU
wb
EB
@@ -2743,7 +2752,7 @@ ru
ru
ru
ru
-Vk
+ru
qx
qx
qx
@@ -3091,7 +3100,7 @@ uP
ru
hD
ru
-Ig
+xS
qx
qx
qx
@@ -3203,7 +3212,7 @@ tI
Kz
Kz
ct
-xJ
+sH
ru
qx
qx
diff --git a/_maps/virtual_domains/xeno_nest.dmm b/_maps/virtual_domains/xeno_nest.dmm
index 907436758c781..65f183d69c401 100644
--- a/_maps/virtual_domains/xeno_nest.dmm
+++ b/_maps/virtual_domains/xeno_nest.dmm
@@ -140,7 +140,7 @@
/area/ruin/space/has_grav/powered/virtual_domain)
"F" = (
/obj/structure/table/greyscale,
-/obj/item/gun/energy/beam_rifle,
+/obj/item/gun/energy/xray,
/obj/item/gun/energy/laser{
pixel_x = 4;
pixel_y = -6
diff --git a/_maps/wawastation.json b/_maps/wawastation.json
index cce65601baf71..71d716a56e07e 100644
--- a/_maps/wawastation.json
+++ b/_maps/wawastation.json
@@ -7,7 +7,7 @@
"cargo": "cargo_box",
"ferry": "ferry_fancy",
"whiteship": "whiteship_meta",
- "emergency": "emergency_tram"
+ "emergency": "emergency_wawa"
},
"traits": [
{
diff --git a/code/__DEFINES/ai/ai_blackboard.dm b/code/__DEFINES/ai/ai_blackboard.dm
index 23c16bdcd0b38..90a9b55ba1749 100644
--- a/code/__DEFINES/ai/ai_blackboard.dm
+++ b/code/__DEFINES/ai/ai_blackboard.dm
@@ -162,3 +162,6 @@
// Used to hold state without making bigass lists
/// For /datum/ai_behavior/find_potential_targets, what if any field are we using currently
#define BB_FIND_TARGETS_FIELD(type) "bb_find_targets_field_[type]"
+
+///mothroach next meal key!
+#define BB_MOTHROACH_NEXT_EAT "mothroach_next_eat"
diff --git a/code/__DEFINES/ai/bot_keys.dm b/code/__DEFINES/ai/bot_keys.dm
index 61189861141d7..c7285d18acac6 100644
--- a/code/__DEFINES/ai/bot_keys.dm
+++ b/code/__DEFINES/ai/bot_keys.dm
@@ -109,3 +109,28 @@ DEFINE_BITFIELD(honkbot_flags, list(
///key that holds our honk ability
#define BB_HONK_ABILITY "honk_ability"
+//firebot keys
+///things we can extinguish
+#define BB_FIREBOT_CAN_EXTINGUISH "can_extinguish"
+///the target we will extinguish
+#define BB_FIREBOT_EXTINGUISH_TARGET "extinguish_target"
+///lines we say when we detect a fire
+#define BB_FIREBOT_FIRE_DETECTED_LINES "fire_detected_lines"
+///lines we say when we are idle
+#define BB_FIREBOT_IDLE_LINES "idle_lines"
+///lines we say when we are emagged
+#define BB_FIREBOT_EMAGGED_LINES "emagged_lines"
+
+//vibebots
+///key that holds our partying ability
+#define BB_VIBEBOT_PARTY_ABILITY "party_ability"
+///key that holds our birthday song
+#define BB_VIBEBOT_BIRTHDAY_SONG "birthday_song"
+///key that holds happy songs we play to depressed targets
+#define BB_VIBEBOT_HAPPY_SONG "happy_song"
+///key that holds grim song we play when emagged
+#define BB_VIBEBOT_GRIM_SONG "GRIM_song"
+///key that holds neutral targets we vibe with
+#define BB_VIBEBOT_PARTY_TARGET "party_target"
+///key that holds our instrument
+#define BB_VIBEBOT_INSTRUMENT "instrument"
diff --git a/code/__DEFINES/ai/pet_commands.dm b/code/__DEFINES/ai/pet_commands.dm
index 1e692b9f805aa..5f03bf1a5b0d7 100644
--- a/code/__DEFINES/ai/pet_commands.dm
+++ b/code/__DEFINES/ai/pet_commands.dm
@@ -7,3 +7,6 @@
#define BB_PET_TARGETING_STRATEGY "BB_pet_targeting"
/// Typecache of weakrefs to mobs this mob is friends with, will follow their instructions and won't attack them
#define BB_FRIENDS_LIST "BB_friends_list"
+/// List of strings we might say to encourage someone to make better choices.
+#define BB_OWNER_SELF_HARM_RESPONSES "BB_self_harm_responses"
+
diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm
index c865c578d6324..185ab2e3d3177 100644
--- a/code/__DEFINES/antagonists.dm
+++ b/code/__DEFINES/antagonists.dm
@@ -113,6 +113,7 @@
#define CONSTRUCT_JUGGERNAUT "Juggernaut"
#define CONSTRUCT_WRAITH "Wraith"
#define CONSTRUCT_ARTIFICER "Artificer"
+#define CONSTRUCT_HARVESTER "Harvester"
/// The Classic Wizard wizard loadout.
#define WIZARD_LOADOUT_CLASSIC "loadout_classic"
diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm
index 7df79b7e57a26..86de96f07a1d1 100644
--- a/code/__DEFINES/atom_hud.dm
+++ b/code/__DEFINES/atom_hud.dm
@@ -81,6 +81,7 @@
#define SECHUD_ASSISTANT "hudassistant"
#define SECHUD_ATMOSPHERIC_TECHNICIAN "hudatmospherictechnician"
#define SECHUD_BARTENDER "hudbartender"
+#define SECHUD_BITAVATAR "hudbitavatar"
#define SECHUD_BITRUNNER "hudbitrunner"
#define SECHUD_BOTANIST "hudbotanist"
#define SECHUD_BRIDGE_ASSISTANT "hudbridgeassistant"
diff --git a/code/__DEFINES/cameranets.dm b/code/__DEFINES/cameranets.dm
index 15b4493738e2f..935e015e0cda0 100644
--- a/code/__DEFINES/cameranets.dm
+++ b/code/__DEFINES/cameranets.dm
@@ -18,12 +18,22 @@
#define CAMERANET_NETWORK_XENOBIOLOGY "xeno"
#define CAMERANET_NETWORK_TEST_CHAMBER "test"
#define CAMERANET_NETWORK_PRISON "prison"
+#define CAMERANET_NETWORK_ISOLATION "isolation"
#define CAMERANET_NETWORK_MEDBAY "medbay"
#define CAMERANET_NETWORK_ENGINE "engine"
+#define CAMERANET_NETWORK_WASTE "waste"
#define CAMERANET_NETWORK_TELECOMMS "tcomms"
#define CAMERANET_NETWORK_TURBINE "turbine"
#define CAMERANET_NETWORK_THUNDERDOME "thunder"
#define CAMERANET_NETWORK_BAR "bar"
#define CAMERANET_NETWORK_INTERROGATION "interrogation"
+#define CAMERA_NETWORK_CARGO "cargo"
#define CAMERANET_NETWORK_ABDUCTOR "abductor"
#define OPERATIVE_CAMERA_NET "operative"
+
+// Ruins/Away missiosn/Misc camera nets
+#define CAMERANET_NETWORK_MOON19_XENO "mo19x"
+#define CAMERANET_NETWORK_MOON19_RESEARCH "mo19r"
+#define CAMERANET_NETWORK_UGO45_RESEARCH "uo45r"
+#define CAMERANET_NETWORK_FSCI "fsci"
+#define CAMERA_NETWORK_BUNKER "bunker1"
diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm
index 4590a5081f0d1..c3fe46b0cd496 100644
--- a/code/__DEFINES/chat.dm
+++ b/code/__DEFINES/chat.dm
@@ -45,3 +45,5 @@
#define debug_world_log(msg) if (GLOB.Debug2) log_world("DEBUG: [msg]")
/// Adds a generic box around whatever message you're sending in chat. Really makes things stand out.
#define examine_block(str) ("
" + str + "
")
+/// Emboldens runechat messages
+#define RUNECHAT_BOLD(str) "+[str]+"
diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm
index d1f489f0555ef..72159bde0540e 100644
--- a/code/__DEFINES/colors.dm
+++ b/code/__DEFINES/colors.dm
@@ -72,6 +72,7 @@
#define COLOR_LIME "#32CD32"
#define COLOR_DARK_LIME "#00aa00"
#define COLOR_VERY_PALE_LIME_GREEN "#DDFFD3"
+#define COLOR_HERETIC_GREEN COLOR_VERY_PALE_LIME_GREEN // i am co-opting this as heretic glow.
#define COLOR_VERY_DARK_LIME_GREEN "#003300"
#define COLOR_GREEN "#008000"
#define COLOR_CHRISTMAS_GREEN "#00873E"
@@ -130,6 +131,7 @@
#define COLOR_DARK_ORANGE "#C3630C"
#define COLOR_PRISONER_ORANGE "#A54900"
#define COLOR_DARK_MODERATE_ORANGE "#8B633B"
+#define COLOR_RUSTED_GLASS "#917c65"
#define COLOR_BROWN "#BA9F6D"
#define COLOR_DARK_BROWN "#997C4F"
diff --git a/code/__DEFINES/cult.dm b/code/__DEFINES/cult.dm
index 06393d145f8ca..005b0ca27eef8 100644
--- a/code/__DEFINES/cult.dm
+++ b/code/__DEFINES/cult.dm
@@ -9,6 +9,8 @@
#define RUNE_COLOR_SUMMON COLOR_VIBRANT_LIME
//blood magic
+/// The maximum number of cult spell slots each cultist is allowed to scribe at once.
+#define ENHANCED_BLOODCHARGE 5
#define MAX_BLOODCHARGE 4
#define RUNELESS_MAX_BLOODCHARGE 1
/// percent before rise
@@ -28,6 +30,8 @@
#define THEME_CULT "cult"
#define THEME_WIZARD "wizard"
#define THEME_HOLY "holy"
+/// Only used for heretic Harvesters, obtained from sacrificing cultists
+#define THEME_HERETIC "heretic"
/// Defines for cult item_dispensers.
#define PREVIEW_IMAGE "preview"
@@ -51,3 +55,8 @@ GLOBAL_LIST(sacrificed)
#define CULT_VICTORY 1
#define CULT_LOSS 0
#define CULT_NARSIE_KILLED -1
+
+// Used to keep track of items rewarded after a heretic is sacked.
+#define CURSED_BLADE_UNLOCKED "Cursed Blade"
+#define CRIMSON_FOCUS_UNLOCKED "Crimson Focus"
+#define PROTEON_ORB_UNLOCKED "Proteon Orb"
diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm
index f4dcd49664160..c612d174ac354 100644
--- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm
+++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm
@@ -133,3 +133,10 @@
#define COMSIG_ATOM_PRE_CLEAN "atom_pre_clean"
///cancel clean
#define COMSIG_ATOM_CANCEL_CLEAN (1<<0)
+
+/// From /obj/item/stack/make_item()
+#define COMSIG_ATOM_CONSTRUCTED "atom_constructed"
+
+/// From /obj/effect/particle_effect/sparks/proc/sparks_touched(datum/source, atom/movable/singed)
+#define COMSIG_ATOM_TOUCHED_SPARKS "atom_touched_sparks"
+#define COMSIG_ATOM_TOUCHED_HAZARDOUS_SPARKS "atom_touched_hazardous_sparks"
diff --git a/code/__DEFINES/dcs/signals/signals_closet.dm b/code/__DEFINES/dcs/signals/signals_closet.dm
index fb78d69b8a11b..8945e876ccb5f 100644
--- a/code/__DEFINES/dcs/signals/signals_closet.dm
+++ b/code/__DEFINES/dcs/signals/signals_closet.dm
@@ -1,2 +1,2 @@
/// Called in /obj/structure/closet/PopulateContents()
-#define COMSIG_CLOSET_POPULATE_CONTENTS "closet_populate_contents"
+#define COMSIG_CLOSET_CONTENTS_INITIALIZED "closet_initialize_contents"
diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm
index 2f011f2e5a326..598ddc5187852 100644
--- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm
+++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm
@@ -158,7 +158,7 @@
/// Return to skip default nutrition -> blood conversion
#define HANDLE_BLOOD_NO_NUTRITION_DRAIN (1<<1)
/// Return to skip oxyloss and similar effecst from blood level
- #define HANDLE_BLOOD_NO_EFFECTS (1<<2)
+ #define HANDLE_BLOOD_NO_OXYLOSS (1<<2)
/// from /datum/status_effect/limp/proc/check_step(mob/whocares, OldLoc, Dir, forced) iodk where it shuld go
#define COMSIG_CARBON_LIMPING "mob_limp_check"
diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
index 1515c8b7347ff..517048bbd4d1d 100644
--- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
+++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
@@ -178,6 +178,7 @@
#define TREAT_MESSAGE_ARG 1
#define TREAT_TTS_MESSAGE_ARG 2
#define TREAT_TTS_FILTER_ARG 3
+ #define TREAT_CAPITALIZE_MESSAGE 4
///From obj/item/toy/crayon/spraycan
#define COMSIG_LIVING_MOB_PAINTED "living_mob_painted"
@@ -203,6 +204,10 @@
#define STOP_SACRIFICE (1<<0)
/// Don't send a message for sacrificing this thing, we have our own
#define SILENCE_SACRIFICE_MESSAGE (1<<1)
+ /// Don't send a message for sacrificing this thing UNLESS it's the cult target
+ #define SILENCE_NONTARGET_SACRIFICE_MESSAGE (1<<2)
+ /// Dusts the target instead of gibbing them (no soulstone)
+ #define DUST_SACRIFICE (1<<3)
/// From /mob/living/befriend() : (mob/living/new_friend)
#define COMSIG_LIVING_BEFRIENDED "living_befriended"
diff --git a/code/__DEFINES/dcs/signals/signals_xeno_control.dm b/code/__DEFINES/dcs/signals/signals_xeno_control.dm
index c67756a64f385..660dc9ce44627 100644
--- a/code/__DEFINES/dcs/signals/signals_xeno_control.dm
+++ b/code/__DEFINES/dcs/signals/signals_xeno_control.dm
@@ -1,7 +1,5 @@
//Xenobio hotkeys
-///from slime AltClickOn(): (/mob)
-#define COMSIG_XENO_SLIME_CLICK_ALT "xeno_slime_click_alt"
///from slime ShiftClickOn(): (/mob)
#define COMSIG_XENO_SLIME_CLICK_SHIFT "xeno_slime_click_shift"
///from turf ShiftClickOn(): (/mob)
diff --git a/code/__DEFINES/economy.dm b/code/__DEFINES/economy.dm
index 47e3db38e11c8..5ffa92c05b691 100644
--- a/code/__DEFINES/economy.dm
+++ b/code/__DEFINES/economy.dm
@@ -64,7 +64,8 @@
#define CIV_JOB_MED 11
#define CIV_JOB_GROW 12
#define CIV_JOB_ATMOS 13
-#define CIV_JOB_RANDOM 14
+#define CIV_JOB_BITRUN 14
+#define CIV_JOB_RANDOM 15
//These defines are to be used to with the payment component, determines which lines will be used during a transaction. If in doubt, go with clinical.
#define PAYMENT_CLINICAL "clinical"
diff --git a/code/__DEFINES/fish.dm b/code/__DEFINES/fish.dm
index 24242699e3d01..8e03c920d248d 100644
--- a/code/__DEFINES/fish.dm
+++ b/code/__DEFINES/fish.dm
@@ -9,8 +9,8 @@
#define FAV_BAIT_DIFFICULTY_MOD -5
/// Difficulty modifier when bait is fish's disliked
#define DISLIKED_BAIT_DIFFICULTY_MOD 15
-/// Difficulty modifier when our fisherman has the trait TRAIT_SETTLER
-#define SETTLER_DIFFICULTY_MOD -5
+/// Difficulty modifier when our fisherman has the trait TRAIT_EXPERT_FISHER
+#define EXPERT_FISHER_DIFFICULTY_MOD -5
#define FISH_TRAIT_MINOR_DIFFICULTY_BOOST 5
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 3430f97dd7dcd..ba467347e87d2 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -231,6 +231,8 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list(
#define islandmine(A) (istype(A, /obj/effect/mine))
+#define iscloset(A) (istype(A, /obj/structure/closet))
+
#define issupplypod(A) (istype(A, /obj/structure/closet/supplypod))
#define isammocasing(A) (istype(A, /obj/item/ammo_casing))
diff --git a/code/__DEFINES/keybinding.dm b/code/__DEFINES/keybinding.dm
index 2a2a092c6d05b..5f025ad99cffb 100644
--- a/code/__DEFINES/keybinding.dm
+++ b/code/__DEFINES/keybinding.dm
@@ -26,6 +26,7 @@
//Client
#define COMSIG_KB_CLIENT_GETHELP_DOWN "keybinding_client_gethelp_down"
#define COMSIG_KB_CLIENT_SCREENSHOT_DOWN "keybinding_client_screenshot_down"
+#define COMSIG_KB_CLIENT_FULLSCREEN_DOWN "keybinding_client_fullscreen_down"
#define COMSIG_KB_CLIENT_MINIMALHUD_DOWN "keybinding_client_minimalhud_down"
//Communication
diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm
index 1ecead91214ba..08a771bf7ddf6 100644
--- a/code/__DEFINES/layers.dm
+++ b/code/__DEFINES/layers.dm
@@ -281,7 +281,7 @@
///Layer for lobby menu collapse button
#define LOBBY_BELOW_MENU_LAYER 2
-///Layer for lobby menu background image and main buttons (Join/Ready, Observe, Charater Prefs)
+///Layer for lobby menu background image and main buttons (Join/Ready, Observe, Character Prefs)
#define LOBBY_MENU_LAYER 3
///Layer for lobby menu shutter, which covers up the menu to collapse/expand it
#define LOBBY_SHUTTER_LAYER 4
diff --git a/code/__DEFINES/living.dm b/code/__DEFINES/living.dm
index 1f2316e8e1240..63993f4bc620b 100644
--- a/code/__DEFINES/living.dm
+++ b/code/__DEFINES/living.dm
@@ -1,3 +1,6 @@
// living_flags
/// Simple mob trait, indicating it may follow continuous move actions controlled by code instead of by user input.
#define MOVES_ON_ITS_OWN (1<<0)
+/// Always does *deathgasp when they die
+/// If unset mobs will only deathgasp if supplied a death sound or custom death message
+#define ALWAYS_DEATHGASP (1<<1)
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index e8904f0bb1f86..4265428e56f9b 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -16,10 +16,11 @@
#define BLOOD_VOLUME_MAXIMUM 2000
#define BLOOD_VOLUME_SLIME_SPLIT 1120
#define BLOOD_VOLUME_NORMAL 560
-#define BLOOD_VOLUME_SAFE 475
-#define BLOOD_VOLUME_OKAY 336
-#define BLOOD_VOLUME_BAD 224
-#define BLOOD_VOLUME_SURVIVE 122
+#define BLOOD_VOLUME_SAFE (BLOOD_VOLUME_NORMAL * (1 - 0.15)) // Latter number is percentage of blood lost, for readability!
+#define BLOOD_VOLUME_OKAY (BLOOD_VOLUME_NORMAL * (1 - 0.30))
+#define BLOOD_VOLUME_RISKY (BLOOD_VOLUME_NORMAL * (1 - 0.45))
+#define BLOOD_VOLUME_BAD (BLOOD_VOLUME_NORMAL * (1 - 0.60))
+#define BLOOD_VOLUME_SURVIVE (BLOOD_VOLUME_NORMAL * (1 - 0.80))
/// How efficiently humans regenerate blood.
#define BLOOD_REGEN_FACTOR 0.25
@@ -84,6 +85,8 @@
#define BODYTYPE_ALIEN (1<<3)
///The limb is from a golem
#define BODYTYPE_GOLEM (1<<4)
+//The limb is a peg limb
+#define BODYTYPE_PEG (1<<5)
// Bodyshape defines for how things can be worn, i.e., what "shape" the mob sprite is
///The limb fits the human mold. This is not meant to be literal, if the sprite "fits" on a human, it is "humanoid", regardless of origin.
@@ -95,7 +98,7 @@
///The limb is snouted.
#define BODYSHAPE_SNOUTED (1<<3)
-#define BODYTYPE_BIOSCRAMBLE_INCOMPATIBLE (BODYTYPE_ROBOTIC | BODYTYPE_LARVA_PLACEHOLDER | BODYTYPE_GOLEM)
+#define BODYTYPE_BIOSCRAMBLE_INCOMPATIBLE (BODYTYPE_ROBOTIC | BODYTYPE_LARVA_PLACEHOLDER | BODYTYPE_GOLEM | BODYTYPE_PEG)
#define BODYTYPE_CAN_BE_BIOSCRAMBLED(bodytype) (!(bodytype & BODYTYPE_BIOSCRAMBLE_INCOMPATIBLE))
// Defines for Species IDs. Used to refer to the name of a species, for things like bodypart names or species preferences.
@@ -135,6 +138,8 @@
#define BODYPART_ID_LARVA "larva"
#define BODYPART_ID_PSYKER "psyker"
#define BODYPART_ID_MEAT "meat"
+#define BODYPART_ID_PEG "peg"
+
//See: datum/species/var/digitigrade_customization
///The species does not have digitigrade legs in generation.
@@ -305,7 +310,7 @@
#define SLIME_EVOLUTION_THRESHOLD 10
//Slime evolution cost in nutrition
-#define SLIME_EVOLUTION_COST 200
+#define SLIME_EVOLUTION_COST 100
//Slime extract crossing. Controls how many extracts is required to feed to a slime to core-cross.
#define SLIME_EXTRACT_CROSSING_REQUIRED 10
@@ -439,11 +444,14 @@
#define REM REAGENTS_EFFECT_MULTIPLIER //! Shorthand for the above define for ease of use in equations and the like
// Eye protection
+// THese values are additive to determine your overall flash protection.
#define FLASH_PROTECTION_HYPER_SENSITIVE -2
#define FLASH_PROTECTION_SENSITIVE -1
#define FLASH_PROTECTION_NONE 0
#define FLASH_PROTECTION_FLASH 1
#define FLASH_PROTECTION_WELDER 2
+#define FLASH_PROTECTION_WELDER_SENSITIVE 3
+#define FLASH_PROTECTION_WELDER_HYPER_SENSITIVE 4
// AI Toggles
#define AI_CAMERA_LUMINOSITY 5
@@ -631,6 +639,7 @@
// Otherwise they are completely arbitrary
#define MONKEY_HEIGHT_DWARF 2
#define MONKEY_HEIGHT_MEDIUM 4
+#define MONKEY_HEIGHT_TALL HUMAN_HEIGHT_DWARF
#define HUMAN_HEIGHT_DWARF 6
#define HUMAN_HEIGHT_SHORTEST 8
#define HUMAN_HEIGHT_SHORT 10
@@ -829,8 +838,10 @@ GLOBAL_LIST_INIT(layers_to_offset, list(
#define NEED_VENTCRAWL (1<<8)
/// Skips adjacency checks
#define BYPASS_ADJACENCY (1<<9)
+/// Skips reccursive loc checks
+#define NOT_INSIDE_TARGET (1<<10)
/// Checks for base adjacency, but silences the error
-#define SILENT_ADJACENCY (1<<10)
+#define SILENT_ADJACENCY (1<<11)
/// The default mob sprite size (used for shrinking or enlarging the mob sprite to regular size)
#define RESIZE_DEFAULT_SIZE 1
diff --git a/code/__DEFINES/modular_computer.dm b/code/__DEFINES/modular_computer.dm
index a8e5c38ffc68f..9659e7e0d7acf 100644
--- a/code/__DEFINES/modular_computer.dm
+++ b/code/__DEFINES/modular_computer.dm
@@ -41,7 +41,7 @@
#define PROGRAM_CATEGORY_SCIENCE "Science"
///The default amount a program should take in cell use.
-#define PROGRAM_BASIC_CELL_USE 15
+#define PROGRAM_BASIC_CELL_USE 2 WATTS
///This app grants a minor protection against being PDA bombed if installed.
///(can sometimes prevent it from being sent, while wasting a PDA bomb from the sender).
diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm
index 9e38eada92313..c050c73f23133 100644
--- a/code/__DEFINES/obj_flags.dm
+++ b/code/__DEFINES/obj_flags.dm
@@ -87,6 +87,8 @@
#define INEDIBLE_CLOTHING (1<<16)
/// Headgear/helmet allows internals
#define HEADINTERNALS (1<<17)
+/// Prevents masks from getting adjusted from enabling internals
+#define INTERNALS_ADJUST_EXEMPT (1<<18)
/// Integrity defines for clothing (not flags but close enough)
#define CLOTHING_PRISTINE 0 // We have no damage on the clothing
@@ -106,3 +108,8 @@
/// Flags for sharpness in obj/item
#define SHARP_EDGED (1<<0)
#define SHARP_POINTY (1<<1)
+
+/// Flags for specifically what kind of items to get in get_equipped_items
+#define INCLUDE_POCKETS (1<<0)
+#define INCLUDE_ACCESSORIES (1<<1)
+#define INCLUDE_HELD (1<<2)
diff --git a/code/__DEFINES/paper.dm b/code/__DEFINES/paper.dm
index feb41c0409cd3..0d70a2f3ca40d 100644
--- a/code/__DEFINES/paper.dm
+++ b/code/__DEFINES/paper.dm
@@ -16,3 +16,5 @@
#define BARCODE_SCANNER_CHECKIN "check_in"
#define BARCODE_SCANNER_INVENTORY "inventory"
+
+#define IS_WRITING_UTENSIL(thing) (thing?.get_writing_implement_details()?["interaction_mode"] == MODE_WRITING)
diff --git a/code/__DEFINES/power.dm b/code/__DEFINES/power.dm
index f22d756d37514..2476906d91322 100644
--- a/code/__DEFINES/power.dm
+++ b/code/__DEFINES/power.dm
@@ -20,11 +20,18 @@
#define JOULES * JOULE
///The capacity of a standard power cell
-#define STANDARD_CELL_VALUE (1 MEGA)
+#define STANDARD_CELL_VALUE (10 KILO)
///The amount of energy, in joules, a standard powercell has.
- #define STANDARD_CELL_CHARGE (STANDARD_CELL_VALUE JOULES) // 1 MJ.
+ #define STANDARD_CELL_CHARGE (STANDARD_CELL_VALUE JOULES) // 10 KJ.
///The amount of power, in watts, a standard powercell can give.
- #define STANDARD_CELL_RATE (STANDARD_CELL_VALUE WATTS) // 1 MW.
+ #define STANDARD_CELL_RATE (STANDARD_CELL_VALUE WATTS) // 10 KW.
+
+/// Capacity of a standard battery
+#define STANDARD_BATTERY_VALUE (STANDARD_CELL_VALUE * 100)
+ /// The amount of energy, in joules, a standard battery has.
+ #define STANDARD_BATTERY_CHARGE (STANDARD_BATTERY_VALUE JOULES) // 1 MJ
+ /// The amount of energy, in watts, a standard battery can give.
+ #define STANDARD_BATTERY_RATE (STANDARD_BATTERY_VALUE WATTS) // 1 MW
// Converts cable layer to its human readable name
GLOBAL_LIST_INIT(cable_layer_to_name, list(
diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm
index d3f99314f1d8f..cf35d553ec4dc 100644
--- a/code/__DEFINES/research.dm
+++ b/code/__DEFINES/research.dm
@@ -4,8 +4,15 @@
//! Techweb names for new point types. Can be used to define specific point values for specific types of research (science, security, engineering, etc.)
#define TECHWEB_POINT_TYPE_GENERIC "General Research"
+//! Amount of points required to unlock nodes of corresponding tiers
+#define TECHWEB_TIER_1_POINTS 40
+#define TECHWEB_TIER_2_POINTS 80
+#define TECHWEB_TIER_3_POINTS 120
+#define TECHWEB_TIER_4_POINTS 160
+#define TECHWEB_TIER_5_POINTS 200
+
//! Amount of points gained per second by a single R&D server, see: [research][code/controllers/subsystem/research.dm]
-#define TECHWEB_SINGLE_SERVER_INCOME 52.3
+#define TECHWEB_SINGLE_SERVER_INCOME 1
//! Swab cell line types
#define CELL_LINE_TABLE_SLUDGE "cell_line_sludge_table"
diff --git a/code/__DEFINES/research/anomalies.dm b/code/__DEFINES/research/anomalies.dm
index db605431c610c..a1e30cd142f00 100644
--- a/code/__DEFINES/research/anomalies.dm
+++ b/code/__DEFINES/research/anomalies.dm
@@ -2,7 +2,7 @@
#define MAX_CORES_BLUESPACE 3
#define MAX_CORES_GRAVITATIONAL 8
#define MAX_CORES_FLUX 8
-#define MAX_CORES_VORTEX 8
+#define MAX_CORES_VORTEX 1
#define MAX_CORES_PYRO 8
#define MAX_CORES_HALLUCINATION 8
#define MAX_CORES_BIOSCRAMBLER 8
diff --git a/code/__DEFINES/research/slimes.dm b/code/__DEFINES/research/slimes.dm
index f54248a21a3ac..03671ee24d2a0 100644
--- a/code/__DEFINES/research/slimes.dm
+++ b/code/__DEFINES/research/slimes.dm
@@ -11,15 +11,15 @@
#define SLIME_MAX_POWER 10
///The maximum amount of nutrition a slime can contain
-#define SLIME_MAX_NUTRITION 1000
+#define SLIME_MAX_NUTRITION 200
///The starting nutrition of a slime
-#define SLIME_STARTING_NUTRITION 700
+#define SLIME_STARTING_NUTRITION 100
/// Above it we grow our amount_grown and our power_level, below it we can eat
-#define SLIME_GROW_NUTRITION 800
+#define SLIME_GROW_NUTRITION 150
/// Below this, we feel hungry
-#define SLIME_HUNGER_NUTRITION 500
+#define SLIME_HUNGER_NUTRITION 50
/// Below this, we feel starving
-#define SLIME_STARVE_NUTRITION 200
+#define SLIME_STARVE_NUTRITION 10
///The slime is not hungry. It might try to feed anyways.
#define SLIME_HUNGER_NONE 0
@@ -61,3 +61,6 @@
#define SLIME_TYPE_SEPIA "sepia"
#define SLIME_TYPE_SILVER "silver"
#define SLIME_TYPE_YELLOW "yellow"
+
+// The alpha value of transperent slime types
+#define SLIME_TRANSPARENCY_ALPHA 180
diff --git a/code/__DEFINES/research/techweb_nodes.dm b/code/__DEFINES/research/techweb_nodes.dm
new file mode 100644
index 0000000000000..a31c3e1a2f278
--- /dev/null
+++ b/code/__DEFINES/research/techweb_nodes.dm
@@ -0,0 +1,122 @@
+#define TECHWEB_NODE_AI "ai"
+#define TECHWEB_NODE_AI_LAWS "ai_laws"
+#define TECHWEB_NODE_ALIEN_ENGI "alien_engi"
+#define TECHWEB_NODE_ALIEN_SURGERY "alien_surgery"
+#define TECHWEB_NODE_ALIENTECH "alientech"
+#define TECHWEB_NODE_ANOMALY_RESEARCH "anomaly_research"
+#define TECHWEB_NODE_ANOMALY_SHELLS "anomaly_shells"
+#define TECHWEB_NODE_APPLIED_BLUESPACE "applied_bluespace"
+#define TECHWEB_NODE_ATMOS "atmos"
+#define TECHWEB_NODE_AUGMENTATION "augmentation"
+#define TECHWEB_NODE_AUS_SECURITY "aus_security"
+#define TECHWEB_NODE_BASIC_ARMS "basic_arms"
+#define TECHWEB_NODE_BCI "bci"
+#define TECHWEB_NODE_BEAM_WEAPONS "beam_weapons"
+#define TECHWEB_NODE_BIO_SCAN "bio_scan"
+#define TECHWEB_NODE_BITRUNNING "bitrunning"
+#define TECHWEB_NODE_BLUESPACE "bluespace"
+#define TECHWEB_NODE_BLUESPACE_THEORY "bluespace_theory"
+#define TECHWEB_NODE_BLUESPACE_TRAVEL "bluespace_travel"
+#define TECHWEB_NODE_BORG_ENGI "borg_engi"
+#define TECHWEB_NODE_BORG_MEDICAL "borg_medical"
+#define TECHWEB_NODE_BORG_MINING "borg_mining"
+#define TECHWEB_NODE_BORG_SERVICES "borg_services"
+#define TECHWEB_NODE_BORG_UTILITY "borg_utility"
+#define TECHWEB_NODE_BOTANY_EQUIP "botany_equip"
+#define TECHWEB_NODE_CAFETERIA_EQUIP "cafeteria_equip"
+#define TECHWEB_NODE_CHEM_SYNTHESIS "chem_synthesis"
+#define TECHWEB_NODE_CIRCUIT_SHELLS "circuit_shells"
+#define TECHWEB_NODE_COMBAT_IMPLANTS "combat_implants"
+#define TECHWEB_NODE_CONSOLES "consoles"
+#define TECHWEB_NODE_CONSTRUCTION "construction"
+#define TECHWEB_NODE_CRYOSTASIS "cryostasis"
+#define TECHWEB_NODE_CYBER_IMPLANTS "cyber_implants"
+#define TECHWEB_NODE_CYBER_ORGANS "cyber_organs"
+#define TECHWEB_NODE_CYBER_ORGANS_ADV "cyber_organs_adv"
+#define TECHWEB_NODE_CYBER_ORGANS_UPGRADED "cyber_organs_upgraded"
+#define TECHWEB_NODE_CYBERNETICS "cybernetics"
+#define TECHWEB_NODE_CYTOLOGY "cytology"
+#define TECHWEB_NODE_ELECTRIC_WEAPONS "electric_weapons"
+#define TECHWEB_NODE_ENERGY_MANIPULATION "energy_manipulation"
+#define TECHWEB_NODE_EXODRONE "exodrone"
+#define TECHWEB_NODE_EXOTIC_AMMO "exotic_ammo"
+#define TECHWEB_NODE_EXP_TOOLS "exp_tools"
+#define TECHWEB_NODE_EXPLOSIVES "explosives"
+#define TECHWEB_NODE_EXTREME_OFFICE "extreme_office"
+#define TECHWEB_NODE_FISHING_EQUIP "fishing_equip"
+#define TECHWEB_NODE_FISHING_EQUIP_ADV "fishing_equip_adv"
+#define TECHWEB_NODE_FOOD_PROC "food_proc"
+#define TECHWEB_NODE_FUNDIMENTAL_SCI "fundimental_sci"
+#define TECHWEB_NODE_FUSION "fusion"
+#define TECHWEB_NODE_GAMING "gaming"
+#define TECHWEB_NODE_GAS_COMPRESSION "gas_compression"
+#define TECHWEB_NODE_GENE_ENGINEERING "gene_engineering"
+#define TECHWEB_NODE_HOLOGRAPHICS "holographics"
+#define TECHWEB_NODE_HUD "hud"
+#define TECHWEB_NODE_HYDROPONICS "hydroponics"
+#define TECHWEB_NODE_INTERGRATED_TOOLSETS "intergrated_toolsets"
+#define TECHWEB_NODE_INTERROGATION "interrogation"
+#define TECHWEB_NODE_LIGHT_APPS "light_apps"
+#define TECHWEB_NODE_LOW_PRESSURE_EXCAVATION "low_pressure_excavation"
+#define TECHWEB_NODE_MARINE_UTIL "marine_util"
+#define TECHWEB_NODE_MATERIAL_PROC "material_proc"
+#define TECHWEB_NODE_MECH_ASSAULT "mech_assault"
+#define TECHWEB_NODE_MECH_ASSEMBLY "mech_assembly"
+#define TECHWEB_NODE_MECH_CLOWN "mech_clown"
+#define TECHWEB_NODE_MECH_COMBAT "mech_combat"
+#define TECHWEB_NODE_MECH_ENERGY_GUNS "mech_energy_guns"
+#define TECHWEB_NODE_MECH_EQUIPMENT "mech_equipment"
+#define TECHWEB_NODE_MECH_FIREARMS "mech_firearms"
+#define TECHWEB_NODE_MECH_HEAVY "mech_heavy"
+#define TECHWEB_NODE_MECH_HEAVY_ARMS "mech_heavy_arms"
+#define TECHWEB_NODE_MECH_INFILTRATOR "mech_infiltrator"
+#define TECHWEB_NODE_MECH_LIGHT "mech_light"
+#define TECHWEB_NODE_MECH_MEDICAL "mech_medical"
+#define TECHWEB_NODE_MECH_MINING "mech_mining"
+#define TECHWEB_NODE_MEDBAY_EQUIP "medbay_equip"
+#define TECHWEB_NODE_MEDBAY_EQUIP_ADV "medbay_equip_adv"
+#define TECHWEB_NODE_MINING "mining"
+#define TECHWEB_NODE_MINING_ADV "mining_adv"
+#define TECHWEB_NODE_MOD_ANOMALY "mod_anomaly"
+#define TECHWEB_NODE_MOD_ENGI "mod_engi"
+#define TECHWEB_NODE_MOD_ENGI_ADV "mod_engi_adv"
+#define TECHWEB_NODE_MOD_ENTERTAINMENT "mod_entertainment"
+#define TECHWEB_NODE_MOD_EQUIP "mod_equip"
+#define TECHWEB_NODE_MOD_EXPERIMENTAL "mod_experimental"
+#define TECHWEB_NODE_MOD_MEDICAL "mod_medical"
+#define TECHWEB_NODE_MOD_MEDICAL_ADV "mod_medical_adv"
+#define TECHWEB_NODE_MOD_SECURITY "mod_security"
+#define TECHWEB_NODE_MOD_SUIT "mod_suit"
+#define TECHWEB_NODE_NIGHT_VISION "night_vision"
+#define TECHWEB_NODE_OFFICE_EQUIP "office_equip"
+#define TECHWEB_NODE_OLDSTATION_SURGERY "oldstation_surgery"
+#define TECHWEB_NODE_PARTS "parts"
+#define TECHWEB_NODE_PARTS_ADV "parts_adv"
+#define TECHWEB_NODE_PARTS_BLUESPACE "parts_bluespace"
+#define TECHWEB_NODE_PARTS_UPG "parts_upg"
+#define TECHWEB_NODE_PASSIVE_IMPLANTS "passive_implants"
+#define TECHWEB_NODE_PLASMA_CONTROL "plasma_control"
+#define TECHWEB_NODE_PLASMA_MINING "plasma_mining"
+#define TECHWEB_NODE_PLUMBING "plumbing"
+#define TECHWEB_NODE_POSITRONIC_SPHERE "positronic_sphere"
+#define TECHWEB_NODE_PROGRAMMED_ROBOT "programmed_robot"
+#define TECHWEB_NODE_PROGRAMMED_SERVER "programmed_server"
+#define TECHWEB_NODE_PROGRAMMING "programming"
+#define TECHWEB_NODE_RCD_UPGRADE "rcd_upgrade"
+#define TECHWEB_NODE_RIOT_SUPRESSION "riot_supression"
+#define TECHWEB_NODE_ROBOTICS "robotics"
+#define TECHWEB_NODE_SANITATION "sanitation"
+#define TECHWEB_NODE_SEC_EQUIP "sec_equip"
+#define TECHWEB_NODE_SELECTION "selection"
+#define TECHWEB_NODE_SPEC_ENG "spec_eng"
+#define TECHWEB_NODE_STICKY_ADVANCED "sticky_advanced"
+#define TECHWEB_NODE_SURGERY "surgery"
+#define TECHWEB_NODE_SURGERY_ADV "surgery_adv"
+#define TECHWEB_NODE_SURGERY_EXP "surgery_exp"
+#define TECHWEB_NODE_SURGERY_TOOLS "surgery_tools"
+#define TECHWEB_NODE_SYNDICATE_BASIC "syndicate_basic"
+#define TECHWEB_NODE_TACKLE_ADVANCED "tackle_advanced"
+#define TECHWEB_NODE_TELECOMS "telecoms"
+#define TECHWEB_NODE_TOYS "toys"
+#define TECHWEB_NODE_UNREGULATED_BLUESPACE "unregulated_bluespace"
+#define TECHWEB_NODE_XENOBIOLOGY "xenobiology"
diff --git a/code/__DEFINES/robots.dm b/code/__DEFINES/robots.dm
index 4ec8e1294c312..393e0f7b5f7d3 100644
--- a/code/__DEFINES/robots.dm
+++ b/code/__DEFINES/robots.dm
@@ -35,9 +35,9 @@
/// Special value to reset cyborg's lamp_cooldown
#define BORG_LAMP_CD_RESET -1
/// How many watts per lamp power is consumed while the lamp is on.
-#define BORG_LAMP_POWER_CONSUMPTION (1000 WATTS)
+#define BORG_LAMP_POWER_CONSUMPTION (5 WATTS)
/// The minimum power consumption of a cyborg.
-#define BORG_MINIMUM_POWER_CONSUMPTION (500 WATTS)
+#define BORG_MINIMUM_POWER_CONSUMPTION (1 WATTS)
//Module slot define
///The third module slots is disabed.
@@ -244,6 +244,21 @@ DEFINE_BITFIELD(medical_mode_flags, list(
"MEDBOT_TIPPED_MODE" = MEDBOT_TIPPED_MODE,
))
+///Whether we are stationary or not
+#define FIREBOT_STATIONARY_MODE (1<<0)
+///If we will extinguish people
+#define FIREBOT_EXTINGUISH_PEOPLE (1<<1)
+///if we will extinguish turfs on flames
+#define FIREBOT_EXTINGUISH_FLAMES (1<<2)
+
+DEFINE_BITFIELD(firebot_mode_flags, list(
+ "FIREBOT_STATIONARY_MODE" = FIREBOT_STATIONARY_MODE,
+ "FIREBOT_EXTINGUISH_PEOPLE" = FIREBOT_EXTINGUISH_PEOPLE,
+ "FIREBOT_EXTINGUISH_FLAMES" = FIREBOT_EXTINGUISH_FLAMES,
+))
+
+
+
//cleanBOT defines on what to clean
#define CLEANBOT_CLEAN_BLOOD (1<<0)
#define CLEANBOT_CLEAN_TRASH (1<<1)
@@ -284,6 +299,9 @@ DEFINE_BITFIELD(janitor_mode_flags, list(
#define FIREBOT_VOICED_ONLY_YOU "Only you can prevent station fires."
#define FIREBOT_VOICED_TEMPERATURE_NOMINAL "Temperature nominal."
#define FIREBOT_VOICED_KEEP_COOL "Keep it cool."
+#define FIREBOT_VOICED_CANDLE_TIP "Keep candles near curtains for cozy night lights!"
+#define FIREBOT_VOICED_ELECTRIC_FIRE "Keep full buckets of water near outlets in case of an electric fire!"
+#define FIREBOT_VOICED_FUEL_TIP "Pouring fuel on fire makes it burn out faster!"
#define HYGIENEBOT_VOICED_UNHYGIENIC "Unhygienic client found. Please stand still so I can clean you."
#define HYGIENEBOT_VOICED_ENJOY_DAY "Enjoy your clean and tidy day!"
diff --git a/code/__DEFINES/song.dm b/code/__DEFINES/song.dm
index 782a7923ea14f..0e7e9f0ce0692 100644
--- a/code/__DEFINES/song.dm
+++ b/code/__DEFINES/song.dm
@@ -15,3 +15,9 @@
#define MONKEY_SONG "BPM: 200\nC4/0,14,C,A4-F2,F3,A3,F-F2,A-F,F4,G4,F,D4-Bb2-G2\nD3,G3,D-G2,G3-G2,D,D4-G3,D,B4-B2,G,B3,G-B2,B3-B2\nG4,A4,G,E4-C3,E3,G3,E-C,G-C,E,E4-G,E,C5-E-A3,C4\nA-E3,C,E4-C3,A4-C4,B4-A3-A2,C5-C4,D5-F-B3,D4,B-F3\nD,F4-D3,D4,F-B-B2,G4-D,A4-C-F3,F,C/2,B3/2,A3-C3/2\nB/2,C4,E-C3,F4,G-C,F-F3,F-C,C4/2,B/2,A-A2/2,G3/2\nF/I"
///song played by the mook bard
#define MOOK_SONG "BPM: 240\nA5,B5,C#6,D6,E6/0.17,A/0.5,A/0.25,A3/0.25\nA4/0.25,C#5/0.25,E5/0.25,A/0.25,C#/0.25,E/0.12\nC#6/0.25,C#/0.25,E6/0.25,A3/0.25,A4/0.25\nC#5/0.25,E5/0.25,A/0.25,C#/0.25,E/0.25,D/0.25\nG6/0.25,D/0.17,F6/0.17,C#6/0.5,E6/0.5,D4/0.25\nA/0.25,D5/0.25,F5/0.25,A/0.25,D/0.25,F/0.25\nD6/0.08,F6/0.08,D4/0.25,A/0.25,D5/0.25,F5/0.25\nCn4/0.2,B/0.17,D6/0.17,G5/0.5,G/0.25,B3/0.25\nD4/0.25,G4/0.25,B4/0.25,D/0.25,G/0.25,B/0.12\nB5/0.25,B/0.25,D6/0.25,G3/0.25,G4/0.25,B4/0.25\nF/0.25,G/0.25,B/0.25,F/0.25,D/0.25,F6/0.25\nC6/0.17,E/0.17,B5/0.5,D#/0.5,C4/0.25,G/0.25\nC5/0.25,E5/0.25,G/0.25,C/0.25,E/0.25,C6/0.08\nE6/0.08,C4/0.25,Dn4/0.25,E4/0.25,A5/0.17,B/0.5\nC6/0.25,F5/0.08,F4/0.08,C5/0.08,E5/0.12,G5/0.12\nC6/0.25,E6/0.25,E4/0.08,C5/0.08,B/0.17,F6/0.17\nE6/0.5,B/0.25,E4/0.08,G#4/0.08,C6/0.17,D6/0.5\nE6/0.25,A3/0.25,E4/0.25,C5/0.25,Gn3/0.25\nF5/0.12,A5/0.12,A6/0.25,F3/0.25,F4/0.12,A4/0.12\nC/0.12,F6/0.17,A6/0.17,G#6/0.5,A/0.25,F3/0.25\nF4/0.12,A4/0.12,D#5/0.12,B/0.17,G#/0.17,B6/0.5\nB5/0.25,G#/0.25,E3/0.25,E4/0.12,G#4/0.12\nDn/0.12,E6/0.08,E3/0.25,F#3/0.25,G#3/0.25\nE5/0.17,A5/0.17,E/0.5,E/0.25,A3/0.25,C#4/0.25\nE4/0.25,C#/0.25,E/0.12,A5/0.5,B/0.5,C#6/0.5\nD6/0.5,A3/0.25,C#4/0.25,E/0.25,C#/0.25,E/0.25\nE6/0.08,Gn/0.25,E4/0.25,A4/0.25,C#5/0.25,E/0.25\nA/0.25,C#/0.25,E6/0.17,E/0.5,Fn6/0.5,G6/0.5\nG3/0.25,E4/0.25,A/0.25,C#/0.25,E/0.25,A/0.25\nC#/0.25,F/0.08,A6/0.08,F3/0.25,F4/0.25,A4/0.25\nCn/0.25,F/0.25,A/0.25,C/0.25,G6/0.12,A6/0.12\nG A G F6 G3/0.25 D4/0.25 G4/0.25 B4/0.25 D/0.25\nG/0.25 B/0.25 E6/0.12 G6/0.12 F/0.71 G/0.71 F/0.71\nE3/0.25 E4/0.25 G4/0.25 B/0.25 E/0.25 G/0.25 B/0.25\nA5/0.08 E6/0.08 A3/0.25 E4/0.25 A4/0.25 C#/0.25 E/0.25 A/0.25 C#/0.25 D6/0.17 E6/0.5 F/0.25 B3/0.25 D4/0.12 F4/0.12 B4/0.12 F6/0.25 E/0.25 D6/0.25 G#3/0.25 E4/0.12 G#4/0.12 B/0.12 Cn6/0.12 D/0.25 A3/0.25 A4/0.25 C5/0.25 E5/0.25 G#3/0.25 Gn/0.25 C4/0.25 E4/0.25 A/"
+///song played by the vibebot when cheering people up
+#define VIBEBOT_CHEER_SONG "BPM: 360\nE4/0.5,B4-G4/0.5,G-B-E/0.5,D4,Gb,A4-D-G/0.25\nGn-B3-E/0.5,G-B-E/0.5,A3-D-Gb/0.5,E-Gn-B/0.17,E,G\nB4/0.5,E-B-G/0.5,D,Gb,A4-D-G/0.25,B3-Gn-E/0.5\nG-B-E/0.5,A3-D-Gb/0.5,E-Gn-B/0.17,E-G-C5/0.5,G,E,G\nC,B4-Eb-Gb/0.5,B3-E-G/0.5,B-E-G3/0.5,C-Gn4-En/0.5\nG,E,G,C,Eb-Gb-B4/0.17,C-Gn-En/0.5,G,E,G,C\nB-C-Eb-Gb/0.5,B3-E-G/0.5,E-B-G3/0.5,C-En-Gn4,E,G,C\nE,G,A4-Gb-D5/0.17,E/0.5,B4-Gn/0.5,G-B-E/0.5,D4,Gb\nA-D-G/0.25,Gn-B3-E/0.5,G-B-E/0.5,A3-D-Gb/0.5\nE-Gn-B/0.17,E,G,B4/0.5,E-B-G/0.5,D,Gb,A4-D-G/0.25\nB3-Gn-E/0.5,G-B-E/0.5,A3-D-Gb/0.5,E-Gn-B/0.17\nE-G-C/0.5,G,E,G,C,B4-Eb-Gb/0.5,B3-E-G/0.5\nB-E-G3/0.5,C-Gn4-En/0.5,G,E,G,C,Eb-Gb-B4/0.17\nC-Gn-En/0.5,G,E,G,C,B-C-Eb-Gb/0.5,B3-E-G/0.5\nE-B-G3/0.5,C-En-Gn4,E,G,C,E,G,A4-Gb-D5/0.17\nGn-E-B/0.5,B-G3-E,E3-G-B,G4-E4-B/0.5,A3-D4-Gb/0.5\nA-D-G3/0.5,D3-G-A/0.5,Gn4-E-B/0.5,B-G3-E,E3-G-B\nG4-E4-B/0.5,A-D4-Gb/0.17,A4-F4-C4/0.5,C-A3-F\nF3-A-C,C-F4-A4/0.5,B-Gn-E/0.5,B-G3-E/0.5\nG-E3-B/0.5,A3-D-Gb4/0.5,D-A-G3/0.5,D3-A-G/0.5\nA-D4-G4/0.17,Gn-E4-B/0.5,B-G3-E,E3-G-B,G4-E4-B/0.5\nA-D-Gb/0.5,A-D-G3/0.5,D3-G-A/0.5,Gn4-E-B/0.5\nB-G3-E,E3-G-B,G4-E4-B/0.5,A-D4-Gb/0.17,A4-F-C/0.5\nC-A3-F,F3-A-C,C-F4-A4/0.5,B-Gn-E/0.5,B-G3-E/0.5\nG-E3-B/0.5,A3-D-Gb4/0.5,D-A-G3/0.5,D3-A-G/0.5\nE4-A-Db4/0.17,A2,E3,Gn-B-E4,A,E3,B-G-E4\nA3-Dn-F-D3/0.5,F3-A-D4/0.5,D3/0.5,A2,E3,B-E4-G,A\nE3,B-G-E4,F-D4-A3/0.17,A2,E3,B-E4-G,A,E3,B-G-E4\nB-A3-F4-D-D3/0.5,F3-D4-A/0.5,F-A-D3/0.5,A2,E3\nB-E4-G,A,E3,B-E4-G,F-A3-D4-D3/0.17,A2,E3,G-B-E4,A\nE3,B-G-E4,A3-D4-F4-D3/0.5,F3-A-D4/0.5,D3/0.5,A2,E3\nB-E4-G,A,E3,B-G-E4,F-D4-A3/0.17,A2,E3,B-E4-G,A,E3\nB-G-E4,B-A3-F4-D-D3/0.5,F3-D4-A/0.5,F-A-D3/0.5,A2\nE3,B-E4-G,A,E3,B-E4-G,F-A3-D4-D3/0.17,E/0.5\nB4-G4/0.5,G-B-E/0.5,D4,Gb,A4-D-G/0.25,Gn-B3-E/0.5\nG-B-E/0.5,A3-D-Gb/0.5,E-Gn-B/0.17,E,G,B4/0.5\nE-B-G/0.5,D,Gb,A4-D-G/0.25,B3-Gn-E/0.5,G-B-E/0.5\nA3-D-Gb/0.5,E-Gn-B/0.17,E-G-C5/0.5,G,E,G,C\nB4-Eb-Gb/0.5,B3-E-G/0.5,B-E-G3/0.5,C-Gn4-En/0.5,G\nE,G,C,Eb-Gb-B4/0.17,C-Gn-En/0.5,G,E,G,C\nB-Eb-Gb/0.5,B3-E-G/0.5,E-B-G3/0.53,En-Gn4/8,C,G,E\nB4,G,E,B3-E-G/0.07"
+///grim music played by the vibebot
+#define VIBEBOT_GRIM_MUSIC "BPM: 92\nG5/0.5,C#7-F#5/1.08,G6-G5/0.52,D6-D5,B6-E5/0.52\nG6-G5/1.08,D6-D5/0.34,Cn6-C5-G6/0.5,D,B5-F#6/13\nB4/0.52,C6-C5-G,A4/0.28,G-G5/0.5\nC#7-F#-F#5/1.08,G6-G5/0.52,D6-D5,B6-E/0.52,G-G6\nB5,D7/13,D6/0.52,Cn6,B6-B5,G-G5,G/0.5\nF#-C#7/1.08,G6-G5/0.22,G/0.5,C#-F#/1.08\nG6-G5/0.52,D-D5,B6-E/0.52,G6-G5/1.08,D6-D5/0.34\nCn6-C5-G6/0.5,D,B5-F#6/13,B4/0.52,C6-G-C5/0.25\nG-G5/0.5,C#7-F#-F#5/1.08,G6-G5/0.52,D6-D5\nB6-E/0.52,G-G6,B5,D7/13,D6/0.52,Cn6,B6-B5,G-G5\nG/0.5,F#-C#7/1.08,G6-G5/0.65"
+///happy birthday music we play to the birthday boy
+#define VIBEBOT_HAPPY_BIRTHDAY "BPM: 120\nG4/0.5,G4/0.25,A4/0.5,G4/0.5,C5/0.5,B4/1\nG4/0.5,G4/0.25,A4/0.5,G4/0.5,D5/0.5,C5/1\nG4/0.5,G4/0.5,G5/0.5,E5/0.5,C5/0.5,B4/0.5,A4/0.5\nF5/0.5,F5/0.5,E5/0.5,C5/0.5,D5/0.5,C5/1"
diff --git a/code/__DEFINES/surgery.dm b/code/__DEFINES/surgery.dm
index 42e00045761e5..feddc24c6f858 100644
--- a/code/__DEFINES/surgery.dm
+++ b/code/__DEFINES/surgery.dm
@@ -33,6 +33,8 @@
#define IS_ORGANIC_LIMB(limb) (limb.bodytype & BODYTYPE_ORGANIC)
/// Helper to figure out if a limb is robotic
#define IS_ROBOTIC_LIMB(limb) (limb.bodytype & BODYTYPE_ROBOTIC)
+/// Helper to figure out if a limb is a peg limb
+#define IS_PEG_LIMB(limb) (limb.bodytype & BODYTYPE_PEG)
// Flags for the bodypart_flags var on /obj/item/bodypart
/// Bodypart cannot be dismembered or amputated
diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm
index 17d9008a543b3..f3b6020b051ba 100644
--- a/code/__DEFINES/traits/declarations.dm
+++ b/code/__DEFINES/traits/declarations.dm
@@ -69,6 +69,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
// Antagonizes the above.
#define TRAIT_DISCOORDINATED_TOOL_USER "discoordinated_tool_user"
#define TRAIT_PACIFISM "pacifism"
+// Trait added to the user of a hippocratic oath status effect
+#define TRAIT_HIPPOCRATIC_OATH "hippocratic_oath"
#define TRAIT_IGNORESLOWDOWN "ignoreslow"
#define TRAIT_IGNOREDAMAGESLOWDOWN "ignoredamageslowdown"
/// Makes it so the mob can use guns regardless of tool user status
@@ -96,6 +98,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_IWASBATONED "iwasbatoned"
#define TRAIT_SLEEPIMMUNE "sleep_immunity"
#define TRAIT_PUSHIMMUNE "push_immunity"
+/// can't be kicked to the side
+#define TRAIT_NO_SIDE_KICK "no_side_kick"
/// Are we immune to shocks?
#define TRAIT_SHOCKIMMUNE "shock_immunity"
/// Are we immune to specifically tesla / SM shocks?
@@ -138,8 +142,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_AGENDER "agender"
/// Species with this trait have a blood clan mechanic
#define TRAIT_BLOOD_CLANS "blood_clans"
-/// Species with this trait have markings (this SUCKS, remove this later in favor of bodypart overlays)
-#define TRAIT_HAS_MARKINGS "has_markings"
/// Species with this trait use skin tones for coloration
#define TRAIT_USES_SKINTONES "uses_skintones"
/// Species with this trait use mutant colors for coloration
@@ -366,6 +368,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_GAMERGOD "gamer-god"
#define TRAIT_GIANT "giant"
#define TRAIT_DWARF "dwarf"
+/// Makes you way too tall. Like just too much, dude, it's kind of creepy. Humanoid only.
+#define TRAIT_TOO_TALL "too_tall"
/// makes your footsteps completely silent
#define TRAIT_SILENT_FOOTSTEPS "silent_footsteps"
/// hnnnnnnnggggg..... you're pretty good....
@@ -553,8 +557,11 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
///Given by /obj/item/virgin_mary, mobs that used this can no longer use it again ever
#define TRAIT_MAFIAINITIATE "mafiainitiate"
+/// Our mob has the mind reading genetic mutation.
+#define TRAIT_MIND_READER "mind reader"
+
///Makes the player appear as their respective job in Binary Talk rather than being a 'Default Cyborg'.
-#define DISPLAYS_JOB_IN_BINARY "display_job_in_binary"
+#define TRAIT_DISPLAY_JOB_IN_BINARY "display job in binary"
// METABOLISMS
// Various jobs on the station have historically had better reactions
@@ -1084,6 +1091,11 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Note this doesn't mean all spells are guaranteed to work or the mob is guaranteed to cast
#define TRAIT_CASTABLE_LOC "castable_loc"
+/// Needs above trait to work.
+/// This trait makes it so that any cast spells will attempt to transfer to the location's location.
+/// For example, a heretic inside the haunted blade's spells would emanate from the mob wielding the sword.
+#define TRAIT_SPELLS_TRANSFER_TO_LOC "spells_transfer_to_loc"
+
///Trait given by /datum/element/relay_attacker
#define TRAIT_RELAYING_ATTACKER "relaying_attacker"
@@ -1146,12 +1158,27 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Trait applied to objects and mobs that can attack a boulder and break it down. (See /obj/item/boulder/manual_process())
#define TRAIT_BOULDER_BREAKER "boulder_breaker"
+/// Trait given to anything linked to, not necessarily allied to, the mansus
+#define TRAIT_MANSUS_TOUCHED "mansus_touched"
+
/// Trait given to mobs wearing the clown mask
#define TRAIT_PERCEIVED_AS_CLOWN "perceived_as_clown"
/// Does this item bypass ranged armor checks?
#define TRAIT_BYPASS_RANGED_ARMOR "bypass_ranged_armor"
+/// Traits given by settler, each with their own specific effects for cases where someone would have that trait, but not the other settler effects
+
+#define TRAIT_EXPERT_FISHER "expert_fisher" // fishing is easier
+#define TRAIT_ROUGHRIDER "roughrider" // you can improve speed on mounted animals with a good mood
+#define TRAIT_STUBBY_BODY "stubby_body" // you have a stubby body that lessens your agility
+#define TRAIT_BEAST_EMPATHY "beast_empathy" // you're good with animals, such as with taming them
+#define TRAIT_STURDY_FRAME "sturdy_frame" // you suffer much lesser effects from equipment that slows you down
+
/// This item cannot be selected for or used by a theft objective (Spies, Traitors, etc.)
#define TRAIT_ITEM_OBJECTIVE_BLOCKED "item_objective_blocked"
+/// This trait lets you attach limbs to any player without surgery.
+#define TRAIT_EASY_ATTACH "easy_attach"
+///Trait given to the birthday boy
+#define TRAIT_BIRTHDAY_BOY "birthday_boy"
// END TRAIT DEFINES
diff --git a/code/__DEFINES/wires.dm b/code/__DEFINES/wires.dm
index 2b4c528abc212..4926996f26bd3 100644
--- a/code/__DEFINES/wires.dm
+++ b/code/__DEFINES/wires.dm
@@ -64,6 +64,8 @@
#define WIRE_ZAP1 "High Voltage Circuit 1"
#define WIRE_ZAP2 "High Voltage Circuit 2"
#define WIRE_OVERCLOCK "Overclock"
+#define WIRE_EQUIPMENT "Equipment"
+#define WIRE_ENVIRONMENT "Environment"
// Wire states for the AI
#define AI_WIRE_NORMAL 0
diff --git a/code/__HELPERS/atoms.dm b/code/__HELPERS/atoms.dm
index cb1e2a87f767e..406ea75143c66 100644
--- a/code/__HELPERS/atoms.dm
+++ b/code/__HELPERS/atoms.dm
@@ -325,14 +325,3 @@ rough example of the "cone" made by the 3 dirs checked
"x" = icon_width > world.icon_size && pixel_x != 0 ? (icon_width - world.icon_size) * 0.5 : 0,
"y" = icon_height > world.icon_size && pixel_y != 0 ? (icon_height - world.icon_size) * 0.5 : 0,
)
-
-/**
- * Called before an item is put into this atom's storage datum via the item clicking on this atom
- *
- * This can be used to add item-atom interactions that you want handled before inserting something into storage
- * (But it's also fairly snowflakey)
- *
- * Returning FALSE will block that item from being put into our storage
- */
-/atom/proc/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user)
- return TRUE
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 0aaca9a0907cf..aa953760bce71 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -205,18 +205,30 @@
return
winset(flashed_client, "mainwindow", "flash=5")
-///Recursively checks if an item is inside a given type, even through layers of storage. Returns the atom if it finds it.
+///Recursively checks if an item is inside a given type/atom, even through layers of storage. Returns the atom if it finds it.
/proc/recursive_loc_check(atom/movable/target, type)
- var/atom/atom_to_find = target
- if(istype(atom_to_find, type))
- return atom_to_find
-
- while(!istype(atom_to_find.loc, type))
- if(!atom_to_find.loc)
- return
- atom_to_find = atom_to_find.loc
-
- return atom_to_find.loc
+ var/atom/atom_to_find = null
+
+ if(ispath(type))
+ atom_to_find = target
+ if(istype(atom_to_find, type))
+ return atom_to_find
+
+ while(!istype(atom_to_find.loc, type))
+ if(!atom_to_find.loc)
+ return
+ atom_to_find = atom_to_find.loc
+ else if(isatom(type))
+ atom_to_find = target
+ if(atom_to_find.loc == type)
+ return atom_to_find
+
+ while(atom_to_find.loc != type)
+ if(!atom_to_find.loc)
+ return
+ atom_to_find = atom_to_find.loc
+
+ return atom_to_find
///Send a message in common radio when a player arrives
/proc/announce_arrival(mob/living/carbon/human/character, rank)
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 5237132e4b10e..06f81e742adfe 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -331,6 +331,9 @@ GLOBAL_LIST_INIT(skin_tone_names, list(
/proc/deadchat_broadcast(message, source=null, mob/follow_target=null, turf/turf_target=null, speaker_key=null, message_type=DEADCHAT_REGULAR, admin_only=FALSE)
message = span_deadsay("[source][span_linkify(message)]")
+ if(admin_only)
+ message += span_deadsay(" (This is viewable to admins only).")
+
for(var/mob/M in GLOB.player_list)
var/chat_toggles = TOGGLES_DEFAULT_CHAT
var/toggles = TOGGLES_DEFAULT
@@ -341,10 +344,8 @@ GLOBAL_LIST_INIT(skin_tone_names, list(
toggles = prefs.toggles
ignoring = prefs.ignoring
if(admin_only)
- if (!M.client?.holder)
- return
- else
- message += span_deadsay(" (This is viewable to admins only).")
+ if(!M.client?.holder)
+ continue
var/override = FALSE
if(M.client?.holder && (chat_toggles & CHAT_DEAD))
override = TRUE
diff --git a/code/__HELPERS/paths/jps.dm b/code/__HELPERS/paths/jps.dm
index 2dc46dea1b7cf..fbdccdef12c56 100644
--- a/code/__HELPERS/paths/jps.dm
+++ b/code/__HELPERS/paths/jps.dm
@@ -34,7 +34,7 @@
previous_node = incoming_previous_node
number_tiles = previous_node.number_tiles + jumps
node_goal = previous_node.node_goal
- heuristic = get_dist(tile, node_goal)
+ heuristic = get_dist_euclidean(tile, node_goal)
f_value = number_tiles + heuristic
// otherwise, no parent node means this is from a subscan lateral scan, so we just need the tile for now until we call [datum/jps/proc/update_parent] on it
@@ -47,7 +47,7 @@
node_goal = previous_node.node_goal
jumps = get_dist(tile, previous_node.tile)
number_tiles = previous_node.number_tiles + jumps
- heuristic = get_dist(tile, node_goal)
+ heuristic = get_dist_euclidean(tile, node_goal)
f_value = number_tiles + heuristic
/proc/HeapPathWeightCompare(datum/jps_node/a, datum/jps_node/b)
diff --git a/code/__HELPERS/screen_objs.dm b/code/__HELPERS/screen_objs.dm
index 7debecf816f3c..cb8520225ab8c 100644
--- a/code/__HELPERS/screen_objs.dm
+++ b/code/__HELPERS/screen_objs.dm
@@ -101,3 +101,15 @@
/proc/cut_relative_direction(fragment)
var/static/regex/regex = regex(@"([A-Z])\w+", "g")
return regex.Replace(fragment, "")
+
+/// Returns a screen_loc format for a tiling screen objects from start and end positions. Start should be bottom left corner, and end top right corner.
+/proc/spanning_screen_loc(start_px, start_py, end_px, end_py)
+ var/starting_tile_x = round(start_px / 32)
+ start_px -= starting_tile_x * 32
+ var/starting_tile_y = round(start_py/ 32)
+ start_py -= starting_tile_y * 32
+ var/ending_tile_x = round(end_px / 32)
+ end_px -= ending_tile_x * 32
+ var/ending_tile_y = round(end_py / 32)
+ end_py -= ending_tile_y * 32
+ return "[starting_tile_x]:[start_px],[starting_tile_y]:[start_py] to [ending_tile_x]:[end_px],[ending_tile_y]:[end_py]"
diff --git a/code/__HELPERS/spatial_info.dm b/code/__HELPERS/spatial_info.dm
index c23e3a408a53c..529532f50cf4d 100644
--- a/code/__HELPERS/spatial_info.dm
+++ b/code/__HELPERS/spatial_info.dm
@@ -283,7 +283,7 @@
return atoms
///Returns the distance between two atoms
-/proc/get_dist_euclidian(atom/first_location as turf|mob|obj, atom/second_location as turf|mob|obj)
+/proc/get_dist_euclidean(atom/first_location, atom/second_location)
var/dx = first_location.x - second_location.x
var/dy = first_location.y - second_location.y
diff --git a/code/__HELPERS/turfs.dm b/code/__HELPERS/turfs.dm
index c44845a5854b7..88509b88ce802 100644
--- a/code/__HELPERS/turfs.dm
+++ b/code/__HELPERS/turfs.dm
@@ -400,8 +400,8 @@ Turf and target are separate in case you want to teleport some distance from a t
/**
* Checks whether or not a particular typepath or subtype of it is present on a turf
*
- * Returns TRUE if an instance of the desired type or a subtype of it is found
- * Returns FALSE if the type is not found, or if no turf is supplied
+ * Returns the first instance located if an instance of the desired type or a subtype of it is found
+ * Returns null if the type is not found, or if no turf is supplied
*
* Arguments:
* * location - The turf to be checked for the desired type
@@ -409,10 +409,9 @@ Turf and target are separate in case you want to teleport some distance from a t
*/
/proc/is_type_on_turf(turf/location, type_to_find)
if(!location)
- return FALSE
- if(locate(type_to_find) in location)
- return TRUE
- return FALSE
+ return
+ var/found_type = locate(type_to_find) in location
+ return found_type
/**
* get_blueprint_data
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index 67f33d0460e47..f98178d537fa3 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -99,6 +99,7 @@ DEFINE_BITFIELD(clothing_flags, list(
"THICKMATERIAL" = THICKMATERIAL,
"VOICEBOX_DISABLED" = VOICEBOX_DISABLED,
"VOICEBOX_TOGGLABLE" = VOICEBOX_TOGGLABLE,
+ "INTERNALS_ADJUST_EXEMPT" = INTERNALS_ADJUST_EXEMPT,
))
DEFINE_BITFIELD(datum_flags, list(
@@ -390,6 +391,7 @@ DEFINE_BITFIELD(bodytype, list(
"BODYTYPE_LARVA_PLACEHOLDER" = BODYTYPE_LARVA_PLACEHOLDER,
"BODYTYPE_ALIEN" = BODYTYPE_ALIEN,
"BODYTYPE_GOLEM" = BODYTYPE_GOLEM,
+ "BODYTYPE_PEG" = BODYTYPE_PEG,
))
DEFINE_BITFIELD(acceptable_bodytype, list(
@@ -398,6 +400,7 @@ DEFINE_BITFIELD(acceptable_bodytype, list(
"BODYTYPE_LARVA_PLACEHOLDER" = BODYTYPE_LARVA_PLACEHOLDER,
"BODYTYPE_ALIEN" = BODYTYPE_ALIEN,
"BODYTYPE_GOLEM" = BODYTYPE_GOLEM,
+ "BODYTYPE_PEG" = BODYTYPE_PEG,
))
DEFINE_BITFIELD(bodyshape, list(
diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm
index 36f96bcc563e0..76c69425bf54b 100644
--- a/code/_globalvars/lists/maintenance_loot.dm
+++ b/code/_globalvars/lists/maintenance_loot.dm
@@ -111,7 +111,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/stack/rods/twentyfive = 1,
/obj/item/stack/sheet/iron/twenty = 1,
/obj/item/stack/sheet/mineral/plasma = 1,
- /obj/item/stock_parts/cell = 1,
+ /obj/item/stock_parts/power_store/cell = 1,
//assemblies
/obj/item/assembly/health = 1,
@@ -133,7 +133,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items
/obj/item/reagent_containers/cup/rag = 1,
/obj/item/reagent_containers/hypospray/medipen/pumpup = 2,
/obj/item/reagent_containers/syringe = 1,
- /obj/item/stock_parts/cell/lead = 1,
+ /obj/item/stock_parts/power_store/cell/lead = 1,
/obj/item/storage/box/matches = 1,
/obj/item/storage/fancy/cigarettes/dromedaryco = 1,
) = 1,
@@ -205,7 +205,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
/obj/item/seeds/kronkus = 1,
/obj/item/seeds/odious_puffball = 1,
/obj/item/stack/sheet/mineral/wood/fifty = 1,
- /obj/item/stock_parts/cell/high = 1,
+ /obj/item/stock_parts/power_store/cell/high = 1,
/obj/item/storage/box/clown = 1,
/obj/item/weaponcrafting/receiver = 1,
/obj/item/book/granter/crafting_recipe/death_sandwich = 1,
diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm
index 81fe08373b31a..dce2dc69a50ae 100644
--- a/code/_globalvars/lists/names.dm
+++ b/code/_globalvars/lists/names.dm
@@ -24,6 +24,7 @@ GLOBAL_LIST_INIT(nightmare_names, world.file2list("strings/names/nightmare.txt")
GLOBAL_LIST_INIT(megacarp_first_names, world.file2list("strings/names/megacarp1.txt"))
GLOBAL_LIST_INIT(megacarp_last_names, world.file2list("strings/names/megacarp2.txt"))
GLOBAL_LIST_INIT(cyberauth_names, world.file2list("strings/names/cyberauth.txt"))
+GLOBAL_LIST_INIT(hacker_aliases, world.file2list("strings/names/hackers.txt"))
GLOBAL_LIST_INIT(syndicate_monkey_names, world.file2list("strings/names/syndicate_monkey.txt"))
GLOBAL_LIST_INIT(cargorilla_names, world.file2list("strings/names/cargorilla.txt"))
GLOBAL_LIST_INIT(guardian_first_names, world.file2list("strings/names/guardian_descriptions.txt"))
diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm
index 9aaf244daa4a7..9823a7ff55160 100644
--- a/code/_globalvars/phobias.dm
+++ b/code/_globalvars/phobias.dm
@@ -245,7 +245,7 @@ GLOBAL_LIST_INIT(phobia_objs, list(
/obj/item/clothing/suit/hooded/carp_costume,
/obj/item/clothing/head/fedora/carpskin,
/obj/item/clothing/mask/gas/carp,
- /obj/item/clothing/mask/cigarette/carp,
+ /obj/item/cigarette/carp,
/obj/item/clothing/under/suit/carpskin,
/obj/item/food/cubancarp,
/obj/item/food/fishmeat/carp,
@@ -492,7 +492,6 @@ GLOBAL_LIST_INIT(phobia_objs, list(
/obj/item/clothing/suit/wizrobe,
/obj/item/clothing/under/rank/civilian/chaplain,
/obj/item/codex_cicatrix,
- /obj/item/cult_bastard,
/obj/item/gun/magic,
/obj/item/melee/cultblade,
/obj/item/melee/rune_carver,
diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm
index 1fe465da39f0d..87092adcff080 100644
--- a/code/_globalvars/traits/_traits.dm
+++ b/code/_globalvars/traits/_traits.dm
@@ -56,6 +56,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_NO_MISSING_ITEM_ERROR" = TRAIT_NO_MISSING_ITEM_ERROR,
"TRAIT_NO_THROW_HITPUSH" = TRAIT_NO_THROW_HITPUSH,
"TRAIT_NOT_ENGRAVABLE" = TRAIT_NOT_ENGRAVABLE,
+ "TRAIT_SPELLS_TRANSFER_TO_LOC" = TRAIT_SPELLS_TRANSFER_TO_LOC,
"TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT" = TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT,
"TRAIT_RUNECHAT_HIDDEN" = TRAIT_RUNECHAT_HIDDEN,
"TRAIT_SECLUDED_LOCATION" = TRAIT_SECLUDED_LOCATION,
@@ -138,7 +139,9 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_BALD" = TRAIT_BALD,
"TRAIT_BALLOON_SUTRA" = TRAIT_BALLOON_SUTRA,
"TRAIT_BATON_RESISTANCE" = TRAIT_BATON_RESISTANCE,
+ "TRAIT_BEAST_EMPATHY" = TRAIT_BEAST_EMPATHY,
"TRAIT_BEING_BLADE_SHIELDED" = TRAIT_BEING_BLADE_SHIELDED,
+ "TRAIT_BIRTHDAY_BOY" = TRAIT_BIRTHDAY_BOY,
"TRAIT_BLOB_ALLY" = TRAIT_BLOB_ALLY,
"TRAIT_BLOCK_SHUTTLE_MOVEMENT" = TRAIT_BLOCK_SHUTTLE_MOVEMENT,
"TRAIT_BLOOD_CLANS" = TRAIT_BLOOD_CLANS,
@@ -147,7 +150,9 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_BOMBIMMUNE" = TRAIT_BOMBIMMUNE,
"TRAIT_BONSAI" = TRAIT_BONSAI,
"TRAIT_BOOZE_SLIDER" = TRAIT_BOOZE_SLIDER,
+ "TRAIT_BOXING_READY" = TRAIT_BOXING_READY,
"TRAIT_BORN_MONKEY" = TRAIT_BORN_MONKEY,
+ "TRAIT_BOXING_READY" = TRAIT_BOXING_READY,
"TRAIT_BRAINWASHING" = TRAIT_BRAINWASHING,
"TRAIT_BRAWLING_KNOCKDOWN_BLOCKED" = TRAIT_BRAWLING_KNOCKDOWN_BLOCKED,
"TRAIT_BYPASS_EARLY_IRRADIATED_CHECK" = TRAIT_BYPASS_EARLY_IRRADIATED_CHECK,
@@ -185,7 +190,8 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_DISEASELIKE_SEVERITY_MEDIUM" = TRAIT_DISEASELIKE_SEVERITY_MEDIUM,
"TRAIT_DISFIGURED" = TRAIT_DISFIGURED,
"TRAIT_DISGUISED" = TRAIT_DISGUISED,
- "DISPLAYS_JOB_IN_BINARY" = DISPLAYS_JOB_IN_BINARY,
+ "TRAIT_DISPLAY_JOB_IN_BINARY" = TRAIT_DISPLAY_JOB_IN_BINARY,
+ "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER,
"TRAIT_DISK_VERIFIER" = TRAIT_DISK_VERIFIER,
"TRAIT_DISSECTED" = TRAIT_DISSECTED,
"TRAIT_DONT_WRITE_MEMORY" = TRAIT_DONT_WRITE_MEMORY,
@@ -208,6 +214,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_EXAMINE_FISHING_SPOT" = TRAIT_EXAMINE_FISHING_SPOT,
"TRAIT_EXAMINE_FITNESS" = TRAIT_EXAMINE_FITNESS,
"TRAIT_EXPANDED_FOV" = TRAIT_EXPANDED_FOV,
+ "TRAIT_EXPERT_FISHER" = TRAIT_EXPERT_FISHER,
"TRAIT_EXTROVERT" = TRAIT_EXTROVERT,
"TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH,
"TRAIT_FASTMED" = TRAIT_FASTMED,
@@ -248,7 +255,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_HARDLY_WOUNDED" = TRAIT_HARDLY_WOUNDED,
"TRAIT_HAS_BEEN_KIDNAPPED" = TRAIT_HAS_BEEN_KIDNAPPED,
"TRAIT_HAS_CRANIAL_FISSURE" = TRAIT_HAS_CRANIAL_FISSURE,
- "TRAIT_HAS_MARKINGS" = TRAIT_HAS_MARKINGS,
"TRAIT_HATED_BY_DOGS" = TRAIT_HATED_BY_DOGS,
"TRAIT_HEAD_INJURY_BLOCKED" = TRAIT_HEAD_INJURY_BLOCKED,
"TRAIT_HEALS_FROM_CARP_RIFTS" = TRAIT_HEALS_FROM_CARP_RIFTS,
@@ -288,14 +294,17 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_LITERATE" = TRAIT_LITERATE,
"TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM,
"TRAIT_MADNESS_IMMUNE" = TRAIT_MADNESS_IMMUNE,
+ "TRAIT_MAFIAINITIATE" = TRAIT_MAFIAINITIATE,
"TRAIT_MAGICALLY_GIFTED" = TRAIT_MAGICALLY_GIFTED,
"TRAIT_MAGICALLY_PHASED" = TRAIT_MAGICALLY_PHASED,
"TRAIT_MARTIAL_ARTS_IMMUNE" = TRAIT_MARTIAL_ARTS_IMMUNE,
+ "TRAIT_MANSUS_TOUCHED" = TRAIT_MANSUS_TOUCHED,
"TRAIT_MEDIBOTCOMINGTHROUGH" = TRAIT_MEDIBOTCOMINGTHROUGH,
"TRAIT_MEDICAL_HUD" = TRAIT_MEDICAL_HUD,
"TRAIT_MESON_VISION" = TRAIT_MESON_VISION,
"TRAIT_MIME_FAN" = TRAIT_MIME_FAN,
"TRAIT_MIMING" = TRAIT_MIMING,
+ "TRAIT_MIND_READER" = TRAIT_MIND_READER,
"TRAIT_MINDSHIELD" = TRAIT_MINDSHIELD,
"TRAIT_MIND_TEMPORARILY_GONE" = TRAIT_MIND_TEMPORARILY_GONE,
"TRAIT_MOB_BREEDER" = TRAIT_MOB_BREEDER,
@@ -357,6 +366,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_NO_TWOHANDING" = TRAIT_NO_TWOHANDING,
"TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR,
"TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY,
+ "TRAIT_HIPPOCRATIC_OATH" = TRAIT_HIPPOCRATIC_OATH,
"TRAIT_NUKEIMMUNE" = TRAIT_NUKEIMMUNE,
"TRAIT_OFF_BALANCE_TACKLER" = TRAIT_OFF_BALANCE_TACKLER,
"TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED,
@@ -415,6 +425,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_ROCK_METAMORPHIC" = TRAIT_ROCK_METAMORPHIC,
"TRAIT_ROCK_STONER" = TRAIT_ROCK_STONER,
"TRAIT_ROD_SUPLEX" = TRAIT_ROD_SUPLEX,
+ "TRAIT_ROUGHRIDER" = TRAIT_ROUGHRIDER,
"TRAIT_SABRAGE_PRO" = TRAIT_SABRAGE_PRO,
"TRAIT_SECURITY_HUD" = TRAIT_SECURITY_HUD,
"TRAIT_SEE_GLASS_COLORS" = TRAIT_SEE_GLASS_COLORS,
@@ -443,10 +454,14 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_STABLEHEART" = TRAIT_STABLEHEART,
"TRAIT_STABLELIVER" = TRAIT_STABLELIVER,
"TRAIT_STASIS" = TRAIT_STASIS,
+ "TRAIT_STIMMED" = TRAIT_STIMMED,
"TRAIT_STIMULATED" = TRAIT_STIMULATED,
+ "TRAIT_STRENGTH" = TRAIT_STRENGTH,
"TRAIT_STRONG_GRABBER" = TRAIT_STRONG_GRABBER,
"TRAIT_STRONG_STOMACH" = TRAIT_STRONG_STOMACH,
+ "TRAIT_STUBBY_BODY" = TRAIT_STUBBY_BODY,
"TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE,
+ "TRAIT_STURDY_FRAME" = TRAIT_STURDY_FRAME,
"TRAIT_SUCCUMB_OVERRIDE" = TRAIT_SUCCUMB_OVERRIDE,
"TRAIT_SUICIDED" = TRAIT_SUICIDED,
"TRAIT_SUPERMATTER_SOOTHER" = TRAIT_SUPERMATTER_SOOTHER,
@@ -465,6 +480,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_THINKING_IN_CHARACTER" = TRAIT_THINKING_IN_CHARACTER,
"TRAIT_THROWINGARM" = TRAIT_THROWINGARM,
"TRAIT_TIME_STOP_IMMUNE" = TRAIT_TIME_STOP_IMMUNE,
+ "TRAIT_TOO_TALL" = TRAIT_TOO_TALL,
"TRAIT_TOWER_OF_BABEL" = TRAIT_TOWER_OF_BABEL,
"TRAIT_TOXIMMUNE" = TRAIT_TOXIMMUNE,
"TRAIT_TOXINLOVER" = TRAIT_TOXINLOVER,
@@ -502,11 +518,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_XENO_IMMUNE" = TRAIT_XENO_IMMUNE,
"TRAIT_XRAY_HEARING" = TRAIT_XRAY_HEARING,
"TRAIT_XRAY_VISION" = TRAIT_XRAY_VISION,
- "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER,
- "TRAIT_MAFIAINITIATE" = TRAIT_MAFIAINITIATE,
- "TRAIT_STRENGTH" = TRAIT_STRENGTH,
- "TRAIT_STIMMED" = TRAIT_STIMMED,
- "TRAIT_BOXING_READY" = TRAIT_BOXING_READY,
),
/obj/item = list(
"TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING,
@@ -527,6 +538,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_NO_BARCODES" = TRAIT_NO_BARCODES,
"TRAIT_NO_STORAGE_INSERT" = TRAIT_NO_STORAGE_INSERT,
"TRAIT_NO_TELEPORT" = TRAIT_NO_TELEPORT,
+ "TRAIT_NO_SIDE_KICK" = TRAIT_NO_SIDE_KICK,
"TRAIT_NODROP" = TRAIT_NODROP,
"TRAIT_OMNI_BAIT" = TRAIT_OMNI_BAIT,
"TRAIT_PLANT_WILDMUTATE" = TRAIT_PLANT_WILDMUTATE,
@@ -548,6 +560,9 @@ GLOBAL_LIST_INIT(traits_by_type, list(
/obj/item/bodypart = list(
"TRAIT_PARALYSIS" = TRAIT_PARALYSIS,
),
+ /obj/item/bodypart = list(
+ "TRAIT_EASY_ATTACH" = TRAIT_EASY_ATTACH,
+ ),
/obj/item/card/id = list(
"TRAIT_JOB_FIRST_ID_CARD" = TRAIT_JOB_FIRST_ID_CARD,
"TRAIT_MAGNETIC_ID_CARD" = TRAIT_MAGNETIC_ID_CARD,
diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm
index d9f6350a07480..e29a140bfe03a 100644
--- a/code/_globalvars/traits/admin_tooling.dm
+++ b/code/_globalvars/traits/admin_tooling.dm
@@ -36,6 +36,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_BADTOUCH" = TRAIT_BADTOUCH,
"TRAIT_BALD" = TRAIT_BALD,
"TRAIT_BATON_RESISTANCE" = TRAIT_BATON_RESISTANCE,
+ "TRAIT_BEAST_EMPATHY" = TRAIT_BEAST_EMPATHY,
"TRAIT_BLOCK_SHUTTLE_MOVEMENT" = TRAIT_BLOCK_SHUTTLE_MOVEMENT,
"TRAIT_BLOOD_CLANS" = TRAIT_BLOOD_CLANS,
"TRAIT_BLOODSHOT_EYES" = TRAIT_BLOODSHOT_EYES,
@@ -72,6 +73,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_EMPATH" = TRAIT_EMPATH,
"TRAIT_EXAMINE_FITNESS" = TRAIT_EXAMINE_FITNESS,
"TRAIT_EXPANDED_FOV" = TRAIT_EXPANDED_FOV,
+ "TRAIT_EXPERT_FISHER" = TRAIT_EXPERT_FISHER,
"TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH,
"TRAIT_FAST_CUFFING" = TRAIT_FAST_CUFFING,
"TRAIT_FAT" = TRAIT_FAT,
@@ -94,7 +96,6 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_GUNFLIP" = TRAIT_GUNFLIP,
"TRAIT_HANDS_BLOCKED" = TRAIT_HANDS_BLOCKED,
"TRAIT_HARDLY_WOUNDED" = TRAIT_HARDLY_WOUNDED,
- "TRAIT_HAS_MARKINGS" = TRAIT_HAS_MARKINGS,
"TRAIT_HEAVY_SLEEPER" = TRAIT_HEAVY_SLEEPER,
"TRAIT_HIDE_EXTERNAL_ORGANS" = TRAIT_HIDE_EXTERNAL_ORGANS,
"TRAIT_HOLY" = TRAIT_HOLY,
@@ -162,6 +163,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED,
"TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE,
"TRAIT_PACIFISM" = TRAIT_PACIFISM,
+ "TRAIT_HIPPOCRATIC_OATH" = TRAIT_HIPPOCRATIC_OATH,
"TRAIT_PAPER_MASTER" = TRAIT_PAPER_MASTER,
"TRAIT_PARALYSIS_L_ARM" = TRAIT_PARALYSIS_L_ARM,
"TRAIT_PARALYSIS_L_LEG" = TRAIT_PARALYSIS_L_LEG,
@@ -189,6 +191,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_RESISTHIGHPRESSURE" = TRAIT_RESISTHIGHPRESSURE,
"TRAIT_RESISTLOWPRESSURE" = TRAIT_RESISTLOWPRESSURE,
"TRAIT_RESTRAINED" = TRAIT_RESTRAINED,
+ "TRAIT_ROUGHRIDER" = TRAIT_ROUGHRIDER,
"TRAIT_SECURITY_HUD" = TRAIT_SECURITY_HUD,
"TRAIT_SELF_AWARE" = TRAIT_SELF_AWARE,
"TRAIT_SETTLER" = TRAIT_SETTLER,
@@ -209,7 +212,9 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_STABLELIVER" = TRAIT_STABLELIVER,
"TRAIT_STRONG_GRABBER" = TRAIT_STRONG_GRABBER,
"TRAIT_STRONG_STOMACH" = TRAIT_STRONG_STOMACH,
+ "TRAIT_STUBBY_BODY" = TRAIT_STUBBY_BODY,
"TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE,
+ "TRAIT_STURDY_FRAME" = TRAIT_STURDY_FRAME,
"TRAIT_SURGEON" = TRAIT_SURGEON,
"TRAIT_SURGICALLY_ANALYZED" = TRAIT_SURGICALLY_ANALYZED,
"TRAIT_TAGGER" = TRAIT_TAGGER,
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 4dde5a7f04aeb..117c8e162d607 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -93,9 +93,9 @@
return
if(LAZYACCESS(modifiers, ALT_CLICK)) // alt and alt-gr (rightalt)
if(LAZYACCESS(modifiers, RIGHT_CLICK))
- base_click_alt_secondary(A)
+ AltClickSecondaryOn(A)
else
- base_click_alt(A)
+ AltClickOn(A)
return
if(LAZYACCESS(modifiers, CTRL_CLICK))
CtrlClickOn(A)
@@ -225,6 +225,10 @@
next += target.loc
checking = next
+
+ if(SEND_SIGNAL(src, COMSIG_ATOM_CANREACH, ultimate_target) & COMPONENT_ALLOW_REACH)
+ return TRUE
+
return FALSE
/atom/movable/proc/DirectAccess()
diff --git a/code/_onclick/click_alt.dm b/code/_onclick/click_alt.dm
index 957f55ab21793..28801b9816d36 100644
--- a/code/_onclick/click_alt.dm
+++ b/code/_onclick/click_alt.dm
@@ -1,5 +1,9 @@
+///Main proc for primary alt click
+/mob/proc/AltClickOn(atom/target)
+ base_click_alt(target)
+
/**
- * ### Base proc for alt click interaction left click.
+ * ### Base proc for alt click interaction left click. Returns if the click was intercepted & handled
*
* If you wish to add custom `click_alt` behavior for a single type, use that proc.
*/
@@ -8,50 +12,36 @@
// Check if they've hooked in to prevent src from alt clicking anything
if(SEND_SIGNAL(src, COMSIG_MOB_ALTCLICKON, target) & COMSIG_MOB_CANCEL_CLICKON)
- return
-
- // Is it visible (and we're not wearing it (our clothes are invisible))?
- if(!CAN_I_SEE(target))
- return
-
- if(is_blind() && !IN_GIVEN_RANGE(src, target, 1))
- return
+ return TRUE
- var/turf/tile = get_turf(target)
+ // If it has a signal handler that returns a click action, done.
+ if(SEND_SIGNAL(target, COMSIG_CLICK_ALT, src) & CLICK_ACTION_ANY)
+ return TRUE
- // Ghosties just see loot
- if(isobserver(src) || isrevenant(src))
- client.loot_panel.open(tile)
- return
+ // If it has a custom click_alt that returns success/block, done.
+ if(can_perform_action(target, (target.interaction_flags_click | SILENT_ADJACENCY)))
+ return target.click_alt(src) & CLICK_ACTION_ANY
- var/can_use_click_action = FALSE
- if(isturf(target))
- // Turfs are special because they can't be used with can_perform_action
- can_use_click_action = can_perform_turf_action(target)
- else
- can_use_click_action = can_perform_action(target, (target.interaction_flags_click | SILENT_ADJACENCY))
+ return FALSE
- if(can_use_click_action)
- // If it has a signal handler that returns a click action, done.
- if(SEND_SIGNAL(target, COMSIG_CLICK_ALT, src) & CLICK_ACTION_ANY)
- return
+/mob/living/base_click_alt(atom/target)
+ SHOULD_NOT_OVERRIDE(TRUE)
- // If it has a custom click_alt that returns success/block, done.
- if(target.click_alt(src) & CLICK_ACTION_ANY)
- return
+ . = ..()
+ if(. || !CAN_I_SEE(target) || (is_blind() && !IN_GIVEN_RANGE(src, target, 1)))
+ return
// No alt clicking to view turf from beneath
if(HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING))
return
/// No loot panel if it's on our person
- if(isobj(target) && isliving(src))
- var/mob/living/user = src
- if(target in user.get_all_gear())
- to_chat(user, span_warning("You can't search for this item, it's already in your inventory! Take it off first."))
- return
+ if(isobj(target) && (target in get_all_gear()))
+ to_chat(src, span_warning("You can't search for this item, it's already in your inventory! Take it off first."))
+ return
- client.loot_panel.open(tile)
+ client.loot_panel.open(get_turf(target))
+ return TRUE
/**
* ## Custom alt click interaction
@@ -85,6 +75,10 @@
return NONE
+///Main proc for secondary alt click
+/mob/proc/AltClickSecondaryOn(atom/target)
+ base_click_alt_secondary(target)
+
/**
* ### Base proc for alt click interaction right click.
*
@@ -97,22 +91,13 @@
if(SEND_SIGNAL(src, COMSIG_MOB_ALTCLICKON_SECONDARY, target) & COMSIG_MOB_CANCEL_CLICKON)
return
- var/can_use_click_action = FALSE
- if(isturf(target))
- // Turfs are special because they can't be used with can_perform_action
- can_use_click_action = can_perform_turf_action(target)
- else
- can_use_click_action = can_perform_action(target, target.interaction_flags_click | SILENT_ADJACENCY)
- if(!can_use_click_action)
- return
-
//Hook on the atom to intercept the click
if(SEND_SIGNAL(target, COMSIG_CLICK_ALT_SECONDARY, src) & COMPONENT_CANCEL_CLICK_ALT_SECONDARY)
return
- if(isobserver(src) && client && check_rights_for(client, R_DEBUG))
- client.toggle_tag_datum(src)
- return
- target.click_alt_secondary(src)
+
+ // If it has a custom click_alt_secondary then do that
+ if(can_perform_action(target, target.interaction_flags_click | SILENT_ADJACENCY))
+ target.click_alt_secondary(src)
/**
* ## Custom alt click secondary interaction
@@ -124,14 +109,3 @@
/atom/proc/click_alt_secondary(mob/user)
SHOULD_CALL_PARENT(FALSE)
return NONE
-
-/// Helper proc to validate turfs. Used because can_perform_action does not support turfs.
-/mob/proc/can_perform_turf_action(turf/target)
- if(!CanReach(target)) // No error message for parity with SILENT_ADJACENCY
- return FALSE
-
- if(incapacitated())
- to_chat(src, span_warning("You can't use this!"))
- return FALSE
-
- return TRUE
diff --git a/code/_onclick/click_ctrl.dm b/code/_onclick/click_ctrl.dm
index bb0491b2bb923..72f67b4271ed7 100644
--- a/code/_onclick/click_ctrl.dm
+++ b/code/_onclick/click_ctrl.dm
@@ -20,17 +20,11 @@
if(SEND_SIGNAL(target, COMSIG_CLICK_CTRL, src) & CLICK_ACTION_ANY)
return TRUE
- var/can_use_click_action = FALSE
- if(isturf(target))
- // Turfs are special because they can't be used with can_perform_action
- can_use_click_action = can_perform_turf_action(target)
- else
- can_use_click_action = can_perform_action(target, target.interaction_flags_click | SILENT_ADJACENCY)
- if(!can_use_click_action)
- return TRUE
-
// If it has a custom click_alt that returns success/block, done.
- return target.click_ctrl(src) & CLICK_ACTION_ANY
+ if(can_perform_action(target, target.interaction_flags_click | SILENT_ADJACENCY))
+ return target.click_ctrl(src) & CLICK_ACTION_ANY
+
+ return FALSE
/**
* Ctrl click
@@ -40,7 +34,7 @@
SHOULD_NOT_OVERRIDE(TRUE)
. = ..()
- if(. || world.time < next_move || !CanReach(target))
+ if(. || world.time < next_move || !can_perform_action(target, NOT_INSIDE_TARGET | SILENT_ADJACENCY))
return
. = TRUE
@@ -99,17 +93,9 @@
if(SEND_SIGNAL(target, COMSIG_CLICK_CTRL_SHIFT, src) & CLICK_ACTION_ANY)
return
- var/can_use_click_action = FALSE
- if(isturf(target))
- // Turfs are special because they can't be used with can_perform_action
- can_use_click_action = can_perform_turf_action(target)
- else
- can_use_click_action = can_perform_action(target, target.interaction_flags_click | SILENT_ADJACENCY)
- if(!can_use_click_action)
- return
-
// Proceed with ctrl shift click
- target.click_ctrl_shift(src)
+ if(can_perform_action(target, target.interaction_flags_click | SILENT_ADJACENCY))
+ target.click_ctrl_shift(src)
/**
* ## Custom ctrl shift click interaction
diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm
index b2665e1f98ed0..71d8a81b397c3 100644
--- a/code/_onclick/hud/action_button.dm
+++ b/code/_onclick/hud/action_button.dm
@@ -94,7 +94,7 @@
old_object.MouseExited(over_location, over_control, params)
last_hovored_ref = WEAKREF(over_object)
- over_object.MouseEntered(over_location, over_control, params)
+ over_object?.MouseEntered(over_location, over_control, params)
/atom/movable/screen/movable/action_button/MouseEntered(location, control, params)
. = ..()
@@ -130,6 +130,9 @@
our_hud.position_action_relative(src, button)
save_position()
return
+
+ . = ..()
+
our_hud.position_action(src, screen_loc)
save_position()
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index 2cfa8147c490f..f8f79f442940b 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -525,7 +525,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
alerttooltipstyle = "cult"
var/static/image/narnar
var/angle = 0
- var/mob/living/basic/construct/Cviewer
+ var/mob/living/basic/construct/construct_owner
/atom/movable/screen/alert/bloodsense/Initialize(mapload, datum/hud/hud_owner)
. = ..()
@@ -533,7 +533,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
START_PROCESSING(SSprocessing, src)
/atom/movable/screen/alert/bloodsense/Destroy()
- Cviewer = null
+ construct_owner = null
STOP_PROCESSING(SSprocessing, src)
return ..()
@@ -543,45 +543,53 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
if(!owner.mind)
return
+ if(isconstruct(owner))
+ construct_owner = owner
+ else
+ construct_owner = null
+
+ // construct track
+ if(construct_owner?.seeking && construct_owner.master)
+ blood_target = construct_owner.master
+ desc = "Your blood sense is leading you to [construct_owner.master]"
+
+ // cult track
var/datum/antagonist/cult/antag = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
- if(!antag)
- return
- var/datum/objective/sacrifice/sac_objective = locate() in antag.cult_team.objectives
+ if(antag)
+ var/datum/objective/sacrifice/sac_objective = locate() in antag.cult_team.objectives
+ if(antag.cult_team.blood_target)
+ if(!get_turf(antag.cult_team.blood_target))
+ antag.cult_team.unset_blood_target()
+ else
+ blood_target = antag.cult_team.blood_target
+ if(!blood_target)
+ if(sac_objective && !sac_objective.check_completion())
+ if(icon_state == "runed_sense0")
+ return
+ animate(src, transform = null, time = 1, loop = 0)
+ angle = 0
+ cut_overlays()
+ icon_state = "runed_sense0"
+ desc = "Nar'Sie demands that [sac_objective.target] be sacrificed before the summoning ritual can begin."
+ add_overlay(sac_objective.sac_image)
+ else
+ var/datum/objective/eldergod/summon_objective = locate() in antag.cult_team.objectives
+ if(!summon_objective)
+ return
+ var/list/location_list = list()
+ for(var/area/area_to_check in summon_objective.summon_spots)
+ location_list += area_to_check.get_original_area_name()
+ desc = "The sacrifice is complete, summon Nar'Sie! The summoning can only take place in [english_list(location_list)]!"
+ if(icon_state == "runed_sense1")
+ return
+ animate(src, transform = null, time = 1, loop = 0)
+ angle = 0
+ cut_overlays()
+ icon_state = "runed_sense1"
+ add_overlay(narnar)
+ return
- if(antag.cult_team.blood_target)
- if(!get_turf(antag.cult_team.blood_target))
- antag.cult_team.unset_blood_target()
- else
- blood_target = antag.cult_team.blood_target
- if(Cviewer?.seeking && Cviewer.master)
- blood_target = Cviewer.master
- desc = "Your blood sense is leading you to [Cviewer.master]"
- if(!blood_target)
- if(sac_objective && !sac_objective.check_completion())
- if(icon_state == "runed_sense0")
- return
- animate(src, transform = null, time = 1, loop = 0)
- angle = 0
- cut_overlays()
- icon_state = "runed_sense0"
- desc = "Nar'Sie demands that [sac_objective.target] be sacrificed before the summoning ritual can begin."
- add_overlay(sac_objective.sac_image)
- else
- var/datum/objective/eldergod/summon_objective = locate() in antag.cult_team.objectives
- if(!summon_objective)
- return
- var/list/location_list = list()
- for(var/area/area_to_check in summon_objective.summon_spots)
- location_list += area_to_check.get_original_area_name()
- desc = "The sacrifice is complete, summon Nar'Sie! The summoning can only take place in [english_list(location_list)]!"
- if(icon_state == "runed_sense1")
- return
- animate(src, transform = null, time = 1, loop = 0)
- angle = 0
- cut_overlays()
- icon_state = "runed_sense1"
- add_overlay(narnar)
- return
+ // actual tracking
var/turf/P = get_turf(blood_target)
var/turf/Q = get_turf(owner)
if(!P || !Q || (P.z != Q.z)) //The target is on a different Z level, we cannot sense that far.
@@ -593,6 +601,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
desc = "You are currently tracking [real_target.real_name] in [get_area_name(blood_target)]."
else
desc = "You are currently tracking [blood_target] in [get_area_name(blood_target)]."
+
var/target_angle = get_angle(Q, P)
var/target_dist = get_dist(P, Q)
cut_overlays()
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 2fc1fe644eec1..8cc29740870ca 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -294,7 +294,8 @@
/atom/movable/screen/close
name = "close"
plane = ABOVE_HUD_PLANE
- icon_state = "backpack_close"
+ icon = 'icons/hud/screen_midnight.dmi'
+ icon_state = "storage_close"
/atom/movable/screen/close/Initialize(mapload, datum/hud/hud_owner, new_master)
. = ..()
@@ -439,8 +440,8 @@
/atom/movable/screen/storage
name = "storage"
- icon_state = "block"
- screen_loc = "7,7 to 10,8"
+ icon = 'icons/hud/screen_midnight.dmi'
+ icon_state = "storage_cell"
plane = HUD_PLANE
/atom/movable/screen/storage/Initialize(mapload, datum/hud/hud_owner, new_master)
@@ -465,6 +466,27 @@
return TRUE
+/atom/movable/screen/storage/corner
+ name = "storage"
+ icon_state = "storage_corner_topleft"
+
+/atom/movable/screen/storage/corner/top_right
+ icon_state = "storage_corner_topright"
+
+/atom/movable/screen/storage/corner/bottom_left
+ icon_state = "storage_corner_bottomleft"
+
+/atom/movable/screen/storage/corner/bottom_right
+ icon_state = "storage_corner_bottomright"
+
+/atom/movable/screen/storage/rowjoin
+ name = "storage"
+ icon_state = "storage_rowjoin_left"
+ alpha = 0
+
+/atom/movable/screen/storage/rowjoin/right
+ icon_state = "storage_rowjoin_right"
+
/atom/movable/screen/throw_catch
name = "throw/catch"
icon = 'icons/hud/screen_midnight.dmi'
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index bb4cf4cd0299b..beeb1599f2038 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -458,9 +458,8 @@
return
var/message_verb_continuous = length(I.attack_verb_continuous) ? "[pick(I.attack_verb_continuous)]" : "attacks"
var/message_verb_simple = length(I.attack_verb_simple) ? "[pick(I.attack_verb_simple)]" : "attack"
- var/message_hit_area = ""
- if(hit_area)
- message_hit_area = " in the [hit_area]"
+ var/message_hit_area = get_hit_area_message(hit_area)
+
var/attack_message_spectator = "[src] [message_verb_continuous][message_hit_area] with [I]!"
var/attack_message_victim = "Something [message_verb_continuous] you[message_hit_area] with [I]!"
var/attack_message_attacker = "You [message_verb_simple] [src][message_hit_area] with [I]!"
@@ -475,3 +474,11 @@
to_chat(src, span_danger("Someone hits you[message_hit_area]!"))
to_chat(user, span_danger("[attack_message_attacker]"))
return 1
+
+/// Overridable proc so subtypes can have unique targetted strike zone messages, return a string.
+/mob/living/proc/get_hit_area_message(input_area)
+ if(input_area)
+ return " in the [input_area]"
+
+ return ""
+
diff --git a/code/controllers/subsystem/ambience.dm b/code/controllers/subsystem/ambience.dm
index e138c2d6048c5..712a8cd80f5de 100644
--- a/code/controllers/subsystem/ambience.dm
+++ b/code/controllers/subsystem/ambience.dm
@@ -27,6 +27,9 @@ SUBSYSTEM_DEF(ambience)
client_old_areas -= client_iterator
continue
+ if(!client_mob.can_hear()) //WHAT? I CAN'T HEAR YOU
+ continue
+
//Check to see if the client-mob is in a valid area
var/area/current_area = get_area(client_mob)
if(!current_area) //Something's gone horribly wrong
diff --git a/code/controllers/subsystem/radiation.dm b/code/controllers/subsystem/radiation.dm
index d52fe83856a45..6a9cc631cf529 100644
--- a/code/controllers/subsystem/radiation.dm
+++ b/code/controllers/subsystem/radiation.dm
@@ -74,7 +74,7 @@ SUBSYSTEM_DEF(radiation)
if(pulse_information.chance < 100) // Prevents log(0) runtime if chance is 100%
intensity = -log(1 - pulse_information.chance / 100) * (1 + pulse_information.max_range / 2) ** 2
- perceived_intensity = intensity * INVERSE((1 + get_dist_euclidian(source, target)) ** 2) // Diminishes over range.
+ perceived_intensity = intensity * INVERSE((1 + get_dist_euclidean(source, target)) ** 2) // Diminishes over range.
perceived_intensity *= (current_insulation - pulse_information.threshold) * INVERSE(1 - pulse_information.threshold) // Perceived intensity decreases as objects that absorb radiation block its trajectory.
perceived_chance = 100 * (1 - NUM_E ** -perceived_intensity)
else
diff --git a/code/controllers/subsystem/sprite_accessories.dm b/code/controllers/subsystem/sprite_accessories.dm
index ec5934ac8e8d4..f381df80df6da 100644
--- a/code/controllers/subsystem/sprite_accessories.dm
+++ b/code/controllers/subsystem/sprite_accessories.dm
@@ -35,7 +35,7 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity
var/list/socks_list //! stores /datum/sprite_accessory/socks indexed by name
//Lizard Bits (all datum lists indexed by name)
- var/list/body_markings_list
+ var/list/lizard_markings_list
var/list/snouts_list
var/list/horns_list
var/list/frills_list
@@ -87,7 +87,7 @@ SUBSYSTEM_DEF(accessories) // just 'accessories' for brevity
socks_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/socks)[DEFAULT_SPRITE_LIST]
- body_markings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings)[DEFAULT_SPRITE_LIST]
+ lizard_markings_list = init_sprite_accessory_subtypes(/datum/sprite_accessory/lizard_markings)[DEFAULT_SPRITE_LIST]
tails_list_human = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
tails_list_lizard = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
tails_list_monkey = init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, add_blank = TRUE)[DEFAULT_SPRITE_LIST]
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 468882f0e86ec..efca8dd19b5cc 100644
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -697,6 +697,13 @@ SUBSYSTEM_DEF(ticker)
to_chat(world, span_boldannounce("Rebooting World in [DisplayTimeText(delay)]. [reason]"))
+ var/statspage = CONFIG_GET(string/roundstatsurl)
+ var/gamelogloc = CONFIG_GET(string/gamelogurl)
+ if(statspage)
+ to_chat(world, span_info("Round statistics and logs can be viewed at this website!"))
+ else if(gamelogloc)
+ to_chat(world, span_info("Round logs can be located at this website!"))
+
var/start_wait = world.time
UNTIL(round_end_sound_sent || (world.time - start_wait) > (delay * 2)) //don't wait forever
sleep(delay - (world.time - start_wait))
@@ -707,13 +714,6 @@ SUBSYSTEM_DEF(ticker)
if(end_string)
end_state = end_string
- var/statspage = CONFIG_GET(string/roundstatsurl)
- var/gamelogloc = CONFIG_GET(string/gamelogurl)
- if(statspage)
- to_chat(world, span_info("Round statistics and logs can be viewed at this website!"))
- else if(gamelogloc)
- to_chat(world, span_info("Round logs can be located at this website!"))
-
log_game(span_boldannounce("Rebooting World. [reason]"))
world.Reboot()
diff --git a/code/datums/actions/items/cult_dagger.dm b/code/datums/actions/items/cult_dagger.dm
index 76e92c7b23198..6b188e85e9071 100644
--- a/code/datums/actions/items/cult_dagger.dm
+++ b/code/datums/actions/items/cult_dagger.dm
@@ -17,10 +17,10 @@
return ..()
/datum/action/item_action/cult_dagger/Trigger(trigger_flags)
- for(var/obj/item/held_item as anything in owner.held_items) // In case we were already holding a dagger
- if(istype(held_item, /obj/item/melee/cultblade/dagger))
- held_item.attack_self(owner)
- return
+ if(target in owner.held_items)
+ var/obj/item/target_item = target
+ target_item.attack_self(owner)
+ return
var/obj/item/target_item = target
if(owner.can_equip(target_item, ITEM_SLOT_HANDS))
owner.temporarilyRemoveItemFromInventory(target_item)
diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm
index 58e9746cbf086..7b46a7b06e803 100644
--- a/code/datums/ai/_ai_controller.dm
+++ b/code/datums/ai/_ai_controller.dm
@@ -625,7 +625,7 @@ multiple modular subtrees with behaviors
/datum/ai_controller/proc/post_blackboard_key_set(key)
if (isnull(pawn))
return
- SEND_SIGNAL(pawn, COMSIG_AI_BLACKBOARD_KEY_SET(key))
+ SEND_SIGNAL(pawn, COMSIG_AI_BLACKBOARD_KEY_SET(key), key)
/**
* Adds the passed "thing" to the associated key
diff --git a/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm b/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm
index 14f0d03207959..07b544bc0a296 100644
--- a/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm
+++ b/code/datums/ai/basic_mobs/targeting_strategies/basic_targeting_strategy.dm
@@ -137,3 +137,10 @@
/datum/targeting_strategy/basic/same_faction/faction_check(mob/living/living_mob, mob/living/the_target)
return !..() // inverts logic to ONLY target mobs that share a faction
+
+/datum/targeting_strategy/basic/allow_turfs
+
+/datum/targeting_strategy/basic/allow_turfs/can_attack(mob/living/living_mob, atom/the_target, vision_range)
+ if(isturf(the_target))
+ return TRUE
+ return ..()
diff --git a/code/datums/ai/objects/mod.dm b/code/datums/ai/objects/mod.dm
index edad77aa4c4af..2b4c1f7e2b001 100644
--- a/code/datums/ai/objects/mod.dm
+++ b/code/datums/ai/objects/mod.dm
@@ -4,6 +4,7 @@
BB_MOD_TARGET,
BB_MOD_IMPLANT,
)
+ can_idle = FALSE
max_target_distance = MOD_AI_RANGE //a little spicy but its one specific item that summons it, and it doesn't run otherwise
ai_movement = /datum/ai_movement/jps/modsuit
///ID card generated from the suit's required access. Used for pathing.
diff --git a/code/datums/ai/oldhostile/hostile_tameable.dm b/code/datums/ai/oldhostile/hostile_tameable.dm
index d76ffb8a282d4..1c30cb95487c1 100644
--- a/code/datums/ai/oldhostile/hostile_tameable.dm
+++ b/code/datums/ai/oldhostile/hostile_tameable.dm
@@ -106,10 +106,11 @@
if(!COOLDOWN_FINISHED(src, command_cooldown))
return
- if(!istype(clicker) || blackboard[BB_HOSTILE_FRIEND] != clicker)
+ if(!istype(clicker) || blackboard[BB_HOSTILE_FRIEND] != clicker || !clicker.can_perform_action(source))
return
- . = CLICK_ACTION_BLOCKING
+
INVOKE_ASYNC(src, PROC_REF(command_radial), clicker)
+ return CLICK_ACTION_BLOCKING
/// Show the command radial menu
/datum/ai_controller/hostile_friend/proc/command_radial(mob/living/clicker)
diff --git a/code/datums/bodypart_overlays/markings_bodypart_overlay.dm b/code/datums/bodypart_overlays/markings_bodypart_overlay.dm
new file mode 100644
index 0000000000000..c2c6f54d861d3
--- /dev/null
+++ b/code/datums/bodypart_overlays/markings_bodypart_overlay.dm
@@ -0,0 +1,31 @@
+/// For body markings applied on the species, which need some extra code
+/datum/bodypart_overlay/simple/body_marking
+ layers = EXTERNAL_ADJACENT
+ /// Listen to the gendercode, if the limb is bimorphic
+ var/use_gender = FALSE
+ /// Which dna feature key to draw from
+ var/dna_feature_key
+ /// Which bodyparts do we apply ourselves to?
+ var/list/applies_to = list(/obj/item/bodypart/head, /obj/item/bodypart/chest, /obj/item/bodypart/arm/left, /obj/item/bodypart/arm/right, \
+ /obj/item/bodypart/leg/left, /obj/item/bodypart/leg/right)
+
+/// Get the accessory list from SSaccessories. Used in species.dm to get the right sprite
+/datum/bodypart_overlay/simple/body_marking/proc/get_accessory(name)
+ CRASH("get_accessories() not overriden on [type] !")
+
+/datum/bodypart_overlay/simple/body_marking/get_image(layer, obj/item/bodypart/limb)
+ var/gender_string = (use_gender && limb.is_dimorphic) ? (limb.gender == MALE ? MALE : FEMALE + "_") : "" //we only got male and female sprites
+ return image(icon, gender_string + icon_state + "_" + limb.body_zone, layer = layer)
+
+/datum/bodypart_overlay/simple/body_marking/moth
+ dna_feature_key = "moth_markings"
+
+/datum/bodypart_overlay/simple/body_marking/moth/get_accessory(name)
+ return SSaccessories.moth_markings_list[name]
+
+/datum/bodypart_overlay/simple/body_marking/lizard
+ dna_feature_key = "lizard_markings"
+ applies_to = list(/obj/item/bodypart/chest)
+
+/datum/bodypart_overlay/simple/body_marking/lizard/get_accessory(name)
+ return SSaccessories.lizard_markings_list[name]
diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm
index a639a0f5714c9..d5f0a0e91240a 100644
--- a/code/datums/brain_damage/severe.dm
+++ b/code/datums/brain_damage/severe.dm
@@ -336,11 +336,11 @@
* This one is for "The Sister and He Who Wept" or /obj/structure/sign/painting/eldritch
*/
/datum/brain_trauma/severe/weeping
- name = "The Weeping"
- desc = "Patient hallucinates everyone as a figure called He Who Wept"
- scan_desc = "H_E##%%%WEEP6%11S!!,)()"
- gain_text = span_warning("HE WEEPS AND I WILL SEE HIM ONCE MORE")
- lose_text = span_notice("You feel the tendrils of something slip from your mind.")
+ name = "Psychotic Depression"
+ desc = "Patient is suffering from severe depressive episodes. Patient sometimes hallucinates during these episodes."
+ scan_desc = "depression"
+ gain_text = span_warning("The weeping... It haunts my mind...")
+ lose_text = span_notice("Your fixation ends. You feel significantly less stressed.")
random_gain = FALSE
/// Our cooldown declare for causing hallucinations
COOLDOWN_DECLARE(weeping_hallucinations)
@@ -360,11 +360,11 @@
//This one is for "The First Desire" or /obj/structure/sign/painting/eldritch/desire
/datum/brain_trauma/severe/flesh_desire
- name = "The Desire for Flesh"
- desc = "Patient appears hungrier and only wishes to eat meats."
- scan_desc = "H_(82882)G3E:__))9R"
- gain_text = span_warning("I feel a hunger, only organs and flesh will feed it...")
- lose_text = span_notice("You no longer feel the hunger for flesh...")
+ name = "Bean's Disorder"
+ desc = "Patient has a fixation on consuming raw flesh, particularly that of the same species. Patient also suffers from psychosomatic hunger pangs."
+ scan_desc = "moderate eating disorder"
+ gain_text = span_warning("You feel a hunger, for organs and raw meat...")
+ lose_text = span_notice("Your appetite returns to normal.")
random_gain = FALSE
/// How much faster we loose hunger
var/hunger_rate = 15
@@ -379,7 +379,7 @@
// Causes them to need to eat at 10x the normal rate
owner.adjust_nutrition(-hunger_rate * HUNGER_FACTOR)
if(SPT_PROB(10, seconds_per_tick))
- to_chat(owner, span_notice("You feel a ravenous hunger for flesh..."))
+ to_chat(owner, span_notice(pick("You can't stop thinking about raw meat...", "You **NEED** to eat someone.", "The hunger pangs are back...", "You hunger for flesh.", "You are starving!")))
owner.overeatduration = max(owner.overeatduration - 200 SECONDS, 0)
/datum/brain_trauma/severe/flesh_desire/on_lose()
@@ -389,11 +389,11 @@
// This one is for "Lady out of gates" or /obj/item/wallframe/painting/eldritch/beauty
/datum/brain_trauma/severe/eldritch_beauty
- name = "The Pursuit of Perfection"
- desc = "Patient seems to furiously scratch at their body, the only way to make them cease is for them to remove their jumpsuit."
- scan_desc = "I_)8(P_E##R&&F(E)C__T)"
- gain_text = span_warning("I WILL RID MY FLESH FROM IMPERFECTION!! I WILL BE PERFECT WITHOUT MY SUITS!!")
- lose_text = span_notice("You feel the influence of something slip your mind, and you feel content as you are.")
+ name = "Obsessive Perfectionism"
+ desc = "Patient is fixated on the perceived 'imperfection' of objects around them. Patient is agitated by the feeling of clothing on their body."
+ scan_desc = "obsessive personality disorder"
+ gain_text = span_warning("It's all *imperfect*! I can't stand any of it touching me!")
+ lose_text = span_notice("Your mind calms.")
random_gain = FALSE
/// How much damage we deal with each scratch
var/scratch_damage = 0.5
@@ -411,15 +411,15 @@
return
bodypart.receive_damage(scratch_damage)
if(SPT_PROB(33, seconds_per_tick))
- to_chat(owner, span_notice("You scratch furiously at [bodypart] to ruin the cloth that hides the beauty!"))
+ to_chat(owner, span_notice("You scratch furiously at the clothed [bodypart]!"))
// This one is for "Climb over the rusted mountain" or /obj/structure/sign/painting/eldritch/rust
/datum/brain_trauma/severe/rusting
- name = "The Rusted Climb"
- desc = "Patient seems to oxidise things around them at random, and seem to believe they are aiding a creature in climbing a mountin."
- scan_desc = "C_)L(#_I_##M;B"
- gain_text = span_warning("The rusted climb shall finish at the peak")
- lose_text = span_notice("The rusted climb? What's that? An odd dream to be sure.")
+ name = "Intermittent Psychic Manifestation Syndrome"
+ desc = "Patient suffers from a rare psychic disorder, and may manifest or amplify psychic phenomena in the area. Patient has no control over these phenomena."
+ scan_desc = "dangerous psi-wave activity"
+ gain_text = span_warning("Climb the rust. Master entropy.")
+ lose_text = span_notice("You feel like you just woke up from a bad dream.")
random_gain = FALSE
/datum/brain_trauma/severe/rusting/on_life(seconds_per_tick, times_fired)
@@ -429,7 +429,7 @@
return
if(SPT_PROB(50, seconds_per_tick))
- to_chat(owner, span_notice("You feel eldritch energies pulse from your body!"))
+ to_chat(owner, span_notice("You feel the decay..."))
tile.rust_heretic_act()
/datum/brain_trauma/severe/kleptomaniac
diff --git a/code/datums/elements/amputating_limbs.dm b/code/datums/components/amputating_limbs.dm
similarity index 65%
rename from code/datums/elements/amputating_limbs.dm
rename to code/datums/components/amputating_limbs.dm
index 8684a76f47fc3..bfaf52ca90ca5 100644
--- a/code/datums/elements/amputating_limbs.dm
+++ b/code/datums/components/amputating_limbs.dm
@@ -1,7 +1,5 @@
/// This component will intercept bare-handed attacks by the owner on sufficiently injured carbons and amputate random limbs instead
-/datum/element/amputating_limbs
- element_flags = ELEMENT_BESPOKE
- argument_hash_start_idx = 2
+/datum/component/amputating_limbs
/// How long does it take?
var/surgery_time
/// What is the means by which we describe the act of amputation?
@@ -12,34 +10,38 @@
var/snip_chance
/// The types of limb we can remove
var/list/target_zones
+ /// Callback for a proc right before confirming the attack. If it returns FALSE, cancel
+ var/datum/callback/pre_hit_callback
-/datum/element/amputating_limbs/Attach(
- datum/target,
+/datum/component/amputating_limbs/Initialize(
surgery_time = 5 SECONDS,
surgery_verb = "prying",
minimum_stat = SOFT_CRIT,
snip_chance = 100,
list/target_zones = list(BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_ARM, BODY_ZONE_R_LEG),
+ datum/callback/pre_hit_callback,
)
. = ..()
- if (!isliving(target))
- return ELEMENT_INCOMPATIBLE
+ if (!isliving(parent))
+ return COMPONENT_INCOMPATIBLE
if (!length(target_zones))
- CRASH("[src] for [target] was not provided a valid list of body zones to target.")
+ CRASH("[src] for [parent] was not provided a valid list of body zones to target.")
src.surgery_time = surgery_time
src.surgery_verb = surgery_verb
src.minimum_stat = minimum_stat
src.snip_chance = snip_chance
src.target_zones = target_zones
- RegisterSignals(target, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET), PROC_REF(try_amputate))
+ src.pre_hit_callback = pre_hit_callback
-/datum/element/amputating_limbs/Detach(datum/source)
- UnregisterSignal(source, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET))
- return ..()
+/datum/component/amputating_limbs/RegisterWithParent()
+ RegisterSignals(parent, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET), PROC_REF(try_amputate))
+
+/datum/component/amputating_limbs/UnregisterFromParent()
+ UnregisterSignal(parent, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET))
/// Called when you click on literally anything with your hands, see if it is an injured carbon and then try to cut it up
-/datum/element/amputating_limbs/proc/try_amputate(mob/living/surgeon, atom/victim, proximity, modifiers)
+/datum/component/amputating_limbs/proc/try_amputate(mob/living/surgeon, atom/victim, proximity, modifiers)
SIGNAL_HANDLER
if (!proximity || !iscarbon(victim) || HAS_TRAIT(victim, TRAIT_NODISMEMBER) || !prob(snip_chance))
return
@@ -52,6 +54,9 @@
surgeon.balloon_alert(surgeon, "already busy!")
return COMPONENT_CANCEL_ATTACK_CHAIN
+ if(pre_hit_callback && !pre_hit_callback.Invoke(victim))
+ return
+
var/list/valid_targets = list()
for (var/obj/item/bodypart/possible_target as anything in limbed_victim.bodyparts)
if (possible_target.bodypart_flags & BODYPART_UNREMOVABLE)
@@ -67,8 +72,9 @@
return COMPONENT_CANCEL_ATTACK_CHAIN
/// Chop one off
-/datum/element/amputating_limbs/proc/amputate(mob/living/surgeon, mob/living/carbon/victim, obj/item/bodypart/to_remove)
- surgeon.visible_message(span_warning("[surgeon] [surgery_verb] [to_remove] off of [victim]!"))
+/datum/component/amputating_limbs/proc/amputate(mob/living/surgeon, mob/living/carbon/victim, obj/item/bodypart/to_remove)
+ if(surgery_time > 0 SECONDS)
+ surgeon.visible_message(span_warning("[surgeon] is [surgery_verb] the [to_remove] off of [victim]!"))
if (surgery_time > 0 && !do_after(surgeon, delay = surgery_time, target = victim))
return
to_remove.dismember()
diff --git a/code/datums/components/bloodysoles.dm b/code/datums/components/bloodysoles.dm
index e1a60112c901f..ef882a5f96f28 100644
--- a/code/datums/components/bloodysoles.dm
+++ b/code/datums/components/bloodysoles.dm
@@ -76,7 +76,7 @@
///lowers bloody_shoes[index] by adjust_by
/datum/component/bloodysoles/proc/adjust_bloody_shoes(index, adjust_by)
bloody_shoes[index] = max(bloody_shoes[index] - adjust_by, 0)
- on_changed_bloody_shoes()
+ on_changed_bloody_shoes(index)
/datum/component/bloodysoles/proc/set_bloody_shoes(index, new_value)
bloody_shoes[index] = new_value
diff --git a/code/datums/components/combustible_flooder.dm b/code/datums/components/combustible_flooder.dm
index 5b5c7b61219b4..a4260a9641a9f 100644
--- a/code/datums/components/combustible_flooder.dm
+++ b/code/datums/components/combustible_flooder.dm
@@ -13,6 +13,7 @@
RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(attackby_react))
RegisterSignal(parent, COMSIG_ATOM_FIRE_ACT, PROC_REF(flame_react))
+ RegisterSignal(parent, COMSIG_ATOM_TOUCHED_SPARKS, PROC_REF(sparks_react))
RegisterSignal(parent, COMSIG_ATOM_BULLET_ACT, PROC_REF(projectile_react))
RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_WELDER), PROC_REF(welder_react))
if(isturf(parent))
@@ -62,6 +63,13 @@
if(exposed_temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
flood(null, exposed_temperature)
+/// sparks_touched reaction.
+/datum/component/combustible_flooder/proc/sparks_react(datum/source, obj/effect/particle_effect/sparks/sparks)
+ SIGNAL_HANDLER
+
+ if(sparks) // this shouldn't ever be false but existence is mysterious
+ flood(null, FIRE_MINIMUM_TEMPERATURE_TO_SPREAD)
+
/// Hotspot reaction.
/datum/component/combustible_flooder/proc/hotspots_react(datum/source, air, exposed_temperature)
SIGNAL_HANDLER
diff --git a/code/datums/components/crafting/chemistry.dm b/code/datums/components/crafting/chemistry.dm
index fc4d833be3fcc..70d6c76dea249 100644
--- a/code/datums/components/crafting/chemistry.dm
+++ b/code/datums/components/crafting/chemistry.dm
@@ -150,7 +150,7 @@
category = CAT_CHEMISTRY
/datum/crafting_recipe/improvised_chem_heater/on_craft_completion(mob/user, atom/result)
- var/obj/item/stock_parts/cell/cell = locate(/obj/item/stock_parts/cell) in range(1)
+ var/obj/item/stock_parts/power_store/cell/cell = locate(/obj/item/stock_parts/power_store/cell) in range(1)
if(!cell)
return
var/obj/machinery/space_heater/improvised_chem_heater/heater = result
diff --git a/code/datums/components/crafting/equipment.dm b/code/datums/components/crafting/equipment.dm
index 7e7b7aca26f24..bd2b8b1d8b60b 100644
--- a/code/datums/components/crafting/equipment.dm
+++ b/code/datums/components/crafting/equipment.dm
@@ -58,12 +58,12 @@
/obj/item/stack/rods = 8,
/obj/item/stock_parts/servo = 2,
/obj/item/stock_parts/capacitor = 1,
- /obj/item/stock_parts/cell = 1,
+ /obj/item/stock_parts/power_store/cell = 1,
)
parts = list(
/obj/item/stock_parts/servo = 2,
/obj/item/stock_parts/capacitor = 1,
- /obj/item/stock_parts/cell = 1,
+ /obj/item/stock_parts/power_store/cell = 1,
)
tool_behaviors = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WRENCH)
time = 20 SECONDS
diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm
index 6d4f4713f8bb1..dcf42ee47b1a5 100644
--- a/code/datums/components/crafting/guncrafting.dm
+++ b/code/datums/components/crafting/guncrafting.dm
@@ -84,8 +84,8 @@
desc = "A suitcase containing the necessary gun parts to tranform a standard energy gun into a temperature gun. Fantastic at birthday parties and killing indigenious populations of lizardpeople."
/obj/item/weaponcrafting/gunkit/beam_rifle
- name = "particle acceleration rifle part kit (lethal)"
- desc = "The coup de grace of guncrafting. This suitcase contains the highly experimental rig for a particle acceleration rifle. Requires an energy gun, a stabilized flux anomaly and a stabilized gravity anomaly."
+ name = "\improper Event Horizon anti-existential beam rifle part kit (DOOMSDAY DEVICE, DO NOT CONSTRUCT)"
+ desc = "What fevered minds wrought this terrible construction kit? To create a frame to harness the strange energies that flow through the Spinward Sector towards such horrible acts of violence?"
/obj/item/weaponcrafting/gunkit/ebow
name = "energy crossbow part kit (less lethal)"
diff --git a/code/datums/components/crafting/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm
index b646c4472ed98..c49900df07ab4 100644
--- a/code/datums/components/crafting/ranged_weapon.dm
+++ b/code/datums/components/crafting/ranged_weapon.dm
@@ -72,21 +72,18 @@
blacklist += subtypesof(/obj/item/gun/energy/e_gun)
/datum/crafting_recipe/beam_rifle
- name = "Particle Acceleration Rifle"
- result = /obj/item/gun/energy/beam_rifle
+ name = "Event Horizon Anti-Existential Beam Rifle"
+ result = /obj/item/gun/energy/event_horizon
reqs = list(
- /obj/item/gun/energy/e_gun = 1,
- /obj/item/assembly/signaler/anomaly/flux = 1,
+ /obj/item/assembly/signaler/anomaly/flux = 2,
/obj/item/assembly/signaler/anomaly/grav = 1,
+ /obj/item/assembly/signaler/anomaly/vortex = MAX_CORES_VORTEX,
+ /obj/item/assembly/signaler/anomaly/bluespace = 1,
/obj/item/weaponcrafting/gunkit/beam_rifle = 1,
)
- time = 10 SECONDS
+ time = 30 SECONDS //Maybe the delay will make you reconsider your choices
category = CAT_WEAPON_RANGED
-/datum/crafting_recipe/beam_rifle/New()
- ..()
- blacklist += subtypesof(/obj/item/gun/energy/e_gun)
-
/datum/crafting_recipe/ebow
name = "Energy Crossbow"
result = /obj/item/gun/energy/recharge/ebow/large
@@ -357,7 +354,7 @@
/obj/item/stack/cable_coil = 5,
/obj/item/pipe = 1,
/obj/item/stock_parts/micro_laser = 1,
- /obj/item/stock_parts/cell = 1,
+ /obj/item/stock_parts/power_store/cell = 1,
/obj/item/assembly/mousetrap = 1,
)
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WRENCH)
@@ -370,7 +367,7 @@
reqs = list(
/obj/item/gun/energy/disabler/smoothbore = 1,
/obj/item/stack/sheet/mineral/gold = 5,
- /obj/item/stock_parts/cell/hyper = 1,
+ /obj/item/stock_parts/power_store/cell/hyper = 1,
/datum/reagent/reaction_agent/speed_agent = 10,
)
tool_behaviors = list(TOOL_SCREWDRIVER)
diff --git a/code/datums/components/crafting/robot.dm b/code/datums/components/crafting/robot.dm
index 11a5887bf91c5..09c8455a77b39 100644
--- a/code/datums/components/crafting/robot.dm
+++ b/code/datums/components/crafting/robot.dm
@@ -75,21 +75,7 @@
var/obj/item/storage/medkit/medkit = bot.contents[3]
bot.medkit_type = medkit
bot.health_analyzer = bot.contents[4]
-
- ///if you add a new one don't forget to update /obj/item/storage/medkit/attackby()
- if (istype(medkit, /obj/item/storage/medkit/fire))
- bot.skin = "ointment"
- else if (istype(medkit, /obj/item/storage/medkit/toxin))
- bot.skin = "tox"
- else if (istype(medkit, /obj/item/storage/medkit/o2))
- bot.skin = "o2"
- else if (istype(medkit, /obj/item/storage/medkit/brute))
- bot.skin = "brute"
- else if (istype(medkit, /obj/item/storage/medkit/advanced))
- bot.skin = "advanced"
- else if (istype(src, /obj/item/storage/medkit/tactical))
- bot.skin = "bezerk"
-
+ bot.skin = medkit.get_medbot_skin()
bot.damage_type_healer = initial(medkit.damagetype_healed) ? initial(medkit.damagetype_healed) : BRUTE
bot.update_appearance()
@@ -107,7 +93,7 @@
/datum/crafting_recipe/firebot
name = "Firebot"
- result = /mob/living/simple_animal/bot/firebot
+ result = /mob/living/basic/bot/firebot
reqs = list(
/obj/item/extinguisher = 1,
/obj/item/bodypart/arm/right/robot = 1,
@@ -119,7 +105,7 @@
/datum/crafting_recipe/vibebot
name = "Vibebot"
- result = /mob/living/simple_animal/bot/vibebot
+ result = /mob/living/basic/bot/vibebot
reqs = list(
/obj/item/light/bulb = 2,
/obj/item/bodypart/head/robot = 1,
diff --git a/code/datums/components/crank_recharge.dm b/code/datums/components/crank_recharge.dm
index 10449a337e140..1f2272a8debc2 100644
--- a/code/datums/components/crank_recharge.dm
+++ b/code/datums/components/crank_recharge.dm
@@ -1,7 +1,7 @@
// Cranking feature on the laser musket and smoothbore disabler, could probably be used on more than guns
/datum/component/crank_recharge
/// Our cell to charge
- var/obj/item/stock_parts/cell/charging_cell
+ var/obj/item/stock_parts/power_store/charging_cell
/// Whether we spin our gun to reload (and therefore need the relevant trait)
var/spin_to_win = FALSE
/// How much charge we give our cell on each crank
@@ -20,7 +20,7 @@
. = ..()
if(!isitem(parent))
return COMPONENT_INCOMPATIBLE
- if(isnull(charging_cell) || !istype(charging_cell, /obj/item/stock_parts/cell))
+ if(isnull(charging_cell) || !istype(charging_cell, /obj/item/stock_parts/power_store))
return COMPONENT_INCOMPATIBLE
src.charging_cell = charging_cell
src.spin_to_win = spin_to_win
diff --git a/code/datums/components/cult_ritual_item.dm b/code/datums/components/cult_ritual_item.dm
index 7d9710977cecb..dedd30bda0ef5 100644
--- a/code/datums/components/cult_ritual_item.dm
+++ b/code/datums/components/cult_ritual_item.dm
@@ -128,6 +128,7 @@
INVOKE_ASYNC(src, PROC_REF(do_destroy_girder), target, cultist)
return COMPONENT_NO_AFTERATTACK
+
if(istype(target, /obj/structure/destructible/cult))
INVOKE_ASYNC(src, PROC_REF(do_unanchor_structure), target, cultist)
return COMPONENT_NO_AFTERATTACK
diff --git a/code/datums/components/damage_aura.dm b/code/datums/components/damage_aura.dm
index 98d323aa6d532..9c4e996113b84 100644
--- a/code/datums/components/damage_aura.dm
+++ b/code/datums/components/damage_aura.dm
@@ -36,6 +36,12 @@
/// Which factions are immune to the damage aura
var/list/immune_factions = null
+ /// If set, gives a message when damaged
+ var/damage_message = null
+
+ /// Probability for above.
+ var/message_probability = 0
+
/// Sets a special set of conditions for the owner
var/datum/weakref/current_owner = null
@@ -54,6 +60,8 @@
organ_damage = null,
simple_damage = 0,
immune_factions = null,
+ damage_message = null,
+ message_probability = 0,
mob/living/current_owner = null,
)
if (!isatom(parent))
@@ -72,6 +80,8 @@
src.organ_damage = organ_damage
src.simple_damage = simple_damage
src.immune_factions = immune_factions
+ src.damage_message = damage_message
+ src.message_probability = message_probability
src.current_owner = WEAKREF(current_owner)
/datum/component/damage_aura/Destroy(force)
@@ -120,6 +130,9 @@
if (candidate.health < candidate.maxHealth)
new /obj/effect/temp_visual/cosmic_gem(get_turf(candidate))
+ if(damage_message && prob(message_probability))
+ to_chat(candidate, damage_message)
+
if (iscarbon(candidate) || issilicon(candidate) || isbasicmob(candidate))
candidate.adjustBruteLoss(brute_damage * seconds_per_tick, updating_health = FALSE)
candidate.adjustFireLoss(burn_damage * seconds_per_tick, updating_health = FALSE)
diff --git a/code/datums/components/embedded.dm b/code/datums/components/embedded.dm
index b62121d30d073..45a3c07298ff0 100644
--- a/code/datums/components/embedded.dm
+++ b/code/datums/components/embedded.dm
@@ -200,7 +200,7 @@
/// everything async that ripOut used to do
/datum/component/embedded/proc/complete_rip_out(mob/living/carbon/victim, obj/item/I, obj/item/bodypart/limb, time_taken)
- victim.visible_message(span_warning("[victim] attempts to remove [weapon] from [victim.p_their()] [limb.plaintext_zone]."),span_notice("You attempt to remove [weapon] from your [limb.plaintext_zone]... (It will take [DisplayTimeText(time_taken)].)"))
+ victim.visible_message(span_warning("[victim] attempts to remove [weapon] from [victim.p_their()] [limb.plaintext_zone]."),span_notice("You attempt to remove [weapon] from your [limb.plaintext_zone]... (It will take [DisplayTimeText(time_taken)])"))
if(!do_after(victim, time_taken, target = victim))
return
if(!weapon || !limb || weapon.loc != victim || !(weapon in limb.embedded_objects))
@@ -279,12 +279,12 @@
var/pluck_time = rip_time * (weapon.w_class * 0.3) * (self_pluck ? 1.5 : 1) * tweezer_speed * (tweezer_safe ? 1 : 1.5)
if(self_pluck)
- user.visible_message(span_danger("[user] begins plucking [weapon] from [user.p_their()] [limb.plaintext_zone] with [possible_tweezers]..."), span_notice("You start plucking [weapon] from your [limb.plaintext_zone] with [possible_tweezers]... (It will take [DisplayTimeText(pluck_time)].)"),\
+ user.visible_message(span_danger("[user] begins plucking [weapon] from [user.p_their()] [limb.plaintext_zone] with [possible_tweezers]..."), span_notice("You start plucking [weapon] from your [limb.plaintext_zone] with [possible_tweezers]... (It will take [DisplayTimeText(pluck_time)])"),\
vision_distance=COMBAT_MESSAGE_RANGE, ignored_mobs=victim)
else
- user.visible_message(span_danger("[user] begins plucking [weapon] from [victim]'s [limb.plaintext_zone] with [possible_tweezers]..."),span_notice("You start plucking [weapon] from [victim]'s [limb.plaintext_zone] with [possible_tweezers]... (It will take [DisplayTimeText(pluck_time)]."), \
+ user.visible_message(span_danger("[user] begins plucking [weapon] from [victim]'s [limb.plaintext_zone] with [possible_tweezers]..."),span_notice("You start plucking [weapon] from [victim]'s [limb.plaintext_zone] with [possible_tweezers]... (It will take [DisplayTimeText(pluck_time)])"), \
vision_distance=COMBAT_MESSAGE_RANGE, ignored_mobs=victim)
- to_chat(victim, span_userdanger("[user] begins plucking [weapon] from your [limb.plaintext_zone] with [possible_tweezers]... (It will take [DisplayTimeText(pluck_time)]."))
+ to_chat(victim, span_userdanger("[user] begins plucking [weapon] from your [limb.plaintext_zone] with [possible_tweezers]... (It will take [DisplayTimeText(pluck_time)])"))
if(!do_after(user, pluck_time, victim))
if(self_pluck)
diff --git a/code/datums/components/ghost_direct_control.dm b/code/datums/components/ghost_direct_control.dm
index de5bca4fcadde..fb3a2c06e8360 100644
--- a/code/datums/components/ghost_direct_control.dm
+++ b/code/datums/components/ghost_direct_control.dm
@@ -142,13 +142,20 @@
return
if (extra_control_checks && !extra_control_checks.Invoke(harbinger))
return
+
harbinger.log_message("took control of [new_body].", LOG_GAME)
+ // doesn't transfer mind because that transfers antag datum as well
new_body.key = harbinger.key
- to_chat(new_body, span_boldnotice(assumed_control_message))
- after_assumed_control?.Invoke(harbinger)
+
+ // Already qdels due to below proc but just in case
qdel(src)
-/// When someone else assumes control via some other means, get rid of our component
-/datum/component/ghost_direct_control/proc/on_login()
+/// When someone assumes control, get rid of our component
+/datum/component/ghost_direct_control/proc/on_login(mob/harbinger)
SIGNAL_HANDLER
+ // This proc is called the very moment .key is set, so we need to force mind to initialize here if we want the invoke to affect the mind of the mob
+ if(isnull(harbinger.mind))
+ harbinger.mind_initialize()
+ to_chat(harbinger, span_boldnotice(assumed_control_message))
+ after_assumed_control?.Invoke(harbinger)
qdel(src)
diff --git a/code/datums/components/lockable_storage.dm b/code/datums/components/lockable_storage.dm
index c559c008c7923..482cb134159e0 100644
--- a/code/datums/components/lockable_storage.dm
+++ b/code/datums/components/lockable_storage.dm
@@ -47,7 +47,6 @@
if(can_hack_open)
RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_SCREWDRIVER), PROC_REF(on_screwdriver_act))
RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(on_multitool_act))
- RegisterSignal(parent, COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, PROC_REF(block_insert))
RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
RegisterSignal(parent, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, PROC_REF(on_requesting_context_from_item))
@@ -117,6 +116,7 @@
return NONE
panel_open = !panel_open
+ tool.play_tool_sound(source)
source.balloon_alert(user, "panel [panel_open ? "opened" : "closed"]")
return ITEM_INTERACT_SUCCESS
@@ -137,20 +137,11 @@
///Does a do_after to hack the storage open, takes a long time cause idk.
/datum/component/lockable_storage/proc/hack_open(atom/source, mob/user, obj/item/tool)
- if(!tool.use_tool(parent, user, 40 SECONDS))
+ if(!tool.use_tool(parent, user, 40 SECONDS, volume = 50))
return
source.balloon_alert(user, "hacked")
lock_code = null
-/// Stops you from shoving your tools into the storage if you're trying to hack it
-/datum/component/lockable_storage/proc/block_insert(atom/source, obj/item/inserting, mob/living/user)
- SIGNAL_HANDLER
- if(!can_hack_open || !source.atom_storage.locked)
- return NONE // allow insert
- if(inserting.tool_behaviour == TOOL_MULTITOOL || inserting.tool_behaviour == TOOL_SCREWDRIVER)
- return BLOCK_STORAGE_INSERT // block insert
- return NONE
-
///Updates the icon state depending on if we're locked or not.
/datum/component/lockable_storage/proc/on_update_icon_state(obj/source)
SIGNAL_HANDLER
diff --git a/code/datums/components/pet_commands/obeys_commands.dm b/code/datums/components/pet_commands/obeys_commands.dm
index ec3a04c940a2a..8aaa7e7179294 100644
--- a/code/datums/components/pet_commands/obeys_commands.dm
+++ b/code/datums/components/pet_commands/obeys_commands.dm
@@ -66,7 +66,7 @@
SIGNAL_HANDLER
var/mob/living/living_parent = parent
- if (IS_DEAD_OR_INCAP(living_parent))
+ if (IS_DEAD_OR_INCAP(living_parent) || !clicker.can_perform_action(living_parent))
return
if (!(clicker in living_parent.ai_controller?.blackboard[BB_FRIENDS_LIST]))
return // Not our friend, can't boss us around
diff --git a/code/datums/components/pet_commands/pet_commands_basic.dm b/code/datums/components/pet_commands/pet_commands_basic.dm
index 5ff476a85b959..d9ce0ccb56a46 100644
--- a/code/datums/components/pet_commands/pet_commands_basic.dm
+++ b/code/datums/components/pet_commands/pet_commands_basic.dm
@@ -222,6 +222,8 @@
var/protect_range = 9
///the behavior we will use when he is attacked
var/protect_behavior = /datum/ai_behavior/basic_melee_attack
+ ///message cooldown to prevent too many people from telling you not to commit suicide
+ COOLDOWN_DECLARE(self_harm_message_cooldown)
/datum/pet_command/protect_owner/add_new_friend(mob/living/tamer)
RegisterSignal(tamer, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(set_attacking_target))
@@ -252,6 +254,13 @@
var/mob/living/basic/owner = weak_parent.resolve()
if(isnull(owner))
return
+ if(source == attacker)
+ var/list/interventions = owner.ai_controller?.blackboard[BB_OWNER_SELF_HARM_RESPONSES] || list()
+ if (length(interventions) && COOLDOWN_FINISHED(src, self_harm_message_cooldown) && prob(30))
+ COOLDOWN_START(src, self_harm_message_cooldown, 5 SECONDS)
+ var/chosen_statement = pick(interventions)
+ INVOKE_ASYNC(owner, TYPE_PROC_REF(/atom/movable, say), chosen_statement)
+ return
var/mob/living/current_target = owner.ai_controller?.blackboard[BB_CURRENT_PET_TARGET]
if(attacker == current_target) //we are already dealing with this target
return
diff --git a/code/datums/components/riding/riding_mob.dm b/code/datums/components/riding/riding_mob.dm
index a808784b815ec..78158c55e8eb7 100644
--- a/code/datums/components/riding/riding_mob.dm
+++ b/code/datums/components/riding/riding_mob.dm
@@ -110,9 +110,14 @@
last_move_diagonal = ((direction & (direction - 1)) && (living_parent.loc == next))
var/modified_move_cooldown = vehicle_move_cooldown
var/modified_move_delay = vehicle_move_delay
- if(ishuman(user) && HAS_TRAIT(user, TRAIT_SETTLER))
- var/mob/living/carbon/human/settler_rider = user
- switch(settler_rider.mob_mood.sanity_level)
+ if(ishuman(user) && HAS_TRAIT(user, TRAIT_ROUGHRIDER)) // YEEHAW!
+ var/mob/living/carbon/human/rough_rider = user
+ var/ride_benefit = null
+ if(HAS_TRAIT(rough_rider, TRAIT_PRIMITIVE)) // closer to a beast than a man; you don't need to think to ride!
+ ride_benefit = SANITY_LEVEL_GREAT
+ else
+ ride_benefit = rough_rider.mob_mood.sanity_level
+ switch(ride_benefit)
if(SANITY_LEVEL_GREAT)
modified_move_cooldown *= 0.5
modified_move_delay *= 0.5
diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm
index f872c6bfd6939..6ff8197e09319 100644
--- a/code/datums/components/rotation.dm
+++ b/code/datums/components/rotation.dm
@@ -55,6 +55,7 @@
/datum/component/simple_rotation/proc/rotate_right(datum/source, mob/user)
SIGNAL_HANDLER
rotate(user, ROTATION_CLOCKWISE)
+ return CLICK_ACTION_SUCCESS
/datum/component/simple_rotation/proc/rotate_left(datum/source, mob/user)
SIGNAL_HANDLER
diff --git a/code/datums/components/shell.dm b/code/datums/components/shell.dm
index 20fbeb739276e..2e9ee73c32a06 100644
--- a/code/datums/components/shell.dm
+++ b/code/datums/components/shell.dm
@@ -137,7 +137,7 @@
examine_text += span_notice("There is an integrated circuit attached. Use a multitool to access the wiring. Use a screwdriver to remove it from [source].")
examine_text += span_notice("The cover panel to the integrated circuit is [locked? "locked" : "unlocked"].")
- var/obj/item/stock_parts/cell/cell = attached_circuit.cell
+ var/obj/item/stock_parts/power_store/cell = attached_circuit.cell
examine_text += span_notice("The charge meter reads [cell ? round(cell.percent(), 1) : 0]%.")
if (shell_flags & SHELL_FLAG_USB_PORT)
@@ -167,7 +167,7 @@
if(!is_authorized(attacker))
return
- if(istype(item, /obj/item/stock_parts/cell))
+ if(istype(item, /obj/item/stock_parts/power_store/cell))
source.balloon_alert(attacker, "can't put cell in directly!")
return
diff --git a/code/datums/components/spawner.dm b/code/datums/components/spawner.dm
index 29767d11ce6d1..26dbffaef6ff6 100644
--- a/code/datums/components/spawner.dm
+++ b/code/datums/components/spawner.dm
@@ -11,6 +11,8 @@
var/list/faction
/// List of weak references to things we have already created
var/list/spawned_things = list()
+ /// Callback to a proc that is called when a mob is spawned. Primarily used for sentient spawners.
+ var/datum/callback/spawn_callback
/// How many mobs can we spawn maximum each time we try to spawn? (1 - max)
var/max_spawn_per_attempt
/// Distance from the spawner to spawn mobs
@@ -19,7 +21,7 @@
var/spawn_distance_exclude
COOLDOWN_DECLARE(spawn_delay)
-/datum/component/spawner/Initialize(spawn_types = list(), spawn_time = 30 SECONDS, max_spawned = 5, max_spawn_per_attempt = 1 , faction = list(FACTION_MINING), spawn_text = null, spawn_distance = 1, spawn_distance_exclude = 0)
+/datum/component/spawner/Initialize(spawn_types = list(), spawn_time = 30 SECONDS, max_spawned = 5, max_spawn_per_attempt = 1 , faction = list(FACTION_MINING), spawn_text = null, datum/callback/spawn_callback = null, spawn_distance = 1, spawn_distance_exclude = 0, initial_spawn_delay = 0 SECONDS)
if (!islist(spawn_types))
CRASH("invalid spawn_types to spawn specified for spawner component!")
src.spawn_time = spawn_time
@@ -27,9 +29,13 @@
src.faction = faction
src.spawn_text = spawn_text
src.max_spawned = max_spawned
+ src.spawn_callback = spawn_callback
src.max_spawn_per_attempt = max_spawn_per_attempt
src.spawn_distance = spawn_distance
src.spawn_distance_exclude = spawn_distance_exclude
+ // If set, doesn't instantly spawn a creature when the spawner component is applied.
+ if(initial_spawn_delay)
+ COOLDOWN_START(src, spawn_delay, spawn_time)
RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(stop_spawning))
RegisterSignal(parent, COMSIG_VENT_WAVE_CONCLUDED, PROC_REF(stop_spawning))
@@ -89,6 +95,7 @@
SEND_SIGNAL(src, COMSIG_SPAWNER_SPAWNED, created)
RegisterSignal(created, COMSIG_QDELETING, PROC_REF(on_deleted))
+ spawn_callback?.Invoke(created)
if (spawn_text)
diff --git a/code/datums/components/spirit_holding.dm b/code/datums/components/spirit_holding.dm
index 578e378b51cb9..a7accc38352ee 100644
--- a/code/datums/components/spirit_holding.dm
+++ b/code/datums/components/spirit_holding.dm
@@ -6,12 +6,20 @@
/datum/component/spirit_holding
///bool on if this component is currently polling for observers to inhabit the item
var/attempting_awakening = FALSE
+ /// Allows renaming the bound item
+ var/allow_renaming
+ /// Allows channeling
+ var/allow_channeling
///mob contained in the item.
var/mob/living/basic/shade/bound_spirit
-/datum/component/spirit_holding/Initialize()
+/datum/component/spirit_holding/Initialize(datum/mind/soul_to_bind, mob/awakener, allow_renaming = TRUE, allow_channeling = TRUE)
if(!ismovable(parent)) //you may apply this to mobs, i take no responsibility for how that works out
return COMPONENT_INCOMPATIBLE
+ src.allow_renaming = allow_renaming
+ src.allow_channeling = allow_channeling
+ if(soul_to_bind)
+ bind_the_soule(soul_to_bind, awakener, soul_to_bind.name)
/datum/component/spirit_holding/Destroy(force)
. = ..()
@@ -30,7 +38,7 @@
/datum/component/spirit_holding/proc/on_examine(datum/source, mob/user, list/examine_list)
SIGNAL_HANDLER
if(!bound_spirit)
- examine_list += span_notice("[parent] sleeps. Use [parent] in your hands to attempt to awaken it.")
+ examine_list += span_notice("[parent] sleeps.[allow_channeling ? " Use [parent] in your hands to attempt to awaken it." : ""]")
return
examine_list += span_notice("[parent] is alive.")
@@ -48,6 +56,9 @@
thing.balloon_alert(user, "spirits are unwilling!")
to_chat(user, span_warning("Anomalous otherworldly energies block you from awakening [parent]!"))
return
+ if(!allow_channeling && bound_spirit)
+ to_chat(user, span_warning("Try as you might, the spirit within slumbers."))
+ return
attempting_awakening = TRUE
thing.balloon_alert(user, "channeling...")
var/mob/chosen_one = SSpolling.poll_ghosts_for_target(
@@ -74,28 +85,29 @@
// Immediately unregister to prevent making a new spirit
UnregisterSignal(parent, COMSIG_ITEM_ATTACK_SELF)
-
if(QDELETED(parent)) //if the thing that we're conjuring a spirit in has been destroyed, don't create a spirit
to_chat(ghost, span_userdanger("The new vessel for your spirit has been destroyed! You remain an unbound ghost."))
return
- bound_spirit = new(parent)
- bound_spirit.ckey = ghost.ckey
- bound_spirit.fully_replace_character_name(null, "The spirit of [parent]")
- bound_spirit.status_flags |= GODMODE
- bound_spirit.copy_languages(awakener, LANGUAGE_MASTER) //Make sure the sword can understand and communicate with the awakener.
- bound_spirit.get_language_holder().omnitongue = TRUE //Grants omnitongue
+ bind_the_soule(ghost, awakener)
- //Add new signals for parent and stop attempting to awaken
- RegisterSignal(parent, COMSIG_ATOM_RELAYMOVE, PROC_REF(block_buckle_message))
- RegisterSignal(parent, COMSIG_BIBLE_SMACKED, PROC_REF(on_bible_smacked))
+ attempting_awakening = FALSE
+ if(!allow_renaming)
+ return
// Now that all of the important things are in place for our spirit, it's time for them to choose their name.
var/valid_input_name = custom_name(awakener)
if(valid_input_name)
bound_spirit.fully_replace_character_name(null, "The spirit of [valid_input_name]")
- attempting_awakening = FALSE
+/datum/component/spirit_holding/proc/bind_the_soule(datum/mind/chosen_spirit, mob/awakener, name_override)
+ bound_spirit = new(parent)
+ chosen_spirit.transfer_to(bound_spirit)
+ bound_spirit.fully_replace_character_name(null, "The spirit of [name_override ? name_override : parent]")
+ bound_spirit.get_language_holder().omnitongue = TRUE //Grants omnitongue
+
+ RegisterSignal(parent, COMSIG_ATOM_RELAYMOVE, PROC_REF(block_buckle_message))
+ RegisterSignal(parent, COMSIG_BIBLE_SMACKED, PROC_REF(on_bible_smacked))
/**
* custom_name : Simply sends a tgui input text box to the blade asking what name they want to be called, and retries it if the input is invalid.
diff --git a/code/datums/components/style/style_meter.dm b/code/datums/components/style/style_meter.dm
index c06fc35aca383..94263700dda21 100644
--- a/code/datums/components/style/style_meter.dm
+++ b/code/datums/components/style/style_meter.dm
@@ -93,10 +93,10 @@
/obj/item/style_meter/proc/on_click_alt(datum/source, mob/user)
SIGNAL_HANDLER
- if(!istype(loc, /obj/item/clothing/glasses))
+ if(!istype(loc, /obj/item/clothing/glasses) || !user.can_perform_action(source))
return CLICK_ACTION_BLOCKING
- clean_up()
+ clean_up(loc)
forceMove(get_turf(src))
return CLICK_ACTION_SUCCESS
diff --git a/code/datums/components/supermatter_crystal.dm b/code/datums/components/supermatter_crystal.dm
index 9ff049e21fcbb..81a29b56c6d81 100644
--- a/code/datums/components/supermatter_crystal.dm
+++ b/code/datums/components/supermatter_crystal.dm
@@ -161,8 +161,8 @@
return
if(is_type_in_typecache(item, sm_item_whitelist))
return FALSE
- if(istype(item, /obj/item/clothing/mask/cigarette))
- var/obj/item/clothing/mask/cigarette/cig = item
+ if(istype(item, /obj/item/cigarette))
+ var/obj/item/cigarette/cig = item
var/clumsy = HAS_TRAIT(user, TRAIT_CLUMSY)
if(clumsy)
var/which_hand = BODY_ZONE_L_ARM
diff --git a/code/datums/components/surgery_initiator.dm b/code/datums/components/surgery_initiator.dm
index 41c5f1ef87ad7..de3f83739e546 100644
--- a/code/datums/components/surgery_initiator.dm
+++ b/code/datums/components/surgery_initiator.dm
@@ -136,8 +136,8 @@
if(iscyborg(user))
var/has_cautery = FALSE
- for(var/obj/item/borg/cyborg_omnitool/medical/omnitool in user.held_items)
- if(omnitool.tool_behaviour == TOOL_CAUTERY)
+ for(var/obj/item/borg/cyborg_omnitool/toolarm in user.held_items)
+ if(toolarm.selected && istype(toolarm.selected, /obj/item/cautery))
has_cautery = TRUE
if(!has_cautery)
patient.balloon_alert(user, "need a cautery in an inactive slot to stop the surgery!")
diff --git a/code/datums/components/tameable.dm b/code/datums/components/tameable.dm
index 43f48005bf89e..0d77688a22e7a 100644
--- a/code/datums/components/tameable.dm
+++ b/code/datums/components/tameable.dm
@@ -42,7 +42,7 @@
var/inform_tamer = FALSE
atom_parent.balloon_alert(attacker, "fed")
var/modified_tame_chance = current_tame_chance
- if(HAS_TRAIT(attacker, TRAIT_SETTLER))
+ if(HAS_TRAIT(attacker, TRAIT_BEAST_EMPATHY))
modified_tame_chance += 50
inform_tamer = TRUE
if(unique || !already_friends(attacker))
@@ -71,7 +71,7 @@
if(inform_tamer)
source.balloon_alert(tamer, "tamed")
- if(HAS_TRAIT(tamer, TRAIT_SETTLER))
+ if(HAS_TRAIT(tamer, TRAIT_BEAST_EMPATHY))
INVOKE_ASYNC(src, PROC_REF(rename_pet), source, tamer)
if(unique)
qdel(src)
diff --git a/code/datums/components/temporary_body.dm b/code/datums/components/temporary_body.dm
index 3da289a6d3462..28a7000a4951d 100644
--- a/code/datums/components/temporary_body.dm
+++ b/code/datums/components/temporary_body.dm
@@ -10,17 +10,23 @@
var/datum/weakref/old_mind_ref
///The old body we will be put back into when parent is being deleted.
var/datum/weakref/old_body_ref
+ /// Returns the mind if the parent dies by any means
+ var/delete_on_death = FALSE
-/datum/component/temporary_body/Initialize(datum/mind/old_mind, mob/living/old_body)
+/datum/component/temporary_body/Initialize(datum/mind/old_mind, mob/living/old_body, delete_on_death = FALSE)
if(!isliving(parent) || !isliving(old_body))
return COMPONENT_INCOMPATIBLE
ADD_TRAIT(old_body, TRAIT_MIND_TEMPORARILY_GONE, REF(src))
src.old_mind_ref = WEAKREF(old_mind)
src.old_body_ref = WEAKREF(old_body)
+ src.delete_on_death = delete_on_death
/datum/component/temporary_body/RegisterWithParent()
RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(on_parent_destroy))
+ if(delete_on_death)
+ RegisterSignal(parent, COMSIG_LIVING_DEATH, PROC_REF(on_parent_destroy))
+
/datum/component/temporary_body/UnregisterFromParent()
UnregisterSignal(parent, COMSIG_QDELETING)
diff --git a/code/datums/components/toggle_suit.dm b/code/datums/components/toggle_suit.dm
index aee7522745e77..022fc37c07a26 100644
--- a/code/datums/components/toggle_suit.dm
+++ b/code/datums/components/toggle_suit.dm
@@ -36,24 +36,15 @@
* source - the atom being clicked on
* user - the mob doing the click
*/
-/datum/component/toggle_icon/proc/on_click_alt(atom/source, mob/user)
+/datum/component/toggle_icon/proc/on_click_alt(atom/source, mob/living/living_user)
SIGNAL_HANDLER
- if(!isliving(user))
+ if(!isliving(living_user) || !living_user.can_perform_action(source))
return
- var/mob/living/living_user = user
-
- if(!living_user.Adjacent(source))
- return
-
- if(living_user.incapacitated())
- source.balloon_alert(user, "you're incapacitated!")
- return CLICK_ACTION_BLOCKING
-
if(living_user.usable_hands <= 0)
- source.balloon_alert(user, "you don't have hands!")
- return CLICK_ACTION_BLOCKING
+ source.balloon_alert(living_user, "you don't have hands!")
+ return
do_icon_toggle(source, living_user)
return CLICK_ACTION_SUCCESS
diff --git a/code/datums/components/trapdoor.dm b/code/datums/components/trapdoor.dm
index f76dcf35e705a..32b72c48853e5 100644
--- a/code/datums/components/trapdoor.dm
+++ b/code/datums/components/trapdoor.dm
@@ -349,8 +349,8 @@
. = ..()
AddElement(/datum/element/openspace_item_click_handler)
-/obj/item/trapdoor_kit/handle_openspace_click(turf/target, mob/user, click_parameters)
- interact_with_atom(target, user, click_parameters)
+/obj/item/trapdoor_kit/handle_openspace_click(turf/target, mob/user, list/modifiers)
+ interact_with_atom(target, user, modifiers)
/obj/item/trapdoor_kit/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
var/turf/target_turf = get_turf(interacting_with)
diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm
index 639637af1d7e9..9560820f2f048 100644
--- a/code/datums/diseases/_disease.dm
+++ b/code/datums/diseases/_disease.dm
@@ -171,9 +171,9 @@
if(SANITY_LEVEL_UNSTABLE)
recovery_prob += 0
if(SANITY_LEVEL_CRAZY)
- recovery_prob += -0.1
- if(SANITY_LEVEL_INSANE)
recovery_prob += -0.2
+ if(SANITY_LEVEL_INSANE)
+ recovery_prob += -0.4
if((HAS_TRAIT(affected_mob, TRAIT_NOHUNGER) || !(affected_mob.satiety < 0 || affected_mob.nutrition < NUTRITION_LEVEL_STARVING)) && HAS_TRAIT(affected_mob, TRAIT_KNOCKEDOUT)) //resting starved won't help, but resting helps
var/turf/rest_turf = get_turf(affected_mob)
diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm
index e672a86d72083..966987828bd54 100644
--- a/code/datums/diseases/transformation.dm
+++ b/code/datums/diseases/transformation.dm
@@ -62,7 +62,7 @@
if(HAS_TRAIT_FROM(affected_mob, TRAIT_NO_TRANSFORM, REF(src)))
return
ADD_TRAIT(affected_mob, TRAIT_NO_TRANSFORM, REF(src))
- for(var/obj/item/W in affected_mob.get_equipped_items(include_pockets = TRUE))
+ for(var/obj/item/W in affected_mob.get_equipped_items(INCLUDE_POCKETS))
affected_mob.dropItemToGround(W)
for(var/obj/item/I in affected_mob.held_items)
affected_mob.dropItemToGround(I)
diff --git a/code/datums/dna.dm b/code/datums/dna.dm
index 75fb406e3371e..d5677dad7ca61 100644
--- a/code/datums/dna.dm
+++ b/code/datums/dna.dm
@@ -207,8 +207,8 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
L[DNA_MUTANT_COLOR_BLOCK] = sanitize_hexcolor(features["mcolor"], include_crunch = FALSE)
if(features["ethcolor"])
L[DNA_ETHEREAL_COLOR_BLOCK] = sanitize_hexcolor(features["ethcolor"], include_crunch = FALSE)
- if(features["body_markings"])
- L[DNA_LIZARD_MARKINGS_BLOCK] = construct_block(SSaccessories.body_markings_list.Find(features["body_markings"]), length(SSaccessories.body_markings_list))
+ if(features["lizard_markings"])
+ L[DNA_LIZARD_MARKINGS_BLOCK] = construct_block(SSaccessories.lizard_markings_list.Find(features["lizard_markings"]), length(SSaccessories.lizard_markings_list))
if(features["tail_cat"])
L[DNA_TAIL_BLOCK] = construct_block(SSaccessories.tails_list_human.Find(features["tail_cat"]), length(SSaccessories.tails_list_human))
if(features["tail_lizard"])
@@ -354,7 +354,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
if(DNA_ETHEREAL_COLOR_BLOCK)
set_uni_feature_block(blocknumber, sanitize_hexcolor(features["ethcolor"], include_crunch = FALSE))
if(DNA_LIZARD_MARKINGS_BLOCK)
- set_uni_feature_block(blocknumber, construct_block(SSaccessories.body_markings_list.Find(features["body_markings"]), length(SSaccessories.body_markings_list)))
+ set_uni_feature_block(blocknumber, construct_block(SSaccessories.lizard_markings_list.Find(features["lizard_markings"]), length(SSaccessories.lizard_markings_list)))
if(DNA_TAIL_BLOCK)
set_uni_feature_block(blocknumber, construct_block(SSaccessories.tails_list_human.Find(features["tail_cat"]), length(SSaccessories.tails_list_human)))
if(DNA_LIZARD_TAIL_BLOCK)
@@ -423,7 +423,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
/datum/dna/proc/update_instability(alert=TRUE)
stability = 100
for(var/datum/mutation/human/M in mutations)
- if(M.class == MUT_EXTRA)
+ if(M.class == MUT_EXTRA || M.instability < 0)
stability -= M.instability * GET_MUTATION_STABILIZER(M)
if(holder)
var/message
@@ -649,8 +649,8 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
dna.features["mcolor"] = sanitize_hexcolor(get_uni_feature_block(features, DNA_MUTANT_COLOR_BLOCK))
if(dna.features["ethcolor"])
dna.features["ethcolor"] = sanitize_hexcolor(get_uni_feature_block(features, DNA_ETHEREAL_COLOR_BLOCK))
- if(dna.features["body_markings"])
- dna.features["body_markings"] = SSaccessories.body_markings_list[deconstruct_block(get_uni_feature_block(features, DNA_LIZARD_MARKINGS_BLOCK), length(SSaccessories.body_markings_list))]
+ if(dna.features["lizard_markings"])
+ dna.features["lizard_markings"] = SSaccessories.lizard_markings_list[deconstruct_block(get_uni_feature_block(features, DNA_LIZARD_MARKINGS_BLOCK), length(SSaccessories.lizard_markings_list))]
if(dna.features["snout"])
dna.features["snout"] = SSaccessories.snouts_list[deconstruct_block(get_uni_feature_block(features, DNA_SNOUT_BLOCK), length(SSaccessories.snouts_list))]
if(dna.features["horns"])
@@ -686,14 +686,10 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
external_organ.mutate_feature(features, src)
if(icon_update)
- if(mutcolor_update)
- update_body(is_creating = TRUE)
- else
- update_body()
+ update_body(is_creating = mutcolor_update)
if(mutations_overlay_update)
update_mutations_overlay()
-
/mob/proc/domutcheck()
return
diff --git a/code/datums/elements/basic_eating.dm b/code/datums/elements/basic_eating.dm
index 92b303c9be2a0..4f4f493e0ef33 100644
--- a/code/datums/elements/basic_eating.dm
+++ b/code/datums/elements/basic_eating.dm
@@ -93,4 +93,5 @@
if(isstack(target)) //if stack, only consume 1
var/obj/item/stack/food_stack = target
final_target = food_stack.split_stack(eater, 1)
+ eater.log_message("has eaten [target]!", LOG_ATTACK)
qdel(final_target)
diff --git a/code/datums/elements/climbable.dm b/code/datums/elements/climbable.dm
index 004f05dd5f584..a2c67742a357e 100644
--- a/code/datums/elements/climbable.dm
+++ b/code/datums/elements/climbable.dm
@@ -69,7 +69,7 @@
if(HAS_TRAIT(user, TRAIT_FREERUNNING)) //do you have any idea how fast I am???
adjusted_climb_time *= 0.8
adjusted_climb_stun *= 0.8
- if(HAS_TRAIT(user, TRAIT_SETTLER)) //hold on, gimme a moment, my tiny legs can't get over the goshdamn table
+ if(HAS_TRAIT(user, TRAIT_STUBBY_BODY)) //hold on, gimme a moment, my tiny legs can't get over the goshdamn table
adjusted_climb_time *= 1.5
adjusted_climb_stun *= 1.5
LAZYADDASSOCLIST(current_climbers, climbed_thing, user)
@@ -82,6 +82,10 @@
log_combat(user, climbed_thing, "climbed onto")
if(adjusted_climb_stun)
user.Stun(adjusted_climb_stun)
+ var/atom/movable/buckle_target = climbed_thing
+ if(istype(buckle_target))
+ if(buckle_target.is_buckle_possible(user))
+ buckle_target.buckle_mob(user)
else
to_chat(user, span_warning("You fail to climb onto [climbed_thing]."))
LAZYREMOVEASSOC(current_climbers, climbed_thing, user)
@@ -112,7 +116,6 @@
/datum/element/climbable/proc/mousedrop_receive(atom/climbed_thing, atom/movable/dropped_atom, mob/user, params)
SIGNAL_HANDLER
- . = COMPONENT_CANCEL_MOUSEDROPPED_ONTO
if(user != dropped_atom || !isliving(dropped_atom))
return
if(!HAS_TRAIT(dropped_atom, TRAIT_FENCE_CLIMBER) && !HAS_TRAIT(dropped_atom, TRAIT_CAN_HOLD_ITEMS)) // If you can hold items you can probably climb a fence
@@ -120,3 +123,4 @@
var/mob/living/living_target = dropped_atom
if(living_target.mobility_flags & MOBILITY_MOVE)
INVOKE_ASYNC(src, PROC_REF(climb_structure), climbed_thing, living_target, params)
+ return COMPONENT_CANCEL_MOUSEDROPPED_ONTO
diff --git a/code/datums/elements/cult_eyes.dm b/code/datums/elements/cult_eyes.dm
index 3a46aa42c951a..3e685419836f7 100644
--- a/code/datums/elements/cult_eyes.dm
+++ b/code/datums/elements/cult_eyes.dm
@@ -1,4 +1,4 @@
-/**
+/***
* # Cult eyes element
*
* Applies and removes the glowing cult eyes
@@ -16,8 +16,7 @@
/**
* Cult eye setter proc
- *
- * Changes the eye color, and adds the glowing eye trait to the mob.
+ * * Changes the eye color, and adds the glowing eye trait to the mob.
*/
/datum/element/cult_eyes/proc/set_eyes(mob/living/target)
SIGNAL_HANDLER
diff --git a/code/datums/elements/eyestab.dm b/code/datums/elements/eyestab.dm
index 5686524d793bc..b8c0d78c4ae5c 100644
--- a/code/datums/elements/eyestab.dm
+++ b/code/datums/elements/eyestab.dm
@@ -94,8 +94,9 @@
eyes.set_organ_damage(eyes.low_threshold)
// At over 10 damage, there is a 50% chance they drop all their items
- if (prob(50))
- if (target.stat != DEAD && target.drop_all_held_items())
+ if (prob(50) && target.stat != DEAD)
+ var/list/dropped = target.drop_all_held_items()
+ if(length(dropped))
to_chat(target, span_danger("You drop what you're holding and clutch at your eyes!"))
target.adjust_eye_blur_up_to(20 SECONDS, EYESTAB_MAX_BLUR)
target.Unconscious(2 SECONDS)
diff --git a/code/datums/elements/food/processable.dm b/code/datums/elements/food/processable.dm
index 625dba6149495..9ca96b3821b21 100644
--- a/code/datums/elements/food/processable.dm
+++ b/code/datums/elements/food/processable.dm
@@ -46,7 +46,7 @@
var/found_location = found_item.loc
var/found_turf = isturf(found_location)
var/found_table = locate(/obj/structure/table) in found_location
- var/found_tray = locate(/obj/item/storage/bag/tray) in found_location
+ var/found_tray = locate(/obj/item/storage/bag/tray) in found_location || locate(/obj/item/plate/oven_tray) in found_location
if(!found_turf && !istype(found_location, /obj/item/storage/bag/tray) || found_turf && !(found_table || found_tray))
to_chat(user, span_notice("You cannot make [initial(result_atom_type.name)] here! You need a table or at least a tray."))
return
diff --git a/code/datums/elements/leeching_walk.dm b/code/datums/elements/leeching_walk.dm
new file mode 100644
index 0000000000000..c0afc52b24583
--- /dev/null
+++ b/code/datums/elements/leeching_walk.dm
@@ -0,0 +1,57 @@
+/// Buffs and heals the target while standing on rust.
+/datum/element/leeching_walk
+
+/datum/element/leeching_walk/Attach(datum/target)
+ . = ..()
+ if (!isliving(target))
+ return ELEMENT_INCOMPATIBLE
+
+ RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_move))
+ RegisterSignal(target, COMSIG_LIVING_LIFE, PROC_REF(on_life))
+
+/datum/element/leeching_walk/Detach(datum/source)
+ . = ..()
+ UnregisterSignal(source, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_LIFE))
+
+/*
+ * Signal proc for [COMSIG_MOVABLE_MOVED].
+ *
+ * Checks if we should have baton resistance on the new turf.
+ */
+/datum/element/leeching_walk/proc/on_move(mob/source, atom/old_loc, dir, forced, list/old_locs)
+ SIGNAL_HANDLER
+
+ var/turf/mover_turf = get_turf(source)
+ if(HAS_TRAIT(mover_turf, TRAIT_RUSTY))
+ ADD_TRAIT(source, TRAIT_BATON_RESISTANCE, type)
+ return
+
+ REMOVE_TRAIT(source, TRAIT_BATON_RESISTANCE, type)
+
+/**
+ * Signal proc for [COMSIG_LIVING_LIFE].
+ *
+ * Gradually heals the heretic ([source]) on rust,
+ * including baton knockdown and stamina damage.
+ */
+/datum/element/leeching_walk/proc/on_life(mob/living/source, seconds_per_tick, times_fired)
+ SIGNAL_HANDLER
+
+ var/turf/our_turf = get_turf(source)
+ if(!HAS_TRAIT(our_turf, TRAIT_RUSTY))
+ return
+
+ // Heals all damage + Stamina
+ var/need_mob_update = FALSE
+ need_mob_update += source.adjustBruteLoss(-3, updating_health = FALSE)
+ need_mob_update += source.adjustFireLoss(-3, updating_health = FALSE)
+ need_mob_update += source.adjustToxLoss(-3, updating_health = FALSE, forced = TRUE) // Slimes are people to
+ need_mob_update += source.adjustOxyLoss(-1.5, updating_health = FALSE)
+ need_mob_update += source.adjustStaminaLoss(-10, updating_stamina = FALSE)
+ if(need_mob_update)
+ source.updatehealth()
+ // Reduces duration of stuns/etc
+ source.AdjustAllImmobility(-0.5 SECONDS)
+ // Heals blood loss
+ if(source.blood_volume < BLOOD_VOLUME_NORMAL)
+ source.blood_volume += 2.5 * seconds_per_tick
diff --git a/code/datums/elements/light_eater.dm b/code/datums/elements/light_eater.dm
index ed3851944d980..27500b066fefa 100644
--- a/code/datums/elements/light_eater.dm
+++ b/code/datums/elements/light_eater.dm
@@ -18,7 +18,7 @@
if(isitem(target))
if(isgun(target))
RegisterSignal(target, COMSIG_PROJECTILE_ON_HIT, PROC_REF(on_projectile_hit))
- RegisterSignal(target, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_afterattack))
+ RegisterSignal(target, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(on_interacting_with))
RegisterSignal(target, COMSIG_ITEM_HIT_REACT, PROC_REF(on_hit_reaction))
else if(isprojectile(target))
RegisterSignal(target, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(on_projectile_self_hit))
@@ -34,7 +34,7 @@
/datum/element/light_eater/Detach(datum/source)
UnregisterSignal(source, list(
COMSIG_MOVABLE_IMPACT,
- COMSIG_ITEM_AFTERATTACK,
+ COMSIG_ITEM_INTERACTING_WITH_ATOM,
COMSIG_ITEM_HIT_REACT,
COMSIG_PROJECTILE_ON_HIT,
COMSIG_REAGENT_EXPOSE_ATOM,
@@ -118,15 +118,14 @@
return NONE
/**
- * Called when a target is attacked with a source item
+ * Called when a target is interacted with by a source item
*
* Arguments:
* - [source][/obj/item]: The item what was used to strike the target
- * - [target][/atom]: The atom being struck by the user with the source
* - [user][/mob/living]: The mob using the source to strike the target
- * - proximity: Whether the strike was in melee range so you can't eat lights from cameras
+ * - [target][/atom]: The atom being struck by the user with the source
*/
-/datum/element/light_eater/proc/on_afterattack(obj/item/source, atom/target, mob/living/user)
+/datum/element/light_eater/proc/on_interacting_with(obj/item/source, mob/living/user, atom/target)
SIGNAL_HANDLER
eat_lights(target, source)
diff --git a/code/datums/elements/openspace_item_click_handler.dm b/code/datums/elements/openspace_item_click_handler.dm
index f34bd0f0bda1f..9059223fb0c35 100644
--- a/code/datums/elements/openspace_item_click_handler.dm
+++ b/code/datums/elements/openspace_item_click_handler.dm
@@ -8,22 +8,19 @@
. = ..()
if(!isitem(target))
return ELEMENT_INCOMPATIBLE
- RegisterSignal(target, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(divert_interaction))
+ RegisterSignal(target, COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM, PROC_REF(divert_interaction))
/datum/element/openspace_item_click_handler/Detach(datum/source)
- UnregisterSignal(source, COMSIG_ITEM_INTERACTING_WITH_ATOM)
+ UnregisterSignal(source, COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM)
return ..()
//Invokes the proctype with a turf above as target.
-/datum/element/openspace_item_click_handler/proc/divert_interaction(obj/item/source, mob/user, atom/target, click_parameters)
+/datum/element/openspace_item_click_handler/proc/divert_interaction(obj/item/source, mob/user, atom/target, list/modifiers)
SIGNAL_HANDLER
if((target.z == 0) || (user.z == 0) || target.z == user.z)
return NONE
- var/turf/checked_turf = get_turf(target)
- while(!isnull(checked_turf))
- checked_turf = GET_TURF_ABOVE(checked_turf)
- if(checked_turf?.z == user.z && user.CanReach(checked_turf, source))
- INVOKE_ASYNC(source, TYPE_PROC_REF(/obj/item, handle_openspace_click), checked_turf, user, click_parameters)
- return ITEM_INTERACT_BLOCKING
-
+ var/turf/target_turf = parse_caught_click_modifiers(modifiers, get_turf(user.client?.eye || user), user.client)
+ if(target_turf?.z == user.z && user.CanReach(target_turf, source))
+ INVOKE_ASYNC(source, TYPE_PROC_REF(/obj/item, handle_openspace_click), target_turf, user, modifiers)
+ return ITEM_INTERACT_BLOCKING
return NONE
diff --git a/code/datums/elements/skill_reward.dm b/code/datums/elements/skill_reward.dm
index 7809eea85f715..891f933793ea0 100644
--- a/code/datums/elements/skill_reward.dm
+++ b/code/datums/elements/skill_reward.dm
@@ -29,7 +29,7 @@
///We check if the item can be equipped, otherwise we drop it.
/datum/element/skill_reward/proc/drop_if_unworthy(datum/source, mob/living/user)
SIGNAL_HANDLER
- if(check_equippable(user) || !(source in user.get_equipped_items(include_pockets = TRUE, include_accessories = TRUE)))
+ if(check_equippable(user) || !(source in user.get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES)))
return NONE
to_chat(user, span_warning("You feel completely and utterly unworthy to even touch \the [source]."))
user.dropItemToGround(source, TRUE)
diff --git a/code/datums/elements/strippable.dm b/code/datums/elements/strippable.dm
index 7c426e921e00c..1b932ce066590 100644
--- a/code/datums/elements/strippable.dm
+++ b/code/datums/elements/strippable.dm
@@ -40,7 +40,7 @@
return
if (over != user)
return
- if(!user.can_perform_action(source, FORBID_TELEKINESIS_REACH))
+ if(!user.can_perform_action(source, FORBID_TELEKINESIS_REACH | ALLOW_RESTING))
return
// Cyborgs buckle people by dragging them onto them, unless in combat mode.
@@ -52,6 +52,11 @@
if (!isnull(should_strip_proc_path) && !call(source, should_strip_proc_path)(user))
return
+ if (isliving(source))
+ var/mob/living/mob = source
+ if (mob.can_be_held && (user.grab_state == GRAB_AGGRESSIVE) && (user.pulling == source))
+ return
+
var/datum/strip_menu/strip_menu = LAZYACCESS(strip_menus, source)
if (isnull(strip_menu))
diff --git a/code/datums/elements/wall_walker.dm b/code/datums/elements/wall_walker.dm
index 92ac3318c1287..abea9db3af8da 100644
--- a/code/datums/elements/wall_walker.dm
+++ b/code/datums/elements/wall_walker.dm
@@ -4,16 +4,20 @@
argument_hash_start_idx = 2
/// What kind of walls can we pass through?
var/wall_type
+ /// What trait on turfs allows us to pass through? Can be used as OR if wall_type is null, or AND if it's set.
+ var/or_trait
/datum/element/wall_walker/Attach(
datum/target,
wall_type = /turf/closed/wall,
+ or_trait,
)
. = ..()
if (!isliving(target))
return ELEMENT_INCOMPATIBLE
src.wall_type = wall_type
+ src.or_trait = or_trait
RegisterSignal(target, COMSIG_LIVING_WALL_BUMP, PROC_REF(try_pass_wall))
RegisterSignal(target, COMSIG_LIVING_WALL_EXITED, PROC_REF(exit_wall))
@@ -23,7 +27,10 @@
/// If the wall is of the proper type, pass into it and keep hold on whatever you're pulling
/datum/element/wall_walker/proc/try_pass_wall(mob/living/passing_mob, turf/closed/bumped_wall)
- if(!istype(bumped_wall, wall_type))
+ if(wall_type && !istype(bumped_wall, wall_type))
+ return
+
+ if(or_trait && !HAS_TRAIT(bumped_wall, or_trait))
return
var/atom/movable/stored_pulling = passing_mob.pulling
diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm
index 69e78ec74b31e..a3866971aae5f 100644
--- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm
+++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm
@@ -255,7 +255,7 @@
/datum/greyscale_config/vape
name = "Vape"
- icon_file = 'icons/obj/clothing/masks.dmi'
+ icon_file = 'icons/obj/cigarettes.dmi'
json_config = 'code/datums/greyscale/json_configs/vape.json'
/datum/greyscale_config/vape/worn
diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm
index cfa608011bdf9..4d4c44138e0c2 100644
--- a/code/datums/id_trim/jobs.dm
+++ b/code/datums/id_trim/jobs.dm
@@ -545,11 +545,13 @@
ACCESS_MORGUE,
ACCESS_RESEARCH,
ACCESS_SCIENCE,
+ ACCESS_XENOBIOLOGY,
)
extra_access = list(
ACCESS_ROBOTICS,
ACCESS_TECH_STORAGE,
- ACCESS_XENOBIOLOGY,
+ ACCESS_ORDNANCE,
+ ACCESS_ORDNANCE_STORAGE,
)
template_access = list(
ACCESS_CAPTAIN,
@@ -960,6 +962,8 @@
ACCESS_GENETICS,
ACCESS_XENOBIOLOGY,
ACCESS_MORGUE_SECURE,
+ ACCESS_ORDNANCE,
+ ACCESS_ORDNANCE_STORAGE,
)
template_access = list(
ACCESS_CAPTAIN,
diff --git a/code/datums/id_trim/outfits.dm b/code/datums/id_trim/outfits.dm
index 2e7aebff26a1b..a2944a469f43e 100644
--- a/code/datums/id_trim/outfits.dm
+++ b/code/datums/id_trim/outfits.dm
@@ -62,6 +62,7 @@
trim_state = "trim_bitavatar"
department_color = COLOR_BLACK
subdepartment_color = COLOR_GREEN
+ sechud_icon_state = SECHUD_BITAVATAR
/// Trim for cyber police in the Virtual Domain.
/datum/id_trim/cyber_police
diff --git a/code/datums/keybinding/client.dm b/code/datums/keybinding/client.dm
index 81b9bb6c287a3..f36645692c992 100644
--- a/code/datums/keybinding/client.dm
+++ b/code/datums/keybinding/client.dm
@@ -32,6 +32,20 @@
winset(user, null, "command=.auto")
return TRUE
+/datum/keybinding/client/toggle_fullscreen
+ hotkey_keys = list("F11")
+ name = "toggle_fullscreen"
+ full_name = "Toggle Fullscreen"
+ description = "Makes the game window fullscreen."
+ keybind_signal = COMSIG_KB_CLIENT_FULLSCREEN_DOWN
+
+/datum/keybinding/client/toggle_fullscreen/down(client/user)
+ . = ..()
+ if(.)
+ return
+ user.toggle_fullscreen()
+ return TRUE
+
/datum/keybinding/client/minimal_hud
hotkey_keys = list("F12")
name = "minimal_hud"
diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm
index 2ed95232df19a..2d5e3564e6d09 100644
--- a/code/datums/looping_sounds/machinery_sounds.dm
+++ b/code/datums/looping_sounds/machinery_sounds.dm
@@ -79,6 +79,15 @@
end_sound = 'sound/machines/microwave/microwave-end.ogg'
volume = 90
+/datum/looping_sound/lathe_print
+ mid_sounds = list('sound/machines/lathe/lathe_print.ogg' = 1)
+ mid_length = 20
+ volume = 50
+ vary = TRUE
+ ignore_walls = FALSE
+ falloff_distance = 1
+ mid_length_vary = 10
+
/datum/looping_sound/jackpot
mid_length = 11
mid_sounds = list('sound/machines/roulettejackpot.ogg' = 1)
diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm
index 8e20dfbef9cb9..4e6400163a34b 100644
--- a/code/datums/martial/boxing.dm
+++ b/code/datums/martial/boxing.dm
@@ -93,7 +93,7 @@
attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH)
- //Determines damage dealt on a punch. Against a boxing defender, we apply our skill bonus.
+ // Determines damage dealt on a punch. Against a boxing defender, we apply our skill bonus.
var/damage = rand(lower_force, upper_force)
if(honor_check(defender))
@@ -135,6 +135,9 @@
to_chat(attacker, span_danger("You [current_atk_verbed] [defender]!"))
+ // Determines the total amount of experience earned per punch
+ var/experience_earned = round(damage * 0.25, 0.1)
+
defender.apply_damage(damage, damage_type, affecting, armor_block)
log_combat(attacker, defender, "punched (boxing) ")
@@ -181,9 +184,11 @@
to_chat(attacker, span_danger("You stagger [defender] with a haymaker!"))
log_combat(attacker, defender, "staggered (boxing) ")
+ experience_earned *= 2 //Double our experience gain on a crit hit
+
playsound(defender, 'sound/effects/coin2.ogg', 40, TRUE)
new /obj/effect/temp_visual/crit(get_turf(defender))
- skill_experience_adjustment(attacker, (damage/lower_force)) //double experience for a successful crit
+ skill_experience_adjustment(attacker, experience_earned) //double experience for a successful crit
return TRUE
@@ -203,7 +208,7 @@
var/gravity_modifier = boxer.has_gravity() > STANDARD_GRAVITY ? 1 : 0.5
//You gotta sleep before you get any experience!
- boxer.mind?.adjust_experience(/datum/skill/athletics, experience_value * gravity_modifier)
+ boxer.mind?.adjust_experience(/datum/skill/athletics, round(experience_value * gravity_modifier, 0.1))
boxer.apply_status_effect(/datum/status_effect/exercised)
/// Handles our blocking signals, similar to hit_reaction() on items. Only blocks while the boxer is in throw mode.
@@ -227,14 +232,22 @@
var/block_text = pick("block", "evade")
- if(!prob(block_chance))
- return NONE
-
var/mob/living/attacker = GET_ASSAILANT(hitby)
if(!honor_check(attacker))
return NONE
+ var/experience_earned = round(damage * 0.25, 0.1)
+
+ if(!damage)
+ experience_earned = 2
+
+ // WE reward experience for getting punched while boxing
+ skill_experience_adjustment(boxer, experience_earned) //just getting hit a bunch doesn't net you much experience however
+
+ if(!prob(block_chance))
+ return NONE
+
if(istype(attacker) && boxer.Adjacent(attacker))
attacker.apply_damage(10, STAMINA)
boxer.apply_damage(5, STAMINA)
@@ -246,8 +259,6 @@
if(block_text == "evade")
playsound(boxer.loc, active_arm.unarmed_miss_sound, 25, TRUE, -1)
- skill_experience_adjustment(boxer, 1) //just getting hit a bunch doesn't net you much experience
-
return SUCCESSFUL_BLOCK
/datum/martial_art/boxing/can_use(mob/living/martial_artist)
diff --git a/code/datums/mocking/client.dm b/code/datums/mocking/client.dm
index dc1db213f34be..4b724ef705e82 100644
--- a/code/datums/mocking/client.dm
+++ b/code/datums/mocking/client.dm
@@ -48,3 +48,6 @@
/datum/client_interface/proc/set_macros()
return
+
+/datum/client_interface/proc/update_ambience_pref()
+ return
diff --git a/code/datums/mood_events/eldritch_painting_events.dm b/code/datums/mood_events/eldritch_painting_events.dm
index df801998c1d98..6a2393ed3f576 100644
--- a/code/datums/mood_events/eldritch_painting_events.dm
+++ b/code/datums/mood_events/eldritch_painting_events.dm
@@ -3,32 +3,32 @@
// Mood applied for ripping the painting
/datum/mood_event/eldritch_painting
- description = "YOU, I SHOULD NOT HAVE DONE THAT!!!"
+ description = "I've been hearing weird laughter since cutting down that painting..."
mood_change = -6
timeout = 3 MINUTES
/datum/mood_event/eldritch_painting/weeping
- description = "HE IS HERE, AND HE WEEPS!"
+ description = "He is here!"
mood_change = -3
timeout = 11 SECONDS
/datum/mood_event/eldritch_painting/weeping_heretic
- description = "Oh such arts! They truly inspire me!"
+ description = "His suffering inspires me!"
mood_change = 5
timeout = 3 MINUTES
/datum/mood_event/eldritch_painting/weeping_withdrawal
- description = "My mind is clear from his influence."
+ description = "My mind is clear. He is not here."
mood_change = 1
timeout = 3 MINUTES
/datum/mood_event/eldritch_painting/desire_heretic
- description = "A part gained, the mansus takes and gives. What did it take from me?"
+ description = "The void screams."
mood_change = -2
timeout = 3 MINUTES
/datum/mood_event/eldritch_painting/desire_examine
- description = "A hunger kept at bay..."
+ description = "The hunger has been fed, for now..."
mood_change = 3
timeout = 3 MINUTES
@@ -38,11 +38,11 @@
timeout = 3 MINUTES
/datum/mood_event/eldritch_painting/rust_examine
- description = "The rusted climb can wait..."
+ description = "That painting really creeped me out."
mood_change = -2
timeout = 3 MINUTES
/datum/mood_event/eldritch_painting/rust_heretic_examine
- description = "I must hurry the rusted climb!"
+ description = "Climb. Decay. Rust."
mood_change = 6
timeout = 3 MINUTES
diff --git a/code/datums/mutations/_combined.dm b/code/datums/mutations/_combined.dm
index cce25beb2161d..534d94550c41b 100644
--- a/code/datums/mutations/_combined.dm
+++ b/code/datums/mutations/_combined.dm
@@ -25,6 +25,18 @@
required = "/datum/mutation/human/insulated; /datum/mutation/human/radioactive"
result = /datum/mutation/human/shock
+/datum/generecipe/cindikinesis
+ required = "/datum/mutation/human/geladikinesis; /datum/mutation/human/fire_breath"
+ result = /datum/mutation/human/geladikinesis/ash
+
+/datum/generecipe/pyrokinesis
+ required = "/datum/mutation/human/cryokinesis; /datum/mutation/human/fire_breath"
+ result = /datum/mutation/human/cryokinesis/pyrokinesis
+
+/datum/generecipe/thermal_adaptation
+ required = "/datum/mutation/human/adaptation/cold; /datum/mutation/human/adaptation/heat"
+ result = /datum/mutation/human/adaptation/thermal
+
/datum/generecipe/antiglow
required = "/datum/mutation/human/glow; /datum/mutation/human/void"
result = /datum/mutation/human/glow/anti
@@ -36,3 +48,7 @@
/datum/generecipe/martyrdom
required = "/datum/mutation/human/strong; /datum/mutation/human/stimmed"
result = /datum/mutation/human/martyrdom
+
+/datum/generecipe/heckacious
+ required = "/datum/mutation/human/wacky; /datum/mutation/human/trichromatic"
+ result = /datum/mutation/human/heckacious
diff --git a/code/datums/mutations/_mutations.dm b/code/datums/mutations/_mutations.dm
index 4913a057e011a..ba3c20a0cfe74 100644
--- a/code/datums/mutations/_mutations.dm
+++ b/code/datums/mutations/_mutations.dm
@@ -1,3 +1,23 @@
+
+/// Negatives that are virtually harmless and mostly just funny (language)
+// Set to 0 because munchkinning via miscommunication = bad
+#define NEGATIVE_STABILITY_MINI 0
+/// Negatives that are slightly annoying (unused)
+#define NEGATIVE_STABILITY_MINOR -20
+/// Negatives that present an uncommon or weak, consistent hindrance to gameplay (cough, paranoia)
+#define NEGATIVE_STABILITY_MODERATE -30
+/// Negatives that present a major consistent hindrance to gameplay (deaf, mute, acid flesh)
+#define NEGATIVE_STABILITY_MAJOR -40
+
+/// Positives that provide basically no benefit (glowy)
+#define POSITIVE_INSTABILITY_MINI 5
+/// Positives that are niche in application or useful in rare circumstances (parlor tricks, geladikinesis, autotomy)
+#define POSITIVE_INSTABILITY_MINOR 10
+/// Positives that provide a new ability that's roughly par with station equipment (insulated, cryokinesis)
+#define POSITIVE_INSTABILITY_MODERATE 25
+/// Positives that are unique, very powerful, and noticeably change combat/gameplay (hulk, tk)
+#define POSITIVE_INSTABILITY_MAJOR 35
+
/datum/mutation
var/name
@@ -76,6 +96,8 @@
var/energy_coeff = -1
/// List of strings of valid chromosomes this mutation can accept.
var/list/valid_chrom_list = list()
+ /// List of traits that are added or removed by the mutation with GENETIC_TRAIT source.
+ var/list/mutation_traits
/datum/mutation/human/New(class = MUT_OTHER, timer, datum/mutation/human/copymut)
. = ..()
@@ -121,6 +143,8 @@
owner.overlays_standing[layer_used] = mut_overlay
owner.apply_overlay(layer_used)
grant_power() //we do checks here so nothing about hulk getting magic
+ if(mutation_traits)
+ owner.add_traits(mutation_traits, GENETIC_MUTATION)
if(!modified)
addtimer(CALLBACK(src, PROC_REF(modify), 0.5 SECONDS)) //gonna want children calling ..() to run first
@@ -145,6 +169,9 @@
owner.overlays_standing[layer_used] = mut_overlay
owner.apply_overlay(layer_used)
+ if(mutation_traits)
+ owner.remove_traits(mutation_traits, GENETIC_MUTATION)
+
/mob/living/carbon/proc/update_mutations_overlay()
return
diff --git a/code/datums/mutations/active.dm b/code/datums/mutations/active.dm
new file mode 100644
index 0000000000000..42c11e9c6f804
--- /dev/null
+++ b/code/datums/mutations/active.dm
@@ -0,0 +1,49 @@
+/datum/mutation/human/adrenaline_rush
+ name = "Adrenaline Rush"
+ desc = "Allows the host to trigger their body's adrenaline response at will."
+ quality = POSITIVE
+ text_gain_indication = span_notice("You feel pumped up!")
+ instability = POSITIVE_INSTABILITY_MODERATE
+ power_path = /datum/action/cooldown/adrenaline
+
+ energy_coeff = 1
+ synchronizer_coeff = 1
+ power_coeff = 1
+
+/datum/mutation/human/adrenaline_rush/modify()
+ . = ..()
+ var/datum/action/cooldown/adrenaline/to_modify = .
+ if(!istype(to_modify)) // null or invalid
+ return
+
+ to_modify.adrenaline_amount = 10 * GET_MUTATION_POWER(src)
+ to_modify.comedown_amount = 7 / GET_MUTATION_SYNCHRONIZER(src)
+
+/datum/action/cooldown/adrenaline
+ name = "Adrenaline!"
+ desc = "Energize yourself, pushing your body to its limits!"
+ button_icon = 'icons/mob/actions/actions_genetic.dmi'
+ button_icon_state = "adrenaline"
+
+ cooldown_time = 2 MINUTES
+ check_flags = AB_CHECK_CONSCIOUS
+ /// How many units of each positive reagent injected during adrenaline.
+ var/adrenaline_amount = 10
+ /// How many units of each negative reagent injected after comedown.
+ var/comedown_amount = 7
+
+
+/datum/action/cooldown/adrenaline/Activate(mob/living/carbon/cast_on)
+ . = ..()
+ to_chat(cast_on, span_userdanger("You feel pumped up! It's time to GO!"))
+ cast_on.reagents.add_reagent(/datum/reagent/drug/pumpup, adrenaline_amount)
+ cast_on.reagents.add_reagent(/datum/reagent/medicine/synaptizine, adrenaline_amount)
+ cast_on.reagents.add_reagent(/datum/reagent/determination, adrenaline_amount)
+ addtimer(CALLBACK(src, PROC_REF(get_tired), cast_on), 25 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE)
+ return TRUE
+
+/datum/action/cooldown/adrenaline/proc/get_tired(mob/living/carbon/cast_on)
+ to_chat(cast_on, span_danger("Your adrenaline rush makes way for a bout of nausea and a deep feeling of exhaustion in your muscles."))
+ cast_on.reagents.add_reagent(/datum/reagent/peaceborg/tire, comedown_amount)
+ cast_on.reagents.add_reagent(/datum/reagent/peaceborg/confuse, comedown_amount)
+ cast_on.set_dizzy_if_lower(10 SECONDS)
diff --git a/code/datums/mutations/adaptation.dm b/code/datums/mutations/adaptation.dm
index 1c183f9367d3a..7e332984cf9b9 100644
--- a/code/datums/mutations/adaptation.dm
+++ b/code/datums/mutations/adaptation.dm
@@ -1,53 +1,58 @@
-/datum/mutation/human/temperature_adaptation
- name = "Temperature Adaptation"
+/datum/mutation/human/adaptation
+ name = "Adaptation"
desc = "A strange mutation that renders the host immune to damage from extreme temperatures. Does not protect from vacuums."
quality = POSITIVE
difficulty = 16
- text_gain_indication = "Your body feels warm!"
- instability = 25
- conflicts = list(/datum/mutation/human/pressure_adaptation)
-
-/datum/mutation/human/temperature_adaptation/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
+ text_gain_indication = span_notice("Your body feels normal!")
+ instability = NEGATIVE_STABILITY_MAJOR
+ locked = TRUE // fake parent
+ conflicts = list(/datum/mutation/human/adaptation)
+ mutation_traits = list(TRAIT_WADDLING)
+ /// Icon used for the adaptation overlay
+ var/adapt_icon = "meow"
+
+/datum/mutation/human/adaptation/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
..()
+ conflicts = typesof(src)
if(!(type in visual_indicators))
- visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "fire", -MUTATIONS_LAYER))
+ visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', adapt_icon, -MUTATIONS_LAYER))
-/datum/mutation/human/temperature_adaptation/get_visual_indicator()
+/datum/mutation/human/adaptation/get_visual_indicator()
return visual_indicators[type][1]
-/datum/mutation/human/temperature_adaptation/on_acquiring(mob/living/carbon/human/owner)
- if(..())
- return
- owner.add_traits(list(TRAIT_RESISTCOLD, TRAIT_RESISTHEAT), GENETIC_MUTATION)
-
-/datum/mutation/human/temperature_adaptation/on_losing(mob/living/carbon/human/owner)
- if(..())
- return
- owner.remove_traits(list(TRAIT_RESISTCOLD, TRAIT_RESISTHEAT), GENETIC_MUTATION)
-
-/datum/mutation/human/pressure_adaptation
+/datum/mutation/human/adaptation/cold
+ name = "Cold Adaptation"
+ desc = "A strange mutation that renders the host immune to damage from low temperature environments. It also prevents the host from slipping on ice."
+ text_gain_indication = span_notice("Your body feels refreshingly cold.")
+ instability = POSITIVE_INSTABILITY_MODERATE
+ mutation_traits = list(TRAIT_RESISTCOLD, TRAIT_NO_SLIP_ICE)
+ adapt_icon = "cold"
+ locked = FALSE
+
+/datum/mutation/human/adaptation/heat
+ name = "Heat Adaptation"
+ desc = "A strange mutation that renders the host immune to damage from high temperature, including being set alight, though the flame itself still burns clothing. It also seems to make the host resist ash storms."
+ text_gain_indication = span_notice("Your body feels invigoratingly warm.")
+ instability = POSITIVE_INSTABILITY_MODERATE
+ mutation_traits = list(TRAIT_RESISTHEAT, TRAIT_ASHSTORM_IMMUNE)
+ adapt_icon = "fire"
+ locked = FALSE
+
+/datum/mutation/human/adaptation/thermal
+ name = "Thermal Adaptation"
+ desc = "A strange mutation that renders the host immune to damage from both low and high temperature environments. Does not protect from high or low pressure environments."
+ difficulty = 32
+ text_gain_indication = span_notice("Your body feels pleasantly room temperature.")
+ instability = POSITIVE_INSTABILITY_MAJOR
+ mutation_traits = list(TRAIT_RESISTHEAT, TRAIT_RESISTCOLD)
+ adapt_icon = "thermal"
+ locked = TRUE // recipe
+
+/datum/mutation/human/adaptation/pressure
name = "Pressure Adaptation"
desc = "A strange mutation that renders the host immune to damage from both low and high pressure environments. Does not protect from temperature, including the cold of space."
- quality = POSITIVE
- difficulty = 16
- text_gain_indication = "Your body feels numb!"
- instability = 25
- conflicts = list(/datum/mutation/human/temperature_adaptation)
-
-/datum/mutation/human/pressure_adaptation/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
- ..()
- if(!(type in visual_indicators))
- visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "pressure", -MUTATIONS_LAYER))
-
-/datum/mutation/human/pressure_adaptation/get_visual_indicator()
- return visual_indicators[type][1]
-
-/datum/mutation/human/pressure_adaptation/on_acquiring(mob/living/carbon/human/owner)
- if(..())
- return
- owner.add_traits(list(TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE), GENETIC_MUTATION)
-
-/datum/mutation/human/pressure_adaptation/on_losing(mob/living/carbon/human/owner)
- if(..())
- return
- owner.remove_traits(list(TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE), GENETIC_MUTATION)
+ text_gain_indication = span_notice("Your body feels impressively pressurized.")
+ instability = POSITIVE_INSTABILITY_MODERATE
+ adapt_icon = "pressure"
+ mutation_traits = list(TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE)
+ locked = FALSE
diff --git a/code/datums/mutations/antenna.dm b/code/datums/mutations/antenna.dm
index 80edceea1e5ed..5684b20c454f7 100644
--- a/code/datums/mutations/antenna.dm
+++ b/code/datums/mutations/antenna.dm
@@ -2,9 +2,9 @@
name = "Antenna"
desc = "The affected person sprouts an antenna. This is known to allow them to access common radio channels passively."
quality = POSITIVE
- text_gain_indication = "You feel an antenna sprout from your forehead."
- text_lose_indication = "Your antenna shrinks back down."
- instability = 5
+ text_gain_indication = span_notice("You feel an antenna sprout from your forehead.")
+ text_lose_indication = span_notice("Your antenna shrinks back down.")
+ instability = POSITIVE_INSTABILITY_MINOR
difficulty = 8
var/datum/weakref/radio_weakref
@@ -44,10 +44,10 @@
name = "Mind Reader"
desc = "The affected person can look into the recent memories of others."
quality = POSITIVE
- text_gain_indication = "You hear distant voices at the corners of your mind."
- text_lose_indication = "The distant voices fade."
+ text_gain_indication = span_notice("You hear distant voices at the corners of your mind.")
+ text_lose_indication = span_notice("The distant voices fade.")
power_path = /datum/action/cooldown/spell/pointed/mindread
- instability = 40
+ instability = POSITIVE_INSTABILITY_MINOR
difficulty = 8
locked = TRUE
@@ -62,6 +62,16 @@
ranged_mousepointer = 'icons/effects/mouse_pointers/mindswap_target.dmi'
+/datum/action/cooldown/spell/pointed/mindread/Grant(mob/grant_to)
+ . = ..()
+ if (!owner)
+ return
+ ADD_TRAIT(grant_to, TRAIT_MIND_READER, GENETIC_MUTATION)
+
+/datum/action/cooldown/spell/pointed/mindread/Remove(mob/remove_from)
+ . = ..()
+ REMOVE_TRAIT(remove_from, TRAIT_MIND_READER, GENETIC_MUTATION)
+
/datum/action/cooldown/spell/pointed/mindread/is_valid_target(atom/cast_on)
if(!isliving(cast_on))
return FALSE
diff --git a/code/datums/mutations/autotomy.dm b/code/datums/mutations/autotomy.dm
index 5a70455db5fb8..bb78ceb08dcf7 100644
--- a/code/datums/mutations/autotomy.dm
+++ b/code/datums/mutations/autotomy.dm
@@ -3,7 +3,7 @@
desc = "Allows a creature to voluntary discard a random appendage."
quality = POSITIVE
text_gain_indication = span_notice("Your joints feel loose.")
- instability = 30
+ instability = POSITIVE_INSTABILITY_MINOR
power_path = /datum/action/cooldown/spell/self_amputation
energy_coeff = 1
diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm
index 896820746d61d..f2db642261633 100644
--- a/code/datums/mutations/body.dm
+++ b/code/datums/mutations/body.dm
@@ -4,8 +4,9 @@
/datum/mutation/human/epilepsy
name = "Epilepsy"
desc = "A genetic defect that sporadically causes seizures."
+ instability = NEGATIVE_STABILITY_MODERATE
quality = NEGATIVE
- text_gain_indication = "You get a headache."
+ text_gain_indication = span_danger("You get a headache.")
synchronizer_coeff = 1
power_coeff = 1
@@ -50,8 +51,9 @@
/datum/mutation/human/bad_dna
name = "Unstable DNA"
desc = "Strange mutation that causes the holder to randomly mutate."
+ instability = NEGATIVE_STABILITY_MAJOR
quality = NEGATIVE
- text_gain_indication = "You feel strange."
+ text_gain_indication = span_danger("You feel strange.")
locked = TRUE
/datum/mutation/human/bad_dna/on_acquiring(mob/living/carbon/human/owner)
@@ -79,8 +81,9 @@
/datum/mutation/human/cough
name = "Cough"
desc = "A chronic cough."
+ instability = NEGATIVE_STABILITY_MODERATE
quality = MINOR_NEGATIVE
- text_gain_indication = "You start coughing."
+ text_gain_indication = span_danger("You start coughing.")
synchronizer_coeff = 1
power_coeff = 1
@@ -96,9 +99,10 @@
/datum/mutation/human/paranoia
name = "Paranoia"
desc = "Subject is easily terrified, and may suffer from hallucinations."
+ instability = NEGATIVE_STABILITY_MODERATE
quality = NEGATIVE
- text_gain_indication = "You feel screams echo through your mind..."
- text_lose_indication = "The screaming in your mind fades."
+ text_gain_indication = span_danger("You feel screams echo through your mind...")
+ text_lose_indication = span_notice("The screaming in your mind fades.")
/datum/mutation/human/paranoia/on_life(seconds_per_tick, times_fired)
if(SPT_PROB(2.5, seconds_per_tick) && owner.stat == CONSCIOUS)
@@ -112,8 +116,8 @@
desc = "A mutation believed to be the cause of dwarfism."
quality = POSITIVE
difficulty = 16
- instability = 5
- conflicts = list(/datum/mutation/human/gigantism)
+ instability = POSITIVE_INSTABILITY_MINOR
+ conflicts = list(/datum/mutation/human/gigantism, /datum/mutation/human/acromegaly)
locked = TRUE // Default intert species for now, so locked from regular pool.
/datum/mutation/human/dwarfism/on_acquiring(mob/living/carbon/human/owner)
@@ -128,12 +132,73 @@
REMOVE_TRAIT(owner, TRAIT_DWARF, GENETIC_MUTATION)
owner.visible_message(span_danger("[owner] suddenly grows!"), span_notice("Everything around you seems to shrink.."))
+/datum/mutation/human/acromegaly
+ name = "Acromegaly"
+ desc = "A mutation believed to be the cause of acromegaly, or 'being unusually tall'."
+ quality = MINOR_NEGATIVE
+ difficulty = 16
+ instability = NEGATIVE_STABILITY_MODERATE
+ synchronizer_coeff = 1
+ conflicts = list(/datum/mutation/human/dwarfism)
+
+/datum/mutation/human/acromegaly/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+ ADD_TRAIT(owner, TRAIT_TOO_TALL, GENETIC_MUTATION)
+ owner.visible_message(span_danger("[owner] suddenly grows tall!"), span_notice("You feel a small strange urge to fight small men with slingshots. Or maybe play some basketball."))
+ RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(head_bonk))
+ owner.regenerate_icons()
+
+/datum/mutation/human/acromegaly/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ REMOVE_TRAIT(owner, TRAIT_TOO_TALL, GENETIC_MUTATION)
+ owner.visible_message(span_danger("[owner] suddenly shrinks!"), span_notice("You return to your usual height."))
+ UnregisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(head_bonk))
+ owner.regenerate_icons()
+
+// This is specifically happening because they're not used to their new height and are stumbling around into machinery made for normal humans
+/datum/mutation/human/acromegaly/proc/head_bonk(mob/living/parent)
+ SIGNAL_HANDLER
+ var/turf/airlock_turf = get_turf(parent)
+ var/atom/movable/whacked_by = locate(/obj/machinery/door/airlock) in airlock_turf || locate(/obj/machinery/door/firedoor) in airlock_turf || locate(/obj/structure/mineral_door) in airlock_turf
+ if(!whacked_by || prob(100 - (8 * GET_MUTATION_SYNCHRONIZER(src))))
+ return
+ to_chat(parent, span_danger("You hit your head on \the [whacked_by]'s header!"))
+ var/dmg = HAS_TRAIT(parent, TRAIT_HEAD_INJURY_BLOCKED) ? rand(1,4) : rand(2,9)
+ parent.apply_damage(dmg, BRUTE, BODY_ZONE_HEAD)
+ parent.do_attack_animation(whacked_by, ATTACK_EFFECT_PUNCH)
+ playsound(whacked_by, 'sound/effects/bang.ogg', 10, TRUE)
+ parent.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH, 10 SECONDS)
+
+/datum/mutation/human/gigantism
+ name = "Gigantism" //negative version of dwarfism
+ desc = "The cells within the subject spread out to cover more area, making the subject appear larger."
+ quality = MINOR_NEGATIVE
+ difficulty = 12
+ conflicts = list(/datum/mutation/human/dwarfism)
+
+/datum/mutation/human/gigantism/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+ ADD_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION)
+ owner.update_transform(1.25)
+ owner.visible_message(span_danger("[owner] suddenly grows!"), span_notice("Everything around you seems to shrink.."))
+
+/datum/mutation/human/gigantism/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ REMOVE_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION)
+ owner.update_transform(0.8)
+ owner.visible_message(span_danger("[owner] suddenly shrinks!"), span_notice("Everything around you seems to grow.."))
+
//Clumsiness has a very large amount of small drawbacks depending on item.
/datum/mutation/human/clumsy
name = "Clumsiness"
desc = "A genome that inhibits certain brain functions, causing the holder to appear clumsy. Honk!"
+ instability = NEGATIVE_STABILITY_MAJOR
quality = MINOR_NEGATIVE
- text_gain_indication = "You feel lightheaded."
+ text_gain_indication = span_danger("You feel lightheaded.")
/datum/mutation/human/clumsy/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -151,7 +216,8 @@
name = "Tourette's Syndrome"
desc = "A chronic twitch that forces the user to scream bad words." //definitely needs rewriting
quality = NEGATIVE
- text_gain_indication = "You twitch."
+ instability = 0
+ text_gain_indication = span_danger("You twitch.")
synchronizer_coeff = 1
/datum/mutation/human/tourettes/on_life(seconds_per_tick, times_fired)
@@ -173,8 +239,9 @@
/datum/mutation/human/deaf
name = "Deafness"
desc = "The holder of this genome is completely deaf."
+ instability = NEGATIVE_STABILITY_MAJOR
quality = NEGATIVE
- text_gain_indication = "You can't seem to hear anything."
+ text_gain_indication = span_danger("You can't seem to hear anything.")
/datum/mutation/human/deaf/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -194,6 +261,7 @@
text_gain_indication = "You feel unusually monkey-like."
text_lose_indication = "You feel like your old self."
quality = NEGATIVE
+ instability = NEGATIVE_STABILITY_MAJOR // mmmonky
remove_on_aheal = FALSE
locked = TRUE //Species specific, keep out of actual gene pool
mutadone_proof = TRUE
@@ -218,8 +286,8 @@
name = "Glowy"
desc = "You permanently emit a light with a random color and intensity."
quality = POSITIVE
- text_gain_indication = "Your skin begins to glow softly."
- instability = 5
+ text_gain_indication = span_notice("Your skin begins to glow softly.")
+ instability = POSITIVE_INSTABILITY_MINI
power_coeff = 1
conflicts = list(/datum/mutation/human/glow/anti)
var/glow_power = 2
@@ -255,8 +323,9 @@
/datum/mutation/human/glow/anti
name = "Anti-Glow"
desc = "Your skin seems to attract and absorb nearby light creating 'darkness' around you."
- text_gain_indication = "The light around you seems to disappear."
+ text_gain_indication = span_notice("The light around you seems to disappear.")
conflicts = list(/datum/mutation/human/glow)
+ instability = POSITIVE_INSTABILITY_MINOR
locked = TRUE
glow_power = -1.5
@@ -265,10 +334,10 @@
/datum/mutation/human/strong
name = "Strength"
- desc = "The user's muscles slightly expand."
+ desc = "The user's muscles slightly expand. Commonly seen in top-ranking boxers."
quality = POSITIVE
- text_gain_indication = "You feel strong."
- instability = 5
+ text_gain_indication = span_notice("You feel strong.")
+ instability = POSITIVE_INSTABILITY_MINI
difficulty = 16
/datum/mutation/human/strong/on_acquiring(mob/living/carbon/human/owner)
@@ -286,10 +355,10 @@
/datum/mutation/human/stimmed
name = "Stimmed"
- desc = "The user's chemical balance is more robust."
+ desc = "The user's chemical balance is more robust. This mutation is known to slightly improve workout efficiency."
quality = POSITIVE
- text_gain_indication = "You feel stimmed."
- instability = 5
+ instability = POSITIVE_INSTABILITY_MINI
+ text_gain_indication = span_notice("You feel stimmed.")
difficulty = 16
/datum/mutation/human/stimmed/on_acquiring(mob/living/carbon/human/owner)
@@ -308,10 +377,10 @@
name = "Insulated"
desc = "The affected person does not conduct electricity."
quality = POSITIVE
- text_gain_indication = "Your fingertips go numb."
- text_lose_indication = "Your fingertips regain feeling."
+ text_gain_indication = span_notice("Your fingertips go numb.")
+ text_lose_indication = span_notice("Your fingertips regain feeling.")
difficulty = 16
- instability = 25
+ instability = POSITIVE_INSTABILITY_MODERATE
/datum/mutation/human/insulated/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -327,8 +396,9 @@
name = "Fiery Sweat"
desc = "The user's skin will randomly combust, but is generally a lot more resilient to burning."
quality = NEGATIVE
- text_gain_indication = "You feel hot."
- text_lose_indication = "You feel a lot cooler."
+ text_gain_indication = span_warning("You feel hot.")
+ text_lose_indication = span_notice("You feel a lot cooler.")
+ conflicts = list(/datum/mutation/human/adaptation/heat)
difficulty = 14
synchronizer_coeff = 1
power_coeff = 1
@@ -352,10 +422,10 @@
name = "Spatial Instability"
desc = "The victim of the mutation has a very weak link to spatial reality, and may be displaced. Often causes extreme nausea."
quality = NEGATIVE
- text_gain_indication = "The space around you twists sickeningly."
- text_lose_indication = "The space around you settles back to normal."
+ text_gain_indication = span_warning("The space around you twists sickeningly.")
+ text_lose_indication = span_notice("The space around you settles back to normal.")
difficulty = 18//high so it's hard to unlock and abuse
- instability = 10
+ instability = NEGATIVE_STABILITY_MODERATE
synchronizer_coeff = 1
energy_coeff = 1
power_coeff = 1
@@ -381,9 +451,10 @@
/datum/mutation/human/acidflesh
name = "Acidic Flesh"
desc = "Subject has acidic chemicals building up underneath the skin. This is often lethal."
+ instability = NEGATIVE_STABILITY_MAJOR
quality = NEGATIVE
- text_gain_indication = "A horrible burning sensation envelops you as your flesh turns to acid!"
- text_lose_indication = "A feeling of relief fills you as your flesh goes back to normal."
+ text_gain_indication = span_userdanger("A horrible burning sensation envelops you as your flesh turns to acid!")
+ text_lose_indication = span_notice("A feeling of relief fills you as your flesh goes back to normal.")
difficulty = 18//high so it's hard to unlock and use on others
/// The cooldown for the warning message
COOLDOWN_DECLARE(msgcooldown)
@@ -398,33 +469,13 @@
owner.visible_message(span_warning("[owner]'s skin bubbles and pops."), span_userdanger("Your bubbling flesh pops! It burns!"))
playsound(owner,'sound/weapons/sear.ogg', 50, TRUE)
-/datum/mutation/human/gigantism
- name = "Gigantism"//negative version of dwarfism
- desc = "The cells within the subject spread out to cover more area, making the subject appear larger."
- quality = MINOR_NEGATIVE
- difficulty = 12
- conflicts = list(/datum/mutation/human/dwarfism)
-
-/datum/mutation/human/gigantism/on_acquiring(mob/living/carbon/human/owner)
- if(..())
- return
- ADD_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION)
- owner.update_transform(1.25)
- owner.visible_message(span_danger("[owner] suddenly grows!"), span_notice("Everything around you seems to shrink.."))
-
-/datum/mutation/human/gigantism/on_losing(mob/living/carbon/human/owner)
- if(..())
- return
- REMOVE_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION)
- owner.update_transform(0.8)
- owner.visible_message(span_danger("[owner] suddenly shrinks!"), span_notice("Everything around you seems to grow.."))
-
/datum/mutation/human/spastic
name = "Spastic"
desc = "Subject suffers from muscle spasms."
+ instability = NEGATIVE_STABILITY_MODERATE
quality = NEGATIVE
- text_gain_indication = "You flinch."
- text_lose_indication = "Your flinching subsides."
+ text_gain_indication = span_warning("You flinch.")
+ text_lose_indication = span_notice("Your flinching subsides.")
difficulty = 16
/datum/mutation/human/spastic/on_acquiring()
@@ -440,9 +491,10 @@
/datum/mutation/human/extrastun
name = "Two Left Feet"
desc = "A mutation that replaces the right foot with another left foot. Symptoms include kissing the floor when taking a step."
+ instability = NEGATIVE_STABILITY_MODERATE
quality = NEGATIVE
- text_gain_indication = "Your right foot feels... left."
- text_lose_indication = "Your right foot feels alright."
+ text_gain_indication = span_warning("Your right foot feels... left.")
+ text_lose_indication = span_notice("Your right foot feels alright.")
difficulty = 16
/datum/mutation/human/extrastun/on_acquiring()
@@ -471,10 +523,11 @@
/datum/mutation/human/martyrdom
name = "Internal Martyrdom"
desc = "A mutation that makes the body destruct when near death. Not damaging, but very, VERY disorienting."
+ instability = NEGATIVE_STABILITY_MAJOR // free stability >:)
locked = TRUE
quality = POSITIVE //not that cloning will be an option a lot but generally lets keep this around i guess?
- text_gain_indication = "You get an intense feeling of heartburn."
- text_lose_indication = "Your internal organs feel at ease."
+ text_gain_indication = span_warning("You get an intense feeling of heartburn.")
+ text_lose_indication = span_notice("Your internal organs feel at ease.")
/datum/mutation/human/martyrdom/on_acquiring()
. = ..()
@@ -518,9 +571,10 @@
/datum/mutation/human/headless
name = "H.A.R.S."
desc = "A mutation that makes the body reject the head, the brain receding into the chest. Stands for Head Allergic Rejection Syndrome. Warning: Removing this mutation is very dangerous, though it will regenerate non-vital head organs."
+ instability = NEGATIVE_STABILITY_MAJOR
difficulty = 12 //pretty good for traitors
quality = NEGATIVE //holy shit no eyes or tongue or ears
- text_gain_indication = "Something feels off."
+ text_gain_indication = span_warning("Something feels off.")
/datum/mutation/human/headless/on_acquiring()
. = ..()
diff --git a/code/datums/mutations/chameleon.dm b/code/datums/mutations/chameleon.dm
index d5cbc36d20a1f..6a42c69cb51d8 100644
--- a/code/datums/mutations/chameleon.dm
+++ b/code/datums/mutations/chameleon.dm
@@ -4,9 +4,9 @@
desc = "A genome that causes the holder's skin to become transparent over time."
quality = POSITIVE
difficulty = 16
- text_gain_indication = "You feel one with your surroundings."
- text_lose_indication = "You feel oddly exposed."
- instability = 25
+ text_gain_indication = span_notice("You feel one with your surroundings.")
+ text_lose_indication = span_notice("You feel oddly exposed.")
+ instability = POSITIVE_INSTABILITY_MAJOR
power_coeff = 1
/datum/mutation/human/chameleon/on_acquiring(mob/living/carbon/human/owner)
diff --git a/code/datums/mutations/cold.dm b/code/datums/mutations/cold.dm
index 57c4f854fc7a2..fd060bc8ca5e0 100644
--- a/code/datums/mutations/cold.dm
+++ b/code/datums/mutations/cold.dm
@@ -2,8 +2,8 @@
name = "Geladikinesis"
desc = "Allows the user to concentrate moisture and sub-zero forces into snow."
quality = POSITIVE
- text_gain_indication = "Your hand feels cold."
- instability = 10
+ text_gain_indication = span_notice("Your hand feels cold.")
+ instability = POSITIVE_INSTABILITY_MINOR
difficulty = 10
synchronizer_coeff = 1
power_path = /datum/action/cooldown/spell/conjure_item/snow
@@ -24,8 +24,8 @@
name = "Cryokinesis"
desc = "Draws negative energy from the sub-zero void to freeze surrounding temperatures at subject's will."
quality = POSITIVE //upsides and downsides
- text_gain_indication = "Your hand feels cold."
- instability = 30
+ text_gain_indication = span_notice("Your hand feels cold.")
+ instability = POSITIVE_INSTABILITY_MODERATE
difficulty = 12
synchronizer_coeff = 1
energy_coeff = 1
diff --git a/code/datums/mutations/fire_breath.dm b/code/datums/mutations/fire_breath.dm
index f8631761ba202..56915ff0130ea 100644
--- a/code/datums/mutations/fire_breath.dm
+++ b/code/datums/mutations/fire_breath.dm
@@ -4,10 +4,10 @@
quality = POSITIVE
difficulty = 12
locked = TRUE
- text_gain_indication = "Your throat is burning!"
- text_lose_indication = "Your throat is cooling down."
+ text_gain_indication = span_notice("Your throat is burning!")
+ text_lose_indication = span_notice("Your throat is cooling down.")
power_path = /datum/action/cooldown/spell/cone/staggered/fire_breath
- instability = 30
+ instability = POSITIVE_INSTABILITY_MODERATE
energy_coeff = 1
power_coeff = 1
diff --git a/code/datums/mutations/hot.dm b/code/datums/mutations/hot.dm
new file mode 100644
index 0000000000000..574bc95d1e404
--- /dev/null
+++ b/code/datums/mutations/hot.dm
@@ -0,0 +1,31 @@
+/datum/mutation/human/geladikinesis/ash
+ name = "Cindikinesis"
+ desc = "Allows the user to concentrate nearby heat into a pile of ash. Wow. Very interesting."
+ text_gain_indication = span_notice("Your hand feels warm.")
+ locked = TRUE
+ power_path = /datum/action/cooldown/spell/conjure_item/snow/ash
+
+/datum/action/cooldown/spell/conjure_item/snow/ash
+ name = "Create Ash"
+ desc = "Concentrates pyrokinetic forces to create ash, useful for basically nothing."
+ button_icon_state = "ash"
+
+ item_type = /obj/effect/decal/cleanable/ash
+
+/datum/mutation/human/cryokinesis/pyrokinesis
+ name = "Pyrokinesis"
+ desc = "Draws positive energy from the surroundings to heat surrounding temperatures at subject's will."
+ text_gain_indication = span_notice("Your hand feels hot!")
+ locked = TRUE
+ power_path = /datum/action/cooldown/spell/pointed/projectile/cryo/pyro
+
+/datum/action/cooldown/spell/pointed/projectile/cryo/pyro
+ name = "Pyrobeam"
+ desc = "This power fires a heated bolt at a target."
+ button_icon_state = "firebeam"
+ base_icon_state = "firebeam"
+ cooldown_time = 30 SECONDS
+
+ active_msg = "You focus your pyrokinesis!"
+ deactive_msg = "You cool down."
+ projectile_type = /obj/projectile/temp/pyro
diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm
index 63e0abc22a33f..7a09687ea40bc 100644
--- a/code/datums/mutations/hulk.dm
+++ b/code/datums/mutations/hulk.dm
@@ -5,14 +5,14 @@
quality = POSITIVE
locked = TRUE
difficulty = 16
- text_gain_indication = "Your muscles hurt!"
+ text_gain_indication = span_notice("Your muscles hurt!")
species_allowed = list(SPECIES_HUMAN) //no skeleton/lizard hulk
health_req = 25
- instability = 40
+ instability = POSITIVE_INSTABILITY_MAJOR
var/scream_delay = 50
var/last_scream = 0
/// List of traits to add/remove when someone gets this mutation.
- var/list/mutation_traits = list(
+ mutation_traits = list(
TRAIT_CHUNKYFINGERS,
TRAIT_HULK,
TRAIT_IGNOREDAMAGESLOWDOWN,
@@ -24,7 +24,6 @@
/datum/mutation/human/hulk/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
- owner.add_traits(mutation_traits, GENETIC_MUTATION)
for(var/obj/item/bodypart/part as anything in owner.bodyparts)
part.variable_color = COLOR_DARK_LIME
owner.update_body_parts()
@@ -87,7 +86,6 @@
/datum/mutation/human/hulk/on_losing(mob/living/carbon/human/owner)
if(..())
return
- owner.remove_traits(mutation_traits, GENETIC_MUTATION)
for(var/obj/item/bodypart/part as anything in owner.bodyparts)
part.variable_color = null
owner.update_body_parts()
diff --git a/code/datums/mutations/olfaction.dm b/code/datums/mutations/olfaction.dm
index 305f6d16e8389..b3273c8dd9577 100644
--- a/code/datums/mutations/olfaction.dm
+++ b/code/datums/mutations/olfaction.dm
@@ -3,10 +3,10 @@
desc = "Your sense of smell is comparable to that of a canine."
quality = POSITIVE
difficulty = 12
- text_gain_indication = "Smells begin to make more sense..."
- text_lose_indication = "Your sense of smell goes back to normal."
+ text_gain_indication = span_notice("Smells begin to make more sense...")
+ text_lose_indication = span_notice("Your sense of smell goes back to normal.")
power_path = /datum/action/cooldown/spell/olfaction
- instability = 30
+ instability = POSITIVE_INSTABILITY_MODERATE
synchronizer_coeff = 1
/datum/mutation/human/olfaction/modify()
@@ -119,6 +119,9 @@
/// Actually go through and give the user a hint of the direction our target is.
/datum/action/cooldown/spell/olfaction/proc/on_the_trail(mob/living/caster)
var/mob/living/carbon/current_target = tracking_ref?.resolve()
+ //Using get_turf to deal with those pesky closets that put your x y z to 0
+ var/turf/current_target_turf = get_turf(current_target)
+ var/turf/caster_turf = get_turf(caster)
if(!current_target)
to_chat(caster, span_warning("You're not tracking a scent, but the game thought you were. \
Something's gone wrong! Report this as a bug."))
@@ -130,14 +133,14 @@
to_chat(caster, span_warning("You smell out the trail to yourself. Yep, it's you."))
return
- if(caster.z < current_target.z)
+ if(caster_turf.z < current_target_turf.z)
to_chat(caster, span_warning("The trail leads... way up above you? Huh. They must be really, really far away."))
return
- else if(caster.z > current_target.z)
+ else if(caster_turf.z > current_target_turf.z)
to_chat(caster, span_warning("The trail leads... way down below you? Huh. They must be really, really far away."))
return
- var/direction_text = span_bold("[dir2text(get_dir(caster, current_target))]")
+ var/direction_text = span_bold("[dir2text(get_dir(caster_turf, current_target_turf))]")
if(direction_text)
to_chat(caster, span_notice("You consider [current_target]'s scent. The trail leads [direction_text]."))
diff --git a/code/datums/mutations/passive.dm b/code/datums/mutations/passive.dm
index 9d694aaf1ebbb..46859db686968 100644
--- a/code/datums/mutations/passive.dm
+++ b/code/datums/mutations/passive.dm
@@ -2,7 +2,7 @@
name = "Biotech Compatibility"
desc = "Subject is more compatibile with biotechnology such as skillchips."
quality = POSITIVE
- instability = 5
+ instability = POSITIVE_INSTABILITY_MINI
/datum/mutation/human/biotechcompat/on_acquiring(mob/living/carbon/human/owner)
. = ..()
@@ -16,9 +16,9 @@
name = "Clever"
desc = "Causes the subject to feel just a little bit smarter. Most effective in specimens with low levels of intelligence."
quality = POSITIVE
- instability = 20
- text_gain_indication = "You feel a little bit smarter."
- text_lose_indication = "Your mind feels a little bit foggy."
+ instability = POSITIVE_INSTABILITY_MODERATE // literally makes you on par with station equipment
+ text_gain_indication = span_danger("You feel a little bit smarter.")
+ text_lose_indication = span_danger("Your mind feels a little bit foggy.")
/datum/mutation/human/clever/on_acquiring(mob/living/carbon/human/owner)
if(..())
diff --git a/code/datums/mutations/radioactive.dm b/code/datums/mutations/radioactive.dm
index 8f710bfa497a4..b2a17b5341275 100644
--- a/code/datums/mutations/radioactive.dm
+++ b/code/datums/mutations/radioactive.dm
@@ -2,8 +2,8 @@
name = "Radioactivity"
desc = "A volatile mutation that causes the host to sent out deadly beta radiation. This affects both the hosts and their surroundings."
quality = NEGATIVE
- text_gain_indication = "You can feel it in your bones!"
- instability = 5
+ text_gain_indication = span_warning("You can feel it in your bones!")
+ instability = NEGATIVE_STABILITY_MAJOR
difficulty = 8
power_coeff = 1
/// Weakref to our radiation emitter component
diff --git a/code/datums/mutations/reach.dm b/code/datums/mutations/reach.dm
new file mode 100644
index 0000000000000..5186a1be0627a
--- /dev/null
+++ b/code/datums/mutations/reach.dm
@@ -0,0 +1,112 @@
+///Telekinesis lets you interact with objects from range, and gives you a light blue halo around your head.
+/datum/mutation/human/telekinesis
+ name = "Telekinesis"
+ desc = "A strange mutation that allows the holder to interact with objects through thought."
+ quality = POSITIVE
+ difficulty = 18
+ text_gain_indication = span_notice("You feel smarter!")
+ limb_req = BODY_ZONE_HEAD
+ instability = POSITIVE_INSTABILITY_MAJOR
+ ///Typecache of atoms that TK shouldn't interact with
+ var/static/list/blacklisted_atoms = typecacheof(list(/atom/movable/screen))
+
+/datum/mutation/human/telekinesis/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
+ ..()
+ if(!(type in visual_indicators))
+ visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER))
+
+/datum/mutation/human/telekinesis/on_acquiring(mob/living/carbon/human/homan)
+ . = ..()
+ if(.)
+ return
+ RegisterSignal(homan, COMSIG_MOB_ATTACK_RANGED, PROC_REF(on_ranged_attack))
+
+/datum/mutation/human/telekinesis/on_losing(mob/living/carbon/human/homan)
+ . = ..()
+ if(.)
+ return
+ UnregisterSignal(homan, COMSIG_MOB_ATTACK_RANGED)
+
+/datum/mutation/human/telekinesis/get_visual_indicator()
+ return visual_indicators[type][1]
+
+///Triggers on COMSIG_MOB_ATTACK_RANGED. Usually handles stuff like picking up items at range.
+/datum/mutation/human/telekinesis/proc/on_ranged_attack(mob/source, atom/target)
+ SIGNAL_HANDLER
+ if(is_type_in_typecache(target, blacklisted_atoms))
+ return
+ if(!tkMaxRangeCheck(source, target) || source.z != target.z)
+ return
+ return target.attack_tk(source)
+
+/datum/mutation/human/elastic_arms
+ name = "Elastic Arms"
+ desc = "Subject's arms have become elastic, allowing them to stretch up to a meter away. However, this elasticity makes it difficult to wear gloves, handle complex tasks, or grab large objects."
+ quality = POSITIVE
+ instability = POSITIVE_INSTABILITY_MAJOR
+ text_gain_indication = span_warning("You feel armstrong!")
+ text_lose_indication = span_warning("Your arms stop feeling so saggy all the time.")
+ difficulty = 32
+ mutation_traits = list(TRAIT_CHUNKYFINGERS, TRAIT_NO_TWOHANDING)
+
+/datum/mutation/human/elastic_arms/on_acquiring(mob/living/carbon/human/homan)
+ . = ..()
+ if(.)
+ return
+ RegisterSignal(homan, COMSIG_ATOM_CANREACH, PROC_REF(on_canreach))
+ RegisterSignal(homan, COMSIG_LIVING_TRY_PUT_IN_HAND, PROC_REF(on_owner_equipping_item))
+ RegisterSignal(homan, COMSIG_LIVING_TRY_PULL, PROC_REF(on_owner_try_pull))
+
+/datum/mutation/human/elastic_arms/on_losing(mob/living/carbon/human/homan)
+ . = ..()
+ if(.)
+ return
+ UnregisterSignal(homan, list(COMSIG_ATOM_CANREACH, COMSIG_LIVING_TRY_PUT_IN_HAND, COMSIG_LIVING_TRY_PULL))
+
+/// signal sent when prompting if an item can be equipped
+/datum/mutation/human/elastic_arms/proc/on_owner_equipping_item(mob/living/carbon/human/owner, obj/item/pick_item)
+ SIGNAL_HANDLER
+ if(pick_item.w_class > WEIGHT_CLASS_BULKY) // cant decide if i should limit to huge or bulky.
+ pick_item.balloon_alert(owner, "arms too floppy to wield!")
+ return COMPONENT_LIVING_CANT_PUT_IN_HAND
+
+/// signal sent when owner tries to pull
+/datum/mutation/human/elastic_arms/proc/on_owner_try_pull(mob/living/carbon/owner, atom/movable/target, force)
+ SIGNAL_HANDLER
+ if(isliving(target))
+ var/mob/living/living_target = target
+ if(living_target.mob_size > MOB_SIZE_HUMAN)
+ living_target.balloon_alert(owner, "arms too floppy to pull this!")
+ return COMSIG_LIVING_CANCEL_PULL
+ if(isitem(target))
+ var/obj/item/item_target = target
+ if(item_target.w_class > WEIGHT_CLASS_BULKY)
+ item_target.balloon_alert(owner, "arms too floppy to pull this!")
+ return COMSIG_LIVING_CANCEL_PULL
+
+// probably buggy. let's enlist our players as bug testers
+/datum/mutation/human/elastic_arms/proc/on_canreach(mob/source, atom/target)
+ SIGNAL_HANDLER
+
+ var/distance = get_dist(target, source)
+
+ // We only care about handling the reach distance, anything closer or further is handled normally.
+ // Also, no z-level shenanigans. Yet.
+ if((distance != 2) || source.z != target.z)
+ return
+
+ var/direction = get_dir(source, target)
+ if(!direction)
+ return
+ var/turf/open/adjacent_turf = get_step(source, direction)
+
+ // Make sure it's an open turf we're trying to pass over.
+ if(!istype(adjacent_turf))
+ return
+
+ // Check if there's something dense inbetween, then allow it.
+ for(var/atom/thing in adjacent_turf)
+ if(thing.density)
+ return
+
+ return COMPONENT_ALLOW_REACH
diff --git a/code/datums/mutations/sight.dm b/code/datums/mutations/sight.dm
index 8b26f6ca268f0..3aceb3e7d8ad2 100644
--- a/code/datums/mutations/sight.dm
+++ b/code/datums/mutations/sight.dm
@@ -2,8 +2,9 @@
/datum/mutation/human/nearsight
name = "Near Sightness"
desc = "The holder of this mutation has poor eyesight."
+ instability = NEGATIVE_STABILITY_MODERATE
quality = MINOR_NEGATIVE
- text_gain_indication = "You can't see very well."
+ text_gain_indication = span_danger("You can't see very well.")
/datum/mutation/human/nearsight/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -19,8 +20,9 @@
/datum/mutation/human/blind
name = "Blindness"
desc = "Renders the subject completely blind."
+ instability = NEGATIVE_STABILITY_MAJOR
quality = NEGATIVE
- text_gain_indication = "You can't seem to see anything."
+ text_gain_indication = span_danger("You can't seem to see anything.")
/datum/mutation/human/blind/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -38,9 +40,9 @@
desc = "The user of this genome can visually perceive the unique human thermal signature."
quality = POSITIVE
difficulty = 18
- text_gain_indication = "You can see the heat rising off of your skin..."
- text_lose_indication = "You can no longer see the heat rising off of your skin..."
- instability = 25
+ text_gain_indication = span_notice("You can see the heat rising off of your skin...")
+ text_lose_indication = span_notice("You can no longer see the heat rising off of your skin...")
+ instability = POSITIVE_INSTABILITY_MAJOR // thermals aren't station equipment
synchronizer_coeff = 1
power_coeff = 1
energy_coeff = 1
@@ -109,8 +111,8 @@
/datum/mutation/human/xray
name = "X Ray Vision"
desc = "A strange genome that allows the user to see between the spaces of walls." //actual x-ray would mean you'd constantly be blasting rads, wich might be fun for later //hmb
- text_gain_indication = "The walls suddenly disappear!"
- instability = 35
+ text_gain_indication = span_notice("The walls suddenly disappear!")
+ instability = POSITIVE_INSTABILITY_MAJOR
locked = TRUE
/datum/mutation/human/xray/on_acquiring(mob/living/carbon/human/owner)
@@ -133,7 +135,7 @@
quality = POSITIVE
locked = TRUE
difficulty = 16
- text_gain_indication = "You feel pressure building up behind your eyes."
+ text_gain_indication = span_notice("You feel pressure building up behind your eyes.")
layer_used = FRONT_MUTATIONS_LAYER
limb_req = BODY_ZONE_HEAD
@@ -182,9 +184,10 @@
/datum/mutation/human/illiterate
name = "Illiterate"
desc = "Causes a severe case of Aphasia that prevents reading or writing."
+ instability = NEGATIVE_STABILITY_MAJOR
quality = NEGATIVE
- text_gain_indication = "You feel unable to read or write."
- text_lose_indication = "You feel able to read and write again."
+ text_gain_indication = span_danger("You feel unable to read or write.")
+ text_lose_indication = span_danger("You feel able to read and write again.")
/datum/mutation/human/illiterate/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -195,3 +198,4 @@
if(..())
return
REMOVE_TRAIT(owner, TRAIT_ILLITERATE, GENETIC_MUTATION)
+
diff --git a/code/datums/mutations/speech.dm b/code/datums/mutations/speech.dm
index 4c78c19610439..5b917aa1397b9 100644
--- a/code/datums/mutations/speech.dm
+++ b/code/datums/mutations/speech.dm
@@ -1,11 +1,17 @@
//These are all minor mutations that affect your speech somehow.
//Individual ones aren't commented since their functions should be evident at a glance
+// no they arent bro
+
+#define ALPHABET list("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z")
+#define VOWELS list("a", "e", "i", "o", "u")
+#define CONSONANTS (ALPHABET - VOWELS)
/datum/mutation/human/nervousness
name = "Nervousness"
desc = "Causes the holder to stutter."
+ instability = NEGATIVE_STABILITY_MINI
quality = MINOR_NEGATIVE
- text_gain_indication = "You feel nervous."
+ text_gain_indication = span_danger("You feel nervous.")
/datum/mutation/human/nervousness/on_life(seconds_per_tick, times_fired)
if(SPT_PROB(5, seconds_per_tick))
@@ -14,9 +20,10 @@
/datum/mutation/human/wacky
name = "Wacky"
desc = "You are not a clown. You are the entire circus."
+ instability = NEGATIVE_STABILITY_MINI
quality = MINOR_NEGATIVE
- text_gain_indication = "You feel an off sensation in your voicebox."
- text_lose_indication = "The off sensation passes."
+ text_gain_indication = span_sans(span_notice("You feel an off sensation in your voicebox."))
+ text_lose_indication = span_notice("The off sensation passes.")
/datum/mutation/human/wacky/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -33,12 +40,185 @@
speech_args[SPEECH_SPANS] |= SPAN_SANS
+// Lower rust floor probability
+// Make it only happen on open turf
+// Add early return to wall hitting
+// Fix throw at on cult sac
+// Reduce tochat prob on rust floor
+// add trait rusty to windows
+// aim assist on rc doesnt work
+// also in general
+// give master seek to rusted harvester
+
+/datum/mutation/human/heckacious
+ name = "heckacious larincks"
+ desc = "duge what is WISH your words man..........."
+ quality = MINOR_NEGATIVE
+ text_gain_indication = span_sans(span_red("aw SHIT man. your throat feels like FUCKASS."))
+ text_lose_indication = span_notice("The demonic entity possessing your larynx has finally released its grasp.")
+ locked = TRUE
+ conflicts = list(/datum/mutation/human/trichromatic) // they both modify with the same spans. also would be way too annoying
+
+/datum/mutation/human/heckacious/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+ RegisterSignal(owner, COMSIG_LIVING_TREAT_MESSAGE, PROC_REF(handle_caps))
+ RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(handle_speech))
+
+/datum/mutation/human/heckacious/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ UnregisterSignal(owner, list(COMSIG_LIVING_TREAT_MESSAGE, COMSIG_MOB_SAY))
+
+/datum/mutation/human/heckacious/proc/handle_caps(atom/movable/source, list/message_args)
+ SIGNAL_HANDLER
+ message_args[TREAT_CAPITALIZE_MESSAGE] = FALSE
+
+/datum/mutation/human/heckacious/proc/handle_speech(datum/source, list/speech_args)
+
+ var/message = speech_args[SPEECH_MESSAGE]
+ if(!message)
+ return
+ // Split for swapping purposes
+ message = " [message] "
+
+ // Splitting up each word in the text to manually apply our intended changes
+ var/list/message_words = splittext(message, " ")
+ // What we use in the end
+ var/list/edited_message_words
+
+ for(var/editing_word in message_words)
+ if(editing_word == " " || editing_word == "" )
+ continue
+ // Used to replace the original later
+ var/og_word = editing_word
+ // Iterating through each replaceable-string in the .json
+ var/list/static/super_wacky_words = strings("heckacious.json", "heckacious")
+
+ // If the word doesn't get replaced we might do something with it later
+ var/word_edited
+ for(var/key in super_wacky_words)
+ var/value = super_wacky_words[key]
+ // If list, pick one value from said list
+ if(islist(value))
+ value = pick(value)
+ editing_word = replacetextEx(editing_word, "[uppertext(key)]", "[uppertext(value)]")
+ editing_word = replacetextEx(editing_word, "[capitalize(key)]", "[capitalize(value)]")
+ editing_word = replacetextEx(editing_word, "[key]", "[value]")
+ // Enable if we actually found something to change
+ if(editing_word != og_word)
+ word_edited = TRUE
+
+ // Random caps
+ if(prob(10))
+ editing_word = uppertext(editing_word)
+ // some times....... we add DOTS...
+ if(prob(10))
+ for(var/dotnum in 1 to rand(2, 8))
+ editing_word += "."
+
+ // If no replacement we do it manually
+ if(!word_edited)
+ if(prob(65))
+ editing_word = replacetext(editing_word, pick(VOWELS), pick(VOWELS))
+ // Many more consonants, double it!
+ for(var/i in 1 to rand(1, 2))
+ editing_word = replacetext(editing_word, pick(CONSONANTS), pick(CONSONANTS))
+ // rarely, lettter is DOUBBLED...
+ var/patchword = ""
+ for(var/letter in 1 to length(editing_word))
+ if(prob(92))
+ patchword += editing_word[letter]
+ continue
+ patchword += replacetext(editing_word[letter], "", editing_word[letter] + editing_word[letter])
+ editing_word = patchword
+
+ // Some words are randomly recolored and resized so they get a few of these
+ editing_word = span_class_handler(editing_word)
+
+ LAZYADD(edited_message_words, editing_word)
+
+ var/edited_message = jointext(edited_message_words, " ")
+
+ message = trim(edited_message)
+
+ speech_args[SPEECH_MESSAGE] = message
+
+/datum/mutation/human/heckacious/proc/span_class_handler(message, looped = FALSE)
+ // Sadly combining span colors will not combine the colors of the message
+ if(prob(15))
+ switch(rand(1,3))
+ if(1)
+ message = span_red(message)
+ if(2)
+ message = span_blue(message)
+ if(3)
+ message = span_green(message)
+ if(prob(15))
+ switch(rand(1,2))
+ if(1)
+ message = span_big(message)
+ if(2)
+ message = span_small(message)
+ // do it AGAIN
+ if(prob(40))
+ span_class_handler(message, looped = TRUE)
+ return message
+
+/datum/mutation/human/trichromatic
+ name = "Trichromatic Larynx"
+ desc = "A strange mutation originating from Clown Planet which alters the color of the patient's vocal chords."
+ quality = MINOR_NEGATIVE
+ text_gain_indication = span_red("You") + span_blue(" feel ") + span_green("Weird.")
+ text_lose_indication = span_notice("Your colors feel normal again.")
+ conflicts = list(/datum/mutation/human/heckacious)
+
+/datum/mutation/human/trichromatic/on_acquiring(mob/living/carbon/human/owner)
+ if(..())
+ return
+ RegisterSignal(owner, COMSIG_MOB_SAY, PROC_REF(handle_speech))
+
+/datum/mutation/human/trichromatic/on_losing(mob/living/carbon/human/owner)
+ if(..())
+ return
+ UnregisterSignal(owner, COMSIG_MOB_SAY)
+
+/datum/mutation/human/trichromatic/proc/handle_speech(datum/source, list/speech_args)
+ SIGNAL_HANDLER
+
+ var/message = speech_args[SPEECH_MESSAGE]
+
+ var/list/message_words = splittext(message, " ")
+ var/list/static/span_combo_list = list("green", "red", "blue")
+ var/words_key = 1
+ for(var/i in message_words)
+ message_words[words_key] = span_class_handler(message_words[words_key])
+ words_key++
+
+ var/edited_message = jointext(message_words, " ")
+
+ message = trim(edited_message)
+
+ speech_args[SPEECH_MESSAGE] = message
+
+/datum/mutation/human/trichromatic/proc/span_class_handler(message)
+ // Sadly combining span colors will not combine the colors of the message
+ switch(rand(1,3))
+ if(1)
+ message = span_red(message)
+ if(2)
+ message = span_blue(message)
+ if(3)
+ message = span_green(message)
+ return message
+
/datum/mutation/human/mute
name = "Mute"
desc = "Completely inhibits the vocal section of the brain."
+ instability = NEGATIVE_STABILITY_MAJOR
quality = NEGATIVE
- text_gain_indication = "You feel unable to express yourself at all."
- text_lose_indication = "You feel able to speak freely again."
+ text_gain_indication = span_danger("You feel unable to express yourself at all.")
+ text_lose_indication = span_danger("You feel able to speak freely again.")
/datum/mutation/human/mute/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -53,9 +233,10 @@
/datum/mutation/human/unintelligible
name = "Unintelligible"
desc = "Partially inhibits the vocal center of the brain, severely distorting speech."
+ instability = NEGATIVE_STABILITY_MODERATE
quality = NEGATIVE
- text_gain_indication = "You can't seem to form any coherent thoughts!"
- text_lose_indication = "Your mind feels more clear."
+ text_gain_indication = span_danger("You can't seem to form any coherent thoughts!")
+ text_lose_indication = span_danger("Your mind feels more clear.")
/datum/mutation/human/unintelligible/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -70,9 +251,10 @@
/datum/mutation/human/swedish
name = "Swedish"
desc = "A horrible mutation originating from the distant past. Thought to be eradicated after the incident in 2037."
+ instability = NEGATIVE_STABILITY_MINI
quality = MINOR_NEGATIVE
- text_gain_indication = "You feel Swedish, however that works."
- text_lose_indication = "The feeling of Swedishness passes."
+ text_gain_indication = span_notice("You feel Swedish, however that works.")
+ text_lose_indication = span_notice("The feeling of Swedishness passes.")
/datum/mutation/human/swedish/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -101,9 +283,10 @@
/datum/mutation/human/chav
name = "Chav"
desc = "Unknown"
+ instability = NEGATIVE_STABILITY_MINI
quality = MINOR_NEGATIVE
- text_gain_indication = "Ye feel like a reet prat like, innit?"
- text_lose_indication = "You no longer feel like being rude and sassy."
+ text_gain_indication = span_notice("Ye feel like a reet prat like, innit?")
+ text_lose_indication = span_notice("You no longer feel like being rude and sassy.")
/datum/mutation/human/chav/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -138,10 +321,10 @@
/datum/mutation/human/elvis
name = "Elvis"
desc = "A terrifying mutation named after its 'patient-zero'."
+ instability = NEGATIVE_STABILITY_MINI
quality = MINOR_NEGATIVE
- locked = TRUE
- text_gain_indication = "You feel pretty good, honeydoll."
- text_lose_indication = "You feel a little less conversation would be great."
+ text_gain_indication = span_notice("You feel pretty good, honeydoll.")
+ text_lose_indication = span_notice("You feel a little less conversation would be great.")
/datum/mutation/human/elvis/on_life(seconds_per_tick, times_fired)
switch(pick(1,2))
@@ -187,8 +370,8 @@
desc = "A common mutation that severely decreases intelligence."
quality = NEGATIVE
locked = TRUE
- text_gain_indication = "You feel...totally chill, man!"
- text_lose_indication = "You feel like you have a better sense of time."
+ text_gain_indication = span_notice("You feel...totally chill, man!")
+ text_lose_indication = span_notice("You feel like you have a better sense of time.")
/datum/mutation/human/stoner/on_acquiring(mob/living/carbon/human/owner)
..()
@@ -203,9 +386,10 @@
/datum/mutation/human/medieval
name = "Medieval"
desc = "A horrible mutation originating from the distant past, thought to have once been a common gene in all of old world Europe."
+ instability = NEGATIVE_STABILITY_MINI
quality = MINOR_NEGATIVE
- text_gain_indication = "You feel like seeking the holy grail!"
- text_lose_indication = "You no longer feel like seeking anything."
+ text_gain_indication = span_notice("You feel like seeking the holy grail!")
+ text_lose_indication = span_notice("You no longer feel like seeking anything.")
/datum/mutation/human/medieval/on_acquiring(mob/living/carbon/human/owner)
if(..())
@@ -243,6 +427,7 @@
/datum/mutation/human/piglatin
name = "Pig Latin"
desc = "Historians say back in the 2020's humanity spoke entirely in this mystical language."
+ instability = NEGATIVE_STABILITY_MINI
quality = MINOR_NEGATIVE
text_gain_indication = span_notice("Omethingsay eelsfay offyay.")
text_lose_indication = span_notice("The off sensation passes.")
@@ -263,3 +448,7 @@
var/spoken_message = speech_args[SPEECH_MESSAGE]
spoken_message = piglatin_sentence(spoken_message)
speech_args[SPEECH_MESSAGE] = spoken_message
+
+#undef ALPHABET
+#undef VOWELS
+#undef CONSONANTS
diff --git a/code/datums/mutations/telekinesis.dm b/code/datums/mutations/telekinesis.dm
deleted file mode 100644
index 53d8beb56ff50..0000000000000
--- a/code/datums/mutations/telekinesis.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-///Telekinesis lets you interact with objects from range, and gives you a light blue halo around your head.
-/datum/mutation/human/telekinesis
- name = "Telekinesis"
- desc = "A strange mutation that allows the holder to interact with objects through thought."
- quality = POSITIVE
- difficulty = 18
- text_gain_indication = "You feel smarter!"
- limb_req = BODY_ZONE_HEAD
- instability = 30
- ///Typecache of atoms that TK shouldn't interact with
- var/static/list/blacklisted_atoms = typecacheof(list(/atom/movable/screen))
-
-/datum/mutation/human/telekinesis/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
- ..()
- if(!(type in visual_indicators))
- visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER))
-
-/datum/mutation/human/telekinesis/on_acquiring(mob/living/carbon/human/H)
- . = ..()
- if(.)
- return
- RegisterSignal(H, COMSIG_MOB_ATTACK_RANGED, PROC_REF(on_ranged_attack))
-
-/datum/mutation/human/telekinesis/on_losing(mob/living/carbon/human/H)
- . = ..()
- if(.)
- return
- UnregisterSignal(H, COMSIG_MOB_ATTACK_RANGED)
-
-/datum/mutation/human/telekinesis/get_visual_indicator()
- return visual_indicators[type][1]
-
-///Triggers on COMSIG_MOB_ATTACK_RANGED. Usually handles stuff like picking up items at range.
-/datum/mutation/human/telekinesis/proc/on_ranged_attack(mob/source, atom/target)
- SIGNAL_HANDLER
- if(is_type_in_typecache(target, blacklisted_atoms))
- return
- if(!tkMaxRangeCheck(source, target) || source.z != target.z)
- return
- return target.attack_tk(source)
diff --git a/code/datums/mutations/telepathy.dm b/code/datums/mutations/telepathy.dm
index 8619c2bddc476..4fa2a38db140a 100644
--- a/code/datums/mutations/telepathy.dm
+++ b/code/datums/mutations/telepathy.dm
@@ -2,9 +2,9 @@
name = "Telepathy"
desc = "A rare mutation that allows the user to telepathically communicate to others."
quality = POSITIVE
- text_gain_indication = "You can hear your own voice echoing in your mind!"
- text_lose_indication = "You don't hear your mind echo anymore."
+ text_gain_indication = span_notice("You can hear your own voice echoing in your mind!")
+ text_lose_indication = span_notice("You don't hear your mind echo anymore.")
difficulty = 12
power_path = /datum/action/cooldown/spell/list_target/telepathy
- instability = 10
+ instability = POSITIVE_INSTABILITY_MINOR // basically a mediocre PDA messager
energy_coeff = 1
diff --git a/code/datums/mutations/tongue_spike.dm b/code/datums/mutations/tongue_spike.dm
index e6249041250b8..9e25ad6f4f296 100644
--- a/code/datums/mutations/tongue_spike.dm
+++ b/code/datums/mutations/tongue_spike.dm
@@ -3,7 +3,7 @@
desc = "Allows a creature to voluntary shoot their tongue out as a deadly weapon."
quality = POSITIVE
text_gain_indication = span_notice("Your feel like you can throw your voice.")
- instability = 15
+ instability = POSITIVE_INSTABILITY_MINI // worthless. also serves as a bit of a hint that it's not good
power_path = /datum/action/cooldown/spell/tongue_spike
energy_coeff = 1
@@ -89,7 +89,7 @@
desc = "Allows a creature to voluntary shoot their tongue out as biomass, allowing a long range transfer of chemicals."
quality = POSITIVE
text_gain_indication = span_notice("Your feel like you can really connect with people by throwing your voice.")
- instability = 15
+ instability = POSITIVE_INSTABILITY_MINOR // slightly less worthless. slightly.
locked = TRUE
power_path = /datum/action/cooldown/spell/tongue_spike/chem
energy_coeff = 1
diff --git a/code/datums/mutations/touch.dm b/code/datums/mutations/touch.dm
index ca94f109ac664..d80510fb1feec 100644
--- a/code/datums/mutations/touch.dm
+++ b/code/datums/mutations/touch.dm
@@ -4,10 +4,10 @@
quality = POSITIVE
locked = TRUE
difficulty = 16
- text_gain_indication = "You feel power flow through your hands."
- text_lose_indication = "The energy in your hands subsides."
+ text_gain_indication = span_notice("You feel power flow through your hands.")
+ text_lose_indication = span_notice("The energy in your hands subsides.")
power_path = /datum/action/cooldown/spell/touch/shock
- instability = 35
+ instability = POSITIVE_INSTABILITY_MODERATE // bad stun baton
energy_coeff = 1
power_coeff = 1
@@ -85,3 +85,192 @@
icon = 'icons/obj/weapons/hand.dmi'
icon_state = "zapper"
inhand_icon_state = "zapper"
+
+/datum/mutation/human/lay_on_hands
+ name = "Mending Touch"
+ desc = "The affected can lay their hands on other people to transfer a small amount of their injuries to themselves."
+ quality = POSITIVE
+ locked = FALSE
+ difficulty = 16
+ text_gain_indication = span_notice("Your hand feels blessed!")
+ text_lose_indication = span_notice("Your hand feels secular once more.")
+ power_path = /datum/action/cooldown/spell/touch/lay_on_hands
+ instability = POSITIVE_INSTABILITY_MAJOR
+ energy_coeff = 1
+ power_coeff = 1
+ synchronizer_coeff = 1
+
+/datum/mutation/human/lay_on_hands/modify()
+ . = ..()
+ var/datum/action/cooldown/spell/touch/lay_on_hands/to_modify =.
+
+ if(!istype(to_modify)) // null or invalid
+ return
+
+ // More healing if powered up.
+ to_modify.heal_multiplier = GET_MUTATION_POWER(src)
+ // Less pain if synchronized.
+ to_modify.pain_multiplier = GET_MUTATION_SYNCHRONIZER(src)
+
+/datum/action/cooldown/spell/touch/lay_on_hands
+ name = "Mending Touch"
+ desc = "You can now lay your hands on other people to transfer a small amount of their physical injuries to yourself."
+ button_icon = 'icons/mob/actions/actions_genetic.dmi'
+ button_icon_state = "mending_touch"
+ sound = 'sound/magic/staff_healing.ogg'
+ cooldown_time = 12 SECONDS
+ school = SCHOOL_RESTORATION
+ invocation_type = INVOCATION_NONE
+ spell_requirements = NONE
+ antimagic_flags = NONE
+
+ hand_path = /obj/item/melee/touch_attack/lay_on_hands
+ draw_message = span_notice("You ready your hand to transfer injuries to yourself.")
+ drop_message = span_notice("You lower your hand.")
+ /// Multiplies the amount healed, without increasing the received damage.
+ var/heal_multiplier = 1
+ /// Multiplies the incoming pain from healing.
+ var/pain_multiplier = 1
+ /// Icon used for beaming effect
+ var/beam_icon = "blood"
+
+/datum/action/cooldown/spell/touch/lay_on_hands/cast_on_hand_hit(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/mendicant)
+
+ var/mob/living/hurtguy = victim
+
+ // Heal more, hurt a bit more.
+ // If you crunch the numbers it sounds crazy good,
+ // but I think that's a fair reward for combining the efforts of Genetics, Medbay, and Mining to reach a hidden mechanic.
+ if(HAS_TRAIT_FROM(mendicant, TRAIT_HIPPOCRATIC_OATH, HIPPOCRATIC_OATH_TRAIT))
+ heal_multiplier *= 2
+ pain_multiplier *= 0.5
+ to_chat(mendicant, span_green("You can feel the magic of the Rod of Aesculapius aiding your efforts!"))
+ beam_icon = "sendbeam"
+ var/obj/item/rod_of_asclepius/rod = locate() in mendicant.contents
+ if(rod)
+ rod.add_filter("cool_glow", 2, list("type" = "outline", "color" = COLOR_VERY_PALE_LIME_GREEN, "size" = 1.25))
+ addtimer(CALLBACK(rod, TYPE_PROC_REF(/datum, remove_filter), "cool_glow"), 6 SECONDS)
+
+
+ // If a normal pacifist, heal and hurt more!
+ else if(HAS_TRAIT(mendicant, TRAIT_PACIFISM))
+ heal_multiplier *= 1.75
+ pain_multiplier *= 1.75
+ to_chat(mendicant, span_green("Your peaceful nature helps you guide all the pain to yourself."))
+
+ var/success
+ if(iscarbon(hurtguy))
+ success = do_complicated_heal(mendicant, hurtguy, heal_multiplier, pain_multiplier)
+ else
+ success = do_simple_heal(mendicant, hurtguy, heal_multiplier, pain_multiplier)
+
+ // Both types can be ignited (technically at least), so we can just do this here.
+ if(hurtguy.has_status_effect(/datum/status_effect/fire_handler/fire_stacks))
+ mendicant.set_fire_stacks(hurtguy.fire_stacks * pain_multiplier, remove_wet_stacks = TRUE)
+ if(hurtguy.on_fire)
+ mendicant.ignite_mob()
+ hurtguy.extinguish_mob()
+
+ // No healies in the end, cancel
+ if(!success)
+ return FALSE
+
+ mendicant.Beam(hurtguy, icon_state = beam_icon, time = 0.5 SECONDS)
+ beam_icon = initial(beam_icon)
+
+ hurtguy.update_damage_overlays()
+ mendicant.update_damage_overlays()
+
+ hurtguy.visible_message(span_notice("[mendicant] lays hands on [hurtguy]!"))
+ to_chat(target, span_boldnotice("[mendicant] lays hands on you, healing you!"))
+ new /obj/effect/temp_visual/heal(get_turf(hurtguy), COLOR_VERY_PALE_LIME_GREEN)
+ return success
+
+/datum/action/cooldown/spell/touch/lay_on_hands/proc/do_simple_heal(mob/living/carbon/mendicant, mob/living/hurtguy, heal_multiplier, pain_multiplier)
+ // Did the transfer work?
+ . = FALSE
+
+ // Damage to heal
+ var/brute_to_heal = min(hurtguy.getBruteLoss(), 35 * heal_multiplier)
+ // no double dipping
+ var/burn_to_heal = min(hurtguy.getFireLoss(), (35 - brute_to_heal) * heal_multiplier)
+
+ // Get at least organic limb to transfer the damage to
+ var/list/mendicant_organic_limbs = list()
+ for(var/obj/item/bodypart/possible_limb in mendicant.bodyparts)
+ if(IS_ORGANIC_LIMB(possible_limb))
+ mendicant_organic_limbs += possible_limb
+ // None? Gtfo
+ if(isnull(mendicant_organic_limbs))
+ return .
+
+ // Try to use our active hand, otherwise pick at random
+ var/obj/item/bodypart/mendicant_transfer_limb = mendicant.get_active_hand()
+ if(!(mendicant_transfer_limb in mendicant_organic_limbs))
+ mendicant_transfer_limb = pick(mendicant_organic_limbs)
+ mendicant_transfer_limb.receive_damage(brute_to_heal * pain_multiplier, burn_to_heal * pain_multiplier, forced = TRUE, wound_bonus = CANT_WOUND)
+
+ if(brute_to_heal)
+ hurtguy.adjustBruteLoss(brute_to_heal)
+ . = TRUE
+
+ if(burn_to_heal)
+ hurtguy.adjustFireLoss(burn_to_heal)
+ . = TRUE
+
+ return .
+
+/datum/action/cooldown/spell/touch/lay_on_hands/proc/do_complicated_heal(mob/living/carbon/mendicant, mob/living/carbon/hurtguy, heal_multiplier, pain_multiplier)
+
+ // Did the transfer work?
+ . = FALSE
+ // Get the hurtguy's limbs and the mendicant's limbs to attempt a 1-1 transfer.
+ var/list/hurt_limbs = hurtguy.get_damaged_bodyparts(1, 1, BODYTYPE_ORGANIC) + hurtguy.get_wounded_bodyparts(BODYTYPE_ORGANIC)
+ var/list/mendicant_organic_limbs = list()
+ for(var/obj/item/bodypart/possible_limb in mendicant.bodyparts)
+ if(IS_ORGANIC_LIMB(possible_limb))
+ mendicant_organic_limbs += possible_limb
+
+ // If we have no organic available limbs just give up.
+ if(!length(mendicant_organic_limbs) || !length(hurt_limbs))
+ return
+
+ // Counter to make sure we don't take too much from separate limbs
+ var/total_damage_healed = 0
+ // Transfer damage from one limb to the mendicant's counterpart.
+ for(var/obj/item/bodypart/affected_limb as anything in hurt_limbs)
+ var/obj/item/bodypart/mendicant_transfer_limb = mendicant.get_bodypart(affected_limb.body_zone)
+ // If the compared limb isn't organic, skip it and pick a random one.
+ if(!(mendicant_transfer_limb in mendicant_organic_limbs))
+ mendicant_transfer_limb = pick(mendicant_organic_limbs)
+
+ // Transfer at most 35 damage by default.
+ var/brute_damage = min(affected_limb.brute_dam, 35 * heal_multiplier)
+ // no double dipping
+ var/burn_damage = min(affected_limb.burn_dam, (35 * heal_multiplier) - brute_damage)
+ if((brute_damage || burn_damage) && total_damage_healed < (35 * heal_multiplier))
+ total_damage_healed = brute_damage + burn_damage
+ . = TRUE
+ // Heal!
+ affected_limb.heal_damage(brute_damage * heal_multiplier, burn_damage * heal_multiplier, required_bodytype = BODYTYPE_ORGANIC)
+ // Hurt!
+ mendicant_transfer_limb.receive_damage(brute_damage * pain_multiplier, burn_damage * pain_multiplier, forced = TRUE, wound_bonus = CANT_WOUND)
+
+ // Force light wounds onto you.
+ for(var/datum/wound/iter_wound as anything in affected_limb.wounds)
+ if(iter_wound.severity > WOUND_SEVERITY_MODERATE)
+ continue
+ . = TRUE
+ iter_wound.remove_wound()
+ iter_wound.apply_wound(mendicant_transfer_limb)
+
+
+ return .
+
+/obj/item/melee/touch_attack/lay_on_hands
+ name = "mending touch"
+ desc = "Unlike in your favorite tabletop games, you sadly can't cast this on yourself, so you can't use that as a Scapegoat." // mayus is reference. if you get it youre cool
+ icon = 'icons/obj/weapons/hand.dmi'
+ icon_state = "greyscale"
+ color = COLOR_VERY_PALE_LIME_GREEN
+ inhand_icon_state = "greyscale"
diff --git a/code/datums/mutations/void_magnet.dm b/code/datums/mutations/void_magnet.dm
index 48f04eda636a7..b5c893e32c547 100644
--- a/code/datums/mutations/void_magnet.dm
+++ b/code/datums/mutations/void_magnet.dm
@@ -3,7 +3,7 @@
desc = "A rare genome that attracts odd forces not usually observed."
quality = MINOR_NEGATIVE //upsides and downsides
text_gain_indication = span_notice("You feel a heavy, dull force just beyond the walls watching you.")
- instability = 30
+ instability = POSITIVE_INSTABILITY_MODERATE // useful, but has large drawbacks
power_path = /datum/action/cooldown/spell/void/cursed
energy_coeff = 1
synchronizer_coeff = 1
diff --git a/code/datums/mutations/webbing.dm b/code/datums/mutations/webbing.dm
index 0fda118d0ed60..e372cb4bf5cdb 100644
--- a/code/datums/mutations/webbing.dm
+++ b/code/datums/mutations/webbing.dm
@@ -3,8 +3,8 @@
name = "Webbing Production"
desc = "Allows the user to lay webbing, and travel through it."
quality = POSITIVE
- text_gain_indication = "Your skin feels webby."
- instability = 15
+ text_gain_indication = span_notice("Your skin feels webby.")
+ instability = POSITIVE_INSTABILITY_MODERATE // useful until you're lynched
power_path = /datum/action/cooldown/mob_cooldown/lay_web/genetic
energy_coeff = 1
diff --git a/code/datums/proximity_monitor/field.dm b/code/datums/proximity_monitor/field.dm
index 67bbef948ef3d..03e7c054d0908 100644
--- a/code/datums/proximity_monitor/field.dm
+++ b/code/datums/proximity_monitor/field.dm
@@ -129,7 +129,7 @@
if(current_range > 0)
local_field_turfs += RANGE_TURFS(current_range - 1, center)
if(current_range > 1)
- local_edge_turfs = local_field_turfs - RANGE_TURFS(current_range, center)
+ local_edge_turfs = RANGE_TURFS(current_range, center) - local_field_turfs
return list(FIELD_TURFS_KEY = local_field_turfs, EDGE_TURFS_KEY = local_edge_turfs)
//Gets edge direction/corner, only works with square radius/WDH fields!
@@ -169,6 +169,7 @@
name = "strange multitool"
desc = "Seems to project a colored field!"
var/operating = FALSE
+ var/range_to_use = 5
var/datum/proximity_monitor/advanced/debug/current = null
/obj/item/multitool/field_debug/Destroy()
@@ -176,7 +177,7 @@
return ..()
/obj/item/multitool/field_debug/proc/setup_debug_field()
- current = new(src, 5, FALSE)
+ current = new(src, range_to_use, FALSE)
current.set_fieldturf_color = "#aaffff"
current.set_edgeturf_color = "#ffaaff"
current.recalculate_field(full_recalc = TRUE)
diff --git a/code/datums/proximity_monitor/fields/projectile_dampener.dm b/code/datums/proximity_monitor/fields/projectile_dampener.dm
index 3e696e5fb132d..fe23fe0be33e5 100644
--- a/code/datums/proximity_monitor/fields/projectile_dampener.dm
+++ b/code/datums/proximity_monitor/fields/projectile_dampener.dm
@@ -28,6 +28,10 @@
release_projectile(projectile)
return ..()
+/datum/proximity_monitor/advanced/projectile_dampener/recalculate_field(full_recalc)
+ full_recalc = TRUE // We always perform a full recalc because we need to update ALL the sprites
+ return ..()
+
/datum/proximity_monitor/advanced/projectile_dampener/process()
var/list/ranged = list()
for(var/obj/projectile/projectile in range(current_range, get_turf(host)))
diff --git a/code/datums/quirks/negative_quirks/addict.dm b/code/datums/quirks/negative_quirks/addict.dm
index f97dae32c260f..767d9283baef0 100644
--- a/code/datums/quirks/negative_quirks/addict.dm
+++ b/code/datums/quirks/negative_quirks/addict.dm
@@ -123,7 +123,7 @@
/obj/effect/spawner/random/entertainment/cigarette_pack,
/obj/effect/spawner/random/entertainment/cigar,
/obj/effect/spawner/random/entertainment/lighter,
- /obj/item/clothing/mask/cigarette/pipe,
+ /obj/item/cigarette/pipe,
)
/datum/quirk_constant_data/smoker
@@ -162,7 +162,7 @@
. = ..()
var/mob/living/carbon/human/human_holder = quirk_holder
var/obj/item/mask_item = human_holder.get_item_by_slot(ITEM_SLOT_MASK)
- if(istype(mask_item, /obj/item/clothing/mask/cigarette))
+ if(istype(mask_item, /obj/item/cigarette))
var/obj/item/storage/fancy/cigarettes/cigarettes = drug_container_type
if(istype(mask_item, initial(cigarettes.spawn_type)))
quirk_holder.clear_mood_event("wrong_cigs")
diff --git a/code/datums/quirks/neutral_quirks/transhumanist.dm b/code/datums/quirks/neutral_quirks/transhumanist.dm
index 046c2bb30f089..a898a2d202046 100644
--- a/code/datums/quirks/neutral_quirks/transhumanist.dm
+++ b/code/datums/quirks/neutral_quirks/transhumanist.dm
@@ -23,7 +23,7 @@
lose_text = span_danger("Robots don't seem all that great anymore.")
medical_record_text = "Patient reports hating pathetic creatures of meat and bone."
mail_goodies = list(
- /obj/item/stock_parts/cell/potato,
+ /obj/item/stock_parts/power_store/cell/potato,
/obj/item/stack/cable_coil,
/obj/item/toy/talking/ai,
/obj/item/toy/figure/borg,
diff --git a/code/datums/quirks/positive_quirks/settler.dm b/code/datums/quirks/positive_quirks/settler.dm
index 9b52403404b12..3b4084242b811 100644
--- a/code/datums/quirks/positive_quirks/settler.dm
+++ b/code/datums/quirks/positive_quirks/settler.dm
@@ -9,17 +9,26 @@
value = 4
mob_trait = TRAIT_SETTLER
quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE
- medical_record_text = "Patient appears to be abnormally stout."
+ medical_record_text = "Patient has been exposed to planetary conditions for extended periods, resulting in an excessively stout build."
mail_goodies = list(
/obj/item/clothing/shoes/workboots/mining,
/obj/item/gps,
)
+ /// Most of the behavior of settler is from these traits, rather than exclusively the quirk
+ var/list/settler_traits = list(
+ TRAIT_EXPERT_FISHER,
+ TRAIT_ROUGHRIDER,
+ TRAIT_STUBBY_BODY,
+ TRAIT_BEAST_EMPATHY,
+ TRAIT_STURDY_FRAME,
+ )
/datum/quirk/item_quirk/settler/add(client/client_source)
var/mob/living/carbon/human/human_quirkholder = quirk_holder
human_quirkholder.set_mob_height(HUMAN_HEIGHT_SHORTEST)
human_quirkholder.add_movespeed_modifier(/datum/movespeed_modifier/settler)
human_quirkholder.physiology.hunger_mod *= 0.5 //good for you, shortass, you don't get hungry nearly as often
+ human_quirkholder.add_traits(settler_traits, QUIRK_TRAIT)
/datum/quirk/item_quirk/settler/add_unique(client/client_source)
give_item_to_holder(/obj/item/storage/box/papersack/wheat, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS))
@@ -32,3 +41,4 @@
human_quirkholder.set_mob_height(HUMAN_HEIGHT_MEDIUM)
human_quirkholder.remove_movespeed_modifier(/datum/movespeed_modifier/settler)
human_quirkholder.physiology.hunger_mod *= 2
+ human_quirkholder.remove_traits(settler_traits, QUIRK_TRAIT)
diff --git a/code/datums/shuttles/emergency.dm b/code/datums/shuttles/emergency.dm
index 0361848385f1a..0f45a0c6a08b4 100644
--- a/code/datums/shuttles/emergency.dm
+++ b/code/datums/shuttles/emergency.dm
@@ -265,6 +265,13 @@
description = "We pulled this one out of Mothball just for you!"
occupancy_limit = "40"
+/datum/map_template/shuttle/emergency/wawa
+ suffix = "wawa"
+ name = "Wawa Stand-in Emergency Shuttle"
+ description = "Due to a recent clerical error in the funding department, a lot of funding went to lizard plushies. Due to the costs, Nanotrasen has supplied a nearby garbage truck as a stand-in. Better learn how to share spots."
+ credit_cost = CARGO_CRATE_VALUE * 6
+ occupancy_limit = "25"
+
/datum/map_template/shuttle/emergency/scrapheap
suffix = "scrapheap"
name = "Standby Evacuation Vessel \"Scrapheap Challenge\""
diff --git a/code/datums/shuttles/whiteship.dm b/code/datums/shuttles/whiteship.dm
index 0b48575e057c2..b8dbcfd4bd76e 100644
--- a/code/datums/shuttles/whiteship.dm
+++ b/code/datums/shuttles/whiteship.dm
@@ -24,7 +24,7 @@
/datum/map_template/shuttle/whiteship/birdshot
suffix = "birdshot"
name = "NT Patrol Bee"
- description = "A small patrol vessel with a central corridor connecting all rooms. Features 2 small cargo bays and a brig. Spawns with an agressive and deadly Gelatinous Cube"
+ description = "A small patrol vessel with a central corridor connecting all rooms. Features 2 small cargo bays and a brig. Spawns with an aggressive and deadly Gelatinous Cube"
/datum/map_template/shuttle/whiteship/kilo
suffix = "kilo"
diff --git a/code/datums/sprite_accessories.dm b/code/datums/sprite_accessories.dm
index e6e8b956e6568..e5cf49475e22e 100644
--- a/code/datums/sprite_accessories.dm
+++ b/code/datums/sprite_accessories.dm
@@ -1700,24 +1700,24 @@
// MutantParts Definitions //
/////////////////////////////
-/datum/sprite_accessory/body_markings
- icon = 'icons/mob/human/species/lizard/lizard_misc.dmi'
+/datum/sprite_accessory/lizard_markings
+ icon = 'icons/mob/human/species/lizard/lizard_markings.dmi'
-/datum/sprite_accessory/body_markings/none
+/datum/sprite_accessory/lizard_markings/none
name = "None"
icon_state = "none"
-/datum/sprite_accessory/body_markings/dtiger
+/datum/sprite_accessory/lizard_markings/dtiger
name = "Dark Tiger Body"
icon_state = "dtiger"
gender_specific = TRUE
-/datum/sprite_accessory/body_markings/ltiger
+/datum/sprite_accessory/lizard_markings/ltiger
name = "Light Tiger Body"
icon_state = "ltiger"
gender_specific = TRUE
-/datum/sprite_accessory/body_markings/lbelly
+/datum/sprite_accessory/lizard_markings/lbelly
name = "Light Belly"
icon_state = "lbelly"
gender_specific = TRUE
diff --git a/code/datums/station_traits/neutral_traits.dm b/code/datums/station_traits/neutral_traits.dm
index e066079802d7a..0ecb49f96a063 100644
--- a/code/datums/station_traits/neutral_traits.dm
+++ b/code/datums/station_traits/neutral_traits.dm
@@ -197,6 +197,7 @@
if(length(birthday_options))
birthday_person = pick(birthday_options)
birthday_person_name = birthday_person.real_name
+ ADD_TRAIT(birthday_person, TRAIT_BIRTHDAY_BOY, REF(src))
addtimer(CALLBACK(src, PROC_REF(announce_birthday)), 10 SECONDS)
/datum/station_trait/birthday/proc/check_valid_override()
diff --git a/code/datums/status_effects/agent_pinpointer.dm b/code/datums/status_effects/agent_pinpointer.dm
index 29dfbd4338782..c22242be400fd 100644
--- a/code/datums/status_effects/agent_pinpointer.dm
+++ b/code/datums/status_effects/agent_pinpointer.dm
@@ -43,7 +43,7 @@
if(here.z != there.z)
linked_alert.icon_state = "pinonnull"
return
- if(get_dist_euclidian(here,there) <= minimum_range + rand(0, range_fuzz_factor))
+ if(get_dist_euclidean(here,there) <= minimum_range + rand(0, range_fuzz_factor))
linked_alert.icon_state = "pinondirect"
return
linked_alert.setDir(get_dir(here, there))
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index e8c4be7869707..04ab2ee8f1783 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -277,14 +277,14 @@
)
//Makes the user passive, it's in their oath not to harm!
- ADD_TRAIT(owner, TRAIT_PACIFISM, HIPPOCRATIC_OATH_TRAIT)
+ owner.add_traits(list(TRAIT_PACIFISM, TRAIT_HIPPOCRATIC_OATH), HIPPOCRATIC_OATH_TRAIT)
var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
med_hud.show_to(owner)
return ..()
/datum/status_effect/hippocratic_oath/on_remove()
QDEL_NULL(aura_healing)
- REMOVE_TRAIT(owner, TRAIT_PACIFISM, HIPPOCRATIC_OATH_TRAIT)
+ owner.remove_traits(list(TRAIT_PACIFISM, TRAIT_HIPPOCRATIC_OATH), HIPPOCRATIC_OATH_TRAIT)
var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
med_hud.hide_from(owner)
diff --git a/code/datums/status_effects/buffs/stop_drop_roll.dm b/code/datums/status_effects/buffs/stop_drop_roll.dm
index 43d37654e6177..17b4d6d768de3 100644
--- a/code/datums/status_effects/buffs/stop_drop_roll.dm
+++ b/code/datums/status_effects/buffs/stop_drop_roll.dm
@@ -24,6 +24,9 @@
// Start with one weaker roll
owner.spin(spintime = actual_interval, speed = actual_interval / 4)
owner.adjust_fire_stacks(-0.25)
+
+ for (var/obj/item/dropped in owner.loc)
+ dropped.extinguish() // Effectively extinguish your items by rolling on them
return TRUE
/datum/status_effect/stop_drop_roll/on_remove()
diff --git a/code/datums/status_effects/debuffs/fire_stacks.dm b/code/datums/status_effects/debuffs/fire_stacks.dm
index 62f8c9ca24e32..46c31c4578d1d 100644
--- a/code/datums/status_effects/debuffs/fire_stacks.dm
+++ b/code/datums/status_effects/debuffs/fire_stacks.dm
@@ -136,6 +136,18 @@
/// Type of mob light emitter we use when on fire
var/moblight_type = /obj/effect/dummy/lighting_obj/moblight/fire
+/datum/status_effect/fire_handler/fire_stacks/proc/owner_touched_sparks()
+ SIGNAL_HANDLER
+
+ ignite()
+
+/datum/status_effect/fire_handler/fire_stacks/on_creation(mob/living/new_owner, new_stacks, forced = FALSE)
+ . = ..()
+ RegisterSignal(owner, COMSIG_ATOM_TOUCHED_SPARKS, PROC_REF(owner_touched_sparks))
+
+/datum/status_effect/fire_handler/fire_stacks/on_remove()
+ UnregisterSignal(owner, COMSIG_ATOM_TOUCHED_SPARKS)
+
/datum/status_effect/fire_handler/fire_stacks/tick(seconds_between_ticks)
if(stacks <= 0)
qdel(src)
@@ -247,7 +259,7 @@
owner.clear_mood_event("on_fire")
SEND_SIGNAL(owner, COMSIG_LIVING_EXTINGUISHED, owner)
cache_stacks()
- for(var/obj/item/equipped in owner.get_equipped_items())
+ for(var/obj/item/equipped in (owner.get_equipped_items(INCLUDE_HELD)))
equipped.extinguish()
/datum/status_effect/fire_handler/fire_stacks/on_remove()
diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm
index c9e94e0dd97f5..3d4bd7e93655c 100644
--- a/code/datums/status_effects/neutral.dm
+++ b/code/datums/status_effects/neutral.dm
@@ -31,7 +31,7 @@
SIGNAL_HANDLER
if(istype(attacking_item, /obj/item/kinetic_crusher))
- total_damage += damage_dealt
+ total_damage += (-1 * damage_dealt)
/datum/status_effect/syphon_mark
id = "syphon_mark"
diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm
index 9bcc0f03b7a0e..8c98d7d56bd16 100644
--- a/code/datums/storage/storage.dm
+++ b/code/datums/storage/storage.dm
@@ -4,6 +4,7 @@
* The parent and real_location variables are both weakrefs, so they must be resolved before they can be used.
* If you're looking to create custom storage type behaviors, check ../subtypes
*/
+
/datum/storage
/**
* A reference to the atom linked to this storage object
@@ -22,10 +23,8 @@
/// List of all the mobs currently viewing the contents of this storage.
VAR_PRIVATE/list/mob/is_using = list()
- /// The storage display screen object.
- VAR_PRIVATE/atom/movable/screen/storage/boxes
- /// The 'close button' screen object.
- VAR_PRIVATE/atom/movable/screen/close/closer
+ /// Associated list that keeps track of all storage UI datums per person.
+ VAR_PRIVATE/list/datum/storage_interface/storage_interfaces = null
/// Typecache of items that can be inserted into this storage.
/// By default, all item types can be inserted (assuming other conditions are met).
@@ -131,9 +130,6 @@
qdel(src)
return
- boxes = new(null, null, src)
- closer = new(null, null, src)
-
set_parent(parent)
set_real_location(parent)
@@ -141,22 +137,16 @@
src.max_specific_storage = max_specific_storage
src.max_total_storage = max_total_storage
- orient_to_hud()
-
/datum/storage/Destroy()
- parent = null
- real_location = null
for(var/mob/person in is_using)
- if(person.active_storage == src)
- person.active_storage = null
- person.client?.screen -= boxes
- person.client?.screen -= closer
-
- QDEL_NULL(boxes)
- QDEL_NULL(closer)
+ hide_contents(person)
is_using.Cut()
+ QDEL_LIST_ASSOC_VAL(storage_interfaces)
+
+ parent = null
+ real_location = null
return ..()
@@ -735,12 +725,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
return COMPONENT_CANCEL_MOUSEDROP_ONTO
else if(!istype(over_object, /atom/movable/screen))
- var/action_status
- if(isturf(over_object))
- action_status = user.can_perform_turf_action(over_object)
- else
- action_status = user.can_perform_action(over_object, FORBID_TELEKINESIS_REACH)
- if(!action_status)
+ if(!user.can_perform_action(over_object, FORBID_TELEKINESIS_REACH))
return
parent.add_fingerprint(user)
@@ -791,7 +776,6 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
/datum/storage/proc/on_mousedropped_onto(datum/source, obj/item/dropping, mob/user)
SIGNAL_HANDLER
- . = COMPONENT_CANCEL_MOUSEDROPPED_ONTO
if(!istype(dropping))
return
if(dropping != user.get_active_held_item())
@@ -804,6 +788,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
return
attempt_insert(dropping, user)
+ return COMPONENT_CANCEL_MOUSEDROPPED_ONTO
/// Signal handler for whenever we're attacked by an object.
/datum/storage/proc/on_item_interact(datum/source, mob/user, obj/item/thing, params)
@@ -868,69 +853,6 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
return toreturn
-/// Updates the storage UI to fit all objects inside storage.
-/datum/storage/proc/orient_to_hud()
- var/adjusted_contents = real_location.contents.len
-
- //Numbered contents display
- var/list/datum/numbered_display/numbered_contents
- if(numerical_stacking)
- numbered_contents = process_numerical_display()
- adjusted_contents = numbered_contents.len
- //if the ammount of contents reaches some multiplier of the final column (and its not the last slot), let the player view an additional row
- var/additional_row = (!(adjusted_contents % screen_max_columns) && adjusted_contents < max_slots)
-
- var/columns = clamp(max_slots, 1, screen_max_columns)
- var/rows = clamp(CEILING(adjusted_contents / columns, 1) + additional_row, 1, screen_max_rows)
-
- orient_item_boxes(rows, columns, numbered_contents)
-
-/// Generates the actual UI objects, their location, and alignments whenever we open storage up.
-/datum/storage/proc/orient_item_boxes(rows, cols, list/obj/item/numerical_display_contents)
- boxes.screen_loc = "[screen_start_x]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y] to [screen_start_x+cols-1]:[screen_pixel_x],[screen_start_y+rows-1]:[screen_pixel_y]"
- var/current_x = screen_start_x
- var/current_y = screen_start_y
- var/turf/our_turf = get_turf(real_location)
-
- if(islist(numerical_display_contents))
- for(var/type in numerical_display_contents)
- var/datum/numbered_display/numberdisplay = numerical_display_contents[type]
-
- var/obj/item/display_sample = numberdisplay.sample_object
- display_sample.mouse_opacity = MOUSE_OPACITY_OPAQUE
- display_sample.screen_loc = "[current_x]:[screen_pixel_x],[current_y]:[screen_pixel_y]"
- display_sample.maptext = MAPTEXT("[(numberdisplay.number > 1)? "[numberdisplay.number]" : ""]")
- SET_PLANE(display_sample, ABOVE_HUD_PLANE, our_turf)
-
- current_x++
-
- if(current_x - screen_start_x >= cols)
- current_x = screen_start_x
- current_y++
-
- if(current_y - screen_start_y >= rows)
- break
-
- else
- for(var/obj/item in real_location)
- item.mouse_opacity = MOUSE_OPACITY_OPAQUE
- item.screen_loc = "[current_x]:[screen_pixel_x],[current_y]:[screen_pixel_y]"
- item.maptext = ""
- item.plane = ABOVE_HUD_PLANE
- SET_PLANE(item, ABOVE_HUD_PLANE, our_turf)
-
- current_x++
-
- if(current_x - screen_start_x >= cols)
- current_x = screen_start_x
- current_y++
-
- if(current_y - screen_start_y >= rows)
- break
-
- closer.screen_loc = "[screen_start_x + cols]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y]"
-
-
/// Signal handler for when we get attacked with secondary click by an item.
/datum/storage/proc/on_item_interact_secondary(datum/source, mob/user, atom/weapon)
SIGNAL_HANDLER
@@ -959,8 +881,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
if(!click_alt_open)
return
- return open_storage_on_signal(source, user)
-
+ return open_storage_on_signal(source, user) ? CLICK_ACTION_SUCCESS : NONE
/// Opens the storage to the mob, showing them the contents to their UI.
/datum/storage/proc/open_storage(mob/to_show)
@@ -968,11 +889,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
show_contents(to_show)
return FALSE
- if(!to_show.CanReach(parent))
- parent.balloon_alert(to_show, "can't reach!")
- return FALSE
-
- if(!isliving(to_show) || to_show.incapacitated())
+ if(!isliving(to_show) || !to_show.can_perform_action(parent, ALLOW_RESTING | FORBID_TELEKINESIS_REACH))
return FALSE
if(locked)
@@ -1009,10 +926,10 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
/// Async version of putting something into a mobs hand.
-/datum/storage/proc/put_in_hands_async(mob/toshow, obj/item/toremove)
- if(!toshow.put_in_hands(toremove))
+/datum/storage/proc/put_in_hands_async(mob/to_show, obj/item/toremove)
+ if(!to_show.put_in_hands(toremove))
if(!silent)
- toremove.balloon_alert(toshow, "fumbled!")
+ toremove.balloon_alert(to_show, "fumbled!")
return TRUE
/// Signal handler for whenever a mob walks away with us, close if they can't reach us.
@@ -1047,48 +964,55 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
* Show our storage to a mob.
*
* Arguments
- * * mob/toshow - the mob to show the storage to
+ * * mob/to_show - the mob to show the storage to
*
* Returns
* * FALSE if the show failed
* * TRUE otherwise
*/
-/datum/storage/proc/show_contents(mob/toshow)
- if(!toshow.client)
+/datum/storage/proc/show_contents(mob/to_show)
+ if(!to_show.client)
return FALSE
// You can only inspect hidden contents if you're an observer
- if(!isobserver(toshow) && !display_contents)
+ if(!isobserver(to_show) && !display_contents)
return FALSE
- if(toshow.active_storage != src && (toshow.stat == CONSCIOUS))
+ if(to_show.active_storage != src && (to_show.stat == CONSCIOUS))
for(var/obj/item/thing in real_location)
- if(thing.on_found(toshow))
- toshow.active_storage.hide_contents(toshow)
+ if(thing.on_found(to_show))
+ to_show.active_storage.hide_contents(to_show)
- if(toshow.active_storage)
- toshow.active_storage.hide_contents(toshow)
+ if(to_show.active_storage)
+ to_show.active_storage.hide_contents(to_show)
- toshow.active_storage = src
+ to_show.active_storage = src
if(ismovable(real_location))
var/atom/movable/movable_loc = real_location
movable_loc.become_active_storage(src)
- orient_to_hud()
+ LAZYINITLIST(storage_interfaces)
+
+ var/ui_style = ui_style2icon(to_show.client?.prefs?.read_preference(/datum/preference/choiced/ui_style))
+
+ if (isnull(storage_interfaces[to_show]))
+ storage_interfaces[to_show] = new /datum/storage_interface(ui_style, src)
+
+ orient_storage()
- is_using |= toshow
+ is_using |= to_show
+
+ to_show.client.screen |= storage_interfaces[to_show].list_ui_elements()
+ to_show.client.screen |= real_location.contents
- toshow.client.screen |= boxes
- toshow.client.screen |= closer
- toshow.client.screen |= real_location.contents
return TRUE
/**
* Hide our storage from a mob.
*
* Arguments
- * * mob/toshow - the mob to hide the storage from
+ * * mob/to_hide - the mob to hide the storage from
*/
/datum/storage/proc/hide_contents(mob/to_hide)
if(!to_hide.client)
@@ -1100,13 +1024,19 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
var/atom/movable/movable_loc = real_location
movable_loc.lose_active_storage(src)
+ if (isnull(storage_interfaces[to_hide]))
+ return TRUE
+
is_using -= to_hide
- to_hide.client.screen -= boxes
- to_hide.client.screen -= closer
+ to_hide.client.screen -= storage_interfaces[to_hide].list_ui_elements()
to_hide.client.screen -= real_location.contents
+ QDEL_NULL(storage_interfaces[to_hide])
+ storage_interfaces -= to_hide
+
return TRUE
+
/datum/storage/proc/action_trigger(datum/source, datum/action/triggered)
SIGNAL_HANDLER
@@ -1117,10 +1047,54 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
modeswitch_action = null
+/// Updates views of all objects in storage and stretches UI to appropriate size
+/datum/storage/proc/orient_storage()
+ var/adjusted_contents = length(real_location.contents)
+ var/list/datum/numbered_display/numbered_contents
+ if(numerical_stacking)
+ numbered_contents = process_numerical_display()
+ adjusted_contents = length(numbered_contents)
+
+ //if the ammount of contents reaches some multiplier of the final column (and its not the last slot), let the player view an additional row
+ var/additional_row = (!(adjusted_contents % screen_max_columns) && adjusted_contents < max_slots)
+
+ var/columns = clamp(max_slots, 1, screen_max_columns)
+ var/rows = clamp(CEILING(adjusted_contents / columns, 1) + additional_row, 1, screen_max_rows)
+
+ for (var/ui_user in storage_interfaces)
+ storage_interfaces[ui_user].update_position(screen_start_x, screen_pixel_x, screen_start_y, screen_pixel_y, columns, rows)
+
+ var/current_x = screen_start_x
+ var/current_y = screen_start_y
+ var/turf/our_turf = get_turf(real_location)
+
+ var/list/obj/storage_contents = list()
+ if (islist(numbered_contents))
+ for(var/content_type in numbered_contents)
+ var/datum/numbered_display/numberdisplay = numbered_contents[content_type]
+ storage_contents[numberdisplay.sample_object] = MAPTEXT("[(numberdisplay.number > 1)? "[numberdisplay.number]" : ""]")
+ else
+ for(var/obj/item as anything in real_location)
+ storage_contents[item] = ""
+
+ for(var/obj/item as anything in storage_contents)
+ item.mouse_opacity = MOUSE_OPACITY_OPAQUE
+ item.screen_loc = "[current_x]:[screen_pixel_x],[current_y]:[screen_pixel_y]"
+ item.maptext = storage_contents[item]
+ SET_PLANE(item, ABOVE_HUD_PLANE, our_turf)
+ current_x++
+ if(current_x - screen_start_x < columns)
+ continue
+ current_x = screen_start_x
+
+ current_y++
+ if(current_y - screen_start_y >= rows)
+ break
+
/**
* Toggles the collectmode of our storage.
*
- * @param mob/toshow the mob toggling us
+ * @param mob/to_show the mob toggling us
*/
/datum/storage/proc/toggle_collection_mode(mob/user)
collection_mode = (collection_mode + 1) % 3
diff --git a/code/datums/storage/storage_interface.dm b/code/datums/storage/storage_interface.dm
new file mode 100644
index 0000000000000..cd28b9eb3f7a1
--- /dev/null
+++ b/code/datums/storage/storage_interface.dm
@@ -0,0 +1,68 @@
+/// Datum tracker for storage UI
+/datum/storage_interface
+ /// UI elements for this theme
+ var/atom/movable/screen/close/closer
+ var/atom/movable/screen/storage/cells
+ var/atom/movable/screen/storage/corner/corner_top_left
+ var/atom/movable/screen/storage/corner/top_right/corner_top_right
+ var/atom/movable/screen/storage/corner/bottom_left/corner_bottom_left
+ var/atom/movable/screen/storage/corner/bottom_right/corner_bottom_right
+ var/atom/movable/screen/storage/rowjoin/rowjoin_left
+ var/atom/movable/screen/storage/rowjoin/right/rowjoin_right
+
+ /// Storage that owns us
+ var/datum/storage/parent_storage
+
+/datum/storage_interface/New(ui_style, parent_storage)
+ ..()
+ src.parent_storage = parent_storage
+ closer = new(null, null, parent_storage)
+ cells = new(null, null, parent_storage)
+ corner_top_left = new(null, null, parent_storage)
+ corner_top_right = new(null, null, parent_storage)
+ corner_bottom_left = new(null, null, parent_storage)
+ corner_bottom_right = new(null, null, parent_storage)
+ rowjoin_left = new(null, null, parent_storage)
+ rowjoin_right = new(null, null, parent_storage)
+ for (var/atom/movable/screen/ui_elem as anything in list_ui_elements())
+ ui_elem.icon = ui_style
+
+/// Returns all UI elements under this theme
+/datum/storage_interface/proc/list_ui_elements()
+ return list(cells, corner_top_left, corner_top_right, corner_bottom_left, corner_bottom_right, rowjoin_left, rowjoin_right, closer)
+
+/datum/storage_interface/Destroy(force)
+ QDEL_NULL(cells)
+ QDEL_NULL(corner_top_left)
+ QDEL_NULL(corner_top_right)
+ QDEL_NULL(corner_bottom_left)
+ QDEL_NULL(corner_bottom_right)
+ QDEL_NULL(rowjoin_left)
+ QDEL_NULL(rowjoin_right)
+ parent_storage = null
+ return ..()
+
+/// Updates position of all UI elements
+/datum/storage_interface/proc/update_position(screen_start_x, screen_pixel_x, screen_start_y, screen_pixel_y, columns, rows)
+ var/start_pixel_x = screen_start_x * 32 + screen_pixel_x
+ var/start_pixel_y = screen_start_y * 32 + screen_pixel_y
+ var/end_pixel_x = start_pixel_x + (columns - 1) * 32
+ var/end_pixel_y = start_pixel_y + (rows - 1) * 32
+
+ cells.screen_loc = spanning_screen_loc(start_pixel_x, start_pixel_y, end_pixel_x, end_pixel_y)
+ var/left_edge_loc = spanning_screen_loc(min(start_pixel_x + 32, end_pixel_x), start_pixel_y, end_pixel_x, end_pixel_y)
+ var/right_edge_loc = spanning_screen_loc(start_pixel_x, start_pixel_y, max(start_pixel_x, end_pixel_x - 32), end_pixel_y)
+ corner_top_left.screen_loc = left_edge_loc
+ corner_bottom_left.screen_loc = left_edge_loc
+ corner_top_right.screen_loc = right_edge_loc
+ corner_bottom_right.screen_loc = right_edge_loc
+
+ var/row_left_loc = spanning_screen_loc(start_pixel_x, start_pixel_y + 27, start_pixel_x, start_pixel_y + 27 + max(0, rows - 2) * 32)
+ rowjoin_left.screen_loc = row_left_loc
+ rowjoin_left.alpha = (rows > 1) * 255
+
+ var/row_right_loc = spanning_screen_loc(end_pixel_x, start_pixel_y + 27, end_pixel_x, start_pixel_y + 27 + max(0, rows - 2) * 32)
+ rowjoin_right.screen_loc = row_right_loc
+ rowjoin_right.alpha = (rows > 1) * 255
+
+ closer.screen_loc = "[screen_start_x + columns]:[screen_pixel_x - 5],[screen_start_y]:[screen_pixel_y]"
diff --git a/code/datums/storage/subtypes/bag_of_holding.dm b/code/datums/storage/subtypes/bag_of_holding.dm
index a4ea699e42e21..aa812f5d1e007 100644
--- a/code/datums/storage/subtypes/bag_of_holding.dm
+++ b/code/datums/storage/subtypes/bag_of_holding.dm
@@ -38,7 +38,7 @@
user.investigate_log("has been gibbed by a bag of holding recursive insertion.", INVESTIGATE_DEATHS)
user.gib()
- var/obj/boh_tear/tear = new(rift_loc)
+ var/obj/reality_tear/tear = new(rift_loc)
tear.start_disaster()
qdel(to_insert)
qdel(parent)
diff --git a/code/datums/storage/subtypes/pockets.dm b/code/datums/storage/subtypes/pockets.dm
index d441c6fdc5ff6..edf3816c274ee 100644
--- a/code/datums/storage/subtypes/pockets.dm
+++ b/code/datums/storage/subtypes/pockets.dm
@@ -108,7 +108,7 @@
/obj/item/ammo_box/magazine/toy/pistol,
/obj/item/ammo_casing,
/obj/item/lipstick,
- /obj/item/clothing/mask/cigarette,
+ /obj/item/cigarette,
/obj/item/lighter,
/obj/item/match,
/obj/item/holochip,
@@ -116,7 +116,7 @@
/obj/item/reagent_containers/cup/glass/flask),
list(/obj/item/screwdriver/power,
/obj/item/ammo_casing/rocket,
- /obj/item/clothing/mask/cigarette/pipe,
+ /obj/item/cigarette/pipe,
/obj/item/toy/crayon/spraycan)
)
@@ -134,7 +134,7 @@
/obj/item/ammo_box/magazine/m9mm,
/obj/item/ammo_casing,
/obj/item/bikehorn,
- /obj/item/clothing/mask/cigarette,
+ /obj/item/cigarette,
/obj/item/dnainjector,
/obj/item/firing_pin,
/obj/item/holochip,
@@ -158,7 +158,7 @@
),
cant_hold_list = list(
/obj/item/ammo_casing/rocket,
- /obj/item/clothing/mask/cigarette/pipe,
+ /obj/item/cigarette/pipe,
/obj/item/screwdriver/power,
/obj/item/toy/crayon/spraycan,
),
diff --git a/code/datums/wires/apc.dm b/code/datums/wires/apc.dm
index 54d179802a311..50847df994372 100644
--- a/code/datums/wires/apc.dm
+++ b/code/datums/wires/apc.dm
@@ -4,8 +4,13 @@
/datum/wires/apc/New(atom/holder)
wires = list(
- WIRE_POWER1, WIRE_POWER2,
- WIRE_IDSCAN, WIRE_AI
+ WIRE_EQUIPMENT,
+ WIRE_LIGHT,
+ WIRE_ENVIRONMENT,
+ WIRE_POWER1,
+ WIRE_POWER2,
+ WIRE_INTERFACE,
+ WIRE_AI
)
add_duds(6)
..()
@@ -22,17 +27,32 @@
var/list/status = list()
status += "The interface light is [A.locked ? "red" : "green"]."
status += "The short indicator is [A.shorted ? "lit" : "off"]."
+ status += "The channel one light is [A.equipment ? "on" : "off"]."
+ status += "The channel two light is [A.lighting ? "on" : "off"]."
+ status += "The channel three light is [A.environ ? "on" : "off"]."
status += "The AI connection light is [!A.aidisabled ? "on" : "off"]."
return status
-/datum/wires/apc/on_pulse(wire)
+/datum/wires/apc/on_pulse(wire, user)
var/obj/machinery/power/apc/A = holder
switch(wire)
+ if(WIRE_EQUIPMENT)
+ A.equipment = A.equipment > APC_CHANNEL_OFF ? APC_CHANNEL_OFF : APC_CHANNEL_AUTO_ON
+ A.update_appearance()
+ A.update()
+ if(WIRE_LIGHT)
+ A.lighting = A.lighting > APC_CHANNEL_OFF ? APC_CHANNEL_OFF : APC_CHANNEL_AUTO_ON
+ A.update_appearance()
+ A.update()
+ if(WIRE_ENVIRONMENT)
+ A.environ = A.environ > APC_CHANNEL_OFF ? APC_CHANNEL_OFF : APC_CHANNEL_AUTO_ON
+ A.update_appearance()
+ A.update()
if(WIRE_POWER1, WIRE_POWER2) // Short for a long while.
if(!A.shorted)
A.shorted = TRUE
addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/power/apc, reset), wire), 2 MINUTES)
- if(WIRE_IDSCAN) // Unlock for a little while.
+ if(WIRE_INTERFACE) // Unlock for a little while.
A.locked = FALSE
addtimer(CALLBACK(A, TYPE_PROC_REF(/obj/machinery/power/apc, reset), wire), 30 SECONDS)
if(WIRE_AI) // Disable AI control for a very short time.
@@ -43,12 +63,26 @@
/datum/wires/apc/on_cut(wire, mend, source)
var/obj/machinery/power/apc/A = holder
switch(wire)
+ if(WIRE_EQUIPMENT)
+ A.equipment = mend ? APC_CHANNEL_AUTO_ON : APC_CHANNEL_OFF
+ A.update_appearance()
+ A.update()
+ if(WIRE_LIGHT)
+ A.lighting = mend ? APC_CHANNEL_AUTO_ON : APC_CHANNEL_OFF
+ A.update_appearance()
+ A.update()
+ if(WIRE_ENVIRONMENT)
+ A.environ = mend ? APC_CHANNEL_AUTO_ON : APC_CHANNEL_OFF
+ A.update_appearance()
+ A.update()
if(WIRE_POWER1, WIRE_POWER2) // Short out.
if(mend && !is_cut(WIRE_POWER1) && !is_cut(WIRE_POWER2))
A.shorted = FALSE
else
A.shorted = TRUE
A.shock(usr, 50)
+ if(WIRE_INTERFACE)
+ A.locked = !mend
if(WIRE_AI) // Disable AI control.
A.aidisabled = !mend
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 347dfc480b95f..51d660af0459f 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -552,13 +552,26 @@ GLOBAL_LIST_EMPTY(teleportlocs)
///Tries to play looping ambience to the mobs.
/mob/proc/refresh_looping_ambience()
+ if(!client) //if a tree falls in the woods...
+ return
var/area/my_area = get_area(src)
+ var/sound_to_use = my_area.ambient_buzz
- if(!(client?.prefs.read_preference(/datum/preference/toggle/sound_ship_ambience)) || !my_area.ambient_buzz)
+ if(!sound_to_use || !(client.prefs.read_preference(/datum/preference/toggle/sound_ship_ambience)))
SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = CHANNEL_BUZZ))
+ client.current_ambient_sound = null
return
- SEND_SOUND(src, sound(my_area.ambient_buzz, repeat = 1, wait = 0, volume = my_area.ambient_buzz_vol, channel = CHANNEL_BUZZ))
+ if(!can_hear())
+ SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = CHANNEL_BUZZ))
+ client.current_ambient_sound = null
+ return
+
+ if(sound_to_use == client.current_ambient_sound)
+ return //don't reset current loops.
+
+ client.current_ambient_sound = sound_to_use
+ SEND_SOUND(src, sound(sound_to_use, repeat = 1, wait = 0, volume = my_area.ambient_buzz_vol, channel = CHANNEL_BUZZ))
/**
diff --git a/code/game/atom/atom_tool_acts.dm b/code/game/atom/atom_tool_acts.dm
index bacdae83b1316..d055f22759e3e 100644
--- a/code/game/atom/atom_tool_acts.dm
+++ b/code/game/atom/atom_tool_acts.dm
@@ -9,6 +9,11 @@
SHOULD_CALL_PARENT(TRUE)
PROTECTED_PROC(TRUE)
+ if(!user.combat_mode)
+ var/tool_return = tool_act(user, tool, modifiers)
+ if(tool_return)
+ return tool_return
+
var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK)
var/is_left_clicking = !is_right_clicking
var/early_sig_return = NONE
@@ -45,10 +50,36 @@
if(interact_return)
return interact_return
+ return NONE
+
+/**
+ *
+ * ## Tool Act
+ *
+ * Handles using specific tools on this atom directly.
+ * Only called when combat mode is off.
+ *
+ * Handles the tool_acts in particular, such as wrenches and screwdrivers.
+ *
+ * This can be overriden to handle unique "tool interactions"
+ * IE using an item like a tool (when it's not actually one)
+ * This is particularly useful for things that shouldn't be inserted into storage
+ * (because tool acting runs before storage checks)
+ * but otherwise does nothing that [item_interaction] doesn't already do.
+ *
+ * In other words, use sparingly. It's harder to use (correctly) than [item_interaction].
+ */
+/atom/proc/tool_act(mob/living/user, obj/item/tool, list/modifiers)
+ SHOULD_CALL_PARENT(TRUE)
+ PROTECTED_PROC(TRUE)
+
var/tool_type = tool.tool_behaviour
- if(!tool_type) // here on only deals with ... tools
+ if(!tool_type)
return NONE
+ var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK)
+ var/is_left_clicking = !is_right_clicking
+
var/list/processing_recipes = list()
var/signal_result = is_left_clicking \
? SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT(tool_type), user, tool, processing_recipes) \
@@ -57,6 +88,7 @@
return signal_result
if(length(processing_recipes))
process_recipes(user, tool, processing_recipes)
+ return ITEM_INTERACT_SUCCESS
if(QDELETED(tool))
return ITEM_INTERACT_SUCCESS // Safe-ish to assume that if we deleted our item something succeeded
@@ -291,3 +323,23 @@
/// Called on an object when a tool with analyzer capabilities is used to right click an object
/atom/proc/analyzer_act_secondary(mob/living/user, obj/item/tool)
return
+
+/**
+ * Called before this item is placed into a storage container
+ * via the item clicking on the target atom
+ *
+ * Returning FALSE will prevent the item from being stored.
+ */
+/obj/item/proc/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user)
+ return TRUE
+
+/**
+ * Called before an item is put into this atom's storage datum via the item clicking on this atom
+ *
+ * This can be used to add item-atom interactions that you want handled before inserting something into storage
+ * (But it's also fairly snowflakey)
+ *
+ * Returning FALSE will block that item from being put into our storage.
+ */
+/atom/proc/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user)
+ return TRUE
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index d8ae957994794..8135a3af59346 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -595,7 +595,7 @@
stop_pulling()
else if(pulling.anchored || pulling.move_resist > move_force)
stop_pulling()
- if(!only_pulling && pulledby && moving_diagonally != FIRST_DIAG_STEP && (get_dist(src, pulledby) > 1 || z != pulledby.z)) //separated from our puller and not in the middle of a diagonal move.
+ if(!only_pulling && pulledby && moving_diagonally != FIRST_DIAG_STEP && (get_dist(src, pulledby) > 1 || (z != pulledby.z && !z_allowed))) //separated from our puller and not in the middle of a diagonal move.
pulledby.stop_pulling()
/atom/movable/proc/set_glide_size(target = 8)
@@ -792,7 +792,14 @@
if(target_turf != current_turf || (moving_diagonally != SECOND_DIAG_STEP && ISDIAGONALDIR(pull_dir)) || get_dist(src, pulling) > 1)
pulling.move_from_pull(src, target_turf, glide_size)
- check_pulling()
+ if (pulledby)
+ if (pulledby.currently_z_moving)
+ check_pulling(z_allowed = TRUE)
+ //dont call check_pulling() here at all if there is a pulledby that is not currently z moving
+ //because it breaks stair conga lines, for some fucking reason.
+ //it's fine because the pull will be checked when this whole proc is called by the mob doing the pulling anyways
+ else
+ check_pulling()
//glide_size strangely enough can change mid movement animation and update correctly while the animation is playing
//This means that if you don't override it late like this, it will just be set back by the movement update that's called when you move turfs.
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 4b513a2203665..a8ae65ef24cd4 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -1014,8 +1014,8 @@
if(!istype(secondary_part, required_type))
continue
// If it's a corrupt or rigged cell, attempting to send it through Bluespace could have unforeseen consequences.
- if(istype(secondary_part, /obj/item/stock_parts/cell) && replacer_tool.works_from_distance)
- var/obj/item/stock_parts/cell/checked_cell = secondary_part
+ if(istype(secondary_part, /obj/item/stock_parts/power_store/cell) && replacer_tool.works_from_distance)
+ var/obj/item/stock_parts/power_store/cell/checked_cell = secondary_part
// If it's rigged or corrupted, max the charge. Then explode it.
if(checked_cell.rigged || checked_cell.corrupted)
checked_cell.charge = checked_cell.maxcharge
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 6ed033886e60a..d1025b52b321f 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -29,8 +29,11 @@
var/datum/component/material_container/materials
///direction we output onto (if 0, on top of us)
var/drop_direction = 0
+ //looping sound for printing items
+ var/datum/looping_sound/lathe_print/print_sound
/obj/machinery/autolathe/Initialize(mapload)
+ print_sound = new(src, FALSE)
materials = AddComponent( \
/datum/component/material_container, \
SSmaterials.materials_by_category[MAT_CATEGORY_ITEM_MATERIAL], \
@@ -48,6 +51,7 @@
register_context()
/obj/machinery/autolathe/Destroy()
+ QDEL_NULL(print_sound)
materials = null
QDEL_NULL(wires)
return ..()
@@ -125,7 +129,6 @@
ui = new(user, src, "Autolathe")
ui.open()
-
/**
* Converts all the designs supported by this autolathe into UI data
* Arguments
@@ -187,7 +190,6 @@
return data
-
/obj/machinery/autolathe/ui_assets(mob/user)
return list(
get_asset_datum(/datum/asset/spritesheet/sheetmaterials),
@@ -292,6 +294,8 @@
busy = TRUE
icon_state = "autolathe_n"
SStgui.update_uis(src)
+ // play this after all checks passed individually for each item.
+ print_sound.start()
var/turf/target_location
if(drop_direction)
target_location = get_step(src, drop_direction)
@@ -355,8 +359,9 @@
var/number_to_make = (initial(stack_item.amount) * items_remaining)
while(number_to_make > max_stack_amount)
created = new stack_item(null, max_stack_amount) //it's imporant to spawn things in nullspace, since obj's like stacks qdel when they enter a tile/merge with other stacks of the same type, resulting in runtimes.
- created.pixel_x = created.base_pixel_x + rand(-6, 6)
- created.pixel_y = created.base_pixel_y + rand(-6, 6)
+ if(isitem(created))
+ created.pixel_x = created.base_pixel_x + rand(-6, 6)
+ created.pixel_y = created.base_pixel_y + rand(-6, 6)
created.forceMove(target)
number_to_make -= max_stack_amount
@@ -366,8 +371,9 @@
created = new design.build_path(null)
split_materials_uniformly(materials_needed, material_cost_coefficient, created)
- created.pixel_x = created.base_pixel_x + rand(-6, 6)
- created.pixel_y = created.base_pixel_y + rand(-6, 6)
+ if(isitem(created))
+ created.pixel_x = created.base_pixel_x + rand(-6, 6)
+ created.pixel_y = created.base_pixel_y + rand(-6, 6)
SSblackbox.record_feedback("nested tally", "lathe_printed_items", 1, list("[type]", "[created.type]"))
created.forceMove(target)
@@ -387,7 +393,7 @@
*/
/obj/machinery/autolathe/proc/finalize_build()
PROTECTED_PROC(TRUE)
-
+ print_sound.stop()
icon_state = initial(icon_state)
busy = FALSE
SStgui.update_uis(src)
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index 27812f53dbaaa..83075d693262d 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -6,7 +6,7 @@
power_channel = AREA_USAGE_EQUIP
circuit = /obj/item/circuitboard/machine/cell_charger
pass_flags = PASSTABLE
- var/obj/item/stock_parts/cell/charging = null
+ var/obj/item/stock_parts/power_store/cell/charging = null
var/charge_rate = 0.25 * STANDARD_CELL_RATE
/obj/machinery/cell_charger/update_overlays()
@@ -42,7 +42,7 @@
return ITEM_INTERACT_SUCCESS
/obj/machinery/cell_charger/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/stock_parts/cell) && !panel_open)
+ if(istype(W, /obj/item/stock_parts/power_store/cell) && !panel_open)
if(machine_stat & BROKEN)
to_chat(user, span_warning("[src] is broken!"))
return
diff --git a/code/game/machinery/civilian_bounties.dm b/code/game/machinery/civilian_bounties.dm
index e5cd81cc965a1..fa0d28c999c88 100644
--- a/code/game/machinery/civilian_bounties.dm
+++ b/code/game/machinery/civilian_bounties.dm
@@ -168,7 +168,7 @@
return
inserted_scan_id.registered_account.civilian_bounty = inserted_scan_id.registered_account.bounties[choice]
inserted_scan_id.registered_account.bounties = null
- SSblackbox.record_feedback("tally", "bounties_assigned", 1, choice.type)
+ SSblackbox.record_feedback("tally", "bounties_assigned", 1, inserted_scan_id.registered_account.civilian_bounty.type)
return inserted_scan_id.registered_account.civilian_bounty
/obj/machinery/computer/piratepad_control/civilian/click_alt(mob/user)
diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm
index f0d7b2e30eb52..9028d6d367d91 100644
--- a/code/game/machinery/computer/dna_console.dm
+++ b/code/game/machinery/computer/dna_console.dm
@@ -1,5 +1,20 @@
-/// Base timeout for creating mutation activators and other injectors
-#define INJECTOR_TIMEOUT 100
+/// Base timeout for creating mutation activators
+#define MIN_ACTIVATOR_TIMEOUT 5 SECONDS
+/// Base cooldown multiplier for activator upgrades
+#define ACTIVATOR_COOLDOWN_MULTIPLIER 0.25
+/// Base timeout for creating mutation injectors
+#define MIN_INJECTOR_TIMEOUT 10 SECONDS
+/// Base cooldown multiplier for injecotr upgrades
+#define INJECTOR_COOLDOWN_MULTIPLIER 0.15
+
+/// Base timeout for creating advanced injectors
+#define MIN_ADVANCED_TIMEOUT 15 SECONDS
+/// Base cooldown multiplier for advanced injector upgrades
+#define ADVANCED_COOLDOWN_MULTIPLIER 0.1
+
+/// Used for other things like UI/UE/Initial CD
+#define MISC_INJECTOR_TIMEOUT 60 SECONDS
+
/// Maximum number of genetic makeup storage slots in DNA Console
#define NUMBER_OF_BUFFERS 3
/// Timeout for DNA Scramble in DNA Consoles
@@ -221,7 +236,7 @@
connect_to_scanner()
// Set appropriate ready timers and limits for machines functions
- injector_ready = world.time + INJECTOR_TIMEOUT
+ injector_ready = world.time + MISC_INJECTOR_TIMEOUT
scramble_ready = world.time + SCRAMBLE_TIMEOUT
joker_ready = world.time + JOKER_TIMEOUT
COOLDOWN_START(src, enzyme_copy_timer, ENZYME_COPY_BASE_COOLDOWN)
@@ -816,21 +831,33 @@
I.research = TRUE
// If there's an operational connected scanner, we can use its upgrades
// to improve our injector's genetic damage generation
+ var/cd_reduction_mult = 1 + ACTIVATOR_COOLDOWN_MULTIPLIER
+ var/base_cd_time = max(MIN_ACTIVATOR_TIMEOUT, abs(HM.instability) SECONDS)
+
if(scanner_operational())
I.damage_coeff = connected_scanner.damage_coeff*4
- injector_ready = world.time + INJECTOR_TIMEOUT * (1 - 0.1 * connected_scanner.precision_coeff)
- else
- injector_ready = world.time + INJECTOR_TIMEOUT
+ // T1: 1.25 - 0.25: 1: 100%
+ // T4: 1.25 - 1: 0.25 = 25%
+ // 25% reduction per tier
+ cd_reduction_mult -= ACTIVATOR_COOLDOWN_MULTIPLIER * (connected_scanner.precision_coeff)
+
+ injector_ready = world.time + (base_cd_time * cd_reduction_mult)
else
I.name = "[HM.name] mutator"
- I.doitanyway = TRUE
+ I.force_mutate = TRUE
// If there's an operational connected scanner, we can use its upgrades
// to improve our injector's genetic damage generation
+ var/cd_reduction_mult = 1 + INJECTOR_COOLDOWN_MULTIPLIER
+ var/base_cd_time = max(MIN_INJECTOR_TIMEOUT, abs(HM.instability) * 1 SECONDS)
+
if(scanner_operational())
- I.damage_coeff = connected_scanner.damage_coeff
- injector_ready = world.time + INJECTOR_TIMEOUT * 5 * (1 - 0.1 * connected_scanner.precision_coeff)
- else
- injector_ready = world.time + INJECTOR_TIMEOUT * 5
+ I.damage_coeff = connected_scanner.damage_coeff*4
+ // T1: 1.15 - 0.15: 1: 100%
+ // T4: 1.15 - 0.60: 0.55: 55%
+ // 15% reduction per tier
+ cd_reduction_mult -= (INJECTOR_COOLDOWN_MULTIPLIER * connected_scanner.precision_coeff)
+
+ injector_ready = world.time + (base_cd_time * cd_reduction_mult)
if(connected_scanner)
connected_scanner.use_energy(connected_scanner.active_power_usage)
else
@@ -1349,7 +1376,7 @@
// If we successfully created an injector, don't forget to set the new
// ready timer.
if(I)
- injector_ready = world.time + INJECTOR_TIMEOUT
+ injector_ready = world.time + MISC_INJECTOR_TIMEOUT
if(connected_scanner)
connected_scanner.use_energy(connected_scanner.active_power_usage)
else
@@ -1538,22 +1565,29 @@
// Run through each mutation in our Advanced Injector and add them to a
// new injector
+ var/total_stability
for(var/A in injector)
var/datum/mutation/human/HM = A
I.add_mutations += new HM.type(copymut=HM)
+ total_stability += HM.instability
// Force apply any mutations, this is functionality similar to mutators
- I.doitanyway = TRUE
+ I.force_mutate = TRUE
I.name = "Advanced [inj_name] injector"
// If there's an operational connected scanner, we can use its upgrades
// to improve our injector's genetic damage generation
+ var/cd_reduction_mult = 1 + ADVANCED_COOLDOWN_MULTIPLIER
+ var/base_cd_time = max(MIN_ADVANCED_TIMEOUT, abs(total_stability) SECONDS)
+
if(scanner_operational())
- I.damage_coeff = connected_scanner.damage_coeff
- injector_ready = world.time + INJECTOR_TIMEOUT * 8 * (1 - 0.1 * connected_scanner.precision_coeff)
- else
- injector_ready = world.time + INJECTOR_TIMEOUT * 8
+ I.damage_coeff = connected_scanner.damage_coeff*4
+ // T1: 1.1 - 0.1: 1: 100%
+ // T4: 1.1 - 0.4: 0.7 = 70%
+ // 10% reduction per tier
+ cd_reduction_mult -= ADVANCED_COOLDOWN_MULTIPLIER * (connected_scanner.precision_coeff)
+ injector_ready = world.time + (base_cd_time * cd_reduction_mult)
return
// Adds a mutation to an advanced injector
@@ -2299,11 +2333,20 @@
SIGNAL_HANDLER
set_connected_scanner(null)
+#undef MIN_ACTIVATOR_TIMEOUT
+#undef ACTIVATOR_COOLDOWN_MULTIPLIER
+#undef MIN_INJECTOR_TIMEOUT
+#undef INJECTOR_COOLDOWN_MULTIPLIER
+
+#undef MIN_ADVANCED_TIMEOUT
+#undef ADVANCED_COOLDOWN_MULTIPLIER
+
+#undef MISC_INJECTOR_TIMEOUT
+
#undef GENETIC_DAMAGE_PULSE_UNIQUE_IDENTITY
#undef GENETIC_DAMAGE_PULSE_UNIQUE_FEATURES
#undef ENZYME_COPY_BASE_COOLDOWN
-#undef INJECTOR_TIMEOUT
#undef NUMBER_OF_BUFFERS
#undef SCRAMBLE_TIMEOUT
#undef JOKER_TIMEOUT
diff --git a/code/game/machinery/computer/orders/order_items/mining/order_consumables.dm b/code/game/machinery/computer/orders/order_items/mining/order_consumables.dm
index de2f3d82275b2..c8cfa12f9abfe 100644
--- a/code/game/machinery/computer/orders/order_items/mining/order_consumables.dm
+++ b/code/game/machinery/computer/orders/order_items/mining/order_consumables.dm
@@ -31,11 +31,11 @@
cost_per_order = 100
/datum/orderable_item/consumables/havana_cigars
- item_path = /obj/item/clothing/mask/cigarette/cigar/havana
+ item_path = /obj/item/cigarette/cigar/havana
cost_per_order = 150
/datum/orderable_item/consumables/havana_cigars
- item_path = /obj/item/clothing/mask/cigarette/cigar/havana
+ item_path = /obj/item/cigarette/cigar/havana
cost_per_order = 150
/datum/orderable_item/consumables/tracking_implants
diff --git a/code/game/machinery/computer/records/security.dm b/code/game/machinery/computer/records/security.dm
index c41779e7384ec..dac62612a4c74 100644
--- a/code/game/machinery/computer/records/security.dm
+++ b/code/game/machinery/computer/records/security.dm
@@ -176,7 +176,7 @@
return TRUE
if("set_note")
- var/note = trim(params["note"], MAX_MESSAGE_LEN)
+ var/note = strip_html_full(params["note"], MAX_MESSAGE_LEN)
investigate_log("[user] has changed the security note of record: \"[target]\" from \"[target.security_note]\" to \"[note]\".")
target.security_note = note
return TRUE
@@ -199,7 +199,7 @@
/// Handles adding a crime to a particular record.
/obj/machinery/computer/records/security/proc/add_crime(mob/user, datum/record/crew/target, list/params)
- var/input_name = trim(params["name"], MAX_CRIME_NAME_LEN)
+ var/input_name = strip_html_full(params["name"], MAX_CRIME_NAME_LEN)
if(!input_name)
to_chat(usr, span_warning("You must enter a name for the crime."))
playsound(src, 'sound/machines/terminal_error.ogg', 75, TRUE)
@@ -213,7 +213,7 @@
var/input_details
if(params["details"])
- input_details = trim(params["details"], MAX_MESSAGE_LEN)
+ input_details = strip_html_full(params["details"], MAX_MESSAGE_LEN)
if(params["fine"] == 0)
var/datum/crime/new_crime = new(name = input_name, details = input_details, author = usr)
@@ -245,13 +245,13 @@
return FALSE
if(params["name"] && length(params["name"]) > 2 && params["name"] != editing_crime.name)
- var/new_name = trim(params["name"], MAX_CRIME_NAME_LEN)
+ var/new_name = strip_html_full(params["name"], MAX_CRIME_NAME_LEN)
investigate_log("[user] edited crime: \"[editing_crime.name]\" for target: \"[target.name]\", changing the name to: \"[new_name]\".", INVESTIGATE_RECORDS)
editing_crime.name = new_name
return TRUE
if(params["details"] && length(params["description"]) > 2 && params["name"] != editing_crime.name)
- var/new_details = trim(params["details"], MAX_MESSAGE_LEN)
+ var/new_details = strip_html_full(params["details"], MAX_MESSAGE_LEN)
investigate_log("[user] edited crime \"[editing_crime.name]\" for target: \"[target.name]\", changing the details to: \"[new_details]\" from: \"[editing_crime.details]\".", INVESTIGATE_RECORDS)
editing_crime.details = new_details
return TRUE
@@ -327,9 +327,9 @@
playsound(src, 'sound/machines/printer.ogg', 100, TRUE)
var/obj/item/printable
- var/input_alias = trim(params["alias"], MAX_NAME_LEN) || target.name
- var/input_description = trim(params["desc"], MAX_BROADCAST_LEN) || "No further details."
- var/input_header = trim(params["head"], 8) || capitalize(params["type"])
+ var/input_alias = strip_html_full(params["alias"], MAX_NAME_LEN) || target.name
+ var/input_description = strip_html_full(params["desc"], MAX_BROADCAST_LEN) || "No further details."
+ var/input_header = strip_html_full(params["head"], 8) || capitalize(params["type"])
switch(params["type"])
if("missing")
diff --git a/code/game/machinery/computer/telescreen.dm b/code/game/machinery/computer/telescreen.dm
index 2c17e1e088a6b..c421ca0c90308 100644
--- a/code/game/machinery/computer/telescreen.dm
+++ b/code/game/machinery/computer/telescreen.dm
@@ -148,6 +148,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
)
frame_type = /obj/item/wallframe/telescreen/rd
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/rd, 32)
+
/obj/item/wallframe/telescreen/rd
name = "\improper Research Director's telescreen frame"
result_path = /obj/machinery/computer/security/telescreen/rd
@@ -162,6 +164,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
name = "research telescreen frame"
result_path = /obj/machinery/computer/security/telescreen/research
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/research, 32)
+
/obj/machinery/computer/security/telescreen/ce
name = "\improper Chief Engineer's telescreen"
desc = "Used for watching the engine, telecommunications and the minisat."
@@ -172,6 +176,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
name = "\improper Chief Engineer's telescreen frame"
result_path = /obj/machinery/computer/security/telescreen/ce
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/ce, 32)
+
/obj/machinery/computer/security/telescreen/cmo
name = "\improper Chief Medical Officer's telescreen"
desc = "A telescreen with access to the medbay's camera network."
@@ -182,6 +188,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
name = "\improper Chief Engineer'stelescreen frame"
result_path = /obj/machinery/computer/security/telescreen/cmo
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/cmo, 32)
+
/obj/machinery/computer/security/telescreen/vault
name = "vault monitor"
desc = "A telescreen that connects to the vault's camera network."
@@ -192,6 +200,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
name = "vault telescreen frame"
result_path = /obj/machinery/computer/security/telescreen/vault
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/vault, 32)
+
/obj/machinery/computer/security/telescreen/ordnance
name = "bomb test site monitor"
desc = "A telescreen that connects to the bomb test site's camera."
@@ -202,6 +212,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
name = "bomb test site telescreen frame"
result_path = /obj/machinery/computer/security/telescreen/ordnance
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/ordnance, 32)
+
/obj/machinery/computer/security/telescreen/engine
name = "engine monitor"
desc = "A telescreen that connects to the engine's camera network."
@@ -212,6 +224,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
name = "engine telescreen frame"
result_path = /obj/machinery/computer/security/telescreen/engine
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/engine, 32)
+
/obj/machinery/computer/security/telescreen/turbine
name = "turbine monitor"
desc = "A telescreen that connects to the turbine's camera."
@@ -222,6 +236,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
name = "turbine telescreen frame"
result_path = /obj/machinery/computer/security/telescreen/turbine
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/turbine, 32)
+
/obj/machinery/computer/security/telescreen/interrogation
name = "interrogation room monitor"
desc = "A telescreen that connects to the interrogation room's camera."
@@ -232,6 +248,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
name = "interrogation telescreen frame"
result_path = /obj/machinery/computer/security/telescreen/interrogation
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/interrogation, 32)
+
/obj/machinery/computer/security/telescreen/prison
name = "prison monitor"
desc = "A telescreen that connects to the permabrig's camera network."
@@ -242,6 +260,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
name = "prison telescreen frame"
result_path = /obj/machinery/computer/security/telescreen/prison
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/prison, 32)
+
/obj/machinery/computer/security/telescreen/auxbase
name = "auxiliary base monitor"
desc = "A telescreen that connects to the auxiliary base's camera."
@@ -252,6 +272,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
name = "auxiliary base telescreen frame"
result_path = /obj/machinery/computer/security/telescreen/auxbase
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/auxbase, 32)
+
/obj/machinery/computer/security/telescreen/minisat
name = "minisat monitor"
desc = "A telescreen that connects to the minisat's camera network."
@@ -262,6 +284,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
name = "minisat telescreen frame"
result_path = /obj/machinery/computer/security/telescreen/minisat
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/minisat, 32)
+
/obj/machinery/computer/security/telescreen/aiupload
name = "\improper AI upload monitor"
desc = "A telescreen that connects to the AI upload's camera network."
@@ -272,6 +296,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
name = "\improper AI upload telescreen frame"
result_path = /obj/machinery/computer/security/telescreen/aiupload
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/aiupload, 32)
+
/obj/machinery/computer/security/telescreen/bar
name = "bar monitor"
desc = "A telescreen that connects to the bar's camera network. Perfect for checking on customers."
@@ -282,6 +308,129 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
name = "bar telescreen frame"
result_path = /obj/machinery/computer/security/telescreen/bar
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/bar, 32)
+
+/obj/machinery/computer/security/telescreen/isolation
+ name = "isolation cell monitor"
+ desc = "A telescreen that connects to the isolation cells camera network."
+ network = list(CAMERANET_NETWORK_ISOLATION)
+ frame_type = /obj/item/wallframe/telescreen/bar
+
+/obj/item/wallframe/telescreen/isolation
+ name = "isolation telescreen frame"
+ result_path = /obj/machinery/computer/security/telescreen/isolation
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/isolation, 32)
+
+/obj/machinery/computer/security/telescreen/normal
+ name = "security camera monitor"
+ desc = "A telescreen that connects to the stations camera network."
+ network = list(CAMERANET_NETWORK_SS13)
+ frame_type = /obj/item/wallframe/telescreen/normal
+
+/obj/item/wallframe/telescreen/normal
+ name = "security camera telescreen frame"
+ result_path = /obj/machinery/computer/security/telescreen/normal
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/normal, 32)
+
+/obj/machinery/computer/security/telescreen/tcomms
+ name = "tcomms camera monitor"
+ desc = "A telescreen that connects to the tcomms camera network."
+ network = list(CAMERANET_NETWORK_TELECOMMS)
+ frame_type = /obj/item/wallframe/telescreen/tcomms
+
+/obj/item/wallframe/telescreen/tcomms
+ name = "tcomms camera telescreen frame"
+ result_path = /obj/machinery/computer/security/telescreen/tcomms
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/tcomms, 32)
+
+/obj/machinery/computer/security/telescreen/test_chamber
+ name = "xenobiology test chamber camera monitor"
+ desc = "A telescreen that connects to the xenobiology test chamber camera network."
+ network = list(CAMERANET_NETWORK_XENOBIOLOGY)
+ frame_type = /obj/item/wallframe/telescreen/test_chamber
+
+/obj/item/wallframe/telescreen/test_chamber
+ name = "xenobiology test chamber camera telescreen frame"
+ result_path = /obj/machinery/computer/security/telescreen/test_chamber
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/test_chamber, 32)
+
+/obj/machinery/computer/security/telescreen/engine_waste
+ name = "\improper Engine Waste Monitor"
+ desc = "A telescreen that connects to the engine waste camera network."
+ network = list(CAMERANET_NETWORK_WASTE)
+ frame_type = /obj/item/wallframe/telescreen/engine_waste
+
+/obj/item/wallframe/telescreen/engine_waste
+ name = "\improper Engine Waste telescreen frame"
+ result_path = /obj/machinery/computer/security/telescreen/engine_waste
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/engine_waste, 32)
+
+/obj/machinery/computer/security/telescreen/cargo_sec
+ name = "cargo camera monitor"
+ desc = "A telescreen that connects to the cargo and main station camera network."
+ network = list(CAMERANET_NETWORK_SS13,
+ CAMERA_NETWORK_CARGO,
+ )
+ frame_type = /obj/item/wallframe/telescreen/cargo_sec
+
+/obj/item/wallframe/telescreen/cargo_sec
+ name = "cargo telescreen frame"
+ result_path = /obj/machinery/computer/security/telescreen/cargo_sec
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/cargo_sec, 32)
+
+// This is used in moonoutpost19.dmm
+/obj/machinery/computer/security/telescreen/moon_outpost
+
+/obj/machinery/computer/security/telescreen/moon_outpost/research
+ name = "research monitor"
+ desc = "Used for monitoring the research division and the labs within."
+ network = list(CAMERANET_NETWORK_MOON19_RESEARCH,
+ CAMERANET_NETWORK_MOON19_XENO,
+ )
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/moon_outpost/research, 32)
+
+/obj/machinery/computer/security/telescreen/moon_outpost/xenobio
+ name = "xenobiology monitor"
+ desc = "Used for watching the contents of the xenobiology containment pen."
+ network = list(CAMERANET_NETWORK_MOON19_XENO)
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/moon_outpost/xenobio, 32)
+
+// This is used in undergroundoutpost45.dmm
+/obj/machinery/computer/security/telescreen/underground_outpost
+
+/obj/machinery/computer/security/telescreen/underground_outpost/research
+ name = "research monitor"
+ desc = "Used for monitoring the research division and the labs within."
+ network = list(CAMERANET_NETWORK_UGO45_RESEARCH)
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/underground_outpost/research, 32)
+
+// This is used in forgottenship.dmm
+/obj/machinery/computer/security/telescreen/forgotten_ship
+
+/obj/machinery/computer/security/telescreen/forgotten_ship/sci
+ name = "Cameras monitor"
+ network = list(CAMERANET_NETWORK_FSCI)
+ req_access = list("syndicate")
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/forgotten_ship/sci, 32)
+
+// This is used in deepstorage.dmm
+/obj/machinery/computer/security/telescreen/deep_storage
+
+/obj/machinery/computer/security/telescreen/deep_storage/bunker
+ name = "Bunker Entrance monitor"
+ network = list(CAMERA_NETWORK_BUNKER)
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/deep_storage/bunker, 32)
/// A button that adds a camera network to the entertainment monitors
/obj/machinery/button/showtime
diff --git a/code/game/machinery/defibrillator_mount.dm b/code/game/machinery/defibrillator_mount.dm
index 785357e3b5be9..47729c5c0cbac 100644
--- a/code/game/machinery/defibrillator_mount.dm
+++ b/code/game/machinery/defibrillator_mount.dm
@@ -57,7 +57,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28)
var/mutable_appearance/defib_overlay = mutable_appearance(icon, "defib", layer = layer+0.01, offset_spokesman = src)
if(defib.powered)
- var/obj/item/stock_parts/cell/cell = defib.cell
+ var/obj/item/stock_parts/power_store/cell = defib.cell
var/mutable_appearance/safety = mutable_appearance(icon, defib.safety ? "online" : "emagged", offset_spokesman = src)
var/mutable_appearance/charge_overlay = mutable_appearance(icon, "charge[CEILING((cell.charge / cell.maxcharge) * 4, 1) * 25]", offset_spokesman = src)
@@ -194,7 +194,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/defibrillator_mount, 28)
/obj/machinery/defibrillator_mount/charging/process(seconds_per_tick)
- var/obj/item/stock_parts/cell/cell = get_cell()
+ var/obj/item/stock_parts/power_store/cell = get_cell()
if(!cell || !is_operational)
return PROCESS_KILL
if(cell.charge < cell.maxcharge)
diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm
index 4775642881fcc..cb0ab9900d5cc 100644
--- a/code/game/machinery/dna_scanner.dm
+++ b/code/game/machinery/dna_scanner.dm
@@ -11,9 +11,9 @@
circuit = /obj/item/circuitboard/machine/dnascanner
var/locked = FALSE
- var/damage_coeff
+ var/damage_coeff = 1
var/scan_level
- var/precision_coeff
+ var/precision_coeff = 1
var/message_cooldown
var/breakout_time = 1200
var/obj/machinery/computer/scan_consolenew/linked_console = null
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index ae37691f1c1a1..67f069c062c4c 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -601,13 +601,19 @@
if(!machine_stat)
update_icon(ALL, AIRLOCK_DENY)
playsound(src,doorDeni,50,FALSE,3)
- addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon), ALL, AIRLOCK_CLOSED), AIRLOCK_DENY_ANIMATION_TIME)
+ addtimer(CALLBACK(src, PROC_REF(handle_deny_end)), AIRLOCK_DENY_ANIMATION_TIME)
+
+/obj/machinery/door/airlock/proc/handle_deny_end()
+ if(airlock_state == AIRLOCK_DENY)
+ update_icon(ALL, AIRLOCK_CLOSED)
/obj/machinery/door/airlock/examine(mob/user)
. = ..()
if(closeOtherId)
. += span_warning("This airlock cycles on ID: [sanitize(closeOtherId)].")
- else if(!closeOtherId)
+ else if(cyclelinkedairlock)
+ . += span_warning("This airlock cycles with: [cyclelinkedairlock.name].")
+ else
. += span_warning("This airlock does not cycle.")
if(obj_flags & EMAGGED)
. += span_warning("Its access panel is smoking slightly.")
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index c69c865f6d122..4c1d4ad2d5154 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -317,6 +317,13 @@
/obj/machinery/door/window/narsie_act()
add_atom_colour(NARSIE_WINDOW_COLOUR, FIXED_COLOUR_PRIORITY)
+/obj/machinery/door/window/rust_heretic_act()
+ add_atom_colour(COLOR_RUSTED_GLASS, FIXED_COLOUR_PRIORITY)
+ AddElement(/datum/element/rust)
+ set_armor(/datum/armor/none)
+ take_damage(get_integrity() * 0.5)
+ modify_max_integrity(max_integrity * 0.5)
+
/obj/machinery/door/window/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
return (exposed_temperature > T0C + (reinf ? 1600 : 800))
diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm
index 5495033651a89..af39257973cce 100644
--- a/code/game/machinery/droneDispenser.dm
+++ b/code/game/machinery/droneDispenser.dm
@@ -27,7 +27,7 @@
var/mode = DRONE_READY
var/timer
- var/cooldownTime = 1800 //3 minutes
+ var/cooldownTime = 3 MINUTES
var/production_time = 30
//The item the dispenser will create
var/dispense_type = /obj/effect/mob_spawn/ghost_role/drone
@@ -59,7 +59,8 @@
MATCONTAINER_EXAMINE, \
allowed_items = /obj/item/stack \
)
- materials.insert_amount_mat(starting_amount)
+ materials.insert_amount_mat(starting_amount, /datum/material/iron)
+ materials.insert_amount_mat(starting_amount, /datum/material/glass)
materials.precise_insertion = TRUE
using_materials = list(/datum/material/iron = iron_cost, /datum/material/glass = glass_cost)
REGISTER_REQUIRED_MAP_ITEM(1, 1)
@@ -136,6 +137,19 @@
recharge_sound = null
recharge_message = null
+// A dispenser that produces binoculars, for the MediSim shuttle.
+/obj/machinery/drone_dispenser/binoculars
+ name = "binoculars fabricator"
+ desc = "A hefty machine that periodically creates a pair of binoculars. Really, Nanotrasen? We're getting this lazy?"
+ dispense_type = /obj/item/binoculars
+ starting_amount = SHEET_MATERIAL_AMOUNT * 2.5 //Redudant
+ maximum_idle = 1
+ cooldownTime = 5 SECONDS
+ iron_cost = 0
+ glass_cost = 0
+ energy_used = 0
+ end_create_message = "dispenses a pair of binoculars."
+
/obj/machinery/drone_dispenser/examine(mob/user)
. = ..()
var/material_requirement_string = "It needs "
@@ -155,7 +169,7 @@
if((machine_stat & (NOPOWER|BROKEN)) || !anchored)
return
- if(!materials.has_materials(using_materials))
+ if((glass_cost != 0 || iron_cost != 0) && !materials.has_materials(using_materials))
return // We require more minerals
// We are currently in the middle of something
diff --git a/code/game/machinery/flatpacker.dm b/code/game/machinery/flatpacker.dm
index 1eb8f6e2cc5cb..182db1edc08d9 100644
--- a/code/game/machinery/flatpacker.dm
+++ b/code/game/machinery/flatpacker.dm
@@ -1,4 +1,6 @@
+///Incremets an an value assosiated by an key in the list creating that value if nessassary
#define CREATE_AND_INCREMENT(L, I, increment) if(!(I in L)) { L[I] = 0; } L[I] += increment;
+
/obj/machinery/flatpacker
name = "flatpacker"
desc = "It produces items using iron, glass, plastic and maybe some more."
@@ -27,6 +29,8 @@
var/flatpack_time = 4.5 SECONDS
/obj/machinery/flatpacker/Initialize(mapload)
+ register_context()
+
materials = AddComponent( \
/datum/component/material_container, \
SSmaterials.materials_by_category[MAT_CATEGORY_SILO], \
@@ -34,10 +38,64 @@
MATCONTAINER_EXAMINE, \
container_signals = list(COMSIG_MATCONTAINER_ITEM_CONSUMED = TYPE_PROC_REF(/obj/machinery/flatpacker, AfterMaterialInsert)) \
)
+
return ..()
+/obj/machinery/flatpacker/Destroy()
+ materials = null
+ QDEL_NULL(inserted_board)
+ . = ..()
+
+/obj/machinery/flatpacker/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ . = NONE
+ if(!QDELETED(inserted_board))
+ context[SCREENTIP_CONTEXT_CTRL_LMB] = "Eject board"
+ . = CONTEXTUAL_SCREENTIP_SET
+
+ if(!isnull(held_item))
+ if(istype(held_item, /obj/item/circuitboard/machine))
+ context[SCREENTIP_CONTEXT_LMB] = "Insert board"
+ return CONTEXTUAL_SCREENTIP_SET
+ else if(held_item.tool_behaviour == TOOL_SCREWDRIVER)
+ context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel"
+ return CONTEXTUAL_SCREENTIP_SET
+ else if(held_item.tool_behaviour == TOOL_CROWBAR && panel_open)
+ context[SCREENTIP_CONTEXT_LMB] = "Deconstruct"
+ return CONTEXTUAL_SCREENTIP_SET
+
+/obj/machinery/flatpacker/examine(mob/user)
+ . += ..()
+ if(!in_range(user, src) && !isobserver(user))
+ return
+
+ . += span_notice("The status display reads:")
+ . += span_notice("Capable of packing up to Tier [max_part_tier].")
+ . += span_notice("Storing up to [materials.max_amount] material units.")
+ . += span_notice("Material consumption at [creation_efficiency * 100]%")
+
+ . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "close" : "open"]")
+ if(panel_open)
+ . += span_notice("It can be [EXAMINE_HINT("pried")] apart")
+ if(!QDELETED(inserted_board))
+ . += span_notice("The board can be ejected via [EXAMINE_HINT("Ctrl Click")]")
+
+/obj/machinery/flatpacker/update_overlays()
+ . = ..()
+
+ if(!QDELETED(inserted_board))
+ . += mutable_appearance(icon, "[base_icon_state]_c")
+
+/obj/machinery/flatpacker/Exited(atom/movable/gone, direction)
+ . = ..()
+ if(gone == inserted_board)
+ inserted_board = null
+ needed_mats.Cut()
+ print_tier = 1
+ update_appearance(UPDATE_OVERLAYS)
+
/obj/machinery/flatpacker/RefreshParts()
. = ..()
+
var/mat_capacity = 0
for(var/datum/stock_part/matter_bin/new_matter_bin in component_parts)
mat_capacity += new_matter_bin.tier * 25 * SHEET_MATERIAL_AMOUNT
@@ -51,239 +109,306 @@
efficiency -= laser.tier * 0.2
creation_efficiency = max(1.2, efficiency)
-/obj/machinery/flatpacker/examine(mob/user)
- . += ..()
- if(in_range(user, src) || isobserver(user))
- . += span_notice("The status display reads:")
- . += span_notice("Capable of packing up to Tier [max_part_tier].")
- . += span_notice("Storing up to [materials.max_amount] material units.")
- . += span_notice("Material consumption at [creation_efficiency*100]%")
-
/obj/machinery/flatpacker/proc/AfterMaterialInsert(container, obj/item/item_inserted, last_inserted_id, mats_consumed, amount_inserted, atom/context)
SIGNAL_HANDLER
- flick_overlay_view("[base_icon_state]_[item_inserted.has_material_type(/datum/material/glass) ? "glass" : "metal"]", 1.4 SECONDS)
+ //we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benifit from it
+ if(directly_use_energy(ROUND_UP((amount_inserted / (MAX_STACK_SIZE * SHEET_MATERIAL_AMOUNT)) * 0.4 * initial(active_power_usage))))
+ flick_overlay_view(mutable_appearance('icons/obj/machines/lathes.dmi', "flatpacker_bar"), 1 SECONDS)
- directly_use_energy(min(active_power_usage * 0.25, amount_inserted / 100))
+ var/datum/material/highest_mat_ref
+ var/highest_mat = 0
+ for(var/datum/material/mat as anything in mats_consumed)
+ var/present_mat = mats_consumed[mat]
+ if(present_mat > highest_mat)
+ highest_mat = present_mat
+ highest_mat_ref = mat
-/obj/machinery/flatpacker/update_overlays()
- . = ..()
-
- if(!isnull(inserted_board))
- . += mutable_appearance(icon, "[base_icon_state]_c")
+ flick_overlay_view(material_insertion_animation(highest_mat_ref.greyscale_colors), 1 SECONDS)
-/obj/machinery/flatpacker/ui_interact(mob/user, datum/tgui/ui)
- ui = SStgui.try_update_ui(user, src, ui)
- if(!ui)
- ui = new(user, src, "Flatpacker")
- ui.open()
+/**
+ * Attempts to find the total material cost of a typepath (including our creation efficiency), modifying a list
+ * The list is modified as an assoc list: Material datum typepath = Cost
+ * If the type is found on a techweb, uses material costs from there
+ * Otherwise, the typepath is created in nullspace and fetches materials from the initialized one, then deleted.
+ *
+ * Args:
+ * part_type - Typepath of the item we are trying to find the costs of
+ * costs - Assoc list we modify and return
+ */
+/obj/machinery/flatpacker/proc/analyze_cost(part_type, costs)
+ PRIVATE_PROC(TRUE)
-/obj/machinery/flatpacker/ui_static_data(mob/user)
- return materials.ui_static_data()
+ var/comp_type = part_type
+ if(ispath(part_type, /datum/stock_part))
+ var/datum/stock_part/as_part = part_type
+ comp_type = initial(as_part.physical_object_type)
+ if(as_part.tier > print_tier)
+ print_tier = as_part.tier
-/obj/machinery/flatpacker/ui_data(mob/user)
- var/list/data = list()
-
- var/atom/build = initial(inserted_board.build_path)
- data["materials"] = materials.ui_data()
- data["boardInserted"] = !isnull(inserted_board)
- data["busy"] = busy
- var/list/cost_mats = list()
- for(var/datum/material/mat_type as anything in needed_mats)
- var/list/new_entry = list()
- new_entry["name"] = initial(mat_type.name)
- new_entry["amount"] = needed_mats[mat_type]
- cost_mats += list(new_entry)
+ var/list/mat_list
+ var/obj/item/null_comp
+ if(!isnull(SSresearch.item_to_design[comp_type]))
+ mat_list = SSresearch.item_to_design[comp_type][1].materials
+ else
+ var/datum/stock_part/part = GLOB.stock_part_datums_per_object[comp_type]
+ if(part)
+ mat_list = part.physical_object_reference.custom_materials
+ else
+ null_comp = new comp_type
+ mat_list = null_comp.custom_materials
- var/list/design
- if(data["boardInserted"])
- var/disableReason = ""
- var/has_materials = materials.has_materials(needed_mats, creation_efficiency)
- if(!has_materials)
- disableReason += "Not enough materials. "
- if(print_tier > max_part_tier)
- disableReason += "This design is too advanced for this machine. "
- design = list(
- "name" = initial(build.name),
- "requiredMaterials" = cost_mats,
- "icon" = icon2base64(icon(initial(build.icon), initial(build.icon_state), frame = 1)),
- "canPrint" = has_materials && print_tier <= max_part_tier,
- "disableReason" = disableReason
- )
- data["design"] = design
- return data
+ for(var/atom/mat as anything in mat_list)
+ CREATE_AND_INCREMENT(costs, mat.type, mat_list[mat] * inserted_board.req_components[part_type])
-/obj/machinery/flatpacker/ui_assets(mob/user)
- return list(
- get_asset_datum(/datum/asset/spritesheet/sheetmaterials),
- get_asset_datum(/datum/asset/spritesheet/research_designs),
- )
+ if(null_comp)
+ qdel(null_comp)
+ return costs
/obj/machinery/flatpacker/item_interaction(mob/living/user, obj/item/attacking_item, params)
+ . = NONE
+ if(user.combat_mode || attacking_item.flags_1 & HOLOGRAM_1 || attacking_item.item_flags & ABSTRACT)
+ return ITEM_INTERACT_SKIP_TO_ATTACK
+
if(istype(attacking_item, /obj/item/circuitboard/machine))
if(busy)
balloon_alert(user, "busy!")
return ITEM_INTERACT_BLOCKING
if (!user.transferItemToLoc(attacking_item, src))
return ITEM_INTERACT_BLOCKING
+
// If insertion was successful and there's already a diskette in the console, eject the old one.
if(inserted_board)
inserted_board.forceMove(drop_location())
-
inserted_board = attacking_item
- // 5 sheets of iron and 5 of cable coil
- needed_mats = list()
+
+ //compute the needed mats from its stock parts
for(var/type as anything in inserted_board.req_components)
needed_mats = analyze_cost(type, needed_mats)
+ // 5 sheets of iron and 5 of cable coil
CREATE_AND_INCREMENT(needed_mats, /datum/material/iron, (SHEET_MATERIAL_AMOUNT * 5 + (SHEET_MATERIAL_AMOUNT / 20)))
CREATE_AND_INCREMENT(needed_mats, /datum/material/glass, (SHEET_MATERIAL_AMOUNT / 20))
- update_appearance()
+ update_appearance(UPDATE_OVERLAYS)
return ITEM_INTERACT_SUCCESS
- return NONE
+/obj/machinery/flatpacker/screwdriver_act(mob/living/user, obj/item/tool)
+ . = ITEM_INTERACT_BLOCKING
+ if(default_deconstruction_screwdriver(user, "[base_icon_state]_o", base_icon_state, tool))
+ return ITEM_INTERACT_SUCCESS
-/**
- * Attempts to find the total material cost of a typepath (including our creation efficiency), modifying a list
- * The list is modified as an assoc list: Material datum typepath = Cost
- * If the type is found on a techweb, uses material costs from there
- * Otherwise, the typepath is created in nullspace and fetches materials from the initialized one, then deleted.
- *
- * Args:
- * type - Typepath of the item we are trying to find the costs of
- * costs - Assoc list we modify and return
- */
-/obj/machinery/flatpacker/proc/analyze_cost(type, costs)
- var/comp_type = type
- if(ispath(type, /datum/stock_part))
- var/datum/stock_part/as_part = type
- comp_type = initial(as_part.physical_object_type)
- if(as_part.tier > print_tier)
- print_tier = as_part.tier
+/obj/machinery/flatpacker/crowbar_act(mob/living/user, obj/item/tool)
+ . = ITEM_INTERACT_BLOCKING
+ if(default_deconstruction_crowbar(tool))
+ return ITEM_INTERACT_SUCCESS
- var/by_techweb = !isnull(SSresearch.item_to_design[comp_type])
- var/obj/item/null_comp = by_techweb ? null : new comp_type
- var/list/mat_list = by_techweb ? SSresearch.item_to_design[comp_type][1].materials : null_comp.custom_materials
- for(var/atom/mat as anything in mat_list)
- var/mat_type = mat.type
+/obj/machinery/flatpacker/ui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "Flatpacker")
+ ui.open()
- CREATE_AND_INCREMENT(costs, mat_type, mat_list[mat] * inserted_board.req_components[type])
+/obj/machinery/flatpacker/ui_assets(mob/user)
+ return list(
+ get_asset_datum(/datum/asset/spritesheet/sheetmaterials),
+ get_asset_datum(/datum/asset/spritesheet/research_designs),
+ )
- qdel(null_comp)
- return costs
+/obj/machinery/flatpacker/ui_static_data(mob/user)
+ return materials.ui_static_data()
-/// Start building the currently inserted board, if possible
-/obj/machinery/flatpacker/proc/start_build()
- . = FALSE
- if(!inserted_board)
- return
- if(!materials.has_materials(needed_mats, creation_efficiency))
- say("Not enough materials to begin production.")
- return
- if(print_tier > max_part_tier)
- say("Design too complex.")
- return
- materials.use_materials(needed_mats, creation_efficiency)
- playsound(src, 'sound/items/rped.ogg', 50, TRUE)
- busy = TRUE
+/obj/machinery/flatpacker/ui_data(mob/user)
+ . = list()
- addtimer(CALLBACK(src, PROC_REF(finish_build), inserted_board), flatpack_time)
- return TRUE
+ .["materials"] = materials.ui_data()
+ .["busy"] = busy
-/// turns the supplied board into a flatpack, and sets the machine as not busy
-/obj/machinery/flatpacker/proc/finish_build(board)
- busy = FALSE
- new /obj/item/flatpack(drop_location(), board)
+ var/list/design
+ if(!QDELETED(inserted_board))
+ var/list/cost_mats = list()
+ for(var/datum/material/mat_type as anything in needed_mats)
+ var/list/new_entry = list()
+ new_entry["name"] = initial(mat_type.name)
+ new_entry["amount"] = OPTIMAL_COST(needed_mats[mat_type] * creation_efficiency)
+ cost_mats += list(new_entry)
-/obj/machinery/flatpacker/Exited(atom/movable/gone, direction)
- . = ..()
- if(gone == inserted_board)
- inserted_board = null
- needed_mats = null
- print_tier = 1
- update_appearance()
+ var/atom/build = initial(inserted_board.build_path)
-/obj/machinery/flatpacker/ui_act(action, list/params)
- . = ..()
+ var/disableReason = ""
+ var/has_materials = materials.has_materials(needed_mats, creation_efficiency)
+ if(!has_materials)
+ disableReason += "Not enough materials. "
+ if(print_tier > max_part_tier)
+ disableReason += "This design is too advanced for this machine. "
+ design = list(
+ "name" = initial(build.name),
+ "requiredMaterials" = cost_mats,
+ "icon" = icon2base64(icon(initial(build.icon), initial(build.icon_state), frame = 1)),
+ "canPrint" = has_materials && print_tier <= max_part_tier,
+ "disableReason" = disableReason
+ )
+ .["design"] = design
+/obj/machinery/flatpacker/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
if(.)
return
-
switch(action)
if("build")
if(busy)
- return FALSE
- start_build()
+ return
+
+ if(QDELETED(inserted_board))
+ return
+ if(print_tier > max_part_tier)
+ say("Design too complex.")
+ return
+ if(!materials.has_materials(needed_mats, creation_efficiency))
+ say("Not enough materials to begin production.")
+ return
+ playsound(src, 'sound/items/rped.ogg', 50, TRUE)
+
+ busy = TRUE
+ flick_overlay_view(mutable_appearance('icons/obj/machines/lathes.dmi', "flatpacker_bar"), flatpack_time)
+ addtimer(CALLBACK(src, PROC_REF(finish_build), inserted_board), flatpack_time)
return TRUE
if("ejectBoard")
- inserted_board.forceMove(drop_location())
+ try_put_in_hand(inserted_board, ui.user)
return TRUE
if("eject")
- var/datum/material/ejecting = locate(params["ref"])
- var/amount = text2num(params["amount"])
- if(!isnum(amount) || !istype(ejecting))
- return FALSE
+ var/datum/material/material = locate(params["ref"])
+ if(!istype(material))
+ return
+
+ var/amount = params["amount"]
+ if(isnull(amount))
+ return
- materials.retrieve_sheets(amount, ejecting, drop_location())
+ amount = text2num(amount)
+ if(isnull(amount))
+ return
+
+ //we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benifit from it
+ if(!directly_use_energy(ROUND_UP((amount / MAX_STACK_SIZE) * 0.4 * initial(active_power_usage))))
+ say("No power to dispense sheets")
+ return
+
+ materials.retrieve_sheets(amount, material)
return TRUE
+/**
+ * Turns the supplied board into a flatpack, and sets the machine as not busy
+ * Arguments
+ *
+ * * board - the board to put inside the flatpack
+ */
+/obj/machinery/flatpacker/proc/finish_build(board)
+ PRIVATE_PROC(TRUE)
+
+ busy = FALSE
-/obj/machinery/flatpacker/Destroy()
- QDEL_NULL(inserted_board)
- . = ..()
+ materials.use_materials(needed_mats, creation_efficiency)
+ new /obj/item/flatpack(drop_location(), board)
+
+ SStgui.update_uis(src)
+
+/obj/machinery/flatpacker/click_ctrl(mob/user)
+ if(QDELETED(inserted_board) || busy)
+ return CLICK_ACTION_BLOCKING
+
+ try_put_in_hand(inserted_board, user)
+
+ return CLICK_ACTION_SUCCESS
+
+#undef CREATE_AND_INCREMENT
/obj/item/flatpack
name = "flatpack"
- desc = "A box containing a compacted packed machine. Use multitool to deploy."
+ desc = "A box containing a compactly packed machine. Use multitool to deploy."
icon = 'icons/obj/devices/circuitry_n_data.dmi'
icon_state = "flatpack"
+ density = TRUE
w_class = WEIGHT_CLASS_HUGE //cart time
throw_range = 2
item_flags = SLOWS_WHILE_IN_HAND | IMMUTABLE_SLOW
slowdown = 2.5
drag_slowdown = 3.5 //use the cart stupid
+
/// The board we deploy
var/obj/item/circuitboard/machine/board
-/obj/item/flatpack/Initialize(mapload, obj/item/circuitboard/machine/board)
+/obj/item/flatpack/Initialize(mapload, obj/item/circuitboard/machine/new_board)
+ if(isnull(board) && isnull(new_board))
+ return INITIALIZE_HINT_QDEL //how
+
. = ..()
- if(!isnull(board))
- src.board = board // i got board
+
+ var/static/list/tool_behaviors = list(
+ TOOL_MULTITOOL = list(
+ SCREENTIP_CONTEXT_LMB = "Deploy",
+ ),
+ )
+ AddElement(/datum/element/contextual_screentip_tools, tool_behaviors)
+
+ board = !isnull(new_board) ? new_board : new board(src) // i got board
+ if(board.loc != src)
board.forceMove(src)
- var/obj/machinery/build = initial(board.build_path)
- name += " ([initial(build.name)])"
+ var/obj/machinery/build = initial(board.build_path)
+ name += " ([initial(build.name)])"
/obj/item/flatpack/Destroy()
QDEL_NULL(board)
. = ..()
+/obj/item/flatpack/examine(mob/user)
+ . = ..()
+ if(!in_range(user, src) && !isobserver(user))
+ return
+
+ if(loc == user)
+ . += span_warning("You can't deploy while holding it in your hand.")
+ else if(isturf(loc))
+ var/turf/location = loc
+ if(!isopenturf(location))
+ . += span_warning("Can't deploy in this location")
+ else if(location.is_blocked_turf(source_atom = src))
+ . += span_warning("No space for deployment")
+
/obj/item/flatpack/multitool_act(mob/living/user, obj/item/tool)
. = NONE
+
if(isnull(board))
return ITEM_INTERACT_BLOCKING
- if(!isopenturf(loc))
- user.balloon_alert(user, "cant deploy here!")
+ if(loc == user)
+ balloon_alert(user, "can't deploy in hand")
return ITEM_INTERACT_BLOCKING
+ else if(isturf(loc))
+ var/turf/location = loc
+ if(!isopenturf(location))
+ balloon_alert(user, "can't deploy here")
+ return ITEM_INTERACT_BLOCKING
+ else if(location.is_blocked_turf(source_atom = src))
+ balloon_alert(user, "no space for deployment")
+ return ITEM_INTERACT_BLOCKING
balloon_alert_to_viewers("deploying!")
if(!do_after(user, 1 SECONDS, target = src))
return ITEM_INTERACT_BLOCKING
+
new /obj/effect/temp_visual/mook_dust(loc)
var/obj/machinery/new_machine = new board.build_path(loc)
loc.visible_message(span_warning("[src] deploys!"))
playsound(src, 'sound/machines/terminal_eject.ogg', 70, TRUE)
- new_machine.RefreshParts()
new_machine.on_construction(user)
-
- for(var/mob/living/victim in loc)
- step(victim, pick(GLOB.cardinals))
-
qdel(src)
return ITEM_INTERACT_SUCCESS
+///Maximum number of flatpacks in a cart
+#define MAX_FLAT_PACKS 3
+
/obj/structure/flatpack_cart
name = "flatpack cart"
desc = "A cart specifically made to hold flatpacks from a flatpacker, evenly distributing weight. Convenient!"
@@ -291,20 +416,32 @@
icon_state = "flatcart"
density = TRUE
opacity = FALSE
- /// max flatpacks
- var/max_flatpacks = 3
/obj/structure/flatpack_cart/Initialize(mapload)
. = ..()
+
+ register_context()
+
AddElement(/datum/element/noisy_movement, volume = 45) // i hate noise
-/obj/structure/flatpack_cart/atom_destruction(damage_flag)
+/obj/structure/flatpack_cart/atom_deconstruct(disassembled)
for(var/atom/movable/content as anything in contents)
content.forceMove(drop_location())
- return ..()
+
+/obj/structure/flatpack_cart/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ . = NONE
+ if(isnull(held_item))
+ return
+
+ if(istype(held_item, /obj/item/flatpack))
+ context[SCREENTIP_CONTEXT_LMB] = "Load pack"
+ return CONTEXTUAL_SCREENTIP_SET
/obj/structure/flatpack_cart/examine(mob/user)
. = ..()
+ if(!in_range(user, src) && !isobserver(user))
+ return
+
. += "From bottom to top, this cart contains:"
for(var/obj/item/flatpack as anything in contents)
. += flatpack.name
@@ -327,9 +464,10 @@
update_appearance(UPDATE_OVERLAYS)
/obj/structure/flatpack_cart/item_interaction(mob/living/user, obj/item/attacking_item, params)
- if(!istype(attacking_item, /obj/item/flatpack))
- return NONE
- if (length(contents) >= max_flatpacks)
+ if(!istype(attacking_item, /obj/item/flatpack) || user.combat_mode || attacking_item.flags_1 & HOLOGRAM_1 || attacking_item.item_flags & ABSTRACT)
+ return ITEM_INTERACT_SKIP_TO_ATTACK
+
+ if (length(contents) >= MAX_FLAT_PACKS)
balloon_alert(user, "full!")
return ITEM_INTERACT_BLOCKING
if (!user.transferItemToLoc(attacking_item, src))
@@ -337,4 +475,4 @@
update_appearance(UPDATE_OVERLAYS)
return ITEM_INTERACT_SUCCESS
-#undef CREATE_AND_INCREMENT
+#undef MAX_FLAT_PACKS
diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm
index f8dc9887758d4..444e44125c80a 100644
--- a/code/game/machinery/launch_pad.dm
+++ b/code/game/machinery/launch_pad.dm
@@ -351,15 +351,15 @@
user.transferItemToLoc(src, pad, TRUE)
atom_storage.close_all()
-/obj/item/storage/briefcase/launchpad/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user)
- if(istype(inserted, /obj/item/launchpad_remote))
- var/obj/item/launchpad_remote/remote = inserted
- if(remote.pad == WEAKREF(src.pad))
- return TRUE
- remote.pad = WEAKREF(src.pad)
- to_chat(user, span_notice("You link [pad] to [remote]."))
- return FALSE // no insert
- return TRUE
+/obj/item/storage/briefcase/launchpad/tool_act(mob/living/user, obj/item/tool, list/modifiers)
+ if(!istype(tool, /obj/item/launchpad_remote))
+ return ..()
+ var/obj/item/launchpad_remote/remote = tool
+ if(remote.pad == WEAKREF(src.pad))
+ return ..()
+ remote.pad = WEAKREF(src.pad)
+ to_chat(user, span_notice("You link [pad] to [remote]."))
+ return ITEM_INTERACT_BLOCKING
/obj/item/launchpad_remote
name = "folder"
diff --git a/code/game/machinery/newscaster/newspaper.dm b/code/game/machinery/newscaster/newspaper.dm
index d791fac6545a0..2bd8187b9f8c0 100644
--- a/code/game/machinery/newscaster/newspaper.dm
+++ b/code/game/machinery/newscaster/newspaper.dm
@@ -55,7 +55,7 @@
/obj/item/newspaper/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
if(held_item)
- if(istype(held_item, /obj/item/pen))
+ if(IS_WRITING_UTENSIL(held_item))
context[SCREENTIP_CONTEXT_LMB] = "Scribble"
return CONTEXTUAL_SCREENTIP_SET
if(held_item.get_temperature())
diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm
index 470aa0501e9d7..a8fa4e67b2bf6 100644
--- a/code/game/machinery/porta_turret/portable_turret_construct.dm
+++ b/code/game/machinery/porta_turret/portable_turret_construct.dm
@@ -181,7 +181,7 @@
build_step = PTURRET_CLOSED
return
- if(istype(used, /obj/item/pen)) //you can rename turrets like bots!
+ if(used.get_writing_implement_details()?["interaction_mode"] == MODE_WRITING) //you can rename turrets like bots!
var/choice = tgui_input_text(user, "Enter a new turret name", "Turret Classification", finish_name, MAX_NAME_LEN)
if(!choice)
return
diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm
index 149a0e7723ded..e81c13af60892 100644
--- a/code/game/machinery/porta_turret/portable_turret_cover.dm
+++ b/code/game/machinery/porta_turret/portable_turret_cover.dm
@@ -43,12 +43,12 @@
if(!parent_turret.anchored)
parent_turret.set_anchored(TRUE)
to_chat(user, span_notice("You secure the exterior bolts on the turret."))
- parent_turret.SetInvisibility(INVISIBILITY_NONE, id=type, priority=INVISIBILITY_PRIORITY_TURRET_COVER)
+ parent_turret.SetInvisibility(INVISIBILITY_MAXIMUM, id=parent_turret.type, priority=INVISIBILITY_PRIORITY_TURRET_COVER)
parent_turret.update_appearance()
else
parent_turret.set_anchored(FALSE)
to_chat(user, span_notice("You unsecure the exterior bolts on the turret."))
- parent_turret.SetInvisibility(INVISIBILITY_MAXIMUM, id=type, priority=INVISIBILITY_PRIORITY_TURRET_COVER)
+ parent_turret.SetInvisibility(INVISIBILITY_NONE, id=parent_turret.type, priority=INVISIBILITY_PRIORITY_TURRET_COVER)
parent_turret.update_appearance()
qdel(src)
return
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index f310c1afd3ea2..7454f18551150 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -47,7 +47,7 @@
if(!status_display_message_shown)
. += span_notice("The status display reads:")
- var/obj/item/stock_parts/cell/charging_cell = charging.get_cell()
+ var/obj/item/stock_parts/power_store/charging_cell = charging.get_cell()
if(charging_cell)
. += span_notice("- \The [charging]'s cell is at [charging_cell.percent()]%.")
return
@@ -143,7 +143,7 @@
using_power = FALSE
if(isnull(charging))
return PROCESS_KILL
- var/obj/item/stock_parts/cell/charging_cell = charging.get_cell()
+ var/obj/item/stock_parts/power_store/charging_cell = charging.get_cell()
if(charging_cell)
if(charging_cell.charge < charging_cell.maxcharge)
charge_cell(charging_cell.chargerate * recharge_coeff * seconds_per_tick, charging_cell)
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 4e16a1946c7b9..45610b47e7a42 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -54,10 +54,10 @@
* Mobs & borgs invoke this through a callback to recharge their cells
* Arguments
*
- * * obj/item/stock_parts/cell/target - the cell to charge, optional if provided else will draw power used directly
+ * * obj/item/stock_parts/power_store/cell/target - the cell to charge, optional if provided else will draw power used directly
* * seconds_per_tick - supplied from process()
*/
-/obj/machinery/recharge_station/proc/charge_target_cell(obj/item/stock_parts/cell/target, seconds_per_tick)
+/obj/machinery/recharge_station/proc/charge_target_cell(obj/item/stock_parts/power_store/cell/target, seconds_per_tick)
PRIVATE_PROC(TRUE)
//charge the cell, account for heat loss from work done
@@ -75,7 +75,7 @@
recharge_speed += 5e-3 * capacitor.tier
for(var/datum/stock_part/servo/servo in component_parts)
repairs += servo.tier - 1
- for(var/obj/item/stock_parts/cell/cell in component_parts)
+ for(var/obj/item/stock_parts/power_store/cell in component_parts)
recharge_speed *= cell.maxcharge
/obj/machinery/recharge_station/examine(mob/user)
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index 3e83890d755d6..a74d7456ed8ef 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -2,7 +2,7 @@
#define HEATER_MODE_HEAT "heat"
#define HEATER_MODE_COOL "cool"
#define HEATER_MODE_AUTO "auto"
-#define BASE_HEATING_ENERGY (40 KILO JOULES)
+#define BASE_HEATING_ENERGY (STANDARD_CELL_RATE * 0.1)
/obj/machinery/space_heater
anchored = FALSE
@@ -20,7 +20,7 @@
//We don't use area power, we always use the cell
use_power = NO_POWER_USE
///The cell we spawn with
- var/obj/item/stock_parts/cell/cell = /obj/item/stock_parts/cell
+ var/obj/item/stock_parts/power_store/cell = /obj/item/stock_parts/power_store/cell/high
///Is the machine on?
var/on = FALSE
///What is the mode we are in now?
@@ -30,7 +30,7 @@
///The temperature we trying to get to
var/target_temperature = T20C
///How much heat/cold we can deliver
- var/heating_energy = 40 KILO JOULES
+ var/heating_energy = BASE_HEATING_ENERGY
///How efficiently we can deliver that heat/cold (higher indicates less cell consumption)
var/efficiency = 20
///The amount of degrees above and below the target temperature for us to change mode to heater or cooler
@@ -208,7 +208,7 @@
if(default_deconstruction_crowbar(I))
return TRUE
- if(istype(I, /obj/item/stock_parts/cell))
+ if(istype(I, /obj/item/stock_parts/power_store/cell))
if(!panel_open)
to_chat(user, span_warning("The hatch must be open to insert a power cell!"))
return
@@ -389,7 +389,7 @@
add_fingerprint(user)
if(default_deconstruction_crowbar(item))
return
- if(istype(item, /obj/item/stock_parts/cell))
+ if(istype(item, /obj/item/stock_parts/power_store/cell))
if(cell)
to_chat(user, span_warning("There is already a power cell inside!"))
return
@@ -468,7 +468,7 @@
for(var/datum/stock_part/capacitor/capacitor in component_parts)
capacitors_rating += capacitor.tier
- heating_energy = lasers_rating * 20000
+ heating_energy = lasers_rating * BASE_HEATING_ENERGY
settable_temperature_range = capacitors_rating * 50 //-20 - 80 at base
efficiency = (capacitors_rating + 1) * 10
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index ce513c4000ff5..6b04b2c6f340d 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -553,7 +553,7 @@
/obj/machinery/suit_storage_unit/process(seconds_per_tick)
var/list/cells_to_charge = list()
for(var/obj/item/charging in list(mod, suit, helmet, mask, storage))
- var/obj/item/stock_parts/cell/cell_charging = charging.get_cell()
+ var/obj/item/stock_parts/power_store/cell_charging = charging.get_cell()
if(!istype(cell_charging) || cell_charging.charge == cell_charging.maxcharge)
continue
@@ -564,7 +564,7 @@
return
var/charge_per_item = (final_charge_rate * seconds_per_tick) / cell_count
- for(var/obj/item/stock_parts/cell/cell as anything in cells_to_charge)
+ for(var/obj/item/stock_parts/power_store/cell as anything in cells_to_charge)
charge_cell(charge_per_item, cell, grid_only = TRUE)
/obj/machinery/suit_storage_unit/proc/shock(mob/user, prb)
@@ -699,7 +699,7 @@
else
balloon_alert(user, "set to [choice]")
- else if(!state_open && istype(weapon, /obj/item/pen))
+ else if(!state_open && IS_WRITING_UTENSIL(weapon))
if(locked)
balloon_alert(user, "unlock first!")
return
diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm
index 693668e9e8900..e4f7b0a8338b8 100644
--- a/code/game/machinery/syndicatebomb.dm
+++ b/code/game/machinery/syndicatebomb.dm
@@ -642,7 +642,7 @@
var/skip_sound = TRUE
if(num_affected % 5) //makes it play the sound more sparingly
skip_sound = FALSE
- var/time_mult = round(get_dist_euclidian(get_turf(src), affected)) + 1
+ var/time_mult = round(get_dist_euclidean(get_turf(src), affected)) + 1
addtimer(CALLBACK(theme_to_use, TYPE_PROC_REF(/datum/dimension_theme, apply_theme), affected, skip_sound, TRUE), 0.1 SECONDS * time_mult)
qdel(src)
diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm
index 1998654df00b1..a38f18231fb76 100644
--- a/code/game/machinery/telecomms/computers/message.dm
+++ b/code/game/machinery/telecomms/computers/message.dm
@@ -268,6 +268,9 @@
ui = new(user, src, "MessageMonitor", name)
ui.open()
+/obj/machinery/computer/message_monitor/ui_assets(mob/user)
+ . = ..()
+ . += get_asset_datum(/datum/asset/spritesheet/chat)
#undef MSG_MON_SCREEN_MAIN
#undef MSG_MON_SCREEN_LOGS
diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
index 5086f7e91a7f1..77e1efbdfa13d 100644
--- a/code/game/machinery/telecomms/machine_interactions.dm
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -254,8 +254,11 @@
var/mob/living/silicon/ai/U = user
multitool = U.aiMulti
else if(iscyborg(user) && in_range(user, src))
- if(istype(user.get_active_held_item(), /obj/item/multitool))
- multitool = user.get_active_held_item()
+ var/mob/living/silicon/robot/borguser = user
+ for(var/obj/item/borg/cyborg_omnitool/toolarm in borguser.held_items)
+ if(istype(toolarm.selected, /obj/item/multitool))
+ multitool = toolarm.selected
+ break
return multitool
/obj/machinery/telecomms/proc/canAccess(mob/user)
diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm
index ecb7ef941aad8..238994004ded0 100644
--- a/code/game/machinery/transformer.dm
+++ b/code/game/machinery/transformer.dm
@@ -101,7 +101,7 @@
use_energy(active_power_usage) // Use a lot of power.
var/mob/living/silicon/robot/new_borg = victim.Robotize()
- new_borg.cell = new /obj/item/stock_parts/cell/upgraded/plus(new_borg, robot_cell_charge)
+ new_borg.cell = new /obj/item/stock_parts/power_store/cell/upgraded/plus(new_borg, robot_cell_charge)
// So he can't jump out the gate right away.
new_borg.SetLockdown()
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index 7b6632e3cab01..21804def7e361 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -333,33 +333,33 @@ GLOBAL_LIST_INIT(dye_registry, list(
default_unfasten_wrench(user, tool)
return ITEM_INTERACT_SUCCESS
-/obj/machinery/washing_machine/attackby(obj/item/W, mob/living/user, params)
- if(default_deconstruction_screwdriver(user, null, null, W))
- update_appearance()
- return
-
- else if(!user.combat_mode)
- if (!state_open)
- to_chat(user, span_warning("Open the door first!"))
- return TRUE
-
- if(bloody_mess)
- to_chat(user, span_warning("[src] must be cleaned up first!"))
- return TRUE
-
- if(contents.len >= max_wash_capacity)
- to_chat(user, span_warning("The washing machine is full!"))
- return TRUE
-
- if(!user.transferItemToLoc(W, src))
- to_chat(user, span_warning("\The [W] is stuck to your hand, you cannot put it in the washing machine!"))
- return TRUE
- if(W.dye_color)
- color_source = W
+/obj/machinery/washing_machine/screwdriver_act(mob/living/user, obj/item/tool)
+ if (!state_open)
+ default_deconstruction_screwdriver(user, null, null, tool)
update_appearance()
+ return ITEM_INTERACT_SUCCESS
+ return ITEM_INTERACT_BLOCKING
+
+/obj/machinery/washing_machine/item_interaction(mob/living/user, obj/item/item, list/modifiers)
+ if(user.combat_mode)
+ return NONE
+ if (!state_open)
+ to_chat(user, span_warning("Open the door first!"))
+ return ITEM_INTERACT_BLOCKING
+ if(bloody_mess)
+ to_chat(user, span_warning("[src] must be cleaned up first!"))
+ return ITEM_INTERACT_BLOCKING
+ if(contents.len >= max_wash_capacity)
+ to_chat(user, span_warning("The washing machine is full!"))
+ return ITEM_INTERACT_BLOCKING
+ if(!user.transferItemToLoc(item, src))
+ to_chat(user, span_warning("\The [item] is stuck to your hand, you cannot put it in the washing machine!"))
+ return ITEM_INTERACT_BLOCKING
+ if(item.dye_color)
+ color_source = item
+ update_appearance()
+ return ITEM_INTERACT_SUCCESS
- else
- return ..()
/obj/machinery/washing_machine/attack_hand(mob/living/user, list/modifiers)
. = ..()
diff --git a/code/game/objects/effects/anomalies/_anomalies.dm b/code/game/objects/effects/anomalies/_anomalies.dm
index ee02cab9e036b..ce9bab6a511cc 100644
--- a/code/game/objects/effects/anomalies/_anomalies.dm
+++ b/code/game/objects/effects/anomalies/_anomalies.dm
@@ -113,12 +113,13 @@
qdel(src)
-/obj/effect/anomaly/attackby(obj/item/weapon, mob/user, params)
- if(weapon.tool_behaviour == TOOL_ANALYZER && anomaly_core)
+/obj/effect/anomaly/analyzer_act(mob/living/user, obj/item/analyzer/tool)
+ if(!isnull(anomaly_core))
to_chat(user, span_notice("Analyzing... [src]'s unstable field is fluctuating along frequency [format_frequency(anomaly_core.frequency)], code [anomaly_core.code]."))
- return TRUE
+ return ITEM_INTERACT_SUCCESS
+ to_chat(user, span_notice("Analyzing... [src]'s unstable field is not fluctuating along a stable frequency."))
+ return ITEM_INTERACT_BLOCKING
- return ..()
///Stabilize an anomaly, letting it stay around forever or untill destabilizes by a player. An anomaly without a core can't be signalled, but can be destabilized
/obj/effect/anomaly/proc/stabilize(anchor = FALSE, has_core = TRUE)
diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm
index b0af5c3ca029e..21eff5028b57e 100644
--- a/code/game/objects/effects/decals/cleanable.dm
+++ b/code/game/objects/effects/decals/cleanable.dm
@@ -84,7 +84,7 @@
qdel(src)
return
if(W.get_temperature()) //todo: make heating a reagent holder proc
- if(istype(W, /obj/item/clothing/mask/cigarette))
+ if(istype(W, /obj/item/cigarette))
return
else
var/hotness = W.get_temperature()
diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm
index c95bffdc62676..0f4c9dee3127f 100644
--- a/code/game/objects/effects/decals/cleanable/humans.dm
+++ b/code/game/objects/effects/decals/cleanable/humans.dm
@@ -97,6 +97,15 @@
/obj/effect/decal/cleanable/trail_holder/can_bloodcrawl_in()
return TRUE
+// normal version of the above trail holder object for use in less convoluted things
+/obj/effect/decal/cleanable/blood/trails
+ desc = "Looks like a corpse was smeared all over the floor like ketchup. Kinda makes you hungry."
+ random_icon_states = list("trails_1", "trails_2")
+ icon_state = "trails_1"
+ beauty = -50
+ dryname = "dried tracks"
+ drydesc = "Looks like a corpse was smeared all over the floor like ketchup, but it's all dried up and nasty now, ew. You lose some of your appetite."
+
/obj/effect/decal/cleanable/blood/gibs
name = "gibs"
desc = "They look bloody and gruesome."
diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm
index d977605b2436f..fcc4afa14944d 100644
--- a/code/game/objects/effects/decals/cleanable/misc.dm
+++ b/code/game/objects/effects/decals/cleanable/misc.dm
@@ -444,6 +444,7 @@
beauty = -50
clean_type = CLEAN_TYPE_BLOOD
mouse_opacity = MOUSE_OPACITY_OPAQUE
+ resistance_flags = UNACIDABLE | ACID_PROOF | FIRE_PROOF | FLAMMABLE //gross way of doing this but would need to disassemble fire_act call stack otherwise
/// Maximum amount of hotspots this pool can create before deleting itself
var/burn_amount = 3
/// Is this fuel pool currently burning?
@@ -453,6 +454,11 @@
/obj/effect/decal/cleanable/fuel_pool/Initialize(mapload, burn_stacks)
. = ..()
+ var/static/list/ignition_trigger_connections = list(
+ COMSIG_TURF_MOVABLE_THROW_LANDED = PROC_REF(ignition_trigger),
+ )
+ AddElement(/datum/element/connect_loc, ignition_trigger_connections)
+ RegisterSignal(src, COMSIG_ATOM_TOUCHED_SPARKS, PROC_REF(ignition_trigger))
for(var/obj/effect/decal/cleanable/fuel_pool/pool in get_turf(src)) //Can't use locate because we also belong to that turf
if(pool == src)
continue
@@ -509,6 +515,28 @@
ignite()
return ..()
+/obj/effect/decal/cleanable/fuel_pool/on_entered(datum/source, atom/movable/entered_atom)
+ . = ..()
+ if(entered_atom.throwing) // don't light from things being thrown over us, we handle that somewhere else
+ return
+ ignition_trigger(source = src, enflammable_atom = entered_atom)
+
+/obj/effect/decal/cleanable/fuel_pool/proc/ignition_trigger(datum/source, atom/movable/enflammable_atom)
+ SIGNAL_HANDLER
+
+ if(isitem(enflammable_atom))
+ var/obj/item/enflamed_item = enflammable_atom
+ if(enflamed_item.get_temperature() > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
+ ignite()
+ return
+ else if(isliving(enflammable_atom))
+ var/mob/living/enflamed_liver = enflammable_atom
+ if(enflamed_liver.on_fire)
+ ignite()
+ else if(istype(enflammable_atom, /obj/effect/particle_effect/sparks))
+ ignite()
+
+
/obj/effect/decal/cleanable/fuel_pool/hivis
icon_state = "fuel_pool_hivis"
diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm
index 874c53fa83c7d..d7acb25fde459 100644
--- a/code/game/objects/effects/effect_system/effects_sparks.dm
+++ b/code/game/objects/effects/effect_system/effects_sparks.dm
@@ -26,28 +26,69 @@
return INITIALIZE_HINT_LATELOAD
/obj/effect/particle_effect/sparks/LateInitialize()
+ RegisterSignals(src, list(COMSIG_MOVABLE_CROSS, COMSIG_MOVABLE_CROSS_OVER), PROC_REF(sparks_touched))
flick(icon_state, src)
playsound(src, SFX_SPARKS, 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
- var/turf/T = loc
- if(isturf(T))
- T.hotspot_expose(1000,100)
+ var/turf/location = loc
+ if(isturf(location))
+ affect_location(location, just_initialized = TRUE)
QDEL_IN(src, 20)
/obj/effect/particle_effect/sparks/Destroy()
- var/turf/T = loc
- if(isturf(T))
- T.hotspot_expose(1000,100)
+ var/turf/location = loc
+ if(isturf(location))
+ affect_location(location)
return ..()
/obj/effect/particle_effect/sparks/Move()
..()
- var/turf/T = loc
- if(isturf(T))
- T.hotspot_expose(1000,100)
+ var/turf/location = loc
+ if(isturf(location))
+ affect_location(location)
+
+/*
+* Apply the effects of this spark to its location.
+*
+* When the spark is first created, Cross() and Crossed() don't get called,
+* so for the first initialization, we make sure to specifically invoke the
+* behavior of the spark on all the mobs and objects in the location.
+* turf/location - The place the spark is affectiong
+* just_initialized - If the spark is just being created, and we need to manually affect everything in the location
+*/
+/obj/effect/particle_effect/sparks/proc/affect_location(turf/location, just_initialized = FALSE)
+ location.hotspot_expose(1000,100)
+ SEND_SIGNAL(location, COMSIG_ATOM_TOUCHED_SPARKS, src) // for plasma floors; other floor types only have to worry about the mysterious HAZARDOUS sparks
+ if(just_initialized)
+ for(var/atom/movable/singed in location)
+ sparks_touched(src, singed)
+
+/*
+* This is called when anything passes through the same tiles as a spark, or when a spark passes through something's tile.
+*
+* This is invoked by the signals sent by every atom when they're crossed or crossing something. It
+* signifies that something has been touched by sparks, and should be affected by possible pyrotechnic affects..
+* datum/source - Can either be the spark itself or an object that just walked into it
+* mob/living/singed - What was touched by the spark
+*/
+/obj/effect/particle_effect/sparks/proc/sparks_touched(datum/source, atom/singed)
+ SIGNAL_HANDLER
+
+ SEND_SIGNAL(singed, COMSIG_ATOM_TOUCHED_SPARKS, src)
+ if(isobj(singed))
+ if(singed.reagents)
+ var/datum/reagents/reagents = singed.reagents // heat up things that contain reagents before we check to see if they burn
+ reagents?.expose_temperature(1000) // we set this at 1000 because that's the max reagent temp for a chem heater, higher temps require more than sparks
+ return
+ if(ishuman(singed))
+ var/mob/living/carbon/human/singed_human = singed
+ for(var/obj/item/anything in singed_human.get_visible_items())
+ sparks_touched(src, anything)
/datum/effect_system/spark_spread
effect_type = /obj/effect/particle_effect/sparks
+
+
/datum/effect_system/spark_spread/quantum
effect_type = /obj/effect/particle_effect/sparks/quantum
diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm
index a7aabee6f4d2a..255f34eff51dd 100644
--- a/code/game/objects/effects/portals.dm
+++ b/code/game/objects/effects/portals.dm
@@ -101,7 +101,7 @@
. = INITIALIZE_HINT_QDEL
CRASH("Somebody fucked up.")
if(_lifespan > 0)
- addtimer(src, PROC_REF(expire), _lifespan, TIMER_DELETE_ME)
+ addtimer(CALLBACK(src, PROC_REF(expire)), _lifespan, TIMER_DELETE_ME)
link_portal(_linked)
hardlinked = automatic_link
if(isturf(hard_target_override))
diff --git a/code/game/objects/effects/spawners/costume.dm b/code/game/objects/effects/spawners/costume.dm
index 6eb3f801f7365..e5280f7e66184 100644
--- a/code/game/objects/effects/spawners/costume.dm
+++ b/code/game/objects/effects/spawners/costume.dm
@@ -40,7 +40,7 @@
items = list(
/obj/item/clothing/under/rank/captain/suit,
/obj/item/clothing/head/flatcap,
- /obj/item/clothing/mask/cigarette/cigar/havana,
+ /obj/item/cigarette/cigar/havana,
/obj/item/clothing/shoes/jackboots,
)
diff --git a/code/game/objects/effects/spawners/random/armory.dm b/code/game/objects/effects/spawners/random/armory.dm
index 5292ca6ad0986..dfb71ff10d54b 100644
--- a/code/game/objects/effects/spawners/random/armory.dm
+++ b/code/game/objects/effects/spawners/random/armory.dm
@@ -45,6 +45,16 @@
icon_state = "shotgun"
loot = list(/obj/item/gun/ballistic/shotgun/riot)
+/obj/effect/spawner/random/armory/dragnet
+ name = "DRAGnet spawner"
+ icon_state = "dragnet"
+ loot = list(/obj/item/gun/energy/e_gun/dragnet)
+ spawn_loot_count = 2
+
+/obj/effect/spawner/random/armory/dragnet/spawn_loot(lootcount_override)
+ . = ..()
+ new /obj/item/dragnet_beacon(get_turf(src)) //And give them a beacon too!
+
// Armor
/obj/effect/spawner/random/armory/bulletproof_helmet
name = "bulletproof helmet spawner"
diff --git a/code/game/objects/effects/spawners/random/entertainment.dm b/code/game/objects/effects/spawners/random/entertainment.dm
index 3ad477b0294f3..74ca4213b0dc5 100644
--- a/code/game/objects/effects/spawners/random/entertainment.dm
+++ b/code/game/objects/effects/spawners/random/entertainment.dm
@@ -121,10 +121,10 @@
icon_state = "pill"
loot = list(
/obj/item/reagent_containers/cup/glass/bottle/hooch = 50,
- /obj/item/clothing/mask/cigarette/rollie/cannabis = 15,
+ /obj/item/cigarette/rollie/cannabis = 15,
/obj/item/reagent_containers/syringe = 15,
/obj/item/cigbutt/roach = 15,
- /obj/item/clothing/mask/cigarette/rollie/mindbreaker = 5,
+ /obj/item/cigarette/rollie/mindbreaker = 5,
)
/obj/effect/spawner/random/entertainment/dice
@@ -157,23 +157,23 @@
name = "cigarette spawner"
icon_state = "cigarettes"
loot = list(
- /obj/item/clothing/mask/cigarette/space_cigarette = 3,
- /obj/item/clothing/mask/cigarette/rollie/cannabis = 3,
- /obj/item/clothing/mask/cigarette/rollie/nicotine = 3,
- /obj/item/clothing/mask/cigarette/dromedary = 2,
- /obj/item/clothing/mask/cigarette/uplift = 2,
- /obj/item/clothing/mask/cigarette/robust = 2,
- /obj/item/clothing/mask/cigarette/carp = 1,
- /obj/item/clothing/mask/cigarette/robustgold = 1,
+ /obj/item/cigarette/space_cigarette = 3,
+ /obj/item/cigarette/rollie/cannabis = 3,
+ /obj/item/cigarette/rollie/nicotine = 3,
+ /obj/item/cigarette/dromedary = 2,
+ /obj/item/cigarette/uplift = 2,
+ /obj/item/cigarette/robust = 2,
+ /obj/item/cigarette/carp = 1,
+ /obj/item/cigarette/robustgold = 1,
)
/obj/effect/spawner/random/entertainment/cigar
name = "cigar spawner"
icon_state = "cigarettes"
loot = list(
- /obj/item/clothing/mask/cigarette/cigar = 3,
- /obj/item/clothing/mask/cigarette/cigar/havana = 2,
- /obj/item/clothing/mask/cigarette/cigar/cohiba = 1,
+ /obj/item/cigarette/cigar = 3,
+ /obj/item/cigarette/cigar/havana = 2,
+ /obj/item/cigarette/cigar/cohiba = 1,
)
/obj/effect/spawner/random/entertainment/wallet_lighter
diff --git a/code/game/objects/effects/spawners/random/structure.dm b/code/game/objects/effects/spawners/random/structure.dm
index b5b2c226d11d6..b6af49275028b 100644
--- a/code/game/objects/effects/spawners/random/structure.dm
+++ b/code/game/objects/effects/spawners/random/structure.dm
@@ -123,7 +123,7 @@
/obj/effect/spawner/random/structure/closet_empty/crate/with_loot/make_item(spawn_loc, type_path_to_make)
var/obj/structure/closet/closet_to_fill = ..()
- closet_to_fill.RegisterSignal(closet_to_fill, COMSIG_CLOSET_POPULATE_CONTENTS, TYPE_PROC_REF(/obj/structure/closet/, populate_with_random_maint_loot))
+ closet_to_fill.RegisterSignal(closet_to_fill, COMSIG_CLOSET_CONTENTS_INITIALIZED, TYPE_PROC_REF(/obj/structure/closet/, populate_with_random_maint_loot))
return closet_to_fill
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 79dd9d7e6ed05..1cdeaa89bafcb 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -1426,7 +1426,7 @@
mob_loc.update_clothing(slot_flags)
/// Called on [/datum/element/openspace_item_click_handler/proc/on_afterattack]. Check the relative file for information.
-/obj/item/proc/handle_openspace_click(turf/target, mob/user, click_parameters)
+/obj/item/proc/handle_openspace_click(turf/target, mob/user, list/modifiers)
stack_trace("Undefined handle_openspace_click() behaviour. Ascertain the openspace_item_click_handler element has been attached to the right item and that its proc override doesn't call parent.")
/**
@@ -1460,15 +1460,6 @@
SHOULD_CALL_PARENT(TRUE)
SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED_AS_OUTFIT, outfit_wearer, visuals_only, item_slot)
-/**
- * Called before this item is placed into a storage container
- * via the item clicking on the target atom
- *
- * Returning FALSE will prevent the item from being stored
- */
-/obj/item/proc/storage_insert_on_interaction(datum/storage, atom/storage_holder, mob/user)
- return TRUE
-
/obj/item/proc/do_pickup_animation(atom/target, turf/source)
if(!source)
if(!istype(loc, /turf))
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index c43f32daacbdf..5dc826e8fd51e 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -552,26 +552,26 @@
if(ispath(trim))
SSid_access.apply_trim_to_card(src, trim)
-/obj/item/card/id/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/rupee))
+/obj/item/card/id/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(istype(tool, /obj/item/rupee))
to_chat(user, span_warning("Your ID smartly rejects the strange shard of glass. Who knew, apparently it's not ACTUALLY valuable!"))
- return
- else if(iscash(W))
- insert_money(W, user)
- return
- else if(istype(W, /obj/item/storage/bag/money))
- var/obj/item/storage/bag/money/money_bag = W
+ return ITEM_INTERACT_BLOCKING
+ else if(iscash(tool))
+ return insert_money(tool, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING
+ else if(istype(tool, /obj/item/storage/bag/money))
+ var/obj/item/storage/bag/money/money_bag = tool
var/list/money_contained = money_bag.contents
var/money_added = mass_insert_money(money_contained, user)
- if (money_added)
- to_chat(user, span_notice("You stuff the contents into the card! They disappear in a puff of bluespace smoke, adding [money_added] worth of credits to the linked account."))
- return
- else
- return ..()
+ if(!money_added)
+ return ITEM_INTERACT_BLOCKING
+ to_chat(user, span_notice("You stuff the contents into the card! They disappear in a puff of bluespace smoke, adding [money_added] worth of credits to the linked account."))
+ return ITEM_INTERACT_SUCCESS
+ return NONE
/**
* Insert credits or coins into the ID card and add their value to the associated bank account.
*
+ * Returns TRUE if the money was successfully inserted, FALSE otherwise.
* Arguments:
* money - The item to attempt to convert to credits and insert into the card.
* user - The user inserting the item.
@@ -584,11 +584,11 @@
if(!registered_account)
to_chat(user, span_warning("[src] doesn't have a linked account to deposit [money] into!"))
- return
+ return FALSE
var/cash_money = money.get_item_credit_value()
if(!cash_money)
to_chat(user, span_warning("[money] doesn't seem to be worth anything!"))
- return
+ return FALSE
registered_account.adjust_money(cash_money, "System: Deposit")
SSblackbox.record_feedback("amount", "credits_inserted", cash_money)
log_econ("[cash_money] credits were inserted into [src] owned by [src.registered_name]")
@@ -599,6 +599,7 @@
to_chat(user, span_notice("The linked account now reports a balance of [registered_account.account_balance] cr."))
qdel(money)
+ return TRUE
/**
* Insert multiple money or money-equivalent items at once.
@@ -953,20 +954,41 @@
return ..()
-
-/obj/item/card/id/advanced/attackby(obj/item/W, mob/user, params)
+/obj/item/card/id/advanced/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
. = ..()
- if(istype(W, /obj/item/toy/crayon))
- var/obj/item/toy/crayon/our_crayon = W
- if(tgui_alert(usr, "Recolor Department or Subdepartment?", "Recoloring ID...", list("Department", "Subdepartment")) == "Department")
- if(!do_after(user, 2 SECONDS)) // Doesn't technically require a spraycan's cap to be off but shhh
- return
+ if(.)
+ return .
+
+ if(istype(tool, /obj/item/toy/crayon))
+ return recolor_id(user, tool)
+
+/obj/item/card/id/advanced/proc/recolor_id(mob/living/user, obj/item/toy/crayon/our_crayon)
+ if(our_crayon.is_capped)
+ balloon_alert(user, "take the cap off first!")
+ return ITEM_INTERACT_BLOCKING
+ var/choice = tgui_alert(usr, "Recolor Department or Subdepartment?", "Recoloring ID...", list("Department", "Subdepartment"))
+ if(isnull(choice) \
+ || QDELETED(user) \
+ || QDELETED(src) \
+ || QDELETED(our_crayon) \
+ || !usr.can_perform_action(src, ALLOW_RESTING) \
+ || !usr.can_perform_action(our_crayon, ALLOW_RESTING) \
+ )
+ return ITEM_INTERACT_BLOCKING
+
+ switch(choice)
+ if("Department")
+ if(!do_after(user, 2 SECONDS))
+ return ITEM_INTERACT_BLOCKING
department_color_override = our_crayon.paint_color
balloon_alert(user, "recolored")
- else if(do_after(user, 1 SECONDS))
+ if("Subdepartment")
+ if(!do_after(user, 1 SECONDS))
+ return ITEM_INTERACT_BLOCKING
subdepartment_color_override = our_crayon.paint_color
balloon_alert(user, "recolored")
- update_icon()
+ update_icon()
+ return ITEM_INTERACT_SUCCESS
/obj/item/card/id/advanced/proc/update_intern_status(datum/source, mob/user, slot)
SIGNAL_HANDLER
@@ -1275,27 +1297,38 @@
/// Time left on a card till they can leave.
var/time_left = 0
-/obj/item/card/id/advanced/prisoner/attackby(obj/item/card/id/C, mob/user)
- ..()
- var/list/id_access = C.GetAccess()
+/obj/item/card/id/advanced/prisoner/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ . = ..()
+ if(.)
+ return .
+
+ if(isidcard(tool))
+ return set_sentence_time(user, tool)
+
+/obj/item/card/id/advanced/prisoner/proc/set_sentence_time(mob/living/user, obj/item/card/id/our_card)
+ var/list/id_access = our_card.GetAccess()
if(!(ACCESS_BRIG in id_access))
- return FALSE
- if(loc != user)
+ balloon_alert(user, "access denied!")
+ return ITEM_INTERACT_BLOCKING
+ if(!user.is_holding(src))
to_chat(user, span_warning("You must be holding the ID to continue!"))
- return FALSE
- if(timed)
+ return ITEM_INTERACT_BLOCKING
+
+ if(timed) // If we already have a time set, reset the card
timed = FALSE
time_to_assign = initial(time_to_assign)
registered_name = initial(registered_name)
STOP_PROCESSING(SSobj, src)
- to_chat(user, "Restating prisoner ID to default parameters.")
- return
+ to_chat(user, "Resetting prisoner ID to default parameters.")
+ return ITEM_INTERACT_SUCCESS
+
var/choice = tgui_input_number(user, "Sentence time in seconds", "Sentencing")
- if(!choice || QDELETED(user) || QDELETED(src) || !usr.can_perform_action(src, FORBID_TELEKINESIS_REACH) || loc != user)
- return FALSE
+ if(isnull(choice) || QDELETED(user) || QDELETED(src) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH) || !user.is_holding(src))
+ return ITEM_INTERACT_BLOCKING
time_to_assign = choice
- to_chat(user, "You set the sentence time to [time_to_assign] seconds.")
+ to_chat(user, "You set the sentence time to [DisplayTimeText(time_to_assign * 10)].")
timed = TRUE
+ return ITEM_INTERACT_SUCCESS
/obj/item/card/id/advanced/prisoner/proc/start_timer()
say("Sentence started, welcome to the corporate rehabilitation center!")
@@ -1307,10 +1340,15 @@
return
if(timed)
- if(time_left <= 0)
+ if(time_to_assign > 0)
+ . += span_notice("The digital timer on the card is set to [DisplayTimeText(time_to_assign * 10)]. The timer will start once the prisoner passes through the prison gate scanners.")
+ else if(time_left <= 0)
. += span_notice("The digital timer on the card has zero seconds remaining. You leave a changed man, but a free man nonetheless.")
else
- . += span_notice("The digital timer on the card has [time_left] seconds remaining. Don't do the crime if you can't do the time.")
+ . += span_notice("The digital timer on the card has [DisplayTimeText(time_left * 10)] remaining. Don't do the crime if you can't do the time.")
+
+ . += span_notice("[EXAMINE_HINT("Swipe")] a security ID on the card to [timed ? "re" : ""]set the genpop sentence time.")
+ . += span_notice("Remember to [EXAMINE_HINT("swipe")] the card on a genpop locker to link it.")
/obj/item/card/id/advanced/prisoner/process(seconds_per_tick)
if(!timed)
@@ -1761,11 +1799,10 @@
voice_name += " (as [scribbled_name])"
stored_name[NAME_PART_INDEX] = voice_name
-/obj/item/card/cardboard/attackby(obj/item/item, mob/living/user, params)
- if(user.can_write(item, TRUE))
- INVOKE_ASYNC(src, PROC_REF(modify_card), user, item)
- return TRUE
- return ..()
+/obj/item/card/cardboard/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(user.can_write(tool, TRUE))
+ INVOKE_ASYNC(src, PROC_REF(modify_card), user, tool)
+ return ITEM_INTERACT_SUCCESS
///Lets the user write a name, assignment or trim on the card, or reset it. Only the name is important for the component.
/obj/item/card/cardboard/proc/modify_card(mob/living/user, obj/item/item)
diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm
index 174a8fde5f7c2..27647feb924f9 100644
--- a/code/game/objects/items/cigs_lighters.dm
+++ b/code/game/objects/items/cigs_lighters.dm
@@ -55,6 +55,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
desc = "A [initial(name)]. This one is lit."
attack_verb_continuous = string_list(list("burns", "singes"))
attack_verb_simple = string_list(list("burn", "singe"))
+ if(isliving(loc))
+ var/mob/living/male_model = loc
+ if(male_model.fire_stacks && !(male_model.on_fire))
+ male_model.ignite_mob()
START_PROCESSING(SSobj, src)
update_appearance()
@@ -90,7 +94,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
message_admins("[ADMIN_LOOKUPFLW(user)] set [key_name_admin(M)] on fire with [src] at [AREACOORD(user)]")
user.log_message("set [key_name(M)] on fire with [src]", LOG_ATTACK)
- var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M)
+ var/obj/item/cigarette/cig = help_light_cig(M)
if(!lit || !cig || user.combat_mode)
..()
return
@@ -105,7 +109,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/// Finds a cigarette on another mob to help light.
/obj/item/proc/help_light_cig(mob/living/M)
var/mask_item = M.get_item_by_slot(ITEM_SLOT_MASK)
- if(istype(mask_item, /obj/item/clothing/mask/cigarette))
+ if(istype(mask_item, /obj/item/cigarette))
return mask_item
/obj/item/match/get_temperature()
@@ -125,14 +129,15 @@ CIGARETTE PACKETS ARE IN FANCY.DM
//////////////////
//FINE SMOKABLES//
//////////////////
-/obj/item/clothing/mask/cigarette
+/obj/item/cigarette
name = "cigarette"
desc = "A roll of tobacco and nicotine."
+ icon = 'icons/obj/cigarettes.dmi'
icon_state = "cigoff"
inhand_icon_state = "cigon" //gets overriden during intialize(), just have it for unit test sanity.
throw_speed = 0.5
w_class = WEIGHT_CLASS_TINY
- body_parts_covered = null
+ slot_flags = ITEM_SLOT_MASK
grind_results = list()
heat = 1000
throw_verb = "flick"
@@ -176,7 +181,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/// How long the current mob has been smoking this cigarette
VAR_FINAL/how_long_have_we_been_smokin = 0 SECONDS
-/obj/item/clothing/mask/cigarette/Initialize(mapload)
+/obj/item/cigarette/Initialize(mapload)
. = ..()
create_reagents(chem_volume, INJECTABLE | NO_REACT)
if(list_reagents)
@@ -185,27 +190,27 @@ CIGARETTE PACKETS ARE IN FANCY.DM
light()
AddComponent(/datum/component/knockoff, 90, list(BODY_ZONE_PRECISE_MOUTH), slot_flags) //90% to knock off when wearing a mask
AddElement(/datum/element/update_icon_updates_onmob)
+ RegisterSignal(src, COMSIG_ATOM_TOUCHED_SPARKS, PROC_REF(sparks_touched))
icon_state = icon_off
inhand_icon_state = inhand_icon_off
-/obj/item/clothing/mask/cigarette/Destroy()
+/obj/item/cigarette/Destroy()
STOP_PROCESSING(SSobj, src)
QDEL_NULL(mob_smoke)
QDEL_NULL(cig_smoke)
return ..()
-/obj/item/clothing/mask/cigarette/equipped(mob/equipee, slot)
+/obj/item/cigarette/equipped(mob/equipee, slot)
. = ..()
if(!(slot & ITEM_SLOT_MASK))
UnregisterSignal(equipee, list(COMSIG_HUMAN_FORCESAY, COMSIG_ATOM_DIR_CHANGE))
return
RegisterSignal(equipee, COMSIG_HUMAN_FORCESAY, PROC_REF(on_forcesay))
RegisterSignal(equipee, COMSIG_ATOM_DIR_CHANGE, PROC_REF(on_mob_dir_change))
-
if(lit && iscarbon(loc))
make_mob_smoke(loc)
-/obj/item/clothing/mask/cigarette/dropped(mob/dropee, silent)
+/obj/item/cigarette/dropped(mob/dropee)
. = ..()
// Moving the cigarette from mask to hands (or pocket I guess) will emit a larger puff of smoke
if(!QDELETED(src) && !QDELETED(dropee) && how_long_have_we_been_smokin >= 4 SECONDS && iscarbon(dropee) && iscarbon(loc))
@@ -218,17 +223,17 @@ CIGARETTE PACKETS ARE IN FANCY.DM
QDEL_NULL(mob_smoke)
how_long_have_we_been_smokin = 0 SECONDS
-/obj/item/clothing/mask/cigarette/proc/on_forcesay(mob/living/source)
+/obj/item/cigarette/proc/on_forcesay(mob/living/source)
SIGNAL_HANDLER
source.apply_status_effect(/datum/status_effect/choke, src, lit, choke_forever ? -1 : rand(25 SECONDS, choke_time_max))
-/obj/item/clothing/mask/cigarette/proc/on_mob_dir_change(mob/living/source, old_dir, new_dir)
+/obj/item/cigarette/proc/on_mob_dir_change(mob/living/source, old_dir, new_dir)
SIGNAL_HANDLER
if(isnull(mob_smoke))
return
update_particle_position(mob_smoke, new_dir)
-/obj/item/clothing/mask/cigarette/proc/update_particle_position(obj/effect/abstract/particle_holder/to_edit, new_dir = loc.dir)
+/obj/item/cigarette/proc/update_particle_position(obj/effect/abstract/particle_holder/to_edit, new_dir = loc.dir)
var/new_x = 0
var/new_layer = initial(to_edit.layer)
if(new_dir & NORTH)
@@ -243,11 +248,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM
to_edit.set_particle_position(new_x, 8, 0)
to_edit.layer = new_layer
-/obj/item/clothing/mask/cigarette/suicide_act(mob/living/user)
+/obj/item/cigarette/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] is huffing [src] as quickly as [user.p_they()] can! It looks like [user.p_theyre()] trying to give [user.p_them()]self cancer."))
return (TOXLOSS|OXYLOSS)
-/obj/item/clothing/mask/cigarette/attackby(obj/item/W, mob/user, params)
+/obj/item/cigarette/attackby(obj/item/W, mob/user, params)
if(lit)
return ..()
@@ -265,7 +270,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
to_chat(user, span_warning("There is nothing to smoke!"))
/// Checks that we have enough air to smoke
-/obj/item/clothing/mask/cigarette/proc/check_oxygen(mob/user)
+/obj/item/cigarette/proc/check_oxygen(mob/user)
if (reagents.has_reagent(/datum/reagent/oxygen))
return TRUE
var/datum/gas_mixture/air = return_air()
@@ -276,13 +281,14 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/mob/living/carbon/the_smoker = user
return the_smoker.can_breathe_helmet()
-/obj/item/clothing/mask/cigarette/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
+/obj/item/cigarette/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
if(lit) //can't dip if cigarette is lit (it will heat the reagents in the glass instead)
return NONE
var/obj/item/reagent_containers/cup/glass = interacting_with
if(!istype(glass)) //you can dip cigarettes into beakers
return NONE
-
+ if(istype(glass, /obj/item/reagent_containers/cup/mortar))
+ return NONE
if(glass.reagents.trans_to(src, chem_volume, transferred_by = user)) //if reagents were transferred, show the message
to_chat(user, span_notice("You dip \the [src] into \the [glass]."))
//if not, either the beaker was empty, or the cigarette was full
@@ -292,7 +298,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
to_chat(user, span_warning("[src] is full!"))
return ITEM_INTERACT_SUCCESS
-/obj/item/clothing/mask/cigarette/update_icon_state()
+/obj/item/cigarette/update_icon_state()
. = ..()
if(lit)
icon_state = icon_on
@@ -301,8 +307,16 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon_state = icon_off
inhand_icon_state = inhand_icon_off
+
+/obj/item/cigarette/proc/sparks_touched(datum/source, obj/effect/particle_effect)
+ SIGNAL_HANDLER
+
+ if(lit)
+ return
+ light()
+
/// Lights the cigarette with given flavor text.
-/obj/item/clothing/mask/cigarette/proc/light(flavor_text = null)
+/obj/item/cigarette/proc/light(flavor_text = null)
if(lit)
return
@@ -343,7 +357,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(src == smoker.wear_mask)
make_mob_smoke(smoker)
-/obj/item/clothing/mask/cigarette/extinguish()
+/obj/item/cigarette/extinguish()
. = ..()
if(!lit)
return
@@ -361,7 +375,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
QDEL_NULL(cig_smoke)
QDEL_NULL(mob_smoke)
-/obj/item/clothing/mask/cigarette/proc/long_exhale(mob/living/carbon/smoker)
+/obj/item/cigarette/proc/long_exhale(mob/living/carbon/smoker)
smoker.visible_message(
span_notice("[smoker] exhales a large cloud of smoke from [src]."),
span_notice("You exhale a large cloud of smoke from [src]."),
@@ -374,7 +388,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
QDEL_IN(big_smoke, big_smoke.particles.lifespan)
/// Handles processing the reagents in the cigarette.
-/obj/item/clothing/mask/cigarette/proc/handle_reagents(seconds_per_tick)
+/obj/item/cigarette/proc/handle_reagents(seconds_per_tick)
if(!reagents.total_volume)
return
reagents.expose_temperature(heat, 0.05)
@@ -410,7 +424,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(!reagents.trans_to(smoker, to_smoke, methods = INGEST, ignore_stomach = TRUE))
reagents.remove_all(to_smoke)
-/obj/item/clothing/mask/cigarette/process(seconds_per_tick)
+/obj/item/cigarette/process(seconds_per_tick)
var/mob/living/user = isliving(loc) ? loc : null
user?.ignite_mob()
@@ -428,12 +442,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
COOLDOWN_START(src, drag_cooldown, dragtime)
handle_reagents(seconds_per_tick)
-/obj/item/clothing/mask/cigarette/attack_self(mob/user)
+/obj/item/cigarette/attack_self(mob/user)
if(lit)
put_out(user, TRUE)
return ..()
-/obj/item/clothing/mask/cigarette/proc/put_out(mob/user, done_early = FALSE)
+/obj/item/cigarette/proc/put_out(mob/user, done_early = FALSE)
var/atom/location = drop_location()
if(!isnull(user))
if(done_early)
@@ -449,13 +463,13 @@ CIGARETTE PACKETS ARE IN FANCY.DM
new type_butt(location)
qdel(src)
-/obj/item/clothing/mask/cigarette/attack(mob/living/carbon/M, mob/living/carbon/user)
+/obj/item/cigarette/attack(mob/living/carbon/M, mob/living/carbon/user)
if(!istype(M))
return ..()
if(M.on_fire && !lit)
light(span_notice("[user] lights [src] with [M]'s burning body. What a cold-blooded badass."))
return
- var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M)
+ var/obj/item/cigarette/cig = help_light_cig(M)
if(!lit || !cig || user.combat_mode)
return ..()
@@ -466,54 +480,54 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else
cig.light(span_notice("[user] holds the [name] out for [M], and lights [M.p_their()] [cig.name]."))
-/obj/item/clothing/mask/cigarette/fire_act(exposed_temperature, exposed_volume)
+/obj/item/cigarette/fire_act(exposed_temperature, exposed_volume)
light()
-/obj/item/clothing/mask/cigarette/get_temperature()
+/obj/item/cigarette/get_temperature()
return lit * heat
-/obj/item/clothing/mask/cigarette/proc/make_mob_smoke(mob/living/smoker)
+/obj/item/cigarette/proc/make_mob_smoke(mob/living/smoker)
mob_smoke = new(smoker, /particles/smoke/cig)
update_particle_position(mob_smoke, smoker.dir)
return mob_smoke
-/obj/item/clothing/mask/cigarette/proc/make_cig_smoke()
+/obj/item/cigarette/proc/make_cig_smoke()
cig_smoke = new(src, /particles/smoke/cig)
cig_smoke.particles.scale *= 1.5
return cig_smoke
// Cigarette brands.
-/obj/item/clothing/mask/cigarette/space_cigarette
+/obj/item/cigarette/space_cigarette
desc = "A Space brand cigarette that can be smoked anywhere."
list_reagents = list(/datum/reagent/drug/nicotine = 9, /datum/reagent/oxygen = 9)
smoketime = 4 MINUTES // space cigs have a shorter burn time than normal cigs
smoke_all = TRUE // so that it doesn't runout of oxygen while being smoked in space
-/obj/item/clothing/mask/cigarette/dromedary
+/obj/item/cigarette/dromedary
desc = "A DromedaryCo brand cigarette. Contrary to popular belief, does not contain Calomel, but is reported to have a watery taste."
list_reagents = list(/datum/reagent/drug/nicotine = 13, /datum/reagent/water = 5) //camel has water
-/obj/item/clothing/mask/cigarette/uplift
+/obj/item/cigarette/uplift
desc = "An Uplift Smooth brand cigarette. Smells refreshing."
list_reagents = list(/datum/reagent/drug/nicotine = 13, /datum/reagent/consumable/menthol = 5)
-/obj/item/clothing/mask/cigarette/robust
+/obj/item/cigarette/robust
desc = "A Robust brand cigarette."
-/obj/item/clothing/mask/cigarette/robustgold
+/obj/item/cigarette/robustgold
desc = "A Robust Gold brand cigarette."
list_reagents = list(/datum/reagent/drug/nicotine = 15, /datum/reagent/gold = 3) // Just enough to taste a hint of expensive metal.
-/obj/item/clothing/mask/cigarette/carp
+/obj/item/cigarette/carp
desc = "A Carp Classic brand cigarette. A small label on its side indicates that it does NOT contain carpotoxin."
-/obj/item/clothing/mask/cigarette/carp/Initialize(mapload)
+/obj/item/cigarette/carp/Initialize(mapload)
. = ..()
if(!prob(5))
return
reagents?.add_reagent(/datum/reagent/toxin/carpotoxin , 3) // They lied
-/obj/item/clothing/mask/cigarette/syndicate
+/obj/item/cigarette/syndicate
desc = "An unknown brand cigarette."
chem_volume = 60
smoketime = 2 MINUTES
@@ -521,19 +535,19 @@ CIGARETTE PACKETS ARE IN FANCY.DM
lung_harm = 1.5
list_reagents = list(/datum/reagent/drug/nicotine = 10, /datum/reagent/medicine/omnizine = 15)
-/obj/item/clothing/mask/cigarette/shadyjims
+/obj/item/cigarette/shadyjims
desc = "A Shady Jim's Super Slims cigarette."
lung_harm = 1.5
list_reagents = list(/datum/reagent/drug/nicotine = 15, /datum/reagent/toxin/lipolicide = 4, /datum/reagent/ammonia = 2, /datum/reagent/toxin/plantbgone = 1, /datum/reagent/toxin = 1.5)
-/obj/item/clothing/mask/cigarette/xeno
+/obj/item/cigarette/xeno
desc = "A Xeno Filtered brand cigarette."
lung_harm = 2
list_reagents = list (/datum/reagent/drug/nicotine = 20, /datum/reagent/medicine/regen_jelly = 15, /datum/reagent/drug/krokodil = 4)
// Rollies.
-/obj/item/clothing/mask/cigarette/rollie
+/obj/item/cigarette/rollie
name = "rollie"
desc = "A roll of dried plant matter wrapped in thin paper."
icon_state = "spliffoff"
@@ -546,7 +560,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
list_reagents = null
choke_time_max = 40 SECONDS
-/obj/item/clothing/mask/cigarette/rollie/Initialize(mapload)
+/obj/item/cigarette/rollie/Initialize(mapload)
name = pick(list(
"bifta",
"bifter",
@@ -592,20 +606,20 @@ CIGARETTE PACKETS ARE IN FANCY.DM
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
-/obj/item/clothing/mask/cigarette/rollie/nicotine
+/obj/item/cigarette/rollie/nicotine
list_reagents = list(/datum/reagent/drug/nicotine = 15)
-/obj/item/clothing/mask/cigarette/rollie/trippy
+/obj/item/cigarette/rollie/trippy
list_reagents = list(/datum/reagent/drug/nicotine = 15, /datum/reagent/drug/mushroomhallucinogen = 35)
starts_lit = TRUE
-/obj/item/clothing/mask/cigarette/rollie/cannabis
+/obj/item/cigarette/rollie/cannabis
list_reagents = list(/datum/reagent/drug/cannabis = 15)
-/obj/item/clothing/mask/cigarette/rollie/mindbreaker
+/obj/item/cigarette/rollie/mindbreaker
list_reagents = list(/datum/reagent/toxin/mindbreaker = 35, /datum/reagent/toxin/lipolicide = 15)
-/obj/item/clothing/mask/cigarette/candy
+/obj/item/cigarette/candy
name = "\improper Little Timmy's candy cigarette"
desc = "For all ages*! Doesn't contain any amount of nicotine. Health and safety risks can be read on the tip of the cigarette."
smoketime = 2 MINUTES
@@ -619,7 +633,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
list_reagents = list(/datum/reagent/consumable/sugar = 20)
choke_time_max = 70 SECONDS // This shit really is deadly
-/obj/item/clothing/mask/cigarette/candy/nicotine
+/obj/item/cigarette/candy/nicotine
desc = "For all ages*! Doesn't contain any* amount of nicotine. Health and safety risks can be read on the tip of the cigarette."
type_butt = /obj/item/food/candy_trash/nicotine
list_reagents = list(/datum/reagent/consumable/sugar = 20, /datum/reagent/drug/nicotine = 20) //oh no!
@@ -639,7 +653,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
////////////
// CIGARS //
////////////
-/obj/item/clothing/mask/cigarette/cigar
+/obj/item/cigarette/cigar
name = "cigar"
desc = "A brown roll of tobacco and... well, you're not quite sure. This thing's huge!"
icon_state = "cigaroff"
@@ -655,11 +669,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM
list_reagents = list(/datum/reagent/drug/nicotine = 25)
choke_time_max = 40 SECONDS
-/obj/item/clothing/mask/cigarette/cigar/premium
+/obj/item/cigarette/cigar/premium
name = "premium cigar"
//this is the version that actually spawns in premium cigar cases, the distinction is made so that the smoker quirk can differentiate between the default cigar box and its subtypes
-/obj/item/clothing/mask/cigarette/cigar/cohiba
+/obj/item/cigarette/cigar/cohiba
name = "\improper Cohiba Robusto cigar"
desc = "There's little more you could want from a cigar."
icon_state = "cigar2off"
@@ -669,7 +683,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
chem_volume = 80
list_reagents = list(/datum/reagent/drug/nicotine = 40)
-/obj/item/clothing/mask/cigarette/cigar/havana
+/obj/item/cigarette/cigar/havana
name = "premium Havanian cigar"
desc = "A cigar fit for only the best of the best."
icon_state = "cigar2off"
@@ -682,7 +696,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/cigbutt
name = "cigarette butt"
desc = "A manky old cigarette butt."
- icon = 'icons/obj/clothing/masks.dmi'
+ icon = 'icons/obj/cigarettes.dmi'
icon_state = "cigbutt"
w_class = WEIGHT_CLASS_TINY
throwforce = 0
@@ -696,7 +710,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/////////////////
//SMOKING PIPES//
/////////////////
-/obj/item/clothing/mask/cigarette/pipe
+/obj/item/cigarette/pipe
name = "smoking pipe"
desc = "A pipe, for smoking. Probably made of meerschaum or something."
icon_state = "pipeoff"
@@ -713,15 +727,15 @@ CIGARETTE PACKETS ARE IN FANCY.DM
///name of the stuff packed inside this pipe
var/packeditem
-/obj/item/clothing/mask/cigarette/pipe/Initialize(mapload)
+/obj/item/cigarette/pipe/Initialize(mapload)
. = ..()
update_appearance(UPDATE_NAME)
-/obj/item/clothing/mask/cigarette/pipe/update_name()
+/obj/item/cigarette/pipe/update_name()
. = ..()
name = packeditem ? "[packeditem]-packed [initial(name)]" : "empty [initial(name)]"
-/obj/item/clothing/mask/cigarette/pipe/put_out(mob/user, done_early = FALSE)
+/obj/item/cigarette/pipe/put_out(mob/user, done_early = FALSE)
lit = FALSE
if(done_early)
user.visible_message(span_notice("[user] puts out [src]."), span_notice("You put out [src]."))
@@ -734,7 +748,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
STOP_PROCESSING(SSobj, src)
QDEL_NULL(cig_smoke)
-/obj/item/clothing/mask/cigarette/pipe/attackby(obj/item/thing, mob/user, params)
+/obj/item/cigarette/pipe/attackby(obj/item/thing, mob/user, params)
if(!istype(thing, /obj/item/food/grown))
return ..()
@@ -755,7 +769,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
qdel(to_smoke)
-/obj/item/clothing/mask/cigarette/pipe/attack_self(mob/user)
+/obj/item/cigarette/pipe/attack_self(mob/user)
var/atom/location = drop_location()
if(packeditem && !lit)
to_chat(user, span_notice("You empty [src] onto [location]."))
@@ -767,7 +781,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
return
return ..()
-/obj/item/clothing/mask/cigarette/pipe/cobpipe
+/obj/item/cigarette/pipe/cobpipe
name = "corn cob pipe"
desc = "A nicotine delivery system popularized by folksy backwoodsmen and kept popular in the modern age and beyond by space hipsters. Can be loaded with objects."
icon_state = "cobpipeoff"
@@ -875,6 +889,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
attack_verb_continuous = string_list(list("burns", "singes"))
attack_verb_simple = string_list(list("burn", "singe"))
START_PROCESSING(SSobj, src)
+ if(isliving(loc))
+ var/mob/living/male_model = loc
+ if(male_model.fire_stacks && !(male_model.on_fire))
+ male_model.ignite_mob()
else
hitsound = SFX_SWING_HIT
force = 0
@@ -944,7 +962,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(lit && M.ignite_mob())
message_admins("[ADMIN_LOOKUPFLW(user)] set [key_name_admin(M)] on fire with [src] at [AREACOORD(user)]")
log_game("[key_name(user)] set [key_name(M)] on fire with [src] at [AREACOORD(user)]")
- var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M)
+ var/obj/item/cigarette/cig = help_light_cig(M)
if(!lit || !cig || user.combat_mode)
..()
return
@@ -1092,13 +1110,13 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/rollingpaper/Initialize(mapload)
. = ..()
- AddComponent(/datum/component/customizable_reagent_holder, /obj/item/clothing/mask/cigarette/rollie, CUSTOM_INGREDIENT_ICON_NOCHANGE, ingredient_type=CUSTOM_INGREDIENT_TYPE_DRYABLE, max_ingredients=2)
+ AddComponent(/datum/component/customizable_reagent_holder, /obj/item/cigarette/rollie, CUSTOM_INGREDIENT_ICON_NOCHANGE, ingredient_type=CUSTOM_INGREDIENT_TYPE_DRYABLE, max_ingredients=2)
///////////////
//VAPE NATION//
///////////////
-/obj/item/clothing/mask/vape
+/obj/item/vape
name = "\improper E-Cigarette"
desc = "A classy and highly sophisticated electronic cigarette, for classy and dignified gentlemen. A warning label reads \"Warning: Do not fill with flammable materials.\""//<<< i'd vape to that.
icon_state = "vape"
@@ -1108,6 +1126,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
greyscale_colors = "#2e2e2e"
inhand_icon_state = null
w_class = WEIGHT_CLASS_TINY
+ slot_flags = ITEM_SLOT_MASK
flags_1 = IS_PLAYER_COLORABLE_1
/// The capacity of the vape.
@@ -1121,16 +1140,16 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/// Whether the vape has been overloaded to spread smoke.
var/super = FALSE
-/obj/item/clothing/mask/vape/Initialize(mapload)
+/obj/item/vape/Initialize(mapload)
. = ..()
create_reagents(chem_volume, NO_REACT)
reagents.add_reagent(/datum/reagent/drug/nicotine, 50)
-/obj/item/clothing/mask/vape/suicide_act(mob/living/user)
+/obj/item/vape/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] is puffin hard on dat vape, [user.p_they()] trying to join the vape life on a whole notha plane!"))//it doesn't give you cancer, it is cancer
return (TOXLOSS|OXYLOSS)
-/obj/item/clothing/mask/vape/screwdriver_act(mob/living/user, obj/item/tool)
+/obj/item/vape/screwdriver_act(mob/living/user, obj/item/tool)
if(!screw)
screw = TRUE
to_chat(user, span_notice("You open the cap on [src]."))
@@ -1151,7 +1170,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon_state = initial(icon_state)
set_greyscale(new_config = initial(greyscale_config))
-/obj/item/clothing/mask/vape/multitool_act(mob/living/user, obj/item/tool)
+/obj/item/vape/multitool_act(mob/living/user, obj/item/tool)
. = TRUE
if(screw && !(obj_flags & EMAGGED))//also kinky
if(!super)
@@ -1168,7 +1187,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(screw && (obj_flags & EMAGGED))
to_chat(user, span_warning("[src] can't be modified!"))
-/obj/item/clothing/mask/vape/emag_act(mob/user, obj/item/card/emag/emag_card) // I WON'T REGRET WRITTING THIS, SURLY.
+/obj/item/vape/emag_act(mob/user, obj/item/card/emag/emag_card) // I WON'T REGRET WRITTING THIS, SURLY.
if (!screw)
balloon_alert(user, "open the cap first!")
@@ -1188,12 +1207,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
sp.start()
return TRUE
-/obj/item/clothing/mask/vape/attack_self(mob/user)
+/obj/item/vape/attack_self(mob/user)
if(reagents.total_volume > 0)
to_chat(user, span_notice("You empty [src] of all reagents."))
reagents.clear_reagents()
-/obj/item/clothing/mask/vape/equipped(mob/user, slot)
+/obj/item/vape/equipped(mob/user, slot)
. = ..()
if(!(slot & ITEM_SLOT_MASK))
return
@@ -1206,13 +1225,13 @@ CIGARETTE PACKETS ARE IN FANCY.DM
reagents.flags &= ~(NO_REACT)
START_PROCESSING(SSobj, src)
-/obj/item/clothing/mask/vape/dropped(mob/user)
+/obj/item/vape/dropped(mob/user)
. = ..()
if(user.get_item_by_slot(ITEM_SLOT_MASK) == src)
reagents.flags |= NO_REACT
STOP_PROCESSING(SSobj, src)
-/obj/item/clothing/mask/vape/proc/handle_reagents()
+/obj/item/vape/proc/handle_reagents()
if(!reagents.total_volume)
return
@@ -1235,7 +1254,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(!reagents.trans_to(vaper, REAGENTS_METABOLISM, methods = INGEST, ignore_stomach = TRUE))
reagents.remove_all(REAGENTS_METABOLISM)
-/obj/item/clothing/mask/vape/process(seconds_per_tick)
+/obj/item/vape/process(seconds_per_tick)
var/mob/living/M = loc
if(isliving(loc))
@@ -1274,34 +1293,34 @@ CIGARETTE PACKETS ARE IN FANCY.DM
handle_reagents()
-/obj/item/clothing/mask/vape/red
+/obj/item/vape/red
greyscale_colors = "#A02525"
flags_1 = NONE
-/obj/item/clothing/mask/vape/blue
+/obj/item/vape/blue
greyscale_colors = "#294A98"
flags_1 = NONE
-/obj/item/clothing/mask/vape/purple
+/obj/item/vape/purple
greyscale_colors = "#9900CC"
flags_1 = NONE
-/obj/item/clothing/mask/vape/green
+/obj/item/vape/green
greyscale_colors = "#3D9829"
flags_1 = NONE
-/obj/item/clothing/mask/vape/yellow
+/obj/item/vape/yellow
greyscale_colors = "#DAC20E"
flags_1 = NONE
-/obj/item/clothing/mask/vape/orange
+/obj/item/vape/orange
greyscale_colors = "#da930e"
flags_1 = NONE
-/obj/item/clothing/mask/vape/black
+/obj/item/vape/black
greyscale_colors = "#2e2e2e"
flags_1 = NONE
-/obj/item/clothing/mask/vape/white
+/obj/item/vape/white
greyscale_colors = "#DCDCDC"
flags_1 = NONE
diff --git a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm
index 6666a87f09cce..a36fa9d2c37d1 100644
--- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm
@@ -340,9 +340,9 @@
build_path = /obj/machinery/power/smes
req_components = list(
/obj/item/stack/cable_coil = 5,
- /obj/item/stock_parts/cell = 5,
+ /obj/item/stock_parts/power_store/battery = 5,
/datum/stock_part/capacitor = 1)
- def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high/empty)
+ def_components = list(/obj/item/stock_parts/power_store/battery = /obj/item/stock_parts/power_store/battery/high/empty)
/obj/item/circuitboard/machine/techfab/department/engineering
name = "\improper Departmental Techfab - Engineering"
@@ -350,7 +350,7 @@
build_path = /obj/machinery/rnd/production/techfab/department/engineering
/obj/item/circuitboard/machine/smes/super
- def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/super/empty)
+ def_components = list(/obj/item/stock_parts/power_store/battery = /obj/item/stock_parts/power_store/battery/super/empty)
/obj/item/circuitboard/machine/thermomachine
name = "Thermomachine"
@@ -723,6 +723,22 @@
/datum/stock_part/micro_laser = 1,
/datum/stock_part/servo = 1,)
+/obj/item/circuitboard/machine/bookbinder
+ name = "Book Binder"
+ greyscale_colors = CIRCUIT_COLOR_GENERIC
+ build_path = /obj/machinery/bookbinder
+ req_components = list(
+ /datum/stock_part/servo = 1,
+ )
+
+/obj/item/circuitboard/machine/libraryscanner
+ name = "Book Scanner"
+ greyscale_colors = CIRCUIT_COLOR_GENERIC
+ build_path = /obj/machinery/libraryscanner
+ req_components = list(
+ /datum/stock_part/scanning_module = 1,
+ )
+
//Medical
/obj/item/circuitboard/machine/chem_dispenser
@@ -734,8 +750,8 @@
/datum/stock_part/capacitor = 1,
/datum/stock_part/servo = 1,
/obj/item/stack/sheet/glass = 1,
- /obj/item/stock_parts/cell = 1)
- def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
+ /obj/item/stock_parts/power_store/cell = 1)
+ def_components = list(/obj/item/stock_parts/power_store/cell = /obj/item/stock_parts/power_store/cell/high)
needs_anchored = FALSE
/obj/item/circuitboard/machine/chem_dispenser/fullupgrade
@@ -746,7 +762,7 @@
/datum/stock_part/capacitor/tier4 = 2,
/datum/stock_part/servo/tier4 = 2,
/obj/item/stack/sheet/glass = 1,
- /obj/item/stock_parts/cell/bluespace = 1,
+ /obj/item/stock_parts/power_store/cell/bluespace = 1,
)
/obj/item/circuitboard/machine/chem_dispenser/mutagensaltpeter
@@ -757,7 +773,7 @@
/datum/stock_part/capacitor/tier4 = 2,
/datum/stock_part/servo/tier4 = 2,
/obj/item/stack/sheet/glass = 1,
- /obj/item/stock_parts/cell/bluespace = 1,
+ /obj/item/stock_parts/power_store/cell/bluespace = 1,
)
/obj/item/circuitboard/machine/chem_dispenser/abductor
@@ -771,7 +787,7 @@
/datum/stock_part/capacitor/tier4 = 2,
/datum/stock_part/servo/tier4 = 2,
/obj/item/stack/sheet/glass = 1,
- /obj/item/stock_parts/cell/bluespace = 1,
+ /obj/item/stock_parts/power_store/cell/bluespace = 1,
)
needs_anchored = FALSE
@@ -951,9 +967,9 @@
build_path = /obj/machinery/recharge_station
req_components = list(
/datum/stock_part/capacitor = 2,
- /obj/item/stock_parts/cell = 1,
+ /obj/item/stock_parts/power_store/cell = 1,
/datum/stock_part/servo = 1)
- def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
+ def_components = list(/obj/item/stock_parts/power_store/cell = /obj/item/stock_parts/power_store/cell/high)
/obj/item/circuitboard/machine/destructive_analyzer
name = "Destructive Analyzer"
@@ -1150,7 +1166,7 @@
/datum/stock_part/capacitor/tier4 = 2,
/datum/stock_part/servo/tier4 = 2,
/obj/item/stack/sheet/glass = 1,
- /obj/item/stock_parts/cell/bluespace = 1,
+ /obj/item/stock_parts/power_store/cell/bluespace = 1,
)
/obj/item/circuitboard/machine/chem_dispenser/drinks/beer
@@ -1165,7 +1181,7 @@
/datum/stock_part/capacitor/tier4 = 2,
/datum/stock_part/servo/tier4 = 2,
/obj/item/stack/sheet/glass = 1,
- /obj/item/stock_parts/cell/bluespace = 1,
+ /obj/item/stock_parts/power_store/cell/bluespace = 1,
)
/obj/item/circuitboard/machine/chem_master/condi
@@ -1438,7 +1454,7 @@
req_components = list(
/datum/stock_part/capacitor = 1,
/datum/stock_part/micro_laser = 1,
- /obj/item/stock_parts/cell/infinite/abductor = 1)
+ /obj/item/stock_parts/power_store/cell/infinite/abductor = 1)
def_components = list(
/datum/stock_part/capacitor = /datum/stock_part/capacitor/tier4,
/datum/stock_part/micro_laser = /datum/stock_part/micro_laser/tier4)
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 03618551c0ca2..f50909eee12c9 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -420,16 +420,19 @@
var/static/regex/crayon_regex = new /regex(@"[^\w!?,.=&%#+/\-]", "ig")
return LOWER_TEXT(crayon_regex.Replace(text, ""))
-/// Attempts to color the target. Returns how many charges were used.
+/// Is this a valid object for use_on to run on?
+/obj/item/toy/crayon/proc/can_use_on(atom/target, mob/user, list/modifiers)
+ if(!isturf(target) && !istype(target, /obj/effect/decal/cleanable))
+ return FALSE
+ return TRUE
+
+/// Attempts to color the target.
/obj/item/toy/crayon/proc/use_on(atom/target, mob/user, list/modifiers)
var/static/list/punctuation = list("!","?",".",",","/","+","-","=","%","#","&")
if(istype(target, /obj/effect/decal/cleanable))
target = target.loc
- if(!isturf(target))
- return
-
if(!isValidSurface(target))
target.balloon_alert(user, "can't use there!")
return
@@ -566,13 +569,16 @@
for(var/turf/draw_turf as anything in affected_turfs)
reagents.expose(draw_turf, methods = TOUCH, volume_modifier = volume_multiplier)
check_empty(user)
+ return
/obj/item/toy/crayon/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
if (!check_allowed_items(interacting_with))
return NONE
- use_on(interacting_with, user, modifiers)
- return ITEM_INTERACT_BLOCKING
+ if(can_use_on(interacting_with, user, modifiers))
+ use_on(interacting_with, user, modifiers)
+ return ITEM_INTERACT_BLOCKING
+ return NONE
/obj/item/toy/crayon/get_writing_implement_details()
return list(
@@ -825,6 +831,16 @@
. += "It is empty."
. += span_notice("Alt-click [src] to [ is_capped ? "take the cap off" : "put the cap on"]. Right-click a colored object to match its existing color.")
+
+/obj/item/toy/crayon/spraycan/can_use_on(atom/target, mob/user, list/modifiers)
+ if(iscarbon(target))
+ return TRUE
+ if(ismob(target) && (HAS_TRAIT(target, TRAIT_SPRAY_PAINTABLE)))
+ return TRUE
+ if(isobj(target) && !(target.flags_1 & UNPAINTABLE_1))
+ return TRUE
+ return ..()
+
/obj/item/toy/crayon/spraycan/use_on(atom/target, mob/user, list/modifiers)
if(is_capped)
balloon_alert(user, "take the cap off first!")
@@ -857,7 +873,7 @@
else if(actually_paints && target.is_atom_colour(paint_color, min_priority_index = WASHABLE_COLOUR_PRIORITY))
balloon_alert(user, "[target.p_theyre()] already that color!")
- return FALSE
+ return
if(ismob(target) && (HAS_TRAIT(target, TRAIT_SPRAY_PAINTABLE)))
if(actually_paints)
@@ -878,7 +894,7 @@
if (color_is_dark && !(target.flags_1 & ALLOW_DARK_PAINTS_1))
to_chat(user, span_warning("A color that dark on an object like this? Surely not..."))
- return FALSE
+ return
if(istype(target, /obj/item/pipe))
if(GLOB.pipe_color_name.Find(paint_color))
@@ -888,7 +904,7 @@
balloon_alert(user, "painted in [GLOB.pipe_color_name[paint_color]] color")
else
balloon_alert(user, "invalid pipe color!")
- return FALSE
+ return
else if(istype(target, /obj/machinery/atmospherics))
if(GLOB.pipe_color_name.Find(paint_color))
var/obj/machinery/atmospherics/target_pipe = target
@@ -896,7 +912,7 @@
balloon_alert(user, "painted in [GLOB.pipe_color_name[paint_color]] color")
else
balloon_alert(user, "invalid pipe color!")
- return FALSE
+ return
else
target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY)
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index cbac185f675fe..871892558b9dc 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -28,7 +28,7 @@
/// If the cell can be removed via screwdriver
var/cell_removable = TRUE
var/obj/item/shockpaddles/paddles
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
/// If true, revive through space suits, allow for combat shocking
var/combat = FALSE
/// How long does it take to recharge
@@ -111,7 +111,7 @@
/obj/item/defibrillator/CheckParts(list/parts_list)
..()
- cell = locate(/obj/item/stock_parts/cell) in contents
+ cell = locate(/obj/item/stock_parts/power_store) in contents
update_power()
/obj/item/defibrillator/ui_action_click()
@@ -158,8 +158,8 @@
/obj/item/defibrillator/attackby(obj/item/W, mob/user, params)
if(W == paddles)
toggle_paddles()
- else if(istype(W, /obj/item/stock_parts/cell))
- var/obj/item/stock_parts/cell/C = W
+ else if(istype(W, /obj/item/stock_parts/power_store/cell))
+ var/obj/item/stock_parts/power_store/cell/C = W
if(cell)
to_chat(user, span_warning("[src] already has a cell!"))
else
@@ -311,7 +311,7 @@
/obj/item/defibrillator/compact/combat/loaded/Initialize(mapload)
. = ..()
- cell = new /obj/item/stock_parts/cell/infinite(src)
+ cell = new /obj/item/stock_parts/power_store/cell/infinite(src)
update_power()
/obj/item/defibrillator/compact/combat/loaded/attackby(obj/item/W, mob/user, params)
diff --git a/code/game/objects/items/devices/beacon.dm b/code/game/objects/items/devices/beacon.dm
index ccd8bb413e31e..a7c34a92c0df7 100644
--- a/code/game/objects/items/devices/beacon.dm
+++ b/code/game/objects/items/devices/beacon.dm
@@ -48,7 +48,7 @@
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
/obj/item/beacon/attackby(obj/item/W, mob/user)
- if(istype(W, /obj/item/pen)) // needed for things that use custom names like the locator
+ if(IS_WRITING_UTENSIL(W)) // needed for things that use custom names like the locator
var/new_name = tgui_input_text(user, "What would you like the name to be?", "Beacon", max_length = MAX_NAME_LEN)
if(!user.can_perform_action(src))
return
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 99e7c43235ab9..67ec498a1fbc6 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -170,7 +170,7 @@
organ_list += (O.gender == "plural" ? O.name : "\an [O.name]")
var/pill_count = 0
- for(var/datum/action/item_action/hands_free/activate_pill/AP in M.actions)
+ for(var/datum/action/item_action/activate_pill/AP in M.actions)
pill_count++
if(M == user)//if we're looking on our own mouth
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index 1e47fd8044d66..554db2beb5399 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -80,11 +80,11 @@
diode = null
return TRUE
-/obj/item/laser_pointer/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/item/laser_pointer/tool_act(mob/living/user, obj/item/tool, list/modifiers)
if(isnull(crystal_lens))
- return NONE
+ return ..()
if(tool_behaviour != TOOL_WIRECUTTER && tool_behaviour != TOOL_HEMOSTAT)
- return NONE
+ return ..()
tool.play_tool_sound(src)
balloon_alert(user, "removed crystal lens")
crystal_lens.forceMove(drop_location())
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index c3203a0ace7a9..598c16c9041a8 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -211,6 +211,7 @@
it explodes properly when it gets a signal (and it does).
*/
/obj/item/transfer_valve/proc/toggle_valve(obj/item/tank/target, change_volume = TRUE)
+ playsound(src, 'sound/effects/valve_opening.ogg', 50)
if(!valve_open && tank_one && tank_two)
var/turf/bombturf = get_turf(src)
diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm
index 0dc20c6dbb4d9..dde01baac03ee 100644
--- a/code/game/objects/items/dna_injector.dm
+++ b/code/game/objects/items/dna_injector.dm
@@ -163,7 +163,7 @@
/obj/item/dnainjector/activator
name = "\improper DNA activator"
desc = "Activates the current mutation on injection, if the subject has it."
- var/doitanyway = FALSE
+ var/force_mutate = FALSE
var/research = FALSE //Set to true to get expended and filled injectors for chromosomes
var/filled = FALSE
var/crispr_charge = FALSE // Look for viruses, look at symptoms, if research and Dormant DNA Activator or Viral Evolutionary Acceleration, set to true
@@ -176,7 +176,7 @@
if(istype(added_mutation, /datum/mutation/human))
mutation = added_mutation.type
if(!target.dna.activate_mutation(added_mutation))
- if(doitanyway)
+ if(force_mutate)
target.dna.add_mutation(added_mutation, MUT_EXTRA)
else if(research && target.client)
filled = TRUE
@@ -184,7 +184,7 @@
for(var/datum/symptom/symp in disease.symptoms)
if((symp.type == /datum/symptom/genetic_mutation) || (symp.type == /datum/symptom/viralevolution))
crispr_charge = TRUE
- log_combat(user, target, "[!doitanyway ? "failed to inject" : "injected"]", "[src] ([mutation])[crispr_charge ? " with CRISPR charge" : ""]")
+ log_combat(user, target, "[!force_mutate ? "failed to inject" : "injected"]", "[src] ([mutation])[crispr_charge ? " with CRISPR charge" : ""]")
return TRUE
/// DNA INJECTORS
@@ -426,12 +426,12 @@
/obj/item/dnainjector/pressuremut
name = "\improper DNA injector (Pressure Adaptation)"
desc = "Gives you fire."
- add_mutations = list(/datum/mutation/human/pressure_adaptation)
+ add_mutations = list(/datum/mutation/human/adaptation/pressure)
/obj/item/dnainjector/antipressure
name = "\improper DNA injector (Anti-Pressure Adaptation)"
desc = "Cures fire."
- remove_mutations = list(/datum/mutation/human/pressure_adaptation)
+ remove_mutations = list(/datum/mutation/human/adaptation/pressure)
/obj/item/dnainjector/radioactive
name = "\improper DNA injector (Radioactive)"
@@ -500,12 +500,12 @@
/obj/item/dnainjector/firemut
name = "\improper DNA injector (Temp Adaptation)"
desc = "Gives you fire."
- add_mutations = list(/datum/mutation/human/temperature_adaptation)
+ add_mutations = list(/datum/mutation/human/adaptation/thermal)
/obj/item/dnainjector/antifire
name = "\improper DNA injector (Anti-Temp Adaptation)"
desc = "Cures fire."
- remove_mutations = list(/datum/mutation/human/temperature_adaptation)
+ remove_mutations = list(/datum/mutation/human/adaptation/thermal)
/obj/item/dnainjector/thermal
name = "\improper DNA injector (Thermal Vision)"
diff --git a/code/game/objects/items/dna_probe.dm b/code/game/objects/items/dna_probe.dm
index f299a9254f80e..ee6a32766522f 100644
--- a/code/game/objects/items/dna_probe.dm
+++ b/code/game/objects/items/dna_probe.dm
@@ -31,19 +31,46 @@
var/datum/weakref/dna_vault_ref
/obj/item/dna_probe/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
- if(istype(interacting_with, /obj/machinery/dna_vault) && !dna_vault_ref?.resolve())
- try_linking_vault(interacting_with, user)
- else
- scan_dna(interacting_with, user)
+ if(istype(interacting_with, /obj/machinery/dna_vault))
+ if(dna_vault_ref?.resolve())
+ // Weirdly we can upload to any existing DNA vault so long as we're linked to any other existing DNA vault.
+ return try_upload_dna(interacting_with, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING
+ else
+ return try_linking_vault(interacting_with, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING
+
+ scan_dna(interacting_with, user)
return ITEM_INTERACT_BLOCKING
-/obj/item/dna_probe/proc/try_linking_vault(atom/target, mob/user)
+/obj/item/dna_probe/proc/try_linking_vault(obj/machinery/dna_vault/target, mob/user)
var/obj/machinery/dna_vault/our_vault = dna_vault_ref?.resolve()
if(!our_vault)
dna_vault_ref = WEAKREF(target)//linking the dna vault with the probe
balloon_alert(user, "vault linked")
playsound(src, 'sound/machines/terminal_success.ogg', 50)
- return
+ return TRUE
+ return FALSE
+
+/obj/item/dna_probe/proc/try_upload_dna(obj/machinery/dna_vault/target, mob/user)
+ var/uploaded = 0
+ var/plant_dna_length = length(stored_dna_plants)
+ var/human_dna_length = length(stored_dna_human)
+ var/animal_dna_length = length(stored_dna_animal)
+ if(plant_dna_length)
+ uploaded += plant_dna_length
+ target.plant_dna += stored_dna_plants
+ stored_dna_plants.Cut()
+ if(human_dna_length)
+ uploaded += human_dna_length
+ target.human_dna += stored_dna_human
+ stored_dna_human.Cut()
+ if(animal_dna_length)
+ uploaded += animal_dna_length
+ target.animal_dna += stored_dna_animal
+ stored_dna_animal.Cut()
+ target.check_goal()
+ playsound(target, 'sound/misc/compiler-stage1.ogg', 50)
+ to_chat(user, span_notice("[uploaded] new datapoints uploaded."))
+ return uploaded
/obj/item/dna_probe/proc/scan_dna(atom/target, mob/user)
var/obj/machinery/dna_vault/our_vault = dna_vault_ref?.resolve()
diff --git a/code/game/objects/items/emags.dm b/code/game/objects/items/emags.dm
index 89efdd35b97ac..74472995b688e 100644
--- a/code/game/objects/items/emags.dm
+++ b/code/game/objects/items/emags.dm
@@ -22,6 +22,62 @@
user.visible_message(span_notice("[user] shows you: [icon2html(src, viewers(user))] [name]."), span_notice("You show [src]."))
add_fingerprint(user)
+/obj/item/card/emag/emag_act(mob/user, obj/item/card/emag/emag_card)
+ if(isnull(user) || !istype(emag_card))
+ return FALSE
+ var/emag_count = 0
+ for(var/obj/item/card/emag/emag in get_all_contents() + emag_card.get_all_contents()) // This is including itself
+ emag_count++
+ if(emag_count > 6) // 1 uplink's worth is the limit
+ to_chat(user, span_warning("Nope, lesson learned. No more."))
+ return FALSE
+ if(emag_card.loc != loc) // Both have to be in your hand (or TK shenanigans)
+ return FALSE
+ if(!user.transferItemToLoc(emag_card, src, silent = FALSE))
+ return FALSE
+
+ user.visible_message(
+ span_notice("[user] holds [emag_card] to [src], getting the two cards stuck together!"),
+ span_notice("As you hold [emag_card] to [src], [emag_card.p_their()] magnets attract to one another, \
+ and [emag_card.p_they()] become stuck together!"),
+ visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE,
+ )
+ playsound(src, 'sound/effects/bang.ogg', 33, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ addtimer(CALLBACK(src, PROC_REF(contemplation_period), user), 2 SECONDS, TIMER_DELETE_ME)
+ emag_card.vis_flags |= VIS_INHERIT_ID|VIS_INHERIT_PLANE
+ vis_contents += emag_card
+ name = initial(name)
+ desc = initial(desc)
+ var/list/all_emags = get_all_contents_type(/obj/item/card/emag) - src
+ for(var/i in 1 to length(all_emags))
+ var/obj/item/card/emag/other_emag = all_emags[i]
+ other_emag.pixel_x = pixel_x + (4 * i)
+ other_emag.pixel_y = pixel_y + (4 * i)
+ other_emag.layer = layer - (0.01 * i)
+ name += "-[initial(other_emag.name)]"
+ desc += " There seems to be another card stuck to it...pretty soundly."
+ return TRUE
+
+/obj/item/card/emag/proc/contemplation_period(mob/user)
+ if(QDELETED(user))
+ return
+ if(QDELETED(src))
+ to_chat(user, span_notice("Oh, well."))
+ else
+ to_chat(user, span_warning("Well, shit. Those are never coming apart now."))
+
+/obj/item/card/emag/Exited(atom/movable/gone, direction)
+ . = ..()
+ if(istype(gone, /obj/item/card/emag))
+ // This is here so if(when) admins fish it out of contents it doesn't become glitchy
+ gone.layer = initial(gone.layer)
+ gone.vis_flags = initial(gone.vis_flags)
+ vis_contents -= gone
+ name = initial(name)
+ desc = initial(desc)
+ gone.name = initial(name)
+ gone.desc = initial(desc)
+
/obj/item/card/emag/bluespace
name = "bluespace cryptographic sequencer"
desc = "It's a blue card with a magnetic strip attached to some circuitry. It appears to have some sort of transmitter attached to it."
@@ -34,11 +90,14 @@
icon_state = "hack_o_lantern"
/obj/item/card/emagfake
- desc = "It's a card with a magnetic strip attached to some circuitry. Closer inspection shows that this card is a poorly made replica, with a \"Donk Co.\" logo stamped on the back."
- name = "cryptographic sequencer"
- icon_state = "emag"
+ name = /obj/item/card/emag::name
+ desc = /obj/item/card/emag::desc + " Closer inspection shows that this card is a poorly made replica, with a \"Donk Co.\" logo stamped on the back."
+ icon = /obj/item/card/emag::icon
+ icon_state = /obj/item/card/emag::icon_state
+ worn_icon_state = /obj/item/card/emag::worn_icon_state
slot_flags = ITEM_SLOT_ID
- worn_icon_state = "emag"
+ /// Whether we are exploding
+ var/exploding = FALSE
/obj/item/card/emagfake/attack_self(mob/user) //for assistants with balls of plasteel
if(Adjacent(user))
@@ -46,9 +105,34 @@
add_fingerprint(user)
/obj/item/card/emagfake/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
- playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE)
+ if(exploding)
+ playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE, frequency = 2)
+ else if(obj_flags & EMAGGED)
+ log_bomber(user, "triggered", src, "(rigged/emagged)")
+ visible_message(span_boldwarning("[src] begins to heat up!"))
+ playsound(src, 'sound/items/bikehorn.ogg', 100, TRUE, frequency = 0.25)
+ addtimer(CALLBACK(src, PROC_REF(blow_up)), 1 SECONDS, TIMER_DELETE_ME)
+ exploding = TRUE
+ else
+ playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE)
return ITEM_INTERACT_SKIP_TO_ATTACK // So it does the attack animation.
+/obj/item/card/emagfake/proc/blow_up()
+ visible_message(span_boldwarning("[src] explodes!"))
+ explosion(src, light_impact_range = 1, explosion_cause = src)
+ qdel(src)
+
+/obj/item/card/emagfake/emag_act(mob/user, obj/item/card/emag/emag_card)
+ if(obj_flags & EMAGGED)
+ return FALSE
+ playsound(src, SFX_SPARKS, 50, TRUE, SILENCED_SOUND_EXTRARANGE)
+ desc = /obj/item/card/emag::desc
+ obj_flags |= EMAGGED
+ if(user)
+ balloon_alert(user, "rigged to blow")
+ log_bomber(user, "rigged to blow", src, "(emagging)")
+ return TRUE
+
/obj/item/card/emag/Initialize(mapload)
. = ..()
type_blacklist = list(typesof(/obj/machinery/door/airlock) + typesof(/obj/machinery/door/window/) + typesof(/obj/machinery/door/firedoor) - typesof(/obj/machinery/door/airlock/tram)) //list of all typepaths that require a specialized emag to hack.
diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm
index be47d7009053b..ac309e275d77c 100644
--- a/code/game/objects/items/extinguisher.dm
+++ b/code/game/objects/items/extinguisher.dm
@@ -32,7 +32,11 @@
/// Can we refill this at a water tank?
var/refilling = FALSE
/// What tank we need to refill this.
- var/tanktype = /obj/structure/reagent_dispensers/watertank
+ var/tanktypes = list(
+ /obj/structure/reagent_dispensers/watertank,
+ /obj/structure/reagent_dispensers/plumbed,
+ /obj/structure/reagent_dispensers/water_cooler,
+ )
/// something that should be replaced with base_icon_state
var/sprite_name = "fire_extinguisher"
/// Maximum distance launched water will travel.
@@ -131,7 +135,10 @@
tank_holder_icon_state = "holder_foam_extinguisher"
dog_fashion = null
chem = /datum/reagent/firefighting_foam
- tanktype = /obj/structure/reagent_dispensers/foamtank
+ tanktypes = list(
+ /obj/structure/reagent_dispensers/foamtank,
+ /obj/structure/reagent_dispensers/plumbed,
+ )
sprite_name = "foam_extinguisher"
precision = TRUE
max_water = 100
@@ -178,10 +185,14 @@
. += span_notice("Alt-click to empty it.")
/obj/item/extinguisher/proc/AttemptRefill(atom/target, mob/user)
- if(istype(target, tanktype) && target.Adjacent(user))
+ if(is_type_in_list(target, tanktypes) && target.Adjacent(user))
if(reagents.total_volume == reagents.maximum_volume)
balloon_alert(user, "already full!")
return TRUE
+ // Make sure we're refilling with the proper chem.
+ if(!(target.reagents.has_reagent(chem)))
+ balloon_alert(user, "can't refill with this liquid!")
+ return TRUE
var/obj/structure/reagent_dispensers/W = target //will it work?
var/transferred = W.reagents.trans_to(src, max_water, transferred_by = user)
if(transferred > 0)
@@ -305,5 +316,8 @@
name = "fire extender"
desc = "A traditional red fire extinguisher. Made in Britain... wait, what?"
chem = /datum/reagent/fuel
- tanktype = /obj/structure/reagent_dispensers/fueltank
+ tanktypes = list(
+ /obj/structure/reagent_dispensers/fueltank,
+ /obj/structure/reagent_dispensers/plumbed
+ )
cooling_power = 0
diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm
index 0e598c6820296..31ac87c0ff690 100644
--- a/code/game/objects/items/food/misc.dm
+++ b/code/game/objects/items/food/misc.dm
@@ -184,7 +184,7 @@
/obj/item/food/melonfruitbowl
name = "melon fruit bowl"
- desc = "For people who wants edible fruit bowls."
+ desc = "For people who want to experience an explosion of flavour."
icon_state = "melonfruitbowl"
food_reagents = list(
/datum/reagent/consumable/nutriment = 6,
diff --git a/code/game/objects/items/food/pizza.dm b/code/game/objects/items/food/pizza.dm
index 834484872d650..71dd87af8e183 100644
--- a/code/game/objects/items/food/pizza.dm
+++ b/code/game/objects/items/food/pizza.dm
@@ -127,6 +127,13 @@
foodtypes = GRAIN | VEGETABLES | DAIRY | MEAT
crafting_complexity = FOOD_COMPLEXITY_3
+/obj/item/food/pizzaslice/meat/pizzeria //Reward for pizzeria bitrunning domain
+ name = "pizzeria meatpizza slice"
+ desc = "An ostensibly nutritious slice of meatpizza from a long-closed pizzeria."
+ food_reagents = null
+ tastes = list("crust" = 1, "ketchup" = 1, "'cheese'" = 1, "mystery meat" = 1, "glue" = 1)
+ foodtypes = null
+
/obj/item/food/pizza/mushroom
name = "mushroom pizza"
desc = "Very special pizza."
diff --git a/code/game/objects/items/food/snacks.dm b/code/game/objects/items/food/snacks.dm
index 1c3cb7736cec0..cb64c6df52204 100644
--- a/code/game/objects/items/food/snacks.dm
+++ b/code/game/objects/items/food/snacks.dm
@@ -157,7 +157,7 @@
/obj/item/food/candy_trash
name = "candy cigarette butt"
- icon = 'icons/obj/clothing/masks.dmi'
+ icon = 'icons/obj/cigarettes.dmi'
icon_state = "candybum"
desc = "The leftover from a smoked-out candy cigarette. Can be eaten!"
food_reagents = list(
diff --git a/code/game/objects/items/grenades/_grenade.dm b/code/game/objects/items/grenades/_grenade.dm
index 5deb833b1f234..ec16b4c22fe95 100644
--- a/code/game/objects/items/grenades/_grenade.dm
+++ b/code/game/objects/items/grenades/_grenade.dm
@@ -16,7 +16,6 @@
flags_1 = PREVENT_CONTENTS_EXPLOSION_1 // We detonate upon being exploded.
obj_flags = CONDUCTS_ELECTRICITY
slot_flags = ITEM_SLOT_BELT
- resistance_flags = FLAMMABLE
max_integrity = 40
/// Bitfields which prevent the grenade from detonating if set. Includes ([GRENADE_DUD]|[GRENADE_USED])
var/dud_flags = NONE
diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm
index ffcb5d1857cda..d3e8bdd0ad88d 100644
--- a/code/game/objects/items/handcuffs.dm
+++ b/code/game/objects/items/handcuffs.dm
@@ -523,6 +523,7 @@
/obj/item/restraints/legcuffs/beartrap/energy/cyborg
breakouttime = 2 SECONDS // Cyborgs shouldn't have a strong restraint
+ slowdown = 3
/obj/item/restraints/legcuffs/bola
name = "bola"
diff --git a/code/game/objects/items/holosign_creator.dm b/code/game/objects/items/holosign_creator.dm
index ff4d0260c4f35..926131151e92b 100644
--- a/code/game/objects/items/holosign_creator.dm
+++ b/code/game/objects/items/holosign_creator.dm
@@ -26,8 +26,8 @@
AddElement(/datum/element/openspace_item_click_handler)
RegisterSignal(src, COMSIG_OBJ_PAINTED, TYPE_PROC_REF(/obj/item/holosign_creator, on_color_change))
-/obj/item/holosign_creator/handle_openspace_click(turf/target, mob/user, click_parameters)
- interact_with_atom(target, user, click_parameters)
+/obj/item/holosign_creator/handle_openspace_click(turf/target, mob/user, list/modifiers)
+ interact_with_atom(target, user, modifiers)
/obj/item/holosign_creator/examine(mob/user)
. = ..()
diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm
index 2695529593f89..ffef74de3c1cc 100644
--- a/code/game/objects/items/implants/implantcase.dm
+++ b/code/game/objects/items/implants/implantcase.dm
@@ -36,7 +36,7 @@
return ..()
/obj/item/implantcase/attackby(obj/item/used_item, mob/living/user, params)
- if(istype(used_item, /obj/item/pen))
+ if(IS_WRITING_UTENSIL(used_item))
if(!user.can_write(used_item))
return
var/new_name = tgui_input_text(user, "What would you like the label to be?", name, max_length = MAX_NAME_LEN)
diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm
index a5242e292a13e..1f462527d530f 100644
--- a/code/game/objects/items/implants/implanter.dm
+++ b/code/game/objects/items/implants/implanter.dm
@@ -45,7 +45,7 @@
to_chat(user, span_warning("[src] fails to implant [target]."))
/obj/item/implanter/attackby(obj/item/I, mob/living/user, params)
- if(!istype(I, /obj/item/pen))
+ if(IS_WRITING_UTENSIL(I))
return ..()
if(!user.can_write(I))
return
diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm
index 086b965e1ac41..d74bb7aa8d10e 100644
--- a/code/game/objects/items/inducer.dm
+++ b/code/game/objects/items/inducer.dm
@@ -1,26 +1,28 @@
/obj/item/inducer
name = "inducer"
- desc = "A tool for inductively charging internal power cells."
+ desc = "A tool for inductively charging internal power cells and batteries."
icon = 'icons/obj/tools.dmi'
icon_state = "inducer-engi"
inhand_icon_state = "inducer-engi"
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
force = 7
- var/powertransfer = STANDARD_CELL_CHARGE
+ /// Multiplier that determines the speed at which this inducer works at.
+ var/power_transfer_multiplier = 1
var/opened = FALSE
- var/cell_type = /obj/item/stock_parts/cell/high
- var/obj/item/stock_parts/cell/cell
+ var/cell_type = /obj/item/stock_parts/power_store/battery/high
+ var/obj/item/stock_parts/power_store/powerdevice
var/recharging = FALSE
/obj/item/inducer/Initialize(mapload)
. = ..()
- if(!cell && cell_type)
- cell = new cell_type
+ if(!powerdevice && cell_type)
+ powerdevice = new cell_type
-/obj/item/inducer/proc/induce(obj/item/stock_parts/cell/target, coefficient)
- var/obj/item/stock_parts/cell/our_cell = get_cell()
- var/totransfer = min(our_cell.charge, (powertransfer * coefficient))
+/obj/item/inducer/proc/induce(obj/item/stock_parts/power_store/target, coefficient)
+ var/obj/item/stock_parts/power_store/our_cell = get_cell()
+ var/rating_base = target.rating_base
+ var/totransfer = min(our_cell.charge, (rating_base * coefficient * power_transfer_multiplier))
var/transferred = target.give(totransfer)
our_cell.use(transferred)
@@ -28,11 +30,11 @@
target.update_appearance()
/obj/item/inducer/get_cell()
- return cell
+ return powerdevice
/obj/item/inducer/emp_act(severity)
. = ..()
- var/obj/item/stock_parts/cell/our_cell = get_cell()
+ var/obj/item/stock_parts/power_store/our_cell = get_cell()
if(!isnull(our_cell) && !(. & EMP_PROTECT_CONTENTS))
our_cell.emp_act(severity)
@@ -53,7 +55,7 @@
to_chat(user, span_warning("You don't have the dexterity to use [src]!"))
return TRUE
- var/obj/item/stock_parts/cell/our_cell = get_cell()
+ var/obj/item/stock_parts/power_store/our_cell = get_cell()
if(isnull(our_cell))
balloon_alert(user, "no cell installed!")
@@ -79,14 +81,14 @@
return
/obj/item/inducer/attackby(obj/item/used_item, mob/user)
- if(istype(used_item, /obj/item/stock_parts/cell))
+ if(istype(used_item, /obj/item/stock_parts/power_store))
if(opened)
- var/obj/item/stock_parts/cell/our_cell = get_cell()
+ var/obj/item/stock_parts/power_store/our_cell = get_cell()
if(isnull(our_cell))
if(!user.transferItemToLoc(used_item, src))
return
to_chat(user, span_notice("You insert [used_item] into [src]."))
- cell = used_item
+ powerdevice = used_item
update_appearance()
return
else
@@ -108,8 +110,8 @@
return TRUE
recharging = TRUE
- var/obj/item/stock_parts/cell/our_cell = get_cell()
- var/obj/item/stock_parts/cell/target_cell = target.get_cell()
+ var/obj/item/stock_parts/power_store/our_cell = get_cell()
+ var/obj/item/stock_parts/power_store/target_cell = target.get_cell()
var/obj/target_as_object = target
var/coefficient = 1
@@ -156,17 +158,17 @@
/obj/item/inducer/attack_self(mob/user)
- if(opened && cell)
- user.visible_message(span_notice("[user] removes [cell] from [src]!"), span_notice("You remove [cell]."))
- cell.update_appearance()
- user.put_in_hands(cell)
- cell = null
+ if(opened && powerdevice)
+ user.visible_message(span_notice("[user] removes [powerdevice] from [src]!"), span_notice("You remove [powerdevice]."))
+ powerdevice.update_appearance()
+ user.put_in_hands(powerdevice)
+ powerdevice = null
update_appearance()
/obj/item/inducer/examine(mob/living/user)
. = ..()
- var/obj/item/stock_parts/cell/our_cell = get_cell()
+ var/obj/item/stock_parts/power_store/our_cell = get_cell()
if(!isnull(our_cell))
. += span_notice("Its display shows: [display_energy(our_cell.charge)].")
else
@@ -185,7 +187,7 @@
opened = TRUE
/obj/item/inducer/orderable
- cell_type = /obj/item/stock_parts/cell/inducer_supply
+ cell_type = /obj/item/stock_parts/power_store/cell/inducer_supply
opened = FALSE
/obj/item/inducer/sci
@@ -203,5 +205,5 @@
icon_state = "inducer-syndi"
inhand_icon_state = "inducer-syndi"
desc = "A tool for inductively charging internal power cells. This one has a suspicious colour scheme, and seems to be rigged to transfer charge at a much faster rate."
- powertransfer = 2 * STANDARD_CELL_CHARGE
- cell_type = /obj/item/stock_parts/cell/super
+ power_transfer_multiplier = 2 // 2x the base speed
+ cell_type = /obj/item/stock_parts/power_store/cell/super
diff --git a/code/game/objects/items/inspector.dm b/code/game/objects/items/inspector.dm
index fec567071fca8..82a36336c42b9 100644
--- a/code/game/objects/items/inspector.dm
+++ b/code/game/objects/items/inspector.dm
@@ -27,7 +27,7 @@
///determines the sound that plays when printing a report
var/print_sound_mode = INSPECTOR_PRINT_SOUND_MODE_NORMAL
///Power cell used to power the scanner. Paths g
- var/obj/item/stock_parts/cell/cell = /obj/item/stock_parts/cell/crap
+ var/obj/item/stock_parts/power_store/cell = /obj/item/stock_parts/power_store/cell/crap
///Cell cover status
var/cell_cover_open = FALSE
///Energy used per print.
@@ -62,7 +62,7 @@
return TRUE
/obj/item/inspector/attackby(obj/item/I, mob/user, params)
- if(cell_cover_open && istype(I, /obj/item/stock_parts/cell))
+ if(cell_cover_open && istype(I, /obj/item/stock_parts/power_store/cell))
if(cell)
to_chat(user, span_warning("[src] already has a cell installed."))
return
diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm
index 4a3de80959f53..2aec478162445 100644
--- a/code/game/objects/items/mail.dm
+++ b/code/game/objects/items/mail.dm
@@ -488,7 +488,7 @@
/obj/item/storage/mail_counterfeit_device
name = "GLA-2 mail counterfeit device"
- desc = "Device that actually able to counterfeit NT's mail. This device also able to place a trap inside of mail for malicious actions. Trap will \"activate\" any item inside of mail. Also it might be used for contraband purposes. Integrated micro-computer will give you great configuration optionality for your needs."
+ desc = "A single-use device for spoofing official NT envelopes. Can hold one normal sized object, and can be programmed to arm its contents when opened."
w_class = WEIGHT_CLASS_NORMAL
icon = 'icons/obj/antags/syndicate_tools.dmi'
icon_state = "mail_counterfeit_device"
@@ -501,7 +501,7 @@
/obj/item/storage/mail_counterfeit_device/examine_more(mob/user)
. = ..()
- . += span_notice("You notice the manufacture marking on the side of the device...")
+ . += span_notice("You notice the manufacturer information on the side of the device...")
. += "\t[span_info("Guerilla Letter Assembler")]"
. += "\t[span_info("GLA Postal Service, right on schedule.")]"
return .
diff --git a/code/game/objects/items/maintenance_loot.dm b/code/game/objects/items/maintenance_loot.dm
index f6d7fd1c3290d..51a272509969c 100644
--- a/code/game/objects/items/maintenance_loot.dm
+++ b/code/game/objects/items/maintenance_loot.dm
@@ -23,14 +23,14 @@
//A good battery early in the shift. Source of lead & sulfuric acid reagents.
//Add lead material to this once implemented.
-/obj/item/stock_parts/cell/lead
+/obj/item/stock_parts/power_store/cell/lead
name = "lead-acid battery"
desc = "A primitive battery. It is quite large and feels unexpectedly heavy."
icon = 'icons/obj/maintenance_loot.dmi'
icon_state = "lead_battery"
throwforce = 10
- maxcharge = STANDARD_CELL_CHARGE * 20 //decent max charge
- chargerate = STANDARD_CELL_RATE * 0.7 //charging is about 30% less efficient than lithium batteries.
+ maxcharge = STANDARD_BATTERY_VALUE //decent max charge
+ chargerate = STANDARD_BATTERY_RATE * 0.3 //charging is about 70% less efficient than lithium batteries.
charge_light_type = null
connector_type = "leadacid"
rating = 2 //Kind of a mid-tier battery
@@ -38,8 +38,9 @@
grind_results = list(/datum/reagent/lead = 15, /datum/reagent/toxin/acid = 15, /datum/reagent/water = 20)
//starts partially discharged
-/obj/item/stock_parts/cell/lead/Initialize(mapload)
+/obj/item/stock_parts/power_store/cell/lead/Initialize(mapload)
AddElement(/datum/element/update_icon_blocker)
. = ..()
var/initial_percent = rand(20, 80) / 100
charge = initial_percent * maxcharge
+ ADD_TRAIT(src, TRAIT_FISHING_BAIT, INNATE_TRAIT)
diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm
index 112c527ec28a9..eca126fc6aee0 100644
--- a/code/game/objects/items/melee/baton.dm
+++ b/code/game/objects/items/melee/baton.dm
@@ -435,7 +435,7 @@
var/throw_stun_chance = 35
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
var/preload_cell_type //if not empty the baton starts with this type of cell
var/cell_hit_cost = STANDARD_CELL_CHARGE
var/can_remove_cell = TRUE
@@ -449,7 +449,7 @@
/obj/item/melee/baton/security/Initialize(mapload)
. = ..()
if(preload_cell_type)
- if(!ispath(preload_cell_type, /obj/item/stock_parts/cell))
+ if(!ispath(preload_cell_type, /obj/item/stock_parts/power_store/cell))
log_mapping("[src] at [AREACOORD(src)] had an invalid preload_cell_type: [preload_cell_type].")
else
cell = new preload_cell_type(src)
@@ -528,8 +528,8 @@
return TRUE
/obj/item/melee/baton/security/attackby(obj/item/item, mob/user, params)
- if(istype(item, /obj/item/stock_parts/cell))
- var/obj/item/stock_parts/cell/active_cell = item
+ if(istype(item, /obj/item/stock_parts/power_store/cell))
+ var/obj/item/stock_parts/power_store/cell/active_cell = item
if(cell)
to_chat(user, span_warning("[src] already has a cell!"))
else
@@ -678,7 +678,7 @@
update_appearance()
/obj/item/melee/baton/security/loaded //this one starts with a cell pre-installed.
- preload_cell_type = /obj/item/stock_parts/cell/high
+ preload_cell_type = /obj/item/stock_parts/power_store/cell/high
//Makeshift stun baton. Replacement for stun gloves.
/obj/item/melee/baton/security/cattleprod
@@ -776,7 +776,7 @@
finalize_baton_attack(hit_atom, thrown_by, in_attack_chain = FALSE)
/obj/item/melee/baton/security/boomerang/loaded //Same as above, comes with a cell.
- preload_cell_type = /obj/item/stock_parts/cell/high
+ preload_cell_type = /obj/item/stock_parts/power_store/cell/high
/obj/item/melee/baton/security/cattleprod/teleprod
name = "teleprod"
diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm
index 440b2b740372f..228f359729c31 100644
--- a/code/game/objects/items/melee/energy.dm
+++ b/code/game/objects/items/melee/energy.dm
@@ -210,7 +210,7 @@
if(!user.cell)
return
- var/obj/item/stock_parts/cell/our_cell = user.cell
+ var/obj/item/stock_parts/power_store/our_cell = user.cell
if(HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE) && !(our_cell.use(hitcost)))
attack_self(user)
to_chat(user, span_notice("It's out of charge!"))
diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm
index 3a020ec5393ea..5d7fc1957f4f4 100644
--- a/code/game/objects/items/pinpointer.dm
+++ b/code/game/objects/items/pinpointer.dm
@@ -78,7 +78,7 @@
///Called by update_icon after sanity. There is a target
/obj/item/pinpointer/proc/get_direction_icon(here, there)
- if(get_dist_euclidian(here,there) <= minimum_range)
+ if(get_dist_euclidean(here,there) <= minimum_range)
return "pinon[alert ? "alert" : ""]direct[icon_suffix]"
else
setDir(get_dir(here, there))
diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm
index c56e1eb7cdc15..35e4c7ff72e9f 100644
--- a/code/game/objects/items/plushes.dm
+++ b/code/game/objects/items/plushes.dm
@@ -676,7 +676,7 @@
)
AddElement(/datum/element/connect_loc, loc_connections)
-/obj/item/toy/plush/goatplushie/attackby(obj/item/clothing/mask/cigarette/rollie/fat_dart, mob/user, params)
+/obj/item/toy/plush/goatplushie/attackby(obj/item/cigarette/rollie/fat_dart, mob/user, params)
if(!istype(fat_dart))
return ..()
if(splat)
diff --git a/code/game/objects/items/rcd/RCD.dm b/code/game/objects/items/rcd/RCD.dm
index 2a7611235310c..cf254e447818d 100644
--- a/code/game/objects/items/rcd/RCD.dm
+++ b/code/game/objects/items/rcd/RCD.dm
@@ -70,6 +70,7 @@
construction_mode = mode
GLOB.rcd_list += src
+ AddElement(/datum/element/openspace_item_click_handler)
/obj/item/construction/rcd/Destroy()
QDEL_NULL(airlock_electronics)
@@ -420,6 +421,9 @@
rcd_create(interacting_with, user)
return ITEM_INTERACT_SUCCESS
+/obj/item/construction/rcd/handle_openspace_click(turf/target, mob/user, list/modifiers)
+ interact_with_atom(target, user, modifiers)
+
/obj/item/construction/rcd/proc/detonate_pulse()
audible_message("[src] begins to vibrate and \
buzz loudly!","[src] begins \
diff --git a/code/game/objects/items/rcd/RSF.dm b/code/game/objects/items/rcd/RSF.dm
index b267ecd05cf14..ef0be22acc476 100644
--- a/code/game/objects/items/rcd/RSF.dm
+++ b/code/game/objects/items/rcd/RSF.dm
@@ -45,7 +45,7 @@ RSF
/obj/item/toy/cards/deck = 200,
/obj/item/paper = 10,
/obj/item/pen = 50,
- /obj/item/clothing/mask/cigarette = 10,
+ /obj/item/cigarette = 10,
)
///An associated list of fuel and it's value
var/list/matter_by_item = list(/obj/item/rcd_ammo = 10,)
diff --git a/code/game/objects/items/robot/items/generic.dm b/code/game/objects/items/robot/items/generic.dm
index c3338ecc91c88..a98d13770b7ab 100644
--- a/code/game/objects/items/robot/items/generic.dm
+++ b/code/game/objects/items/robot/items/generic.dm
@@ -220,7 +220,7 @@
/// Whitelist of charging machines
var/static/list/charge_machines = typecacheof(list(/obj/machinery/cell_charger, /obj/machinery/recharger, /obj/machinery/recharge_station, /obj/machinery/mech_bay_recharge_port))
/// Whitelist of chargable items
- var/static/list/charge_items = typecacheof(list(/obj/item/stock_parts/cell, /obj/item/gun/energy))
+ var/static/list/charge_items = typecacheof(list(/obj/item/stock_parts/power_store, /obj/item/gun/energy))
/obj/item/borg/charger/update_icon_state()
icon_state = "charger_[mode]"
@@ -259,9 +259,9 @@
to_chat(user, span_notice("You stop charging yourself."))
else if(is_type_in_list(target, charge_items))
- var/obj/item/stock_parts/cell/cell = target
+ var/obj/item/stock_parts/power_store/cell = target
if(!istype(cell))
- cell = locate(/obj/item/stock_parts/cell) in target
+ cell = locate(/obj/item/stock_parts/power_store) in target
if(!cell)
to_chat(user, span_warning("[target] has no power cell!"))
return
@@ -298,9 +298,9 @@
to_chat(user, span_notice("You stop charging yourself."))
else if(is_type_in_list(target, charge_items))
- var/obj/item/stock_parts/cell/cell = target
+ var/obj/item/stock_parts/power_store/cell = target
if(!istype(cell))
- cell = locate(/obj/item/stock_parts/cell) in target
+ cell = locate(/obj/item/stock_parts/power_store) in target
if(!cell)
to_chat(user, span_warning("[target] has no power cell!"))
return
diff --git a/code/game/objects/items/robot/items/hypo.dm b/code/game/objects/items/robot/items/hypo.dm
index 9c9c0b1b73a85..9a29ccbd9ef97 100644
--- a/code/game/objects/items/robot/items/hypo.dm
+++ b/code/game/objects/items/robot/items/hypo.dm
@@ -275,6 +275,7 @@
icon_state = "borghypo_s"
tgui_theme = "syndicate"
default_reagent_types = HACKED_MEDICAL_REAGENTS
+ expanded_reagent_types = null
/// Peacekeeper hypospray
/obj/item/reagent_containers/borghypo/peace
diff --git a/code/game/objects/items/robot/items/tools.dm b/code/game/objects/items/robot/items/tools.dm
index b9f0c103ba540..8a4ccff8ced20 100644
--- a/code/game/objects/items/robot/items/tools.dm
+++ b/code/game/objects/items/robot/items/tools.dm
@@ -176,218 +176,144 @@
projectile.speed *= (1 / projectile_speed_coefficient)
projectile.cut_overlay(projectile_effect)
-//bare minimum omni-toolset for modularity
-/obj/item/borg/cyborg_omnitool
- name = "cyborg omni-toolset"
- desc = "You shouldn't see this in-game normally."
+//////////////////////
+///CYBORG OMNITOOLS///
+//////////////////////
+
+/**
+ Onmi Toolboxs act as a cache of tools for a particular borg's omnitools. Not all borg
+ get a toolbox (as not all borgs use omnitools), and those that do can only have one
+ toolbox. The toolbox keeps track of a borg's omnitool arms, and handles speed upgrades.
+
+ Omnitools are the actual tool arms for the cyborg to interact with. When attack_self
+ is called, they can select a tool from the toolbox. The tool is not moved, and instead
+ only referenced in place of the omnitool's own attacks. The omnitool also takes on
+ the tool's sprite, which completes the illusion. In this way, multiple tools are
+ shared between multiple omnitool arms. A multitool's buffer, for example, will not
+ depend on which omnitool arm was used to set it.
+*/
+/obj/item/cyborg_omnitoolbox
+ name = "broken cyborg toolbox"
+ desc = "Some internal part of a broken cyborg."
icon = 'icons/mob/silicon/robot_items.dmi'
- icon_state = "toolkit_medborg"
- ///our tools
- var/list/radial_menu_options = list()
- ///object we are referencing to for force, sharpness and sound
- var/obj/item/reference
- //is the toolset upgraded or not
- var/upgraded = FALSE
- ///how much faster should the toolspeed be?
- var/upgraded_toolspeed = 0.7
+ icon_state = "lollipop"
+ toolspeed = 10
+ ///List of Omnitool "arms" that the borg has.
+ var/list/omnitools = list()
+ ///List of paths for tools. These will be created during Initialize()
+ var/list/toolpaths = list()
+ ///Target Toolspeed to set after reciving an omnitool upgrade
+ var/upgraded_toolspeed = 10
+ ///Whether we currently have the upgraded speed
+ var/currently_upgraded = FALSE
+
+/obj/item/cyborg_omnitoolbox/Initialize(mapload)
+ . = ..()
+ if(!toolpaths.len)
+ return
-/obj/item/borg/cyborg_omnitool/get_all_tool_behaviours()
- return list(TOOL_SCALPEL, TOOL_HEMOSTAT)
+ var/obj/item/newitem
+ for(var/newpath in toolpaths)
+ newitem = new newpath(src)
+ newitem.toolspeed = toolspeed //In case thse have different base speeds as stand-alone tools on other borgs
+ ADD_TRAIT(newitem, TRAIT_NODROP, CYBORG_ITEM_TRAIT)
-/obj/item/borg/cyborg_omnitool/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/butchering, \
- speed = 8 SECONDS, \
- effectiveness = 100, \
- disabled = TRUE, \
+/obj/item/cyborg_omnitoolbox/proc/set_upgrade(upgrade = FALSE)
+ for(var/obj/item/tool in contents)
+ if(upgrade)
+ tool.toolspeed = upgraded_toolspeed
+ else
+ tool.toolspeed = toolspeed
+ currently_upgraded = upgrade
+
+/obj/item/cyborg_omnitoolbox/engineering
+ toolspeed = 0.5
+ upgraded_toolspeed = 0.3
+ toolpaths = list(
+ /obj/item/wrench/cyborg,
+ /obj/item/wirecutters/cyborg,
+ /obj/item/screwdriver/cyborg,
+ /obj/item/crowbar/cyborg,
+ /obj/item/multitool/cyborg,
)
- radial_menu_options = list(
- NO_TOOL = image(icon = 'icons/mob/silicon/robot_items.dmi', icon_state = initial(icon_state)),
- TOOL_SCALPEL = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_SCALPEL]"),
- TOOL_HEMOSTAT = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_HEMOSTAT]"),
+
+/obj/item/cyborg_omnitoolbox/medical
+ toolspeed = 1
+ upgraded_toolspeed = 0.7
+ toolpaths = list(
+ /obj/item/scalpel/cyborg,
+ /obj/item/surgicaldrill/cyborg,
+ /obj/item/hemostat/cyborg,
+ /obj/item/retractor/cyborg,
+ /obj/item/cautery/cyborg,
+ /obj/item/circular_saw/cyborg,
+ /obj/item/bonesetter/cyborg,
)
-/obj/item/borg/cyborg_omnitool/attack_self(mob/user)
- var/new_tool_behaviour = show_radial_menu(user, src, radial_menu_options, require_near = TRUE, tooltips = TRUE)
+/obj/item/borg/cyborg_omnitool
+ name = "broken cyborg tool arm"
+ desc = "Some internal part of a broken cyborg."
+ icon = 'icons/mob/silicon/robot_items.dmi'
+ icon_state = "lollipop"
+ ///Ref to the toolbox, since our own loc will be changing
+ var/obj/item/cyborg_omnitoolbox/toolbox
+ ///Ref to currently selected tool, if any
+ var/obj/item/selected
- if(isnull(new_tool_behaviour) || new_tool_behaviour == tool_behaviour)
+/obj/item/borg/cyborg_omnitool/Initialize(mapload)
+ . = ..()
+ if(!iscyborg(loc.loc))
return
- if(new_tool_behaviour == NO_TOOL)
- tool_behaviour = null
- else
- tool_behaviour = new_tool_behaviour
+ var/obj/item/robot_model/model = loc
+ var/obj/item/cyborg_omnitoolbox/chassis_toolbox = model.toolbox
+ if(!chassis_toolbox)
+ return
+ toolbox = chassis_toolbox
+ toolbox.omnitools += src
- reference_item_for_parameters()
- update_tool_parameters(reference)
- update_appearance(UPDATE_ICON_STATE)
+/obj/item/borg/cyborg_omnitool/attack_self(mob/user)
+ var/list/radial_menu_options = list()
+ for(var/obj/item/borgtool in toolbox.contents)
+ radial_menu_options[borgtool] = image(icon = borgtool.icon, icon_state = borgtool.icon_state)
+ var/obj/item/potential_new_tool = show_radial_menu(user, src, radial_menu_options, require_near = TRUE, tooltips = TRUE)
+ if(!potential_new_tool)
+ return ..()
+ if(potential_new_tool == selected)
+ return ..()
+ for(var/obj/item/borg/cyborg_omnitool/coworker in toolbox.omnitools)
+ if(coworker.selected == potential_new_tool)
+ coworker.deselect() //Can I borrow that please
+ break
+ selected = potential_new_tool
+ icon_state = selected.icon_state
playsound(src, 'sound/items/change_jaws.ogg', 50, TRUE)
-
-/// Used to get reference item for the tools
-/obj/item/borg/cyborg_omnitool/proc/reference_item_for_parameters()
- SHOULD_CALL_PARENT(FALSE)
- switch(tool_behaviour)
- if(TOOL_SCALPEL)
- reference = /obj/item/scalpel
- if(TOOL_HEMOSTAT)
- reference = /obj/item/hemostat
-
-/// Used to update sounds and tool parameters during switching
-/obj/item/borg/cyborg_omnitool/proc/update_tool_parameters(/obj/item/reference)
- if(isnull(reference))
- sharpness = NONE
- force = initial(force)
- wound_bonus = 0
- bare_wound_bonus = 0
- armour_penetration = 0
- hitsound = initial(hitsound)
- usesound = initial(usesound)
- else
- force = initial(reference.force)
- wound_bonus = reference::wound_bonus
- bare_wound_bonus = reference::bare_wound_bonus
- armour_penetration = reference::armour_penetration
- sharpness = initial(reference.sharpness)
- hitsound = initial(reference.hitsound)
- usesound = initial(reference.usesound)
-
-/obj/item/borg/cyborg_omnitool/update_icon_state()
- icon_state = initial(icon_state)
-
- if (tool_behaviour)
- icon_state += "_[sanitize_css_class_name(tool_behaviour)]"
-
- if(tool_behaviour)
- inhand_icon_state = initial(inhand_icon_state) + "_deactivated"
- else
- inhand_icon_state = initial(inhand_icon_state)
-
return ..()
-/**
- * proc that's used when cyborg is upgraded with an omnitool upgrade board
- *
- * adds name and desc changes. also changes tools to default configuration to indicate it's been sucessfully upgraded
- * changes the toolspeed to the upgraded_toolspeed variable
- */
-/obj/item/borg/cyborg_omnitool/proc/upgrade_omnitool()
- name = "advanced [name]"
- desc += "\nIt seems that this one has been upgraded to perform tasks faster."
- toolspeed = upgraded_toolspeed
- upgraded = TRUE
- tool_behaviour = null
- reference_item_for_parameters()
- update_tool_parameters(reference)
- update_appearance(UPDATE_ICON_STATE)
- playsound(src, 'sound/items/change_jaws.ogg', 50, TRUE)
-
-/**
- * proc that's used when a cyborg with an upgraded omnitool is downgraded
- *
- * reverts all name and desc changes to it's initial variables. also changes tools to default configuration to indicate it's been downgraded
- * changes the toolspeed to default variable
- */
-/obj/item/borg/cyborg_omnitool/proc/downgrade_omnitool()
- name = initial(name)
- desc = initial(desc)
- toolspeed = initial(toolspeed)
- upgraded = FALSE
- tool_behaviour = null
- reference_item_for_parameters()
- update_tool_parameters(reference)
- update_appearance(UPDATE_ICON_STATE)
+/obj/item/borg/cyborg_omnitool/proc/deselect()
+ if(!selected)
+ return
+ selected = null
+ icon_state = initial(icon_state)
playsound(src, 'sound/items/change_jaws.ogg', 50, TRUE)
-/obj/item/borg/cyborg_omnitool/medical
- name = "surgical omni-toolset"
- desc = "A set of surgical tools used by cyborgs to operate on various surgical operations."
- item_flags = SURGICAL_TOOL
-
-/obj/item/borg/cyborg_omnitool/medical/get_all_tool_behaviours()
- return list(TOOL_SCALPEL, TOOL_HEMOSTAT, TOOL_RETRACTOR, TOOL_SAW, TOOL_DRILL, TOOL_CAUTERY, TOOL_BONESET)
+/obj/item/borg/cyborg_omnitool/cyborg_unequip()
+ deselect()
+ return ..()
-/obj/item/borg/cyborg_omnitool/medical/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/butchering, \
- speed = 8 SECONDS, \
- effectiveness = 100, \
- disabled = TRUE, \
- )
- radial_menu_options = list(
- TOOL_SCALPEL = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_SCALPEL]"),
- TOOL_HEMOSTAT = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_HEMOSTAT]"),
- TOOL_RETRACTOR = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_RETRACTOR]"),
- TOOL_SAW = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_SAW]"),
- TOOL_DRILL = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_DRILL]"),
- TOOL_CAUTERY = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_CAUTERY]"),
- TOOL_BONESET = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_BONESET]"),
- TOOL_DRAPES = image(icon = 'icons/obj/medical/surgery_tools.dmi', icon_state = "[TOOL_DRAPES]"),
- )
+/obj/item/borg/cyborg_omnitool/melee_attack_chain(mob/user, atom/target, params)
+ if(selected)
+ return selected.melee_attack_chain(user, target, params)
+ return ..()
-/obj/item/borg/cyborg_omnitool/medical/reference_item_for_parameters()
- var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering)
- butchering.butchering_enabled = (tool_behaviour == TOOL_SCALPEL || tool_behaviour == TOOL_SAW)
- RemoveElement(/datum/element/eyestab)
- qdel(GetComponent(/datum/component/surgery_initiator))
- item_flags = SURGICAL_TOOL
- switch(tool_behaviour)
- if(TOOL_SCALPEL)
- reference = /obj/item/scalpel
- AddElement(/datum/element/eyestab)
- if(TOOL_DRILL)
- reference = /obj/item/surgicaldrill
- AddElement(/datum/element/eyestab)
- if(TOOL_HEMOSTAT)
- reference = /obj/item/hemostat
- if(TOOL_RETRACTOR)
- reference = /obj/item/retractor
- if(TOOL_CAUTERY)
- reference = /obj/item/cautery
- if(TOOL_SAW)
- reference = /obj/item/circular_saw
- if(TOOL_BONESET)
- reference = /obj/item/bonesetter
- if(TOOL_DRAPES)
- reference = /obj/item/surgical_drapes
- AddComponent(/datum/component/surgery_initiator)
- item_flags = null
-
-//Toolset for engineering cyborgs, this is all of the tools except for the welding tool. since it's quite hard to implement (read:can't be arsed to)
/obj/item/borg/cyborg_omnitool/engineering
name = "engineering omni-toolset"
desc = "A set of engineering tools used by cyborgs to conduct various engineering tasks."
- icon = 'icons/obj/items_cyborg.dmi'
icon_state = "toolkit_engiborg"
- item_flags = null
- toolspeed = 0.5
- upgraded_toolspeed = 0.3
-
-/obj/item/borg/cyborg_omnitool/engineering/get_all_tool_behaviours()
- return list(TOOL_SCREWDRIVER, TOOL_CROWBAR, TOOL_WRENCH, TOOL_WIRECUTTER, TOOL_MULTITOOL)
-/obj/item/borg/cyborg_omnitool/engineering/Initialize(mapload)
- . = ..()
- radial_menu_options = list(
- TOOL_SCREWDRIVER = image(icon = 'icons/obj/tools.dmi', icon_state = "[TOOL_SCREWDRIVER]_map"),
- TOOL_CROWBAR = image(icon = 'icons/obj/tools.dmi', icon_state = "[TOOL_CROWBAR]"),
- TOOL_WRENCH = image(icon = 'icons/obj/tools.dmi', icon_state = "[TOOL_WRENCH]"),
- TOOL_WIRECUTTER = image(icon = 'icons/obj/tools.dmi', icon_state = "[TOOL_WIRECUTTER]_map"),
- TOOL_MULTITOOL = image(icon = 'icons/obj/devices/tool.dmi', icon_state = "[TOOL_MULTITOOL]"),
- )
-
-/obj/item/borg/cyborg_omnitool/engineering/reference_item_for_parameters()
- RemoveElement(/datum/element/eyestab)
- switch(tool_behaviour)
- if(TOOL_SCREWDRIVER)
- reference = /obj/item/screwdriver
- AddElement(/datum/element/eyestab)
- if(TOOL_CROWBAR)
- reference = /obj/item/crowbar
- if(TOOL_WRENCH)
- reference = /obj/item/wrench
- if(TOOL_WIRECUTTER)
- reference = /obj/item/wirecutters
- if(TOOL_MULTITOOL)
- reference = /obj/item/multitool
+/obj/item/borg/cyborg_omnitool/medical
+ name = "surgical omni-toolset"
+ desc = "A set of surgical tools used by cyborgs to operate on various surgical operations."
+ icon_state = "toolkit_medborg"
#undef PKBORG_DAMPEN_CYCLE_DELAY
#undef POWER_RECHARGE_CYBORG_DRAIN_MULTIPLIER
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index 367c619333e81..25c83d1b9635a 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -76,7 +76,7 @@
head.flash2 = new(head)
chest = new(src)
chest.wired = TRUE
- chest.cell = new /obj/item/stock_parts/cell/high(chest)
+ chest.cell = new /obj/item/stock_parts/power_store/cell/high(chest)
update_appearance()
/obj/item/robot_suit/update_overlays()
@@ -145,7 +145,7 @@
to_chat(user, span_warning("[src] has no attached torso!"))
return
- var/obj/item/stock_parts/cell/temp_cell = user.is_holding_item_of_type(/obj/item/stock_parts/cell)
+ var/obj/item/stock_parts/power_store/cell/temp_cell = user.is_holding_item_of_type(/obj/item/stock_parts/power_store/cell)
var/swap_failed = FALSE
if(!temp_cell) //if we're not holding a cell
swap_failed = TRUE
@@ -376,7 +376,7 @@
if(!locomotion)
O.set_lockcharge(TRUE)
- else if(istype(W, /obj/item/pen))
+ else if(IS_WRITING_UTENSIL(W))
to_chat(user, span_warning("You need to use a multitool to name [src]!"))
else
return ..()
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 2d886163a50ba..b2994028c7006 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -421,23 +421,25 @@
model_type = list(/obj/item/robot_model/medical, /obj/item/robot_model/syndicate_medical)
model_flags = BORG_MODEL_MEDICAL
+ items_to_add = list(/obj/item/healthanalyzer/advanced)
+ items_to_remove = list(/obj/item/healthanalyzer)
+
/obj/item/borg/upgrade/surgery_omnitool/action(mob/living/silicon/robot/cyborg, mob/living/user = usr)
. = ..()
if(!.)
return .
- for(var/obj/item/borg/cyborg_omnitool/medical/omnitool_upgrade in cyborg.model.modules)
- if(omnitool_upgrade.upgraded)
- to_chat(user, span_warning("This unit is already equipped with an omnitool upgrade!"))
- return FALSE
- for(var/obj/item/borg/cyborg_omnitool/medical/omnitool in cyborg.model.modules)
- omnitool.upgrade_omnitool()
+ if(cyborg.model.toolbox.currently_upgraded)
+ to_chat(user, span_warning("This unit is already equipped with an omnitool upgrade!"))
+ return FALSE
+ cyborg.model.toolbox.set_upgrade(TRUE)
+ ADD_TRAIT(cyborg, TRAIT_FASTMED, REF(src))
/obj/item/borg/upgrade/surgery_omnitool/deactivate(mob/living/silicon/robot/cyborg, mob/living/user = usr)
. = ..()
if(!.)
return .
- for(var/obj/item/borg/cyborg_omnitool/omnitool in cyborg.model.modules)
- omnitool.downgrade_omnitool()
+ cyborg.model.toolbox.set_upgrade(FALSE)
+ REMOVE_TRAIT(cyborg, TRAIT_FASTMED, REF(src))
/obj/item/borg/upgrade/engineering_omnitool
name = "cyborg engineering omni-tool upgrade"
@@ -452,19 +454,16 @@
. = ..()
if(!.)
return .
- for(var/obj/item/borg/cyborg_omnitool/engineering/omnitool_upgrade in cyborg.model.modules)
- if(omnitool_upgrade.upgraded)
- to_chat(user, span_warning("This unit is already equipped with an omnitool upgrade!"))
- return FALSE
- for(var/obj/item/borg/cyborg_omnitool/engineering/omnitool in cyborg.model.modules)
- omnitool.upgrade_omnitool()
+ if(cyborg.model.toolbox.currently_upgraded)
+ to_chat(user, span_warning("This unit is already equipped with an omnitool upgrade!"))
+ return FALSE
+ cyborg.model.toolbox.set_upgrade(TRUE)
/obj/item/borg/upgrade/engineering_omnitool/deactivate(mob/living/silicon/robot/cyborg, mob/living/user = usr)
. = ..()
if(!.)
return .
- for(var/obj/item/borg/cyborg_omnitool/omnitool in cyborg.model.modules)
- omnitool.downgrade_omnitool()
+ cyborg.model.toolbox.set_upgrade(FALSE)
/obj/item/borg/upgrade/defib
name = "medical cyborg defibrillator"
diff --git a/code/game/objects/items/signs.dm b/code/game/objects/items/signs.dm
index 3bf5c36048b31..85a71dc0e8f75 100644
--- a/code/game/objects/items/signs.dm
+++ b/code/game/objects/items/signs.dm
@@ -30,7 +30,7 @@
desc = "It reads: [label]"
/obj/item/picket_sign/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/pen) || istype(W, /obj/item/toy/crayon))
+ if(IS_WRITING_UTENSIL(W))
retext(user, W)
else
return ..()
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index 6011e0b396159..82f19d09d9692 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -63,8 +63,8 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
slapcraft_recipes = slapcraft_recipe_list,\
)
-/obj/item/stack/rods/handle_openspace_click(turf/target, mob/user, click_parameters)
- target.attackby(src, user, click_parameters)
+/obj/item/stack/rods/handle_openspace_click(turf/target, mob/user, list/modifiers)
+ target.attackby(src, user, list2params(modifiers))
/obj/item/stack/rods/get_main_recipes()
. = ..()
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index c969b1dbe50cc..0d4393efea6a4 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -367,7 +367,7 @@ GLOBAL_LIST_INIT(snow_recipes, list ( \
GLOBAL_LIST_INIT(adamantine_recipes, list(
- new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount=1, res_amount=1, category = CAT_ROBOT),
+ new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount=3, res_amount=1, category = CAT_ROBOT),
))
/obj/item/stack/sheet/mineral/adamantine
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 7b6d4b6207340..cc9bc3bcb9659 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -326,7 +326,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 5 SECONDS, crafting_flags = NONE, category = CAT_TOOLS),\
new/datum/stack_recipe("mannequin", /obj/structure/mannequin/wood, 25, time = 5 SECONDS, crafting_flags = CRAFT_ONE_PER_TURF, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2, crafting_flags = NONE, category = CAT_CLOTHING), \
- new/datum/stack_recipe("smoking pipe", /obj/item/clothing/mask/cigarette/pipe, 2, crafting_flags = NONE, category = CAT_CLOTHING), \
+ new/datum/stack_recipe("smoking pipe", /obj/item/cigarette/pipe, 2, crafting_flags = NONE, category = CAT_CLOTHING), \
new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 1 SECONDS, crafting_flags = NONE, category = CAT_TOOLS),\
new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/cup/bucket/wooden, 3, time = 1 SECONDS, crafting_flags = NONE, category = CAT_CONTAINERS),\
new/datum/stack_recipe("rake", /obj/item/cultivator/rake, 5, time = 1 SECONDS, crafting_flags = NONE, category = CAT_TOOLS),\
@@ -347,6 +347,12 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
new /datum/stack_recipe("pew (left)", /obj/structure/chair/pew/left, 3, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE),
new /datum/stack_recipe("pew (right)", /obj/structure/chair/pew/right, 3, crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_ONE_PER_TURF | CRAFT_ON_SOLID_GROUND, category = CAT_FURNITURE)
)),
+ new/datum/stack_recipe_list("peg limbs", list(
+ new /datum/stack_recipe("peg arm (left)", /obj/item/bodypart/arm/left/ghetto, 2, crafting_flags = NONE, category = CAT_MISC),
+ new /datum/stack_recipe("peg arm (right)", /obj/item/bodypart/arm/right/ghetto, 2, crafting_flags = NONE, category = CAT_MISC),
+ new /datum/stack_recipe("peg leg (left)", /obj/item/bodypart/leg/left/ghetto, 2, crafting_flags = NONE, category = CAT_MISC),
+ new /datum/stack_recipe("peg leg (right)", /obj/item/bodypart/leg/right/ghetto, 2, crafting_flags = NONE, category = CAT_MISC)
+ )),
null, \
))
@@ -377,6 +383,21 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
/obj/item/stack/sheet/mineral/wood/fifty
amount = 50
+/obj/item/stack/sheet/mineral/wood/interact_with_atom(mob/living/carbon/human/target, mob/user)
+ if(!istype(target))
+ return NONE
+
+ var/obj/item/bodypart/affecting = target.get_bodypart(check_zone(user.zone_selected))
+ if(affecting && IS_PEG_LIMB(affecting))
+ if(user == target)
+ user.visible_message(span_notice("[user] starts to fix their [affecting.name]."), span_notice("You start fixing [target == user ? "your" : "[target]'s"] [affecting.name]."))
+ if(!do_after(user, 5 SECONDS, target))
+ return ITEM_INTERACT_FAILURE
+ if(target.item_heal(user, brute_heal = 15, burn_heal = 15, heal_message_brute = "splintering", heal_message_burn = "charring", required_bodytype = BODYTYPE_PEG))
+ use(1)
+ return ITEM_INTERACT_SUCCESS
+ else
+ return NONE
/*
* Bamboo
*/
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 4258465f3a07e..c748ba4c494a1 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -426,6 +426,7 @@
if(created)
created.setDir(builder.dir)
+ SEND_SIGNAL(created, COMSIG_ATOM_CONSTRUCTED, builder)
on_item_crafted(builder, created)
// Use up the material
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 700116ac1e18f..073a35ed1013c 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -101,8 +101,8 @@
playsound(target_plating, 'sound/weapons/genhit.ogg', 50, TRUE)
return target_plating
-/obj/item/stack/tile/handle_openspace_click(turf/target, mob/user, click_parameters)
- target.attackby(src, user, click_parameters)
+/obj/item/stack/tile/handle_openspace_click(turf/target, mob/user, list/modifiers)
+ target.attackby(src, user, list2params(modifiers))
//Grass
/obj/item/stack/tile/grass
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index e363687618988..996cd933647a1 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -363,7 +363,7 @@
atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY //Plates are required bulky to keep them out of backpacks
atom_storage.set_holdable(
can_hold_list = list(
- /obj/item/clothing/mask/cigarette,
+ /obj/item/cigarette,
/obj/item/food,
/obj/item/kitchen,
/obj/item/lighter,
diff --git a/code/game/objects/items/storage/boxes/food_boxes.dm b/code/game/objects/items/storage/boxes/food_boxes.dm
index 45de0e58ff6c1..bccb04f14d006 100644
--- a/code/game/objects/items/storage/boxes/food_boxes.dm
+++ b/code/game/objects/items/storage/boxes/food_boxes.dm
@@ -94,27 +94,27 @@
desc = "A paper sack with a crude smile etched onto the side."
return ..()
-/obj/item/storage/box/papersack/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user)
- if(istype(inserted, /obj/item/pen))
- var/choice = show_radial_menu(user, src , papersack_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user, inserted), radius = 36, require_near = TRUE)
+/obj/item/storage/box/papersack/tool_act(mob/living/user, obj/item/tool, list/modifiers)
+ if(IS_WRITING_UTENSIL(tool))
+ var/choice = show_radial_menu(user, src , papersack_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user, tool), radius = 36, require_near = TRUE)
if(!choice || choice == design_choice)
- return FALSE
+ return ITEM_INTERACT_BLOCKING
design_choice = choice
balloon_alert(user, "modified")
update_appearance()
- return FALSE
- if(inserted.get_sharpness() && !contents.len)
+ return ITEM_INTERACT_SUCCESS
+ if(tool.get_sharpness() && !contents.len)
if(design_choice == "None")
user.show_message(span_notice("You cut eyeholes into [src]."), MSG_VISUAL)
new /obj/item/clothing/head/costume/papersack(drop_location())
qdel(src)
- return FALSE
+ return ITEM_INTERACT_SUCCESS
else if(design_choice == "SmileyFace")
user.show_message(span_notice("You cut eyeholes into [src] and modify the design."), MSG_VISUAL)
new /obj/item/clothing/head/costume/papersack/smiley(drop_location())
qdel(src)
- return FALSE
- return TRUE
+ return ITEM_INTERACT_SUCCESS
+ return ..()
/**
* check_menu: Checks if we are allowed to interact with a radial menu
diff --git a/code/game/objects/items/storage/boxes/job_boxes.dm b/code/game/objects/items/storage/boxes/job_boxes.dm
index 7785099a2262c..ea9189cc5f2b0 100644
--- a/code/game/objects/items/storage/boxes/job_boxes.dm
+++ b/code/game/objects/items/storage/boxes/job_boxes.dm
@@ -171,20 +171,20 @@
desc = "A colorful cardboard box for the clown"
illustration = "clown"
-/obj/item/storage/box/clown/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user)
- if(istype(inserted, /obj/item/bodypart/arm/left/robot) || istype(inserted, /obj/item/bodypart/arm/right/robot))
- if(contents.len) //prevent accidently deleting contents
- balloon_alert(user, "items inside!")
- return FALSE
- if(!user.temporarilyRemoveItemFromInventory(inserted))
- return FALSE
- qdel(inserted)
- loc.balloon_alert(user, "wheels added, honk!")
- var/obj/item/bot_assembly/honkbot/A = new
- qdel(src)
- user.put_in_hands(A)
- return FALSE
- return TRUE
+/obj/item/storage/box/clown/tool_act(mob/living/user, obj/item/tool, list/modifiers)
+ if(!istype(tool, /obj/item/bodypart/arm/left/robot) && !istype(tool, /obj/item/bodypart/arm/right/robot))
+ return ..()
+ if(contents.len) //prevent accidently deleting contents
+ balloon_alert(user, "items inside!")
+ return ITEM_INTERACT_BLOCKING
+ if(!user.temporarilyRemoveItemFromInventory(tool))
+ return ITEM_INTERACT_BLOCKING
+ qdel(tool)
+ loc.balloon_alert(user, "wheels added, honk!")
+ var/obj/item/bot_assembly/honkbot/A = new
+ qdel(src)
+ user.put_in_hands(A)
+ return ITEM_INTERACT_SUCCESS
/obj/item/storage/box/clown/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] opens [src] and gets consumed by [p_them()]! It looks like [user.p_theyre()] trying to commit suicide!"))
diff --git a/code/game/objects/items/storage/boxes/service_boxes.dm b/code/game/objects/items/storage/boxes/service_boxes.dm
index e4d6a86553f4c..ee558d863daf4 100644
--- a/code/game/objects/items/storage/boxes/service_boxes.dm
+++ b/code/game/objects/items/storage/boxes/service_boxes.dm
@@ -92,19 +92,17 @@
atom_storage.max_slots = 10
atom_storage.set_holdable(/obj/item/match)
-/obj/item/storage/box/matches/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user)
- return !istype(inserted, /obj/item/match)
+/obj/item/storage/box/matches/tool_act(mob/living/user, obj/item/tool, list/modifiers)
+ if(istype(tool, /obj/item/match))
+ var/obj/item/match/match = tool
+ match.matchignite()
+ return ITEM_INTERACT_SUCCESS
+ return ..()
/obj/item/storage/box/matches/PopulateContents()
for(var/i in 1 to 10)
new /obj/item/match(src)
-/obj/item/storage/box/matches/item_interaction(mob/living/user, obj/item/match/match, list/modifiers)
- if(istype(match))
- match.matchignite()
- return ITEM_INTERACT_SUCCESS
- return NONE
-
/obj/item/storage/box/matches/update_icon_state()
. = ..()
switch(length(contents))
diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm
index 4aa93cc543332..1c5490301a5c0 100644
--- a/code/game/objects/items/storage/fancy.dm
+++ b/code/game/objects/items/storage/fancy.dm
@@ -202,7 +202,7 @@
w_class = WEIGHT_CLASS_TINY
throwforce = 0
slot_flags = ITEM_SLOT_BELT
- spawn_type = /obj/item/clothing/mask/cigarette/space_cigarette
+ spawn_type = /obj/item/cigarette/space_cigarette
spawn_count = 6
custom_price = PAYCHECK_CREW
age_restricted = TRUE
@@ -233,18 +233,18 @@
/obj/item/storage/fancy/cigarettes/Initialize(mapload)
. = ..()
atom_storage.display_contents = FALSE
- atom_storage.set_holdable(list(/obj/item/clothing/mask/cigarette, /obj/item/lighter))
+ atom_storage.set_holdable(list(/obj/item/cigarette, /obj/item/lighter))
register_context()
/obj/item/storage/fancy/cigarettes/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
. = ..()
if(interacting_with != user) // you can quickly put a cigarette in your mouth only
return ..()
- quick_remove_item(/obj/item/clothing/mask/cigarette, user, equip_to_mouth = TRUE)
+ quick_remove_item(/obj/item/cigarette, user, equip_to_mouth = TRUE)
/obj/item/storage/fancy/cigarettes/attack_hand_secondary(mob/user, list/modifiers)
. = ..()
- quick_remove_item(/obj/item/clothing/mask/cigarette, user)
+ quick_remove_item(/obj/item/cigarette, user)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
/obj/item/storage/fancy/cigarettes/click_alt(mob/user)
@@ -252,7 +252,7 @@
if(lighter)
quick_remove_item(lighter, user)
else
- quick_remove_item(/obj/item/clothing/mask/cigarette, user)
+ quick_remove_item(/obj/item/cigarette, user)
return CLICK_ACTION_SUCCESS
/// Removes an item or puts it in mouth from the packet, if any
@@ -316,49 +316,49 @@
desc = "A packet of six imported DromedaryCo cancer sticks. A label on the packaging reads, \"Wouldn't a slow death make a change?\""
icon_state = "dromedary"
base_icon_state = "dromedary"
- spawn_type = /obj/item/clothing/mask/cigarette/dromedary
+ spawn_type = /obj/item/cigarette/dromedary
/obj/item/storage/fancy/cigarettes/cigpack_uplift
name = "\improper Uplift Smooth packet"
desc = "Your favorite brand, now menthol flavored."
icon_state = "uplift"
base_icon_state = "uplift"
- spawn_type = /obj/item/clothing/mask/cigarette/uplift
+ spawn_type = /obj/item/cigarette/uplift
/obj/item/storage/fancy/cigarettes/cigpack_robust
name = "\improper Robust packet"
desc = "Smoked by the robust."
icon_state = "robust"
base_icon_state = "robust"
- spawn_type = /obj/item/clothing/mask/cigarette/robust
+ spawn_type = /obj/item/cigarette/robust
/obj/item/storage/fancy/cigarettes/cigpack_robustgold
name = "\improper Robust Gold packet"
desc = "Smoked by the truly robust."
icon_state = "robustg"
base_icon_state = "robustg"
- spawn_type = /obj/item/clothing/mask/cigarette/robustgold
+ spawn_type = /obj/item/cigarette/robustgold
/obj/item/storage/fancy/cigarettes/cigpack_carp
name = "\improper Carp Classic packet"
desc = "Since 2313."
icon_state = "carp"
base_icon_state = "carp"
- spawn_type = /obj/item/clothing/mask/cigarette/carp
+ spawn_type = /obj/item/cigarette/carp
/obj/item/storage/fancy/cigarettes/cigpack_syndicate
name = "cigarette packet"
desc = "An obscure brand of cigarettes."
icon_state = "syndie"
base_icon_state = "syndie"
- spawn_type = /obj/item/clothing/mask/cigarette/syndicate
+ spawn_type = /obj/item/cigarette/syndicate
/obj/item/storage/fancy/cigarettes/cigpack_midori
name = "\improper Midori Tabako packet"
desc = "You can't understand the runes, but the packet smells funny."
icon_state = "midori"
base_icon_state = "midori"
- spawn_type = /obj/item/clothing/mask/cigarette/rollie/nicotine
+ spawn_type = /obj/item/cigarette/rollie/nicotine
/obj/item/storage/fancy/cigarettes/cigpack_candy
name = "\improper Timmy's First Candy Smokes packet"
@@ -366,42 +366,42 @@
icon_state = "candy"
base_icon_state = "candy"
contents_tag = "candy cigarette"
- spawn_type = /obj/item/clothing/mask/cigarette/candy
+ spawn_type = /obj/item/cigarette/candy
candy = TRUE
age_restricted = FALSE
/obj/item/storage/fancy/cigarettes/cigpack_candy/Initialize(mapload)
. = ..()
if(prob(7))
- spawn_type = /obj/item/clothing/mask/cigarette/candy/nicotine //uh oh!
+ spawn_type = /obj/item/cigarette/candy/nicotine //uh oh!
/obj/item/storage/fancy/cigarettes/cigpack_shadyjims
name = "\improper Shady Jim's Super Slims packet"
desc = "Is your weight slowing you down? Having trouble running away from gravitational singularities? Can't stop stuffing your mouth? Smoke Shady Jim's Super Slims and watch all that fat burn away. Guaranteed results!"
icon_state = "shadyjim"
base_icon_state = "shadyjim"
- spawn_type = /obj/item/clothing/mask/cigarette/shadyjims
+ spawn_type = /obj/item/cigarette/shadyjims
/obj/item/storage/fancy/cigarettes/cigpack_xeno
name = "\improper Xeno Filtered packet"
desc = "Loaded with 100% pure slime. And also nicotine."
icon_state = "slime"
base_icon_state = "slime"
- spawn_type = /obj/item/clothing/mask/cigarette/xeno
+ spawn_type = /obj/item/cigarette/xeno
/obj/item/storage/fancy/cigarettes/cigpack_cannabis
name = "\improper Freak Brothers' Special packet"
desc = "A label on the packaging reads, \"Endorsed by Phineas, Freddy and Franklin.\""
icon_state = "midori"
base_icon_state = "midori"
- spawn_type = /obj/item/clothing/mask/cigarette/rollie/cannabis
+ spawn_type = /obj/item/cigarette/rollie/cannabis
/obj/item/storage/fancy/cigarettes/cigpack_mindbreaker
name = "\improper Leary's Delight packet"
desc = "Banned in over 36 galaxies."
icon_state = "shadyjim"
base_icon_state = "shadyjim"
- spawn_type = /obj/item/clothing/mask/cigarette/rollie/mindbreaker
+ spawn_type = /obj/item/cigarette/rollie/mindbreaker
/obj/item/storage/fancy/rollingpapers
name = "rolling paper pack"
@@ -437,14 +437,14 @@
base_icon_state = "cigarcase"
w_class = WEIGHT_CLASS_NORMAL
contents_tag = "premium cigar"
- spawn_type = /obj/item/clothing/mask/cigarette/cigar/premium
+ spawn_type = /obj/item/cigarette/cigar/premium
spawn_count = 5
spawn_coupon = FALSE
display_cigs = FALSE
/obj/item/storage/fancy/cigarettes/cigars/Initialize(mapload)
. = ..()
- atom_storage.set_holdable(/obj/item/clothing/mask/cigarette/cigar)
+ atom_storage.set_holdable(/obj/item/cigarette/cigar)
/obj/item/storage/fancy/cigarettes/cigars/update_icon_state()
. = ..()
@@ -456,7 +456,7 @@
if(!open_status)
return
var/cigar_position = 1 //generate sprites for cigars in the box
- for(var/obj/item/clothing/mask/cigarette/cigar/smokes in contents)
+ for(var/obj/item/cigarette/cigar/smokes in contents)
. += "[smokes.icon_off]_[cigar_position]"
cigar_position++
@@ -465,14 +465,14 @@
desc = "A case of imported Cohiba cigars, renowned for their strong flavor."
icon_state = "cohibacase"
base_icon_state = "cohibacase"
- spawn_type = /obj/item/clothing/mask/cigarette/cigar/cohiba
+ spawn_type = /obj/item/cigarette/cigar/cohiba
/obj/item/storage/fancy/cigarettes/cigars/havana
name = "\improper premium Havanian cigar case"
desc = "A case of classy Havanian cigars."
icon_state = "cohibacase"
base_icon_state = "cohibacase"
- spawn_type = /obj/item/clothing/mask/cigarette/cigar/havana
+ spawn_type = /obj/item/cigarette/cigar/havana
/*
* Heart Shaped Box w/ Chocolates
diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm
index 3f80f0e22af55..a1dbe0e690c71 100644
--- a/code/game/objects/items/storage/lockbox.dm
+++ b/code/game/objects/items/storage/lockbox.dm
@@ -12,6 +12,7 @@
var/open = FALSE
var/icon_locked = "lockbox+l"
var/icon_closed = "lockbox"
+ var/icon_open = "lockbox"
var/icon_broken = "lockbox+b"
/obj/item/storage/lockbox/Initialize(mapload)
@@ -19,48 +20,54 @@
atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
atom_storage.max_total_storage = 14
atom_storage.max_slots = 4
- atom_storage.locked = TRUE
+ atom_storage.locked = STORAGE_FULLY_LOCKED
register_context()
+ update_appearance()
+
+/obj/item/storage/lockbox/tool_act(mob/living/user, obj/item/tool, list/modifiers)
+ var/obj/item/card/card = tool.GetID()
+ if(isnull(card))
+ return ..()
+
+ if(can_unlock(user, card))
+ if(atom_storage.locked)
+ atom_storage.locked = STORAGE_NOT_LOCKED
+ else
+ atom_storage.locked = STORAGE_FULLY_LOCKED
+ atom_storage.close_all()
+ balloon_alert(user, atom_storage.locked ? "locked" : "unlocked")
+ update_appearance()
+ return ITEM_INTERACT_SUCCESS
+
+ return ITEM_INTERACT_BLOCKING
+
+/obj/item/storage/lockbox/proc/can_unlock(mob/living/user, obj/item/card/id/id_card)
+ if(check_access(id_card))
+ return TRUE
+
+ balloon_alert(user, "access denied!")
+ return FALSE
-/obj/item/storage/lockbox/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user)
- var/locked = atom_storage.locked
- if(inserted.GetID())
- if(broken)
- balloon_alert(user, "broken!")
- return FALSE
- if(allowed(user))
- if(atom_storage.locked)
- atom_storage.locked = STORAGE_NOT_LOCKED
- else
- atom_storage.locked = STORAGE_FULLY_LOCKED
- locked = atom_storage.locked
- if(locked)
- icon_state = icon_locked
- atom_storage.close_all()
- else
- icon_state = icon_closed
-
- balloon_alert(user, locked ? "locked" : "unlocked")
- return FALSE
-
- balloon_alert(user, "access denied!")
- return FALSE
-
- if(locked)
- balloon_alert(user, "locked!")
- return FALSE
-
- return TRUE
+/obj/item/storage/lockbox/update_icon_state()
+ . = ..()
+ if(broken)
+ icon_state = icon_broken
+ else if(atom_storage?.locked)
+ icon_state = icon_locked
+ else if(open)
+ icon_state = icon_open
+ else
+ icon_state = icon_closed
/obj/item/storage/lockbox/emag_act(mob/user, obj/item/card/emag/emag_card)
if(!broken)
broken = TRUE
atom_storage.locked = STORAGE_NOT_LOCKED
- icon_state = src.icon_broken
balloon_alert(user, "lock destroyed")
if (emag_card && user)
user.visible_message(span_warning("[user] swipes [emag_card] over [src], breaking it!"))
+ update_appearance()
return TRUE
return FALSE
@@ -108,6 +115,7 @@
icon_locked = "medalbox+l"
icon_closed = "medalbox"
icon_broken = "medalbox+b"
+ icon_open = "medalboxopen"
/obj/item/storage/lockbox/medal/Initialize(mapload)
. = ..()
@@ -123,7 +131,7 @@
/obj/item/storage/lockbox/medal/click_alt(mob/user)
if(!atom_storage.locked)
- open = (open ? FALSE : TRUE)
+ open = !open
update_appearance()
return CLICK_ACTION_SUCCESS
@@ -138,18 +146,6 @@
for(var/i in 1 to 3)
new /obj/item/clothing/accessory/medal/conduct(src)
-/obj/item/storage/lockbox/medal/update_icon_state()
- if(atom_storage?.locked)
- icon_state = "medalbox+l"
- return ..()
-
- icon_state = "medalbox"
- if(open)
- icon_state += "open"
- if(broken)
- icon_state += "+b"
- return ..()
-
/obj/item/storage/lockbox/medal/update_overlays()
. = ..()
if(!contents || !open)
@@ -238,13 +234,13 @@
icon_state = "secure"
icon_closed = "secure"
icon_locked = "secure_locked"
- icon_broken = "secure+b"
+ icon_broken = "secure_locked"
+ icon_open = "secure"
inhand_icon_state = "sec-case"
lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi'
w_class = WEIGHT_CLASS_HUGE
var/datum/bank_account/buyer_account
- var/privacy_lock = TRUE
/obj/item/storage/lockbox/order/Initialize(mapload, datum/bank_account/_buyer_account)
. = ..()
@@ -252,26 +248,11 @@
ADD_TRAIT(src, TRAIT_NO_MISSING_ITEM_ERROR, TRAIT_GENERIC)
ADD_TRAIT(src, TRAIT_NO_MANIFEST_CONTENTS_ERROR, TRAIT_GENERIC)
-/obj/item/storage/lockbox/order/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user)
- var/obj/item/card/id/id_card = inserted.GetID()
- if(!id_card)
- return ..()
-
- if(id_card.registered_account != buyer_account)
- balloon_alert(user, "incorrect bank account!")
- return FALSE
+/obj/item/storage/lockbox/order/can_unlock(mob/living/user, obj/item/card/id/id_card)
+ if(id_card.registered_account == buyer_account)
+ return TRUE
- if(privacy_lock)
- atom_storage.locked = STORAGE_NOT_LOCKED
- icon_state = icon_locked
- else
- atom_storage.locked = STORAGE_FULLY_LOCKED
- icon_state = icon_closed
- privacy_lock = atom_storage.locked
- user.visible_message(
- span_notice("[user] [privacy_lock ? "" : "un"]locks [src]'s privacy lock."),
- span_notice("You [privacy_lock ? "" : "un"]lock [src]'s privacy lock."),
- )
+ balloon_alert(user, "incorrect bank account!")
return FALSE
///screentips for lockboxes
diff --git a/code/game/objects/items/storage/medkit.dm b/code/game/objects/items/storage/medkit.dm
index b1ca307e939f1..944289598d17b 100644
--- a/code/game/objects/items/storage/medkit.dm
+++ b/code/game/objects/items/storage/medkit.dm
@@ -171,6 +171,9 @@
inhand_icon_state = "medkit-ointment"
damagetype_healed = BURN
+/obj/item/storage/medkit/fire/get_medbot_skin()
+ return "ointment"
+
/obj/item/storage/medkit/fire/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] begins rubbing \the [src] against [user.p_them()]self! It looks like [user.p_theyre()] trying to start a fire!"))
return FIRELOSS
@@ -192,6 +195,9 @@
inhand_icon_state = "medkit-toxin"
damagetype_healed = TOX
+/obj/item/storage/medkit/toxin/get_medbot_skin()
+ return "tox"
+
/obj/item/storage/medkit/toxin/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] begins licking the lead paint off \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return TOXLOSS
@@ -216,6 +222,9 @@
inhand_icon_state = "medkit-o2"
damagetype_healed = OXY
+/obj/item/storage/medkit/o2/get_medbot_skin()
+ return "o2"
+
/obj/item/storage/medkit/o2/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] begins hitting [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return OXYLOSS
@@ -237,6 +246,9 @@
inhand_icon_state = "medkit-brute"
damagetype_healed = BRUTE
+/obj/item/storage/medkit/brute/get_medbot_skin()
+ return "brute"
+
/obj/item/storage/medkit/brute/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] begins beating [user.p_them()]self over the head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return BRUTELOSS
@@ -261,6 +273,9 @@
custom_premium_price = PAYCHECK_COMMAND * 6
damagetype_healed = HEAL_ALL_DAMAGE
+/obj/item/storage/medkit/advanced/get_medbot_skin()
+ return "advanced"
+
/obj/item/storage/medkit/advanced/PopulateContents()
if(empty)
return
@@ -277,6 +292,9 @@
inhand_icon_state = "medkit-tactical"
damagetype_healed = HEAL_ALL_DAMAGE
+/obj/item/storage/medkit/tactical_lite/get_medbot_skin()
+ return "bezerk"
+
/obj/item/storage/medkit/tactical_lite/PopulateContents()
if(empty)
return
@@ -399,35 +417,28 @@
generate_items_inside(items_inside,src)
//medibot assembly
-/obj/item/storage/medkit/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user)
- if(!istype(inserted, /obj/item/bodypart/arm/left/robot) && !istype(inserted, /obj/item/bodypart/arm/right/robot))
- return TRUE
+/obj/item/storage/medkit/tool_act(mob/living/user, obj/item/tool, list/modifiers)
+ if(!istype(tool, /obj/item/bodypart/arm/left/robot) && !istype(tool, /obj/item/bodypart/arm/right/robot))
+ return ..()
//Making a medibot!
if(contents.len >= 1)
balloon_alert(user, "items inside!")
- return FALSE
-
- ///if you add a new one don't forget to update /datum/crafting_recipe/medbot/on_craft_completion()
- var/obj/item/bot_assembly/medbot/medbot_assembly = new
- if (istype(src, /obj/item/storage/medkit/fire))
- medbot_assembly.set_skin("ointment")
- else if (istype(src, /obj/item/storage/medkit/toxin))
- medbot_assembly.set_skin("tox")
- else if (istype(src, /obj/item/storage/medkit/o2))
- medbot_assembly.set_skin("o2")
- else if (istype(src, /obj/item/storage/medkit/brute))
- medbot_assembly.set_skin("brute")
- else if (istype(src, /obj/item/storage/medkit/advanced))
- medbot_assembly.set_skin("advanced")
- else if (istype(src, /obj/item/storage/medkit/tactical))
- medbot_assembly.set_skin("bezerk")
+ return ITEM_INTERACT_BLOCKING
+
+ var/obj/item/bot_assembly/medbot/medbot_assembly = new()
+ medbot_assembly.set_skin(get_medbot_skin())
user.put_in_hands(medbot_assembly)
medbot_assembly.balloon_alert(user, "arm added")
- medbot_assembly.robot_arm = inserted.type
+ medbot_assembly.robot_arm = tool.type
medbot_assembly.medkit_type = type
- qdel(inserted)
+ qdel(tool)
qdel(src)
- return FALSE
+ return ITEM_INTERACT_SUCCESS
+
+/// Gets what skin (icon_state) this medkit uses for a medbot
+/obj/item/storage/medkit/proc/get_medbot_skin()
+ // The skin var is nullsafe so returning nothing is A-OK
+ return
/*
* Pill Bottles
@@ -733,14 +744,7 @@
icon_state = "[base_icon_state][cooling ? "-working" : null]"
return ..()
-/obj/item/storage/organbox/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user)
- if(is_reagent_container(inserted) && inserted.is_open_container())
- return FALSE
- if(istype(inserted, /obj/item/plunger))
- return FALSE
- return TRUE
-
-/obj/item/storage/organbox/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/item/storage/organbox/tool_act(mob/living/user, obj/item/tool, list/modifiers)
if(is_reagent_container(tool) && tool.is_open_container())
var/obj/item/reagent_containers/RC = tool
var/units = RC.reagents.trans_to(src, RC.amount_per_transfer_from_this, transferred_by = user)
@@ -754,7 +758,7 @@
balloon_alert(user, "plunged")
reagents.clear_reagents()
return ITEM_INTERACT_SUCCESS
- return NONE
+ return ..()
/obj/item/storage/organbox/suicide_act(mob/living/carbon/user)
if(HAS_TRAIT(user, TRAIT_RESISTCOLD)) //if they're immune to cold, just do the box suicide
diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index 5420121945b92..7c5bc74e07550 100644
--- a/code/game/objects/items/storage/toolbox.dm
+++ b/code/game/objects/items/storage/toolbox.dm
@@ -273,9 +273,9 @@
new /obj/item/gun_maintenance_supplies(src)
//floorbot assembly
-/obj/item/storage/toolbox/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user)
- if(!istype(inserted, /obj/item/stack/tile/iron))
- return TRUE
+/obj/item/storage/toolbox/tool_act(mob/living/user, obj/item/tool, list/modifiers)
+ if(!istype(tool, /obj/item/stack/tile/iron))
+ return ..()
var/static/list/allowed_toolbox = list(
/obj/item/storage/toolbox/artistic,
/obj/item/storage/toolbox/electrical,
@@ -285,11 +285,11 @@
)
if(!is_type_in_list(src, allowed_toolbox) && (type != /obj/item/storage/toolbox))
- return TRUE
+ return ITEM_INTERACT_BLOCKING
if(contents.len >= 1)
balloon_alert(user, "not empty!")
- return FALSE
- if(inserted.use(10))
+ return ITEM_INTERACT_BLOCKING
+ if(tool.use(10))
var/obj/item/bot_assembly/floorbot/B = new
B.toolbox = type
switch(B.toolbox)
@@ -307,9 +307,9 @@
B.update_appearance()
B.balloon_alert(user, "tiles added")
qdel(src)
- return FALSE
+ return ITEM_INTERACT_BLOCKING
balloon_alert(user, "needs 10 tiles!")
- return FALSE
+ return ITEM_INTERACT_SUCCESS
/obj/item/storage/toolbox/haunted
name = "old toolbox"
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index 3a4ce82d85e51..96b2d10440d4e 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -449,7 +449,7 @@
/obj/item/storage/box/syndie_kit/mail_counterfeit
name = "mail counterfeit kit"
- desc = "A box full of mail counterfeit devices. Nothing stops the mail."
+ desc = "A GLA Postal Service branded box. It's emblazoned with the motto: *Nothing stops the mail*."
/obj/item/storage/box/syndie_kit/mail_counterfeit/PopulateContents()
for(var/i in 1 to 6)
diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm
index 469a14e0e7810..e485d6997f05f 100644
--- a/code/game/objects/items/storage/wallets.dm
+++ b/code/game/objects/items/storage/wallets.dm
@@ -18,7 +18,7 @@
/obj/item/stack/spacecash,
/obj/item/holochip,
/obj/item/card,
- /obj/item/clothing/mask/cigarette,
+ /obj/item/cigarette,
/obj/item/clothing/accessory/dogtag,
/obj/item/coin,
/obj/item/coupon,
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index 72c84c9ee995e..bdbfa79001ddf 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -36,7 +36,7 @@
var/igniting = FALSE
/// The gases this tank contains. Don't modify this directly, use return_air() to get it instead
var/datum/gas_mixture/air_contents = null
- /// The volume of this tank. Among other things gas tank explosions (including TTVs) scale off of this. Be sure to account for that if you change this or you will break ~~toxins~~ordinance.
+ /// The volume of this tank. Among other things gas tank explosions (including TTVs) scale off of this. Be sure to account for that if you change this or you will break ~~toxins~~ ordinance.
var/volume = TANK_STANDARD_VOLUME
/// Whether the tank is currently leaking.
var/leaking = FALSE
@@ -83,11 +83,13 @@
/// Called by carbons after they connect the tank to their breathing apparatus.
/obj/item/tank/proc/after_internals_opened(mob/living/carbon/carbon_target)
breathing_mob = carbon_target
+ playsound(loc, 'sound/items/internals_on.ogg', 15, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
RegisterSignal(carbon_target, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item))
/// Called by carbons after they disconnect the tank from their breathing apparatus.
/obj/item/tank/proc/after_internals_closed(mob/living/carbon/carbon_target)
breathing_mob = null
+ playsound(loc, 'sound/items/internals_off.ogg', 15, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
UnregisterSignal(carbon_target, COMSIG_MOB_GET_STATUS_TAB_ITEMS)
/obj/item/tank/proc/get_status_tab_item(mob/living/source, list/items)
@@ -413,6 +415,16 @@
if(tank_assembly)
tank_assembly.attack_hand()
+/obj/item/tank/attack_self(mob/user, modifiers)
+ if (tank_assembly)
+ tank_assembly.attack_self(user)
+ return TRUE
+ return ..()
+
+/obj/item/tank/attack_self_secondary(mob/user, modifiers)
+ . = ..()
+ ui_interact(user)
+
/obj/item/tank/Move()
. = ..()
if(tank_assembly)
@@ -445,7 +457,7 @@
balloon_alert(user, "can't reach!")
return
- if((src in user.get_equipped_items(include_pockets = TRUE, include_accessories = TRUE)) && !user.canUnEquip(src))
+ if((src in user.get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES)) && !user.canUnEquip(src))
balloon_alert(user, "it's stuck!")
return
diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm
index b4185732ce96c..c6b0d52cdc1c3 100644
--- a/code/game/objects/items/tools/crowbar.dm
+++ b/code/game/objects/items/tools/crowbar.dm
@@ -160,8 +160,8 @@
return COMPONENT_NO_DEFAULT_MESSAGE
/obj/item/crowbar/power/syndicate
- name = "Syndicate jaws of life"
- desc = "A pocket sized re-engineered copy of Nanotrasen's standard jaws of life. Can be used to force open airlocks in its crowbar configuration."
+ name = "jaws of death"
+ desc = "An improved, faster, and smaller copy of Nanotrasen's standard jaws of life. Can be used to force open airlocks in its crowbar configuration."
icon_state = "jaws_syndie"
w_class = WEIGHT_CLASS_SMALL
toolspeed = 0.5
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index 0e9b9743a4593..b2b0109c04c88 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -160,7 +160,7 @@
if(!use_tool(attacked_humanoid, user, use_delay, volume=50, amount=1))
return ITEM_INTERACT_BLOCKING
- item_heal_robotic(attacked_humanoid, user, 15, 0)
+ attacked_humanoid.item_heal(user, brute_heal = 15, burn_heal = 0, heal_message_brute = "dents", heal_message_burn = "burnt wires", required_bodytype = BODYTYPE_ROBOTIC)
return ITEM_INTERACT_SUCCESS
/obj/item/weldingtool/afterattack(atom/target, mob/user, click_parameters)
diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm
index 9ebcbb253d20b..d07f7ad21c5f5 100644
--- a/code/game/objects/obj_defense.dm
+++ b/code/game/objects/obj_defense.dm
@@ -132,6 +132,7 @@
take_damage(clamp(0.02 * exposed_temperature, 0, 20), BURN, FIRE, 0)
if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE) && !(resistance_flags & FIRE_PROOF))
AddComponent(/datum/component/burning, custom_fire_overlay || GLOB.fire_overlay, burning_particles)
+ SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume)
return TRUE
return ..()
diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm
index e8b5ed4c13d43..1783d4b236a63 100644
--- a/code/game/objects/structures/beds_chairs/chair.dm
+++ b/code/game/objects/structures/beds_chairs/chair.dm
@@ -11,7 +11,7 @@
integrity_failure = 0.1
custom_materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT)
layer = OBJ_LAYER
- interaction_flags_mouse_drop = NEED_HANDS | NEED_DEXTERITY
+ interaction_flags_mouse_drop = ALLOW_RESTING
var/buildstacktype = /obj/item/stack/sheet/iron
var/buildstackamount = 1
@@ -437,7 +437,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0)
buildstacktype = /obj/item/stack/sheet/bronze
buildstackamount = 1
item_chair = null
- interaction_flags_click = NEED_DEXTERITY
/// Total rotations made
var/turns = 0
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index f98b29e1932b1..4484e3c512ef3 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -182,7 +182,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets)
//USE THIS TO FILL IT, NOT INITIALIZE OR NEW
/obj/structure/closet/proc/PopulateContents()
- SEND_SIGNAL(src, COMSIG_CLOSET_POPULATE_CONTENTS)
+ return
/// Populate the closet with stuff that needs to be added before it is opened.
/// This is useful for things like traitor objectives.
@@ -399,7 +399,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets)
screentip_change = TRUE
if(!locked && !opened)
- if(id_card && istype(held_item, /obj/item/pen))
+ if(id_card && IS_WRITING_UTENSIL(held_item))
context[SCREENTIP_CONTEXT_LMB] = "Rename"
screentip_change = TRUE
if(secure && card_reader_installed && !broken)
@@ -452,6 +452,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets)
if (!contents_initialized)
contents_initialized = TRUE
PopulateContents()
+ SEND_SIGNAL(src, COMSIG_CLOSET_CONTENTS_INITIALIZED)
var/atom/L = drop_location()
for(var/atom/movable/AM in src)
@@ -817,7 +818,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets)
else
balloon_alert(user, "set to [choice]")
- else if(!opened && istype(weapon, /obj/item/pen))
+ else if(!opened && IS_WRITING_UTENSIL(weapon))
if(locked)
balloon_alert(user, "unlock first!")
return
@@ -1012,7 +1013,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets)
return FALSE
return TRUE
-/obj/structure/closet/container_resist_act(mob/living/user)
+/obj/structure/closet/container_resist_act(mob/living/user, loc_required = TRUE)
if(isstructure(loc))
relay_container_resist_act(user, loc)
if(opened)
@@ -1037,7 +1038,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets)
addtimer(CALLBACK(src, PROC_REF(check_if_shake)), 1 SECONDS)
if(do_after(user,(breakout_time), target = src))
- if(!user || user.stat != CONSCIOUS || user.loc != src || opened || (!locked && !welded) )
+ if(!user || user.stat != CONSCIOUS || (loc_required && (user.loc != src)) || opened || (!locked && !welded) )
return
//we check after a while whether there is a point of resisting anymore and whether the user is capable of resisting
user.visible_message(span_danger("[user] successfully broke out of [src]!"),
diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
index 38482fcfd9ba9..ac8b444e47dc7 100644
--- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm
+++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
@@ -47,7 +47,7 @@
return ..()
/obj/structure/closet/body_bag/attackby(obj/item/interact_tool, mob/user, params)
- if (istype(interact_tool, /obj/item/pen) || istype(interact_tool, /obj/item/toy/crayon))
+ if (IS_WRITING_UTENSIL(interact_tool))
if(!user.can_write(interact_tool))
return
var/t = tgui_input_text(user, "What would you like the label to be?", name, max_length = 53)
@@ -276,7 +276,7 @@
else
icon_state = initial(icon_state)
-/obj/structure/closet/body_bag/environmental/prisoner/container_resist_act(mob/living/user)
+/obj/structure/closet/body_bag/environmental/prisoner/container_resist_act(mob/living/user, loc_required = TRUE)
/// copy-pasted with changes because flavor text as well as some other misc stuff
if(opened)
return
diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
index fecacd678c7c2..f2171b2e8b1b0 100644
--- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm
+++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
@@ -113,7 +113,7 @@
new /obj/item/clothing/head/helmet/space/nasavoid(src)
new /obj/item/clothing/suit/space/nasavoid(src)
new /obj/item/crowbar(src)
- new /obj/item/stock_parts/cell(src)
+ new /obj/item/stock_parts/power_store/cell(src)
new /obj/item/multitool(src)
/obj/structure/closet/mini_fridge
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index c44cd0972aad1..baf239284ac2f 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -140,7 +140,7 @@
for (var/i in 1 to rand(2,6))
new /obj/effect/spawner/random/maintenance(src)
- UnregisterSignal(src, COMSIG_CLOSET_POPULATE_CONTENTS)
+ UnregisterSignal(src, COMSIG_CLOSET_CONTENTS_INITIALIZED)
///Removes the supply manifest from the closet
/obj/structure/closet/crate/proc/tear_manifest(mob/user)
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 86d8e01f98ebe..9493a7c941407 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -82,7 +82,7 @@
. += span_notice("There is a small paper placard on the assembly, written on it is '[created_name]'.")
/obj/structure/door_assembly/attackby(obj/item/W, mob/living/user, params)
- if(istype(W, /obj/item/pen) && !user.combat_mode)
+ if(IS_WRITING_UTENSIL(W) && !user.combat_mode)
var/t = tgui_input_text(user, "Enter the name for the door", "Airlock Renaming", created_name, MAX_NAME_LEN)
if(!t)
return
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index cace64a710169..0564223a7c759 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -91,9 +91,9 @@
qdel(src)
return T
-/obj/structure/falsewall/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/structure/falsewall/tool_act(mob/living/user, obj/item/tool, list/modifiers)
if(!opening || !tool.tool_behaviour)
- return NONE
+ return ..()
to_chat(user, span_warning("You must wait until the door has stopped moving!"))
return ITEM_INTERACT_BLOCKING
diff --git a/code/game/objects/structures/fans.dm b/code/game/objects/structures/fans.dm
index 4f0a5fc450bfe..9470b6018dce7 100644
--- a/code/game/objects/structures/fans.dm
+++ b/code/game/objects/structures/fans.dm
@@ -51,3 +51,5 @@
light_color = LIGHT_COLOR_BLUE
light_range = 4
+/obj/structure/fans/tiny/shield/wrench_act(mob/living/user, obj/item/I)
+ return ITEM_INTERACT_SKIP_TO_ATTACK //how you gonna wrench disassemble a shield?????????
diff --git a/code/game/objects/structures/gym/punching_bag.dm b/code/game/objects/structures/gym/punching_bag.dm
index ef0db16e953e3..03a64725ab5e3 100644
--- a/code/game/objects/structures/gym/punching_bag.dm
+++ b/code/game/objects/structures/gym/punching_bag.dm
@@ -57,12 +57,12 @@
stamina_exhaustion = 2
if (is_heavy_gravity)
stamina_exhaustion *= 1.5
-
+
if(HAS_TRAIT(user, TRAIT_STRENGTH)) //The strong get reductions to stamina damage taken while exercising
stamina_exhaustion *= 0.5
user.adjustStaminaLoss(stamina_exhaustion)
- user.mind?.adjust_experience(/datum/skill/athletics, is_heavy_gravity ? 0.2 : 0.1)
+ user.mind?.adjust_experience(/datum/skill/athletics, is_heavy_gravity ? 0.6 : 0.3)
user.apply_status_effect(/datum/status_effect/exercised)
/obj/structure/punching_bag/wrench_act_secondary(mob/living/user, obj/item/tool)
diff --git a/code/game/objects/structures/lavaland/necropolis_tendril.dm b/code/game/objects/structures/lavaland/necropolis_tendril.dm
index 58308b9b9cf2b..2ede6833aa992 100644
--- a/code/game/objects/structures/lavaland/necropolis_tendril.dm
+++ b/code/game/objects/structures/lavaland/necropolis_tendril.dm
@@ -6,7 +6,7 @@
icon = 'icons/mob/simple/lavaland/nest.dmi'
icon_state = "tendril"
- faction = list(FACTION_MINING)
+ faction = list(FACTION_MINING, FACTION_ASHWALKER)
max_mobs = 3
max_integrity = 250
mob_types = list(/mob/living/basic/mining/watcher)
diff --git a/code/game/objects/structures/lavaland/ore_vent.dm b/code/game/objects/structures/lavaland/ore_vent.dm
index c1e81862ac934..27e05b6dc540d 100644
--- a/code/game/objects/structures/lavaland/ore_vent.dm
+++ b/code/game/objects/structures/lavaland/ore_vent.dm
@@ -560,7 +560,7 @@
boss_string = "A giant, armored behemoth"
if(/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner)
boss_string = "A bloody drillmark"
- if(/mob/living/simple_animal/hostile/megafauna/wendigo)
+ if(/mob/living/simple_animal/hostile/megafauna/wendigo/noportal)
boss_string = "A chilling skull"
. += span_notice("[boss_string] is etched onto the side of the vent.")
@@ -585,7 +585,7 @@
icon_state_tapped = "ore_vent_ice_active"
defending_mobs = list(
/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner,
- /mob/living/simple_animal/hostile/megafauna/wendigo,
+ /mob/living/simple_animal/hostile/megafauna/wendigo/noportal,
/mob/living/simple_animal/hostile/megafauna/colossus,
)
diff --git a/code/game/objects/structures/mystery_box.dm b/code/game/objects/structures/mystery_box.dm
index ab8a25f04c675..9dc8152f5b7bf 100644
--- a/code/game/objects/structures/mystery_box.dm
+++ b/code/game/objects/structures/mystery_box.dm
@@ -85,7 +85,6 @@ GLOBAL_LIST_INIT(mystery_magic, list(
/obj/item/gun/magic/staff/door,
/obj/item/gun/magic/staff/honk,
/obj/item/gun/magic/staff/spellblade,
- /obj/item/gun/magic/staff/locker,
/obj/item/gun/magic/staff/flying,
/obj/item/gun/magic/staff/babel,
/obj/item/singularityhammer,
diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm
index a2a1e1c04bc20..a5ed048153c41 100644
--- a/code/game/objects/structures/plasticflaps.dm
+++ b/code/game/objects/structures/plasticflaps.dm
@@ -26,6 +26,7 @@
. = ..()
alpha = 0
gen_overlay()
+ air_update_turf(TRUE, TRUE)
/obj/structure/plasticflaps/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents)
if(same_z_layer)
@@ -127,10 +128,6 @@
/obj/structure/plasticflaps/atom_deconstruct(disassembled = TRUE)
new /obj/item/stack/sheet/plastic/five(loc)
-/obj/structure/plasticflaps/Initialize(mapload)
- . = ..()
- air_update_turf(TRUE, TRUE)
-
/obj/structure/plasticflaps/Destroy()
var/atom/oldloc = loc
. = ..()
diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm
index 0700f19818a39..e27f5fcf42b40 100644
--- a/code/game/objects/structures/reflector.dm
+++ b/code/game/objects/structures/reflector.dm
@@ -79,10 +79,10 @@
P.decayedRange = max(P.decayedRange--, 0)
return BULLET_ACT_FORCE_PIERCE
-/obj/structure/reflector/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/structure/reflector/tool_act(mob/living/user, obj/item/tool, list/modifiers)
if(admin && tool.tool_behaviour)
return ITEM_INTERACT_BLOCKING
- return NONE
+ return ..()
/obj/structure/reflector/screwdriver_act(mob/living/user, obj/item/tool)
can_rotate = !can_rotate
diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm
index eefbe49ef3229..9268cb9c059ce 100644
--- a/code/game/objects/structures/signs/_signs.dm
+++ b/code/game/objects/structures/signs/_signs.dm
@@ -85,7 +85,7 @@
return TRUE
/obj/structure/sign/attackby(obj/item/I, mob/user, params)
- if(is_editable && istype(I, /obj/item/pen))
+ if(is_editable && IS_WRITING_UTENSIL(I))
if(!length(GLOB.editable_sign_types))
CRASH("GLOB.editable_sign_types failed to populate")
var/choice = tgui_input_list(user, "Select a sign type", "Sign Customization", GLOB.editable_sign_types)
@@ -187,12 +187,12 @@
/obj/item/sign/add_context(atom/source, list/context, obj/item/held_item, mob/user)
. = ..()
- if(is_editable && istype(held_item, /obj/item/pen))
+ if(is_editable && IS_WRITING_UTENSIL(held_item))
context[SCREENTIP_CONTEXT_LMB] = "Change design"
return CONTEXTUAL_SCREENTIP_SET
/obj/item/sign/attackby(obj/item/I, mob/user, params)
- if(is_editable && istype(I, /obj/item/pen))
+ if(is_editable && IS_WRITING_UTENSIL(I))
if(!length(GLOB.editable_sign_types))
CRASH("GLOB.editable_sign_types failed to populate")
var/choice = tgui_input_list(user, "Select a sign type", "Sign Customization", GLOB.editable_sign_types)
diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm
index 5f9450e435838..743d76ef182b2 100644
--- a/code/game/objects/structures/spawner.dm
+++ b/code/game/objects/structures/spawner.dm
@@ -70,7 +70,9 @@
spawn_time = spawn_time, \
max_spawned = max_mobs, \
faction = faction, \
- spawn_text = spawn_text, \
+ spawn_text = spawn_text,\
+ spawn_callback = CALLBACK(src, PROC_REF(on_mob_spawn)), \
+ initial_spawn_delay = !mapload, \
)
/obj/structure/spawner/attack_animal(mob/living/simple_animal/user, list/modifiers)
@@ -78,6 +80,8 @@
return
return ..()
+/obj/structure/spawner/proc/on_mob_spawn(atom/created_atom)
+ return
/obj/structure/spawner/syndicate
name = "warp beacon"
@@ -226,3 +230,74 @@
newmob.desc = "It's [living_mob], but [living_mob.p_their()] flesh has an ashy texture, and [living_mob.p_their()] face is featureless save an eerie smile."
src.visible_message(span_warning("[living_mob] reemerges from the link!"))
qdel(living_mob)
+
+/obj/structure/spawner/sentient
+ var/role_name = "A sentient mob"
+ var/assumed_control_message = "You are a sentient mob from a badly coded spawner"
+
+/obj/structure/spawner/sentient/Initialize(mapload)
+ . = ..()
+ notify_ghosts(
+ "A [name] has been created in \the [get_area(src)]!",
+ source = src,
+ header = "Sentient Spawner Created",
+ notify_flags = NOTIFY_CATEGORY_NOFLASH,
+ )
+
+/obj/structure/spawner/sentient/on_mob_spawn(atom/created_atom)
+ created_atom.AddComponent(\
+ /datum/component/ghost_direct_control,\
+ role_name = src.role_name,\
+ assumed_control_message = src.assumed_control_message,\
+ after_assumed_control = CALLBACK(src, PROC_REF(became_player_controlled)),\
+ )
+
+/obj/structure/spawner/sentient/proc/became_player_controlled(mob/proteon)
+ return
+
+/obj/structure/spawner/sentient/proteon_spawner
+ name = "eldritch gateway"
+ desc = "A dizzying structure that somehow links into Nar'Sie's own domain. The screams of the damned echo continously."
+ icon = 'icons/obj/antags/cult/structures.dmi'
+ icon_state = "hole"
+ light_power = 2
+ light_color = COLOR_CULT_RED
+ max_integrity = 50
+ density = FALSE
+ max_mobs = 2
+ spawn_time = 15 SECONDS
+ mob_types = list(/mob/living/basic/construct/proteon/hostile)
+ spawn_text = "arises from"
+ faction = list(FACTION_CULT)
+ role_name = "A proteon cult construct"
+ assumed_control_message = null
+
+/obj/structure/spawner/sentient/proteon_spawner/examine_status(mob/user)
+ if(IS_CULTIST(user) || !isliving(user))
+ return span_cult("It's at [round(atom_integrity * 100 / max_integrity)]% stability.")
+ return ..()
+
+/obj/structure/spawner/sentient/proteon_spawner/examine(mob/user)
+ . = ..()
+ if(!IS_CULTIST(user) && isliving(user))
+ var/mob/living/living_user = user
+ living_user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15)
+ . += span_danger("The voices of the damned echo relentlessly in your mind, continously rebounding on the walls of your self the more you focus on [src]. Your head pounds, better keep away...")
+ else
+ . += span_cult("The gateway will create one weak proteon construct every [spawn_time * 0.1] seconds, up to a total of [max_mobs], that may be controlled by the spirits of the dead.")
+
+/obj/structure/spawner/sentient/proteon_spawner/became_player_controlled(mob/living/basic/construct/proteon/proteon)
+ proteon.mind.add_antag_datum(/datum/antagonist/cult)
+ proteon.add_filter("awoken_proteon", 3, list("type" = "outline", "color" = COLOR_CULT_RED, "size" = 2))
+ visible_message(span_cult_bold("[proteon] awakens, glowing an eerie red as it stirs from its stupor!"))
+ playsound(proteon, 'sound/items/haunted/ghostitemattack.ogg', 100, TRUE)
+ proteon.balloon_alert_to_viewers("awoken!")
+ addtimer(CALLBACK(src, PROC_REF(remove_wake_outline), proteon), 8 SECONDS)
+
+/obj/structure/spawner/sentient/proteon_spawner/proc/remove_wake_outline(mob/proteon)
+ proteon.remove_filter("awoken_proteon")
+ proteon.add_filter("sentient_proteon", 3, list("type" = "outline", "color" = COLOR_CULT_RED, "size" = 2, "alpha" = 40))
+
+/obj/structure/spawner/sentient/proteon_spawner/handle_deconstruct(disassembled)
+ playsound('sound/hallucinations/veryfar_noise.ogg', 125)
+ visible_message(span_cult_bold("[src] completely falls apart, the screams of the damned reaching a feverous pitch before slowly fading away into nothing."))
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 04be4f9d72331..0a499440d4eb8 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -225,11 +225,6 @@
return ITEM_INTERACT_SUCCESS
/obj/structure/table/item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers)
- if(tool.tool_behaviour == TOOL_SCREWDRIVER || tool.tool_behaviour == TOOL_WRENCH)
- // continue to tool act
- // ...we need a better way to do this natively.
- // maybe flag to call tool acts before item interaction specifically?
- return NONE
if(istype(tool, /obj/item/construction/rcd))
return NONE
@@ -864,12 +859,6 @@
deconstruct(TRUE)
return ITEM_INTERACT_SUCCESS
-/obj/structure/rack/item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers)
- if(tool.tool_behaviour == TOOL_WRENCH)
- return NONE
-
- return item_interaction(user, tool, modifiers)
-
/obj/structure/rack/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
if((tool.item_flags & ABSTRACT) || user.combat_mode)
return NONE
diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm
index 2c0b3bdc95bbd..2d16ea30a69e4 100644
--- a/code/game/objects/structures/tank_dispenser.dm
+++ b/code/game/objects/structures/tank_dispenser.dm
@@ -2,7 +2,7 @@
/obj/structure/tank_dispenser
name = "tank dispenser"
- desc = "A simple yet bulky storage device for gas tanks. Holds up to 10 oxygen tanks and 10 plasma tanks."
+ desc = "A simple yet bulky storage device for gas tanks."
icon = 'icons/obj/structures.dmi'
icon_state = "dispenser"
density = TRUE
@@ -19,6 +19,7 @@
/obj/structure/tank_dispenser/Initialize(mapload)
. = ..()
+ AddElement(/datum/element/contextual_screentip_bare_hands, lmb_text = "Take Plasma Tank", rmb_text = "Take Oxygen Tank")
update_appearance()
/obj/structure/tank_dispenser/update_overlays()
@@ -34,6 +35,25 @@
if(5 to TANK_DISPENSER_CAPACITY)
. += "plasma-5"
+/obj/structure/tank_dispenser/attack_hand(mob/living/user, list/modifiers)
+ . = ..()
+ if (!plasmatanks)
+ balloon_alert(user, "no plasma tanks!")
+ return
+ dispense(/obj/item/tank/internals/plasma, user)
+ plasmatanks--
+ update_appearance()
+
+/obj/structure/tank_dispenser/attack_hand_secondary(mob/user, list/modifiers)
+ . = ..()
+ if (!oxygentanks)
+ balloon_alert(user, "no oxygen tanks!")
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+ dispense(/obj/item/tank/internals/oxygen, user)
+ oxygentanks--
+ update_appearance()
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+
/obj/structure/tank_dispenser/wrench_act(mob/living/user, obj/item/tool)
. = ..()
default_unfasten_wrench(user, tool)
@@ -52,67 +72,37 @@
else
full = TRUE
else if(!user.combat_mode)
- to_chat(user, span_notice("[I] does not fit into [src]."))
+ balloon_alert(user, "can't insert!")
return
else
return ..()
if(full)
- to_chat(user, span_notice("[src] can't hold any more of [I]."))
+ balloon_alert(user, "it is full!")
return
if(!user.transferItemToLoc(I, src))
return
- to_chat(user, span_notice("You put [I] in [src]."))
+ balloon_alert(user, "tank inserted")
update_appearance()
-/obj/structure/tank_dispenser/ui_state(mob/user)
- return GLOB.physical_state
-
-/obj/structure/tank_dispenser/ui_interact(mob/user, datum/tgui/ui)
- ui = SStgui.try_update_ui(user, src, ui)
- if(!ui)
- ui = new(user, src, "TankDispenser", name)
- ui.open()
-
-/obj/structure/tank_dispenser/ui_data(mob/user)
- var/list/data = list()
- data["oxygen"] = oxygentanks
- data["plasma"] = plasmatanks
-
- return data
-
-/obj/structure/tank_dispenser/ui_act(action, params)
- . = ..()
- if(.)
- return
- switch(action)
- if("plasma")
- if (plasmatanks == 0)
- return TRUE
-
- dispense(/obj/item/tank/internals/plasma, usr)
- plasmatanks--
- if("oxygen")
- if (oxygentanks == 0)
- return TRUE
-
- dispense(/obj/item/tank/internals/oxygen, usr)
- oxygentanks--
-
- update_appearance()
- return TRUE
-
-
/obj/structure/tank_dispenser/atom_deconstruct(disassembled = TRUE)
for(var/X in src)
var/obj/item/I = X
I.forceMove(loc)
new /obj/item/stack/sheet/iron (loc, 2)
+/obj/structure/tank_dispenser/examine(mob/user)
+ . = ..()
+ if(plasmatanks && oxygentanks)
+ . += span_notice("It has [plasmatanks] plasma tank\s and [oxygentanks] oxygen tank\s left.")
+ else if(plasmatanks || oxygentanks)
+ . += span_notice("It has [plasmatanks ? "[plasmatanks] plasma" : "[oxygentanks] oxygen"] tank\s left.")
+
/obj/structure/tank_dispenser/proc/dispense(tank_type, mob/receiver)
var/existing_tank = locate(tank_type) in src
if (isnull(existing_tank))
existing_tank = new tank_type
receiver.put_in_hands(existing_tank)
+ balloon_alert(receiver, "tank received")
#undef TANK_DISPENSER_CAPACITY
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 3437e2a5ae078..195fbbc643e0a 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -246,7 +246,7 @@
electronics = null
ae.forceMove(drop_location())
- else if(istype(W, /obj/item/pen))
+ else if(IS_WRITING_UTENSIL(W))
var/t = tgui_input_text(user, "Enter the name for the door", "Windoor Renaming", created_name, MAX_NAME_LEN)
if(!t)
return
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 5ddac3f5a5245..0076019532118 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -188,11 +188,11 @@
return
return ..()
-/obj/structure/window/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/structure/window/tool_act(mob/living/user, obj/item/tool, list/modifiers)
if(!can_be_reached(user))
return ITEM_INTERACT_SKIP_TO_ATTACK // Guess you get to hit it
add_fingerprint(user)
- return NONE
+ return ..()
/obj/structure/window/welder_act(mob/living/user, obj/item/tool)
if(atom_integrity >= max_integrity)
@@ -568,6 +568,14 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/spawner, 0)
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/unanchored/spawner, 0)
+// You can't rust glass! So only reinforced glass can be impacted.
+/obj/structure/window/reinforced/rust_heretic_act()
+ add_atom_colour(COLOR_RUSTED_GLASS, FIXED_COLOUR_PRIORITY)
+ AddElement(/datum/element/rust)
+ set_armor(/datum/armor/none)
+ take_damage(get_integrity() * 0.5)
+ modify_max_integrity(max_integrity * 0.5)
+
/obj/structure/window/plasma
name = "plasma window"
desc = "A window made out of a plasma-silicate alloy. It looks insanely tough to break and burn through."
diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm
index 8270e3d791a90..1d5b5671c2c0b 100644
--- a/code/game/turfs/open/_open.dm
+++ b/code/game/turfs/open/_open.dm
@@ -320,7 +320,7 @@
for(var/mob/living/L in contents)
if(L.bodytemperature <= 50 && !HAS_TRAIT(L, TRAIT_RESISTCOLD))
L.apply_status_effect(/datum/status_effect/freon)
- MakeSlippery(TURF_WET_PERMAFROST, 50)
+ MakeSlippery(TURF_WET_PERMAFROST, 10 SECONDS)
return TRUE
/turf/open/proc/water_vapor_gas_act()
diff --git a/code/game/turfs/open/floor/fancy_floor.dm b/code/game/turfs/open/floor/fancy_floor.dm
index e9331872907f4..935cb3b1f2c24 100644
--- a/code/game/turfs/open/floor/fancy_floor.dm
+++ b/code/game/turfs/open/floor/fancy_floor.dm
@@ -160,6 +160,9 @@
AddElement(/datum/element/diggable, /obj/item/stack/ore/glass, 2, worm_chance = 50, \
action_text = "uproot", action_text_third_person = "uproots")
+/turf/open/floor/grass/Airless
+ initial_gas_mix = AIRLESS_ATMOS
+
/turf/open/floor/grass/proc/spawniconchange()
icon_state = "grass[rand(0,3)]"
diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm
index b5f1e38faae3e..6e4834773c325 100644
--- a/code/game/turfs/open/floor/plating.dm
+++ b/code/game/turfs/open/floor/plating.dm
@@ -176,8 +176,8 @@
ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
return TRUE
-/turf/open/floor/plating/foam/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
- return user.combat_mode ? ITEM_INTERACT_SKIP_TO_ATTACK : ITEM_INTERACT_BLOCKING // Fuck you
+/turf/open/floor/plating/foam/welder_act(mob/living/user, obj/item/I)
+ return NONE // Fuck you
//reinforced plating deconstruction states
#define PLATE_INTACT 0
diff --git a/code/game/turfs/open/floor/plating/misc_plating.dm b/code/game/turfs/open/floor/plating/misc_plating.dm
index 704578438fdc3..101376e73aead 100644
--- a/code/game/turfs/open/floor/plating/misc_plating.dm
+++ b/code/game/turfs/open/floor/plating/misc_plating.dm
@@ -67,6 +67,10 @@
/turf/open/floor/plating/snowed/icemoon
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+/turf/open/floor/plating/snowed/standard_air
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ planetary_atmos = FALSE
+
/turf/open/floor/plating/snowed/smoothed
icon = 'icons/turf/floors/snow_turf.dmi'
icon_state = "snow_turf-0"
diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm
index 53450b85db0df..23e2b6b38db84 100644
--- a/code/game/turfs/open/lava.dm
+++ b/code/game/turfs/open/lava.dm
@@ -205,8 +205,8 @@
to_chat(user, span_warning("You need one rod to build a heatproof lattice."))
return
// Light a cigarette in the lava
- if(istype(C, /obj/item/clothing/mask/cigarette))
- var/obj/item/clothing/mask/cigarette/ciggie = C
+ if(istype(C, /obj/item/cigarette))
+ var/obj/item/cigarette/ciggie = C
if(ciggie.lit)
to_chat(user, span_warning("The [ciggie.name] is already lit!"))
return TRUE
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 515f1513ac754..565adb22dbc00 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -568,7 +568,6 @@ GLOBAL_LIST_EMPTY(station_turfs)
if(EXPLODE_LIGHT)
SSexplosions.low_mov_atom += movable_thing
-
/turf/narsie_act(force, ignore_mobs, probability = 20)
. = (prob(probability) || force)
for(var/I in src)
diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm
index f0f2fc4a8f076..ffeb1cce2731c 100644
--- a/code/modules/admin/verbs/borgpanel.dm
+++ b/code/modules/admin/verbs/borgpanel.dm
@@ -81,7 +81,7 @@ ADMIN_VERB(borg_panel, R_ADMIN, "Show Borg Panel", ADMIN_VERB_NO_DESCRIPTION, AD
message_admins("[key_name_admin(user)] deleted the cell of [ADMIN_LOOKUPFLW(borg)].")
log_silicon("[key_name(user)] deleted the cell of [key_name(borg)].")
if ("change_cell")
- var/chosen = pick_closest_path(null, make_types_fancy(typesof(/obj/item/stock_parts/cell)))
+ var/chosen = pick_closest_path(null, make_types_fancy(typesof(/obj/item/stock_parts/power_store/cell)))
if (!ispath(chosen))
chosen = text2path(chosen)
if (chosen)
diff --git a/code/modules/admin/verbs/ert.dm b/code/modules/admin/verbs/ert.dm
index c86d08151ee62..2d1ba075a4795 100644
--- a/code/modules/admin/verbs/ert.dm
+++ b/code/modules/admin/verbs/ert.dm
@@ -25,7 +25,7 @@
/datum/admins/proc/equipAntagOnDummy(mob/living/carbon/human/dummy/mannequin, datum/antagonist/antag)
- for(var/I in mannequin.get_equipped_items(include_pockets = TRUE))
+ for(var/I in mannequin.get_equipped_items(INCLUDE_POCKETS))
qdel(I)
if (ispath(antag, /datum/antagonist/ert))
var/datum/antagonist/ert/ert = antag
diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm
index 379b9475dc50b..c124a5fba2266 100644
--- a/code/modules/admin/verbs/secrets.dm
+++ b/code/modules/admin/verbs/secrets.dm
@@ -604,6 +604,25 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w
message_admins("[key_name_admin(holder)] [ctf_controller.instagib_mode ? "enabled" : "disabled"] instagib mode in CTF game: [selected_game]")
log_admin("[key_name_admin(holder)] [ctf_controller.instagib_mode ? "enabled" : "disabled"] instagib mode in CTF game: [selected_game]")
+ if("mass_heal")
+ if(!is_funmin)
+ return
+ var/heal_mobs = tgui_alert(usr, "Heal all mobs and return ghosts to their bodies?", "Mass Healing", list("Yes", "No"))
+ if(!heal_mobs || heal_mobs != "Yes")
+ return
+
+ for(var/mob/dead/observer/ghost in GLOB.player_list) //Return all ghosts if possible
+ if(!ghost.mind || !ghost.mind.current) //won't do anything if there is no body
+ continue
+ ghost.reenter_corpse()
+
+ for(var/mob/living/player in GLOB.player_list)
+ player.revive(ADMIN_HEAL_ALL, force_grab_ghost = TRUE)
+
+ sound_to_playing_players('sound/effects/pray_chaplain.ogg')
+ message_admins("[key_name_admin(holder)] healed everyone.")
+ log_admin("[key_name(holder)] healed everyone.")
+
if(E)
E.processing = FALSE
if(E.announce_when>0)
diff --git a/code/modules/admin/verbs/selectequipment.dm b/code/modules/admin/verbs/selectequipment.dm
index b94fd5cb2e455..415130fa1b727 100644
--- a/code/modules/admin/verbs/selectequipment.dm
+++ b/code/modules/admin/verbs/selectequipment.dm
@@ -209,7 +209,8 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(select_equipment, R_FUN, "Select Equipment", mob/ta
delete_pocket = TRUE
BLACKBOX_LOG_ADMIN_VERB("Select Equipment")
- for(var/obj/item/item in human_target.get_equipped_items(include_pockets = delete_pocket))
+ var/includes_flags = delete_pocket ? INCLUDE_POCKETS : NONE
+ for(var/obj/item/item in human_target.get_equipped_items(includes_flags))
qdel(item)
var/obj/item/organ/internal/brain/human_brain = human_target.get_organ_slot(BRAIN)
diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm
index cf5d5a83e8dfe..c72c97fb73402 100644
--- a/code/modules/antagonists/_common/antag_datum.dm
+++ b/code/modules/antagonists/_common/antag_datum.dm
@@ -61,6 +61,8 @@ GLOBAL_LIST_EMPTY(antagonists)
var/default_custom_objective = "Cause chaos on the space station."
/// Whether we give a hardcore random bonus for greentexting as this antagonist while playing hardcore random
var/hardcore_random_bonus = FALSE
+ /// A path to the audio stinger that plays upon gaining this datum.
+ var/stinger_sound
//ANTAG UI
@@ -342,6 +344,14 @@ GLOBAL_LIST_EMPTY(antagonists)
/datum/antagonist/proc/greet()
if(!silent)
to_chat(owner.current, span_big("You are \the [src]."))
+ play_stinger()
+
+/// Plays the antag stinger sound, if we have one
+/datum/antagonist/proc/play_stinger()
+ if(isnull(stinger_sound))
+ return
+
+ owner.current.playsound_local(get_turf(owner.current), stinger_sound, 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
/**
* Proc that sends fluff or instructional messages to the player when they lose this antag datum.
diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm
index bc22eedbfa189..440feb91b7622 100644
--- a/code/modules/antagonists/_common/antag_spawner.dm
+++ b/code/modules/antagonists/_common/antag_spawner.dm
@@ -443,7 +443,7 @@
name = "Syndicate Monkey Agent Kit"
head = /obj/item/clothing/head/fedora
- mask = /obj/item/clothing/mask/cigarette/syndicate
+ mask = /obj/item/cigarette/syndicate
uniform = /obj/item/clothing/under/syndicate
l_pocket = /obj/item/reagent_containers/cup/soda_cans/monkey_energy
r_pocket = /obj/item/storage/fancy/cigarettes/cigpack_syndicate
diff --git a/code/modules/antagonists/abductor/abductor.dm b/code/modules/antagonists/abductor/abductor.dm
index a4e1f2e5dcc8a..68cf781db9b05 100644
--- a/code/modules/antagonists/abductor/abductor.dm
+++ b/code/modules/antagonists/abductor/abductor.dm
@@ -7,6 +7,7 @@
show_in_antagpanel = FALSE //should only show subtypes
show_to_ghosts = TRUE
suicide_cry = "FOR THE MOTHERSHIP!!" // They can't even talk but y'know
+ stinger_sound = 'sound/ambience/antag/ayylien.ogg'
var/datum/team/abductor_team/team
var/sub_role
var/outfit
diff --git a/code/modules/antagonists/ashwalker/ashwalker.dm b/code/modules/antagonists/ashwalker/ashwalker.dm
index 7caa0d0a2fb0b..827d929b0fbb5 100644
--- a/code/modules/antagonists/ashwalker/ashwalker.dm
+++ b/code/modules/antagonists/ashwalker/ashwalker.dm
@@ -28,10 +28,14 @@
. = ..()
RegisterSignal(owner.current, COMSIG_MOB_EXAMINATE, PROC_REF(on_examinate))
owner.teach_crafting_recipe(/datum/crafting_recipe/skeleton_key)
+ if(FACTION_NEUTRAL in owner.current.faction)
+ owner.current.faction.Remove(FACTION_NEUTRAL) // ashwalkers aren't neutral; they're ashwalker-aligned
/datum/antagonist/ashwalker/on_removal()
. = ..()
UnregisterSignal(owner.current, COMSIG_MOB_EXAMINATE)
+ if(!(FACTION_NEUTRAL in owner.current.faction))
+ owner.current.faction.Add(FACTION_NEUTRAL)
/datum/antagonist/ashwalker/proc/on_examinate(datum/source, atom/A)
SIGNAL_HANDLER
diff --git a/code/modules/antagonists/battlecruiser/battlecruiser.dm b/code/modules/antagonists/battlecruiser/battlecruiser.dm
index 8560300698f80..bcc2fc963309a 100644
--- a/code/modules/antagonists/battlecruiser/battlecruiser.dm
+++ b/code/modules/antagonists/battlecruiser/battlecruiser.dm
@@ -20,6 +20,7 @@
antag_hud_name = "battlecruiser_crew"
antagpanel_category = ANTAG_GROUP_SYNDICATE
job_rank = ROLE_BATTLECRUISER_CREW
+ stinger_sound = 'sound/ambience/antag/ops.ogg'
/// Team to place the crewmember on.
var/datum/team/battlecruiser/battlecruiser_team
@@ -27,7 +28,7 @@
return battlecruiser_team
/datum/antagonist/battlecruiser/greet()
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0, use_reverb = FALSE)
+ play_stinger()
to_chat(owner, span_big("You are a [name]!"))
owner.announce_objectives()
diff --git a/code/modules/antagonists/blob/blob_antag.dm b/code/modules/antagonists/blob/blob_antag.dm
index 07ca14586e1f5..9cad238bb0011 100644
--- a/code/modules/antagonists/blob/blob_antag.dm
+++ b/code/modules/antagonists/blob/blob_antag.dm
@@ -6,6 +6,7 @@
show_in_antagpanel = FALSE
job_rank = ROLE_BLOB
ui_name = "AntagInfoBlob"
+ stinger_sound = 'sound/ambience/antag/blobalert.ogg'
/// Action to release a blob infection
var/datum/action/innate/blobpop/pop_action
/// Initial points for a human blob
@@ -31,8 +32,6 @@
else
has_already_popped = TRUE
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/blobalert.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
-
/datum/antagonist/blob/on_gain()
create_objectives()
. = ..()
diff --git a/code/modules/antagonists/brother/brother.dm b/code/modules/antagonists/brother/brother.dm
index 9cfd0cbf55d94..b62b18a02aedf 100644
--- a/code/modules/antagonists/brother/brother.dm
+++ b/code/modules/antagonists/brother/brother.dm
@@ -9,6 +9,7 @@
suicide_cry = "FOR MY BROTHER!!"
antag_moodlet = /datum/mood_event/focused
hardcore_random_bonus = TRUE
+ stinger_sound = 'sound/ambience/antag/tatoralert.ogg'
VAR_PRIVATE
datum/team/brother_team/team
@@ -172,7 +173,7 @@
owner.announce_objectives()
/datum/antagonist/brother/proc/finalize_brother()
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/tatoralert.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
+ play_stinger()
team.update_name()
/datum/antagonist/brother/admin_add(datum/mind/new_owner,mob/admin)
diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm
index 8d1068baa1368..20e1c94ee9a60 100644
--- a/code/modules/antagonists/changeling/changeling.dm
+++ b/code/modules/antagonists/changeling/changeling.dm
@@ -14,6 +14,7 @@
can_assign_self_objectives = TRUE
default_custom_objective = "Consume the station's most valuable genomes."
hardcore_random_bonus = TRUE
+ stinger_sound = 'sound/ambience/antag/ling_alert.ogg'
/// Whether to give this changeling objectives or not
var/give_objectives = TRUE
/// Weather we assign objectives which compete with other lings
@@ -39,7 +40,7 @@
/// The max chemical storage the changeling currently has.
var/total_chem_storage = 75
/// The chemical recharge rate per life tick.
- var/chem_recharge_rate = 0.5
+ var/chem_recharge_rate = 1
/// Any additional modifiers triggered by changelings that modify the chem_recharge_rate.
var/chem_recharge_slowdown = 0
/// The range this ling can sting things.
@@ -127,7 +128,6 @@
if(give_objectives)
forge_objectives()
owner.current.get_language_holder().omnitongue = TRUE
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ling_alert.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
return ..()
/datum/antagonist/changeling/apply_innate_effects(mob/living/mob_override)
@@ -262,14 +262,18 @@
SIGNAL_HANDLER
var/delta_time = DELTA_WORLD_TIME(SSmobs)
+ var/mob/living/living_owner = owner.current
// If dead, we only regenerate up to half chem storage.
if(owner.current.stat == DEAD)
adjust_chemicals((chem_recharge_rate - chem_recharge_slowdown) * delta_time, total_chem_storage * 0.5)
- // If we're not dead - we go up to the full chem cap.
+ // If we're not dead and not on fire - we go up to the full chem cap at normal speed. If on fire we only regenerate at 1/4th the normal speed
else
- adjust_chemicals((chem_recharge_rate - chem_recharge_slowdown) * delta_time)
+ if(living_owner.fire_stacks && living_owner.on_fire)
+ adjust_chemicals((chem_recharge_rate - 0.75) * delta_time)
+ else
+ adjust_chemicals((chem_recharge_rate - chem_recharge_slowdown) * delta_time)
/**
* Signal proc for [COMSIG_LIVING_POST_FULLY_HEAL]
@@ -1023,6 +1027,7 @@
total_chem_storage = 50
/datum/antagonist/changeling/headslug/greet()
+ play_stinger()
to_chat(owner, span_boldannounce("You are a fresh changeling birthed from a headslug! \
You aren't as strong as a normal changeling, as you are newly born."))
@@ -1035,6 +1040,7 @@
return finish_preview_icon(final_icon)
/datum/antagonist/changeling/space/greet()
+ play_stinger()
to_chat(src, span_changeling("Our mind stirs to life, from the depths of an endless slumber..."))
/datum/outfit/changeling
diff --git a/code/modules/antagonists/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm
index 23b4f9548c424..d06d8fe91735a 100644
--- a/code/modules/antagonists/changeling/changeling_power.dm
+++ b/code/modules/antagonists/changeling/changeling_power.dm
@@ -32,6 +32,8 @@
var/ignores_fakedeath = FALSE
/// used by a few powers that toggle
var/active = FALSE
+ /// Does this ability stop working if you are burning?
+ var/disabled_by_fire = TRUE
/*
changeling code now relies on on_purchase to grant powers.
@@ -61,6 +63,9 @@ the same goes for Remove(). if you override Remove(), call parent or else your p
/datum/action/changeling/proc/try_to_sting(mob/living/user, mob/living/target)
if(!can_sting(user, target))
return FALSE
+ if(disabled_by_fire && user.fire_stacks && user.on_fire)
+ user.balloon_alert(user, "on fire!")
+ return FALSE
var/datum/antagonist/changeling/changeling = IS_CHANGELING(user)
if(sting_action(user, target))
sting_feedback(user, target)
diff --git a/code/modules/antagonists/changeling/powers/adrenaline.dm b/code/modules/antagonists/changeling/powers/adrenaline.dm
index 9d2abfe623314..3b6a550b18b0f 100644
--- a/code/modules/antagonists/changeling/powers/adrenaline.dm
+++ b/code/modules/antagonists/changeling/powers/adrenaline.dm
@@ -1,12 +1,13 @@
/datum/action/changeling/adrenaline
name = "Repurposed Glands"
- desc = "We shift almost all available muscle mass from the arms to the legs, disabling the former but making us unable to be downed for 15 seconds. Costs 10 chemicals."
+ desc = "We shift almost all available muscle mass from the arms to the legs, disabling the former but making us unable to be downed for 20 seconds. Costs 25 chemicals."
helptext = "Disables your arms and retracts bioweaponry, but regenerates your legs, grants you speed, and wakes you up from any stun."
button_icon_state = "adrenaline"
chemical_cost = 25 // similar cost to biodegrade, as they serve similar purposes
dna_cost = 2
req_human = FALSE
req_stat = CONSCIOUS
+ disabled_by_fire = FALSE
/datum/action/changeling/adrenaline/can_sting(mob/living/user, mob/living/target)
. = ..()
diff --git a/code/modules/antagonists/changeling/powers/biodegrade.dm b/code/modules/antagonists/changeling/powers/biodegrade.dm
index 2b1753c27273a..8a5fae3bd8aed 100644
--- a/code/modules/antagonists/changeling/powers/biodegrade.dm
+++ b/code/modules/antagonists/changeling/powers/biodegrade.dm
@@ -6,6 +6,7 @@
chemical_cost = 30 //High cost to prevent spam
dna_cost = 2
req_human = TRUE
+ disabled_by_fire = FALSE
/datum/action/changeling/biodegrade/sting_action(mob/living/carbon/human/user)
if(user.handcuffed)
diff --git a/code/modules/antagonists/changeling/powers/defib_grasp.dm b/code/modules/antagonists/changeling/powers/defib_grasp.dm
index 135b9b243f721..867a595e17dcd 100644
--- a/code/modules/antagonists/changeling/powers/defib_grasp.dm
+++ b/code/modules/antagonists/changeling/powers/defib_grasp.dm
@@ -6,6 +6,7 @@
while we are dead or in stasis. Will also stun cyborgs momentarily."
owner_has_control = FALSE
dna_cost = 0
+ disabled_by_fire = FALSE
/// Flags to pass to fully heal when we get zapped
var/heal_flags = HEAL_DAMAGE|HEAL_BODY|HEAL_STATUS|HEAL_CC_STATUS
diff --git a/code/modules/antagonists/changeling/powers/fakedeath.dm b/code/modules/antagonists/changeling/powers/fakedeath.dm
index 75d4996b8b2d7..1dff58377fd4a 100644
--- a/code/modules/antagonists/changeling/powers/fakedeath.dm
+++ b/code/modules/antagonists/changeling/powers/fakedeath.dm
@@ -7,6 +7,7 @@
req_dna = 1
req_stat = DEAD
ignores_fakedeath = TRUE
+ disabled_by_fire = FALSE
/// How long it takes for revival to ready upon entering stasis.
/// The changeling can opt to stay in fakedeath for longer, though.
diff --git a/code/modules/antagonists/changeling/powers/headcrab.dm b/code/modules/antagonists/changeling/powers/headcrab.dm
index 30970832df0a4..0b7668260d769 100644
--- a/code/modules/antagonists/changeling/powers/headcrab.dm
+++ b/code/modules/antagonists/changeling/powers/headcrab.dm
@@ -8,6 +8,7 @@
req_human = TRUE
req_stat = DEAD
ignores_fakedeath = TRUE
+ disabled_by_fire = FALSE
/datum/action/changeling/headcrab/sting_action(mob/living/user)
set waitfor = FALSE
diff --git a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm
index 0e468159a3c7a..7b9eee1bfe94a 100644
--- a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm
+++ b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm
@@ -55,7 +55,7 @@
var/datum/antagonist/changeling/antag_datum = IS_CHANGELING(C)
if(istype(antag_datum))
var/their_loc = get_turf(C)
- var/distance = get_dist_euclidian(my_loc, their_loc)
+ var/distance = get_dist_euclidean(my_loc, their_loc)
if (distance < CHANGELING_PHEROMONE_MAX_DISTANCE)
changelings[C] = (CHANGELING_PHEROMONE_MAX_DISTANCE ** 2) - (distance ** 2)
diff --git a/code/modules/antagonists/changeling/powers/shriek.dm b/code/modules/antagonists/changeling/powers/shriek.dm
index aa204d89a166e..cfbcc7b64ec27 100644
--- a/code/modules/antagonists/changeling/powers/shriek.dm
+++ b/code/modules/antagonists/changeling/powers/shriek.dm
@@ -6,6 +6,7 @@
chemical_cost = 20
dna_cost = 1
req_human = TRUE
+ disabled_by_fire = FALSE
//A flashy ability, good for crowd control and sowing chaos.
/datum/action/changeling/resonant_shriek/sting_action(mob/user)
@@ -41,6 +42,7 @@
button_icon_state = "dissonant_shriek"
chemical_cost = 20
dna_cost = 1
+ disabled_by_fire = FALSE
/datum/action/changeling/dissonant_shriek/sting_action(mob/user)
..()
diff --git a/code/modules/antagonists/changeling/powers/strained_muscles.dm b/code/modules/antagonists/changeling/powers/strained_muscles.dm
index 19c4458a388bc..3ea59f5df089b 100644
--- a/code/modules/antagonists/changeling/powers/strained_muscles.dm
+++ b/code/modules/antagonists/changeling/powers/strained_muscles.dm
@@ -11,6 +11,7 @@
req_human = TRUE
var/stacks = 0 //Increments every 5 seconds; damage increases over time
active = FALSE //Whether or not you are a hedgehog
+ disabled_by_fire = FALSE
/datum/action/changeling/strained_muscles/sting_action(mob/living/carbon/user)
..()
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index 192d9c4e66d5a..eb55138a4483a 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -12,6 +12,8 @@
default_button_position = DEFAULT_BLOODSPELLS
var/list/spells = list()
var/channeling = FALSE
+ /// If the magic has been enhanced somehow, likely due to a crimson focus.
+ var/magic_enhanced = FALSE
/datum/action/innate/cult/blood_magic/Remove()
for(var/X in spells)
@@ -29,7 +31,7 @@
var/atom/movable/screen/movable/action_button/button = viewers[hud]
var/position = screen_loc_to_offset(button.screen_loc)
var/list/position_list = list()
- for(var/possible_position in 1 to MAX_BLOODCHARGE)
+ for(var/possible_position in 1 to magic_enhanced ? ENHANCED_BLOODCHARGE : MAX_BLOODCHARGE)
position_list += possible_position
for(var/datum/action/innate/cult/blood_spell/blood_spell in spells)
if(blood_spell.positioned)
@@ -50,10 +52,10 @@
rune = TRUE
break
if(rune)
- limit = MAX_BLOODCHARGE
+ limit = magic_enhanced ? ENHANCED_BLOODCHARGE : MAX_BLOODCHARGE
if(length(spells) >= limit)
if(rune)
- to_chat(owner, span_cult_italic("You cannot store more than [MAX_BLOODCHARGE] spells. Pick a spell to remove."))
+ to_chat(owner, span_cult_italic("You cannot store more than [limit] spells. Pick a spell to remove."))
else
to_chat(owner, span_cult_bold_italic("You cannot store more than [RUNELESS_MAX_BLOODCHARGE] spells without an empowering rune! Pick a spell to remove."))
var/nullify_spell = tgui_input_list(owner, "Spell to remove", "Current Spells", spells)
@@ -86,10 +88,15 @@
else
to_chat(owner, span_cult_italic("You are already invoking blood magic!"))
return
- if(do_after(owner, 100 - rune*60, target = owner))
+ var/spell_carving_timer = 10 SECONDS
+ if(rune)
+ spell_carving_timer = 4 SECONDS
+ if(magic_enhanced)
+ spell_carving_timer *= 0.5
+ if(do_after(owner, spell_carving_timer, target = owner))
if(ishuman(owner))
var/mob/living/carbon/human/human_owner = owner
- human_owner.bleed(40 - rune*32)
+ human_owner.bleed(rune ? 8 : 40)
var/datum/action/innate/cult/blood_spell/new_spell = new BS(owner.mind)
new_spell.Grant(owner, src)
spells += new_spell
@@ -428,19 +435,35 @@
return
var/datum/antagonist/cult/cultist = IS_CULTIST(user)
var/datum/team/cult/cult_team = cultist.get_team()
- var/effect_coef = 1 - (cult_team.cult_risen ? 0.4 : 0) - (cult_team.cult_ascendent ? 0.5 : 0)
+ var/effect_coef = 1
+ if(cult_team.cult_ascendent)
+ effect_coef = 0.1
+ else if(cult_team.cult_risen)
+ effect_coef = 0.4
user.visible_message(
span_warning("[user] holds up [user.p_their()] hand, which explodes in a flash of red light!"),
span_cult_italic("You attempt to stun [target] with the spell!"),
visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE,
)
user.mob_light(range = 1.1, power = 2, color = LIGHT_COLOR_BLOOD_MAGIC, duration = 0.2 SECONDS)
+ // Heretics are momentarily disoriented by the stunning aura. Enough for both parties to go 'oh shit' but only a mild combat ability.
+ // Heretics have an identical effect on their grasp. The cultist's worse spell preparation is offset by their extra gear and teammates.
if(IS_HERETIC(target))
- to_chat(user, span_warning("Some force greater than you intervenes! [target] is protected by the Forgotten Gods!"))
- to_chat(target, span_warning("You are protected by your faith to the Forgotten Gods."))
+ target.AdjustKnockdown(0.5 SECONDS)
+ target.adjust_confusion_up_to(1.5 SECONDS, 3 SECONDS)
+ target.adjust_dizzy_up_to(1.5 SECONDS, 3 SECONDS)
+ ADD_TRAIT(target, TRAIT_NO_SIDE_KICK, REF(src)) // We don't want this to be a good stunning tool, just minor disorientation
+ addtimer(TRAIT_CALLBACK_REMOVE(target, TRAIT_NO_SIDE_KICK, REF(src)), 1 SECONDS)
+
var/old_color = target.color
- target.color = rgb(0, 128, 0)
- animate(target, color = old_color, time = 1 SECONDS, easing = EASE_IN)
+ target.color = COLOR_HERETIC_GREEN
+ animate(target, color = old_color, time = 4 SECONDS, easing = EASE_IN)
+ target.mob_light(range = 1.5, power = 2.5, color = COLOR_HERETIC_GREEN, duration = 0.5 SECONDS)
+ playsound(target, 'sound/magic/magic_block_mind.ogg', 150, TRUE) // insanely quiet
+
+ to_chat(user, span_warning("An eldritch force intervenes as you touch [target], absorbing most of the effects!"))
+ to_chat(target, span_warning("As [user] touches you with vile magicks, the Mansus absorbs most of the effects!"))
+ target.balloon_alert_to_viewers("absorbed!")
else if(target.can_block_magic())
to_chat(user, span_warning("The spell had no effect!"))
else
diff --git a/code/modules/antagonists/cult/cult_bastard_sword.dm b/code/modules/antagonists/cult/cult_bastard_sword.dm
deleted file mode 100644
index 0d70bd503fb7f..0000000000000
--- a/code/modules/antagonists/cult/cult_bastard_sword.dm
+++ /dev/null
@@ -1,98 +0,0 @@
-
-/// Cult Bastard Sword, earned by cultists when they manage to sacrifice a heretic.
-/obj/item/cult_bastard
- name = "bloody bastard sword"
- desc = "An enormous sword used by Nar'Sien cultists to rapidly harvest the souls of non-believers."
- w_class = WEIGHT_CLASS_HUGE
- block_chance = 50
- block_sound = 'sound/weapons/parry.ogg'
- throwforce = 20
- force = 35
- armour_penetration = 45
- throw_speed = 1
- throw_range = 3
- sharpness = SHARP_EDGED
- light_color = "#ff0000"
- attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends")
- attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend")
- icon = 'icons/obj/weapons/sword.dmi'
- icon_state = "cultbastard"
- inhand_icon_state = "cultbastard"
- hitsound = 'sound/weapons/bladeslice.ogg'
- lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/64x64_righthand.dmi'
- inhand_x_dimension = 64
- inhand_y_dimension = 64
- actions_types = list()
- item_flags = SLOWS_WHILE_IN_HAND
- ///if we are using our attack_self ability
- var/spinning = FALSE
-
-/obj/item/cult_bastard/Initialize(mapload)
- . = ..()
- set_light(4)
- AddComponent(/datum/component/butchering, 50, 80)
- AddComponent(/datum/component/two_handed, require_twohands = TRUE)
- AddComponent(/datum/component/soul_stealer, soulstone_type = /obj/item/soulstone)
- AddComponent( \
- /datum/component/spin2win, \
- spin_cooldown_time = 25 SECONDS, \
- on_spin_callback = CALLBACK(src, PROC_REF(on_spin)), \
- on_unspin_callback = CALLBACK(src, PROC_REF(on_unspin)), \
- start_spin_message = span_danger("%USER begins swinging the sword around with inhuman strength!"), \
- end_spin_message = span_warning("%USER's inhuman strength dissipates and the sword's runes grow cold!") \
- )
-
-/obj/item/cult_bastard/proc/on_spin(mob/living/user, duration)
- var/oldcolor = user.color
- user.color = "#ff0000"
- user.add_stun_absorption(
- source = name,
- duration = duration,
- priority = 2,
- message = span_warning("%EFFECT_OWNER doesn't even flinch as the sword's power courses through [user.p_them()]!"),
- self_message = span_boldwarning("You shrug off the stun!"),
- examine_message = span_warning("%EFFECT_OWNER_THEYRE glowing with a blazing red aura!"),
- )
- user.spin(duration, 1)
- animate(user, color = oldcolor, time = duration, easing = EASE_IN)
- addtimer(CALLBACK(user, TYPE_PROC_REF(/atom, update_atom_colour)), duration)
- block_chance = 100
- slowdown += 1.5
- spinning = TRUE
-
-/obj/item/cult_bastard/proc/on_unspin(mob/living/user)
- block_chance = 50
- slowdown -= 1.5
- spinning = FALSE
-
-/obj/item/cult_bastard/can_be_pulled(user)
- return FALSE
-
-/obj/item/cult_bastard/pickup(mob/living/user)
- . = ..()
- if(!IS_CULTIST(user))
- if(!IS_HERETIC(user))
- to_chat(user, "\"I wouldn't advise that.\"")
- force = 5
- return
- else
- to_chat(user, span_cult_large("\"You cling to the Forgotten Gods, as if you're more than their pawn.\""))
- to_chat(user, span_userdanger("A horrible force yanks at your arm!"))
- user.emote("scream")
- user.apply_damage(30, BRUTE, pick(GLOB.arm_zones))
- user.dropItemToGround(src, TRUE)
- user.Paralyze(50)
- return
- force = initial(force)
-
-/obj/item/cult_bastard/IsReflect(def_zone)
- if(!spinning)
- return FALSE
- return TRUE
-
-/obj/item/cult_bastard/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE)
- if(!prob(final_block_chance))
- return FALSE
- owner.visible_message(span_danger("[owner] parries [attack_text] with [src]!"))
- return TRUE
diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm
index c0051aec87cd1..ef7292267d69f 100644
--- a/code/modules/antagonists/cult/cult_items.dm
+++ b/code/modules/antagonists/cult/cult_items.dm
@@ -76,6 +76,8 @@ Striking a noncultist, however, will tear their flesh."}
block_sound = 'sound/weapons/parry.ogg'
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends")
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend")
+ /// If TRUE, it can be used at will by anyone, non-cultists included
+ var/free_use = FALSE
/obj/item/melee/cultblade/Initialize(mapload)
. = ..()
@@ -93,7 +95,7 @@ Striking a noncultist, however, will tear their flesh."}
return FALSE
/obj/item/melee/cultblade/attack(mob/living/target, mob/living/carbon/human/user)
- if(!IS_CULTIST(user))
+ if(!IS_CULTIST(user) && !free_use)
user.Paralyze(100)
user.dropItemToGround(src, TRUE)
user.visible_message(span_warning("A powerful force shoves [user] away from [target]!"), \
@@ -106,6 +108,174 @@ Striking a noncultist, however, will tear their flesh."}
return
..()
+#define WIELDER_SPELLS "wielder_spell"
+#define SWORD_SPELLS "sword_spell"
+#define SWORD_PREFIX "sword_prefix"
+
+/obj/item/melee/cultblade/haunted
+ name = "haunted longsword"
+ desc = "An eerie sword with a blade that is less 'black' than it is 'absolute nothingness'. It glows with furious, restrained green energy."
+ icon_state = "hauntedblade"
+ inhand_icon_state = "hauntedblade"
+ worn_icon_state = "hauntedblade"
+ force = 35
+ throwforce = 35
+ block_chance = 55
+ wound_bonus = -25
+ bare_wound_bonus = 30
+ free_use = TRUE
+ light_color = COLOR_HERETIC_GREEN
+ light_range = 4
+ /// holder for the actual action when created.
+ var/datum/action/cooldown/spell/path_wielder_action
+ var/mob/living/trapped_entity
+ /// The heretic path that the variable below uses to index abilities. Assigned when the heretic is ensouled.
+ var/heretic_path
+ /// Nested static list used to index abilities and names.
+ var/static/list/heretic_paths_to_haunted_sword_abilities = list(
+ // Ash
+ PATH_ASH = list(
+ WIELDER_SPELLS = list(/datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash),
+ SWORD_SPELLS = list(/datum/action/cooldown/spell/pointed/ash_beams),
+ SWORD_PREFIX = "ashen",
+ ),
+ // Flesh
+ PATH_FLESH = list(
+ WIELDER_SPELLS = list(/datum/action/cooldown/spell/pointed/blood_siphon),
+ SWORD_SPELLS = list(/datum/action/cooldown/spell/pointed/cleave),
+ SWORD_PREFIX = "sanguine",
+ ),
+ // Void
+ PATH_VOID = list(
+ WIELDER_SPELLS = list(/datum/action/cooldown/spell/pointed/void_phase),
+ SWORD_SPELLS = list(/datum/action/cooldown/spell/cone/staggered/cone_of_cold/void),
+ SWORD_PREFIX = "tenebrous",
+ ),
+ // Blade
+ PATH_BLADE = list(
+ WIELDER_SPELLS = list(/datum/action/cooldown/spell/pointed/projectile/furious_steel/haunted),
+ SWORD_SPELLS = list(/datum/action/cooldown/spell/pointed/projectile/furious_steel/solo),
+ SWORD_PREFIX = "keen",
+ ),
+ // Rust
+ PATH_RUST = list(
+ WIELDER_SPELLS = list(/datum/action/cooldown/spell/cone/staggered/entropic_plume),
+ SWORD_SPELLS = list(/datum/action/cooldown/spell/aoe/rust_conversion, /datum/action/cooldown/spell/pointed/rust_construction),
+ SWORD_PREFIX = "rusted",
+ ),
+ // Cosmic
+ PATH_COSMIC = list(
+ WIELDER_SPELLS = list(/datum/action/cooldown/spell/conjure/cosmic_expansion),
+ SWORD_SPELLS = list(/datum/action/cooldown/spell/pointed/projectile/star_blast),
+ SWORD_PREFIX = "astral",
+ ),
+ // Lock
+ PATH_LOCK = list(
+ WIELDER_SPELLS = list(/datum/action/cooldown/spell/pointed/burglar_finesse),
+ SWORD_SPELLS = list(/datum/action/cooldown/spell/pointed/apetra_vulnera),
+ SWORD_PREFIX = "incisive",
+ ),
+ // Moon
+ PATH_MOON = list(
+ WIELDER_SPELLS = list(/datum/action/cooldown/spell/pointed/projectile/moon_parade),
+ SWORD_SPELLS = list(/datum/action/cooldown/spell/pointed/moon_smile),
+ SWORD_PREFIX = "shimmering",
+ ),
+ // Starter
+ PATH_START = list(
+ WIELDER_SPELLS = null,
+ SWORD_SPELLS = null,
+ SWORD_PREFIX = "stillborn", // lol loser
+ ) ,
+ )
+
+/obj/item/melee/cultblade/haunted/Initialize(mapload, mob/soul_to_bind, mob/awakener, do_bind = TRUE)
+ . = ..()
+
+ AddElement(/datum/element/heretic_focus)
+ add_traits(list(TRAIT_CASTABLE_LOC, TRAIT_SPELLS_TRANSFER_TO_LOC), INNATE_TRAIT)
+ if(do_bind && !mapload)
+ bind_soul(soul_to_bind, awakener)
+
+/obj/item/melee/cultblade/haunted/proc/bind_soul(mob/soul_to_bind, mob/awakener)
+
+ var/datum/mind/trapped_mind = soul_to_bind?.mind
+
+ if(!trapped_mind)
+ return // Can't do anything further down the list
+
+ if(trapped_mind)
+ AddComponent(/datum/component/spirit_holding,\
+ soul_to_bind = trapped_mind,\
+ awakener = awakener,\
+ allow_renaming = FALSE,\
+ allow_channeling = FALSE,\
+ )
+
+ // Get the heretic's new body and antag datum.
+ trapped_entity = trapped_mind?.current
+ trapped_entity.key = trapped_mind?.key
+ var/datum/antagonist/heretic/heretic_holder = IS_HERETIC(trapped_entity)
+ if(!heretic_holder)
+ stack_trace("[soul_to_bind] in but not a heretic on the heretic soul blade.")
+
+ // Give the spirit a spell that lets them try to fly around.
+ var/datum/action/cooldown/spell/pointed/sword_fling/fling_act = \
+ new /datum/action/cooldown/spell/pointed/sword_fling(trapped_mind, to_fling = src)
+ fling_act.Grant(trapped_entity)
+
+ // Set the sword's path for spell selection.
+ heretic_path = heretic_holder.heretic_path
+
+ // Copy the objectives to keep for roundend, remove the datum as neither us nor the heretic need it anymore
+ var/list/copied_objectives = heretic_holder.objectives.Copy()
+ trapped_entity.mind.remove_antag_datum(/datum/antagonist/heretic)
+
+ // Add the fallen antag datum, give them a heads-up of what's happening.
+ var/datum/antagonist/soultrapped_heretic/bozo = new()
+ bozo.objectives |= copied_objectives
+ trapped_entity.mind.add_antag_datum(bozo)
+ to_chat(trapped_entity, span_userdanger("You've been sacrificed to the Enemy, and trapped inside a haunted blade! While you cannot escape, you may help the Cult, your current wielder, or even pester everyone with what few abilities you kept."))
+
+ // Assigning the spells to give to the wielder and spirit.
+ // Let them cast the given spell.
+ ADD_TRAIT(trapped_entity, TRAIT_ALLOW_HERETIC_CASTING, INNATE_TRAIT)
+
+ var/list/path_spells = heretic_paths_to_haunted_sword_abilities[heretic_path]
+
+ var/list/wielder_spells = path_spells[WIELDER_SPELLS]
+ var/list/sword_spells = path_spells[SWORD_SPELLS]
+
+ name = "[path_spells[SWORD_PREFIX]] [name]"
+
+
+ // Granting the path spells. The sword spirit gains it outright, while it's just instanced for wielders to be added on pickup.
+
+ if(sword_spells)
+ for(var/datum/action/cooldown/spell/sword_spell as anything in sword_spells)
+ sword_spell = new sword_spell(trapped_entity)
+ sword_spell?.Grant(trapped_entity)
+ sword_spell?.overlay_icon_state = "bg_cult_border" // for flavor, and also helps distinguish
+
+
+ if(wielder_spells)
+ for(var/datum/action/cooldown/spell/wielder_spell as anything in wielder_spells)
+ path_wielder_action = new wielder_spell(src)
+ wielder_spell?.overlay_icon_state = "bg_cult_border"
+
+/obj/item/melee/cultblade/haunted/equipped(mob/user, slot, initial)
+ . = ..()
+ if(slot & ITEM_SLOT_HANDS)
+ path_wielder_action?.Grant(user)
+
+/obj/item/melee/cultblade/haunted/dropped(mob/user, silent)
+ . = ..()
+ path_wielder_action?.Remove(user)
+
+#undef WIELDER_SPELLS
+#undef SWORD_SPELLS
+#undef SWORD_PREFIX
+
/obj/item/melee/cultblade/ghost
name = "eldritch sword"
force = 19 //can't break normal airlocks
@@ -120,7 +290,7 @@ Striking a noncultist, however, will tear their flesh."}
/obj/item/melee/cultblade/pickup(mob/living/user)
..()
- if(!IS_CULTIST(user))
+ if(!IS_CULTIST(user) && !free_use)
to_chat(user, span_cult_large("\"I wouldn't advise that.\""))
/datum/action/innate/dash/cult
@@ -563,6 +733,78 @@ Striking a noncultist, however, will tear their flesh."}
#undef MAX_SHUTTLE_CURSES
+#define GATEWAY_TURF_SCAN_RANGE 40
+
+/obj/item/proteon_orb
+ name = "summoning orb"
+ desc = "An eerie translucent orb that feels impossibly light. Legends say summoning orbs are created from corrupted scrying orbs. If you hold it close to your ears, you can hear the screams of the damned."
+ icon = 'icons/obj/antags/cult/items.dmi'
+ icon_state = "summoning_orb"
+ light_range = 3
+ light_color = COLOR_CULT_RED
+
+/obj/item/proteon_orb/examine(mob/user)
+ . = ..()
+ if(!IS_CULTIST(user) && isliving(user))
+ var/mob/living/living_user = user
+ living_user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5)
+ . += span_danger("It hurts just to look at it. Better keep away.")
+ else
+ . += span_cult("It can be used to create a gateway to Nar'Sie's domain, which will summon weak, sentient constructs over time.")
+
+/obj/item/proteon_orb/attack_self(mob/living/user)
+
+ var/list/turfs_to_scan = detect_room(get_turf(user), max_size = GATEWAY_TURF_SCAN_RANGE)
+
+ if(!IS_CULTIST(user))
+ to_chat(user, span_cult_large("\"You want to enter my domain? Go ahead.\""))
+ turfs_to_scan = null // narsie wants to have some fun and the veil wont stop her
+
+ for(var/turf/hole_candidate as anything in turfs_to_scan)
+ if(locate(/obj/structure/spawner/sentient/proteon_spawner) in hole_candidate)
+ to_chat(user, span_cult_bold("There's a gateway too close nearby. The veil is not yet weak enough to allow such close rips in its fabric."))
+ return
+ to_chat(user, span_cult_bold_italic("You focus on [src] and direct it into the ground. It rumbles..."))
+
+ var/turf/open/hole_spot = get_turf(user)
+ if(!istype(hole_spot) || isgroundlessturf(hole_spot))
+ to_chat(user, span_notice("This is not a suitable spot."))
+ return
+
+ INVOKE_ASYNC(hole_spot, TYPE_PROC_REF(/turf/open, quake_gateway), user)
+ qdel(src)
+
+/**
+ * Bespoke proc that happens when a proteon orb is activated, creating a gateway.
+ * If activated by a non-cultist, they get an unusual game over.
+*/
+/turf/open/proc/quake_gateway(mob/living/user)
+ Shake(2, 2, 5 SECONDS)
+ narsie_act(TRUE, TRUE, 100)
+ var/fucked = FALSE
+ if(!IS_CULTIST(user))
+ fucked = TRUE
+ ADD_TRAIT(user, TRAIT_NO_TRANSFORM, REF(src)) // keep em in place
+ user.add_atom_colour(COLOR_CULT_RED, TEMPORARY_COLOUR_PRIORITY)
+ user.visible_message(span_cult_bold("Dark tendrils appear from the ground and root [user] in place!"))
+ sleep(5 SECONDS) // can we still use these or. i mean its async
+ new /obj/structure/spawner/sentient/proteon_spawner(src)
+ visible_message(span_cult_bold("A mysterious hole appears out of nowhere!"))
+ if(!fucked || QDELETED(user))
+ return
+ if(get_turf(user) != src) // they get away. for now
+ REMOVE_TRAIT(user, TRAIT_NO_TRANSFORM, REF(src))
+ return
+ user.visible_message(span_cult_bold("[user] is pulled into the portal through an infinitesmally minuscule hole, shredding [user.p_their()] body!"))
+ sleep(5 SECONDS)
+ user.visible_message(span_cult_italic("An unusually large construct appears through the portal!"))
+ user.gib() // total destruction
+ var/mob/living/basic/construct/proteon/hostile/remnant = new(get_step_rand(src))
+ remnant.name = "[user]" // no, they do not become it
+ remnant.transform *= 1.5
+
+#undef GATEWAY_TURF_SCAN_RANGE
+
/obj/item/cult_shift
name = "veil shifter"
desc = "This relic instantly teleports you, and anything you're pulling, forward by a moderate distance."
diff --git a/code/modules/antagonists/cult/cult_other.dm b/code/modules/antagonists/cult/cult_other.dm
index 82b342b87ef50..9435baedba11a 100644
--- a/code/modules/antagonists/cult/cult_other.dm
+++ b/code/modules/antagonists/cult/cult_other.dm
@@ -16,8 +16,15 @@
/proc/is_convertable_to_cult(mob/living/target, datum/team/cult/specific_cult)
if(!istype(target))
return FALSE
- if(isnull(target.mind) || !GET_CLIENT(target))
+ if(isnull(target.mind))
return FALSE
+
+// disables client checks if testing for easier debugging
+#ifndef TESTING
+ if(!GET_CLIENT(target))
+ return FALSE
+#endif
+
if(target.mind.unconvertable)
return FALSE
if(ishuman(target) && target.mind.holy_role)
diff --git a/code/modules/antagonists/cult/cult_structure_altar.dm b/code/modules/antagonists/cult/cult_structure_altar.dm
index 9347acb33210f..e38591c0c0705 100644
--- a/code/modules/antagonists/cult/cult_structure_altar.dm
+++ b/code/modules/antagonists/cult/cult_structure_altar.dm
@@ -2,6 +2,7 @@
#define ELDRITCH_WHETSTONE "Eldritch Whetstone"
#define CONSTRUCT_SHELL "Construct Shell"
#define UNHOLY_WATER "Flask of Unholy Water"
+#define PROTEON_ORB "Portal Summoning Orb"
// Cult altar. Gives out consumable items.
/obj/structure/destructible/cult/item_dispenser/altar
@@ -10,6 +11,7 @@
cult_examine_tip = "Can be used to create eldritch whetstones, construct shells, and flasks of unholy water."
icon_state = "talismanaltar"
break_message = "The altar shatters, leaving only the wailing of the damned!"
+ mansus_conversion_path = /obj/effect/heretic_rune
/obj/structure/destructible/cult/item_dispenser/altar/setup_options()
var/static/list/altar_items = list(
@@ -27,7 +29,20 @@
),
)
+ var/extra_item = extra_options()
+
options = altar_items
+ if(!isnull(extra_item))
+ options += extra_item
+
+/obj/structure/destructible/cult/item_dispenser/altar/extra_options()
+ if(!cult_team?.unlocked_heretic_items[PROTEON_ORB_UNLOCKED])
+ return
+ return list(PROTEON_ORB = list(
+ PREVIEW_IMAGE = image(icon = 'icons/obj/antags/cult/items.dmi', icon_state = "summoning_orb"),
+ OUTPUT_ITEMS = list(/obj/item/proteon_orb),
+ ),
+ )
/obj/structure/destructible/cult/item_dispenser/altar/succcess_message(mob/living/user, obj/item/spawned_item)
to_chat(user, span_cult_italic("You kneel before [src] and your faith is rewarded with [spawned_item]!"))
@@ -35,3 +50,4 @@
#undef ELDRITCH_WHETSTONE
#undef CONSTRUCT_SHELL
#undef UNHOLY_WATER
+#undef PROTEON_ORB
diff --git a/code/modules/antagonists/cult/cult_structure_archives.dm b/code/modules/antagonists/cult/cult_structure_archives.dm
index a961739663391..d3a96dd1f77aa 100644
--- a/code/modules/antagonists/cult/cult_structure_archives.dm
+++ b/code/modules/antagonists/cult/cult_structure_archives.dm
@@ -2,6 +2,7 @@
#define CULT_BLINDFOLD "Zealot's Blindfold"
#define CURSE_ORB "Shuttle Curse"
#define VEIL_WALKER "Veil Walker Set"
+#define CRIMSON_FOCUS "Crimson Focus"
// Cult archives. Gives out utility items.
/obj/structure/destructible/cult/item_dispenser/archives
@@ -12,6 +13,7 @@
light_range = 1.5
light_color = LIGHT_COLOR_FIRE
break_message = "The books and tomes of the archives burn into ash as the desk shatters!"
+ mansus_conversion_path = /obj/item/codex_cicatrix
/obj/structure/destructible/cult/item_dispenser/archives/setup_options()
var/static/list/archive_items = list(
@@ -29,7 +31,20 @@
),
)
+ var/extra_item = extra_options()
+
options = archive_items
+ if(!isnull(extra_item))
+ options += extra_item
+
+/obj/structure/destructible/cult/item_dispenser/archives/extra_options()
+ if(!cult_team?.unlocked_heretic_items[CRIMSON_FOCUS_UNLOCKED])
+ return
+ return list(CRIMSON_FOCUS = list(
+ PREVIEW_IMAGE = image(icon = 'icons/obj/clothing/neck.dmi', icon_state = "crimson_focus"),
+ OUTPUT_ITEMS = list(/obj/item/clothing/neck/heretic_focus/crimson_focus),
+ ),
+ )
/obj/structure/destructible/cult/item_dispenser/archives/succcess_message(mob/living/user, obj/item/spawned_item)
to_chat(user, span_cult_italic("You summon [spawned_item] from [src]!"))
@@ -41,3 +56,4 @@
#undef CULT_BLINDFOLD
#undef CURSE_ORB
#undef VEIL_WALKER
+#undef CRIMSON_FOCUS
diff --git a/code/modules/antagonists/cult/cult_structure_forge.dm b/code/modules/antagonists/cult/cult_structure_forge.dm
index 912db7d37e9b8..12d15b9296ef4 100644
--- a/code/modules/antagonists/cult/cult_structure_forge.dm
+++ b/code/modules/antagonists/cult/cult_structure_forge.dm
@@ -2,6 +2,7 @@
#define NARSIE_ARMOR "Nar'Sien Hardened Armor"
#define FLAGELLANT_ARMOR "Flagellant's Robe"
#define ELDRITCH_SWORD "Eldritch Longsword"
+#define CURSED_BLADE "Cursed Ritual Blade"
// Cult forge. Gives out combat weapons.
/obj/structure/destructible/cult/item_dispenser/forge
@@ -12,6 +13,7 @@
light_range = 2
light_color = LIGHT_COLOR_LAVA
break_message = "The forge breaks apart into shards with a howling scream!"
+ mansus_conversion_path = /obj/structure/destructible/eldritch_crucible
/obj/structure/destructible/cult/item_dispenser/forge/setup_options()
var/static/list/forge_items = list(
@@ -29,7 +31,21 @@
),
)
+ var/extra_item = extra_options()
+
options = forge_items
+ if(!isnull(extra_item))
+ options += extra_item
+
+/obj/structure/destructible/cult/item_dispenser/forge/extra_options()
+ if(!cult_team?.unlocked_heretic_items[CURSED_BLADE_UNLOCKED])
+ return
+ return list(CURSED_BLADE = list(
+ PREVIEW_IMAGE = image(icon = 'icons/obj/weapons/khopesh.dmi', icon_state = "cursed_blade"),
+ OUTPUT_ITEMS = list(/obj/item/melee/sickly_blade/cursed),
+ ),
+ )
+
/obj/structure/destructible/cult/item_dispenser/forge/succcess_message(mob/living/user, obj/item/spawned_item)
to_chat(user, span_cult_italic("You work [src] as dark knowledge guides your hands, creating [spawned_item]!"))
@@ -42,3 +58,4 @@
#undef NARSIE_ARMOR
#undef FLAGELLANT_ARMOR
#undef ELDRITCH_SWORD
+#undef CURSED_BLADE
diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm
index 932c3ac03c1f6..5067dcf979904 100644
--- a/code/modules/antagonists/cult/cult_structures.dm
+++ b/code/modules/antagonists/cult/cult_structures.dm
@@ -12,16 +12,43 @@
var/cult_examine_tip
/// The cooldown for when items can be dispensed.
COOLDOWN_DECLARE(use_cooldown)
+ /// Assigned cult team, set when cultistism is checked.
+ var/datum/team/cult/cult_team
+
+/obj/structure/destructible/cult/Destroy()
+ cult_team = null
+ return ..()
+
+/obj/structure/destructible/cult/Initialize(mapload)
+ . = ..()
+ RegisterSignal(src, COMSIG_ATOM_CONSTRUCTED, PROC_REF(on_constructed))
+
+/obj/structure/destructible/cult/proc/on_constructed(datum/source, mob/builder)
+ SIGNAL_HANDLER
+ var/datum/antagonist/cult/cultist = builder.mind?.has_antag_datum(/datum/antagonist/cult, TRUE)
+ cult_team = cultist?.get_team()
+
+/// Tries to find a cultist. If it succeeds, it also takes advantage of the moment to define the structure's cult team if it's not set yet.
+/obj/structure/destructible/cult/proc/is_cultist_check(mob/fool)
+
+ if(!IS_CULTIST(fool))
+ return FALSE
+
+ if(isnull(cult_team))
+ var/datum/antagonist/cult/cultist = fool.mind?.has_antag_datum(/datum/antagonist/cult, TRUE)
+ cult_team = cultist?.get_team()
+
+ return TRUE
/obj/structure/destructible/cult/examine_status(mob/user)
- if(IS_CULTIST(user) || isobserver(user))
+ if(is_cultist_check(user) || isobserver(user))
return span_cult("It's at [round(atom_integrity * 100 / max_integrity)]% stability.")
return ..()
/obj/structure/destructible/cult/examine(mob/user)
. = ..()
. += span_notice("[src] is [anchored ? "secured to":"unsecured from"] the floor.")
- if(IS_CULTIST(user) || isobserver(user))
+ if(is_cultist_check(user) || isobserver(user))
if(cult_examine_tip)
. += span_cult(cult_examine_tip)
if(!COOLDOWN_FINISHED(src, use_cooldown_duration))
@@ -65,16 +92,25 @@
/obj/structure/destructible/cult/item_dispenser
/// An associated list of options this structure can make. See setup_options() for format.
var/list/options
+ /// The dispenser will create this item and then delete itself if it is rust converted.
+ var/obj/mansus_conversion_path = /obj/item/skub
/obj/structure/destructible/cult/item_dispenser/Initialize(mapload)
. = ..()
setup_options()
+/obj/structure/destructible/cult/item_dispenser/rust_heretic_act()
+ visible_message(span_notice("[src] crumbles to dust. In its midst, you spot \a [initial(mansus_conversion_path.name)]."))
+ var/turf/turfy = get_turf(src)
+ new mansus_conversion_path(turfy)
+ turfy.rust_heretic_act()
+ return ..()
+
/obj/structure/destructible/cult/item_dispenser/attack_hand(mob/living/user, list/modifiers)
. = ..()
if(.)
return
- if(!isliving(user) || !IS_CULTIST(user))
+ if(!isliving(user) || !is_cultist_check(user))
to_chat(user, span_warning("You're pretty sure you know exactly what this is used for and you can't seem to touch it."))
return
if(!anchored)
@@ -84,6 +120,8 @@
to_chat(user, span_cult_italic("The magic in [src] is too weak, it will be ready to use again in [DisplayTimeText(COOLDOWN_TIMELEFT(src, use_cooldown))]."))
return
+ setup_options()
+
var/list/spawned_items = get_items_to_spawn(user)
if(!length(spawned_items))
return
@@ -109,6 +147,18 @@
/obj/structure/destructible/cult/item_dispenser/proc/setup_options()
return
+/*
+ * Extra options, currently used for items unlocked after sacrificing a heretic.
+ *
+ * The list of options is a associated list of format:
+ * item_name = list(
+ * preview = image(),
+ * output = list(paths),
+ * )
+ */
+/obj/structure/destructible/cult/item_dispenser/proc/extra_options()
+ return
+
/*
* Get all items that this cult building will spawn when interacted with.
* Opens a radial menu for the user and shows them the list of options, which they can choose from.
@@ -150,7 +200,7 @@
* Returns TRUE if the user is a living mob that is a cultist and is not incapacitated.
*/
/obj/structure/destructible/cult/item_dispenser/proc/check_menu(mob/user)
- return isliving(user) && IS_CULTIST(user) && !user.incapacitated()
+ return isliving(user) && is_cultist_check(user) && !user.incapacitated()
// Spooky looking door used in gateways. Or something.
/obj/effect/gateway
diff --git a/code/modules/antagonists/cult/datums/cult_team.dm b/code/modules/antagonists/cult/datums/cult_team.dm
index c47cc2145b5dc..09d4a25a321c4 100644
--- a/code/modules/antagonists/cult/datums/cult_team.dm
+++ b/code/modules/antagonists/cult/datums/cult_team.dm
@@ -16,9 +16,16 @@
var/reckoning_complete = FALSE
///Has the cult risen, and gotten red eyes?
var/cult_risen = FALSE
- ///Has the cult asceneded, and gotten halos?
+ ///Has the cult ascended, and gotten halos?
var/cult_ascendent = FALSE
+ /// List that keeps track of which items have been unlocked after a heretic was sacked.
+ var/list/unlocked_heretic_items = list(
+ CURSED_BLADE_UNLOCKED = FALSE,
+ CRIMSON_FOCUS_UNLOCKED = FALSE,
+ PROTEON_ORB_UNLOCKED = FALSE,
+ )
+
///Has narsie been summoned yet?
var/narsie_summoned = FALSE
///How large were we at max size.
diff --git a/code/modules/antagonists/cult/datums/cultist.dm b/code/modules/antagonists/cult/datums/cultist.dm
index 1129af14055f2..b0fbea4421aa9 100644
--- a/code/modules/antagonists/cult/datums/cultist.dm
+++ b/code/modules/antagonists/cult/datums/cultist.dm
@@ -7,6 +7,7 @@
preview_outfit = /datum/outfit/cultist
job_rank = ROLE_CULTIST
antag_hud_name = "cult"
+ stinger_sound = 'sound/ambience/antag/bloodcult/bloodcult_gain.ogg'
///The vote ability Cultists have to elect someone to be the leader.
var/datum/action/innate/cult/mastervote/vote_ability
@@ -23,7 +24,6 @@
/datum/antagonist/cult/greet()
. = ..()
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/bloodcult/bloodcult_gain.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)//subject to change
owner.announce_objectives()
/datum/antagonist/cult/on_gain()
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 926981bb096bb..d8ce241caf3c8 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -326,16 +326,12 @@ structure_check() searches for nearby cultist structures required for the invoca
return TRUE
/obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers, datum/team/cult/cult_team)
- var/big_sac = FALSE
+ var/target_sac = FALSE
if((((ishuman(sacrificial) || iscyborg(sacrificial)) && sacrificial.stat != DEAD) || cult_team.is_sacrifice_target(sacrificial.mind)) && length(invokers) < 3)
for(var/invoker in invokers)
to_chat(invoker, span_cult_italic("[sacrificial] is too greatly linked to the world! You need three acolytes!"))
return FALSE
- var/signal_result = SEND_SIGNAL(sacrificial, COMSIG_LIVING_CULT_SACRIFICED, invokers, cult_team)
- if(signal_result & STOP_SACRIFICE)
- return FALSE
-
if(sacrificial.mind)
LAZYADD(GLOB.sacrificed, WEAKREF(sacrificial.mind))
for(var/datum/objective/sacrifice/sac_objective in cult_team.objectives)
@@ -343,15 +339,23 @@ structure_check() searches for nearby cultist structures required for the invoca
sac_objective.sacced = TRUE
sac_objective.clear_sacrifice()
sac_objective.update_explanation_text()
- big_sac = TRUE
+ target_sac = TRUE
else
LAZYADD(GLOB.sacrificed, WEAKREF(sacrificial))
new /obj/effect/temp_visual/cult/sac(loc)
- if(!(signal_result & SILENCE_SACRIFICE_MESSAGE))
+ var/signal_result = SEND_SIGNAL(sacrificial, COMSIG_LIVING_CULT_SACRIFICED, invokers, cult_team)
+
+ var/do_message = TRUE
+ if(signal_result & SILENCE_SACRIFICE_MESSAGE)
+ do_message = FALSE
+ if((signal_result & SILENCE_NONTARGET_SACRIFICE_MESSAGE) && !(target_sac))
+ do_message = FALSE
+
+ if(do_message)
for(var/invoker in invokers)
- if(big_sac)
+ if(target_sac)
to_chat(invoker, span_cult_large("\"Yes! This is the one I desire! You have done well.\""))
continue
if(ishuman(sacrificial) || iscyborg(sacrificial))
@@ -359,6 +363,10 @@ structure_check() searches for nearby cultist structures required for the invoca
else
to_chat(invoker, span_cult_large("\"I accept this meager sacrifice.\""))
+ // post-message
+ if(signal_result & STOP_SACRIFICE)
+ return FALSE
+
if(iscyborg(sacrificial))
var/construct_class = show_radial_menu(invokers[1], sacrificial, GLOB.construct_radial_images, require_near = TRUE, tooltips = TRUE)
if(QDELETED(sacrificial) || !construct_class)
@@ -370,17 +378,20 @@ structure_check() searches for nearby cultist structures required for the invoca
sacriborg.mmi = null
qdel(sacrificial)
return TRUE
-
- var/obj/item/soulstone/stone = new(loc)
- if(sacrificial.mind && !HAS_TRAIT(sacrificial, TRAIT_SUICIDED))
- stone.capture_soul(sacrificial, invokers[1], forced = TRUE)
-
- if(sacrificial)
+ if(sacrificial && (signal_result & DUST_SACRIFICE)) // No soulstone when dusted
+ playsound(sacrificial, 'sound/magic/teleport_diss.ogg', 100, TRUE)
+ sacrificial.investigate_log("has been sacrificially dusted by the cult.", INVESTIGATE_DEATHS)
+ sacrificial.dust(TRUE, FALSE, TRUE)
+ else if (sacrificial)
+ var/obj/item/soulstone/stone = new(loc)
+ if(sacrificial.mind && !HAS_TRAIT(sacrificial, TRAIT_SUICIDED))
+ stone.capture_soul(sacrificial, invokers[1], forced = TRUE)
playsound(sacrificial, 'sound/magic/disintegrate.ogg', 100, TRUE)
sacrificial.investigate_log("has been sacrificially gibbed by the cult.", INVESTIGATE_DEATHS)
sacrificial.gib(DROP_ALL_REMAINS)
try_spawn_sword() // after sharding and gibbing, which potentially dropped a null rod
+
return TRUE
/// Tries to convert a null rod over the rune to a cult sword
@@ -396,12 +407,12 @@ structure_check() searches for nearby cultist structures required for the invoca
rod.visible_message(span_cult_italic(displayed_message))
switch(num_slain)
- if(0, 1)
+ if(0)
animate_spawn_sword(rod, /obj/item/melee/cultblade/dagger)
- if(2)
+ if(1)
animate_spawn_sword(rod, /obj/item/melee/cultblade)
else
- animate_spawn_sword(rod, /obj/item/cult_bastard)
+ animate_spawn_sword(rod, /obj/item/melee/cultblade/halberd)
return TRUE
return FALSE
diff --git a/code/modules/antagonists/cult/sword_fling.dm b/code/modules/antagonists/cult/sword_fling.dm
new file mode 100644
index 0000000000000..766f97917de60
--- /dev/null
+++ b/code/modules/antagonists/cult/sword_fling.dm
@@ -0,0 +1,93 @@
+
+/datum/action/cooldown/spell/pointed/sword_fling
+ name = "Sword Fling"
+ desc = "Try to fling yourself around."
+ ranged_mousepointer = 'icons/effects/mouse_pointers/cult_target.dmi'
+ background_icon_state = "bg_heretic"
+ overlay_icon_state = "bg_cult_border"
+
+ button_icon = 'icons/mob/actions/actions_cult.dmi'
+ button_icon_state = "sword_fling"
+
+ school = SCHOOL_EVOCATION
+ cooldown_time = 4 SECONDS
+ invocation_type = INVOCATION_NONE
+ spell_requirements = NONE
+
+ cast_range = 6
+ active_msg = "You ready yourself to attempt to leap!"
+ var/obj/item/flinged_sword
+
+/datum/action/cooldown/spell/pointed/sword_fling/New(Target, to_fling)
+ . = ..()
+ flinged_sword = to_fling
+
+/datum/action/cooldown/spell/pointed/sword_fling/Destroy()
+ flinged_sword = null
+ . = ..()
+
+/datum/action/cooldown/spell/pointed/sword_fling/is_valid_target(atom/cast_on)
+ return isatom(cast_on)
+
+/datum/action/cooldown/spell/pointed/sword_fling/cast(turf/cast_on)
+ . = ..()
+ var/atom/sword_loc = flinged_sword.loc
+ if(ismob(sword_loc))
+ var/mob/loccer = sword_loc
+ var/resist_chance = 25
+ var/fail_text = "You struggle, but [loccer] keeps [loccer.p_their()] grip on you!"
+ var/particle_to_spawn = null
+ if(IS_CULTIST_OR_CULTIST_MOB(loccer))
+ resist_chance = 10 // your mastahs
+ fail_text = "You struggle, but [loccer]'s grip is unnaturally hard to resist!"
+ particle_to_spawn = /obj/effect/temp_visual/cult/sparks
+ if(IS_HERETIC_OR_MONSTER(loccer) || IS_LUNATIC(loccer))
+ resist_chance = 15
+ fail_text = "You struggle, but [loccer] deftly handles the grip movement."
+ particle_to_spawn = /obj/effect/temp_visual/eldritch_sparks
+ if(loccer.mind?.holy_role) // IS_PRIEST()
+ resist_chance = 12
+ fail_text = "You struggle, but [loccer]'s holy grip holds tight against your thrashing."
+ particle_to_spawn = /obj/effect/temp_visual/blessed
+ if(IS_WIZARD(loccer))
+ resist_chance = 5 // magic master
+ fail_text = "You struggle, but [loccer]'s handle on magic easily neutralizes your movement."
+ particle_to_spawn = /obj/effect/particle_effect/sparks/electricity
+
+ new particle_to_spawn(get_turf(loccer))
+
+ if(prob(resist_chance))
+ flinged_sword.forceMove(get_turf(loccer))
+ flinged_sword.visible_message(span_alert("\the [flinged_sword] yanks itself out of [loccer]'s grip!"))
+ // flung by later code
+ else
+ to_chat(owner, span_warning(fail_text))
+ return
+
+ if(isitem(sword_loc))
+ flinged_sword.forceMove(get_turf(sword_loc))
+ flinged_sword.visible_message(span_alert("\the [flinged_sword] yanks itself out of [sword_loc]!"))
+ // flung by later code
+
+ if(iscloset(sword_loc))
+ var/obj/structure/closet/sword_closet = sword_loc
+ if(!(sword_closet.open(owner, force = prob(5), special_effects = TRUE)))
+ sword_closet.container_resist_act(owner, loc_required = FALSE)
+ flinged_sword.visible_message(span_alert("\the [flinged_sword] yanks itself out of [sword_closet]!"))
+
+ // no general struct/machinery check. imagine if someone put the sword in a vendor
+
+ if(isturf(sword_loc))
+ new /obj/effect/temp_visual/sword_sparks(sword_loc)
+ flinged_sword.throw_at(cast_on, cast_range, flinged_sword.throw_speed, owner)
+ flinged_sword.visible_message(\
+ span_warning("\the [flinged_sword] lunges at \the [cast_on]!"))
+
+/obj/effect/temp_visual/eldritch_sparks
+ icon_state = "purplesparkles"
+
+/obj/effect/temp_visual/sword_sparks
+ icon_state = "mech_toxin" // only used in one place and it looks kinda good
+
+/obj/effect/temp_visual/blessed
+ icon_state = "blessed"
diff --git a/code/modules/antagonists/fugitive/fugitive_outfits.dm b/code/modules/antagonists/fugitive/fugitive_outfits.dm
index ed256acae03e7..e1530ba16eddd 100644
--- a/code/modules/antagonists/fugitive/fugitive_outfits.dm
+++ b/code/modules/antagonists/fugitive/fugitive_outfits.dm
@@ -75,7 +75,7 @@
back = /obj/item/storage/backpack/satchel/leather
shoes = /obj/item/clothing/shoes/laceup
glasses = /obj/item/clothing/glasses/monocle
- mask = /obj/item/clothing/mask/cigarette/pipe
+ mask = /obj/item/cigarette/pipe
ears = /obj/item/radio/headset
backpack_contents = list(
diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm
index 9c41c54e84e09..3411384b7b8fe 100644
--- a/code/modules/antagonists/heretic/heretic_antag.dm
+++ b/code/modules/antagonists/heretic/heretic_antag.dm
@@ -26,6 +26,7 @@
can_assign_self_objectives = TRUE
default_custom_objective = "Turn a department into a testament for your dark knowledge."
hardcore_random_bonus = TRUE
+ stinger_sound = 'sound/ambience/antag/heretic/heretic_gain.ogg'
/// Whether we give this antagonist objectives on gain.
var/give_objectives = TRUE
/// Whether we've ascended! (Completed one of the final rituals)
@@ -56,6 +57,8 @@
var/static/list/blacklisted_rune_turfs = typecacheof(list(/turf/open/space, /turf/open/openspace, /turf/open/lava, /turf/open/chasm))
/// Controls what types of turf we can spread rust to, increases as we unlock more powerful rust abilites
var/rust_strength = 0
+ /// Wether we are allowed to ascend
+ var/feast_of_owls = FALSE
/// Static list of what each path converts to in the UI (colors are TGUI colors)
var/static/list/path_to_ui_color = list(
PATH_START = "grey",
@@ -82,6 +85,15 @@
PATH_MOON = COLOR_BLUE_LIGHT,
)
+ /// List that keeps track of which items have been gifted to the heretic after a cultist was sacrificed. Used to alter drop chances to reduce dupes.
+ var/list/unlocked_heretic_items = list(
+ /obj/item/melee/sickly_blade/cursed = 0,
+ /obj/item/clothing/neck/heretic_focus/crimson_focus = 0,
+ /mob/living/basic/construct/harvester/heretic = 0,
+ )
+ /// Simpler version of above used to limit amount of loot that can be hoarded
+ var/rewards_given = 0
+
/datum/antagonist/heretic/Destroy()
LAZYNULL(sac_targets)
return ..()
@@ -204,8 +216,6 @@
if(give_objectives)
forge_primary_objectives()
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/heretic/heretic_gain.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
-
for(var/starting_knowledge in GLOB.heretic_start_knowledge)
gain_knowledge(starting_knowledge)
@@ -229,6 +239,8 @@
if (!issilicon(our_mob))
GLOB.reality_smash_track.add_tracked_mind(owner)
+ ADD_TRAIT(our_mob, TRAIT_MANSUS_TOUCHED, REF(src))
+ RegisterSignal(our_mob, COMSIG_LIVING_CULT_SACRIFICED, PROC_REF(on_cult_sacrificed))
RegisterSignals(our_mob, list(COMSIG_MOB_BEFORE_SPELL_CAST, COMSIG_MOB_SPELL_ACTIVATED), PROC_REF(on_spell_cast))
RegisterSignal(our_mob, COMSIG_USER_ITEM_INTERACTION, PROC_REF(on_item_use))
RegisterSignal(our_mob, COMSIG_MOB_LOGIN, PROC_REF(fix_influence_network))
@@ -242,12 +254,14 @@
if (owner in GLOB.reality_smash_track.tracked_heretics)
GLOB.reality_smash_track.remove_tracked_mind(owner)
+ REMOVE_TRAIT(our_mob, TRAIT_MANSUS_TOUCHED, REF(src))
UnregisterSignal(our_mob, list(
COMSIG_MOB_BEFORE_SPELL_CAST,
COMSIG_MOB_SPELL_ACTIVATED,
COMSIG_USER_ITEM_INTERACTION,
COMSIG_MOB_LOGIN,
COMSIG_LIVING_POST_FULLY_HEAL,
+ COMSIG_LIVING_CULT_SACRIFICED,
))
/datum/antagonist/heretic/on_body_transfer(mob/living/old_body, mob/living/new_body)
@@ -394,6 +408,118 @@
var/datum/heretic_knowledge/living_heart/heart_knowledge = get_knowledge(/datum/heretic_knowledge/living_heart)
heart_knowledge.on_research(source, src)
+/// Signal proc for [COMSIG_LIVING_CULT_SACRIFICED] to reward cultists for sacrificing a heretic
+/datum/antagonist/heretic/proc/on_cult_sacrificed(mob/living/source, list/invokers)
+ SIGNAL_HANDLER
+
+ for(var/mob/dead/observer/ghost in GLOB.dead_mob_list) // uhh let's find the guy to shove him back in
+ if((ghost.mind?.current == source) && ghost.client) // is it the same guy and do they have the same client
+ ghost.reenter_corpse() // shove them in! it doesnt do it automatically
+
+ // Drop all items and splatter them around messily.
+ var/list/dustee_items = source.unequip_everything()
+ for(var/obj/item/loot as anything in dustee_items)
+ loot.throw_at(get_step_rand(source), 2, 4, pick(invokers), TRUE)
+
+ // Create the blade, give it the heretic and a randomly-chosen master for the soul sword component
+ var/obj/item/melee/cultblade/haunted/haunted_blade = new(get_turf(source), source, pick(invokers))
+
+ // Cool effect for the rune as well as the item
+ var/obj/effect/rune/convert/conversion_rune = locate() in get_turf(source)
+ if(conversion_rune)
+ conversion_rune.gender_reveal(
+ outline_color = COLOR_HERETIC_GREEN,
+ ray_color = null,
+ do_float = FALSE,
+ do_layer = FALSE,
+ )
+
+ haunted_blade.gender_reveal(outline_color = null, ray_color = COLOR_HERETIC_GREEN)
+
+ for(var/mob/living/culto as anything in invokers)
+ to_chat(culto, span_cult_large("\"A follower of the forgotten gods! You must be rewarded for such a valuable sacrifice.\""))
+
+ // Locate a cultist team (Is there a better way??)
+ var/mob/living/random_cultist = pick(invokers)
+ var/datum/antagonist/cult/antag = random_cultist.mind.has_antag_datum(/datum/antagonist/cult)
+ ASSERT(antag)
+ var/datum/team/cult/cult_team = antag.get_team()
+
+ // Unlock one of 3 special items!
+ var/list/possible_unlocks
+ for(var/i in cult_team.unlocked_heretic_items)
+ if(cult_team.unlocked_heretic_items[i])
+ continue
+ LAZYADD(possible_unlocks, i)
+ if(length(possible_unlocks))
+ var/result = pick(possible_unlocks)
+ cult_team.unlocked_heretic_items[result] = TRUE
+
+ for(var/datum/mind/mind as anything in cult_team.members)
+ if(mind.current)
+ SEND_SOUND(mind.current, 'sound/magic/clockwork/narsie_attack.ogg')
+ to_chat(mind.current, span_cult_large(span_warning("Arcane and forbidden knowledge floods your forges and archives. The cult has learned how to create the ")) + span_cult_large(span_hypnophrase("[result]!")))
+
+ return SILENCE_SACRIFICE_MESSAGE|DUST_SACRIFICE
+
+/**
+ * Creates an animation of the item slowly lifting up from the floor with a colored outline, then slowly drifting back down.
+ * Arguments:
+ * * outline_color: Default is between pink and light blue, is the color of the outline filter.
+ * * ray_color: Null by default. If not set, just copies outline. Used for the ray filter.
+ * * anim_time: Total time of the animation. Split into two different calls.
+ * * do_float: Lets you disable the sprite floating up and down.
+ * * do_layer: Lets you disable the layering increase.
+ */
+/obj/proc/gender_reveal(
+ outline_color = null,
+ ray_color = null,
+ anim_time = 10 SECONDS,
+ do_float = TRUE,
+ do_layer = TRUE,
+)
+
+ var/og_layer
+ if(do_layer)
+ // Layering above to stand out!
+ og_layer = layer
+ layer = ABOVE_MOB_LAYER
+
+ // Slowly floats up, then slowly goes down.
+ if(do_float)
+ animate(src, pixel_y = 12, time = anim_time * 0.5, easing = QUAD_EASING | EASE_OUT)
+ animate(pixel_y = 0, time = anim_time * 0.5, easing = QUAD_EASING | EASE_IN)
+
+ // Adding a cool outline effect
+ if(outline_color)
+ add_filter("gender_reveal_outline", 3, list("type" = "outline", "color" = outline_color, "size" = 0.5))
+ // Animating it!
+ var/gay_filter = get_filter("gender_reveal_outline")
+ animate(gay_filter, alpha = 110, time = 1.5 SECONDS, loop = -1)
+ animate(alpha = 40, time = 2.5 SECONDS)
+
+ // Adding a cool ray effect
+ if(ray_color)
+ add_filter(name = "gender_reveal_ray", priority = 1, params = list(
+ type = "rays",
+ size = 45,
+ color = ray_color,
+ density = 6
+ ))
+ // Animating it!
+ var/ray_filter = get_filter("gender_reveal_ray")
+ // I understand nothing but copypaste saves lives
+ animate(ray_filter, offset = 100, time = 30 SECONDS, loop = -1, flags = ANIMATION_PARALLEL)
+
+ addtimer(CALLBACK(src, PROC_REF(remove_gender_reveal_fx), og_layer), anim_time)
+
+/**
+ * Removes the non-animate effects from above proc
+ */
+/obj/proc/remove_gender_reveal_fx(og_layer)
+ remove_filter(list("gender_reveal_outline", "gender_reveal_ray"))
+ layer = og_layer
+
/**
* Create our objectives for our heretic.
*/
@@ -478,7 +604,8 @@
succeeded = FALSE
parts += "Objective #[count]: [objective.explanation_text] [objective.get_roundend_success_suffix()]"
count++
-
+ if(feast_of_owls)
+ parts += span_greentext("Ascension Forsaken")
if(ascended)
parts += span_greentext(span_big("THE HERETIC ASCENDED!"))
@@ -695,6 +822,8 @@
/datum/antagonist/heretic/proc/can_ascend()
if(!can_assign_self_objectives)
return FALSE // We spurned the offer of the Mansus :(
+ if(feast_of_owls)
+ return FALSE // We sold our ambition for immediate power :/
for(var/datum/objective/must_be_done as anything in objectives)
if(!must_be_done.check_completion())
return FALSE
diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm
index 5369e5fee8d91..6758b0774046b 100644
--- a/code/modules/antagonists/heretic/heretic_knowledge.dm
+++ b/code/modules/antagonists/heretic/heretic_knowledge.dm
@@ -38,6 +38,8 @@
var/priority = 0
/// What path is this on. If set to "null", assumed to be unreachable (or abstract).
var/route
+ ///Determines what kind of monster ghosts will ignore from here on out. Defaults to POLL_IGNORE_HERETIC_MONSTER, but we define other types of monsters for more granularity.
+ var/poll_ignore_define = POLL_IGNORE_HERETIC_MONSTER
/datum/heretic_knowledge/New()
if(!mutually_exclusive)
@@ -523,11 +525,23 @@
abstract_parent_type = /datum/heretic_knowledge/summon
/// Typepath of a mob to summon when we finish the recipe.
var/mob/living/mob_to_summon
- ///Determines what kind of monster ghosts will ignore from here on out. Defaults to POLL_IGNORE_HERETIC_MONSTER, but we define other types of monsters for more granularity.
- var/poll_ignore_define = POLL_IGNORE_HERETIC_MONSTER
/datum/heretic_knowledge/summon/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
- var/mob/living/summoned = new mob_to_summon(loc)
+ summon_ritual_mob(user, loc, mob_to_summon)
+
+/**
+ * Creates the ritual mob and grabs a ghost for it
+ *
+ * * user - the mob doing the summoning
+ * * loc - where the summon is happening
+ * * mob_to_summon - either a mob instance or a mob typepath
+ */
+/datum/heretic_knowledge/proc/summon_ritual_mob(mob/living/user, turf/loc, mob/living/mob_to_summon)
+ var/mob/living/summoned
+ if(isliving(mob_to_summon))
+ summoned = mob_to_summon
+ else
+ summoned = new mob_to_summon(loc)
summoned.ai_controller?.set_ai_status(AI_STATUS_OFF)
// Fade in the summon while the ghost poll is ongoing.
// Also don't let them mess with the summon while waiting
@@ -557,6 +571,7 @@
var/datum/antagonist/heretic_monster/heretic_monster = summoned.mind.add_antag_datum(/datum/antagonist/heretic_monster)
heretic_monster.set_owner(user.mind)
+ summoned.RegisterSignal(user, COMSIG_LIVING_DEATH, TYPE_PROC_REF(/mob/living/, on_master_death))
var/datum/objective/heretic_summon/summon_objective = locate() in user.mind.get_all_objectives()
summon_objective?.num_summoned++
diff --git a/code/modules/antagonists/heretic/heretic_monsters.dm b/code/modules/antagonists/heretic/heretic_monsters.dm
index 1f95ed62ea92f..fcdea51287980 100644
--- a/code/modules/antagonists/heretic/heretic_monsters.dm
+++ b/code/modules/antagonists/heretic/heretic_monsters.dm
@@ -8,13 +8,10 @@
antag_hud_name = "heretic_beast"
suicide_cry = "MY MASTER SMILES UPON ME!!"
show_in_antagpanel = FALSE
+ stinger_sound = 'sound/ambience/antag/heretic/heretic_gain.ogg'
/// Our master (a heretic)'s mind.
var/datum/mind/master
-/datum/antagonist/heretic_monster/on_gain()
- . = ..()
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/heretic/heretic_gain.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
-
/datum/antagonist/heretic_monster/on_removal()
if(!silent)
if(master?.current)
@@ -41,3 +38,7 @@
owner.announce_objectives()
to_chat(owner, span_boldnotice("You are a [ishuman(owner.current) ? "shambling corpse returned":"horrible creation brought"] to this plane through the Gates of the Mansus."))
to_chat(owner, span_notice("Your master is [master]. Assist them to all ends."))
+
+ if(istype(owner.current, /mob/living/basic/construct/harvester/heretic))
+ var/mob/living/basic/construct/harvester/heretic/shitcode = owner.current
+ shitcode.master = master
diff --git a/code/modules/antagonists/heretic/items/eldritch_painting.dm b/code/modules/antagonists/heretic/items/eldritch_painting.dm
index 5302fc1c9c148..3e9d3675b1351 100644
--- a/code/modules/antagonists/heretic/items/eldritch_painting.dm
+++ b/code/modules/antagonists/heretic/items/eldritch_painting.dm
@@ -1,17 +1,19 @@
// The basic eldritch painting
/obj/item/wallframe/painting/eldritch
- name = "The debug and a coder who slept"
+ name = "The Blank Canvas: A Study in Default Subtypes"
+ desc = "An impossible painting made of impossible paint. It should not exist in this reality."
icon = 'icons/obj/signs.dmi'
resistance_flags = FLAMMABLE
flags_1 = NONE
- icon_state = "frame-empty"
+ icon_state = "eldritch_painting_debug"
result_path = /obj/structure/sign/painting/eldritch
pixel_shift = 30
/obj/structure/sign/painting/eldritch
- name = "The debug and a coder who slept"
+ name = "The Blank Canvas: A Study in Default Subtypes"
+ desc = "An impossible painting made of impossible paint. It should not exist in this reality."
icon = 'icons/obj/signs.dmi'
- icon_state = "frame-empty"
+ icon_state = "eldritch_painting_debug"
custom_materials = list(/datum/material/wood =SHEET_MATERIAL_AMOUNT)
resistance_flags = FLAMMABLE
buildable_sign = FALSE
@@ -22,7 +24,7 @@
/// The trauma the painting applies
var/applied_trauma = /datum/brain_trauma/severe/pacifism
/// The text that shows up when you cross the paintings path
- var/text_to_display = "I should not be seeing this..."
+ var/text_to_display = "Some things should not be seen by mortal eyes..."
/// The range of the paintings effect
var/range = 7
@@ -47,12 +49,12 @@
to_chat(viewer, span_notice(text_to_display))
viewer.gain_trauma(applied_trauma, TRAUMA_RESILIENCE_SURGERY)
INVOKE_ASYNC(viewer, TYPE_PROC_REF(/mob, emote), "scream")
- to_chat(viewer, span_hypnophrase("As you gaze upon the painting, your mind rends to its truth!"))
+ to_chat(viewer, span_hypnophrase("Your mind is overcome! The painting leaves a mark on your psyche."))
/obj/structure/sign/painting/eldritch/wirecutter_act(mob/living/user, obj/item/I)
if(!user.can_block_magic(MAGIC_RESISTANCE))
user.add_mood_event("ripped_eldritch_painting", /datum/mood_event/eldritch_painting)
- to_chat(user, span_hypnophrase("Laughter echoes through your mind...."))
+ to_chat(user, span_hypnophrase("There's an itch in your brain. It's laughing at you..."))
qdel(src)
return ITEM_INTERACT_SUCCESS
@@ -70,23 +72,23 @@
/obj/structure/sign/painting/eldritch/proc/examine_effects(mob/living/carbon/examiner)
if(IS_HERETIC(examiner))
- to_chat(examiner, span_notice("Oh, what arts!"))
+ to_chat(examiner, span_notice("What an engrossing painting!"))
else
- to_chat(examiner, span_notice("Kinda strange painting."))
+ to_chat(examiner, span_notice("What a strange painting..."))
-// The sister and He Who Wept eldritch painting
+// The Sister and He Who Wept eldritch painting
/obj/item/wallframe/painting/eldritch/weeping
- name = "The sister and He Who Wept"
- desc = "A beautiful artwork depicting a fair lady and HIM, HE WEEPS, I WILL SEE HIM AGAIN."
+ name = "\improper The Sister and He Who Wept"
+ desc = "A beautiful painting depicting a fair lady sitting beside Him. He weeps. You will see him again."
icon_state = "eldritch_painting_weeping"
result_path = /obj/structure/sign/painting/eldritch/weeping
/obj/structure/sign/painting/eldritch/weeping
- name = "The sister and He Who Wept"
- desc = "A beautiful artwork depicting a fair lady and HIM, HE WEEPS, I WILL SEE HIM AGAIN. Destroyable with wirecutters."
+ name = "\improper The Sister and He Who Wept"
+ desc = "A beautiful painting depicting a fair lady sitting beside Him. He weeps. You will see him again. Removable with wirecutters."
icon_state = "eldritch_painting_weeping"
applied_trauma = /datum/brain_trauma/severe/weeping
- text_to_display = "Oh what arts! She is so fair, and he...HE WEEPS!!!"
+ text_to_display = "Such beauty! Such sorrow!"
/obj/structure/sign/painting/eldritch/weeping/examine_effects(mob/living/carbon/examiner)
if(!IS_HERETIC(examiner))
@@ -95,23 +97,23 @@
examiner.add_mood_event("weeping_withdrawal", /datum/mood_event/eldritch_painting/weeping_withdrawal)
return
- to_chat(examiner, span_notice("Oh, what arts! Just gazing upon it clears your mind."))
+ to_chat(examiner, span_notice("Just gazing upon it clears your mind."))
examiner.remove_status_effect(/datum/status_effect/hallucination)
examiner.add_mood_event("heretic_eldritch_painting", /datum/mood_event/eldritch_painting/weeping_heretic)
// The First Desire painting, using a lot of the painting/eldritch framework
/obj/item/wallframe/painting/eldritch/desire
- name = "The First Desire"
- desc = "A painting depicting a platter of flesh, just looking at it makes your stomach knot and mouth froth."
+ name = "\improper The Feast of Desire"
+ desc = "A painting of an elaborate feast. Despite being made entirely of rotting meat and decaying organs, the food looks very appetising."
icon_state = "eldritch_painting_desire"
result_path = /obj/structure/sign/painting/eldritch/desire
/obj/structure/sign/painting/eldritch/desire
- name = "The First Desire"
- desc = "A painting depicting a platter of flesh, just looking at it makes your stomach knot and mouth froth. Destroyable with wirecutters."
+ name = "\improper The Feast of Desire"
+ desc = "A painting of an elaborate feast. Despite being made entirely of rotting meat and decaying organs, the food looks very appetising. Removable with wirecutters."
icon_state = "eldritch_painting_desire"
applied_trauma = /datum/brain_trauma/severe/flesh_desire
- text_to_display = "What an artwork, just looking at it makes me hunger...."
+ text_to_display = "Just looking at this painting makes me hungry..."
// The special examine interaction for this painting
/obj/structure/sign/painting/eldritch/desire/examine_effects(mob/living/carbon/examiner)
@@ -120,7 +122,8 @@
examiner.adjust_nutrition(50)
to_chat(examiner, span_warning("You feel a searing pain in your stomach!"))
examiner.adjustOrganLoss(ORGAN_SLOT_STOMACH, 5)
- to_chat(examiner, span_notice("You feel less hungry, but more empty somehow?"))
+ to_chat(examiner, span_notice("You feel less hungry."))
+ to_chat(examiner, span_warning("You should stockpile raw meat and organs, before you get hungry again."))
examiner.add_mood_event("respite_eldritch_hunger", /datum/mood_event/eldritch_painting/desire_examine)
return
@@ -142,19 +145,20 @@
var/organ_or_bodypart_to_spawn = pick(random_bodypart_or_organ)
new organ_or_bodypart_to_spawn(drop_location())
to_chat(examiner, span_notice("A piece of flesh crawls out of the painting and flops onto the floor."))
+ to_chat(examiner, span_warning("The void screams!"))
// Adds a negative mood event to our heretic
examiner.add_mood_event("heretic_eldritch_hunger", /datum/mood_event/eldritch_painting/desire_heretic)
// Great chaparral over rolling hills, this one doesn't have the sensor type
/obj/item/wallframe/painting/eldritch/vines
- name = "Great chaparral over rolling hills"
- desc = "A painting depicting a massive thicket, it seems to be attempting to crawl through the frame."
+ name = "\improper Great Chaparral Over Rolling Hills"
+ desc = "A painting depicting a massive thicket. This painting teems with life, and seems to strain against its frame."
icon_state = "eldritch_painting_vines"
result_path = /obj/structure/sign/painting/eldritch/vines
/obj/structure/sign/painting/eldritch/vines
- name = "Great chaparral over rolling hills"
- desc = "A painting depicting a massive thicket, it seems to be attempting to crawl through the frame. Destroyable with wirecutters."
+ name = "\improper Great Chaparral Over Rolling Hills"
+ desc = "A painting depicting a massive thicket. This painting teems with life, and seems to strain against its frame. Removable with wirecutters."
icon_state = "eldritch_painting_vines"
applied_trauma = null
// A static list of 5 pretty strong mutations, simple to expand for any admins
@@ -179,28 +183,30 @@
. = ..()
if(!IS_HERETIC(examiner))
new /datum/spacevine_controller(get_turf(examiner), mutations, 0, 10)
- to_chat(examiner, span_hypnophrase("The thicket crawls through the frame, and you suddenly find vines beneath you..."))
+ to_chat(examiner, span_hypnophrase("You are transfixed for a moment by the vines on the painting."))
+ to_chat(examiner, span_notice("You feel something writhing around you."))
return
var/item_to_spawn = pick(items_to_spawn)
- to_chat(examiner, span_notice("You picture yourself in the thicket picking flowers.."))
+ to_chat(examiner, span_notice("You are transfixed for a moment by the chaotic patterns the vines make."))
+ to_chat(examiner, span_notice("You feel life coalesce and bloom beneath you."))
new item_to_spawn(examiner.drop_location())
examiner.add_mood_event("heretic_vines", /datum/mood_event/eldritch_painting/heretic_vines)
// Lady out of gates, gives a brain trauma causing the person to scratch themselves
/obj/item/wallframe/painting/eldritch/beauty
- name = "Lady out of gates"
- desc = "A painting depicting a perfect lady, and I must be perfect like her..."
+ name = "\improper Lady of the Gate"
+ desc = "A painting of an otherworldly being. Its thin, porceline-coloured skin is stretched tight over its strange bone structure. It has an odd beauty."
icon_state = "eldritch_painting_beauty"
result_path = /obj/structure/sign/painting/eldritch/beauty
/obj/structure/sign/painting/eldritch/beauty
- name = "Lady out of gates"
- desc = "A painting depicting a perfect lady, and I must be perfect like her. Destroyable with wirecutters."
+ name = "\improper Lady of the Gate"
+ desc = "A painting of an otherworldly being. Its thin, porceline-coloured skin is stretched tight over its strange bone structure. It has an odd beauty. Removable with wirecutters."
icon_state = "eldritch_painting_beauty"
applied_trauma = /datum/brain_trauma/severe/eldritch_beauty
- text_to_display = "Her flesh glows in the pale light, and mine can too...If it wasnt for these imperfections...."
+ text_to_display = "A beacon of purity, the real world seems so mundane and imperfect in comparison..."
/// List of reagents to add to heretics on examine, set to mutadone by default to remove mutations
var/list/reagents_to_add = list(/datum/reagent/medicine/mutadone = 5)
@@ -211,35 +217,35 @@
return
if(!IS_HERETIC(examiner))
- to_chat(examiner, span_hypnophrase("You feel changed, more perfect...."))
+ to_chat(examiner, span_hypnophrase("You are not yet pure."))
examiner.easy_random_mutate(NEGATIVE + MINOR_NEGATIVE)
return
- to_chat(examiner, span_notice("Your imperfections shed and you are restored."))
+ to_chat(examiner, span_notice("Your imperfections are shed."))
examiner.reagents.add_reagent_list(reagents_to_add)
// Climb over the rusted mountain, gives a brain trauma causing the person to randomly rust tiles beneath them
/obj/item/wallframe/painting/eldritch/rust
- name = "Climb over the rusted mountain"
- desc = "A painting depicting something climbing a mountain of rust, it gives you an eerie feeling."
+ name = "\improper Master of the Rusted Mountain"
+ desc = "A painting of a strange being climbing a rust-coloured mountain. The brushwork is unnatural and unnerving."
icon_state = "eldritch_painting_rust"
result_path = /obj/structure/sign/painting/eldritch/rust
/obj/structure/sign/painting/eldritch/rust
- name = "Climb over the rusted mountain"
- desc = "A painting depicting something climbing a mountain of rust, it gives you an eerie feeling. Destroyable with wirecutters."
+ name = "\improper Master of the Rusted Mountain"
+ desc = "A painting of a strange being climbing a rust-coloured mountain. The brushwork is unnatural and unnerving. Removable with wirecutters."
icon_state = "eldritch_painting_rust"
applied_trauma = /datum/brain_trauma/severe/rusting
- text_to_display = "It climbs, and I will aid it...The rust calls and I shall answer..."
+ text_to_display = "The rust decays. The master climbs. It calls. You answer..."
// The special examine interaction for this painting
/obj/structure/sign/painting/eldritch/rust/examine_effects(mob/living/carbon/examiner)
. = ..()
if(!IS_HERETIC(examiner))
- to_chat(examiner, span_hypnophrase("It can wait..."))
+ to_chat(examiner, span_hypnophrase("You feel the rust. The rot."))
examiner.add_mood_event("rusted_examine", /datum/mood_event/eldritch_painting/rust_examine)
return
- to_chat(examiner, span_notice("You see the climber, and are inspired by it!"))
+ to_chat(examiner, span_notice("The painting fills you with resolve."))
examiner.add_mood_event("rusted_examine", /datum/mood_event/eldritch_painting/rust_heretic_examine)
diff --git a/code/modules/antagonists/heretic/items/forbidden_book.dm b/code/modules/antagonists/heretic/items/forbidden_book.dm
index 6a6a799183a41..38f42b58c5e82 100644
--- a/code/modules/antagonists/heretic/items/forbidden_book.dm
+++ b/code/modules/antagonists/heretic/items/forbidden_book.dm
@@ -1,7 +1,8 @@
// Ye old forbidden book, the Codex Cicatrix.
/obj/item/codex_cicatrix
name = "Codex Cicatrix"
- desc = "This book describes the secrets of the veil between worlds."
+ desc = "This heavy tome is full of cryptic scribbles and impossible diagrams. \
+ According to legend, it can be deciphered to reveal the secrets of the veil between worlds."
icon = 'icons/obj/antags/eldritch.dmi'
base_icon_state = "book"
icon_state = "book"
@@ -29,7 +30,7 @@
. += span_notice("Can be used to tap influences for additional knowledge points.")
. += span_notice("Can also be used to draw or remove transmutation runes with ease.")
- . += span_notice("Additionally, it can work as a focus for your spells in a pinch, though a more specialized relic is recommended, as this may get dropped in combat.")
+ . += span_notice("Additionally, it can work as a focus for your spells when held.")
/obj/item/codex_cicatrix/attack_self(mob/user, modifiers)
. = ..()
diff --git a/code/modules/antagonists/heretic/items/heretic_armor.dm b/code/modules/antagonists/heretic/items/heretic_armor.dm
index e1f7961240683..45ddea163fa71 100644
--- a/code/modules/antagonists/heretic/items/heretic_armor.dm
+++ b/code/modules/antagonists/heretic/items/heretic_armor.dm
@@ -51,8 +51,8 @@
name = "void hood"
icon = 'icons/obj/clothing/head/helmet.dmi'
worn_icon = 'icons/mob/clothing/head/helmet.dmi'
- desc = "Black like tar, doesn't reflect any light. Runic symbols line the outside, \
- with each flash you loose comprehension of what you are seeing."
+ desc = "Black like tar, reflecting no light. Runic symbols line the outside. \
+ With each flash you lose comprehension of what you are seeing."
icon_state = "void_cloak"
flags_inv = NONE
flags_cover = NONE
@@ -73,8 +73,8 @@
/obj/item/clothing/suit/hooded/cultrobes/void
name = "void cloak"
- desc = "Black like tar, doesn't reflect any light. Runic symbols line the outside, \
- with each flash you loose comprehension of what you are seeing."
+ desc = "Black like tar, reflecting no light. Runic symbols line the outside. \
+ With each flash you lose comprehension of what you are seeing."
icon_state = "void_cloak"
inhand_icon_state = null
allowed = list(/obj/item/melee/sickly_blade)
diff --git a/code/modules/antagonists/heretic/items/heretic_blades.dm b/code/modules/antagonists/heretic/items/heretic_blades.dm
index 675f5f87b0abf..ddfec8db20cf7 100644
--- a/code/modules/antagonists/heretic/items/heretic_blades.dm
+++ b/code/modules/antagonists/heretic/items/heretic_blades.dm
@@ -24,23 +24,37 @@
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend")
var/after_use_message = ""
+/obj/item/melee/sickly_blade/examine(mob/user)
+ . = ..()
+ if(!check_usability(user))
+ return
+
+ . += span_notice("You can shatter the blade to teleport to a random, (mostly) safe location by activating it in-hand.")
+
+/// Checks if the passed mob can use this blade without being stunned
+/obj/item/melee/sickly_blade/proc/check_usability(mob/living/user)
+ return IS_HERETIC_OR_MONSTER(user)
+
/obj/item/melee/sickly_blade/pre_attack(atom/A, mob/living/user, params)
. = ..()
if(.)
return .
- if(!IS_HERETIC_OR_MONSTER(user))
+ if(!check_usability(user))
to_chat(user, span_danger("You feel a pulse of alien intellect lash out at your mind!"))
- user.AdjustParalyzed(5 SECONDS)
+ var/mob/living/carbon/human/human_user = user
+ human_user.AdjustParalyzed(5 SECONDS)
return TRUE
- return .
-/obj/item/melee/sickly_blade/afterattack(atom/target, mob/user, click_parameters)
- if(isliving(target))
- SEND_SIGNAL(user, COMSIG_HERETIC_BLADE_ATTACK, target, src)
+ return .
/obj/item/melee/sickly_blade/attack_self(mob/user)
- var/turf/safe_turf = find_safe_turf(zlevel = z, extended_safety_checks = TRUE)
- if(IS_HERETIC_OR_MONSTER(user))
+ seek_safety(user)
+ return ..()
+
+/// Attempts to teleport the passed mob to somewhere safe on the station, if they can use the blade.
+/obj/item/melee/sickly_blade/proc/seek_safety(mob/user)
+ var/turf/safe_turf = find_safe_turf(zlevels = z, extended_safety_checks = TRUE)
+ if(check_usability(user))
if(do_teleport(user, safe_turf, channel = TELEPORT_CHANNEL_MAGIC))
to_chat(user, span_warning("As you shatter [src], you feel a gust of energy flow through your body. [after_use_message]"))
else
@@ -50,18 +64,15 @@
playsound(src, SFX_SHATTER, 70, TRUE) //copied from the code for smashing a glass sheet onto the ground to turn it into a shard
qdel(src)
+/obj/item/melee/sickly_blade/afterattack(atom/target, mob/user, click_parameters)
+ if(isliving(target))
+ SEND_SIGNAL(user, COMSIG_HERETIC_BLADE_ATTACK, target, src)
+
/obj/item/melee/sickly_blade/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
if(isliving(interacting_with))
SEND_SIGNAL(user, COMSIG_HERETIC_RANGED_BLADE_ATTACK, interacting_with, src)
return ITEM_INTERACT_BLOCKING
-/obj/item/melee/sickly_blade/examine(mob/user)
- . = ..()
- if(!IS_HERETIC_OR_MONSTER(user))
- return
-
- . += span_notice("You can shatter the blade to teleport to a random, (mostly) safe location by activating it in-hand.")
-
// Path of Rust's blade
/obj/item/melee/sickly_blade/rust
name = "\improper rusted blade"
@@ -154,3 +165,76 @@
icon_state = "moon_blade"
inhand_icon_state = "moon_blade"
after_use_message = "The Moon hears your call..."
+
+// Path of Nar'Sie's blade
+// What!? This blade is given to cultists as an altar item when they sacrifice a heretic.
+// It is also given to the heretic themself if they sacrifice a cultist.
+/obj/item/melee/sickly_blade/cursed
+ name = "\improper cursed blade"
+ desc = "A dark blade, cursed to bleed forever. In constant struggle between the eldritch and the dark, it is forced to accept any wielder as its master. \
+ Its eye's cornea drips blood endlessly into the ground, yet its piercing gaze remains on you."
+ force = 25
+ throwforce = 15
+ block_chance = 35
+ wound_bonus = 25
+ bare_wound_bonus = 15
+ armour_penetration = 35
+ icon_state = "cursed_blade"
+ inhand_icon_state = "cursed_blade"
+
+/obj/item/melee/sickly_blade/cursed/Initialize(mapload)
+ . = ..()
+
+ var/examine_text = {"Allows the scribing of blood runes of the cult of Nar'Sie.
+ The combination of eldritch power and Nar'Sie's might allows for vastly increased rune drawing speed,
+ alongside the vicious strength of the blade being more powerful than usual.\n
+ It can also be shattered in-hand by cultists (via right-click), teleporting them to relative safety."}
+
+ AddComponent(/datum/component/cult_ritual_item, span_cult(examine_text), turfs_that_boost_us = /turf) // Always fast to draw!
+
+/obj/item/melee/sickly_blade/cursed/attack_self_secondary(mob/user)
+ seek_safety(user, TRUE)
+
+/obj/item/melee/sickly_blade/cursed/seek_safety(mob/user, secondary_attack = FALSE)
+ if(IS_CULTIST(user) && !secondary_attack)
+ return FALSE
+ return ..()
+
+/obj/item/melee/sickly_blade/cursed/check_usability(mob/living/user)
+ if(IS_HERETIC_OR_MONSTER(user) || IS_CULTIST(user))
+ return TRUE
+ if(prob(15))
+ to_chat(user, span_cult_large(pick("\"An untouched mind? Amusing.\"", "\" I suppose it isn't worth the effort to stop you.\"", "\"Go ahead. I don't care.\"", "\"You'll be mine soon enough.\"")))
+ var/obj/item/bodypart/affecting = user.get_active_hand()
+ if(!affecting)
+ return
+ affecting.receive_damage(burn = 5)
+ playsound(src, SFX_SEAR, 25, TRUE)
+ to_chat(user, span_danger("Your hand sizzles.")) // Nar nar might not care but their essence still doesn't like you
+ else if(prob(15))
+ to_chat(user, span_big(span_hypnophrase("LW'NAFH'NAHOR UH'ENAH'YMG EPGOKA AH NAFL MGEMPGAH'EHYE")))
+ to_chat(user, span_danger("Horrible, unintelligible utterances flood your mind!"))
+ user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15) // This can kill you if you ignore it
+ return TRUE
+
+/obj/item/melee/sickly_blade/cursed/equipped(mob/user, slot)
+ . = ..()
+ if(IS_HERETIC_OR_MONSTER(user))
+ after_use_message = "The Mansus hears your call..."
+ else if(IS_CULTIST(user))
+ after_use_message = "Nar'Sie hears your call..."
+ else
+ after_use_message = null
+
+/obj/item/melee/sickly_blade/cursed/interact_with_atom(atom/target, mob/living/user, list/modifiers)
+ . = ..()
+
+ var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user)
+ if(!heretic_datum)
+ return NONE
+
+ // Can only carve runes with it if off combat mode.
+ if(isopenturf(target) && !user.combat_mode)
+ heretic_datum.try_draw_rune(user, target, drawing_time = 14 SECONDS) // Faster than pen, slower than cicatrix
+ return ITEM_INTERACT_BLOCKING
+ return NONE
diff --git a/code/modules/antagonists/heretic/items/heretic_necks.dm b/code/modules/antagonists/heretic/items/heretic_necks.dm
index e24c17abdeeba..3f140dc99df1d 100644
--- a/code/modules/antagonists/heretic/items/heretic_necks.dm
+++ b/code/modules/antagonists/heretic/items/heretic_necks.dm
@@ -9,6 +9,101 @@
. = ..()
AddElement(/datum/element/heretic_focus)
+/obj/item/clothing/neck/heretic_focus/crimson_focus
+ name = "Crimson Focus"
+ desc = "A blood-red focusing glass that provides a link to the world beyond, and worse. Its eye is constantly twitching and gazing in all directions. It almost seems to be silently screaming..."
+ icon_state = "crimson_focus"
+ /// The aura healing component. Used to delete it when taken off.
+ var/datum/component/component
+ /// If active or not, used to add and remove its cult and heretic buffs.
+ var/active = FALSE
+
+/obj/item/clothing/neck/heretic_focus/crimson_focus/equipped(mob/living/user, slot)
+ . = ..()
+ if(!(slot & ITEM_SLOT_NECK))
+ return
+
+ var/team_color = COLOR_ADMIN_PINK
+ if(IS_CULTIST(user))
+ var/datum/action/innate/cult/blood_magic/magic_holder = locate() in user.actions
+ team_color = COLOR_CULT_RED
+ magic_holder.magic_enhanced = TRUE
+ else if(IS_HERETIC_OR_MONSTER(user) && !active)
+ for(var/datum/action/cooldown/spell/spell_action in user.actions)
+ spell_action.cooldown_time *= 0.5
+ active = TRUE
+ team_color = COLOR_GREEN
+ else
+ team_color = pick(COLOR_CULT_RED, COLOR_GREEN)
+
+ user.add_traits(list(TRAIT_MANSUS_TOUCHED, TRAIT_BLOODY_MESS), REF(src))
+ to_chat(user, span_alert("Your heart takes on a strange yet soothing irregular rhythm, and your blood feels significantly less viscous than it used to be. You're not sure if that's a good thing."))
+ component = user.AddComponent( \
+ /datum/component/aura_healing, \
+ range = 3, \
+ brute_heal = 1, \
+ burn_heal = 1, \
+ blood_heal = 2, \
+ suffocation_heal = 5, \
+ simple_heal = 0.6, \
+ requires_visibility = FALSE, \
+ limit_to_trait = TRAIT_MANSUS_TOUCHED, \
+ healing_color = team_color, \
+ )
+
+/obj/item/clothing/neck/heretic_focus/crimson_focus/dropped(mob/living/user)
+ . = ..()
+
+ if(!istype(user))
+ return
+
+ if(HAS_TRAIT_FROM(user, TRAIT_MANSUS_TOUCHED, REF(src)))
+ to_chat(user, span_notice("Your heart and blood return to their regular old rhythm and flow."))
+
+ if(IS_HERETIC_OR_MONSTER(user) && active)
+ for(var/datum/action/cooldown/spell/spell_action in user.actions)
+ spell_action.cooldown_time *= 2
+ active = FALSE
+ QDEL_NULL(component)
+ user.remove_traits(list(TRAIT_MANSUS_TOUCHED, TRAIT_BLOODY_MESS), REF(src))
+
+ // If boosted enable is set, to prevent false dropped() calls from repeatedly nuking the max spells.
+ var/datum/action/innate/cult/blood_magic/magic_holder = locate() in user.actions
+ // Remove the last spell if over new limit, as we will reduce our max spell amount. Done beforehand as it causes a index out of bounds runtime otherwise.
+ if(magic_holder?.magic_enhanced)
+ QDEL_NULL(magic_holder.spells[ENHANCED_BLOODCHARGE])
+ magic_holder?.magic_enhanced = FALSE
+
+
+/obj/item/clothing/neck/heretic_focus/crimson_focus/attack_self(mob/living/user, modifiers)
+ . = ..()
+ to_chat(user, span_danger("You start tightly squeezing [src]..."))
+ if(!do_after(user, 1.25 SECONDS, src))
+ return
+ to_chat(user, span_danger("[src] explodes into a shower of gore and blood, drenching your arm. You can feel the blood seeping into your skin. You inmediately feel better, but soon, the feeling turns hollow as your veins itch."))
+ new /obj/effect/gibspawner/generic(get_turf(src))
+ var/heal_amt = user.adjustBruteLoss(-50)
+ user.adjustFireLoss( -(50 - abs(heal_amt)) ) // no double dipping
+
+ // I want it to poison the user but I also think it'd be neat if they got their juice as well. But that cancels most of the damage out. So I dunno.
+ user.reagents?.add_reagent(/datum/reagent/fuel/unholywater, rand(6, 10))
+ user.reagents?.add_reagent(/datum/reagent/eldritch, rand(6, 10))
+ qdel(src)
+
+/obj/item/clothing/neck/heretic_focus/crimson_focus/examine(mob/user)
+ . = ..()
+
+ var/magic_dude
+ if(IS_CULTIST(user))
+ . += span_cult_bold("This focus will allow you to store one extra spell and halve the empowering time, alongside providing a small regenerative effect.")
+ magic_dude = TRUE
+ if(IS_HERETIC_OR_MONSTER(user))
+ . += span_notice("This focus will halve your spell cooldowns, alongside granting a small regenerative effect to any nearby heretics or monsters, including you.")
+ magic_dude = TRUE
+
+ if(magic_dude)
+ . += span_red("You can also squeeze it to recover a large amount of health quickly, at a cost...")
+
/obj/item/clothing/neck/eldritch_amulet
name = "Warm Eldritch Medallion"
desc = "A strange medallion. Peering through the crystalline surface, the world around you melts away. You see your own beating heart, and the pulsing of a thousand others."
diff --git a/code/modules/antagonists/heretic/items/madness_mask.dm b/code/modules/antagonists/heretic/items/madness_mask.dm
index fe80465bfd0d4..b7799d685c48b 100644
--- a/code/modules/antagonists/heretic/items/madness_mask.dm
+++ b/code/modules/antagonists/heretic/items/madness_mask.dm
@@ -1,7 +1,7 @@
// The spooky "void" / "abyssal" / "madness" mask for heretics.
/obj/item/clothing/mask/madness_mask
- name = "Abyssal Mask"
- desc = "A mask created from the suffering of existence. Looking down it's eyes, you notice something gazing back at you."
+ name = "abyssal mask"
+ desc = "A mask created from suffering. When you look into its eyes, it looks back."
icon_state = "mad_mask"
inhand_icon_state = null
w_class = WEIGHT_CLASS_SMALL
diff --git a/code/modules/antagonists/heretic/knowledge/moon_lore.dm b/code/modules/antagonists/heretic/knowledge/moon_lore.dm
index e2af5390ba810..4b61648329214 100644
--- a/code/modules/antagonists/heretic/knowledge/moon_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/moon_lore.dm
@@ -188,7 +188,6 @@
/datum/heretic_knowledge/ultimate/moon_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
. = ..()
- var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user)
priority_announce(
text = "[generate_heretic_text()] Laugh, for the ringleader [user.real_name] has ascended! \
The truth shall finally devour the lie! [generate_heretic_text()]",
@@ -199,8 +198,7 @@
user.client?.give_award(/datum/award/achievement/misc/moon_ascension, user)
ADD_TRAIT(user, TRAIT_MADNESS_IMMUNE, REF(src))
- heretic_datum.add_team_hud(user, /datum/antagonist/lunatic)
-
+ user.mind.add_antag_datum(/datum/antagonist/lunatic/master)
RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life))
// Roughly 1/5th of the station will rise up as lunatics to the heretic
diff --git a/code/modules/antagonists/heretic/knowledge/rust_lore.dm b/code/modules/antagonists/heretic/knowledge/rust_lore.dm
index fe553c8b8c779..5a10b55d1c8f4 100644
--- a/code/modules/antagonists/heretic/knowledge/rust_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/rust_lore.dm
@@ -73,7 +73,7 @@
SIGNAL_HANDLER
// Rusting an airlock causes it to lose power, mostly to prevent the airlock from shocking you.
- // This is a bit of a hack, but fixing this would require the enture wire cut/pulse system to be reworked.
+ // This is a bit of a hack, but fixing this would require the entire wire cut/pulse system to be reworked.
if(istype(target, /obj/machinery/door/airlock))
var/obj/machinery/door/airlock/airlock = target
airlock.loseMainPower()
@@ -95,56 +95,10 @@
route = PATH_RUST
/datum/heretic_knowledge/rust_regen/on_gain(mob/user, datum/antagonist/heretic/our_heretic)
- RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_move))
- RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life))
+ user.AddElement(/datum/element/leeching_walk)
/datum/heretic_knowledge/rust_regen/on_lose(mob/user, datum/antagonist/heretic/our_heretic)
- UnregisterSignal(user, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_LIFE))
-
-/*
- * Signal proc for [COMSIG_MOVABLE_MOVED].
- *
- * Checks if we should have baton resistance on the new turf.
- */
-/datum/heretic_knowledge/rust_regen/proc/on_move(mob/source, atom/old_loc, dir, forced, list/old_locs)
- SIGNAL_HANDLER
-
- var/turf/mover_turf = get_turf(source)
- if(HAS_TRAIT(mover_turf, TRAIT_RUSTY))
- ADD_TRAIT(source, TRAIT_BATON_RESISTANCE, type)
- return
-
- REMOVE_TRAIT(source, TRAIT_BATON_RESISTANCE, type)
-
-/**
- * Signal proc for [COMSIG_LIVING_LIFE].
- *
- * Gradually heals the heretic ([source]) on rust,
- * including baton knockdown and stamina damage.
- */
-/datum/heretic_knowledge/rust_regen/proc/on_life(mob/living/source, seconds_per_tick, times_fired)
- SIGNAL_HANDLER
-
- var/turf/our_turf = get_turf(source)
- if(!HAS_TRAIT(our_turf, TRAIT_RUSTY))
- return
-
- // Heals all damage + Stamina
- var/need_mob_update = FALSE
- need_mob_update += source.adjustBruteLoss(-3, updating_health = FALSE)
- need_mob_update += source.adjustFireLoss(-3, updating_health = FALSE)
- need_mob_update += source.adjustToxLoss(-3, updating_health = FALSE, forced = TRUE) // Slimes are people too
- need_mob_update += source.adjustOxyLoss(-1.5, updating_health = FALSE)
- need_mob_update += source.adjustStaminaLoss(-10, updating_stamina = FALSE)
- if(need_mob_update)
- source.updatehealth()
- // Reduces duration of stuns/etc
- source.AdjustAllImmobility(-0.5 SECONDS)
- // Heals blood loss
- if(source.blood_volume < BLOOD_VOLUME_NORMAL)
- source.blood_volume += 2.5 * seconds_per_tick
- // Slowly regulates your body temp
- source.adjust_bodytemperature((source.get_body_temp_normal() - source.bodytemperature)/5)
+ user.RemoveElement(/datum/element/leeching_walk)
/datum/heretic_knowledge/mark/rust_mark
name = "Mark of Rust"
diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
index 1d2be465b3026..b35d34839dabc 100644
--- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
+++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
@@ -80,8 +80,11 @@
// If we have targets, we can check to see if we can do a sacrifice
// Let's remove any humans in our atoms list that aren't a sac target
for(var/mob/living/carbon/human/sacrifice in atoms)
- // If the mob's not in soft crit or worse, or isn't one of the sacrifices, remove it from the list
- if(sacrifice.stat < SOFT_CRIT || !(sacrifice in heretic_datum.sac_targets))
+ // If the mob's not in soft crit or worse, remove from list
+ if(sacrifice.stat < SOFT_CRIT)
+ atoms -= sacrifice
+ // Otherwise if it's neither a target nor a cultist, remove it
+ else if(!(sacrifice in heretic_datum.sac_targets) && !IS_CULTIST(sacrifice))
atoms -= sacrifice
// Finally, return TRUE if we have a target in the list
@@ -94,7 +97,9 @@
/datum/heretic_knowledge/hunt_and_sacrifice/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user)
- if(!LAZYLEN(heretic_datum.sac_targets))
+ // Force it to work if the sacrifice is a cultist, even if there's no targets.
+ var/mob/living/carbon/human/sac = selected_atoms[1]
+ if(!LAZYLEN(heretic_datum.sac_targets) && !IS_CULTIST(sac))
if(obtain_targets(user, heretic_datum = heretic_datum))
return TRUE
else
@@ -183,34 +188,128 @@
* * selected_atoms - a list of all atoms chosen. Should be (at least) one human.
* * loc - the turf the sacrifice is occuring on
*/
-/datum/heretic_knowledge/hunt_and_sacrifice/proc/sacrifice_process(mob/living/user, list/selected_atoms)
+/datum/heretic_knowledge/hunt_and_sacrifice/proc/sacrifice_process(mob/living/user, list/selected_atoms, turf/loc)
var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user)
var/mob/living/carbon/human/sacrifice = locate() in selected_atoms
if(!sacrifice)
CRASH("[type] sacrifice_process didn't have a human in the atoms list. How'd it make it so far?")
- if(!(sacrifice in heretic_datum.sac_targets))
- CRASH("[type] sacrifice_process managed to get a non-target human. This is incorrect.")
+ if(!(sacrifice in heretic_datum.sac_targets) && !IS_CULTIST(sacrifice))
+ CRASH("[type] sacrifice_process managed to get a non-target, non-cult human. This is incorrect.")
if(sacrifice.mind)
LAZYADD(target_blacklist, sacrifice.mind)
heretic_datum.remove_sacrifice_target(sacrifice)
+
var/feedback = "Your patrons accept your offer"
var/sac_job_flag = sacrifice.mind?.assigned_role?.job_flags | sacrifice.last_mind?.assigned_role?.job_flags
- if(sac_job_flag & JOB_HEAD_OF_STAFF)
- heretic_datum.knowledge_points++
+ var/datum/antagonist/cult/cultist_datum = IS_CULTIST(sacrifice)
+ // Heads give 3 points, cultists give 1 point (and a special reward), normal sacrifices give 2 points.
+ heretic_datum.total_sacrifices++
+ if((sac_job_flag & JOB_HEAD_OF_STAFF))
+ heretic_datum.knowledge_points += 3
heretic_datum.high_value_sacrifices++
feedback += " graciously"
+ else if(cultist_datum)
+ heretic_datum.knowledge_points += 1
+ grant_reward(user, sacrifice, loc)
+ // easier to read
+ var/rewards_given = heretic_datum.rewards_given
+ // Chance for it to send a warning to cultists, higher with each reward. Stops after 5 because they probably got the hint by then.
+ if(prob(min(15 * rewards_given)) && (rewards_given <= 5))
+ for(var/datum/mind/mind as anything in cultist_datum.cult_team.members)
+ if(mind.current)
+ SEND_SOUND(mind.current, 'sound/magic/clockwork/narsie_attack.ogg')
+ var/message = span_narsie("A vile heretic has ") + \
+ span_cult_large(span_hypnophrase("sacrificed")) + \
+ span_narsie(" one of our own. Destroy and sacrifice the infidel before it claims more!")
+ to_chat(mind.current, message)
+ // he(retic) gets a warn too
+ var/message = span_cult_bold("You feel that your action has attracted") + \
+ span_cult_bold_italic(" attention.")
+ to_chat(user, message)
+ return
+ else
+ heretic_datum.knowledge_points += 2
to_chat(user, span_hypnophrase("[feedback]."))
- heretic_datum.total_sacrifices++
- heretic_datum.knowledge_points += 2
+ if(!begin_sacrifice(sacrifice))
+ disembowel_target(sacrifice)
+ return
sacrifice.apply_status_effect(/datum/status_effect/heretic_curse, user)
- if(!begin_sacrifice(sacrifice))
- disembowel_target(sacrifice)
+
+/datum/heretic_knowledge/hunt_and_sacrifice/proc/grant_reward(mob/living/user, mob/living/sacrifice, turf/loc)
+
+ // Visible and audible encouragement!
+ to_chat(user, span_big(span_hypnophrase("A servant of the Sanguine Apostate!")))
+ to_chat(user, span_hierophant("Your patrons are rapturous!"))
+ playsound(sacrifice, 'sound/magic/disintegrate.ogg', 75, TRUE)
+
+ // Drop all items and splatter them around messily.
+ var/list/dustee_items = sacrifice.unequip_everything()
+ for(var/obj/item/loot as anything in dustee_items)
+ loot.throw_at(get_step_rand(sacrifice), 2, 4, user, TRUE)
+
+ // The loser is DUSTED.
+ sacrifice.dust(TRUE, TRUE)
+
+ // Increase reward counter
+ var/datum/antagonist/heretic/antag = IS_HERETIC(user)
+ antag.rewards_given++
+
+ // We limit the amount so the heretic doesn't just turn into a frickin' god (early)
+ to_chat(user, span_hierophant("You feel the rotten energies of the infidel warp and twist, mixing with that of your own..."))
+ if(prob(8 * antag.rewards_given))
+ to_chat(user, span_hierophant("Faint, dark red sparks flit around the dust, then fade. It looks like your patrons weren't able to fashion something out of it."))
+ return
+
+ // Cool effect for the rune as well as the item
+ var/obj/effect/heretic_rune/rune = locate() in range(2, user)
+ if(rune)
+ rune.gender_reveal(
+ outline_color = COLOR_CULT_RED,
+ ray_color = null,
+ do_float = FALSE,
+ do_layer = FALSE,
+ )
+
+ addtimer(CALLBACK(src, PROC_REF(deposit_reward), user, loc, null, rune), 5 SECONDS)
+
+
+/datum/heretic_knowledge/hunt_and_sacrifice/proc/deposit_reward(mob/user, turf/loc, loop = 0, obj/rune)
+ if(loop > 5) // Max limit for retrying a reward
+ return
+ // Remove the rays, we don't need them anymore.
+ rune?.remove_filter("reward_outline")
+ playsound(loc, 'sound/magic/repulse.ogg', 75, TRUE)
+ var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user)
+ ASSERT(heretic_datum)
+ // This list will be almost identical to unlocked_heretic_items, with the same keys, the difference being the values will be 1 to 5.
+ var/list/rewards = heretic_datum.unlocked_heretic_items.Copy()
+ // We will make it increasingly less likely to get a reward if you've already got it
+ for(var/possible_reward in heretic_datum.unlocked_heretic_items)
+ var/amount_already_awarded = heretic_datum.unlocked_heretic_items[possible_reward]
+ rewards[possible_reward] = min(5 - (amount_already_awarded * 2), 1)
+
+ var/atom/reward = pick_weight(rewards)
+ reward = new reward(loc)
+
+ if(isliving(reward))
+ if(summon_ritual_mob(user, loc, reward) == FALSE)
+ qdel(reward)
+ deposit_reward(user, loc, loop++, rune) // If no ghosts, try again until limit is hit
+ return
+
+ else if(isitem(reward))
+ var/obj/item/item_reward = reward
+ item_reward.gender_reveal(outline_color = null, ray_color = COLOR_CULT_RED)
+
+ ASSERT(reward)
+
+ return reward
/**
* This proc is called from [proc/sacrifice_process] after the heretic successfully sacrifices [sac_target].)
diff --git a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm
index e8c14d16abeca..2a6d1e8058d3d 100644
--- a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm
+++ b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm
@@ -20,7 +20,7 @@
/datum/heretic_knowledge/crucible
name = "Mawed Crucible"
desc = "Allows you to transmute a portable water tank and a table to create a Mawed Crucible. \
- The Mawed Crubile can brew powerful potions for combat and utility, but must be fed bodyparts and organs between uses."
+ The Mawed Crucible can brew powerful potions for combat and utility, but must be fed bodyparts and organs between uses."
gain_text = "This is pure agony. I wasn't able to summon the figure of the Aristocrat, \
but with the Priest's attention I stumbled upon a different recipe..."
next_knowledge = list(
@@ -43,7 +43,7 @@
These shots function as normal, albeit weak high caliber mutitions when fired from \
close range or at inanimate objects. You can aim the rifle at distant foes, \
causing the shot to deal massively increased damage and hone in on them."
- gain_text = "I met an old man in an anique shop who wielded a very unusual weapon. \
+ gain_text = "I met an old man in an antique shop who wielded a very unusual weapon. \
I could not purchase it at the time, but they showed me how they made it ages ago."
next_knowledge = list(
/datum/heretic_knowledge/duel_stance,
diff --git a/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm b/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm
index b4da4018fc129..ac56b9ba24006 100644
--- a/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm
+++ b/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm
@@ -2,9 +2,9 @@
/datum/heretic_knowledge/spell/mind_gate
name = "Mind Gate"
- desc = "Grants you Mind Gate, a spell \
- which deals you 20 brain damage but the target suffers a hallucination,\
- is left confused for 10 seconds, suffers oxygen loss and brain damage."
+ desc = "Grants you Mind Gate, a spell which inflicts hallucinations, \
+ confusion, oxygen loss and brain damage to its target over 10 seconds.\
+ The caster takes 20 brain damage per use."
gain_text = "My mind swings open like a gate, and its insight will let me perceive the truth."
next_knowledge = list(
/datum/heretic_knowledge/key_ring,
@@ -16,8 +16,8 @@
/datum/heretic_knowledge/unfathomable_curio
name = "Unfathomable Curio"
- desc = "Allows you to transmute 3 rods, lungs and any belt into an Unfathomable Curio\
- , a belt that can hold blades and items for rituals. Whilst worn it will also \
+ desc = "Allows you to transmute 3 rods, lungs and any belt into an Unfathomable Curio, \
+ a belt that can hold blades and items for rituals. Whilst worn it will also \
veil you, allowing you to take 5 hits without suffering damage, this veil will recharge very slowly \
outside of combat."
gain_text = "The mansus holds many a curio, some are not meant for the mortal eye."
@@ -36,16 +36,15 @@
/datum/heretic_knowledge/painting
name = "Unsealed Arts"
- desc = "Allows you to transmute a canvas and an additional item to create a piece of art, these paintings \
- have different effects depending on the additional item added. Possible paintings: \
- The sister and He Who Wept: Eyes. Clears your own mind, but curses non-heretics with hallucinations. \
- The First Desire: Any bodypart. Supplies you with random organs, but curses non-heretics with a hunger for flesh. \
- Great chaparral over rolling hills: Any grown food. Spreads kudzu when placed and examined by non-heretics. Also supplies you with poppies and harebells. \
- Lady out of gates: Gloves. Clears your mutations, but mutates non-heretics and curses them with scratching. \
- Climb over the rusted mountain: Trash. Curses non-heretics to rust the floor they walk on. \
- Non-heretics can counter most of these effects by examining one of these paintings."
- gain_text = "A wind of inspiration blows through me, past the walls and past the gate inspirations lie, yet to be depicted. \
- They yearn for mortal eyes again, and I shall grant that wish."
+ desc = "Allows you to transmute a canvas and an additional item to create a painting. \
+ Each painting has a unique effect and recipe. Possible paintings: \
+ The Sister and He Who Wept: Requires a pair of Eyes. Clears your own mind, and curses non-heretics with hallucinations. \
+ The Feast of Desire: Requires a severed limb. Supplies you with random organs, and curses non-heretics with a hunger for flesh. \
+ Great Chaparral Over Rolling Hills: Requires any plant produce. Spreads kudzu when placed, and supplies you with poppies and harebells. \
+ Lady of the Gate: Requires any pair of Gloves. Clears your mutations, mutates non-heretics and curses them with scratching. \
+ Master of the Rusted Mountain: Requires a piece of Trash. Curses non-heretics to rust the floor they walk on."
+ gain_text = "A wind of inspiration blows through me. Beyond the veil and past the gate great works exist, yet to be painted. \
+ They yearn for mortal eyes, so I shall give them an audience."
next_knowledge = list(
/datum/heretic_knowledge/spell/burglar_finesse,
/datum/heretic_knowledge/moon_amulet,
diff --git a/code/modules/antagonists/heretic/knowledge/starting_lore.dm b/code/modules/antagonists/heretic/knowledge/starting_lore.dm
index f1b5f7f55ea19..50b57fd9e96b4 100644
--- a/code/modules/antagonists/heretic/knowledge/starting_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/starting_lore.dm
@@ -293,3 +293,28 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge())
body.do_jitter_animation()
body.visible_message(span_danger("An awful ripping sound is heard as [ripped_thing]'s [exterior_text] is ripped straight out, wrapping around [le_book || "the book"], turning into an eldritch shade of blue!"))
return ..()
+
+/datum/heretic_knowledge/feast_of_owls
+ name = "Feast of Owls"
+ desc = "Allows you to undergo a ritual that gives you 5 knowledge points but locks you out of ascension. This can only be done once and cannot be reverted."
+ gain_text = "Under the soft glow of unreason there is a beast that stalks the night. I shall bring it forth and let it enter my presence. It will feast upon my amibitions and leave knowledge in its wake."
+ route = PATH_START
+ required_atoms = list()
+
+/datum/heretic_knowledge/feast_of_owls/can_be_invoked(datum/antagonist/heretic/invoker)
+ return !invoker.feast_of_owls
+
+/datum/heretic_knowledge/feast_of_owls/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
+ var/alert = tgui_alert(user,"Do you really want to forsake your ascension? This action cannot be reverted.", "Feast of Owls", list("Yes I'm sure", "No"), 30 SECONDS)
+ if( alert != "Yes I'm sure")
+ return FALSE
+ user.set_temp_blindness(5 SECONDS)
+ user.AdjustParalyzed(5 SECONDS)
+ var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user)
+ for(var/i in 0 to 4)
+ user.emote("scream")
+ playsound(loc, 'sound/items/eatfood.ogg', 100, TRUE)
+ heretic_datum.knowledge_points++
+ sleep(1 SECONDS)
+ to_chat(user,span_danger("You feel different..."))
+ heretic_datum.feast_of_owls = TRUE
diff --git a/code/modules/antagonists/heretic/magic/aggressive_spread.dm b/code/modules/antagonists/heretic/magic/aggressive_spread.dm
index fedc30193ed48..dfb4a94847406 100644
--- a/code/modules/antagonists/heretic/magic/aggressive_spread.dm
+++ b/code/modules/antagonists/heretic/magic/aggressive_spread.dm
@@ -17,7 +17,16 @@
aoe_radius = 2
/datum/action/cooldown/spell/aoe/rust_conversion/get_things_to_cast_on(atom/center)
- return RANGE_TURFS(aoe_radius, center)
+
+ var/list/things_to_convert = RANGE_TURFS(aoe_radius, center)
+
+ // Also converts things right next to you.
+ for(var/atom/movable/nearby_movable in view(1, center))
+ if(nearby_movable == owner || !isstructure(nearby_movable) )
+ continue
+ things_to_convert += nearby_movable
+
+ return things_to_convert
/datum/action/cooldown/spell/aoe/rust_conversion/cast_on_thing_in_aoe(turf/victim, mob/living/caster)
// We have less chance of rusting stuff that's further
@@ -27,9 +36,11 @@
if(prob(chance_of_not_rusting))
return
- caster.do_rust_heretic_act(victim)
+ if(ismob(caster))
+ caster.do_rust_heretic_act(victim)
+ else
+ victim.rust_heretic_act()
-/datum/action/cooldown/spell/aoe/rust_conversion/small
- name = "Rust Conversion"
- desc = "Spreads rust onto nearby surfaces."
- aoe_radius = 2
+/datum/action/cooldown/spell/aoe/rust_conversion/construct
+ name = "Construct Spread"
+ cooldown_time = 15 SECONDS
diff --git a/code/modules/antagonists/heretic/magic/ash_ascension.dm b/code/modules/antagonists/heretic/magic/ash_ascension.dm
index 0d8ca8da4f1c6..8b564198a61eb 100644
--- a/code/modules/antagonists/heretic/magic/ash_ascension.dm
+++ b/code/modules/antagonists/heretic/magic/ash_ascension.dm
@@ -129,16 +129,17 @@
INVOKE_ASYNC(src, PROC_REF(fire_line), owner, line_target(offset, flame_line_length, target, owner))
/datum/action/cooldown/spell/pointed/ash_beams/proc/line_target(offset, range, atom/at, atom/user)
+ var/turf/user_loc = get_turf(user)
if(!at)
return
- var/angle = ATAN2(at.x - user.x, at.y - user.y) + offset
+ var/angle = ATAN2(at.x - user_loc.x, at.y - user_loc.y) + offset
var/turf/T = get_turf(user)
for(var/i in 1 to range)
- var/turf/check = locate(user.x + cos(angle) * i, user.y + sin(angle) * i, user.z)
+ var/turf/check = locate(user_loc.x + cos(angle) * i, user_loc.y + sin(angle) * i, user_loc.z)
if(!check)
break
T = check
- return (get_line(user, T) - get_turf(user))
+ return (get_line(user_loc, T) - user_loc)
/datum/action/cooldown/spell/pointed/ash_beams/proc/fire_line(atom/source, list/turfs)
var/list/hit_list = list()
diff --git a/code/modules/antagonists/heretic/magic/burglar_finesse.dm b/code/modules/antagonists/heretic/magic/burglar_finesse.dm
index 7bb6960354ec7..a90acb8495f14 100644
--- a/code/modules/antagonists/heretic/magic/burglar_finesse.dm
+++ b/code/modules/antagonists/heretic/magic/burglar_finesse.dm
@@ -26,7 +26,7 @@
return FALSE
var/obj/storage_item = locate(/obj/item/storage/backpack) in cast_on.contents
-
+
if(isnull(storage_item))
return FALSE
diff --git a/code/modules/antagonists/heretic/magic/fire_blast.dm b/code/modules/antagonists/heretic/magic/fire_blast.dm
index f76a1f18d1757..4c17ca5ffc0de 100644
--- a/code/modules/antagonists/heretic/magic/fire_blast.dm
+++ b/code/modules/antagonists/heretic/magic/fire_blast.dm
@@ -23,8 +23,8 @@
var/beam_duration = 2 SECONDS
/datum/action/cooldown/spell/charged/beam/fire_blast/cast(atom/cast_on)
- if(isliving(cast_on))
- var/mob/living/caster = cast_on
+ var/mob/living/caster = get_caster_from_target(cast_on)
+ if(istype(caster))
// Caster becomes fireblasted, but in a good way - heals damage over time
caster.apply_status_effect(/datum/status_effect/fire_blasted, beam_duration, -2)
return ..()
diff --git a/code/modules/antagonists/heretic/magic/furious_steel.dm b/code/modules/antagonists/heretic/magic/furious_steel.dm
index 15648a9b4d34d..0ab882a9289e1 100644
--- a/code/modules/antagonists/heretic/magic/furious_steel.dm
+++ b/code/modules/antagonists/heretic/magic/furious_steel.dm
@@ -67,7 +67,7 @@
QDEL_NULL(blade_effect)
var/mob/living/living_user = on_who
- blade_effect = living_user.apply_status_effect(/datum/status_effect/protective_blades, null, projectile_amount, 25, 0.66 SECONDS)
+ blade_effect = living_user.apply_status_effect(/datum/status_effect/protective_blades, null, projectile_amount, 25, 0.66 SECONDS, projectile_type)
RegisterSignal(blade_effect, COMSIG_QDELETING, PROC_REF(on_status_effect_deleted))
/datum/action/cooldown/spell/pointed/projectile/furious_steel/on_deactivation(mob/on_who, refund_cooldown = TRUE)
@@ -106,10 +106,12 @@
sharpness = SHARP_EDGED
wound_bonus = 15
pass_flags = PASSTABLE | PASSFLAPS
+ /// Color applied as an outline filter on init
+ var/outline_color = "#f8f8ff"
/obj/projectile/floating_blade/Initialize(mapload)
. = ..()
- add_filter("dio_knife", 2, list("type" = "outline", "color" = "#f8f8ff", "size" = 1))
+ add_filter("dio_knife", 2, list("type" = "outline", "color" = outline_color, "size" = 1))
/obj/projectile/floating_blade/prehit_pierce(atom/hit)
if(isliving(hit) && isliving(firer))
@@ -128,3 +130,40 @@
return PROJECTILE_DELETE_WITHOUT_HITTING
return ..()
+
+/obj/projectile/floating_blade/haunted
+ name = "ritual blade"
+ icon = 'icons/obj/weapons/khopesh.dmi'
+ icon_state = "render"
+ damage = 35
+ wound_bonus = 25
+ outline_color = "#D7CBCA"
+
+/datum/action/cooldown/spell/pointed/projectile/furious_steel/solo
+ name = "Lesser Furious Steel"
+ cooldown_time = 20 SECONDS
+ projectile_amount = 1
+ active_msg = "You summon forth a blade of furious silver."
+ deactive_msg = "You conceal the blade of furious silver."
+
+/datum/action/cooldown/spell/pointed/projectile/furious_steel/haunted
+ name = "Cursed Steel"
+ desc = "Summon two cursed blades which orbit you. \
+ While orbiting you, these blades will protect you from from attacks, but will be consumed on use. \
+ Additionally, you can click to fire the blades at a target, dealing damage and causing bleeding."
+ background_icon_state = "bg_heretic" // kept intentionally
+ overlay_icon_state = "bg_cult_border"
+ button_icon = 'icons/mob/actions/actions_ecult.dmi'
+ button_icon_state = "cursed_steel"
+ sound = 'sound/weapons/guillotine.ogg'
+
+ cooldown_time = 40 SECONDS
+ invocation = "IA!"
+ invocation_type = INVOCATION_SHOUT
+
+ spell_requirements = NONE
+
+ active_msg = "You summon forth two cursed blades."
+ deactive_msg = "You conceal the cursed blades."
+ projectile_amount = 2
+ projectile_type = /obj/projectile/floating_blade/haunted
diff --git a/code/modules/antagonists/heretic/magic/mansus_grasp.dm b/code/modules/antagonists/heretic/magic/mansus_grasp.dm
index 4ba6aceb20093..e3fbb364f6b1f 100644
--- a/code/modules/antagonists/heretic/magic/mansus_grasp.dm
+++ b/code/modules/antagonists/heretic/magic/mansus_grasp.dm
@@ -38,11 +38,34 @@
var/mob/living/living_hit = victim
living_hit.apply_damage(10, BRUTE, wound_bonus = CANT_WOUND)
- if(iscarbon(victim))
- var/mob/living/carbon/carbon_hit = victim
- carbon_hit.adjust_timed_status_effect(4 SECONDS, /datum/status_effect/speech/slurring/heretic)
- carbon_hit.AdjustKnockdown(5 SECONDS)
- carbon_hit.adjustStaminaLoss(80)
+ if(!iscarbon(victim))
+ return TRUE
+
+ var/mob/living/carbon/carbon_hit = victim
+
+ // Cultists are momentarily disoriented by the stunning aura. Enough for both parties to go 'oh shit' but only a mild combat ability.
+ // Cultists have an identical effect on their stun hand. The heretic's faster spell charge time is made up for by their lack of teammates.
+ if(IS_CULTIST(carbon_hit))
+ carbon_hit.AdjustKnockdown(0.5 SECONDS)
+ carbon_hit.adjust_confusion_up_to(1.5 SECONDS, 3 SECONDS)
+ carbon_hit.adjust_dizzy_up_to(1.5 SECONDS, 3 SECONDS)
+ ADD_TRAIT(carbon_hit, TRAIT_NO_SIDE_KICK, REF(src)) // We don't want this to be a good stunning tool, just minor disorientation
+ addtimer(TRAIT_CALLBACK_REMOVE(carbon_hit, TRAIT_NO_SIDE_KICK, REF(src)), 1 SECONDS)
+
+ var/old_color = carbon_hit.color
+ carbon_hit.color = COLOR_CULT_RED
+ animate(carbon_hit, color = old_color, time = 4 SECONDS, easing = EASE_IN)
+ carbon_hit.mob_light(range = 1.5, power = 2.5, color = COLOR_CULT_RED, duration = 0.5 SECONDS)
+ playsound(carbon_hit, 'sound/magic/curse.ogg', 50, TRUE)
+
+ to_chat(caster, span_warning("An unholy force intervenes as you grasp [carbon_hit], absorbing most of the effects!"))
+ to_chat(carbon_hit, span_warning("As [caster] grasps you with eldritch forces, your blood magic absorbs most of the effects!"))
+ carbon_hit.balloon_alert_to_viewers("absorbed!")
+ return TRUE
+
+ carbon_hit.adjust_timed_status_effect(4 SECONDS, /datum/status_effect/speech/slurring/heretic)
+ carbon_hit.AdjustKnockdown(5 SECONDS)
+ carbon_hit.adjustStaminaLoss(80)
return TRUE
diff --git a/code/modules/antagonists/heretic/magic/rust_construction.dm b/code/modules/antagonists/heretic/magic/rust_construction.dm
index 130e3e06be23b..f8d6a2ff2be44 100644
--- a/code/modules/antagonists/heretic/magic/rust_construction.dm
+++ b/code/modules/antagonists/heretic/magic/rust_construction.dm
@@ -8,7 +8,7 @@
check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED
school = SCHOOL_FORBIDDEN
- cooldown_time = 5 SECONDS
+ cooldown_time = 8 SECONDS
invocation = "Someone raises a wall of rust."
invocation_self_message = "You raise a wall of rust."
@@ -16,15 +16,19 @@
spell_requirements = NONE
cast_range = 4
- aim_assist = FALSE
/// How long does the filter last on walls we make?
var/filter_duration = 2 MINUTES
+/**
+ * Overrides 'aim assist' because we always want to hit just the turf we clicked on.
+ */
+/datum/action/cooldown/spell/pointed/rust_construction/aim_assist(mob/living/caller, atom/target)
+ return get_turf(target)
+
/datum/action/cooldown/spell/pointed/rust_construction/is_valid_target(atom/cast_on)
- if(!isfloorturf(cast_on))
- if(isturf(cast_on) && owner)
- cast_on.balloon_alert(owner, "not a floor!")
+ if(!isturf(cast_on))
+ cast_on.balloon_alert(owner, "not a wall or floor!")
return FALSE
if(!HAS_TRAIT(cast_on, TRAIT_RUSTY))
@@ -43,9 +47,22 @@
invocation = span_danger("[owner] drags [owner.p_their()] hand[living_owner.usable_hands == 1 ? "":"s"] upwards as a wall of rust rises out of [cast_on]!")
invocation_self_message = span_notice("You drag [living_owner.usable_hands == 1 ? "a hand":"your hands"] upwards as a wall of rust rises out of [cast_on].")
-/datum/action/cooldown/spell/pointed/rust_construction/cast(turf/open/cast_on)
+/datum/action/cooldown/spell/pointed/rust_construction/cast(turf/cast_on)
. = ..()
var/rises_message = "rises out of [cast_on]"
+
+ // If we casted at a wall we'll try to rust it. In the case of an enchanted wall it'll deconstruct it
+ if(isclosedturf(cast_on))
+ cast_on.visible_message(span_warning("\The [cast_on] quakes as the rust causes it to crumble!"))
+ var/mob/living/living_owner = owner
+ living_owner?.do_rust_heretic_act(cast_on)
+ // ref transfers to floor
+ cast_on.Shake(shake_interval = 0.1 SECONDS, duration = 0.5 SECONDS)
+ // which we need to re-rust
+ living_owner?.do_rust_heretic_act(cast_on)
+ playsound(cast_on, 'sound/effects/bang.ogg', 50, vary = TRUE)
+ return
+
var/turf/closed/wall/new_wall = cast_on.place_on_top(/turf/closed/wall)
if(!istype(new_wall))
return
@@ -53,7 +70,8 @@
playsound(new_wall, 'sound/effects/constructform.ogg', 50, TRUE)
new_wall.rust_heretic_act()
new_wall.name = "\improper enchanted [new_wall.name]"
- new_wall.hardness = 10
+ new_wall.AddComponent(/datum/component/torn_wall)
+ new_wall.hardness = 60
new_wall.sheet_amount = 0
new_wall.girder_type = null
@@ -61,8 +79,8 @@
// but I guess a fading filter will have to do for now as walls have 0 depth (currently)
// damn though with 3/4ths walls this'll look sick just imagine it
new_wall.add_filter("rust_wall", 2, list("type" = "outline", "color" = "#85be299c", "size" = 2))
- addtimer(CALLBACK(src, PROC_REF(fade_wall_filter), new_wall), filter_duration * (1/20))
- addtimer(CALLBACK(src,PROC_REF(remove_wall_filter), new_wall), filter_duration)
+ addtimer(CALLBACK(src, PROC_REF(fade_wall_filter), new_wall), filter_duration * 0.5)
+ addtimer(CALLBACK(src, PROC_REF(remove_wall_filter), new_wall), filter_duration)
var/message_shown = FALSE
for(var/mob/living/living_mob in cast_on)
@@ -108,7 +126,7 @@
if(!rust_filter)
return
- animate(rust_filter, alpha = 0, time = filter_duration * (19/20))
+ animate(rust_filter, alpha = 0, time = filter_duration * (9/20))
/datum/action/cooldown/spell/pointed/rust_construction/proc/remove_wall_filter(turf/closed/wall)
if(QDELETED(wall))
diff --git a/code/modules/antagonists/heretic/magic/rust_wave.dm b/code/modules/antagonists/heretic/magic/rust_wave.dm
index 65c5592b34e8b..0282a32b2b687 100644
--- a/code/modules/antagonists/heretic/magic/rust_wave.dm
+++ b/code/modules/antagonists/heretic/magic/rust_wave.dm
@@ -25,7 +25,10 @@
new /obj/effect/temp_visual/dir_setting/entropic(get_step(cast_on, cast_on.dir), cast_on.dir)
/datum/action/cooldown/spell/cone/staggered/entropic_plume/do_turf_cone_effect(turf/target_turf, mob/living/caster, level)
- caster.do_rust_heretic_act(target_turf)
+ if(ismob(caster))
+ caster.do_rust_heretic_act(target_turf)
+ else
+ target_turf.rust_heretic_act()
/datum/action/cooldown/spell/cone/staggered/entropic_plume/do_mob_cone_effect(mob/living/victim, atom/caster, level)
if(victim.can_block_magic(antimagic_flags) || IS_HERETIC_OR_MONSTER(victim) || victim == caster)
diff --git a/code/modules/antagonists/heretic/moon_lunatic.dm b/code/modules/antagonists/heretic/moon_lunatic.dm
index dbc07a6b5054b..3d877ee962c11 100644
--- a/code/modules/antagonists/heretic/moon_lunatic.dm
+++ b/code/modules/antagonists/heretic/moon_lunatic.dm
@@ -13,16 +13,27 @@
var/datum/mind/ascended_heretic
// The body of the ascended heretic who created us
var/mob/living/carbon/human/ascended_body
+ // Our objective
+ var/datum/objective/lunatic/lunatic_obj
+
+/datum/antagonist/lunatic/on_gain()
+ // Masters gain an objective before so we dont want duplicates
+ for(var/objective in objectives)
+ if(!istype(objective, /datum/objective/lunatic))
+ continue
+ return ..()
+ var/datum/objective/lunatic/loony = new()
+ objectives += loony
+ lunatic_obj = loony
+ return ..()
/// Runs when the moon heretic creates us, used to give the lunatic a master
/datum/antagonist/lunatic/proc/set_master(datum/mind/heretic_master, mob/living/carbon/human/heretic_body)
src.ascended_heretic = heretic_master
src.ascended_body = heretic_body
- var/datum/objective/lunatic/lunatic_obj = new()
lunatic_obj.master = heretic_master
lunatic_obj.update_explanation_text()
- objectives += lunatic_obj
to_chat(owner, span_boldnotice("Ruin the lie, save the truth through obeying [heretic_master] the ringleader!"))
@@ -30,8 +41,7 @@
var/mob/living/our_mob = mob_override || owner.current
handle_clown_mutation(our_mob, "Ancient knowledge from the moon has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.")
our_mob.faction |= FACTION_HERETIC
- add_team_hud(our_mob)
- add_team_hud(our_mob, /datum/antagonist/heretic)
+ add_team_hud(our_mob, /datum/antagonist/lunatic)
ADD_TRAIT(our_mob, TRAIT_MADNESS_IMMUNE, REF(src))
var/datum/action/cooldown/lunatic_track/moon_track = new /datum/action/cooldown/lunatic_track()
@@ -52,7 +62,28 @@
/datum/objective/lunatic
explanation_text = "Assist your ringleader. If you are seeing this, scroll up in chat for who that is and report this"
var/datum/mind/master
+ // If the person with this objective is a lunatic master
+ var/is_master = FALSE
/datum/objective/lunatic/update_explanation_text()
. = ..()
- explanation_text = "Assist your ringleader [master]"
+ if(is_master)
+ explanation_text = "Lead your lunatics to further your own goals!"
+ return
+ explanation_text = "Assist your ringleader [master], do not harm fellow lunatics"
+
+// Lunatic master
+/datum/antagonist/lunatic/master
+ name = "\improper Ringleader"
+ antag_hud_name = "lunatic_master"
+
+/datum/antagonist/lunatic/master/on_gain()
+ var/datum/objective/lunatic/loony = new()
+ objectives += loony
+ loony.is_master = TRUE
+ loony.update_explanation_text()
+ return ..()
+
+/datum/antagonist/lunatic/master/apply_innate_effects(mob/living/mob_override)
+ var/mob/living/our_mob = mob_override || owner.current
+ add_team_hud(our_mob, /datum/antagonist/lunatic)
diff --git a/code/modules/antagonists/heretic/soultrapped_heretic.dm b/code/modules/antagonists/heretic/soultrapped_heretic.dm
new file mode 100644
index 0000000000000..ffd92e09496cb
--- /dev/null
+++ b/code/modules/antagonists/heretic/soultrapped_heretic.dm
@@ -0,0 +1,24 @@
+///a heretic that got soultrapped by cultists. does nothing, other than signify they suck
+/datum/antagonist/soultrapped_heretic
+ name = "\improper Soultrapped Heretic"
+ roundend_category = "Heretics"
+ antagpanel_category = "Heretic"
+ job_rank = ROLE_HERETIC
+ antag_moodlet = /datum/mood_event/soultrapped_heretic
+ antag_hud_name = "heretic"
+
+// Will never show up because they're shades inside a sword
+/datum/mood_event/soultrapped_heretic
+ description = "They trapped me! I can't escape!"
+ mood_change = -20
+
+// always failure obj
+/datum/objective/heretic_trapped
+ name = "soultrapped failure"
+ explanation_text = "Help the cult. Kill the cult. Help the crew. Kill the crew. Help your wielder. Kill your wielder. Kill everyone. Rattle your chains."
+
+/datum/antagonist/soultrapped_heretic/on_gain()
+ ..()
+ var/datum/objective/epic_fail = new /datum/objective/heretic_trapped()
+ epic_fail.completed = FALSE
+ objectives += epic_fail
diff --git a/code/modules/antagonists/heretic/status_effects/buffs.dm b/code/modules/antagonists/heretic/status_effects/buffs.dm
index d2058a5b4f19e..35a6ab9268784 100644
--- a/code/modules/antagonists/heretic/status_effects/buffs.dm
+++ b/code/modules/antagonists/heretic/status_effects/buffs.dm
@@ -118,6 +118,8 @@
var/time_between_initial_blades = 0.25 SECONDS
/// If TRUE, we self-delete our status effect after all the blades are deleted.
var/delete_on_blades_gone = TRUE
+ /// What blade type to create
+ var/blade_type = /obj/effect/floating_blade
/// A list of blade effects orbiting / protecting our owner
var/list/obj/effect/floating_blade/blades = list()
@@ -127,12 +129,14 @@
max_num_blades = 4,
blade_orbit_radius = 20,
time_between_initial_blades = 0.25 SECONDS,
+ blade_type = /obj/effect/floating_blade,
)
src.duration = new_duration
src.max_num_blades = max_num_blades
src.blade_orbit_radius = blade_orbit_radius
src.time_between_initial_blades = time_between_initial_blades
+ src.blade_type = blade_type
return ..()
/datum/status_effect/protective_blades/on_apply()
@@ -157,7 +161,7 @@
if(QDELETED(src) || QDELETED(owner))
return
- var/obj/effect/floating_blade/blade = new(get_turf(owner))
+ var/obj/effect/floating_blade/blade = new blade_type(get_turf(owner))
blades += blade
blade.orbit(owner, blade_orbit_radius)
RegisterSignal(blade, COMSIG_QDELETING, PROC_REF(remove_blade))
diff --git a/code/modules/antagonists/heretic/structures/mawed_crucible.dm b/code/modules/antagonists/heretic/structures/mawed_crucible.dm
index 8e5410f0f6751..2135ffa134ca5 100644
--- a/code/modules/antagonists/heretic/structures/mawed_crucible.dm
+++ b/code/modules/antagonists/heretic/structures/mawed_crucible.dm
@@ -57,6 +57,10 @@
return span_notice("It's at [round(atom_integrity * 100 / max_integrity)]% stability.")
return ..()
+// no breaky herety thingy
+/obj/structure/destructible/eldritch_crucible/rust_heretic_act()
+ return
+
/obj/structure/destructible/eldritch_crucible/attacked_by(obj/item/weapon, mob/living/user)
if(!iscarbon(user))
return ..()
diff --git a/code/modules/antagonists/heretic/transmutation_rune.dm b/code/modules/antagonists/heretic/transmutation_rune.dm
index 619e7d252957b..5e6ad0fb1cf7f 100644
--- a/code/modules/antagonists/heretic/transmutation_rune.dm
+++ b/code/modules/antagonists/heretic/transmutation_rune.dm
@@ -1,8 +1,9 @@
/// The heretic's rune, which they use to complete transmutation rituals.
/obj/effect/heretic_rune
name = "transmutation rune"
- desc = "A flowing circle of shapes and runes is etched into the floor, filled with a thick black tar-like fluid."
- icon_state = ""
+ desc = "A flowing circle of shapes and runes is etched into the floor, filled with a thick black tar-like fluid. This one looks pretty small."
+ icon = 'icons/obj/antags/cult/rune.dmi'
+ icon_state = "main1"
anchored = TRUE
interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
diff --git a/code/modules/antagonists/ninja/ninjaDrainAct.dm b/code/modules/antagonists/ninja/ninjaDrainAct.dm
index 0aaf5dbbfcf3b..f160ebb9c6244 100644
--- a/code/modules/antagonists/ninja/ninjaDrainAct.dm
+++ b/code/modules/antagonists/ninja/ninjaDrainAct.dm
@@ -85,13 +85,13 @@
hacking_module.charge_message(src, drain_total)
//CELL//
-/obj/item/stock_parts/cell/ninjadrain_act(mob/living/carbon/human/ninja, obj/item/mod/module/hacker/hacking_module)
+/obj/item/stock_parts/power_store/cell/ninjadrain_act(mob/living/carbon/human/ninja, obj/item/mod/module/hacker/hacking_module)
if(!ninja || !hacking_module)
return NONE
INVOKE_ASYNC(src, PROC_REF(ninjadrain_charge), ninja, hacking_module)
return COMPONENT_CANCEL_ATTACK_CHAIN
-/obj/item/stock_parts/cell/proc/ninjadrain_charge(mob/living/carbon/human/ninja, obj/item/mod/module/hacker/hacking_module)
+/obj/item/stock_parts/power_store/cell/proc/ninjadrain_charge(mob/living/carbon/human/ninja, obj/item/mod/module/hacker/hacking_module)
var/drain_total = 0
if(charge && !do_after(ninja, 3 SECONDS, target = src, hidden = TRUE))
drain_total = charge
diff --git a/code/modules/antagonists/nukeop/datums/operative.dm b/code/modules/antagonists/nukeop/datums/operative.dm
index 3b4c9fa4da7ce..9eca88d33852d 100644
--- a/code/modules/antagonists/nukeop/datums/operative.dm
+++ b/code/modules/antagonists/nukeop/datums/operative.dm
@@ -8,6 +8,7 @@
show_to_ghosts = TRUE
hijack_speed = 2 //If you can't take out the station, take the shuttle instead.
suicide_cry = "FOR THE SYNDICATE!!"
+ stinger_sound = 'sound/ambience/antag/ops.ogg'
/// Which nukie team are we on?
var/datum/team/nuclear/nuke_team
/// If not assigned a team by default ops will try to join existing ones, set this to TRUE to always create new team.
@@ -30,7 +31,7 @@
var/discount_limited_amount = 10
/datum/antagonist/nukeop/greet()
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0, use_reverb = FALSE)
+ play_stinger()
to_chat(owner, span_big("You are a [nuke_team ? nuke_team.syndicate_name : "syndicate"] agent!"))
owner.announce_objectives()
diff --git a/code/modules/antagonists/nukeop/datums/operative_leader.dm b/code/modules/antagonists/nukeop/datums/operative_leader.dm
index 0c583bfe794b0..c2995e5575326 100644
--- a/code/modules/antagonists/nukeop/datums/operative_leader.dm
+++ b/code/modules/antagonists/nukeop/datums/operative_leader.dm
@@ -21,7 +21,7 @@
H.update_icons()
/datum/antagonist/nukeop/leader/greet()
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0, use_reverb = FALSE)
+ play_stinger()
to_chat(owner, "You are the Syndicate [title] for this mission. You are responsible for guiding the team and your ID is the only one who can open the launch bay doors.")
to_chat(owner, "If you feel you are not up to this task, give your ID and radio to another operative.")
if(!CONFIG_GET(flag/disable_warops))
diff --git a/code/modules/antagonists/nukeop/outfits.dm b/code/modules/antagonists/nukeop/outfits.dm
index e8ae07ffdde83..5cd89e6c842a9 100644
--- a/code/modules/antagonists/nukeop/outfits.dm
+++ b/code/modules/antagonists/nukeop/outfits.dm
@@ -136,7 +136,7 @@
suit = /obj/item/clothing/suit/jacket/oversized
gloves = /obj/item/clothing/gloves/fingerless
glasses = /obj/item/clothing/glasses/sunglasses
- mask = /obj/item/clothing/mask/cigarette/cigar
+ mask = /obj/item/cigarette/cigar
faction = "Cybersun Industries"
/datum/outfit/syndicate/reinforcement/donk
diff --git a/code/modules/antagonists/obsessed/obsessed.dm b/code/modules/antagonists/obsessed/obsessed.dm
index 3d0a0063bf709..7316102e2ce09 100644
--- a/code/modules/antagonists/obsessed/obsessed.dm
+++ b/code/modules/antagonists/obsessed/obsessed.dm
@@ -12,6 +12,7 @@
suicide_cry = "FOR MY LOVE!!"
preview_outfit = /datum/outfit/obsessed
hardcore_random_bonus = TRUE
+ stinger_sound = 'sound/ambience/antag/creepalert.ogg'
var/datum/brain_trauma/special/obsessed/trauma
/datum/antagonist/obsessed/admin_add(datum/mind/new_owner,mob/admin)
@@ -28,7 +29,7 @@
C.gain_trauma(/datum/brain_trauma/special/obsessed)//ZAP
/datum/antagonist/obsessed/greet()
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/creepalert.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
+ play_stinger()
owner.announce_objectives()
/datum/antagonist/obsessed/Destroy()
@@ -66,7 +67,7 @@
shoes = /obj/item/clothing/shoes/sneakers/black
/datum/outfit/obsessed/post_equip(mob/living/carbon/human/H)
- for(var/obj/item/carried_item in H.get_equipped_items(include_pockets = TRUE, include_accessories = TRUE))
+ for(var/obj/item/carried_item in H.get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES))
carried_item.add_mob_blood(H)//Oh yes, there will be blood...
H.regenerate_icons()
diff --git a/code/modules/antagonists/pirate/pirate_outfits.dm b/code/modules/antagonists/pirate/pirate_outfits.dm
index 15a3d4fe2dcb2..aef7f1d9d4b92 100644
--- a/code/modules/antagonists/pirate/pirate_outfits.dm
+++ b/code/modules/antagonists/pirate/pirate_outfits.dm
@@ -72,7 +72,7 @@
id_trim = /datum/id_trim/pirate/captain/silverscale
head = /obj/item/clothing/head/costume/crown
- mask = /obj/item/clothing/mask/cigarette/cigar/havana
+ mask = /obj/item/cigarette/cigar/havana
l_pocket = /obj/item/lighter
/datum/outfit/pirate/interdyne
diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm
index e34907d64ae46..fa07215cf6715 100644
--- a/code/modules/antagonists/revolution/revolution.dm
+++ b/code/modules/antagonists/revolution/revolution.dm
@@ -6,6 +6,7 @@
antag_moodlet = /datum/mood_event/revolution
antag_hud_name = "rev"
suicide_cry = "VIVA LA REVOLUTION!!"
+ stinger_sound = 'sound/ambience/antag/revolutionary_tide.ogg'
var/datum/team/revolution/rev_team
/// When this antagonist is being de-antagged, this is the source. Can be a mob (for mindshield/blunt force trauma) or a #define string.
@@ -67,7 +68,6 @@
/datum/antagonist/rev/greet()
. = ..()
to_chat(owner, span_userdanger("Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!"))
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/revolutionary_tide.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
owner.announce_objectives()
/datum/antagonist/rev/create_team(datum/team/revolution/new_team)
diff --git a/code/modules/antagonists/space_dragon/carp_rift.dm b/code/modules/antagonists/space_dragon/carp_rift.dm
index 4b8a20acba8d1..828ee94587fcb 100644
--- a/code/modules/antagonists/space_dragon/carp_rift.dm
+++ b/code/modules/antagonists/space_dragon/carp_rift.dm
@@ -19,7 +19,7 @@
return
var/area/rift_location = get_area(owner)
if(!(rift_location in dragon.chosen_rift_areas))
- owner.balloon_alert(owner, "can't summon a rift here!")
+ owner.balloon_alert(owner, "can't summon a rift here! check your objectives!")
return
for(var/obj/structure/carp_rift/rift as anything in dragon.rift_list)
var/area/used_location = get_area(rift)
diff --git a/code/modules/antagonists/traitor/contractor/contract_teammate.dm b/code/modules/antagonists/traitor/contractor/contract_teammate.dm
index 54fc958c1f89f..965d99e89ac6a 100644
--- a/code/modules/antagonists/traitor/contractor/contract_teammate.dm
+++ b/code/modules/antagonists/traitor/contractor/contract_teammate.dm
@@ -24,7 +24,7 @@
suit = /obj/item/clothing/suit/chameleon
back = /obj/item/storage/backpack
belt = /obj/item/modular_computer/pda/chameleon
- mask = /obj/item/clothing/mask/cigarette/syndicate
+ mask = /obj/item/cigarette/syndicate
shoes = /obj/item/clothing/shoes/chameleon/noslip
ears = /obj/item/radio/headset/chameleon
id = /obj/item/card/id/advanced/chameleon
@@ -41,5 +41,5 @@
/datum/outfit/contractor_partner/post_equip(mob/living/carbon/human/H, visualsOnly)
. = ..()
- var/obj/item/clothing/mask/cigarette/syndicate/cig = H.get_item_by_slot(ITEM_SLOT_MASK)
+ var/obj/item/cigarette/syndicate/cig = H.get_item_by_slot(ITEM_SLOT_MASK)
cig.light()
diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm
index aba8c279456df..733e22461c795 100644
--- a/code/modules/antagonists/traitor/datum_traitor.dm
+++ b/code/modules/antagonists/traitor/datum_traitor.dm
@@ -17,6 +17,7 @@
can_assign_self_objectives = TRUE
default_custom_objective = "Perform an overcomplicated heist on valuable Nanotrasen assets."
hardcore_random_bonus = TRUE
+ stinger_sound = 'sound/ambience/antag/tatoralert.ogg'
///The flag of uplink that this traitor is supposed to have.
var/uplink_flag_given = UPLINK_TRAITORS
@@ -114,8 +115,6 @@
owner.teach_crafting_recipe(/datum/crafting_recipe/syndicate_uplink_beacon)
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/tatoralert.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
-
return ..()
/datum/antagonist/traitor/on_removal()
diff --git a/code/modules/antagonists/wishgranter/wishgranter.dm b/code/modules/antagonists/wishgranter/wishgranter.dm
index bfac673535afc..fd18ffe5c1ed0 100644
--- a/code/modules/antagonists/wishgranter/wishgranter.dm
+++ b/code/modules/antagonists/wishgranter/wishgranter.dm
@@ -27,5 +27,5 @@
return
H.dna.add_mutation(/datum/mutation/human/hulk)
H.dna.add_mutation(/datum/mutation/human/xray)
- H.dna.add_mutation(/datum/mutation/human/pressure_adaptation)
+ H.dna.add_mutation(/datum/mutation/human/adaptation/pressure)
H.dna.add_mutation(/datum/mutation/human/telekinesis)
diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm
index 3094af509dadb..925f368fe3b54 100644
--- a/code/modules/antagonists/wizard/equipment/soulstone.dm
+++ b/code/modules/antagonists/wizard/equipment/soulstone.dm
@@ -260,16 +260,17 @@
icon = 'icons/mob/shells.dmi'
icon_state = "construct_cult"
desc = "A wicked machine used by those skilled in magical arts. It is inactive."
-
-/obj/structure/constructshell/examine(mob/user)
- . = ..()
- if(IS_CULTIST(user) || HAS_MIND_TRAIT(user, TRAIT_MAGICALLY_GIFTED) || user.stat == DEAD)
- . += {"A construct shell, used to house bound souls from a soulstone.\n
+ var/extra_desc = {"A construct shell, used to house bound souls from a soulstone.\n
Placing a soulstone with a soul into this shell allows you to produce your choice of the following:\n
An Artificer, which can produce more shells and soulstones, as well as fortifications.\n
A Wraith, which does high damage and can jaunt through walls, though it is quite fragile.\n
A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow."}
+/obj/structure/constructshell/examine(mob/user)
+ . = ..()
+ if(IS_CULTIST(user) || HAS_MIND_TRAIT(user, TRAIT_MAGICALLY_GIFTED) || user.stat == DEAD)
+ . += extra_desc
+
/obj/structure/constructshell/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/soulstone))
var/obj/item/soulstone/SS = O
@@ -494,6 +495,11 @@
make_new_construct(/mob/living/basic/construct/artificer/angelic, target, creator, cultoverride, loc_override)
if(THEME_CULT)
make_new_construct(/mob/living/basic/construct/artificer/noncult, target, creator, cultoverride, loc_override)
+ if(CONSTRUCT_HARVESTER)
+ if(IS_HERETIC_OR_MONSTER(creator))
+ make_new_construct(/mob/living/basic/construct/harvester/heretic, target, creator, cultoverride, loc_override)
+ else
+ make_new_construct(/mob/living/basic/construct/harvester, target, creator, cultoverride, loc_override)
/proc/make_new_construct(mob/living/basic/construct/ctype, mob/target, mob/stoner = null, cultoverride = FALSE, loc_override = null)
if(QDELETED(target))
@@ -523,7 +529,7 @@
newstruct.clear_alert("bloodsense")
sense_alert = newstruct.throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense)
if(sense_alert)
- sense_alert.Cviewer = newstruct
+ sense_alert.construct_owner = newstruct
newstruct.cancel_camera()
/obj/item/soulstone/anybody
diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm
index 1d8936e6068da..5c7f5208254f0 100644
--- a/code/modules/assembly/mousetrap.dm
+++ b/code/modules/assembly/mousetrap.dm
@@ -153,7 +153,7 @@
* * user: The mob handling the trap
*/
/obj/item/assembly/mousetrap/proc/clumsy_check(mob/living/carbon/human/user)
- if(!armed)
+ if(!armed || !user)
return FALSE
if((HAS_TRAIT(user, TRAIT_DUMB) || HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50))
var/which_hand = BODY_ZONE_PRECISE_L_HAND
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
index 32f3eb7419ced..aeb14c9b5dd28 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
@@ -25,6 +25,7 @@ It's like a regular ol' straight pipe, but you can turn it on and off.
normalize_cardinal_directions()
if(animation)
flick("[valve_type]valve_[on][!on]-[set_overlay_offset(piping_layer)]", src)
+ playsound(src, 'sound/effects/valve_opening.ogg', 50)
icon_state = "[valve_type]valve_[on ? "on" : "off"]-[set_overlay_offset(piping_layer)]"
/**
@@ -37,6 +38,7 @@ It's like a regular ol' straight pipe, but you can turn it on and off.
. = on
on = to_open
if(on)
+ playsound(src, 'sound/effects/gas_hissing.ogg', 50)
update_icon_nopipes()
update_parents()
var/datum/pipeline/parent1 = parents[1]
diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
index 2da9ac752b549..4a811c3435cb7 100644
--- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
+++ b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm
@@ -15,7 +15,7 @@
/// We don't use area power, we always use the cell
use_power = NO_POWER_USE
///used to check if there is a cell in the machine
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
///check if the machine is on or off
var/on = FALSE
///check what mode the machine should be (WORKING, STANDBY)
@@ -170,7 +170,7 @@
/obj/machinery/electrolyzer/attackby(obj/item/I, mob/user, params)
add_fingerprint(user)
- if(istype(I, /obj/item/stock_parts/cell))
+ if(istype(I, /obj/item/stock_parts/power_store/cell))
if(!panel_open)
balloon_alert(user, "open panel!")
return
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm
index 71e5a8bcc5f36..9f2f6a96f4bf8 100644
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm
+++ b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm
@@ -330,7 +330,7 @@
var/obj/machinery/power/apc/apc = area.apc
if (!apc)
return 0
- var/obj/item/stock_parts/cell/cell = apc.cell
+ var/obj/item/stock_parts/power_store/cell = apc.cell
if (!cell)
return 0
return cell.percent()
diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm
index 184d7680c91af..13c872199dc0c 100644
--- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm
+++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm
@@ -134,7 +134,7 @@ GLOBAL_LIST_INIT(gas_recipe_meta, gas_recipes_list())
max_temp = 90
energy_release = -800000
requirements = list(/datum/gas/plasma = 800, /datum/gas/helium = 100, /datum/gas/bz = 50)
- products = list(/obj/item/stock_parts/cell/crystal_cell = 1)
+ products = list(/obj/item/stock_parts/power_store/cell/crystal_cell = 1)
/datum/gas_recipe/crystallizer/zaukerite
id = "zaukerite"
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm
index 6957389c351b7..ebe053663f9e0 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm
@@ -61,7 +61,8 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component
/obj/machinery/atmospherics/components/unary/bluespace_sender/add_context(atom/source, list/context, obj/item/held_item, mob/user)
. = ..()
- context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]"
+ if(anchored && !panel_open && is_operational)
+ context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]"
if(!held_item)
return CONTEXTUAL_SCREENTIP_SET
switch(held_item.tool_behaviour)
@@ -156,7 +157,7 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component
investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS)
update_appearance()
return CLICK_ACTION_SUCCESS
- return CLICK_ACTION_BLOCKING
+ return NONE
/obj/machinery/atmospherics/components/unary/bluespace_sender/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 5d2d5f6f1f9c7..c3dae6241620d 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -35,7 +35,7 @@
///Is shielding turned on/off
var/shielding_powered = FALSE
///The powercell used to enable shielding
- var/obj/item/stock_parts/cell/internal_cell
+ var/obj/item/stock_parts/power_store/internal_cell
///used while processing to update appearance only when its pressure state changes
var/current_pressure_state
@@ -52,7 +52,7 @@
. = ..()
if(mapload)
- internal_cell = new /obj/item/stock_parts/cell/high(src)
+ internal_cell = new /obj/item/stock_parts/power_store/cell/high(src)
if(existing_mixture)
air_contents.copy_from(existing_mixture)
@@ -85,7 +85,7 @@
context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove tank"
if(!held_item)
return CONTEXTUAL_SCREENTIP_SET
- if(istype(held_item, /obj/item/stock_parts/cell))
+ if(istype(held_item, /obj/item/stock_parts/power_store/cell))
context[SCREENTIP_CONTEXT_LMB] = "Insert cell"
switch(held_item.tool_behaviour)
if(TOOL_SCREWDRIVER)
@@ -367,8 +367,8 @@
internal_cell.forceMove(drop_location())
/obj/machinery/portable_atmospherics/canister/attackby(obj/item/item, mob/user, params)
- if(istype(item, /obj/item/stock_parts/cell))
- var/obj/item/stock_parts/cell/active_cell = item
+ if(istype(item, /obj/item/stock_parts/power_store/cell))
+ var/obj/item/stock_parts/power_store/cell/active_cell = item
if(!panel_open)
balloon_alert(user, "open hatch first!")
return TRUE
@@ -461,18 +461,24 @@
user.investigate_log("started a transfer into [holding].", INVESTIGATE_ATMOS)
/obj/machinery/portable_atmospherics/canister/process(seconds_per_tick)
+ if(!shielding_powered)
+ return
+
var/our_pressure = air_contents.return_pressure()
var/our_temperature = air_contents.return_temperature()
+ var/energy_factor = round(log(10, max(our_pressure - pressure_limit, 1)) + log(10, max(our_temperature - temp_limit, 1)))
+ var/energy_consumed = energy_factor * 250 * seconds_per_tick
- if(shielding_powered)
- var/energy_factor = round(log(10, max(our_pressure - pressure_limit, 1)) + log(10, max(our_temperature - temp_limit, 1)))
- var/energy_consumed = energy_factor * 250 * seconds_per_tick
- if(powered(AREA_USAGE_EQUIP, ignore_use_power = TRUE))
- use_energy(energy_consumed, channel = AREA_USAGE_EQUIP)
- else if(!internal_cell?.use(energy_consumed * 0.025))
- shielding_powered = FALSE
- SSair.start_processing_machine(src)
- investigate_log("shielding turned off due to power loss")
+ if(!energy_consumed)
+ return
+
+ if(powered(AREA_USAGE_EQUIP, ignore_use_power = TRUE))
+ use_energy(energy_consumed, channel = AREA_USAGE_EQUIP)
+ else if(!internal_cell?.use(energy_consumed * 0.025))
+ shielding_powered = FALSE
+ SSair.start_processing_machine(src)
+ investigate_log("shielding turned off due to power loss")
+ update_appearance()
///return the icon_state component for the canister's indicator light based on its current pressure reading
/obj/machinery/portable_atmospherics/canister/proc/get_pressure_state()
diff --git a/code/modules/autowiki/pages/soup.dm b/code/modules/autowiki/pages/soup.dm
index 75521005d8e88..f67d00e97a057 100644
--- a/code/modules/autowiki/pages/soup.dm
+++ b/code/modules/autowiki/pages/soup.dm
@@ -27,6 +27,7 @@
var/result_name
var/result_desc
var/result_tastes
+ var/result_soup_type
// Solid food item results take priority over reagents for showcasing results
if(soup_recipe.resulting_food_path)
var/obj/item/resulting_food = new soup_recipe.resulting_food_path()
@@ -45,7 +46,7 @@
// Otherwise, it should be a reagent.
else
- var/result_soup_type = soup_recipe.results[1]
+ result_soup_type = soup_recipe.results[1]
var/datum/reagent/result_soup = new result_soup_type()
result_name = format_text(result_soup.name)
result_desc = result_soup.description
@@ -122,8 +123,14 @@
template_list["results"] = escape_value(compiled_results)
// -- While we're here, generate an icon of the bowl --
- var/image/compiled_image = image(icon = soup_icon, icon_state = soup_icon_state)
- upload_icon(getFlatIcon(compiled_image, no_anim = TRUE), filename)
+ if(!soup_icon_state)
+ var/obj/item/reagent_containers/cup/bowl/soup_bowl = new()
+ soup_bowl.reagents.add_reagent(result_soup_type, soup_bowl.reagents.maximum_volume)
+ upload_icon(getFlatIcon(soup_bowl, no_anim = TRUE), filename)
+ qdel(soup_bowl)
+ else
+ var/image/compiled_image = image(icon = soup_icon, icon_state = soup_icon_state)
+ upload_icon(getFlatIcon(compiled_image, no_anim = TRUE), filename)
// -- Cleanup --
qdel(soup_recipe)
diff --git a/code/modules/autowiki/pages/stockparts.dm b/code/modules/autowiki/pages/stockparts.dm
index fd92ecfaef476..7d2b68b236b23 100644
--- a/code/modules/autowiki/pages/stockparts.dm
+++ b/code/modules/autowiki/pages/stockparts.dm
@@ -3,11 +3,16 @@
page = "Template:Autowiki/Content/StockParts"
var/list/battery_whitelist = list(
- /obj/item/stock_parts/cell,
- /obj/item/stock_parts/cell/high,
- /obj/item/stock_parts/cell/super,
- /obj/item/stock_parts/cell/hyper,
- /obj/item/stock_parts/cell/bluespace,
+ /obj/item/stock_parts/power_store/cell,
+ /obj/item/stock_parts/power_store/cell/high,
+ /obj/item/stock_parts/power_store/cell/super,
+ /obj/item/stock_parts/power_store/cell/hyper,
+ /obj/item/stock_parts/power_store/cell/bluespace,
+ /obj/item/stock_parts/power_store/battery,
+ /obj/item/stock_parts/power_store/battery/high,
+ /obj/item/stock_parts/power_store/battery/super,
+ /obj/item/stock_parts/power_store/battery/hyper,
+ /obj/item/stock_parts/power_store/battery/bluespace,
)
/datum/autowiki/stock_parts/generate()
@@ -18,7 +23,7 @@
if(initial(type_to_check.abstract_type) == part_type)
continue
- if(!battery_whitelist.Find(part_type) && ispath(part_type, /obj/item/stock_parts/cell))
+ if(!battery_whitelist.Find(part_type) && ispath(part_type, /obj/item/stock_parts/power_store))
continue
var/obj/item/stock_parts/stock_part = new part_type()
diff --git a/code/modules/bitrunning/components/avatar_connection.dm b/code/modules/bitrunning/components/avatar_connection.dm
index b533e2b5661d6..a92e8ef3d2e6e 100644
--- a/code/modules/bitrunning/components/avatar_connection.dm
+++ b/code/modules/bitrunning/components/avatar_connection.dm
@@ -60,9 +60,16 @@
var/datum/action/avatar_domain_info/action = new(help_datum)
action.Grant(avatar)
+ var/client/our_client = old_body.client
+ var/alias = our_client?.prefs?.read_preference(/datum/preference/name/hacker_alias) || pick(GLOB.hacker_aliases)
+
+ if(alias && avatar.real_name != alias)
+ avatar.fully_replace_character_name(avatar.real_name, alias)
+
avatar.playsound_local(avatar, 'sound/magic/blink.ogg', 25, TRUE)
avatar.set_static_vision(2 SECONDS)
- avatar.set_temp_blindness(1 SECONDS)
+ avatar.set_temp_blindness(1 SECONDS) // I'm in
+
/datum/component/avatar_connection/PostTransfer()
var/obj/machinery/netpod/pod = netpod_ref?.resolve()
@@ -74,6 +81,7 @@
pod.avatar_ref = WEAKREF(parent)
+
/datum/component/avatar_connection/RegisterWithParent()
ADD_TRAIT(parent, TRAIT_TEMPORARY_BODY, REF(src))
/**
@@ -87,6 +95,7 @@
RegisterSignal(parent, COMSIG_LIVING_DEATH, PROC_REF(on_sever_connection))
RegisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_linked_damage))
+
/datum/component/avatar_connection/UnregisterFromParent()
REMOVE_TRAIT(parent, TRAIT_TEMPORARY_BODY, REF(src))
UnregisterSignal(parent, list(
@@ -98,6 +107,7 @@
COMSIG_MOB_APPLY_DAMAGE,
))
+
/// Disconnects the avatar and returns the mind to the old_body.
/datum/component/avatar_connection/proc/full_avatar_disconnect(cause_damage = FALSE, datum/source)
#ifndef UNIT_TESTS
@@ -115,6 +125,7 @@
qdel(src)
+
/// Triggers whenever the server gets a loot crate pushed to goal area
/datum/component/avatar_connection/proc/on_domain_completed(datum/source, atom/entered)
SIGNAL_HANDLER
@@ -127,6 +138,7 @@
new_master = entered,
)
+
/// Transfers damage from the avatar to the old_body
/datum/component/avatar_connection/proc/on_linked_damage(datum/source, damage, damage_type, def_zone, blocked, ...)
SIGNAL_HANDLER
@@ -147,6 +159,7 @@
if(old_body.stat > SOFT_CRIT) // KO!
full_avatar_disconnect(cause_damage = TRUE)
+
/// Handles minds being swapped around in subsequent avatars
/datum/component/avatar_connection/proc/on_mind_transfer(datum/mind/source, mob/living/previous_body)
SIGNAL_HANDLER
@@ -157,6 +170,7 @@
source.current.TakeComponent(src)
+
/// Triggers when someone starts prying open our netpod
/datum/component/avatar_connection/proc/on_netpod_crowbar(datum/source, mob/living/intruder)
SIGNAL_HANDLER
@@ -171,6 +185,7 @@
alert.name = "Netpod Breached"
alert.desc = "Someone is prying open the netpod. Find an exit."
+
/// Triggers when the netpod is taking damage and is under 50%
/datum/component/avatar_connection/proc/on_netpod_damaged(datum/source)
SIGNAL_HANDLER
@@ -184,24 +199,28 @@
alert.name = "Integrity Compromised"
alert.desc = "The netpod is damaged. Find an exit."
+
//if your bitrunning avatar somehow manages to acquire and consume a red pill, they will be ejected from the Matrix
/datum/component/avatar_connection/proc/disconnect_if_red_pill(datum/source, obj/item/reagent_containers/pill/pill, mob/feeder)
SIGNAL_HANDLER
if(pill.icon_state == "pill4")
full_avatar_disconnect()
+
/// Triggers when a safe disconnect is called
/datum/component/avatar_connection/proc/on_safe_disconnect(datum/source)
SIGNAL_HANDLER
full_avatar_disconnect()
+
/// Received message to sever connection
/datum/component/avatar_connection/proc/on_sever_connection(datum/source)
SIGNAL_HANDLER
full_avatar_disconnect(cause_damage = TRUE, source = source)
+
/// Triggers when the server is shutting down
/datum/component/avatar_connection/proc/on_shutting_down(datum/source, mob/living/hackerman)
SIGNAL_HANDLER
@@ -216,6 +235,7 @@
alert.name = "Domain Rebooting"
alert.desc = "The domain is rebooting. Find an exit."
+
/// Triggers whenever an antag steps onto an exit turf and the server is emagged
/datum/component/avatar_connection/proc/on_station_spawn(datum/source)
SIGNAL_HANDLER
@@ -230,6 +250,7 @@
alert.name = "Security Breach"
alert.desc = "A hostile entity is breaching the safehouse. Find an exit."
+
/// Server has spawned a ghost role threat
/datum/component/avatar_connection/proc/on_threat_created(datum/source)
SIGNAL_HANDLER
@@ -243,6 +264,7 @@
alert.name = "Threat Detected"
alert.desc = "Data stream abnormalities present."
+
/// Returns the mind to the old body
/datum/component/avatar_connection/proc/return_to_old_body()
var/datum/mind/old_mind = old_mind_ref?.resolve()
diff --git a/code/modules/bitrunning/components/virtual_entity.dm b/code/modules/bitrunning/components/virtual_entity.dm
index 12e5305ba9adc..db81f376a8094 100644
--- a/code/modules/bitrunning/components/virtual_entity.dm
+++ b/code/modules/bitrunning/components/virtual_entity.dm
@@ -31,6 +31,8 @@
/datum/component/virtual_entity/proc/jailbreak_mobs()
SIGNAL_HANDLER
- to_chat(parent, span_big("You shiver for a moment, then suddenly feel a sense of clarity you haven't felt before. \
- You can go anywhere, do anything! You could leave this simulation right now if you wanted!"))
+ to_chat(parent, span_boldannounce("You shiver for a moment with a sense of clarity you haven't felt before."))
+ to_chat(parent, span_notice("You could go anywhere, do anything! You could leave this simulation right now if you wanted!"))
+ to_chat(parent, span_danger("But be warned, quantum entanglement will interfere with any previous lives."))
+ to_chat(parent, span_notice("You'll have just one chance to go nova, and there's no turning back."))
qdel(src)
diff --git a/code/modules/bitrunning/designs.dm b/code/modules/bitrunning/designs.dm
index 4e7bca1c1a8dd..96ae65d41e99b 100644
--- a/code/modules/bitrunning/designs.dm
+++ b/code/modules/bitrunning/designs.dm
@@ -72,16 +72,3 @@
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO
)
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
-
-
-/datum/techweb_node/bitrunning
- id = "bitrunning"
- display_name = "Bitrunning Technology"
- description = "Bluespace technology has led to the development of quantum-scale computing, which unlocks the means to materialize atomic structures while executing advanced programs."
- prereq_ids = list("practical_bluespace")
- design_ids = list(
- "byteforge",
- "quantum_console",
- "netpod",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
diff --git a/code/modules/bitrunning/event.dm b/code/modules/bitrunning/event.dm
index 4cc95f4f0578a..16190851f3720 100644
--- a/code/modules/bitrunning/event.dm
+++ b/code/modules/bitrunning/event.dm
@@ -89,6 +89,10 @@
if(!unlucky_server.validate_mutation_candidates())
return WAITING_FOR_SOMETHING
- spawned_mobs = unlucky_server.setup_glitch(forced_role)
+ var/mob/spawned = unlucky_server.setup_glitch(forced_role)
+ if(isnull(spawned))
+ return WAITING_FOR_SOMETHING
+
+ spawned_mobs += spawned
return SUCCESSFUL_SPAWN
diff --git a/code/modules/bitrunning/job.dm b/code/modules/bitrunning/job.dm
index 1e749a3c7a58e..d62bd2cf3aeac 100644
--- a/code/modules/bitrunning/job.dm
+++ b/code/modules/bitrunning/job.dm
@@ -13,7 +13,7 @@
paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_CAR
display_order = JOB_DISPLAY_ORDER_BITRUNNER
- bounty_types = CIV_JOB_RANDOM
+ bounty_types = CIV_JOB_BITRUN
departments_list = list(
/datum/job_department/cargo,
)
diff --git a/code/modules/bitrunning/objects/disks.dm b/code/modules/bitrunning/objects/disks.dm
index 6e166d5eb7fdb..17b768c54d08f 100644
--- a/code/modules/bitrunning/objects/disks.dm
+++ b/code/modules/bitrunning/objects/disks.dm
@@ -142,3 +142,46 @@
/obj/item/dualsaber/green,
/obj/item/grenade/syndieminibomb,
)
+
+///proto-kinetic accelerator mods, to be applied to pka's given inside domains
+/obj/item/bitrunning_disk/item/pka_mods
+ name = "bitrunning gear: proto-kinetic accelerator mods"
+ selectable_items = list(
+ /obj/item/borg/upgrade/modkit/range,
+ /obj/item/borg/upgrade/modkit/damage,
+ /obj/item/borg/upgrade/modkit/cooldown,
+ /obj/item/borg/upgrade/modkit/aoe/mobs,
+ /obj/item/borg/upgrade/modkit/human_passthrough,
+ )
+
+/obj/item/bitrunning_disk/item/pka_mods/premium
+ name = "bitrunning gear: premium proto-kinetic accelerator mods"
+ selectable_items = list(
+ /obj/item/borg/upgrade/modkit/cooldown/repeater,
+ /obj/item/borg/upgrade/modkit/lifesteal,
+ /obj/item/borg/upgrade/modkit/resonator_blasts,
+ /obj/item/borg/upgrade/modkit/bounty,
+ /obj/item/borg/upgrade/modkit/indoors,
+ )
+
+///proto-kinetic crusher trophies, to be applied to pkc's given inside domains
+/obj/item/bitrunning_disk/item/pkc_mods
+ name = "bitrunning gear: proto-kinetic crusher mods"
+ selectable_items = list(
+ /obj/item/crusher_trophy/watcher_wing,
+ /obj/item/crusher_trophy/blaster_tubes/magma_wing,
+ /obj/item/crusher_trophy/legion_skull,
+ /obj/item/crusher_trophy/wolf_ear,
+ )
+
+/obj/item/bitrunning_disk/item/pkc_mods/premium
+ name = "bitrunning gear: premium proto-kinetic crusher mods"
+ selectable_items = list(
+ /obj/item/crusher_trophy/watcher_wing/ice_wing,
+ /obj/item/crusher_trophy/blaster_tubes,
+ /obj/item/crusher_trophy/miner_eye,
+ /obj/item/crusher_trophy/tail_spike,
+ /obj/item/crusher_trophy/demon_claws,
+ /obj/item/crusher_trophy/vortex_talisman,
+ /obj/item/crusher_trophy/ice_demon_cube,
+ )
diff --git a/code/modules/bitrunning/objects/hololadder.dm b/code/modules/bitrunning/objects/hololadder.dm
index e592f31382de9..3df41a403e735 100644
--- a/code/modules/bitrunning/objects/hololadder.dm
+++ b/code/modules/bitrunning/objects/hololadder.dm
@@ -8,11 +8,37 @@
obj_flags = BLOCK_Z_OUT_DOWN
/// Time req to disconnect properly
var/travel_time = 3 SECONDS
+ /// Uses this to teleport observers back to the origin server
+ var/datum/weakref/server_ref
-/obj/structure/hololadder/Initialize(mapload)
+
+/obj/structure/hololadder/Initialize(mapload, obj/machinery/quantum_server/origin)
. = ..()
RegisterSignal(loc, COMSIG_ATOM_ENTERED, PROC_REF(on_enter))
+ server_ref = WEAKREF(origin)
+ register_context()
+
+
+/obj/structure/hololadder/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ . = ..()
+
+ context[SCREENTIP_CONTEXT_LMB] = "Disconnect"
+
+
+/obj/structure/hololadder/examine(mob/user)
+ . = ..()
+
+ if(isnull(server_ref.resolve()))
+ . += span_infoplain("It's not connected to anything.")
+ return
+
+ if(isobserver(user))
+ . += span_notice("Left click to view the server that this ladder is connected to.")
+ return
+
+ . += span_infoplain("This ladder is connected to a server. You can click on it or walk over it to disconnect.")
+
/obj/structure/hololadder/attack_hand(mob/user, list/modifiers)
. = ..()
@@ -24,19 +50,29 @@
disconnect(user)
+
+/obj/structure/hololadder/attack_ghost(mob/dead/observer/ghostie)
+ var/our_server = server_ref?.resolve()
+ if(isnull(our_server))
+ return ..()
+
+ ghostie.abstract_move(get_turf(our_server))
+
+
/// If there's a pilot ref- send the disconnect signal
/obj/structure/hololadder/proc/disconnect(mob/user)
if(isnull(user.mind))
return
if(!HAS_TRAIT(user, TRAIT_TEMPORARY_BODY))
- balloon_alert(user, "no connection detected.")
+ balloon_alert(user, "no connection detected")
return
balloon_alert(user, "disconnecting...")
if(do_after(user, travel_time, src))
SEND_SIGNAL(user, COMSIG_BITRUNNER_LADDER_SEVER)
+
/// Helper for times when you dont have hands (gondola??)
/obj/structure/hololadder/proc/on_enter(datum/source, atom/movable/arrived, turf/old_loc)
SIGNAL_HANDLER
diff --git a/code/modules/bitrunning/objects/loot_box.dm b/code/modules/bitrunning/objects/loot_box.dm
index 39209c33d97f9..200e0b259fbda 100644
--- a/code/modules/bitrunning/objects/loot_box.dm
+++ b/code/modules/bitrunning/objects/loot_box.dm
@@ -8,6 +8,7 @@
icon_locked = "bitrunning+l"
icon_closed = "bitrunning"
icon_broken = "bitrunning+b"
+ icon_open = "bitrunning"
/obj/item/storage/lockbox/bitrunning/encrypted
name = "encrypted curiosity"
diff --git a/code/modules/bitrunning/objects/netpod.dm b/code/modules/bitrunning/objects/netpod.dm
index 98bc96231b30e..1d4e905d6e184 100644
--- a/code/modules/bitrunning/objects/netpod.dm
+++ b/code/modules/bitrunning/objects/netpod.dm
@@ -52,17 +52,25 @@
. += span_infoplain("Netpods must be built within 4 tiles of a server.")
return
- . += span_infoplain("Drag yourself into the pod to engage the link.")
- . += span_infoplain("It has limited resuscitation capabilities. Remaining in the pod can heal some injuries.")
- . += span_infoplain("It has a security system that will alert the occupant if it is tampered with.")
+ if(!isobserver(user))
+ . += span_infoplain("Drag yourself into the pod to engage the link.")
+ . += span_infoplain("It has limited resuscitation capabilities. Remaining in the pod can heal some injuries.")
+ . += span_infoplain("It has a security system that will alert the occupant if it is tampered with.")
if(isnull(occupant))
- . += span_notice("It is currently unoccupied.")
+ . += span_infoplain("It's currently unoccupied.")
+ return
+
+ . += span_infoplain("It's currently occupied by [occupant].")
+
+ if(isobserver(user))
+ . += span_notice("As an observer, you can click this netpod to jump to its avatar.")
return
- . += span_notice("It is currently occupied by [occupant].")
. += span_notice("It can be pried open with a crowbar, but its safety mechanisms will alert the occupant.")
+
+
/obj/machinery/netpod/add_context(atom/source, list/context, obj/item/held_item, mob/user)
. = ..()
@@ -74,7 +82,6 @@
context[SCREENTIP_CONTEXT_LMB] = "Pry Open"
return CONTEXTUAL_SCREENTIP_SET
- return CONTEXTUAL_SCREENTIP_SET
/obj/machinery/netpod/update_icon_state()
if(!is_operational)
diff --git a/code/modules/bitrunning/orders/tech.dm b/code/modules/bitrunning/orders/tech.dm
index a4bf59ce18dec..7e987e4818104 100644
--- a/code/modules/bitrunning/orders/tech.dm
+++ b/code/modules/bitrunning/orders/tech.dm
@@ -34,3 +34,23 @@
/datum/orderable_item/bitrunning_tech/flip_skillchip
item_path = /obj/item/skillchip/matrix_flip
cost_per_order = 2000
+
+/datum/orderable_item/bitrunning_tech/pka_mod
+ item_path = /obj/item/bitrunning_disk/item/pka_mods
+ cost_per_order = 750
+ desc = "This disk contains a program that lets you equip modkits for the proto-kinetic accelerator. Proto-kinetic accelerator not included."
+
+/datum/orderable_item/bitrunning_tech/pka_mod/premium
+ item_path = /obj/item/bitrunning_disk/item/pka_mods/premium
+ cost_per_order = 1800
+ desc = "This disk contains a program that lets you equip stronger modkits for the proto-kinetic accelerator. Proto-kinetic accelerator not included."
+
+/datum/orderable_item/bitrunning_tech/pkc_mod
+ item_path = /obj/item/bitrunning_disk/item/pkc_mods
+ cost_per_order = 750
+ desc = "This disk contains a program that lets you equip trophies for the proto-kinetic crusher. Proto-kinetic crusher no included."
+
+/datum/orderable_item/bitrunning_tech/pkc_mod/premium
+ item_path = /obj/item/bitrunning_disk/item/pkc_mods/premium
+ cost_per_order = 1800
+ desc = "This disk contains a program that lets you equip stronger trophies for the proto-kinetic crusher. Proto-kinetic crusher not included."
diff --git a/code/modules/bitrunning/server/_parent.dm b/code/modules/bitrunning/server/_parent.dm
index 113ed6b212625..8a8d2eed913de 100644
--- a/code/modules/bitrunning/server/_parent.dm
+++ b/code/modules/bitrunning/server/_parent.dm
@@ -19,7 +19,7 @@
/// Prevents multiple user actions. Handled by loading domains and cooldowns
var/is_ready = TRUE
/// Chance multipled by threat to spawn a glitch
- var/glitch_chance = 0.05
+ var/glitch_chance = 0.2
/// Current plugged in users
var/list/datum/weakref/avatar_connection_refs = list()
/// Cached list of mutable mobs in zone for cybercops
@@ -37,11 +37,13 @@
/// Changes how much info is available on the domain
var/scanner_tier = 1
/// Length of time it takes for the server to cool down after resetting. Here to give runners downtime so their faces don't get stuck like that
- var/server_cooldown_time = 3 MINUTES
+ var/server_cooldown_time = 2 MINUTES
/// Applies bonuses to rewards etc
var/servo_bonus = 0
/// Determines the glitches available to spawn, builds with completion
var/threat = 0
+ /// Maximum rate at which a glitch can spawn
+ var/threat_prob_max = 15
/// The turfs we can place a hololadder on.
var/turf/exit_turfs = list()
/// Determines if we broadcast to entertainment monitors or not
@@ -76,15 +78,18 @@
. += span_infoplain("Can be resource intensive to run. Ensure adequate power supply.")
if(capacitor_coefficient < 1)
- . += span_infoplain("Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.")
+ . += span_infoplain("- Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.")
if(servo_bonus > 0.2)
- . += span_infoplain("Its manipulation potential is increasing rewards by [servo_bonus]x.")
- . += span_infoplain("Injury from unsafe ejection reduced [servo_bonus * 100]%.")
+ . += span_infoplain("- Its manipulation potential is increasing rewards by [servo_bonus]x.")
+ . += span_infoplain("- Injury from unsafe ejection reduced [servo_bonus * 100]%.")
if(!is_ready)
. += span_notice("It is currently cooling down. Give it a few moments.")
+ if(isobserver(user) && (obj_flags & EMAGGED))
+ . += span_notice("Ominous warning lights are blinking red. This server has been tampered with.")
+
/obj/machinery/quantum_server/emag_act(mob/user, obj/item/card/emag/emag_card)
. = ..()
@@ -92,7 +97,8 @@
return
obj_flags |= EMAGGED
- glitch_chance = 0.09
+ glitch_chance *= 2
+ threat_prob_max *= 2
add_overlay(mutable_appearance('icons/obj/machines/bitrunning.dmi', "emag_overlay"))
balloon_alert(user, "system jailbroken...")
@@ -116,11 +122,14 @@
/obj/machinery/quantum_server/attackby(obj/item/weapon, mob/user, params)
. = ..()
- if(istype(weapon, /obj/item/bitrunning_debug))
- obj_flags |= EMAGGED
- glitch_chance = 0.5
- capacitor_coefficient = 0.01
- points = 100
+
+ if(!istype(weapon, /obj/item/bitrunning_debug))
+ return
+
+ obj_flags |= EMAGGED
+ glitch_chance = 0.5
+ capacitor_coefficient = 0.1
+ points = 100
/obj/machinery/quantum_server/crowbar_act(mob/living/user, obj/item/crowbar)
. = ..()
diff --git a/code/modules/bitrunning/server/map_handling.dm b/code/modules/bitrunning/server/map_handling.dm
index a55de5dbf9ded..5bfa7813910b6 100644
--- a/code/modules/bitrunning/server/map_handling.dm
+++ b/code/modules/bitrunning/server/map_handling.dm
@@ -55,7 +55,8 @@
is_ready = TRUE
- if(prob(clamp((threat * glitch_chance), 1, 10)))
+ var/spawn_chance = clamp((threat * glitch_chance), 5, threat_prob_max)
+ if(prob(spawn_chance))
setup_glitch()
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 30, vary = TRUE)
diff --git a/code/modules/bitrunning/server/obj_generation.dm b/code/modules/bitrunning/server/obj_generation.dm
index 641d906cc5989..34a870a3426d5 100644
--- a/code/modules/bitrunning/server/obj_generation.dm
+++ b/code/modules/bitrunning/server/obj_generation.dm
@@ -76,9 +76,6 @@
var/obj/item/card/id/outfit_id = avatar.wear_id
if(outfit_id)
- outfit_id.assignment = "Bit Avatar"
- outfit_id.registered_name = avatar.real_name
-
outfit_id.registered_account = new()
outfit_id.registered_account.replaceable = FALSE
@@ -110,7 +107,7 @@
if(isnull(destination))
return
- var/obj/structure/hololadder/wayout = new(destination)
+ var/obj/structure/hololadder/wayout = new(destination, src)
if(isnull(wayout))
return
diff --git a/code/modules/bitrunning/server/threats.dm b/code/modules/bitrunning/server/threats.dm
index 66a96d9971fe4..25a891c03b24b 100644
--- a/code/modules/bitrunning/server/threats.dm
+++ b/code/modules/bitrunning/server/threats.dm
@@ -71,6 +71,8 @@
var/datum/antagonist/bitrunning_glitch/chosen_role = forced_role || get_antagonist_role()
var/role_name = initial(chosen_role.name)
var/mob/chosen_one = SSpolling.poll_ghosts_for_target(
+ question = "A temporary antagonist role is spawning in the virtual domain.\
+ \nYou will return to your previous body on conclusion.",
check_jobban = ROLE_GLITCH,
poll_time = 20 SECONDS,
checked_target = mutation_target,
@@ -92,26 +94,32 @@
return
var/role_name = initial(chosen_role.name)
- var/mob/living/antag_mob
+
+ var/mob/living/new_mob
switch(role_name)
if(ROLE_NETGUARDIAN)
- antag_mob = new /mob/living/basic/netguardian(mutation_target.loc)
+ new_mob = new /mob/living/basic/netguardian(mutation_target.loc)
else // any other humanoid mob
- antag_mob = new /mob/living/carbon/human(mutation_target.loc)
+ new_mob = new /mob/living/carbon/human(mutation_target.loc)
mutation_target.gib(DROP_ALL_REMAINS)
- antag_mob.key = ghost.key
- var/datum/mind/ghost_mind = antag_mob.mind
- ghost_mind.add_antag_datum(chosen_role)
- ghost_mind.special_role = ROLE_GLITCH
- ghost_mind.set_assigned_role(SSjob.GetJobType(/datum/job/bitrunning_glitch))
+ var/datum/mind/ghost_mind = ghost.mind
+ new_mob.key = ghost.key
+
+ if(ghost_mind?.current)
+ new_mob.AddComponent(/datum/component/temporary_body, ghost_mind, ghost_mind.current, TRUE)
- playsound(antag_mob, 'sound/magic/ethereal_exit.ogg', 50, vary = TRUE)
- message_admins("[ADMIN_LOOKUPFLW(antag_mob)] has been made into virtual antagonist by an event.")
- antag_mob.log_message("was spawned as a virtual antagonist by an event.", LOG_GAME)
+ var/datum/mind/antag_mind = new_mob.mind
+ antag_mind.add_antag_datum(chosen_role)
+ antag_mind.special_role = ROLE_GLITCH
+ antag_mind.set_assigned_role(SSjob.GetJobType(/datum/job/bitrunning_glitch))
- add_threats(antag_mob)
+ playsound(new_mob, 'sound/magic/ethereal_exit.ogg', 50, vary = TRUE)
+ message_admins("[ADMIN_LOOKUPFLW(new_mob)] has been made into virtual antagonist by an event.")
+ new_mob.log_message("was spawned as a virtual antagonist by an event.", LOG_GAME)
+
+ add_threats(new_mob)
/// Oh boy - transports the antag station side
/obj/machinery/quantum_server/proc/station_spawn(mob/living/antag, obj/machinery/byteforge/chosen_forge)
@@ -151,6 +159,10 @@
if(istype(antag_datum))
antag_datum.show_in_roundend = TRUE
+ var/datum/component/temp_body = antag.GetComponent(/datum/component/temporary_body)
+ if(temp_body)
+ qdel(temp_body)
+
do_teleport(antag, get_turf(chosen_forge), forced = TRUE, asoundin = 'sound/magic/ethereal_enter.ogg', asoundout = 'sound/magic/ethereal_exit.ogg', channel = TELEPORT_CHANNEL_QUANTUM)
/// Removes any invalid candidates from the list
diff --git a/code/modules/bitrunning/server/util.dm b/code/modules/bitrunning/server/util.dm
index ac3e60b51ba64..6b5352bde6cb1 100644
--- a/code/modules/bitrunning/server/util.dm
+++ b/code/modules/bitrunning/server/util.dm
@@ -66,7 +66,7 @@
/// Removes all blacklisted items from a mob and returns them to base state
/obj/machinery/quantum_server/proc/reset_equipment(mob/living/carbon/human/person)
- for(var/obj/item in person.get_equipped_items(include_pockets = TRUE, include_accessories = TRUE))
+ for(var/obj/item in person.get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES))
qdel(item)
var/datum/antagonist/bitrunning_glitch/antag_datum = locate() in person.mind?.antag_datums
diff --git a/code/modules/bitrunning/spawners.dm b/code/modules/bitrunning/spawners.dm
index 4f8aab322ffac..5fa889ac655fd 100644
--- a/code/modules/bitrunning/spawners.dm
+++ b/code/modules/bitrunning/spawners.dm
@@ -3,13 +3,19 @@
prompt_name = "a virtual domain debug entity"
flavour_text = "You probably shouldn't be seeing this, contact a coder!"
you_are_text = "You are NOT supposed to be here. How did you let this happen?"
+ important_text = "You must eliminate any bitrunners from the domain."
+ temp_body = TRUE
/obj/effect/mob_spawn/ghost_role/human/virtual_domain/Initialize(mapload)
. = ..()
notify_ghosts("The [name] has been created. The virtual world calls for aid!", src, "Virtual Insanity!")
/obj/effect/mob_spawn/ghost_role/human/virtual_domain/special(mob/living/spawned_mob, mob/mob_possessor)
- . = ..()
+ var/datum/mind/ghost_mind = mob_possessor.mind
+ if(ghost_mind?.current) // Preserves any previous bodies before making the switch
+ spawned_mob.AddComponent(/datum/component/temporary_body, ghost_mind, ghost_mind.current, TRUE)
+
+ ..()
spawned_mob.mind.add_antag_datum(/datum/antagonist/domain_ghost_actor)
diff --git a/code/modules/bitrunning/virtual_domain/domains/fredingtonfastingbear.dm b/code/modules/bitrunning/virtual_domain/domains/fredingtonfastingbear.dm
index 841956675ca90..f3c803384c45d 100644
--- a/code/modules/bitrunning/virtual_domain/domains/fredingtonfastingbear.dm
+++ b/code/modules/bitrunning/virtual_domain/domains/fredingtonfastingbear.dm
@@ -2,6 +2,7 @@
name = "Pizza Party"
cost = BITRUNNER_COST_MEDIUM
desc = "A famous pizzeria that got ruined by what it had to offer."
+ completion_loot = list(/obj/item/food/pizzaslice/meat/pizzeria = 1)
difficulty = BITRUNNER_DIFFICULTY_MEDIUM
help_text = "Pick up a flashlight and get going. Your favourite bear has been waiting for you..."
key = "fredingtonfastingbear"
diff --git a/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm b/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm
deleted file mode 100644
index eae9dabc49e4d..0000000000000
--- a/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-/datum/lazy_template/virtual_domain/starfront_saloon
- name = "Starfront Saloon"
- cost = BITRUNNER_COST_MEDIUM
- desc = "Looks like you stepped onto the wrong street, partner. Hope you brought your gunslinging skills."
- difficulty = BITRUNNER_DIFFICULTY_HIGH
- help_text = "One of these rooms has the cache we're looking for. Find it and get out."
- is_modular = TRUE
- key = "starfront_saloon"
- map_name = "starfront_saloon"
- mob_modules = list(
- /datum/modular_mob_segment/syndicate_team,
- /datum/modular_mob_segment/syndicate_elite,
- )
- reward_points = BITRUNNER_REWARD_HIGH
diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm
index 36a3db07f597e..80f5ae1ad27b0 100644
--- a/code/modules/buildmode/buildmode.dm
+++ b/code/modules/buildmode/buildmode.dm
@@ -50,6 +50,8 @@
holder.player_details.post_login_callbacks -= li_cb
li_cb = null
holder = null
+ modebutton = null
+ dirbutton = null
QDEL_NULL(mode)
QDEL_LIST(buttons)
QDEL_LIST(modeswitch_buttons)
diff --git a/code/modules/buildmode/submodes/outfit.dm b/code/modules/buildmode/submodes/outfit.dm
index 5f8e3319cb95d..c3d507bf1e6c7 100644
--- a/code/modules/buildmode/submodes/outfit.dm
+++ b/code/modules/buildmode/submodes/outfit.dm
@@ -32,11 +32,11 @@
to_chat(c, span_warning("Pick an outfit first."))
return
- for (var/item in dollie.get_equipped_items(include_pockets = TRUE))
+ for (var/item in dollie.get_equipped_items(INCLUDE_POCKETS))
qdel(item)
if(dressuptime != "Naked")
dollie.equipOutfit(dressuptime)
if(LAZYACCESS(modifiers, RIGHT_CLICK))
- for (var/item in dollie.get_equipped_items(include_pockets = TRUE))
+ for (var/item in dollie.get_equipped_items(INCLUDE_POCKETS))
qdel(item)
diff --git a/code/modules/cards/singlecard.dm b/code/modules/cards/singlecard.dm
index 0c228fbbb1723..300523254ed7d 100644
--- a/code/modules/cards/singlecard.dm
+++ b/code/modules/cards/singlecard.dm
@@ -95,7 +95,7 @@
context[SCREENTIP_CONTEXT_LMB] = "Combine cards"
return CONTEXTUAL_SCREENTIP_SET
- if(istype(held_item, /obj/item/toy/crayon) || istype(held_item, /obj/item/pen))
+ if(IS_WRITING_UTENSIL(held_item))
context[SCREENTIP_CONTEXT_LMB] = blank ? "Write on card" : "Mark card"
return CONTEXTUAL_SCREENTIP_SET
diff --git a/code/modules/cargo/bounties/bitrunning.dm b/code/modules/cargo/bounties/bitrunning.dm
new file mode 100644
index 0000000000000..301f19f0e412c
--- /dev/null
+++ b/code/modules/cargo/bounties/bitrunning.dm
@@ -0,0 +1,48 @@
+/datum/bounty/item/bitrunning/abductor_plush
+ name = "Abductor Plush"
+ description = "Rear Admiral Raynes' child won't stop bothering him for one of those little plush aliens. You can get one from the Abductor Ship domain."
+ reward = CARGO_CRATE_VALUE * 6
+ required_count = 1
+ wanted_types = list(/obj/item/toy/plush/abductor/agent = TRUE)
+
+/datum/bounty/item/bitrunning/bubblegum
+ name = "Bubblegum Plush"
+ description = "Some of the miners have been talking about the breakroom being too sterile. We need something cute to spruce the place up a bit."
+ reward = CARGO_CRATE_VALUE * 10
+ required_count = 1
+ wanted_types = list(/obj/item/toy/plush/bubbleplush = TRUE)
+
+/datum/bounty/item/bitrunning/honk
+ name = "Bike Horn"
+ description = "Bonbon the Clown lost his bike horn when Rear Admiral Raynes hurled him out an airlock for slipping him. Can you get us a replacement?"
+ reward = CARGO_CRATE_VALUE * 4
+ required_count = 1
+ wanted_types = list(/obj/item/bikehorn = TRUE)
+
+/datum/bounty/item/bitrunning/pizzeria
+ name = "Slice of Pizzeria Pizza"
+ description = "Admiral Chivara keeps talking about wanting a slice of pizza from that old pizza joint that closed down. Y'know, the one with the robots."
+ reward = CARGO_CRATE_VALUE * 8
+ required_count = 1
+ wanted_types = list(/obj/item/food/pizzaslice/meat/pizzeria = TRUE)
+
+/datum/bounty/item/bitrunning/psyker
+ name = "Psyker Headset"
+ description = "We're doing some research on psykers and could use some of their equipment. Can you send us one of their headsets if you find it?"
+ reward = CARGO_CRATE_VALUE * 8
+ required_count = 1
+ wanted_types = list(/obj/item/radio/headset/psyker = TRUE)
+
+/datum/bounty/item/bitrunning/polar
+ name = "Polar Ushanka"
+ description = "A bunch of Russians raided one of our outposts and won't leave. They keep swearing at us and demanding we give them vodka and ushankas. Can you send us one?"
+ reward = CARGO_CRATE_VALUE * 3
+ required_count = 1
+ wanted_types = list(/obj/item/clothing/head/costume/ushanka/polar = TRUE)
+
+/datum/bounty/item/bitrunning/syndicate
+ name = "Syndicate Plush"
+ description = "We're aware of some contraband that's made it aboard some of our stations that depict Syndicate agents as cute, marketable plushies. Please send us one so we can further investigate."
+ reward = CARGO_CRATE_VALUE * 8
+ required_count = 1
+ wanted_types = list(/obj/item/toy/plush/nukeplushie = 1)
diff --git a/code/modules/cargo/bounty.dm b/code/modules/cargo/bounty.dm
index aa527e847625b..38b26e440273a 100644
--- a/code/modules/cargo/bounty.dm
+++ b/code/modules/cargo/bounty.dm
@@ -1,5 +1,5 @@
/// How many jobs have bounties, minus the random civ bounties. PLEASE INCREASE THIS NUMBER AS MORE DEPTS ARE ADDED TO BOUNTIES.
-#define MAXIMUM_BOUNTY_JOBS 13
+#define MAXIMUM_BOUNTY_JOBS 14
/datum/bounty
var/name
@@ -77,6 +77,8 @@
chosen_type = pick(subtypesof(/datum/bounty/item/botany))
if(CIV_JOB_ATMOS)
chosen_type = pick(subtypesof(/datum/bounty/item/atmospherics))
+ if(CIV_JOB_BITRUN)
+ chosen_type = pick(subtypesof(/datum/bounty/item/bitrunning))
bounty_ref = new chosen_type
if(bounty_ref.can_get())
bounty_succeeded = TRUE
diff --git a/code/modules/cargo/exports/xenobio.dm b/code/modules/cargo/exports/xenobio.dm
index fdd8d38aa4fc6..4b83e97567ece 100644
--- a/code/modules/cargo/exports/xenobio.dm
+++ b/code/modules/cargo/exports/xenobio.dm
@@ -23,12 +23,12 @@
/datum/export/slime/charged
cost = CARGO_CRATE_VALUE
unit_name = "\improper EMP-proof slime core"
- export_types = list(/obj/item/stock_parts/cell/emproof/slime)
+ export_types = list(/obj/item/stock_parts/power_store/cell/emproof/slime)
/datum/export/slime/hypercharged
cost = CARGO_CRATE_VALUE * 1.2
unit_name = "hypercharged slime core"
- export_types = list(/obj/item/stock_parts/cell/high/slime_hypercharged)
+ export_types = list(/obj/item/stock_parts/power_store/cell/high/slime_hypercharged)
/datum/export/slime/epic //EPIIIIIIC
cost = CARGO_CRATE_VALUE * 0.44
diff --git a/code/modules/cargo/packs/engineering.dm b/code/modules/cargo/packs/engineering.dm
index 98e1162b5f6a7..771cba47df61d 100644
--- a/code/modules/cargo/packs/engineering.dm
+++ b/code/modules/cargo/packs/engineering.dm
@@ -92,7 +92,7 @@
name = "Power Cell Crate"
desc = "Looking for power overwhelming? Look no further. Contains three high-voltage power cells."
cost = CARGO_CRATE_VALUE * 3
- contains = list(/obj/item/stock_parts/cell/high = 3)
+ contains = list(/obj/item/stock_parts/power_store/cell/high = 3)
crate_name = "power cell crate"
crate_type = /obj/structure/closet/crate/engineering/electrical
diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm
index 94849d61ef527..3f7645559ff7f 100644
--- a/code/modules/cargo/packs/imports.dm
+++ b/code/modules/cargo/packs/imports.dm
@@ -43,7 +43,7 @@
/datum/supply_pack/imports/duct_spider
name = "Duct Spider Crate"
desc = "Awww! Straight from the Australicus sector to your station's ventilation system!"
- cost = CARGO_CRATE_VALUE * 6
+ cost = CARGO_CRATE_VALUE * 4
contains = list(/mob/living/basic/spider/maintenance)
crate_name = "duct spider crate"
crate_type = /obj/structure/closet/crate/critter
@@ -52,7 +52,7 @@
/datum/supply_pack/imports/duct_spider/dangerous
name = "Duct Spider Crate?"
desc = "Wait, is this the right crate? It has a frowny face, what does that mean?"
- cost = CARGO_CRATE_VALUE * 6
+ cost = CARGO_CRATE_VALUE * 4
contains = list(/mob/living/basic/spider/giant/hunter)
contraband = TRUE
diff --git a/code/modules/cargo/packs/livestock.dm b/code/modules/cargo/packs/livestock.dm
index 899216ffb5bef..62008d8be48e0 100644
--- a/code/modules/cargo/packs/livestock.dm
+++ b/code/modules/cargo/packs/livestock.dm
@@ -5,7 +5,7 @@
/datum/supply_pack/critter/parrot
name = "Bird Crate"
desc = "Contains five expert telecommunication birds."
- cost = CARGO_CRATE_VALUE * 8
+ cost = CARGO_CRATE_VALUE * 4
contains = list(/mob/living/basic/parrot)
crate_name = "parrot crate"
@@ -30,7 +30,7 @@
/datum/supply_pack/critter/cat
name = "Cat Crate"
desc = "The cat goes meow! Comes with a collar and a nice cat toy! Cheeseburger not included."//i can't believe im making this reference
- cost = CARGO_CRATE_VALUE * 10 //Cats are worth as much as corgis.
+ cost = CARGO_CRATE_VALUE * 4 //Cats are worth as much as corgis.
contains = list(
/mob/living/basic/pet/cat,
/obj/item/clothing/neck/petcollar,
@@ -51,7 +51,7 @@
/datum/supply_pack/critter/chick
name = "Chicken Crate"
desc = "The chicken goes bwaak!"
- cost = CARGO_CRATE_VALUE * 4
+ cost = CARGO_CRATE_VALUE * 2
contains = list(/mob/living/basic/chick)
crate_name = "chicken crate"
@@ -59,7 +59,7 @@
name = "Corgi Crate"
desc = "Considered the optimal dog breed by thousands of research scientists, this Corgi is but \
one dog from the millions of Ian's noble bloodline. Comes with a cute collar!"
- cost = CARGO_CRATE_VALUE * 10
+ cost = CARGO_CRATE_VALUE * 4
contains = list(/mob/living/basic/pet/dog/corgi,
/obj/item/clothing/neck/petcollar,
)
@@ -76,28 +76,28 @@
/datum/supply_pack/critter/cow
name = "Cow Crate"
desc = "The cow goes moo! Contains one cow."
- cost = CARGO_CRATE_VALUE * 6
+ cost = CARGO_CRATE_VALUE * 3
contains = list(/mob/living/basic/cow)
crate_name = "cow crate"
/datum/supply_pack/critter/sheep
name = "Sheep Crate"
desc = "The sheep goes BAAAA! Contains one sheep."
- cost = CARGO_CRATE_VALUE * 6
+ cost = CARGO_CRATE_VALUE * 3
contains = list(/mob/living/basic/sheep)
crate_name = "sheep crate"
/datum/supply_pack/critter/pig
name = "Pig Crate"
desc = "The pig goes oink! Contains one pig."
- cost = CARGO_CRATE_VALUE * 6
+ cost = CARGO_CRATE_VALUE * 3
contains = list(/mob/living/basic/pig)
crate_name = "pig crate"
/datum/supply_pack/critter/pony
name = "Pony Crate"
desc = "Ponies, yay! (Just the one.)"
- cost = CARGO_CRATE_VALUE * 6
+ cost = CARGO_CRATE_VALUE * 5
contains = list(/mob/living/basic/pony)
crate_name = "pony crate"
@@ -124,7 +124,7 @@
name = "Exotic Corgi Crate"
desc = "Corgi fit for a king, this corgi comes in a unique color to signify their superiority. \
Comes with a cute collar!"
- cost = CARGO_CRATE_VALUE * 11
+ cost = CARGO_CRATE_VALUE * 7
contains = list(/mob/living/basic/pet/dog/corgi/exoticcorgi,
/obj/item/clothing/neck/petcollar,
)
@@ -133,7 +133,7 @@
/datum/supply_pack/critter/fox
name = "Fox Crate"
desc = "The fox goes...? Contains one fox. Comes with a collar!"//what does the fox say
- cost = CARGO_CRATE_VALUE * 10
+ cost = CARGO_CRATE_VALUE * 4
contains = list(
/mob/living/basic/pet/fox,
/obj/item/clothing/neck/petcollar,
@@ -143,14 +143,14 @@
/datum/supply_pack/critter/goat
name = "Goat Crate"
desc = "The goat goes baa! Contains one goat. Warranty void if used as a replacement for Pete."
- cost = CARGO_CRATE_VALUE * 5
+ cost = CARGO_CRATE_VALUE * 3
contains = list(/mob/living/basic/goat)
crate_name = "goat crate"
/datum/supply_pack/critter/rabbit
name = "Rabbit Crate"
desc = "What noise do rabbits even make? Contains one rabbit."
- cost = CARGO_CRATE_VALUE * 4
+ cost = CARGO_CRATE_VALUE * 2
contains = list(/mob/living/basic/rabbit)
crate_name = "rabbit crate"
@@ -158,7 +158,7 @@
name = "Mothroach Crate"
desc = "Put the mothroach on your head and find out what true cuteness looks like. \
Contains one mothroach."
- cost = CARGO_CRATE_VALUE * 4
+ cost = CARGO_CRATE_VALUE * 2
contains = list(/mob/living/basic/mothroach)
crate_name = "mothroach crate"
@@ -173,7 +173,7 @@
/datum/supply_pack/critter/pug
name = "Pug Crate"
desc = "Like a normal dog, but... squished. Contains one pug. Comes with a nice collar!"
- cost = CARGO_CRATE_VALUE * 10
+ cost = CARGO_CRATE_VALUE * 4
contains = list(/mob/living/basic/pet/dog/pug,
/obj/item/clothing/neck/petcollar,
)
@@ -183,7 +183,7 @@
name = "Bull Terrier Crate"
desc = "Like a normal dog, but with a head the shape of an egg. Contains one bull terrier. \
Comes with a nice collar!"
- cost = CARGO_CRATE_VALUE * 10
+ cost = CARGO_CRATE_VALUE * 4
contains = list(/mob/living/basic/pet/dog/bullterrier,
/obj/item/clothing/neck/petcollar,
)
@@ -193,7 +193,7 @@
name = "Snake Crate"
desc = "Tired of these MOTHER FUCKING snakes on this MOTHER FUCKING space station? \
Then this isn't the crate for you. Contains three venomous snakes."
- cost = CARGO_CRATE_VALUE * 6
+ cost = CARGO_CRATE_VALUE * 3
contains = list(/mob/living/basic/snake = 3)
crate_name = "snake crate"
@@ -201,7 +201,7 @@
name = "Amphibian Friends Crate"
desc = "Two disgustingly cute slimey friends. Cytologists love them! \
Contains one frog and one axolotl. Warning: Frog may have hallucinogenic properties."
- cost = CARGO_CRATE_VALUE * 4
+ cost = CARGO_CRATE_VALUE * 2
contains = list(
/mob/living/basic/axolotl,
/mob/living/basic/frog,
@@ -211,7 +211,7 @@
/datum/supply_pack/critter/lizard
name = "Lizard Crate"
desc = "Hisss! Containssss a friendly lizard. Not to be confusssed with a lizardperssson."
- cost = CARGO_CRATE_VALUE * 4
+ cost = CARGO_CRATE_VALUE * 2
contains = list(/mob/living/basic/lizard)
crate_name = "lizard crate"
@@ -219,7 +219,7 @@
name = "Garden Gnome Crate"
desc = "Collect them all for your garden. Comes with three!"
hidden = TRUE
- cost = CARGO_CRATE_VALUE * 20
+ cost = CARGO_CRATE_VALUE * 15
contains = list(/mob/living/basic/garden_gnome)
crate_name = "garden gnome crate"
discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm
index e36f9f84cacf1..05360fe913f0a 100644
--- a/code/modules/cargo/packs/security.dm
+++ b/code/modules/cargo/packs/security.dm
@@ -214,9 +214,12 @@
/datum/supply_pack/security/armory/dragnet
name = "DRAGnet Crate"
desc = "Contains three \"Dynamic Rapid-Apprehension of the Guilty\" netting devices, \
- a recent breakthrough in law enforcement prisoner management technology."
+ a recent breakthrough in law enforcement prisoner management technology. Includes a DRAGnet beacon."
cost = CARGO_CRATE_VALUE * 5
- contains = list(/obj/item/gun/energy/e_gun/dragnet = 3)
+ contains = list(
+ /obj/item/gun/energy/e_gun/dragnet = 3,
+ /obj/item/dragnet_beacon = 1
+ )
crate_name = "\improper DRAGnet crate"
/datum/supply_pack/security/armory/energy
diff --git a/code/modules/cargo/supplypod_beacon.dm b/code/modules/cargo/supplypod_beacon.dm
index 8f1166002def8..2d9a618bb414e 100644
--- a/code/modules/cargo/supplypod_beacon.dm
+++ b/code/modules/cargo/supplypod_beacon.dm
@@ -103,7 +103,7 @@
return CLICK_ACTION_SUCCESS
/obj/item/supplypod_beacon/attackby(obj/item/W, mob/user)
- if(!istype(W, /obj/item/pen)) //give a tag that is visible from the linked express console
+ if(IS_WRITING_UTENSIL(W)) //give a tag that is visible from the linked express console
return ..()
var/new_beacon_name = tgui_input_text(user, "What would you like the tag to be?", "Beacon Tag", max_length = MAX_NAME_LEN)
if(isnull(new_beacon_name))
diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm
index 97924643604c5..2b60b3bdbb2e4 100644
--- a/code/modules/client/client_defines.dm
+++ b/code/modules/client/client_defines.dm
@@ -268,3 +268,6 @@
/// Loot panel for the client
var/datum/lootpanel/loot_panel
+
+ ///Which ambient sound this client is currently being provided.
+ var/current_ambient_sound
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 37766aea223eb..66fde8c2f1a72 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -536,7 +536,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them.
to_chat(src, span_warning("Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you."))
- update_ambience_pref()
+ update_ambience_pref(prefs.read_preference(/datum/preference/toggle/sound_ambience))
check_ip_intel()
//This is down here because of the browse() calls in tooltip/New()
@@ -1128,8 +1128,8 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
winset(src, "default.Shift", "is-disabled=true")
winset(src, "default.ShiftUp", "is-disabled=true")
-/client/proc/update_ambience_pref()
- if(prefs.read_preference(/datum/preference/toggle/sound_ambience))
+/client/proc/update_ambience_pref(value)
+ if(value)
if(SSambience.ambience_listening_clients[src] > world.time)
return // If already properly set we don't want to reset the timer.
SSambience.ambience_listening_clients[src] = world.time + 10 SECONDS //Just wait 10 seconds before the next one aight mate? cheers.
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 8eb0def90bfa3..7cd3965718e60 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -211,18 +211,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if ("change_slot")
// Save existing character
save_character()
-
- // SAFETY: `load_character` performs sanitization the slot number
- if (!load_character(params["slot"]))
- tainted_character_profiles = TRUE
- randomise_appearance_prefs()
- save_character()
-
- for (var/datum/preference_middleware/preference_middleware as anything in middleware)
- preference_middleware.on_new_character(usr)
-
- character_preview_view.update_body()
-
+ // SAFETY: `switch_to_slot` performs sanitization on the slot number
+ switch_to_slot(params["slot"])
+ return TRUE
+ if ("remove_current_slot")
+ remove_current_slot()
return TRUE
if ("rotate")
character_preview_view.setDir(turn(character_preview_view.dir, -90))
diff --git a/code/modules/client/preferences/_preference.dm b/code/modules/client/preferences/_preference.dm
index 6c62ed1d054c2..485276b4ade2a 100644
--- a/code/modules/client/preferences/_preference.dm
+++ b/code/modules/client/preferences/_preference.dm
@@ -112,6 +112,10 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
/// will show the feature as selectable.
var/relevant_mutant_bodypart = null
+ /// If the selected species has this in its /datum/species/body_markings,
+ /// will show the feature as selectable.
+ var/relevant_body_markings = null
+
/// If the selected species has this in its /datum/species/inherent_traits,
/// will show the feature as selectable.
var/relevant_inherent_trait = null
@@ -333,6 +337,7 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
|| !isnull(relevant_inherent_trait) \
|| !isnull(relevant_external_organ) \
|| !isnull(relevant_head_flag) \
+ || !isnull(relevant_body_markings) \
)
var/species_type = preferences.read_preference(/datum/preference/choiced/species)
diff --git a/code/modules/client/preferences/names.dm b/code/modules/client/preferences/names.dm
index 9afc8da18c1aa..8456eb9a62709 100644
--- a/code/modules/client/preferences/names.dm
+++ b/code/modules/client/preferences/names.dm
@@ -174,3 +174,15 @@
return TRUE
return FALSE
+
+
+/// The name to use while bitrunning
+/datum/preference/name/hacker_alias
+ explanation = "Hacker alias"
+ group = "bitrunning"
+ savefile_key = "hacker_alias"
+ allow_numbers = TRUE
+ relevant_job = /datum/job/bitrunner
+
+/datum/preference/name/hacker_alias/create_default_value()
+ return pick(GLOB.hacker_aliases)
diff --git a/code/modules/client/preferences/sounds.dm b/code/modules/client/preferences/sounds.dm
index f56430b53638a..81263de677bc9 100644
--- a/code/modules/client/preferences/sounds.dm
+++ b/code/modules/client/preferences/sounds.dm
@@ -4,6 +4,9 @@
savefile_key = "sound_ambience"
savefile_identifier = PREFERENCE_PLAYER
+/datum/preference/toggle/sound_ambience/apply_to_client(client/client, value)
+ client.update_ambience_pref(value)
+
/// Controls hearing announcement sounds
/datum/preference/toggle/sound_announcements
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
@@ -100,6 +103,9 @@
savefile_key = "sound_ship_ambience"
savefile_identifier = PREFERENCE_PLAYER
+/datum/preference/toggle/sound_ship_ambience/apply_to_client_updated(client/client, value)
+ client.mob.refresh_looping_ambience()
+
/// Controls hearing elevator music
/datum/preference/toggle/sound_elevator
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
diff --git a/code/modules/client/preferences/species_features/lizard.dm b/code/modules/client/preferences/species_features/lizard.dm
index bee57300ec4a4..38c83690b3b5e 100644
--- a/code/modules/client/preferences/species_features/lizard.dm
+++ b/code/modules/client/preferences/species_features/lizard.dm
@@ -29,20 +29,20 @@
category = PREFERENCE_CATEGORY_FEATURES
main_feature_name = "Body markings"
should_generate_icons = TRUE
- relevant_mutant_bodypart = "body_markings"
+ relevant_body_markings = /datum/bodypart_overlay/simple/body_marking/lizard
/datum/preference/choiced/lizard_body_markings/init_possible_values()
- return assoc_to_keys_features(SSaccessories.body_markings_list)
+ return assoc_to_keys_features(SSaccessories.lizard_markings_list)
/datum/preference/choiced/lizard_body_markings/icon_for(value)
- var/datum/sprite_accessory/sprite_accessory = SSaccessories.body_markings_list[value]
+ var/datum/sprite_accessory/sprite_accessory = SSaccessories.lizard_markings_list[value]
var/icon/final_icon = icon('icons/mob/human/species/lizard/bodyparts.dmi', "lizard_chest_m")
if (sprite_accessory.icon_state != "none")
var/icon/body_markings_icon = icon(
'icons/mob/human/species/lizard/lizard_misc.dmi',
- "m_body_markings_[sprite_accessory.icon_state]_ADJ",
+ "male_[sprite_accessory.icon_state]_chest",
)
final_icon.Blend(body_markings_icon, ICON_OVERLAY)
@@ -55,7 +55,7 @@
return final_icon
/datum/preference/choiced/lizard_body_markings/apply_to_human(mob/living/carbon/human/target, value)
- target.dna.features["body_markings"] = value
+ target.dna.features["lizard_markings"] = value
/datum/preference/choiced/lizard_frills
savefile_key = "feature_lizard_frills"
diff --git a/code/modules/client/preferences/species_features/moth.dm b/code/modules/client/preferences/species_features/moth.dm
index 745e6fb917b8f..f697d857d4fc4 100644
--- a/code/modules/client/preferences/species_features/moth.dm
+++ b/code/modules/client/preferences/species_features/moth.dm
@@ -34,7 +34,7 @@
category = PREFERENCE_CATEGORY_FEATURES
main_feature_name = "Body markings"
should_generate_icons = TRUE
- relevant_mutant_bodypart = "moth_markings"
+ relevant_body_markings = /datum/bodypart_overlay/simple/body_marking/moth
/datum/preference/choiced/moth_markings/init_possible_values()
return assoc_to_keys_features(SSaccessories.moth_markings_list)
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index aa6b1840c50b2..9a6448e2e6d54 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -368,6 +368,43 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
return TRUE
+/datum/preferences/proc/switch_to_slot(new_slot)
+ // SAFETY: `load_character` performs sanitization on the slot number
+ if (!load_character(new_slot))
+ tainted_character_profiles = TRUE
+ randomise_appearance_prefs()
+ save_character()
+
+ for (var/datum/preference_middleware/preference_middleware as anything in middleware)
+ preference_middleware.on_new_character(usr)
+
+ character_preview_view.update_body()
+
+/datum/preferences/proc/remove_current_slot()
+ PRIVATE_PROC(TRUE)
+
+ var/closest_slot
+ for (var/other_slot in default_slot - 1 to 1 step -1)
+ var/save_data = savefile.get_entry("character[other_slot]")
+ if (!isnull(save_data))
+ closest_slot = other_slot
+ break
+
+ if (isnull(closest_slot))
+ for (var/other_slot in default_slot + 1 to max_save_slots)
+ var/save_data = savefile.get_entry("character[other_slot]")
+ if (!isnull(save_data))
+ closest_slot = other_slot
+ break
+
+ if (isnull(closest_slot))
+ stack_trace("remove_current_slot() being called when there are no slots to go to, the client should prevent this")
+ return
+
+ savefile.remove_entry("character[default_slot]")
+ tainted_character_profiles = TRUE
+ switch_to_slot(closest_slot)
+
/datum/preferences/proc/sanitize_be_special(list/input_be_special)
var/list/output = list()
diff --git a/code/modules/clothing/chameleon/chameleon_action_subtypes.dm b/code/modules/clothing/chameleon/chameleon_action_subtypes.dm
index 275b2c6e0fc2a..bd15bb908f227 100644
--- a/code/modules/clothing/chameleon/chameleon_action_subtypes.dm
+++ b/code/modules/clothing/chameleon/chameleon_action_subtypes.dm
@@ -64,6 +64,11 @@
. = ..()
chameleon_blacklist |= typecacheof(/obj/item/clothing/mask/changeling, only_root_path = TRUE)
+/datum/action/item_action/chameleon/change/mask/initialize_disguises()
+ . = ..()
+ add_chameleon_items(/obj/item/cigarette)
+ add_chameleon_items(/obj/item/vape)
+
/datum/action/item_action/chameleon/change/hat
chameleon_type = /obj/item/clothing/head
chameleon_name = "Hat"
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index cd32002d0434b..98184b3fce25e 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -360,7 +360,7 @@
. = ..()
if(href_list["list_armor"])
- var/list/readout = list("PROTECTION CLASSES")
+ var/list/readout = list()
var/datum/armor/armor = get_armor()
var/added_damage_header = FALSE
@@ -369,9 +369,9 @@
if(!rating)
continue
if(!added_damage_header)
- readout += "\nARMOR (I-X)"
+ readout += "ARMOR (I-X)"
added_damage_header = TRUE
- readout += "\n[armor_to_protection_name(damage_key)] [armor_to_protection_class(rating)]"
+ readout += "[armor_to_protection_name(damage_key)] [armor_to_protection_class(rating)]"
var/added_durability_header = FALSE
for(var/durability_key in ARMOR_LIST_DURABILITY())
@@ -379,9 +379,9 @@
if(!rating)
continue
if(!added_durability_header)
- readout += "\nDURABILITY (I-X)"
+ readout += "DURABILITY (I-X)"
added_damage_header = TRUE
- readout += "\n[armor_to_protection_name(durability_key)] [armor_to_protection_class(rating)]"
+ readout += "[armor_to_protection_name(durability_key)] [armor_to_protection_class(rating)]"
if(flags_cover & HEADCOVERSMOUTH || flags_cover & PEPPERPROOF)
var/list/things_blocked = list()
@@ -390,12 +390,15 @@
if(flags_cover & PEPPERPROOF)
things_blocked += "pepperspray"
if(length(things_blocked))
- readout += "\nCOVERAGE"
- readout += "\nIt will block [english_list(things_blocked)]."
+ readout += "COVERAGE"
+ readout += "It will block [english_list(things_blocked)]."
- readout += ""
- to_chat(usr, "[readout.Join()]")
+ if(!length(readout))
+ readout += "No armor or durability information available."
+
+ var/formatted_readout = span_notice("PROTECTION CLASSES
[jointext(readout, "\n")]")
+ to_chat(usr, examine_block(formatted_readout))
/**
* Rounds armor_value down to the nearest 10, divides it by 10 and then converts it to Roman numerals.
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index cd1f6a2798ba2..5ea7d62313bd4 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -701,7 +701,7 @@
else
var/obj/item/organ/internal/tongue/has_tongue = human_examined.get_organ_slot(ORGAN_SLOT_TONGUE)
var/pill_count = 0
- for(var/datum/action/item_action/hands_free/activate_pill/pill in human_examined.actions)
+ for(var/datum/action/item_action/activate_pill/pill in human_examined.actions)
pill_count++
if(pill_count >= 1 && has_tongue)
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 807e795568821..36fe591a63edb 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -27,7 +27,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
///Does the mask have an FOV?
var/has_fov = TRUE
///Cigarette in the mask
- var/obj/item/clothing/mask/cigarette/cig
+ var/obj/item/cigarette/cig
voice_filter = "lowpass=f=750,volume=2"
/datum/armor/mask_gas
@@ -84,7 +84,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
/obj/item/clothing/mask/gas/attackby(obj/item/tool, mob/user)
var/valid_wearer = ismob(loc)
var/mob/wearer = loc
- if(istype(tool, /obj/item/clothing/mask/cigarette))
+ if(istype(tool, /obj/item/cigarette))
if(flags_cover & MASKCOVERSMOUTH)
balloon_alert(user, "mask's mouth is covered!")
return ..()
@@ -221,6 +221,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
visor_flags_cover = MASKCOVERSEYES
visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
resistance_flags = FIRE_PROOF
+ clothing_flags = parent_type::clothing_flags | INTERNALS_ADJUST_EXEMPT
/datum/armor/gas_welding
melee = 10
diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm
index a22691495ccc1..422cb34fa090d 100644
--- a/code/modules/clothing/outfits/standard.dm
+++ b/code/modules/clothing/outfits/standard.dm
@@ -11,7 +11,7 @@
glasses = /obj/item/clothing/glasses/thermal/eyepatch
gloves = /obj/item/clothing/gloves/tackler/combat/insulated
head = /obj/item/clothing/head/helmet/space/beret
- mask = /obj/item/clothing/mask/cigarette/cigar/havana
+ mask = /obj/item/cigarette/cigar/havana
shoes = /obj/item/clothing/shoes/combat/swat
r_pocket = /obj/item/lighter
@@ -185,7 +185,7 @@
l_hand = /obj/item/fireaxe
/datum/outfit/psycho/post_equip(mob/living/carbon/human/H)
- for(var/obj/item/carried_item in H.get_equipped_items(include_pockets = TRUE, include_accessories = TRUE))
+ for(var/obj/item/carried_item in H.get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES))
carried_item.add_mob_blood(H)//Oh yes, there will be blood...
for(var/obj/item/I in H.held_items)
I.add_mob_blood(H)
@@ -245,7 +245,7 @@
glasses = /obj/item/clothing/glasses/sunglasses
gloves = /obj/item/clothing/gloves/tackler/combat/insulated
head = /obj/item/clothing/head/hats/centhat
- mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
+ mask = /obj/item/cigarette/cigar/cohiba
shoes = /obj/item/clothing/shoes/combat/swat
l_pocket = /obj/item/ammo_box/a357
r_pocket = /obj/item/lighter
diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm
index a30156abe1f43..703000a1f9133 100644
--- a/code/modules/clothing/spacesuits/_spacesuits.dm
+++ b/code/modules/clothing/spacesuits/_spacesuits.dm
@@ -62,7 +62,7 @@
/// The default temperature setting
var/temperature_setting = BODYTEMP_NORMAL
/// If this is a path, this gets created as an object in Initialize.
- var/obj/item/stock_parts/cell/cell = /obj/item/stock_parts/cell/high
+ var/obj/item/stock_parts/power_store/cell = /obj/item/stock_parts/power_store/cell/high
/// Status of the cell cover on the suit
var/cell_cover_open = FALSE
/// Status of the thermal regulator
@@ -185,7 +185,7 @@
// object handling for accessing features of the suit
/obj/item/clothing/suit/space/attackby(obj/item/I, mob/user, params)
- if(!cell_cover_open || !istype(I, /obj/item/stock_parts/cell))
+ if(!cell_cover_open || !istype(I, /obj/item/stock_parts/power_store/cell))
return ..()
if(cell)
to_chat(user, span_warning("[src] already has a cell installed."))
diff --git a/code/modules/clothing/spacesuits/bountyhunter.dm b/code/modules/clothing/spacesuits/bountyhunter.dm
index 9218deb5633fc..cb8498dac14ca 100644
--- a/code/modules/clothing/spacesuits/bountyhunter.dm
+++ b/code/modules/clothing/spacesuits/bountyhunter.dm
@@ -7,7 +7,7 @@
armor_type = /datum/armor/space_hunter
strip_delay = 130
resistance_flags = FIRE_PROOF | ACID_PROOF
- cell = /obj/item/stock_parts/cell/hyper
+ cell = /obj/item/stock_parts/power_store/cell/hyper
/datum/armor/space_hunter
melee = 60
diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm
index cbacf064052db..67702582ff857 100644
--- a/code/modules/clothing/spacesuits/syndi.dm
+++ b/code/modules/clothing/spacesuits/syndi.dm
@@ -40,7 +40,7 @@ GLOBAL_LIST_INIT(syndicate_space_suits_to_helmets,list(
w_class = WEIGHT_CLASS_NORMAL
allowed = list(/obj/item/gun, /obj/item/melee/baton, /obj/item/melee/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
armor_type = /datum/armor/space_syndicate
- cell = /obj/item/stock_parts/cell/hyper
+ cell = /obj/item/stock_parts/power_store/cell/hyper
var/helmet_type = /obj/item/clothing/head/helmet/space/syndicate
//Green syndicate space suit
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index bc091aaeb6651..f333ec53917a9 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -61,7 +61,7 @@
body_parts_covered = CHEST|GROIN|ARMS
allowed = list(
/obj/item/assembly/flash/handheld,
- /obj/item/clothing/mask/cigarette,
+ /obj/item/cigarette,
/obj/item/disk,
/obj/item/lighter,
/obj/item/melee,
diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm
index 155e4dbe42fb6..c1889cc77383d 100644
--- a/code/modules/clothing/suits/reactive_armour.dm
+++ b/code/modules/clothing/suits/reactive_armour.dm
@@ -5,8 +5,8 @@
icon = 'icons/obj/clothing/suits/armor.dmi'
w_class = WEIGHT_CLASS_BULKY
-/obj/item/reactive_armor_shell/attackby(obj/item/weapon, mob/user, params)
- ..()
+/obj/item/reactive_armor_shell/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ . = ..()
var/static/list/anomaly_armour_types = list(
/obj/effect/anomaly/grav = /obj/item/clothing/suit/armor/reactive/repulse,
/obj/effect/anomaly/flux = /obj/item/clothing/suit/armor/reactive/tesla,
@@ -17,15 +17,16 @@
/obj/effect/anomaly/ectoplasm = /obj/item/clothing/suit/armor/reactive/ectoplasm,
)
- if(istype(weapon, /obj/item/assembly/signaler/anomaly))
- var/obj/item/assembly/signaler/anomaly/anomaly = weapon
- var/armour_path = anomaly_armour_types[anomaly.anomaly_type]
+ if(istype(tool, /obj/item/assembly/signaler/anomaly))
+ var/obj/item/assembly/signaler/anomaly/anomaly = tool
+ var/armour_path = is_path_in_list(anomaly.anomaly_type, anomaly_armour_types, TRUE)
if(!armour_path)
armour_path = /obj/item/clothing/suit/armor/reactive/stealth //Lets not cheat the player if an anomaly type doesnt have its own armour coded
to_chat(user, span_notice("You insert [anomaly] into the chest plate, and the armour gently hums to life."))
new armour_path(get_turf(src))
qdel(src)
qdel(anomaly)
+ return ITEM_INTERACT_SUCCESS
//Reactive armor
/obj/item/clothing/suit/armor/reactive
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index c04b68ab553a8..1541c66a333b6 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -57,6 +57,7 @@
/obj/item/clothing/suit/utility/fire/firefighter
icon_state = "firesuit"
inhand_icon_state = "firefighter"
+ flags_inv = HIDESHOES|HIDEJUMPSUIT
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS
diff --git a/code/modules/deathmatch/deathmatch_loadouts.dm b/code/modules/deathmatch/deathmatch_loadouts.dm
index 9e86bf9befbb7..a24663b3ba439 100644
--- a/code/modules/deathmatch/deathmatch_loadouts.dm
+++ b/code/modules/deathmatch/deathmatch_loadouts.dm
@@ -371,7 +371,7 @@
display_name = "Cowboy"
desc = "Yeehaw partner"
- r_hand = /obj/item/clothing/mask/cigarette/cigar
+ r_hand = /obj/item/cigarette/cigar
l_hand = /obj/item/melee/curator_whip
l_pocket = /obj/item/lighter
accessory = /obj/item/clothing/accessory/vest_sheriff
@@ -405,7 +405,7 @@
suit = /obj/item/clothing/suit/wizrobe/red
head = /obj/item/clothing/head/wizard/red
- mask = /obj/item/clothing/mask/cigarette
+ mask = /obj/item/cigarette
granted_spells = list(
/datum/action/cooldown/spell/pointed/projectile/fireball,
/datum/action/cooldown/spell/smoke,
@@ -653,7 +653,7 @@
shoes = /obj/item/clothing/shoes/sneakers/black
gloves = /obj/item/clothing/gloves/cut
l_pocket = /obj/item/reagent_containers/hypospray/medipen/methamphetamine
- r_pocket = /obj/item/stock_parts/cell/high
+ r_pocket = /obj/item/stock_parts/power_store/cell/high
belt = /obj/item/storage/belt/utility/full
/datum/outfit/deathmatch_loadout/abductor
diff --git a/code/modules/escape_menu/home_page.dm b/code/modules/escape_menu/home_page.dm
index a05aaf351e0df..3fa89ff5d0589 100644
--- a/code/modules/escape_menu/home_page.dm
+++ b/code/modules/escape_menu/home_page.dm
@@ -15,9 +15,20 @@
null,
/* hud_owner = */ null,
src,
- "Settings",
+ "Character",
/* offset = */ 2,
- CALLBACK(src, PROC_REF(home_open_settings)),
+ CALLBACK(src, PROC_REF(home_open_character_settings)),
+ )
+ )
+
+ page_holder.give_screen_object(
+ new /atom/movable/screen/escape_menu/home_button(
+ null,
+ /* hud_owner = */ null,
+ src,
+ "Settings",
+ /* offset = */ 3,
+ CALLBACK(src, PROC_REF(home_open_game_settings)),
)
)
@@ -27,7 +38,7 @@
/* hud_owner = */ src,
src,
"Admin Help",
- /* offset = */ 3,
+ /* offset = */ 4,
)
)
@@ -37,7 +48,7 @@
/* hud_owner = */ src,
src,
"Leave Body",
- /* offset = */ 4,
+ /* offset = */ 5,
CALLBACK(src, PROC_REF(open_leave_body)),
)
)
@@ -45,7 +56,15 @@
/datum/escape_menu/proc/home_resume()
qdel(src)
-/datum/escape_menu/proc/home_open_settings()
+/datum/escape_menu/proc/home_open_character_settings()
+ client?.prefs.current_window = PREFERENCE_TAB_CHARACTER_PREFERENCES
+ client?.prefs.update_static_data(client?.mob)
+ client?.prefs.ui_interact(client?.mob)
+ qdel(src)
+
+/datum/escape_menu/proc/home_open_game_settings()
+ client?.prefs.current_window = PREFERENCE_TAB_GAME_PREFERENCES
+ client?.prefs.update_static_data(client?.mob)
client?.prefs.ui_interact(client?.mob)
qdel(src)
diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm
index 683b36304a367..ab305bbff99bf 100644
--- a/code/modules/events/wizard/curseditems.dm
+++ b/code/modules/events/wizard/curseditems.dm
@@ -38,7 +38,7 @@
switch(item_set)
if(BIG_FAT_DOOBIE)
- loadout += /obj/item/clothing/mask/cigarette/rollie/trippy
+ loadout += /obj/item/cigarette/rollie/trippy
ruins_spaceworthiness = TRUE
if(BOXING)
loadout += /obj/item/clothing/mask/luchador
diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm
index 3434fb6fdb1ed..a025d90b44f4e 100644
--- a/code/modules/experisci/experiment/experiments.dm
+++ b/code/modules/experisci/experiment/experiments.dm
@@ -118,6 +118,14 @@
experiment_proper = TRUE
required_gas = /datum/gas/nitrous_oxide
+/datum/experiment/ordnance/gaseous/plasma
+ name = "Plasma Gas Shells"
+ description = "The delivery of Plasma gas into an area of operation might prove useful. Pack the specified gas into a tank and burst it using a Tank Compressor. Publish the data in a paper."
+ gain = list(10,40)
+ target_amount = list(200,600)
+ experiment_proper = TRUE
+ required_gas = /datum/gas/plasma
+
/datum/experiment/ordnance/gaseous/bz
name = "BZ Gas Shells"
description = "The delivery of BZ gas into an area of operation might prove useful. Pack the specified gas into a tank and burst it using a Tank Compressor. Publish the data in a paper."
@@ -297,7 +305,7 @@
/obj/machinery/chem_dispenser/drinks/beer = 1,
/obj/machinery/power/smes = 2
)
- required_stock_part = /obj/item/stock_parts/cell/hyper
+ required_stock_part = /obj/item/stock_parts/power_store/cell/hyper
/datum/experiment/scanning/points/machinery_pinpoint_scan/tier3_microlaser
name = "Ultra-high-power Micro-lasers Calibration"
@@ -315,7 +323,7 @@
required_stock_part = /obj/item/stock_parts/micro_laser/ultra
/datum/experiment/scanning/random/mecha_damage_scan
- name = "Exosuit Materials 1: Stress Failure Test"
+ name = "Exosuit Materials: Stress Failure Test"
description = "Your exosuit fabricators allow for rapid production on a small scale, but the structural integrity of created parts is inferior to more traditional means."
exp_tag = "Scan"
possible_types = list(/obj/vehicle/sealed/mecha)
@@ -324,10 +332,10 @@
var/damage_percent
/datum/experiment/scanning/random/mecha_equipped_scan
- name = "Exosuit Materials 2: Load Strain Test"
+ name = "Exosuit Materials: Load Strain Test"
description = "Exosuit equipment places unique strain upon the structure of the vehicle. Scan exosuits you have assembled from your exosuit fabricator and fully equipped to accelerate our structural stress simulations."
possible_types = list(/obj/vehicle/sealed/mecha)
- total_requirement = 2
+ total_requirement = 1
/// Scan for organs you didn't start the round with
/datum/experiment/scanning/people/novel_organs
@@ -368,3 +376,85 @@
continue
return TRUE
return FALSE
+
+/// Scan for cybernetic organs
+/datum/experiment/scanning/people/augmented_organs
+ name = "Human Field Research: Augmented Organs"
+ description = "We need to gather data on how cybernetic vital organs integrate with human biology. Conduct a scan on a human with these implants to help us understand their compatibility"
+ performance_hint = "Perform an organ manipulation surgery to replace one of the vital organs with a cybernetic variant."
+ required_traits_desc = "augmented vital organs"
+ required_count = 1
+
+/datum/experiment/scanning/people/augmented_organs/is_valid_scan_target(mob/living/carbon/human/check)
+ . = ..()
+ if (!.)
+ return
+ var/static/list/vital_organ_slots = list(
+ ORGAN_SLOT_HEART,
+ ORGAN_SLOT_LUNGS,
+ ORGAN_SLOT_EYES,
+ ORGAN_SLOT_EARS,
+ ORGAN_SLOT_LIVER,
+ ORGAN_SLOT_STOMACH,
+ )
+
+ for (var/obj/item/organ/organ as anything in check.organs)
+ if (IS_ORGANIC_ORGAN(organ))
+ continue
+ if (!(organ.slot in vital_organ_slots))
+ continue
+ return TRUE
+ return FALSE
+
+/// Scan for skillchips
+/datum/experiment/scanning/people/skillchip
+ name = "Human Field Research: Skill Chip Implants"
+ description = "Before sticking programmed circuits into human brain, we need to know how it handles simple ones. Scan a live person with a skill chip implant in their brain."
+ performance_hint = "Perform a skill chip implantation with a skill station."
+ required_traits_desc = "skill chip implant"
+
+/datum/experiment/scanning/people/skillchip/is_valid_scan_target(mob/living/carbon/human/check, datum/component/experiment_handler/experiment_handler)
+ . = ..()
+ if (!.)
+ return
+ var/obj/item/organ/internal/brain/scanned_brain = check.get_organ_slot(ORGAN_SLOT_BRAIN)
+ if (isnull(scanned_brain))
+ experiment_handler.announce_message("Subject is brainless!")
+ return FALSE
+ if (scanned_brain.get_used_skillchip_slots() == 0)
+ experiment_handler.announce_message("No skill chips found!")
+ return FALSE
+ return TRUE
+
+/datum/experiment/scanning/reagent/cryostylane
+ name = "Pure Cryostylane Scan"
+ description = "It appears that the Cryostylane reagent can potentially halt all physiological processes in the human body. Produce Cryostylane with at least 99% purity and scan the beaker."
+ required_reagent = /datum/reagent/cryostylane
+ min_purity = 0.99
+
+/datum/experiment/scanning/points/bluespace_crystal
+ name = "Bluespace Crystal Sampling"
+ description = "Investigate the properties of bluespace crystals by scanning either an artificial or naturally occurring variant. This will help us deepen our understanding of bluespace phenomena."
+ required_points = 1
+ required_atoms = list(
+ /obj/item/stack/ore/bluespace_crystal = 1,
+ /obj/item/stack/sheet/bluespace_crystal = 1
+ )
+
+/datum/experiment/scanning/points/machinery_tiered_scan/tier2_any
+ name = "Upgraded Stock Parts Benchmark"
+ description = "Our newly-designed machinery components require practical application tests for hints at possible further advancements, as well as a general confirmation that we didn't actually design worse parts somehow. Scan any machinery with Upgraded Parts and report the results."
+ required_points = 4
+ required_atoms = list(
+ /obj/machinery = 1
+ )
+ required_tier = 2
+
+/datum/experiment/scanning/points/machinery_tiered_scan/tier3_any
+ name = "Advanced Stock Parts Benchmark"
+ description = "Our newly-designed machinery components require practical application tests for hints at possible further advancements, as well as a general confirmation that we didn't actually design worse parts somehow. Scan any machinery with Advanced Parts and report the results."
+ required_points = 4
+ required_atoms = list(
+ /obj/machinery = 1
+ )
+ required_tier = 3
diff --git a/code/modules/experisci/experiment/types/scanning_people.dm b/code/modules/experisci/experiment/types/scanning_people.dm
index 379d7e9089524..c3879e2a8d32c 100644
--- a/code/modules/experisci/experiment/types/scanning_people.dm
+++ b/code/modules/experisci/experiment/types/scanning_people.dm
@@ -18,15 +18,15 @@
return FALSE
if(!ishuman(target))
return FALSE
- return is_valid_scan_target(target)
+ return is_valid_scan_target(target, experiment_handler)
/// Checks that the passed mob is valid human to scan
-/datum/experiment/scanning/people/proc/is_valid_scan_target(mob/living/carbon/human/check)
+/datum/experiment/scanning/people/proc/is_valid_scan_target(mob/living/carbon/human/check, datum/component/experiment_handler/experiment_handler)
SHOULD_CALL_PARENT(TRUE)
if(!mind_required || !isnull(check.mind))
return TRUE
if(isliving(usr))
- check.balloon_alert(usr, "subject is mindless!")
+ experiment_handler.announce_message("Subject is mindless!")
return FALSE
/datum/experiment/scanning/people/serialize_progress_stage(atom/target, list/seen_instances)
diff --git a/code/modules/experisci/experiment/types/scanning_reagent.dm b/code/modules/experisci/experiment/types/scanning_reagent.dm
new file mode 100644
index 0000000000000..1a39e2941efeb
--- /dev/null
+++ b/code/modules/experisci/experiment/types/scanning_reagent.dm
@@ -0,0 +1,35 @@
+/// An experiment where you scan a container with a specified reagent of certain purity
+/datum/experiment/scanning/reagent
+ exp_tag = "Reagent Scan"
+ allowed_experimentors = list(/obj/item/experi_scanner, /obj/item/scanner_wand)
+ required_atoms = list(/obj/item/reagent_containers = 1)
+ /// The reagent required to present in the scanned container
+ var/datum/reagent/required_reagent = /datum/reagent/water
+ /// The minimum required purity of required_reagent
+ var/min_purity = 0
+
+/datum/experiment/scanning/reagent/final_contributing_index_checks(datum/component/experiment_handler/experiment_handler, atom/target, typepath)
+ . = ..()
+ if(!.)
+ return FALSE
+ if(!is_reagent_container(target))
+ return FALSE
+ return is_valid_scan_target(experiment_handler, target)
+
+/datum/experiment/scanning/reagent/proc/is_valid_scan_target(datum/component/experiment_handler/experiment_handler, obj/item/reagent_containers/container)
+ SHOULD_CALL_PARENT(TRUE)
+ if (container.reagents.total_volume == 0)
+ experiment_handler.announce_message("Container empty!")
+ return FALSE
+ var/datum/reagent/master_reagent = container.reagents.get_master_reagent()
+ if (master_reagent.type != required_reagent)
+ experiment_handler.announce_message("Reagent not found!")
+ return FALSE
+ if (master_reagent.purity < min_purity)
+ experiment_handler.announce_message("Purity too low!")
+ return FALSE
+ return TRUE
+
+/datum/experiment/scanning/reagent/serialize_progress_stage(atom/target, list/seen_instances)
+ return EXPERIMENT_PROG_INT("Scan a reagent container with [required_reagent::name] of at least [PERCENT(min_purity)] purity.", \
+ seen_instances.len, required_atoms[target])
diff --git a/code/modules/experisci/experiment/types/scanning_vatgrown.dm b/code/modules/experisci/experiment/types/scanning_vatgrown.dm
index f4578fdf41238..0a7ade381a4ea 100644
--- a/code/modules/experisci/experiment/types/scanning_vatgrown.dm
+++ b/code/modules/experisci/experiment/types/scanning_vatgrown.dm
@@ -3,7 +3,7 @@
description = "Base experiment for scanning atoms that were vatgrown"
exp_tag = "Cytology Scan"
total_requirement = 1
- possible_types = list(/mob/living/basic/cockroach)
+ possible_types = list(/mob/living/basic/slime)
traits = EXPERIMENT_TRAIT_DESTRUCTIVE
/datum/experiment/scanning/random/cytology/final_contributing_index_checks(datum/component/experiment_handler/experiment_handler, atom/target, typepath)
diff --git a/code/modules/explorer_drone/exploration_events/trader.dm b/code/modules/explorer_drone/exploration_events/trader.dm
index 626411cb93587..b686a53582d53 100644
--- a/code/modules/explorer_drone/exploration_events/trader.dm
+++ b/code/modules/explorer_drone/exploration_events/trader.dm
@@ -61,7 +61,7 @@
required_site_traits = list(EXPLORATION_SITE_TECHNOLOGY)
band_values = list(EXOSCANNER_BAND_TECH=2)
requires_translator = FALSE
- required_path = /obj/item/stock_parts/cell/high
+ required_path = /obj/item/stock_parts/power_store/cell/high
traded_path = /obj/item/storage/pill_bottle/happy
amount = 3
@@ -80,7 +80,7 @@
deep_scan_description = "You spot a giant \"FRESH FISH\" sign on site."
required_site_traits = list(EXPLORATION_SITE_HABITABLE,EXPLORATION_SITE_SURFACE)
band_values = list(EXOSCANNER_BAND_LIFE=2)
- required_path = /obj/item/stock_parts/cell/high
+ required_path = /obj/item/stock_parts/power_store/cell/high
traded_path = /obj/item/storage/fish_case/random
amount = 3
diff --git a/code/modules/explorer_drone/loot.dm b/code/modules/explorer_drone/loot.dm
index b616f4dbf9926..b6aaa26c6c662 100644
--- a/code/modules/explorer_drone/loot.dm
+++ b/code/modules/explorer_drone/loot.dm
@@ -152,11 +152,11 @@ GLOBAL_LIST_INIT(adventure_loot_generator_index,generate_generator_index())
lefthand_file = 'icons/mob/inhands/items/firelance_lefthand.dmi'
var/windup_time = 10 SECONDS
var/melt_range = 3
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
/obj/item/firelance/Initialize(mapload)
. = ..()
- cell = new /obj/item/stock_parts/cell(src)
+ cell = new /obj/item/stock_parts/power_store/cell(src)
AddComponent(/datum/component/two_handed)
/obj/item/firelance/attack(mob/living/M, mob/living/user, params)
diff --git a/code/modules/fishing/fish/fish_types.dm b/code/modules/fishing/fish/fish_types.dm
index 9423c8d8a4db0..f61cb43b22424 100644
--- a/code/modules/fishing/fish/fish_types.dm
+++ b/code/modules/fishing/fish/fish_types.dm
@@ -316,6 +316,7 @@
random_case_rarity = FISH_RARITY_GOOD_LUCK_FINDING_THIS
required_temperature_min = MIN_AQUARIUM_TEMP+10
required_temperature_max = MIN_AQUARIUM_TEMP+30
+ favorite_bait = list(/obj/item/stock_parts/power_store/cell/lead)
fish_traits = list(
/datum/fish_trait/parthenogenesis,
/datum/fish_trait/mixotroph,
@@ -333,7 +334,6 @@
fish_traits = list(/datum/fish_trait/necrophage)
required_temperature_min = MIN_AQUARIUM_TEMP+15
required_temperature_max = MIN_AQUARIUM_TEMP+35
-
fish_ai_type = FISH_AI_ZIPPY
favorite_bait = list(
list(
@@ -651,7 +651,7 @@
average_size = 30
average_weight = 500
random_case_rarity = FISH_RARITY_VERY_RARE
- favorite_bait = list(/obj/item/food/bait/doughball)
+ favorite_bait = list(/obj/item/stock_parts/power_store/cell/lead)
required_temperature_min = MIN_AQUARIUM_TEMP+18
required_temperature_max = MIN_AQUARIUM_TEMP+26
fish_traits = list(
diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm
index 9cc564df6f411..6ee02d6d9de4d 100644
--- a/code/modules/fishing/fishing_rod.dm
+++ b/code/modules/fishing/fishing_rod.dm
@@ -277,6 +277,8 @@
if(istype(bait, /obj/item/food/bait))
var/obj/item/food/bait/real_bait = bait
bait_state = real_bait.rod_overlay_icon_state
+ if(istype(bait, /obj/item/stock_parts/power_store/cell/lead))
+ bait_state = "battery_overlay"
. += bait_state
/obj/item/fishing_rod/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm
index eb681dc16cbfd..66d2bf0a880e3 100644
--- a/code/modules/fishing/sources/_fish_source.dm
+++ b/code/modules/fishing/sources/_fish_source.dm
@@ -85,8 +85,8 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list(
. = fishing_difficulty
// Difficulty modifier added by having the Settler quirk
- if(HAS_TRAIT(fisherman, TRAIT_SETTLER))
- . += SETTLER_DIFFICULTY_MOD
+ if(HAS_TRAIT(fisherman, TRAIT_EXPERT_FISHER))
+ . += EXPERT_FISHER_DIFFICULTY_MOD
// Difficulty modifier added by the fisher's skill level
if(!challenge || !(challenge.special_effects & FISHING_MINIGAME_RULE_NO_EXP))
diff --git a/code/modules/food_and_drinks/machinery/gibber.dm b/code/modules/food_and_drinks/machinery/gibber.dm
index e0002817f782e..cd50f29ffe478 100644
--- a/code/modules/food_and_drinks/machinery/gibber.dm
+++ b/code/modules/food_and_drinks/machinery/gibber.dm
@@ -5,6 +5,7 @@
icon_state = "grinder"
density = TRUE
circuit = /obj/item/circuitboard/machine/gibber
+ anchored_tabletop_offset = 8
var/operating = FALSE //Is it on?
var/dirty = FALSE // Does it need cleaning?
@@ -15,13 +16,15 @@
/obj/machinery/gibber/Initialize(mapload)
. = ..()
+ RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(on_cleaned))
if(prob(5))
name = "meat grinder"
desc = "Okay, if I... if I chop you up in a meat grinder, and the only thing that comes out, that's left of you, is your eyeball, \
you'r- you're PROBABLY DEAD! You're probably going to - not you, I'm just sayin', like, if you- if somebody were to, like, \
push you into a meat grinder, and, like, your- one of your finger bones is still intact, they're not gonna pick it up and go, \
Well see, yeah it wasn't deadly, it wasn't an instant kill move! You still got, like, this part of your finger left!"
- add_overlay("grjam")
+ dirty = TRUE
+ update_appearance(UPDATE_OVERLAYS)
/obj/machinery/gibber/RefreshParts()
. = ..()
@@ -45,16 +48,23 @@
/obj/machinery/gibber/update_overlays()
. = ..()
if(dirty)
- . +="grbloody"
- if(machine_stat & (NOPOWER|BROKEN))
+ . += "grinder_bloody"
+ if(machine_stat & (NOPOWER|BROKEN) || panel_open)
return
if(!occupant)
- . += "grjam"
+ . += "grinder_empty"
+ . += emissive_appearance(icon, "grinder_empty", src, alpha = src.alpha)
return
if(operating)
- . += "gruse"
+ . += "grinder_active"
+ . += emissive_appearance(icon, "grinder_active", src, alpha = src.alpha)
+ . += "grinder_jaws_active"
return
- . += "gridle"
+ . += "grinder_loaded"
+ . += emissive_appearance(icon, "grinder_loaded", src, alpha = src.alpha)
+
+/obj/machinery/gibber/on_set_panel_open(old_value)
+ update_appearance(UPDATE_OVERLAYS)
/obj/machinery/gibber/attack_paw(mob/user, list/modifiers)
return attack_hand(user, modifiers)
@@ -160,8 +170,7 @@
operating = TRUE
update_appearance()
- var/offset = prob(50) ? -2 : 2
- animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking
+ Shake(pixelshiftx = 1, pixelshifty = 0, duration = gibtime)
var/mob/living/mob_occupant = occupant
var/sourcename = mob_occupant.real_name
var/sourcejob
@@ -223,6 +232,8 @@
/obj/machinery/gibber/proc/make_meat(obj/item/stack/sheet/animalhide/skin, list/obj/item/food/meat/slab/allmeat, meat_produced, gibtype, list/datum/disease/diseases)
playsound(src.loc, 'sound/effects/splat.ogg', 50, TRUE)
operating = FALSE
+ if (!dirty && prob(50))
+ dirty = TRUE
var/turf/T = get_turf(src)
var/list/turf/nearby_turfs = RANGE_TURFS(3,T) - T
if(skin)
@@ -265,3 +276,7 @@
if(victim.loc == input)
victim.forceMove(src)
victim.gib(DROP_ALL_REMAINS)
+
+/obj/machinery/gibber/proc/on_cleaned(obj/source_component, obj/source)
+ dirty = FALSE
+ update_appearance(UPDATE_OVERLAYS)
diff --git a/code/modules/food_and_drinks/machinery/microwave.dm b/code/modules/food_and_drinks/machinery/microwave.dm
index 0cb9867723455..88256eaf1d27e 100644
--- a/code/modules/food_and_drinks/machinery/microwave.dm
+++ b/code/modules/food_and_drinks/machinery/microwave.dm
@@ -53,9 +53,9 @@
/// If we use a cell instead of powernet
var/cell_powered = FALSE
/// The cell we charge with
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
/// The cell we're charging
- var/obj/item/stock_parts/cell/vampire_cell
+ var/obj/item/stock_parts/power_store/vampire_cell
/// Capable of vampire charging PDAs
var/vampire_charging_capable = FALSE
/// Charge contents of microwave instead of cook
@@ -123,7 +123,7 @@
if(cell_powered)
if(!isnull(cell))
context[SCREENTIP_CONTEXT_CTRL_LMB] = "Remove cell"
- else if(held_item && istype(held_item, /obj/item/stock_parts/cell))
+ else if(held_item && istype(held_item, /obj/item/stock_parts/power_store/cell))
context[SCREENTIP_CONTEXT_CTRL_LMB] = "Insert cell"
if(held_item?.tool_behaviour == TOOL_WRENCH)
@@ -365,7 +365,7 @@
update_appearance()
return ITEM_INTERACT_SUCCESS
-/obj/machinery/microwave/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/machinery/microwave/tool_act(mob/living/user, obj/item/tool, list/modifiers)
if(operating)
return ITEM_INTERACT_SKIP_TO_ATTACK // Don't use tools if we're dirty
if(dirty >= MAX_MICROWAVE_DIRTINESS)
@@ -373,7 +373,7 @@
if(panel_open && is_wire_tool(tool))
wires.interact(user)
return ITEM_INTERACT_SUCCESS
- return NONE
+ return ..()
/obj/machinery/microwave/attackby(obj/item/item, mob/living/user, params)
if(operating)
@@ -385,7 +385,7 @@
return TRUE
return ..()
- if(istype(item, /obj/item/stock_parts/cell) && cell_powered)
+ if(istype(item, /obj/item/stock_parts/power_store/cell) && cell_powered)
var/swapped = FALSE
if(!isnull(cell))
cell.forceMove(drop_location())
@@ -903,12 +903,12 @@
/obj/machinery/microwave/engineering/Initialize(mapload)
. = ..()
if(mapload)
- cell = new /obj/item/stock_parts/cell/upgraded/plus
+ cell = new /obj/item/stock_parts/power_store/cell/upgraded/plus
update_appearance()
/obj/machinery/microwave/engineering/cell_included/Initialize(mapload)
. = ..()
- cell = new /obj/item/stock_parts/cell/upgraded/plus
+ cell = new /obj/item/stock_parts/power_store/cell/upgraded/plus
update_appearance()
#undef MICROWAVE_NORMAL
diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm
index 4a60cdbc26592..78dd71df128d9 100644
--- a/code/modules/food_and_drinks/machinery/processor.dm
+++ b/code/modules/food_and_drinks/machinery/processor.dm
@@ -4,7 +4,8 @@
name = "food processor"
desc = "An industrial grinder used to process meat and other foods. Keep hands clear of intake area while operating."
icon = 'icons/obj/machines/kitchen.dmi'
- icon_state = "processor1"
+ base_icon_state = "processor"
+ icon_state = "processor"
layer = BELOW_OBJ_LAYER
density = TRUE
pass_flags = PASSTABLE
@@ -91,7 +92,7 @@
if(processing)
to_chat(user, span_warning("[src] is in the process of processing!"))
return TRUE
- if(default_deconstruction_screwdriver(user, "processor", "processor1", attacking_item) || default_pry_open(attacking_item, close_after_pry = TRUE) || default_deconstruction_crowbar(attacking_item))
+ if(default_deconstruction_screwdriver(user, base_icon_state + "_open", base_icon_state, attacking_item) || default_pry_open(attacking_item, close_after_pry = TRUE) || default_deconstruction_crowbar(attacking_item))
return
if(istype(attacking_item, /obj/item/storage/bag/tray))
@@ -157,7 +158,7 @@
total_time += recipe.time
var/duration = (total_time / rating_speed)
- INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, Shake), 2, 2, duration, max(duration*0.02, 0.01)) //initial values work out to duration 4 seconds, interval 0.8
+ INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, Shake), 1, 0, duration)
sleep(duration)
for(var/atom/movable/content_item in processor_contents)
var/datum/food_processor_process/recipe = PROCESSOR_SELECT_RECIPE(content_item)
@@ -189,6 +190,8 @@
/obj/machinery/processor/slime
name = "slime processor"
+ base_icon_state = "processor_slime"
+ icon_state = "processor_slime"
desc = "An industrial grinder with a sticker saying appropriated for science department. Keep hands clear of intake area while operating."
circuit = /obj/item/circuitboard/machine/processor/slime
diff --git a/code/modules/food_and_drinks/machinery/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm
index 8a6b3258a0ef7..392d716965d6a 100644
--- a/code/modules/food_and_drinks/machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/machinery/smartfridge.dm
@@ -302,6 +302,10 @@
to_chat(user, span_warning("There is nothing in [weapon] to put in [src]!"))
return FALSE
+ if(!powered())
+ to_chat(user, span_warning("\The [src]'s magnetic door won't open without power!"))
+ return FALSE
+
if(!user.combat_mode)
to_chat(user, span_warning("\The [src] smartly refuses [weapon]."))
return FALSE
diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm
index a847b15e86161..417ac543612fd 100644
--- a/code/modules/food_and_drinks/pizzabox.dm
+++ b/code/modules/food_and_drinks/pizzabox.dm
@@ -228,7 +228,7 @@
return
else if(bomb)
balloon_alert(user, "already rigged!")
- else if(istype(I, /obj/item/pen))
+ else if(IS_WRITING_UTENSIL(I))
if(!open)
if(!user.can_write(I))
return
diff --git a/code/modules/food_and_drinks/plate.dm b/code/modules/food_and_drinks/plate.dm
index 4ae6bf19e1d4c..add7eecaf92e0 100644
--- a/code/modules/food_and_drinks/plate.dm
+++ b/code/modules/food_and_drinks/plate.dm
@@ -121,6 +121,7 @@
icon = 'icons/obj/service/kitchen.dmi'
icon_state = "plate_shard1"
base_icon_state = "plate_shard"
+ hitsound = 'sound/weapons/bladeslice.ogg'
w_class = WEIGHT_CLASS_TINY
force = 5
throwforce = 5
@@ -131,6 +132,6 @@
/obj/item/plate_shard/Initialize(mapload)
. = ..()
- AddComponent(/datum/component/caltrop, min_damage = force)
+ AddComponent(/datum/component/caltrop, min_damage = force, paralyze_duration = 2 SECONDS, soundfile = hitsound)
- icon_state = "[base_icon_state][pick(1,variants)]"
+ icon_state = "[base_icon_state][rand(1, variants)]"
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
index 67d1ca54c0028..cc27a6f078bef 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
@@ -113,7 +113,7 @@
/obj/item/food/flatdough = 1,
/datum/reagent/consumable/milk = 1,
/datum/reagent/consumable/cherryjelly = 5,
- /obj/item/stock_parts/cell/super =1,
+ /obj/item/stock_parts/power_store/cell/super =1,
/obj/item/melee/sabre = 1
)
result = /obj/item/food/powercrepe
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
index c0c99bbe6523b..a215ecdd750d3 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
@@ -241,7 +241,7 @@
/datum/crafting_recipe/food/bacid_pie
reqs = list(
/obj/item/food/pie/plain = 1,
- /obj/item/stock_parts/cell = 2,
+ /obj/item/stock_parts/power_store/cell = 2,
)
result = /obj/item/food/pie/bacid_pie
category = CAT_PIE
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pizza.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pizza.dm
index fd7ec3301637b..f67071a86f51e 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pizza.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pizza.dm
@@ -104,7 +104,7 @@
/datum/crafting_recipe/food/energypizza
reqs = list(
/obj/item/food/flatdough = 1,
- /obj/item/stock_parts/cell = 2,
+ /obj/item/stock_parts/power_store/cell = 2,
)
result = /obj/item/food/pizza/energy/raw
category = CAT_PIZZA
diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm
index 1204106dc865c..b98d66f6bd2c7 100644
--- a/code/modules/holodeck/computer.dm
+++ b/code/modules/holodeck/computer.dm
@@ -293,6 +293,8 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf
if(isstructure(holo_object))
holo_object.obj_flags |= NO_DEBRIS_AFTER_DECONSTRUCTION
+ if(istype(holo_object, /obj/structure/closet))
+ RegisterSignal(holo_object, COMSIG_CLOSET_CONTENTS_INITIALIZED, PROC_REF(register_contents))
return
if(ismachinery(holo_object))
@@ -304,6 +306,14 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf
var/obj/machinery/button/holo_button = holo_machine
holo_button.setup_device()
+/obj/machinery/computer/holodeck/proc/register_contents(obj/structure/closet/storage)
+ SIGNAL_HANDLER
+
+ for(var/atom/movable/item as anything in storage.get_all_contents_type(/atom/movable))
+ if(item == storage)
+ continue
+ add_to_spawned(item)
+
/**
* A separate proc for objects that weren't loaded by the template nor spawned by holo effects
* yet need to be added to the list of spawned objects. (e.g. holographic fishes)
diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm
index 51e09f8ab9a2c..7432de695175e 100644
--- a/code/modules/holodeck/turfs.dm
+++ b/code/modules/holodeck/turfs.dm
@@ -11,6 +11,9 @@
/turf/open/floor/holofloor/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
return ITEM_INTERACT_BLOCKING // Fuck you
+/turf/open/floor/holofloor/crowbar_act(mob/living/user, obj/item/I)
+ return NONE // Fuck you
+
/turf/open/floor/holofloor/burn_tile()
return //you can't burn a hologram!
diff --git a/code/modules/hydroponics/grown/corn.dm b/code/modules/hydroponics/grown/corn.dm
index 8eab962d75118..d5f9f94e1b2df 100644
--- a/code/modules/hydroponics/grown/corn.dm
+++ b/code/modules/hydroponics/grown/corn.dm
@@ -50,7 +50,7 @@
/obj/item/grown/corncob/attackby(obj/item/grown/W, mob/user, params)
if(W.get_sharpness())
to_chat(user, span_notice("You use [W] to fashion a pipe out of the corn cob!"))
- new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc)
+ new /obj/item/cigarette/pipe/cobpipe (user.loc)
qdel(src)
else
return ..()
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 3f47982e16ee9..791b7ac51a253 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -1088,12 +1088,12 @@
user.examinate(src)
/obj/machinery/hydroponics/click_ctrl(mob/user)
+ if(!anchored)
+ return NONE
if(!powered())
to_chat(user, span_warning("[name] has no power."))
update_use_power(NO_POWER_USE)
return CLICK_ACTION_BLOCKING
- if(!anchored)
- return CLICK_ACTION_BLOCKING
set_self_sustaining(!self_sustaining)
to_chat(user, span_notice("You [self_sustaining ? "activate" : "deactivated"] [src]'s autogrow function[self_sustaining ? ", maintaining the tray's health while using high amounts of power" : ""]."))
return CLICK_ACTION_SUCCESS
diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm
index b273cfb6d5854..c5861140e4e56 100644
--- a/code/modules/hydroponics/plant_genes.dm
+++ b/code/modules/hydroponics/plant_genes.dm
@@ -330,7 +330,7 @@
to_chat(eater, span_notice("You feel energized as you bite into [our_plant]."))
var/batteries_recharged = FALSE
var/obj/item/seeds/our_seed = our_plant.get_plant_seed()
- for(var/obj/item/stock_parts/cell/found_cell in eater.get_all_contents())
+ for(var/obj/item/stock_parts/power_store/found_cell in eater.get_all_contents())
var/newcharge = min(our_seed.potency * 0.01 * found_cell.maxcharge, found_cell.maxcharge)
if(found_cell.charge < newcharge)
found_cell.charge = newcharge
@@ -586,7 +586,7 @@
return
to_chat(user, span_notice("You add some cable to [our_plant] and slide it inside the battery encasing."))
- var/obj/item/stock_parts/cell/potato/pocell = new /obj/item/stock_parts/cell/potato(user.loc)
+ var/obj/item/stock_parts/power_store/cell/potato/pocell = new /obj/item/stock_parts/power_store/cell/potato(user.loc)
pocell.icon = our_plant.icon // Just in case the plant icons get spread out in different files eventually, this trait won't cause error sprites (also yay downstreams)
pocell.icon_state = our_plant.icon_state
pocell.maxcharge = our_seed.potency * 0.02 * STANDARD_CELL_CHARGE
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index f46f4c3912a0f..fefd4d999387f 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -462,7 +462,7 @@
return
/obj/item/seeds/attackby(obj/item/O, mob/user, params)
- if(istype(O, /obj/item/pen))
+ if(IS_WRITING_UTENSIL(O))
var/choice = tgui_input_list(usr, "What would you like to change?", "Seed Alteration", list("Plant Name", "Seed Description", "Product Description"))
if(isnull(choice))
return
diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm
index 13e358bdcd528..5b82c9adb7116 100644
--- a/code/modules/jobs/job_types/captain.dm
+++ b/code/modules/jobs/job_types/captain.dm
@@ -35,7 +35,7 @@
family_heirlooms = list(/obj/item/reagent_containers/cup/glass/flask/gold, /obj/item/toy/captainsaid/collector)
mail_goodies = list(
- /obj/item/clothing/mask/cigarette/cigar/havana = 20,
+ /obj/item/cigarette/cigar/havana = 20,
/obj/item/storage/fancy/cigarettes/cigars/havana = 15,
/obj/item/reagent_containers/cup/glass/bottle/champagne = 5,
/obj/item/reagent_containers/cup/glass/bottle/champagne/cursed = 5,
diff --git a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm
index 0a037482bc1fd..f204518acc53b 100644
--- a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm
+++ b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm
@@ -89,55 +89,8 @@
. += span_cult_italic("It has the blood of [num_slain] fallen cultist[num_slain == 1 ? "" : "s"] on it. \
Offering it to Nar'sie will transform it into a [num_slain >= 3 ? "powerful" : "standard"] cult weapon.")
-/obj/item/nullrod/godhand
- name = "god hand"
- desc = "This hand of yours glows with an awesome power!"
- icon = 'icons/obj/weapons/hand.dmi'
- icon_state = "disintegrate"
- inhand_icon_state = "disintegrate"
- lefthand_file = 'icons/mob/inhands/items/touchspell_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/items/touchspell_righthand.dmi'
- slot_flags = null
- item_flags = ABSTRACT | DROPDEL
- w_class = WEIGHT_CLASS_HUGE
- hitsound = 'sound/weapons/sear.ogg'
- damtype = BURN
- attack_verb_continuous = list("punches", "cross counters", "pummels")
- attack_verb_simple = list(SFX_PUNCH, "cross counter", "pummel")
- menu_description = "An undroppable god hand dealing burn damage. Disappears if the arm holding it is cut off."
-
-/obj/item/nullrod/godhand/Initialize(mapload)
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
-
-/obj/item/nullrod/staff
- name = "red holy staff"
- desc = "It has a mysterious, protective aura."
- icon = 'icons/obj/weapons/staff.dmi'
- icon_state = "godstaff-red"
- inhand_icon_state = "godstaff-red"
- lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
- w_class = WEIGHT_CLASS_HUGE
- force = 5
- slot_flags = ITEM_SLOT_BACK
- block_chance = 50
- block_sound = 'sound/weapons/genhit.ogg'
- menu_description = "A red staff which provides a medium chance of blocking incoming attacks via a protective red aura around its user, but deals very low amount of damage. Can be worn only on the back."
- /// The icon which appears over the mob holding the item
- var/shield_icon = "shield-red"
-
-/obj/item/nullrod/staff/worn_overlays(mutable_appearance/standing, isinhands)
- . = ..()
- if(isinhands)
- . += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_SHIELD_LAYER)
-
-/obj/item/nullrod/staff/blue
- name = "blue holy staff"
- icon_state = "godstaff-blue"
- inhand_icon_state = "godstaff-blue"
- shield_icon = "shield-old"
- menu_description = "A blue staff which provides a medium chance of blocking incoming attacks via a protective blue aura around its user, but deals very low amount of damage. Can be worn only on the back."
+/// Claymore Variant
+/// This subtype possesses a block chance and is sharp.
/obj/item/nullrod/claymore
name = "holy claymore"
@@ -249,27 +202,8 @@
inhand_icon_state = "e_cutlass_on"
worn_icon_state = "swordred"
-/obj/item/nullrod/sord
- name = "\improper UNREAL SORD"
- desc = "This thing is so unspeakably HOLY you are having a hard time even holding it."
- icon = 'icons/obj/weapons/sword.dmi'
- icon_state = "sord"
- inhand_icon_state = "sord"
- worn_icon_state = "sord"
- lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
- force = 4.13
- throwforce = 1
- slot_flags = ITEM_SLOT_BELT
- hitsound = 'sound/weapons/bladeslice.ogg'
- attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
- attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
- menu_description = "An odd s(w)ord dealing a laughable amount of damage. Fits in pockets. Can be worn on the belt."
-
-/obj/item/nullrod/sord/suicide_act(mob/living/user) //a near-exact copy+paste of the actual sord suicide_act()
- user.visible_message(span_suicide("[user] is trying to impale [user.p_them()]self with [src]! It might be a suicide attempt if it weren't so HOLY."), \
- span_suicide("You try to impale yourself with [src], but it's TOO HOLY..."))
- return SHAME
+/// Vibro Variant
+/// This subtype possesses armor penetration and is sharp.
/obj/item/nullrod/vibro
name = "high frequency blade"
@@ -342,6 +276,89 @@
toolspeed = 0.5 //same speed as an active chainsaw
chaplain_spawnable = FALSE //prevents being pickable as a chaplain weapon (it has 30 force)
+/// Other Variants
+/// Not a special category on their own, but usually possess more unique mechanics
+
+// God Hand - Cannot be dropped. Does burn damage.
+
+/obj/item/nullrod/godhand
+ name = "god hand"
+ desc = "This hand of yours glows with an awesome power!"
+ icon = 'icons/obj/weapons/hand.dmi'
+ icon_state = "disintegrate"
+ inhand_icon_state = "disintegrate"
+ lefthand_file = 'icons/mob/inhands/items/touchspell_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/items/touchspell_righthand.dmi'
+ slot_flags = null
+ item_flags = ABSTRACT | DROPDEL
+ w_class = WEIGHT_CLASS_HUGE
+ hitsound = 'sound/weapons/sear.ogg'
+ damtype = BURN
+ attack_verb_continuous = list("punches", "cross counters", "pummels")
+ attack_verb_simple = list(SFX_PUNCH, "cross counter", "pummel")
+ menu_description = "An undroppable god hand dealing burn damage. Disappears if the arm holding it is cut off."
+
+/obj/item/nullrod/godhand/Initialize(mapload)
+ . = ..()
+ ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
+
+// Red/Blue Holy Staff - 50% block chance, almost no damage at all.
+
+/obj/item/nullrod/staff
+ name = "red holy staff"
+ desc = "It has a mysterious, protective aura."
+ icon = 'icons/obj/weapons/staff.dmi'
+ icon_state = "godstaff-red"
+ inhand_icon_state = "godstaff-red"
+ lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
+ w_class = WEIGHT_CLASS_HUGE
+ force = 5
+ slot_flags = ITEM_SLOT_BACK
+ block_chance = 50
+ block_sound = 'sound/weapons/genhit.ogg'
+ menu_description = "A red staff which provides a medium chance of blocking incoming attacks via a protective red aura around its user, but deals very low amount of damage. Can be worn only on the back."
+ /// The icon which appears over the mob holding the item
+ var/shield_icon = "shield-red"
+
+/obj/item/nullrod/staff/worn_overlays(mutable_appearance/standing, isinhands)
+ . = ..()
+ if(isinhands)
+ . += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_SHIELD_LAYER)
+
+/obj/item/nullrod/staff/blue
+ name = "blue holy staff"
+ icon_state = "godstaff-blue"
+ inhand_icon_state = "godstaff-blue"
+ shield_icon = "shield-old"
+ menu_description = "A blue staff which provides a medium chance of blocking incoming attacks via a protective blue aura around its user, but deals very low amount of damage. Can be worn only on the back."
+
+// SORD - It is unspeakably shitty.
+
+/obj/item/nullrod/sord
+ name = "\improper UNREAL SORD"
+ desc = "This thing is so unspeakably HOLY you are having a hard time even holding it."
+ icon = 'icons/obj/weapons/sword.dmi'
+ icon_state = "sord"
+ inhand_icon_state = "sord"
+ worn_icon_state = "sord"
+ lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
+ force = 4.13
+ throwforce = 1
+ slot_flags = ITEM_SLOT_BELT
+ hitsound = 'sound/weapons/bladeslice.ogg'
+ attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
+ attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
+ menu_description = "An odd s(w)ord dealing a laughable amount of damage. Fits in pockets. Can be worn on the belt."
+
+/obj/item/nullrod/sord/suicide_act(mob/living/user) //a near-exact copy+paste of the actual sord suicide_act()
+ user.visible_message(span_suicide("[user] is trying to impale [user.p_them()]self with [src]! It might be a suicide attempt if it weren't so HOLY."), \
+ span_suicide("You try to impale yourself with [src], but it's TOO HOLY..."))
+ return SHAME
+
+// Relic War Hammer - Nothing special.
+
/obj/item/nullrod/hammer
name = "relic war hammer"
desc = "This war hammer cost the chaplain forty thousand space dollars."
@@ -360,6 +377,8 @@
. = ..()
AddElement(/datum/element/kneejerk)
+// Chainsaw Hand - Cannot be dropped.
+
/obj/item/nullrod/chainsaw
name = "chainsaw hand"
desc = "Good? Bad? You're the guy with the chainsaw hand."
@@ -389,6 +408,8 @@
butcher_sound = hitsound, \
)
+// Clown Dagger - Nothing special, just honks.
+
/obj/item/nullrod/clown
name = "clown dagger"
desc = "Used for absolutely hilarious sacrifices."
@@ -404,6 +425,8 @@
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
menu_description = "A sharp dagger. Fits in pockets. Can be worn on the belt. Honk."
+// Pride-struck Hammer - Transfers reagents in your body to those you hit.
+
#define CHEMICAL_TRANSFER_CHANCE 30
/obj/item/nullrod/pride_hammer
@@ -436,6 +459,8 @@
#undef CHEMICAL_TRANSFER_CHANCE
+// Holy Whip - Does more damage to vampires.
+
/obj/item/nullrod/whip
name = "holy whip"
desc = "What a terrible night to be on Space Station 13."
@@ -451,6 +476,8 @@
hitsound = 'sound/weapons/chainhit.ogg'
menu_description = "A whip. Deals extra damage to vampires. Fits in pockets. Can be worn on the belt."
+// Atheist's Fedora - Wear it on your head. No melee damage, massive throw force.
+
/obj/item/nullrod/fedora
name = "atheist's fedora"
desc = "The brim of the hat is as sharp as your wit. The edge would hurt almost as much as disproving the existence of God."
@@ -474,6 +501,8 @@
user.visible_message(span_suicide("[user] is killing [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to get further from god!"))
return (BRUTELOSS|FIRELOSS)
+// Dark Blessing - Replaces your arm with an armblade. Cannot be dropped.
+
/obj/item/nullrod/armblade
name = "dark blessing"
desc = "Particularly twisted deities grant gifts of dubious value."
@@ -498,12 +527,16 @@
effectiveness = 70, \
)
+// Unholy Blessing - Just a reskinned dark blessing.
+
/obj/item/nullrod/armblade/tentacle
name = "unholy blessing"
icon_state = "tentacle"
inhand_icon_state = "tentacle"
menu_description = "An undroppable sharp tentacle capable of inflicting deep wounds. Capable of an ineffective butchering of bodies. Disappears if the arm holding it is cut off."
+// Carp-sie Plushie - Gives you the carp faction so that you can be friends with carp.
+
/obj/item/nullrod/carp
name = "carp-sie plushie"
desc = "An adorable stuffed toy that resembles the god of all carp. The teeth look pretty sharp. Activate it to receive the blessing of Carp-Sie."
@@ -525,7 +558,9 @@
. = ..()
AddComponent(/datum/component/faction_granter, FACTION_CARP, holy_role_required = HOLY_ROLE_PRIEST, grant_message = span_boldnotice("You are blessed by Carp-Sie. Wild space carp will no longer attack you."))
-/obj/item/nullrod/claymore/bostaff //May as well make it a "claymore" and inherit the blocking
+// Monk's Staff - Higher block, lower damage.
+
+/obj/item/nullrod/bostaff
name = "monk's staff"
desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, it is now used to harass the clown."
force = 15
@@ -533,7 +568,6 @@
block_sound = 'sound/weapons/genhit.ogg'
slot_flags = ITEM_SLOT_BACK
w_class = WEIGHT_CLASS_BULKY
- sharpness = NONE
hitsound = SFX_SWING_HIT
attack_verb_continuous = list("smashes", "slams", "whacks", "thwacks")
attack_verb_simple = list("smash", "slam", "whack", "thwack")
@@ -543,7 +577,9 @@
worn_icon_state = "bostaff0"
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
- menu_description = "A staff which provides a medium-low chance of blocking incoming melee attacks and deals a little less damage due to being made of wood. Can be worn on the back."
+ menu_description = "A staff which provides a medium-low chance of blocking incoming melee attacks and deals a little less damage. Can be worn on the back."
+
+// Arrhythmic Knife - Lets your walk without rhythm by varying your walk speed. Can't be put away.
/obj/item/nullrod/tribal_knife
name = "arrhythmic knife"
@@ -581,6 +617,8 @@
if(wielder.is_holding(src))
wielder.update_equipment_speed_mods()
+// Unholy Pitchfork - Does absolutely nothing special, it is just bigger.
+
/obj/item/nullrod/pitchfork
name = "unholy pitchfork"
desc = "Holding this makes you look absolutely devilish."
@@ -598,6 +636,8 @@
sharpness = SHARP_EDGED
menu_description = "A sharp pitchfork. Can be worn on the back."
+// Egyptian Staff - Used as a tool for making mummy wraps.
+
/obj/item/nullrod/egyptian
name = "egyptian staff"
desc = "A tutorial in mummification is carved into the staff. You could probably craft the wraps if you had some cloth."
@@ -613,6 +653,8 @@
attack_verb_simple = list("bash", "smack", "whack")
menu_description = "A staff. Can be used as a tool to craft exclusive egyptian items. Easily stored. Can be worn on the back."
+// Hypertool - It does brain damage rather than normal damage.
+
/obj/item/nullrod/hypertool
name = "hypertool"
desc = "A tool so powerful even you cannot perfectly use it."
@@ -630,6 +672,8 @@
hitsound = 'sound/effects/sparks4.ogg'
menu_description = "A tool dealing brain damage which partially penetrates armor. Fits in pockets. Can be worn on the belt."
+// Ancient Spear - Slight armor penetration, based on the Brass Spear from the Clockcult game mode.
+
/obj/item/nullrod/spear
name = "ancient spear"
desc = "An ancient spear made of brass, I mean gold, I mean bronze. It looks highly mechanical."
@@ -646,3 +690,174 @@
attack_verb_simple = list("stab", "poke", "slash", "clock")
hitsound = 'sound/weapons/bladeslice.ogg'
menu_description = "A pointy spear which penetrates armor a little. Can be worn only on the belt."
+
+// Nullblade - For when you really want to feel like rolling dice during combat
+
+/obj/item/nullrod/nullblade
+ name = "nullblade"
+ desc = "Clerical assassins are not officially recognized by the collective faiths of Nanotrasen. And yet, here you are."
+ icon = 'icons/obj/weapons/sword.dmi'
+ icon_state = "nullsword"
+ inhand_icon_state = "nullsword"
+ worn_icon_state = "nullsword"
+ lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
+ w_class = WEIGHT_CLASS_BULKY
+ force = 12
+ wound_bonus = 10
+ bare_wound_bonus = 30
+ slot_flags = ITEM_SLOT_BELT
+ block_sound = 'sound/weapons/parry.ogg'
+ sharpness = SHARP_POINTY
+ hitsound = 'sound/weapons/bladeslice.ogg'
+ attack_verb_continuous = list("attacks", "punctures", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
+ attack_verb_simple = list("attack", "puncture", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
+ menu_description = "A blade that deals variable, low amounts of damage, but does easily inflict wounds. \
+ The stronger your swinging arm is, the stronger the blade is, though only slightly. \
+ Against debilitated targets, can also deal additional sneak attack damage with a very high wound chance."
+
+/obj/item/nullrod/nullblade/melee_attack_chain(mob/user, atom/target, params)
+ //Track our actual force separately
+ var/old_force = force
+ force = 0
+ //Potential dice roll for our baseline force
+ force += roll("1d6")
+
+ //Now we can check for our user's potential 'strength' value. As a baseline, we'll use a default value of 4 for the sake of nonhuman users.
+ var/strength_value = 4
+
+ //We can use our human wielder's arm strength to determine their 'strength'. We add unarmed lower and upper, then divide by four.
+ //This isn't how strength works in dnd but who fucking cares.
+ if(ishuman(user))
+ var/mob/living/carbon/human/human_user = user
+ var/obj/item/bodypart/wielding_bodypart = human_user.get_active_hand()
+ strength_value = round((wielding_bodypart.unarmed_damage_low + wielding_bodypart.unarmed_damage_high) * 0.25, 1)
+
+ force += strength_value
+
+ //If our old_force is higher than our initial force, add the difference to this calculation.
+ //We do this because our force could have been changed by things like whetstones and RPG stats.
+ force += old_force - initial(force)
+
+ . = ..()
+ //Reapply our old force.
+ force = old_force
+
+/obj/item/nullrod/nullblade/afterattack(atom/target, mob/user, click_parameters)
+ if(!isliving(target))
+ return
+
+ var/mob/living/living_target = target
+
+ if(user == living_target)
+ return
+
+ if(living_target.stat == DEAD)
+ return
+
+ sneak_attack(living_target, user)
+
+/// If our target is incapacitated, unable to protect themselves, or we attack them from behind, we sneak attack!
+/obj/item/nullrod/nullblade/proc/sneak_attack(mob/living/living_target, mob/user)
+ // Did we successfully meet the criteria for a sneak attack?
+ var/successful_sneak_attack = FALSE
+
+ // Did our sneak attack fail due to a special effect?
+ var/sneak_attack_fail_message = FALSE
+
+ // The force our sneak attack applies. Starts as 3d6, then changed based on certain factors.
+ var/sneak_attack_dice = roll("3d6")
+
+ // Status effects on the target that grant us sneak attacks
+ if(living_target.is_blind())
+ successful_sneak_attack = TRUE
+
+ else if(living_target.get_timed_status_effect_duration(/datum/status_effect/staggered))
+ successful_sneak_attack = TRUE
+
+ else if(living_target.get_timed_status_effect_duration(/datum/status_effect/confusion))
+ successful_sneak_attack = TRUE
+
+ // Our target is in some kind of grapple, which prevents them form protecting themselves.
+ else if(living_target.pulledby && living_target.pulledby.grab_state >= GRAB_AGGRESSIVE)
+ successful_sneak_attack = TRUE
+
+ // traits that render you unable to defend yourself properly from an attack
+ else if(HAS_TRAIT(living_target, TRAIT_SPINNING) || HAS_TRAIT(living_target, TRAIT_HANDS_BLOCKED))
+ successful_sneak_attack = TRUE
+
+ // We'll take "same tile" as "behind" for ease
+ else if(living_target.loc == user.loc)
+ successful_sneak_attack = TRUE
+
+ // We'll also assume lying down is vulnerable, as mob directions when lying are unclear and you have trouble defending yourself from prone
+ else if(living_target.body_position == LYING_DOWN)
+ successful_sneak_attack = TRUE
+
+ // Now check for if we're behind
+ var/dir_living_target_to_user = get_dir(living_target, user)
+ if(living_target.dir & REVERSE_DIR(dir_living_target_to_user))
+ successful_sneak_attack = TRUE
+
+ /// Now we'll check for things that STOP a sneak attack. Why? Because this mechanic isn't complicated enough and I must insert more ivory tower design.
+
+ if(living_target.mob_biotypes & MOB_SLIME) // SLIMES HAVE NO ANATOMY.
+ successful_sneak_attack = FALSE
+ sneak_attack_fail_message = TRUE
+
+ else if(living_target.incorporeal_move >= 1 && !HAS_TRAIT(living_target, TRAIT_REVENANT_REVEALED)) // WE CAN'T SNEAK ATTACK INCORPOREAL JERKS. BUT WE CAN SNEAK ATTACK REVEALED REVENANTS BECAUSE DUH, NULLROD.
+ successful_sneak_attack = FALSE
+ sneak_attack_fail_message = TRUE
+
+ else if(IS_HERETIC_MONSTER(living_target) && prob(50)) // IT IS HARD TO SNEAK ATTACK SOMETHING WITH TOO MANY REDUNDANT EVERYTHINGS.
+ successful_sneak_attack = FALSE
+ sneak_attack_fail_message = TRUE
+
+ else if(HAS_TRAIT(living_target, TRAIT_STABLEHEART) && prob(50)) // THEIR ANATOMY IS FUCKING WEIRD.
+ successful_sneak_attack = FALSE
+ sneak_attack_fail_message = TRUE
+
+ else if(HAS_TRAIT(living_target, TRAIT_MIND_READER) && !user.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0)) // FORESIGHT SAYS 'FUCK YOU' TO SNEAK ATTACKERS. BUT IF YOU HAVE A TIN FOIL HAT, YOU'RE SAFE!
+ successful_sneak_attack = FALSE
+ sneak_attack_fail_message = TRUE
+
+ else if(user.is_blind()) // YOU CAN'T STAB PRECISELY WHAT YOU CAN'T SEE.
+ successful_sneak_attack = FALSE
+ sneak_attack_fail_message = TRUE
+
+ /// And so we return here if we are not entitled to a sneak attack.
+ if(!successful_sneak_attack)
+ if(sneak_attack_fail_message)
+ user.balloon_alert(living_target, "sneak attack avoided!")
+ return
+
+ /// And now we'll deal with sneak attack damage modifiers.
+
+ // If our target is also unconscious for some reason, we get even more damage. Coup de grace, motherfucker.
+ if(HAS_TRAIT(living_target, TRAIT_KNOCKEDOUT))
+ sneak_attack_dice += roll("1d6")
+ new /obj/effect/temp_visual/crit(get_turf(living_target))
+
+ // If the target is rebuked, we also add some additional damage. It is the closest thing to 'studying' your target, okay?
+ if(living_target.has_status_effect(/datum/status_effect/rebuked))
+ sneak_attack_dice += 2
+
+ // If we're morbid, and the target has been dissected, we get an extra d6.
+ // The chances of this occuring are quite low, as even having this weapon means you're locked out of becoming morbid as a chaplain, but when it does come up...
+ // Or the coroner stole this blade to go hunt the recently dead...
+ if(HAS_TRAIT(user, TRAIT_MORBID) && HAS_TRAIT(living_target, TRAIT_DISSECTED))
+ sneak_attack_dice += roll("1d6")
+
+ // Baton + this weapon might be a little too much fun so we're nerfing this combination outright.
+ if(HAS_TRAIT(living_target, TRAIT_IWASBATONED))
+ sneak_attack_dice *= 0.5
+
+ // Affecting body part check.
+ var/obj/item/bodypart/affecting = living_target.get_bodypart(user.get_random_valid_zone(user.zone_selected))
+ // Target's armor value. Accounts for armor penetration even though we have no armour_penetration defined on the parent.
+ var/armor_block = living_target.run_armor_check(affecting, MELEE, armour_penetration = armour_penetration)
+
+ // We got a sneak attack!
+ living_target.apply_damage(round(sneak_attack_dice, DAMAGE_PRECISION), BRUTE, def_zone = affecting, blocked = armor_block, wound_bonus = bare_wound_bonus, sharpness = SHARP_EDGED)
+ living_target.balloon_alert(user, "sneak attack!")
+ playsound(living_target, 'sound/weapons/guillotine.ogg', 50, TRUE)
diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm
index e9b40d43e05e6..12f30a9de1b88 100644
--- a/code/modules/jobs/job_types/clown.dm
+++ b/code/modules/jobs/job_types/clown.dm
@@ -26,6 +26,7 @@
mail_goodies = list(
/obj/item/food/grown/banana = 100,
/obj/item/food/pie/cream = 50,
+ /obj/item/spess_knife = 20, // As a joke for clumsy clown from engineering department
/obj/item/clothing/shoes/clown_shoes/combat = 10,
/obj/item/reagent_containers/spray/waterflower/lube = 20, // lube
/obj/item/reagent_containers/spray/waterflower/superlube = 1 // Superlube, good lord.
diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm
index b6984e24b4220..0ed502b2529bf 100644
--- a/code/modules/jobs/job_types/detective.dm
+++ b/code/modules/jobs/job_types/detective.dm
@@ -61,7 +61,7 @@
ears = /obj/item/radio/headset/headset_sec/alt
gloves = /obj/item/clothing/gloves/color/black
head = /obj/item/clothing/head/fedora/det_hat
- mask = /obj/item/clothing/mask/cigarette
+ mask = /obj/item/cigarette
neck = /obj/item/clothing/neck/tie/detective
shoes = /obj/item/clothing/shoes/sneakers/brown
l_pocket = /obj/item/toy/crayon/white
@@ -76,12 +76,12 @@
/datum/outfit/job/detective/pre_equip(mob/living/carbon/human/human, visualsOnly = FALSE)
. = ..()
if (human.age < AGE_MINOR)
- mask = /obj/item/clothing/mask/cigarette/candy
+ mask = /obj/item/cigarette/candy
head = /obj/item/clothing/head/fedora/det_hat/minor
/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
- var/obj/item/clothing/mask/cigarette/cig = H.wear_mask
+ var/obj/item/cigarette/cig = H.wear_mask
if(istype(cig)) //Some species specfic changes can mess this up (plasmamen)
cig.light("")
diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm
index 8738389ab41d0..14e80f65ea9c4 100644
--- a/code/modules/jobs/job_types/station_engineer.dm
+++ b/code/modules/jobs/job_types/station_engineer.dm
@@ -31,6 +31,7 @@
mail_goodies = list(
/obj/item/storage/box/lights/mixed = 20,
/obj/item/lightreplacer = 10,
+ /obj/item/spess_knife = 10,
/obj/item/holosign_creator/engineering = 8,
/obj/item/wrench/bolter = 8,
/obj/item/clothing/head/utility/hardhat/red/upgraded = 1
diff --git a/code/modules/jobs/job_types/station_trait/human_ai.dm b/code/modules/jobs/job_types/station_trait/human_ai.dm
index 2b13e1adae8a0..0768505b66553 100644
--- a/code/modules/jobs/job_types/station_trait/human_ai.dm
+++ b/code/modules/jobs/job_types/station_trait/human_ai.dm
@@ -21,7 +21,7 @@
paycheck = null
paycheck_department = null
- mind_traits = list(DISPLAYS_JOB_IN_BINARY)
+ mind_traits = list(TRAIT_DISPLAY_JOB_IN_BINARY)
liver_traits = list(TRAIT_HUMAN_AI_METABOLISM)
departments_list = list(
diff --git a/code/modules/jobs/job_types/station_trait/veteran_advisor.dm b/code/modules/jobs/job_types/station_trait/veteran_advisor.dm
index 87ad65c2c7a71..6fcb8d94707f5 100644
--- a/code/modules/jobs/job_types/station_trait/veteran_advisor.dm
+++ b/code/modules/jobs/job_types/station_trait/veteran_advisor.dm
@@ -63,7 +63,7 @@
uniform = /obj/item/clothing/under/rank/security/officer/formal
head = /obj/item/clothing/head/soft/veteran
- mask = /obj/item/clothing/mask/cigarette/cigar
+ mask = /obj/item/cigarette/cigar
suit = /obj/item/clothing/suit/jacket/trenchcoat
belt = /obj/item/storage/belt/holster/detective/full/ert //M1911 pistol
ears = /obj/item/radio/headset/heads/hos/advisor
diff --git a/code/modules/library/bibles.dm b/code/modules/library/bibles.dm
index 8c2ad28feadf8..39abe7baa509b 100644
--- a/code/modules/library/bibles.dm
+++ b/code/modules/library/bibles.dm
@@ -310,25 +310,12 @@ GLOBAL_LIST_INIT(bibleitemstates, list(
if(.)
return .
- if(istype(bible_smacked, /obj/item/cult_bastard) && !IS_CULTIST(user))
- var/obj/item/cult_bastard/sword = bible_smacked
- bible_smacked.balloon_alert(user, "exorcising...")
+ if(istype(bible_smacked, /obj/item/melee/cultblade/haunted) && !IS_CULTIST(user))
+ var/obj/item/melee/cultblade/haunted/sword = bible_smacked
+ sword.balloon_alert(user, "exorcising...")
playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,TRUE)
if(do_after(user, 4 SECONDS, target = sword))
playsound(src,'sound/effects/pray_chaplain.ogg',60,TRUE)
- for(var/obj/item/soulstone/stone in sword.contents)
- stone.required_role = null
- for(var/mob/living/basic/shade/shade in stone)
- var/datum/antagonist/cult/cultist = shade.mind.has_antag_datum(/datum/antagonist/cult)
- if(cultist)
- cultist.silent = TRUE
- cultist.on_removal()
- SSblackbox.record_feedback("tally", "cult_shade_purified", 1)
- shade.theme = THEME_HOLY
- shade.name = "Purified [shade.real_name]"
- shade.update_appearance(UPDATE_ICON_STATE)
- stone.release_shades(user)
- qdel(stone)
new /obj/item/nullrod/claymore(get_turf(sword))
user.visible_message(span_notice("[user] exorcises [sword]!"))
qdel(sword)
diff --git a/code/modules/library/book.dm b/code/modules/library/book.dm
index 19b65f82489ea..5ae9afcdcbe49 100644
--- a/code/modules/library/book.dm
+++ b/code/modules/library/book.dm
@@ -101,7 +101,7 @@
if(burn_paper_product_attackby_check(attacking_item, user))
return
- if(istype(attacking_item, /obj/item/pen))
+ if(IS_WRITING_UTENSIL(attacking_item))
if(!user.can_perform_action(src) || !user.can_write(attacking_item))
return
if(user.is_blind())
diff --git a/code/modules/library/bookcase.dm b/code/modules/library/bookcase.dm
index 822e4ae583c97..16925dd5138e7 100644
--- a/code/modules/library/bookcase.dm
+++ b/code/modules/library/bookcase.dm
@@ -130,7 +130,7 @@
atom_storage.attempt_remove(T, src)
to_chat(user, span_notice("You empty \the [I] into \the [src]."))
update_appearance()
- else if(istype(I, /obj/item/pen))
+ else if(IS_WRITING_UTENSIL(I))
if(!user.can_perform_action(src) || !user.can_write(I))
return
var/newname = tgui_input_text(user, "What would you like to title this bookshelf?", "Bookshelf Renaming", max_length = MAX_NAME_LEN)
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index 2a4137da0c8a0..a65159a3f8225 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -688,11 +688,22 @@ GLOBAL_VAR_INIT(library_table_modified, 0)
icon = 'icons/obj/service/library.dmi'
icon_state = "bigscanner"
desc = "It's an industrial strength book scanner. Perfect!"
+ circuit = /obj/item/circuitboard/machine/libraryscanner
density = TRUE
var/obj/item/book/held_book
///Our scanned-in book
var/datum/book_info/cache
+/obj/machinery/libraryscanner/screwdriver_act(mob/living/user, obj/item/tool)
+ . = ..()
+ if(default_deconstruction_screwdriver(user, "bigscanner2", "bigscanner", tool))
+ return ITEM_INTERACT_SUCCESS
+
+/obj/machinery/libraryscanner/crowbar_act(mob/living/user, obj/item/tool)
+ . = ..()
+ if(default_deconstruction_crowbar(tool))
+ return ITEM_INTERACT_SUCCESS
+
/obj/machinery/libraryscanner/Destroy()
held_book = null
cache = null
@@ -760,6 +771,7 @@ GLOBAL_VAR_INIT(library_table_modified, 0)
icon = 'icons/obj/service/library.dmi'
icon_state = "binder"
desc = "Only intended for binding paper products."
+ circuit = /obj/item/circuitboard/machine/bookbinder
density = TRUE
/// Are we currently binding a book?
@@ -768,10 +780,15 @@ GLOBAL_VAR_INIT(library_table_modified, 0)
/// Name of the author for the book, set by scanning your ID.
var/scanned_name
-/obj/machinery/bookbinder/wrench_act(mob/living/user, obj/item/tool)
+/obj/machinery/bookbinder/screwdriver_act(mob/living/user, obj/item/tool)
+ . = ..()
+ if(default_deconstruction_screwdriver(user, "binder2", "binder", tool))
+ return ITEM_INTERACT_SUCCESS
+
+/obj/machinery/bookbinder/crowbar_act(mob/living/user, obj/item/tool)
. = ..()
- default_unfasten_wrench(user, tool)
- return ITEM_INTERACT_SUCCESS
+ if(default_deconstruction_crowbar(tool))
+ return ITEM_INTERACT_SUCCESS
/obj/machinery/bookbinder/attackby(obj/hitby, mob/user, params)
if(istype(hitby, /obj/item/paper))
diff --git a/code/modules/mafia/outfits.dm b/code/modules/mafia/outfits.dm
index dc2d384b263f6..3b805bd92f9c0 100644
--- a/code/modules/mafia/outfits.dm
+++ b/code/modules/mafia/outfits.dm
@@ -64,7 +64,7 @@
suit = /obj/item/clothing/suit/jacket/det_suit
gloves = /obj/item/clothing/gloves/color/black
head = /obj/item/clothing/head/fedora/det_hat
- mask = /obj/item/clothing/mask/cigarette
+ mask = /obj/item/cigarette
/datum/outfit/mafia/psychologist
name = "Mafia Psychologist"
@@ -155,7 +155,7 @@
suit = /obj/item/clothing/suit/apron
/datum/outfit/mafia/obsessed/post_equip(mob/living/carbon/human/H)
- for(var/obj/item/carried_item in H.get_equipped_items(include_pockets = TRUE, include_accessories = TRUE))
+ for(var/obj/item/carried_item in H.get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES))
carried_item.add_mob_blood(H)//Oh yes, there will be blood...
H.regenerate_icons()
diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm
index 3bb1fb48e599a..4aecd64aa1699 100644
--- a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm
+++ b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm
@@ -209,7 +209,7 @@
new /obj/item/clothing/glasses/science(src)
if(7)
new /obj/item/clothing/glasses/sunglasses/big(src)
- new /obj/item/clothing/mask/cigarette/rollie(src)
+ new /obj/item/cigarette/rollie(src)
else
//empty grave
return
@@ -289,7 +289,7 @@
deconstruct(TRUE)
return TRUE
-/obj/structure/closet/crate/grave/container_resist_act(mob/living/user)
+/obj/structure/closet/crate/grave/container_resist_act(mob/living/user, loc_required = TRUE)
if(opened)
return
// The player is trying to dig themselves out of an early grave
diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm
index f30074326fdf8..e59b04e6c7efa 100644
--- a/code/modules/mapping/mapping_helpers.dm
+++ b/code/modules/mapping/mapping_helpers.dm
@@ -563,17 +563,17 @@
if(!mapload)
log_mapping("[src] spawned outside of mapload!")
return INITIALIZE_HINT_QDEL
- check_validity()
- return INITIALIZE_HINT_QDEL
+ return INITIALIZE_HINT_LATELOAD
-/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch/proc/check_validity()
+/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch/LateInitialize()
var/area/needed_area = get_area(src)
if(!needed_area.lightswitch)
stack_trace("[src] at [AREACOORD(src)] [(needed_area.type)] tried to turn lights off but they are already off!")
var/obj/machinery/light_switch/light_switch = locate(/obj/machinery/light_switch) in needed_area
if(!light_switch)
- stack_trace("Trying to turn off lights with lightswitch in area without lightswitches. In [(needed_area.type)] to be precise.")
- needed_area.lightswitch = FALSE
+ CRASH("Trying to turn off lights with lightswitch in area without lightswitches. In [(needed_area.type)] to be precise.")
+ light_switch.set_lights(FALSE)
+ qdel(src)
//needs to do its thing before spawn_rivers() is called
INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava)
diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm
index fa15060d282a9..40cb967d3a0ab 100644
--- a/code/modules/mining/abandoned_crates.dm
+++ b/code/modules/mining/abandoned_crates.dm
@@ -141,7 +141,7 @@
new /obj/item/lighter(src)
new /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium(src)
for(var/i in 1 to 3)
- new /obj/item/clothing/mask/cigarette/rollie(src)
+ new /obj/item/cigarette/rollie(src)
if(6 to 10)
new /obj/item/melee/skateboard/pro(src)
if(11 to 15)
diff --git a/code/modules/mining/equipment/grapple_gun.dm b/code/modules/mining/equipment/grapple_gun.dm
index 6a8b2ec305328..4e61b5d0fb3fd 100644
--- a/code/modules/mining/equipment/grapple_gun.dm
+++ b/code/modules/mining/equipment/grapple_gun.dm
@@ -2,7 +2,7 @@
/obj/item/grapple_gun
name = "grapple gun"
- desc = "A handy tool for traversing the land-scape of lava-land!"
+ desc = "A small specialised airgun capable of launching a climbing hook into a distant rock face and pulling the user toward it via motorised zip-line. A handy tool for traversing the craggy landscape of lavaland!"
icon = 'icons/obj/mining.dmi'
icon_state = "grapple_gun"
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm
index 9cbc516697808..1e4e444861155 100644
--- a/code/modules/mining/lavaland/ash_flora.dm
+++ b/code/modules/mining/lavaland/ash_flora.dm
@@ -311,7 +311,7 @@
product = /obj/item/food/grown/ash_flora/shavings
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance)
growing_icon = 'icons/obj/service/hydroponics/growing_mushrooms.dmi'
- reagents_add = list(/datum/reagent/consumable/nutriment = 0.04, /datum/reagent/consumable/sugar = 0.06, /datum/reagent/consumable/ethanol = 0.04, /datum/reagent/stabilizing_agent = 0.06, /datum/reagent/consumable/mintextract = 0.02)
+ reagents_add = list(/datum/reagent/consumable/nutriment = 0.04, /datum/reagent/consumable/ethanol = 0.04, /datum/reagent/stabilizing_agent = 0.06, /datum/reagent/consumable/mintextract = 0.02)
/obj/item/seeds/lavaland/porcini
name = "pack of porcini mycelium"
@@ -322,7 +322,7 @@
product = /obj/item/food/grown/ash_flora/mushroom_leaf
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance)
growing_icon = 'icons/obj/service/hydroponics/growing_mushrooms.dmi'
- reagents_add = list(/datum/reagent/consumable/nutriment = 0.06, /datum/reagent/consumable/vitfro = 0.04, /datum/reagent/drug/nicotine = 0.04)
+ reagents_add = list(/datum/reagent/consumable/nutriment = 0.06, /datum/reagent/consumable/sugar = 0.06, /datum/reagent/consumable/vitfro = 0.04, /datum/reagent/drug/nicotine = 0.04)
/obj/item/seeds/lavaland/inocybe
name = "pack of inocybe mycelium"
diff --git a/code/modules/mining/lavaland/megafauna_loot.dm b/code/modules/mining/lavaland/megafauna_loot.dm
index f4ae3548fa659..0bbf15352318d 100644
--- a/code/modules/mining/lavaland/megafauna_loot.dm
+++ b/code/modules/mining/lavaland/megafauna_loot.dm
@@ -755,7 +755,7 @@
"wings" = "None",
"frills" = "None",
"spines" = "Long",
- "body_markings" = "Dark Tiger Body",
+ "lizard_markings" = "Dark Tiger Body",
"legs" = DIGITIGRADE_LEGS,
)
consumer.eye_color_left = "#FEE5A3"
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 556a959e4f8eb..1a7b362ec2e73 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -693,8 +693,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
//this is called when a ghost is drag clicked to something.
/mob/dead/observer/mouse_drop_dragged(atom/over, mob/user)
if (isobserver(user) && user.client.holder && (isliving(over) || iscameramob(over)))
- if (user.client.holder.cmd_ghost_drag(src,over))
- return
+ user.client.holder.cmd_ghost_drag(src, over)
/mob/dead/observer/Topic(href, href_list)
..()
@@ -983,9 +982,18 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
game = create_mafia_game()
game.ui_interact(usr)
+/mob/dead/observer/AltClickOn(atom/target)
+ client.loot_panel.open(get_turf(target))
+
+/mob/dead/observer/AltClickSecondaryOn(atom/target)
+ if(client && check_rights_for(client, R_DEBUG))
+ client.toggle_tag_datum(src)
+
/mob/dead/observer/CtrlShiftClickOn(atom/target)
- if(check_rights(R_SPAWN))
- change_mob_type(/mob/living/carbon/human , null, null, TRUE) //always delmob, ghosts shouldn't be left lingering
+ if(isobserver(target) && check_rights(R_SPAWN))
+ var/mob/dead/observer/target_ghost = target
+
+ target_ghost.change_mob_type(/mob/living/carbon/human , null, null, TRUE) //always delmob, ghosts shouldn't be left lingering
/mob/dead/observer/examine(mob/user)
. = ..()
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index b118de06f057a..7a63d0fc8e622 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -290,8 +290,12 @@
/mob/proc/is_holding_items()
return !!locate(/obj/item) in held_items
+/**
+ * Returns a list of all dropped held items.
+ * If none were dropped, returns an empty list.
+ */
/mob/proc/drop_all_held_items()
- . = FALSE
+ . = list()
for(var/obj/item/I in held_items)
. |= dropItemToGround(I)
@@ -319,24 +323,25 @@
/**
* Used to drop an item (if it exists) to the ground.
- * * Will pass as TRUE is successfully dropped, or if there is no item to drop.
- * * Will pass FALSE if the item can not be dropped due to TRAIT_NODROP via doUnEquip()
+ * * Will return null if the item wasn't dropped.
+ * * If it was, returns the item.
* If the item can be dropped, it will be forceMove()'d to the ground and the turf's Entered() will be called.
*/
/mob/proc/dropItemToGround(obj/item/I, force = FALSE, silent = FALSE, invdrop = TRUE)
if (isnull(I))
- return TRUE
+ return
SEND_SIGNAL(src, COMSIG_MOB_DROPPING_ITEM)
- . = doUnEquip(I, force, drop_location(), FALSE, invdrop = invdrop, silent = silent)
+ var/try_uneqip = doUnEquip(I, force, drop_location(), FALSE, invdrop = invdrop, silent = silent)
- if(!. || !I) //ensure the item exists and that it was dropped properly.
+ if(!try_uneqip || !I) //ensure the item exists and that it was dropped properly.
return
if(!(I.item_flags & NO_PIXEL_RANDOM_DROP))
I.pixel_x = I.base_pixel_x + rand(-6, 6)
I.pixel_y = I.base_pixel_y + rand(-6, 6)
I.do_drop_animation(src)
+ return I
//for when the item will be immediately placed in a loc other than the ground
/mob/proc/transferItemToLoc(obj/item/I, newloc = null, force = FALSE, silent = TRUE)
@@ -388,42 +393,51 @@
* Used to return a list of equipped items on a mob; does not include held items (use get_all_gear)
*
* Argument(s):
- * * Optional - include_pockets (TRUE/FALSE), whether or not to include the pockets and suit storage in the returned list
- * * Optional - include_accessories (TRUE/FALSE), whether or not to include the accessories in the returned list
+ * * Optional - include_flags, (see obj.flags.dm) describes which optional things to include or not (pockets, accessories, held items)
*/
-/mob/living/proc/get_equipped_items(include_pockets = FALSE, include_accessories = FALSE)
+/mob/living/proc/get_equipped_items(include_flags = NONE)
var/list/items = list()
for(var/obj/item/item_contents in contents)
if(item_contents.item_flags & IN_INVENTORY)
items += item_contents
- items -= held_items
+ if (!(include_flags & INCLUDE_HELD))
+ items -= held_items
return items
/**
- * Used to return a list of equipped items on a human mob; does not include held items (use get_all_gear)
+ * Used to return a list of equipped items on a human mob; does not by default include held items, see include_flags
*
* Argument(s):
- * * Optional - include_pockets (TRUE/FALSE), whether or not to include the pockets and suit storage in the returned list
- * * Optional - include_accessories (TRUE/FALSE), whether or not to include the accessories in the returned list
+ * * Optional - include_flags, (see obj.flags.dm) describes which optional things to include or not (pockets, accessories, held items)
*/
-/mob/living/carbon/human/get_equipped_items(include_pockets = FALSE, include_accessories = FALSE)
+/mob/living/carbon/human/get_equipped_items(include_flags = NONE)
var/list/items = ..()
- if(!include_pockets)
+ if(!(include_flags & INCLUDE_POCKETS))
items -= list(l_store, r_store, s_store)
- if(include_accessories && w_uniform)
+ if((include_flags & INCLUDE_ACCESSORIES) && w_uniform)
var/obj/item/clothing/under/worn_under = w_uniform
items += worn_under.attached_accessories
return items
+/**
+ * Returns the items that were succesfully unequipped.
+ */
/mob/living/proc/unequip_everything()
var/list/items = list()
- items |= get_equipped_items(include_pockets = TRUE)
+ items |= get_equipped_items(INCLUDE_POCKETS)
+ // In case something isn't actually unequipped somehow
+ var/list/dropped_items = list()
for(var/I in items)
- dropItemToGround(I)
- drop_all_held_items()
-
+ var/return_val = dropItemToGround(I)
+ if(!isitem(return_val))
+ continue
+ dropped_items |= return_val
+ var/return_val = drop_all_held_items()
+ if(islist(return_val))
+ dropped_items |= return_val
+ return dropped_items
/mob/living/carbon/proc/check_obscured_slots(transparent_protection)
var/obscured = NONE
@@ -558,7 +572,7 @@
//GetAllContents that is reasonable and not stupid
/mob/living/proc/get_all_gear()
- var/list/processing_list = get_equipped_items(include_pockets = TRUE, include_accessories = TRUE) + held_items
+ var/list/processing_list = get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES | INCLUDE_HELD)
list_clear_nulls(processing_list) // handles empty hands
var/i = 0
while(i < length(processing_list))
diff --git a/code/modules/mob/living/basic/alien/_alien.dm b/code/modules/mob/living/basic/alien/_alien.dm
index 823ab896c0a22..907d28aaa4187 100644
--- a/code/modules/mob/living/basic/alien/_alien.dm
+++ b/code/modules/mob/living/basic/alien/_alien.dm
@@ -63,7 +63,7 @@
AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_CLAW)
/mob/living/basic/alien/get_butt_sprite()
- return BUTT_SPRITE_XENOMORPH
+ return icon('icons/mob/butts.dmi', BUTT_SPRITE_XENOMORPH)
///Places alien weeds on the turf the mob is currently standing on.
/mob/living/basic/alien/proc/place_weeds()
diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm
index 03dc06dcda549..22ab453226912 100644
--- a/code/modules/mob/living/basic/bots/_bots.dm
+++ b/code/modules/mob/living/basic/bots/_bots.dm
@@ -517,8 +517,8 @@ GLOBAL_LIST_INIT(command_strings, list(
item_to_drop = drop_item
item_to_drop.forceMove(dropzone)
- if(istype(item_to_drop, /obj/item/stock_parts/cell))
- var/obj/item/stock_parts/cell/dropped_cell = item_to_drop
+ if(istype(item_to_drop, /obj/item/stock_parts/power_store/cell))
+ var/obj/item/stock_parts/power_store/cell/dropped_cell = item_to_drop
dropped_cell.charge = 0
dropped_cell.update_appearance()
return
@@ -814,6 +814,11 @@ GLOBAL_LIST_INIT(command_strings, list(
/mob/living/basic/bot/spawn_gibs(drop_bitflags = NONE)
new /obj/effect/gibspawner/robot(drop_location(), src)
+/mob/living/basic/bot/get_hit_area_message(input_area)
+ // we just get hit, there's no complexity for hitting an arm (if it exists) or anything.
+ // we also need to return an empty string as otherwise it would falsely say that we get hit in the chest or something strange like that (bots don't have "chests")
+ return ""
+
/mob/living/basic/bot/proc/on_bot_movement(atom/movable/source, atom/oldloc, dir, forced)
return
diff --git a/code/modules/mob/living/basic/bots/bot_ai.dm b/code/modules/mob/living/basic/bots/bot_ai.dm
index 93d53d6e52183..b7cd5dcabd394 100644
--- a/code/modules/mob/living/basic/bots/bot_ai.dm
+++ b/code/modules/mob/living/basic/bots/bot_ai.dm
@@ -276,3 +276,17 @@
/datum/ai_behavior/bot_search/proc/valid_target(datum/ai_controller/basic_controller/bot/controller, atom/my_target)
return TRUE
+
+///behavior to make our bot talk
+/datum/ai_behavior/bot_speech
+ action_cooldown = 5 SECONDS
+ behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION
+
+/datum/ai_behavior/bot_speech/perform(seconds_per_tick, datum/ai_controller/controller, list/list_to_pick_from, announce_key)
+ var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[announce_key]
+
+ if(isnull(announcement) || !length(list_to_pick_from))
+ return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
+
+ announcement.announce(pick(list_to_pick_from))
+ return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
diff --git a/code/modules/mob/living/basic/bots/firebot/firebot.dm b/code/modules/mob/living/basic/bots/firebot/firebot.dm
new file mode 100644
index 0000000000000..31fa969fa5983
--- /dev/null
+++ b/code/modules/mob/living/basic/bots/firebot/firebot.dm
@@ -0,0 +1,169 @@
+#define FOAM_INTERVAL 5 SECONDS
+
+/mob/living/basic/bot/firebot
+ name = "\improper Firebot"
+ desc = "A little fire extinguishing bot. He looks rather anxious."
+ icon = 'icons/mob/silicon/aibots.dmi'
+ icon_state = "firebot1"
+ light_color = "#8cffc9"
+ light_power = 0.8
+
+ req_one_access = list(ACCESS_ROBOTICS, ACCESS_CONSTRUCTION)
+ radio_key = /obj/item/encryptionkey/headset_eng
+ radio_channel = RADIO_CHANNEL_ENGINEERING
+ bot_type = FIRE_BOT
+ additional_access = /datum/id_trim/job/station_engineer
+ hackables = "fire safety protocols"
+ path_image_color = "#FFA500"
+ possessed_message = "You are a firebot! Protect the station from fires to the best of your ability!"
+ ai_controller = /datum/ai_controller/basic_controller/bot/firebot
+ ///our inbuilt fire extinguisher
+ var/obj/item/extinguisher/internal_ext
+
+ ///Flags firebots use to decide how they function.
+ var/firebot_mode_flags = FIREBOT_EXTINGUISH_PEOPLE | FIREBOT_EXTINGUISH_FLAMES
+ //Selections: FIREBOT_STATIONARY_MODE | FIREBOT_EXTINGUISH_PEOPLE | FIREBOT_EXTINGUISH_FLAMES
+ ///cooldown before we release foam all over
+ COOLDOWN_DECLARE(foam_cooldown)
+
+
+/mob/living/basic/bot/firebot/generate_speak_list()
+ var/static/list/idle_lines = list(
+ FIREBOT_VOICED_NO_FIRES = 'sound/voice/firebot/nofires.ogg',
+ FIREBOT_VOICED_ONLY_YOU = 'sound/voice/firebot/onlyyou.ogg',
+ FIREBOT_VOICED_TEMPERATURE_NOMINAL = 'sound/voice/firebot/tempnominal.ogg',
+ FIREBOT_VOICED_KEEP_COOL = 'sound/voice/firebot/keepitcool.ogg',
+ )
+ var/static/list/fire_detected_lines = list(
+ FIREBOT_VOICED_FIRE_DETECTED = 'sound/voice/firebot/detected.ogg',
+ FIREBOT_VOICED_STOP_DROP = 'sound/voice/firebot/stopdropnroll.ogg',
+ FIREBOT_VOICED_EXTINGUISHING = 'sound/voice/firebot/extinguishing.ogg',
+ )
+ var/static/list/emagged_lines = list(
+ FIREBOT_VOICED_CANDLE_TIP = 'sound/voice/firebot/candle_tip.ogg',
+ FIREBOT_VOICED_ELECTRIC_FIRE = 'sound/voice/firebot/electric_fire_tip.ogg',
+ FIREBOT_VOICED_FUEL_TIP = 'sound/voice/firebot/gasoline_tip.ogg'
+ )
+ ai_controller.set_blackboard_key(BB_FIREBOT_EMAGGED_LINES, emagged_lines)
+ ai_controller.set_blackboard_key(BB_FIREBOT_IDLE_LINES, idle_lines)
+ ai_controller.set_blackboard_key(BB_FIREBOT_FIRE_DETECTED_LINES, fire_detected_lines)
+ return idle_lines + fire_detected_lines
+
+/mob/living/basic/bot/firebot/Initialize(mapload)
+ . = ..()
+ ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT)
+ update_appearance(UPDATE_ICON)
+ var/static/list/things_to_extinguish = typecacheof(list(/mob/living/carbon))
+ ai_controller.set_blackboard_key(BB_FIREBOT_CAN_EXTINGUISH, things_to_extinguish)
+ create_extinguisher()
+ AddElement(/datum/element/atmos_sensitive, mapload)
+
+/mob/living/basic/bot/firebot/Destroy()
+ QDEL_NULL(internal_ext)
+ return ..()
+
+/mob/living/basic/bot/firebot/bot_reset(bypass_ai_reset)
+ . = ..()
+ create_extinguisher()
+
+/mob/living/basic/bot/firebot/proc/create_extinguisher()
+ internal_ext = new /obj/item/extinguisher(src)
+ internal_ext.safety = FALSE
+ internal_ext.precision = TRUE
+ internal_ext.max_water = INFINITY
+ internal_ext.refill()
+
+/mob/living/basic/bot/firebot/melee_attack(atom/attacked_atom, list/modifiers, ignore_cooldown = FALSE)
+ use_extinguisher(attacked_atom)
+
+/mob/living/basic/bot/firebot/RangedAttack(atom/attacked_atom, list/modifiers)
+ use_extinguisher(attacked_atom)
+
+/mob/living/basic/bot/firebot/proc/use_extinguisher(atom/attacked_atom)
+ if(!(bot_mode_flags & BOT_MODE_ON))
+ return
+ spray_water(attacked_atom)
+
+/mob/living/basic/bot/firebot/emag_act(mob/user, obj/item/card/emag/emag_card)
+ . = ..()
+ if(!(bot_access_flags & BOT_COVER_EMAGGED))
+ return
+
+ to_chat(user, span_warning("You enable the very ironically named \"fighting with fire\" mode, and disable the targeting safeties.")) // heheehe. funny
+
+ audible_message(span_danger("[src] buzzes oddly!"))
+ playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+
+ internal_ext.chem = /datum/reagent/clf3 //Refill the internal extinguisher with liquid fire
+ internal_ext.power = 3
+ internal_ext.safety = FALSE
+ internal_ext.precision = FALSE
+ internal_ext.max_water = INFINITY
+ internal_ext.refill()
+ return TRUE
+
+// Variables sent to TGUI
+/mob/living/basic/bot/firebot/ui_data(mob/user)
+ var/list/data = ..()
+ if(!(bot_access_flags & BOT_COVER_LOCKED) || HAS_SILICON_ACCESS(user))
+ data["custom_controls"]["extinguish_fires"] = firebot_mode_flags & FIREBOT_EXTINGUISH_FLAMES
+ data["custom_controls"]["extinguish_people"] = firebot_mode_flags & FIREBOT_EXTINGUISH_PEOPLE
+ data["custom_controls"]["stationary_mode"] = firebot_mode_flags & FIREBOT_STATIONARY_MODE
+ return data
+
+// Actions received from TGUI
+/mob/living/basic/bot/firebot/ui_act(action, params)
+ . = ..()
+ if(. || (bot_access_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(usr)))
+ return
+
+ switch(action)
+ if("extinguish_fires")
+ firebot_mode_flags ^= FIREBOT_EXTINGUISH_FLAMES
+ if("extinguish_people")
+ firebot_mode_flags ^= FIREBOT_EXTINGUISH_PEOPLE
+ if("stationary_mode")
+ firebot_mode_flags ^= FIREBOT_STATIONARY_MODE
+ update_appearance()
+
+/mob/living/basic/bot/firebot/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
+ return (exposed_temperature > T0C + 200 || exposed_temperature < BODYTEMP_COLD_DAMAGE_LIMIT)
+
+/mob/living/basic/bot/firebot/atmos_expose(datum/gas_mixture/air, exposed_temperature)
+ if(!COOLDOWN_FINISHED(src, foam_cooldown))
+ return
+ var/datum/effect_system/fluid_spread/foam/firefighting/foam = new
+ foam.set_up(3, holder = src, location = loc)
+ foam.start()
+ COOLDOWN_START(src, foam_cooldown, FOAM_INTERVAL)
+
+/mob/living/basic/bot/firebot/proc/spray_water(atom/attacked_atom)
+ if(firebot_mode_flags & FIREBOT_STATIONARY_MODE)
+ flick("firebots_use", src)
+ else
+ flick("firebot1_use", src)
+ internal_ext?.melee_attack_chain(src, attacked_atom)
+
+/mob/living/basic/bot/firebot/update_icon_state()
+ . = ..()
+ if(!(bot_mode_flags & BOT_MODE_ON))
+ icon_state = "firebot0"
+ return
+ if(IsStun() || IsParalyzed() || (firebot_mode_flags & FIREBOT_STATIONARY_MODE)) //Bot has yellow light to indicate stationary mode.
+ icon_state = "firebots1"
+ return
+ icon_state = "firebot1"
+
+/mob/living/basic/bot/firebot/explode()
+ var/turf/my_turf = drop_location()
+
+ new /obj/item/assembly/prox_sensor(my_turf)
+ new /obj/item/clothing/head/utility/hardhat/red(my_turf)
+
+ if(isopenturf(my_turf))
+ var/turf/open/open_turf = my_turf
+ open_turf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS)
+
+ return ..()
+
+#undef FOAM_INTERVAL
diff --git a/code/modules/mob/living/basic/bots/firebot/firebot_ai.dm b/code/modules/mob/living/basic/bots/firebot/firebot_ai.dm
new file mode 100644
index 0000000000000..31127ecdfb4e7
--- /dev/null
+++ b/code/modules/mob/living/basic/bots/firebot/firebot_ai.dm
@@ -0,0 +1,132 @@
+#define ANNOUNCEMENT_TIMER 10 SECONDS
+
+/datum/ai_controller/basic_controller/bot/firebot
+ blackboard = list(
+ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_turfs,
+ BB_UNREACHABLE_LIST_COOLDOWN = 45 SECONDS,
+ )
+ planning_subtrees = list(
+ /datum/ai_planning_subtree/respond_to_summon,
+ /datum/ai_planning_subtree/manage_unreachable_list,
+ /datum/ai_planning_subtree/extinguishing_people,
+ /datum/ai_planning_subtree/extinguishing_turfs,
+ /datum/ai_planning_subtree/salute_authority,
+ /datum/ai_planning_subtree/firebot_speech,
+ /datum/ai_planning_subtree/find_patrol_beacon,
+ )
+ reset_keys = list(
+ BB_FIREBOT_EXTINGUISH_TARGET,
+ BB_BEACON_TARGET,
+ BB_PREVIOUS_BEACON_TARGET,
+ BB_BOT_SUMMON_TARGET,
+ )
+ ///cooldown until we announce a fire again
+ COOLDOWN_DECLARE(announcement_cooldown)
+
+/datum/ai_controller/basic_controller/bot/firebot/TryPossessPawn(atom/new_pawn)
+ . = ..()
+ if(. & AI_CONTROLLER_INCOMPATIBLE)
+ return
+ RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_SET(BB_FIREBOT_EXTINGUISH_TARGET), PROC_REF(on_target_found))
+
+///say a silly line whenever we find someone on fire
+/datum/ai_controller/basic_controller/bot/firebot/proc/on_target_found()
+ SIGNAL_HANDLER
+ if(!COOLDOWN_FINISHED(src, announcement_cooldown))
+ return
+
+ var/datum/action/cooldown/bot_announcement/announcement = blackboard[BB_ANNOUNCE_ABILITY]
+ if(isnull(announcement))
+ return
+
+ var/list/lines = blackboard[BB_FIREBOT_FIRE_DETECTED_LINES]
+ if(!length(lines))
+ return
+ INVOKE_ASYNC(announcement, TYPE_PROC_REF(/datum/action/cooldown/bot_announcement, announce), pick(lines))
+ COOLDOWN_START(src, announcement_cooldown, ANNOUNCEMENT_TIMER)
+
+
+///subtree for extinguishing people
+/datum/ai_planning_subtree/extinguishing_people
+
+/datum/ai_planning_subtree/extinguishing_people/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick)
+ if(controller.blackboard_key_exists(BB_FIREBOT_EXTINGUISH_TARGET))
+ controller.queue_behavior(/datum/ai_behavior/basic_melee_attack/interact_once/extinguish, BB_FIREBOT_EXTINGUISH_TARGET, BB_TARGETING_STRATEGY)
+ return SUBTREE_RETURN_FINISH_PLANNING
+
+ var/mob/living/basic/bot/firebot/living_bot = controller.pawn
+ var/range = living_bot.firebot_mode_flags & FIREBOT_STATIONARY_MODE ? 1 : 5
+
+ if(living_bot.firebot_mode_flags & FIREBOT_EXTINGUISH_PEOPLE)
+ controller.queue_behavior(/datum/ai_behavior/bot_search/people_on_fire, BB_FIREBOT_EXTINGUISH_TARGET, controller.blackboard[BB_FIREBOT_CAN_EXTINGUISH], range)
+
+///behavior for finding people on fire
+/datum/ai_behavior/bot_search/people_on_fire
+
+/datum/ai_behavior/bot_search/people_on_fire/valid_target(datum/ai_controller/basic_controller/bot/controller, mob/living/my_target)
+ var/mob/living/basic/bot/living_bot = controller.pawn
+ return (my_target.on_fire || (living_bot.bot_access_flags & BOT_COVER_EMAGGED))
+
+///subtree for finding turfs to extinguish
+/datum/ai_planning_subtree/extinguishing_turfs
+
+/datum/ai_planning_subtree/extinguishing_turfs/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick)
+ if(controller.blackboard_key_exists(BB_FIREBOT_EXTINGUISH_TARGET))
+ return
+
+ var/mob/living/basic/bot/firebot/living_bot = controller.pawn
+ var/should_bypass_blacklist = living_bot.firebot_mode_flags & FIREBOT_STATIONARY_MODE
+
+ if(living_bot.firebot_mode_flags & FIREBOT_EXTINGUISH_FLAMES)
+ controller.queue_behavior(/datum/ai_behavior/search_burning_turfs, BB_FIREBOT_EXTINGUISH_TARGET, should_bypass_blacklist)
+
+///behavior to find burning turfs
+/datum/ai_behavior/search_burning_turfs
+ action_cooldown = 2 SECONDS
+ behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION
+
+/datum/ai_behavior/search_burning_turfs/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key, bypass_add_blacklist = FALSE)
+ var/mob/living/living_pawn = controller.pawn
+ var/list/ignore_list = controller.blackboard[BB_TEMPORARY_IGNORE_LIST]
+
+ for(var/turf/possible_turf as anything in RANGE_TURFS(5, living_pawn))
+ if(QDELETED(living_pawn))
+ return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
+ if(!isopenturf(possible_turf))
+ continue
+ var/turf/open/open_turf = possible_turf
+ if(!open_turf.active_hotspot)
+ continue
+ if(LAZYACCESS(ignore_list, possible_turf))
+ continue
+ if(controller.set_if_can_reach(target_key, possible_turf, bypass_add_to_blacklist = bypass_add_blacklist))
+ return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
+
+ return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
+
+///behavior to extinguish mobs or turfs
+/datum/ai_behavior/basic_melee_attack/interact_once/extinguish
+
+/datum/ai_behavior/basic_melee_attack/interact_once/extinguish/finish_action(datum/ai_controller/basic_controller/bot/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key)
+ var/atom/target = controller.blackboard[BB_FIREBOT_EXTINGUISH_TARGET]
+ var/mob/living/basic/bot/living_bot = controller.pawn
+
+ //if we couldnt path, or we successfully burnt someone, ignore them for a bit!
+ if(!succeeded || (isliving(target) && (living_bot.bot_access_flags & BOT_COVER_EMAGGED)))
+ controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, target, TRUE)
+
+ return ..()
+
+///subtree to make us say funny idle lines
+/datum/ai_planning_subtree/firebot_speech
+ ///chance we spout lines
+ var/speech_prob = 3
+
+/datum/ai_planning_subtree/firebot_speech/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick)
+ if(controller.blackboard[BB_FIREBOT_EXTINGUISH_TARGET] || !SPT_PROB(speech_prob, seconds_per_tick))
+ return
+ var/mob/living/basic/bot/living_bot = controller.pawn
+ var/list/idle_lines = (living_bot.bot_access_flags & BOT_COVER_EMAGGED) ? controller.blackboard[BB_FIREBOT_EMAGGED_LINES] : controller.blackboard[BB_FIREBOT_IDLE_LINES]
+ controller.queue_behavior(/datum/ai_behavior/bot_speech, idle_lines, BB_ANNOUNCE_ABILITY)
+
+#undef ANNOUNCEMENT_TIMER
diff --git a/code/modules/mob/living/basic/bots/vibebot/vibebot.dm b/code/modules/mob/living/basic/bots/vibebot/vibebot.dm
new file mode 100644
index 0000000000000..c872e1ea5959c
--- /dev/null
+++ b/code/modules/mob/living/basic/bots/vibebot/vibebot.dm
@@ -0,0 +1,30 @@
+/mob/living/basic/bot/vibebot
+ name = "\improper Vibebot"
+ desc = "A little robot. It's just vibing, doing its thing."
+ icon = 'icons/mob/silicon/aibots.dmi'
+ icon_state = "vibebot1"
+ base_icon_state = "vibebot"
+ pass_flags = PASSMOB | PASSFLAPS
+ light_system = OVERLAY_LIGHT
+ light_range = 6
+ ai_controller = /datum/ai_controller/basic_controller/bot/vibebot
+ light_power = 2
+
+ hackables = "vibing scanners"
+ radio_key = /obj/item/encryptionkey/headset_service
+ radio_channel = RADIO_CHANNEL_SERVICE
+ bot_type = VIBE_BOT
+ data_hud_type = DATA_HUD_DIAGNOSTIC_BASIC
+ path_image_color = "#2cac12"
+ possessed_message = "You are a vibebot! Maintain the station's vibes to the best of your ability!"
+
+/mob/living/basic/bot/vibebot/Initialize(mapload)
+ . = ..()
+ var/static/list/innate_actions = list(
+ /datum/action/cooldown/mob_cooldown/bot/vibe = BB_VIBEBOT_PARTY_ABILITY,
+ )
+
+ grant_actions_by_list(innate_actions)
+ var/obj/item/instrument/piano_synth/piano = new(src)
+ ai_controller.set_blackboard_key(BB_SONG_INSTRUMENT, piano)
+ update_appearance(UPDATE_ICON)
diff --git a/code/modules/mob/living/basic/bots/vibebot/vibebot_abilities.dm b/code/modules/mob/living/basic/bots/vibebot/vibebot_abilities.dm
new file mode 100644
index 0000000000000..b3fcec9813b0b
--- /dev/null
+++ b/code/modules/mob/living/basic/bots/vibebot/vibebot_abilities.dm
@@ -0,0 +1,59 @@
+/**
+ * Vibebot's vibe ability
+ *
+ * Given to vibebots so sentient ones can change/reset thier colors at will.
+ */
+#define VIBE_MOOD_TIMER 30 SECONDS
+/datum/action/cooldown/mob_cooldown/bot/vibe
+ name = "Vibe"
+ desc = "Use on yourself to remove color!"
+ click_to_activate = TRUE
+ button_icon = 'icons/mob/actions/actions_minor_antag.dmi'
+ button_icon_state = "funk"
+ ///cooldown to apply a new mood
+ COOLDOWN_DECLARE(change_mood)
+
+/datum/action/cooldown/mob_cooldown/bot/vibe/Grant(mob/granted_to)
+ . = ..()
+ if(isnull(granted_to))
+ return
+ RegisterSignal(granted_to, COMSIG_BOT_RESET, PROC_REF(remove_colors))
+
+/datum/action/cooldown/mob_cooldown/bot/vibe/Activate(atom/target)
+ if(target == owner)
+ remove_colors()
+ return TRUE
+ vibe()
+ StartCooldown()
+ return TRUE
+
+///Gives a random color
+/datum/action/cooldown/mob_cooldown/bot/vibe/proc/vibe()
+ var/mob/living/basic/bot/bot_owner = owner
+ var/final_color = (bot_owner.bot_access_flags & BOT_COVER_EMAGGED) ? COLOR_GRAY : "#[random_color()]"
+ owner.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY)
+ owner.add_atom_colour(final_color, TEMPORARY_COLOUR_PRIORITY)
+ owner.set_light_color(owner.color)
+ if(!COOLDOWN_FINISHED(src, change_mood))
+ return
+ var/mood_to_add = bot_owner.bot_access_flags & BOT_COVER_EMAGGED ? /datum/mood_event/depressing_party : /datum/mood_event/festive_party
+ for(var/mob/living/carbon/human/human_target in oview(1, owner))
+ human_target.add_mood_event("vibebot_party", mood_to_add)
+ COOLDOWN_START(src, change_mood, VIBE_MOOD_TIMER)
+
+///Removes all colors
+/datum/action/cooldown/mob_cooldown/bot/vibe/proc/remove_colors()
+ owner.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY)
+ owner.set_light_color(null)
+
+/datum/mood_event/depressing_party
+ description = "That was a really grim party..."
+ mood_change = -1
+ timeout = 30 SECONDS
+
+/datum/mood_event/festive_party
+ description = "That was a really fantastic party!"
+ mood_change = 2
+ timeout = 30 SECONDS
+
+#undef VIBE_MOOD_TIMER
diff --git a/code/modules/mob/living/basic/bots/vibebot/vibebot_ai.dm b/code/modules/mob/living/basic/bots/vibebot/vibebot_ai.dm
new file mode 100644
index 0000000000000..945b09274d783
--- /dev/null
+++ b/code/modules/mob/living/basic/bots/vibebot/vibebot_ai.dm
@@ -0,0 +1,88 @@
+/datum/ai_controller/basic_controller/bot/vibebot
+ blackboard = list(
+ BB_UNREACHABLE_LIST_COOLDOWN = 2 MINUTES,
+ BB_VIBEBOT_HAPPY_SONG = VIBEBOT_CHEER_SONG,
+ BB_VIBEBOT_GRIM_SONG = VIBEBOT_GRIM_MUSIC,
+ BB_VIBEBOT_BIRTHDAY_SONG = VIBEBOT_HAPPY_BIRTHDAY,
+ )
+ planning_subtrees = list(
+ /datum/ai_planning_subtree/respond_to_summon,
+ /datum/ai_planning_subtree/manage_unreachable_list,
+ /datum/ai_planning_subtree/find_party_friends,
+ /datum/ai_planning_subtree/find_patrol_beacon,
+ )
+ reset_keys = list(
+ BB_BEACON_TARGET,
+ BB_PREVIOUS_BEACON_TARGET,
+ BB_VIBEBOT_PARTY_TARGET,
+ BB_BOT_SUMMON_TARGET,
+ )
+ ai_traits = PAUSE_DURING_DO_AFTER
+
+/datum/ai_controller/basic_controller/bot/vibebot/TryPossessPawn(atom/new_pawn)
+ . = ..()
+ if(. & AI_CONTROLLER_INCOMPATIBLE)
+ return
+ RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_SET(BB_VIBEBOT_PARTY_TARGET), PROC_REF(play_music))
+
+/datum/ai_controller/basic_controller/bot/vibebot/proc/play_music(datum/source, blackboard_key)
+ SIGNAL_HANDLER
+
+ var/mob/living/basic/bot/living_bot = pawn
+ var/obj/item/instrument/instrument = blackboard[BB_SONG_INSTRUMENT]
+ if(isnull(instrument))
+ return
+ var/atom/target = blackboard[blackboard_key]
+ var/datum/song/song = instrument.song
+ song.stop_playing()
+ var/song_lines
+ if(living_bot.bot_access_flags & BOT_COVER_EMAGGED)
+ song_lines = blackboard[BB_VIBEBOT_GRIM_SONG]
+ else
+ song_lines = HAS_TRAIT(target, TRAIT_BIRTHDAY_BOY) ? blackboard[BB_VIBEBOT_BIRTHDAY_SONG] : blackboard[BB_VIBEBOT_HAPPY_SONG]
+ if(isnull(song_lines))
+ return
+ song.ParseSong(new_song = song_lines)
+ song.start_playing(pawn)
+ addtimer(CALLBACK(song, TYPE_PROC_REF(/datum/song, stop_playing)), 10 SECONDS) //in 10 seconds, stop playing music
+
+///subtree we use to find party friends in general
+/datum/ai_planning_subtree/find_party_friends
+
+/datum/ai_planning_subtree/find_party_friends/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
+ var/static/list/type_to_search = typecacheof(list(/mob/living/carbon/human))
+ if(!controller.blackboard_key_exists(BB_VIBEBOT_PARTY_TARGET))
+ controller.queue_behavior(/datum/ai_behavior/bot_search/party_friends, BB_VIBEBOT_PARTY_TARGET, type_to_search)
+ return
+
+ controller.queue_behavior(/datum/ai_behavior/targeted_mob_ability/and_clear_target/vibebot_party, BB_VIBEBOT_PARTY_ABILITY, BB_VIBEBOT_PARTY_TARGET)
+ return SUBTREE_RETURN_FINISH_PLANNING
+
+///behavior we use to party with people
+/datum/ai_behavior/targeted_mob_ability/and_clear_target/vibebot_party
+ behavior_flags = AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_REQUIRE_MOVEMENT
+
+/datum/ai_behavior/targeted_mob_ability/and_clear_target/vibebot_party/setup(datum/ai_controller/controller, ability_key, target_key)
+ . = ..()
+ var/atom/target = controller.blackboard[target_key]
+ if(QDELETED(target))
+ return FALSE
+ set_movement_target(controller, target)
+
+/datum/ai_behavior/targeted_mob_ability/and_clear_target/vibebot_party/finish_action(datum/ai_controller/controller, succeeded, ability_key, target_key)
+ var/atom/target = controller.blackboard[target_key]
+ controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, target, TRUE)
+ if(succeeded)
+ var/mob/living/living_pawn = controller.pawn
+ living_pawn.manual_emote("celebrates with [target]!")
+ living_pawn.emote("flip")
+ return ..()
+
+///behavior that searches for party friends
+/datum/ai_behavior/bot_search/party_friends
+ action_cooldown = 5 SECONDS
+
+/datum/ai_behavior/bot_search/party_friends/valid_target(datum/ai_controller/basic_controller/bot/controller, mob/living/carbon/human/my_target)
+ if(my_target.stat != CONSCIOUS || isnull(my_target.mind))
+ return FALSE
+ return (my_target.mob_mood.mood_level < MOOD_LEVEL_NEUTRAL || HAS_TRAIT(my_target, TRAIT_BIRTHDAY_BOY))
diff --git a/code/modules/mob/living/basic/cult/constructs/_construct.dm b/code/modules/mob/living/basic/cult/constructs/_construct.dm
index 2583b3a88a6b8..79e6e7487721b 100644
--- a/code/modules/mob/living/basic/cult/constructs/_construct.dm
+++ b/code/modules/mob/living/basic/cult/constructs/_construct.dm
@@ -51,10 +51,12 @@
THEME_CULT = list(/obj/item/ectoplasm/construct),
THEME_HOLY = list(/obj/item/ectoplasm/angelic),
THEME_WIZARD = list(/obj/item/ectoplasm/mystic),
+ THEME_HERETIC = list(/obj/item/ectoplasm/construct),
)
/mob/living/basic/construct/Initialize(mapload)
. = ..()
+ throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense)
AddElement(/datum/element/simple_flying)
var/list/remains = string_list(remains_by_theme[theme])
if(length(remains))
diff --git a/code/modules/mob/living/basic/cult/constructs/harvester.dm b/code/modules/mob/living/basic/cult/constructs/harvester.dm
index da8dad827b05c..6d41bb43f26a1 100644
--- a/code/modules/mob/living/basic/cult/constructs/harvester.dm
+++ b/code/modules/mob/living/basic/cult/constructs/harvester.dm
@@ -26,13 +26,16 @@
/mob/living/basic/construct/harvester/Initialize(mapload)
. = ..()
- AddElement(\
- /datum/element/amputating_limbs,\
+ grant_abilities()
+
+/mob/living/basic/construct/harvester/proc/grant_abilities()
+ AddElement(/datum/element/wall_walker, /turf/closed/wall/mineral/cult)
+ AddComponent(\
+ /datum/component/amputating_limbs,\
surgery_time = 0,\
surgery_verb = "slicing",\
minimum_stat = CONSCIOUS,\
)
- AddElement(/datum/element/wall_walker, /turf/closed/wall/mineral/cult)
var/datum/action/innate/seek_prey/seek = new(src)
seek.Grant(src)
seek.Activate()
@@ -59,7 +62,7 @@
overlay_icon_state = "bg_demon_border"
buttontooltipstyle = "cult"
- button_icon = "icons/mob/actions/actions_cult.dmi"
+ button_icon = 'icons/mob/actions/actions_cult.dmi'
button_icon_state = "cult_mark"
/// Where is nar nar? Are we even looking?
var/tracking = FALSE
@@ -93,7 +96,6 @@
the_construct.seeking = TRUE
to_chat(the_construct, span_cult_italic("You are now tracking your master."))
-
/datum/action/innate/seek_prey
name = "Seek the Harvest"
desc = "None can hide from Nar'Sie, activate to track a survivor attempting to flee the red harvest!"
@@ -126,3 +128,115 @@
desc = "Activate to track Nar'Sie!"
button_icon_state = "sintouch"
the_construct.seeking = TRUE
+
+/mob/living/basic/construct/harvester/heretic
+ name = "Rusted Harvester"
+ real_name = "Rusted Harvester"
+ desc = "A long, thin, decrepit construct originally built to herald Nar'Sie's rise, corrupted and rusted by the forces of the Mansus to spread its will instead."
+ icon_state = "harvester"
+ icon_living = "harvester"
+ construct_spells = list(
+ /datum/action/cooldown/spell/aoe/rust_conversion,
+ /datum/action/cooldown/spell/pointed/rust_construction,
+ )
+ can_repair = FALSE
+ slowed_by_drag = FALSE
+ faction = list(FACTION_HERETIC)
+ maxHealth = 35
+ health = 35
+ melee_damage_lower = 20
+ melee_damage_upper = 25
+ // Dim green
+ lighting_cutoff_red = 10
+ lighting_cutoff_green = 20
+ lighting_cutoff_blue = 5
+ playstyle_string = "You are a Rusted Harvester, built to serve the Sanguine Apostate, twisted to work the will of the Mansus. You are fragile and weak, but you rend cultists (only) apart on each attack. Follow your Master's orders!"
+ theme = THEME_HERETIC
+
+/mob/living/basic/construct/harvester/heretic/Initialize(mapload)
+ . = ..()
+ ADD_TRAIT(src, TRAIT_MANSUS_TOUCHED, REF(src))
+ add_filter("rusted_harvester", 3, list("type" = "outline", "color" = COLOR_GREEN, "size" = 2, "alpha" = 40))
+
+
+/**
+ * Somewhat janky proc called when a heretic monster's master dies
+ * Used to kill any living Rusted Harvester
+ */
+/mob/living/proc/on_master_death()
+ return
+
+/mob/living/basic/construct/harvester/heretic/attack_animal(mob/living/simple_animal/user, list/modifiers)
+ // They're pretty fragile so this is probably necessary to prevent bullshit deaths.
+ if(user == src)
+ return
+ return ..()
+
+/mob/living/basic/construct/harvester/heretic/on_master_death()
+ to_chat(src, span_userdanger("Your link to the mansus suddenly snaps as your master perishes! Without its support, your body crumbles..."))
+ visible_message(span_alert("[src] suddenly crumbles to dust!"))
+ death()
+
+/mob/living/basic/construct/harvester/heretic/grant_abilities()
+ AddElement(/datum/element/wall_walker, or_trait = TRAIT_RUSTY)
+ AddElement(/datum/element/leeching_walk)
+ AddComponent(\
+ /datum/component/amputating_limbs,\
+ surgery_time = 1.5 SECONDS,\
+ surgery_verb = "slicing",\
+ minimum_stat = CONSCIOUS,\
+ pre_hit_callback = CALLBACK(src, PROC_REF(is_cultist_handler)),\
+ )
+ AddComponent(/datum/component/damage_aura,\
+ range = 3,\
+ brute_damage = 0.5,\
+ burn_damage = 0.5,\
+ toxin_damage = 0.5,\
+ stamina_damage = 4,\
+ simple_damage = 1.5,\
+ immune_factions = list(FACTION_HERETIC),\
+ damage_message = span_boldwarning("Your body wilts and withers as it comes near [src]'s aura."),\
+ message_probability = 7,\
+ current_owner = src,\
+ )
+ var/datum/action/innate/seek_master/heretic/seek = new(src)
+ seek.Grant(src)
+ seek.Activate()
+
+// These aren't friends they're assholes
+// Don't let them be near you!
+/mob/living/basic/construct/harvester/heretic/Life(seconds_per_tick, times_fired)
+ . = ..()
+ if(!SPT_PROB(7, seconds_per_tick))
+ return
+
+ var/turf/adjacent = get_step(src, pick(GLOB.alldirs))
+ // 90% chance to be directional, otherwise what we're on top of
+ var/turf/open/land = (isopenturf(adjacent) && prob(90)) ? adjacent : get_turf(src)
+ do_rust_heretic_act(land)
+
+ if(prob(7))
+ to_chat(src, span_notice("Eldritch energies emanate from your body."))
+
+/mob/living/basic/construct/harvester/heretic/proc/is_cultist_handler(mob/victim)
+ return IS_CULTIST(victim)
+
+/datum/action/innate/seek_master/heretic
+ name = "Seek your Master"
+ desc = "Use your direct link to the Mansus to sense where your master is located via the arrow on the top-right of your HUD."
+ button_icon = 'icons/mob/actions/actions_cult.dmi'
+ background_icon_state = "bg_heretic"
+ overlay_icon_state = "bg_heretic_border"
+ tracking = TRUE
+
+/datum/action/innate/seek_master/heretic/New(Target)
+ . = ..()
+ the_construct = Target
+ the_construct.seeking = TRUE
+ var/datum/antagonist/heretic_monster/antag = IS_HERETIC_MONSTER(the_construct)
+ if(antag)
+ the_construct.master = antag.master
+
+// no real reason for most of this weird oldcode
+/datum/action/innate/seek_master/Activate()
+ return
diff --git a/code/modules/mob/living/basic/drone/_drone.dm b/code/modules/mob/living/basic/drone/_drone.dm
index ae72054899b11..6501e35d51dc2 100644
--- a/code/modules/mob/living/basic/drone/_drone.dm
+++ b/code/modules/mob/living/basic/drone/_drone.dm
@@ -265,7 +265,7 @@
dust()
/mob/living/basic/drone/get_butt_sprite()
- return BUTT_SPRITE_DRONE
+ return icon('icons/mob/butts.dmi', BUTT_SPRITE_DRONE)
/mob/living/basic/drone/examine(mob/user)
. = list("This is [icon2html(src, user)] \a [src]!")
diff --git a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm
index b2aff7371a426..d1b1aebf9eb00 100644
--- a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm
+++ b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm
@@ -55,13 +55,13 @@
/mob/living/basic/gorilla/Initialize(mapload)
. = ..()
- add_traits(list(TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP), ROUNDSTART_TRAIT)
+ add_traits(list(TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, TRAIT_CHUNKYFINGERS), ROUNDSTART_TRAIT)
AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE)
AddElement(/datum/element/dextrous)
AddElement(/datum/element/footstep, FOOTSTEP_MOB_BAREFOOT)
AddElement(/datum/element/basic_eating, heal_amt = 10, food_types = gorilla_food)
- AddElement(
- /datum/element/amputating_limbs, \
+ AddComponent(
+ /datum/component/amputating_limbs, \
surgery_time = 0 SECONDS, \
surgery_verb = "punches",\
)
diff --git a/code/modules/mob/living/basic/farm_animals/sheep.dm b/code/modules/mob/living/basic/farm_animals/sheep.dm
index 2fdaeda657d5c..5617da83a53a5 100644
--- a/code/modules/mob/living/basic/farm_animals/sheep.dm
+++ b/code/modules/mob/living/basic/farm_animals/sheep.dm
@@ -59,7 +59,7 @@
if(cult_converted)
for(var/mob/living/cultist as anything in invokers)
to_chat(cultist, span_cult_italic("[src] has already been sacrificed!"))
- return STOP_SACRIFICE
+ return STOP_SACRIFICE|SILENCE_SACRIFICE_MESSAGE
for(var/mob/living/cultist as anything in invokers)
to_chat(cultist, span_cult_italic("This feels a bit too cliché, don't you think?"))
diff --git a/code/modules/mob/living/basic/festivus_pole.dm b/code/modules/mob/living/basic/festivus_pole.dm
index 838674c081124..1c1a88dd31fe5 100644
--- a/code/modules/mob/living/basic/festivus_pole.dm
+++ b/code/modules/mob/living/basic/festivus_pole.dm
@@ -68,8 +68,8 @@
return
visible_message(span_warning("[src] crackles with static electricity!"))
for(var/atom/affected in range(2, get_turf(src)))
- if(istype(affected, /obj/item/stock_parts/cell))
- var/obj/item/stock_parts/cell/cell = affected
+ if(istype(affected, /obj/item/stock_parts/power_store/cell))
+ var/obj/item/stock_parts/power_store/cell/cell = affected
cell.give(FESTIVUS_RECHARGE_VALUE)
cell.update_appearance()
if(istype(affected, /mob/living/silicon/robot))
@@ -112,7 +112,7 @@
var/obj/machinery/power/apc/apc_target = dinner
if(!apc_target.cell)
return FALSE
- var/obj/item/stock_parts/cell/apc_cell = apc_target.cell
+ var/obj/item/stock_parts/power_store/cell/apc_cell = apc_target.cell
if(apc_cell.charge == apc_cell.maxcharge) //if its full charge we no longer feed it
return FALSE
diff --git a/code/modules/mob/living/basic/guardian/guardian_types/support.dm b/code/modules/mob/living/basic/guardian/guardian_types/support.dm
index 3b5574db7f37a..8ab24b7e9b7d1 100644
--- a/code/modules/mob/living/basic/guardian/guardian_types/support.dm
+++ b/code/modules/mob/living/basic/guardian/guardian_types/support.dm
@@ -103,10 +103,12 @@
/// Try and teleport something to our beacon
/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/proc/try_teleporting(mob/living/source, atom/target)
SIGNAL_HANDLER
+
if (!can_teleport(source, target))
return
+
INVOKE_ASYNC(src, PROC_REF(perform_teleport), source, target)
- return COMPONENT_CANCEL_ATTACK_CHAIN
+ return COMSIG_MOB_CANCEL_CLICKON
/// Validate whether we can teleport this object
/datum/action/cooldown/mob_cooldown/guardian_bluespace_beacon/proc/can_teleport(mob/living/source, atom/movable/target)
@@ -118,7 +120,7 @@
if (!guardian_mob.is_deployed())
source.balloon_alert(source, "manifest yourself!")
return FALSE
- if (!source.Adjacent(target))
+ if (!source.can_perform_action(target))
target.balloon_alert(source, "too far!")
return FALSE
if (target.anchored)
diff --git a/code/modules/mob/living/basic/heretic/flesh_worm.dm b/code/modules/mob/living/basic/heretic/flesh_worm.dm
index 3c60a9b653c32..92b910c717fae 100644
--- a/code/modules/mob/living/basic/heretic/flesh_worm.dm
+++ b/code/modules/mob/living/basic/heretic/flesh_worm.dm
@@ -35,8 +35,8 @@
/mob/living/basic/heretic_summon/armsy/Initialize(mapload, spawn_bodyparts = TRUE, worm_length = 6)
. = ..()
AddElement(/datum/element/wall_smasher, ENVIRONMENT_SMASH_RWALLS)
- AddElement(\
- /datum/element/amputating_limbs,\
+ AddComponent(\
+ /datum/component/amputating_limbs,\
surgery_time = 0 SECONDS,\
surgery_verb = "tears",\
minimum_stat = CONSCIOUS,\
diff --git a/code/modules/mob/living/basic/heretic/rust_walker.dm b/code/modules/mob/living/basic/heretic/rust_walker.dm
index 24b77d4d0b8e0..230747efa5a3b 100644
--- a/code/modules/mob/living/basic/heretic/rust_walker.dm
+++ b/code/modules/mob/living/basic/heretic/rust_walker.dm
@@ -19,7 +19,7 @@
AddElement(/datum/element/footstep, FOOTSTEP_MOB_RUST)
var/static/list/grantable_spells = list(
- /datum/action/cooldown/spell/aoe/rust_conversion/small = BB_GENERIC_ACTION,
+ /datum/action/cooldown/spell/aoe/rust_conversion = BB_GENERIC_ACTION,
/datum/action/cooldown/spell/basic_projectile/rust_wave/short = BB_TARGETED_ACTION,
)
grant_actions_by_list(grantable_spells)
diff --git a/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm b/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm
index f0809d2ec86da..423a33bb4767a 100644
--- a/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm
+++ b/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm
@@ -7,7 +7,12 @@
BB_BASIC_MOB_FLEE_DISTANCE = 30,
BB_VISION_RANGE = 9,
BB_TARGET_MINIMUM_STAT = HARD_CRIT,
- BB_REINFORCEMENTS_EMOTE = "unleashes a chilling howl, calling for aid!"
+ BB_REINFORCEMENTS_EMOTE = "unleashes a chilling howl, calling for aid!",
+ BB_OWNER_SELF_HARM_RESPONSES = list(
+ "*me howls in dissaproval.",
+ "*me whines sadly.",
+ "*me attempts to take your hand in its mouth."
+ )
)
ai_movement = /datum/ai_movement/basic_avoidance
diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm
index ccab4d3c0317e..ad10e30acecd7 100644
--- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm
+++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm
@@ -43,8 +43,8 @@
AddElement(/datum/element/mob_grabber)
AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW)
AddElement(/datum/element/basic_eating, food_types = target_foods)
- AddElement(\
- /datum/element/amputating_limbs,\
+ AddComponent(\
+ /datum/component/amputating_limbs,\
surgery_verb = "begins snipping",\
target_zones = GLOB.arm_zones,\
)
diff --git a/code/modules/mob/living/basic/lavaland/mining.dm b/code/modules/mob/living/basic/lavaland/mining.dm
index 3bcdd1ceaa64b..38591dfb39c06 100644
--- a/code/modules/mob/living/basic/lavaland/mining.dm
+++ b/code/modules/mob/living/basic/lavaland/mining.dm
@@ -5,7 +5,7 @@
status_flags = NONE //don't inherit standard basicmob flags
mob_size = MOB_SIZE_LARGE
mob_biotypes = MOB_ORGANIC|MOB_BEAST
- faction = list(FACTION_MINING)
+ faction = list(FACTION_MINING, FACTION_ASHWALKER)
unsuitable_atmos_damage = 0
minimum_survivable_temperature = 0
maximum_survivable_temperature = INFINITY
@@ -42,3 +42,11 @@
drop_mod = crusher_drop_chance,\
drop_immediately = basic_mob_flags & DEL_ON_DEATH,\
)
+ RegisterSignal(src, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(check_ashwalker_peace_violation))
+
+/mob/living/basic/mining/proc/check_ashwalker_peace_violation(datum/source, mob/living/carbon/human/possible_ashwalker)
+ SIGNAL_HANDLER
+
+ if(!isashwalker(possible_ashwalker) || !(FACTION_ASHWALKER in faction))
+ return
+ faction.Remove(FACTION_ASHWALKER)
diff --git a/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm b/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm
index d2b282f5b6235..8cd3c567a7d2d 100644
--- a/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm
+++ b/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm
@@ -83,7 +83,7 @@ GLOBAL_LIST_EMPTY(raptor_population)
var/static/list/display_emote = list(
BB_EMOTE_SAY = list("Chirp chirp chirp!", "Kweh!", "Bwark!"),
- BB_EMOTE_SEE = list("shakes its feathers!", "stretches!", "flaps it's wings!", "pecks at the ground!"),
+ BB_EMOTE_SEE = list("shakes its feathers!", "stretches!", "flaps its wings!", "pecks at the ground!"),
BB_EMOTE_SOUND = list(
'sound/creatures/raptor_1.ogg',
'sound/creatures/raptor_2.ogg',
diff --git a/code/modules/mob/living/basic/minebots/minebot_ai.dm b/code/modules/mob/living/basic/minebots/minebot_ai.dm
index 959049f957d73..62aeaf3aa7923 100644
--- a/code/modules/mob/living/basic/minebots/minebot_ai.dm
+++ b/code/modules/mob/living/basic/minebots/minebot_ai.dm
@@ -9,6 +9,13 @@
BB_MINEBOT_AUTO_DEFEND = TRUE,
BB_BLACKLIST_MINERAL_TURFS = list(/turf/closed/mineral/gibtonite),
BB_AUTOMATED_MINING = FALSE,
+ BB_OWNER_SELF_HARM_RESPONSES = list(
+ "Please stop hurting yourself.",
+ "There is no need to do that.",
+ "Your actions are illogical.",
+ "Please make better choices.",
+ "Remember, you have beaten your worst days before."
+ )
)
ai_movement = /datum/ai_movement/basic_avoidance
diff --git a/code/modules/mob/living/basic/slime/life.dm b/code/modules/mob/living/basic/slime/life.dm
index 68cd33ce7750b..d101b48fea7a1 100644
--- a/code/modules/mob/living/basic/slime/life.dm
+++ b/code/modules/mob/living/basic/slime/life.dm
@@ -36,10 +36,10 @@
///Handles the consumption of nutrition, and growth
/mob/living/basic/slime/proc/handle_nutrition(seconds_per_tick = SSMOBS_DT)
if(hunger_disabled) //God as my witness, I will never go hungry again
- set_nutrition(700)
+ set_nutrition(100)
return
- if(SPT_PROB(7.5, seconds_per_tick))
+ if(SPT_PROB(1.25, seconds_per_tick))
adjust_nutrition((life_stage == SLIME_LIFE_STAGE_ADULT ? -1 : -0.5) * seconds_per_tick)
if(nutrition < SLIME_STARVE_NUTRITION)
@@ -63,7 +63,7 @@
if (SLIME_GROW_NUTRITION <= nutrition)
if(amount_grown < SLIME_EVOLUTION_THRESHOLD)
- adjust_nutrition(-10 * seconds_per_tick)
+ adjust_nutrition(-2.5 * seconds_per_tick)
amount_grown++
if(powerlevel < SLIME_MAX_POWER && SPT_PROB(30-powerlevel*2, seconds_per_tick))
diff --git a/code/modules/mob/living/basic/slime/slime.dm b/code/modules/mob/living/basic/slime/slime.dm
index 4864cb82016a7..fa40ac28d816d 100644
--- a/code/modules/mob/living/basic/slime/slime.dm
+++ b/code/modules/mob/living/basic/slime/slime.dm
@@ -187,6 +187,8 @@
/mob/living/basic/slime/regenerate_icons()
cut_overlays()
+ if(slime_type.transparent)
+ alpha = SLIME_TRANSPARENCY_ALPHA
var/icon_text = "[slime_type.colour]-[life_stage]"
icon_dead = "[icon_text]-dead"
if(stat != DEAD)
diff --git a/code/modules/mob/living/basic/slime/slime_type.dm b/code/modules/mob/living/basic/slime/slime_type.dm
index 11f3798804017..048f861eeb08a 100644
--- a/code/modules/mob/living/basic/slime/slime_type.dm
+++ b/code/modules/mob/living/basic/slime/slime_type.dm
@@ -1,6 +1,8 @@
/datum/slime_type
///Our slime's colour as text. Used by both description, and icon
var/colour
+ ///Whether the slime icons should be semi-transparent
+ var/transparent = FALSE
///The type our slime spawns
var/core_type
///The possible mutations of our slime
@@ -12,6 +14,7 @@
/datum/slime_type/grey
colour = SLIME_TYPE_GREY
+ transparent = TRUE
core_type = /obj/item/slime_extract/grey
mutations = list(
/datum/slime_type/blue = 1,
@@ -21,11 +24,11 @@
)
rgb_code = COLOR_SLIME_GREY
-
//TIER 1
/datum/slime_type/blue
colour = SLIME_TYPE_BLUE
+ transparent = TRUE
core_type = /obj/item/slime_extract/blue
mutations = list(
/datum/slime_type/darkblue = 1,
@@ -46,6 +49,7 @@
/datum/slime_type/purple
colour = SLIME_TYPE_PURPLE
+ transparent = TRUE
core_type = /obj/item/slime_extract/purple
mutations = list(
/datum/slime_type/darkblue = 1,
@@ -56,6 +60,7 @@
/datum/slime_type/orange
colour = SLIME_TYPE_ORANGE
+ transparent = TRUE
core_type = /obj/item/slime_extract/orange
mutations = list(
/datum/slime_type/darkpurple = 1,
@@ -68,6 +73,7 @@
/datum/slime_type/darkblue
colour = SLIME_TYPE_DARK_BLUE
+ transparent = TRUE
core_type = /obj/item/slime_extract/darkblue
mutations = list(
/datum/slime_type/blue = 1,
@@ -98,6 +104,7 @@
/datum/slime_type/yellow
colour = SLIME_TYPE_YELLOW
+ transparent = TRUE
core_type = /obj/item/slime_extract/yellow
mutations = list(
/datum/slime_type/bluespace = 2,
@@ -119,6 +126,7 @@
/datum/slime_type/cerulean
colour = SLIME_TYPE_CERULEAN
+ transparent = TRUE
core_type = /obj/item/slime_extract/cerulean
mutations = list(
/datum/slime_type/cerulean = 1,
@@ -135,6 +143,7 @@
/datum/slime_type/sepia
colour = SLIME_TYPE_SEPIA
+ transparent = TRUE
core_type = /obj/item/slime_extract/sepia
mutations = list(
/datum/slime_type/sepia = 1,
@@ -154,6 +163,7 @@
/datum/slime_type/green
colour = SLIME_TYPE_GREEN
+ transparent = TRUE
core_type = /obj/item/slime_extract/green
mutations = list(
/datum/slime_type/black = 1,
@@ -163,6 +173,7 @@
/datum/slime_type/pink
colour = SLIME_TYPE_PINK
+ transparent = TRUE
core_type = /obj/item/slime_extract/pink
mutations = list(
/datum/slime_type/lightpink = 1,
@@ -172,6 +183,7 @@
/datum/slime_type/red
colour = SLIME_TYPE_RED
+ transparent = TRUE
core_type = /obj/item/slime_extract/red
mutations = list(
/datum/slime_type/oil = 1,
@@ -191,6 +203,7 @@
/datum/slime_type/black
colour = SLIME_TYPE_BLACK
+ transparent = TRUE
core_type = /obj/item/slime_extract/black
mutations = list(
/datum/slime_type/black = 1,
@@ -199,6 +212,7 @@
/datum/slime_type/lightpink
colour = SLIME_TYPE_LIGHT_PINK
+ transparent = TRUE
core_type = /obj/item/slime_extract/lightpink
mutations = list(
/datum/slime_type/lightpink = 1,
@@ -217,6 +231,7 @@
/datum/slime_type/rainbow
colour = SLIME_TYPE_RAINBOW
+ transparent = TRUE
core_type = /obj/item/slime_extract/rainbow
mutations = list(
/datum/slime_type/rainbow = 1,
diff --git a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm
index d2b5edc58cced..a154ba9da0c65 100644
--- a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm
+++ b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm
@@ -150,6 +150,10 @@
update_appearance(UPDATE_ICON)
update_health_hud()
+/mob/living/basic/revenant/AltClickOn(atom/target)
+ if(CAN_I_SEE(target))
+ client.loot_panel.open(get_turf(target))
+
/mob/living/basic/revenant/get_status_tab_items()
. = ..()
. += "Current Essence: [essence >= max_essence ? essence : "[essence] / [max_essence]"] E"
@@ -281,7 +285,7 @@
/mob/living/basic/revenant/gib()
death()
-/mob/living/basic/revenant/can_perform_action(atom/movable/target, action_bitflags)
+/mob/living/basic/revenant/can_perform_action(atom/target, action_bitflags)
return FALSE
/mob/living/basic/revenant/ex_act(severity, target)
diff --git a/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm
index be31e121249a6..1776e69358139 100644
--- a/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm
+++ b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm
@@ -4,7 +4,7 @@
#define DOAFTER_SOURCE_SPACE_DRAGON_INTERACTION "space dragon interaction"
/**
- * Advanced stage of the space carp life cycle, spawned as a midround antagonist or via traitor transformation.
+ * Advanced stage of the space carp life cycle, spawned as a midround antagonist
* Can eat corpses to heal, blow people back with its wings, and obviously as a dragon it breathes fire. It can even tear through walls.
* The midround even version also creates rifts which summon carp, and heals when near them.
*/
@@ -47,6 +47,9 @@
death_message = "screeches in agony as it collapses to the floor, its life extinguished."
butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30)
can_buckle_to = FALSE
+ lighting_cutoff_red = 12
+ lighting_cutoff_green = 15
+ lighting_cutoff_blue = 34
/// The colour of the space dragon
var/chosen_colour
@@ -77,6 +80,11 @@
buffet = new(src)
buffet.Grant(src)
+/mob/living/basic/space_dragon/Destroy()
+ fire_breath = null
+ buffet = null
+ return ..()
+
/mob/living/basic/space_dragon/Login()
. = ..()
if(!isnull(chosen_colour))
diff --git a/code/modules/mob/living/basic/vermin/cockroach.dm b/code/modules/mob/living/basic/vermin/cockroach.dm
index 224c716153960..0680de631cbae 100644
--- a/code/modules/mob/living/basic/vermin/cockroach.dm
+++ b/code/modules/mob/living/basic/vermin/cockroach.dm
@@ -68,6 +68,10 @@
blackboard = list(
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends,
+ BB_OWNER_SELF_HARM_RESPONSES = list(
+ "*me waves its antennae in disapproval.",
+ "*me chitters sadly."
+ )
)
ai_traits = STOP_MOVING_WHEN_PULLED
diff --git a/code/modules/mob/living/basic/vermin/frog.dm b/code/modules/mob/living/basic/vermin/frog.dm
index 65b5dcbb277b9..a674169dbd5ce 100644
--- a/code/modules/mob/living/basic/vermin/frog.dm
+++ b/code/modules/mob/living/basic/vermin/frog.dm
@@ -111,6 +111,10 @@
blackboard = list(
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends,
+ BB_OWNER_SELF_HARM_RESPONSES = list(
+ "*me licks its own eyeballs in disapproval.",
+ "*me croaks sadly."
+ )
)
ai_movement = /datum/ai_movement/basic_avoidance
diff --git a/code/modules/mob/living/basic/vermin/mothroach.dm b/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm
similarity index 88%
rename from code/modules/mob/living/basic/vermin/mothroach.dm
rename to code/modules/mob/living/basic/vermin/mothroach/mothroach.dm
index 4c06665a14afc..a0079065de437 100644
--- a/code/modules/mob/living/basic/vermin/mothroach.dm
+++ b/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm
@@ -36,6 +36,10 @@
/mob/living/basic/mothroach/Initialize(mapload)
. = ..()
+ var/static/list/food_types = list(/obj/item/clothing)
+ AddElement(/datum/element/basic_eating, food_types = food_types)
+ ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(food_types))
+ AddElement(/datum/element/ai_retaliate)
AddElement(/datum/element/pet_bonus, "squeaks happily!")
add_verb(src, /mob/living/proc/toggle_resting)
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
@@ -64,16 +68,6 @@
else
playsound(loc, 'sound/voice/moth/scream_moth.ogg', 50, TRUE)
-/datum/ai_controller/basic_controller/mothroach
- blackboard = list()
-
- ai_traits = STOP_MOVING_WHEN_PULLED
- ai_movement = /datum/ai_movement/basic_avoidance
- idle_behavior = /datum/idle_behavior/idle_random_walk
- planning_subtrees = list(
- /datum/ai_planning_subtree/random_speech/mothroach,
- )
-
/mob/living/basic/mothroach/bar
name = "mothroach bartender"
desc = "A mothroach serving drinks. Look at him go."
diff --git a/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm b/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm
new file mode 100644
index 0000000000000..5ef330cdc64f9
--- /dev/null
+++ b/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm
@@ -0,0 +1,35 @@
+#define MOTHROACH_EAT_TIMER 1 MINUTES
+
+/datum/ai_controller/basic_controller/mothroach
+ blackboard = list(
+ BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
+ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items,
+ )
+
+ ai_traits = STOP_MOVING_WHEN_PULLED
+ ai_movement = /datum/ai_movement/basic_avoidance
+ idle_behavior = /datum/idle_behavior/idle_random_walk
+ planning_subtrees = list(
+ /datum/ai_planning_subtree/find_food/mothroach,
+ /datum/ai_planning_subtree/target_retaliate/to_flee,
+ /datum/ai_planning_subtree/flee_target/from_flee_key,
+ /datum/ai_planning_subtree/basic_melee_attack_subtree,
+ /datum/ai_planning_subtree/random_speech/mothroach,
+ )
+
+/datum/ai_controller/basic_controller/mothroach/TryPossessPawn(atom/new_pawn)
+ . = ..()
+ if(. & AI_CONTROLLER_INCOMPATIBLE)
+ return
+ RegisterSignal(new_pawn, COMSIG_MOB_ATE, PROC_REF(on_eaten))
+
+/datum/ai_controller/basic_controller/mothroach/proc/on_eaten(datum/source)
+ SIGNAL_HANDLER
+ set_blackboard_key(BB_MOTHROACH_NEXT_EAT, world.time + MOTHROACH_EAT_TIMER)
+
+/datum/ai_planning_subtree/find_food/mothroach/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
+ if(world.time < controller.blackboard[BB_MOTHROACH_NEXT_EAT])
+ return
+ return ..()
+
+#undef MOTHROACH_EAT_TIMER
diff --git a/code/modules/mob/living/basic/vermin/mouse.dm b/code/modules/mob/living/basic/vermin/mouse.dm
index f951b8c4898fc..3cce5e3481784 100644
--- a/code/modules/mob/living/basic/vermin/mouse.dm
+++ b/code/modules/mob/living/basic/vermin/mouse.dm
@@ -416,6 +416,11 @@
BB_BASIC_MOB_CURRENT_TARGET = null, // heathen
BB_CURRENT_HUNTING_TARGET = null, // cheese
BB_LOW_PRIORITY_HUNTING_TARGET = null, // cable
+ BB_OWNER_SELF_HARM_RESPONSES = list(
+ "*me cleans its whiskers in disapproval.",
+ "*me squeaks sadly.",
+ "*me sheds a single small tear."
+ )
)
ai_traits = STOP_MOVING_WHEN_PULLED
diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm
index 349f14d83a3cb..a5162dea0dc42 100644
--- a/code/modules/mob/living/blood.dm
+++ b/code/modules/mob/living/blood.dm
@@ -25,42 +25,12 @@
adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR * seconds_per_tick)
blood_volume = min(blood_volume + (BLOOD_REGEN_FACTOR * nutrition_ratio * seconds_per_tick), BLOOD_VOLUME_NORMAL)
- //Effects of bloodloss
- if(!(sigreturn & HANDLE_BLOOD_NO_EFFECTS))
- var/word = pick("dizzy","woozy","faint")
- switch(blood_volume)
- if(BLOOD_VOLUME_MAX_LETHAL to INFINITY)
- if(SPT_PROB(7.5, seconds_per_tick))
- to_chat(src, span_userdanger("Blood starts to tear your skin apart. You're going to burst!"))
- investigate_log("has been gibbed by having too much blood.", INVESTIGATE_DEATHS)
- inflate_gib()
- if(BLOOD_VOLUME_EXCESS to BLOOD_VOLUME_MAX_LETHAL)
- if(SPT_PROB(5, seconds_per_tick))
- to_chat(src, span_warning("You feel your skin swelling."))
- if(BLOOD_VOLUME_MAXIMUM to BLOOD_VOLUME_EXCESS)
- if(SPT_PROB(5, seconds_per_tick))
- to_chat(src, span_warning("You feel terribly bloated."))
- if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE)
- if(SPT_PROB(2.5, seconds_per_tick))
- to_chat(src, span_warning("You feel [word]."))
- adjustOxyLoss(round(0.005 * (BLOOD_VOLUME_NORMAL - blood_volume) * seconds_per_tick, 1))
- if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY)
- adjustOxyLoss(round(0.01 * (BLOOD_VOLUME_NORMAL - blood_volume) * seconds_per_tick, 1))
- if(SPT_PROB(2.5, seconds_per_tick))
- set_eye_blur_if_lower(12 SECONDS)
- to_chat(src, span_warning("You feel very [word]."))
- if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD)
- adjustOxyLoss(2.5 * seconds_per_tick)
- if(SPT_PROB(7.5, seconds_per_tick))
- Unconscious(rand(20,60))
- to_chat(src, span_warning("You feel extremely [word]."))
- if(-INFINITY to BLOOD_VOLUME_SURVIVE)
- if(!HAS_TRAIT(src, TRAIT_NODEATH))
- investigate_log("has died of bloodloss.", INVESTIGATE_DEATHS)
- death()
+ // Some effects are halved mid-combat.
+ var/determined_mod = has_status_effect(/datum/status_effect/determined) ? 0.5 : 0
+
+ //Bloodloss from wounds
var/temp_bleed = 0
- //Bleeding out
for(var/obj/item/bodypart/iter_part as anything in bodyparts)
var/iter_bleed_rate = iter_part.get_modified_bleed_rate()
temp_bleed += iter_bleed_rate * seconds_per_tick
@@ -72,6 +42,78 @@
bleed(temp_bleed)
bleed_warn(temp_bleed)
+ //Effects of bloodloss
+ if(sigreturn & HANDLE_BLOOD_NO_OXYLOSS)
+ return
+ var/word = pick("dizzy","woozy","faint")
+ switch(blood_volume)
+ if(BLOOD_VOLUME_EXCESS to BLOOD_VOLUME_MAX_LETHAL)
+ if(SPT_PROB(7.5, seconds_per_tick))
+ to_chat(src, span_userdanger("Blood starts to tear your skin apart. You're going to burst!"))
+ investigate_log("has been gibbed by having too much blood.", INVESTIGATE_DEATHS)
+ inflate_gib()
+ // Way too much blood!
+ if(BLOOD_VOLUME_EXCESS to BLOOD_VOLUME_MAX_LETHAL)
+ if(SPT_PROB(5, seconds_per_tick))
+ to_chat(src, span_warning("You feel your skin swelling."))
+ // Too much blood
+ if(BLOOD_VOLUME_MAXIMUM to BLOOD_VOLUME_EXCESS)
+ if(SPT_PROB(5, seconds_per_tick))
+ to_chat(src, span_warning("You feel terribly bloated."))
+ // Low blood but not a big deal in the immediate
+ if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE)
+ if(SPT_PROB(2.5, seconds_per_tick))
+ set_eye_blur_if_lower(2 SECONDS * determined_mod)
+ if(prob(50))
+ to_chat(src, span_danger("You feel [word]. It's getting a bit hard to breathe."))
+ losebreath += 0.5 * determined_mod * seconds_per_tick
+ else if(getStaminaLoss() < 25 * determined_mod)
+ to_chat(src, span_danger("You feel [word]. It's getting a bit hard to focus."))
+ adjustStaminaLoss(10 * determined_mod * REM * seconds_per_tick)
+ // Pretty low blood, getting dangerous!
+ if(BLOOD_VOLUME_RISKY to BLOOD_VOLUME_OKAY)
+ if(SPT_PROB(5, seconds_per_tick))
+ set_eye_blur_if_lower(2 SECONDS * determined_mod)
+ set_dizzy_if_lower(2 SECONDS * determined_mod)
+ if(prob(50))
+ to_chat(src, span_bolddanger("You feel very [word]. It's getting hard to breathe!"))
+ losebreath += 1 * determined_mod * seconds_per_tick
+ else if(getStaminaLoss() < 40 * determined_mod)
+ to_chat(src, span_bolddanger("You feel very [word]. It's getting hard to stay awake!"))
+ adjustStaminaLoss(15 * determined_mod * REM * seconds_per_tick)
+ // Very low blood, danger!!
+ if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_RISKY)
+ if(SPT_PROB(5, seconds_per_tick))
+ set_eye_blur_if_lower(4 SECONDS * determined_mod)
+ set_dizzy_if_lower(4 SECONDS * determined_mod)
+ if(prob(50))
+ to_chat(src, span_userdanger("You feel extremely [word]! It's getting very hard to breathe!"))
+ losebreath += 1.5 * determined_mod * seconds_per_tick
+ else if(getStaminaLoss() < 80 * determined_mod)
+ to_chat(src, span_userdanger("You feel extremely [word]! It's getting very hard to stay awake!"))
+ adjustStaminaLoss(20 * determined_mod * REM * seconds_per_tick)
+ // Critically low blood, death is near! Adrenaline won't help you here.
+ if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD)
+ if(SPT_PROB(7.5, seconds_per_tick))
+ Unconscious(rand(1 SECONDS, 2 SECONDS))
+ to_chat(src, span_userdanger("You black out for a moment!"))
+ // Instantly die upon this threshold
+ if(-INFINITY to BLOOD_VOLUME_SURVIVE)
+ if(!HAS_TRAIT(src, TRAIT_NODEATH))
+ investigate_log("has died of bloodloss.", INVESTIGATE_DEATHS)
+ death()
+
+ // Blood ratio! if you have 230 blood, this equals 0.5 as that's half of the current value, 560.
+ var/effective_blood_ratio = blood_volume/BLOOD_VOLUME_NORMAL
+
+ // If your ratio is less than one (you're missing any blood) and your oxyloss is under that ratio %, start getting oxy damage.
+ // This damage accrues faster the less blood you have.
+ // If KO or in hardcrit, the damage accrues even then to prevent being perma-KO.
+ if(((effective_blood_ratio < 1) && (getOxyLoss() < (effective_blood_ratio * 100))) || (stat in list(UNCONSCIOUS, HARD_CRIT)))
+ // At roughly half blood this equals to 3 oxyloss per tick. At 90% blood it's close to 0.5
+ var/rounded_oxyloss = round(0.01 * (BLOOD_VOLUME_NORMAL - blood_volume) * seconds_per_tick, 0.25)
+ adjustOxyLoss(rounded_oxyloss, updating_health = TRUE)
+
/// Has each bodypart update its bleed/wound overlay icon states
/mob/living/carbon/proc/update_bodypart_bleed_overlays()
for(var/obj/item/bodypart/iter_part as anything in bodyparts)
diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm
index 1ef72fd18e600..b0a747ff51d88 100644
--- a/code/modules/mob/living/brain/brain_item.dm
+++ b/code/modules/mob/living/brain/brain_item.dm
@@ -394,7 +394,15 @@
/obj/item/organ/internal/brain/primitive //No like books and stompy metal men
name = "primitive brain"
desc = "This juicy piece of meat has a clearly underdeveloped frontal lobe."
- organ_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, TRAIT_PRIMITIVE) // No literacy
+ organ_traits = list(
+ TRAIT_ADVANCEDTOOLUSER,
+ TRAIT_CAN_STRIP,
+ TRAIT_PRIMITIVE, // No literacy
+ TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION,
+ TRAIT_EXPERT_FISHER, // live off land, fish from river
+ TRAIT_ROUGHRIDER, // ride beast, chase down prey, flee from danger
+ TRAIT_BEAST_EMPATHY, // know the way of beast, calm with food
+ )
/obj/item/organ/internal/brain/golem
name = "crystalline matrix"
diff --git a/code/modules/mob/living/carbon/alien/adult/adult.dm b/code/modules/mob/living/carbon/alien/adult/adult.dm
index c15efb77a4a19..ad005888178ac 100644
--- a/code/modules/mob/living/carbon/alien/adult/adult.dm
+++ b/code/modules/mob/living/carbon/alien/adult/adult.dm
@@ -140,7 +140,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list(
return TRUE
/mob/living/carbon/alien/adult/get_butt_sprite()
- return BUTT_SPRITE_XENOMORPH
+ return icon('icons/mob/butts.dmi', BUTT_SPRITE_XENOMORPH)
// Aliens can touch acid
/mob/living/carbon/alien/can_touch_acid(atom/acided_atom, acid_power, acid_volume)
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index 20164d27b425a..d6dc119de58a3 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -698,5 +698,7 @@
. |= SHOVE_CAN_STAGGER
if(IsKnockdown() && !IsParalyzed())
. |= SHOVE_CAN_KICK_SIDE
+ if(HAS_TRAIT(src, TRAIT_NO_SIDE_KICK)) // added as an extra check, just in case
+ . &= ~SHOVE_CAN_KICK_SIDE
#undef SHAKE_ANIMATION_OFFSET
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index 44b7db6ee0b11..dcab69f531ee3 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -11,6 +11,7 @@
usable_hands = 0 //Populated on init through list/bodyparts
mobility_flags = MOBILITY_FLAGS_CARBON_DEFAULT
blocks_emissive = EMISSIVE_BLOCK_NONE
+ living_flags = ALWAYS_DEATHGASP
///List of [/obj/item/organ]s in the mob. They don't go in the contents for some reason I don't want to know.
var/list/obj/item/organ/organs = list()
///Same as [above][/mob/living/carbon/var/organs], but stores "slot ID" - "organ" pairs for easy access.
@@ -50,8 +51,9 @@
///last mind to control this mob, for blood-based cloning
var/datum/mind/last_mind = null
- ///This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks.
+ ///This is used to determine if the mob failed a breath. If they did fail a breath, they will attempt to breathe each tick, otherwise just once per 4 ticks.
var/failed_last_breath = FALSE
+
/// Used in [carbon/proc/check_breath] and [lungs/proc/check_breath]]
var/co2overloadtime = null
@@ -121,4 +123,3 @@
var/bodyshape = BODYSHAPE_HUMANOID
COOLDOWN_DECLARE(bleeding_message_cd)
-
diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm
index 41a958518c597..5fdd3498f1559 100644
--- a/code/modules/mob/living/carbon/death.dm
+++ b/code/modules/mob/living/carbon/death.dm
@@ -5,7 +5,6 @@
losebreath = 0
if(!gibbed)
- INVOKE_ASYNC(src, PROC_REF(emote), "deathgasp")
add_memory_in_range(src, 7, /datum/memory/witnessed_death, protagonist = src)
reagents.end_metabolization(src)
diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm
index b9dca314b5189..1e514ad13cedb 100644
--- a/code/modules/mob/living/carbon/human/_species.dm
+++ b/code/modules/mob/living/carbon/human/_species.dm
@@ -102,6 +102,9 @@ GLOBAL_LIST_EMPTY(features_by_species)
///Replaces default appendix with a different organ.
var/obj/item/organ/internal/appendix/mutantappendix = /obj/item/organ/internal/appendix
+ /// Store body marking defines. See mobs.dm for bitflags
+ var/list/body_markings = list()
+
/// Flat modifier on all damage taken via [apply_damage][/mob/living/proc/apply_damage] (so being punched, shot, etc.)
/// IE: 10 = 10% less damage taken.
var/damage_modifier = 0
@@ -400,7 +403,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
replacement.Insert(organ_holder, special=TRUE, movement_flags = DELETE_IF_REPLACED)
/datum/species/proc/worn_items_fit_body_check(mob/living/carbon/wearer)
- for(var/obj/item/equipped_item in wearer.get_equipped_items(include_pockets = TRUE))
+ for(var/obj/item/equipped_item in wearer.get_equipped_items(INCLUDE_POCKETS))
var/equipped_item_slot = wearer.get_slot_by_item(equipped_item)
if(!equipped_item.mob_can_equip(wearer, equipped_item_slot, bypass_equip_delay_self = TRUE, ignore_equipped = TRUE))
wearer.dropItemToGround(equipped_item, force = TRUE)
@@ -466,7 +469,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
var/obj/item/organ/external/new_organ = SSwardrobe.provide_type(organ_path)
new_organ.Insert(human, special=TRUE, movement_flags = DELETE_IF_REPLACED)
-
+ add_body_markings(human_who_gained_species)
if(length(inherent_traits))
human_who_gained_species.add_traits(inherent_traits, SPECIES_TRAIT)
@@ -526,6 +529,8 @@ GLOBAL_LIST_EMPTY(features_by_species)
clear_tail_moodlets(C)
+ remove_body_markings(C)
+
// Removes all languages previously associated with [LANGUAGE_SPECIES], gaining our new species will add new ones back
var/datum/language_holder/losing_holder = GLOB.prototype_language_holders[species_language_holder]
for(var/language in losing_holder.understood_languages)
@@ -560,42 +565,6 @@ GLOBAL_LIST_EMPTY(features_by_species)
eye_organ.refresh(call_update = FALSE)
standing += eye_organ.generate_body_overlay(species_human)
- // organic body markings (oh my god this is terrible please rework this to be done on the limbs themselves i beg you)
- if(HAS_TRAIT(species_human, TRAIT_HAS_MARKINGS))
- var/obj/item/bodypart/chest/chest = species_human.get_bodypart(BODY_ZONE_CHEST)
- var/obj/item/bodypart/arm/right/right_arm = species_human.get_bodypart(BODY_ZONE_R_ARM)
- var/obj/item/bodypart/arm/left/left_arm = species_human.get_bodypart(BODY_ZONE_L_ARM)
- var/obj/item/bodypart/leg/right/right_leg = species_human.get_bodypart(BODY_ZONE_R_LEG)
- var/obj/item/bodypart/leg/left/left_leg = species_human.get_bodypart(BODY_ZONE_L_LEG)
- var/datum/sprite_accessory/markings = SSaccessories.moth_markings_list[species_human.dna.features["moth_markings"]]
- var/mutable_appearance/marking = mutable_appearance(layer = -BODY_LAYER, appearance_flags = KEEP_TOGETHER)
-
- if(noggin && (IS_ORGANIC_LIMB(noggin)))
- var/mutable_appearance/markings_head_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_head")
- marking.overlays += markings_head_overlay
-
- if(chest && (IS_ORGANIC_LIMB(chest)))
- var/mutable_appearance/markings_chest_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_chest")
- marking.overlays += markings_chest_overlay
-
- if(right_arm && (IS_ORGANIC_LIMB(right_arm)))
- var/mutable_appearance/markings_r_arm_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_r_arm")
- marking.overlays += markings_r_arm_overlay
-
- if(left_arm && (IS_ORGANIC_LIMB(left_arm)))
- var/mutable_appearance/markings_l_arm_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_l_arm")
- marking.overlays += markings_l_arm_overlay
-
- if(right_leg && (IS_ORGANIC_LIMB(right_leg)))
- var/mutable_appearance/markings_r_leg_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_r_leg")
- marking.overlays += markings_r_leg_overlay
-
- if(left_leg && (IS_ORGANIC_LIMB(left_leg)))
- var/mutable_appearance/markings_l_leg_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_l_leg")
- marking.overlays += markings_l_leg_overlay
-
- standing += marking
-
//Underwear, Undershirts & Socks
if(!HAS_TRAIT(species_human, TRAIT_NO_UNDERWEAR))
if(species_human.underwear)
@@ -672,8 +641,6 @@ GLOBAL_LIST_EMPTY(features_by_species)
switch(bodypart)
if("ears")
accessory = SSaccessories.ears_list[source.dna.features["ears"]]
- if("body_markings")
- accessory = SSaccessories.body_markings_list[source.dna.features["body_markings"]]
if("legs")
accessory = SSaccessories.legs_list[source.dna.features["legs"]]
@@ -727,6 +694,8 @@ GLOBAL_LIST_EMPTY(features_by_species)
source.apply_overlay(BODY_ADJ_LAYER)
source.apply_overlay(BODY_FRONT_LAYER)
+ update_body_markings(source)
+
//This exists so sprite accessories can still be per-layer without having to include that layer's
//number in their sprite name, which causes issues when those numbers change.
/datum/species/proc/mutant_bodyparts_layertext(layer)
@@ -1519,6 +1488,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
|| (preference.relevant_inherent_trait in inherent_traits) \
|| (preference.relevant_external_organ in external_organs) \
|| (preference.relevant_head_flag && check_head_flags(preference.relevant_head_flag)) \
+ || (preference.relevant_body_markings in body_markings) \
)
features += preference.savefile_key
@@ -2110,3 +2080,48 @@ GLOBAL_LIST_EMPTY(features_by_species)
return fixed_mut_color
return null
+
+/// Add species appropriate body markings
+/datum/species/proc/add_body_markings(mob/living/carbon/human/hooman)
+ for(var/markings_type in body_markings) //loop through possible species markings
+ var/datum/bodypart_overlay/simple/body_marking/markings = new markings_type() // made to die... mostly because we cant use initial on lists but its convenient and organized
+ var/accessory_name = hooman.dna.features[markings.dna_feature_key] //get the accessory name from dna
+ var/datum/sprite_accessory/moth_markings/accessory = markings.get_accessory(accessory_name) //get the actual datum
+
+ if(isnull(accessory))
+ CRASH("Value: [accessory_name] did not have a corresponding sprite accessory!")
+
+ for(var/obj/item/bodypart/part as anything in markings.applies_to) //check through our limbs
+ var/obj/item/bodypart/people_part = hooman.get_bodypart(initial(part.body_zone)) // and see if we have a compatible marking for that limb
+
+ if(!people_part)
+ continue
+
+ var/datum/bodypart_overlay/simple/body_marking/overlay = new markings_type ()
+
+ // Tell the overlay what it should look like
+ overlay.icon = accessory.icon
+ overlay.icon_state = accessory.icon_state
+ overlay.use_gender = accessory.gender_specific
+ overlay.draw_color = accessory.color_src ? hooman.dna.features["mcolor"] : null
+
+ people_part.add_bodypart_overlay(overlay)
+
+/// Remove body markings
+/datum/species/proc/remove_body_markings(mob/living/carbon/human/hooman)
+ for(var/obj/item/bodypart/part as anything in hooman.bodyparts)
+ for(var/datum/bodypart_overlay/simple/body_marking/marking in part.bodypart_overlays)
+ part.remove_bodypart_overlay(marking)
+
+/// Update the overlays if necessary
+/datum/species/proc/update_body_markings(mob/living/carbon/human/hooman)
+ var/needs_update = FALSE
+ for(var/datum/bodypart_overlay/simple/body_marking/marking as anything in body_markings)
+ if(initial(marking.dna_feature_key) == body_markings[marking]) // dna is same as our species (sort of mini-cache), so no update needed
+ continue
+ needs_update = TRUE
+ break
+
+ if(needs_update)
+ remove_body_markings(hooman)
+ add_body_markings(hooman)
diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm
index 627745cba929e..3340e34064052 100644
--- a/code/modules/mob/living/carbon/human/dummy.dm
+++ b/code/modules/mob/living/carbon/human/dummy.dm
@@ -41,7 +41,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
//Instead of just deleting our equipment, we save what we can and reinsert it into SSwardrobe's store
//Hopefully this makes preference reloading not the worst thing ever
/mob/living/carbon/human/dummy/delete_equipment()
- var/list/items_to_check = get_equipped_items(include_pockets = TRUE) + held_items
+ var/list/items_to_check = get_equipped_items(INCLUDE_POCKETS | INCLUDE_HELD)
var/list/to_nuke = list() //List of items queued for deletion, can't qdel them before iterating their contents in case they hold something
///Travel to the bottom of the contents chain, expanding it out
for(var/i = 1; i <= length(items_to_check); i++) //Needs to be a c style loop since it can expand
@@ -103,7 +103,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
/proc/create_consistent_human_dna(mob/living/carbon/human/target)
target.dna.features["mcolor"] = COLOR_VIBRANT_LIME
target.dna.features["ethcolor"] = COLOR_WHITE
- target.dna.features["body_markings"] = get_consistent_feature_entry(SSaccessories.body_markings_list)
+ target.dna.features["lizard_markings"] = get_consistent_feature_entry(SSaccessories.lizard_markings_list)
target.dna.features["ears"] = get_consistent_feature_entry(SSaccessories.ears_list)
target.dna.features["frills"] = get_consistent_feature_entry(SSaccessories.frills_list)
target.dna.features["horns"] = get_consistent_feature_entry(SSaccessories.horns_list)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 6e1f9037018b6..aa2daa1675e91 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -93,7 +93,7 @@
return TRUE
var/block_chance_modifier = round(damage / -3)
- for(var/obj/item/worn_thing in get_equipped_items(include_pockets = FALSE) + held_items)
+ for(var/obj/item/worn_thing in get_equipped_items(INCLUDE_HELD))
// Things that are supposed to be worn, being held = cannot block
if(isclothing(worn_thing))
if(worn_thing in held_items)
@@ -796,6 +796,10 @@
if(leg_clothes)
burning_items |= leg_clothes
+ if (!gloves || (!(gloves.resistance_flags & FIRE_PROOF) && (gloves.resistance_flags & FLAMMABLE)))
+ for(var/obj/item/burnable_item in held_items)
+ burning_items |= burnable_item
+
for(var/obj/item/burning in burning_items)
burning.fire_act((stacks * 25 * seconds_per_tick)) //damage taken is reduced to 2% of this value by fire_act()
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index da2c057d740bb..1fe6555cddf9c 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -293,6 +293,11 @@
return MONKEY_HEIGHT_DWARF
else
return HUMAN_HEIGHT_DWARF
+ if(HAS_TRAIT(src, TRAIT_TOO_TALL))
+ if(ismonkey(src))
+ return MONKEY_HEIGHT_TALL
+ else
+ return HUMAN_HEIGHT_TALLEST
else if(ismonkey(src))
return MONKEY_HEIGHT_MEDIUM
@@ -360,3 +365,30 @@
var/damage = ((min_damage / 4) + (max_damage / 4)) / 2 // We expect you to have 4 functional limbs- if you have fewer you're probably not going to be so good at lifting
return ceil(damage * (ceil(athletics_level / 2)) * fitness_modifier * maxHealth)
+
+/mob/living/carbon/human/proc/item_heal(mob/user, brute_heal, burn_heal, heal_message_brute, heal_message_burn, required_bodytype)
+ var/obj/item/bodypart/affecting = src.get_bodypart(check_zone(user.zone_selected))
+ if (!affecting || !(affecting.bodytype & required_bodytype))
+ to_chat(user, span_warning("[affecting] is already in good condition!"))
+ return FALSE
+
+ var/brute_damaged = affecting.brute_dam > 0
+ var/burn_damaged = affecting.burn_dam > 0
+
+ var/nothing_to_heal = ((brute_heal <= 0 || !brute_damaged) && (burn_heal <= 0 || !burn_damaged))
+ if (nothing_to_heal)
+ to_chat(user, span_notice("[affecting] is already in good condition!"))
+ return FALSE
+
+ src.update_damage_overlays()
+ var/message
+ if ((brute_damaged && brute_heal > 0) && (burn_damaged && burn_heal > 0))
+ message = "[heal_message_brute] and [heal_message_burn] on"
+ else if (brute_damaged && brute_heal > 0)
+ message = "[heal_message_brute] on"
+ else
+ message = "[heal_message_burn] on"
+ affecting.heal_damage(brute_heal, burn_heal, required_bodytype)
+ user.visible_message(span_notice("[user] fixes some of the [message] [src]'s [affecting.name]."), \
+ span_notice("You fix some of the [message] [src == user ? "your" : "[src]'s"] [affecting.name]."))
+ return TRUE
diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm
index bd320079b65d5..fe5817eab2780 100644
--- a/code/modules/mob/living/carbon/human/human_update_icons.dm
+++ b/code/modules/mob/living/carbon/human/human_update_icons.dm
@@ -864,20 +864,34 @@ generate/load female uniform sprites matching all previously decided variables
"params" = displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 4),
),
))
+ if(HUMAN_HEIGHT_DWARF) // tall monkeys and dwarves use the same value
+ if(ismonkey(src))
+ appearance.add_filters(list(
+ list(
+ "name" = "Monkey_Torso",
+ "priority" = 1,
+ "params" = displacement_map_filter(cut_torso_mask, x = 0, y = 0, size = 1),
+ ),
+ list(
+ "name" = "Monkey_Legs",
+ "priority" = 1,
+ "params" = displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 1),
+ ),
+ ))
+ else
+ appearance.add_filters(list(
+ list(
+ "name" = "Gnome_Cut_Torso",
+ "priority" = 1,
+ "params" = displacement_map_filter(cut_torso_mask, x = 0, y = 0, size = 2),
+ ),
+ list(
+ "name" = "Gnome_Cut_Legs",
+ "priority" = 1,
+ "params" = displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 3),
+ ),
+ ))
// Don't set this one directly, use TRAIT_DWARF
- if(HUMAN_HEIGHT_DWARF)
- appearance.add_filters(list(
- list(
- "name" = "Gnome_Cut_Torso",
- "priority" = 1,
- "params" = displacement_map_filter(cut_torso_mask, x = 0, y = 0, size = 2),
- ),
- list(
- "name" = "Gnome_Cut_Legs",
- "priority" = 1,
- "params" = displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 3),
- ),
- ))
if(HUMAN_HEIGHT_SHORTEST)
appearance.add_filters(list(
list(
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 32ab7ca1b900a..b1efa734321c5 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -292,8 +292,8 @@
return toggle_open_internals(tank, is_external)
// Use mask in absence of tube.
if(isclothing(wear_mask) && ((wear_mask.visor_flags & MASKINTERNALS) || (wear_mask.clothing_flags & MASKINTERNALS)))
- // Adjust dishevelled breathing mask back onto face.
- if (wear_mask.up)
+ // Adjust dishevelled breathing mask back onto face unless it is exempt.
+ if ((wear_mask.up) && !(wear_mask.clothing_flags & INTERNALS_ADJUST_EXEMPT))
wear_mask.adjust_visor(src)
return toggle_open_internals(tank, is_external)
// Use helmet in absence of tube or valid mask.
@@ -347,7 +347,7 @@
//delete all equipment without dropping anything
/mob/living/carbon/human/proc/delete_equipment()
- for(var/slot in get_equipped_items(include_pockets = TRUE))//order matters, dependant slots go first
+ for(var/slot in get_equipped_items(INCLUDE_POCKETS))//order matters, dependant slots go first
qdel(slot)
for(var/obj/item/held_item in held_items)
qdel(held_item)
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index c4aad8a0806d5..276d4a0fa7a5f 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -83,7 +83,7 @@
Cannibalize_Body(slime)
regenerate_limbs?.build_all_button_icons(UPDATE_BUTTON_STATUS)
- return HANDLE_BLOOD_NO_NUTRITION_DRAIN|HANDLE_BLOOD_NO_EFFECTS
+ return HANDLE_BLOOD_NO_NUTRITION_DRAIN|HANDLE_BLOOD_NO_OXYLOSS
/datum/species/jelly/proc/Cannibalize_Body(mob/living/carbon/human/H)
var/list/limbs_to_consume = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) - H.get_missing_limbs()
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index b2a036a9d6d71..2a83efbda3e7e 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -8,7 +8,8 @@
TRAIT_TACKLING_TAILED_DEFENDER,
)
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE
- mutant_bodyparts = list("body_markings" = "None", "legs" = "Normal Legs")
+ mutant_bodyparts = list("legs" = "Normal Legs")
+ body_markings = list(/datum/bodypart_overlay/simple/body_marking/lizard = "None")
external_organs = list(
/obj/item/organ/external/horns = "None",
/obj/item/organ/external/frills = "None",
@@ -49,7 +50,7 @@
/datum/species/lizard/randomize_features()
var/list/features = ..()
- features["body_markings"] = pick(SSaccessories.body_markings_list)
+ features["lizard_markings"] = pick(SSaccessories.lizard_markings_list)
return features
/datum/species/lizard/get_scream_sound(mob/living/carbon/human/lizard)
@@ -156,8 +157,8 @@ Lizard subspecies: ASHWALKERS
inherent_traits = list(
TRAIT_MUTANT_COLORS,
TRAIT_VIRUSIMMUNE,
- TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION,
)
+ inherent_factions = list(FACTION_ASHWALKER)
species_language_holder = /datum/language_holder/lizard/ash
digitigrade_customization = DIGITIGRADE_FORCED
examine_limb_id = SPECIES_LIZARD
diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
index e2458563b038c..26efe358221fc 100644
--- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
@@ -3,12 +3,11 @@
plural_form = "Mothmen"
id = SPECIES_MOTH
inherent_traits = list(
- TRAIT_HAS_MARKINGS,
TRAIT_TACKLING_WINGED_ATTACKER,
TRAIT_ANTENNAE,
)
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
- mutant_bodyparts = list("moth_markings" = "None")
+ body_markings = list(/datum/bodypart_overlay/simple/body_marking/moth = "None")
external_organs = list(/obj/item/organ/external/wings/moth = "Plain", /obj/item/organ/external/antennae = "Plain")
meat = /obj/item/food/meat/slab/human/mutant/moth
mutanttongue = /obj/item/organ/internal/tongue/moth
diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm
index 053953e2a835f..741e40bed6b33 100644
--- a/code/modules/mob/living/carbon/human/species_types/snail.dm
+++ b/code/modules/mob/living/carbon/human/species_types/snail.dm
@@ -89,8 +89,7 @@
. = ..()
var/obj/item/storage/backpack/bag = new_snailperson.get_item_by_slot(ITEM_SLOT_BACK)
if(!istype(bag, /obj/item/storage/backpack/snail))
- if(new_snailperson.dropItemToGround(bag)) //returns TRUE even if its null
- new_snailperson.equip_to_slot_or_del(new /obj/item/storage/backpack/snail(new_snailperson), ITEM_SLOT_BACK)
+ new_snailperson.equip_to_slot_or_del(new /obj/item/storage/backpack/snail(new_snailperson), ITEM_SLOT_BACK)
new_snailperson.AddElement(/datum/element/lube_walking, require_resting = TRUE)
new_snailperson.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/snail, multiplicative_slowdown = snail_speed_mod)
diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm
index 45ca4487184e3..de6a2692c9b6f 100644
--- a/code/modules/mob/living/carbon/inventory.dm
+++ b/code/modules/mob/living/carbon/inventory.dm
@@ -282,7 +282,7 @@
update_mob_action_buttons()
return TRUE
-/// Close the the currently open external (that's EX-ternal) air tank. Returns TREUE if successful.
+/// Close the the currently open external (that's EX-ternal) air tank. Returns TRUE if successful.
/mob/living/carbon/proc/close_externals()
return close_internals(TRUE)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index e09d68db5fde8..7fb92c26e6183 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -64,6 +64,7 @@
// Second link in a breath chain, calls [carbon/proc/check_breath()]
/mob/living/carbon/proc/breathe(seconds_per_tick, times_fired)
var/obj/item/organ/internal/lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
+
if(SEND_SIGNAL(src, COMSIG_CARBON_ATTEMPT_BREATHE, seconds_per_tick, times_fired) & COMSIG_CARBON_BLOCK_BREATH)
return
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index 53b08719f6a70..03a29762f6dc3 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -104,7 +104,7 @@
if(stat == DEAD)
return FALSE
- if(!gibbed && (death_sound || death_message))
+ if(!gibbed && (death_sound || death_message || (living_flags & ALWAYS_DEATHGASP)))
INVOKE_ASYNC(src, TYPE_PROC_REF(/mob, emote), "deathgasp")
set_stat(DEAD)
@@ -116,8 +116,9 @@
var/player_mob_check = mind && mind.name && mind.active
// and, display a death message if the area allows it (or if they're in nullspace)
var/valid_area_check = !death_area || !(death_area.area_flags & NO_DEATH_MESSAGE)
- if(player_mob_check && valid_area_check)
- deadchat_broadcast(" has died at [get_area_name(death_turf)].", "[mind.name]", follow_target = src, turf_target = death_turf, message_type=DEADCHAT_DEATHRATTLE)
+ if(player_mob_check)
+ if(valid_area_check)
+ deadchat_broadcast(" has died at [get_area_name(death_turf)].", "[mind.name]", follow_target = src, turf_target = death_turf, message_type=DEADCHAT_DEATHRATTLE)
if(SSlag_switch.measures[DISABLE_DEAD_KEYLOOP] && !client?.holder)
to_chat(src, span_deadsay(span_big("Observer freelook is disabled.\nPlease use Orbit, Teleport, and Jump to look around.")))
ghostize(TRUE)
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index 117dc5583eae5..67358fa912a3b 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -176,7 +176,7 @@
stat_allowed = HARD_CRIT
/datum/emote/living/gasp/get_sound(mob/living/user)
- if(!HAS_MIND_TRAIT(user, TRAIT_MIMING))
+ if(HAS_MIND_TRAIT(user, TRAIT_MIMING))
return
if(!ishuman(user))
return
@@ -679,7 +679,7 @@
if(!can_run_emote(user, TRUE, intentional))
return FALSE
- if(is_banned_from(user.ckey, "Emote"))
+ if(!isnull(user.ckey) && is_banned_from(user.ckey, "Emote"))
to_chat(user, span_boldwarning("You cannot send custom emotes (banned)."))
return FALSE
diff --git a/code/modules/mob/living/init_signals.dm b/code/modules/mob/living/init_signals.dm
index 064a0573353eb..4bf0407c4670a 100644
--- a/code/modules/mob/living/init_signals.dm
+++ b/code/modules/mob/living/init_signals.dm
@@ -38,6 +38,9 @@
RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_RESTRAINED), PROC_REF(on_restrained_trait_gain))
RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_RESTRAINED), PROC_REF(on_restrained_trait_loss))
+ RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_DEAF), PROC_REF(on_hearing_loss))
+ RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_DEAF), PROC_REF(on_hearing_regain))
+
RegisterSignals(src, list(
SIGNAL_ADDTRAIT(TRAIT_CRITICAL_CONDITION),
SIGNAL_REMOVETRAIT(TRAIT_CRITICAL_CONDITION),
@@ -272,3 +275,14 @@
/mob/living/proc/undense_changed(datum/source)
SIGNAL_HANDLER
update_density()
+
+///Called when [TRAIT_DEAF] is added to the mob.
+/mob/living/proc/on_hearing_loss()
+ SIGNAL_HANDLER
+ refresh_looping_ambience()
+ stop_sound_channel(CHANNEL_AMBIENCE)
+
+///Called when [TRAIT_DEAF] is added to the mob.
+/mob/living/proc/on_hearing_regain()
+ SIGNAL_HANDLER
+ refresh_looping_ambience()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index b5e538461f2da..c7a0c034ac5aa 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1310,10 +1310,14 @@
/mob/living/can_hold_items(obj/item/I)
return ..() && HAS_TRAIT(src, TRAIT_CAN_HOLD_ITEMS) && usable_hands
-/mob/living/can_perform_action(atom/movable/target, action_bitflags)
+/mob/living/can_perform_action(atom/target, action_bitflags)
if(!istype(target))
CRASH("Missing target arg for can_perform_action")
+ if(stat != CONSCIOUS)
+ to_chat(src, span_warning("You are not conscious enough for this action!"))
+ return FALSE
+
if(!(interaction_flags_atom & INTERACT_ATOM_IGNORE_INCAPACITATED))
var/ignore_flags = NONE
if(interaction_flags_atom & INTERACT_ATOM_IGNORE_RESTRAINED)
@@ -1325,27 +1329,23 @@
to_chat(src, span_warning("You are incapacitated at the moment!"))
return FALSE
- if(stat == DEAD || stat != CONSCIOUS)
- to_chat(src, span_warning("You are in no physical condition to do this!"))
- return FALSE
-
// If the MOBILITY_UI bitflag is not set it indicates the mob's hands are cutoff, blocked, or handcuffed
// Note - AI's and borgs have the MOBILITY_UI bitflag set even though they don't have hands
// Also if it is not set, the mob could be incapcitated, knocked out, unconscious, asleep, EMP'd, etc.
if(!(mobility_flags & MOBILITY_UI) && !(action_bitflags & ALLOW_RESTING))
- to_chat(src, span_warning("You can't do that right now!"))
+ to_chat(src, span_warning("You don't have the mobility for this!"))
return FALSE
// NEED_HANDS is already checked by MOBILITY_UI for humans so this is for silicons
if((action_bitflags & NEED_HANDS))
if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED))
- to_chat(src, span_warning("You can't do that right now!"))
+ to_chat(src, span_warning("You hands are blocked for this action!"))
return FALSE
if(!can_hold_items(isitem(target) ? target : null)) // almost redundant if it weren't for mobs
- to_chat(src, span_warning("You don't have the physical ability to do this!"))
+ to_chat(src, span_warning("You don't have the hands for this action!"))
return FALSE
- if(!(action_bitflags & BYPASS_ADJACENCY) && !Adjacent(target) && (target.loc != src) && !recursive_loc_check(src, target))
+ if(!(action_bitflags & BYPASS_ADJACENCY) && ((action_bitflags & NOT_INSIDE_TARGET) || !recursive_loc_check(src, target)) && !CanReach(target))
if(HAS_SILICON_ACCESS(src) && !ispAI(src))
if(!(action_bitflags & ALLOW_SILICON_REACH)) // silicons can ignore range checks (except pAIs)
if(!(action_bitflags & SILENT_ADJACENCY))
@@ -2277,6 +2277,10 @@ GLOBAL_LIST_EMPTY(fire_appearances)
REMOVE_TRAIT(src, TRAIT_CRITICAL_CONDITION, STAT_TRAIT)
remove_from_alive_mob_list()
add_to_dead_mob_list()
+ if(!can_hear())
+ stop_sound_channel(CHANNEL_AMBIENCE)
+ refresh_looping_ambience()
+
///Reports the event of the change in value of the buckled variable.
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index acc49dd572145..0b844a2362afb 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -3,6 +3,7 @@
hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD)
pressure_resistance = 10
hud_type = /datum/hud/living
+ interaction_flags_mouse_drop = ALLOW_RESTING
///Tracks the current size of the mob in relation to its original size. Use update_transform(resize) to change it.
var/current_size = RESIZE_DEFAULT_SIZE
diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm
index bbcf77986ac79..58e13951ebc4f 100644
--- a/code/modules/mob/living/living_say.dm
+++ b/code/modules/mob/living/living_say.dm
@@ -454,11 +454,12 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list(
message = unintelligize(message)
tts_filter = list()
- var/list/data = list(message, tts_message, tts_filter)
+ var/list/data = list(message, tts_message, tts_filter, capitalize_message)
SEND_SIGNAL(src, COMSIG_LIVING_TREAT_MESSAGE, data)
message = data[TREAT_MESSAGE_ARG]
tts_message = data[TREAT_TTS_MESSAGE_ARG]
tts_filter = data[TREAT_TTS_FILTER_ARG]
+ capitalize_message = data[TREAT_CAPITALIZE_MESSAGE]
if(!tts_message)
tts_message = message
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index c6d6b6a5e9d70..b9f2fec61ff2c 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -14,9 +14,7 @@
update_z(T.z)
//Vents
- var/ventcrawler = HAS_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS) || HAS_TRAIT(src, TRAIT_VENTCRAWLER_NUDE)
- if(ventcrawler)
- to_chat(src, span_notice("You can ventcrawl! Use alt+click on vents to quickly travel about the station."))
+ notify_ventcrawler_on_login()
med_hud_set_status()
diff --git a/code/modules/mob/living/navigation.dm b/code/modules/mob/living/navigation.dm
index 98f1080c79192..3096efb3a7c47 100644
--- a/code/modules/mob/living/navigation.dm
+++ b/code/modules/mob/living/navigation.dm
@@ -132,7 +132,7 @@
if(!target)
target = lad
continue
- if(get_dist_euclidian(lad, src) > get_dist_euclidian(target, src))
+ if(get_dist_euclidean(lad, src) > get_dist_euclidean(target, src))
continue
target = lad
@@ -144,7 +144,7 @@
if(!target)
target = stairs_bro.z == z ? stairs_bro : get_step_multiz(stairs_bro, UP) //if the stairs aren't on our z level, get the turf above them (on our zlevel) to path to instead
continue
- if(get_dist_euclidian(stairs_bro, src) > get_dist_euclidian(target, src))
+ if(get_dist_euclidean(stairs_bro, src) > get_dist_euclidean(target, src))
continue
target = stairs_bro.z == z ? stairs_bro : get_step_multiz(stairs_bro, UP)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 8354ff0447461..6c4be898162dd 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -875,7 +875,7 @@
to_chat(src, "You have been downloaded to a mobile storage device. Remote device connection severed.")
to_chat(user, "[span_boldnotice("Transfer successful")]: [name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory.")
-/mob/living/silicon/ai/can_perform_action(atom/movable/target, action_bitflags)
+/mob/living/silicon/ai/can_perform_action(atom/target, action_bitflags)
if(control_disabled)
to_chat(src, span_warning("You can't do that right now!"))
return FALSE
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 6fefbb05f7c0d..0c26e7c57e278 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -553,7 +553,7 @@
if(AI_NOTIFICATION_CYBORG_DISCONNECTED) //Tampering with the wires
to_chat(connected_ai, "
[span_notice("NOTICE - Remote telemetry lost with [name].")]
")
-/mob/living/silicon/robot/can_perform_action(atom/movable/target, action_bitflags)
+/mob/living/silicon/robot/can_perform_action(atom/target, action_bitflags)
if(lockcharge || low_power_mode)
to_chat(src, span_warning("You can't do that right now!"))
return FALSE
diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm
index 70e7d8b34ab25..2346c36ba5c03 100644
--- a/code/modules/mob/living/silicon/robot/robot_defense.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defense.dm
@@ -22,7 +22,7 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real
to_chat(user, span_warning("The wires seem fine, there's no need to fix them."))
return
- if(istype(W, /obj/item/stock_parts/cell) && opened) // trying to put a cell inside
+ if(istype(W, /obj/item/stock_parts/power_store/cell) && opened) // trying to put a cell inside
if(wiresexposed)
to_chat(user, span_warning("Close the cover first!"))
else if(cell)
diff --git a/code/modules/mob/living/silicon/robot/robot_defines.dm b/code/modules/mob/living/silicon/robot/robot_defines.dm
index 0701584476cd2..48995a1582e66 100644
--- a/code/modules/mob/living/silicon/robot/robot_defines.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defines.dm
@@ -40,7 +40,7 @@
///Used for deconstruction to remember what the borg was constructed out of.
var/obj/item/robot_suit/robot_suit = null
///If this is a path, this gets created as an object in Initialize.
- var/obj/item/stock_parts/cell/cell = /obj/item/stock_parts/cell/high
+ var/obj/item/stock_parts/power_store/cell = /obj/item/stock_parts/power_store/cell/high
///If the lamp isn't broken.
var/lamp_functional = TRUE
@@ -202,7 +202,7 @@
Your cyborg LMG will slowly produce ammunition from your power supply, and your operative pinpointer will find and locate fellow nuclear operatives. \
Help the operatives secure the disk at all costs!"
set_model = /obj/item/robot_model/syndicate
- cell = /obj/item/stock_parts/cell/hyper
+ cell = /obj/item/stock_parts/power_store/cell/hyper
radio = /obj/item/radio/borg/syndicate
/mob/living/silicon/robot/model/syndicate/Initialize(mapload)
diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm
index 1721d6ec2c102..4fc4bd5d8c15d 100644
--- a/code/modules/mob/living/silicon/robot/robot_model.dm
+++ b/code/modules/mob/living/silicon/robot/robot_model.dm
@@ -53,9 +53,17 @@
var/list/ride_offset_y = list("north" = 4, "south" = 4, "east" = 3, "west" = 3)
///List of skins the borg can be reskinned to, optional
var/list/borg_skins
+ ///Omnitoolbox, holder of certain borg tools. Not all models have one
+ var/obj/item/cyborg_omnitoolbox/toolbox
+ ///Path to toolbox, if a model gets one
+ var/toolbox_path
/obj/item/robot_model/Initialize(mapload)
. = ..()
+
+ if(toolbox_path)
+ toolbox = new toolbox_path(src)
+
for(var/path in basic_modules)
var/obj/item/new_module = new path(src)
basic_modules += new_module
@@ -398,6 +406,7 @@
model_select_icon = "engineer"
model_traits = list(TRAIT_NEGATES_GRAVITY)
hat_offset = -4
+ toolbox_path = /obj/item/cyborg_omnitoolbox/engineering
/obj/item/robot_model/janitor
name = "Janitor"
@@ -678,6 +687,7 @@
/obj/item/reagent_containers/syringe,
/obj/item/borg/cyborg_omnitool/medical,
/obj/item/borg/cyborg_omnitool/medical,
+ /obj/item/surgical_drapes/cyborg,
/obj/item/blood_filter,
/obj/item/extinguisher/mini,
/obj/item/emergency_bed/silicon,
@@ -695,6 +705,7 @@
model_select_icon = "medical"
model_traits = list(TRAIT_PUSHIMMUNE)
hat_offset = 3
+ toolbox_path = /obj/item/cyborg_omnitoolbox/medical
borg_skins = list(
"Machinified Doctor" = list(SKIN_ICON_STATE = "medical"),
"Qualified Doctor" = list(SKIN_ICON_STATE = "qualified_doctor"),
@@ -877,6 +888,7 @@
/obj/item/healthanalyzer,
/obj/item/borg/cyborg_omnitool/medical,
/obj/item/borg/cyborg_omnitool/medical,
+ /obj/item/surgical_drapes/cyborg,
/obj/item/blood_filter,
/obj/item/melee/energy/sword/cyborg/saw,
/obj/item/emergency_bed/silicon,
@@ -892,6 +904,7 @@
model_select_icon = "malf"
model_traits = list(TRAIT_PUSHIMMUNE)
hat_offset = 3
+ toolbox_path = /obj/item/cyborg_omnitoolbox/medical
/obj/item/robot_model/saboteur
name = "Syndicate Saboteur"
@@ -921,6 +934,7 @@
model_select_icon = "malf"
model_traits = list(TRAIT_PUSHIMMUNE, TRAIT_NEGATES_GRAVITY)
hat_offset = -4
+ toolbox_path = /obj/item/cyborg_omnitoolbox/engineering
canDispose = TRUE
/obj/item/robot_model/syndicate/kiltborg
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 95e2e6ed13379..6d94c2c5be978 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -442,7 +442,7 @@
return // Silicons are always standing by default.
/mob/living/silicon/get_butt_sprite()
- return BUTT_SPRITE_QR_CODE
+ return icon('icons/mob/butts.dmi', BUTT_SPRITE_QR_CODE)
/**
* Records an IC event log entry in the cyborg's internal tablet.
diff --git a/code/modules/mob/living/silicon/silicon_say.dm b/code/modules/mob/living/silicon/silicon_say.dm
index b1b8b4bc88010..1468b9c736591 100644
--- a/code/modules/mob/living/silicon/silicon_say.dm
+++ b/code/modules/mob/living/silicon/silicon_say.dm
@@ -8,7 +8,7 @@
var/mob/living/silicon/player = src
designation = trim_left(player.designation + " " + player.job)
- if(HAS_TRAIT(mind, DISPLAYS_JOB_IN_BINARY))
+ if(HAS_TRAIT(mind, TRAIT_DISPLAY_JOB_IN_BINARY))
designation = mind.assigned_role.title
if(isAI(src))
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index 944a00af9b63e..48d83da80a9c1 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -555,8 +555,8 @@
item_to_drop = drop_item
item_to_drop.forceMove(dropzone)
- if(istype(item_to_drop, /obj/item/stock_parts/cell))
- var/obj/item/stock_parts/cell/dropped_cell = item_to_drop
+ if(istype(item_to_drop, /obj/item/stock_parts/power_store/cell))
+ var/obj/item/stock_parts/power_store/cell/dropped_cell = item_to_drop
dropped_cell.charge = 0
dropped_cell.update_appearance()
@@ -1215,3 +1215,8 @@ Pass a positive integer as an argument to override a bot's default speed.
/mob/living/simple_animal/bot/spawn_gibs(drop_bitflags = NONE)
new /obj/effect/gibspawner/robot(drop_location(), src)
+
+/mob/living/simple_animal/bot/get_hit_area_message(input_area)
+ // we just get hit, there's no complexity for hitting an arm (if it exists) or anything.
+ // we also need to return an empty string as otherwise it would falsely say that we get hit in the chest or something strange like that (bots don't have "chests")
+ return ""
diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm
index 7d4565b46f4fb..80e2b8c0c8343 100644
--- a/code/modules/mob/living/simple_animal/bot/construction.dm
+++ b/code/modules/mob/living/simple_animal/bot/construction.dm
@@ -12,7 +12,7 @@
/obj/item/bot_assembly/attackby(obj/item/I, mob/user, params)
..()
- if(istype(I, /obj/item/pen))
+ if(IS_WRITING_UTENSIL(I))
rename_bot()
return
@@ -494,8 +494,8 @@
if(!can_finish_build(I, user))
return
to_chat(user, span_notice("You add the [I] to [src]! Beep Boop!"))
- var/mob/living/simple_animal/bot/firebot/F = new(drop_location())
- F.name = created_name
+ var/mob/living/basic/bot/firebot/firebot = new(drop_location())
+ firebot.name = created_name
qdel(I)
qdel(src)
diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm
deleted file mode 100644
index db883e9141b1f..0000000000000
--- a/code/modules/mob/living/simple_animal/bot/firebot.dm
+++ /dev/null
@@ -1,320 +0,0 @@
-//Firebot
-
-#define SPEECH_INTERVAL 300 // Time between idle speeches
-#define DETECTED_VOICE_INTERVAL 300 // Time between fire detected callouts
-#define FOAM_INTERVAL 50 // Time between deployment of fire fighting foam
-
-/mob/living/simple_animal/bot/firebot
- name = "\improper Firebot"
- desc = "A little fire extinguishing bot. He looks rather anxious."
- icon = 'icons/mob/silicon/aibots.dmi'
- icon_state = "firebot1"
- light_color = "#8cffc9"
- light_power = 0.8
- density = FALSE
- anchored = FALSE
- health = 25
- maxHealth = 25
-
- req_one_access = list(ACCESS_ROBOTICS, ACCESS_CONSTRUCTION)
- radio_key = /obj/item/encryptionkey/headset_eng
- radio_channel = RADIO_CHANNEL_ENGINEERING
- bot_type = FIRE_BOT
- hackables = "fire safety protocols"
- path_image_color = "#FFA500"
- possessed_message = "You are a firebot! Protect the station from fires to the best of your ability!"
-
- automated_announcements = list(
- FIREBOT_VOICED_FIRE_DETECTED = 'sound/voice/firebot/detected.ogg',
- FIREBOT_VOICED_STOP_DROP = 'sound/voice/firebot/stopdropnroll.ogg',
- FIREBOT_VOICED_EXTINGUISHING = 'sound/voice/firebot/extinguishing.ogg',
- FIREBOT_VOICED_NO_FIRES = 'sound/voice/firebot/nofires.ogg',
- FIREBOT_VOICED_ONLY_YOU = 'sound/voice/firebot/onlyyou.ogg',
- FIREBOT_VOICED_TEMPERATURE_NOMINAL = 'sound/voice/firebot/tempnominal.ogg',
- FIREBOT_VOICED_KEEP_COOL = 'sound/voice/firebot/keepitcool.ogg',
- )
-
- var/atom/target_fire
- var/atom/old_target_fire
-
- var/obj/item/extinguisher/internal_ext
-
- var/last_found = 0
-
- var/speech_cooldown = 0
- var/detected_cooldown = 0
- COOLDOWN_DECLARE(foam_cooldown)
-
- var/extinguish_people = TRUE
- var/extinguish_fires = TRUE
- var/stationary_mode = FALSE
-
-/mob/living/simple_animal/bot/firebot/Initialize(mapload)
- . = ..()
- ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT)
- update_appearance(UPDATE_ICON)
-
- // Doing this hurts my soul, but simplebot access reworks are for another day.
- var/datum/id_trim/job/engi_trim = SSid_access.trim_singletons_by_path[/datum/id_trim/job/station_engineer]
- access_card.add_access(engi_trim.access + engi_trim.wildcard_access)
- prev_access = access_card.access.Copy()
-
- create_extinguisher()
- AddElement(/datum/element/atmos_sensitive, mapload)
-
-/mob/living/simple_animal/bot/firebot/Destroy()
- QDEL_NULL(internal_ext)
- return ..()
-
-/mob/living/simple_animal/bot/firebot/bot_reset()
- create_extinguisher()
-
-/mob/living/simple_animal/bot/firebot/proc/create_extinguisher()
- internal_ext = new /obj/item/extinguisher(src)
- internal_ext.safety = FALSE
- internal_ext.precision = TRUE
- internal_ext.max_water = INFINITY
- internal_ext.refill()
-
-/mob/living/simple_animal/bot/firebot/UnarmedAttack(atom/A, proximity_flag, list/modifiers)
- if(!(bot_mode_flags & BOT_MODE_ON))
- return
- if(!can_unarmed_attack())
- return
- if(internal_ext)
- internal_ext.interact_with_atom(A, src, modifiers)
- else
- return ..()
-
-/mob/living/simple_animal/bot/firebot/RangedAttack(atom/A, proximity_flag, list/modifiers)
- if(!(bot_mode_flags & BOT_MODE_ON))
- return
- if(internal_ext)
- internal_ext.interact_with_atom(A, src, modifiers)
- else
- return ..()
-
-/mob/living/simple_animal/bot/firebot/turn_on()
- . = ..()
- update_appearance()
-
-/mob/living/simple_animal/bot/firebot/turn_off()
- ..()
- update_appearance()
-
-/mob/living/simple_animal/bot/firebot/bot_reset()
- ..()
- target_fire = null
- old_target_fire = null
- set_anchored(FALSE)
- update_appearance()
-
-/mob/living/simple_animal/bot/firebot/proc/soft_reset()
- path = list()
- target_fire = null
- mode = BOT_IDLE
- last_found = world.time
- update_appearance()
-
-/mob/living/simple_animal/bot/firebot/emag_act(mob/user, obj/item/card/emag/emag_card)
- . = ..()
- if(!(bot_cover_flags & BOT_COVER_EMAGGED))
- return
-
- to_chat(user, span_warning("You enable the very ironically named \"fighting with fire\" mode, and disable the targeting safeties.")) // heheehe. funny
-
- audible_message(span_danger("[src] buzzes oddly!"))
- playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
- if(user)
- old_target_fire = user
- extinguish_fires = FALSE
- extinguish_people = TRUE
-
- internal_ext = new /obj/item/extinguisher(src)
- internal_ext.chem = /datum/reagent/clf3 //Refill the internal extinguisher with liquid fire
- internal_ext.power = 3
- internal_ext.safety = FALSE
- internal_ext.precision = FALSE
- internal_ext.max_water = INFINITY
- internal_ext.refill()
- return TRUE
-
-// Variables sent to TGUI
-/mob/living/simple_animal/bot/firebot/ui_data(mob/user)
- var/list/data = ..()
- if(!(bot_cover_flags & BOT_COVER_LOCKED) || HAS_SILICON_ACCESS(user))
- data["custom_controls"]["extinguish_fires"] = extinguish_fires
- data["custom_controls"]["extinguish_people"] = extinguish_people
- data["custom_controls"]["stationary_mode"] = stationary_mode
- return data
-
-// Actions received from TGUI
-/mob/living/simple_animal/bot/firebot/ui_act(action, params)
- . = ..()
- if(. || (bot_cover_flags & BOT_COVER_LOCKED && !HAS_SILICON_ACCESS(usr)))
- return
-
- switch(action)
- if("extinguish_fires")
- extinguish_fires = !extinguish_fires
- if("extinguish_people")
- extinguish_people = !extinguish_people
- if("stationary_mode")
- stationary_mode = !stationary_mode
- update_appearance()
-
-/mob/living/simple_animal/bot/firebot/proc/is_burning(atom/target)
- if(ismob(target))
- var/mob/living/M = target
- if(M.on_fire || (bot_cover_flags & BOT_COVER_EMAGGED && !M.on_fire))
- return TRUE
-
- else if(isturf(target))
- var/turf/open/T = target
- if(T.active_hotspot)
- return TRUE
-
- return FALSE
-
-/mob/living/simple_animal/bot/firebot/handle_automated_action()
- if(!..())
- return
-
- if(IsStun() || IsParalyzed())
- old_target_fire = target_fire
- target_fire = null
- mode = BOT_IDLE
- return
-
- if(prob(1) && target_fire == null)
- var/static/list/idle_line = list(
- FIREBOT_VOICED_NO_FIRES,
- FIREBOT_VOICED_ONLY_YOU,
- FIREBOT_VOICED_TEMPERATURE_NOMINAL,
- FIREBOT_VOICED_KEEP_COOL,
- )
- speak(pick(idle_line))
-
- // Couldn't reach the target, reset and try again ignoring the old one
- if(frustration > 8)
- old_target_fire = target_fire
- soft_reset()
-
- // We extinguished our target or it was deleted
- if(QDELETED(target_fire) || !is_burning(target_fire) || isdead(target_fire))
- target_fire = null
- var/scan_range = (stationary_mode ? 1 : DEFAULT_SCAN_RANGE)
-
- var/list/things_to_extinguish = list()
- if(extinguish_people)
- things_to_extinguish += list(/mob/living)
-
- if(target_fire == null && extinguish_fires)
- things_to_extinguish += list(/turf/open)
-
- target_fire = scan(things_to_extinguish, old_target_fire, scan_range) // Scan for burning turfs second
- old_target_fire = target_fire
-
- // Target reached ENGAGE WATER CANNON
- if(target_fire && (get_dist(src, target_fire) <= (bot_cover_flags & BOT_COVER_EMAGGED ? 1 : 2))) // Make the bot spray water from afar when not emagged
- if((speech_cooldown + SPEECH_INTERVAL) < world.time)
- if(ishuman(target_fire))
- speak(FIREBOT_VOICED_STOP_DROP)
- else
- speak(FIREBOT_VOICED_EXTINGUISHING)
- speech_cooldown = world.time
-
- flick("firebot1_use", src)
- spray_water(target_fire, src)
-
- soft_reset()
-
- // Target ran away
- else if(target_fire && path.len && (get_dist(target_fire,path[path.len]) > 2))
- path = list()
- mode = BOT_IDLE
- last_found = world.time
-
- else if(target_fire && stationary_mode)
- soft_reset()
- return
-
- if(target_fire && (get_dist(src, target_fire) > 2))
-
- path = get_path_to(src, target_fire, max_distance=30, mintargetdist=1, access=access_card.GetAccess())
- mode = BOT_MOVING
- if(!path.len)
- soft_reset()
-
- if(path.len > 0 && target_fire)
- if(!bot_move(path[path.len]))
- old_target_fire = target_fire
- soft_reset()
- return
-
- // We got a target but it's too far away from us
- if(path.len > 8 && target_fire)
- frustration++
-
- if(bot_mode_flags & BOT_MODE_AUTOPATROL && !target_fire)
- switch(mode)
- if(BOT_IDLE, BOT_START_PATROL)
- start_patrol()
- if(BOT_PATROL)
- bot_patrol()
-
-
-//Look for burning people or turfs around the bot
-/mob/living/simple_animal/bot/firebot/process_scan(atom/scan_target)
- if(!is_burning(scan_target))
- return null
-
- if((detected_cooldown + DETECTED_VOICE_INTERVAL) < world.time)
- speak(FIREBOT_VOICED_FIRE_DETECTED)
- detected_cooldown = world.time
- return scan_target
-
-/mob/living/simple_animal/bot/firebot/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
- return (exposed_temperature > T0C + 200 || exposed_temperature < BODYTEMP_COLD_DAMAGE_LIMIT)
-
-/mob/living/simple_animal/bot/firebot/atmos_expose(datum/gas_mixture/air, exposed_temperature)
- if(COOLDOWN_FINISHED(src, foam_cooldown))
- var/datum/effect_system/fluid_spread/foam/firefighting/foam = new
- foam.set_up(3, holder = src, location = loc)
- foam.start()
- COOLDOWN_START(src, foam_cooldown, FOAM_INTERVAL)
-
-/mob/living/simple_animal/bot/firebot/proc/spray_water(atom/target, mob/user)
- if(stationary_mode)
- flick("firebots_use", user)
- else
- flick("firebot1_use", user)
- internal_ext.interact_with_atom(target, src)
-
-/mob/living/simple_animal/bot/firebot/update_icon_state()
- . = ..()
- if(!(bot_mode_flags & BOT_MODE_ON))
- icon_state = "firebot0"
- return
- if(IsStun() || IsParalyzed() || stationary_mode) //Bot has yellow light to indicate stationary mode.
- icon_state = "firebots1"
- return
- icon_state = "firebot1"
-
-
-/mob/living/simple_animal/bot/firebot/explode()
- var/atom/Tsec = drop_location()
-
- new /obj/item/assembly/prox_sensor(Tsec)
- new /obj/item/clothing/head/utility/hardhat/red(Tsec)
-
- var/turf/T = get_turf(Tsec)
-
- if(isopenturf(T))
- var/turf/open/theturf = T
- theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS)
- return ..()
-
-#undef SPEECH_INTERVAL
-#undef DETECTED_VOICE_INTERVAL
-#undef FOAM_INTERVAL
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index 51b2f3954973d..39db78fdffb1d 100644
--- a/code/modules/mob/living/simple_animal/bot/mulebot.dm
+++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm
@@ -52,7 +52,7 @@
var/auto_pickup = TRUE /// true if auto-pickup at beacon
var/report_delivery = TRUE /// true if bot will announce an arrival to a location.
- var/obj/item/stock_parts/cell/cell /// Internal Powercell
+ var/obj/item/stock_parts/power_store/cell /// Internal Powercell
var/cell_move_power_usage = 1///How much power we use when we move.
var/num_steps = 0 ///The amount of steps we should take until we rest for a time.
@@ -78,7 +78,7 @@
access_card.add_access(cargo_trim.access + cargo_trim.wildcard_access)
prev_access = access_card.access.Copy()
- cell = new /obj/item/stock_parts/cell/upgraded(src, 2000)
+ cell = new /obj/item/stock_parts/power_store/cell/upgraded(src, 2000)
AddElement(/datum/element/ridable, /datum/component/riding/creature/mulebot)
diag_hud_set_mulebotcell()
@@ -181,7 +181,7 @@
return ITEM_INTERACT_SUCCESS
/mob/living/simple_animal/bot/mulebot/attackby(obj/item/I, mob/living/user, params)
- if(istype(I, /obj/item/stock_parts/cell) && bot_cover_flags & BOT_COVER_MAINTS_OPEN)
+ if(istype(I, /obj/item/stock_parts/power_store/cell) && bot_cover_flags & BOT_COVER_MAINTS_OPEN)
if(cell)
to_chat(user, span_warning("[src] already has a power cell!"))
return TRUE
@@ -486,7 +486,8 @@
. = ..()
if(has_gravity())
for(var/mob/living/carbon/human/future_pancake in loc)
- run_over(future_pancake)
+ if(future_pancake.body_position == LYING_DOWN)
+ run_over(future_pancake)
diag_hud_set_mulebotcell()
@@ -637,7 +638,7 @@
if(load) // if loaded, unload at target
if(report_delivery)
- speak("Destination [destination] reached. Unloading [load].",radio_channel)
+ speak("Destination [RUNECHAT_BOLD("[destination]")] reached. Unloading [load].",radio_channel)
unload(loaddir)
else
// not loaded
@@ -653,7 +654,7 @@
if(AM?.Adjacent(src))
load(AM)
if(report_delivery)
- speak("Now loading [load] at [get_area_name(src)].", radio_channel)
+ speak("Now loading [load] at [RUNECHAT_BOLD("[get_area_name(src)]")].", radio_channel)
// whatever happened, check to see if we return home
if(auto_return && home_destination && destination != home_destination)
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index ba0e10484d81d..7448f6d34bc79 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -121,7 +121,7 @@
/mob/living/simple_animal/bot/secbot/beepsky/explode()
var/atom/Tsec = drop_location()
- new /obj/item/stock_parts/cell/potato(Tsec)
+ new /obj/item/stock_parts/power_store/cell/potato(Tsec)
var/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass/drinking_oil = new(Tsec)
drinking_oil.reagents.add_reagent(/datum/reagent/consumable/ethanol/whiskey, 15)
return ..()
@@ -262,7 +262,7 @@
if(HAS_TRAIT(user, TRAIT_PACIFISM))
user.visible_message(span_notice("[user] taunts [src], daring [p_them()] to give chase!"), \
span_notice("You taunt [src], daring [p_them()] to chase you!"), span_hear("You hear someone shout a daring taunt!"), DEFAULT_MESSAGE_RANGE, user)
- speak("Taunted by pacifist scumbag [user] in [get_area(src)].", radio_channel)
+ speak("Taunted by pacifist scumbag [RUNECHAT_BOLD("[user]")] in [get_area(src)].", radio_channel)
// Interrupt the attack chain. We've already handled this scenario for pacifists.
return
@@ -374,7 +374,7 @@
log_combat(src, current_target, "stunned")
if(security_mode_flags & SECBOT_DECLARE_ARRESTS)
var/area/location = get_area(src)
- speak("[security_mode_flags & SECBOT_HANDCUFF_TARGET ? "Arresting" : "Detaining"] level [threat] scumbag [current_target] in [location].", radio_channel)
+ speak("[security_mode_flags & SECBOT_HANDCUFF_TARGET ? "Arresting" : "Detaining"] level [threat] scumbag [RUNECHAT_BOLD("[current_target]")] in [location].", radio_channel)
current_target.visible_message(span_danger("[src] stuns [current_target]!"),\
span_userdanger("[src] stuns you!"))
diff --git a/code/modules/mob/living/simple_animal/bot/vibebot.dm b/code/modules/mob/living/simple_animal/bot/vibebot.dm
deleted file mode 100644
index 582b1b5371da5..0000000000000
--- a/code/modules/mob/living/simple_animal/bot/vibebot.dm
+++ /dev/null
@@ -1,97 +0,0 @@
-/mob/living/simple_animal/bot/vibebot
- name = "\improper Vibebot"
- desc = "A little robot. It's just vibing, doing its thing."
- icon = 'icons/mob/silicon/aibots.dmi'
- icon_state = "vibebot1"
- base_icon_state = "vibebot"
- density = FALSE
- anchored = FALSE
- health = 25
- maxHealth = 25
- pass_flags = PASSMOB | PASSFLAPS
- light_system = OVERLAY_LIGHT
- light_range = 6
- light_power = 2
-
- hackables = "vibing scanners"
- radio_key = /obj/item/encryptionkey/headset_service
- radio_channel = RADIO_CHANNEL_SERVICE
- bot_type = VIBE_BOT
- data_hud_type = DATA_HUD_DIAGNOSTIC_BASIC
- path_image_color = "#2cac12"
- possessed_message = "You are a vibebot! Maintain the station's vibes to the best of your ability!"
-
- ///The vibe ability given to vibebots, so sentient ones can still change their color.
- var/datum/action/innate/vibe/vibe_ability
-
-/mob/living/simple_animal/bot/vibebot/Initialize(mapload)
- . = ..()
- vibe_ability = new(src)
- vibe_ability.Grant(src)
- update_appearance(UPDATE_ICON)
-
-/mob/living/simple_animal/bot/vibebot/Destroy()
- QDEL_NULL(vibe_ability)
- return ..()
-
-/mob/living/simple_animal/bot/vibebot/handle_automated_action()
- . = ..()
- if(!.)
- return
-
- if(bot_mode_flags & BOT_MODE_ON)
- vibe_ability.Trigger()
-
- if(!(bot_mode_flags & BOT_MODE_AUTOPATROL))
- return
-
- switch(mode)
- if(BOT_IDLE, BOT_START_PATROL)
- start_patrol()
- if(BOT_PATROL)
- bot_patrol()
-
-/mob/living/simple_animal/bot/vibebot/turn_off()
- vibe_ability.remove_colors()
- return ..()
-
-/**
- * Vibebot's vibe ability
- *
- * Given to vibebots so sentient ones can change/reset thier colors at will.
- */
-/datum/action/innate/vibe
- name = "Vibe"
- desc = "LMB: Change vibe color. RMB: Reset vibe color."
- button_icon = 'icons/mob/actions/actions_minor_antag.dmi'
- button_icon_state = "funk"
-
-/datum/action/innate/vibe/IsAvailable(feedback = FALSE)
- . = ..()
- if(!.)
- return FALSE
- if(isbot(owner))
- var/mob/living/simple_animal/bot/bot_mob = owner
- if(!(bot_mob.bot_mode_flags & BOT_MODE_ON))
- return FALSE
- return TRUE
-
-/datum/action/innate/vibe/Trigger(trigger_flags)
- . = ..()
- if(!.)
- return
- if(trigger_flags & TRIGGER_SECONDARY_ACTION)
- remove_colors()
- else
- vibe()
-
-///Gives a random color
-/datum/action/innate/vibe/proc/vibe()
- owner.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY)
- owner.add_atom_colour("#[random_color()]", TEMPORARY_COLOUR_PRIORITY)
- owner.set_light_color(owner.color)
-
-///Removes all colors
-/datum/action/innate/vibe/proc/remove_colors()
- owner.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY)
- owner.set_light_color(null)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
index 8fc667df5a876..464636cbb204d 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
@@ -187,11 +187,14 @@ Difficulty: Hard
if(!true_spawn)
return ..()
+ create_portal()
+ return ..()
+
+/mob/living/simple_animal/hostile/megafauna/wendigo/proc/create_portal()
var/obj/effect/portal/permanent/one_way/exit = new /obj/effect/portal/permanent/one_way(starting)
exit.id = "wendigo arena exit"
exit.add_atom_colour(COLOR_RED_LIGHT, ADMIN_COLOUR_PRIORITY)
exit.set_light(20, 1, COLOR_SOFT_RED)
- return ..()
/obj/projectile/colossus/wendigo_shockwave
name = "wendigo shockwave"
@@ -265,4 +268,7 @@ Difficulty: Hard
w_class = WEIGHT_CLASS_TINY
throwforce = 0
+/mob/living/simple_animal/hostile/megafauna/wendigo/noportal/create_portal()
+ return
+
#undef WENDIGO_ENRAGED
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
index 7139f6a92bfcd..8558601f12467 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
@@ -7,7 +7,7 @@
name = "elite"
desc = "An elite monster, found in one of the strange tumors on lavaland."
icon = 'icons/mob/simple/lavaland/lavaland_elites.dmi'
- faction = list(FACTION_BOSS)
+ faction = list(FACTION_MINING, FACTION_BOSS)
robust_searching = TRUE
ranged_ignores_vision = TRUE
ranged = TRUE
diff --git a/code/modules/mob/living/ventcrawling.dm b/code/modules/mob/living/ventcrawling.dm
index 3d7be3ea47e29..2fa18caf7bc20 100644
--- a/code/modules/mob/living/ventcrawling.dm
+++ b/code/modules/mob/living/ventcrawling.dm
@@ -1,4 +1,19 @@
// VENTCRAWLING
+
+/mob/living/proc/notify_ventcrawler_on_login()
+ var/ventcrawler = HAS_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS) || HAS_TRAIT(src, TRAIT_VENTCRAWLER_NUDE)
+ if(!ventcrawler)
+ return
+ to_chat(src, span_notice("You can ventcrawl! Use alt+click on vents to quickly travel about the station."))
+
+/mob/living/carbon/human/notify_ventcrawler_on_login()
+ if(!ismonkey(src))
+ return ..()
+ if(!istype(head, /obj/item/clothing/head/helmet/monkey_sentience)) //don't notify them about ventcrawling if they're wearing the sentience helmet, because they can't ventcrawl with it on, and if they take it off they'll no longer be in control of the mob.
+ return ..()
+
+
+
/// Checks if the mob is able to enter the vent, and provides feedback if they are unable to.
/mob/living/proc/can_enter_vent(obj/machinery/atmospherics/components/ventcrawl_target, provide_feedback = TRUE)
// Being able to always ventcrawl trumps being only able to ventcrawl when wearing nothing
@@ -31,7 +46,7 @@
to_chat(src, span_warning("You can't vent crawl while buckled!"))
return
if(iscarbon(src) && required_nudity)
- if(length(get_equipped_items(include_pockets = TRUE)) || get_num_held_items())
+ if(length(get_equipped_items(INCLUDE_POCKETS)) || get_num_held_items())
if(provide_feedback)
to_chat(src, span_warning("You can't crawl around in the ventilation ducts with items!"))
return
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index 2f013f855b855..81a9fa7c62447 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -100,6 +100,8 @@
update_client_colour()
update_mouse_pointer()
refresh_looping_ambience()
+ if(!can_hear())
+ stop_sound_channel(CHANNEL_AMBIENCE)
if(client)
if(client.view_size)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index ca393cf25666f..f24f5a58c0d8d 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1160,11 +1160,12 @@
* * ALLOW_VENTCRAWL - Mobs with ventcrawl traits can alt-click this to vent
* * BYPASS_ADJACENCY - The target does not have to be adjacent
* * SILENT_ADJACENCY - Adjacency is required but errors are not printed
+ * * NOT_INSIDE_TARGET - The target maybe adjacent but the mob should not be inside the target
*
* silence_adjacency: Sometimes we want to use this proc to check interaction without allowing it to throw errors for base case adjacency
* Alt click uses this, as otherwise you can detect what is interactable from a distance via the error message
**/
-/mob/proc/can_perform_action(atom/movable/target, action_bitflags)
+/mob/proc/can_perform_action(atom/target, action_bitflags)
return
///Can this mob use storage
@@ -1537,8 +1538,8 @@
else
speedies += thing.slowdown
- //if our movespeed mod is in the negatives, we don't modify it since that's a benefit
- if(speedies > 0 && HAS_TRAIT(src, TRAIT_SETTLER))
+ //if we have TRAIT_STURDY_FRAME, we reduce our overall speed penalty UNLESS that penalty would be a negative value, and therefore a speed boost.
+ if(speedies > 0 && HAS_TRAIT(src, TRAIT_STURDY_FRAME))
speedies *= 0.2
if(immutable_speedies)
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 9092efac428ca..a6a1c58c7eddf 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -331,19 +331,6 @@
toast.name = header
toast.target_ref = WEAKREF(source)
-/// Heals a robotic limb on a mob
-/proc/item_heal_robotic(mob/living/carbon/human/human, mob/user, brute_heal, burn_heal)
- var/obj/item/bodypart/affecting = human.get_bodypart(check_zone(user.zone_selected))
- if(!affecting || IS_ORGANIC_LIMB(affecting))
- to_chat(user, span_warning("[affecting] is already in good condition!"))
- return FALSE
- var/brute_damage = brute_heal > burn_heal //changes repair text based on how much brute/burn was supplied
- if((brute_heal > 0 && affecting.brute_dam > 0) || (burn_heal > 0 && affecting.burn_dam > 0))
- if(affecting.heal_damage(brute_heal, burn_heal, required_bodytype = BODYTYPE_ROBOTIC))
- human.update_damage_overlays()
- user.visible_message(span_notice("[user] fixes some of the [brute_damage ? "dents on" : "burnt wires in"] [human]'s [affecting.name]."), \
- span_notice("You fix some of the [brute_damage ? "dents on" : "burnt wires in"] [human == user ? "your" : "[human]'s"] [affecting.name]."))
- return TRUE //successful heal
///Is the passed in mob a ghost with admin powers, doesn't check for AI interact like isAdminGhost() used to
diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm
index 7caa4489095ff..568aee6690292 100644
--- a/code/modules/mob/mob_say.dm
+++ b/code/modules/mob/mob_say.dm
@@ -181,7 +181,7 @@
var/customsaypos = findtext(message, "*")
if(!customsaypos)
return message
- if (is_banned_from(ckey, "Emote"))
+ if (!isnull(ckey) && is_banned_from(ckey, "Emote"))
return copytext(message, customsaypos + 1)
mods[MODE_CUSTOM_SAY_EMOTE] = copytext(message, 1, customsaypos)
message = copytext(message, customsaypos + 1)
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index b4fbd713065aa..5d46f3c0dc06a 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -67,6 +67,7 @@
transformation_timer = addtimer(CALLBACK(src, PROC_REF(finish_humanize), species), TRANSFORMATION_DURATION, TIMER_UNIQUE)
+
/mob/living/carbon/proc/finish_humanize(species = /datum/species/human)
transformation_timer = null
to_chat(src, span_boldnotice("You are now a human."))
@@ -77,6 +78,12 @@
SEND_SIGNAL(src, COMSIG_MONKEY_HUMANIZE)
return src
+/mob/living/carbon/human/finish_humanize(species = /datum/species/human, instant = FALSE)
+ underwear = "Nude"
+ undershirt = "Nude"
+ socks = "Nude"
+ return ..()
+
/mob/proc/AIize(client/preference_source, move = TRUE)
var/list/turf/landmark_loc = list()
@@ -140,8 +147,8 @@
new_borg.gender = gender
new_borg.SetInvisibility(INVISIBILITY_NONE)
- if(client)
- new_borg.updatename(client)
+ if(client?.prefs.read_preference(/datum/preference/name/cyborg) != DEFAULT_CYBORG_NAME)
+ new_borg.apply_pref_name(/datum/preference/name/cyborg, client)
if(mind) //TODO //TODO WHAT
if(!transfer_after)
@@ -312,7 +319,7 @@
SSblackbox.record_feedback("amount", "gorillas_created", 1)
- var/Itemlist = get_equipped_items(include_pockets = TRUE)
+ var/Itemlist = get_equipped_items(INCLUDE_POCKETS)
Itemlist += held_items
for(var/obj/item/W in Itemlist)
dropItemToGround(W, TRUE)
diff --git a/code/modules/mob_spawn/corpses/nanotrasen_corpses.dm b/code/modules/mob_spawn/corpses/nanotrasen_corpses.dm
index 0940815f1fc56..0ed30e5a5215d 100644
--- a/code/modules/mob_spawn/corpses/nanotrasen_corpses.dm
+++ b/code/modules/mob_spawn/corpses/nanotrasen_corpses.dm
@@ -25,7 +25,7 @@
suit = /obj/item/clothing/suit/armor/bulletproof
ears = /obj/item/radio/headset/heads/captain
glasses = /obj/item/clothing/glasses/eyepatch
- mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
+ mask = /obj/item/cigarette/cigar/cohiba
head = /obj/item/clothing/head/hats/centhat
gloves = /obj/item/clothing/gloves/tackler/combat
shoes = /obj/item/clothing/shoes/combat/swat
diff --git a/code/modules/mob_spawn/ghost_roles/space_roles.dm b/code/modules/mob_spawn/ghost_roles/space_roles.dm
index 764d20c9a76c1..79d028bdbcb27 100644
--- a/code/modules/mob_spawn/ghost_roles/space_roles.dm
+++ b/code/modules/mob_spawn/ghost_roles/space_roles.dm
@@ -181,6 +181,6 @@
ears = /obj/item/radio/headset/syndicate/alt/leader
glasses = /obj/item/clothing/glasses/thermal/eyepatch
head = /obj/item/clothing/head/hats/hos/cap/syndicate
- mask = /obj/item/clothing/mask/cigarette/cigar/havana
+ mask = /obj/item/cigarette/cigar/havana
l_pocket = /obj/item/melee/energy/sword/saber/red
r_pocket = /obj/item/melee/baton/telescopic
diff --git a/code/modules/mob_spawn/mob_spawn.dm b/code/modules/mob_spawn/mob_spawn.dm
index ad8c7e6a03ef0..c9130fb706e1b 100644
--- a/code/modules/mob_spawn/mob_spawn.dm
+++ b/code/modules/mob_spawn/mob_spawn.dm
@@ -139,6 +139,10 @@
/// Typepath indicating the kind of job datum this ghost role will have. PLEASE inherit this with a new job datum, it's not hard. jobs come with policy configs.
var/spawner_job_path = /datum/job/ghost_role
+ /// Whether this offers a temporary body or not. Essentially, you'll be able to reenter your body after using this spawner.
+ var/temp_body = FALSE
+
+
/obj/effect/mob_spawn/ghost_role/Initialize(mapload)
. = ..()
SSpoints_of_interest.make_point_of_interest(src)
@@ -165,7 +169,7 @@
if(prompt_ghost)
var/prompt = "Become [prompt_name]?"
- if(user.can_reenter_corpse && user.mind)
+ if(!temp_body && user.can_reenter_corpse && user.mind)
prompt += " (Warning, You can no longer be revived!)"
var/ghost_role = tgui_alert(usr, prompt, buttons = list("Yes", "No"), timeout = 10 SECONDS)
if(ghost_role != "Yes" || !loc || QDELETED(user))
@@ -213,7 +217,8 @@
user.log_message("became a [prompt_name].", LOG_GAME)
uses -= 1 // Remove a use before trying to spawn to prevent strangeness like the spawner trying to spawn more mobs than it should be able to
- user.mind = null // dissassociate mind, don't let it follow us to the next life
+ if(!temp_body)
+ user.mind = null // dissassociate mind, don't let it follow us to the next life
var/created = create(user)
LAZYREMOVE(ckeys_trying_to_spawn, user_ckey) // We do this AFTER the create() so that we're basically sure that the user won't be in their ghost body anymore, so they can't click on the spawner again.
diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm
index c386f7f51c634..350c2fabc3069 100644
--- a/code/modules/mod/mod_control.dm
+++ b/code/modules/mod/mod_control.dm
@@ -144,9 +144,6 @@
if(active)
. += span_notice("Charge: [core ? "[get_charge_percent()]%" : "No core"].")
. += span_notice("Selected module: [selected_module || "None"].")
- if(atom_storage)
- . += span_notice("While the suit's panel is open, \
- being on combat mode will prevent you from inserting items into it when clicking on it.")
if(!open && !active)
if(!wearer)
. += span_notice("You could equip it to turn it on.")
@@ -278,7 +275,6 @@
return ITEM_INTERACT_SUCCESS
/obj/item/mod/control/crowbar_act(mob/living/user, obj/item/crowbar)
- . = ..()
if(!open)
balloon_alert(user, "open the cover first!")
playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
@@ -309,32 +305,32 @@
return ITEM_INTERACT_BLOCKING
/obj/item/mod/control/storage_insert_on_interacted_with(datum/storage, obj/item/inserted, mob/living/user)
- if(user.combat_mode)
- // Block all item-click-inserts when we're open
- // Other form of insertion will still function (mousedrop, hotkey)
- if(open)
- return FALSE
- // ...You have to open it up somehow though
- if(inserted.tool_behaviour == TOOL_SCREWDRIVER)
- return FALSE
+ // Hack. revisit later
+ if(istype(inserted, /obj/item/aicard))
+ var/obj/item/aicard/ai_card = inserted
+ if(ai_card.AI)
+ return FALSE // we want to get an AI assistant, try uploading instead of insertion
+ if(ai_assistant)
+ return FALSE // we already have an AI assistant, try withdrawing instead of insertion
return TRUE
-/obj/item/mod/control/item_interaction(mob/living/user, obj/item/attacking_item, list/modifiers)
- if(istype(attacking_item, /obj/item/pai_card))
+// Makes use of tool act to prevent shoving stuff into our internal storage
+/obj/item/mod/control/tool_act(mob/living/user, obj/item/tool, list/modifiers)
+ if(istype(tool, /obj/item/pai_card))
if(!open)
balloon_alert(user, "open the cover first!")
return ITEM_INTERACT_BLOCKING
- insert_pai(user, attacking_item)
+ insert_pai(user, tool)
return ITEM_INTERACT_SUCCESS
- if(istype(attacking_item, /obj/item/mod/module))
+ if(istype(tool, /obj/item/mod/module))
if(!open)
balloon_alert(user, "open the cover first!")
playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
return ITEM_INTERACT_BLOCKING
- install(attacking_item, user)
+ install(tool, user)
SEND_SIGNAL(src, COMSIG_MOD_MODULE_ADDED, user)
return ITEM_INTERACT_SUCCESS
- if(istype(attacking_item, /obj/item/mod/core))
+ if(istype(tool, /obj/item/mod/core))
if(!open)
balloon_alert(user, "open the cover first!")
playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
@@ -343,22 +339,23 @@
balloon_alert(user, "core already installed!")
playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
return ITEM_INTERACT_BLOCKING
- var/obj/item/mod/core/attacking_core = attacking_item
+ var/obj/item/mod/core/attacking_core = tool
attacking_core.install(src)
balloon_alert(user, "core installed")
playsound(src, 'sound/machines/click.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE)
return ITEM_INTERACT_SUCCESS
if(open)
- if(is_wire_tool(attacking_item))
+ if(is_wire_tool(tool))
wires.interact(user)
return ITEM_INTERACT_SUCCESS
- if(attacking_item.GetID())
- update_access(user, attacking_item.GetID())
+ var/obj/item/id = tool.GetID()
+ if(id)
+ update_access(user, id)
return ITEM_INTERACT_SUCCESS
- return NONE
+ return ..()
/obj/item/mod/control/get_cell()
- var/obj/item/stock_parts/cell/cell = get_charge_source()
+ var/obj/item/stock_parts/power_store/cell = get_charge_source()
if(!istype(cell))
return null
return cell
diff --git a/code/modules/mod/mod_core.dm b/code/modules/mod/mod_core.dm
index e62be77fe557e..0c13efa1b950c 100644
--- a/code/modules/mod/mod_core.dm
+++ b/code/modules/mod/mod_core.dm
@@ -85,7 +85,7 @@
Which one you have in your suit is unclear, but either way, \
it's been repurposed to be an internal power source for a Modular Outerwear Device."
/// Installed cell.
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
/obj/item/mod/core/standard/Destroy()
QDEL_NULL(cell)
@@ -97,7 +97,8 @@
install_cell(cell)
RegisterSignal(mod, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
RegisterSignal(mod, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_attack_hand))
- RegisterSignal(mod, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby))
+ RegisterSignal(mod, COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, PROC_REF(on_mod_storage_insert))
+ RegisterSignal(mod, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(on_mod_interaction))
RegisterSignal(mod, COMSIG_MOD_WEARER_SET, PROC_REF(on_wearer_set))
if(mod.wearer)
on_wearer_set(mod, mod.wearer)
@@ -105,7 +106,13 @@
/obj/item/mod/core/standard/uninstall()
if(!QDELETED(cell))
cell.forceMove(drop_location())
- UnregisterSignal(mod, list(COMSIG_ATOM_EXAMINE, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ATTACKBY, COMSIG_MOD_WEARER_SET))
+ UnregisterSignal(mod, list(
+ COMSIG_ATOM_EXAMINE,
+ COMSIG_ATOM_ATTACK_HAND,
+ COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT,
+ COMSIG_ATOM_ITEM_INTERACTION,
+ COMSIG_MOD_WEARER_SET,
+ ))
if(mod.wearer)
on_wearer_unset(mod, mod.wearer)
return ..()
@@ -114,15 +121,15 @@
return cell
/obj/item/mod/core/standard/charge_amount()
- var/obj/item/stock_parts/cell/charge_source = charge_source()
+ var/obj/item/stock_parts/power_store/charge_source = charge_source()
return charge_source?.charge || 0
/obj/item/mod/core/standard/max_charge_amount(amount)
- var/obj/item/stock_parts/cell/charge_source = charge_source()
+ var/obj/item/stock_parts/power_store/charge_source = charge_source()
return charge_source?.maxcharge || 1
/obj/item/mod/core/standard/add_charge(amount)
- var/obj/item/stock_parts/cell/charge_source = charge_source()
+ var/obj/item/stock_parts/power_store/charge_source = charge_source()
if(isnull(charge_source))
return FALSE
. = charge_source.give(amount)
@@ -131,7 +138,7 @@
return .
/obj/item/mod/core/standard/subtract_charge(amount)
- var/obj/item/stock_parts/cell/charge_source = charge_source()
+ var/obj/item/stock_parts/power_store/charge_source = charge_source()
if(isnull(charge_source))
return FALSE
. = charge_source.use(amount, TRUE)
@@ -206,23 +213,37 @@
cell_to_move.forceMove(drop_location())
user.put_in_hands(cell_to_move)
-/obj/item/mod/core/standard/proc/on_attackby(datum/source, obj/item/attacking_item, mob/user)
+/obj/item/mod/core/standard/proc/on_mod_storage_insert(datum/source, obj/item/thing, mob/living/user)
SIGNAL_HANDLER
- if(istype(attacking_item, /obj/item/stock_parts/cell))
- if(!mod.open)
- mod.balloon_alert(user, "open the cover first!")
- playsound(mod, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
- return NONE
- if(cell)
- mod.balloon_alert(user, "cell already installed!")
- playsound(mod, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
- return COMPONENT_NO_AFTERATTACK
- install_cell(attacking_item)
- mod.balloon_alert(user, "cell installed")
- playsound(mod, 'sound/machines/click.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE)
- return COMPONENT_NO_AFTERATTACK
- return NONE
+ return replace_cell(thing, user) ? BLOCK_STORAGE_INSERT : NONE
+
+/obj/item/mod/core/standard/proc/on_mod_interaction(datum/source, mob/living/user, obj/item/thing)
+ SIGNAL_HANDLER
+
+ if(mod.atom_storage) // handled by the storage signal
+ return NONE
+
+ return item_interaction(user, thing)
+
+/obj/item/mod/core/standard/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ return replace_cell(tool, user) ? ITEM_INTERACT_SUCCESS : NONE
+
+/obj/item/mod/core/standard/proc/replace_cell(obj/item/attacking_item, mob/user)
+ if(!istype(attacking_item, /obj/item/stock_parts/power_store/cell))
+ return FALSE
+ if(!mod.open)
+ mod.balloon_alert(user, "open the cover first!")
+ playsound(mod, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
+ return FALSE
+ if(cell)
+ mod.balloon_alert(user, "cell already installed!")
+ playsound(mod, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
+ return FALSE
+ install_cell(attacking_item)
+ mod.balloon_alert(user, "cell installed")
+ playsound(mod, 'sound/machines/click.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE)
+ return TRUE
/obj/item/mod/core/standard/proc/on_wearer_set(datum/source, mob/user)
SIGNAL_HANDLER
@@ -239,7 +260,7 @@
/obj/item/mod/core/standard/proc/on_borg_charge(datum/source, datum/callback/charge_cell, seconds_per_tick)
SIGNAL_HANDLER
- var/obj/item/stock_parts/cell/target_cell = charge_source()
+ var/obj/item/stock_parts/power_store/target_cell = charge_source()
if(isnull(target_cell))
return
@@ -303,15 +324,11 @@
/obj/item/mod/core/plasma/install(obj/item/mod/control/mod_unit)
. = ..()
- RegisterSignal(mod, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby))
+ RegisterSignal(mod, COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, PROC_REF(on_mod_storage_insert))
+ RegisterSignal(mod, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(on_mod_interaction))
/obj/item/mod/core/plasma/uninstall()
- UnregisterSignal(mod, COMSIG_ATOM_ATTACKBY)
- return ..()
-
-/obj/item/mod/core/plasma/attackby(obj/item/attacking_item, mob/user, params)
- if(charge_plasma(attacking_item, user))
- return TRUE
+ UnregisterSignal(mod, list(COMSIG_ATOM_STORAGE_ITEM_INTERACT_INSERT, COMSIG_ATOM_ITEM_INTERACTION))
return ..()
/obj/item/mod/core/plasma/charge_source()
@@ -350,19 +367,28 @@
return "empty"
-/obj/item/mod/core/plasma/proc/on_attackby(datum/source, obj/item/attacking_item, mob/user)
+/obj/item/mod/core/plasma/proc/on_mod_storage_insert(datum/source, obj/item/thing, mob/living/user)
SIGNAL_HANDLER
- if(charge_plasma(attacking_item, user))
- return COMPONENT_NO_AFTERATTACK
- return NONE
+ return charge_plasma(thing, user) ? BLOCK_STORAGE_INSERT : NONE
+
+/obj/item/mod/core/plasma/proc/on_mod_interaction(datum/source, mob/living/user, obj/item/thing)
+ SIGNAL_HANDLER
+
+ if(mod.atom_storage) // handled by the storage signal
+ return NONE
+
+ return item_interaction(thing, user)
+
+/obj/item/mod/core/plasma/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ return charge_plasma(tool, user) ? ITEM_INTERACT_SUCCESS : NONE
/obj/item/mod/core/plasma/proc/charge_plasma(obj/item/stack/plasma, mob/user)
var/charge_given = is_type_in_list(plasma, charger_list, zebra = TRUE)
if(!charge_given)
return FALSE
var/uses_needed = min(plasma.amount, ROUND_UP((max_charge_amount() - charge_amount()) / charge_given))
- if(!plasma.use(uses_needed))
+ if(uses_needed <= 0 || !plasma.use(uses_needed))
return FALSE
add_charge(uses_needed * charge_given)
balloon_alert(user, "core refueled")
diff --git a/code/modules/mod/mod_link.dm b/code/modules/mod/mod_link.dm
index 40a0fb94f17f7..5733d48f45f6f 100644
--- a/code/modules/mod/mod_link.dm
+++ b/code/modules/mod/mod_link.dm
@@ -140,7 +140,7 @@
icon_state = "modlink"
actions_types = list(/datum/action/item_action/call_link)
/// The installed power cell.
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
/// The MODlink datum we operate.
var/datum/mod_link/mod_link
/// Initial frequency of the MODlink.
@@ -203,7 +203,7 @@
/obj/item/clothing/neck/link_scryer/attackby(obj/item/attacked_by, mob/user, params)
. = ..()
- if(cell || !istype(attacked_by, /obj/item/stock_parts/cell))
+ if(cell || !istype(attacked_by, /obj/item/stock_parts/power_store/cell))
return
if(!user.transferItemToLoc(attacked_by, src))
return
@@ -311,7 +311,7 @@
/obj/item/clothing/neck/link_scryer/loaded/Initialize(mapload)
. = ..()
- cell = new /obj/item/stock_parts/cell/high(src)
+ cell = new /obj/item/stock_parts/power_store/cell/high(src)
/obj/item/clothing/neck/link_scryer/loaded/charlie
starting_frequency = MODLINK_FREQ_CHARLIE
diff --git a/code/modules/mod/mod_types.dm b/code/modules/mod/mod_types.dm
index 539237fa3e801..d6465960beb28 100644
--- a/code/modules/mod/mod_types.dm
+++ b/code/modules/mod/mod_types.dm
@@ -5,7 +5,7 @@
/// The MOD core we apply to the suit.
var/applied_core = /obj/item/mod/core/standard
/// The cell we apply to the core. Only applies to standard core suits.
- var/applied_cell = /obj/item/stock_parts/cell/high
+ var/applied_cell = /obj/item/stock_parts/power_store/cell/high
/// List of modules we spawn with.
var/list/applied_modules = list()
/// Modules that we pin when the suit is installed for the first time, for convenience, can be applied or theme inbuilt modules.
@@ -82,7 +82,7 @@
/obj/item/mod/control/pre_equipped/advanced
theme = /datum/mod_theme/advanced
- applied_cell = /obj/item/stock_parts/cell/super
+ applied_cell = /obj/item/stock_parts/power_store/cell/super
applied_modules = list(
/obj/item/mod/module/storage/large_capacity,
/obj/item/mod/module/welding,
@@ -139,7 +139,7 @@
/obj/item/mod/control/pre_equipped/rescue
theme = /datum/mod_theme/rescue
- applied_cell = /obj/item/stock_parts/cell/super
+ applied_cell = /obj/item/stock_parts/power_store/cell/super
applied_modules = list(
/obj/item/mod/module/storage/large_capacity,
/obj/item/mod/module/flashlight,
@@ -149,7 +149,7 @@
/obj/item/mod/control/pre_equipped/research
theme = /datum/mod_theme/research
- applied_cell = /obj/item/stock_parts/cell/super
+ applied_cell = /obj/item/stock_parts/power_store/cell/super
applied_modules = list(
/obj/item/mod/module/storage/large_capacity,
/obj/item/mod/module/welding,
@@ -174,7 +174,7 @@
/obj/item/mod/control/pre_equipped/safeguard
theme = /datum/mod_theme/safeguard
- applied_cell = /obj/item/stock_parts/cell/super
+ applied_cell = /obj/item/stock_parts/power_store/cell/super
applied_modules = list(
/obj/item/mod/module/storage/large_capacity,
/obj/item/mod/module/magnetic_harness,
@@ -192,7 +192,7 @@
/obj/item/mod/control/pre_equipped/magnate
theme = /datum/mod_theme/magnate
- applied_cell = /obj/item/stock_parts/cell/hyper
+ applied_cell = /obj/item/stock_parts/power_store/cell/hyper
applied_modules = list(
/obj/item/mod/module/storage/large_capacity,
/obj/item/mod/module/hat_stabilizer,
@@ -218,7 +218,7 @@
/obj/item/mod/control/pre_equipped/traitor
theme = /datum/mod_theme/syndicate
starting_frequency = MODLINK_FREQ_SYNDICATE
- applied_cell = /obj/item/stock_parts/cell/super
+ applied_cell = /obj/item/stock_parts/power_store/cell/super
applied_modules = list(
/obj/item/mod/module/storage/syndicate,
/obj/item/mod/module/shock_absorber,
@@ -239,7 +239,7 @@
/obj/item/mod/control/pre_equipped/traitor_elite
theme = /datum/mod_theme/elite
starting_frequency = MODLINK_FREQ_SYNDICATE
- applied_cell = /obj/item/stock_parts/cell/bluespace
+ applied_cell = /obj/item/stock_parts/power_store/cell/bluespace
applied_modules = list(
/obj/item/mod/module/storage/syndicate,
/obj/item/mod/module/shock_absorber,
@@ -261,7 +261,7 @@
/obj/item/mod/control/pre_equipped/nuclear
theme = /datum/mod_theme/syndicate
starting_frequency = MODLINK_FREQ_SYNDICATE
- applied_cell = /obj/item/stock_parts/cell/hyper
+ applied_cell = /obj/item/stock_parts/power_store/cell/hyper
req_access = list(ACCESS_SYNDICATE)
applied_modules = list(
/obj/item/mod/module/storage/syndicate,
@@ -298,7 +298,7 @@
/obj/item/mod/control/pre_equipped/elite
theme = /datum/mod_theme/elite
starting_frequency = MODLINK_FREQ_SYNDICATE
- applied_cell = /obj/item/stock_parts/cell/bluespace
+ applied_cell = /obj/item/stock_parts/power_store/cell/bluespace
req_access = list(ACCESS_SYNDICATE)
applied_modules = list(
/obj/item/mod/module/storage/syndicate,
@@ -341,7 +341,7 @@
/obj/item/mod/control/pre_equipped/infiltrator
theme = /datum/mod_theme/infiltrator
starting_frequency = MODLINK_FREQ_SYNDICATE
- applied_cell = /obj/item/stock_parts/cell/super
+ applied_cell = /obj/item/stock_parts/power_store/cell/super
applied_modules = list(
/obj/item/mod/module/emp_shield,
/obj/item/mod/module/magnetic_harness,
@@ -355,7 +355,7 @@
/obj/item/mod/control/pre_equipped/interdyne
theme = /datum/mod_theme/interdyne
starting_frequency = MODLINK_FREQ_SYNDICATE
- applied_cell = /obj/item/stock_parts/cell/super
+ applied_cell = /obj/item/stock_parts/power_store/cell/super
applied_modules = list(
/obj/item/mod/module/organ_thrower,
/obj/item/mod/module/defibrillator/combat,
@@ -383,7 +383,7 @@
/obj/item/mod/control/pre_equipped/ninja
theme = /datum/mod_theme/ninja
starting_frequency = null
- applied_cell = /obj/item/stock_parts/cell/ninja
+ applied_cell = /obj/item/stock_parts/power_store/cell/ninja
applied_modules = list(
/obj/item/mod/module/storage,
/obj/item/mod/module/noslip,
@@ -422,7 +422,7 @@
/obj/item/mod/control/pre_equipped/glitch
theme = /datum/mod_theme/glitch
starting_frequency = null
- applied_cell = /obj/item/stock_parts/cell/bluespace
+ applied_cell = /obj/item/stock_parts/power_store/cell/bluespace
applied_modules = list(
/obj/item/mod/module/storage,
/obj/item/mod/module/magnetic_harness,
@@ -439,7 +439,7 @@
/obj/item/mod/control/pre_equipped/responsory
theme = /datum/mod_theme/responsory
starting_frequency = MODLINK_FREQ_CENTCOM
- applied_cell = /obj/item/stock_parts/cell/hyper
+ applied_cell = /obj/item/stock_parts/power_store/cell/hyper
req_access = list(ACCESS_CENT_GENERAL)
applied_modules = list(
/obj/item/mod/module/storage/large_capacity,
@@ -504,7 +504,7 @@
/obj/item/mod/control/pre_equipped/responsory/inquisitory/syndie
starting_frequency = MODLINK_FREQ_SYNDICATE
req_access = null
- applied_cell = /obj/item/stock_parts/cell/super
+ applied_cell = /obj/item/stock_parts/power_store/cell/super
theme = /datum/mod_theme/responsory/traitor
applied_modules = list(
/obj/item/mod/module/storage/syndicate,
@@ -539,7 +539,7 @@
/obj/item/mod/control/pre_equipped/apocryphal
theme = /datum/mod_theme/apocryphal
starting_frequency = MODLINK_FREQ_CENTCOM
- applied_cell = /obj/item/stock_parts/cell/bluespace
+ applied_cell = /obj/item/stock_parts/power_store/cell/bluespace
req_access = list(ACCESS_CENT_SPECOPS)
applied_modules = list(
/obj/item/mod/module/storage/bluespace,
diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm
index 8d8d777592466..8ae22e435839b 100644
--- a/code/modules/mod/modules/modules_antag.dm
+++ b/code/modules/mod/modules/modules_antag.dm
@@ -516,10 +516,10 @@
mod.item_flags &= ~EXAMINE_SKIP
/obj/item/mod/module/infiltrator/on_suit_activation()
- mod.wearer.add_traits(list(TRAIT_SILENT_FOOTSTEPS, TRAIT_UNKNOWN), MOD_TRAIT)
+ mod.wearer.add_traits(traits_to_add, MOD_TRAIT)
var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD)
if(istype(head_cover))
- head_cover.flash_protect = FLASH_PROTECTION_WELDER
+ head_cover.flash_protect = FLASH_PROTECTION_WELDER_HYPER_SENSITIVE
/obj/item/mod/module/infiltrator/on_suit_deactivation(deleting = FALSE)
mod.wearer.remove_traits(traits_to_add, MOD_TRAIT)
diff --git a/code/modules/mod/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm
index cb830b2128e7e..fc21937eef049 100644
--- a/code/modules/mod/modules/modules_engineering.dm
+++ b/code/modules/mod/modules/modules_engineering.dm
@@ -15,7 +15,8 @@
/obj/item/mod/module/welding/on_suit_activation()
var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES)
if(istype(head_cover))
- head_cover.flash_protect = FLASH_PROTECTION_WELDER
+ //this is a screen that displays an image, so flash sensitives can use this to protect against flashes.
+ head_cover.flash_protect = FLASH_PROTECTION_WELDER_HYPER_SENSITIVE
/obj/item/mod/module/welding/on_suit_deactivation(deleting = FALSE)
if(deleting)
@@ -217,10 +218,10 @@
incompatible_modules = list(/obj/item/mod/module/armor_booster, /obj/item/mod/module/infiltrator)
required_slots = list(ITEM_SLOT_HEAD)
-/obj/item/mod/module/constructor/on_suit_activation()
+/obj/item/mod/module/headprotector/on_suit_activation()
ADD_TRAIT(mod.wearer, TRAIT_HEAD_INJURY_BLOCKED, MOD_TRAIT)
-/obj/item/mod/module/constructor/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/headprotector/on_suit_deactivation(deleting = FALSE)
REMOVE_TRAIT(mod.wearer, TRAIT_HEAD_INJURY_BLOCKED, MOD_TRAIT)
///Mister - Sprays water over an area.
diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm
index 0e2071a84b910..1ece8577d3c6b 100644
--- a/code/modules/modular_computers/computers/item/computer.dm
+++ b/code/modules/modular_computers/computers/item/computer.dm
@@ -19,7 +19,7 @@
///The disk in this PDA. If set, this will be inserted on Initialize.
var/obj/item/computer_disk/inserted_disk
///The power cell the computer uses to run on.
- var/obj/item/stock_parts/cell/internal_cell = /obj/item/stock_parts/cell
+ var/obj/item/stock_parts/power_store/internal_cell = /obj/item/stock_parts/power_store/cell
///A pAI currently loaded into the modular computer.
var/obj/item/pai_card/inserted_pai
///Does the console update the crew manifest when the ID is removed?
@@ -75,9 +75,9 @@
var/comp_light_color = COLOR_WHITE
///Power usage when the computer is open (screen is active) and can be interacted with.
- var/base_active_power_usage = 125
+ var/base_active_power_usage = 2 WATTS
///Power usage when the computer is idle and screen is off.
- var/base_idle_power_usage = 5
+ var/base_idle_power_usage = 1 WATTS
// Modular computers can run on various devices. Each DEVICE (Laptop, Console & Tablet)
// must have it's own DMI file. Icon states must be called exactly the same in all files, but may look differently
@@ -787,87 +787,6 @@
return
name = "[saved_identification] ([saved_job])"
-/obj/item/modular_computer/attackby(obj/item/attacking_item, mob/user, params)
- // Check for ID first
- if(isidcard(attacking_item) && InsertID(attacking_item, user))
- return
-
- // Check for cash next
- if(computer_id_slot && iscash(attacking_item))
- var/obj/item/card/id/inserted_id = computer_id_slot.GetID()
- if(inserted_id)
- inserted_id.attackby(attacking_item, user) // If we do, try and put that attacking object in
- return
-
- // Inserting a pAI
- if(istype(attacking_item, /obj/item/pai_card) && insert_pai(user, attacking_item))
- return
-
- if(istype(attacking_item, /obj/item/stock_parts/cell))
- if(ismachinery(physical))
- return
- if(internal_cell)
- to_chat(user, span_warning("You try to connect \the [attacking_item] to \the [src], but its connectors are occupied."))
- return
- if(user && !user.transferItemToLoc(attacking_item, src))
- return
- internal_cell = attacking_item
- to_chat(user, span_notice("You plug \the [attacking_item] to \the [src]."))
- return
-
- if(istype(attacking_item, /obj/item/photo))
- var/obj/item/photo/attacking_photo = attacking_item
- if(store_file(new /datum/computer_file/picture(attacking_photo.picture)))
- balloon_alert(user, "photo scanned")
- else
- balloon_alert(user, "no space!")
- return
-
- // Check if any Applications need it
- for(var/datum/computer_file/item_holding_app as anything in stored_files)
- if(item_holding_app.application_attackby(attacking_item, user))
- return
-
- if(istype(attacking_item, /obj/item/paper))
- if(stored_paper >= max_paper)
- balloon_alert(user, "no more room!")
- return
- if(!user.temporarilyRemoveItemFromInventory(attacking_item))
- return FALSE
- balloon_alert(user, "inserted paper")
- qdel(attacking_item)
- stored_paper++
- return
- if(istype(attacking_item, /obj/item/paper_bin))
- var/obj/item/paper_bin/bin = attacking_item
- if(bin.total_paper <= 0)
- balloon_alert(user, "empty bin!")
- return
- var/papers_added //just to keep track
- while((bin.total_paper > 0) && (stored_paper < max_paper))
- papers_added++
- stored_paper++
- bin.remove_paper()
- if(!papers_added)
- return
- balloon_alert(user, "inserted paper")
- to_chat(user, span_notice("Added in [papers_added] new sheets. You now have [stored_paper] / [max_paper] printing paper stored."))
- bin.update_appearance()
- return
-
- // Insert a data disk
- if(istype(attacking_item, /obj/item/computer_disk))
- if(inserted_disk)
- user.put_in_hands(inserted_disk)
- balloon_alert(user, "disks swapped")
- if(!user.transferItemToLoc(attacking_item, src))
- return
- inserted_disk = attacking_item
- playsound(src, 'sound/machines/card_slide.ogg', 50)
- return
-
- return ..()
-
/obj/item/modular_computer/screwdriver_act_secondary(mob/living/user, obj/item/tool)
. = ..()
if(internal_cell)
@@ -902,6 +821,112 @@
update_appearance()
return ITEM_INTERACT_SUCCESS
+/obj/item/modular_computer/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(isidcard(tool))
+ return InsertID(tool, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING
+
+ if(iscash(tool))
+ return money_act(user, tool)
+
+ if(istype(tool, /obj/item/pai_card))
+ return pai_act(user, tool)
+
+ if(istype(tool, /obj/item/stock_parts/power_store/cell))
+ return cell_act(user, tool)
+
+ if(istype(tool, /obj/item/photo))
+ return photo_act(user, tool)
+
+ // Check if any Applications need our item
+ for(var/datum/computer_file/item_holding_app as anything in stored_files)
+ var/app_return = item_holding_app.application_item_interaction(user, tool, modifiers)
+ if(app_return)
+ return app_return
+
+ if(istype(tool, /obj/item/paper))
+ return paper_act(user, tool)
+
+ if(istype(tool, /obj/item/paper_bin))
+ return paper_bin_act(user, tool)
+
+ if(istype(tool, /obj/item/computer_disk))
+ return computer_disk_act(user, tool)
+
+/obj/item/modular_computer/proc/money_act(mob/user, obj/item/money)
+ var/obj/item/card/id/inserted_id = computer_id_slot?.GetID()
+ if(!inserted_id)
+ balloon_alert(user, "no ID!")
+ return ITEM_INTERACT_BLOCKING
+ return inserted_id.insert_money(money, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING
+
+/obj/item/modular_computer/proc/pai_act(mob/user, obj/item/pai_card/card)
+ if(inserted_pai)
+ return ITEM_INTERACT_BLOCKING
+ if(!user.transferItemToLoc(card, src))
+ return ITEM_INTERACT_BLOCKING
+ inserted_pai = card
+ balloon_alert(user, "inserted pai")
+ if(inserted_pai.pai)
+ inserted_pai.pai.give_messenger_ability()
+ update_appearance(UPDATE_ICON)
+ return ITEM_INTERACT_SUCCESS
+
+/obj/item/modular_computer/proc/cell_act(mob/user, obj/item/stock_parts/power_store/cell/new_cell)
+ if(ismachinery(physical))
+ return ITEM_INTERACT_BLOCKING
+ if(internal_cell)
+ to_chat(user, span_warning("You try to connect \the [new_cell] to \the [src], but its connectors are occupied."))
+ return ITEM_INTERACT_BLOCKING
+ if(!user.transferItemToLoc(new_cell, src))
+ return ITEM_INTERACT_BLOCKING
+ internal_cell = new_cell
+ to_chat(user, span_notice("You plug \the [new_cell] to \the [src]."))
+ return ITEM_INTERACT_SUCCESS
+
+/obj/item/modular_computer/proc/photo_act(mob/user, obj/item/photo/scanned_photo)
+ if(!store_file(new /datum/computer_file/picture(scanned_photo.picture)))
+ balloon_alert(user, "no space!")
+ return ITEM_INTERACT_BLOCKING
+ balloon_alert(user, "photo scanned")
+ return ITEM_INTERACT_SUCCESS
+
+/obj/item/modular_computer/proc/paper_act(mob/user, obj/item/paper/new_paper)
+ if(stored_paper >= max_paper)
+ balloon_alert(user, "no more room!")
+ return ITEM_INTERACT_BLOCKING
+ if(!user.temporarilyRemoveItemFromInventory(new_paper))
+ return ITEM_INTERACT_BLOCKING
+ balloon_alert(user, "inserted paper")
+ qdel(new_paper)
+ stored_paper++
+ return ITEM_INTERACT_SUCCESS
+
+/obj/item/modular_computer/proc/paper_bin_act(mob/user, obj/item/paper_bin/bin)
+ if(bin.total_paper <= 0)
+ balloon_alert(user, "empty bin!")
+ return ITEM_INTERACT_BLOCKING
+ var/papers_added //just to keep track
+ while((bin.total_paper > 0) && (stored_paper < max_paper))
+ papers_added++
+ stored_paper++
+ bin.remove_paper()
+ if(!papers_added)
+ return ITEM_INTERACT_BLOCKING
+ balloon_alert(user, "inserted paper")
+ to_chat(user, span_notice("Added in [papers_added] new sheets. You now have [stored_paper] / [max_paper] printing paper stored."))
+ bin.update_appearance()
+ return ITEM_INTERACT_SUCCESS
+
+/obj/item/modular_computer/proc/computer_disk_act(mob/user, obj/item/computer_disk/disk)
+ if(!user.transferItemToLoc(disk, src))
+ return ITEM_INTERACT_BLOCKING
+ if(inserted_disk)
+ user.put_in_hands(inserted_disk)
+ balloon_alert(user, "disks swapped")
+ inserted_disk = disk
+ playsound(src, 'sound/machines/card_slide.ogg', 50)
+ return ITEM_INTERACT_SUCCESS
+
/obj/item/modular_computer/atom_deconstruct(disassembled = TRUE)
remove_pai()
eject_aicard()
@@ -936,18 +961,6 @@
/obj/item/modular_computer/proc/get_messenger_ending()
return "Sent from my PDA"
-/obj/item/modular_computer/proc/insert_pai(mob/user, obj/item/pai_card/card)
- if(inserted_pai)
- return FALSE
- if(!user.transferItemToLoc(card, src))
- return FALSE
- inserted_pai = card
- balloon_alert(user, "inserted pai")
- if(inserted_pai.pai)
- inserted_pai.pai.give_messenger_ability()
- update_appearance(UPDATE_ICON)
- return TRUE
-
/obj/item/modular_computer/proc/remove_pai(mob/user)
if(!inserted_pai)
return FALSE
@@ -962,6 +975,12 @@
update_appearance(UPDATE_ICON)
return TRUE
+/// Get all stored files, including external disk files optionaly
+/obj/item/modular_computer/proc/get_files(include_disk_files = FALSE)
+ if(!include_disk_files || !inserted_disk)
+ return stored_files
+ return stored_files + inserted_disk.stored_files
+
/**
* Debug ModPC
* Used to spawn all programs for Create and Destroy unit test.
diff --git a/code/modules/modular_computers/computers/item/computer_files.dm b/code/modules/modular_computers/computers/item/computer_files.dm
index 6b6fbd179f21f..b0ae073bdd69a 100644
--- a/code/modules/modular_computers/computers/item/computer_files.dm
+++ b/code/modules/modular_computers/computers/item/computer_files.dm
@@ -39,7 +39,7 @@
stored_files.Remove(file_removing)
used_capacity -= file_removing.size
SEND_SIGNAL(src, COMSIG_MODULAR_COMPUTER_FILE_DELETE, file_removing)
- SEND_SIGNAL(file_removing, COMSIG_COMPUTER_FILE_DELETE)
+ SEND_SIGNAL(file_removing, COMSIG_COMPUTER_FILE_DELETE, src)
qdel(file_removing)
return TRUE
diff --git a/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm b/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm
index 430c101668de8..0fb2ccc2eef91 100644
--- a/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm
+++ b/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm
@@ -25,3 +25,6 @@
/obj/item/computer_disk/maintenance/theme/Initialize(mapload)
starting_programs = list(pick(subtypesof(/datum/computer_file/program/maintenance/theme)))
return ..()
+
+/obj/item/computer_disk/maintenance/cool_sword
+ starting_programs = list(/datum/computer_file/program/maintenance/cool_sword)
diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm
index c2327eac4b3b0..2fb7863445de2 100644
--- a/code/modules/modular_computers/computers/item/pda.dm
+++ b/code/modules/modular_computers/computers/item/pda.dm
@@ -46,7 +46,7 @@
/obj/item/lipstick,
/obj/item/flashlight/pen,
/obj/item/reagent_containers/hypospray/medipen,
- /obj/item/clothing/mask/cigarette,
+ /obj/item/cigarette,
)
/obj/item/modular_computer/pda/Initialize(mapload)
@@ -141,7 +141,9 @@
return . || NONE
/obj/item/modular_computer/pda/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
-
+ . = ..()
+ if(.)
+ return .
if(!is_type_in_list(tool, contained_item))
return NONE
if(tool.w_class >= WEIGHT_CLASS_SMALL) // Anything equal to or larger than small won't work
diff --git a/code/modules/modular_computers/computers/item/processor.dm b/code/modules/modular_computers/computers/item/processor.dm
index 3a8f58576c945..ad5d36a87cdd4 100644
--- a/code/modules/modular_computers/computers/item/processor.dm
+++ b/code/modules/modular_computers/computers/item/processor.dm
@@ -8,7 +8,7 @@
icon_state_unpowered = null
icon_state_menu = null
hardware_flag = NONE
- internal_cell = /obj/item/stock_parts/cell/crap
+ internal_cell = /obj/item/stock_parts/power_store/cell/crap
///The modular computer MACHINE that hosts us.
var/obj/machinery/modular_computer/machinery_computer
diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm
index ee6c9ee68f0af..44392c8c62de9 100644
--- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm
+++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm
@@ -97,6 +97,7 @@
/datum/computer_file/program/crew_manifest,
/datum/computer_file/program/robocontrol,
/datum/computer_file/program/science,
+ /datum/computer_file/program/scipaper_program,
/datum/computer_file/program/status,
/datum/computer_file/program/signal_commander,
)
@@ -187,6 +188,7 @@
starting_programs = list(
/datum/computer_file/program/atmosscan,
/datum/computer_file/program/science,
+ /datum/computer_file/program/scipaper_program,
/datum/computer_file/program/signal_commander,
)
diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm
index 0ec80da4bbb29..ad87960603c35 100644
--- a/code/modules/modular_computers/computers/machinery/console_presets.dm
+++ b/code/modules/modular_computers/computers/machinery/console_presets.dm
@@ -137,6 +137,7 @@
starting_programs += /datum/computer_file/program/bounty_board
starting_programs += /datum/computer_file/program/budgetorders
starting_programs += /datum/computer_file/program/shipping
+ starting_programs += /datum/computer_file/program/restock_tracker
/obj/machinery/modular_computer/preset/cargochat/cargo/setup_starting_software()
var/datum/computer_file/program/chatclient/chatprogram = cpu.find_file_by_name("ntnrc_client")
diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm
index 6f0050534cce7..48cbc57d7455f 100644
--- a/code/modules/modular_computers/computers/machinery/modular_computer.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm
@@ -137,7 +137,7 @@
///Try to recharge our internal cell if it isn't fully charged.
/obj/machinery/modular_computer/process(seconds_per_tick)
- var/obj/item/stock_parts/cell/cell = get_cell()
+ var/obj/item/stock_parts/power_store/cell = get_cell()
if(isnull(cell) || cell.percent() >= 100)
return
charge_cell(idle_power_usage * seconds_per_tick, cell)
@@ -154,8 +154,8 @@
/obj/machinery/modular_computer/welder_act(mob/user, obj/item/tool)
return CPU_INTERACTABLE(user) ? cpu.welder_act(user, tool) : ..()
-/obj/machinery/modular_computer/attackby(obj/item/weapon, mob/living/user)
- return (CPU_INTERACTABLE(user) && !user.combat_mode) ? cpu.attackby(weapon, user) : ..()
+/obj/machinery/modular_computer/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ return (CPU_INTERACTABLE(user) && !user.combat_mode) ? cpu.item_interaction(user, tool, modifiers) : ..()
/obj/machinery/modular_computer/attacked_by(obj/item/attacking_item, mob/living/user)
return CPU_INTERACTABLE(user) ? cpu.attacked_by(attacking_item, user) : ..()
diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm
index 7b4fc67609119..05f3272d83346 100644
--- a/code/modules/modular_computers/file_system/computer_file.dm
+++ b/code/modules/modular_computers/file_system/computer_file.dm
@@ -66,9 +66,9 @@
/datum/computer_file/proc/on_examine(obj/item/modular_computer/source, mob/user)
return null
-/// Called when attacking a tablet with an item, checking if any application uses it. Return TRUE to cancel the attack chain.
-/datum/computer_file/proc/application_attackby(obj/item/attacking_item, mob/living/user)
- return FALSE
+/// Called on modular computer item_interaction, checking if any application uses the given item. Uses the item interaction chain flags.
+/datum/computer_file/proc/application_item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ return NONE
/**
* Implement this when your program has an object that the user can eject.
diff --git a/code/modules/modular_computers/file_system/programs/airestorer.dm b/code/modules/modular_computers/file_system/programs/airestorer.dm
index 57c9e73007218..0fe930cfd072f 100644
--- a/code/modules/modular_computers/file_system/programs/airestorer.dm
+++ b/code/modules/modular_computers/file_system/programs/airestorer.dm
@@ -57,22 +57,22 @@
return TRUE
-/datum/computer_file/program/ai_restorer/application_attackby(obj/item/attacking_item, mob/living/user)
- if(!computer)
- return FALSE
- if(!istype(attacking_item, /obj/item/aicard))
- return FALSE
+/datum/computer_file/program/ai_restorer/application_item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(istype(tool, /obj/item/aicard))
+ return aicard_act(user, tool)
+/datum/computer_file/program/ai_restorer/proc/aicard_act(mob/living/user, obj/item/aicard/used_aicard)
+ if(!computer)
+ return NONE
if(stored_card)
- to_chat(user, span_warning("You try to insert \the [attacking_item] into \the [computer.name], but the slot is occupied."))
- return FALSE
- if(user && !user.transferItemToLoc(attacking_item, computer))
- return FALSE
-
- stored_card = attacking_item
- to_chat(user, span_notice("You insert \the [attacking_item] into \the [computer.name]."))
-
- return TRUE
+ to_chat(user, span_warning("You try to insert \the [used_aicard] into \the [computer.name], but the slot is occupied."))
+ return ITEM_INTERACT_BLOCKING
+ if(!user.transferItemToLoc(used_aicard, computer))
+ return ITEM_INTERACT_BLOCKING
+
+ stored_card = used_aicard
+ to_chat(user, span_notice("You insert \the [used_aicard] into \the [computer.name]."))
+ return ITEM_INTERACT_SUCCESS
/datum/computer_file/program/ai_restorer/try_eject(mob/living/user, forced = FALSE)
if(!stored_card)
diff --git a/code/modules/modular_computers/file_system/programs/frontier.dm b/code/modules/modular_computers/file_system/programs/frontier.dm
index c41cf642ffb55..c8030287e8943 100644
--- a/code/modules/modular_computers/file_system/programs/frontier.dm
+++ b/code/modules/modular_computers/file_system/programs/frontier.dm
@@ -8,7 +8,7 @@
program_open_overlay = "research"
tgui_id = "NtosScipaper"
program_icon = "paper-plane"
- download_access = list(ACCESS_ORDNANCE)
+ download_access = list(ACCESS_ORDNANCE, ACCESS_SCIENCE, ACCESS_AWAY_SCIENCE)
var/datum/techweb/linked_techweb
/// Unpublished, temporary paper datum.
@@ -24,16 +24,19 @@
if(!CONFIG_GET(flag/no_default_techweb_link) && !linked_techweb)
CONNECT_TO_RND_SERVER_ROUNDSTART(linked_techweb, computer)
-/datum/computer_file/program/scipaper_program/application_attackby(obj/item/attacking_item, mob/living/user)
- if(!istype(attacking_item, /obj/item/multitool))
- return FALSE
- var/obj/item/multitool/attacking_tool = attacking_item
- if(!QDELETED(attacking_tool.buffer) && istype(attacking_tool.buffer, /datum/techweb))
- linked_techweb = attacking_tool.buffer
- return TRUE
+/datum/computer_file/program/scipaper_program/application_item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(istype(tool, /obj/item/multitool))
+ return multitool_act(user, tool)
+
+/datum/computer_file/program/scipaper_program/proc/multitool_act(mob/living/user, obj/item/multitool/used_multitool)
+ if(QDELETED(used_multitool.buffer) || !istype(used_multitool.buffer, /datum/techweb))
+ return ITEM_INTERACT_BLOCKING
+ linked_techweb = used_multitool.buffer
+ computer.balloon_alert(user, "buffer linked!")
+ return ITEM_INTERACT_SUCCESS
/datum/computer_file/program/scipaper_program/proc/recheck_file_presence()
- if(selected_file in computer.stored_files)
+ if(selected_file in computer.get_files(include_disk_files = TRUE))
return FALSE
UnregisterSignal(selected_file, COMSIG_COMPUTER_FILE_DELETE)
selected_file = null
@@ -92,7 +95,7 @@
data["allowedTiers"] = list()
data["allowedPartners"] = list()
// Both the file and experiment list are assoc lists. ID as value, display name as keys.
- for(var/datum/computer_file/data/ordnance/ordnance_file in computer.stored_files)
+ for(var/datum/computer_file/data/ordnance/ordnance_file in computer.get_files(include_disk_files = TRUE))
data["fileList"] += list(ordnance_file.filename = ordnance_file.uid)
if(selected_file)
for (var/possible_experiment in selected_file.possible_experiments)
@@ -189,7 +192,7 @@
if(selected_file)
UnregisterSignal(selected_file, COMSIG_COMPUTER_FILE_DELETE)
paper_to_be.set_experiment() // Clears the paper info.
- for(var/datum/computer_file/data/ordnance/ordnance_data in computer.stored_files)
+ for(var/datum/computer_file/data/ordnance/ordnance_data in computer.get_files(include_disk_files = TRUE))
if(ordnance_data.uid == params["selected_uid"])
selected_file = ordnance_data
RegisterSignal(selected_file, COMSIG_COMPUTER_FILE_DELETE, PROC_REF(recheck_file_presence))
diff --git a/code/modules/modular_computers/file_system/programs/maintenance/cool_sword.dm b/code/modules/modular_computers/file_system/programs/maintenance/cool_sword.dm
new file mode 100644
index 0000000000000..1a05bf2ceba34
--- /dev/null
+++ b/code/modules/modular_computers/file_system/programs/maintenance/cool_sword.dm
@@ -0,0 +1,71 @@
+/datum/computer_file/program/maintenance/cool_sword
+ filename = "cool_sword"
+ filedesc = "NtOS Cursor Replacer"
+ power_cell_use = 0
+ downloader_category = PROGRAM_CATEGORY_DEVICE
+ extended_desc = "This program allows you to customize your computer's mouse cursor, \
+ but there's only one option, let's be honest. \
+ Wear your PDA in your ID slot for it to take effect."
+ can_run_on_flags = PROGRAM_PDA
+ tgui_id = "NtosCursor"
+ program_open_overlay = "generic"
+
+ /// What icon to use for the mouse pointer?
+ var/sword_icon = 'icons/effects/mouse_pointers/cool_sword.dmi'
+
+/datum/computer_file/program/maintenance/cool_sword/New()
+ . = ..()
+ RegisterSignal(src, COMSIG_COMPUTER_FILE_DELETE, PROC_REF(on_delete))
+
+/datum/computer_file/program/maintenance/cool_sword/on_install(datum/computer_file/source, obj/item/modular_computer/computer_installing)
+ . = ..()
+ RegisterSignal(computer_installing, COMSIG_ITEM_EQUIPPED, PROC_REF(host_equipped))
+ RegisterSignal(computer_installing, COMSIG_ITEM_DROPPED, PROC_REF(host_dropped))
+
+ if(ismob(computer_installing.loc))
+ var/mob/living/computer_guy = computer_installing.loc
+ var/current_slot = computer_guy.get_slot_by_item(computer_installing)
+ host_equipped(computer_installing, computer_guy, current_slot)
+
+/datum/computer_file/program/maintenance/cool_sword/proc/on_delete(datum/source, obj/item/modular_computer/computer_uninstalling)
+ SIGNAL_HANDLER
+
+ if(ismob(computer_uninstalling.loc))
+ host_dropped(computer_uninstalling, computer_uninstalling.loc)
+
+/datum/computer_file/program/maintenance/cool_sword/proc/host_equipped(datum/source, mob/user, slot)
+ SIGNAL_HANDLER
+
+ if(slot & ITEM_SLOT_ID)
+ user.client?.mouse_override_icon = sword_icon
+ RegisterSignal(user, COMSIG_MOB_LOGIN, PROC_REF(update_mouse), override = TRUE)
+ RegisterSignal(user, COMSIG_MOB_LOGOUT, PROC_REF(stop_mouse), override = TRUE)
+ else
+ // Shouldn't be necessary w/ dropped but just to be safe
+ user.client?.mouse_override_icon = null
+ UnregisterSignal(user, list(COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT))
+ user.update_mouse_pointer()
+
+/datum/computer_file/program/maintenance/cool_sword/proc/host_dropped(datum/source, mob/user)
+ SIGNAL_HANDLER
+
+ user.client?.mouse_override_icon = null
+ UnregisterSignal(user, list(COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT))
+ user.update_mouse_pointer()
+
+/datum/computer_file/program/maintenance/cool_sword/proc/update_mouse(mob/source)
+ SIGNAL_HANDLER
+
+ source.client?.mouse_override_icon = sword_icon
+ source.update_mouse_pointer()
+
+/datum/computer_file/program/maintenance/cool_sword/proc/stop_mouse(mob/source)
+ SIGNAL_HANDLER
+
+ source.canon_client?.mouse_override_icon = null
+ source.canon_client?.mob?.update_mouse_pointer()
+
+/datum/computer_file/program/maintenance/cool_sword/ui_static_data(mob/user)
+ var/list/data = list()
+ data["dmi"] = list("icon" = sword_icon, "icon_state" = "")
+ return data
diff --git a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm
index 0d094ced4f52a..b2c492d3268f8 100644
--- a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm
+++ b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm
@@ -17,12 +17,10 @@
unsync_modsuit()
return ..()
-/datum/computer_file/program/maintenance/modsuit_control/application_attackby(obj/item/attacking_item, mob/living/user)
- . = ..()
- if(!istype(attacking_item, /obj/item/mod/control))
- return FALSE
- sync_modsuit(attacking_item, user)
- return TRUE
+/datum/computer_file/program/maintenance/modsuit_control/application_item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(istype(tool, /obj/item/mod/control))
+ sync_modsuit(tool, user)
+ return ITEM_INTERACT_SUCCESS
/datum/computer_file/program/maintenance/modsuit_control/proc/sync_modsuit(obj/item/mod/control/new_modsuit, mob/living/user)
if(controlled_suit)
diff --git a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm
index 0b2f478172b5e..4ad633aa94df4 100644
--- a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm
+++ b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm
@@ -166,7 +166,8 @@
if("PDA_ringSet")
var/mob/living/user = usr
var/new_ringtone = tgui_input_text(user, "Enter a new ringtone", "Ringtone", ringtone, encode = FALSE)
- if(!in_range(computer, user) || computer.loc != user)
+ if(!computer.can_interact(user))
+ computer.balloon_alert(user, "can't reach!")
return FALSE
return set_ringtone(new_ringtone, user)
@@ -381,6 +382,10 @@
data["sending_virus"] = sending_virus
return data
+/datum/computer_file/program/messenger/ui_assets(mob/user)
+ . = ..()
+ . += get_asset_datum(/datum/asset/spritesheet/chat)
+
//////////////////////
// MESSAGE HANDLING //
//////////////////////
@@ -463,7 +468,7 @@
if(sender && !check_pda_message_against_filter(message, sender))
return null
- return message
+ return emoji_parse(message)
/// Sends a message to targets via PDA. When sending to everyone, set `everyone` to true so the message is formatted accordingly
/datum/computer_file/program/messenger/proc/send_message(atom/source, message, list/targets, everyone = FALSE)
@@ -628,10 +633,8 @@
if(rigged)
log_bomber(sender, "sent a rigged PDA message (Name: [fake_name]. Job: [fake_job]) to [english_list(stringified_targets)] [!is_special_character(sender) ? "(SENT BY NON-ANTAG)" : ""]")
- message = emoji_parse(message) //already sent- this just shows the sent emoji as one to the sender in the to_chat
-
// Show it to ghosts
- var/ghost_message = span_game_say("[span_name("[source]")] [rigged ? "(as [span_name(fake_name)]) Rigged " : ""]PDA Message --> [span_name("[signal.format_target()]")]: \"[signal.format_message()]\"")
+ var/ghost_message = span_game_say("[span_name(signal.format_sender())] [rigged ? "(as [span_name(fake_name)]) Rigged " : ""]PDA Message --> [span_name("[signal.format_target()]")]: \"[signal.format_message()]\"")
var/list/message_listeners = GLOB.dead_player_list + GLOB.current_observers_list
for(var/mob/listener as anything in message_listeners)
if(!(get_chat_toggles(listener) & CHAT_GHOSTPDA))
@@ -678,7 +681,7 @@
viewing_messages_of = REF(chat)
var/list/mob/living/receievers = list()
- if(computer.inserted_pai)
+ if(computer.inserted_pai && computer.inserted_pai.pai)
receievers += computer.inserted_pai.pai
if(computer.loc && isliving(computer.loc))
receievers += computer.loc
@@ -708,7 +711,6 @@
sender_title = "[sender_title]"
var/inbound_message = "[signal.format_message()]"
- inbound_message = emoji_parse(inbound_message)
var/photo_message = signal.data["photo"] ? " (Photo Attached)" : ""
to_chat(messaged_mob, span_infoplain("[icon2html(computer, messaged_mob)] PDA message from [sender_title], \"[inbound_message]\"[photo_message] [reply]"))
@@ -727,7 +729,7 @@
if(QDELETED(src))
return
- if(!usr.can_perform_action(computer, FORBID_TELEKINESIS_REACH))
+ if(!usr.can_perform_action(computer, FORBID_TELEKINESIS_REACH | ALLOW_RESTING))
return
// send an activation message and open the messenger
diff --git a/code/modules/modular_computers/file_system/programs/radar.dm b/code/modules/modular_computers/file_system/programs/radar.dm
index 34771cde63b20..33dcd95e86b97 100644
--- a/code/modules/modular_computers/file_system/programs/radar.dm
+++ b/code/modules/modular_computers/file_system/programs/radar.dm
@@ -114,7 +114,7 @@
var/locx = (target_turf.x - here_turf.x) + 24
var/locy = (here_turf.y - target_turf.y) + 24
- if(get_dist_euclidian(here_turf, target_turf) > 24)
+ if(get_dist_euclidean(here_turf, target_turf) > 24)
userot = TRUE
rot = round(get_angle(here_turf, target_turf))
else
@@ -208,7 +208,7 @@
var/here_turf = get_turf(computer)
var/target_turf = get_turf(signal)
- var/trackdistance = get_dist_euclidian(here_turf, target_turf)
+ var/trackdistance = get_dist_euclidean(here_turf, target_turf)
switch(trackdistance)
if(0)
program_open_overlay = "[initial(program_open_overlay)]direct"
@@ -471,7 +471,7 @@
*/
/obj/item/circuit_component/mod_program/radar/proc/can_track(datum/source, atom/signal, signal_turf, computer_turf)
SIGNAL_HANDLER
- if(target.value && get_dist_euclidian(computer_turf, signal_turf) > MAX_RADAR_CIRCUIT_DISTANCE)
+ if(target.value && get_dist_euclidean(computer_turf, signal_turf) > MAX_RADAR_CIRCUIT_DISTANCE)
return COMPONENT_RADAR_DONT_TRACK
return COMPONENT_RADAR_TRACK_ANYWAY
diff --git a/code/modules/modular_computers/file_system/programs/restock_tracker.dm b/code/modules/modular_computers/file_system/programs/restock_tracker.dm
index 46462c0c6b531..8f2174ce97bbd 100644
--- a/code/modules/modular_computers/file_system/programs/restock_tracker.dm
+++ b/code/modules/modular_computers/file_system/programs/restock_tracker.dm
@@ -5,7 +5,7 @@
program_open_overlay = "restock"
extended_desc = "Nanotrasen IoT network listing all the vending machines found on station, and how well stocked they are each. Profitable!"
program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
- can_run_on_flags = PROGRAM_LAPTOP | PROGRAM_PDA
+ can_run_on_flags = PROGRAM_ALL
size = 4
program_icon = "cash-register"
tgui_id = "NtosRestock"
diff --git a/code/modules/modular_computers/file_system/programs/techweb.dm b/code/modules/modular_computers/file_system/programs/techweb.dm
index 1394b9556a698..014e6a56727a3 100644
--- a/code/modules/modular_computers/file_system/programs/techweb.dm
+++ b/code/modules/modular_computers/file_system/programs/techweb.dm
@@ -26,13 +26,16 @@
if(!CONFIG_GET(flag/no_default_techweb_link) && !stored_research)
CONNECT_TO_RND_SERVER_ROUNDSTART(stored_research, computer)
-/datum/computer_file/program/science/application_attackby(obj/item/attacking_item, mob/living/user)
- if(!istype(attacking_item, /obj/item/multitool))
- return FALSE
- var/obj/item/multitool/attacking_tool = attacking_item
- if(!QDELETED(attacking_tool.buffer) && istype(attacking_tool.buffer, /datum/techweb))
- stored_research = attacking_tool.buffer
- return TRUE
+/datum/computer_file/program/science/application_item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(istype(tool, /obj/item/multitool))
+ return multitool_act(user, tool)
+
+/datum/computer_file/program/science/proc/multitool_act(mob/living/user, obj/item/multitool/used_multitool)
+ if(QDELETED(used_multitool.buffer) || !istype(used_multitool.buffer, /datum/techweb))
+ return ITEM_INTERACT_BLOCKING
+ stored_research = used_multitool.buffer
+ computer.balloon_alert(user, "buffer linked!")
+ return ITEM_INTERACT_SUCCESS
/datum/computer_file/program/science/ui_assets(mob/user)
return list(
diff --git a/code/modules/movespeed/modifiers/innate.dm b/code/modules/movespeed/modifiers/innate.dm
index 94a3f7a2e791c..83d8b3fb78d98 100644
--- a/code/modules/movespeed/modifiers/innate.dm
+++ b/code/modules/movespeed/modifiers/innate.dm
@@ -7,11 +7,12 @@
flags = IGNORE_NOSLOW
/datum/movespeed_modifier/snail
- movetypes = ~FLYING
+ blacklisted_movetypes = FLYING
variable = TRUE
+// no reason for leg loss (or gain) to affect speed if drifting
/datum/movespeed_modifier/bodypart
- movetypes = ~FLYING
+ blacklisted_movetypes = (FLYING|FLOATING)
variable = TRUE
/datum/movespeed_modifier/dna_vault_speedup
diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm
index b72c631253b91..1624ce37bf6d9 100644
--- a/code/modules/movespeed/modifiers/mobs.dm
+++ b/code/modules/movespeed/modifiers/mobs.dm
@@ -1,4 +1,5 @@
/datum/movespeed_modifier/obesity
+ // large weight slows even if flying and floating
multiplicative_slowdown = 1.5
/datum/movespeed_modifier/monkey_reagent_speedmod
@@ -11,6 +12,7 @@
variable = TRUE
/datum/movespeed_modifier/hunger
+ movetypes = GROUND|FLYING
variable = TRUE
/datum/movespeed_modifier/golem_hunger
@@ -89,7 +91,7 @@
/datum/movespeed_modifier/limbless
variable = TRUE
movetypes = GROUND
- blacklisted_movetypes = FLOATING
+ blacklisted_movetypes = FLOATING|FLYING
flags = IGNORE_NOSLOW
/datum/movespeed_modifier/simplemob_varspeed
diff --git a/code/modules/pai/pai.dm b/code/modules/pai/pai.dm
index 0ea51f19d37e2..acde3c51a5c50 100644
--- a/code/modules/pai/pai.dm
+++ b/code/modules/pai/pai.dm
@@ -149,7 +149,7 @@
return ..()
// See software.dm for Topic()
-/mob/living/silicon/pai/can_perform_action(atom/movable/target, action_bitflags)
+/mob/living/silicon/pai/can_perform_action(atom/target, action_bitflags)
action_bitflags |= ALLOW_RESTING // Resting is just an aesthetic feature for them
action_bitflags &= ~ALLOW_SILICON_REACH // They don't get long reach like the rest of silicons
return ..(target, action_bitflags)
@@ -470,7 +470,7 @@
for(var/mob/living/cultist as anything in invokers)
to_chat(cultist, span_cult_italic("You don't think this is what Nar'Sie had in mind when She asked for blood sacrifices..."))
- return STOP_SACRIFICE
+ return STOP_SACRIFICE|SILENCE_SACRIFICE_MESSAGE
/// Updates the distance we can be from our pai card
/mob/living/silicon/pai/proc/increment_range(increment_amount)
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index 4d0a0efe59639..3ee556b3adf4f 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -77,7 +77,7 @@
return
to_chat(user, span_notice("You put [weapon] into [src]."))
update_appearance()
- else if(istype(weapon, /obj/item/pen))
+ else if(IS_WRITING_UTENSIL(weapon))
rename(user, weapon)
/obj/item/folder/attack_self(mob/user)
diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm
index 0b9c4feccb18c..7b734c1530666 100644
--- a/code/modules/paperwork/paperplane.dm
+++ b/code/modules/paperwork/paperplane.dm
@@ -78,7 +78,7 @@
/obj/item/paperplane/attackby(obj/item/attacking_item, mob/user, params)
if(burn_paper_product_attackby_check(attacking_item, user))
return
- if(istype(attacking_item, /obj/item/pen) || istype(attacking_item, /obj/item/toy/crayon))
+ if(IS_WRITING_UTENSIL(attacking_item))
to_chat(user, span_warning("You should unfold [src] before changing it!"))
return
else if(istype(attacking_item, /obj/item/stamp)) //we don't randomize stamps on a paperplane
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index 53df8dbd35b97..36949b65c7cdd 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -34,6 +34,8 @@
var/dart_insert_icon = 'icons/obj/weapons/guns/toy.dmi'
var/dart_insert_casing_icon_state = "overlay_pen"
var/dart_insert_projectile_icon_state = "overlay_pen_proj"
+ /// If this pen can be clicked in order to retract it
+ var/can_click = TRUE
/obj/item/pen/Initialize(mapload)
. = ..()
@@ -47,6 +49,35 @@
AddElement(/datum/element/tool_renaming)
RegisterSignal(src, COMSIG_DART_INSERT_ADDED, PROC_REF(on_inserted_into_dart))
RegisterSignal(src, COMSIG_DART_INSERT_REMOVED, PROC_REF(on_removed_from_dart))
+ if (!can_click)
+ return
+ create_transform_component()
+ RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform))
+
+/// Proc that child classes can override to have custom transforms, like edaggers or pendrivers
+/obj/item/pen/proc/create_transform_component()
+ AddComponent( \
+ /datum/component/transforming, \
+ sharpness_on = NONE, \
+ inhand_icon_change = FALSE, \
+ w_class_on = w_class, \
+ )
+
+/*
+ * Signal proc for [COMSIG_TRANSFORMING_ON_TRANSFORM].
+ *
+ * Clicks the pen to make an annoying sound. Clickity clickery click!
+ */
+/obj/item/pen/proc/on_transform(obj/item/source, mob/user, active)
+ SIGNAL_HANDLER
+
+ if(user)
+ balloon_alert(user, "clicked")
+ playsound(src, 'sound/machines/click.ogg', 30, TRUE, -3)
+ icon_state = initial(icon_state) + (active ? "_retracted" : "")
+ update_appearance(UPDATE_ICON)
+
+ return COMPONENT_NO_DEFAULT_MESSAGE
/obj/item/pen/proc/on_inserted_into_dart(datum/source, obj/projectile/dart, mob/user, embedded = FALSE)
SIGNAL_HANDLER
@@ -90,6 +121,7 @@
name = "four-color pen"
icon_state = "pen_4color"
colour = COLOR_BLACK
+ can_click = FALSE
/obj/item/pen/fourcolor/attack_self(mob/living/carbon/user)
. = ..()
@@ -110,6 +142,8 @@
colour = COLOR_BLACK
to_chat(user, span_notice("\The [src] will now write in [chosen_color]."))
desc = "It's a fancy four-color ink pen, set to [chosen_color]."
+ balloon_alert(user, "clicked")
+ playsound(src, 'sound/machines/click.ogg', 30, TRUE, -3)
/obj/item/pen/fountain
name = "fountain pen"
@@ -119,6 +153,7 @@
requires_gravity = FALSE // fancy spess pens
dart_insert_casing_icon_state = "overlay_fountainpen"
dart_insert_projectile_icon_state = "overlay_fountainpen_proj"
+ can_click = FALSE
/obj/item/pen/charcoal
name = "charcoal stylus"
@@ -129,6 +164,7 @@
custom_materials = null
grind_results = list(/datum/reagent/ash = 5, /datum/reagent/cellulose = 10)
requires_gravity = FALSE // this is technically a pencil
+ can_click = FALSE
/datum/crafting_recipe/charcoal_stylus
name = "Charcoal Stylus"
@@ -187,19 +223,17 @@
insert_comp.casing_overlay_icon_state = overlay_reskin[current_skin]
insert_comp.projectile_overlay_icon_state = "[overlay_reskin[current_skin]]_proj"
-/obj/item/pen/attack_self(mob/living/carbon/user)
- . = ..()
- if(.)
- return
+/obj/item/pen/item_ctrl_click(mob/living/carbon/user)
if(loc != user)
to_chat(user, span_warning("You must be holding the pen to continue!"))
- return
+ return CLICK_ACTION_BLOCKING
var/deg = tgui_input_number(user, "What angle would you like to rotate the pen head to? (0-360)", "Rotate Pen Head", max_value = 360)
if(isnull(deg) || QDELETED(user) || QDELETED(src) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH) || loc != user)
- return
+ return CLICK_ACTION_BLOCKING
degrees = deg
to_chat(user, span_notice("You rotate the top of the pen to [deg] degrees."))
SEND_SIGNAL(src, COMSIG_PEN_ROTATED, deg, user)
+ return CLICK_ACTION_SUCCESS
/obj/item/pen/attack(mob/living/M, mob/user, params)
if(force) // If the pen has a force value, call the normal attack procs. Used for e-daggers and captain's pen mostly.
@@ -212,6 +246,8 @@
return TRUE
/obj/item/pen/get_writing_implement_details()
+ if (HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE))
+ return null
return list(
interaction_mode = MODE_WRITING,
font = font,
@@ -287,6 +323,9 @@
speed = 6 SECONDS, \
butcher_sound = 'sound/weapons/blade1.ogg', \
)
+ RegisterSignal(src, COMSIG_DETECTIVE_SCANNED, PROC_REF(on_scan))
+
+/obj/item/pen/edagger/create_transform_component()
AddComponent( \
/datum/component/transforming, \
force_on = 18, \
@@ -296,8 +335,6 @@
w_class_on = WEIGHT_CLASS_NORMAL, \
inhand_icon_change = FALSE, \
)
- RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform))
- RegisterSignal(src, COMSIG_DETECTIVE_SCANNED, PROC_REF(on_scan))
/obj/item/pen/edagger/on_inserted_into_dart(datum/source, obj/item/ammo_casing/dart, mob/user)
. = ..()
@@ -369,9 +406,7 @@
* Handles swapping their icon files to edagger related icon files -
* as they're supposed to look like a normal pen.
*/
-/obj/item/pen/edagger/proc/on_transform(obj/item/source, mob/user, active)
- SIGNAL_HANDLER
-
+/obj/item/pen/edagger/on_transform(obj/item/source, mob/user, active)
if(active)
name = hidden_name
desc = hidden_desc
@@ -418,6 +453,7 @@
colour = COLOR_BLUE
dart_insert_casing_icon_state = "overlay_survivalpen"
dart_insert_projectile_icon_state = "overlay_survivalpen_proj"
+ can_click = FALSE
/obj/item/pen/survival/on_inserted_into_dart(datum/source, obj/item/ammo_casing/dart, mob/user)
. = ..()
@@ -456,6 +492,9 @@
/obj/item/pen/screwdriver/Initialize(mapload)
. = ..()
+ AddElement(/datum/element/update_icon_updates_onmob)
+
+/obj/item/pen/screwdriver/create_transform_component()
AddComponent( \
/datum/component/transforming, \
throwforce_on = 5, \
@@ -464,12 +503,7 @@
inhand_icon_change = FALSE, \
)
- RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(toggle_screwdriver))
- AddElement(/datum/element/update_icon_updates_onmob)
-
-/obj/item/pen/screwdriver/proc/toggle_screwdriver(obj/item/source, mob/user, active)
- SIGNAL_HANDLER
-
+/obj/item/pen/screwdriver/on_transform(obj/item/source, mob/user, active)
if(user)
balloon_alert(user, active ? "extended" : "retracted")
playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE)
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index b7796ad070a87..72d3ecd85ba03 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -495,10 +495,9 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks())
/obj/machinery/photocopier/proc/make_ass_copy()
if(!check_ass())
return null
- var/butt_icon_state = ass.get_butt_sprite()
- if(isnull(butt_icon_state))
+ var/icon/temp_img = ass.get_butt_sprite()
+ if(isnull(temp_img))
return null
- var/icon/temp_img = icon('icons/mob/butts.dmi', butt_icon_state)
var/obj/item/photo/copied_ass = new /obj/item/photo(src)
var/datum/picture/toEmbed = new(name = "[ass]'s Ass", desc = "You see [ass]'s ass on the photo.", image = temp_img)
toEmbed.psize_x = 128
diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm
index b34ff459c0075..b009c5b2e7913 100644
--- a/code/modules/photography/photos/photo.dm
+++ b/code/modules/photography/photos/photo.dm
@@ -68,7 +68,7 @@
/obj/item/photo/attackby(obj/item/P, mob/user, params)
if(burn_paper_product_attackby_check(P, user))
return
- if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon))
+ if(IS_WRITING_UTENSIL(P))
if(!user.can_write(P))
return
var/txt = tgui_input_text(user, "What would you like to write on the back?", "Photo Writing", max_length = 128)
diff --git a/code/modules/power/apc/apc_attack.dm b/code/modules/power/apc/apc_attack.dm
index 8c9715f1dcb1c..2752ae3c2bfdf 100644
--- a/code/modules/power/apc/apc_attack.dm
+++ b/code/modules/power/apc/apc_attack.dm
@@ -29,7 +29,7 @@
return
var/charge_limit = ETHEREAL_CHARGE_DANGEROUS - APC_POWER_GAIN
var/obj/item/organ/internal/stomach/ethereal/stomach = maybe_stomach
- var/obj/item/stock_parts/cell/stomach_cell = stomach.cell
+ var/obj/item/stock_parts/power_store/stomach_cell = stomach.cell
if(!((stomach?.drain_time < world.time) && LAZYACCESS(modifiers, RIGHT_CLICK)))
return
if(ethereal.combat_mode)
@@ -85,7 +85,7 @@
return
/obj/machinery/power/apc/blob_act(obj/structure/blob/B)
- set_broken()
+ atom_break()
/obj/machinery/power/apc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armor_penetration = 0)
// APC being at 0 integrity doesnt delete it outright. Combined with take_damage this might cause runtimes.
@@ -100,11 +100,6 @@
return damage_amount
. = ..()
-/obj/machinery/power/apc/atom_break(damage_flag)
- . = ..()
- if(.)
- set_broken()
-
/obj/machinery/power/apc/proc/can_use(mob/user, loud = 0) //used by attack_hand() and Topic()
if(isAdminGhostAI(user))
return TRUE
@@ -120,17 +115,6 @@
balloon_alert(user, "it's disabled!")
return .
-/obj/machinery/power/apc/proc/set_broken()
- if(machine_stat & BROKEN)
- return
- if(malfai && operating)
- malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000)
- operating = FALSE
- atom_break()
- if(occupier)
- malfvacate(TRUE)
- update()
-
/obj/machinery/power/apc/proc/shock(mob/user, prb)
if(!prob(prb))
return FALSE
diff --git a/code/modules/power/apc/apc_contextual_tips.dm b/code/modules/power/apc/apc_contextual_tips.dm
index 4fe6458e4eba9..ad109cd397a06 100644
--- a/code/modules/power/apc/apc_contextual_tips.dm
+++ b/code/modules/power/apc/apc_contextual_tips.dm
@@ -43,8 +43,8 @@
if (opened == APC_COVER_OPENED && !has_electronics)
context[SCREENTIP_CONTEXT_LMB] = "Disassemble the APC"
- else if(istype(held_item, /obj/item/stock_parts/cell) && opened == APC_COVER_OPENED)
- context[SCREENTIP_CONTEXT_LMB] = "Insert Cell"
+ else if(istype(held_item, /obj/item/stock_parts/power_store/battery) && opened == APC_COVER_OPENED)
+ context[SCREENTIP_CONTEXT_LMB] = "Insert Battery"
else if(istype(held_item, /obj/item/stack/cable_coil) && opened == APC_COVER_OPENED)
context[SCREENTIP_CONTEXT_LMB] = "Create wire terminal"
@@ -56,7 +56,7 @@
if (!has_electronics)
context[SCREENTIP_CONTEXT_LMB] = "Insert an APC board"
else if(!cell)
- context[SCREENTIP_CONTEXT_LMB] = "Insert a cell"
+ context[SCREENTIP_CONTEXT_LMB] = "Insert a battery"
else if(istype(held_item, /obj/item/wallframe/apc))
context[SCREENTIP_CONTEXT_LMB] = "Replace damaged frame"
diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm
index 7e63aff7cbe1b..329f77ab7186d 100644
--- a/code/modules/power/apc/apc_main.dm
+++ b/code/modules/power/apc/apc_main.dm
@@ -30,11 +30,11 @@
///Mapper helper to tie an apc to another area
var/areastring = null
///Reference to our internal cell
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
///Initial cell charge %
var/start_charge = 90
///Type of cell we start with
- var/cell_type = /obj/item/stock_parts/cell/upgraded //Base cell has 2500 capacity. Enter the path of a different cell you want to use. cell determines charge rates, max capacity, ect. These can also be changed with other APC vars, but isn't recommended to minimize the risk of accidental usage of dirty editted APCs
+ var/cell_type = /obj/item/stock_parts/power_store/battery/upgraded //Base cell has 2500 capacity. Enter the path of a different cell you want to use. cell determines charge rates, max capacity, ect. These can also be changed with other APC vars, but isn't recommended to minimize the risk of accidental usage of dirty editted APCs
///State of the cover (closed, opened, removed)
var/opened = APC_COVER_CLOSED
///Is the APC shorted and not working?
@@ -250,38 +250,51 @@
/obj/machinery/power/apc/proc/on_saboteur(datum/source, disrupt_duration)
SIGNAL_HANDLER
+
disrupt_duration *= 0.1 // so, turns out, failure timer is in seconds, not deciseconds; without this, disruptions last 10 times as long as they probably should
energy_fail(disrupt_duration)
return COMSIG_SABOTEUR_SUCCESS
+/obj/machinery/power/apc/on_set_is_operational(old_value)
+ update_area_power_usage(!old_value)
+
+/obj/machinery/power/apc/update_name(updates)
+ . = ..()
+ if(auto_name)
+ name = "\improper [get_area_name(area, TRUE)] APC"
+
/obj/machinery/power/apc/proc/assign_to_area(area/target_area = get_area(src))
if(area == target_area)
return
disconnect_from_area()
area = target_area
- area.power_light = TRUE
- area.power_equip = TRUE
- area.power_environ = TRUE
- area.power_change()
+ update_area_power_usage(TRUE)
area.apc = src
auto_name = TRUE
update_appearance(UPDATE_NAME)
-/obj/machinery/power/apc/update_name(updates)
- . = ..()
- if(auto_name)
- name = "\improper [get_area_name(area, TRUE)] APC"
+/obj/machinery/power/apc/proc/update_area_power_usage(state)
+ //apc is non functional so force disable
+ if(state && (has_electronics != APC_ELECTRONICS_SECURED || (machine_stat & (BROKEN | MAINT)) || QDELETED(cell)))
+ state = FALSE
+
+ //no change in value
+ if(state == area.power_light && state == area.power_equip && state == area.power_environ)
+ return
+
+ area.power_light = state
+ area.power_equip = state
+ area.power_environ = state
+
+ area.power_change()
/obj/machinery/power/apc/proc/disconnect_from_area()
if(isnull(area))
return
- area.power_light = FALSE
- area.power_equip = FALSE
- area.power_environ = FALSE
- area.power_change()
+ update_area_power_usage(FALSE)
area.apc = null
area = null
@@ -318,9 +331,16 @@
else
. += "The cover is closed."
-/obj/machinery/power/apc/on_deconstruction(disassembled = TRUE)
- if(!(machine_stat & BROKEN))
- set_broken()
+/obj/machinery/power/apc/atom_break(damage_flag)
+ . = ..()
+ if(.)
+ if(malfai && operating)
+ malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10, 0, 1000)
+ operating = FALSE
+ if(occupier)
+ malfvacate(TRUE)
+ update()
+
if(opened != APC_COVER_REMOVED)
opened = APC_COVER_REMOVED
coverlocked = FALSE
@@ -669,12 +689,12 @@
///Used for cell_5k apc helper, which installs 5k cell into apc.
/obj/machinery/power/apc/proc/install_cell_5k()
- cell_type = /obj/item/stock_parts/cell/upgraded/plus
+ cell_type = /obj/item/stock_parts/power_store/battery/upgraded
cell = new cell_type(src)
/// Used for cell_10k apc helper, which installs 10k cell into apc.
/obj/machinery/power/apc/proc/install_cell_10k()
- cell_type = /obj/item/stock_parts/cell/high
+ cell_type = /obj/item/stock_parts/power_store/battery/high
cell = new cell_type(src)
/// Used for unlocked apc helper, which unlocks the apc.
diff --git a/code/modules/power/apc/apc_malf.dm b/code/modules/power/apc/apc_malf.dm
index f4c27e15a4067..1419e12c46be3 100644
--- a/code/modules/power/apc/apc_malf.dm
+++ b/code/modules/power/apc/apc_malf.dm
@@ -36,6 +36,12 @@
return
if(!is_station_level(z))
return
+ INVOKE_ASYNC(src, PROC_REF(malfshunt), malf)
+
+/obj/machinery/power/apc/proc/malfshunt(mob/living/silicon/ai/malf)
+ var/confirm = tgui_alert(malf, "Are you sure that you want to shunt? This will take you out of your core!", "Shunt to [name]?", list("Yes", "No"))
+ if(confirm != "Yes")
+ return
malf.ShutOffDoomsdayDevice()
occupier = malf
if (isturf(malf.loc)) // create a deactivated AI core if the AI isn't coming from an emergency mech shunt
diff --git a/code/modules/power/apc/apc_tool_act.dm b/code/modules/power/apc/apc_tool_act.dm
index a82ce2f8f0d50..2072ab145614d 100644
--- a/code/modules/power/apc/apc_tool_act.dm
+++ b/code/modules/power/apc/apc_tool_act.dm
@@ -11,7 +11,7 @@
togglelock(user)
return ITEM_INTERACT_SUCCESS
- if(istype(tool, /obj/item/stock_parts/cell))
+ if(istype(tool, /obj/item/stock_parts/power_store))
. = cell_act(user, tool)
else if(istype(tool, /obj/item/stack/cable_coil))
. = cable_act(user, tool, LAZYACCESS(modifiers, RIGHT_CLICK))
@@ -52,7 +52,7 @@
return ITEM_INTERACT_SUCCESS
/// Called when we interact with the APC with a cell, attempts to insert it
-/obj/machinery/power/apc/proc/cell_act(mob/living/user, obj/item/stock_parts/cell/new_cell)
+/obj/machinery/power/apc/proc/cell_act(mob/living/user, obj/item/stock_parts/power_store/new_cell)
if(!opened)
return NONE
@@ -184,7 +184,7 @@
return ITEM_INTERACT_BLOCKING
if(!pseudocircuit.adapt_circuit(user, circuit_cost = 0.5 * STANDARD_CELL_CHARGE))
return ITEM_INTERACT_BLOCKING
- var/obj/item/stock_parts/cell/crap/empty/bad_cell = new(src)
+ var/obj/item/stock_parts/power_store/battery/crap/empty/bad_cell = new(src)
bad_cell.forceMove(src)
cell = bad_cell
user.visible_message(
@@ -424,7 +424,7 @@
if(machine_stat & MAINT)
balloon_alert(user, "no board for a cell!")
return FALSE
- var/obj/item/stock_parts/cell/crap/empty/C = new(src)
+ var/obj/item/stock_parts/power_store/battery/crap/empty/C = new(src)
C.forceMove(src)
cell = C
balloon_alert(user, "power cell installed")
diff --git a/code/modules/power/battery.dm b/code/modules/power/battery.dm
new file mode 100644
index 0000000000000..8a6be8d85aa5f
--- /dev/null
+++ b/code/modules/power/battery.dm
@@ -0,0 +1,79 @@
+/obj/item/stock_parts/power_store/battery
+ name = "megacell"
+ desc = "A series of rechargeable electrochemical cells wired together to hold significantly more power than a standard power cell."
+ icon = 'icons/obj/machines/cell_charger.dmi'
+ icon_state = "cellbig"
+ cell_size_prefix = "cellbig"
+ inhand_icon_state = "cell"
+ lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi'
+ w_class = WEIGHT_CLASS_NORMAL
+ force = 10
+ throwforce = 5
+ throw_speed = 2
+ throw_range = 2
+ custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*12, /datum/material/glass=SMALL_MATERIAL_AMOUNT*2)
+ grind_results = list(/datum/reagent/lithium = 60, /datum/reagent/iron = 10, /datum/reagent/silicon = 10)
+ rating_base = STANDARD_BATTERY_CHARGE
+ maxcharge = STANDARD_BATTERY_CHARGE
+ chargerate = STANDARD_BATTERY_RATE
+
+/obj/item/stock_parts/power_store/battery/empty
+ empty = TRUE
+
+/obj/item/stock_parts/power_store/battery/upgraded
+ name = "upgraded megacell"
+ desc = "A battery with a slightly higher capacity than normal!"
+ maxcharge = STANDARD_BATTERY_CHARGE * 2.5
+ custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*2.5)
+ chargerate = STANDARD_BATTERY_RATE * 0.5
+
+/obj/item/stock_parts/power_store/battery/high
+ name = "high-capacity megacell"
+ icon_state = "hcellbig"
+ maxcharge = STANDARD_BATTERY_CHARGE * 10
+ custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 3)
+ chargerate = STANDARD_BATTERY_RATE * 0.75
+
+/obj/item/stock_parts/power_store/battery/high/empty
+ empty = TRUE
+
+/obj/item/stock_parts/power_store/battery/super
+ name = "super-capacity megacell"
+ icon_state = "scellbig"
+ maxcharge = STANDARD_BATTERY_CHARGE * 20
+ custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 4)
+ chargerate = STANDARD_BATTERY_RATE
+
+/obj/item/stock_parts/power_store/battery/super/empty
+ empty = TRUE
+
+/obj/item/stock_parts/power_store/battery/hyper
+ name = "hyper-capacity megacell"
+ icon_state = "hpcellbig"
+ maxcharge = STANDARD_BATTERY_CHARGE * 30
+ custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 5)
+ chargerate = STANDARD_BATTERY_RATE * 1.5
+
+/obj/item/stock_parts/power_store/battery/hyper/empty
+ empty = TRUE
+
+/obj/item/stock_parts/power_store/battery/bluespace
+ name = "bluespace megacell"
+ desc = "A rechargeable transdimensional megacell."
+ icon_state = "bscellbig"
+ maxcharge = STANDARD_BATTERY_CHARGE * 40
+ custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*6)
+ chargerate = STANDARD_BATTERY_RATE * 2
+
+/obj/item/stock_parts/power_store/battery/bluespace/empty
+ empty = TRUE
+
+/obj/item/stock_parts/power_store/battery/crap
+ name = "\improper Nanotrasen brand rechargeable AA megacell"
+ desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT
+ maxcharge = STANDARD_BATTERY_CHARGE * 0.5
+ custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*1)
+
+/obj/item/stock_parts/power_store/battery/crap/empty
+ empty = TRUE
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index e55442f31fd1f..a8e20cde8c7a0 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -575,7 +575,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri
user.visible_message(span_notice("[user] starts to fix some of the wires in [H]'s [affecting.name]."), span_notice("You start fixing some of the wires in [H == user ? "your" : "[H]'s"] [affecting.name]."))
if(!do_after(user, 5 SECONDS, H))
return
- if(item_heal_robotic(H, user, 0, 15))
+ if(H.item_heal(user, 0, 15, "dents", "burnt wires", BODYTYPE_ROBOTIC))
use(1)
return
else
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index dc2b4e9812a03..fbb36703cc569 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -1,13 +1,10 @@
-#define CELL_DRAIN_TIME 35
-#define CELL_POWER_GAIN (0.06 * STANDARD_CELL_CHARGE)
-#define CELL_POWER_DRAIN (0.75 * STANDARD_CELL_CHARGE)
/**
* # Power cell
*
- * Batteries.
+ * Power cells, used primarily for handheld and portable things. Holds a reasonable amount of power.
*/
-/obj/item/stock_parts/cell
+/obj/item/stock_parts/power_store/cell
name = "power cell"
desc = "A rechargeable electrochemical power cell."
icon = 'icons/obj/machines/cell_charger.dmi'
@@ -22,380 +19,109 @@
w_class = WEIGHT_CLASS_SMALL
custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*7, /datum/material/glass=SMALL_MATERIAL_AMOUNT*0.5)
grind_results = list(/datum/reagent/lithium = 15, /datum/reagent/iron = 5, /datum/reagent/silicon = 5)
- ///Current charge in cell units
- var/charge = 0
- ///Maximum charge in cell units
- var/maxcharge = STANDARD_CELL_CHARGE
- ///If the cell has been booby-trapped by injecting it with plasma. Chance on use() to explode.
- var/rigged = FALSE
- ///If the power cell was damaged by an explosion, chance for it to become corrupted and function the same as rigged.
- var/corrupted = FALSE
- ///How much power is given per second in a recharger.
- var/chargerate = STANDARD_CELL_RATE * 0.05
- ///If true, the cell will state it's maximum charge in it's description
- var/ratingdesc = TRUE
- ///If it's a grown that acts as a battery, add a wire overlay to it.
- var/grown_battery = FALSE
- ///What charge lige sprite to use, null if no light
- var/charge_light_type = "standard"
- ///What connector sprite to use when in a cell charger, null if no connectors
- var/connector_type = "standard"
- ///Does the cell start without any charge?
- var/empty = FALSE
-
-/obj/item/stock_parts/cell/get_cell()
- return src
-
-/obj/item/stock_parts/cell/Initialize(mapload, override_maxcharge)
- . = ..()
- create_reagents(5, INJECTABLE | DRAINABLE)
- if (override_maxcharge)
- maxcharge = override_maxcharge
- rating = max(round(maxcharge / (STANDARD_CELL_CHARGE * 10), 1), 1)
- if(!charge)
- charge = maxcharge
- if(empty)
- charge = 0
- if(ratingdesc)
- desc += " This one has a rating of [display_energy(maxcharge)][prob(10) ? ", and you should not swallow it" : ""]." //joke works better if it's not on every cell
- update_appearance()
-
- RegisterSignal(src, COMSIG_ITEM_MAGICALLY_CHARGED, PROC_REF(on_magic_charge))
- var/static/list/loc_connections = list(
- COMSIG_ITEM_MAGICALLY_CHARGED = PROC_REF(on_magic_charge),
- )
- AddElement(/datum/element/connect_loc, loc_connections)
-
-/**
- * Signal proc for [COMSIG_ITEM_MAGICALLY_CHARGED]
- *
- * If we, or the item we're located in, is subject to the charge spell, gain some charge back
- */
-/obj/item/stock_parts/cell/proc/on_magic_charge(datum/source, datum/action/cooldown/spell/charge/spell, mob/living/caster)
- SIGNAL_HANDLER
-
- // This shouldn't be running if we're not being held by a mob,
- // or if we're not within an object being held by a mob, but just in case...
- if(!ismovable(loc))
- return
-
- . = COMPONENT_ITEM_CHARGED
-
- if(prob(80))
- maxcharge -= STANDARD_CELL_CHARGE * 0.2
-
- if(maxcharge <= 1) // Div by 0 protection
- maxcharge = 1
- . |= COMPONENT_ITEM_BURNT_OUT
-
- charge = maxcharge
- update_appearance()
-
- // Guns need to process their chamber when we've been charged
- if(isgun(loc))
- var/obj/item/gun/gun_loc = loc
- gun_loc.process_chamber()
-
- // The thing we're in might have overlays or icon states for whether the cell is charged
- if(!ismob(loc))
- loc.update_appearance()
-
- return .
-
-/obj/item/stock_parts/cell/create_reagents(max_vol, flags)
- . = ..()
- RegisterSignals(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_REM_REAGENT), PROC_REF(on_reagent_change))
- RegisterSignal(reagents, COMSIG_QDELETING, PROC_REF(on_reagents_del))
-
-/// Handles properly detaching signal hooks.
-/obj/item/stock_parts/cell/proc/on_reagents_del(datum/reagents/reagents)
- SIGNAL_HANDLER
- UnregisterSignal(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_REM_REAGENT, COMSIG_QDELETING))
- return NONE
-
-/obj/item/stock_parts/cell/update_overlays()
- . = ..()
- if(grown_battery)
- . += mutable_appearance('icons/obj/machines/cell_charger.dmi', "grown_wires")
- if((charge < 0.01) || !charge_light_type)
- return
- . += mutable_appearance('icons/obj/machines/cell_charger.dmi', "cell-[charge_light_type]-o[(percent() >= 99.5) ? 2 : 1]")
-
-/obj/item/stock_parts/cell/vv_edit_var(vname, vval)
- if(vname == NAMEOF(src, charge))
- charge = clamp(vval, 0, maxcharge)
- return TRUE
- if(vname == NAMEOF(src, maxcharge))
- if(charge > vval)
- charge = vval
- if(vname == NAMEOF(src, corrupted) && vval && !corrupted)
- corrupt(TRUE)
- return TRUE
- return ..()
-
-
-/**
- * Returns the percentage of the cell's charge.
- */
-/obj/item/stock_parts/cell/proc/percent() // return % charge of cell
- return 100 * charge / maxcharge
-
-/**
- * Returns the maximum charge of the cell.
- */
-/obj/item/stock_parts/cell/proc/max_charge()
- return maxcharge
-
-/**
- * Returns the current charge of the cell.
- */
-/obj/item/stock_parts/cell/proc/charge()
- return charge
-
-/**
- * Returns the amount of charge used on the cell.
- */
-/obj/item/stock_parts/cell/proc/used_charge()
- return maxcharge - charge
-
-/// Use power from the cell.
-/// Args:
-/// - used: Amount of power in joules to use.
-/// - force: If true, uses the remaining power from the cell if there isn't enough power to supply the demand.
-/// Returns: The power used from the cell in joules.
-/obj/item/stock_parts/cell/use(used, force = FALSE)
- var/power_used = min(used, charge)
- if(rigged && power_used > 0)
- explode()
- return 0 // The cell decided to explode so we won't be able to use it.
- if(!force && charge < used)
- return 0
- charge -= power_used
- if(!istype(loc, /obj/machinery/power/apc))
- SSblackbox.record_feedback("tally", "cell_used", 1, type)
- return power_used
-
-/// Recharge the cell.
-/// Args:
-/// - amount: The amount of energy to give to the cell in joules.
-/// Returns: The power given to the cell in joules.
-/obj/item/stock_parts/cell/proc/give(amount)
- var/power_used = min(maxcharge-charge,amount)
- charge += power_used
- if(rigged && amount > 0)
- explode()
- return power_used
-
-/**
- * Changes the charge of the cell.
- * Args:
- * - amount: The energy to give to the cell (can be negative).
- * Returns: The energy that was given to the cell (can be negative).
- */
-/obj/item/stock_parts/cell/proc/change(amount)
- var/energy_used = clamp(amount, -charge, maxcharge - charge)
- charge += energy_used
- if(rigged && energy_used)
- explode()
- return energy_used
-
-/obj/item/stock_parts/cell/examine(mob/user)
- . = ..()
- if(rigged)
- . += span_danger("This power cell seems to be faulty!")
- else
- . += "The charge meter reads [CEILING(percent(), 0.1)]%." //so it doesn't say 0% charge when the overlay indicates it still has charge
-
-/obj/item/stock_parts/cell/suicide_act(mob/living/user)
- user.visible_message(span_suicide("[user] is licking the electrodes of [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
- return FIRELOSS
-
-/obj/item/stock_parts/cell/proc/on_reagent_change(datum/reagents/holder, ...)
- SIGNAL_HANDLER
- rigged = (corrupted || holder.has_reagent(/datum/reagent/toxin/plasma, 5)) ? TRUE : FALSE //has_reagent returns the reagent datum
- return NONE
-
-
-/obj/item/stock_parts/cell/proc/explode()
- if(!charge)
- return
- var/range_devastation = -1
- var/range_heavy = round(sqrt(charge / (3.6 * STANDARD_CELL_CHARGE)))
- var/range_light = round(sqrt(charge / (0.9 * STANDARD_CELL_CHARGE)))
- var/range_flash = range_light
- if(!range_light)
- rigged = FALSE
- corrupt()
- return
-
- message_admins("[ADMIN_LOOKUPFLW(usr)] has triggered a rigged/corrupted power cell explosion at [AREACOORD(loc)].")
- usr?.log_message("triggered a rigged/corrupted power cell explosion", LOG_GAME)
- usr?.log_message("triggered a rigged/corrupted power cell explosion", LOG_VICTIM, log_globally = FALSE)
-
- explosion(src, devastation_range = range_devastation, heavy_impact_range = range_heavy, light_impact_range = range_light, flash_range = range_flash)
- qdel(src)
-
-/obj/item/stock_parts/cell/proc/corrupt(force)
- charge /= 2
- maxcharge = max(maxcharge/2, chargerate)
- if (force || prob(10))
- rigged = TRUE //broken batterys are dangerous
- corrupted = TRUE
-
-/obj/item/stock_parts/cell/emp_act(severity)
- . = ..()
- if(. & EMP_PROTECT_SELF)
- return
- use(STANDARD_CELL_CHARGE / severity, force = TRUE)
-
-/obj/item/stock_parts/cell/ex_act(severity, target)
- . = ..()
- if(QDELETED(src))
- return FALSE
-
- switch(severity)
- if(EXPLODE_HEAVY)
- if(prob(50))
- corrupt()
- if(EXPLODE_LIGHT)
- if(prob(25))
- corrupt()
-
- return TRUE
-
-/obj/item/stock_parts/cell/attack_self(mob/user)
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- var/obj/item/organ/internal/stomach/maybe_stomach = H.get_organ_slot(ORGAN_SLOT_STOMACH)
-
- if(istype(maybe_stomach, /obj/item/organ/internal/stomach/ethereal))
-
- var/charge_limit = ETHEREAL_CHARGE_DANGEROUS - CELL_POWER_GAIN
- var/obj/item/organ/internal/stomach/ethereal/stomach = maybe_stomach
- var/obj/item/stock_parts/cell/stomach_cell = stomach.cell
- if((stomach.drain_time > world.time) || !stomach)
- return
- if(charge < CELL_POWER_DRAIN)
- to_chat(H, span_warning("[src] doesn't have enough power!"))
- return
- if(stomach_cell.charge() > charge_limit)
- to_chat(H, span_warning("Your charge is full!"))
- return
- to_chat(H, span_notice("You begin clumsily channeling power from [src] into your body."))
- stomach.drain_time = world.time + CELL_DRAIN_TIME
- while(do_after(user, CELL_DRAIN_TIME, target = src))
- if((charge < CELL_POWER_DRAIN) || (stomach_cell.charge() > charge_limit))
- return
- if(istype(stomach))
- to_chat(H, span_notice("You receive some charge from [src], wasting some in the process."))
- stomach.adjust_charge(CELL_POWER_GAIN)
- charge -= CELL_POWER_DRAIN //you waste way more than you receive, so that ethereals cant just steal one cell and forget about hunger
- else
- to_chat(H, span_warning("You can't receive charge from [src]!"))
- return
-
-
-/obj/item/stock_parts/cell/blob_act(obj/structure/blob/B)
- SSexplosions.high_mov_atom += src
-
-/obj/item/stock_parts/cell/proc/get_electrocute_damage()
- return ELECTROCUTE_DAMAGE(charge / max(0.001 * STANDARD_CELL_CHARGE, 1)) // Wouldn't want it to consider more energy than whatever is actually in the cell if for some strange reason someone set the STANDARD_CELL_CHARGE to below 1kJ.
-
-/obj/item/stock_parts/cell/get_part_rating()
- return maxcharge * 10 + charge
/* Cell variants*/
-/obj/item/stock_parts/cell/empty
+/obj/item/stock_parts/power_store/cell/empty
empty = TRUE
-/obj/item/stock_parts/cell/crap
- name = "\improper Nanotrasen brand rechargeable AA battery"
+/obj/item/stock_parts/power_store/cell/crap
+ name = "\improper Nanotrasen brand rechargeable AA cell"
desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT
+ icon_state = "aa_cell"
maxcharge = STANDARD_CELL_CHARGE * 0.5
custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.4)
-/obj/item/stock_parts/cell/crap/empty
+/obj/item/stock_parts/power_store/cell/crap/Initialize(mapload)
+ AddElement(/datum/element/update_icon_blocker)
+ return ..()
+
+/obj/item/stock_parts/power_store/cell/crap/empty
empty = TRUE
-/obj/item/stock_parts/cell/upgraded
+/obj/item/stock_parts/power_store/cell/upgraded
name = "upgraded power cell"
desc = "A power cell with a slightly higher capacity than normal!"
+ icon_state = "9v_cell"
maxcharge = STANDARD_CELL_CHARGE * 2.5
custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.5)
chargerate = STANDARD_CELL_RATE * 0.5
-/obj/item/stock_parts/cell/upgraded/plus
+/obj/item/stock_parts/power_store/cell/upgraded/Initialize(mapload)
+ AddElement(/datum/element/update_icon_blocker)
+ return ..()
+
+/obj/item/stock_parts/power_store/cell/upgraded/plus
name = "upgraded power cell+"
desc = "A power cell with an even higher capacity than the base model!"
maxcharge = STANDARD_CELL_CHARGE * 5
-/obj/item/stock_parts/cell/secborg
- name = "security borg rechargeable D battery"
+/obj/item/stock_parts/power_store/cell/secborg
+ name = "security borg rechargeable D cell"
maxcharge = STANDARD_CELL_CHARGE * 0.6
custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.4)
-/obj/item/stock_parts/cell/secborg/empty
+/obj/item/stock_parts/power_store/cell/secborg/empty
empty = TRUE
-/obj/item/stock_parts/cell/mini_egun
+/obj/item/stock_parts/power_store/cell/mini_egun
name = "miniature energy gun power cell"
maxcharge = STANDARD_CELL_CHARGE * 0.6
-/obj/item/stock_parts/cell/hos_gun
+/obj/item/stock_parts/power_store/cell/hos_gun
name = "X-01 multiphase energy gun power cell"
maxcharge = STANDARD_CELL_CHARGE * 1.2
-/obj/item/stock_parts/cell/pulse //200 pulse shots
+/obj/item/stock_parts/power_store/cell/pulse //200 pulse shots
name = "pulse rifle power cell"
maxcharge = STANDARD_CELL_CHARGE * 40
chargerate = STANDARD_CELL_RATE * 0.75
-/obj/item/stock_parts/cell/pulse/carbine //25 pulse shots
+/obj/item/stock_parts/power_store/cell/pulse/carbine //25 pulse shots
name = "pulse carbine power cell"
maxcharge = STANDARD_CELL_CHARGE * 5
-/obj/item/stock_parts/cell/pulse/pistol //10 pulse shots
+/obj/item/stock_parts/power_store/cell/pulse/pistol //10 pulse shots
name = "pulse pistol power cell"
maxcharge = STANDARD_CELL_CHARGE * 2
-/obj/item/stock_parts/cell/ninja
+/obj/item/stock_parts/power_store/cell/ninja
name = "black power cell"
icon_state = "bscell"
maxcharge = STANDARD_CELL_CHARGE * 10
custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.6)
chargerate = STANDARD_CELL_RATE
-/obj/item/stock_parts/cell/high
+/obj/item/stock_parts/power_store/cell/high
name = "high-capacity power cell"
icon_state = "hcell"
maxcharge = STANDARD_CELL_CHARGE * 10
custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.6)
chargerate = STANDARD_CELL_RATE * 0.75
-/obj/item/stock_parts/cell/high/empty
+/obj/item/stock_parts/power_store/cell/high/empty
empty = TRUE
-/obj/item/stock_parts/cell/super
+/obj/item/stock_parts/power_store/cell/super
name = "super-capacity power cell"
icon_state = "scell"
maxcharge = STANDARD_CELL_CHARGE * 20
custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 3)
chargerate = STANDARD_CELL_RATE
-/obj/item/stock_parts/cell/super/empty
+/obj/item/stock_parts/power_store/cell/super/empty
empty = TRUE
-/obj/item/stock_parts/cell/hyper
+/obj/item/stock_parts/power_store/cell/hyper
name = "hyper-capacity power cell"
icon_state = "hpcell"
maxcharge = STANDARD_CELL_CHARGE * 30
custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 4)
chargerate = STANDARD_CELL_RATE * 1.5
-/obj/item/stock_parts/cell/hyper/empty
+/obj/item/stock_parts/power_store/cell/hyper/empty
empty = TRUE
-/obj/item/stock_parts/cell/bluespace
+/obj/item/stock_parts/power_store/cell/bluespace
name = "bluespace power cell"
desc = "A rechargeable transdimensional power cell."
icon_state = "bscell"
@@ -403,10 +129,10 @@
custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*6)
chargerate = STANDARD_CELL_RATE * 2
-/obj/item/stock_parts/cell/bluespace/empty
+/obj/item/stock_parts/power_store/cell/bluespace/empty
empty = TRUE
-/obj/item/stock_parts/cell/infinite
+/obj/item/stock_parts/power_store/cell/infinite
name = "infinite-capacity power cell"
icon_state = "icell"
maxcharge = INFINITY //little disappointing if you examine it and it's not huge
@@ -414,10 +140,10 @@
chargerate = INFINITY
ratingdesc = FALSE
-/obj/item/stock_parts/cell/infinite/use(used, force = FALSE)
+/obj/item/stock_parts/power_store/cell/infinite/use(used, force = FALSE)
return TRUE
-/obj/item/stock_parts/cell/infinite/abductor
+/obj/item/stock_parts/power_store/cell/infinite/abductor
name = "void core"
desc = "An alien power cell that produces energy seemingly out of nowhere."
icon = 'icons/obj/antags/abductor.dmi'
@@ -425,11 +151,11 @@
maxcharge = STANDARD_CELL_CHARGE * 50
ratingdesc = FALSE
-/obj/item/stock_parts/cell/infinite/abductor/Initialize(mapload)
+/obj/item/stock_parts/power_store/cell/infinite/abductor/Initialize(mapload)
AddElement(/datum/element/update_icon_blocker)
return ..()
-/obj/item/stock_parts/cell/potato
+/obj/item/stock_parts/power_store/cell/potato
name = "potato battery"
desc = "A rechargeable starch based power cell."
icon = 'icons/obj/service/hydroponics/harvest.dmi'
@@ -441,26 +167,26 @@
grown_battery = TRUE //it has the overlays for wires
custom_premium_price = PAYCHECK_CREW
-/obj/item/stock_parts/cell/potato/Initialize(mapload, override_maxcharge)
+/obj/item/stock_parts/power_store/cell/potato/Initialize(mapload, override_maxcharge)
charge = maxcharge * 0.3
. = ..()
-/obj/item/stock_parts/cell/emproof
+/obj/item/stock_parts/power_store/cell/emproof
name = "\improper EMP-proof cell"
desc = "An EMP-proof cell."
maxcharge = STANDARD_CELL_CHARGE * 0.5
-/obj/item/stock_parts/cell/emproof/Initialize(mapload)
+/obj/item/stock_parts/power_store/cell/emproof/Initialize(mapload)
AddElement(/datum/element/empprotection, EMP_PROTECT_SELF)
return ..()
-/obj/item/stock_parts/cell/emproof/empty
+/obj/item/stock_parts/power_store/cell/emproof/empty
empty = TRUE
-/obj/item/stock_parts/cell/emproof/corrupt()
+/obj/item/stock_parts/power_store/cell/emproof/corrupt()
return
-/obj/item/stock_parts/cell/emproof/slime
+/obj/item/stock_parts/power_store/cell/emproof/slime
name = "EMP-proof slime core"
desc = "A yellow slime core infused with plasma. Its organic nature makes it immune to EMPs."
icon = 'icons/mob/simple/slimes.dmi'
@@ -470,36 +196,21 @@
charge_light_type = null
connector_type = "slimecore"
-/obj/item/stock_parts/cell/beam_rifle
- name = "beam rifle capacitor"
- desc = "A high powered capacitor that can provide huge amounts of energy in an instant."
- maxcharge = STANDARD_CELL_CHARGE * 50
- chargerate = STANDARD_CELL_RATE * 2.5 //Extremely energy intensive
-
-/obj/item/stock_parts/cell/beam_rifle/corrupt()
- return
-
-/obj/item/stock_parts/cell/beam_rifle/emp_act(severity)
- . = ..()
- if(. & EMP_PROTECT_SELF)
- return
- charge = clamp((charge-(10000/severity)),0,maxcharge)
-
-/obj/item/stock_parts/cell/emergency_light
+/obj/item/stock_parts/power_store/cell/emergency_light
name = "miniature power cell"
desc = "A tiny power cell with a very low power capacity. Used in light fixtures to power them in the event of an outage."
maxcharge = STANDARD_CELL_CHARGE * 0.12 //Emergency lights use 0.2 W per tick, meaning ~10 minutes of emergency power from a cell
custom_materials = list(/datum/material/glass = SMALL_MATERIAL_AMOUNT*0.2)
w_class = WEIGHT_CLASS_TINY
-/obj/item/stock_parts/cell/emergency_light/Initialize(mapload)
+/obj/item/stock_parts/power_store/cell/emergency_light/Initialize(mapload)
. = ..()
var/area/area = get_area(src)
if(area)
if(!area.lightswitch || !area.light_power)
charge = 0 //For naturally depowered areas, we start with no power
-/obj/item/stock_parts/cell/crystal_cell
+/obj/item/stock_parts/power_store/cell/crystal_cell
name = "crystal power cell"
desc = "A very high power cell made from crystallized plasma"
icon_state = "crystal_cell"
@@ -510,10 +221,10 @@
custom_materials = null
grind_results = null
-/obj/item/stock_parts/cell/inducer_supply
+/obj/item/stock_parts/power_store/cell/inducer_supply
maxcharge = STANDARD_CELL_CHARGE * 5
-/obj/item/stock_parts/cell/ethereal
+/obj/item/stock_parts/power_store/cell/ethereal
name = "ahelp it"
desc = "you sohuldn't see this"
maxcharge = ETHEREAL_CHARGE_DANGEROUS
@@ -524,10 +235,6 @@
custom_materials = null
grind_results = null
-/obj/item/stock_parts/cell/ethereal/examine(mob/user)
+/obj/item/stock_parts/power_store/cell/ethereal/examine(mob/user)
. = ..()
CRASH("[src.type] got examined by [user]")
-
-#undef CELL_DRAIN_TIME
-#undef CELL_POWER_GAIN
-#undef CELL_POWER_DRAIN
diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm
index 43713cc49ae0c..3781944ad0099 100644
--- a/code/modules/power/lighting/light.dm
+++ b/code/modules/power/lighting/light.dm
@@ -37,7 +37,7 @@
///Count of number of times switched on/off, this is used to calculate the probability the light burns out
var/switchcount = 0
///Cell reference
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
/// If TRUE, then cell is null, but one is pretending to exist.
/// This is to defer emergency cell creation unless necessary, as it is very expensive.
var/has_mock_cell = TRUE
@@ -77,12 +77,13 @@
var/fire_power = 0.5
///The Light colour to use when working in fire alarm status
var/fire_colour = COLOR_FIRE_LIGHT_RED
-
///Power usage - W per unit of luminosity
var/power_consumption_rate = 20
+ ///break if moved, if false also makes it ignore if the wall its on breaks
+ var/break_if_moved = TRUE
/obj/machinery/light/Move()
- if(status != LIGHT_BROKEN)
+ if(status != LIGHT_BROKEN && break_if_moved)
break_light_tube(TRUE)
return ..()
@@ -117,7 +118,8 @@
RegisterSignal(src, COMSIG_LIGHT_EATER_ACT, PROC_REF(on_light_eater))
RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur))
AddElement(/datum/element/atmos_sensitive, mapload)
- find_and_hang_on_wall(custom_drop_callback = CALLBACK(src, PROC_REF(knock_down)))
+ if(break_if_moved)
+ find_and_hang_on_wall(custom_drop_callback = CALLBACK(src, PROC_REF(knock_down)))
/obj/machinery/light/post_machine_initialize()
. = ..()
@@ -319,7 +321,7 @@
/obj/machinery/light/get_cell()
if (has_mock_cell)
- cell = new /obj/item/stock_parts/cell/emergency_light(src)
+ cell = new /obj/item/stock_parts/power_store/cell/emergency_light(src)
has_mock_cell = FALSE
return cell
@@ -419,7 +421,7 @@
new /obj/item/stack/cable_coil(loc, 1, "red")
transfer_fingerprints_to(new_light)
- var/obj/item/stock_parts/cell/real_cell = get_cell()
+ var/obj/item/stock_parts/power_store/real_cell = get_cell()
if(!QDELETED(real_cell))
new_light.cell = real_cell
real_cell.forceMove(new_light)
@@ -480,8 +482,8 @@
/obj/machinery/light/proc/use_emergency_power(power_usage_amount = LIGHT_EMERGENCY_POWER_USE)
if(!has_emergency_power(power_usage_amount))
return FALSE
- var/obj/item/stock_parts/cell/real_cell = get_cell()
- if(real_cell.charge > 2.5 * /obj/item/stock_parts/cell/emergency_light::maxcharge) //it's meant to handle 120 W, ya doofus
+ var/obj/item/stock_parts/power_store/real_cell = get_cell()
+ if(real_cell.charge > 2.5 * /obj/item/stock_parts/power_store/cell/emergency_light::maxcharge) //it's meant to handle 120 W, ya doofus
visible_message(span_warning("[src] short-circuits from too powerful of a power cell!"))
burn_out()
return FALSE
@@ -733,3 +735,8 @@
/obj/machinery/light/floor/broken
status = LIGHT_BROKEN
icon_state = "floor-broken"
+
+/obj/machinery/light/floor/transport
+ name = "transport light"
+ break_if_moved = FALSE
+ layer = BELOW_OPEN_DOOR_LAYER
diff --git a/code/modules/power/lighting/light_construct.dm b/code/modules/power/lighting/light_construct.dm
index 8b79c33d69bcb..2bca5e3b3f157 100644
--- a/code/modules/power/lighting/light_construct.dm
+++ b/code/modules/power/lighting/light_construct.dm
@@ -17,7 +17,7 @@
///Reference for light object
var/obj/machinery/light/new_light = null
///Reference for the internal cell
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
///Can we support a cell?
var/cell_connectors = TRUE
@@ -71,14 +71,14 @@
if(!cell)
return
to_chat(user, span_notice("You telekinetically remove [cell]."))
- var/obj/item/stock_parts/cell/cell_reference = cell
+ var/obj/item/stock_parts/power_store/cell_reference = cell
cell = null
cell_reference.forceMove(drop_location())
return cell_reference.attack_tk(user)
/obj/structure/light_construct/attackby(obj/item/tool, mob/user, params)
add_fingerprint(user)
- if(istype(tool, /obj/item/stock_parts/cell))
+ if(istype(tool, /obj/item/stock_parts/power_store/cell))
if(!cell_connectors)
to_chat(user, span_warning("This [name] can't support a power cell!"))
return
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 71daf214019c7..5cfeab92f06ca 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -117,8 +117,6 @@
// returns true if the area has power on given channel (or doesn't require power).
// defaults to power_channel
/obj/machinery/proc/powered(chan = power_channel, ignore_use_power = FALSE)
- if(!loc)
- return FALSE
if(!use_power && !ignore_use_power)
return TRUE
@@ -251,7 +249,7 @@
* - channel: The power channel to use.
* Returns: The amount of energy the cell received.
*/
-/obj/machinery/proc/charge_cell(amount, obj/item/stock_parts/cell/cell, grid_only = FALSE, channel = AREA_USAGE_EQUIP)
+/obj/machinery/proc/charge_cell(amount, obj/item/stock_parts/power_store/cell, grid_only = FALSE, channel = AREA_USAGE_EQUIP)
var/demand = use_energy(min(amount, cell.used_charge()), channel = channel, ignore_apc = grid_only)
var/power_given = cell.give(demand)
return power_given
@@ -451,11 +449,11 @@
power_source = Cable.powernet
var/datum/powernet/PN
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
if (istype(power_source, /datum/powernet))
PN = power_source
- else if (istype(power_source, /obj/item/stock_parts/cell))
+ else if (istype(power_source, /obj/item/stock_parts/power_store))
cell = power_source
else if (istype(power_source, /obj/machinery/power/apc))
var/obj/machinery/power/apc/apc = power_source
@@ -494,7 +492,7 @@
return FALSE
var/datum/powernet/PN = powernet_info["powernet"]
- var/obj/item/stock_parts/cell/cell = powernet_info["cell"]
+ var/obj/item/stock_parts/power_store/cell = powernet_info["cell"]
var/PN_damage = 0
var/cell_damage = 0
@@ -519,7 +517,7 @@
source_area.apc?.terminal?.use_energy(drained_energy)
else if (istype(power_source, /datum/powernet))
PN.delayedload += (min(drained_energy, max(PN.newavail - PN.delayedload, 0)))
- else if (istype(power_source, /obj/item/stock_parts/cell))
+ else if (istype(power_source, /obj/item/stock_parts/power_store))
cell.use(drained_energy)
return drained_energy
diff --git a/code/modules/power/power_store.dm b/code/modules/power/power_store.dm
new file mode 100644
index 0000000000000..688dc70908f36
--- /dev/null
+++ b/code/modules/power/power_store.dm
@@ -0,0 +1,326 @@
+#define CELL_DRAIN_TIME 35
+#define CELL_POWER_GAIN (0.06 * STANDARD_CELL_CHARGE)
+#define CELL_POWER_DRAIN (0.75 * STANDARD_CELL_CHARGE)
+
+/**
+ * # Power store abstract type
+ *
+ * Abstract type for a stock part that holds power.
+ */
+/obj/item/stock_parts/power_store
+ name = "power store abstract"
+ /// The size icon overlay prefix.
+ var/cell_size_prefix = "cell"
+ ///Current charge in cell units
+ var/charge = 0
+ /// Standard cell charge used for rating
+ var/rating_base = STANDARD_CELL_CHARGE
+ ///Maximum charge in cell units
+ var/maxcharge = STANDARD_CELL_CHARGE
+ ///If the cell has been booby-trapped by injecting it with plasma. Chance on use() to explode.
+ var/rigged = FALSE
+ ///If the power cell was damaged by an explosion, chance for it to become corrupted and function the same as rigged.
+ var/corrupted = FALSE
+ ///How much power is given per second in a recharger.
+ var/chargerate = STANDARD_CELL_RATE * 0.05
+ ///If true, the cell will state it's maximum charge in it's description
+ var/ratingdesc = TRUE
+ ///If it's a grown that acts as a battery, add a wire overlay to it.
+ var/grown_battery = FALSE
+ ///What charge lige sprite to use, null if no light
+ var/charge_light_type = "standard"
+ ///What connector sprite to use when in a cell charger, null if no connectors
+ var/connector_type = "standard"
+ ///Does the cell start without any charge?
+ var/empty = FALSE
+
+/obj/item/stock_parts/power_store/get_cell()
+ return src
+
+/obj/item/stock_parts/power_store/Initialize(mapload, override_maxcharge)
+ . = ..()
+ create_reagents(5, INJECTABLE | DRAINABLE)
+ if (override_maxcharge)
+ maxcharge = override_maxcharge
+ rating = max(round(maxcharge / (rating_base * 10), 1), 1)
+ if(!charge)
+ charge = maxcharge
+ if(empty)
+ charge = 0
+ if(ratingdesc)
+ desc += " This one has a rating of [display_energy(maxcharge)][prob(10) ? ", and you should not swallow it" : ""]." //joke works better if it's not on every cell
+ update_appearance()
+
+ RegisterSignal(src, COMSIG_ITEM_MAGICALLY_CHARGED, PROC_REF(on_magic_charge))
+ var/static/list/loc_connections = list(
+ COMSIG_ITEM_MAGICALLY_CHARGED = PROC_REF(on_magic_charge),
+ )
+ AddElement(/datum/element/connect_loc, loc_connections)
+
+/**
+ * Signal proc for [COMSIG_ITEM_MAGICALLY_CHARGED]
+ *
+ * If we, or the item we're located in, is subject to the charge spell, gain some charge back
+ */
+/obj/item/stock_parts/power_store/proc/on_magic_charge(datum/source, datum/action/cooldown/spell/charge/spell, mob/living/caster)
+ SIGNAL_HANDLER
+
+ // This shouldn't be running if we're not being held by a mob,
+ // or if we're not within an object being held by a mob, but just in case...
+ if(!ismovable(loc))
+ return
+
+ . = COMPONENT_ITEM_CHARGED
+
+ if(prob(80))
+ maxcharge -= rating_base * 0.2
+
+ if(maxcharge <= 1) // Div by 0 protection
+ maxcharge = 1
+ . |= COMPONENT_ITEM_BURNT_OUT
+
+ charge = maxcharge
+ update_appearance()
+
+ // Guns need to process their chamber when we've been charged
+ if(isgun(loc))
+ var/obj/item/gun/gun_loc = loc
+ gun_loc.process_chamber()
+
+ // The thing we're in might have overlays or icon states for whether the cell is charged
+ if(!ismob(loc))
+ loc.update_appearance()
+
+ return .
+
+/obj/item/stock_parts/power_store/create_reagents(max_vol, flags)
+ . = ..()
+ RegisterSignals(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_REM_REAGENT), PROC_REF(on_reagent_change))
+ RegisterSignal(reagents, COMSIG_QDELETING, PROC_REF(on_reagents_del))
+
+/// Handles properly detaching signal hooks.
+/obj/item/stock_parts/power_store/proc/on_reagents_del(datum/reagents/reagents)
+ SIGNAL_HANDLER
+ UnregisterSignal(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_REM_REAGENT, COMSIG_QDELETING))
+ return NONE
+
+/obj/item/stock_parts/power_store/update_overlays()
+ . = ..()
+ if(grown_battery)
+ . += mutable_appearance('icons/obj/machines/cell_charger.dmi', "grown_wires")
+ if((charge < 0.01) || !charge_light_type)
+ return
+ . += mutable_appearance('icons/obj/machines/cell_charger.dmi', "[cell_size_prefix]-[charge_light_type]-o[(percent() >= 99.5) ? 2 : 1]")
+
+/obj/item/stock_parts/power_store/vv_edit_var(vname, vval)
+ if(vname == NAMEOF(src, charge))
+ charge = clamp(vval, 0, maxcharge)
+ return TRUE
+ if(vname == NAMEOF(src, maxcharge))
+ if(charge > vval)
+ charge = vval
+ if(vname == NAMEOF(src, corrupted) && vval && !corrupted)
+ corrupt(TRUE)
+ return TRUE
+ return ..()
+
+
+/**
+ * Returns the percentage of the cell's charge.
+ */
+/obj/item/stock_parts/power_store/proc/percent() // return % charge of cell
+ return 100 * charge / maxcharge
+
+/**
+ * Returns the maximum charge of the cell.
+ */
+/obj/item/stock_parts/power_store/proc/max_charge()
+ return maxcharge
+
+/**
+ * Returns the current charge of the cell.
+ */
+/obj/item/stock_parts/power_store/proc/charge()
+ return charge
+
+/**
+ * Returns the amount of charge used on the cell.
+ */
+/obj/item/stock_parts/power_store/proc/used_charge()
+ return maxcharge - charge
+
+/// Use power from the cell.
+/// Args:
+/// - used: Amount of power in joules to use.
+/// - force: If true, uses the remaining power from the cell if there isn't enough power to supply the demand.
+/// Returns: The power used from the cell in joules.
+/obj/item/stock_parts/power_store/use(used, force = FALSE)
+ var/power_used = min(used, charge)
+ if(rigged && power_used > 0)
+ explode()
+ return 0 // The cell decided to explode so we won't be able to use it.
+ if(!force && charge < used)
+ return 0
+ charge -= power_used
+ if(!istype(loc, /obj/machinery/power/apc))
+ SSblackbox.record_feedback("tally", "cell_used", 1, type)
+ return power_used
+
+/// Recharge the cell.
+/// Args:
+/// - amount: The amount of energy to give to the cell in joules.
+/// Returns: The power given to the cell in joules.
+/obj/item/stock_parts/power_store/proc/give(amount)
+ var/power_used = min(maxcharge-charge,amount)
+ charge += power_used
+ if(rigged && amount > 0)
+ explode()
+ return power_used
+
+/**
+ * Changes the charge of the cell.
+ * Args:
+ * - amount: The energy to give to the cell (can be negative).
+ * Returns: The energy that was given to the cell (can be negative).
+ */
+/obj/item/stock_parts/power_store/proc/change(amount)
+ var/energy_used = clamp(amount, -charge, maxcharge - charge)
+ charge += energy_used
+ if(rigged && energy_used)
+ explode()
+ return energy_used
+
+/obj/item/stock_parts/power_store/examine(mob/user)
+ . = ..()
+ if(rigged)
+ . += span_danger("This [name] seems to be faulty!")
+ else
+ . += "The charge meter reads [CEILING(percent(), 0.1)]%." //so it doesn't say 0% charge when the overlay indicates it still has charge
+
+/obj/item/stock_parts/power_store/proc/on_reagent_change(datum/reagents/holder, ...)
+ SIGNAL_HANDLER
+ rigged = (corrupted || holder.has_reagent(/datum/reagent/toxin/plasma, 5)) ? TRUE : FALSE //has_reagent returns the reagent datum
+ return NONE
+
+
+/obj/item/stock_parts/power_store/proc/explode()
+ if(!charge)
+ return
+ var/range_devastation = -1
+ var/range_heavy = round(sqrt(charge / (3.6 * rating_base)))
+ var/range_light = round(sqrt(charge / (0.9 * rating_base)))
+ var/range_flash = range_light
+ if(!range_light)
+ rigged = FALSE
+ corrupt()
+ return
+
+ message_admins("[ADMIN_LOOKUPFLW(usr)] has triggered a rigged/corrupted power cell explosion at [AREACOORD(loc)].")
+ usr?.log_message("triggered a rigged/corrupted power cell explosion", LOG_GAME)
+ usr?.log_message("triggered a rigged/corrupted power cell explosion", LOG_VICTIM, log_globally = FALSE)
+
+ explosion(src, devastation_range = range_devastation, heavy_impact_range = range_heavy, light_impact_range = range_light, flash_range = range_flash)
+ qdel(src)
+
+/obj/item/stock_parts/power_store/proc/corrupt(force)
+ charge /= 2
+ maxcharge = max(maxcharge/2, chargerate)
+ if (force || prob(10))
+ rigged = TRUE //broken batterys are dangerous
+ corrupted = TRUE
+
+/obj/item/stock_parts/power_store/emp_act(severity)
+ . = ..()
+ if(. & EMP_PROTECT_SELF)
+ return
+ use(STANDARD_CELL_CHARGE / severity, force = TRUE)
+
+/obj/item/stock_parts/power_store/ex_act(severity, target)
+ . = ..()
+ if(QDELETED(src))
+ return FALSE
+
+ switch(severity)
+ if(EXPLODE_HEAVY)
+ if(prob(50))
+ corrupt()
+ if(EXPLODE_LIGHT)
+ if(prob(25))
+ corrupt()
+
+ return TRUE
+
+/obj/item/stock_parts/power_store/suicide_act(mob/living/user)
+ user.visible_message(span_suicide("[user] is licking the electrodes of [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
+ do_sparks(2, TRUE, user)
+ var/eating_success = do_after(user, 5 SECONDS, src)
+ if(QDELETED(user))
+ return SHAME
+ if(!eating_success || QDELETED(src) || charge == 0)
+ user.visible_message(span_suicide("[user] chickens out!"))
+ return SHAME
+ playsound(user, 'sound/effects/sparks1.ogg', charge / maxcharge)
+ var/damage = charge / (1 KILO JOULES)
+ user.electrocute_act(damage, src, 1, SHOCK_IGNORE_IMMUNITY|SHOCK_DELAY_STUN|SHOCK_NOGLOVES)
+ charge = 0
+ update_appearance()
+ if(user.stat != DEAD)
+ to_chat(user, span_suicide("There's not enough charge in [src] to kill you!"))
+ return SHAME
+ addtimer(CALLBACK(src, PROC_REF(gib_user), user, charge), 3 SECONDS)
+ return MANUAL_SUICIDE
+
+/obj/item/stock_parts/power_store/proc/gib_user(mob/living/user, discharged_energy)
+ if(QDELETED(user))
+ return
+ if(discharged_energy < STANDARD_BATTERY_CHARGE)
+ return
+ user.dropItemToGround(src)
+ user.dust(just_ash = TRUE)
+ playsound(src, 'sound/magic/lightningshock.ogg', 50, TRUE, 10)
+ tesla_zap(source = src, zap_range = 10, power = discharged_energy)
+
+/obj/item/stock_parts/power_store/attack_self(mob/user)
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ var/obj/item/organ/internal/stomach/maybe_stomach = H.get_organ_slot(ORGAN_SLOT_STOMACH)
+
+ if(istype(maybe_stomach, /obj/item/organ/internal/stomach/ethereal))
+
+ var/charge_limit = ETHEREAL_CHARGE_DANGEROUS - CELL_POWER_GAIN
+ var/obj/item/organ/internal/stomach/ethereal/stomach = maybe_stomach
+ var/obj/item/stock_parts/power_store/stomach_cell = stomach.cell
+ if((stomach.drain_time > world.time) || !stomach)
+ return
+ if(charge < CELL_POWER_DRAIN)
+ to_chat(H, span_warning("[src] doesn't have enough power!"))
+ return
+ if(stomach_cell.charge() > charge_limit)
+ to_chat(H, span_warning("Your charge is full!"))
+ return
+ to_chat(H, span_notice("You begin clumsily channeling power from [src] into your body."))
+ stomach.drain_time = world.time + CELL_DRAIN_TIME
+ while(do_after(user, CELL_DRAIN_TIME, target = src))
+ if((charge < CELL_POWER_DRAIN) || (stomach_cell.charge() > charge_limit))
+ return
+ if(istype(stomach))
+ to_chat(H, span_notice("You receive some charge from [src], wasting some in the process."))
+ stomach.adjust_charge(CELL_POWER_GAIN)
+ charge -= CELL_POWER_DRAIN //you waste way more than you receive, so that ethereals cant just steal one cell and forget about hunger
+ else
+ to_chat(H, span_warning("You can't receive charge from [src]!"))
+ return
+
+
+/obj/item/stock_parts/power_store/blob_act(obj/structure/blob/B)
+ SSexplosions.high_mov_atom += src
+
+/obj/item/stock_parts/power_store/proc/get_electrocute_damage()
+ return ELECTROCUTE_DAMAGE(charge / max(0.001 * STANDARD_CELL_CHARGE, 1)) // Wouldn't want it to consider more energy than whatever is actually in the cell if for some strange reason someone set the STANDARD_CELL_CHARGE to below 1kJ.
+
+/obj/item/stock_parts/power_store/get_part_rating()
+ return maxcharge * 10 + charge
+
+#undef CELL_DRAIN_TIME
+#undef CELL_POWER_GAIN
+#undef CELL_POWER_DRAIN
diff --git a/code/modules/power/singularity/boh_tear.dm b/code/modules/power/singularity/reality_tear.dm
similarity index 59%
rename from code/modules/power/singularity/boh_tear.dm
rename to code/modules/power/singularity/reality_tear.dm
index a0089a7c94b35..e43301541a08f 100644
--- a/code/modules/power/singularity/boh_tear.dm
+++ b/code/modules/power/singularity/reality_tear.dm
@@ -1,4 +1,7 @@
-/obj/boh_tear
+/// Tear in the Fabric of Reality ///
+// Typically spawned by placing two bags of holding into one another, collapsing into a wandering singularity after a brief period as a stationary singularity.
+
+/obj/reality_tear
name = "tear in the fabric of reality"
desc = "As you gaze into the abyss, the only thing you can think is... \"Should I really be this close to it?\""
anchored = TRUE
@@ -15,30 +18,36 @@
pixel_y = -32
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
flags_1 = SUPERMATTER_IGNORES_1
+ /// Range that our singularity component consumes objects
+ var/singularity_consume_range = 1
+ /// Ranges that the singularity pulls objects
+ var/singularity_grav_pull = 21
+ /// Time before we begin our bagulo spawn
+ var/collapse_spawn_time = 9 SECONDS
-/obj/boh_tear/proc/start_disaster()
+/obj/reality_tear/proc/start_disaster()
apply_wibbly_filters(src)
playsound(loc, 'sound/effects/clockcult_gateway_disrupted.ogg', vary = 200, extrarange = 3, falloff_exponent = 1, frequency = 0.33, pressure_affected = FALSE, ignore_walls = TRUE, falloff_distance = 7)
AddComponent(
/datum/component/singularity, \
- consume_range = 1, \
- grav_pull = 21, \
+ consume_range = singularity_consume_range, \
+ grav_pull = singularity_grav_pull, \
roaming = FALSE, \
singularity_size = STAGE_SIX, \
)
- addtimer(CALLBACK(src, PROC_REF(bagulo_time)), 9 SECONDS, TIMER_DELETE_ME)
+ addtimer(CALLBACK(src, PROC_REF(reality_collapse)), collapse_spawn_time, TIMER_DELETE_ME)
animate(src, time = 7.5 SECONDS, transform = transform.Scale(2), flags = ANIMATION_PARALLEL)
animate(time = 2 SECONDS, transform = transform.Scale(0.25), easing = ELASTIC_EASING)
animate(time = 0.5 SECONDS, alpha = 0)
-/obj/boh_tear/proc/bagulo_time()
+/obj/reality_tear/proc/reality_collapse()
playsound(loc, 'sound/effects/supermatter.ogg', 200, vary = TRUE, extrarange = 3, falloff_exponent = 1, frequency = 0.5, pressure_affected = FALSE, ignore_walls = TRUE, falloff_distance = 7)
var/obj/singularity/bagulo = new(loc)
bagulo.expand(STAGE_TWO)
bagulo.energy = 400
qdel(src)
-/obj/boh_tear/attack_tk(mob/user)
+/obj/reality_tear/attack_tk(mob/user)
if(!isliving(user))
return
var/mob/living/jedi = user
@@ -47,3 +56,15 @@
jedi.spawn_dust()
addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, attack_hand), jedi), 0.5 SECONDS)
return COMPONENT_CANCEL_ATTACK_CHAIN
+
+//The temporary tears in reality. Collapses into nothing, and has a significantly lower gravity pull range, but consumes more widely.
+
+/obj/reality_tear/temporary
+ name = "puncture in the fabric of reality"
+ desc = "Count your lucky stars that this wasn't anywhere near you."
+ singularity_consume_range = 2
+ singularity_grav_pull = 3
+ collapse_spawn_time = 2 SECONDS
+
+/obj/reality_tear/temporary/reality_collapse()
+ qdel(src)
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 0cad7bdcef557..935601b834bc3 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -23,7 +23,7 @@
can_change_cable_layer = TRUE
/// The charge capacity.
- var/capacity = 50 * STANDARD_CELL_CHARGE // The board defaults with 5 high capacity power cells.
+ var/capacity = 50 * STANDARD_BATTERY_CHARGE // The board defaults with 5 high capacity batteries.
/// The current charge.
var/charge = 0
@@ -71,7 +71,7 @@
power_coefficient += capacitor.tier
input_level_max = initial(input_level_max) * power_coefficient
output_level_max = initial(output_level_max) * power_coefficient
- for(var/obj/item/stock_parts/cell/power_cell in component_parts)
+ for(var/obj/item/stock_parts/power_store/power_cell in component_parts)
max_charge += power_cell.maxcharge
new_charge += power_cell.charge
capacity = max_charge
@@ -203,7 +203,7 @@
return ..()
/obj/machinery/power/smes/on_deconstruction(disassembled)
- for(var/obj/item/stock_parts/cell/cell in component_parts)
+ for(var/obj/item/stock_parts/power_store/cell in component_parts)
cell.charge = (charge / capacity) * cell.maxcharge
/obj/machinery/power/smes/Destroy()
@@ -431,7 +431,7 @@
outputting = output_attempt
output_level = rand(0, output_level_max)
input_level = rand(0, input_level_max)
- charge -= STANDARD_CELL_CHARGE/severity
+ charge -= STANDARD_BATTERY_CHARGE/severity
if (charge < 0)
charge = 0
update_appearance()
@@ -442,19 +442,19 @@
name = "super capacity power storage unit"
desc = "A super-capacity superconducting magnetic energy storage (SMES) unit. Relatively rare, and typically installed in long-range outposts where minimal maintenance is expected."
circuit = /obj/item/circuitboard/machine/smes/super
- capacity = 100 * STANDARD_CELL_CHARGE
+ capacity = 100 * STANDARD_BATTERY_CHARGE
/obj/machinery/power/smes/super/full
- charge = 100 * STANDARD_CELL_CHARGE
+ charge = 100 * STANDARD_BATTERY_CHARGE
/obj/machinery/power/smes/full
- charge = 50 * STANDARD_CELL_CHARGE
+ charge = 50 * STANDARD_BATTERY_CHARGE
/obj/machinery/power/smes/ship
- charge = 20 * STANDARD_CELL_CHARGE
+ charge = 20 * STANDARD_BATTERY_CHARGE
/obj/machinery/power/smes/engineering
- charge = 50 * STANDARD_CELL_CHARGE // Engineering starts with some charge for singulo //sorry little one, singulo as engine is gone
+ charge = 50 * STANDARD_BATTERY_CHARGE // Engineering starts with some charge for singulo //sorry little one, singulo as engine is gone
output_level = 90 KILO WATTS
/obj/machinery/power/smes/magical
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 1c50f8312d4ae..76951670c9831 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -153,7 +153,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
///Stores the time of when the last zap occurred
var/last_power_zap = 0
- var/last_high_energy_zap = 0
+ ///Stores the tick of the machines subsystem of when the last zap occurred. Gives a passage of time in the perspective of SSmachines.
+ var/last_power_zap_perspective_machines = 0
+ ///Same as [last_power_zap_perspective_machines], but based around the high energy zaps found in handle_high_power().
+ var/last_high_energy_zap_perspective_machines = 0
///Do we show this crystal in the CIMS modular program
var/include_in_cims = TRUE
@@ -294,13 +297,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
// PART 3: POWER PROCESSING
internal_energy_factors = calculate_internal_energy()
zap_factors = calculate_zap_transmission_rate()
- if(internal_energy && (last_power_zap + (4 - internal_energy * 0.001) SECONDS) < world.time)
+ var/delta_time = (SSmachines.times_fired - last_power_zap_perspective_machines) * SSmachines.wait / (1 SECONDS)
+ if(delta_time && internal_energy && (last_power_zap + (4 - internal_energy * 0.001) SECONDS) < world.time)
playsound(src, 'sound/weapons/emitter2.ogg', 70, TRUE)
hue_angle_shift = clamp(903 * log(10, (internal_energy + 8000)) - 3590, -50, 240)
var/zap_color = color_matrix_rotate_hue(hue_angle_shift)
- //Scale the strength of the zap with the world's time elapsed between zaps in seconds.
- //Capped at 16 seconds to prevent a crazy burst of energy if atmos was halted for a long time.
- var/delta_time = min((world.time - last_power_zap) * 0.1, 16)
supermatter_zap(
zapstart = src,
range = 3,
@@ -311,6 +312,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
color = zap_color,
)
last_power_zap = world.time
+ last_power_zap_perspective_machines = SSmachines.times_fired
// PART 4: DAMAGE PROCESSING
temp_limit_factors = calculate_temp_limit()
@@ -714,6 +716,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
activation_logged = TRUE // so we dont spam the log.
else if(!internal_energy)
last_power_zap = world.time
+ last_power_zap_perspective_machines = SSmachines.times_fired
return additive_power
/** Log when the supermatter is activated for the first time.
diff --git a/code/modules/power/supermatter/supermatter_extra_effects.dm b/code/modules/power/supermatter/supermatter_extra_effects.dm
index efd84c677fafa..35c96d298dd34 100644
--- a/code/modules/power/supermatter/supermatter_extra_effects.dm
+++ b/code/modules/power/supermatter/supermatter_extra_effects.dm
@@ -91,7 +91,7 @@
/obj/machinery/power/supermatter_crystal/proc/handle_high_power()
if(internal_energy <= POWER_PENALTY_THRESHOLD && damage <= danger_point) //If the power is above 5000 or if the damage is above 550
- last_high_energy_zap = world.time //Prevent oddly high initial zap due to high energy zaps not getting triggered via too low energy.
+ last_high_energy_zap_perspective_machines = SSmachines.times_fired //Prevent oddly high initial zap due to high energy zaps not getting triggered via too low energy.
return
var/range = 4
zap_cutoff = 1500
@@ -129,10 +129,10 @@
if(zap_count >= 1)
playsound(loc, 'sound/weapons/emitter2.ogg', 100, TRUE, extrarange = 10)
- var/delta_time = min((world.time - last_high_energy_zap) * 0.1, 16)
+ var/delta_time = (SSmachines.times_fired - last_high_energy_zap_perspective_machines) * SSmachines.wait / (1 SECONDS)
for(var/i in 1 to zap_count)
supermatter_zap(src, range, clamp(internal_energy * 3200, 6.4e6, 3.2e7) * delta_time, flags, zap_cutoff = src.zap_cutoff * delta_time, power_level = internal_energy, zap_icon = src.zap_icon)
- last_high_energy_zap = world.time
+ last_high_energy_zap_perspective_machines = SSmachines.times_fired
if(prob(5))
supermatter_anomaly_gen(src, FLUX_ANOMALY, rand(5, 10))
if(prob(5))
diff --git a/code/modules/projectiles/ammunition/ballistic/foam.dm b/code/modules/projectiles/ammunition/ballistic/foam.dm
index 2895d74555be5..7ffa317897a83 100644
--- a/code/modules/projectiles/ammunition/ballistic/foam.dm
+++ b/code/modules/projectiles/ammunition/ballistic/foam.dm
@@ -10,6 +10,8 @@
harmful = FALSE
var/modified = FALSE
var/static/list/insertable_items_hint = list(/obj/item/pen)
+ ///For colored magazine overlays.
+ var/tip_color = "blue"
/obj/item/ammo_casing/foam_dart/Initialize(mapload)
. = ..()
@@ -56,4 +58,5 @@
projectile_type = /obj/projectile/bullet/foam_dart/riot
icon_state = "foamdart_riot"
base_icon_state = "foamdart_riot"
+ tip_color = "red"
custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT* 1.125)
diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm
index 62f9185d2145c..207190d08f924 100644
--- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm
+++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm
@@ -94,7 +94,7 @@
stack_trace("Tried loading unsupported ammocasing type [load_type] into ammo box [type].")
return
- for(var/i in max(1, stored_ammo.len) to max_ammo)
+ for(var/i in max(1, stored_ammo.len + 1) to max_ammo)
stored_ammo += new round_check(src)
update_appearance()
diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm
index 7e9fc44f58578..3ebb459ed9319 100644
--- a/code/modules/projectiles/boxes_magazines/external/smg.dm
+++ b/code/modules/projectiles/boxes_magazines/external/smg.dm
@@ -76,7 +76,7 @@
/obj/item/ammo_box/magazine/smgm45
name = "SMG magazine (.45)"
- icon_state = "c20r45-24"
+ icon_state = "c20r45"
base_icon_state = "c20r45"
ammo_type = /obj/item/ammo_casing/c45
caliber = CALIBER_45
diff --git a/code/modules/projectiles/boxes_magazines/external/toy.dm b/code/modules/projectiles/boxes_magazines/external/toy.dm
index 3a841c605a18c..a153c25107aa8 100644
--- a/code/modules/projectiles/boxes_magazines/external/toy.dm
+++ b/code/modules/projectiles/boxes_magazines/external/toy.dm
@@ -29,17 +29,30 @@
/obj/item/ammo_box/magazine/toy/smgm45
name = "donksoft SMG magazine"
icon_state = "c20r45-toy"
- base_icon_state = "c20r45"
+ base_icon_state = "c20r45-toy"
caliber = CALIBER_FOAM
ammo_type = /obj/item/ammo_casing/foam_dart
max_ammo = 20
/obj/item/ammo_box/magazine/toy/smgm45/update_icon_state()
. = ..()
- icon_state = "[base_icon_state]-[round(ammo_count(), 2)]"
+ icon_state = "[base_icon_state]-base"
+
+/obj/item/ammo_box/magazine/toy/smgm45/update_overlays()
+ . = ..()
+ if(!LAZYLEN(stored_ammo))
+ return
+ for(var/i in 1 to stored_ammo.len)
+ var/round_number = round(i, 2) //i meant the number of the round in the magazine, but i guess it's a round number too lol.
+ if(round_number == i) //only count odd numbers.
+ continue
+ var/obj/item/ammo_casing/foam_dart/boolet = stored_ammo[i]
+ . += "c20r45-foam-[boolet.tip_color]-[round_number]"
+
/obj/item/ammo_box/magazine/toy/smgm45/riot
icon_state = "c20r45-riot"
+ base_icon_state = "c20r45-riot"
ammo_type = /obj/item/ammo_casing/foam_dart/riot
/obj/item/ammo_box/magazine/toy/m762
diff --git a/code/modules/projectiles/boxes_magazines/internal/revolver.dm b/code/modules/projectiles/boxes_magazines/internal/revolver.dm
index 7d881a11c4dca..e74a192d6900f 100644
--- a/code/modules/projectiles/boxes_magazines/internal/revolver.dm
+++ b/code/modules/projectiles/boxes_magazines/internal/revolver.dm
@@ -16,7 +16,10 @@
caliber = CALIBER_357
max_ammo = 6
multiload = FALSE
+ start_empty = TRUE
-/obj/item/ammo_box/magazine/internal/rus357/Initialize(mapload)
- stored_ammo += new ammo_type(src)
+/obj/item/ammo_box/magazine/internal/cylinder/rus357/Initialize(mapload)
. = ..()
+ for (var/i in 1 to max_ammo - 1)
+ stored_ammo += new /obj/item/ammo_casing/a357/spent(src)
+ stored_ammo += new /obj/item/ammo_casing/a357(src)
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index 4c00e83b0bbc6..3571e0858c8af 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -5,8 +5,8 @@
icon = 'icons/obj/weapons/guns/energy.dmi'
/// What type of power cell this uses
- var/obj/item/stock_parts/cell/cell
- var/cell_type = /obj/item/stock_parts/cell
+ var/obj/item/stock_parts/power_store/cell
+ var/cell_type = /obj/item/stock_parts/power_store/cell
///if the weapon has custom icons for individual ammo types it can switch between. ie disabler beams, taser, laser/lethals, ect.
var/modifystate = FALSE
var/list/ammo_type = list(/obj/item/ammo_casing/energy)
@@ -26,14 +26,23 @@
var/single_shot_type_overlay = TRUE
///Should we give an overlay to empty guns?
var/display_empty = TRUE
- var/selfcharge = 0
- var/charge_timer = 0
- var/charge_delay = 8
+
///whether the gun's cell drains the cyborg user's cell to recharge
var/use_cyborg_cell = FALSE
///set to true so the gun is given an empty cell
var/dead_cell = FALSE
+ // Self charging vars
+
+ /// Whether or not our gun charges its own cell on a timer.
+ var/selfcharge = 0
+ /// The amount of time between instances of cell self recharge
+ var/charge_timer = 0
+ /// The amount of seconds_per_tick during process() before the gun charges itself
+ var/charge_delay = 8
+ /// The amount restored by the gun to the cell per self charge tick
+ var/self_charge_amount = STANDARD_ENERGY_GUN_SELF_CHARGE_RATE
+
/obj/item/gun/energy/fire_sounds()
// What frequency the energy gun's sound will make
var/pitch_to_use = 1
@@ -153,7 +162,7 @@
if(charge_timer < charge_delay)
return
charge_timer = 0
- cell.give(STANDARD_ENERGY_GUN_SELF_CHARGE_RATE * seconds_per_tick)
+ cell.give(self_charge_amount * seconds_per_tick)
if(!chambered) //if empty chamber we try to charge a new shot
recharge_newshot(TRUE)
update_appearance()
diff --git a/code/modules/projectiles/guns/energy/beam_rifle.dm b/code/modules/projectiles/guns/energy/beam_rifle.dm
index e29e1ef4878be..0bda1930c6260 100644
--- a/code/modules/projectiles/guns/energy/beam_rifle.dm
+++ b/code/modules/projectiles/guns/energy/beam_rifle.dm
@@ -1,588 +1,64 @@
-
-#define ZOOM_LOCK_AUTOZOOM_FREEMOVE 0
-#define ZOOM_LOCK_AUTOZOOM_ANGLELOCK 1
-#define ZOOM_LOCK_CENTER_VIEW 2
-#define ZOOM_LOCK_OFF 3
-
-#define AUTOZOOM_PIXEL_STEP_FACTOR 48
-
-#define AIMING_BEAM_ANGLE_CHANGE_THRESHOLD 0.1
-
-/obj/item/gun/energy/beam_rifle
- name = "particle acceleration rifle"
- desc = "An energy-based anti material marksman rifle that uses highly charged particle beams moving at extreme velocities to decimate whatever is unfortunate enough to be targeted by one."
- desc_controls = "Hold down left click while scoped to aim, when weapon is fully aimed (Tracer goes from red to green as it charges), release to fire. Moving while aiming or changing where you're pointing at while aiming will delay the aiming process depending on how much you changed."
+/obj/item/gun/energy/event_horizon
+ name = "\improper Event Horizon anti-existential beam rifle"
+ desc = "The deranged minds of Nanotrasen, in their great hubris and spite, have birthed forth the definitive conclusion to the arms race. Weaponized black holes, and a platform to deliver them.\
+ To look upon this existential maleficence is to know that the pursuit of profit has consigned all life to this pathetic conclusion; the destruction of reality itself."
icon = 'icons/obj/weapons/guns/energy.dmi'
icon_state = "esniper"
inhand_icon_state = null
worn_icon_state = null
fire_sound = 'sound/weapons/beam_sniper.ogg'
slot_flags = ITEM_SLOT_BACK
- force = 15
+ force = 20 //This is maybe the sanest part of this weapon.
custom_materials = null
- recoil = 4
+ recoil = 2
ammo_x_offset = 3
ammo_y_offset = 3
modifystate = FALSE
charge_sections = 1
weapon_weight = WEAPON_HEAVY
w_class = WEIGHT_CLASS_BULKY
- ammo_type = list(/obj/item/ammo_casing/energy/beam_rifle/hitscan)
- actions_types = list(/datum/action/item_action/zoom_lock_action)
- cell_type = /obj/item/stock_parts/cell/beam_rifle
- var/aiming = FALSE
- var/aiming_time = 12
- var/aiming_time_fire_threshold = 5
- var/aiming_time_left = 12
- var/aiming_time_increase_user_movement = 3
- var/scoped_slow = 1
- var/aiming_time_increase_angle_multiplier = 0.3
- var/last_process = 0
-
- var/lastangle = 0
- var/aiming_lastangle = 0
- var/mob/current_user = null
- var/list/obj/effect/projectile/tracer/current_tracers
-
- var/structure_piercing = 2 //Amount * 2. For some reason structures aren't respecting this unless you have it doubled. Probably with the objects in question's Bump() code instead of this but I'll deal with this later.
- var/structure_bleed_coeff = 0.7
- var/wall_pierce_amount = 0
- var/wall_devastate = 0
- var/aoe_structure_range = 1
- var/aoe_structure_damage = 50
- var/aoe_fire_range = 2
- var/aoe_fire_chance = 40
- var/aoe_mob_range = 1
- var/aoe_mob_damage = 30
- var/impact_structure_damage = 60
- var/projectile_damage = 30
- var/projectile_stun = 0
- var/projectile_setting_pierce = TRUE
- var/delay = 25
- var/lastfire = 0
-
- //ZOOMING
- var/zoom_current_view_increase = 0
- ///The radius you want to zoom by
- var/zoom_target_view_increase = 9.5
- var/zooming = FALSE
- var/zoom_lock = ZOOM_LOCK_OFF
- var/zooming_angle
- var/current_zoom_x = 0
- var/current_zoom_y = 0
-
- var/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/trace = null
-
-/obj/item/gun/energy/beam_rifle/apply_fantasy_bonuses(bonus)
- . = ..()
- delay = modify_fantasy_variable("delay", delay, -bonus * 2)
- aiming_time = modify_fantasy_variable("aiming_time", aiming_time, -bonus * 2)
- recoil = modify_fantasy_variable("recoil", recoil, round(-bonus / 2))
-
-/obj/item/gun/energy/beam_rifle/remove_fantasy_bonuses(bonus)
- delay = reset_fantasy_variable("delay", delay)
- aiming_time = reset_fantasy_variable("aiming_time", aiming_time)
- recoil = reset_fantasy_variable("recoil", recoil)
- return ..()
-
-/obj/item/gun/energy/beam_rifle/debug
- delay = 0
- cell_type = /obj/item/stock_parts/cell/infinite
- aiming_time = 0
- recoil = 0
- pin = /obj/item/firing_pin
-
-/obj/item/gun/energy/beam_rifle/equipped(mob/user)
- set_user(user)
- return ..()
-
-/obj/item/gun/energy/beam_rifle/pickup(mob/user)
- set_user(user)
- return ..()
-
-/obj/item/gun/energy/beam_rifle/dropped(mob/user)
- set_user()
- return ..()
-
-/obj/item/gun/energy/beam_rifle/ui_action_click(mob/user, actiontype)
- if(istype(actiontype, /datum/action/item_action/zoom_lock_action))
- zoom_lock++
- if(zoom_lock > 3)
- zoom_lock = 0
- switch(zoom_lock)
- if(ZOOM_LOCK_AUTOZOOM_FREEMOVE)
- to_chat(user, span_boldnotice("You switch [src]'s zooming processor to free directional."))
- if(ZOOM_LOCK_AUTOZOOM_ANGLELOCK)
- to_chat(user, span_boldnotice("You switch [src]'s zooming processor to locked directional."))
- if(ZOOM_LOCK_CENTER_VIEW)
- to_chat(user, span_boldnotice("You switch [src]'s zooming processor to center mode."))
- if(ZOOM_LOCK_OFF)
- to_chat(user, span_boldnotice("You disable [src]'s zooming system."))
- reset_zooming()
- return
-
- return ..()
+ ammo_type = list(/obj/item/ammo_casing/energy/event_horizon)
+ selfcharge = TRUE
+ self_charge_amount = STANDARD_ENERGY_GUN_SELF_CHARGE_RATE * 10
-/obj/item/gun/energy/beam_rifle/proc/set_autozoom_pixel_offsets_immediate(current_angle)
- if(zoom_lock == ZOOM_LOCK_CENTER_VIEW || zoom_lock == ZOOM_LOCK_OFF)
- return
- current_zoom_x = sin(current_angle) + sin(current_angle) * AUTOZOOM_PIXEL_STEP_FACTOR * zoom_current_view_increase
- current_zoom_y = cos(current_angle) + cos(current_angle) * AUTOZOOM_PIXEL_STEP_FACTOR * zoom_current_view_increase
-
-/obj/item/gun/energy/beam_rifle/proc/handle_zooming()
- if(!zooming || !check_user())
- return
- current_user.client.view_size.setTo(zoom_target_view_increase)
- zoom_current_view_increase = zoom_target_view_increase
- set_autozoom_pixel_offsets_immediate(zooming_angle)
-
-/obj/item/gun/energy/beam_rifle/proc/start_zooming()
- if(zoom_lock == ZOOM_LOCK_OFF)
- return
- zooming = TRUE
-
-/obj/item/gun/energy/beam_rifle/proc/stop_zooming(mob/user)
- if(zooming)
- zooming = FALSE
- reset_zooming(user)
-
-/obj/item/gun/energy/beam_rifle/proc/reset_zooming(mob/user)
- if(!user)
- user = current_user
- if(!user || !user.client)
- return FALSE
- user.client.view_size.zoomIn()
- zoom_current_view_increase = 0
- zooming_angle = 0
- current_zoom_x = 0
- current_zoom_y = 0
-
-/obj/item/gun/energy/beam_rifle/attack_self(mob/user)
- projectile_setting_pierce = !projectile_setting_pierce
- balloon_alert(user, "switched to [projectile_setting_pierce ? "pierce":"impact"] mode")
- aiming_beam()
-
-/obj/item/gun/energy/beam_rifle/proc/update_slowdown()
- if(aiming)
- slowdown = scoped_slow
- else
- slowdown = initial(slowdown)
-
-/obj/item/gun/energy/beam_rifle/Initialize(mapload)
+/obj/item/gun/energy/event_horizon/Initialize(mapload)
. = ..()
- fire_delay = delay
- current_tracers = list()
- START_PROCESSING(SSfastprocess, src)
-
-/obj/item/gun/energy/beam_rifle/Destroy()
- STOP_PROCESSING(SSfastprocess, src)
- set_user(null)
- QDEL_LIST(current_tracers)
- return ..()
-
-/obj/item/gun/energy/beam_rifle/emp_act(severity)
- . = ..()
- if(. & EMP_PROTECT_SELF)
- return
- chambered = null
- recharge_newshot()
-
-/obj/item/gun/energy/beam_rifle/proc/aiming_beam(force_update = FALSE)
- var/diff = abs(aiming_lastangle - lastangle)
- if(!check_user())
- return
- if(diff < AIMING_BEAM_ANGLE_CHANGE_THRESHOLD && !force_update)
- return
- aiming_lastangle = lastangle
- // ONLY ONE at once (since fire can sleep)
- if(trace)
- QDEL_NULL(trace)
- trace = new
- trace.gun = src
- trace.wall_pierce_amount = wall_pierce_amount
- trace.structure_pierce_amount = structure_piercing
- trace.do_pierce = projectile_setting_pierce
- if(aiming_time)
- var/percent = ((100/aiming_time)*aiming_time_left)
- trace.color = rgb(255 * percent,255 * ((100 - percent) / 100),0)
- else
- trace.color = rgb(0, 255, 0)
- var/turf/curloc = get_turf(src)
-
- var/atom/target_atom = current_user.client.mouse_object_ref?.resolve()
- var/turf/targloc = get_turf(target_atom)
- if(!istype(targloc))
- if(!istype(curloc))
- return
- targloc = get_turf_in_angle(lastangle, curloc, 10)
- var/mouse_modifiers = params2list(current_user.client.mouseParams)
- trace.preparePixelProjectile(targloc, current_user, mouse_modifiers, 0)
- trace.fire(lastangle)
- trace = null
+ AddComponent(/datum/component/scope, range_modifier = 4)
-/obj/item/gun/energy/beam_rifle/process()
- if(!aiming)
- last_process = world.time
- return
- check_user()
- handle_zooming()
- aiming_time_left = max(0, aiming_time_left - (world.time - last_process))
- aiming_beam(TRUE)
- last_process = world.time
-
-/obj/item/gun/energy/beam_rifle/proc/check_user(automatic_cleanup = TRUE)
- if(!istype(current_user) || !isturf(current_user.loc) || !(src in current_user.held_items) || current_user.incapacitated()) //Doesn't work if you're not holding it!
- if(automatic_cleanup)
- stop_aiming()
- return FALSE
- return TRUE
-
-/obj/item/gun/energy/beam_rifle/proc/process_aim(params)
- var/angle = mouse_angle_from_client(current_user?.client, params)
- current_user.setDir(angle2dir_cardinal(angle))
- var/difference = abs(closer_angle_difference(lastangle, angle))
- delay_penalty(difference * aiming_time_increase_angle_multiplier)
- lastangle = angle
-
-/obj/item/gun/energy/beam_rifle/proc/on_mob_move()
- SIGNAL_HANDLER
- check_user()
- if(aiming)
- delay_penalty(aiming_time_increase_user_movement)
- process_aim(current_user?.client?.mouseParams)
- INVOKE_ASYNC(src, PROC_REF(aiming_beam), TRUE)
-
-/obj/item/gun/energy/beam_rifle/proc/start_aiming(params)
- aiming_time_left = aiming_time
- aiming = TRUE
- process_aim(params)
- aiming_beam(TRUE)
- zooming_angle = lastangle
- start_zooming()
-
-/obj/item/gun/energy/beam_rifle/proc/stop_aiming(mob/user)
- set waitfor = FALSE
- aiming_time_left = aiming_time
- aiming = FALSE
- QDEL_LIST(current_tracers)
- QDEL_NULL(trace)
- stop_zooming(user)
-
-/obj/item/gun/energy/beam_rifle/proc/set_user(mob/user)
- if(user == current_user)
- return
- stop_aiming(current_user)
- if(istype(current_user))
- unregister_client_signals(current_user)
- UnregisterSignal(current_user, list(COMSIG_MOVABLE_MOVED, COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT))
- current_user = null
- if(!istype(user))
- return
- current_user = user
- RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_mob_move))
- RegisterSignal(user, COMSIG_MOB_LOGIN, PROC_REF(register_client_signals))
- RegisterSignal(user, COMSIG_MOB_LOGOUT, PROC_REF(unregister_client_signals))
- if(user.client)
- register_client_signals(user)
+/obj/item/gun/energy/event_horizon/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread)
-/obj/item/gun/energy/beam_rifle/proc/register_client_signals(mob/source)
- SIGNAL_HANDLER
- RegisterSignal(source.client, COMSIG_CLIENT_MOUSEDOWN, PROC_REF(on_mouse_down))
-
-/obj/item/gun/energy/beam_rifle/proc/unregister_client_signals(mob/source)
- SIGNAL_HANDLER
- stop_aiming()
- if(QDELETED(source.client))
- return
- UnregisterSignal(source.client, list(COMSIG_CLIENT_MOUSEDOWN, COMSIG_CLIENT_MOUSEUP, COMSIG_CLIENT_MOUSEDRAG))
-
-///change the aiming beam angle to that of the mouse cursor.
-/obj/item/gun/energy/beam_rifle/proc/on_mouse_drag(client/source, src_object, over_object, src_location, over_location, src_control, over_control, params)
- SIGNAL_HANDLER
- if(aiming)
- process_aim(params)
- INVOKE_ASYNC(src, PROC_REF(aiming_beam))
- if(zoom_lock == ZOOM_LOCK_AUTOZOOM_FREEMOVE)
- zooming_angle = lastangle
- set_autozoom_pixel_offsets_immediate(zooming_angle)
-
-///Start aiming and charging the beam
-/obj/item/gun/energy/beam_rifle/proc/on_mouse_down(client/source, atom/movable/object, location, control, params)
- SIGNAL_HANDLER
- if(source.mob.get_active_held_item() != src)
- return
- if(!object.IsAutoclickable() || (object in source.mob.contents) || (object == source.mob))
+ if(!HAS_TRAIT(user, TRAIT_USER_SCOPED))
+ balloon_alert(user, "must be scoped!")
return
- INVOKE_ASYNC(src, PROC_REF(start_aiming), params)
- RegisterSignal(source, COMSIG_CLIENT_MOUSEDRAG, PROC_REF(on_mouse_drag))
- RegisterSignal(source, COMSIG_CLIENT_MOUSEUP, PROC_REF(on_mouse_up))
-
-///Stop aiming and fire the beam if charged enough
-/obj/item/gun/energy/beam_rifle/proc/on_mouse_up(client/source, atom/movable/object, location, control, params)
- SIGNAL_HANDLER
- if(!object.IsAutoclickable())
- return
- process_aim(params)
- UnregisterSignal(source, list(COMSIG_CLIENT_MOUSEDRAG, COMSIG_CLIENT_MOUSEUP))
- if(aiming_time_left <= aiming_time_fire_threshold && check_user())
- sync_ammo()
- var/atom/target = source.mouse_object_ref?.resolve()
- if(target)
- INVOKE_ASYNC(src, PROC_REF(try_fire_gun), target, source.mob, source.mouseParams, TRUE)
- stop_aiming()
- QDEL_LIST(current_tracers)
-
-/obj/item/gun/energy/beam_rifle/try_fire_gun(atom/target, mob/living/user, params, passthrough = FALSE)
- if(user.Adjacent(target)) //It's adjacent, is the user, or is on the user's person
- if(target in user.contents) //can't shoot stuff inside us.
- return FALSE
- if(!ismob(target) || user.combat_mode) //melee attack
- return FALSE
- if(target == user && user.zone_selected != BODY_ZONE_PRECISE_MOUTH) //so we can't shoot ourselves (unless mouth selected)
- return FALSE
- if(!passthrough && (aiming_time > aiming_time_fire_threshold))
- return FALSE
- if(lastfire > world.time + delay)
- return FALSE
- if(!..())
- return FALSE
- lastfire = world.time
- stop_aiming()
- return TRUE
-
-/obj/item/gun/energy/beam_rifle/proc/sync_ammo()
- for(var/obj/item/ammo_casing/energy/beam_rifle/AC in contents)
- AC.sync_stats()
-/obj/item/gun/energy/beam_rifle/proc/delay_penalty(amount)
- aiming_time_left = clamp(aiming_time_left + amount, 0, aiming_time)
-
-/obj/item/ammo_casing/energy/beam_rifle
- name = "particle acceleration lens"
- desc = "Don't look into barrel!"
- var/wall_pierce_amount = 0
- var/wall_devastate = 0
- var/aoe_structure_range = 1
- var/aoe_structure_damage = 30
- var/aoe_fire_range = 2
- var/aoe_fire_chance = 66
- var/aoe_mob_range = 1
- var/aoe_mob_damage = 20
- var/impact_structure_damage = 50
- var/projectile_damage = 40
- var/projectile_stun = 0
- var/structure_piercing = 2
- var/structure_bleed_coeff = 0.7
- var/do_pierce = TRUE
- var/obj/item/gun/energy/beam_rifle/host
-
-/obj/item/ammo_casing/energy/beam_rifle/proc/sync_stats()
- var/obj/item/gun/energy/beam_rifle/BR = loc
- if(!istype(BR))
- stack_trace("Beam rifle syncing error")
- host = BR
- do_pierce = BR.projectile_setting_pierce
- wall_pierce_amount = BR.wall_pierce_amount
- wall_devastate = BR.wall_devastate
- aoe_structure_range = BR.aoe_structure_range
- aoe_structure_damage = BR.aoe_structure_damage
- aoe_fire_range = BR.aoe_fire_range
- aoe_fire_chance = BR.aoe_fire_chance
- aoe_mob_range = BR.aoe_mob_range
- aoe_mob_damage = BR.aoe_mob_damage
- impact_structure_damage = BR.impact_structure_damage
- projectile_damage = BR.projectile_damage
- projectile_stun = BR.projectile_stun
- delay = BR.delay
- structure_piercing = BR.structure_piercing
- structure_bleed_coeff = BR.structure_bleed_coeff
-
-/obj/item/ammo_casing/energy/beam_rifle/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
. = ..()
- var/obj/projectile/beam/beam_rifle/hitscan/HS_BB = loaded_projectile
- if(!istype(HS_BB))
- return
- HS_BB.impact_direct_damage = projectile_damage
- HS_BB.stun = projectile_stun
- HS_BB.impact_structure_damage = impact_structure_damage
- HS_BB.aoe_mob_damage = aoe_mob_damage
- HS_BB.aoe_mob_range = clamp(aoe_mob_range, 0, 15) //Badmin safety lock
- HS_BB.aoe_fire_chance = aoe_fire_chance
- HS_BB.aoe_fire_range = aoe_fire_range
- HS_BB.aoe_structure_damage = aoe_structure_damage
- HS_BB.aoe_structure_range = clamp(aoe_structure_range, 0, 15) //Badmin safety lock
- HS_BB.wall_devastate = wall_devastate
- HS_BB.wall_pierce_amount = wall_pierce_amount
- HS_BB.structure_pierce_amount = structure_piercing
- HS_BB.structure_bleed_coeff = structure_bleed_coeff
- HS_BB.do_pierce = do_pierce
- HS_BB.gun = host
-
-/obj/item/ammo_casing/energy/beam_rifle/throw_proj(atom/target, turf/targloc, mob/living/user, params, spread, atom/fired_from)
- var/turf/curloc = get_turf(user)
- if(!istype(curloc) || !loaded_projectile)
- return FALSE
- var/obj/item/gun/energy/beam_rifle/gun = loc
- if(!targloc && gun)
- targloc = get_turf_in_angle(gun.lastangle, curloc, 10)
- else if(!targloc)
- return FALSE
- var/firing_dir
- if(loaded_projectile.firer)
- firing_dir = loaded_projectile.firer.dir
- if(!loaded_projectile.suppressed && firing_effect_type)
- new firing_effect_type(get_turf(src), firing_dir)
- var/modifiers = params2list(params)
- loaded_projectile.preparePixelProjectile(target, user, modifiers, spread)
- loaded_projectile.fire(gun? gun.lastangle : null, null)
- loaded_projectile = null
- return TRUE
+ message_admins("[ADMIN_LOOKUPFLW(user)] has fired an anti-existential beam at [ADMIN_VERBOSEJMP(user)].")
-/obj/item/ammo_casing/energy/beam_rifle/hitscan
- projectile_type = /obj/projectile/beam/beam_rifle/hitscan
- select_name = "beam"
- e_cost = LASER_SHOTS(5, 50000) // Beam rifle has a custom cell
+/obj/item/ammo_casing/energy/event_horizon
+ projectile_type = /obj/projectile/beam/event_horizon
+ select_name = "doomsday"
+ e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE)
fire_sound = 'sound/weapons/beam_sniper.ogg'
-/obj/projectile/beam/beam_rifle
- name = "particle beam"
+/obj/projectile/beam/event_horizon
+ name = "anti-existential beam"
icon = null
hitsound = 'sound/effects/explosion3.ogg'
- damage = 0 //Handled manually.
+ damage = 100 // Does it matter?
damage_type = BURN
armor_flag = ENERGY
range = 150
jitter = 20 SECONDS
- var/obj/item/gun/energy/beam_rifle/gun
- var/structure_pierce_amount = 0 //All set to 0 so the gun can manually set them during firing.
- var/structure_bleed_coeff = 0
- var/structure_pierce = 0
- var/do_pierce = TRUE
- var/wall_pierce_amount = 0
- var/wall_pierce = 0
- var/wall_devastate = 0
- var/aoe_structure_range = 0
- var/aoe_structure_damage = 0
- var/aoe_fire_range = 0
- var/aoe_fire_chance = 0
- var/aoe_mob_range = 0
- var/aoe_mob_damage = 0
- var/impact_structure_damage = 0
- var/impact_direct_damage = 0
- var/list/pierced = list()
-
-/obj/projectile/beam/beam_rifle/proc/AOE(turf/epicenter)
- if(!epicenter)
- return
- new /obj/effect/temp_visual/explosion/fast(epicenter)
- for(var/mob/living/L in range(aoe_mob_range, epicenter)) //handle aoe mob damage
- L.adjustFireLoss(aoe_mob_damage)
- to_chat(L, span_userdanger("\The [src] sears you!"))
- for(var/turf/T in RANGE_TURFS(aoe_fire_range, epicenter)) //handle aoe fire
- if(prob(aoe_fire_chance))
- new /obj/effect/hotspot(T)
- for(var/obj/O in range(aoe_structure_range, epicenter))
- if(!isitem(O))
- O.take_damage(aoe_structure_damage * get_damage_coeff(O), BURN, LASER, FALSE)
-
-/obj/projectile/beam/beam_rifle/prehit_pierce(atom/A)
- if(isclosedturf(A) && (wall_pierce < wall_pierce_amount))
- if(prob(wall_devastate))
- if(iswallturf(A))
- var/turf/closed/wall/W = A
- W.dismantle_wall(TRUE, TRUE)
- else
- SSexplosions.medturf += A
- ++wall_pierce
- return PROJECTILE_PIERCE_PHASE // yeah this gun is a snowflakey piece of garbage
- if(isobj(A) && (structure_pierce < structure_pierce_amount))
- ++structure_pierce
- var/obj/O = A
- O.take_damage((impact_structure_damage + aoe_structure_damage) * structure_bleed_coeff * get_damage_coeff(A), BURN, ENERGY, FALSE)
- return PROJECTILE_PIERCE_PHASE // ditto and this could be refactored to on_hit honestly
- return ..()
-
-/obj/projectile/beam/beam_rifle/proc/get_damage_coeff(atom/target)
- if(istype(target, /obj/machinery/door))
- return 0.4
- if(istype(target, /obj/structure/window))
- return 0.5
- return 1
-
-/obj/projectile/beam/beam_rifle/proc/handle_impact(atom/target)
- if(isobj(target))
- var/obj/O = target
- O.take_damage(impact_structure_damage * get_damage_coeff(target), BURN, LASER, FALSE)
- if(isliving(target))
- var/mob/living/L = target
- L.adjustFireLoss(impact_direct_damage)
- L.emote("scream")
-
-/obj/projectile/beam/beam_rifle/proc/handle_hit(atom/target, piercing_hit = FALSE)
- set waitfor = FALSE
- if(!is_hostile_projectile())
- return FALSE
- playsound(src, 'sound/effects/explosion3.ogg', 100, TRUE)
- if(!do_pierce)
- AOE(get_turf(target) || get_turf(src))
- if(!QDELETED(target))
- handle_impact(target)
-
-/obj/projectile/beam/beam_rifle/on_hit(atom/target, blocked = 0, pierce_hit)
- handle_hit(target, pierce_hit)
- return ..()
-
-/obj/projectile/beam/beam_rifle/is_hostile_projectile()
- return TRUE // on hit = boom fire
-
-/obj/projectile/beam/beam_rifle/hitscan
- icon_state = ""
hitscan = TRUE
tracer_type = /obj/effect/projectile/tracer/tracer/beam_rifle
- var/constant_tracer = FALSE
-/obj/projectile/beam/beam_rifle/hitscan/generate_hitscan_tracers(cleanup = TRUE, duration = 5, impacting = TRUE, highlander)
- set waitfor = FALSE
- if(isnull(highlander))
- highlander = constant_tracer
- if(highlander && istype(gun))
- QDEL_LIST(gun.current_tracers)
- for(var/datum/point/p in beam_segments)
- gun.current_tracers += generate_tracer_between_points(p, beam_segments[p], tracer_type, color, 0, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity)
- else
- for(var/datum/point/p in beam_segments)
- generate_tracer_between_points(p, beam_segments[p], tracer_type, color, duration, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity)
- if(cleanup)
- QDEL_LIST(beam_segments)
- beam_segments = null
- QDEL_NULL(beam_index)
-
-/obj/projectile/beam/beam_rifle/hitscan/aiming_beam
- tracer_type = /obj/effect/projectile/tracer/tracer/aiming
- name = "aiming beam"
- hitsound = null
- hitsound_wall = null
- damage = 0
- constant_tracer = TRUE
- hitscan_light_range = 0
- hitscan_light_intensity = 0
- hitscan_light_color_override = "#99ff99"
- reflectable = REFLECT_FAKEPROJECTILE
-
-/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/is_hostile_projectile()
- return FALSE // just an aiming reticle
-
-/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/prehit_pierce(atom/target)
- return PROJECTILE_DELETE_WITHOUT_HITTING
+/obj/projectile/beam/event_horizon/on_hit(atom/target, blocked, pierce_hit)
+ . = ..()
-/obj/projectile/beam/beam_rifle/hitscan/aiming_beam/on_hit(atom/target, blocked = 0, pierce_hit)
- SHOULD_CALL_PARENT(FALSE) // This is some snowflake stuff so whatever
- qdel(src)
- return BULLET_ACT_BLOCK
+ // Where we droppin' boys?
+ var/turf/rift_loc = get_turf(target)
-#undef AIMING_BEAM_ANGLE_CHANGE_THRESHOLD
-#undef AUTOZOOM_PIXEL_STEP_FACTOR
-#undef ZOOM_LOCK_AUTOZOOM_ANGLELOCK
-#undef ZOOM_LOCK_AUTOZOOM_FREEMOVE
-#undef ZOOM_LOCK_CENTER_VIEW
-#undef ZOOM_LOCK_OFF
+ // Spawn our temporary rift, then activate it.
+ var/obj/reality_tear/temporary/tear = new(rift_loc)
+ tear.start_disaster()
+ message_admins("[ADMIN_LOOKUPFLW(target)] has been hit by an anti-existential beam at [ADMIN_VERBOSEJMP(rift_loc)], creating a singularity.")
diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm
index f35769e663c71..9a7fa9aa78bea 100644
--- a/code/modules/projectiles/guns/energy/dueling.dm
+++ b/code/modules/projectiles/guns/energy/dueling.dm
@@ -365,6 +365,7 @@
icon_closed = "medalbox"
icon_broken = "medalbox+b"
base_icon_state = "medalbox"
+ icon_open = "medalboxopen"
/obj/item/storage/lockbox/dueling/Initialize(mapload)
. = ..()
@@ -372,16 +373,6 @@
atom_storage.max_slots = 2
atom_storage.set_holdable(/obj/item/gun/energy/dueling)
-/obj/item/storage/lockbox/dueling/update_icon_state()
- if(atom_storage?.locked)
- icon_state = icon_locked
- return ..()
- if(broken)
- icon_state = icon_broken
- return ..()
- icon_state = open ? "[base_icon_state]open" : icon_closed
- return ..()
-
/obj/item/storage/lockbox/dueling/PopulateContents()
. = ..()
var/obj/item/gun/energy/dueling/gun_A = new(src)
diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm
index fec816b1e765f..3ce3338bf8749 100644
--- a/code/modules/projectiles/guns/energy/energy_gun.dm
+++ b/code/modules/projectiles/guns/energy/energy_gun.dm
@@ -34,7 +34,7 @@
icon_state = "mini"
inhand_icon_state = "gun"
w_class = WEIGHT_CLASS_SMALL
- cell_type = /obj/item/stock_parts/cell/mini_egun
+ cell_type = /obj/item/stock_parts/power_store/cell/mini_egun
ammo_x_offset = 2
charge_sections = 3
single_shot_type_overlay = FALSE
@@ -75,7 +75,7 @@
/obj/item/gun/energy/e_gun/hos
name = "\improper X-01 MultiPhase Energy Gun"
desc = "This is an expensive, modern recreation of an antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time."
- cell_type = /obj/item/stock_parts/cell/hos_gun
+ cell_type = /obj/item/stock_parts/power_store/cell/hos_gun
icon_state = "hoslaser"
w_class = WEIGHT_CLASS_NORMAL
force = 10
@@ -86,7 +86,7 @@
/obj/item/gun/energy/e_gun/dragnet
name = "\improper DRAGnet"
- desc = "The \"Dynamic Rapid-Apprehension of the Guilty\" net is a revolution in law enforcement technology."
+ desc = "The \"Dynamic Rapid-Apprehension of the Guilty\" net is a revolution in law enforcement technology. Can by synced with a DRAGnet beacon to set a teleport destination for snare rounds."
icon_state = "dragnet"
inhand_icon_state = "dragnet"
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
@@ -95,10 +95,35 @@
modifystate = FALSE
w_class = WEIGHT_CLASS_NORMAL
ammo_x_offset = 1
+ ///A dragnet beacon set to be the teleport destination for snare teleport rounds.
+ var/obj/item/dragnet_beacon/linked_beacon
/obj/item/gun/energy/e_gun/dragnet/add_seclight_point()
return
+/obj/item/gun/energy/e_gun/dragnet/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(istype(tool, /obj/item/dragnet_beacon))
+ link_beacon(user, tool)
+
+///Sets the linked_beacon var on the dragnet, which becomes the snare round's teleport destination.
+/obj/item/gun/energy/e_gun/dragnet/proc/link_beacon(mob/living/user, obj/item/dragnet_beacon/our_beacon)
+ if(linked_beacon)
+ if(our_beacon == linked_beacon)
+ balloon_alert(user, "already synced!")
+ return
+ else
+ UnregisterSignal(linked_beacon, COMSIG_QDELETING) //You're getting overridden dude.
+
+ linked_beacon = our_beacon
+ balloon_alert(user, "beacon synced")
+ RegisterSignal(our_beacon, COMSIG_QDELETING, PROC_REF(handle_beacon_disable))
+
+///Handles clearing the linked_beacon reference in the event that it is deleted.
+/obj/item/gun/energy/e_gun/dragnet/proc/handle_beacon_disable(datum/source)
+ SIGNAL_HANDLER
+ visible_message(span_warning("A light on the [src] flashes, indicating that it is no longer linked with a DRAGnet beacon!"))
+ linked_beacon = null
+
/obj/item/gun/energy/e_gun/dragnet/snare
name = "Energy Snare Launcher"
desc = "Fires an energy snare that slows the target down."
diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
index c7fefc745f7e0..7237ee0e32747 100644
--- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
+++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
@@ -254,6 +254,8 @@
require_model = TRUE
model_type = list(/obj/item/robot_model/miner)
model_flags = BORG_MODEL_MINER
+ //Most modkits are supposed to allow duplicates. The ones that don't should be blocked by PKA code anyways.
+ allow_duplicates = TRUE
var/denied_type = null
var/maximum_of_type = 1
var/cost = 30
diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm
index 0f5e7d3deac58..e4375bd4832aa 100644
--- a/code/modules/projectiles/guns/energy/laser_gatling.dm
+++ b/code/modules/projectiles/guns/energy/laser_gatling.dm
@@ -13,7 +13,7 @@
w_class = WEIGHT_CLASS_HUGE
var/obj/item/gun/energy/minigun/gun
- var/obj/item/stock_parts/cell/minigun/battery
+ var/obj/item/stock_parts/power_store/cell/minigun/battery
var/armed = FALSE //whether the gun is attached, FALSE is attached, TRUE is the gun is wielded.
var/overheat = 0
var/overheat_max = 40
@@ -102,7 +102,7 @@
custom_materials = null
weapon_weight = WEAPON_HEAVY
ammo_type = list(/obj/item/ammo_casing/energy/laser/minigun)
- cell_type = /obj/item/stock_parts/cell/crap
+ cell_type = /obj/item/stock_parts/power_store/cell/crap
item_flags = NEEDS_PERMIT | SLOWS_WHILE_IN_HAND
can_charge = FALSE
var/obj/item/minigunpack/ammo_pack
@@ -148,7 +148,7 @@
return FALSE
return ..()
-/obj/item/stock_parts/cell/minigun
+/obj/item/stock_parts/power_store/cell/minigun
name = "gatling gun fusion core"
desc = "Where did these come from?"
maxcharge = 500 * STANDARD_CELL_CHARGE
diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm
index a589594d79628..0635de8037adf 100644
--- a/code/modules/projectiles/guns/energy/pulse.dm
+++ b/code/modules/projectiles/guns/energy/pulse.dm
@@ -10,7 +10,7 @@
obj_flags = CONDUCTS_ELECTRICITY
slot_flags = ITEM_SLOT_BACK
ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser)
- cell_type = /obj/item/stock_parts/cell/pulse
+ cell_type = /obj/item/stock_parts/power_store/cell/pulse
/obj/item/gun/energy/pulse/Initialize(mapload)
. = ..()
@@ -44,7 +44,7 @@
icon_state = "pulse_carbine"
worn_icon_state = "gun"
inhand_icon_state = null
- cell_type = /obj/item/stock_parts/cell/pulse/carbine
+ cell_type = /obj/item/stock_parts/power_store/cell/pulse/carbine
/obj/item/gun/energy/pulse/carbine/add_seclight_point()
AddComponent(/datum/component/seclite_attachable, \
@@ -63,7 +63,7 @@
name = "pulse destroyer"
desc = "A heavy-duty energy rifle built for pure destruction."
worn_icon_state = "pulse"
- cell_type = /obj/item/stock_parts/cell/infinite
+ cell_type = /obj/item/stock_parts/power_store/cell/infinite
ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse)
/obj/item/gun/energy/pulse/destroyer/attack_self(mob/living/user)
@@ -77,7 +77,7 @@
icon_state = "pulse_pistol"
worn_icon_state = "gun"
inhand_icon_state = "gun"
- cell_type = /obj/item/stock_parts/cell/pulse/pistol
+ cell_type = /obj/item/stock_parts/power_store/cell/pulse/pistol
/obj/item/gun/energy/pulse/pistol/loyalpin
pin = /obj/item/firing_pin/implant/mindshield
@@ -87,4 +87,4 @@
desc = "A compact pulse core in a classic handgun frame for Nanotrasen officers. It's not the size of the gun, it's the size of the hole it puts through people."
icon_state = "m1911"
inhand_icon_state = "gun"
- cell_type = /obj/item/stock_parts/cell/infinite
+ cell_type = /obj/item/stock_parts/power_store/cell/infinite
diff --git a/code/modules/projectiles/guns/energy/recharge.dm b/code/modules/projectiles/guns/energy/recharge.dm
index 1b9409478cd7e..0aa14b48c32f6 100644
--- a/code/modules/projectiles/guns/energy/recharge.dm
+++ b/code/modules/projectiles/guns/energy/recharge.dm
@@ -4,7 +4,7 @@
base_icon_state = "kineticgun"
desc = "A self recharging gun. Holds one shot at a time."
automatic_charge_overlays = FALSE
- cell_type = /obj/item/stock_parts/cell/emproof
+ cell_type = /obj/item/stock_parts/power_store/cell/emproof
/// If set to something, instead of an overlay, sets the icon_state directly.
var/no_charge_state
/// Does it hold charge when not put away?
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index a342b0e85f405..653cffcbeec7d 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -52,7 +52,7 @@
inhand_icon_state = "c20r"
w_class = WEIGHT_CLASS_BULKY
ammo_type = list(/obj/item/ammo_casing/energy/meteor)
- cell_type = /obj/item/stock_parts/cell/potato
+ cell_type = /obj/item/stock_parts/power_store/cell/potato
clumsy_check = 0 //Admin spawn only, might as well let clowns use it.
selfcharge = 1
automatic_charge_overlays = FALSE
@@ -297,7 +297,7 @@
desc = "An LMG that fires 3D-printed flechettes. They are slowly resupplied using the cyborg's internal power source."
icon_state = "l6_cyborg"
icon = 'icons/obj/weapons/guns/ballistic.dmi'
- cell_type = /obj/item/stock_parts/cell/secborg
+ cell_type = /obj/item/stock_parts/power_store/cell/secborg
ammo_type = list(/obj/item/ammo_casing/energy/c3dbullet)
can_charge = FALSE
use_cyborg_cell = TRUE
@@ -314,7 +314,7 @@
desc = "A gun that changes temperatures. Comes with a collapsible stock."
w_class = WEIGHT_CLASS_NORMAL
ammo_type = list(/obj/item/ammo_casing/energy/temp, /obj/item/ammo_casing/energy/temp/hot)
- cell_type = /obj/item/stock_parts/cell/high
+ cell_type = /obj/item/stock_parts/power_store/cell/high
pin = null
/obj/item/gun/energy/temperature/security
diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm
index e8f41ef0b48ec..b2fe293eae8c2 100644
--- a/code/modules/projectiles/guns/magic/wand.dm
+++ b/code/modules/projectiles/guns/magic/wand.dm
@@ -277,3 +277,78 @@
charges--
user.AddComponent(/datum/component/shrink, -1) // small forever
return ..()
+
+// Wand of debugging
+
+#ifdef TESTING
+
+/obj/item/gun/magic/wand/antag
+ name = "wand of antag"
+ desc = "This wand uses the powers of bullshit to turn anyone it hits into an antag"
+ school = SCHOOL_FORBIDDEN
+ ammo_type = /obj/item/ammo_casing/magic/antag
+ icon_state = "revivewand"
+ base_icon_state = "revivewand"
+ color = COLOR_ADMIN_PINK
+ max_charges = 99999
+
+/obj/item/gun/magic/wand/antag/zap_self(mob/living/user)
+ . = ..()
+ var/obj/item/ammo_casing/magic/antag/casing = new ammo_type()
+ var/obj/projectile/magic/magic_proj = casing.projectile_type
+ magic_proj = new magic_proj(src)
+ magic_proj.on_hit(user)
+ QDEL_NULL(casing)
+
+/obj/item/ammo_casing/magic/antag
+ projectile_type = /obj/projectile/magic/antag
+ harmful = FALSE
+
+/obj/projectile/magic/antag
+ name = "bolt of antag"
+ icon_state = "ion"
+ var/antag = /datum/antagonist/traitor
+
+/obj/projectile/magic/antag/on_hit(atom/target, blocked, pierce_hit)
+ . = ..()
+
+ if(isliving(target))
+ var/mob/living/victim = target
+ if(isnull(victim.mind))
+ victim.mind_initialize()
+ if(victim.mind.has_antag_datum(antag))
+ victim.mind.remove_antag_datum(antag)
+ to_chat(world, "removed")
+ else
+ victim.mind.add_antag_datum(antag)
+ to_chat(world, "added")
+
+/obj/item/gun/magic/wand/antag/heretic
+ name = "wand of antag heretic"
+ desc = "This wand uses the powers of bullshit to turn anyone it hits into an antag heretic"
+ color = COLOR_GREEN
+ ammo_type = /obj/item/ammo_casing/magic/antag/heretic
+
+/obj/item/ammo_casing/magic/antag/heretic
+ projectile_type = /obj/projectile/magic/antag/heretic
+
+/obj/projectile/magic/antag/heretic
+ name = "bolt of antag heretic"
+ icon_state = "ion"
+ antag = /datum/antagonist/heretic
+
+/obj/item/gun/magic/wand/antag/cult
+ name = "wand of antag cultist"
+ desc = "This wand uses the powers of bullshit to turn anyone it hits into an antag cultist"
+ color = COLOR_CULT_RED
+ ammo_type = /obj/item/ammo_casing/magic/antag/cult
+
+/obj/item/ammo_casing/magic/antag/cult
+ projectile_type = /obj/projectile/magic/antag/cult
+
+/obj/projectile/magic/antag/cult
+ name = "bolt of antag cult"
+ icon_state = "ion"
+ antag = /datum/antagonist/cult
+
+#endif
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 43e4e160d06a1..013cc6e4b294c 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -930,6 +930,8 @@
trajectory.increment(trajectory_multiplier)
var/turf/T = trajectory.return_turf()
if(!istype(T))
+ // step back to the last valid turf before we Destroy
+ trajectory.increment(-trajectory_multiplier)
qdel(src)
return
if(T.z != loc.z)
diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm
index 1bb7988e4bae4..ac35fb5503e68 100644
--- a/code/modules/projectiles/projectile/energy/net_snare.dm
+++ b/code/modules/projectiles/projectile/energy/net_snare.dm
@@ -11,10 +11,15 @@
SpinAnimation()
/obj/projectile/energy/net/on_hit(atom/target, blocked = 0, pierce_hit)
+ var/obj/item/dragnet_beacon/destination_beacon = null
+ var/obj/item/gun/energy/e_gun/dragnet/our_dragnet = fired_from
+ if(our_dragnet && istype(our_dragnet))
+ destination_beacon = our_dragnet.linked_beacon
+
if(isliving(target))
var/turf/Tloc = get_turf(target)
if(!locate(/obj/effect/nettingportal) in Tloc)
- new /obj/effect/nettingportal(Tloc)
+ new /obj/effect/nettingportal(Tloc, destination_beacon)
. = ..()
/obj/projectile/energy/net/on_range()
@@ -29,26 +34,18 @@
light_range = 3
anchored = TRUE
-/obj/effect/nettingportal/Initialize(mapload)
+/obj/effect/nettingportal/Initialize(mapload, destination_beacon)
. = ..()
- var/obj/item/beacon/teletarget = null
- for(var/obj/machinery/computer/teleporter/com as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/teleporter))
- var/atom/target = com.target_ref?.resolve()
- if(target)
- if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged)
- teletarget = target
- else
- com.target_ref = null
-
+ var/obj/item/dragnet_beacon/teletarget = destination_beacon
addtimer(CALLBACK(src, PROC_REF(pop), teletarget), 3 SECONDS)
/obj/effect/nettingportal/proc/pop(teletarget)
if(teletarget)
- for(var/mob/living/L in get_turf(src))
- do_teleport(L, teletarget, 2, channel = TELEPORT_CHANNEL_BLUESPACE)//teleport what's in the tile to the beacon
+ for(var/mob/living/living_mob in get_turf(src))
+ do_teleport(living_mob, get_turf(teletarget), 1, channel = TELEPORT_CHANNEL_BLUESPACE) //Teleport what's in the tile to the beacon
else
- for(var/mob/living/L in get_turf(src))
- do_teleport(L, L, 15, channel = TELEPORT_CHANNEL_BLUESPACE) //Otherwise it just warps you off somewhere.
+ for(var/mob/living/living_mob in get_turf(src))
+ do_teleport(living_mob, get_turf(living_mob), 15, channel = TELEPORT_CHANNEL_BLUESPACE) //Otherwise it just warps you off somewhere.
qdel(src)
@@ -58,6 +55,66 @@
/obj/effect/nettingportal/singularity_pull()
return
+/obj/item/dragnet_beacon
+ name = "\improper DRAGnet beacon"
+ desc = "Can be synced with a DRAGnet to set it as a designated teleporting point."
+ icon = 'icons/obj/devices/tracker.dmi'
+ icon_state = "dragnet_beacon"
+ inhand_icon_state = "beacon"
+ lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi'
+ ///Has a security ID been used to lock this in place?
+ var/locked = FALSE
+
+/obj/item/dragnet_beacon/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(istype(tool, /obj/item/gun/energy/e_gun/dragnet))
+ var/obj/item/gun/energy/e_gun/dragnet/dragnet_to_link = tool
+ dragnet_to_link.link_beacon(user, src)
+ return
+
+ if(isidcard(tool))
+ if(!anchored)
+ balloon_alert(user, "wrench the beacon first!")
+ return
+
+ if(obj_flags & EMAGGED)
+ balloon_alert(user, "the access control is fried!")
+ return
+
+ var/obj/item/card/id/id_card = tool
+ if((ACCESS_SECURITY in id_card.GetAccess()))
+ locked = !locked
+ balloon_alert(user, "beacon [locked ? "locked" : "unlocked"]")
+ else
+ balloon_alert(user, "no access!")
+
+/obj/item/dragnet_beacon/wrench_act(mob/living/user, obj/item/tool)
+ if(user.is_holding(src))
+ balloon_alert(user, "put it down first!")
+ return ITEM_INTERACT_BLOCKING
+
+ if(anchored && locked)
+ balloon_alert(user, "must be unlocked first!")
+ return ITEM_INTERACT_BLOCKING
+
+ if(isinspace() && !anchored)
+ balloon_alert(user, "nothing to anchor to!")
+ return ITEM_INTERACT_BLOCKING
+
+ set_anchored(!anchored)
+ tool.play_tool_sound(src, 75)
+ user.balloon_alert_to_viewers("[anchored ? "anchored" : "unanchored"]")
+
+/obj/item/dragnet_beacon/emag_act(mob/user, obj/item/card/emag/emag_card)
+ if(obj_flags & EMAGGED)
+ return FALSE
+ obj_flags |= EMAGGED
+ locked = FALSE
+ set_anchored(FALSE)
+ do_sparks(3, TRUE, src)
+ balloon_alert(user, "beacon unlocked")
+ return TRUE
+
/obj/projectile/energy/trap
name = "energy snare"
icon_state = "e_snare"
diff --git a/code/modules/projectiles/projectile/special/temperature.dm b/code/modules/projectiles/projectile/special/temperature.dm
index 3d88c40fdfb9c..2a8b6ca6b6938 100644
--- a/code/modules/projectiles/projectile/special/temperature.dm
+++ b/code/modules/projectiles/projectile/special/temperature.dm
@@ -31,7 +31,7 @@
/obj/projectile/temp/cryo
name = "cryo beam"
- range = 3
+ range = 9
temperature = -240 // Single slow shot reduces temp greatly
/obj/projectile/temp/cryo/on_range()
@@ -40,3 +40,24 @@
var/turf/open/O = T
O.freeze_turf()
return ..()
+
+/obj/projectile/temp/pyro
+ name = "hot beam"
+ icon_state = "firebeam" // sets on fire, diff sprite!
+ range = 9
+ temperature = 240
+
+/obj/projectile/temp/pyro/on_hit(atom/target, blocked, pierce_hit)
+ . = ..()
+ if(!.)
+ return
+ var/mob/living/living_target = target
+ if(!istype(living_target))
+ return
+ living_target.adjust_fire_stacks(2)
+ living_target.ignite_mob()
+
+/obj/projectile/temp/pyro/on_range()
+ var/turf/location = get_turf(src)
+ new /obj/effect/hotspot(location)
+ location.hotspot_expose(700, 50, 1)
diff --git a/code/modules/reagents/chemistry/items.dm b/code/modules/reagents/chemistry/items.dm
index d307f96dc264c..ad7f0413ce561 100644
--- a/code/modules/reagents/chemistry/items.dm
+++ b/code/modules/reagents/chemistry/items.dm
@@ -120,7 +120,7 @@
return NONE
var/list/out_message = list()
to_chat(user, "The chemistry meter beeps and displays:")
- out_message += "Total volume: [round(cont.volume, 0.01)] Current temperature: [round(cont.reagents.chem_temp, 0.1)]K Total pH: [round(cont.reagents.ph, 0.01)]\n"
+ out_message += "Total volume: [round(cont.volume, 0.01)] Current temperature: [round(cont.reagents.chem_temp, 0.1)]K Total pH: [round(cont.reagents.ph, 0.01)]\n"
out_message += "Chemicals found in [interacting_with.name]:\n"
if(cont.reagents.is_reacting)
out_message += "[span_warning("A reaction appears to be occuring currently.")]\n"
@@ -132,7 +132,7 @@
out_message += "[round(reagent.volume, 0.01)]u of [reagent.name], Purity: [round(reagent.purity, 0.000001)*100]%, [(scanmode?"[(reagent.overdose_threshold?"Overdose: [reagent.overdose_threshold]u, ":"")]Base pH: [initial(reagent.ph)], Current pH: [reagent.ph].":"Current pH: [reagent.ph].")]\n"
if(scanmode)
out_message += "Analysis: [reagent.description]\n"
- to_chat(user, "[out_message.Join()]")
+ to_chat(user, examine_block(span_notice("[out_message.Join()]")))
desc = "An electrode attached to a small circuit box that will display details of a solution. Can be toggled to provide a description of each of the reagents. The screen currently displays detected vol: [round(cont.volume, 0.01)] detected pH:[round(cont.reagents.ph, 0.1)]."
return ITEM_INTERACT_SUCCESS
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 68c4c2abff059..cbd6449269ccc 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -11,13 +11,13 @@
processing_flags = NONE
/// The cell used to dispense reagents
- var/obj/item/stock_parts/cell/cell
- /// Efficiency used when converting cell power to reagents. Units (volume) per joule.
- var/powerefficiency = 1e-4
+ var/obj/item/stock_parts/power_store/cell
+ /// Efficiency used when converting cell power to reagents. Joule per volume.
+ var/power_cost = 0.1 KILO WATTS
/// The current amount this machine is dispensing
var/amount = 30
/// The rate at which this machine recharges the power cell.
- var/recharge_amount = 1.25 KILO WATTS
+ var/recharge_amount = 0.3 KILO WATTS
/// The temperature reagents are dispensed into the beaker
var/dispensed_temperature = DEFAULT_REAGENT_TEMPERATURE
/// If the UI has the pH meter shown
@@ -124,7 +124,7 @@
if(in_range(user, src) || isobserver(user))
. += "The status display reads:\n\
Recharge rate: [display_power(recharge_amount, convert = FALSE)].\n\
- Energy cost: [siunit(INVERSE(powerefficiency), "J/u", 3)]."
+ Energy cost: [siunit(power_cost, "J/u", 3)]."
. += span_notice("Use RMB to eject a stored beaker.")
/obj/machinery/chem_dispenser/on_set_is_operational(old_value)
@@ -278,7 +278,7 @@
var/datum/reagents/holder = beaker.reagents
var/to_dispense = max(0, min(amount, holder.maximum_volume - holder.total_volume))
- if(!cell.use(to_dispense / powerefficiency))
+ if(!cell.use(to_dispense * power_cost))
say("Not enough energy to complete operation!")
return
holder.add_reagent(reagent, to_dispense, reagtemp = dispensed_temperature, added_purity = base_reagent_purity)
@@ -321,7 +321,7 @@
var/to_dispense = max(0, min(dispense_amount, holder.maximum_volume - holder.total_volume))
if(!to_dispense)
continue
- if(!cell.use(to_dispense / powerefficiency))
+ if(!cell.use(to_dispense * power_cost))
say("Not enough energy to complete operation!")
return
holder.add_reagent(reagent, to_dispense, reagtemp = dispensed_temperature, added_purity = base_reagent_purity)
@@ -412,7 +412,7 @@
if(. & EMP_PROTECT_SELF)
return
var/list/datum/reagents/R = list()
- var/total = min(rand(7,15), FLOOR(cell.charge*powerefficiency, 1))
+ var/total = min(rand(7,15), FLOOR(cell.charge*INVERSE(power_cost), 1))
var/datum/reagents/Q = new(total*10)
if(beaker?.reagents)
R += beaker.reagents
@@ -422,7 +422,7 @@
chem_splash(get_turf(src), null, 3, R)
if(beaker?.reagents)
beaker.reagents.remove_all()
- cell.use(total/powerefficiency)
+ cell.use(total * power_cost)
cell.emp_act(severity)
work_animation()
visible_message(span_danger("[src] malfunctions, spraying chemicals everywhere!"))
@@ -430,12 +430,12 @@
/obj/machinery/chem_dispenser/RefreshParts()
. = ..()
recharge_amount = initial(recharge_amount)
- var/newpowereff = INVERSE(1.5e4)
+ var/new_power_cost = initial(power_cost)
var/parts_rating = 0
- for(var/obj/item/stock_parts/cell/stock_cell in component_parts)
+ for(var/obj/item/stock_parts/power_store/stock_cell in component_parts)
cell = stock_cell
for(var/datum/stock_part/matter_bin/matter_bin in component_parts)
- newpowereff += matter_bin.tier / 6e4
+ new_power_cost -= (matter_bin.tier * 0.25 KILO WATTS)
parts_rating += matter_bin.tier
for(var/datum/stock_part/capacitor/capacitor in component_parts)
recharge_amount *= capacitor.tier
@@ -446,7 +446,7 @@
else
dispensable_reagents -= upgrade_reagents
parts_rating += servo.tier
- powerefficiency = round(newpowereff, 1e-5)
+ power_cost = max(new_power_cost, 0.1 KILO WATTS)
/obj/machinery/chem_dispenser/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker)
if(!user)
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index e206ffebbc9f8..a4fa10cb88c63 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -422,7 +422,7 @@
var/duration = time / speed
- Shake(duration = duration)
+ Shake(pixelshiftx = 1, pixelshifty = 0, duration = duration)
operating = TRUE
if(!juicing)
playsound(src, 'sound/machines/blender.ogg', 50, TRUE)
@@ -490,7 +490,7 @@
var/duration = time / speed
- Shake(duration = duration)
+ Shake(pixelshiftx = 1, pixelshifty = 0, duration = duration)
operating = TRUE
playsound(src, 'sound/machines/juicer.ogg', 20, TRUE)
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index b60a5b8028642..c6cee8e91c062 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -503,18 +503,29 @@
var/atom/movable/plane_master_controller/game_plane_master_controller = psychonaut.hud_used.plane_master_controllers[PLANE_MASTERS_GAME]
+ // Info for non-matrix plebs like me!
+
+ // This doesn't change the RGB matrixes directly at all. Instead, it shifts all the colors' Hue by 33%,
+ // Shifting them up the color wheel, turning R to G, G to B, B to R, making a psychedelic effect.
+ // The second moves them two colors up instead, turning R to B, G to R, B to G.
+ // The third does a full spin, or resets it back to normal.
+ // Imagine a triangle on the color wheel with the points located at the color peaks, rotating by 90 degrees each time.
+ // The value with decimals is the Hue. The rest are Saturation, Luminosity, and Alpha, though they're unused here.
+
+ // The filters were initially named _green, _blue, _red, despite every filter changing all the colors. It caused me a 2-years-long headache.
+
var/list/col_filter_identity = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.000,0,0,0)
- var/list/col_filter_green = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.333,0,0,0)
- var/list/col_filter_blue = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.666,0,0,0)
- var/list/col_filter_red = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 1.000,0,0,0) //visually this is identical to the identity
+ var/list/col_filter_shift_once = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.333,0,0,0)
+ var/list/col_filter_shift_twice = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.666,0,0,0)
+ var/list/col_filter_reset = list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 1.000,0,0,0) //visually this is identical to the identity
- game_plane_master_controller.add_filter("rainbow", 10, color_matrix_filter(col_filter_red, FILTER_COLOR_HSL))
+ game_plane_master_controller.add_filter("rainbow", 10, color_matrix_filter(col_filter_reset, FILTER_COLOR_HSL))
for(var/filter in game_plane_master_controller.get_filters("rainbow"))
animate(filter, color = col_filter_identity, time = 0 SECONDS, loop = -1, flags = ANIMATION_PARALLEL)
- animate(color = col_filter_green, time = 4 SECONDS)
- animate(color = col_filter_blue, time = 4 SECONDS)
- animate(color = col_filter_red, time = 4 SECONDS)
+ animate(color = col_filter_shift_once, time = 4 SECONDS)
+ animate(color = col_filter_shift_twice, time = 4 SECONDS)
+ animate(color = col_filter_reset, time = 4 SECONDS)
game_plane_master_controller.add_filter("psilocybin_wave", 1, list("type" = "wave", "size" = 2, "x" = 32, "y" = 32))
@@ -568,18 +579,18 @@
var/atom/movable/plane_master_controller/game_plane_master_controller = dancer.hud_used.plane_master_controllers[PLANE_MASTERS_GAME]
- var/list/col_filter_blue = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.764,0,0,0) //most blue color
+ var/list/col_filter_shift_twice = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.764,0,0,0) //most blue color
var/list/col_filter_mid = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.832,0,0,0) //red/blue mix midpoint
- var/list/col_filter_red = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.900,0,0,0) //most red color
+ var/list/col_filter_reset = list(0,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0.900,0,0,0) //most red color
game_plane_master_controller.add_filter("blastoff_filter", 10, color_matrix_filter(col_filter_mid, FILTER_COLOR_HCY))
game_plane_master_controller.add_filter("blastoff_wave", 1, list("type" = "wave", "x" = 32, "y" = 32))
for(var/filter in game_plane_master_controller.get_filters("blastoff_filter"))
- animate(filter, color = col_filter_blue, time = 3 SECONDS, loop = -1, flags = ANIMATION_PARALLEL)
+ animate(filter, color = col_filter_shift_twice, time = 3 SECONDS, loop = -1, flags = ANIMATION_PARALLEL)
animate(color = col_filter_mid, time = 3 SECONDS)
- animate(color = col_filter_red, time = 3 SECONDS)
+ animate(color = col_filter_reset, time = 3 SECONDS)
animate(color = col_filter_mid, time = 3 SECONDS)
for(var/filter in game_plane_master_controller.get_filters("blastoff_wave"))
diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm
index f7fc1b04ac8de..40305c9a8bc47 100644
--- a/code/modules/reagents/chemistry/recipes.dm
+++ b/code/modules/reagents/chemistry/recipes.dm
@@ -281,7 +281,7 @@
* * modifier - a flat additive numeric to the size of the explosion - set this if you want a minimum range
* * strengthdiv - the divisional factor of the explosion, a larger number means a smaller range - This is the part that modifies an explosion's range with volume (i.e. it divides it by this number)
*/
-/datum/chemical_reaction/proc/default_explode(datum/reagents/holder, created_volume, modifier = 0, strengthdiv = 10)
+/datum/chemical_reaction/proc/default_explode(datum/reagents/holder, created_volume, modifier = 0, strengthdiv = 10, clear_mob_reagents)
var/power = modifier + round(created_volume/strengthdiv, 1)
if(power > 0)
var/turf/T = get_turf(holder.my_atom)
@@ -300,8 +300,29 @@
var/datum/effect_system/reagents_explosion/e = new()
e.set_up(power , T, 0, 0)
e.start(holder.my_atom)
- holder.clear_reagents()
-
+ if (ismob(holder.my_atom))
+ if(!clear_mob_reagents)
+ return
+ // Only clear reagents if they use a special explosive reaction to do it; it shouldn't apply
+ // to any explosion inside a person
+ holder.clear_reagents()
+ if(iscarbon(holder.my_atom))
+ var/mob/living/carbon/victim = holder.my_atom
+ var/vomit_flags = MOB_VOMIT_MESSAGE | MOB_VOMIT_FORCE
+ // The vomiting here is for effect, not meant to help with purging
+ victim.vomit(vomit_flags, distance = 5)
+ // Not quite the same if the reaction is in their stomach; they'll throw up
+ // from any explosion, but it'll only make them puke up everything in their
+ // stomach
+ else if (istype(holder.my_atom, /obj/item/organ/internal/stomach))
+ var/obj/item/organ/internal/stomach/indigestion = holder.my_atom
+ if(power < 1)
+ return
+ indigestion.owner?.vomit(MOB_VOMIT_MESSAGE | MOB_VOMIT_FORCE, lost_nutrition = 150, distance = 5, purge_ratio = 1)
+ holder.clear_reagents()
+ return
+ else
+ holder.clear_reagents()
/*
*Creates a flash effect only - less expensive than explode()
*
diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm
index b3a287707629b..868917893c90c 100644
--- a/code/modules/reagents/chemistry/recipes/medicine.dm
+++ b/code/modules/reagents/chemistry/recipes/medicine.dm
@@ -345,6 +345,7 @@
/datum/chemical_reaction/medicine/medsuture
required_reagents = list(/datum/reagent/cellulose = 10, /datum/reagent/toxin/formaldehyde = 20, /datum/reagent/medicine/polypyr = 15) //This might be a bit much, reagent cost should be reviewed after implementation.
+ reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BRUTE
/datum/chemical_reaction/medicine/medsuture/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
@@ -354,6 +355,7 @@
/datum/chemical_reaction/medicine/medmesh
required_reagents = list(/datum/reagent/cellulose = 10, /datum/reagent/consumable/aloejuice = 20, /datum/reagent/space_cleaner/sterilizine = 10)
+ reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BURN
/datum/chemical_reaction/medicine/medmesh/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
@@ -363,6 +365,7 @@
/datum/chemical_reaction/medicine/poultice
required_reagents = list(/datum/reagent/toxin/bungotoxin = 20, /datum/reagent/cellulose = 20, /datum/reagent/consumable/aloejuice = 20)
+ reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BRUTE | REACTION_TAG_BURN
/datum/chemical_reaction/medicine/poultice/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
index d190a44aea063..f02aaa3ab2473 100644
--- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
+++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
@@ -1,13 +1,48 @@
+#define PURGING_REAGENTS list( \
+ /datum/reagent/medicine/c2/multiver, \
+ /datum/reagent/medicine/pen_acid, \
+ /datum/reagent/medicine/calomel, \
+ /datum/reagent/medicine/ammoniated_mercury, \
+ /datum/reagent/medicine/c2/syriniver, \
+ /datum/reagent/medicine/c2/musiver \
+)
+
/datum/chemical_reaction/reagent_explosion
var/strengthdiv = 10
var/modifier = 0
reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EXPLOSIVE | REACTION_TAG_MODERATE | REACTION_TAG_DANGEROUS
required_temp = 0 //Prevent impromptu RPGs
-
-/datum/chemical_reaction/reagent_explosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
- default_explode(holder, created_volume, modifier, strengthdiv)
-
+ // Only clear mob reagents in special cases
+ var/clear_mob_reagents = FALSE
+
+/datum/chemical_reaction/reagent_explosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume, clear_mob_reagents)
+ // If an explosive reaction clears mob reagents, it should always be a minimum power
+ if(ismob(holder.my_atom) && clear_mob_reagents)
+ if(round((created_volume / strengthdiv) + modifier, 1) < 1)
+ modifier += 1 - ((created_volume / strengthdiv) + modifier)
+ // If this particular explosion doesn't automatically clear mob reagents as an inherent quality,
+ // then we can still clear mob reagents with some mad science malpractice that shouldn't work but
+ // does because omnizine is magic and also it's the future or whatever
+ if(ismob(holder.my_atom) && !clear_mob_reagents)
+ // The explosion needs to be a minimum power to clear reagents: see above
+ var/purge_power = round((created_volume / strengthdiv) + modifier, 1)
+ if(purge_power >= 1)
+ var/has_purging_chemical = FALSE
+ // They need one of the purge reagents in them
+ for(var/purging_chem as anything in PURGING_REAGENTS)
+ if(holder.has_reagent(purging_chem))
+ // We have a purging chemical
+ has_purging_chemical = TRUE
+ break
+ // Then we need omnizine! MAGIC!
+ var/has_omnizine = holder.has_reagent(/datum/reagent/medicine/omnizine)
+ if(has_purging_chemical && has_omnizine)
+ // With all this medical "science" combined, we can clear mob reagents
+ clear_mob_reagents = TRUE
+ default_explode(holder, created_volume, modifier, strengthdiv, clear_mob_reagents)
+
+#undef PURGING_REAGENTS
/datum/chemical_reaction/reagent_explosion/nitroglycerin
results = list(/datum/reagent/nitroglycerin = 2)
required_reagents = list(/datum/reagent/glycerol = 1, /datum/reagent/toxin/acid/nitracid = 1, /datum/reagent/toxin/acid = 1)
@@ -104,11 +139,18 @@
/datum/chemical_reaction/reagent_explosion/penthrite_explosion_epinephrine
required_reagents = list(/datum/reagent/medicine/c2/penthrite = 1, /datum/reagent/medicine/epinephrine = 1)
strengthdiv = 5
+ // Penthrite is rare as hell, so this clears your reagents
+ // Will most likely be from miners accidentally penstacking
+ clear_mob_reagents = TRUE
+
/datum/chemical_reaction/reagent_explosion/penthrite_explosion_atropine
required_reagents = list(/datum/reagent/medicine/c2/penthrite = 1, /datum/reagent/medicine/atropine = 1)
strengthdiv = 5
modifier = 5
+ // Rare reagents clear your reagents
+ // Probably not good for you because you'll need healing chems to survive this most likely
+ clear_mob_reagents = TRUE
/datum/chemical_reaction/reagent_explosion/potassium_explosion
required_reagents = list(/datum/reagent/water = 1, /datum/reagent/potassium = 1)
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index 6407ff0fb8b2b..13eaffca3a898 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -88,7 +88,7 @@
//Gold
/datum/chemical_reaction/slime/slimemobspawn
- required_reagents = list(/datum/reagent/toxin/plasma = 1)
+ required_reagents = list(/datum/reagent/toxin/plasma = 15)
required_container = /obj/item/slime_extract/gold
deletes_extract = FALSE //we do delete, but we don't do so instantly
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS
@@ -103,7 +103,7 @@
/datum/chemical_reaction/slime/slimemobspawn/proc/summon_mobs(datum/reagents/holder, turf/T)
T.visible_message(span_danger("The slime extract begins to vibrate violently!"))
- addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 5, "Gold Slime", HOSTILE_SPAWN), 5 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 4, "Gold Slime", HOSTILE_SPAWN), 5 SECONDS)
/datum/chemical_reaction/slime/slimemobspawn/lesser
required_reagents = list(/datum/reagent/blood = 1)
@@ -222,7 +222,7 @@
required_container = /obj/item/slime_extract/orange
/datum/chemical_reaction/slime/slimefire
- required_reagents = list(/datum/reagent/toxin/plasma = 1)
+ required_reagents = list(/datum/reagent/toxin/plasma = 15)
required_container = /obj/item/slime_extract/orange
deletes_extract = FALSE
@@ -249,12 +249,12 @@
//Yellow
/datum/chemical_reaction/slime/slimeoverload
- required_reagents = list(/datum/reagent/blood = 1)
+ required_reagents = list(/datum/reagent/blood = 15)
required_container = /obj/item/slime_extract/yellow
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/slime/slimeoverload/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
- empulse(get_turf(holder.my_atom), 3, 7)
+ empulse(get_turf(holder.my_atom), 3, 5)
..()
/datum/chemical_reaction/slime/slimecell
@@ -262,7 +262,7 @@
required_container = /obj/item/slime_extract/yellow
/datum/chemical_reaction/slime/slimecell/on_reaction(datum/reagents/holder, created_volume)
- new /obj/item/stock_parts/cell/emproof/slime(get_turf(holder.my_atom))
+ new /obj/item/stock_parts/power_store/cell/emproof/slime(get_turf(holder.my_atom))
..()
/datum/chemical_reaction/slime/slimeglow
@@ -356,7 +356,7 @@
//Oil
/datum/chemical_reaction/slime/slimeexplosion
- required_reagents = list(/datum/reagent/toxin/plasma = 1)
+ required_reagents = list(/datum/reagent/toxin/plasma = 15)
required_container = /obj/item/slime_extract/oil
deletes_extract = FALSE
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS
@@ -380,7 +380,7 @@
/datum/chemical_reaction/slime/slimeexplosion/proc/boom(datum/reagents/holder)
if(holder?.my_atom)
- explosion(holder.my_atom, devastation_range = 1, heavy_impact_range = 3, light_impact_range = 6, explosion_cause = src)
+ explosion(holder.my_atom, devastation_range = 1, heavy_impact_range = 2, light_impact_range = 4, explosion_cause = src)
/datum/chemical_reaction/slime/slimeoil
@@ -408,7 +408,7 @@
//Adamantine
/datum/chemical_reaction/slime/adamantine
- required_reagents = list(/datum/reagent/toxin/plasma = 1)
+ required_reagents = list(/datum/reagent/toxin/plasma = 15)
required_container = /obj/item/slime_extract/adamantine
/datum/chemical_reaction/slime/adamantine/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm
index 89b9e7c748cb4..75fc8aef8920c 100644
--- a/code/modules/reagents/reagent_containers/blood_pack.dm
+++ b/code/modules/reagents/reagent_containers/blood_pack.dm
@@ -74,7 +74,7 @@
/obj/item/reagent_containers/blood/snail
blood_type = "S"
unique_blood = /datum/reagent/lube
-
+
/obj/item/reagent_containers/blood/snail/examine()
. = ..()
. += span_notice("It's a bit slimy... The label indicates that this is meant for snails.")
@@ -100,7 +100,7 @@
blood_type = "U"
/obj/item/reagent_containers/blood/attackby(obj/item/tool, mob/user, params)
- if (istype(tool, /obj/item/pen) || istype(tool, /obj/item/toy/crayon))
+ if (IS_WRITING_UTENSIL(tool))
if(!user.can_write(tool))
return
var/custom_label = tgui_input_text(user, "What would you like to label the blood pack?", "Blood Pack", name, MAX_NAME_LEN)
diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm
index 644f0dd96948a..fb3aa38271802 100644
--- a/code/modules/reagents/reagent_containers/cups/_cup.dm
+++ b/code/modules/reagents/reagent_containers/cups/_cup.dm
@@ -117,6 +117,7 @@
return ITEM_INTERACT_BLOCKING
var/trans = reagents.trans_to(target, amount_per_transfer_from_this, transferred_by = user)
+ playsound(target.loc, pick('sound/effects/liquid_pour1.ogg', 'sound/effects/liquid_pour2.ogg', 'sound/effects/liquid_pour3.ogg'), 50)
to_chat(user, span_notice("You transfer [trans] unit\s of the solution to [target]."))
SEND_SIGNAL(src, COMSIG_REAGENTS_CUP_TRANSFER_TO, target)
target.update_appearance()
diff --git a/code/modules/reagents/reagent_containers/cups/bottle.dm b/code/modules/reagents/reagent_containers/cups/bottle.dm
index 0b47a89e4b2a0..97906b26240e5 100644
--- a/code/modules/reagents/reagent_containers/cups/bottle.dm
+++ b/code/modules/reagents/reagent_containers/cups/bottle.dm
@@ -510,7 +510,7 @@
balloon_alert(user, "transferred [transfer_amount] unit\s")
flick("syrup_anim",src)
- if(istype(attacking_item, /obj/item/pen))
+ if(IS_WRITING_UTENSIL(attacking_item))
rename(user, attacking_item)
attacking_item.update_appearance()
diff --git a/code/modules/reagents/reagent_containers/misc.dm b/code/modules/reagents/reagent_containers/misc.dm
index f7152204f9ebc..d2dc2adfb5f76 100644
--- a/code/modules/reagents/reagent_containers/misc.dm
+++ b/code/modules/reagents/reagent_containers/misc.dm
@@ -8,13 +8,13 @@
reagent_flags = OPENCONTAINER
fill_icon_state = "maunafilling"
fill_icon_thresholds = list(25)
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
var/open = FALSE
var/on = FALSE
/obj/item/reagent_containers/cup/maunamug/Initialize(mapload, vol)
. = ..()
- cell = new /obj/item/stock_parts/cell(src)
+ cell = new /obj/item/stock_parts/power_store/cell(src)
/obj/item/reagent_containers/cup/maunamug/get_cell()
return cell
@@ -75,7 +75,7 @@
/obj/item/reagent_containers/cup/maunamug/attackby(obj/item/I, mob/user, params)
add_fingerprint(user)
- if(!istype(I, /obj/item/stock_parts/cell))
+ if(!istype(I, /obj/item/stock_parts/power_store/cell))
return ..()
if(!open)
to_chat(user, span_warning("The battery case must be open to insert a power cell!"))
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 387f3b84d4911..bb426436599c0 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -96,7 +96,6 @@
/obj/item/reagent_containers/spray/proc/do_spray(atom/target, wait_step, obj/effect/decal/chempuff/reagent_puff, range, puff_reagent_left, mob/user)
reagent_puff.user = user
reagent_puff.sprayer = src
- reagent_puff.lifetime = puff_reagent_left
reagent_puff.stream = stream_mode
var/turf/target_turf = get_turf(target)
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index b8b3576aa4b1b..f9cf10e1068d9 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -204,6 +204,7 @@
if(leaking && reagents && reagents.total_volume >= amount_to_leak)
reagents.expose(get_turf(src), TOUCH, amount_to_leak / max(amount_to_leak, reagents.total_volume))
reagents.remove_reagent(reagent_id, amount_to_leak)
+ playsound(src, 'sound/effects/glug.ogg', 33, TRUE, SILENCED_SOUND_EXTRARANGE)
return TRUE
return FALSE
@@ -221,7 +222,7 @@
if(!openable)
return FALSE
leaking = !leaking
- balloon_alert(user, "[leaking ? "opened" : "closed"] [src]'s tap")
+ balloon_alert(user, "[leaking ? "opened" : "closed"] tap")
user.log_message("[leaking ? "opened" : "closed"] [src].", LOG_GAME)
tank_leak()
return ITEM_INTERACT_SUCCESS
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index f02bfff4a0987..a6be96a43a811 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -113,7 +113,7 @@
sort_tag = dest_tagger.currTag
playsound(loc, 'sound/machines/twobeep_high.ogg', 100, TRUE)
update_appearance()
- else if(istype(item, /obj/item/pen))
+ else if(IS_WRITING_UTENSIL(item))
if(!user.can_write(item))
return
var/str = tgui_input_text(user, "Label text?", "Set label", max_length = MAX_NAME_LEN)
diff --git a/code/modules/religion/religion_sects.dm b/code/modules/religion/religion_sects.dm
index a8f23225a8ba8..0789cb2ac2086 100644
--- a/code/modules/religion/religion_sects.dm
+++ b/code/modules/religion/religion_sects.dm
@@ -146,7 +146,7 @@
do not heal organic limbs. You can now sacrifice cells, with favor depending on their charge."
tgui_icon = "robot"
alignment = ALIGNMENT_NEUT
- desired_items = list(/obj/item/stock_parts/cell = "with battery charge")
+ desired_items = list(/obj/item/stock_parts/power_store = "with battery charge")
rites_list = list(/datum/religion_rites/synthconversion, /datum/religion_rites/machine_blessing)
altar_icon_state = "convertaltar-blue"
max_favor = 2500
@@ -196,7 +196,7 @@
blessed.add_mood_event("blessing", /datum/mood_event/blessing)
return TRUE
-/datum/religion_sect/mechanical/on_sacrifice(obj/item/stock_parts/cell/power_cell, mob/living/chap)
+/datum/religion_sect/mechanical/on_sacrifice(obj/item/stock_parts/power_store/cell/power_cell, mob/living/chap)
if(!istype(power_cell))
return
diff --git a/code/modules/research/designs/autolathe/engineering_designs.dm b/code/modules/research/designs/autolathe/engineering_designs.dm
index 6d1bfed8ea1df..dc87b747959ca 100644
--- a/code/modules/research/designs/autolathe/engineering_designs.dm
+++ b/code/modules/research/designs/autolathe/engineering_designs.dm
@@ -76,7 +76,7 @@
id = "miniature_power_cell"
build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE
materials = list(/datum/material/glass =SMALL_MATERIAL_AMOUNT*0.2)
- build_path = /obj/item/stock_parts/cell/emergency_light
+ build_path = /obj/item/stock_parts/power_store/cell/emergency_light
category = list(
RND_CATEGORY_INITIAL,
RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_LIGHTING,
diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm
index 7d4f613f05478..8f857f77e8286 100644
--- a/code/modules/research/designs/machine_designs.dm
+++ b/code/modules/research/designs/machine_designs.dm
@@ -747,7 +747,6 @@
name = "NTNet Relay Board"
desc = "The circuit board for a wireless network relay."
id = "ntnet_relay"
- build_type = IMPRINTER
build_path = /obj/item/circuitboard/machine/ntnet_relay
category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS
@@ -1178,3 +1177,23 @@
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING
)
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
+
+/datum/design/board/bookbinder
+ name = "Book Binder"
+ desc = "The circuit board for a book binder"
+ id = "bookbinder"
+ build_path = /obj/item/circuitboard/machine/bookbinder
+ category = list(
+ RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_SERVICE
+
+/datum/design/board/libraryscanner
+ name = "Book Scanner"
+ desc = "The circuit board for a book scanner"
+ id = "libraryscanner"
+ build_path = /obj/item/circuitboard/machine/libraryscanner
+ category = list(
+ RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_SERVICE
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index 46e43b0ac6661..cbd05593a3c11 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -568,7 +568,7 @@
/datum/design/cyberimp_nutriment
name = "Nutriment Pump Implant"
- desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving."
+ desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are starving."
id = "ci-nutriment"
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
construction_time = 4 SECONDS
@@ -585,7 +585,7 @@
/datum/design/cyberimp_nutriment_plus
name = "Nutriment Pump Implant PLUS"
- desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry."
+ desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are hungry."
id = "ci-nutrimentplus"
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
construction_time = 5 SECONDS
@@ -811,6 +811,23 @@
)
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
+/datum/design/cybernetic_heart/anomalock
+ name = "Voltaic combat cyberheart"
+ desc = "A cutting-edge cyberheart, originally designed for Nanotrasen killsquad usage but later declassified for normal research. Voltaic technology allows the heart to keep the body upright in dire circumstances, alongside redirecting anomalous flux energy to fully shield the user from shocks and electro-magnetic pulses. Does nothing without a flux anomaly core."
+ id = "cybernetic_heart_anomalock"
+ construction_time = 5 SECONDS
+ materials = list(
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5,
+ /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/diamond = SHEET_MATERIAL_AMOUNT,
+ )
+ build_path = /obj/item/organ/internal/heart/cybernetic/anomalock
+ category = list(
+ RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
+
/datum/design/cybernetic_lungs
name = "Basic Cybernetic Lungs"
desc = "A basic pair of cybernetic lungs."
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index 8ae869220deef..0ea6c41e16448 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -818,6 +818,19 @@
)
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
+
+/datum/design/dragnet_beacon
+ name = "DRAGnet Beacon"
+ desc = "A beacon that can be used as a teleport destination for DRAGnet snare rounds. Remember to sync it with your DRAGnet first!"
+ id = "dragnet_beacon"
+ build_type = PROTOLATHE | AWAY_LATHE
+ materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2)
+ build_path = /obj/item/dragnet_beacon
+ category = list(
+ RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_SECURITY
+
/datum/design/inspector
name = "N-Spect Scanner"
desc = "Central Command-issued inspection device. Performs inspections according to Nanotrasen protocols when activated, then prints an encrypted report regarding the maintenance of the station. Definitely not giving you cancer."
diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm
index 85704c0c5b72e..deb2256ff10f0 100644
--- a/code/modules/research/designs/power_designs.dm
+++ b/code/modules/research/designs/power_designs.dm
@@ -4,12 +4,12 @@
/datum/design/basic_cell
name = "Basic Power Cell"
- desc = "A basic power cell that holds 1 MJ of energy."
+ desc = "A basic power cell that holds 10 KW of energy."
id = "basic_cell"
build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE |MECHFAB
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 0.5)
construction_time = 10 SECONDS
- build_path = /obj/item/stock_parts/cell/empty
+ build_path = /obj/item/stock_parts/power_store/cell/empty
category = list(
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1
)
@@ -17,38 +17,38 @@
/datum/design/high_cell
name = "High-Capacity Power Cell"
- desc = "A power cell that holds 10 MJ of energy."
+ desc = "A power cell that holds 100 KW of energy."
id = "high_cell"
build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE | MECHFAB
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.6)
construction_time = 10 SECONDS
- build_path = /obj/item/stock_parts/cell/high/empty
+ build_path = /obj/item/stock_parts/power_store/cell/high/empty
category = list(
- RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_2
+ RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1
)
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
/datum/design/super_cell
name = "Super-Capacity Power Cell"
- desc = "A power cell that holds 20 MJ of energy."
+ desc = "A power cell that holds 200 KW of energy."
id = "super_cell"
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.7)
construction_time = 10 SECONDS
- build_path = /obj/item/stock_parts/cell/super/empty
+ build_path = /obj/item/stock_parts/power_store/cell/super/empty
category = list(
- RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3
+ RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_2
)
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
/datum/design/hyper_cell
name = "Hyper-Capacity Power Cell"
- desc = "A power cell that holds 30 MJ of energy."
+ desc = "A power cell that holds 300 KW of energy."
id = "hyper_cell"
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.8)
construction_time = 10 SECONDS
- build_path = /obj/item/stock_parts/cell/hyper/empty
+ build_path = /obj/item/stock_parts/power_store/cell/hyper/empty
category = list(
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3
)
@@ -56,17 +56,83 @@
/datum/design/bluespace_cell
name = "Bluespace Power Cell"
- desc = "A power cell that holds 40 MJ of energy."
+ desc = "A power cell that holds 400 KW of energy."
id = "bluespace_cell"
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 8, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1.2, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 1.6, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 1.6, /datum/material/titanium =SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT)
construction_time = 10 SECONDS
- build_path = /obj/item/stock_parts/cell/bluespace/empty
+ build_path = /obj/item/stock_parts/power_store/cell/bluespace/empty
+ category = list(
+ RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_4
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
+
+/datum/design/basic_battery
+ name = "Basic Megacell"
+ desc = "A basic megacell that holds 1 MJ of energy."
+ id = "basic_battery"
+ build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE |MECHFAB
+ materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 12, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2)
+ construction_time = 10 SECONDS
+ build_path = /obj/item/stock_parts/power_store/battery/empty
+ category = list(
+ RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
+
+/datum/design/high_battery
+ name = "High-Capacity Megacell"
+ desc = "A megacell that holds 10 MJ of energy."
+ id = "high_battery"
+ build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE | MECHFAB
+ materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 12, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3)
+ construction_time = 10 SECONDS
+ build_path = /obj/item/stock_parts/power_store/battery/high/empty
+ category = list(
+ RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_2
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
+
+/datum/design/super_battery
+ name = "Super-Capacity Megacell"
+ desc = "A megacell that holds 20 MJ of energy."
+ id = "super_battery"
+ build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
+ materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 12, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 4)
+ construction_time = 10 SECONDS
+ build_path = /obj/item/stock_parts/power_store/battery/super/empty
+ category = list(
+ RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
+
+/datum/design/hyper_battery
+ name = "Hyper-Capacity Megacell"
+ desc = "A megacell that holds 30 MJ of energy."
+ id = "hyper_battery"
+ build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
+ materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 12, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5)
+ construction_time = 10 SECONDS
+ build_path = /obj/item/stock_parts/power_store/battery/hyper/empty
+ category = list(
+ RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
+
+/datum/design/bluespace_battery
+ name = "Bluespace Megacell"
+ desc = "A megacell that holds 40 MJ of energy."
+ id = "bluespace_battery"
+ build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
+ materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 12, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1.2, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 6, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 1.6, /datum/material/titanium =SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT)
+ construction_time = 10 SECONDS
+ build_path = /obj/item/stock_parts/power_store/battery/bluespace/empty
category = list(
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_4
)
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
+
/datum/design/inducer
name = "Inducer"
desc = "The NT-75 Electromagnetic Power Inducer can wirelessly induce electric charge in an object, allowing you to recharge power cells without having to remove them."
diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm
index 00c7dba3946bd..35d95d82d3047 100644
--- a/code/modules/research/designs/weapon_designs.dm
+++ b/code/modules/research/designs/weapon_designs.dm
@@ -218,8 +218,8 @@
autolathe_exportable = FALSE
/datum/design/beamrifle
- name = "Beam Marksman Rifle Part Kit (Lethal)"
- desc = "The gunkit for a powerful long ranged anti-material rifle that fires charged particle beams to obliterate targets."
+ name = "Event Horizon Anti-Existential Beam Rifle Part Kit (DOOMSDAY DEVICE)"
+ desc = "The kit that produces a weapon made to end your foes on an existential level. Why the fuck can you make this?"
id = "beamrifle"
build_type = PROTOLATHE | AWAY_LATHE
materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/diamond =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 4, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 2.25, /datum/material/gold =SHEET_MATERIAL_AMOUNT * 2.5)
@@ -230,7 +230,6 @@
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
autolathe_exportable = FALSE
-
/datum/design/rapidsyringe
name = "Rapid Syringe Gun"
desc = "A gun that fires many syringes."
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index 89c69b7334e40..affe82275ab14 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -60,7 +60,7 @@
/obj/machinery/rnd/experimentor/proc/generate_valid_items_and_item_reactions()
var/static/list/banned_typecache = typecacheof(list(
- /obj/item/stock_parts/cell/infinite,
+ /obj/item/stock_parts/power_store/cell/infinite,
/obj/item/grenade/chem_grenade/tuberculosis
))
diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm
index 04c777bb1c073..c69de9bb2d9c1 100644
--- a/code/modules/research/machinery/_production.dm
+++ b/code/modules/research/machinery/_production.dm
@@ -21,8 +21,11 @@
var/stripe_color = null
///direction we output onto (if 0, on top of us)
var/drop_direction = 0
+ //looping sound for printing items
+ var/datum/looping_sound/lathe_print/print_sound
/obj/machinery/rnd/production/Initialize(mapload)
+ print_sound = new(src, FALSE)
materials = AddComponent(
/datum/component/remote_materials, \
mapload, \
@@ -48,6 +51,7 @@
update_icon(UPDATE_OVERLAYS)
/obj/machinery/rnd/production/Destroy()
+ QDEL_NULL(print_sound)
materials = null
cached_designs = null
return ..()
@@ -74,6 +78,7 @@
return
. += span_notice("Material usage cost at [efficiency_coeff * 100]%")
+ . += span_notice("Build time at [efficiency_coeff * 100]%")
if(drop_direction)
. += span_notice("Currently configured to drop printed objects [dir2text(drop_direction)].")
. += span_notice("[EXAMINE_HINT("Alt-click")] to reset.")
@@ -341,11 +346,12 @@
for(var/material in design.materials)
charge_per_item += design.materials[material]
charge_per_item = ROUND_UP((charge_per_item / (MAX_STACK_SIZE * SHEET_MATERIAL_AMOUNT)) * coefficient * active_power_usage)
- var/build_time_per_item = (design.construction_time * design.lathe_time_factor) ** 0.8
+ var/build_time_per_item = (design.construction_time * design.lathe_time_factor * efficiency_coeff) ** 0.8
//start production
busy = TRUE
SStgui.update_uis(src)
+ print_sound.start()
if(production_animation)
icon_state = production_animation
var/turf/target_location
@@ -411,14 +417,27 @@
var/atom/movable/created
if(is_stack)
- created = new design.build_path(target, items_remaining)
+ var/obj/item/stack/stack_item = initial(design.build_path)
+ var/max_stack_amount = initial(stack_item.max_amount)
+ var/number_to_make = (initial(stack_item.amount) * items_remaining)
+ while(number_to_make > max_stack_amount)
+ created = new stack_item(null, max_stack_amount) //it's imporant to spawn things in nullspace, since obj's like stacks qdel when they enter a tile/merge with other stacks of the same type, resulting in runtimes.
+ if(isitem(created))
+ created.pixel_x = created.base_pixel_x + rand(-6, 6)
+ created.pixel_y = created.base_pixel_y + rand(-6, 6)
+ created.forceMove(target)
+ number_to_make -= max_stack_amount
+
+ created = new stack_item(null, number_to_make)
else
- created = new design.build_path(target)
+ created = new design.build_path(null)
split_materials_uniformly(design_materials, material_cost_coefficient, created)
- created.pixel_x = created.base_pixel_x + rand(-6, 6)
- created.pixel_y = created.base_pixel_y + rand(-6, 6)
+ if(isitem(created))
+ created.pixel_x = created.base_pixel_x + rand(-6, 6)
+ created.pixel_y = created.base_pixel_y + rand(-6, 6)
SSblackbox.record_feedback("nested tally", "lathe_printed_items", 1, list("[type]", "[created.type]"))
+ created.forceMove(target)
if(is_stack)
items_remaining = 0
@@ -434,7 +453,7 @@
/// Called at the end of do_make_item's timer loop
/obj/machinery/rnd/production/proc/finalize_build()
PROTECTED_PROC(TRUE)
-
+ print_sound.stop()
busy = FALSE
SStgui.update_uis(src)
icon_state = initial(icon_state)
diff --git a/code/modules/research/ordnance/scipaper_partner.dm b/code/modules/research/ordnance/scipaper_partner.dm
index 712ec4b4127e9..7120c78cecde9 100644
--- a/code/modules/research/ordnance/scipaper_partner.dm
+++ b/code/modules/research/ordnance/scipaper_partner.dm
@@ -4,12 +4,11 @@
accepted_experiments = list(/datum/experiment/ordnance/explosive/lowyieldbomb)
multipliers = list(SCIPAPER_COOPERATION_INDEX = 0.75, SCIPAPER_FUNDING_INDEX = 0.75)
boostable_nodes = list(
- "bluespace_basic" = 2000,
- "NVGtech" = 1500,
- "practical_bluespace" = 2500,
- "basic_plasma" = 2000,
- "basic_mining" = 2000,
- "adv_mining" = 2000,
+ TECHWEB_NODE_BLUESPACE_THEORY = TECHWEB_TIER_3_POINTS,
+ TECHWEB_NODE_NIGHT_VISION = TECHWEB_TIER_2_POINTS,
+ TECHWEB_NODE_ANOMALY_RESEARCH = TECHWEB_TIER_2_POINTS,
+ TECHWEB_NODE_MINING = TECHWEB_TIER_1_POINTS,
+ TECHWEB_NODE_MINING_ADV = TECHWEB_TIER_2_POINTS,
)
/datum/scientific_partner/baron
@@ -17,8 +16,8 @@
flufftext = "A nearby research station ran by a very wealthy captain seems to be struggling with their scientific output. They might reward us handsomely if we ghostwrite for them."
multipliers = list(SCIPAPER_COOPERATION_INDEX = 0.25, SCIPAPER_FUNDING_INDEX = 2)
boostable_nodes = list(
- "comp_recordkeeping" = 500,
- "computer_data_disks" = 500,
+ TECHWEB_NODE_CONSOLES = TECHWEB_TIER_1_POINTS,
+ TECHWEB_NODE_FUNDIMENTAL_SCI = TECHWEB_TIER_1_POINTS,
)
/datum/scientific_partner/defense
@@ -30,14 +29,11 @@
/datum/experiment/ordnance/explosive/hydrogenbomb,
)
boostable_nodes = list(
- "adv_weaponry" = 5000,
- "weaponry" = 2500,
- "sec_basic" = 1250,
- "explosive_weapons" = 1250,
- "electronic_weapons" = 1250,
- "radioactive_weapons" = 1250,
- "beam_weapons" = 1250,
- "explosive_weapons" = 1250,
+ TECHWEB_NODE_RIOT_SUPRESSION = TECHWEB_TIER_3_POINTS,
+ TECHWEB_NODE_SEC_EQUIP = TECHWEB_TIER_1_POINTS,
+ TECHWEB_NODE_EXPLOSIVES = TECHWEB_TIER_2_POINTS,
+ TECHWEB_NODE_ELECTRIC_WEAPONS = TECHWEB_TIER_2_POINTS,
+ TECHWEB_NODE_BEAM_WEAPONS = TECHWEB_TIER_3_POINTS,
)
/datum/scientific_partner/medical
@@ -48,12 +44,12 @@
/datum/experiment/ordnance/gaseous/bz,
)
boostable_nodes = list(
- "cyber_organs" = 750,
- "cyber_organs_upgraded" = 1000,
- "genetics" = 500,
- "subdermal_implants" = 1250,
- "adv_biotech" = 1000,
- "biotech" = 1000,
+ TECHWEB_NODE_CYBER_ORGANS = TECHWEB_TIER_1_POINTS,
+ TECHWEB_NODE_CYBER_ORGANS_UPGRADED = TECHWEB_TIER_2_POINTS,
+ TECHWEB_NODE_GENE_ENGINEERING = TECHWEB_TIER_1_POINTS,
+ TECHWEB_NODE_PASSIVE_IMPLANTS = TECHWEB_TIER_1_POINTS,
+ TECHWEB_NODE_BIO_SCAN = TECHWEB_TIER_1_POINTS,
+ TECHWEB_NODE_CHEM_SYNTHESIS = TECHWEB_TIER_2_POINTS,
)
/datum/scientific_partner/physics
@@ -64,11 +60,8 @@
/datum/experiment/ordnance/explosive/nobliumbomb,
)
boostable_nodes = list(
- "engineering" = 5000,
- "adv_engi" = 5000,
- "emp_super" = 3000,
- "emp_adv" = 1250,
- "high_efficiency" = 5000,
- "micro_bluespace" = 5000,
- "adv_power" = 1500,
+ TECHWEB_NODE_PARTS_UPG = TECHWEB_TIER_2_POINTS,
+ TECHWEB_NODE_EXP_TOOLS = TECHWEB_TIER_4_POINTS,
+ TECHWEB_NODE_PARTS_BLUESPACE = TECHWEB_TIER_3_POINTS,
+ TECHWEB_NODE_PARTS_ADV = TECHWEB_TIER_1_POINTS,
)
diff --git a/code/modules/research/ordnance/tank_compressor.dm b/code/modules/research/ordnance/tank_compressor.dm
index 830c004acad5e..d0393d9e10374 100644
--- a/code/modules/research/ordnance/tank_compressor.dm
+++ b/code/modules/research/ordnance/tank_compressor.dm
@@ -321,10 +321,6 @@
data["transferRate"] = transfer_rate
data["lastPressure"] = last_recorded_pressure
- data["inputData"] = gas_mixture_parser(airs[2], "Input Port")
- data["outputData"] = gas_mixture_parser(airs[1], "Ouput Port")
- data["bufferData"] = gas_mixture_parser(leaked_gas_buffer, "Gas Buffer")
-
data["disk"] = inserted_disk?.name
data["storage"] = "[inserted_disk?.used_capacity] / [inserted_disk?.max_capacity] GQ"
data["records"] = list()
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 1bd0d3560beed..79a97b40a6bc5 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -154,16 +154,16 @@
if(HDD_OVERLOADED)
. += "The front panel is dangling open. The hdd inside is destroyed and the wires are all burned."
-/obj/machinery/rnd/server/master/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/machinery/rnd/server/master/tool_act(mob/living/user, obj/item/tool, list/modifiers)
if(!tool.tool_behaviour)
- return NONE
+ return ..()
// Only antags are given the training and knowledge to disassemble this thing.
if(!is_special_character(user))
if(user.combat_mode)
return ITEM_INTERACT_SKIP_TO_ATTACK
balloon_alert(user, "you can't find an obvious maintenance hatch!")
return ITEM_INTERACT_BLOCKING
- return NONE
+ return ..()
/obj/machinery/rnd/server/master/attackby(obj/item/attacking_item, mob/user, params)
if(istype(attacking_item, /obj/item/computer_disk/hdd_theft))
diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm
index 3c7b48cef519b..46bd8746663b8 100644
--- a/code/modules/research/stock_parts.dm
+++ b/code/modules/research/stock_parts.dm
@@ -95,8 +95,8 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good
/obj/item/storage/part_replacer/bluespace/proc/on_part_entered(datum/source, obj/item/inserted_component)
SIGNAL_HANDLER
- if(istype(inserted_component, /obj/item/stock_parts/cell))
- var/obj/item/stock_parts/cell/inserted_cell = inserted_component
+ if(istype(inserted_component, /obj/item/stock_parts/power_store))
+ var/obj/item/stock_parts/power_store/inserted_cell = inserted_component
if(inserted_cell.rigged || inserted_cell.corrupted)
message_admins("[ADMIN_LOOKUPFLW(usr)] has inserted rigged/corrupted [inserted_cell] into [src].")
usr.log_message("has inserted rigged/corrupted [inserted_cell] into [src].", LOG_GAME)
@@ -144,7 +144,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good
new /obj/item/stock_parts/servo(src)
new /obj/item/stock_parts/micro_laser(src)
new /obj/item/stock_parts/matter_bin(src)
- new /obj/item/stock_parts/cell/high(src)
+ new /obj/item/stock_parts/power_store/cell/high(src)
/obj/item/storage/part_replacer/bluespace/tier2
@@ -155,7 +155,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good
new /obj/item/stock_parts/servo/nano(src)
new /obj/item/stock_parts/micro_laser/high(src)
new /obj/item/stock_parts/matter_bin/adv(src)
- new /obj/item/stock_parts/cell/super(src)
+ new /obj/item/stock_parts/power_store/cell/super(src)
/obj/item/storage/part_replacer/bluespace/tier3
@@ -166,7 +166,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good
new /obj/item/stock_parts/servo/pico(src)
new /obj/item/stock_parts/micro_laser/ultra(src)
new /obj/item/stock_parts/matter_bin/super(src)
- new /obj/item/stock_parts/cell/hyper(src)
+ new /obj/item/stock_parts/power_store/cell/hyper(src)
/obj/item/storage/part_replacer/bluespace/tier4
@@ -177,7 +177,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good
new /obj/item/stock_parts/servo/femto(src)
new /obj/item/stock_parts/micro_laser/quadultra(src)
new /obj/item/stock_parts/matter_bin/bluespace(src)
- new /obj/item/stock_parts/cell/bluespace(src)
+ new /obj/item/stock_parts/power_store/cell/bluespace(src)
/obj/item/storage/part_replacer/cargo //used in a cargo crate
diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm
index b4b137d8e2187..3c920f6b9a6fe 100644
--- a/code/modules/research/techweb/_techweb.dm
+++ b/code/modules/research/techweb/_techweb.dm
@@ -108,7 +108,7 @@
/datum/techweb/proc/add_point_list(list/pointlist)
for(var/i in pointlist)
if((i in SSresearch.point_types) && pointlist[i] > 0)
- research_points[i] += pointlist[i]
+ research_points[i] = FLOOR(research_points[i] + pointlist[i], 0.1)
/datum/techweb/proc/add_points_all(amount)
var/list/l = SSresearch.point_types.Copy()
@@ -119,7 +119,7 @@
/datum/techweb/proc/remove_point_list(list/pointlist)
for(var/i in pointlist)
if((i in SSresearch.point_types) && pointlist[i] > 0)
- research_points[i] = max(0, research_points[i] - pointlist[i])
+ research_points[i] = FLOOR(max(0, research_points[i] - pointlist[i]), 0.1)
/datum/techweb/proc/remove_points_all(amount)
var/list/l = SSresearch.point_types.Copy()
@@ -130,7 +130,7 @@
/datum/techweb/proc/modify_point_list(list/pointlist)
for(var/i in pointlist)
if((i in SSresearch.point_types) && pointlist[i] != 0)
- research_points[i] = max(0, research_points[i] + pointlist[i])
+ research_points[i] = FLOOR(max(0, research_points[i] + pointlist[i]), 0.1)
/datum/techweb/proc/modify_points_all(amount)
var/list/l = SSresearch.point_types.Copy()
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
deleted file mode 100644
index 1c6e6f2b9f7ee..0000000000000
--- a/code/modules/research/techweb/all_nodes.dm
+++ /dev/null
@@ -1,2498 +0,0 @@
-
-//Current rate: 135000 research points in 90 minutes
-
-//Base Nodes
-/datum/techweb_node/base
- id = "base"
- starting_node = TRUE
- display_name = "Basic Research Technology"
- description = "NT default research technologies."
- // Default research tech, prevents bricking
- design_ids = list(
- "basic_capacitor",
- "basic_cell",
- "basic_matter_bin",
- "basic_micro_laser",
- "basic_scanning",
- "blast",
- "bounced_radio",
- "bowl",
- "bucket",
- "c-reader",
- "c38_rubber",
- "camera_assembly",
- "camera_film",
- "camera",
- "capbox",
- "chisel",
- "circuit_imprinter_offstation",
- "circuit_imprinter",
- "circuit",
- "circuitgreen",
- "circuitred",
- "coffee_cartridge",
- "coffeemaker",
- "coffeepot",
- "condenser",
- "conveyor_belt",
- "conveyor_switch",
- "custom_vendor_refill",
- "destructive_analyzer",
- "destructive_scanner",
- "desttagger",
- "doppler_array",
- "drinking_glass",
- "earmuffs",
- "electropack",
- "experi_scanner",
- "experimentor",
- "extinguisher",
- "fax",
- "fish_case",
- "fishing_rod",
- "fishing_portal_generator",
- "flashlight",
- "fluid_ducts",
- "foam_dart",
- "fork",
- "gas_filter",
- "handcuffs_s",
- "handlabel",
- "health_sensor",
- "holodisk",
- "igniter",
- "infrared_emitter",
- "intercom_frame",
- "kitchen_knife",
- "laptop",
- "light_bulb",
- "light_replacer",
- "light_tube",
- "mechfab",
- "micro_servo",
- "miniature_power_cell",
- "newscaster_frame",
- "oven_tray",
- "packagewrap",
- "pet_carrier",
- "plasmaglass",
- "plasmaman_gas_filter",
- "plasmareinforcedglass",
- "plasteel",
- "plastic_fork",
- "plastic_knife",
- "plastic_spoon",
- "plastitanium",
- "plastitaniumglass",
- "plate",
- "prox_sensor",
- "radio_headset",
- "rdconsole",
- "rdserver",
- "rdservercontrol",
- "recorder",
- "rglass",
- "roll",
- "sec_38",
- "sec_beanbag_slug",
- "sec_dart",
- "sec_Islug",
- "sec_rshot",
- "sec_pen",
- "servingtray",
- "shaker",
- "shot_glass",
- "signaler",
- "slime_scanner",
- "solar_panel",
- "solar_tracker",
- "souppot",
- "space_heater",
- "spoon",
- "status_display_frame",
- "sticky_tape",
- "syrup_bottle",
- "tape",
- "tech_disk",
- "timer",
- "titaniumglass",
- "toner_large",
- "toner",
- "tongs",
- "toy_armblade",
- "toy_balloon",
- "toygun",
- "tram_floor_dark",
- "tram_floor_light",
- "trapdoor_electronics",
- "turbine_part_compressor",
- "turbine_part_rotor",
- "turbine_part_stator",
- "turret_control",
- "universal_scanner",
- "voice_analyzer",
- "watering_can",
- )
- experiments_to_unlock = list(
- /datum/experiment/autopsy/nonhuman,
- /datum/experiment/scanning/random/material/medium/one,
- /datum/experiment/scanning/random/material/medium/three,
- /datum/experiment/scanning/random/material/hard/one,
- /datum/experiment/scanning/random/material/hard/two,
- /datum/experiment/scanning/people/novel_organs,
- )
-
-/datum/techweb_node/mmi
- id = "mmi"
- starting_node = TRUE
- display_name = "Man Machine Interface"
- description = "A slightly Frankensteinian device that allows human brains to interface natively with software APIs."
- design_ids = list(
- "mmi",
- )
-
-/datum/techweb_node/cyborg
- id = "cyborg"
- starting_node = TRUE
- display_name = "Cyborg Construction"
- description = "Sapient robots with preloaded tool modules and programmable laws."
- design_ids = list(
- "borg_chest",
- "borg_head",
- "borg_l_arm",
- "borg_l_leg",
- "borg_r_arm",
- "borg_r_leg",
- "borg_suit",
- "borg_upgrade_rename",
- "borg_upgrade_restart",
- "borgupload",
- "cyborgrecharger",
- "robocontrol",
- "sflash",
- )
-
-/datum/techweb_node/mech
- id = "mecha"
- starting_node = TRUE
- display_name = "Mechanical Exosuits"
- description = "Mechanized exosuits that are several magnitudes stronger and more powerful than the average human."
- design_ids = list(
- "mech_recharger",
- "mecha_tracking",
- "mechacontrol",
- "mechapower",
- "ripley_chassis",
- "ripley_left_arm",
- "ripley_left_leg",
- "ripley_main",
- "ripley_peri",
- "ripley_right_arm",
- "ripley_right_leg",
- "ripley_torso",
- "ripleyupgrade",
- "mech_hydraulic_clamp",
- "mech_radio",
- "mech_air_tank",
- "mech_thrusters",
- )
-
-/datum/techweb_node/mod_basic
- id = "mod"
- starting_node = TRUE
- display_name = "Basic Modular Suits"
- description = "Specialized back mounted power suits with various different modules."
- design_ids = list(
- "mod_boots",
- "mod_chestplate",
- "mod_gauntlets",
- "mod_helmet",
- "mod_paint_kit",
- "mod_shell",
- "mod_plating_standard",
- "mod_storage",
- "mod_welding",
- "mod_safety",
- "mod_mouthhole",
- "mod_flashlight",
- "mod_longfall",
- "mod_thermal_regulator",
- "mod_plasma",
- "mod_sign_radio",
- )
-
-/datum/techweb_node/mech_tools
- id = "mech_tools"
- starting_node = TRUE
- display_name = "Basic Exosuit Equipment"
- description = "Various tools fit for basic mech units"
- design_ids = list(
- "mech_drill",
- "mech_extinguisher",
- "mech_mscanner",
- )
-
-/datum/techweb_node/basic_tools
- id = "basic_tools"
- starting_node = TRUE
- display_name = "Basic Tools"
- description = "Basic mechanical, electronic, surgical and botanical tools."
- design_ids = list(
- "airlock_painter",
- "analyzer",
- "boxcutter",
- "cable_coil",
- "cable_coil",
- "crowbar",
- "cultivator",
- "decal_painter",
- "hatchet",
- "mop",
- "multitool",
- "normtrash",
- "pipe_painter",
- "plant_analyzer",
- "plunger",
- "pushbroom",
- "rwd",
- "razor",
- "screwdriver",
- "secateurs",
- "shovel",
- "spade",
- "spraycan",
- "tile_sprayer",
- "tscanner",
- "welding_helmet",
- "welding_tool",
- "wirebrush",
- "wirecutters",
- "wrench",
- "pickaxe",
- )
-
-/datum/techweb_node/basic_medical
- id = "basic_medical"
- starting_node = TRUE
- display_name = "Basic Medical Equipment"
- description = "Basic medical tools and equipment."
- design_ids = list(
- "beaker",
- "biopsy_tool",
- "blood_filter",
- "bonesetter",
- "cautery",
- "circular_saw",
- "cybernetic_ears",
- "cybernetic_eyes",
- "cybernetic_eyes_moth",
- "cybernetic_heart",
- "cybernetic_liver",
- "cybernetic_lungs",
- "cybernetic_stomach",
- "defibmountdefault",
- "dropper",
- "hemostat",
- "large_beaker",
- "medicalbed",
- "mmi_m",
- "operating",
- "petri_dish",
- "pillbottle",
- "plumbing_rcd",
- "plumbing_rcd_service",
- "plumbing_rcd_sci",
- "portable_chem_mixer",
- "penlight",
- "retractor",
- "scalpel",
- "stethoscope",
- "surgical_drapes",
- "surgical_tape",
- "surgicaldrill",
- "swab",
- "syringe",
- "xlarge_beaker",
- )
-
-/datum/techweb_node/basic_circuitry
- id = "basic_circuitry"
- starting_node = TRUE
- display_name = "Basic Integrated Circuits"
- description = "Research on how to fully exploit the power of integrated circuits"
- design_ids = list(
- "circuit_multitool",
- "comp_access_checker",
- "comp_arctan2",
- "comp_arithmetic",
- "comp_assoc_list_pick",
- "comp_assoc_list_remove",
- "comp_assoc_list_set",
- "comp_binary_convert",
- "comp_clock",
- "comp_comparison",
- "comp_concat",
- "comp_concat_list",
- "comp_decimal_convert",
- "comp_delay",
- "comp_direction",
- "comp_element_find",
- "comp_filter_list",
- "comp_foreach",
- "comp_format",
- "comp_format_assoc",
- "comp_get_column",
- "comp_gps",
- "comp_health",
- "comp_health_state",
- "comp_hear",
- "comp_id_access_reader",
- "comp_id_getter",
- "comp_id_info_reader",
- "comp_index",
- "comp_index_assoc",
- "comp_index_table",
- "comp_laserpointer",
- "comp_length",
- "comp_light",
- "comp_list_add",
- "comp_list_assoc_literal",
- "comp_list_clear",
- "comp_list_literal",
- "comp_list_pick",
- "comp_list_remove",
- "comp_logic",
- "comp_matscanner",
- "comp_mmi",
- "comp_module",
- "comp_multiplexer",
- "comp_not",
- "comp_ntnet_receive",
- "comp_ntnet_send",
- "comp_ntnet_send_list_literal",
- "comp_pinpointer",
- "comp_pressuresensor",
- "comp_radio",
- "comp_random",
- "comp_reagents",
- "comp_router",
- "comp_select_query",
- "comp_self",
- "comp_set_variable_trigger",
- "comp_soundemitter",
- "comp_species",
- "comp_speech",
- "comp_speech",
- "comp_split",
- "comp_string_contains",
- "comp_tempsensor",
- "comp_textcase",
- "comp_timepiece",
- "comp_toggle",
- "comp_tonumber",
- "comp_tostring",
- "comp_trigonometry",
- "comp_typecast",
- "comp_typecheck",
- "comp_view_sensor",
- "compact_remote_shell",
- "component_printer",
- "integrated_circuit",
- "module_duplicator",
- "usb_cable"
- )
-
-/////////////////////////Biotech/////////////////////////
-
-/datum/techweb_node/biotech
- id = "biotech"
- display_name = "Biological Technology"
- description = "What makes us tick." //the MC, silly!
- prereq_ids = list("base")
- design_ids = list(
- "beer_dispenser",
- "blood_pack",
- "chem_dispenser",
- "chem_heater",
- "chem_mass_spec",
- "chem_master",
- "chem_pack",
- "defibmount",
- "defibrillator",
- "genescanner",
- "healthanalyzer",
- "med_spray_bottle",
- "medical_kiosk",
- "medigel",
- "medipen_refiller",
- "pandemic",
- "penlight_paramedic",
- "soda_dispenser",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
- required_experiments = list(/datum/experiment/autopsy/human)
-
-/datum/techweb_node/adv_biotech
- id = "adv_biotech"
- display_name = "Advanced Biotechnology"
- description = "Advanced Biotechnology"
- prereq_ids = list("biotech")
- design_ids = list(
- "autopsyscanner",
- "crewpinpointer",
- "defibrillator_compact",
- "harvester",
- "healthanalyzer_advanced",
- "holobarrier_med",
- "limbgrower",
- "meta_beaker",
- "ph_meter",
- "piercesyringe",
- "plasmarefiller",
- "smoke_machine",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
- required_experiments = list(/datum/experiment/autopsy/nonhuman)
- discount_experiments = list(/datum/experiment/scanning/random/material/meat = 4000)
-
-/datum/techweb_node/xenoorgan_biotech
- id = "xenoorgan_bio"
- display_name = "Xeno-organ Biology"
- description = "Plasmaman, Ethereals, Lizardpeople... What makes our non-human crewmembers tick?"
- prereq_ids = list("adv_biotech")
- design_ids = list(
- "limbdesign_ethereal",
- "limbdesign_felinid",
- "limbdesign_lizard",
- "limbdesign_plasmaman",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 6500)
- discount_experiments = list(
- /datum/experiment/scanning/random/cytology/easy = 1000,
- /datum/experiment/scanning/points/slime/hard = 5000,
- /datum/experiment/autopsy/xenomorph = 5000,
- )
-
-/datum/techweb_node/morphological_theory
- id = "morphological_theory"
- display_name = "Anomalous Morphology"
- description = "Use poorly understood energies to change your body."
- prereq_ids = list("adv_biotech", "anomaly_research")
- design_ids = list("polymorph_belt")
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
- discount_experiments = list(
- /datum/experiment/scanning/people/novel_organs = 5000,
- )
-
-/datum/techweb_node/bio_process
- id = "bio_process"
- display_name = "Biological Processing"
- description = "From slimes to kitchens."
- prereq_ids = list("biotech")
- design_ids = list(
- "deepfryer",
- "dish_drive",
- "fat_sucker",
- "gibber",
- "griddle",
- "microwave",
- "microwave_engineering",
- "monkey_recycler",
- "oven",
- "processor",
- "range", // should be in a further node, probably
- "reagentgrinder",
- "smartfridge",
- "stove",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000)
- discount_experiments = list(/datum/experiment/scanning/random/cytology = 3000) //Big discount to reinforce doing it.
-
-/datum/techweb_node/marine_util
- id = "marine_util"
- display_name = "Marine Utility"
- description = "Fish are nice to look at and all, but they can be put to use."
- prereq_ids = list("bio_process")
- design_ids = list(
- "bioelec_gen",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000)
- // only available if you've done the first fishing experiment (thus unlocking fishing tech), but not a strict requirement to get the tech
- discount_experiments = list(/datum/experiment/scanning/fish/second = 3000)
-
-/////////////////////////Advanced Surgery/////////////////////////
-
-/datum/techweb_node/imp_wt_surgery
- id = "imp_wt_surgery"
- display_name = "Improved Wound-Tending Surgery"
- description = "Who would have known being more gentle with a hemostat decreases patient pain?"
- prereq_ids = list("biotech")
- design_ids = list(
- "surgery_heal_brute_upgrade",
- "surgery_heal_burn_upgrade",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
-
-/datum/techweb_node/oldstation_surgery
- id = "oldstation_surgery"
- display_name = "Experimental Dissection"
- description = "Grants access to experimental dissections, which allows generation of research points."
- design_ids = list(
- "surgery_oldstation_dissection",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500)
- hidden = TRUE
- show_on_wiki = FALSE
-
-/datum/techweb_node/adv_surgery
- id = "adv_surgery"
- display_name = "Advanced Surgery"
- description = "When simple medicine doesn't cut it."
- prereq_ids = list("imp_wt_surgery")
- design_ids = list(
- "surgery_heal_brute_upgrade_femto",
- "surgery_heal_burn_upgrade_femto",
- "surgery_heal_combo",
- "surgery_lobotomy",
- "surgery_wing_reconstruction",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
-
-/datum/techweb_node/exp_surgery
- id = "exp_surgery"
- display_name = "Experimental Surgery"
- description = "When evolution isn't fast enough."
- prereq_ids = list("adv_surgery")
- design_ids = list(
- "surgery_cortex_folding",
- "surgery_cortex_imprint",
- "surgery_heal_combo_upgrade",
- "surgery_ligament_hook",
- "surgery_ligament_reinforcement",
- "surgery_muscled_veins",
- "surgery_nerve_ground",
- "surgery_nerve_splice",
- "surgery_pacify",
- "surgery_vein_thread",
- "surgery_viral_bond",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500)
- discount_experiments = list(/datum/experiment/scanning/random/plants/traits = 4500)
-
-/datum/techweb_node/alien_surgery
- id = "alien_surgery"
- display_name = "Alien Surgery"
- description = "Abductors did nothing wrong."
- prereq_ids = list("exp_surgery", "alientech")
- design_ids = list(
- "surgery_brainwashing",
- "surgery_heal_combo_upgrade_femto",
- "surgery_zombie",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000)
-
-/////////////////////////data theory tech/////////////////////////
-
-/datum/techweb_node/datatheory //Computer science
- id = "datatheory"
- display_name = "Data Theory"
- description = "Big Data, in space!"
- prereq_ids = list("base")
- design_ids = list(
- "bounty_pad",
- "bounty_pad_control",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-
-/////////////////////////engineering tech/////////////////////////
-
-/datum/techweb_node/engineering
- id = "engineering"
- display_name = "Industrial Engineering"
- description = "A refresher course on modern engineering technology."
- prereq_ids = list("base")
- design_ids = list(
- "adv_capacitor",
- "adv_matter_bin",
- "adv_scanning",
- "airalarm_electronics",
- "airlock_board",
- "anomaly_refinery",
- "apc_control",
- "atmos_control",
- "atmos_thermal",
- "atmosalerts",
- "autolathe",
- "cell_charger",
- "crystallizer",
- "electrolyzer",
- "emergency_oxygen_engi",
- "emergency_oxygen",
- "emitter",
- "mass_driver",
- "firealarm_electronics",
- "firelock_board",
- "generic_tank",
- "grounding_rod",
- "high_cell",
- "high_micro_laser",
- "mesons",
- "nano_servo",
- "oxygen_tank",
- "pacman",
- "plasma_tank",
- "plasmaman_tank_belt",
- "pneumatic_seal",
- "power_control",
- "powermonitor",
- "recharger",
- "recycler",
- "rped",
- "scanner_gate",
- "solarcontrol",
- "stack_console",
- "stack_machine",
- "suit_storage_unit",
- "tank_compressor",
- "tesla_coil",
- "thermomachine",
- "w-recycler",
- "welding_goggles",
- "flatpacker",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 12500)
- discount_experiments = list(/datum/experiment/scanning/random/material/easy = 7500)
- experiments_to_unlock = list(/datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_microlaser)
-
-/datum/techweb_node/adv_engi
- id = "adv_engi"
- display_name = "Advanced Engineering"
- description = "Pushing the boundaries of physics, one chainsaw-fist at a time."
- prereq_ids = list("engineering", "emp_basic")
- design_ids = list(
- "HFR_core",
- "HFR_corner",
- "HFR_fuel_input",
- "HFR_interface",
- "HFR_moderator_input",
- "HFR_waste_output",
- "engine_goggles",
- "forcefield_projector",
- "magboots",
- "rcd_loaded",
- "rcd_ammo",
- "rpd_loaded",
- "rtd_loaded",
- "sheetifier",
- "weldingmask",
- "bolter_wrench",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 15000)
- discount_experiments = list(
- /datum/experiment/scanning/random/material/medium/one = 4000,
- /datum/experiment/ordnance/gaseous/bz = 10000,
- )
-
-/datum/techweb_node/anomaly
- id = "anomaly_research"
- display_name = "Anomaly Research"
- description = "Unlock the potential of the mysterious anomalies that appear on station."
- prereq_ids = list("adv_engi", "practical_bluespace")
- design_ids = list(
- "anomaly_neutralizer",
- "reactive_armour",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
-
-/datum/techweb_node/high_efficiency
- id = "high_efficiency"
- display_name = "High Efficiency Parts"
- description = "Finely-tooled manufacturing techniques allowing for picometer-perfect precision levels."
- prereq_ids = list("engineering", "datatheory")
- design_ids = list(
- "pico_servo",
- "super_matter_bin",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500)
- discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier2_lathes = 5000)
-
-/datum/techweb_node/adv_power
- id = "adv_power"
- display_name = "Advanced Power Manipulation"
- description = "How to get more zap."
- prereq_ids = list("engineering")
- design_ids = list(
- "hyper_cell",
- "power_turbine_console",
- "smes",
- "super_capacitor",
- "super_cell",
- "turbine_compressor",
- "turbine_rotor",
- "turbine_stator",
- "modular_shield_generator",
- "modular_shield_node",
- "modular_shield_relay",
- "modular_shield_charger",
- "modular_shield_well",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3500)
- discount_experiments = list(/datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_capacitors = 2500)
-
-/////////////////////////Bluespace tech/////////////////////////
-/datum/techweb_node/bluespace_basic //Bluespace-memery
- id = "bluespace_basic"
- display_name = "Basic Bluespace Theory"
- description = "Basic studies into the mysterious alternate dimension known as bluespace."
- prereq_ids = list("base")
- design_ids = list(
- "beacon",
- "bluespace_crystal",
- "telesci_gps",
- "xenobioconsole",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/bluespace_travel
- id = "bluespace_travel"
- display_name = "Bluespace Travel"
- description = "Application of Bluespace for static teleportation technology."
- prereq_ids = list("practical_bluespace")
- design_ids = list(
- "bluespace_pod",
- "launchpad",
- "launchpad_console",
- "quantumpad",
- "tele_hub",
- "tele_station",
- "teleconsole",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
- discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_bluespacemachines = 4000)
-
-/datum/techweb_node/micro_bluespace
- id = "micro_bluespace"
- display_name = "Miniaturized Bluespace Research"
- description = "Extreme reduction in space required for bluespace engines, leading to portable bluespace technology."
- prereq_ids = list("bluespace_travel", "practical_bluespace", "high_efficiency")
- design_ids = list(
- "bluespace_matter_bin",
- "bluespacebodybag",
- "medicalbed_emergency",
- "femto_servo",
- "quantum_keycard",
- "swapper",
- "triphasic_scanning",
- "wormholeprojector",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000)
- discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_variety = 5000)
- /* /datum/experiment/exploration_scan/random/condition) this should have a point cost but im not even sure the experiment works properly lmao*/
-
-/datum/techweb_node/advanced_bluespace
- id = "bluespace_storage"
- display_name = "Advanced Bluespace Storage"
- description = "With the use of bluespace we can create even more advanced storage devices than we could have ever done"
- prereq_ids = list("micro_bluespace", "janitor")
- design_ids = list(
- "bag_holding",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
-
-/datum/techweb_node/practical_bluespace
- id = "practical_bluespace"
- display_name = "Applied Bluespace Research"
- description = "Using bluespace to make things faster and better."
- prereq_ids = list("bluespace_basic", "engineering")
- design_ids = list(
- "bluespacebeaker",
- "bluespacesyringe",
- "bluespace_coffeepot",
- "bs_rped",
- "minerbag_holding",
- "ore_silo",
- "phasic_scanning",
- "plumbing_receiver",
- "roastingstick",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
- discount_experiments = list(/datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_scanmodules = 3500)
-
-/datum/techweb_node/bluespace_power
- id = "bluespace_power"
- display_name = "Bluespace Power Technology"
- description = "Even more powerful.. power!"
- prereq_ids = list("adv_power", "practical_bluespace")
- design_ids = list(
- "bluespace_cell",
- "quadratic_capacitor",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000)
- discount_experiments = list(/datum/experiment/scanning/points/machinery_pinpoint_scan/tier3_cells = 3000)
-
-/datum/techweb_node/unregulated_bluespace
- id = "unregulated_bluespace"
- display_name = "Unregulated Bluespace Research"
- description = "Bluespace technology using unstable or unbalanced procedures, prone to damaging the fabric of bluespace. Outlawed by galactic conventions."
- prereq_ids = list("bluespace_travel", "syndicate_basic")
- design_ids = list(
- "desynchronizer",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-
-/////////////////////////plasma tech/////////////////////////
-/datum/techweb_node/basic_plasma
- id = "basic_plasma"
- display_name = "Basic Plasma Research"
- description = "Research into the mysterious and dangerous substance, plasma."
- prereq_ids = list("engineering")
- design_ids = list(
- "mech_generator",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/adv_plasma
- id = "adv_plasma"
- display_name = "Advanced Plasma Research"
- description = "Research on how to fully exploit the power of plasma."
- prereq_ids = list("basic_plasma")
- design_ids = list(
- "mech_plasma_cutter",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/////////////////////////integrated circuits tech/////////////////////////
-
-/datum/techweb_node/adv_shells
- id = "adv_shells"
- display_name = "Advanced Shell Research"
- description = "Grants access to more complicated shell designs."
- prereq_ids = list("basic_circuitry", "engineering")
- design_ids = list(
- "assembly_shell",
- "bot_shell",
- "comp_equip_action",
- "controller_shell",
- "dispenser_shell",
- "door_shell",
- "gun_shell",
- "keyboard_shell",
- "module_shell",
- "money_bot_shell",
- "scanner_gate_shell",
- "scanner_shell",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/bci_shells
- id = "bci_shells"
- display_name = "Brain-Computer Interfaces"
- description = "Grants access to biocompatable shell designs and components."
- prereq_ids = list("adv_shells")
- design_ids = list(
- "bci_implanter",
- "bci_shell",
- "comp_bar_overlay",
- "comp_camera_bci",
- "comp_counter_overlay",
- "comp_install_detector",
- "comp_object_overlay",
- "comp_reagent_injector",
- "comp_target_intercept",
- "comp_thought_listener",
- "comp_vox",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500)
-
-/datum/techweb_node/movable_shells_tech
- id = "movable_shells"
- display_name = "Movable Shell Research"
- description = "Grants access to movable shells."
- prereq_ids = list("adv_shells", "robotics")
- design_ids = list(
- "comp_pathfind",
- "comp_pull",
- "drone_shell",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000)
-
-/datum/techweb_node/server_shell_tech
- id = "server_shell"
- display_name = "Server Technology Research"
- description = "Grants access to a server shell that has a very high capacity for components."
- prereq_ids = list("adv_shells", "computer_data_disks")
- design_ids = list(
- "server_shell",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000)
-
-/////////////////////////robotics tech/////////////////////////
-/datum/techweb_node/robotics
- id = "robotics"
- display_name = "Basic Robotics Research"
- description = "Programmable machines that make our lives lazier."
- prereq_ids = list("base")
- design_ids = list(
- "paicard",
- "mecha_camera",
- "botnavbeacon",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/adv_robotics
- id = "adv_robotics"
- display_name = "Advanced Robotics Research"
- description = "Advanced synthetic neural networks and synaptic pathways allows for extraordinary leaps in cybernetic intelligence and interfacing."
- prereq_ids = list("robotics")
- design_ids = list(
- "advanced_l_arm",
- "advanced_r_arm",
- "advanced_l_leg",
- "advanced_r_leg",
- "mmi_posi",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/adv_bots
- id = "adv_bots"
- display_name = "Advanced Bots Research"
- description = "Grants access to a special launchpad designed for bots."
- prereq_ids = list("robotics")
- design_ids = list(
- "botpad",
- "botpad_remote",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/exodrone_tech
- id = "exodrone"
- display_name = "Exploration Drone Research"
- description = "Technology for exploring far away locations."
- prereq_ids = list("robotics")
- design_ids = list(
- "exodrone_console",
- "exodrone_launcher",
- "exoscanner",
- "exoscanner_console",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/neural_programming
- id = "neural_programming"
- display_name = "Neural Programming"
- description = "Study into networks of processing units that mimic our brains."
- prereq_ids = list("biotech", "datatheory")
- design_ids = list(
- "skill_station",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/cyborg_upg_util
- id = "cyborg_upg_util"
- display_name = "Cyborg Upgrades: Utility"
- description = "Utility upgrades for cyborgs."
- prereq_ids = list("adv_robotics")
- design_ids = list(
- "borg_upgrade_advancedmop",
- "borg_upgrade_broomer",
- "borg_upgrade_expand",
- "borg_upgrade_prt",
- "borg_upgrade_selfrepair",
- "borg_upgrade_thrusters",
- "borg_upgrade_trashofholding",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000)
-
-/datum/techweb_node/cyborg_upg_util/New()
- . = ..()
- if(!CONFIG_GET(flag/disable_secborg))
- design_ids += "borg_upgrade_disablercooler"
-
-/datum/techweb_node/cyborg_upg_serv
- id = "cyborg_upg_serv"
- display_name = "Cyborg Upgrades: Service"
- description = "Service upgrades for cyborgs."
- prereq_ids = list("adv_robotics")
- design_ids = list(
- "borg_upgrade_rolling_table",
- "borg_upgrade_condiment_synthesizer",
- "borg_upgrade_silicon_knife",
- "borg_upgrade_service_apparatus",
- "borg_upgrade_drink_apparatus",
- "borg_upgrade_service_cookbook",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000)
-
-/datum/techweb_node/cyborg_upg_engiminer
- id = "cyborg_upg_engiminer"
- display_name = "Cyborg Upgrades: Engineering & Mining"
- description = "Engineering and Mining upgrades for cyborgs."
- prereq_ids = list("adv_engi", "basic_mining")
- design_ids = list(
- "borg_upgrade_circuitapp",
- "borg_upgrade_diamonddrill",
- "borg_upgrade_holding",
- "borg_upgrade_lavaproof",
- "borg_upgrade_rped",
- "borg_upgrade_hypermod",
- "borg_upgrade_inducer",
- "borg_upgrade_engineeringomnitool",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000)
-
-/datum/techweb_node/cyborg_upg_med
- id = "cyborg_upg_med"
- display_name = "Cyborg Upgrades: Medical"
- description = "Medical upgrades for cyborgs."
- prereq_ids = list("adv_biotech")
- design_ids = list(
- "borg_upgrade_beakerapp",
- "borg_upgrade_defibrillator",
- "borg_upgrade_expandedsynthesiser",
- "borg_upgrade_piercinghypospray",
- "borg_upgrade_pinpointer",
- "borg_upgrade_surgicalprocessor",
- "borg_upgrade_surgicalomnitool",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000)
-
-/datum/techweb_node/ai_basic
- id = "ai_basic"
- display_name = "Artificial Intelligence"
- description = "AI unit research."
- prereq_ids = list("adv_robotics")
- design_ids = list(
- "aicore",
- "borg_ai_control",
- "intellicard",
- "mecha_tracking_ai_control",
- "aifixer",
- "aiupload",
- "reset_module",
- "asimov_module",
- "default_module",
- "nutimov_module",
- "paladin_module",
- "robocop_module",
- "corporate_module",
- "drone_module",
- "oxygen_module",
- "safeguard_module",
- "protectstation_module",
- "quarantine_module",
- "freeform_module",
- "remove_module",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/ai_basic/New()
- . = ..()
- if(HAS_TRAIT(SSstation, STATION_TRAIT_HUMAN_AI))
- design_ids -= list(
- "aicore",
- "borg_ai_control",
- "intellicard",
- "mecha_tracking_ai_control",
- "aifixer",
- "aiupload",
- )
-
-/datum/techweb_node/ai_adv
- id = "ai_adv"
- display_name = "Advanced Artificial Intelligence"
- description = "State of the art lawsets to be used for AI research."
- prereq_ids = list("ai_basic")
- design_ids = list(
- "asimovpp_module",
- "paladin_devotion_module",
- "dungeon_master_module",
- "painter_module",
- "ten_commandments_module",
- "hippocratic_module",
- "maintain_module",
- "liveandletlive_module",
- "reporter_module",
- "yesman_module",
- "hulkamania_module",
- "peacekeeper_module",
- "overlord_module",
- "tyrant_module",
- "antimov_module",
- "balance_module",
- "thermurderdynamic_module",
- "damaged_module",
- "freeformcore_module",
- "onehuman_module",
- "purge_module",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000)
-
-//Any kind of point adjustment needs to happen before SSresearch sets up the whole node tree, it gets cached
-/datum/techweb_node/ai/New()
- . = ..()
- if(HAS_TRAIT(SSstation, STATION_TRAIT_UNIQUE_AI))
- research_costs[TECHWEB_POINT_TYPE_GENERIC] *= 3
-
-/////////////////////////EMP tech/////////////////////////
-/datum/techweb_node/emp_basic //EMP tech for some reason
- id = "emp_basic"
- display_name = "Electromagnetic Theory"
- description = "Study into usage of frequencies in the electromagnetic spectrum."
- prereq_ids = list("base")
- design_ids = list(
- "holosign",
- "holosignsec",
- "holosignengi",
- "holosignatmos",
- "holosignrestaurant",
- "holosignbar",
- "inducer",
- "inducerengi",
- "tray_goggles",
- "holopad",
- "vendatray",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/emp_adv
- id = "emp_adv"
- display_name = "Advanced Electromagnetic Theory"
- description = "Determining whether reversing the polarity will actually help in a given situation."
- prereq_ids = list("emp_basic")
- design_ids = list(
- "ultra_micro_laser",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000)
- discount_experiments = list(/datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_microlaser = 1500)
-
-/datum/techweb_node/emp_super
- id = "emp_super"
- display_name = "Quantum Electromagnetic Technology" //bs
- description = "Even better electromagnetic technology."
- prereq_ids = list("emp_adv")
- design_ids = list(
- "quadultra_micro_laser",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 15000)
- discount_experiments = list(
- /datum/experiment/scanning/points/machinery_pinpoint_scan/tier3_microlaser = 4000,
- /datum/experiment/ordnance/gaseous/noblium = 10000,
- )
-
-/////////////////////////Clown tech/////////////////////////
-/datum/techweb_node/clown
- id = "clown"
- display_name = "Clown Technology"
- description = "Honk?!"
- prereq_ids = list("base")
- design_ids = list(
- "air_horn",
- "borg_transform_clown",
- "honk_chassis",
- "honk_head",
- "honk_left_arm",
- "honk_left_leg",
- "honk_right_arm",
- "honk_right_leg",
- "honk_torso",
- "honker_main",
- "honker_peri",
- "honker_targ",
- "implant_trombone",
- "mech_banana_mortar",
- "mech_honker",
- "mech_mousetrap_mortar",
- "mech_punching_face",
- "clown_firing_pin",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-////////////////////////Computer tech////////////////////////
-/datum/techweb_node/comptech
- id = "comptech"
- display_name = "Computer Consoles"
- description = "Computers and how they work."
- prereq_ids = list("datatheory")
- design_ids = list(
- "bankmachine",
- "barcode_scanner",
- "cargo",
- "cargorequest",
- "comconsole",
- "crewconsole",
- "idcard",
- "libraryconsole",
- "mining",
- "photobooth",
- "rdcamera",
- "seccamera",
- "security_photobooth",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000)
-
-/datum/techweb_node/data_disks
- id = "computer_data_disks"
- display_name = "Computer Data Disks"
- description = "Data disks used for storing modular computer stuff."
- prereq_ids = list("comptech")
- design_ids = list(
- "portadrive_advanced",
- "portadrive_basic",
- "portadrive_super",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
-
-/datum/techweb_node/computer_board_gaming
- id = "computer_board_gaming"
- display_name = "Arcade Games"
- description = "For the slackers on the station."
- prereq_ids = list("comptech")
- design_ids = list(
- "arcade_battle",
- "arcade_orion",
- "slotmachine",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3250)
- discount_experiments = list(/datum/experiment/physical/arcade_winner = 3000)
-
-/datum/techweb_node/comp_recordkeeping
- id = "comp_recordkeeping"
- display_name = "Computerized Recordkeeping"
- description = "Organized record databases and how they're used."
- prereq_ids = list("comptech")
- design_ids = list(
- "account_console",
- "automated_announcement",
- "med_data",
- "prisonmanage",
- "secdata",
- "vendor",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
-
-/datum/techweb_node/telecomms
- id = "telecomms"
- display_name = "Telecommunications Technology"
- description = "Subspace transmission technology for near-instant communications devices."
- prereq_ids = list("comptech", "bluespace_basic")
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
- design_ids = list(
- "comm_monitor",
- "comm_server",
- "gigabeacon",
- "message_monitor",
- "ntnet_relay",
- "s_amplifier",
- "s_analyzer",
- "s_ansible",
- "s_broadcaster",
- "s_bus",
- "s_crystal",
- "s_filter",
- "s_hub",
- "s_messaging",
- "s_processor",
- "s_receiver",
- "s_relay",
- "s_server",
- "s_transmitter",
- "s_treatment",
- )
-
-/datum/techweb_node/tram
- id = "tram"
- display_name = "Tram Technology"
- description = "Technology for linear induction transportation systems."
- prereq_ids = list("telecomms")
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
- design_ids = list(
- "tram_controller",
- "tram_display",
- "crossing_signal",
- "guideway_sensor",
- )
-
-/datum/techweb_node/integrated_hud
- id = "integrated_HUDs"
- display_name = "Integrated HUDs"
- description = "The usefulness of computerized records, projected straight onto your eyepiece!"
- prereq_ids = list("comp_recordkeeping", "emp_basic")
- design_ids = list(
- "diagnostic_hud",
- "health_hud",
- "scigoggles",
- "security_hud",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
-
-/datum/techweb_node/nvg_tech
- id = "NVGtech"
- display_name = "Night Vision Technology"
- description = "Allows seeing in the dark without actual light!"
- prereq_ids = list("integrated_HUDs", "adv_engi", "emp_adv")
- design_ids = list(
- "diagnostic_hud_night",
- "health_hud_night",
- "night_visision_goggles",
- "nvgmesons",
- "nv_scigoggles",
- "security_hud_night",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
-
-////////////////////////Medical////////////////////////
-/datum/techweb_node/genetics
- id = "genetics"
- display_name = "Genetic Engineering"
- description = "We have the technology to change him."
- prereq_ids = list("biotech")
- design_ids = list(
- "dna_disk",
- "dnainfuser",
- "dnascanner",
- "scan_console",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/cryotech
- id = "cryotech"
- display_name = "Cryostasis Technology"
- description = "Smart freezing of objects to preserve them!"
- prereq_ids = list("adv_engi", "biotech")
- design_ids = list(
- "cryo_grenade",
- "cryotube",
- "splitbeaker",
- "stasis",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000)
-
-/datum/techweb_node/subdermal_implants
- id = "subdermal_implants"
- display_name = "Subdermal Implants"
- description = "Electronic implants buried beneath the skin."
- prereq_ids = list("biotech")
- design_ids = list(
- "c38_trac",
- "implant_chem",
- "implant_tracking",
- "implant_exile",
- "implantcase",
- "implanter",
- "locator",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/advanced_implants
- id = "adv_subdermal_implants"
- display_name = "Advanced Subdermal Implants"
- description = "Subdermal implants that leverage bluespace research to control their bluespace signature."
- prereq_ids = list("subdermal_implants", "micro_bluespace")
- design_ids = list(
- "implant_beacon",
- "implant_bluespace",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/cyber_organs
- id = "cyber_organs"
- display_name = "Cybernetic Organs"
- description = "We have the technology to rebuild him."
- prereq_ids = list("biotech")
- design_ids = list(
- "cybernetic_ears_u",
- "cybernetic_eyes_improved",
- "cybernetic_eyes_improved_moth",
- "cybernetic_heart_tier2",
- "cybernetic_liver_tier2",
- "cybernetic_lungs_tier2",
- "cybernetic_stomach_tier2",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
-
-/datum/techweb_node/cyber_organs/New()
- ..()
- if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500)
-
-/datum/techweb_node/cyber_organs_upgraded
- id = "cyber_organs_upgraded"
- display_name = "Upgraded Cybernetic Organs"
- description = "We have the technology to upgrade him."
- prereq_ids = list("adv_biotech", "cyber_organs")
- design_ids = list(
- "cybernetic_ears_whisper",
- "cybernetic_ears_xray",
- "ci-gloweyes",
- "ci-welding",
- "ci-gloweyes-moth",
- "ci-welding-moth",
- "cybernetic_heart_tier3",
- "cybernetic_liver_tier3",
- "cybernetic_lungs_tier3",
- "cybernetic_stomach_tier3",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
-
-/datum/techweb_node/cyber_organs_upgraded/New()
- ..()
- if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
-
-/datum/techweb_node/cyber_implants
- id = "cyber_implants"
- display_name = "Cybernetic Implants"
- description = "Electronic implants that improve humans."
- prereq_ids = list("adv_biotech", "datatheory")
- design_ids = list(
- "ci-breather",
- "ci-diaghud",
- "ci-medhud",
- "ci-nutriment",
- "ci-sechud",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/cyber_implants/New()
- ..()
- if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
-
-/datum/techweb_node/adv_cyber_implants
- id = "adv_cyber_implants"
- display_name = "Advanced Cybernetic Implants"
- description = "Upgraded and more powerful cybernetic implants."
- prereq_ids = list("neural_programming", "cyber_implants","integrated_HUDs")
- design_ids = list(
- "ci-nutrimentplus",
- "ci-reviver",
- "ci-surgery",
- "ci-toolset",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/adv_cyber_implants/New()
- ..()
- if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
-
-/datum/techweb_node/combat_cyber_implants
- id = "combat_cyber_implants"
- display_name = "Combat Cybernetic Implants"
- description = "Military grade combat implants to improve performance."
- prereq_ids = list("adv_cyber_implants","weaponry","NVGtech","high_efficiency")
- design_ids = list(
- "ci-antidrop",
- "ci-antistun",
- "ci-thermals",
- "ci-thrusters",
- "ci-xray",
- "ci-thermals-moth",
- "ci-xray-moth",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/combat_cyber_implants/New()
- ..()
- if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
-
-////////////////////////Tools////////////////////////
-
-/datum/techweb_node/basic_mining
- id = "basic_mining"
- display_name = "Mining Technology"
- description = "Better than Efficiency V."
- prereq_ids = list("engineering", "basic_plasma")
- design_ids = list(
- "borg_upgrade_cooldownmod",
- "borg_upgrade_damagemod",
- "borg_upgrade_rangemod",
- "cargoexpress",
- "cooldownmod",
- "damagemod",
- "drill",
- "mecha_kineticgun",
- "mining_equipment_vendor",
- "ore_redemption",
- "plasmacutter",
- "rangemod",
- "superresonator",
- "triggermod",
- "mining_scanner",
- "brm",
- "b_smelter",
- "b_refinery",
- )//e a r l y g a m e)
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/adv_mining
- id = "adv_mining"
- display_name = "Advanced Mining Technology"
- description = "Efficiency Level 127" //dumb mc references
- prereq_ids = list("basic_mining", "adv_power", "adv_plasma")
- design_ids = list(
- "drill_diamond",
- "hypermod",
- "jackhammer",
- "plasmacutter_adv",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500)
- discount_experiments = list(/datum/experiment/scanning/random/material/hard/one = 5000)
-
-/datum/techweb_node/janitor
- id = "janitor"
- display_name = "Advanced Sanitation Technology"
- description = "Clean things better, faster, stronger, and harder!"
- prereq_ids = list("adv_engi")
- design_ids = list(
- "advmop",
- "beartrap",
- "blutrash",
- "buffer",
- "vacuum",
- "holobarrier_jani",
- "light_replacer_blue",
- "paint_remover",
- "spraybottle",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000)
- discount_experiments = list(/datum/experiment/scanning/random/janitor_trash = 3000) //75% discount for scanning some trash, seems fair right?
-
-/datum/techweb_node/botany
- id = "botany"
- display_name = "Botanical Engineering"
- description = "Botanical tools"
- prereq_ids = list("biotech")
- design_ids = list(
- "biogenerator",
- "flora_gun",
- "gene_shears",
- "hydro_tray",
- "portaseeder",
- "seed_extractor",
- "adv_watering_can",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000)
- required_experiments = list(/datum/experiment/scanning/random/plants/wild)
- discount_experiments = list(/datum/experiment/scanning/random/plants/traits = 3000)
-
-/datum/techweb_node/fishing
- id = "fishing"
- display_name = "Fishing Technology"
- description = "Cutting edge fishing advancements."
- prereq_ids = list("base")
- design_ids = list(
- "fishing_rod_tech",
- "stabilized_hook",
- "auto_reel",
- "fish_analyzer",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000)
- required_experiments = list(/datum/experiment/scanning/fish)
-
-/datum/techweb_node/exp_tools
- id = "exp_tools"
- display_name = "Experimental Tools"
- description = "Highly advanced tools."
- prereq_ids = list("adv_engi")
- design_ids = list(
- "exwelder",
- "handdrill",
- "jawsoflife",
- "laserscalpel",
- "mechanicalpinches",
- "rangedanalyzer",
- "searingtool",
- "adv_fire_extinguisher",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500)
- discount_experiments = list(/datum/experiment/scanning/random/material/hard/one = 5000)
-
-/datum/techweb_node/sec_basic
- id = "sec_basic"
- display_name = "Basic Security Equipment"
- description = "Standard equipment used by security."
- prereq_ids = list("base")
- design_ids = list(
- "bola_energy",
- "evidencebag",
- "pepperspray",
- "seclite",
- "zipties",
- "inspector",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
-
-/datum/techweb_node/rcd_upgrade
- id = "rcd_upgrade"
- display_name = "Rapid Device Upgrade Designs"
- description = "Unlocks new designs that improve rapid devices."
- prereq_ids = list("adv_engi")
- design_ids = list(
- "rcd_upgrade_anti_interrupt",
- "rcd_upgrade_cooling",
- "rcd_upgrade_frames",
- "rcd_upgrade_furnishing",
- "rcd_upgrade_simple_circuits",
- "rpd_upgrade_unwrench",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/adv_rcd_upgrade
- id = "adv_rcd_upgrade"
- display_name = "Advanced RCD Designs Upgrade"
- description = "Unlocks new RCD designs."
- design_ids = list(
- "rcd_upgrade_silo_link",
- )
- prereq_ids = list(
- "bluespace_travel",
- "rcd_upgrade",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000)
- discount_experiments = list(/datum/experiment/scanning/random/material/hard/two = 5000)
-
-/////////////////////////weaponry tech/////////////////////////
-/datum/techweb_node/weaponry
- id = "weaponry"
- display_name = "Weapon Development Technology"
- description = "Our researchers have found new ways to weaponize just about everything now."
- prereq_ids = list("engineering")
- design_ids = list(
- "ballistic_shield",
- "pin_testing",
- "tele_shield",
- "lasershell",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 20000)
- discount_experiments = list(/datum/experiment/ordnance/explosive/pressurebomb = 10000)
-
-/datum/techweb_node/adv_weaponry
- id = "adv_weaponry"
- display_name = "Advanced Weapon Development Technology"
- description = "Our weapons are breaking the rules of reality by now."
- prereq_ids = list("adv_engi", "weaponry")
- design_ids = list(
- "pin_loyalty",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000)
-
-/datum/techweb_node/electric_weapons
- id = "electronic_weapons"
- display_name = "Electric Weapons"
- description = "Weapons using electric technology"
- prereq_ids = list("weaponry", "adv_power" , "emp_basic")
- design_ids = list(
- "ioncarbine",
- "stunrevolver",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/radioactive_weapons
- id = "radioactive_weapons"
- display_name = "Radioactive Weaponry"
- description = "Weapons using radioactive technology."
- prereq_ids = list("adv_engi", "adv_weaponry")
- design_ids = list(
- "nuclear_gun",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/beam_weapons
- id = "beam_weapons"
- display_name = "Beam Weaponry"
- description = "Various basic beam weapons"
- prereq_ids = list("adv_weaponry")
- design_ids = list(
- "temp_gun",
- "xray_laser",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/adv_beam_weapons
- id = "adv_beam_weapons"
- display_name = "Advanced Beam Weaponry"
- description = "Various advanced beam weapons"
- prereq_ids = list("beam_weapons")
- design_ids = list(
- "beamrifle",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/explosive_weapons
- id = "explosive_weapons"
- display_name = "Explosive & Pyrotechnical Weaponry"
- description = "If the light stuff just won't do it."
- prereq_ids = list("adv_weaponry")
- design_ids = list(
- "adv_grenade",
- "large_grenade",
- "pyro_grenade",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/exotic_ammo
- id = "exotic_ammo"
- display_name = "Exotic Ammunition"
- description = "They won't know what hit em."
- prereq_ids = list("weaponry")
- design_ids = list(
- "c38_hotshot",
- "c38_iceblox",
- "techshotshell",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/gravity_gun
- id = "gravity_gun"
- display_name = "One-point Bluespace-gravitational Manipulator"
- description = "Fancy wording for gravity gun."
- prereq_ids = list("adv_weaponry", "bluespace_travel")
- design_ids = list(
- "gravitygun",
- "mech_gravcatapult",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-//MODsuit tech
-
-/datum/techweb_node/mod_advanced
- id = "mod_advanced"
- display_name = "Advanced Modular Suits"
- description = "More advanced modules, to improve modular suits."
- prereq_ids = list("robotics")
- design_ids = list(
- "mod_visor_diaghud",
- "mod_gps",
- "mod_reagent_scanner",
- "mod_clamp",
- "mod_drill",
- "mod_orebag",
- "modlink_scryer",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mod_engineering
- id = "mod_engineering"
- display_name = "Engineering Modular Suits"
- description = "Engineering suits, for powered engineers."
- prereq_ids = list("mod_advanced", "engineering")
- design_ids = list(
- "mod_plating_engineering",
- "mod_visor_meson",
- "mod_t_ray",
- "mod_magboot",
- "mod_tether",
- "mod_constructor",
- "mod_mister_atmos",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mod_advanced_engineering
- id = "mod_advanced_engineering"
- display_name = "Advanced Engineering Modular Suits"
- description = "Advanced Engineering suits, for advanced powered engineers."
- prereq_ids = list("mod_engineering", "adv_engi")
- design_ids = list(
- "mod_plating_atmospheric",
- "mod_jetpack",
- "mod_rad_protection",
- "mod_emp_shield",
- "mod_storage_expanded",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3500)
-
-/datum/techweb_node/mod_advanced_engineering/New()
- if(HAS_TRAIT(SSstation, STATION_TRAIT_RADIOACTIVE_NEBULA)) //we'll really need the rad protection modsuit module
- starting_node = TRUE
-
- return ..()
-
-/datum/techweb_node/mod_medical
- id = "mod_medical"
- display_name = "Medical Modular Suits"
- description = "Medical suits for quick rescue purposes."
- prereq_ids = list("mod_advanced", "biotech")
- design_ids = list(
- "mod_plating_medical",
- "mod_visor_medhud",
- "mod_health_analyzer",
- "mod_quick_carry",
- "mod_injector",
- "mod_organ_thrower",
- "mod_dna_lock",
- "mod_patienttransport",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mod_advanced_medical
- id = "mod_advanced_medical"
- display_name = "Advanced Medical Modular Suits"
- description = "Advanced medical suits for quicker rescue purposes."
- prereq_ids = list("mod_medical", "adv_biotech")
- design_ids = list(
- "mod_defib",
- "mod_threadripper",
- "mod_surgicalprocessor",
- "mod_statusreadout",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3500)
-
-/datum/techweb_node/mod_security
- id = "mod_security"
- display_name = "Security Modular Suits"
- description = "Security suits for space crime handling."
- prereq_ids = list("mod_advanced", "sec_basic")
- design_ids = list(
- "mod_plating_security",
- "mod_visor_sechud",
- "mod_stealth",
- "mod_mag_harness",
- "mod_pathfinder",
- "mod_holster",
- "mod_sonar",
- "mod_projectile_dampener",
- "mod_criminalcapture",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mod_entertainment
- id = "mod_entertainment"
- display_name = "Entertainment Modular Suits"
- description = "Powered suits for protection against low-humor environments."
- prereq_ids = list("mod_advanced", "clown")
- design_ids = list(
- "mod_plating_cosmohonk",
- "mod_bikehorn",
- "mod_microwave_beam",
- "mod_waddle",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mod_anomaly
- id = "mod_anomaly"
- display_name = "Anomalock Modular Suits"
- description = "Modules for modular suits that require anomaly cores to function."
- prereq_ids = list("mod_advanced", "anomaly_research")
- design_ids = list(
- "mod_antigrav",
- "mod_teleporter",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mod_anomaly_engi
- id = "mod_anomaly_engi"
- display_name = "Engineering Anomalock Modular Suits"
- description = "Advanced modules for modular suits, using anomaly cores to become even better engineers."
- prereq_ids = list("mod_advanced_engineering", "mod_anomaly")
- design_ids = list(
- "mod_kinesis",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
-
-////////////////////////mech technology////////////////////////
-/datum/techweb_node/adv_mecha
- id = "adv_mecha"
- display_name = "Advanced Exosuits"
- description = "For when you just aren't Gundam enough."
- prereq_ids = list("adv_robotics")
- design_ids = list(
- "mech_repair_droid",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500)
- discount_experiments = list(/datum/experiment/scanning/random/material/medium/three = 5000)
-
-/datum/techweb_node/odysseus
- id = "mecha_odysseus"
- display_name = "EXOSUIT: Odysseus"
- description = "Odysseus exosuit designs"
- prereq_ids = list("base")
- design_ids = list(
- "odysseus_chassis",
- "odysseus_head",
- "odysseus_left_arm",
- "odysseus_left_leg",
- "odysseus_main",
- "odysseus_peri",
- "odysseus_right_arm",
- "odysseus_right_leg",
- "odysseus_torso",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/clarke
- id = "mecha_clarke"
- display_name = "EXOSUIT: Clarke"
- description = "Clarke exosuit designs"
- prereq_ids = list("engineering")
- design_ids = list(
- "clarke_chassis",
- "clarke_head",
- "clarke_left_arm",
- "clarke_main",
- "clarke_peri",
- "clarke_right_arm",
- "clarke_torso",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/paddy
- id = "mech_paddy"
- display_name = "EXOSUIT: APLU \"Paddy\""
- description = "Paddy exosuit designs"
- prereq_ids = list("adv_mecha", "adv_mecha_armor")
- design_ids = list(
- "paddyupgrade",
- "mech_hydraulic_claw"
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
- discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_mechbay = 5000)
-
-/datum/techweb_node/gygax
- id = "mech_gygax"
- display_name = "EXOSUIT: Gygax"
- description = "Gygax exosuit designs"
- prereq_ids = list("adv_mecha", "adv_mecha_armor")
- design_ids = list(
- "gygax_armor",
- "gygax_chassis",
- "gygax_head",
- "gygax_left_arm",
- "gygax_left_leg",
- "gygax_main",
- "gygax_peri",
- "gygax_right_arm",
- "gygax_right_leg",
- "gygax_targ",
- "gygax_torso",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
- discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_mechbay = 5000)
-
-/datum/techweb_node/durand
- id = "mech_durand"
- display_name = "EXOSUIT: Durand"
- description = "Durand exosuit designs"
- prereq_ids = list("adv_mecha", "adv_mecha_armor")
- design_ids = list(
- "durand_armor",
- "durand_chassis",
- "durand_head",
- "durand_left_arm",
- "durand_left_leg",
- "durand_main",
- "durand_peri",
- "durand_right_arm",
- "durand_right_leg",
- "durand_targ",
- "durand_torso",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
- discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_mechbay = 3500)
-
-/datum/techweb_node/phazon
- id = "mecha_phazon"
- display_name = "EXOSUIT: Phazon"
- description = "Phazon exosuit designs"
- prereq_ids = list("adv_mecha", "adv_mecha_armor" , "micro_bluespace")
- design_ids = list(
- "phazon_armor",
- "phazon_chassis",
- "phazon_head",
- "phazon_left_arm",
- "phazon_left_leg",
- "phazon_main",
- "phazon_peri",
- "phazon_right_arm",
- "phazon_right_leg",
- "phazon_targ",
- "phazon_torso",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
- discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_mechbay = 2500)
-
-/datum/techweb_node/savannah_ivanov
- id = "mecha_savannah_ivanov"
- display_name = "EXOSUIT: Savannah-Ivanov"
- description = "Savannah-Ivanov exosuit designs"
- prereq_ids = list("adv_mecha", "weaponry", "exp_tools")
- design_ids = list(
- "savannah_ivanov_armor",
- "savannah_ivanov_chassis",
- "savannah_ivanov_head",
- "savannah_ivanov_left_arm",
- "savannah_ivanov_left_leg",
- "savannah_ivanov_main",
- "savannah_ivanov_peri",
- "savannah_ivanov_right_arm",
- "savannah_ivanov_right_leg",
- "savannah_ivanov_targ",
- "savannah_ivanov_torso",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
- discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_mechbay = 3000)
-
-/datum/techweb_node/adv_mecha_tools
- id = "adv_mecha_tools"
- display_name = "Advanced Exosuit Equipment"
- description = "Tools for high level mech suits"
- prereq_ids = list("adv_mecha")
- design_ids = list(
- "mech_rcd",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/med_mech_tools
- id = "med_mech_tools"
- display_name = "Medical Exosuit Equipment"
- description = "Tools for high level mech suits"
- prereq_ids = list("adv_biotech")
- design_ids = list(
- "mech_medi_beam",
- "mech_sleeper",
- "mech_syringe_gun",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mech_armor
- id = "adv_mecha_armor"
- display_name = "Exosuit Heavy Armor Research"
- description = "Recreating heavy armor with new rapid fabrication techniques."
- prereq_ids = list("adv_mecha", "bluespace_power")
- design_ids = list(
- "mech_ccw_armor",
- "mech_proj_armor",
- )
- required_experiments = list(/datum/experiment/scanning/random/mecha_damage_scan)
- discount_experiments = list(/datum/experiment/scanning/random/mecha_equipped_scan = 5000)
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000)
-
-/datum/techweb_node/mech_scattershot
- id = "mecha_tools"
- display_name = "Exosuit Weapon (LBX AC 10 \"Scattershot\")"
- description = "An advanced piece of mech weaponry"
- prereq_ids = list("adv_mecha")
- design_ids = list(
- "mech_scattershot",
- "mech_scattershot_ammo",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mech_carbine
- id = "mech_carbine"
- display_name = "Exosuit Weapon (FNX-99 \"Hades\" Carbine)"
- description = "An advanced piece of mech weaponry"
- prereq_ids = list("exotic_ammo")
- design_ids = list(
- "mech_carbine",
- "mech_carbine_ammo",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mech_ion
- id = "mmech_ion"
- display_name = "Exosuit Weapon (MKIV Ion Heavy Cannon)"
- description = "An advanced piece of mech weaponry"
- prereq_ids = list("electronic_weapons", "emp_adv")
- design_ids = list(
- "mech_ion",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mech_tesla
- id = "mech_tesla"
- display_name = "Exosuit Weapon (MKI Tesla Cannon)"
- description = "An advanced piece of mech weaponry"
- prereq_ids = list("electronic_weapons", "adv_power")
- design_ids = list(
- "mech_tesla",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mech_laser
- id = "mech_laser"
- display_name = "Exosuit Weapon (CH-PS \"Immolator\" Laser)"
- description = "A basic piece of mech weaponry"
- prereq_ids = list("beam_weapons")
- design_ids = list(
- "mech_laser",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mech_laser_heavy
- id = "mech_laser_heavy"
- display_name = "Exosuit Weapon (CH-LC \"Solaris\" Laser Cannon)"
- description = "An advanced piece of mech weaponry"
- prereq_ids = list("adv_beam_weapons")
- design_ids = list(
- "mech_laser_heavy",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mech_disabler
- id = "mech_disabler"
- display_name = "Exosuit Weapon (CH-DS \"Peacemaker\" Mounted Disabler)"
- description = "A basic piece of mech weaponry"
- prereq_ids = list("adv_mecha")
- design_ids = list(
- "mech_disabler",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mech_grenade_launcher
- id = "mech_grenade_launcher"
- display_name = "Exosuit Weapon (SGL-6 Grenade Launcher)"
- description = "An advanced piece of mech weaponry"
- prereq_ids = list("explosive_weapons")
- design_ids = list(
- "mech_grenade_launcher",
- "mech_grenade_launcher_ammo",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mech_missile_rack
- id = "mech_missile_rack"
- display_name = "Exosuit Weapon (BRM-6 Missile Rack)"
- description = "An advanced piece of mech weaponry"
- prereq_ids = list("explosive_weapons")
- design_ids = list(
- "mech_missile_rack",
- "mech_missile_rack_ammo",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/clusterbang_launcher
- id = "clusterbang_launcher"
- display_name = "Exosuit Module (SOB-3 Clusterbang Launcher)"
- description = "An advanced piece of mech weaponry"
- prereq_ids = list("explosive_weapons")
- design_ids = list(
- "clusterbang_launcher",
- "clusterbang_launcher_ammo",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mech_teleporter
- id = "mech_teleporter"
- display_name = "Exosuit Module (Teleporter Module)"
- description = "An advanced piece of mech Equipment"
- prereq_ids = list("micro_bluespace")
- design_ids = list(
- "mech_teleporter",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mech_wormhole_gen
- id = "mech_wormhole_gen"
- display_name = "Exosuit Module (Localized Wormhole Generator)"
- description = "An advanced piece of mech weaponry"
- prereq_ids = list("bluespace_travel")
- design_ids = list(
- "mech_wormhole_gen",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mech_lmg
- id = "mech_lmg"
- display_name = "Exosuit Weapon (\"Ultra AC 2\" LMG)"
- description = "An advanced piece of mech weaponry"
- prereq_ids = list("adv_mecha")
- design_ids = list(
- "mech_lmg",
- "mech_lmg_ammo",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-/datum/techweb_node/mech_diamond_drill
- id = "mech_diamond_drill"
- display_name = "Exosuit Diamond Drill"
- description = "A diamond drill fit for a large exosuit"
- prereq_ids = list("adv_mining")
- design_ids = list(
- "mech_diamond_drill",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
-
-////////////////////////Alien technology////////////////////////
-/datum/techweb_node/alientech //AYYYYYYYYLMAOO tech
- id = "alientech"
- display_name = "Alien Technology"
- description = "Things used by the greys."
- prereq_ids = list("biotech","engineering")
- required_items_to_unlock = list(
- /obj/item/stack/sheet/mineral/abductor,
- /obj/item/abductor,
- /obj/item/cautery/alien,
- /obj/item/circuitboard/machine/abductor,
- /obj/item/circular_saw/alien,
- /obj/item/crowbar/abductor,
- /obj/item/gun/energy/alien,
- /obj/item/gun/energy/shrink_ray,
- /obj/item/hemostat/alien,
- /obj/item/melee/baton/abductor,
- /obj/item/multitool/abductor,
- /obj/item/retractor/alien,
- /obj/item/scalpel/alien,
- /obj/item/screwdriver/abductor,
- /obj/item/surgicaldrill/alien,
- /obj/item/weldingtool/abductor,
- /obj/item/wirecutters/abductor,
- /obj/item/wrench/abductor,
- )
- design_ids = list(
- "alienalloy",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
- hidden = TRUE
-
-/datum/techweb_node/alientech/on_station_research()
- SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_ALIENTECH] = TRUE
-
-/datum/techweb_node/alien_bio
- id = "alien_bio"
- display_name = "Alien Biological Tools"
- description = "Advanced biological tools."
- prereq_ids = list("alientech", "adv_biotech")
- design_ids = list(
- "alien_cautery",
- "alien_drill",
- "alien_hemostat",
- "alien_retractor",
- "alien_saw",
- "alien_scalpel",
- )
-
- required_items_to_unlock = list(
- /obj/item/abductor,
- /obj/item/cautery/alien,
- /obj/item/circuitboard/machine/abductor,
- /obj/item/circular_saw/alien,
- /obj/item/crowbar/abductor,
- /obj/item/gun/energy/alien,
- /obj/item/gun/energy/shrink_ray,
- /obj/item/hemostat/alien,
- /obj/item/melee/baton/abductor,
- /obj/item/multitool/abductor,
- /obj/item/retractor/alien,
- /obj/item/scalpel/alien,
- /obj/item/screwdriver/abductor,
- /obj/item/surgicaldrill/alien,
- /obj/item/weldingtool/abductor,
- /obj/item/wirecutters/abductor,
- /obj/item/wrench/abductor,
- )
-
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 12500)
- discount_experiments = list(/datum/experiment/scanning/points/slime/hard = 10000)
- hidden = TRUE
-
-/datum/techweb_node/alien_engi
- id = "alien_engi"
- display_name = "Alien Engineering"
- description = "Alien engineering tools"
- prereq_ids = list("alientech", "adv_engi")
-
- design_ids = list(
- "alien_crowbar",
- "alien_multitool",
- "alien_screwdriver",
- "alien_welder",
- "alien_wirecutters",
- "alien_wrench",
- )
-
- required_items_to_unlock = list(
- /obj/item/abductor,
- /obj/item/circuitboard/machine/abductor,
- /obj/item/crowbar/abductor,
- /obj/item/gun/energy/shrink_ray,
- /obj/item/melee/baton/abductor,
- /obj/item/multitool/abductor,
- /obj/item/screwdriver/abductor,
- /obj/item/weldingtool/abductor,
- /obj/item/wirecutters/abductor,
- /obj/item/wrench/abductor,
- )
-
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
- hidden = TRUE
-
-/datum/techweb_node/syndicate_basic
- id = "syndicate_basic"
- display_name = "Illegal Technology"
- description = "Dangerous research used to create dangerous objects."
- prereq_ids = list("adv_engi", "adv_weaponry", "explosive_weapons")
- design_ids = list(
- "advanced_camera",
- "ai_cam_upgrade",
- "borg_syndicate_module",
- "donksoft_refill",
- "donksofttoyvendor",
- "largecrossbow",
- "mag_autorifle",
- "mag_autorifle_ap",
- "mag_autorifle_ic",
- "rapidsyringe",
- "suppressor",
- "super_pointy_tape",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000)
- hidden = TRUE
-
-/datum/techweb_node/syndicate_basic/New() //Crappy way of making syndicate gear decon supported until there's another way.
- . = ..()
- if(!SSearly_assets.initialized)
- RegisterSignal(SSearly_assets, COMSIG_SUBSYSTEM_POST_INITIALIZE, PROC_REF(register_uplink_items))
- else
- register_uplink_items()
-
-/**
- * This needs some clarification: The uplink_items_by_type list is populated on datum/asset/json/uplink/generate.
- * SStraitor doesn't actually initialize. I'm bamboozled.
- */
-/datum/techweb_node/syndicate_basic/proc/register_uplink_items()
- SIGNAL_HANDLER
- UnregisterSignal(SSearly_assets, COMSIG_SUBSYSTEM_POST_INITIALIZE)
- required_items_to_unlock = list()
- for(var/datum/uplink_item/item_path as anything in SStraitor.uplink_items_by_type)
- var/datum/uplink_item/item = SStraitor.uplink_items_by_type[item_path]
- if(!item.item || !item.illegal_tech)
- continue
- required_items_to_unlock |= item.item //allows deconning to unlock.
-
-
-////////////////////////B.E.P.I.S. Locked Techs////////////////////////
-/datum/techweb_node/light_apps
- id = "light_apps"
- display_name = "Illumination Applications"
- description = "Applications of lighting and vision technology not originally thought to be commercially viable."
- prereq_ids = list("base")
- design_ids = list(
- "bright_helmet",
- "rld_mini",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
- hidden = TRUE
- experimental = TRUE
-
-/datum/techweb_node/extreme_office
- id = "extreme_office"
- display_name = "Advanced Office Applications"
- description = "Some of our smartest lab guys got together on a Friday and improved our office efficiency by 350%. Here's how."
- prereq_ids = list("base")
- design_ids = list(
- "mauna_mug",
- "rolling_table",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
- hidden = TRUE
- experimental = TRUE
-
-/datum/techweb_node/spec_eng
- id = "spec_eng"
- display_name = "Specialized Engineering"
- description = "Conventional wisdom has deemed these engineering products 'technically' safe, but far too dangerous to traditionally condone."
- prereq_ids = list("base")
- design_ids = list(
- "eng_gloves",
- "lava_rods",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
- hidden = TRUE
- experimental = TRUE
-
-/datum/techweb_node/aus_security
- id = "aus_security"
- display_name = "Australicus Security Protocols"
- description = "It is said that security in the Australicus sector is tight, so we took some pointers from their equipment. Thankfully, our sector lacks any signs of these, 'dropbears'."
- prereq_ids = list("base")
- design_ids = list(
- "pin_explorer",
- "stun_boomerang",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
- hidden = TRUE
- experimental = TRUE
-
-/datum/techweb_node/interrogation
- id = "interrogation"
- display_name = "Enhanced Interrogation Technology"
- description = "By cross-referencing several declassified documents from past dictatorial regimes, we were able to develop an incredibly effective interrogation device. \
- Ethical concerns about loss of free will do not apply to criminals, according to galactic law."
- prereq_ids = list("base")
- design_ids = list(
- "hypnochair",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3500)
- hidden = TRUE
- experimental = TRUE
-
-/datum/techweb_node/sticky_advanced
- id = "sticky_advanced"
- display_name = "Advanced Sticky Technology"
- description = "Taking a good joke too far? Nonsense!"
- design_ids = list(
- "pointy_tape",
- "super_sticky_tape",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
- hidden = TRUE
- experimental = TRUE
-
-/datum/techweb_node/tackle_advanced
- id = "tackle_advanced"
- display_name = "Advanced Grapple Technology"
- description = "Nanotrasen would like to remind its researching staff that it is never acceptable to \"glomp\" your coworkers, and further \"scientific trials\" on the subject \
- will no longer be accepted in its academic journals."
- design_ids = list(
- "tackle_dolphin",
- "tackle_rocket",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
- hidden = TRUE
- experimental = TRUE
-
-/datum/techweb_node/mod_experimental
- id = "mod_experimental"
- display_name = "Experimental Modular Suits"
- description = "Applications of experimentality when creating MODsuits have created these..."
- prereq_ids = list("base")
- design_ids = list(
- "mod_disposal",
- "mod_joint_torsion",
- "mod_recycler",
- "mod_shooting",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
- hidden = TRUE
- experimental = TRUE
-
-/datum/techweb_node/mod_experimental
- id = "mod_experimental"
- display_name = "Experimental Modular Suits"
- description = "Applications of experimentality when creating MODsuits have created these..."
- prereq_ids = list("base")
- design_ids = list(
- "mod_disposal",
- "mod_joint_torsion",
- "mod_recycler",
- "mod_shooting",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
- hidden = TRUE
- experimental = TRUE
-
-/datum/techweb_node/posisphere
- id = "positronic_sphere"
- display_name = "Experimental Spherical Positronic Brain"
- description = "Recent developments on cost-cutting measures have allowed us to cut positronic brain cubes into twice-as-cheap spheres. Unfortunately, it also allows them to move around the lab via rolling maneuvers."
- prereq_ids = list("base")
- design_ids = list(
- "posisphere",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
- hidden = TRUE
- experimental = TRUE
diff --git a/code/modules/research/techweb/nodes/alien_nodes.dm b/code/modules/research/techweb/nodes/alien_nodes.dm
new file mode 100644
index 0000000000000..c5d21c255cf8e
--- /dev/null
+++ b/code/modules/research/techweb/nodes/alien_nodes.dm
@@ -0,0 +1,100 @@
+/datum/techweb_node/alientech //AYYYYYYYYLMAOO tech
+ id = TECHWEB_NODE_ALIENTECH
+ display_name = "Alien Technology"
+ description = "Things used by the greys."
+ prereq_ids = list(TECHWEB_NODE_BLUESPACE_TRAVEL)
+ required_items_to_unlock = list(
+ /obj/item/stack/sheet/mineral/abductor,
+ /obj/item/abductor,
+ /obj/item/cautery/alien,
+ /obj/item/circuitboard/machine/abductor,
+ /obj/item/circular_saw/alien,
+ /obj/item/crowbar/abductor,
+ /obj/item/gun/energy/alien,
+ /obj/item/gun/energy/shrink_ray,
+ /obj/item/hemostat/alien,
+ /obj/item/melee/baton/abductor,
+ /obj/item/multitool/abductor,
+ /obj/item/retractor/alien,
+ /obj/item/scalpel/alien,
+ /obj/item/screwdriver/abductor,
+ /obj/item/surgicaldrill/alien,
+ /obj/item/weldingtool/abductor,
+ /obj/item/wirecutters/abductor,
+ /obj/item/wrench/abductor,
+ )
+ design_ids = list(
+ "alienalloy",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+ hidden = TRUE
+
+/datum/techweb_node/alientech/on_station_research()
+ SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_ALIENTECH] = TRUE
+
+/datum/techweb_node/alien_engi
+ id = TECHWEB_NODE_ALIEN_ENGI
+ display_name = "Alien Engineering"
+ description = "Alien engineering tools"
+ prereq_ids = list(TECHWEB_NODE_ALIENTECH, TECHWEB_NODE_EXP_TOOLS)
+ design_ids = list(
+ "alien_crowbar",
+ "alien_multitool",
+ "alien_screwdriver",
+ "alien_welder",
+ "alien_wirecutters",
+ "alien_wrench",
+ )
+ required_items_to_unlock = list(
+ /obj/item/abductor,
+ /obj/item/circuitboard/machine/abductor,
+ /obj/item/crowbar/abductor,
+ /obj/item/gun/energy/shrink_ray,
+ /obj/item/melee/baton/abductor,
+ /obj/item/multitool/abductor,
+ /obj/item/screwdriver/abductor,
+ /obj/item/weldingtool/abductor,
+ /obj/item/wirecutters/abductor,
+ /obj/item/wrench/abductor,
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+ hidden = TRUE
+
+/datum/techweb_node/alien_surgery
+ id = TECHWEB_NODE_ALIEN_SURGERY
+ display_name = "Alien Surgery"
+ description = "Abductors did nothing wrong."
+ prereq_ids = list(TECHWEB_NODE_ALIENTECH, TECHWEB_NODE_SURGERY_TOOLS)
+ design_ids = list(
+ "alien_cautery",
+ "alien_drill",
+ "alien_hemostat",
+ "alien_retractor",
+ "alien_saw",
+ "alien_scalpel",
+ "surgery_brainwashing",
+ "surgery_heal_combo_upgrade_femto",
+ "surgery_zombie",
+ )
+ required_items_to_unlock = list(
+ /obj/item/abductor,
+ /obj/item/cautery/alien,
+ /obj/item/circuitboard/machine/abductor,
+ /obj/item/circular_saw/alien,
+ /obj/item/crowbar/abductor,
+ /obj/item/gun/energy/alien,
+ /obj/item/gun/energy/shrink_ray,
+ /obj/item/hemostat/alien,
+ /obj/item/melee/baton/abductor,
+ /obj/item/multitool/abductor,
+ /obj/item/retractor/alien,
+ /obj/item/scalpel/alien,
+ /obj/item/screwdriver/abductor,
+ /obj/item/surgicaldrill/alien,
+ /obj/item/weldingtool/abductor,
+ /obj/item/wirecutters/abductor,
+ /obj/item/wrench/abductor,
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
+ discount_experiments = list(/datum/experiment/scanning/points/slime/hard = TECHWEB_TIER_5_POINTS)
+ hidden = TRUE
diff --git a/code/modules/research/techweb/nodes/atmos_nodes.dm b/code/modules/research/techweb/nodes/atmos_nodes.dm
new file mode 100644
index 0000000000000..e2f29171d9d98
--- /dev/null
+++ b/code/modules/research/techweb/nodes/atmos_nodes.dm
@@ -0,0 +1,114 @@
+/datum/techweb_node/atmos
+ id = TECHWEB_NODE_ATMOS
+ starting_node = TRUE
+ display_name = "Atmospherics"
+ description = "Maintaining station air and related life support systems."
+ design_ids = list(
+ "atmos_control",
+ "atmosalerts",
+ "thermomachine",
+ "space_heater",
+ "generic_tank",
+ "oxygen_tank",
+ "plasma_tank",
+ "plasmaman_tank_belt",
+ "plasmarefiller",
+ "extinguisher",
+ "gas_filter",
+ "plasmaman_gas_filter",
+ "analyzer",
+ "pipe_painter",
+ )
+
+/datum/techweb_node/gas_compression
+ id = TECHWEB_NODE_GAS_COMPRESSION
+ display_name = "Gas Compression"
+ description = "Highly pressurized gases hold potential for unlocking immense energy capabilities."
+ prereq_ids = list(TECHWEB_NODE_ATMOS)
+ design_ids = list(
+ "tank_compressor",
+ "emergency_oxygen",
+ "emergency_oxygen_engi",
+ "power_turbine_console",
+ "turbine_part_compressor",
+ "turbine_part_rotor",
+ "turbine_part_stator",
+ "turbine_compressor",
+ "turbine_rotor",
+ "turbine_stator",
+ "atmos_thermal",
+ "pneumatic_seal",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/plasma_control
+ id = TECHWEB_NODE_PLASMA_CONTROL
+ display_name = "Controlled Plasma"
+ description = "Experiments with high-pressure gases and electricity resulting in crystallization and controlled plasma reactions."
+ prereq_ids = list(TECHWEB_NODE_GAS_COMPRESSION, TECHWEB_NODE_ENERGY_MANIPULATION)
+ design_ids = list(
+ "crystallizer",
+ "electrolyzer",
+ "pacman",
+ "mech_generator",
+ "plasmacutter",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+ required_experiments = list(/datum/experiment/ordnance/gaseous/plasma)
+
+/datum/techweb_node/fusion
+ id = TECHWEB_NODE_FUSION
+ display_name = "Fusion"
+ description = "Investigating fusion reactor technology to achieve sustainable and efficient energy production through controlled plasma reactions involving noble gases."
+ prereq_ids = list(TECHWEB_NODE_PLASMA_CONTROL)
+ design_ids = list(
+ "HFR_core",
+ "HFR_corner",
+ "HFR_fuel_input",
+ "HFR_interface",
+ "HFR_moderator_input",
+ "HFR_waste_output",
+ "bolter_wrench",
+ "rpd_loaded",
+ "engine_goggles",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+ required_experiments = list(/datum/experiment/ordnance/gaseous/bz)
+ discount_experiments = list(/datum/experiment/ordnance/gaseous/nitrous_oxide = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/exp_tools
+ id = TECHWEB_NODE_EXP_TOOLS
+ display_name = "Experimental Tools"
+ description = "Enhances the functionality and versatility of station tools."
+ prereq_ids = list(TECHWEB_NODE_FUSION)
+ design_ids = list(
+ "flatpacker",
+ "handdrill",
+ "exwelder",
+ "jawsoflife",
+ "rangedanalyzer",
+ "rtd_loaded",
+ "rcd_loaded",
+ "rcd_ammo",
+ "weldingmask",
+ "magboots",
+ "adv_fire_extinguisher",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
+ discount_experiments = list(/datum/experiment/ordnance/gaseous/noblium = TECHWEB_TIER_4_POINTS)
+
+/datum/techweb_node/rcd_upgrade
+ id = TECHWEB_NODE_RCD_UPGRADE
+ display_name = "Rapid Device Upgrade Designs"
+ description = "New designs and enhancements for RCD and RPD."
+ prereq_ids = list(TECHWEB_NODE_EXP_TOOLS, TECHWEB_NODE_PARTS_BLUESPACE)
+ design_ids = list(
+ "rcd_upgrade_silo_link",
+ "rcd_upgrade_anti_interrupt",
+ "rcd_upgrade_cooling",
+ "rcd_upgrade_frames",
+ "rcd_upgrade_furnishing",
+ "rcd_upgrade_simple_circuits",
+ "rpd_upgrade_unwrench",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
diff --git a/code/modules/research/techweb/nodes/bepis_nodes.dm b/code/modules/research/techweb/nodes/bepis_nodes.dm
new file mode 100644
index 0000000000000..ad5bb4c62bb1b
--- /dev/null
+++ b/code/modules/research/techweb/nodes/bepis_nodes.dm
@@ -0,0 +1,109 @@
+/datum/techweb_node/light_apps
+ id = TECHWEB_NODE_LIGHT_APPS
+ display_name = "Illumination Applications"
+ description = "Applications of lighting and vision technology not originally thought to be commercially viable."
+ design_ids = list(
+ "bright_helmet",
+ "rld_mini",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+ hidden = TRUE
+ experimental = TRUE
+
+/datum/techweb_node/extreme_office
+ id = TECHWEB_NODE_EXTREME_OFFICE
+ display_name = "Advanced Office Applications"
+ description = "Some of our smartest lab guys got together on a Friday and improved our office efficiency by 350%. Here's how."
+ design_ids = list(
+ "mauna_mug",
+ "rolling_table",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+ hidden = TRUE
+ experimental = TRUE
+
+/datum/techweb_node/spec_eng
+ id = TECHWEB_NODE_SPEC_ENG
+ display_name = "Specialized Engineering"
+ description = "Conventional wisdom has deemed these engineering products 'technically' safe, but far too dangerous to traditionally condone."
+ design_ids = list(
+ "eng_gloves",
+ "lava_rods",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+ hidden = TRUE
+ experimental = TRUE
+
+/datum/techweb_node/aus_security
+ id = TECHWEB_NODE_AUS_SECURITY
+ display_name = "Australicus Security Protocols"
+ description = "It is said that security in the Australicus sector is tight, so we took some pointers from their equipment. Thankfully, our sector lacks any signs of these, 'dropbears'."
+ design_ids = list(
+ "pin_explorer",
+ "stun_boomerang",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+ hidden = TRUE
+ experimental = TRUE
+
+/datum/techweb_node/interrogation
+ id = TECHWEB_NODE_INTERROGATION
+ display_name = "Enhanced Interrogation Technology"
+ description = "By cross-referencing several declassified documents from past dictatorial regimes, we were able to develop an incredibly effective interrogation device. \
+ Ethical concerns about loss of free will do not apply to criminals, according to galactic law."
+ design_ids = list(
+ "hypnochair",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+ hidden = TRUE
+ experimental = TRUE
+
+/datum/techweb_node/sticky_advanced
+ id = TECHWEB_NODE_STICKY_ADVANCED
+ display_name = "Advanced Sticky Technology"
+ description = "Taking a good joke too far? Nonsense!"
+ design_ids = list(
+ "pointy_tape",
+ "super_sticky_tape",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+ hidden = TRUE
+ experimental = TRUE
+
+/datum/techweb_node/tackle_advanced
+ id = TECHWEB_NODE_TACKLE_ADVANCED
+ display_name = "Advanced Grapple Technology"
+ description = "Nanotrasen would like to remind its researching staff that it is never acceptable to \"glomp\" your coworkers, and further \"scientific trials\" on the subject \
+ will no longer be accepted in its academic journals."
+ design_ids = list(
+ "tackle_dolphin",
+ "tackle_rocket",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+ hidden = TRUE
+ experimental = TRUE
+
+/datum/techweb_node/mod_experimental
+ id = TECHWEB_NODE_MOD_EXPERIMENTAL
+ display_name = "Experimental Modular Suits"
+ description = "Applications of experimentality when creating MODsuits have created these..."
+ design_ids = list(
+ "mod_disposal",
+ "mod_joint_torsion",
+ "mod_recycler",
+ "mod_shooting",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+ hidden = TRUE
+ experimental = TRUE
+
+/datum/techweb_node/posisphere
+ id = TECHWEB_NODE_POSITRONIC_SPHERE
+ display_name = "Experimental Spherical Positronic Brain"
+ description = "Recent developments on cost-cutting measures have allowed us to cut positronic brain cubes into twice-as-cheap spheres. Unfortunately, it also allows them to move around the lab via rolling maneuvers."
+ design_ids = list(
+ "posisphere",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+ hidden = TRUE
+ experimental = TRUE
diff --git a/code/modules/research/techweb/nodes/biology_nodes.dm b/code/modules/research/techweb/nodes/biology_nodes.dm
new file mode 100644
index 0000000000000..f8ee05c042c2e
--- /dev/null
+++ b/code/modules/research/techweb/nodes/biology_nodes.dm
@@ -0,0 +1,64 @@
+/datum/techweb_node/bio_scan
+ id = TECHWEB_NODE_BIO_SCAN
+ display_name = "Biological Scan"
+ description = "Advanced technology for analyzing patient health and reagent compositions, ensuring precise diagnostics and treatment in the medical bay."
+ prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP)
+ design_ids = list(
+ "healthanalyzer",
+ "autopsyscanner",
+ "genescanner",
+ "medical_kiosk",
+ "chem_master",
+ "ph_meter",
+ "scigoggles",
+ "mod_reagent_scanner",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/cytology
+ id = TECHWEB_NODE_CYTOLOGY
+ display_name = "Cytology"
+ description = "Cellular biology research focused on cultivation of limbs and diverse organisms from cells."
+ prereq_ids = list(TECHWEB_NODE_BIO_SCAN)
+ design_ids = list(
+ "limbgrower",
+ "pandemic",
+ "petri_dish",
+ "swab",
+ "biopsy_tool",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/xenobiology
+ id = TECHWEB_NODE_XENOBIOLOGY
+ display_name = "Xenobiology"
+ description = "Exploration of non-human biology, unlocking the secrets of extraterrestrial lifeforms and their unique biological processes."
+ prereq_ids = list(TECHWEB_NODE_CYTOLOGY)
+ design_ids = list(
+ "xenobioconsole",
+ "slime_scanner",
+ "limbdesign_ethereal",
+ "limbdesign_felinid",
+ "limbdesign_lizard",
+ "limbdesign_plasmaman",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+ required_experiments = list(/datum/experiment/scanning/random/cytology)
+
+/datum/techweb_node/gene_engineering
+ id = TECHWEB_NODE_GENE_ENGINEERING
+ display_name = "Gene Engineering"
+ description = "Research into sophisticated DNA manipulation techniques, enabling the modification of human genetic traits to unlock specific abilities and enhancements."
+ prereq_ids = list(TECHWEB_NODE_SELECTION, TECHWEB_NODE_XENOBIOLOGY)
+ design_ids = list(
+ "dnascanner",
+ "scan_console",
+ "dna_disk",
+ "dnainfuser",
+ "mod_dna_lock",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
+ discount_experiments = list(
+ /datum/experiment/scanning/random/plants/traits = TECHWEB_TIER_2_POINTS,
+ /datum/experiment/scanning/points/slime/hard = TECHWEB_TIER_2_POINTS,
+ )
diff --git a/code/modules/research/techweb/nodes/circuit_nodes.dm b/code/modules/research/techweb/nodes/circuit_nodes.dm
new file mode 100644
index 0000000000000..e654abbf4dffb
--- /dev/null
+++ b/code/modules/research/techweb/nodes/circuit_nodes.dm
@@ -0,0 +1,151 @@
+/datum/techweb_node/programming
+ id = TECHWEB_NODE_PROGRAMMING
+ starting_node = TRUE
+ display_name = "Programming"
+ description = "Dedicate an entire shift to program a fridge to greet you when opened."
+ prereq_ids = list(TECHWEB_NODE_ROBOTICS)
+ design_ids = list(
+ "component_printer",
+ "module_duplicator",
+ "circuit_multitool",
+ "compact_remote_shell",
+ "usb_cable",
+ "integrated_circuit",
+ "comp_access_checker",
+ "comp_arctan2",
+ "comp_arithmetic",
+ "comp_assoc_list_pick",
+ "comp_assoc_list_remove",
+ "comp_assoc_list_set",
+ "comp_binary_convert",
+ "comp_clock",
+ "comp_comparison",
+ "comp_concat",
+ "comp_concat_list",
+ "comp_decimal_convert",
+ "comp_delay",
+ "comp_direction",
+ "comp_element_find",
+ "comp_filter_list",
+ "comp_foreach",
+ "comp_format",
+ "comp_format_assoc",
+ "comp_get_column",
+ "comp_gps",
+ "comp_health",
+ "comp_health_state",
+ "comp_hear",
+ "comp_id_access_reader",
+ "comp_id_getter",
+ "comp_id_info_reader",
+ "comp_index",
+ "comp_index_assoc",
+ "comp_index_table",
+ "comp_laserpointer",
+ "comp_length",
+ "comp_light",
+ "comp_list_add",
+ "comp_list_assoc_literal",
+ "comp_list_clear",
+ "comp_list_literal",
+ "comp_list_pick",
+ "comp_list_remove",
+ "comp_logic",
+ "comp_matscanner",
+ "comp_mmi",
+ "comp_module",
+ "comp_multiplexer",
+ "comp_not",
+ "comp_ntnet_receive",
+ "comp_ntnet_send",
+ "comp_ntnet_send_list_literal",
+ "comp_pinpointer",
+ "comp_pressuresensor",
+ "comp_radio",
+ "comp_random",
+ "comp_reagents",
+ "comp_router",
+ "comp_select_query",
+ "comp_self",
+ "comp_set_variable_trigger",
+ "comp_soundemitter",
+ "comp_species",
+ "comp_speech",
+ "comp_speech",
+ "comp_split",
+ "comp_string_contains",
+ "comp_tempsensor",
+ "comp_textcase",
+ "comp_timepiece",
+ "comp_toggle",
+ "comp_tonumber",
+ "comp_tostring",
+ "comp_trigonometry",
+ "comp_typecast",
+ "comp_typecheck",
+ "comp_view_sensor",
+ )
+
+/datum/techweb_node/circuit_shells
+ id = TECHWEB_NODE_CIRCUIT_SHELLS
+ display_name = "Advanced Circuit Shells"
+ description = "Adding brains to more things."
+ prereq_ids = list(TECHWEB_NODE_PROGRAMMING)
+ design_ids = list(
+ "assembly_shell",
+ "bot_shell",
+ "controller_shell",
+ "dispenser_shell",
+ "door_shell",
+ "gun_shell",
+ "keyboard_shell",
+ "module_shell",
+ "money_bot_shell",
+ "scanner_gate_shell",
+ "scanner_shell",
+ "comp_equip_action",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/bci
+ id = TECHWEB_NODE_BCI
+ display_name = "Brain-Computer Interface"
+ description = "Embedded brain circuits. May occasionally stream Nanotrasen ads in dreams."
+ prereq_ids = list(TECHWEB_NODE_CIRCUIT_SHELLS, TECHWEB_NODE_PASSIVE_IMPLANTS)
+ design_ids = list(
+ "bci_implanter",
+ "bci_shell",
+ "comp_bar_overlay",
+ "comp_camera_bci",
+ "comp_counter_overlay",
+ "comp_install_detector",
+ "comp_object_overlay",
+ "comp_reagent_injector",
+ "comp_target_intercept",
+ "comp_thought_listener",
+ "comp_vox",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+ discount_experiments = list(/datum/experiment/scanning/people/skillchip = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/programmed_robot
+ id = TECHWEB_NODE_PROGRAMMED_ROBOT
+ display_name = "Programmed Robot"
+ description = "Grants access to movable shells, allowing for remote operations and pranks."
+ prereq_ids = list(TECHWEB_NODE_CIRCUIT_SHELLS)
+ design_ids = list(
+ "drone_shell",
+ "comp_pathfind",
+ "comp_pull",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/programmed_server
+ id = TECHWEB_NODE_PROGRAMMED_SERVER
+ display_name = "Programmed Server"
+ description = "Grants access to a server shell that has a very high capacity for components."
+ prereq_ids = list(TECHWEB_NODE_BCI)
+ design_ids = list(
+ "server_shell",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
diff --git a/code/modules/research/techweb/nodes/cyborg_nodes.dm b/code/modules/research/techweb/nodes/cyborg_nodes.dm
new file mode 100644
index 0000000000000..da9f485f2bf1f
--- /dev/null
+++ b/code/modules/research/techweb/nodes/cyborg_nodes.dm
@@ -0,0 +1,231 @@
+/datum/techweb_node/augmentation
+ id = TECHWEB_NODE_AUGMENTATION
+ starting_node = TRUE
+ display_name = "Augmentation"
+ description = "For those who prefer shiny metal over squishy flesh."
+ prereq_ids = list(TECHWEB_NODE_ROBOTICS)
+ design_ids = list(
+ "borg_chest",
+ "borg_head",
+ "borg_l_arm",
+ "borg_l_leg",
+ "borg_r_arm",
+ "borg_r_leg",
+ "cybernetic_eyes",
+ "cybernetic_eyes_moth",
+ "cybernetic_ears",
+ "cybernetic_lungs",
+ "cybernetic_stomach",
+ "cybernetic_liver",
+ "cybernetic_heart",
+ )
+
+/datum/techweb_node/cybernetics
+ id = TECHWEB_NODE_CYBERNETICS
+ display_name = "Cybernetics"
+ description = "Sapient robots with preloaded tool modules and programmable laws."
+ prereq_ids = list(TECHWEB_NODE_AUGMENTATION)
+ design_ids = list(
+ "robocontrol",
+ "borgupload",
+ "cyborgrecharger",
+ "borg_suit",
+ "mmi_posi",
+ "mmi",
+ "mmi_m",
+ "advanced_l_arm",
+ "advanced_r_arm",
+ "advanced_l_leg",
+ "advanced_r_leg",
+ "borg_upgrade_rename",
+ "borg_upgrade_restart",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/borg_service
+ id = TECHWEB_NODE_BORG_SERVICES
+ display_name = "Service Cyborg Upgrades"
+ description = "Let them do the cookin' by the book."
+ prereq_ids = list(TECHWEB_NODE_CYBERNETICS)
+ design_ids = list(
+ "borg_upgrade_rolling_table",
+ "borg_upgrade_condiment_synthesizer",
+ "borg_upgrade_silicon_knife",
+ "borg_upgrade_service_apparatus",
+ "borg_upgrade_drink_apparatus",
+ "borg_upgrade_service_cookbook",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/borg_mining
+ id = TECHWEB_NODE_BORG_MINING
+ display_name = "Mining Cyborg Upgrades"
+ description = "To mine places too dangerous for humans."
+ prereq_ids = list(TECHWEB_NODE_CYBERNETICS)
+ design_ids = list(
+ "borg_upgrade_lavaproof",
+ "borg_upgrade_holding",
+ "borg_upgrade_diamonddrill",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/borg_medical
+ id = TECHWEB_NODE_BORG_MEDICAL
+ display_name = "Medical Cyborg Upgrades"
+ description = "Let them follow Asimov's First Law."
+ prereq_ids = list(TECHWEB_NODE_BORG_SERVICES, TECHWEB_NODE_SURGERY_ADV)
+ design_ids = list(
+ "borg_upgrade_pinpointer",
+ "borg_upgrade_beakerapp",
+ "borg_upgrade_defibrillator",
+ "borg_upgrade_expandedsynthesiser",
+ "borg_upgrade_piercinghypospray",
+ "borg_upgrade_surgicalprocessor",
+ "borg_upgrade_surgicalomnitool",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/borg_utility
+ id = TECHWEB_NODE_BORG_UTILITY
+ display_name = "Untility Cyborg Upgrades"
+ description = "Let them wipe our floors for us."
+ prereq_ids = list(TECHWEB_NODE_BORG_SERVICES, TECHWEB_NODE_SANITATION)
+ design_ids = list(
+ "borg_upgrade_advancedmop",
+ "borg_upgrade_broomer",
+ "borg_upgrade_expand",
+ "borg_upgrade_prt",
+ "borg_upgrade_selfrepair",
+ "borg_upgrade_thrusters",
+ "borg_upgrade_trashofholding",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/borg_utility/New()
+ . = ..()
+ if(!CONFIG_GET(flag/disable_secborg))
+ design_ids += "borg_upgrade_disablercooler"
+
+/datum/techweb_node/borg_engi
+ id = TECHWEB_NODE_BORG_ENGI
+ display_name = "Engineering Cyborg Upgrades"
+ description = "To slack even more."
+ prereq_ids = list(TECHWEB_NODE_BORG_MINING, TECHWEB_NODE_PARTS_UPG)
+ design_ids = list(
+ "borg_upgrade_rped",
+ "borg_upgrade_engineeringomnitool",
+ "borg_upgrade_circuitapp",
+ "borg_upgrade_inducer",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+
+// Implants root node
+/datum/techweb_node/passive_implants
+ id = TECHWEB_NODE_PASSIVE_IMPLANTS
+ display_name = "Passive Implants"
+ description = "Implants designed to operate seamlessly without active user input, enhancing various physiological functions or providing continuous benefits."
+ prereq_ids = list(TECHWEB_NODE_AUGMENTATION)
+ design_ids = list(
+ "skill_station",
+ "implant_trombone",
+ "implant_chem",
+ "implant_tracking",
+ "implant_exile",
+ "implant_beacon",
+ "implant_bluespace",
+ "implantcase",
+ "implanter",
+ "locator",
+ "c38_trac",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/cyber/cyber_implants
+ id = TECHWEB_NODE_CYBER_IMPLANTS
+ display_name = "Cybernetic Implants"
+ description = "Advanced technological enhancements integrated into the body, offering improved physical capabilities."
+ prereq_ids = list(TECHWEB_NODE_PASSIVE_IMPLANTS, TECHWEB_NODE_CYBERNETICS)
+ design_ids = list(
+ "ci-breather",
+ "ci-nutriment",
+ "ci-thrusters",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/cyber/New()
+ ..()
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION))
+ research_costs[TECHWEB_POINT_TYPE_GENERIC] /= 2
+
+/datum/techweb_node/cyber/combat_implants
+ id = TECHWEB_NODE_COMBAT_IMPLANTS
+ display_name = "Combat Implants"
+ description = "To make sure that you can wake the f*** up, samurai."
+ prereq_ids = list(TECHWEB_NODE_CYBER_IMPLANTS)
+ design_ids = list(
+ "ci-reviver",
+ "ci-antidrop",
+ "ci-antistun",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
+
+/datum/techweb_node/cyber/integrated_toolsets
+ id = TECHWEB_NODE_INTERGRATED_TOOLSETS
+ display_name = "Integrated Toolsets"
+ description = "Decades of contraband smuggling by assistants have led to the development of a full toolbox that fits seamlessly into your arm."
+ prereq_ids = list(TECHWEB_NODE_COMBAT_IMPLANTS, TECHWEB_NODE_EXP_TOOLS)
+ design_ids = list(
+ "ci-nutrimentplus",
+ "ci-toolset",
+ "ci-surgery",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
+
+/datum/techweb_node/cyber/cyber_organs
+ id = TECHWEB_NODE_CYBER_ORGANS
+ display_name = "Cybernetic Organs"
+ description = "We have the technology to rebuild him."
+ prereq_ids = list(TECHWEB_NODE_CYBERNETICS)
+ design_ids = list(
+ "cybernetic_eyes_improved",
+ "cybernetic_eyes_improved_moth",
+ "cybernetic_ears_u",
+ "cybernetic_lungs_tier2",
+ "cybernetic_stomach_tier2",
+ "cybernetic_liver_tier2",
+ "cybernetic_heart_tier2",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/cyber/cyber_organs_upgraded
+ id = TECHWEB_NODE_CYBER_ORGANS_UPGRADED
+ display_name = "Upgraded Cybernetic Organs"
+ description = "We have the technology to upgrade him."
+ prereq_ids = list(TECHWEB_NODE_CYBER_ORGANS)
+ design_ids = list(
+ "ci-gloweyes",
+ "ci-welding",
+ "ci-gloweyes-moth",
+ "ci-welding-moth",
+ "cybernetic_ears_whisper",
+ "cybernetic_lungs_tier3",
+ "cybernetic_stomach_tier3",
+ "cybernetic_liver_tier3",
+ "cybernetic_heart_tier3",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
+ required_experiments = list(/datum/experiment/scanning/people/augmented_organs)
+
+/datum/techweb_node/cyber/cyber_organs_adv
+ id = TECHWEB_NODE_CYBER_ORGANS_ADV
+ display_name = "Advanced Cybernetic Organs"
+ description = "Cutting-edge cybernetic organs offering enhanced sensory capabilities, making it easier than ever to detect ERP."
+ prereq_ids = list(TECHWEB_NODE_CYBER_ORGANS_UPGRADED, TECHWEB_NODE_NIGHT_VISION)
+ design_ids = list(
+ "cybernetic_ears_xray",
+ "ci-thermals",
+ "ci-xray",
+ "ci-thermals-moth",
+ "ci-xray-moth",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
diff --git a/code/modules/research/techweb/nodes/engi_nodes.dm b/code/modules/research/techweb/nodes/engi_nodes.dm
new file mode 100644
index 0000000000000..cb487f41b8db1
--- /dev/null
+++ b/code/modules/research/techweb/nodes/engi_nodes.dm
@@ -0,0 +1,237 @@
+// Parts root node
+/datum/techweb_node/parts
+ id = TECHWEB_NODE_PARTS
+ starting_node = TRUE
+ display_name = "Essential Stock Parts"
+ description = "Foundational components that form the backbone of station operations, encompassing a range of essential equipment necessary for day-to-day functionality."
+ design_ids = list(
+ "micro_servo",
+ "basic_battery",
+ "basic_capacitor",
+ "basic_cell",
+ "basic_matter_bin",
+ "basic_micro_laser",
+ "basic_scanning",
+ "high_battery",
+ "high_cell",
+ "miniature_power_cell",
+ "condenser",
+ "igniter",
+ "infrared_emitter",
+ "prox_sensor",
+ "signaler",
+ "timer",
+ "voice_analyzer",
+ "health_sensor",
+ "sflash",
+ )
+
+/datum/techweb_node/parts_upg
+ id = TECHWEB_NODE_PARTS_UPG
+ display_name = "Upgraded Parts"
+ description = "Offering enhanced capabilities beyond their basic counterparts."
+ prereq_ids = list(TECHWEB_NODE_PARTS, TECHWEB_NODE_ENERGY_MANIPULATION)
+ design_ids = list(
+ "rped",
+ "high_micro_laser",
+ "adv_capacitor",
+ "nano_servo",
+ "adv_matter_bin",
+ "adv_scanning",
+ "super_battery",
+ "super_cell",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/parts_adv
+ id = TECHWEB_NODE_PARTS_ADV
+ display_name = "Advanced Parts"
+ description = "The most finely tuned and accurate stock parts."
+ prereq_ids = list(TECHWEB_NODE_PARTS_UPG)
+ design_ids = list(
+ "ultra_micro_laser",
+ "super_capacitor",
+ "pico_servo",
+ "super_matter_bin",
+ "phasic_scanning",
+ "hyper_battery",
+ "hyper_cell",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+ required_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier2_any)
+
+
+/datum/techweb_node/parts_bluespace
+ id = TECHWEB_NODE_PARTS_BLUESPACE
+ display_name = "Bluespace Parts"
+ description = "Integrating the latest in bluespace technology, these advanced components not only enhance functionality but also open up new possibilities for the station's technological capabilities."
+ prereq_ids = list(TECHWEB_NODE_PARTS_ADV, TECHWEB_NODE_BLUESPACE_TRAVEL)
+ design_ids = list(
+ "bs_rped",
+ "quadultra_micro_laser",
+ "quadratic_capacitor",
+ "femto_servo",
+ "bluespace_matter_bin",
+ "triphasic_scanning",
+ "bluespace_battery",
+ "bluespace_cell",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
+ discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_any = TECHWEB_TIER_4_POINTS)
+
+/datum/techweb_node/telecomms
+ id = TECHWEB_NODE_TELECOMS
+ display_name = "Telecommunications Technology"
+ description = "A comprehensive suite of machinery for station-wide communication setups, ensuring seamless connectivity and operational coordination."
+ prereq_ids = list(TECHWEB_NODE_PARTS_BLUESPACE)
+ design_ids = list(
+ "comm_monitor",
+ "comm_server",
+ "message_monitor",
+ "s_hub",
+ "s_messaging",
+ "s_server",
+ "s_processor",
+ "s_relay",
+ "s_bus",
+ "s_broadcaster",
+ "s_receiver",
+ "s_amplifier",
+ "s_analyzer",
+ "s_ansible",
+ "s_crystal",
+ "s_filter",
+ "s_transmitter",
+ "s_treatment",
+ "gigabeacon",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
+
+// Engineering root node
+/datum/techweb_node/construction
+ id = TECHWEB_NODE_CONSTRUCTION
+ starting_node = TRUE
+ display_name = "Construction"
+ description = "Tools and essential machinery used for station maintenance and expansion."
+ design_ids = list(
+ "circuit_imprinter_offstation",
+ "circuit_imprinter",
+ "solarcontrol",
+ "solar_panel",
+ "solar_tracker",
+ "power_control",
+ "airalarm_electronics",
+ "airlock_board",
+ "firealarm_electronics",
+ "firelock_board",
+ "trapdoor_electronics",
+ "blast",
+ "tile_sprayer",
+ "airlock_painter",
+ "decal_painter",
+ "rwd",
+ "cable_coil",
+ "welding_helmet",
+ "welding_tool",
+ "tscanner",
+ "analyzer",
+ "multitool",
+ "wrench",
+ "crowbar",
+ "screwdriver",
+ "wirecutters",
+ "light_bulb",
+ "light_tube",
+ "intercom_frame",
+ "newscaster_frame",
+ "status_display_frame",
+ "circuit",
+ "circuitgreen",
+ "circuitred",
+ "tram_floor_dark",
+ "tram_floor_light",
+ "tram_controller",
+ "tram_display",
+ "crossing_signal",
+ "guideway_sensor",
+ )
+
+/datum/techweb_node/energy_manipulation
+ id = TECHWEB_NODE_ENERGY_MANIPULATION
+ display_name = "Energy Manipulation"
+ description = "Harnessing the raw power of lightning arcs through sophisticated energy control methods."
+ prereq_ids = list(TECHWEB_NODE_CONSTRUCTION)
+ design_ids = list(
+ "apc_control",
+ "powermonitor",
+ "smes",
+ "emitter",
+ "grounding_rod",
+ "tesla_coil",
+ "cell_charger",
+ "recharger",
+ "inducer",
+ "inducerengi",
+ "welding_goggles",
+ "tray_goggles",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/holographics
+ id = TECHWEB_NODE_HOLOGRAPHICS
+ display_name = "Holographics"
+ description = "Use of holographic technology for signage and barriers."
+ prereq_ids = list(TECHWEB_NODE_ENERGY_MANIPULATION)
+ design_ids = list(
+ "forcefield_projector",
+ "holosign",
+ "holosignsec",
+ "holosignengi",
+ "holosignatmos",
+ "holosignrestaurant",
+ "holosignbar",
+ "holobarrier_jani",
+ "holobarrier_med",
+ "holopad",
+ "vendatray",
+ "holodisk",
+ "modular_shield_generator",
+ "modular_shield_node",
+ "modular_shield_relay",
+ "modular_shield_charger",
+ "modular_shield_well",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/hud
+ id = TECHWEB_NODE_HUD
+ display_name = "Integrated HUDs"
+ description = "Initially developed for assistants to learn the nuances of different professions through augmented reality."
+ prereq_ids = list(TECHWEB_NODE_HOLOGRAPHICS, TECHWEB_NODE_CYBER_IMPLANTS)
+ design_ids = list(
+ "health_hud",
+ "diagnostic_hud",
+ "security_hud",
+ "mod_visor_medhud",
+ "mod_visor_diaghud",
+ "mod_visor_sechud",
+ "ci-medhud",
+ "ci-diaghud",
+ "ci-sechud",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/night_vision
+ id = TECHWEB_NODE_NIGHT_VISION
+ display_name = "Night Vision Technology"
+ description = "There are whispers that Nanotrasen pushed for this technology to extend shift durations, ensuring productivity around the clock."
+ prereq_ids = list(TECHWEB_NODE_HUD)
+ design_ids = list(
+ "diagnostic_hud_night",
+ "health_hud_night",
+ "night_visision_goggles",
+ "nvgmesons",
+ "nv_scigoggles",
+ "security_hud_night",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
diff --git a/code/modules/research/techweb/nodes/mech_nodes.dm b/code/modules/research/techweb/nodes/mech_nodes.dm
new file mode 100644
index 0000000000000..5f3d302132333
--- /dev/null
+++ b/code/modules/research/techweb/nodes/mech_nodes.dm
@@ -0,0 +1,251 @@
+/datum/techweb_node/mech_assembly
+ id = TECHWEB_NODE_MECH_ASSEMBLY
+ starting_node = TRUE
+ display_name = "Mech Assembly"
+ description = "Development of mech designed to contend with artificial gravity while transporting cargo."
+ prereq_ids = list(TECHWEB_NODE_ROBOTICS)
+ design_ids = list(
+ "mechapower",
+ "mech_recharger",
+ "ripley_chassis",
+ "ripley_torso",
+ "ripley_left_arm",
+ "ripley_right_arm",
+ "ripley_left_leg",
+ "ripley_right_leg",
+ "ripley_main",
+ "ripley_peri",
+ "mech_hydraulic_clamp",
+ )
+
+/datum/techweb_node/mech_equipment
+ id = TECHWEB_NODE_MECH_EQUIPMENT
+ display_name = "Expedition Equipment"
+ description = "Specialized mech gear tailored for navigating space and celestial bodies, ensuring durability and functionality in the harshest conditions."
+ prereq_ids = list(TECHWEB_NODE_MECH_ASSEMBLY)
+ design_ids = list(
+ "mechacontrol",
+ "botpad",
+ "botpad_remote",
+ "ripleyupgrade",
+ "mech_air_tank",
+ "mech_thrusters",
+ "mech_extinguisher",
+ "mecha_camera",
+ "mecha_tracking",
+ "mech_radio",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/mech_clown
+ id = TECHWEB_NODE_MECH_CLOWN
+ display_name = "Funny Robots"
+ description = "Fueled by laughter."
+ prereq_ids = list(TECHWEB_NODE_MECH_ASSEMBLY)
+ design_ids = list(
+ "honk_chassis",
+ "honk_torso",
+ "honk_head",
+ "honk_left_arm",
+ "honk_right_arm",
+ "honk_left_leg",
+ "honk_right_leg",
+ "honker_main",
+ "honker_peri",
+ "honker_targ",
+ "mech_banana_mortar",
+ "mech_honker",
+ "mech_mousetrap_mortar",
+ "mech_punching_face",
+ "borg_transform_clown",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/mech_medical
+ id = TECHWEB_NODE_MECH_MEDICAL
+ display_name = "Medical Mech"
+ description = "Advanced robotic unit equipped with syringe guns and healing beams, revolutionizing medical assistance in hazardous environments."
+ prereq_ids = list(TECHWEB_NODE_MECH_ASSEMBLY, TECHWEB_NODE_CHEM_SYNTHESIS)
+ design_ids = list(
+ "odysseus_chassis",
+ "odysseus_torso",
+ "odysseus_head",
+ "odysseus_left_arm",
+ "odysseus_right_arm",
+ "odysseus_left_leg",
+ "odysseus_right_leg",
+ "odysseus_main",
+ "odysseus_peri",
+ "mech_medi_beam",
+ "mech_syringe_gun",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/mech_mining
+ id = TECHWEB_NODE_MECH_MINING
+ display_name = "Mining Mech"
+ description = "Robust mech engineered to withstand lava and storms for continuous off-station mining operations."
+ prereq_ids = list(TECHWEB_NODE_MECH_EQUIPMENT, TECHWEB_NODE_MINING)
+ design_ids = list(
+ "clarke_chassis",
+ "clarke_torso",
+ "clarke_head",
+ "clarke_left_arm",
+ "clarke_right_arm",
+ "clarke_main",
+ "clarke_peri",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/mech_combat
+ id = TECHWEB_NODE_MECH_COMBAT
+ display_name = "Combat Mechs"
+ description = "Modular armor upgrades and specialized equipment for security mechs."
+ prereq_ids = list(TECHWEB_NODE_MECH_EQUIPMENT)
+ design_ids = list(
+ "mech_ccw_armor",
+ "mech_proj_armor",
+ "paddyupgrade",
+ "mech_hydraulic_claw",
+ "mech_disabler",
+ "mech_repair_droid",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+ required_experiments = list(/datum/experiment/scanning/random/mecha_equipped_scan)
+ discount_experiments = list(/datum/experiment/scanning/random/mecha_damage_scan = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/mech_assault
+ id = TECHWEB_NODE_MECH_ASSAULT
+ display_name = "Assault Mech"
+ description = "Heavy battle mech boasting robust armor but sacrificing speed for enhanced durability."
+ prereq_ids = list(TECHWEB_NODE_MECH_COMBAT)
+ design_ids = list(
+ "durand_armor",
+ "durand_chassis",
+ "durand_torso",
+ "durand_head",
+ "durand_left_arm",
+ "durand_right_arm",
+ "durand_left_leg",
+ "durand_right_leg",
+ "durand_main",
+ "durand_peri",
+ "durand_targ",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/mech_light
+ id = TECHWEB_NODE_MECH_LIGHT
+ display_name = "Light Combat Mech"
+ description = "Agile combat mech equipped with overclocking capabilities for temporary speed boosts, prioritizing speed over durability on the battlefield."
+ prereq_ids = list(TECHWEB_NODE_MECH_COMBAT)
+ design_ids = list(
+ "gygax_armor",
+ "gygax_chassis",
+ "gygax_torso",
+ "gygax_head",
+ "gygax_left_arm",
+ "gygax_right_arm",
+ "gygax_left_leg",
+ "gygax_right_leg",
+ "gygax_main",
+ "gygax_peri",
+ "gygax_targ",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/mech_heavy
+ id = TECHWEB_NODE_MECH_HEAVY
+ display_name = "Heavy Mech"
+ description = "Advanced heavy mechanized unit with dual pilot capability, designed for robust battlefield performance and increased tactical versatility."
+ prereq_ids = list(TECHWEB_NODE_MECH_ASSAULT)
+ design_ids = list(
+ "savannah_ivanov_armor",
+ "savannah_ivanov_chassis",
+ "savannah_ivanov_torso",
+ "savannah_ivanov_head",
+ "savannah_ivanov_left_arm",
+ "savannah_ivanov_right_arm",
+ "savannah_ivanov_left_leg",
+ "savannah_ivanov_right_leg",
+ "savannah_ivanov_main",
+ "savannah_ivanov_peri",
+ "savannah_ivanov_targ",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
+
+/datum/techweb_node/mech_infiltrator
+ id = TECHWEB_NODE_MECH_INFILTRATOR
+ display_name = "Infiltration Mech"
+ description = "Advanced mech with phasing capabilities, allowing it to move through walls and obstacles, ideal for covert and special operations."
+ prereq_ids = list(TECHWEB_NODE_MECH_LIGHT, TECHWEB_NODE_ANOMALY_RESEARCH)
+ design_ids = list(
+ "phazon_armor",
+ "phazon_chassis",
+ "phazon_torso",
+ "phazon_head",
+ "phazon_left_arm",
+ "phazon_right_arm",
+ "phazon_left_leg",
+ "phazon_right_leg",
+ "phazon_main",
+ "phazon_peri",
+ "phazon_targ",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
+
+/datum/techweb_node/mech_energy_guns
+ id = TECHWEB_NODE_MECH_ENERGY_GUNS
+ display_name = "Mech Energy Guns"
+ description = "Scaled-up versions of electric weapons optimized for mech deployment."
+ prereq_ids = list(TECHWEB_NODE_MECH_COMBAT, TECHWEB_NODE_ELECTRIC_WEAPONS)
+ design_ids = list(
+ "mech_laser",
+ "mech_laser_heavy",
+ "mech_ion",
+ "mech_tesla",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
+
+/datum/techweb_node/mech_firearms
+ id = TECHWEB_NODE_MECH_FIREARMS
+ display_name = "Mech Firearms"
+ description = "Mounted ballistic weaponry, enhancing combat capabilities for mechanized units."
+ prereq_ids = list(TECHWEB_NODE_MECH_ENERGY_GUNS, TECHWEB_NODE_EXOTIC_AMMO)
+ design_ids = list(
+ "mech_lmg",
+ "mech_lmg_ammo",
+ "mech_scattershot",
+ "mech_scattershot_ammo",
+ "mech_carbine",
+ "mech_carbine_ammo",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
+
+/datum/techweb_node/mech_heavy_arms
+ id = TECHWEB_NODE_MECH_HEAVY_ARMS
+ display_name = "Heavy Mech Firearms"
+ description = "High-impact weaponry integrated into mechs, optimized for maximum firepower."
+ prereq_ids = list(TECHWEB_NODE_MECH_HEAVY, TECHWEB_NODE_EXOTIC_AMMO)
+ design_ids = list(
+ "clusterbang_launcher",
+ "clusterbang_launcher_ammo",
+ "mech_grenade_launcher",
+ "mech_grenade_launcher_ammo",
+ "mech_missile_rack",
+ "mech_missile_rack_ammo",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
+
+/datum/techweb_node/mech_equip_bluespace
+ id = TECHWEB_NODE_BLUESPACE
+ display_name = "Bluespace Mech Equipment"
+ description = "An array of equipment empowered by bluespace, providing unmatched mobility and utility."
+ prereq_ids = list(TECHWEB_NODE_MECH_INFILTRATOR, TECHWEB_NODE_BLUESPACE_TRAVEL)
+ design_ids = list(
+ "mech_gravcatapult",
+ "mech_teleporter",
+ "mech_wormhole_gen",
+ "mech_rcd",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
diff --git a/code/modules/research/techweb/nodes/medbay_nodes.dm b/code/modules/research/techweb/nodes/medbay_nodes.dm
new file mode 100644
index 0000000000000..3f2239ced22e9
--- /dev/null
+++ b/code/modules/research/techweb/nodes/medbay_nodes.dm
@@ -0,0 +1,102 @@
+/datum/techweb_node/medbay_equip
+ id = TECHWEB_NODE_MEDBAY_EQUIP
+ starting_node = TRUE
+ display_name = "Medbay Equipment"
+ description = "Essential medical tools to patch you up while medbay is still intact."
+ design_ids = list(
+ "operating",
+ "medicalbed",
+ "defibmountdefault",
+ "defibrillator",
+ "surgical_drapes",
+ "scalpel",
+ "retractor",
+ "hemostat",
+ "cautery",
+ "circular_saw",
+ "surgicaldrill",
+ "bonesetter",
+ "blood_filter",
+ "surgical_tape",
+ "penlight",
+ "penlight_paramedic",
+ "stethoscope",
+ "beaker",
+ "large_beaker",
+ "syringe",
+ "dropper",
+ "pillbottle",
+ )
+ experiments_to_unlock = list(
+ /datum/experiment/autopsy/human,
+ /datum/experiment/autopsy/nonhuman,
+ /datum/experiment/autopsy/xenomorph,
+ )
+
+/datum/techweb_node/chem_synthesis
+ id = TECHWEB_NODE_CHEM_SYNTHESIS
+ display_name = "Chemical Synthesis"
+ description = "Synthesizing complex chemicals from electricity and thin air... Don't ask how..."
+ prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP)
+ design_ids = list(
+ "xlarge_beaker",
+ "blood_pack",
+ "chem_pack",
+ "med_spray_bottle",
+ "medigel",
+ "medipen_refiller",
+ "soda_dispenser",
+ "beer_dispenser",
+ "chem_dispenser",
+ "portable_chem_mixer",
+ "chem_heater",
+ "w-recycler",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/plumbing
+ id = TECHWEB_NODE_PLUMBING
+ display_name = "Plumbing"
+ description = "Essential infrastructure for building chemical factories. To scale up the production of happy pills to an industrial level."
+ prereq_ids = list(TECHWEB_NODE_CHEM_SYNTHESIS)
+ design_ids = list(
+ "plumbing_rcd",
+ "plumbing_rcd_service",
+ "plumbing_rcd_sci",
+ "plunger",
+ "fluid_ducts",
+ "meta_beaker",
+ "piercesyringe",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/cryostasis
+ id = TECHWEB_NODE_CRYOSTASIS
+ display_name = "Cryostasis"
+ description = "The result of clown accidentally drinking a chemical, now repurposed for safely preserving crew members in suspended animation."
+ prereq_ids = list(TECHWEB_NODE_PLUMBING, TECHWEB_NODE_PLASMA_CONTROL)
+ design_ids = list(
+ "cryotube",
+ "mech_sleeper",
+ "stasis",
+ "cryo_grenade",
+ "splitbeaker",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+ required_experiments = list(/datum/experiment/scanning/reagent/cryostylane)
+
+/datum/techweb_node/medbay_equip_adv
+ id = TECHWEB_NODE_MEDBAY_EQUIP_ADV
+ display_name = "Advanced Medbay Equipment"
+ description = "State-of-the-art medical gear for keeping the crew in one piece — mostly."
+ prereq_ids = list(TECHWEB_NODE_CRYOSTASIS)
+ design_ids = list(
+ "chem_mass_spec",
+ "healthanalyzer_advanced",
+ "mod_health_analyzer",
+ "crewpinpointer",
+ "defibrillator_compact",
+ "defibmount",
+ "medicalbed_emergency",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
diff --git a/code/modules/research/techweb/nodes/mining_nodes.dm b/code/modules/research/techweb/nodes/mining_nodes.dm
new file mode 100644
index 0000000000000..d8a6539caa3ff
--- /dev/null
+++ b/code/modules/research/techweb/nodes/mining_nodes.dm
@@ -0,0 +1,104 @@
+/datum/techweb_node/material_processing
+ id = TECHWEB_NODE_MATERIAL_PROC
+ starting_node = TRUE
+ display_name = "Material Processing"
+ description = "Refinement and processing of alloys and ores to enhance their utility and value."
+ design_ids = list(
+ "pickaxe",
+ "shovel",
+ "conveyor_switch",
+ "conveyor_belt",
+ "mass_driver",
+ "recycler",
+ "stack_machine",
+ "stack_console",
+ "autolathe",
+ "rglass",
+ "plasmaglass",
+ "plasmareinforcedglass",
+ "plasteel",
+ "titaniumglass",
+ "plastitanium",
+ "plastitaniumglass",
+ )
+
+/datum/techweb_node/mining
+ id = TECHWEB_NODE_MINING
+ display_name = "Mining Technology"
+ description = "Development of tools meant to optimize mining operations and resource extraction."
+ prereq_ids = list(TECHWEB_NODE_MATERIAL_PROC)
+ design_ids = list(
+ "cargoexpress",
+ "brm",
+ "b_smelter",
+ "b_refinery",
+ "ore_redemption",
+ "mining_equipment_vendor",
+ "mining_scanner",
+ "mech_mscanner",
+ "superresonator",
+ "mech_drill",
+ "mod_drill",
+ "drill",
+ "mod_orebag",
+ "beacon",
+ "telesci_gps",
+ "mod_gps",
+ "mod_visor_meson",
+ "mesons",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/low_pressure_excavation
+ id = TECHWEB_NODE_LOW_PRESSURE_EXCAVATION
+ display_name = "Low-Pressure Excavation"
+ description = "Research of Proto-Kinetic Accelerators (PKAs), pneumatic guns renowned for their exceptional performance in low-pressure environments."
+ prereq_ids = list(TECHWEB_NODE_MINING, TECHWEB_NODE_GAS_COMPRESSION)
+ design_ids = list(
+ "mecha_kineticgun",
+ "damagemod",
+ "rangemod",
+ "cooldownmod",
+ "triggermod",
+ "hypermod",
+ "borg_upgrade_damagemod",
+ "borg_upgrade_rangemod",
+ "borg_upgrade_cooldownmod",
+ "borg_upgrade_hypermod",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/plasma_mining
+ id = TECHWEB_NODE_PLASMA_MINING
+ display_name = "Plasma Beam Mining"
+ description = "Engineers' plasma welders have proven highly effective in mining operations. This led to the development of a mech-mounted variant and an enhanced handheld cutter for miners."
+ prereq_ids = list(TECHWEB_NODE_LOW_PRESSURE_EXCAVATION, TECHWEB_NODE_PLASMA_CONTROL)
+ design_ids = list(
+ "mech_plasma_cutter",
+ "plasmacutter_adv",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/bitrunning
+ id = TECHWEB_NODE_BITRUNNING
+ display_name = "Bitrunning Technology"
+ description = "Bluespace technology has led to the development of quantum-scale computing, which unlocks the means to materialize atomic structures while executing advanced programs."
+ prereq_ids = list(TECHWEB_NODE_GAMING, TECHWEB_NODE_APPLIED_BLUESPACE)
+ design_ids = list(
+ "byteforge",
+ "quantum_console",
+ "netpod",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/mining_adv
+ id = TECHWEB_NODE_MINING_ADV
+ display_name = "Advanced Mining Technology"
+ description = "High-level mining equipment, pushing the boundaries of efficiency and effectiveness in resource extraction."
+ prereq_ids = list(TECHWEB_NODE_PLASMA_MINING)
+ design_ids = list(
+ "jackhammer",
+ "drill_diamond",
+ "mech_diamond_drill",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
diff --git a/code/modules/research/techweb/nodes/modsuit_nodes.dm b/code/modules/research/techweb/nodes/modsuit_nodes.dm
new file mode 100644
index 0000000000000..2e74663eed419
--- /dev/null
+++ b/code/modules/research/techweb/nodes/modsuit_nodes.dm
@@ -0,0 +1,139 @@
+/datum/techweb_node/mod_suit
+ id = TECHWEB_NODE_MOD_SUIT
+ starting_node = TRUE
+ display_name = "Modular Exosuit"
+ description = "Specialized back mounted power suits with various different modules."
+ prereq_ids = list(TECHWEB_NODE_ROBOTICS)
+ design_ids = list(
+ "suit_storage_unit",
+ "mod_shell",
+ "mod_chestplate",
+ "mod_helmet",
+ "mod_gauntlets",
+ "mod_boots",
+ "mod_plating_standard",
+ "mod_paint_kit",
+ "mod_storage",
+ "mod_plasma",
+ "mod_flashlight",
+ )
+
+/datum/techweb_node/mod_equip
+ id = TECHWEB_NODE_MOD_EQUIP
+ display_name = "Modular Suit Equipment"
+ description = "More advanced modules, to improve modular suits."
+ prereq_ids = list(TECHWEB_NODE_MOD_SUIT)
+ design_ids = list(
+ "modlink_scryer",
+ "mod_clamp",
+ "mod_tether",
+ "mod_welding",
+ "mod_safety",
+ "mod_mouthhole",
+ "mod_longfall",
+ "mod_thermal_regulator",
+ "mod_sign_radio",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/mod_entertainment
+ id = TECHWEB_NODE_MOD_ENTERTAINMENT
+ display_name = "Entertainment Modular Suit"
+ description = "Powered suits for protection against low-humor environments."
+ prereq_ids = list(TECHWEB_NODE_MOD_SUIT)
+ design_ids = list(
+ "mod_plating_cosmohonk",
+ "mod_bikehorn",
+ "mod_microwave_beam",
+ "mod_waddle",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/mod_medical
+ id = TECHWEB_NODE_MOD_MEDICAL
+ display_name = "Medical Modular Suit"
+ description = "Medical exosuits for quick rescue purposes."
+ prereq_ids = list(TECHWEB_NODE_MOD_SUIT, TECHWEB_NODE_CHEM_SYNTHESIS)
+ design_ids = list(
+ "mod_plating_medical",
+ "mod_quick_carry",
+ "mod_injector",
+ "mod_organ_thrower",
+ "mod_patienttransport",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/mod_engi
+ id = TECHWEB_NODE_MOD_ENGI
+ display_name = "Engineering Modular Suits"
+ description = "Engineering suits, for powered engineers."
+ prereq_ids = list(TECHWEB_NODE_MOD_EQUIP)
+ design_ids = list(
+ "mod_plating_engineering",
+ "mod_t_ray",
+ "mod_magboot",
+ "mod_constructor",
+ "mod_mister_atmos",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/mod_security
+ id = TECHWEB_NODE_MOD_SECURITY
+ display_name = "Security Modular Suits"
+ description = "Security suits for space crime handling."
+ prereq_ids = list(TECHWEB_NODE_MOD_EQUIP)
+ design_ids = list(
+ "mod_plating_security",
+ "mod_stealth",
+ "mod_mag_harness",
+ "mod_pathfinder",
+ "mod_holster",
+ "mod_sonar",
+ "mod_projectile_dampener",
+ "mod_criminalcapture",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/mod_medical_adv
+ id = TECHWEB_NODE_MOD_MEDICAL_ADV
+ display_name = "Field Surgery Modules"
+ description = "Medical exosuit equipment designed for conducting surgical operations in field conditions."
+ prereq_ids = list(TECHWEB_NODE_MOD_MEDICAL, TECHWEB_NODE_SURGERY_ADV)
+ design_ids = list(
+ "mod_defib",
+ "mod_threadripper",
+ "mod_surgicalprocessor",
+ "mod_statusreadout",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/mod_engi_adv
+ id = TECHWEB_NODE_MOD_ENGI_ADV
+ display_name = "Advanced Engineering Modular Suit"
+ description = "Advanced Engineering suits, for advanced powered engineers."
+ prereq_ids = list(TECHWEB_NODE_MOD_ENGI)
+ design_ids = list(
+ "mod_plating_atmospheric",
+ "mod_jetpack",
+ "mod_rad_protection",
+ "mod_emp_shield",
+ "mod_storage_expanded",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/mod_engi_adv/New()
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_RADIOACTIVE_NEBULA)) //we'll really need the rad protection modsuit module
+ starting_node = TRUE
+ return ..()
+
+/datum/techweb_node/mod_anomaly
+ id = TECHWEB_NODE_MOD_ANOMALY
+ display_name = "Anomalock Modular Suit"
+ description = "Modules for exosuits that require anomaly cores to function."
+ prereq_ids = list(TECHWEB_NODE_MOD_ENGI_ADV, TECHWEB_NODE_ANOMALY_RESEARCH)
+ design_ids = list(
+ "mod_antigrav",
+ "mod_teleporter",
+ "mod_kinesis",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
diff --git a/code/modules/research/techweb/nodes/research_nodes.dm b/code/modules/research/techweb/nodes/research_nodes.dm
new file mode 100644
index 0000000000000..82a64f8c82338
--- /dev/null
+++ b/code/modules/research/techweb/nodes/research_nodes.dm
@@ -0,0 +1,95 @@
+/datum/techweb_node/fundamental_sci
+ id = TECHWEB_NODE_FUNDIMENTAL_SCI
+ starting_node = TRUE
+ display_name = "Fundamental Science"
+ description = "Establishing the bedrock of scientific understanding, paving the way for deeper exploration and theoretical inquiry."
+ design_ids = list(
+ "rdserver",
+ "rdservercontrol",
+ "rdconsole",
+ "tech_disk",
+ "doppler_array",
+ "experimentor",
+ "destructive_analyzer",
+ "destructive_scanner",
+ "experi_scanner",
+ "ntnet_relay",
+ "laptop",
+ "portadrive_basic",
+ "portadrive_advanced",
+ "portadrive_super",
+ )
+
+/datum/techweb_node/bluespace_theory
+ id = TECHWEB_NODE_BLUESPACE_THEORY
+ display_name = "Bluespace Theory"
+ description = "Basic studies into the mysterious alternate dimension known as bluespace."
+ prereq_ids = list(TECHWEB_NODE_FUNDIMENTAL_SCI)
+ design_ids = list(
+ "bluespace_crystal",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/applied_bluespace
+ id = TECHWEB_NODE_APPLIED_BLUESPACE
+ display_name = "Applied Bluespace Research"
+ description = "With a heightened grasp of bluespace dynamics, sophisticated applications and technologies can be devised using data from bluespace crystal analyses."
+ prereq_ids = list(TECHWEB_NODE_BLUESPACE_THEORY)
+ design_ids = list(
+ "ore_silo",
+ "minerbag_holding",
+ "plumbing_receiver",
+ "bluespacebeaker",
+ "adv_watering_can",
+ "bluespace_coffeepot",
+ "bluespacesyringe",
+ "blutrash",
+ "light_replacer_blue",
+ "bluespacebodybag",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+ required_experiments = list(/datum/experiment/scanning/points/bluespace_crystal)
+
+/datum/techweb_node/bluespace_travel
+ id = TECHWEB_NODE_BLUESPACE_TRAVEL
+ display_name = "Bluespace Travel"
+ description = "Facilitate teleportation methods based on bluespace principles to revolutionize logistical efficiency."
+ prereq_ids = list(TECHWEB_NODE_APPLIED_BLUESPACE)
+ design_ids = list(
+ "teleconsole",
+ "tele_station",
+ "tele_hub",
+ "launchpad_console",
+ "quantumpad",
+ "launchpad",
+ "bluespace_pod",
+ "quantum_keycard",
+ "swapper",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/anomaly_research
+ id = TECHWEB_NODE_ANOMALY_RESEARCH
+ display_name = "Anomaly Research"
+ description = "Delving into the study of mysterious anomalies to investigate methods to refine and harness their unpredictable energies."
+ prereq_ids = list(TECHWEB_NODE_APPLIED_BLUESPACE)
+ design_ids = list(
+ "anomaly_refinery",
+ "anomaly_neutralizer",
+ "reactive_armour",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/anomaly_shells
+ id = TECHWEB_NODE_ANOMALY_SHELLS
+ display_name = "Advanced Anomaly Shells"
+ description = "New shells designed to utilize anomaly cores, maximizing their potential in innovative ways."
+ prereq_ids = list(TECHWEB_NODE_ANOMALY_RESEARCH)
+ design_ids = list(
+ "bag_holding",
+ "cybernetic_heart_anomalock",
+ "wormholeprojector",
+ "gravitygun",
+ "polymorph_belt"
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
diff --git a/code/modules/research/techweb/nodes/robo_nodes.dm b/code/modules/research/techweb/nodes/robo_nodes.dm
new file mode 100644
index 0000000000000..ff018e85b7c9a
--- /dev/null
+++ b/code/modules/research/techweb/nodes/robo_nodes.dm
@@ -0,0 +1,97 @@
+/datum/techweb_node/robotics
+ id = TECHWEB_NODE_ROBOTICS
+ starting_node = TRUE
+ display_name = "Robotics"
+ description = "Programmable machines that make our lives lazier."
+ design_ids = list(
+ "mechfab",
+ "botnavbeacon",
+ "paicard",
+ )
+
+/datum/techweb_node/exodrone
+ id = TECHWEB_NODE_EXODRONE
+ display_name = "Exploration Drones"
+ description = "Adapted arcade machines to covertly harness gamers' skills in controlling real drones for practical purposes."
+ prereq_ids = list(TECHWEB_NODE_ROBOTICS)
+ design_ids = list(
+ "exoscanner_console",
+ "exoscanner",
+ "exodrone_console",
+ "exodrone_launcher",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+// AI root node
+/datum/techweb_node/ai
+ id = TECHWEB_NODE_AI
+ display_name = "Artificial Intelligence"
+ description = "Exploration of AI systems, more intelligent than the entire crew put together."
+ prereq_ids = list(TECHWEB_NODE_ROBOTICS)
+ design_ids = list(
+ "aiupload",
+ "aifixer",
+ "intellicard",
+ "mecha_tracking_ai_control",
+ "borg_ai_control",
+ "aicore",
+ "reset_module",
+ "asimov_module",
+ "default_module",
+ "nutimov_module",
+ "paladin_module",
+ "robocop_module",
+ "corporate_module",
+ "drone_module",
+ "oxygen_module",
+ "safeguard_module",
+ "protectstation_module",
+ "quarantine_module",
+ "freeform_module",
+ "remove_module",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/ai/New()
+ . = ..()
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_HUMAN_AI))
+ design_ids -= list(
+ "aicore",
+ "borg_ai_control",
+ "intellicard",
+ "mecha_tracking_ai_control",
+ "aifixer",
+ "aiupload",
+ )
+ else if(HAS_TRAIT(SSstation, STATION_TRAIT_UNIQUE_AI))
+ research_costs[TECHWEB_POINT_TYPE_GENERIC] *= 3
+
+/datum/techweb_node/ai_laws
+ id = TECHWEB_NODE_AI_LAWS
+ display_name = "Advanced AI Laws"
+ description = "Delving into sophisticated AI directives, with hopes that they won't lead to humanity's extinction."
+ prereq_ids = list(TECHWEB_NODE_AI)
+ design_ids = list(
+ "asimovpp_module",
+ "paladin_devotion_module",
+ "dungeon_master_module",
+ "painter_module",
+ "ten_commandments_module",
+ "hippocratic_module",
+ "maintain_module",
+ "liveandletlive_module",
+ "reporter_module",
+ "yesman_module",
+ "hulkamania_module",
+ "peacekeeper_module",
+ "overlord_module",
+ "tyrant_module",
+ "antimov_module",
+ "balance_module",
+ "thermurderdynamic_module",
+ "damaged_module",
+ "freeformcore_module",
+ "onehuman_module",
+ "purge_module",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
diff --git a/code/modules/research/techweb/nodes/security_nodes.dm b/code/modules/research/techweb/nodes/security_nodes.dm
new file mode 100644
index 0000000000000..b876b3ec677ea
--- /dev/null
+++ b/code/modules/research/techweb/nodes/security_nodes.dm
@@ -0,0 +1,107 @@
+/datum/techweb_node/basic_arms
+ id = TECHWEB_NODE_BASIC_ARMS
+ starting_node = TRUE
+ display_name = "Basic Arms"
+ description = "Ballistics can be unpredictable in space."
+ design_ids = list(
+ "toygun",
+ "c38_rubber",
+ "sec_38",
+ "capbox",
+ "foam_dart",
+ "sec_beanbag_slug",
+ "sec_dart",
+ "sec_Islug",
+ "sec_rshot",
+ )
+
+/datum/techweb_node/sec_equip
+ id = TECHWEB_NODE_SEC_EQUIP
+ display_name = "Security Equipment"
+ description = "All the essentials to subdue a mime."
+ prereq_ids = list(TECHWEB_NODE_BASIC_ARMS)
+ design_ids = list(
+ "camera_assembly",
+ "secdata",
+ "mining",
+ "prisonmanage",
+ "rdcamera",
+ "seccamera",
+ "security_photobooth",
+ "photobooth",
+ "scanner_gate",
+ "turret_control",
+ "pepperspray",
+ "dragnet_beacon",
+ "inspector",
+ "evidencebag",
+ "handcuffs_s",
+ "zipties",
+ "seclite",
+ "electropack",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/riot_supression
+ id = TECHWEB_NODE_RIOT_SUPRESSION
+ display_name = "Riot Supression"
+ description = "When you are on the opposing side of a revolutionary movement."
+ prereq_ids = list(TECHWEB_NODE_SEC_EQUIP)
+ design_ids = list(
+ "pin_testing",
+ "pin_loyalty",
+ "tele_shield",
+ "ballistic_shield",
+ "bola_energy",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/explosives
+ id = TECHWEB_NODE_EXPLOSIVES
+ display_name = "Explosives"
+ description = "For once, intentional explosions."
+ prereq_ids = list(TECHWEB_NODE_RIOT_SUPRESSION)
+ design_ids = list(
+ "large_grenade",
+ "adv_grenade",
+ "pyro_grenade",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+ required_experiments = list(/datum/experiment/ordnance/explosive/lowyieldbomb)
+ discount_experiments = list(/datum/experiment/ordnance/explosive/highyieldbomb = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/exotic_ammo
+ id = TECHWEB_NODE_EXOTIC_AMMO
+ display_name = "Exotic Ammunition"
+ description = "Specialized bullets designed to ignite, freeze, and inflict various other effects on targets, expanding combat capabilities."
+ prereq_ids = list(TECHWEB_NODE_EXPLOSIVES)
+ design_ids = list(
+ "c38_hotshot",
+ "c38_iceblox",
+ "techshotshell",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
+
+/datum/techweb_node/electric_weapons
+ id = TECHWEB_NODE_ELECTRIC_WEAPONS
+ display_name = "Electric Weaponry"
+ description = "Energy-based weaponry designed for both lethal and non-lethal applications."
+ prereq_ids = list(TECHWEB_NODE_RIOT_SUPRESSION)
+ design_ids = list(
+ "stunrevolver",
+ "ioncarbine",
+ "temp_gun",
+ "lasershell",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+
+/datum/techweb_node/beam_weapons
+ id = TECHWEB_NODE_BEAM_WEAPONS
+ display_name = "Advanced Beam Weaponry"
+ description = "So advanced, even engineers are baffled by its operational principles."
+ prereq_ids = list(TECHWEB_NODE_ELECTRIC_WEAPONS)
+ design_ids = list(
+ "xray_laser",
+ "nuclear_gun",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
diff --git a/code/modules/research/techweb/nodes/service_nodes.dm b/code/modules/research/techweb/nodes/service_nodes.dm
new file mode 100644
index 0000000000000..da7c48f0878c7
--- /dev/null
+++ b/code/modules/research/techweb/nodes/service_nodes.dm
@@ -0,0 +1,238 @@
+/datum/techweb_node/office_equip
+ id = TECHWEB_NODE_OFFICE_EQUIP
+ starting_node = TRUE
+ display_name = "Office Equipment"
+ description = "Nanotrasen's finest in ergonomic office tech, ensuring station admin stays productive and compliant with corporate policies — because even in space, paperwork never stops."
+ design_ids = list(
+ "fax",
+ "sec_pen",
+ "handlabel",
+ "roll",
+ "universal_scanner",
+ "desttagger",
+ "packagewrap",
+ "sticky_tape",
+ "toner_large",
+ "toner",
+ "boxcutter",
+ "bounced_radio",
+ "radio_headset",
+ "earmuffs",
+ "recorder",
+ "tape",
+ "toy_balloon",
+ "pet_carrier",
+ "chisel",
+ "spraycan",
+ "camera_film",
+ "camera",
+ "razor",
+ "bucket",
+ "mop",
+ "pushbroom",
+ "normtrash",
+ "wirebrush",
+ "flashlight",
+ )
+
+/datum/techweb_node/sanitation
+ id = TECHWEB_NODE_SANITATION
+ display_name = "Advanced Sanitation Technology"
+ description = "Nanotrasen's latest in janitorial tech, making sure the station stays spotless and bear-free."
+ prereq_ids = list(TECHWEB_NODE_OFFICE_EQUIP)
+ design_ids = list(
+ "advmop",
+ "light_replacer",
+ "spraybottle",
+ "paint_remover",
+ "beartrap",
+ "buffer",
+ "vacuum",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+ discount_experiments = list(/datum/experiment/scanning/random/janitor_trash = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/toys
+ id = TECHWEB_NODE_TOYS
+ display_name = "New Toys"
+ description = "For new pranks."
+ prereq_ids = list(TECHWEB_NODE_OFFICE_EQUIP)
+ design_ids = list(
+ "smoke_machine",
+ "toy_armblade",
+ "air_horn",
+ "clown_firing_pin",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/consoles
+ id = TECHWEB_NODE_CONSOLES
+ display_name = "Civilian Consoles"
+ description = "User-friendly consoles for non-technical crew members, enhancing communication and access to essential station information."
+ prereq_ids = list(TECHWEB_NODE_OFFICE_EQUIP)
+ design_ids = list(
+ "comconsole",
+ "automated_announcement",
+ "cargo",
+ "cargorequest",
+ "med_data",
+ "crewconsole",
+ "bankmachine",
+ "account_console",
+ "idcard",
+ "c-reader",
+ "libraryconsole",
+ "libraryscanner",
+ "bookbinder",
+ "barcode_scanner",
+ "vendor",
+ "custom_vendor_refill",
+ "bounty_pad_control",
+ "bounty_pad",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/gaming
+ id = TECHWEB_NODE_GAMING
+ display_name = "Gaming"
+ description = "For the slackers on the station."
+ prereq_ids = list(TECHWEB_NODE_TOYS, TECHWEB_NODE_CONSOLES)
+ design_ids = list(
+ "arcade_battle",
+ "arcade_orion",
+ "slotmachine",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+ discount_experiments = list(/datum/experiment/physical/arcade_winner = TECHWEB_TIER_2_POINTS)
+
+// Kitchen root node
+/datum/techweb_node/cafeteria_equip
+ id = TECHWEB_NODE_CAFETERIA_EQUIP
+ starting_node = TRUE
+ display_name = "Cafeteria Equipment"
+ description = "When standard-issue tubed food no longer satisfies the station crew's appetite..."
+ design_ids = list(
+ "griddle",
+ "microwave",
+ "bowl",
+ "plate",
+ "oven_tray",
+ "servingtray",
+ "tongs",
+ "spoon",
+ "fork",
+ "kitchen_knife",
+ "plastic_spoon",
+ "plastic_fork",
+ "plastic_knife",
+ "shaker",
+ "drinking_glass",
+ "shot_glass",
+ "coffee_cartridge",
+ "coffeemaker",
+ "coffeepot",
+ "syrup_bottle",
+ )
+
+/datum/techweb_node/food_proc
+ id = TECHWEB_NODE_FOOD_PROC
+ display_name = "Food Processing"
+ description = "Top-tier kitchen appliances from Nanotrasen, designed to keep the crew well-fed and happy."
+ prereq_ids = list(TECHWEB_NODE_CAFETERIA_EQUIP)
+ design_ids = list(
+ "deepfryer",
+ "oven",
+ "stove",
+ "range",
+ "souppot",
+ "processor",
+ "gibber",
+ "monkey_recycler",
+ "reagentgrinder",
+ "microwave_engineering",
+ "smartfridge",
+ "sheetifier",
+ "fat_sucker",
+ "dish_drive",
+ "roastingstick",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+// Fishing root node
+/datum/techweb_node/fishing_equip
+ id = TECHWEB_NODE_FISHING_EQUIP
+ starting_node = TRUE
+ display_name = "Fishing Equipment"
+ description = "Basic fishing gear tailored for space station environments, perfect for extraterrestrial aquatic pursuits."
+ design_ids = list(
+ "fishing_portal_generator",
+ "fishing_rod",
+ "fish_case",
+ )
+
+/datum/techweb_node/fishing_equip_adv
+ id = TECHWEB_NODE_FISHING_EQUIP_ADV
+ display_name = "Advanced Fishing Tools"
+ description = "Continuing advancements in fishing technology, incorporating cutting-edge features in space fishing operations. Just don't try this on space carps..."
+ prereq_ids = list(TECHWEB_NODE_FISHING_EQUIP)
+ design_ids = list(
+ "fishing_rod_tech",
+ "stabilized_hook",
+ "auto_reel",
+ "fish_analyzer",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+ required_experiments = list(/datum/experiment/scanning/fish)
+
+/datum/techweb_node/marine_util
+ id = TECHWEB_NODE_MARINE_UTIL
+ display_name = "Marine Utility"
+ description = "Fish are nice to look at and all, but they can be put to use."
+ prereq_ids = list(TECHWEB_NODE_FISHING_EQUIP_ADV)
+ design_ids = list(
+ "bioelec_gen",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+ // only available if you've done the first fishing experiment (thus unlocking fishing tech), but not a strict requirement to get the tech
+ discount_experiments = list(/datum/experiment/scanning/fish/second = TECHWEB_TIER_3_POINTS)
+
+// Botany root node
+/datum/techweb_node/botany_equip
+ id = TECHWEB_NODE_BOTANY_EQUIP
+ starting_node = TRUE
+ display_name = "Botany Equipment"
+ description = "Essential tools for maintaining onboard gardens, supporting plant growth in the unique environment of the space station."
+ design_ids = list(
+ "seed_extractor",
+ "plant_analyzer",
+ "watering_can",
+ "spade",
+ "cultivator",
+ "secateurs",
+ "hatchet",
+ )
+
+/datum/techweb_node/hydroponics
+ id = TECHWEB_NODE_HYDROPONICS
+ display_name = "Hydroponics"
+ description = "Research into advanced hydroponic systems for efficient and sustainable plant cultivation."
+ prereq_ids = list(TECHWEB_NODE_BOTANY_EQUIP, TECHWEB_NODE_CHEM_SYNTHESIS)
+ design_ids = list(
+ "biogenerator",
+ "hydro_tray",
+ "portaseeder",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+
+/datum/techweb_node/selection
+ id = TECHWEB_NODE_SELECTION
+ display_name = "Artificial Selection"
+ description = "Advancement in plant cultivation techniques through artificial selection, enabling precise manipulation of plant DNA."
+ prereq_ids = list(TECHWEB_NODE_HYDROPONICS)
+ design_ids = list(
+ "flora_gun",
+ "gene_shears",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+ required_experiments = list(/datum/experiment/scanning/random/plants/wild)
+ discount_experiments = list(/datum/experiment/scanning/random/plants/traits = TECHWEB_TIER_3_POINTS)
diff --git a/code/modules/research/techweb/nodes/surgery_nodes.dm b/code/modules/research/techweb/nodes/surgery_nodes.dm
new file mode 100644
index 0000000000000..2bd1f6d5df6d0
--- /dev/null
+++ b/code/modules/research/techweb/nodes/surgery_nodes.dm
@@ -0,0 +1,72 @@
+/datum/techweb_node/oldstation_surgery
+ id = TECHWEB_NODE_OLDSTATION_SURGERY
+ display_name = "Experimental Dissection"
+ description = "Grants access to experimental dissections, which allows generation of research points."
+ prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP)
+ design_ids = list(
+ "surgery_oldstation_dissection",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+ hidden = TRUE
+ show_on_wiki = FALSE
+
+/datum/techweb_node/surgery
+ id = TECHWEB_NODE_SURGERY
+ display_name = "Improved Wound-Tending"
+ description = "Who would have known being more gentle with a hemostat decreases patient pain?"
+ prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP)
+ design_ids = list(
+ "surgery_heal_brute_upgrade",
+ "surgery_heal_burn_upgrade",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
+
+/datum/techweb_node/surgery_adv
+ id = TECHWEB_NODE_SURGERY_ADV
+ display_name = "Advanced Surgery"
+ description = "When simple medicine doesn't cut it."
+ prereq_ids = list(TECHWEB_NODE_SURGERY)
+ design_ids = list(
+ "harvester",
+ "surgery_heal_brute_upgrade_femto",
+ "surgery_heal_burn_upgrade_femto",
+ "surgery_heal_combo",
+ "surgery_lobotomy",
+ "surgery_wing_reconstruction",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
+ required_experiments = list(/datum/experiment/autopsy/human)
+
+/datum/techweb_node/surgery_exp
+ id = TECHWEB_NODE_SURGERY_EXP
+ display_name = "Experimental Surgery"
+ description = "When evolution isn't fast enough."
+ prereq_ids = list(TECHWEB_NODE_SURGERY_ADV)
+ design_ids = list(
+ "surgery_cortex_folding",
+ "surgery_cortex_imprint",
+ "surgery_heal_combo_upgrade",
+ "surgery_ligament_hook",
+ "surgery_ligament_reinforcement",
+ "surgery_muscled_veins",
+ "surgery_nerve_ground",
+ "surgery_nerve_splice",
+ "surgery_pacify",
+ "surgery_vein_thread",
+ "surgery_viral_bond",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
+ required_experiments = list(/datum/experiment/autopsy/nonhuman)
+
+/datum/techweb_node/surgery_tools
+ id = TECHWEB_NODE_SURGERY_TOOLS
+ display_name = "Advanced Surgery Tools"
+ description = "Surgical instruments of dual purpose for quick operations."
+ prereq_ids = list(TECHWEB_NODE_SURGERY_EXP)
+ design_ids = list(
+ "laserscalpel",
+ "searingtool",
+ "mechanicalpinches",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
+ discount_experiments = list(/datum/experiment/autopsy/xenomorph = TECHWEB_TIER_4_POINTS)
diff --git a/code/modules/research/techweb/nodes/syndicate_nodes.dm b/code/modules/research/techweb/nodes/syndicate_nodes.dm
new file mode 100644
index 0000000000000..377ac392f938f
--- /dev/null
+++ b/code/modules/research/techweb/nodes/syndicate_nodes.dm
@@ -0,0 +1,49 @@
+/datum/techweb_node/syndicate_basic
+ id = TECHWEB_NODE_SYNDICATE_BASIC
+ display_name = "Illegal Technology"
+ description = "Dangerous research used to create dangerous objects."
+ prereq_ids = list(TECHWEB_NODE_EXP_TOOLS, TECHWEB_NODE_EXOTIC_AMMO)
+ design_ids = list(
+ "advanced_camera",
+ "ai_cam_upgrade",
+ "borg_syndicate_module",
+ "donksoft_refill",
+ "donksofttoyvendor",
+ "largecrossbow",
+ "mag_autorifle",
+ "mag_autorifle_ap",
+ "mag_autorifle_ic",
+ "rapidsyringe",
+ "suppressor",
+ "super_pointy_tape",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
+ hidden = TRUE
+
+/datum/techweb_node/syndicate_basic/New() //Crappy way of making syndicate gear decon supported until there's another way.
+ . = ..()
+ if(!SSearly_assets.initialized)
+ RegisterSignal(SSearly_assets, COMSIG_SUBSYSTEM_POST_INITIALIZE, PROC_REF(register_uplink_items))
+ else
+ register_uplink_items()
+
+/datum/techweb_node/syndicate_basic/proc/register_uplink_items()
+ SIGNAL_HANDLER
+ UnregisterSignal(SSearly_assets, COMSIG_SUBSYSTEM_POST_INITIALIZE)
+ required_items_to_unlock = list()
+ for(var/datum/uplink_item/item_path as anything in SStraitor.uplink_items_by_type)
+ var/datum/uplink_item/item = SStraitor.uplink_items_by_type[item_path]
+ if(!item.item || !item.illegal_tech)
+ continue
+ required_items_to_unlock |= item.item //allows deconning to unlock.
+
+/datum/techweb_node/unregulated_bluespace
+ id = TECHWEB_NODE_UNREGULATED_BLUESPACE
+ display_name = "Unregulated Bluespace Research"
+ description = "Bluespace technology using unstable or unbalanced procedures, prone to damaging the fabric of bluespace. Outlawed by galactic conventions."
+ prereq_ids = list(TECHWEB_NODE_PARTS_BLUESPACE, TECHWEB_NODE_SYNDICATE_BASIC)
+ design_ids = list(
+ "desynchronizer",
+ "beamrifle",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
diff --git a/code/modules/research/techweb/techweb_types.dm b/code/modules/research/techweb/techweb_types.dm
index c01b1226a4c13..f5532e9e53f9d 100644
--- a/code/modules/research/techweb/techweb_types.dm
+++ b/code/modules/research/techweb/techweb_types.dm
@@ -18,7 +18,7 @@
/datum/techweb/oldstation/New()
. = ..()
- research_node_id("oldstation_surgery", TRUE, TRUE, FALSE)
+ research_node_id(TECHWEB_NODE_OLDSTATION_SURGERY, TRUE, TRUE, FALSE)
/**
* Admin techweb that has everything unlocked by default
diff --git a/code/modules/research/xenobiology/crossbreeding/_misc.dm b/code/modules/research/xenobiology/crossbreeding/_misc.dm
index 75fabc77cf153..b07299813d612 100644
--- a/code/modules/research/xenobiology/crossbreeding/_misc.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_misc.dm
@@ -80,7 +80,7 @@ Slimecrossing Items
new /obj/effect/timestop(get_turf(target), 2, 50, list(user))
//Hypercharged slime cell - Charged Yellow
-/obj/item/stock_parts/cell/high/slime_hypercharged
+/obj/item/stock_parts/power_store/cell/high/slime_hypercharged
name = "hypercharged slime core"
desc = "A charged yellow slime extract, infused with plasma. It almost hurts to touch."
icon = 'icons/mob/simple/slimes.dmi'
diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
index 658d0734f4e27..832d266723d13 100644
--- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
@@ -589,11 +589,11 @@
return ..()
cooldown = max_cooldown
var/list/batteries = list()
- for(var/obj/item/stock_parts/cell/C in owner.get_all_contents())
+ for(var/obj/item/stock_parts/power_store/C in owner.get_all_contents())
if(C.charge < C.maxcharge)
batteries += C
if(batteries.len)
- var/obj/item/stock_parts/cell/ToCharge = pick(batteries)
+ var/obj/item/stock_parts/power_store/ToCharge = pick(batteries)
ToCharge.charge += min(ToCharge.maxcharge - ToCharge.charge, ToCharge.maxcharge/10) //10% of the cell, or to maximum.
return ..()
diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm
index 76c4d3eaa1437..ca026ae9f33f7 100644
--- a/code/modules/research/xenobiology/crossbreeding/charged.dm
+++ b/code/modules/research/xenobiology/crossbreeding/charged.dm
@@ -81,7 +81,7 @@ Charged extracts:
effect_desc = "Creates a hypercharged slime cell battery, which has high capacity but takes longer to recharge."
/obj/item/slimecross/charged/yellow/do_effect(mob/user)
- new /obj/item/stock_parts/cell/high/slime_hypercharged(get_turf(user))
+ new /obj/item/stock_parts/power_store/cell/high/slime_hypercharged(get_turf(user))
user.visible_message(span_notice("[src] sparks violently, and swells with electric power!"))
..()
diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm
index da878b77b5a05..9d5ed59fcec0d 100644
--- a/code/modules/research/xenobiology/crossbreeding/industrial.dm
+++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm
@@ -85,10 +85,10 @@ Industrial extracts:
colour = SLIME_TYPE_YELLOW
effect_desc = "Produces high capacity power cells, which are not fully charged on creation."
plasmarequired = 5
- itempath = /obj/item/stock_parts/cell/high
+ itempath = /obj/item/stock_parts/power_store/cell/high
/obj/item/slimecross/industrial/yellow/do_after_spawn(obj/item/spawned)
- var/obj/item/stock_parts/cell/high/C = spawned
+ var/obj/item/stock_parts/power_store/cell/high/C = spawned
if(istype(C))
C.charge = rand(0,C.maxcharge/2)
diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm
index e46290bef28d5..82beed78e439c 100644
--- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm
+++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm
@@ -82,11 +82,11 @@ Regenerative extracts:
/obj/item/slimecross/regenerative/yellow/core_effect(mob/living/target, mob/user)
var/list/batteries = list()
- for(var/obj/item/stock_parts/cell/C in target.get_all_contents())
+ for(var/obj/item/stock_parts/power_store/C in target.get_all_contents())
if(C.charge < C.maxcharge)
batteries += C
if(batteries.len)
- var/obj/item/stock_parts/cell/ToCharge = pick(batteries)
+ var/obj/item/stock_parts/power_store/ToCharge = pick(batteries)
ToCharge.charge = ToCharge.maxcharge
to_chat(target, span_notice("You feel a strange electrical pulse, and one of your electrical items was recharged."))
diff --git a/code/modules/research/xenobiology/vatgrowing/microscope.dm b/code/modules/research/xenobiology/vatgrowing/microscope.dm
index 2e70d20faf07d..df065698436a4 100644
--- a/code/modules/research/xenobiology/vatgrowing/microscope.dm
+++ b/code/modules/research/xenobiology/vatgrowing/microscope.dm
@@ -3,17 +3,28 @@
desc = "A simple microscope, allowing you to examine micro-organisms."
icon = 'icons/obj/science/vatgrowing.dmi'
icon_state = "microscope"
+ ///Analyzed dish
var/obj/item/petri_dish/current_dish
-/obj/structure/microscope/attacked_by(obj/item/I, mob/living/user)
- if(!istype(I, /obj/item/petri_dish))
- return ..()
+/obj/structure/microscope/Initialize(mapload)
+ . = ..()
+ var/static/list/hovering_item_typechecks = list(
+ /obj/item/petri_dish = list(
+ SCREENTIP_CONTEXT_LMB = "Add petri dish",
+ ),
+ )
+ AddElement(/datum/element/contextual_screentip_item_typechecks, hovering_item_typechecks)
+ AddElement(/datum/element/contextual_screentip_bare_hands, rmb_text = "Remove petri dish")
+
+/obj/structure/microscope/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ . = ..()
+ if(istype(tool, /obj/item/petri_dish))
+ return add_dish(user, tool)
+
+/obj/structure/microscope/attack_hand_secondary(mob/user, list/modifiers)
+ . = ..()
if(current_dish)
- to_chat(user, span_warning("There is already a petridish in \the [src]."))
- return
- to_chat(user, span_notice("You put [I] into \the [src]."))
- current_dish = I
- current_dish.forceMove(src)
+ return remove_dish(user)
/obj/structure/microscope/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
@@ -21,27 +32,30 @@
ui = new(user, src, "Microscope", name)
ui.open()
-/obj/structure/microscope/ui_data(mob/user)
+/obj/structure/microscope/ui_static_data(mob/user)
var/list/data = list()
data["has_dish"] = current_dish ? TRUE : FALSE
data["cell_lines"] = list()
- data["viruses"] = list()
if(!current_dish)
return data
if(!current_dish.sample)
return data
- for(var/organism in current_dish.sample.micro_organisms) //All the microorganisms in the dish
+ for(var/organism in current_dish.sample.micro_organisms)
if(istype(organism, /datum/micro_organism/cell_line))
var/datum/micro_organism/cell_line/cell_line = organism
+ var/atom/resulting_atom = cell_line.resulting_atom
var/list/organism_data = list(
type = "cell line",
name = cell_line.name,
desc = cell_line.desc,
- growth_rate = cell_line.growth_rate,
- suspectibility = cell_line.virus_suspectibility,
+ icon = resulting_atom ? initial(resulting_atom.icon) : "",
+ icon_state = resulting_atom ? initial(resulting_atom.icon_state) : "",
+ consumption_rate = cell_line.consumption_rate * SSMACHINES_DT,
+ growth_rate = cell_line.growth_rate * SSMACHINES_DT,
+ suspectibility = cell_line.virus_suspectibility * SSMACHINES_DT,
requireds = get_reagent_list(cell_line.required_reagents),
supplementaries = get_reagent_list(cell_line.supplementary_reagents),
suppressives = get_reagent_list(cell_line.suppressive_reagents)
@@ -55,7 +69,7 @@
name = virus.name,
desc = virus.desc
)
- data["viruses"] += list(virus_data)
+ data["cell_lines"] += list(virus_data)
return data
@@ -63,23 +77,49 @@
var/list/reagent_list = list()
for(var/i in reagents) //Convert from assoc to normal. Yeah very shit.
var/datum/reagent/reagent = i
- reagent_list += initial(reagent.name)
- return reagent_list.Join(", ")
-
+ reagent_list["[initial(reagent.name)]"] = reagents[i] * SSMACHINES_DT
+ return reagent_list
-/obj/structure/microscope/ui_act(action, params)
+/obj/structure/microscope/ui_act(action, params, datum/tgui/ui)
. = ..()
if(.)
return
switch(action)
if("eject_petridish")
- if(!current_dish)
- return FALSE
- current_dish.forceMove(get_turf(src))
- current_dish = null
- . = TRUE
+ if(current_dish)
+ remove_dish(ui.user)
+ . = TRUE
update_appearance()
+///Insert a new dish, swapping the inserted one
+/obj/structure/microscope/proc/add_dish(mob/living/user, obj/item/petri_dish/new_dish)
+ var/obj/item/petri_dish/old_dish
+ if(current_dish)
+ old_dish = current_dish
+ if(!user.transferItemToLoc(new_dish, src))
+ balloon_alert(user, "couldn't add!")
+ return ITEM_INTERACT_FAILURE
+ current_dish = new_dish
+ update_static_data_for_all_viewers()
+ if(old_dish)
+ if(!user.put_in_hands(old_dish))
+ old_dish.forceMove(get_turf(src))
+ balloon_alert(user, "dish swapped")
+ else
+ balloon_alert(user, "dish added")
+ return ITEM_INTERACT_SUCCESS
+
+///Take the inserted dish, or drop it on the floor
+/obj/structure/microscope/proc/remove_dish(mob/living/user)
+ if(!current_dish)
+ return SECONDARY_ATTACK_CONTINUE_CHAIN
+ if(!user.put_in_hands(current_dish))
+ current_dish.forceMove(get_turf(src))
+ current_dish = null
+ update_static_data_for_all_viewers()
+ balloon_alert(user, "dish removed")
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+
/datum/crafting_recipe/microscope
name = "Microscope"
result = /obj/structure/microscope
diff --git a/code/modules/research/xenobiology/vatgrowing/samples/_micro_organism.dm b/code/modules/research/xenobiology/vatgrowing/samples/_micro_organism.dm
index edeeaad05c6a3..b8af4dd062c41 100644
--- a/code/modules/research/xenobiology/vatgrowing/samples/_micro_organism.dm
+++ b/code/modules/research/xenobiology/vatgrowing/samples/_micro_organism.dm
@@ -23,8 +23,12 @@
var/virus_suspectibility = 1
///This var defines how much % the organism grows per process(), without modifiers, if you have all required reagents
var/growth_rate = 4
- ///Resulting atoms from growing this cell line. List is assoc atom type || amount
- var/list/resulting_atoms = list()
+ ///This var defines how many units of every reagent is consumed during growth per process()
+ var/consumption_rate = REAGENTS_METABOLISM
+ ///Resulting atom from growing this cell line
+ var/atom/resulting_atom
+ ///The number of resulting atoms
+ var/resulting_atom_count = 1
///Handles growth of the micro_organism. This only runs if the micro organism is in the growing vat. Reagents is the growing vats reagents
/datum/micro_organism/cell_line/proc/handle_growth(obj/machinery/plumbing/growing_vat/vat)
@@ -41,7 +45,7 @@
if(!reagents.has_reagent(i))
return FALSE
for(var/i in required_reagents) //Delete the required reagents if used
- reagents.remove_reagent(i, REAGENTS_METABOLISM)
+ reagents.remove_reagent(i, consumption_rate)
return TRUE
///Apply modifiers on growth_rate based on supplementary and supressive reagents. Reagents is the growing vats reagents
@@ -50,22 +54,22 @@
//Handle growth based on supplementary reagents here.
for(var/i in supplementary_reagents)
- if(!reagents.has_reagent(i, REAGENTS_METABOLISM))
+ if(!reagents.has_reagent(i, consumption_rate))
continue
. += supplementary_reagents[i]
- reagents.remove_reagent(i, REAGENTS_METABOLISM)
+ reagents.remove_reagent(i, consumption_rate)
//Handle degrowth based on supressive reagents here.
for(var/i in suppressive_reagents)
- if(!reagents.has_reagent(i, REAGENTS_METABOLISM))
+ if(!reagents.has_reagent(i, consumption_rate))
continue
. += suppressive_reagents[i]
- reagents.remove_reagent(i, REAGENTS_METABOLISM)
+ reagents.remove_reagent(i, consumption_rate)
//Handle debuffing growth based on viruses here.
for(var/datum/micro_organism/virus/active_virus in biological_sample.micro_organisms)
- if(reagents.has_reagent(/datum/reagent/medicine/spaceacillin, REAGENTS_METABOLISM))
- reagents.remove_reagent(/datum/reagent/medicine/spaceacillin, REAGENTS_METABOLISM)
+ if(reagents.has_reagent(/datum/reagent/medicine/spaceacillin, consumption_rate))
+ reagents.remove_reagent(/datum/reagent/medicine/spaceacillin, consumption_rate)
continue //This virus is stopped, We have antiviral stuff
. -= virus_suspectibility
@@ -98,11 +102,10 @@
var/datum/effect_system/fluid_spread/smoke/smoke = new
smoke.set_up(0, holder = vat, location = vat.loc)
smoke.start()
- for(var/created_thing in resulting_atoms)
- for(var/x in 1 to resulting_atoms[created_thing])
- var/atom/thing = new created_thing(get_turf(vat))
- ADD_TRAIT(thing, TRAIT_VATGROWN, "vatgrowing")
- vat.visible_message(span_nicegreen("[thing] pops out of [vat]!"))
+ for(var/x in 1 to resulting_atom_count)
+ var/atom/thing = new resulting_atom(get_turf(vat))
+ ADD_TRAIT(thing, TRAIT_VATGROWN, "vatgrowing")
+ vat.visible_message(span_nicegreen("[thing] pops out of [vat]!"))
if(SEND_SIGNAL(vat.biological_sample, COMSIG_SAMPLE_GROWTH_COMPLETED) & SPARE_SAMPLE)
return
QDEL_NULL(vat.biological_sample)
diff --git a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm
index b170cb19fd784..8dd4594d47d65 100644
--- a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm
+++ b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm
@@ -25,7 +25,8 @@
virus_suspectibility = 2
growth_rate = VAT_GROWTH_RATE
- resulting_atoms = list(/mob/living/basic/mouse = 2)
+ resulting_atom = /mob/living/basic/mouse
+ resulting_atom_count = 2
/datum/micro_organism/cell_line/chicken //basic cell line designed as a good source of protein and eggyolk.
desc = "Galliform skin cells."
@@ -43,7 +44,7 @@
virus_suspectibility = 1
growth_rate = VAT_GROWTH_RATE
- resulting_atoms = list(/mob/living/basic/chicken = 1)
+ resulting_atom = /mob/living/basic/chicken
/datum/micro_organism/cell_line/cow
desc = "Bovine stem cells"
@@ -62,7 +63,7 @@
/datum/reagent/toxin/carpotoxin = -5)
virus_suspectibility = 1
- resulting_atoms = list(/mob/living/basic/cow = 1)
+ resulting_atom = /mob/living/basic/cow
/datum/micro_organism/cell_line/moonicorn
desc = "Fairyland Bovine stem cells"
@@ -87,7 +88,7 @@
)
virus_suspectibility = 1
- resulting_atoms = list(/mob/living/basic/cow/moonicorn = 1)
+ resulting_atom = /mob/living/basic/cow/moonicorn
/datum/micro_organism/cell_line/cat
desc = "Feliform cells"
@@ -108,7 +109,7 @@
/datum/reagent/consumable/milk/chocolate_milk = -1)
virus_suspectibility = 1.5
- resulting_atoms = list(/mob/living/basic/pet/cat = 1)
+ resulting_atom = /mob/living/basic/pet/cat
/datum/micro_organism/cell_line/corgi
desc = "Canid cells"
@@ -127,7 +128,7 @@
/datum/reagent/consumable/coco = -2)
virus_suspectibility = 1
- resulting_atoms = list(/mob/living/basic/pet/dog/corgi = 1)
+ resulting_atom = /mob/living/basic/pet/dog/corgi
/datum/micro_organism/cell_line/pug
desc = "Squat canid cells"
@@ -145,7 +146,7 @@
/datum/reagent/consumable/coco = -2)
virus_suspectibility = 3
- resulting_atoms = list(/mob/living/basic/pet/dog/pug = 1)
+ resulting_atom = /mob/living/basic/pet/dog/pug
/datum/micro_organism/cell_line/bear //bears can't really compete directly with more powerful creatures, so i made it possible to grow them real fast.
desc = "Ursine cells"
@@ -166,7 +167,7 @@
/datum/reagent/medicine/insulin = -2) //depletes hunny.
virus_suspectibility = 2
- resulting_atoms = list(/mob/living/basic/bear = 1)
+ resulting_atom = /mob/living/basic/bear
/datum/micro_organism/cell_line/carp
desc = "Cyprinid cells"
@@ -185,7 +186,7 @@
/datum/reagent/oxygen = -3)
virus_suspectibility = 2
- resulting_atoms = list(/mob/living/basic/carp = 1)
+ resulting_atom = /mob/living/basic/carp
/datum/micro_organism/cell_line/megacarp
desc = "Cartilaginous cyprinid cells"
@@ -205,7 +206,7 @@
/datum/reagent/oxygen = -3)
virus_suspectibility = 1
- resulting_atoms = list(/mob/living/basic/carp/mega = 1)
+ resulting_atom = /mob/living/basic/carp/mega
/datum/micro_organism/cell_line/snake
desc = "Ophidic cells"
@@ -223,7 +224,7 @@
/datum/reagent/consumable/corn_syrup = -6,
/datum/reagent/sulfur = -3) //sulfur repels snakes according to professor google.
- resulting_atoms = list(/mob/living/basic/snake = 1)
+ resulting_atom = /mob/living/basic/snake
///////////////////////////////////////////
@@ -246,7 +247,7 @@
/datum/reagent/consumable/ice = -2) //Brrr!
virus_suspectibility = 0
- resulting_atoms = list(/mob/living/basic/slime = 1)
+ resulting_atom = /mob/living/basic/slime
/datum/micro_organism/cell_line/blob_spore //nuisance cell line
desc = "Immature blob spores"
@@ -263,7 +264,8 @@
/datum/reagent/medicine/psicodine = -2) //Blob zombies likely wouldn't appreciate psicodine so why this is here
virus_suspectibility = 0
- resulting_atoms = list(/mob/living/basic/blob_minion/spore = 2) //These are useless so we might as well spawn 2.
+ resulting_atom = /mob/living/basic/blob_minion/spore
+ resulting_atom_count = 2
/datum/micro_organism/cell_line/blobbernaut
desc = "Blobular myocytes"
@@ -282,7 +284,7 @@
suppressive_reagents = list(/datum/reagent/consumable/tinlux = -6)
virus_suspectibility = 0
- resulting_atoms = list(/mob/living/basic/blob_minion/blobbernaut = 1)
+ resulting_atom = /mob/living/basic/blob_minion/blobbernaut
/datum/micro_organism/cell_line/gelatinous_cube
desc = "Cubic ooze particles"
@@ -307,7 +309,7 @@
/datum/reagent/consumable/ice = -1)
virus_suspectibility = 0
- resulting_atoms = list(/mob/living/simple_animal/hostile/ooze/gelatinous = 1)
+ resulting_atom = /mob/living/simple_animal/hostile/ooze/gelatinous
/datum/micro_organism/cell_line/sholean_grapes
desc = "Globular ooze particles"
@@ -334,7 +336,7 @@
/datum/reagent/consumable/ice = -1)
virus_suspectibility = 0
- resulting_atoms = list(/mob/living/simple_animal/hostile/ooze/grapes = 1)
+ resulting_atom = /mob/living/simple_animal/hostile/ooze/grapes
////////////////////
//// MISC ////
@@ -355,7 +357,8 @@
/datum/reagent/consumable/ethanol/bug_spray = -4)
virus_suspectibility = 0
- resulting_atoms = list(/mob/living/basic/cockroach = 5)
+ resulting_atom = /mob/living/basic/cockroach
+ resulting_atom_count = 5
/datum/micro_organism/cell_line/glockroach
desc = "Gattodeoid anthropod cells"
@@ -376,7 +379,8 @@
/datum/reagent/consumable/ethanol/bug_spray = -4)
virus_suspectibility = 0
- resulting_atoms = list(/mob/living/basic/cockroach/glockroach = 2)
+ resulting_atom = /mob/living/basic/cockroach/glockroach
+ resulting_atom_count = 2
/datum/micro_organism/cell_line/hauberoach
desc = "Hattodeoid anthropod cells"
@@ -397,7 +401,8 @@
/datum/reagent/consumable/ethanol/cognac = -4)
virus_suspectibility = 0
- resulting_atoms = list(/mob/living/basic/cockroach/hauberoach = 2)
+ resulting_atom = /mob/living/basic/cockroach/hauberoach
+ resulting_atom_count = 2
/datum/micro_organism/cell_line/pine
desc = "Coniferous plant cells"
@@ -418,7 +423,7 @@
suppressive_reagents = list(/datum/reagent/toxin/plantbgone = -8)
virus_suspectibility = 1
- resulting_atoms = list(/mob/living/basic/tree = 1)
+ resulting_atom = /mob/living/basic/tree
/datum/micro_organism/cell_line/vat_beast
desc = "Hypergenic xenocytes"
@@ -443,7 +448,7 @@
/datum/reagent/medicine/c2/syriniver = -2)
virus_suspectibility = 0.5
- resulting_atoms = list(/mob/living/simple_animal/hostile/vatbeast = 1)
+ resulting_atom = /mob/living/simple_animal/hostile/vatbeast
/datum/micro_organism/cell_line/vat_beast/succeed_growing(obj/machinery/plumbing/growing_vat/vat)
. = ..()
@@ -470,12 +475,9 @@
/datum/reagent/consumable/liquidgibs = -2)
virus_suspectibility = 0
- resulting_atoms = list()
/datum/micro_organism/cell_line/netherworld/succeed_growing(obj/machinery/plumbing/growing_vat/vat)
- var/random_result = pick(/mob/living/basic/creature, /mob/living/basic/migo, /mob/living/basic/blankbody) //i looked myself, pretty much all of them are reasonably strong and somewhat on the same level. except migo is the jackpot and the blank body is whiff.
- resulting_atoms = list()
- resulting_atoms[random_result] = 1
+ resulting_atom = pick(/mob/living/basic/creature, /mob/living/basic/migo, /mob/living/basic/blankbody) //i looked myself, pretty much all of them are reasonably strong and somewhat on the same level. except migo is the jackpot and the blank body is whiff.
return ..()
/datum/micro_organism/cell_line/clown/fuck_up_growing(obj/machinery/plumbing/growing_vat/vat)
@@ -509,7 +511,7 @@
/datum/reagent/consumable/nothing = -2,
/datum/reagent/fuel/oil = -1)
- resulting_atoms = list(/mob/living/basic/clown/banana = 1)
+ resulting_atom = /mob/living/basic/clown/banana
/datum/micro_organism/cell_line/clown/glutton
desc = "hyperadipogenic clown stem cells"
@@ -535,7 +537,7 @@
/datum/reagent/consumable/nothing = -2,
/datum/reagent/toxin/bad_food = -1)
- resulting_atoms = list(/mob/living/basic/clown/mutant/glutton = 1)
+ resulting_atom = /mob/living/basic/clown/mutant/glutton
/datum/micro_organism/cell_line/clown/longclown
desc = "long clown bits"
@@ -558,7 +560,7 @@
/datum/reagent/consumable/nothing = -2,
/datum/reagent/sulfur = -1)
- resulting_atoms = list(/mob/living/basic/clown/longface = 1)
+ resulting_atom = /mob/living/basic/clown/longface
/datum/micro_organism/cell_line/frog
desc = "anura amphibian cells"
@@ -579,7 +581,7 @@
/datum/reagent/toxin = -1)
virus_suspectibility = 0.5
- resulting_atoms = list(/mob/living/basic/frog = 1)
+ resulting_atom = /mob/living/basic/frog
/datum/micro_organism/cell_line/axolotl
desc = "caudata amphibian cells"
@@ -602,7 +604,7 @@
/datum/reagent/toxin = -1)
virus_suspectibility = 0.5
- resulting_atoms = list(/mob/living/basic/axolotl = 1)
+ resulting_atom = /mob/living/basic/axolotl
/datum/micro_organism/cell_line/walking_mushroom
desc = "motile fungal hyphae"
@@ -627,7 +629,7 @@
/datum/reagent/copper = -1)
virus_suspectibility = 0
- resulting_atoms = list(/mob/living/basic/mushroom = 1)
+ resulting_atom = /mob/living/basic/mushroom
/datum/micro_organism/cell_line/queen_bee
desc = "aphid cells"
@@ -652,7 +654,7 @@
/datum/reagent/drug/nicotine = -1)
virus_suspectibility = 0
- resulting_atoms = list(/obj/item/queen_bee/bought = 1)
+ resulting_atom = /obj/item/queen_bee/bought
/datum/micro_organism/cell_line/queen_bee/fuck_up_growing(obj/machinery/plumbing/growing_vat/vat) //we love job hazards
vat.visible_message(span_warning("You hear angry buzzing coming from the inside of the vat!"))
@@ -682,7 +684,8 @@
)
virus_suspectibility = 0
- resulting_atoms = list(/mob/living/basic/butterfly = 3)
+ resulting_atom = /mob/living/basic/butterfly
+ resulting_atom_count = 3
/datum/micro_organism/cell_line/mega_arachnid
desc = "pseudoarachnoid cells"
@@ -708,6 +711,6 @@
/datum/reagent/drug/nicotine = -1,
/datum/reagent/toxin/pestkiller = -1)
- resulting_atoms = list(/mob/living/basic/mega_arachnid = 1)
+ resulting_atom = /mob/living/basic/mega_arachnid
#undef VAT_GROWTH_RATE
diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm
index ea4ef0e9b7ed1..68ffe5e9248be 100644
--- a/code/modules/research/xenobiology/xenobio_camera.dm
+++ b/code/modules/research/xenobiology/xenobio_camera.dm
@@ -91,18 +91,20 @@
eyeobj.icon_state = "generic_camera"
/obj/machinery/computer/camera_advanced/xenobio/GrantActions(mob/living/user)
- ..()
+ . = ..()
RegisterSignal(user, COMSIG_MOB_CTRL_CLICKED, PROC_REF(XenoClickCtrl))
- RegisterSignal(user, COMSIG_XENO_SLIME_CLICK_ALT, PROC_REF(XenoSlimeClickAlt))
+ RegisterSignal(user, COMSIG_MOB_ALTCLICKON, PROC_REF(XenoSlimeClickAlt))
RegisterSignal(user, COMSIG_XENO_SLIME_CLICK_SHIFT, PROC_REF(XenoSlimeClickShift))
RegisterSignal(user, COMSIG_XENO_TURF_CLICK_SHIFT, PROC_REF(XenoTurfClickShift))
/obj/machinery/computer/camera_advanced/xenobio/remove_eye_control(mob/living/user)
- UnregisterSignal(user, COMSIG_MOB_CTRL_CLICKED)
- UnregisterSignal(user, COMSIG_XENO_SLIME_CLICK_ALT)
- UnregisterSignal(user, COMSIG_XENO_SLIME_CLICK_SHIFT)
- UnregisterSignal(user, COMSIG_XENO_TURF_CLICK_SHIFT)
- ..()
+ UnregisterSignal(user, list(
+ COMSIG_MOB_CTRL_CLICKED,
+ COMSIG_MOB_ALTCLICKON,
+ COMSIG_XENO_SLIME_CLICK_SHIFT,
+ COMSIG_XENO_TURF_CLICK_SHIFT,
+ ))
+ return ..()
/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/used_item, mob/user, params)
if(istype(used_item, /obj/item/food/monkeycube))
@@ -355,11 +357,6 @@ Due to keyboard shortcuts, the second one is not necessarily the remote eye's lo
//
// Alternate clicks for slime, monkey and open turf if using a xenobio console
-
-/mob/living/basic/slime/click_alt(mob/user)
- SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_ALT, src)
- return CLICK_ACTION_SUCCESS
-
/mob/living/basic/slime/ShiftClick(mob/user)
SEND_SIGNAL(user, COMSIG_XENO_SLIME_CLICK_SHIFT, src)
..()
@@ -372,6 +369,10 @@ Due to keyboard shortcuts, the second one is not necessarily the remote eye's lo
/obj/machinery/computer/camera_advanced/xenobio/proc/XenoSlimeClickAlt(mob/living/user, mob/living/basic/slime/target_slime)
SIGNAL_HANDLER
+ . = COMSIG_MOB_CANCEL_CLICKON
+ if(!isslime(target_slime))
+ return
+
var/mob/camera/ai_eye/remote/xenobio/remote_eye = user.remote_control
var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = remote_eye.origin
@@ -426,13 +427,20 @@ Due to keyboard shortcuts, the second one is not necessarily the remote eye's lo
if(!isopenturf(target_turf))
return
+ var/cleanup = FALSE
var/mob/camera/ai_eye/remote/xenobio/remote_eye = user.remote_control
var/obj/machinery/computer/camera_advanced/xenobio/xeno_console = remote_eye.origin
if(!xeno_console.validate_area(user, remote_eye, target_turf))
return
- xeno_console.feed_slime(user, target_turf)
+ for(var/mob/monkey in target_turf)
+ if(ismonkey(monkey) && monkey.stat == DEAD)
+ cleanup = TRUE
+ xeno_console.monkey_recycle(user, monkey)
+
+ if(!cleanup)
+ xeno_console.feed_slime(user, target_turf)
///Picks up a dead monkey for recycling
/obj/machinery/computer/camera_advanced/xenobio/proc/XenoMonkeyClickCtrl(mob/living/user, mob/living/carbon/human/target_mob)
diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm
index f8b460a783d0d..d3184cc96c62f 100644
--- a/code/modules/shuttle/navigation_computer.dm
+++ b/code/modules/shuttle/navigation_computer.dm
@@ -20,7 +20,9 @@
// Traits forbided for custom docking
var/list/locked_traits = list(ZTRAIT_RESERVED, ZTRAIT_CENTCOM, ZTRAIT_AWAY)
var/view_range = 0
+ ///x offset for where the camera eye will spawn. Starts from shuttle's docking port
var/x_offset = 0
+ ///y offset for where the camera eye will spawn. Starts from the shuttle's docking port
var/y_offset = 0
var/list/whitelist_turfs = list(/turf/open/space, /turf/open/floor/plating, /turf/open/lava, /turf/open/openspace)
var/see_hidden = FALSE
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index fbe3e52e5030f..68a0a41a2e092 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -379,6 +379,7 @@
"whiteship_tram",
"whiteship_personalshuttle",
"whiteship_obelisk",
+ "whiteship_birdshot",
)
/// Helper proc that tests to ensure all whiteship templates can spawn at their docking port, and logs their sizes
diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm
index dc30f36149bc6..f76ecb104e72b 100644
--- a/code/modules/spells/spell.dm
+++ b/code/modules/spells/spell.dm
@@ -246,7 +246,11 @@
return target // They're just standing around, proceed as normal
if(HAS_TRAIT(cast_loc, TRAIT_CASTABLE_LOC))
- return cast_loc // They're in an atom which allows casting, so redirect the caster to loc
+ if(HAS_TRAIT(cast_loc, TRAIT_SPELLS_TRANSFER_TO_LOC) && ismob(cast_loc.loc))
+ return cast_loc.loc
+ else
+ return cast_loc
+ // They're in an atom which allows casting, so redirect the caster to loc
return null
diff --git a/code/modules/spells/spell_types/conjure/invisible_wall.dm b/code/modules/spells/spell_types/conjure/invisible_wall.dm
index d2812912f0fc2..a61db7cf74e19 100644
--- a/code/modules/spells/spell_types/conjure/invisible_wall.dm
+++ b/code/modules/spells/spell_types/conjure/invisible_wall.dm
@@ -15,7 +15,7 @@
invocation_self_message = span_notice("You form a wall in front of yourself.")
invocation_type = INVOCATION_EMOTE
- spell_requirements = SPELL_REQUIRES_MIME_VOW
+ spell_requirements = SPELL_REQUIRES_HUMAN|SPELL_REQUIRES_MIME_VOW
antimagic_flags = NONE
spell_max_level = 1
diff --git a/code/modules/spells/spell_types/conjure_item/_conjure_item.dm b/code/modules/spells/spell_types/conjure_item/_conjure_item.dm
index 7e39f778391d4..3bbdf25fa8444 100644
--- a/code/modules/spells/spell_types/conjure_item/_conjure_item.dm
+++ b/code/modules/spells/spell_types/conjure_item/_conjure_item.dm
@@ -3,7 +3,7 @@
invocation_type = INVOCATION_NONE
/// Typepath of whatever item we summon
- var/obj/item/item_type
+ var/obj/item_type
/// If TRUE, we delete any previously created items when we cast the spell
var/delete_old = TRUE
/// List of weakrefs to items summoned
@@ -57,7 +57,7 @@
var/mob/mob_caster = cast_on
if(istype(mob_caster))
- var/obj/item/existing_item = mob_caster.get_active_held_item()
+ var/obj/existing_item = mob_caster.get_active_held_item()
if(existing_item)
mob_caster.dropItemToGround(existing_item)
@@ -65,6 +65,10 @@
if(QDELETED(created))
CRASH("[type] tried to create an item, but failed. It's item type is [item_type].")
+ if(!isitem(created))
+ created.forceMove(cast_on.drop_location())
+ return
+
if(istype(mob_caster))
mob_caster.put_in_hands(created, del_on_fail = delete_on_failure)
diff --git a/code/modules/spells/spell_types/pointed/_pointed.dm b/code/modules/spells/spell_types/pointed/_pointed.dm
index 04c3ed47944b9..edf3dab2179d4 100644
--- a/code/modules/spells/spell_types/pointed/_pointed.dm
+++ b/code/modules/spells/spell_types/pointed/_pointed.dm
@@ -16,7 +16,7 @@
var/deactive_msg
/// The casting range of our spell
var/cast_range = 7
- /// Variable dictating if the spell will use turf based aim assist
+ /// If aim asisst is used. Disable to disable
var/aim_assist = TRUE
/datum/action/cooldown/spell/pointed/New(Target)
@@ -65,17 +65,18 @@
return TRUE
/datum/action/cooldown/spell/pointed/InterceptClickOn(mob/living/caller, params, atom/target)
-
var/atom/aim_assist_target
- if(aim_assist && isturf(target))
- // Find any human in the list. We aren't picky, it's aim assist after all
- aim_assist_target = locate(/mob/living/carbon/human) in target
- if(!aim_assist_target)
- // If we didn't find a human, we settle for any living at all
- aim_assist_target = locate(/mob/living) in target
-
+ if(aim_assist)
+ aim_assist_target = aim_assist(caller, target)
return ..(caller, params, aim_assist_target || target)
+/datum/action/cooldown/spell/pointed/proc/aim_assist(mob/living/caller, atom/target)
+ if(!isturf(target))
+ return
+
+ // Find any human, or if that fails, any living target
+ return locate(/mob/living/carbon/human) in target || locate(/mob/living) in target
+
/datum/action/cooldown/spell/pointed/is_valid_target(atom/cast_on)
if(cast_on == owner)
to_chat(owner, span_warning("You cannot cast [src] on yourself!"))
diff --git a/code/modules/spells/spell_types/self/mime_vow.dm b/code/modules/spells/spell_types/self/mime_vow.dm
index bd666786b9624..d4e34880b534d 100644
--- a/code/modules/spells/spell_types/self/mime_vow.dm
+++ b/code/modules/spells/spell_types/self/mime_vow.dm
@@ -8,7 +8,8 @@
panel = "Mime"
school = SCHOOL_MIME
- spell_requirements = NONE
+ //MMI mimes should be able to break their vow
+ spell_requirements = SPELL_CASTABLE_AS_BRAIN
spell_max_level = 1
diff --git a/code/modules/spells/spell_types/self/mutate.dm b/code/modules/spells/spell_types/self/mutate.dm
index 477c7e6723c3a..7ebd9ab4d1bfe 100644
--- a/code/modules/spells/spell_types/self/mutate.dm
+++ b/code/modules/spells/spell_types/self/mutate.dm
@@ -57,7 +57,7 @@
cast_on.add_atom_colour(COLOR_VIBRANT_LIME, TEMPORARY_COLOUR_PRIORITY)
/datum/action/cooldown/spell/apply_mutations/mutate/remove_mutations(mob/living/carbon/human/cast_on)
- if(QDELETED(cast_on) || !is_valid_target(cast_on))
+ if(QDELETED(cast_on) || !is_valid_target(cast_on)) // Not 100% sure if this check is still needed, leaving it just in case
return
-
+ ..()
cast_on.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY)
diff --git a/code/modules/spells/spell_types/touch/_touch.dm b/code/modules/spells/spell_types/touch/_touch.dm
index 5045ea6522092..d1adc9619be27 100644
--- a/code/modules/spells/spell_types/touch/_touch.dm
+++ b/code/modules/spells/spell_types/touch/_touch.dm
@@ -127,7 +127,8 @@
/datum/action/cooldown/spell/touch/proc/register_hand_signals()
SHOULD_CALL_PARENT(TRUE)
- RegisterSignal(attached_hand, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_hand_hit))
+ RegisterSignal(attached_hand, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(on_hand_hit))
+ RegisterSignal(attached_hand, COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY, PROC_REF(on_hand_hit_secondary))
RegisterSignal(attached_hand, COMSIG_ITEM_DROPPED, PROC_REF(on_hand_dropped))
RegisterSignal(attached_hand, COMSIG_QDELETING, PROC_REF(on_hand_deleted))
@@ -140,7 +141,8 @@
SHOULD_CALL_PARENT(TRUE)
UnregisterSignal(attached_hand, list(
- COMSIG_ITEM_AFTERATTACK,
+ COMSIG_ITEM_INTERACTING_WITH_ATOM,
+ COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY,
COMSIG_ITEM_DROPPED,
COMSIG_QDELETING,
COMSIG_ITEM_OFFER_TAKEN,
@@ -159,30 +161,46 @@
return ..()
/**
- * Signal proc for [COMSIG_ITEM_AFTERATTACK] from our attached hand.
+ * Signal proc for [COMSIG_ITEM_INTERACTING_WITH_ATOM] from our attached hand.
*
* When our hand hits an atom, we can cast do_hand_hit() on them.
*/
-/datum/action/cooldown/spell/touch/proc/on_hand_hit(datum/source, atom/victim, mob/caster, click_parameters)
+/datum/action/cooldown/spell/touch/proc/on_hand_hit(datum/source, mob/living/caster, atom/target, click_parameters)
SIGNAL_HANDLER
SHOULD_NOT_OVERRIDE(TRUE) // DEFINITELY don't put effects here, put them in cast_on_hand_hit
- if(!can_hit_with_hand(victim, caster))
+ if(!can_hit_with_hand(target, caster))
return
- if(LAZYACCESS(params2list(click_parameters), RIGHT_CLICK))
- INVOKE_ASYNC(src, PROC_REF(do_secondary_hand_hit), source, victim, caster)
- else
- INVOKE_ASYNC(src, PROC_REF(do_hand_hit), source, victim, caster)
+ INVOKE_ASYNC(src, PROC_REF(do_hand_hit), source, target, caster)
+ return ITEM_INTERACT_SUCCESS
+
+/**
+ * Signal proc for [COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY] from our attached hand.
+ *
+ * When our hand hits an atom, we can cast do_hand_hit() on them.
+ */
+/datum/action/cooldown/spell/touch/proc/on_hand_hit_secondary(datum/source, mob/living/caster, atom/target, click_parameters)
+ SIGNAL_HANDLER
+ SHOULD_NOT_OVERRIDE(TRUE)
+
+ if(!can_hit_with_hand(target, caster))
+ return
+
+ INVOKE_ASYNC(src, PROC_REF(do_secondary_hand_hit), source, target, caster)
+ return ITEM_INTERACT_SUCCESS
/// Checks if the passed victim can be cast on by the caster.
-/datum/action/cooldown/spell/touch/proc/can_hit_with_hand(atom/victim, mob/caster)
+/datum/action/cooldown/spell/touch/proc/can_hit_with_hand(atom/victim, mob/living/caster)
if(!can_cast_on_self && victim == caster)
return FALSE
if(!is_valid_target(victim))
return FALSE
if(!can_cast_spell(feedback = TRUE))
return FALSE
+ if(!(caster.mobility_flags & MOBILITY_USE))
+ caster.balloon_alert(caster, "can't reach out!")
+ return FALSE
return TRUE
@@ -206,6 +224,9 @@
log_combat(caster, victim, "cast the touch spell [name] on", hand)
spell_feedback(caster)
+ caster.do_attack_animation(victim)
+ caster.changeNext_move(CLICK_CD_MELEE)
+ victim.add_fingerprint(caster)
remove_hand(caster)
/**
@@ -223,6 +244,9 @@
if(SECONDARY_ATTACK_CONTINUE_CHAIN)
log_combat(caster, victim, "cast the touch spell [name] on", hand, "(secondary / alt cast)")
spell_feedback(caster)
+ caster.do_attack_animation(victim)
+ caster.changeNext_move(CLICK_CD_MELEE)
+ victim.add_fingerprint(caster)
remove_hand(caster)
// Call normal will call the normal cast proc
@@ -329,14 +353,6 @@
if(spell)
spell_which_made_us = WEAKREF(spell)
-/obj/item/melee/touch_attack/attack(mob/target, mob/living/carbon/user)
- if(!iscarbon(user)) //Look ma, no hands
- return TRUE
- if(!(user.mobility_flags & MOBILITY_USE))
- user.balloon_alert(user, "can't reach out!")
- return TRUE
- return ..()
-
/**
* When the hand component of a touch spell is qdel'd, (the hand is dropped or otherwise lost),
* the cooldown on the spell that made it is automatically refunded.
diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm
index ba53c8b8c41d6..6c2661bbe2237 100644
--- a/code/modules/station_goals/dna_vault.dm
+++ b/code/modules/station_goals/dna_vault.dm
@@ -115,32 +115,6 @@
qdel(filler)
return ..()
-/obj/machinery/dna_vault/attackby(obj/item/our_item, mob/user, params)
- if(istype(our_item, /obj/item/dna_probe))
- var/obj/item/dna_probe/our_probe = our_item
- var/uploaded = 0
- var/plant_dna_length = length(our_probe.stored_dna_plants)
- var/human_dna_length = length(our_probe.stored_dna_human)
- var/animal_dna_length = length(our_probe.stored_dna_animal)
- if(plant_dna_length)
- uploaded += plant_dna_length
- plant_dna += our_probe.stored_dna_plants
- our_probe.stored_dna_plants.Cut()
- if(human_dna_length)
- uploaded += human_dna_length
- human_dna += our_probe.stored_dna_human
- our_probe.stored_dna_human.Cut()
- if(animal_dna_length)
- uploaded += animal_dna_length
- animal_dna += our_probe.stored_dna_animal
- our_probe.stored_dna_animal.Cut()
- check_goal()
- playsound(src, 'sound/misc/compiler-stage1.ogg', 50)
- to_chat(user, span_notice("[uploaded] new datapoints uploaded."))
- return
-
- return ..()
-
/obj/machinery/dna_vault/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
diff --git a/code/modules/surgery/blood_filter.dm b/code/modules/surgery/blood_filter.dm
index 0193ee9c01a8d..d56e35ca9e73b 100644
--- a/code/modules/surgery/blood_filter.dm
+++ b/code/modules/surgery/blood_filter.dm
@@ -15,6 +15,13 @@
return ..()
/datum/surgery_step/filter_blood/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE)
+ display_results(
+ user,
+ target,
+ span_notice("You begin filtering [target]'s blood..."),
+ span_notice("[user] uses [tool] to filter [target]'s blood."),
+ span_notice("[user] uses [tool] on [target]'s chest."),
+ )
if(!..())
return
while(has_filterable_chems(target, tool))
@@ -33,6 +40,8 @@
*/
/datum/surgery_step/filter_blood/proc/has_filterable_chems(mob/living/carbon/target, obj/item/blood_filter/bloodfilter)
if(!length(target.reagents?.reagent_list))
+ bloodfilter.audible_message(span_notice("The [bloodfilter] pings as it reports no chemicals detected in [target]'s blood."))
+ playsound(get_turf(target), 'sound/machines/ping.ogg', 75, TRUE, falloff_exponent = 12, falloff_distance = 1)
return FALSE
if(!length(bloodfilter.whitelist))
@@ -49,16 +58,9 @@
implements = list(/obj/item/blood_filter = 95)
repeatable = TRUE
time = 2.5 SECONDS
- success_sound = 'sound/machines/ping.ogg'
+ success_sound = 'sound/machines/fan_loop.ogg'
/datum/surgery_step/filter_blood/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
- display_results(
- user,
- target,
- span_notice("You begin filtering [target]'s blood..."),
- span_notice("[user] uses [tool] to filter [target]'s blood."),
- span_notice("[user] uses [tool] on [target]'s chest."),
- )
display_pain(target, "You feel a throbbing pain in your chest!")
/datum/surgery_step/filter_blood/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
@@ -70,9 +72,9 @@
display_results(
user,
target,
- span_notice("\The [tool] pings as it finishes filtering [target]'s blood."),
- span_notice("\The [tool] pings as it stops pumping [target]'s blood."),
- span_notice("\The [tool] pings as it stops pumping."),
+ span_notice("\The [tool] completes a cycle filtering [target]'s blood."),
+ span_notice("\The [tool] whirrs as it filters [target]'s blood."),
+ span_notice("\The [tool] whirrs as it pumps."),
)
if(locate(/obj/item/healthanalyzer) in user.held_items)
diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm
index 318926465ae08..c03a930395ab9 100644
--- a/code/modules/surgery/bodyparts/_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/_bodyparts.dm
@@ -362,7 +362,7 @@
if(ishuman(victim))
var/mob/living/carbon/human/human_victim = victim
- if(HAS_TRAIT(victim, TRAIT_LIMBATTACHMENT))
+ if(HAS_TRAIT(victim, TRAIT_LIMBATTACHMENT) || HAS_TRAIT(src, TRAIT_EASY_ATTACH))
if(!human_victim.get_bodypart(body_zone))
user.temporarilyRemoveItemFromInventory(src, TRUE)
if(!try_attach_limb(victim))
diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm
index e942a1b2e3aca..1fa6db17e5a54 100644
--- a/code/modules/surgery/bodyparts/dismemberment.dm
+++ b/code/modules/surgery/bodyparts/dismemberment.dm
@@ -234,7 +234,7 @@
qdel(owner.GetComponent(/datum/component/creamed)) //clean creampie overlay flushed emoji
//Handle dental implants
- for(var/datum/action/item_action/hands_free/activate_pill/pill_action in owner.actions)
+ for(var/datum/action/item_action/activate_pill/pill_action in owner.actions)
pill_action.Remove(owner)
var/obj/pill = pill_action.target
if(pill)
@@ -342,7 +342,7 @@
//Handle dental implants
for(var/obj/item/reagent_containers/pill/pill in src)
- for(var/datum/action/item_action/hands_free/activate_pill/pill_action in pill.actions)
+ for(var/datum/action/item_action/activate_pill/pill_action in pill.actions)
pill.forceMove(new_head_owner)
pill_action.Grant(new_head_owner)
break
diff --git a/code/modules/surgery/bodyparts/ghetto_parts.dm b/code/modules/surgery/bodyparts/ghetto_parts.dm
new file mode 100644
index 0000000000000..03326f3754e45
--- /dev/null
+++ b/code/modules/surgery/bodyparts/ghetto_parts.dm
@@ -0,0 +1,91 @@
+/obj/item/bodypart/arm/left/ghetto
+ name = "left peg arm"
+ desc = "A roughly hewn wooden peg replaces where a forearm should be. It's simple and sturdy, clearly made in a hurry with whatever materials were at hand. Despite its crude appearance, it gets the job done."
+ icon = 'icons/mob/human/species/ghetto.dmi'
+ icon_static = 'icons/mob/human/species/ghetto.dmi'
+ limb_id = BODYPART_ID_PEG
+ icon_state = "peg_l_arm"
+ bodytype = BODYTYPE_PEG
+ should_draw_greyscale = FALSE
+ attack_verb_simple = list("bashed", "slashed")
+ unarmed_damage_low = 3
+ unarmed_damage_high = 9
+ unarmed_effectiveness = 5
+ brute_modifier = 1.2
+ burn_modifier = 1.5
+ bodypart_traits = list(TRAIT_CHUNKYFINGERS)
+ disabling_threshold_percentage = 1
+ bodypart_flags = BODYPART_UNHUSKABLE
+ biological_state = (BIO_JOINTED)
+
+/obj/item/bodypart/arm/left/ghetto/Initialize(mapload, ...)
+ . = ..()
+ ADD_TRAIT(src, TRAIT_EASY_ATTACH, INNATE_TRAIT)
+
+/obj/item/bodypart/arm/right/ghetto
+ name = "right peg arm"
+ desc = "A roughly hewn wooden peg replaces where a forearm should be. It's simple and sturdy, clearly made in a hurry with whatever materials were at hand. Despite its crude appearance, it gets the job done."
+ icon = 'icons/mob/human/species/ghetto.dmi'
+ icon_static = 'icons/mob/human/species/ghetto.dmi'
+ limb_id = BODYPART_ID_PEG
+ icon_state = "peg_r_arm"
+ bodytype = BODYTYPE_PEG
+ should_draw_greyscale = FALSE
+ attack_verb_simple = list("bashed", "slashed")
+ unarmed_damage_low = 3
+ unarmed_damage_high = 9
+ unarmed_effectiveness = 5
+ brute_modifier = 1.2
+ burn_modifier = 1.5
+ bodypart_traits = list(TRAIT_CHUNKYFINGERS)
+ disabling_threshold_percentage = 1
+ bodypart_flags = BODYPART_UNHUSKABLE
+ biological_state = (BIO_JOINTED)
+
+/obj/item/bodypart/arm/right/ghetto/Initialize(mapload, ...)
+ . = ..()
+ ADD_TRAIT(src, TRAIT_EASY_ATTACH, INNATE_TRAIT)
+
+/obj/item/bodypart/leg/left/ghetto
+ name = "left peg leg"
+ desc = "Fashioned from what looks suspiciously like a table leg, this peg leg brings a whole new meaning to 'dining on the go.' It's a bit wobbly and creaks ominously with every step, but at least you can claim to have the most well-balanced diet on the seven seas."
+ icon = 'icons/mob/human/species/ghetto.dmi'
+ icon_static = 'icons/mob/human/species/ghetto.dmi'
+ limb_id = BODYPART_ID_PEG
+ icon_state = "peg_l_leg"
+ bodytype = BODYTYPE_PEG
+ should_draw_greyscale = FALSE
+ unarmed_damage_low = 2
+ unarmed_damage_high = 5
+ unarmed_effectiveness = 10
+ brute_modifier = 1.2
+ burn_modifier = 1.5
+ disabling_threshold_percentage = 1
+ bodypart_flags = BODYPART_UNHUSKABLE
+ biological_state = (BIO_JOINTED)
+
+/obj/item/bodypart/leg/left/ghetto/Initialize(mapload, ...)
+ . = ..()
+ ADD_TRAIT(src, TRAIT_EASY_ATTACH, INNATE_TRAIT)
+
+/obj/item/bodypart/leg/right/ghetto
+ name = "right peg leg"
+ desc = "Fashioned from what looks suspiciously like a table leg, this peg leg brings a whole new meaning to 'dining on the go.' It's a bit wobbly and creaks ominously with every step, but at least you can claim to have the most well-balanced diet on the seven seas."
+ icon = 'icons/mob/human/species/ghetto.dmi'
+ icon_static = 'icons/mob/human/species/ghetto.dmi'
+ limb_id = BODYPART_ID_PEG
+ icon_state = "peg_r_leg"
+ bodytype = BODYTYPE_PEG
+ should_draw_greyscale = FALSE
+ unarmed_damage_low = 2
+ unarmed_damage_high = 5
+ unarmed_effectiveness = 10
+ brute_modifier = 1.2
+ burn_modifier = 1.5
+ disabling_threshold_percentage = 1
+ bodypart_flags = BODYPART_UNHUSKABLE
+ biological_state = (BIO_JOINTED)
+
+/obj/item/bodypart/leg/right/ghetto/Initialize(mapload, ...)
+ . = ..()
+ ADD_TRAIT(src, TRAIT_EASY_ATTACH, INNATE_TRAIT)
diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm
index 5685b12b9ef62..66f42c1e039ba 100644
--- a/code/modules/surgery/bodyparts/head.dm
+++ b/code/modules/surgery/bodyparts/head.dm
@@ -76,6 +76,9 @@
///Current lipstick trait, if any (such as TRAIT_KISS_OF_DEATH)
var/stored_lipstick_trait
+ /// How many teeth the head's species has, humans have 32 so that's the default. Used for a limit to dental pill implants.
+ var/teeth_count = 32
+
/// Offset to apply to equipment worn on the ears
var/datum/worn_feature_offset/worn_ears_offset
/// Offset to apply to equipment worn on the eyes
diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm
index fb0647d0fb504..863cdd9cb61c2 100644
--- a/code/modules/surgery/bodyparts/helpers.dm
+++ b/code/modules/surgery/bodyparts/helpers.dm
@@ -48,6 +48,15 @@
which_hand = BODY_ZONE_PRECISE_R_HAND
return get_bodypart(check_zone(which_hand))
+/// Gets the inactive hand of the mob. Returns FALSE on non-carbons, otherwise returns the /obj/item/bodypart.
+/mob/proc/get_inactive_hand()
+ return null
+
+/mob/living/carbon/get_inactive_hand()
+ var/which_hand = BODY_ZONE_PRECISE_R_HAND
+ if(!(active_hand_index % RIGHT_HANDS))
+ which_hand = BODY_ZONE_PRECISE_L_HAND
+ return get_bodypart(check_zone(which_hand))
/mob/proc/has_left_hand(check_disabled = TRUE)
return TRUE
diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm
index 03f53c962d59f..97fa50d76c85b 100644
--- a/code/modules/surgery/bodyparts/parts.dm
+++ b/code/modules/surgery/bodyparts/parts.dm
@@ -74,9 +74,11 @@
if(!ishuman(owner))
return null
var/mob/living/carbon/human/human_owner = owner
- var/butt_sprite = human_owner.physique == FEMALE ? BUTT_SPRITE_HUMAN_FEMALE : BUTT_SPRITE_HUMAN_MALE
var/obj/item/organ/external/tail/tail = human_owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
- return tail?.get_butt_sprite() || butt_sprite
+ if(tail)
+ return tail.get_butt_sprite()
+
+ return icon('icons/mob/butts.dmi', human_owner.physique == FEMALE ? BUTT_SPRITE_HUMAN_FEMALE : BUTT_SPRITE_HUMAN_MALE)
/obj/item/bodypart/chest/monkey
icon = 'icons/mob/human/species/monkey/bodyparts.dmi'
diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm
index 5c6bd527d1b88..314f3396f0afe 100644
--- a/code/modules/surgery/bodyparts/robot_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm
@@ -215,7 +215,7 @@
wing_types = list(/obj/item/organ/external/wings/functional/robotic)
var/wired = FALSE
- var/obj/item/stock_parts/cell/cell = null
+ var/obj/item/stock_parts/power_store/cell = null
/obj/item/bodypart/chest/robot/emp_effect(severity, protection)
. = ..()
@@ -291,7 +291,7 @@
), AUGMENTATION_TRAIT)
/obj/item/bodypart/chest/robot/attackby(obj/item/weapon, mob/user, params)
- if(istype(weapon, /obj/item/stock_parts/cell))
+ if(istype(weapon, /obj/item/stock_parts/power_store/cell))
if(cell)
to_chat(user, span_warning("You have already inserted a cell!"))
return
diff --git a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm
index 20e4b58660795..05645ed20df2e 100644
--- a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm
@@ -103,3 +103,4 @@
icon_state = "lustrous_head"
limb_id = SPECIES_ETHEREAL_LUSTROUS
head_flags = NONE
+ teeth_count = 0 // bro you seen these thinsg. they got a crystal for a head aint no teeth here
diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm
index 30e91db21373a..350e2f32883fb 100644
--- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm
@@ -3,6 +3,8 @@
limb_id = SPECIES_LIZARD
is_dimorphic = FALSE
head_flags = HEAD_LIPS|HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_EYEHOLES|HEAD_DEBRAIN
+ // lizardshave many teeth
+ teeth_count = 72
/obj/item/bodypart/chest/lizard
icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi'
@@ -11,7 +13,7 @@
wing_types = list(/obj/item/organ/external/wings/functional/dragon)
/obj/item/bodypart/chest/lizard/get_butt_sprite()
- return BUTT_SPRITE_LIZARD
+ return icon('icons/mob/butts.dmi', BUTT_SPRITE_LIZARD)
/obj/item/bodypart/arm/left/lizard
icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi'
diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm
index 2730bc362c72c..f9a71a4e6d4dd 100644
--- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm
@@ -5,6 +5,7 @@
burn_modifier = 2
head_flags = HEAD_EYESPRITES|HEAD_DEBRAIN
biological_state = (BIO_FLESH|BIO_BLOODED)
+ teeth_count = 0
/obj/item/bodypart/chest/snail
limb_id = SPECIES_SNAIL
@@ -51,6 +52,7 @@
is_dimorphic = FALSE
should_draw_greyscale = FALSE
head_flags = NONE
+ teeth_count = 0
/obj/item/bodypart/chest/abductor
limb_id = SPECIES_ABDUCTOR
@@ -59,7 +61,7 @@
wing_types = NONE
/obj/item/bodypart/chest/abductor/get_butt_sprite()
- return BUTT_SPRITE_GREY
+ return icon('icons/mob/butts.dmi', BUTT_SPRITE_GREY)
/obj/item/bodypart/arm/left/abductor
limb_id = SPECIES_ABDUCTOR
@@ -97,7 +99,7 @@
wing_types = list(/obj/item/organ/external/wings/functional/slime)
/obj/item/bodypart/chest/jelly/get_butt_sprite()
- return BUTT_SPRITE_SLIME
+ return icon('icons/mob/butts.dmi', BUTT_SPRITE_SLIME)
/obj/item/bodypart/arm/left/jelly
biological_state = (BIO_FLESH|BIO_BLOODED)
@@ -146,6 +148,7 @@
///LUMINESCENT
/obj/item/bodypart/head/jelly/luminescent
limb_id = SPECIES_LUMINESCENT
+ teeth_count = 0
/obj/item/bodypart/chest/jelly/luminescent
limb_id = SPECIES_LUMINESCENT
@@ -216,7 +219,7 @@
wing_types = NONE
/obj/item/bodypart/chest/pod/get_butt_sprite()
- return BUTT_SPRITE_FLOWERPOT
+ return icon('icons/mob/butts.dmi', BUTT_SPRITE_FLOWERPOT)
/obj/item/bodypart/arm/left/pod
limb_id = SPECIES_PODPERSON
@@ -250,6 +253,7 @@
is_dimorphic = FALSE
should_draw_greyscale = FALSE
head_flags = HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN
+ teeth_count = 0
/obj/item/bodypart/chest/fly
limb_id = SPECIES_FLYPERSON
@@ -367,6 +371,7 @@
is_dimorphic = TRUE
burn_modifier = 1.25
head_flags = NONE
+ teeth_count = 0
/obj/item/bodypart/chest/mushroom
limb_id = SPECIES_MUSHROOM
@@ -436,6 +441,8 @@
should_draw_greyscale = FALSE
dmg_overlay_type = null
head_flags = NONE
+ // too hard to drill through
+ teeth_count = 0
/obj/item/bodypart/head/golem/Initialize(mapload)
worn_ears_offset = new(
diff --git a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm
index 011ee83368a63..323cef05b8c5d 100644
--- a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm
@@ -6,6 +6,7 @@
is_dimorphic = FALSE
should_draw_greyscale = FALSE
head_flags = HEAD_LIPS|HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN //what the fuck, moths have lips?
+ teeth_count = 0
/obj/item/bodypart/chest/moth
icon = 'icons/mob/human/species/moth/bodyparts.dmi'
@@ -17,7 +18,7 @@
wing_types = list(/obj/item/organ/external/wings/functional/moth/megamoth, /obj/item/organ/external/wings/functional/moth/mothra)
/obj/item/bodypart/chest/moth/get_butt_sprite()
- return BUTT_SPRITE_FUZZY
+ return icon('icons/mob/butts.dmi', BUTT_SPRITE_FUZZY)
/obj/item/bodypart/arm/left/moth
icon = 'icons/mob/human/species/moth/bodyparts.dmi'
diff --git a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm
index 40bf4a51c042e..b0acf914079f3 100644
--- a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm
@@ -27,7 +27,7 @@
wing_types = NONE
/obj/item/bodypart/chest/plasmaman/get_butt_sprite()
- return BUTT_SPRITE_PLASMA
+ return icon('icons/mob/butts.dmi', BUTT_SPRITE_PLASMA)
/obj/item/bodypart/arm/left/plasmaman
icon = 'icons/mob/human/species/plasmaman/bodyparts.dmi'
diff --git a/code/modules/surgery/dental_implant.dm b/code/modules/surgery/dental_implant.dm
index 0d583d09a11b0..674f5803f57be 100644
--- a/code/modules/surgery/dental_implant.dm
+++ b/code/modules/surgery/dental_implant.dm
@@ -1,17 +1,40 @@
+#define MARK_TOOTH 1
+
/datum/surgery/dental_implant
name = "Dental implant"
possible_locs = list(BODY_ZONE_PRECISE_MOUTH)
steps = list(
- /datum/surgery_step/drill,
+ /datum/surgery_step/drill/pill,
/datum/surgery_step/insert_pill,
+ /datum/surgery_step/search_teeth,
+ /datum/surgery_step/close,
)
+/datum/surgery_step/drill/pill/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ . = ..()
+ var/count = 0
+ var/obj/item/bodypart/head/teeth_receptangle = target.get_bodypart(BODY_ZONE_HEAD)
+
+ ASSERT(teeth_receptangle)
+
+ for(var/obj/item/reagent_containers/pill/dental in teeth_receptangle)
+ count++
+
+ if(teeth_receptangle.teeth_count == 0)
+ to_chat(user, span_notice("[user] has no teeth, doofus!"))
+ return SURGERY_STEP_FAIL
+
+ if(count >= teeth_receptangle.teeth_count)
+ to_chat(user, span_notice("[user]'s teeth have all been replaced with pills already!"))
+ return SURGERY_STEP_FAIL
+
/datum/surgery_step/insert_pill
name = "insert pill"
implements = list(/obj/item/reagent_containers/pill = 100)
time = 16
/datum/surgery_step/insert_pill/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+
display_results(
user,
target,
@@ -25,9 +48,10 @@
if(!istype(tool))
return FALSE
- user.transferItemToLoc(tool, target, TRUE)
+ // Pills go into head
+ user.transferItemToLoc(tool, target.get_bodypart(BODY_ZONE_HEAD), TRUE)
- var/datum/action/item_action/hands_free/activate_pill/pill_action = new(tool)
+ var/datum/action/item_action/activate_pill/pill_action = new(tool)
pill_action.name = "Activate [tool.name]"
pill_action.build_all_button_icons()
pill_action.target = tool
@@ -42,12 +66,21 @@
)
return ..()
-/datum/action/item_action/hands_free/activate_pill
+/datum/action/item_action/activate_pill
name = "Activate Pill"
+ check_flags = NONE
+
+/datum/action/item_action/activate_pill/IsAvailable(feedback)
+ if(owner.stat > SOFT_CRIT)
+ return FALSE
+ return ..()
-/datum/action/item_action/hands_free/activate_pill/Trigger(trigger_flags)
+/datum/action/item_action/activate_pill/Trigger(trigger_flags)
if(!..())
return FALSE
+ owner.balloon_alert_to_viewers("[owner] grinds their teeth!", "You grit your teeth.")
+ if(!do_after(owner, owner.stat * (2.5 SECONDS), owner, IGNORE_USER_LOC_CHANGE | IGNORE_INCAPACITATED))
+ return FALSE
var/obj/item/item_target = target
to_chat(owner, span_notice("You grit your teeth and burst the implanted [item_target.name]!"))
owner.log_message("swallowed an implanted pill, [target]", LOG_ATTACK)
@@ -55,3 +88,32 @@
item_target.reagents.trans_to(owner, item_target.reagents.total_volume, transferred_by = owner, methods = INGEST)
qdel(target)
return TRUE
+
+/datum/surgery_step/search_teeth
+ name = "search teeth (hand)"
+ accept_hand = TRUE
+ time = 2 SECONDS
+ repeatable = TRUE
+
+/datum/surgery_step/search_teeth/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(
+ user,
+ target,
+ span_notice("You begin looking in [target]'s mouth for implantable teeth..."),
+ span_notice("[user] begins to look in [target]'s mouth."),
+ span_notice("[user] begins to examine [target]'s teeth."),
+ )
+ display_pain(target, "You feel fingers poke around at your teeth.")
+
+/datum/surgery_step/search_teeth/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
+ display_results(
+ user,
+ target,
+ span_notice("[user] marks a tooth in [target]'s mouth."),
+ span_notice("[user] marks a tooth in [target]'s mouth."),
+ span_notice("[user] prods a tooth in [target]'s mouth."),
+ )
+ surgery.status = MARK_TOOTH
+ return ..()
+
+#undef MARK_TOOTH
diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm
index 56479d0f22a10..e4cd3f50a4997 100644
--- a/code/modules/surgery/organs/external/tails.dm
+++ b/code/modules/surgery/organs/external/tails.dm
@@ -23,11 +23,12 @@
/obj/item/organ/external/tail/Insert(mob/living/carbon/receiver, special, movement_flags)
. = ..()
if(.)
- original_owner ||= WEAKREF(receiver)
-
receiver.clear_mood_event("tail_lost")
receiver.clear_mood_event("tail_balance_lost")
+ if(!special) // if some admin wants to give someone tail moodles for tail shenanigans, they can spawn it and do it by hand
+ original_owner ||= WEAKREF(receiver)
+
// If it's your tail, an infinite debuff is replaced with a timed one
// If it's not your tail but of same species, I guess it works, but we are more sad
// If it's not your tail AND of different species, we are horrified
@@ -161,7 +162,7 @@
return SSaccessories.tails_list_human
/obj/item/organ/external/tail/cat/get_butt_sprite()
- return BUTT_SPRITE_CAT
+ return icon('icons/mob/butts.dmi', BUTT_SPRITE_CAT)
///Cat tail bodypart overlay
/datum/bodypart_overlay/mutant/tail/cat
diff --git a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm
new file mode 100644
index 0000000000000..e9da6197ed273
--- /dev/null
+++ b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm
@@ -0,0 +1,201 @@
+/*!
+ * Contains Voltaic Combat Cyberheart
+ */
+#define DOAFTER_IMPLANTING_HEART "implanting"
+
+/obj/item/organ/internal/heart/cybernetic/anomalock
+ name = "Voltaic Combat Cyberheart"
+ desc = "A cutting-edge cyberheart, originally designed for Nanotrasen killsquad usage but later declassified for normal research. Voltaic technology allows the heart to keep the body upright in dire circumstances, alongside redirecting anomalous flux energy to fully shield the user from shocks and electro-magnetic pulses. Requires a refined Flux core as a power source."
+ icon_state = "anomalock_heart"
+
+ COOLDOWN_DECLARE(survival_cooldown)
+ ///Cooldown for the activation of the organ
+ var/survival_cooldown_time = 5 MINUTES
+ ///The lightning effect on our mob when the implant is active
+ var/mutable_appearance/lightning_overlay
+ ///how long the lightning lasts
+ var/lightning_timer
+
+ //---- Anomaly core variables:
+ ///The core item the organ runs off.
+ var/obj/item/assembly/signaler/anomaly/core
+ ///Accepted types of anomaly cores.
+ var/required_anomaly = /obj/item/assembly/signaler/anomaly/flux
+ ///If this one starts with a core in.
+ var/prebuilt = FALSE
+ ///If the core is removable once socketed.
+ var/core_removable = TRUE
+
+/obj/item/organ/internal/heart/cybernetic/anomalock/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
+ . = ..()
+ if(!core)
+ return
+ add_lightning_overlay(30 SECONDS)
+ playsound(organ_owner, 'sound/items/eshield_recharge.ogg', 40)
+ organ_owner.AddElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS)
+ organ_owner.apply_status_effect(/datum/status_effect/stabilized/yellow, src)
+ RegisterSignal(organ_owner, SIGNAL_ADDTRAIT(TRAIT_CRITICAL_CONDITION), PROC_REF(activate_survival))
+ RegisterSignal(organ_owner, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act))
+
+/obj/item/organ/internal/heart/cybernetic/anomalock/on_mob_remove(mob/living/carbon/organ_owner, special)
+ . = ..()
+ if(!core)
+ return
+ UnregisterSignal(organ_owner, SIGNAL_ADDTRAIT(TRAIT_CRITICAL_CONDITION))
+ organ_owner.RemoveElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS)
+ organ_owner.remove_status_effect(/datum/status_effect/stabilized/yellow)
+ tesla_zap(source = organ_owner, zap_range = 20, power = 2.5e5, cutoff = 1e3)
+ qdel(src)
+
+/obj/item/organ/internal/heart/cybernetic/anomalock/attack(mob/living/target_mob, mob/living/user, params)
+ if(target_mob != user || !istype(target_mob) || !core)
+ return ..()
+
+ if(DOING_INTERACTION(user, DOAFTER_IMPLANTING_HEART))
+ return
+ user.balloon_alert(user, "this will hurt...")
+ to_chat(user, span_userdanger("Black cyberveins tear your skin apart, pulling the heart into your ribcage. This feels unwise.."))
+ if(!do_after(user, 5 SECONDS, interaction_key = DOAFTER_IMPLANTING_HEART))
+ return ..()
+ playsound(target_mob, 'sound/weapons/slice.ogg', 100, TRUE)
+ user.temporarilyRemoveItemFromInventory(src, TRUE)
+ Insert(user)
+ user.apply_damage(100, BRUTE, BODY_ZONE_CHEST)
+ user.emote("scream")
+ return TRUE
+
+/obj/item/organ/internal/heart/cybernetic/anomalock/proc/on_emp_act(severity)
+ SIGNAL_HANDLER
+ add_lightning_overlay(10 SECONDS)
+
+/obj/item/organ/internal/heart/cybernetic/anomalock/proc/add_lightning_overlay(time_to_last = 10 SECONDS)
+ if(lightning_overlay)
+ lightning_timer = addtimer(CALLBACK(src, PROC_REF(clear_lightning_overlay)), time_to_last, (TIMER_UNIQUE|TIMER_OVERRIDE))
+ return
+ lightning_overlay = mutable_appearance(icon = 'icons/effects/effects.dmi', icon_state = "lightning")
+ owner.add_overlay(lightning_overlay)
+ lightning_timer = addtimer(CALLBACK(src, PROC_REF(clear_lightning_overlay)), time_to_last, (TIMER_UNIQUE|TIMER_OVERRIDE))
+
+/obj/item/organ/internal/heart/cybernetic/anomalock/proc/clear_lightning_overlay()
+ owner.cut_overlay(lightning_overlay)
+ lightning_overlay = null
+
+/obj/item/organ/internal/heart/cybernetic/anomalock/attack_self(mob/user, modifiers)
+ . = ..()
+ if(.)
+ return
+
+ if(core)
+ return attack(user, user, modifiers)
+
+/obj/item/organ/internal/heart/cybernetic/anomalock/on_life(seconds_per_tick, times_fired)
+ . = ..()
+ if(owner.blood_volume <= BLOOD_VOLUME_NORMAL)
+ owner.blood_volume += 5 * seconds_per_tick
+ if(owner.health <= owner.crit_threshold)
+ activate_survival(owner)
+
+///Does a few things to try to help you live whatever you may be going through
+/obj/item/organ/internal/heart/cybernetic/anomalock/proc/activate_survival(mob/living/carbon/organ_owner)
+ if(!COOLDOWN_FINISHED(src, survival_cooldown))
+ return
+
+ organ_owner.apply_status_effect(/datum/status_effect/voltaic_overdrive)
+ add_lightning_overlay(30 SECONDS)
+ COOLDOWN_START(src, survival_cooldown, survival_cooldown_time)
+ addtimer(CALLBACK(src, PROC_REF(notify_cooldown), organ_owner), COOLDOWN_TIMELEFT(src, survival_cooldown))
+
+///Alerts our owner that the organ is ready to do its thing again
+/obj/item/organ/internal/heart/cybernetic/anomalock/proc/notify_cooldown(mob/living/carbon/organ_owner)
+ balloon_alert(organ_owner, "your heart strenghtens")
+ playsound(organ_owner, 'sound/items/eshield_recharge.ogg', 40)
+
+///Returns the mob we are implanted in so that the electricity effect doesn't runtime
+/obj/item/organ/internal/heart/cybernetic/anomalock/proc/get_held_mob()
+ return owner
+
+/obj/item/organ/internal/heart/cybernetic/anomalock/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ if(!istype(tool, required_anomaly))
+ return NONE
+ if(core)
+ balloon_alert(user, "core already in!")
+ return ITEM_INTERACT_BLOCKING
+ if(!user.transferItemToLoc(tool, src))
+ return ITEM_INTERACT_BLOCKING
+ core = tool
+ balloon_alert(user, "core installed")
+ playsound(src, 'sound/machines/click.ogg', 30, TRUE)
+ add_organ_trait(TRAIT_SHOCKIMMUNE)
+ update_icon_state()
+ return ITEM_INTERACT_SUCCESS
+
+/obj/item/organ/internal/heart/cybernetic/anomalock/screwdriver_act(mob/living/user, obj/item/tool)
+ . = ..()
+ if(!core)
+ balloon_alert(user, "no core!")
+ return
+ if(!core_removable)
+ balloon_alert(user, "can't remove core!")
+ return
+ balloon_alert(user, "removing core...")
+ if(!do_after(user, 3 SECONDS, target = src))
+ balloon_alert(user, "interrupted!")
+ return
+ balloon_alert(user, "core removed")
+ core.forceMove(drop_location())
+ if(Adjacent(user) && !issilicon(user))
+ user.put_in_hands(core)
+ core = null
+ remove_organ_trait(TRAIT_SHOCKIMMUNE)
+ update_icon_state()
+
+/obj/item/organ/internal/heart/cybernetic/anomalock/update_icon_state()
+ . = ..()
+ icon_state = initial(icon_state) + (core ? "-core" : "")
+
+/obj/item/organ/internal/heart/cybernetic/anomalock/prebuilt/Initialize(mapload)
+ . = ..()
+ core = new /obj/item/assembly/signaler/anomaly/flux(src)
+ update_icon_state()
+
+/datum/status_effect/voltaic_overdrive
+ id = "voltaic_overdrive"
+ duration = 30 SECONDS
+ alert_type = /atom/movable/screen/alert/status_effect/anomalock_active
+ show_duration = TRUE
+
+/datum/status_effect/voltaic_overdrive/tick(seconds_between_ticks)
+ . = ..()
+
+ if(owner.health <= owner.crit_threshold)
+ owner.heal_overall_damage(5, 5)
+ owner.adjustOxyLoss(-5)
+ owner.adjustToxLoss(-5)
+
+/datum/status_effect/voltaic_overdrive/on_apply()
+ . = ..()
+ owner.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown)
+ REMOVE_TRAIT(src, TRAIT_CRITICAL_CONDITION, STAT_TRAIT)
+ owner.reagents.add_reagent(/datum/reagent/medicine/coagulant, 5)
+ owner.add_filter("emp_shield", 2, outline_filter(1, "#639BFF"))
+ to_chat(owner, span_revendanger("You feel a burst of energy! It's do or die!"))
+ if(iscarbon(owner))
+ var/mob/living/carbon/carbon_owner = owner
+ carbon_owner.gain_trauma(/datum/brain_trauma/special/tenacity, TRAUMA_RESILIENCE_ABSOLUTE)
+
+/datum/status_effect/voltaic_overdrive/on_remove()
+ . = ..()
+ owner.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown)
+ owner.remove_filter("emp_shield")
+ owner.balloon_alert(owner, "your heart weakens")
+ if(iscarbon(owner))
+ var/mob/living/carbon/carbon_owner = owner
+ carbon_owner.cure_trauma_type(/datum/brain_trauma/special/tenacity, TRAUMA_RESILIENCE_ABSOLUTE)
+
+
+/atom/movable/screen/alert/status_effect/anomalock_active
+ name = "voltaic overdrive"
+ icon_state = "anomalock_heart"
+ desc = "Voltaic energy is flooding your muscles, keeping your body upright. You have 30 seconds before it falters!"
+
+#undef DOAFTER_IMPLANTING_HEART
diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm
index 25db3cdabfb10..b3427db9291ba 100644
--- a/code/modules/surgery/organs/internal/lungs/_lungs.dm
+++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm
@@ -540,6 +540,10 @@
// Breath in nitrium. It's helpful, but has nasty side effects
/obj/item/organ/internal/lungs/proc/too_much_nitrium(mob/living/carbon/breather, datum/gas_mixture/breath, nitrium_pp, old_nitrium_pp)
breathe_gas_volume(breath, /datum/gas/nitrium)
+
+ if(prob(20))
+ breather.emote("burp")
+
// Random chance to inflict side effects increases with pressure.
if((prob(nitrium_pp) && (nitrium_pp > 15)))
// Nitrium side-effect.
diff --git a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm
index 2675f46d13d6e..887df31e3fff8 100644
--- a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm
+++ b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm
@@ -4,13 +4,13 @@
desc = "A crystal-like organ that stores the electric charge of ethereals."
organ_traits = list(TRAIT_NOHUNGER) // We have our own hunger mechanic.
/// Where the energy of the stomach is stored.
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
///used to keep ethereals from spam draining power sources
var/drain_time = 0
/obj/item/organ/internal/stomach/ethereal/Initialize(mapload)
. = ..()
- cell = new /obj/item/stock_parts/cell/ethereal(null)
+ cell = new /obj/item/stock_parts/power_store/cell/ethereal(null)
/obj/item/organ/internal/stomach/ethereal/Destroy()
QDEL_NULL(cell)
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index a555548e43268..17444590cf2ef 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -124,6 +124,10 @@
if(isnull(step))
return FALSE
var/obj/item/tool = user.get_active_held_item()
+ if(istype(tool, /obj/item/borg/cyborg_omnitool)) //catches borg surgeries
+ var/obj/item/borg/cyborg_omnitool/toolarm = tool
+ if(toolarm.selected)
+ tool = toolarm.selected
if(step.try_op(user, target, user.zone_selected, tool, src, try_to_fail))
return TRUE
if(tool && tool.item_flags & SURGICAL_TOOL) //Just because you used the wrong tool it doesn't mean you meant to whack the patient with it
diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm
index be4bdb6db5d24..6c3ee9c014713 100644
--- a/code/modules/surgery/tools.dm
+++ b/code/modules/surgery/tools.dm
@@ -22,6 +22,9 @@
desc = "Micro-mechanical manipulator for retracting stuff."
toolspeed = 0.5
+/obj/item/retractor/cyborg
+ icon = 'icons/mob/silicon/robot_items.dmi'
+ icon_state = "toolkit_medborg_retractor"
/obj/item/hemostat
name = "hemostat"
@@ -49,6 +52,9 @@
desc = "Tiny servos power a pair of pincers to stop bleeding."
toolspeed = 0.5
+/obj/item/hemostat/cyborg
+ icon = 'icons/mob/silicon/robot_items.dmi'
+ icon_state = "toolkit_medborg_hemostat"
/obj/item/cautery
name = "cautery"
@@ -80,6 +86,10 @@
desc = "A heated element that cauterizes wounds."
toolspeed = 0.5
+/obj/item/cautery/cyborg
+ icon = 'icons/mob/silicon/robot_items.dmi'
+ icon_state = "toolkit_medborg_cautery"
+
/obj/item/cautery/advanced
name = "searing tool"
desc = "It projects a high power laser used for medical applications."
@@ -175,6 +185,10 @@
playsound(user, 'sound/machines/juicer.ogg', 20, TRUE)
return MANUAL_SUICIDE
+/obj/item/surgicaldrill/cyborg
+ icon = 'icons/mob/silicon/robot_items.dmi'
+ icon_state = "toolkit_medborg_drill"
+
/obj/item/surgicaldrill/augment
desc = "Effectively a small power drill contained within your arm. May or may not pierce the heavens."
hitsound = 'sound/weapons/circsawhit.ogg'
@@ -225,6 +239,10 @@
user.visible_message(span_suicide("[user] is slitting [user.p_their()] [pick("wrists", "throat", "stomach")] with [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return BRUTELOSS
+/obj/item/scalpel/cyborg
+ icon = 'icons/mob/silicon/robot_items.dmi'
+ icon_state = "toolkit_medborg_scalpel"
+
/obj/item/scalpel/augment
desc = "Ultra-sharp blade attached directly to your bone for extra-accuracy."
toolspeed = 0.5
@@ -276,6 +294,10 @@
/obj/item/circular_saw/get_surgery_tool_overlay(tray_extended)
return surgical_tray_overlay
+/obj/item/circular_saw/cyborg
+ icon = 'icons/mob/silicon/robot_items.dmi'
+ icon_state = "toolkit_medborg_saw"
+
/obj/item/circular_saw/augment
desc = "A small but very fast spinning saw. It rips and tears until it is done."
w_class = WEIGHT_CLASS_SMALL
@@ -299,6 +321,10 @@
. = ..()
AddComponent(/datum/component/surgery_initiator)
+/obj/item/surgical_drapes/cyborg
+ icon = 'icons/mob/silicon/robot_items.dmi'
+ icon_state = "toolkit_medborg_surgicaldrapes"
+
/obj/item/surgical_processor //allows medical cyborgs to scan and initiate advanced surgeries
name = "surgical processor"
desc = "A device for scanning and initiating surgeries from a disk or operating computer."
@@ -580,6 +606,10 @@
/obj/item/bonesetter/get_surgery_tool_overlay(tray_extended)
return "bonesetter" + (tray_extended ? "" : "_out")
+/obj/item/bonesetter/cyborg
+ icon = 'icons/mob/silicon/robot_items.dmi'
+ icon_state = "toolkit_medborg_bonesetter"
+
/obj/item/blood_filter
name = "blood filter"
desc = "For filtering the blood."
diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm
index 3fc6db542196e..593b949e2b22f 100644
--- a/code/modules/unit_tests/_unit_tests.dm
+++ b/code/modules/unit_tests/_unit_tests.dm
@@ -127,6 +127,7 @@
#include "container_sanity.dm"
#include "crayons.dm"
#include "create_and_destroy.dm"
+#include "cyborg_tool.dm"
#include "dcs_check_list_arguments.dm"
#include "dcs_get_id_from_elements.dm"
#include "designs.dm"
@@ -255,6 +256,7 @@
#include "spell_mindswap.dm"
#include "spell_names.dm"
#include "spell_shapeshift.dm"
+#include "spell_timestop.dm"
#include "spies.dm"
#include "spritesheets.dm"
#include "stack_singular_name.dm"
diff --git a/code/modules/unit_tests/changeling.dm b/code/modules/unit_tests/changeling.dm
index 9749d760ea91c..7f86510fd62d1 100644
--- a/code/modules/unit_tests/changeling.dm
+++ b/code/modules/unit_tests/changeling.dm
@@ -80,7 +80,7 @@
ling.dna.features["horns"] = "Curled"
ling.dna.features["frills"] = "Short"
ling.dna.features["spines"] = "Long + Membrane"
- ling.dna.features["body_markings"] = "Light Belly"
+ ling.dna.features["lizard_markings"] = "Light Belly"
ling.dna.features["legs"] = DIGITIGRADE_LEGS
ling.eye_color_left = COLOR_WHITE
ling.eye_color_right = COLOR_WHITE
diff --git a/code/modules/unit_tests/cyborg_tool.dm b/code/modules/unit_tests/cyborg_tool.dm
new file mode 100644
index 0000000000000..711f0948aee0f
--- /dev/null
+++ b/code/modules/unit_tests/cyborg_tool.dm
@@ -0,0 +1,20 @@
+/// Regression test for the cyborg omnitool to ensure it goes through proper channels
+/datum/unit_test/cyborg_tool
+ var/times_wrenched = 0
+
+/datum/unit_test/cyborg_tool/Run()
+ var/mob/living/carbon/human/consistent/not_a_borg = allocate(__IMPLIED_TYPE__)
+ var/obj/item/borg/cyborg_omnitool/engineering/tool = allocate(__IMPLIED_TYPE__)
+ tool.selected = allocate(/obj/item/wrench/cyborg)
+
+ not_a_borg.put_in_active_hand(tool)
+
+ var/obj/structure/frame/machine/frame = allocate(__IMPLIED_TYPE__)
+ RegisterSignal(frame, COMSIG_ATOM_TOOL_ACT(TOOL_WRENCH), PROC_REF(wrenched))
+
+ not_a_borg.ClickOn(frame)
+ TEST_ASSERT_EQUAL(times_wrenched, 1, "Wrenching the frame with a cyborg omnitool should have triggered the wrenched signal")
+
+/datum/unit_test/cyborg_tool/proc/wrenched(...)
+ SIGNAL_HANDLER
+ times_wrenched += 1
diff --git a/code/modules/unit_tests/outfit_sanity.dm b/code/modules/unit_tests/outfit_sanity.dm
index 18f5e9b8e6141..36fc4570540f4 100644
--- a/code/modules/unit_tests/outfit_sanity.dm
+++ b/code/modules/unit_tests/outfit_sanity.dm
@@ -16,7 +16,7 @@
uniform = /obj/item/clothing/under/suit/tuxedo
glasses = /obj/item/clothing/glasses/sunglasses
- mask = /obj/item/clothing/mask/cigarette/cigar/havana
+ mask = /obj/item/cigarette/cigar/havana
shoes = /obj/item/clothing/shoes/laceup
l_hand = /obj/item/stack/spacecash/c1000
r_hand = /obj/item/stack/spacecash/c1000
@@ -25,19 +25,19 @@
/datum/outfit/duffel_user
name = "Mr. Runtime"
back = /obj/item/storage/backpack/duffelbag
- backpack_contents = list(/obj/item/clothing/mask/cigarette/cigar/havana)
+ backpack_contents = list(/obj/item/cigarette/cigar/havana)
/// Satchels too
/datum/outfit/stachel_user
name = "Mr. Runtime"
back = /obj/item/storage/backpack/satchel
- backpack_contents = list(/obj/item/clothing/mask/cigarette/cigar/havana)
+ backpack_contents = list(/obj/item/cigarette/cigar/havana)
/// And just in case we'll check backpacks
/datum/outfit/backpack_user
name = "Mr. Runtime"
back = /obj/item/storage/backpack
- backpack_contents = list(/obj/item/clothing/mask/cigarette/cigar/havana)
+ backpack_contents = list(/obj/item/cigarette/cigar/havana)
/datum/unit_test/outfit_sanity/Run()
var/datum/outfit/prototype_outfit = /datum/outfit
@@ -49,7 +49,7 @@
for (var/outfit_type in outfits_to_check)
// Only make one human and keep undressing it because it's much faster
- for (var/obj/item/I in H.get_equipped_items(include_pockets = TRUE))
+ for (var/obj/item/I in H.get_equipped_items(INCLUDE_POCKETS))
qdel(I)
var/datum/outfit/outfit = new outfit_type
diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm
index 7db63d6b48df6..2f4f7a4b70ae7 100644
--- a/code/modules/unit_tests/simple_animal_freeze.dm
+++ b/code/modules/unit_tests/simple_animal_freeze.dm
@@ -6,7 +6,6 @@
// If you are refactoring a simple_animal, REMOVE it from this list
var/list/allowed_types = list(
/mob/living/simple_animal/bot,
- /mob/living/simple_animal/bot/firebot,
/mob/living/simple_animal/bot/floorbot,
/mob/living/simple_animal/bot/mulebot,
/mob/living/simple_animal/bot/mulebot/paranormal,
@@ -21,7 +20,6 @@
/mob/living/simple_animal/bot/secbot/grievous,
/mob/living/simple_animal/bot/secbot/grievous/toy,
/mob/living/simple_animal/bot/secbot/pingsky,
- /mob/living/simple_animal/bot/vibebot,
/mob/living/simple_animal/hostile,
/mob/living/simple_animal/hostile/asteroid,
/mob/living/simple_animal/hostile/asteroid/curseblob,
@@ -59,6 +57,7 @@
/mob/living/simple_animal/hostile/megafauna/legion/medium/right,
/mob/living/simple_animal/hostile/megafauna/legion/small,
/mob/living/simple_animal/hostile/megafauna/wendigo,
+ /mob/living/simple_animal/hostile/megafauna/wendigo/noportal,
/mob/living/simple_animal/hostile/mimic,
/mob/living/simple_animal/hostile/mimic/copy,
/mob/living/simple_animal/hostile/mimic/copy/machine,
diff --git a/code/modules/unit_tests/spell_timestop.dm b/code/modules/unit_tests/spell_timestop.dm
new file mode 100644
index 0000000000000..f02900f7f8e77
--- /dev/null
+++ b/code/modules/unit_tests/spell_timestop.dm
@@ -0,0 +1,30 @@
+/// Regression test for timestop being a 3x3 instead of a 5x5
+/datum/unit_test/timestop
+
+/datum/unit_test/timestop/Run()
+ var/mob/living/carbon/human/dio = allocate(/mob/living/carbon/human/consistent)
+ var/mob/living/carbon/human/kakyoin = allocate(/mob/living/carbon/human/consistent)
+ var/mob/living/carbon/human/jotaro = allocate(/mob/living/carbon/human/consistent)
+
+ var/turf/center = run_loc_floor_bottom_left
+ var/turf/in_range = locate(center.x + 2, center.y + 2, center.z)
+ var/turf/out_of_range = locate(in_range.x + 1, in_range.y + 1, in_range.z)
+
+ dio.forceMove(center)
+ kakyoin.forceMove(in_range)
+ jotaro.forceMove(out_of_range)
+
+ var/datum/action/cooldown/spell/timestop/timestop = new(dio)
+ timestop.spell_requirements = NONE
+ timestop.Grant(dio)
+ timestop.Trigger()
+ var/obj/effect/timestop/time_effect = locate() in center
+ TEST_ASSERT(time_effect, "Failed to create timestop effect")
+ sleep(0.1 SECONDS) // timestop is invoked async so let's just wait
+
+ TEST_ASSERT(!dio.IsStun(), "Timestopper should not have frozen themselves when using timestop")
+ TEST_ASSERT(kakyoin.IsStun(), "Timestopper should have frozen the target within 2 tiles of range when using timestop")
+ TEST_ASSERT(!jotaro.IsStun(), "Timestopper should not have frozen the target outside of 2 tiles of range when using timestop")
+
+ // cleanup
+ qdel(time_effect)
diff --git a/code/modules/uplink/uplink_items/job.dm b/code/modules/uplink/uplink_items/job.dm
index 40e0092d434dc..98378a9422a03 100644
--- a/code/modules/uplink/uplink_items/job.dm
+++ b/code/modules/uplink/uplink_items/job.dm
@@ -18,7 +18,7 @@
/datum/uplink_item/role_restricted/mail_counterfeit_kit
name = "GLA Brand Mail Counterfeit Kit"
- desc = "A box full of mail counterfeit devices. Devices that actually able to counterfeit NT's mail. Those devices also able to place a trap inside of mail for malicious actions. Trap will \"activate\" any item inside of mail. Also counterfieted mail might be used for contraband purposes. Integrated micro-computer will give you great configuration optionality for your needs. \nNothing stops the mail."
+ desc = "A box of five (5) counterfeit devices. Each single-use device can hold one normal sized object, and impersonate an ordinary postal envelope addressed to whoever you choose. Optionally, can be rigged to activate held items - great for if you want to surprise someone with a primed grenade!"
item = /obj/item/storage/box/syndie_kit/mail_counterfeit
cost = 2
illegal_tech = FALSE
diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm
index 1155e6293d252..f36beee83cd77 100644
--- a/code/modules/vehicles/mecha/_mecha.dm
+++ b/code/modules/vehicles/mecha/_mecha.dm
@@ -46,7 +46,7 @@
///if we cant use our equipment(such as due to EMP)
var/equipment_disabled = FALSE
/// Keeps track of the mech's cell
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
/// Keeps track of the mech's scanning module
var/obj/item/stock_parts/scanning_module/scanmod
/// Keeps track of the mech's capacitor
@@ -305,7 +305,7 @@
///Add parts on mech spawning. Skipped in manual construction.
/obj/vehicle/sealed/mecha/proc/populate_parts()
- cell = new /obj/item/stock_parts/cell/high(src)
+ cell = new /obj/item/stock_parts/power_store/cell/high(src)
scanmod = new /obj/item/stock_parts/scanning_module(src)
capacitor = new /obj/item/stock_parts/capacitor(src)
servo = new /obj/item/stock_parts/servo(src)
@@ -313,7 +313,7 @@
/obj/vehicle/sealed/mecha/CheckParts(list/parts_list)
. = ..()
- cell = locate(/obj/item/stock_parts/cell) in contents
+ cell = locate(/obj/item/stock_parts/power_store) in contents
diag_hud_set_mechcell()
scanmod = locate(/obj/item/stock_parts/scanning_module) in contents
capacitor = locate(/obj/item/stock_parts/capacitor) in contents
diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm
index b44478582c031..c6fcae75bc98f 100644
--- a/code/modules/vehicles/mecha/combat/durand.dm
+++ b/code/modules/vehicles/mecha/combat/durand.dm
@@ -271,7 +271,9 @@ own integrity back to max. Shield is automatically dropped if we run out of powe
return
. = ..()
flick("shield_impact", src)
- if(!chassis.use_energy((max_integrity - atom_integrity) * 0.1 * STANDARD_CELL_CHARGE))
+ if(!.)
+ return
+ if(!chassis.use_energy(. * (STANDARD_CELL_CHARGE / 15)))
chassis.cell?.charge = 0
for(var/O in chassis.occupants)
var/mob/living/occupant = O
diff --git a/code/modules/vehicles/mecha/combat/gygax.dm b/code/modules/vehicles/mecha/combat/gygax.dm
index 0284f10d23d43..0acb746c52d4a 100644
--- a/code/modules/vehicles/mecha/combat/gygax.dm
+++ b/code/modules/vehicles/mecha/combat/gygax.dm
@@ -78,7 +78,7 @@
max_ammo()
/obj/vehicle/sealed/mecha/gygax/dark/loaded/populate_parts()
- cell = new /obj/item/stock_parts/cell/bluespace(src)
+ cell = new /obj/item/stock_parts/power_store/cell/bluespace(src)
scanmod = new /obj/item/stock_parts/scanning_module/triphasic(src)
capacitor = new /obj/item/stock_parts/capacitor/quadratic(src)
servo = new /obj/item/stock_parts/servo/femto(src)
diff --git a/code/modules/vehicles/mecha/combat/honker.dm b/code/modules/vehicles/mecha/combat/honker.dm
index a7c9f018d2869..83934244638aa 100644
--- a/code/modules/vehicles/mecha/combat/honker.dm
+++ b/code/modules/vehicles/mecha/combat/honker.dm
@@ -75,7 +75,7 @@
acid = 100
/obj/vehicle/sealed/mecha/honker/dark/loaded/populate_parts()
- cell = new /obj/item/stock_parts/cell/hyper(src)
+ cell = new /obj/item/stock_parts/power_store/cell/hyper(src)
scanmod = new /obj/item/stock_parts/scanning_module/phasic(src)
capacitor = new /obj/item/stock_parts/capacitor/super(src)
servo = new /obj/item/stock_parts/servo/pico(src)
diff --git a/code/modules/vehicles/mecha/combat/marauder.dm b/code/modules/vehicles/mecha/combat/marauder.dm
index 3cc73214fcac1..48e2d60cbd68e 100644
--- a/code/modules/vehicles/mecha/combat/marauder.dm
+++ b/code/modules/vehicles/mecha/combat/marauder.dm
@@ -48,7 +48,7 @@
)
/obj/vehicle/sealed/mecha/marauder/loaded/populate_parts()
- cell = new /obj/item/stock_parts/cell/bluespace(src)
+ cell = new /obj/item/stock_parts/power_store/cell/bluespace(src)
scanmod = new /obj/item/stock_parts/scanning_module/triphasic(src)
capacitor = new /obj/item/stock_parts/capacitor/quadratic(src)
servo = new /obj/item/stock_parts/servo/femto(src)
@@ -169,7 +169,7 @@
max_ammo()
/obj/vehicle/sealed/mecha/marauder/mauler/loaded/populate_parts()
- cell = new /obj/item/stock_parts/cell/bluespace(src)
+ cell = new /obj/item/stock_parts/power_store/cell/bluespace(src)
scanmod = new /obj/item/stock_parts/scanning_module/triphasic(src)
capacitor = new /obj/item/stock_parts/capacitor/quadratic(src)
servo = new /obj/item/stock_parts/servo/femto(src)
diff --git a/code/modules/vehicles/mecha/combat/reticence.dm b/code/modules/vehicles/mecha/combat/reticence.dm
index 5dcc5f34e912b..0860fbc407fbc 100644
--- a/code/modules/vehicles/mecha/combat/reticence.dm
+++ b/code/modules/vehicles/mecha/combat/reticence.dm
@@ -42,7 +42,7 @@
)
/obj/vehicle/sealed/mecha/reticence/loaded/populate_parts()
- cell = new /obj/item/stock_parts/cell/bluespace(src)
+ cell = new /obj/item/stock_parts/power_store/cell/bluespace(src)
scanmod = new /obj/item/stock_parts/scanning_module/phasic(src)
capacitor = new /obj/item/stock_parts/capacitor/super(src)
servo = new /obj/item/stock_parts/servo/pico(src)
diff --git a/code/modules/vehicles/mecha/mech_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm
index 47c116cbc6029..33edb9e47c777 100644
--- a/code/modules/vehicles/mecha/mech_fabricator.dm
+++ b/code/modules/vehicles/mecha/mech_fabricator.dm
@@ -49,12 +49,20 @@
/// All designs in the techweb that can be fabricated by this machine, since the last update.
var/list/datum/design/cached_designs
+ //looping sound for printing items
+ var/datum/looping_sound/lathe_print/print_sound
+
/obj/machinery/mecha_part_fabricator/Initialize(mapload)
+ print_sound = new(src, FALSE)
rmat = AddComponent(/datum/component/remote_materials, mapload && link_on_init)
cached_designs = list()
RefreshParts() //Recalculating local material sizes if the fab isn't linked
return ..()
+/obj/machinery/mecha_part_fabricator/Destroy()
+ QDEL_NULL(print_sound)
+ return ..()
+
/obj/machinery/mecha_part_fabricator/post_machine_initialize()
. = ..()
if(!CONFIG_GET(flag/no_default_techweb_link) && !stored_research)
@@ -163,7 +171,7 @@
/obj/machinery/mecha_part_fabricator/proc/on_start_printing()
add_overlay("fab-active")
update_use_power(ACTIVE_POWER_USE)
-
+ print_sound.start()
/**
* Intended to be called when the exofab has stopped working and is no longer printing items.
*
@@ -174,6 +182,7 @@
update_use_power(IDLE_POWER_USE)
desc = initial(desc)
process_queue = FALSE
+ print_sound.stop()
/**
* Attempts to build the next item in the build queue.
diff --git a/code/modules/vehicles/mecha/mecha_construction_paths.dm b/code/modules/vehicles/mecha/mecha_construction_paths.dm
index e77b1eebacfab..f4b1a679596b9 100644
--- a/code/modules/vehicles/mecha/mecha_construction_paths.dm
+++ b/code/modules/vehicles/mecha/mecha_construction_paths.dm
@@ -209,7 +209,7 @@
"backward_message" = "removed servo"
),
list(
- "key" = /obj/item/stock_parts/cell,
+ "key" = /obj/item/stock_parts/power_store/cell,
"action" = ITEM_MOVE_INSIDE,
"back_key" = TOOL_SCREWDRIVER,
"desc" = "Servo is secured, and the power cell can be added.",
@@ -542,7 +542,7 @@
"desc" = "HONK!!!!!!"
),
list(
- "key" = /obj/item/stock_parts/cell,
+ "key" = /obj/item/stock_parts/power_store/cell,
"action" = ITEM_MOVE_INSIDE,
"desc" = "Laughter cell can be added!",
"forward_message" = "added laughter"
@@ -715,7 +715,7 @@
"backward_message" = "disconnected bluespace crystal"
),
list(
- "key" = /obj/item/stock_parts/cell,
+ "key" = /obj/item/stock_parts/power_store/cell,
"action" = ITEM_MOVE_INSIDE,
"back_key" = TOOL_SCREWDRIVER,
"desc" = "The bluespace crystal is engaged, and the power cell can be added.",
diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm
index 426efaf1e6fee..912993d1ee640 100644
--- a/code/modules/vehicles/mecha/mecha_defense.dm
+++ b/code/modules/vehicles/mecha/mecha_defense.dm
@@ -261,7 +261,7 @@
balloon_alert(user, "open the panel first!")
return
- if(istype(weapon, /obj/item/stock_parts/cell))
+ if(istype(weapon, /obj/item/stock_parts/power_store/cell))
if(!cell)
if(!user.transferItemToLoc(weapon, src, silent = FALSE))
return
diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm
index be9dc0d69c337..754a6b820d721 100644
--- a/code/modules/vehicles/mecha/working/ripley.dm
+++ b/code/modules/vehicles/mecha/working/ripley.dm
@@ -281,7 +281,7 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/ripley/cargo)
return ..()
/obj/vehicle/sealed/mecha/ripley/cargo/populate_parts()
- cell = new /obj/item/stock_parts/cell/high(src)
+ cell = new /obj/item/stock_parts/power_store/cell/high(src)
//No scanmod for Big Bess
capacitor = new /obj/item/stock_parts/capacitor(src)
servo = new /obj/item/stock_parts/servo(src)
diff --git a/code/modules/vehicles/motorized_wheelchair.dm b/code/modules/vehicles/motorized_wheelchair.dm
index 8dbdfd93e8f69..cecf6b815e249 100644
--- a/code/modules/vehicles/motorized_wheelchair.dm
+++ b/code/modules/vehicles/motorized_wheelchair.dm
@@ -20,7 +20,7 @@
/datum/stock_part/capacitor,
)
///power cell we draw power from
- var/obj/item/stock_parts/cell/power_cell
+ var/obj/item/stock_parts/power_store/power_cell
///stock parts for this chair
var/list/component_parts = list()
@@ -34,7 +34,7 @@
component_parts += GLOB.stock_part_datums[/datum/stock_part/capacitor]
component_parts += GLOB.stock_part_datums[/datum/stock_part/servo]
component_parts += GLOB.stock_part_datums[/datum/stock_part/servo]
- power_cell = new /obj/item/stock_parts/cell(src)
+ power_cell = new /obj/item/stock_parts/power_store/cell(src)
/obj/vehicle/ridden/wheelchair/motorized/make_ridable()
AddElement(/datum/element/ridable, /datum/component/riding/vehicle/wheelchair/motorized)
@@ -45,7 +45,7 @@
component_parts = list()
for(var/obj/item/stock_parts/part in parts_list)
- if(istype(part, /obj/item/stock_parts/cell)) // power cell, physically moves into the wheelchair
+ if(istype(part, /obj/item/stock_parts/power_store/cell)) // power cell, physically moves into the wheelchair
power_cell = part
part.forceMove(src)
continue
@@ -109,7 +109,7 @@
if(!panel_open)
return ..()
- if(istype(attacking_item, /obj/item/stock_parts/cell))
+ if(istype(attacking_item, /obj/item/stock_parts/power_store/cell))
if(power_cell)
to_chat(user, span_warning("There is a power cell already installed."))
else
@@ -232,4 +232,4 @@
component_parts += GLOB.stock_part_datums[/datum/stock_part/capacitor]
component_parts += GLOB.stock_part_datums[/datum/stock_part/servo/tier2]
component_parts += GLOB.stock_part_datums[/datum/stock_part/servo]
- power_cell = new /obj/item/stock_parts/cell/upgraded/plus(src)
+ power_cell = new /obj/item/stock_parts/power_store/cell/upgraded/plus(src)
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index 76d193c80e87f..9ca0d41d85367 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -271,7 +271,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock)
*/
var/max_amount = rand(CEILING(product_record.amount * 0.5, 1), product_record.amount)
product_record.amount = rand(0, max_amount)
- credits_contained += rand(0, 1) //randomly add a few credits to the machine to make it look like it's been used, proportional to the amount missing.
+ credits_contained += rand(1, 5) //randomly add a few credits to the machine to make it look like it's been used, proportional to the amount missing.
if(tiltable && prob(6)) // 1 in 17 chance to start tilted (as an additional hint to the station trait behind it)
INVOKE_ASYNC(src, PROC_REF(tilt), loc)
credits_contained = 0 // If it's tilted, it's been looted, so no credits for you.
@@ -1652,6 +1652,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock)
return
var/credits_to_remove = min(CREDITS_DUMP_THRESHOLD, round(credits_contained))
var/obj/item/holochip/holochip = new(loc, credits_to_remove)
+ playsound(src, 'sound/effects/cashregister.ogg', 40, TRUE)
credits_contained = max(0, credits_contained - credits_to_remove)
SSblackbox.record_feedback("amount", "vending machine looted", holochip.credits)
@@ -1777,7 +1778,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock)
speak("\The [src] has been linked to [card_used].")
if(compartmentLoadAccessCheck(user))
- if(istype(attack_item, /obj/item/pen))
+ if(IS_WRITING_UTENSIL(attack_item))
name = tgui_input_text(user, "Set name", "Name", name, 20)
desc = tgui_input_text(user, "Set description", "Description", desc, 60)
slogan_list += tgui_input_text(user, "Set slogan", "Slogan", "Epic", 60)
diff --git a/code/modules/vending/assist.dm b/code/modules/vending/assist.dm
index a043a365046e2..c1cffea115fd8 100644
--- a/code/modules/vending/assist.dm
+++ b/code/modules/vending/assist.dm
@@ -20,7 +20,8 @@
/obj/item/assembly/health = 2,
/obj/item/assembly/timer = 2,
/obj/item/assembly/voice = 2,
- /obj/item/stock_parts/cell/high = 1,
+ /obj/item/stock_parts/power_store/cell/high = 1,
+ /obj/item/stock_parts/power_store/battery/high = 1,
/obj/item/market_uplink/blackmarket = 1,
)
premium = list(
diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm
index ddcfd9bb244d9..61379e5635468 100644
--- a/code/modules/vending/cigarette.dm
+++ b/code/modules/vending/cigarette.dm
@@ -17,7 +17,7 @@
/obj/item/storage/fancy/rollingpapers = 5,
)
contraband = list(
- /obj/item/clothing/mask/vape = 5,
+ /obj/item/vape = 5,
)
premium = list(
/obj/item/storage/fancy/cigarettes/cigpack_robustgold = 3,
@@ -66,7 +66,7 @@
)
premium = list(
/obj/item/storage/fancy/cigarettes/cigpack_mindbreaker = 5,
- /obj/item/clothing/mask/vape = 5,
+ /obj/item/vape = 5,
/obj/item/lighter = 3,
)
initial_language_holder = /datum/language_holder/beachbum
diff --git a/code/modules/vending/engineering.dm b/code/modules/vending/engineering.dm
index 801a44e0f20df..48da7e27b1286 100644
--- a/code/modules/vending/engineering.dm
+++ b/code/modules/vending/engineering.dm
@@ -20,7 +20,8 @@
/obj/item/multitool = 12,
/obj/item/wrench = 12,
/obj/item/t_scanner = 12,
- /obj/item/stock_parts/cell = 8,
+ /obj/item/stock_parts/power_store/cell = 8,
+ /obj/item/stock_parts/power_store/battery = 8,
/obj/item/weldingtool = 8,
/obj/item/clothing/head/utility/welding = 8,
/obj/item/light/tube = 10,
diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm
index ce7e1bf12bdd6..1522d0047b098 100644
--- a/code/modules/vending/engivend.dm
+++ b/code/modules/vending/engivend.dm
@@ -11,7 +11,8 @@
/obj/item/multitool = 4,
/obj/item/grenade/chem_grenade/smart_metal_foam = 10,
/obj/item/geiger_counter = 5,
- /obj/item/stock_parts/cell/high = 10,
+ /obj/item/stock_parts/power_store/cell/high = 10,
+ /obj/item/stock_parts/power_store/battery/high = 10,
/obj/item/electronics/airlock = 10,
/obj/item/electronics/apc = 10,
/obj/item/electronics/airalarm = 10,
@@ -19,7 +20,7 @@
/obj/item/electronics/firelock = 10,
)
contraband = list(
- /obj/item/stock_parts/cell/potato = 3,
+ /obj/item/stock_parts/power_store/cell/potato = 3,
)
premium = list(
/obj/item/storage/belt/utility = 3,
diff --git a/code/modules/vending/robotics.dm b/code/modules/vending/robotics.dm
index 30bf8543d504c..8796e8d756192 100644
--- a/code/modules/vending/robotics.dm
+++ b/code/modules/vending/robotics.dm
@@ -12,7 +12,7 @@
/obj/item/clothing/under/rank/rnd/roboticist = 4,
/obj/item/stack/cable_coil = 4,
/obj/item/assembly/flash/handheld = 4,
- /obj/item/stock_parts/cell/high = 12,
+ /obj/item/stock_parts/power_store/cell/high = 12,
/obj/item/assembly/prox_sensor = 3,
/obj/item/assembly/signaler = 3,
/obj/item/healthanalyzer = 3,
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index 015c3d6f7e0cb..3f82a219e56c9 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -1,3 +1,7 @@
+GLOBAL_VAR_INIT(roaches_deployed, FALSE)
+#define MOTHROACH_START_CHANCE 5
+#define MAX_MOTHROACH_AMOUNT 3
+
/obj/item/vending_refill/wardrobe
icon_state = "refill_clothes"
@@ -8,6 +12,29 @@
panel_type = "panel19"
light_mask = "wardrobe-light-mask"
+/obj/machinery/vending/wardrobe/Initialize(mapload)
+ . = ..()
+ if(!mapload)
+ return
+ if(GLOB.roaches_deployed || !is_station_level(z) || !prob(MOTHROACH_START_CHANCE))
+ return
+ for(var/count in 1 to rand(1, MAX_MOTHROACH_AMOUNT))
+ new /mob/living/basic/mothroach(src)
+ GLOB.roaches_deployed = TRUE
+
+
+/obj/machinery/vending/wardrobe/on_dispense(obj/item/clothing/food)
+ if(!istype(food))
+ return
+ for(var/mob/living/basic/mothroach/roach in contents)
+ food.take_damage(food.get_integrity() * 0.5)
+
+/obj/machinery/vending/wardrobe/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
+ . = ..()
+ for(var/mob/living/basic/mothroach/roach in contents)
+ roach.ai_controller.set_blackboard_key(BB_BASIC_MOB_FLEE_TARGET, src) //scatter away!
+ roach.forceMove(drop_location())
+
/obj/machinery/vending/wardrobe/sec_wardrobe
name = "\improper SecDrobe"
desc = "A vending machine for security and security-related clothing!"
@@ -704,3 +731,6 @@
/obj/item/vending_refill/wardrobe/cent_wardrobe
machine_name = "CentDrobe"
light_color = LIGHT_COLOR_ELECTRIC_GREEN
+
+#undef MOTHROACH_START_CHANCE
+#undef MAX_MOTHROACH_AMOUNT
diff --git a/code/modules/wiremod/components/abstract/module.dm b/code/modules/wiremod/components/abstract/module.dm
index ad544354298b2..4dd144b4c80e3 100644
--- a/code/modules/wiremod/components/abstract/module.dm
+++ b/code/modules/wiremod/components/abstract/module.dm
@@ -190,7 +190,7 @@
))
return ..()
-/obj/item/circuit_component/module/proc/handle_set_cell(datum/source, obj/item/stock_parts/cell/cell)
+/obj/item/circuit_component/module/proc/handle_set_cell(datum/source, obj/item/stock_parts/power_store/cell/cell)
SIGNAL_HANDLER
internal_circuit.set_cell(cell)
diff --git a/code/modules/wiremod/components/atom/remotecam.dm b/code/modules/wiremod/components/atom/remotecam.dm
index 3d5afa2381cd9..d5a8506c5cf04 100644
--- a/code/modules/wiremod/components/atom/remotecam.dm
+++ b/code/modules/wiremod/components/atom/remotecam.dm
@@ -262,7 +262,7 @@
if (current_camera_emp)
close_camera()
return
- var/obj/item/stock_parts/cell/cell = parent.get_cell()
+ var/obj/item/stock_parts/power_store/cell = parent.get_cell()
//If cell doesn't exist, or we ran out of power
if(!cell?.use(current_camera_range > 0 ? REMOTECAM_ENERGY_USAGE_FAR : REMOTECAM_ENERGY_USAGE_NEAR))
close_camera()
@@ -393,7 +393,7 @@
if(!bci.owner || bci.owner.is_blind() || bci.owner.stat >= UNCONSCIOUS)
close_camera()
return
- var/obj/item/stock_parts/cell/cell = parent.get_cell()
+ var/obj/item/stock_parts/power_store/cell = parent.get_cell()
//If cell doesn't exist, or we ran out of power
if(!cell?.use(current_camera_range > 0 ? REMOTECAM_ENERGY_USAGE_FAR : REMOTECAM_ENERGY_USAGE_NEAR))
close_camera()
@@ -422,7 +422,7 @@
if(shell_parent.loc.atom_storage)
close_camera()
return
- var/obj/item/stock_parts/cell/cell = parent.get_cell()
+ var/obj/item/stock_parts/power_store/cell = parent.get_cell()
//If cell doesn't exist, or we ran out of power
if(!cell?.use(REMOTECAM_ENERGY_USAGE_NEAR))
close_camera()
diff --git a/code/modules/wiremod/core/component.dm b/code/modules/wiremod/core/component.dm
index 7f7bddaa5727a..ff0e64cd9a4dc 100644
--- a/code/modules/wiremod/core/component.dm
+++ b/code/modules/wiremod/core/component.dm
@@ -268,7 +268,7 @@
var/flags = SEND_SIGNAL(parent, COMSIG_CIRCUIT_PRE_POWER_USAGE, energy_usage_per_input)
if(!(flags & COMPONENT_OVERRIDE_POWER_USAGE))
- var/obj/item/stock_parts/cell/cell = parent.get_cell()
+ var/obj/item/stock_parts/power_store/cell = parent.get_cell()
if(!cell?.use(energy_usage_per_input))
return FALSE
diff --git a/code/modules/wiremod/core/integrated_circuit.dm b/code/modules/wiremod/core/integrated_circuit.dm
index 5a825b81482e8..f24c5dac6671e 100644
--- a/code/modules/wiremod/core/integrated_circuit.dm
+++ b/code/modules/wiremod/core/integrated_circuit.dm
@@ -24,7 +24,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit)
var/label_max_length = 24
/// The power of the integrated circuit
- var/obj/item/stock_parts/cell/cell
+ var/obj/item/stock_parts/power_store/cell
/// The shell that this circuitboard is attached to. Used by components.
var/atom/movable/shell
@@ -98,7 +98,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit)
/obj/item/integrated_circuit/loaded/Initialize(mapload)
. = ..()
- set_cell(new /obj/item/stock_parts/cell/high(src))
+ set_cell(new /obj/item/stock_parts/power_store/cell/high(src))
/obj/item/integrated_circuit/Destroy()
for(var/obj/item/circuit_component/to_delete in attached_components)
@@ -132,7 +132,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit)
* Arguments:
* * cell_to_set - The new cell of the circuit. Can be null.
**/
-/obj/item/integrated_circuit/proc/set_cell(obj/item/stock_parts/cell_to_set)
+/obj/item/integrated_circuit/proc/set_cell(obj/item/stock_parts/power_store/cell_to_set)
SEND_SIGNAL(src, COMSIG_CIRCUIT_SET_CELL, cell_to_set)
cell = cell_to_set
@@ -152,7 +152,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit)
add_component_manually(I, user)
return
- if(istype(I, /obj/item/stock_parts/cell))
+ if(istype(I, /obj/item/stock_parts/power_store/cell))
if(cell)
balloon_alert(user, "there already is a cell inside!")
return
diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm
index 3cd9a3d6bc08f..67a3a41a48828 100644
--- a/code/modules/wiremod/shell/brain_computer_interface.dm
+++ b/code/modules/wiremod/shell/brain_computer_interface.dm
@@ -256,7 +256,7 @@
return ..()
/datum/action/innate/bci_charge_action/Trigger(trigger_flags)
- var/obj/item/stock_parts/cell/cell = circuit_component.parent.cell
+ var/obj/item/stock_parts/power_store/cell/cell = circuit_component.parent.cell
if (isnull(cell))
to_chat(owner, span_boldwarning("[circuit_component.parent] has no power cell."))
@@ -269,7 +269,7 @@
/datum/action/innate/bci_charge_action/update_button_status(atom/movable/screen/movable/action_button/button, force = FALSE)
. = ..()
- var/obj/item/stock_parts/cell/cell = circuit_component.parent.cell
+ var/obj/item/stock_parts/power_store/cell/cell = circuit_component.parent.cell
button.maptext = cell ? MAPTEXT("[cell.percent()]%") : ""
/obj/machinery/bci_implanter
diff --git a/code/modules/wiremod/shell/controller.dm b/code/modules/wiremod/shell/controller.dm
index 9afe0303be85e..126cc8894368f 100644
--- a/code/modules/wiremod/shell/controller.dm
+++ b/code/modules/wiremod/shell/controller.dm
@@ -81,6 +81,9 @@
*/
/obj/item/circuit_component/controller/proc/send_right_signal(atom/source, mob/user)
SIGNAL_HANDLER
- if(!user.Adjacent(source))
+
+ if(!user.can_perform_action(source))
return
+
handle_trigger(source, user, "extra", right)
+ return CLICK_ACTION_SUCCESS
diff --git a/code/modules/wiremod/shell/drone.dm b/code/modules/wiremod/shell/drone.dm
index 4627a3cf32624..d2922274b7dab 100644
--- a/code/modules/wiremod/shell/drone.dm
+++ b/code/modules/wiremod/shell/drone.dm
@@ -9,7 +9,7 @@
icon_state = "setup_medium_med"
maxHealth = 300
health = 300
- living_flags = 0
+ living_flags = NONE
light_system = OVERLAY_LIGHT_DIRECTIONAL
light_on = FALSE
diff --git a/code/modules/wiremod/shell/gun.dm b/code/modules/wiremod/shell/gun.dm
index 8e9a3d987fd6d..7115c3b548bee 100644
--- a/code/modules/wiremod/shell/gun.dm
+++ b/code/modules/wiremod/shell/gun.dm
@@ -9,7 +9,7 @@
icon = 'icons/obj/science/circuits.dmi'
icon_state = "setup_gun"
ammo_type = list(/obj/item/ammo_casing/energy/wiremod_gun)
- cell_type = /obj/item/stock_parts/cell/emproof/wiremod_gun
+ cell_type = /obj/item/stock_parts/power_store/cell/emproof/wiremod_gun
item_flags = NONE
light_system = OVERLAY_LIGHT_DIRECTIONAL
light_on = FALSE
@@ -29,7 +29,7 @@
damage = 0
range = 7
-/obj/item/stock_parts/cell/emproof/wiremod_gun
+/obj/item/stock_parts/power_store/cell/emproof/wiremod_gun
maxcharge = 0.1 * STANDARD_CELL_CHARGE
/obj/item/gun/energy/wiremod_gun/Initialize(mapload)
diff --git a/html/changelogs/AutoChangeLog-pr-83840.yml b/html/changelogs/AutoChangeLog-pr-83840.yml
deleted file mode 100644
index 5d879aece5df2..0000000000000
--- a/html/changelogs/AutoChangeLog-pr-83840.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "TheBoondock"
-delete-after: True
-changes:
- - sound: "added compressed air sound for when air tanks are inserted into machinery"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-83949.yml b/html/changelogs/AutoChangeLog-pr-83949.yml
deleted file mode 100644
index 62584dcc7c0fc..0000000000000
--- a/html/changelogs/AutoChangeLog-pr-83949.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "grungussuss"
-delete-after: True
-changes:
- - rscadd: "Added Misha the bear to the HoS office on icebox."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84011.yml b/html/changelogs/AutoChangeLog-pr-84011.yml
new file mode 100644
index 0000000000000..12b730fefdcdf
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84011.yml
@@ -0,0 +1,4 @@
+author: "Pickle-Coding"
+delete-after: True
+changes:
+ - code_imp: "Supermatter zap power generation takes perspective of the machines subsystem."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84230.yml b/html/changelogs/AutoChangeLog-pr-84230.yml
new file mode 100644
index 0000000000000..165b6de5e2c7a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84230.yml
@@ -0,0 +1,4 @@
+author: "SmArtKar"
+delete-after: True
+changes:
+ - bugfix: "Vent-born wendigos no longer create one-way portals"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84374.yml b/html/changelogs/AutoChangeLog-pr-84374.yml
new file mode 100644
index 0000000000000..5b4a368896c57
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84374.yml
@@ -0,0 +1,4 @@
+author: "ShizCalev"
+delete-after: True
+changes:
+ - bugfix: "The power for all science burn chambers across all maps now works properly."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84439.yml b/html/changelogs/AutoChangeLog-pr-84439.yml
new file mode 100644
index 0000000000000..fd4591d8f8792
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84439.yml
@@ -0,0 +1,4 @@
+author: "Melbert"
+delete-after: True
+changes:
+ - rscadd: "Humanizing a monkey removes undergarments such as socks"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84448.yml b/html/changelogs/AutoChangeLog-pr-84448.yml
new file mode 100644
index 0000000000000..b579cc85ac2e3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84448.yml
@@ -0,0 +1,4 @@
+author: "thegrb93"
+delete-after: True
+changes:
+ - bugfix: "Game not refocusing after closing a TGUI"
\ No newline at end of file
diff --git a/html/changelogs/archive/2024-06.yml b/html/changelogs/archive/2024-06.yml
index c0da4690e635b..100647af4323c 100644
--- a/html/changelogs/archive/2024-06.yml
+++ b/html/changelogs/archive/2024-06.yml
@@ -742,3 +742,676 @@
carlarctg:
- bugfix: Cosmos spells will no longer star mark your steed
- qol: Baby plushies are now smaller than their parents
+2024-06-17:
+ Hacks-The-Doors:
+ - balance: dental pills can now be used in crit.
+ - balance: dental pills now give off a message when you start using them
+ - balance: dental pills have a 2.5 second delay when in soft crit
+ JackEnoff:
+ - balance: Certain changeling abilities won't work while on fire.
+ TheBoondock:
+ - sound: added compressed air sound for when air tanks are inserted into machinery
+ grungussuss:
+ - rscadd: Added Misha the bear to the HoS office on icebox.
+2024-06-18:
+ Bisar:
+ - balance: Replaced the free reagent purging with actually purging by exploding
+ someone in the blood while they have omnizine and a purgative in their bloodstream.
+ Let's go practice medicine!
+ - bugfix: Fixed the free reagent purging mechanic from causing an explosion so weak
+ that it doesn't cause any damage.
+ GPeckman:
+ - bugfix: Mining borgs can get multiple modkits of the same type installed again.
+ Goat:
+ - qol: fire extinguishers can now be filled via stationary tanks. (and water coolers)
+ GoblinBackwards:
+ - bugfix: Fixed mulebots being able to run over people who are leaning against a
+ wall.
+ - bugfix: Fixed anomaly cores from the high-intensity grav anomaly event creating
+ the wrong type of reactive armour.
+ Kaostico:
+ - bugfix: Transcendent Olfaction mutation now works properly
+ LucyGrind:
+ - bugfix: allows cigarette grinding in mortar
+ MTandi:
+ - bugfix: Non-metallic slime types are semi-transparent
+ - balance: Reshuffled tech tree, making nodes more specialized
+ - qol: Research points devided by the amount generated per second, so now research
+ points correspond to seconds
+ - rscadd: Introduced reagent purity scan experiments (required for Cryostasis node)
+ - rscadd: Introduced synthetic organ scan experiment (required for top tier cyber
+ organs)
+ - rscadd: Added a variant of machinery scan experiment that accepts any machines
+ with upgraded parts (required for tier 3 parts)
+ - rscdel: Removed material scanning experiments from the tech tree
+ Melbert:
+ - qol: Block'd out armor readout, should be more readable now
+ - bugfix: Crusher Fix For Real
+ SyncIt21:
+ - bugfix: ctrl+shift clicking on a ghost will only quick spawn that clicked target
+ and not you
+ TheBoondock:
+ - sound: added squeaky turn and gas hissing sound to gas valve
+ TheRyeGuyWhoWillNowDie:
+ - qol: adds a confirmation to malf AI shunting into APCs
+ mc-oofert:
+ - bugfix: build mode and space dragons dont harddel on destroy
+ - bugfix: you may now open the panel of a flatpacker with a screwdriver
+ san7890:
+ - qol: A message with a link to publicly accessible logs (if enabled by your server
+ operators) should now be visible far earlier when a world is about to reboot.
+2024-06-19:
+ Bisar:
+ - rscadd: The Nanotrasen safety commission reminds employees to properly clean themselves
+ of all flammable material before going on smoke breaks.
+ - rscadd: Sparks now ignite flammable things. Including you. Keep a fire extinguisher
+ handy or stop dousing yourself in welding fuel!
+ - bugfix: Fixed a few oversights with welding fuel pools not igniting when you throw
+ lit/hot things into them or when you walk into them while on fire.
+ GPeckman:
+ - bugfix: Airlocks should no longer appear closed sometimes when fireman carrying
+ someone into them.
+ Jacquerel:
+ - balance: Gorillas have big fingers, which mostly just prevents them from using
+ laser pointers and stun batons
+ - balance: Items held in your hands can catch fire.
+ - balance: Items you are holding won't catch fire if your hands cannot catch fire.
+ - balance: When you stop being on fire so will items you are holding.
+ - balance: If you roll around on your burning items they will stop being on fire.
+ Melbert:
+ - bugfix: Fixed hand tele portals being forever
+ - bugfix: Enabling or disabling ambience mid round will properly enable or disable
+ ambience
+ - qol: Added descriptions differentiating "Ship ambience" from "ambience"
+ TheRyeGuyWhoWillNowDie:
+ - rscadd: the advanced omnitool upgrade now hastens the mediborg's syringe too
+ Time-Green:
+ - refactor: Lizard and moth markings now use the bodypart overlay system
+ carlarctg:
+ - balance: Negative mutations now allow you to have more positive mutations, via
+ reducing your instability!
+ - code_imp: All mutations have been overall standardized via defines on their instability
+ values. Many mediocre positive mutations have had their cost reduced significantly!
+ - rscadd: 'Added a new height mutation: Acromegaly! It''s the opposite of Dwarfism
+ and makes you uncannily tall. It also makes you hit your head 8% or 4% (with
+ synch) of the time you pass through airlocks. Wear a helmet!'
+ - rscadd: Gigantism is now a recipe mutation, mix Acromegaly with Strength to get
+ it.
+ - qol: Injectors and activators' duration is now dependent on the in/stability (absolute
+ value) of the mutations to be injected! With a minimum of 5-10-15 seconds for
+ each type of injector. Also changed up a bit how part upgrade cooldowns work,
+ by making each tier reduce cooldowns by 25-15-10% for each injector type.
+ jlsnow301:
+ - bugfix: TGUI say will no longer spill your /me contents when you get attacked
+2024-06-20:
+ Absolucy:
+ - qol: Prettied up the Chemical Analyzer's output in chat, making it easier to read,
+ especially when scanning multiple things.
+ Ben10Omintrix:
+ - rscadd: vendrobes may have mothroaches inside them
+ - rscadd: mothroaches will now seek out clothes to eat them
+ FlufflesTheDog:
+ - bugfix: limbs that are both robotic and something else can be repaired properly
+ GPeckman:
+ - bugfix: The chaplain altar can once again be buckled to.
+ LT3:
+ - spellcheck: Melon fruit bowl now comes with a side of foreshadowing for people
+ who want to experience an explosion of flavour
+ MTandi:
+ - bugfix: Fixed techweb app showing wrong designs on Details button click
+ - bugfix: Fixed new compressor UI
+ - refactor: Compressor UI to TypeScript
+ - qol: Simplified Compressor UI layout
+ - bugfix: Made 10 MJ & 20 MJ cells properly correspond to tiers 1 & 2 in lathes.
+ - image: Updated cell sprites to correspond to other stock parts of their tiers.
+ - image: Updated plasma cell, 500KJ cell and 2.5MJ cell sprites
+ - qol: APC has wires for machinery/lights/environment channels
+ Metekillot:
+ - bugfix: Sparks will no longer turn areas with wooden furniture or similar into
+ naught but a field of ashes; they no longer ignite furniture, (unless it's made
+ of plasma(?!)) and have a decreasing chance to ignite items bigger than small
+ size.
+ Rhials:
+ - bugfix: Fixes a door in the Fredington Fasting Bear Five Nights and Fnafbears
+ map.
+ - balance: The energy bola slowdown has been (roughly) halved, to allow for more
+ retaliation when used on a criminal.
+ SyncIt21:
+ - bugfix: Techfabs now print 5x cable coil
+ - bugfix: no more runtimes when dragging turfs onto other stuff
+ - code_imp: most actions now properly check for recursive locs & better adjacency
+ - bugfix: You can move around ui buttons in your action bar
+ Vishenka0704:
+ - qol: Ability to delete characters(yourself)
+ grungussuss:
+ - bugfix: mimes can now break their vow while borged or an MMI
+ mc-oofert:
+ - bugfix: wawa centcom interns may actually leave the stationside dock
+ - bugfix: wawa hop office and cap office get keycard auths
+ - bugfix: wawa disposals blast doors work properly
+ - bugfix: wawa med elevator controls on the bottom floor are accessible
+ - bugfix: sci entrance actually has access restrictions
+ - bugfix: gasping makes sound now
+2024-06-21:
+ 00-Steven:
+ - refactor: Updated cards/ids to use the proper item interaction system instead
+ of attackby, please report any issues.
+ - bugfix: You can no longer recolour an ID at any point if you open the menu but
+ then don't select anything until later.
+ - bugfix: ID cards can be recoloured using crayons/spraycans again.
+ - qol: Prisoner IDs show genpop sentence time in hours/minutes/seconds instead of
+ seconds.
+ - qol: Prisoner IDs have genpop usage tips in their examine.
+ ArcaneMusic:
+ - qol: Vending machines now give audio feedback when you restock a vending refill
+ and get a payout.
+ - qol: The Restock tracker NTOS app for tracking vending machine contents now works
+ on all consoles, and comes pre-installed on the cargochat cargo computers.
+ - balance: Vending machines now offer a bit more credits when missing contents at
+ the start of a round after getting restocked.
+ BeagleGaming1:
+ - rscadd: Added disks for accelerator modkits and crusher trophies to the bitrunning
+ vendor
+ Bisar:
+ - rscadd: Ashwalkers are now better at riding, taming animals, and fishing.
+ - code_imp: Behavior for the settler trait has been partially atomized into several
+ traits instead.
+ EdgeLordExe:
+ - rscadd: Adds Feast of Owls ritual to heretic which allows one to forsake their
+ ascension in exchange for immediate power.
+ GPeckman:
+ - bugfix: When on 'stream' mode, the cleaning spray from a bottle of space cleaner
+ should no longer be blocked by just about everything.
+ Goat:
+ - bugfix: Icebox's raptor den is now lined with asbestos and lead and no longer
+ gets hit with radiation.
+ JackEnoff:
+ - bugfix: Repurposed Glands (Adrenals) now show their correct duration and chemical
+ cost in its description.
+ LT3:
+ - bugfix: Fixed paramedics not having access to the Icebox NanoDrug using the west
+ airlock
+ MTandi:
+ - image: New gibber sprite
+ - image: New food/slime processor sprite
+ - balance: Added ordnance to extra access of geneticists and roboticists
+ - balance: Reduced parts scanning tests' machine count to 4 from 8
+ - balance: Reduced augmented organs scanning tests mob count to 1 from 2
+ - balance: Reduced equipped mech scanning test count to 1 from 2
+ - balance: Added polycrystal option to bluespace crystal scan test
+ - bugfix: Allowed NTNet relay in away circuit imprinter for NT Frontier app
+ - qol: NT Frontier app installed on RD and Scientists` PDAs by default
+ - qol: Updated NT Frontier app to be more user-friendly
+ Rex9001:
+ - bugfix: lunatics now get their hud properly
+ - bugfix: lunatics now get objectives
+ - qol: ascended moon heretics are now labelled as ringleaders and are easier for
+ lunatics to spot
+ Rhials:
+ - balance: DRAGnets now come with a beacon they can be synced to, which will set
+ the destination for the snare round's teleport ability.
+ SmArtKar:
+ - image: Resprited all jetpacks
+ SyncIt21:
+ - bugfix: breaking an APC will depower the area
+ Xander3359:
+ - bugfix: Fix rust heretic being unable to rust walls or floors
+ grungussuss:
+ - bugfix: Welding protection module for MODsuits protect flash-sensitives from welding
+ arcs
+ mc-oofert:
+ - rscadd: every engineering lobby starts with a flatpacked flatpacker and multitool
+ - bugfix: fixed wrong access on one door on wawastation and also made lights on
+ elevators not break (On Wawastation)
+ necromanceranne:
+ - rscadd: Replaces the Particle Acceleration Rifle with the Event Horizon anti-existential
+ beam rifle. It shoots black holes. You can make this in-game. That's right,
+ YOU!
+ - balance: Only one vortex anomaly can be made in a round.
+ projectkepler-ru:
+ - bugfix: Wawastation bridge now has the correct access on their suit storage and
+ medkit now actually starts filled
+ r3dj4ck0424:
+ - bugfix: puts tiles under the wawa tool storage doors
+ - bugfix: allows you to access a door and a fire alarm on wawa's prison second floor
+2024-06-22:
+ AyIong:
+ - qol: Fullscreen mode can now be toggled by pressing F11 or the button at the top
+ right
+ Bisar:
+ - bugfix: Felinids no longer remember losing their tail and regaining it roundstart;
+ you need to do it during the round to get that mood event.
+ FlufflesTheDog:
+ - bugfix: sanitization on citation pda alerts
+ JupiterJaeden:
+ - bugfix: Conga lines of more than 2 no longer break when going up and down stairs.
+ MelokGleb:
+ - image: added sprite for debug heretic painting
+ Mothblocks:
+ - qol: Dramatically improves delete character UI and UX.
+ Thunder12345:
+ - rscdel: Locker staffs have been removed from the Ragin' Mages deathmatch lootcrate
+ pool.
+ mc-oofert:
+ - bugfix: borg factory gives you your preference borg name
+2024-06-23:
+ Donglesplonge:
+ - balance: most livestock crates, with some exception, have been made cheaper to
+ facilitate healthier mental states in the crew, go build a farm!
+ jlsnow301:
+ - bugfix: 'Bitrunning made more illegal: Increased the rate at which antags spawn.'
+ - bugfix: '"Temporary" bitrunning antagonists and spawners are made actually temporary.
+ You will return to your original body after death, just like CTF.'
+ - rscadd: Added more examine text for ghosts to bitrunning equipment.
+ - balance: Server cooldown reduced by 1 minute at base level.
+ - rscadd: As an observer, you can now switch views between station and virtual domain
+ by clicking the hololadder and netpod respectively.
+ - rscdel: Removed the starfront saloon BR map.
+ - bugfix: 'Syndicate assault map: Added pistols, reduced exploits.'
+2024-06-24:
+ Bisar:
+ - balance: Sparks have been heavily adjusted; they only affect items made of plasma,
+ pools of welding fuel, flammable people, cigarettes, and items that contain
+ reagents... for now. Their long-standing behavior of igniting flammable gas
+ has been untouched.
+ DATA, with sounds by Beebblie:
+ - sound: Added sounds for turning on and off internals.
+ GoblinBackwards:
+ - rscadd: Breathing nitrium now has a chance to make you burp.
+ Kocma-san:
+ - bugfix: you can hold Ian in your arms
+ LT3:
+ - bugfix: Smartfridge will now correctly respond 'no power' instead of 'forbidden
+ item' when it doesn't have power
+ LucyGrind:
+ - bugfix: crayons interact with washing machine once again
+ Melbert:
+ - bugfix: Touch Spells now apply click CD again
+ - bugfix: Touch Spells now apply fingerprints again
+ - bugfix: Touch Spells now check if your hands are blocked again
+ - bugfix: Fixed plate shards not randomizing icon correctly
+ - qol: Gives plate sharts a more fitting hitsound / caltrop sound, gives them a
+ set caltrop stun duration (instead of default)
+ - bugfix: Fix DNA vault probes
+ - bugfix: Bloody footprints now go until you run out of blood on your feet instead
+ if only a single tile
+ - rscadd: Adds an effect for emagging an emag
+ - rscadd: Adds an effect for emagging a fake emag
+ Paxilmaniac:
+ - rscadd: Electric eels now prefer used car batteries for bait.
+ Rhials:
+ - bugfix: Admin-only deadchat broadcasts don't append a second "this message is
+ for admins only" string for every admin online.
+ ShizCalev:
+ - qol: Oven trays now count as valid trays to cut food on.
+ - rscadd: The game settings menu can now actually be accessed through the escape
+ menu.
+2024-06-25:
+ 00-Steven:
+ - refactor: Modular computers (PDAs, laptops, etc) and their applications have had
+ their item interaction logic refactored. Please report any issues.
+ - bugfix: You can deposit cash into IDs inside of PDAs by slapping it against the
+ PDA again.
+ ArcaneMusic:
+ - admin: Admins have a new secret to mass revive and heal all players on the server.
+ Bisar:
+ - bugfix: The light eater can now again eat lights from things with lights.
+ DaCoolBoss:
+ - spellcheck: fixed typos in a few heretic items
+ - spellcheck: rewrote parts of the lunar heretic's abilities, items and traumas
+ - spellcheck: rewrote GLA device's description for clarity
+ - spellcheck: Grapple gun's description has been updated.
+ Fluffles:
+ - bugfix: emoji show up in the messenger UI
+ - bugfix: emoji show up in the message server monitor UI
+ - bugfix: you can adjust your pda ringtone in-game
+ - bugfix: having an empty pAI in your pda doesn't break ringtones
+ - bugfix: pdas specifically set to not consume power don't constantly switch to
+ messenger
+ - bugfix: you can use the quick-reply button for messages while resting
+ - bugfix: deadchat pda messages show the imprinted sender's name instead of whoever
+ is holding the pda
+ - bugfix: emoji show up in deadchat pda messages
+ FlufflesTheDog:
+ - bugfix: printed medical beds are no longer randomly offset
+ Goat:
+ - rscadd: Added boards for the library's book binder and scanner, printable at the
+ service fabricator once computer tech is researched. Spritework done by lepiromano.
+ GoblinBackwards:
+ - bugfix: Fixed ctrl-click not dragging the bluespace gas sender or hydroponics
+ trays.
+ Guestify:
+ - bugfix: Fixed secbots and mulebots bold text
+ IsaacExists:
+ - spellcheck: Shrapnel removal messages now have closing parenthesis, removed unnecessary
+ punctuation.
+ - spellcheck: The nutriment pump implant's description in the lathes are no longer
+ typo'd.
+ Jacquerel:
+ - bugfix: Minebots, Tamed Wolves, and Regal Rat Minions will now give you some space
+ if you start attacking yourself, rather than joining in.
+ MGOOOOOO:
+ - bugfix: Orange balloons are no longer invisible in the hand slot.
+ MTandi:
+ - qol: NT Frontier app now allows to select experiments from inserted data disks
+ - bugfix: Autopsy experiments for techweb can be performed roundstart
+ MrDas:
+ - bugfix: Fixed the duration of wizard's mutate spell.
+ Rhials:
+ - sound: The abductor team now has their own antag stinger.
+ - bugfix: Drone fabricator subtypes that spawn pre-loaded now actually start with
+ materials inside.
+ - bugfix: The binocular fabriactor on the MediSim shuttle works again.
+ ShizCalev:
+ - image: Foam darts in the magazine of a toy/riot C20R45 will now show the correct
+ color corresponding to the type of said dart loaded in it instead of a generic
+ bullet sprite.
+ SmArtKar:
+ - bugfix: Fixed crayons not being usable on anything except turfs (including washing
+ machines)
+ - rscadd: You can now click pens! Clickity clickery click!
+ - bugfix: E-Daggers can now break lockers/other renamable objects, and pendrivers
+ can now extract their electronics.
+ - code_imp: Most pen typechecks now check for writing implements.
+ SyncIt21:
+ - bugfix: you can piggyback on players again
+ - bugfix: you can strip someone while lying down
+ - bugfix: paraplegics can buckle others & themselves to chairs & mobs
+ - qol: improved feedback messages when an action cannot be done
+ mc-oofert:
+ - bugfix: wawa ordnance air alarms dont send alerts roundstart
+ - qol: wawa ordnance gets more portable atmos machines to compensate for having
+ next to no actual portable atmos machines
+ - bugfix: wawa ordnance gets 3 random roundstart cores (forgor to add)
+ necromanceranne:
+ - bugfix: The Infiltrator module now has the same welding protections as the engineering
+ module.
+ - bugfix: The infiltrator module now properly protects you from head impacts. Helpful
+ if you wipe out on your hoverboard while fleeing the cops.
+ - code_imp: Improves the definitions for welding protection values.
+ - bugfix: The Stimmed mutation now has the appropriate instability value for a largely
+ meaningless mutation.
+ - rscadd: The nullblade, a nullrod variant that is weaker outright, but can inflict
+ severe wounds by performing a sneak attack. Debilitate your target or attack
+ from behind.
+ - bugfix: The shortsword sprite no longer has a misaligned handle.
+ - code_imp: Organized the nullrod file, and removed some unnecessary subtyping on
+ various types of nullrods.
+ norsvenska:
+ - bugfix: '[IceBox] The Head of Personnel''s Requests Console announcements now
+ correctly display the HoP as the announcer, rather than "Unknown"'
+ san7890:
+ - bugfix: You should no longer attack mobs that don't have a chest in the chest
+ (bots).
+ the-orange-cow:
+ - bugfix: Medicated suture, advanced regenerative mesh, and mourning poultice reactions
+ should more consistently spawn the items they are meant to produce.
+ uaioy:
+ - spellcheck: fixed typo in raptor emote
+ vinylspiders:
+ - bugfix: fixes an issue that was causing the quirk config tooltips to render behind
+ the window, making them nearly impossible to read.
+ zxaber:
+ - bugfix: Refactored borg omnitool code, fixing most of the unique interaction issues.
+2024-06-26:
+ Ben10Omintrix:
+ - refactor: vibebots are not basic bots
+ - rscadd: vibebots will now seek out the depressed and cheer them up
+ FlufflesTheDog:
+ - bugfix: multi-z hole repair works better, especially when the turf below is blocked
+ by items
+ GPeckman:
+ - bugfix: Analyzers should work on bioscrambler anomalies again.
+ GoblinBackwards:
+ - bugfix: Interacting with an assembly bomb in hand will now allow you to interact
+ with the attached assembly instead of opening the gas tank UI. Right-clicking
+ will display the gas tank UI instead.
+ Guestify:
+ - bugfix: The visor of the welding mask no longer goes down when you enable internals
+ NewyearnewmeUwu:
+ - qol: ' The xenobio console''s monkey placing command also clears dead monkeys
+ on the tile.'
+ SmArtKar:
+ - bugfix: Spraycans can once more paint things.
+ - bugfix: RND console now properly rounds research points
+ SyncIt21:
+ - bugfix: alt click runtime no more when using style meter
+ - code_imp: improved alt & ctrl click code
+ Vekter:
+ - balance: The Event Horizon Anti-Existential Beam Rifle now requires Unregulated
+ Bluespace Research to be constructed.
+ Watermelon, Mayhazah:
+ - balance: Drastically reduces the power consumption and max charge of power cells
+ - balance: Added a new stock part called the battery, used primarily in the construction
+ of APCs and SMESs.
+ - rscadd: Suiciding with a cell/battery will shock you and potentially dust you/shock
+ the people around you if the charge is great enough.
+ carlarctg:
+ - bugfix: There's now a limit to how many dental implants you can cram into your
+ mouth, which is governed by your species' teeth limit.
+ - refactor: Most species have 32 teeth, due to being based on humans, weirding me
+ out when thinking about their teeth, or lack of enough information
+ - refactor: Moths and flypeople have NO teeth. They CAN'T get dental implants. I'm
+ NERFING moths.
+ - refactor: Lizards have seventy-five (!!!) teeth. Lizards are weird.
+ hyperjll:
+ - balance: Thanks to incredible strides in selective slime breeding, slimes require
+ substantially less nutrients to grow into adults, and split into children.
+ jlsnow301:
+ - rscadd: 'Bitrunning: You can now choose your hacker alias in prefs.'
+ - rscadd: Bit avatars get orbit icons.
+ mc-oofert:
+ - qol: space dragon can see in the dark and the invalid rift location alert is more
+ informative
+ - rscadd: wawastation stand-in shuttle
+ - bugfix: durand shield doesnt immediately depower the mech when taking stamina
+ damage
+ - balance: durand shield is a bit stronger
+2024-06-28:
+ Ben10Omintrix:
+ - refactor: firebots are now basic bots
+ Deadgebert:
+ - rscadd: Crystallizer boards added to Delta and Tram HFR rooms
+ GPeckman:
+ - bugfix: Protolathes/Circuit Imprinters/Techfabs with better parts should now print
+ items faster again.
+ GremlinSeeker:
+ - bugfix: Fixed disconnected APC on birdshot and other minor service fixes.
+ Kapu1178:
+ - bugfix: MODsuit pathfinder module works. Again.
+ - code_imp: AI pathfinding should produce slightly better paths.
+ MTandi:
+ - rscdel: Removed tank dispenser UI to use left/right clicks instead
+ - rscadd: There is a chance that Spess Knife will be in a mail for engi and clowns
+ - qol: Updated Microscope UI
+ - qol: Microscope is easier to use - you can remove dish with right click and swap
+ dishes
+ Melbert:
+ - bugfix: Fixed cyborg omnitools being unusable on some things
+ - bugfix: Fix timestop being 1 tile too small again, and fixes a lot of other field
+ effects from being 1-small as well
+ - sound: Glug-glug sound when dragging a leaking gas tank
+ - bugfix: Lizards and Moths don't deathgasp twice when they die
+ Melberte:
+ - rscadd: Cool Sword Cursor Maintenance App
+ ShizCalev, SpaceLove:
+ - refactor: Techweb strings are defined now so to maintain modularity
+ - balance: Research papers will have less overall point generation.
+ SmArtKar:
+ - bugfix: Retracted pens can be put into PDAs
+ SyncIt21:
+ - qol: adds examines, screentips & balloon alerts for flatpacker, flatpack box &
+ cart
+ - qol: adds correct material colour insertion animation for flat packer, continuous
+ progress bar animation during printing
+ - qol: flat packer has a separate icon when you open its maintenance panel, eject
+ button is disabled when no board is inserted
+ - qol: ejecting the board will place it in your hand, use ctrl click shortcut to
+ eject board from flatpacker
+ - bugfix: you cannot deploy a flat packed box on a turf that has dense objects(like
+ other flat packed boxes & such)
+ - bugfix: you cannot insert hologram/abstract items into a flat packer or flatpack
+ cart, also can hit them with any objects when in combat mode
+ - bugfix: you can deconstruct a flat packer with a crowbar after opening its maintenance
+ panel
+ - bugfix: correct cost of the design scaled with `creation_coefficiency` is displayed
+ in the UI
+ - code_imp: overall improved code quality of all things flat pack related
+ - bugfix: actions buttons can be dragged anywhere again
+ Viralmilk22:
+ - rscadd: Shifted up the service departments on Birdshot.
+ - rscadd: Added an arcade.
+ alien3301:
+ - balance: Mediborg surgical omnitool upgrade makes the health analyzer advanced
+ carlarctg:
+ - bugfix: Fixed hunger affecting your speed in nograv
+ hyperjll:
+ - balance: 'Due to selective breeding of slimes, some species require roughly 3x
+ more plasma than normal to activate a plasma reaction. Slime extracts affected
+ are: Oil, Adamantine, Orange, and Gold. Yellow slimes require 3x more blood
+ to activate a blood reaction.'
+ - balance: Oil slime extracts have become less potent during a plasma reaction due
+ to selective breeding conditions.
+ - balance: Gold slime extracts give rise to one less monster during a plasma reaction
+ due to selective breeding conditions.
+ - balance: Yellow slime extracts have become less potent during a blood reaction
+ due to selective breeding conditions.
+ - balance: Adamantine golem shells require 3 sheets rather than 1, due to unknown
+ circumstances.
+ necromanceranne:
+ - bugfix: Headprotector modules and constructor modules work properly once more.
+ - bugfix: Space heaters do not completely drain their starting cell while trying
+ to change their room temperature by a few degrees.
+ uaioy:
+ - bugfix: infiltrator modsuit sprite is not misaligned anymore
+ vinylspiders:
+ - qol: 'polypore mycelium no longer contains sugar, preventing it from instantly
+ creating fringe weaver beverage when ground up. qol: sugar may be acquired from
+ grinding fireblossoms instead of polypore mycelium.'
+2024-06-29:
+ Bisar:
+ - rscadd: Ashwalkers now start out allied to lavaland fauna (except for raptors).
+ Attacking the fauna will break this alliance with the attacked beast and any
+ who witness it.
+ - bugfix: Ashwalkers are now actually in the ashwalker faction, instead of the neutral
+ one.
+ EnterTheJake:
+ - rscadd: A new Anomaly organ has been introduced, The Voltaic Combat Cyberheart!
+ Higgin:
+ - bugfix: Mood buffs/penalties are now properly equal on both positive/negative
+ sides.
+ JackEnoff:
+ - balance: Changelings regenerate chemicals faster when not on fire
+ - balance: Changelings regenerate chemicals slower when on fire
+ MGOOOOOO:
+ - qol: The "Dental Implant" surgery no longer forces itself to restart after implanting
+ one pill. Now implanting pills in the surgery has another step to either search
+ the patient's mouth for another tooth to implant, or cauterization to end the
+ surgery.
+ Melbert:
+ - bugfix: Fixed modsuit interactions slightly. No longer requires combat mode to
+ use tools on it, plasma core works as intended as well. (Using combat mode,
+ however, will make you insert the item)
+ - refactor: Refactored lockboxes
+ - refactor: Refactored medbot skin application
+ Moonlit2000:
+ - bugfix: peg legs can't bleed
+ ShizCalev:
+ - bugfix: Toggling ambient ship sounds will now instantly turn it on/off.
+ - bugfix: Deafened mobs will no longer hear the station's ambient sounds.
+ - bugfix: Fixed ambient sounds resetting their loop when entering different bodies
+ (ie admin ghosting, being moved to other mobs, ect.)
+ - bugfix: Monkeys that become sentient through the sentience helmet will no longer
+ be notified that they can ventcrawl.
+ - bugfix: Airlocks will now correctly said what other airlock they are cyclelinked
+ with.
+ - bugfix: Portaturrets no longer go invisible when unwrenched from the ground.
+ SmArtKar:
+ - code_imp: Rewrote a portion of storage UI code to allow it to be influenced by
+ UI style.
+ - image: Prettified storage UI and made it affected by UI theme.
+ - image: Ripley and Ripley-based mechs now have consistent outlines
+ SyncIt21:
+ - bugfix: Holodeck closet & crate items are marked as holograms as well
+ - bugfix: Holodeck closet & crate items delete themselves when the program is changed
+ - bugfix: you can access your inventory when lying down
+ TheBoondock:
+ - sound: added liquid pouring sounds to pouring of any reagents
+ Thlumyn:
+ - bugfix: fixed active turfs in icebox listening post
+ Vekter:
+ - bugfix: Fixed the visibility of a pipe in Northstar's ordnance lab
+ - rscadd: Bitrunners can now access specific bounties asking for the item rewards
+ from specific bitrunning domains.
+ - bugfix: Fixed bitrunner pulling from a pool of literally every bounty available.
+ - bugfix: Fixes the door-bolting buttons in the dorms and bathrooms on Birdshot.
+ aaaa1023:
+ - bugfix: Removed a bush trapped inside a wall above morgue on Tramstation
+ carlarctg:
+ - rscadd: Reworked blood loss effects on the user to be much more noticeable.
+ - code_imp: Changed the blood volume defines to be based on the BLOOD_VOLUME_NORMAL
+ define, with a multiplier of blood loss applied, to be more understandable.
+ - rscadd: Added tons of new mutations to Genetics, alongside some recipes!
+ - rscadd: Thermal Adaptation has been made a combination mutation from the stronger
+ but narrower Cold and Heat adaptations.
+ - balance: Cryobeams have 9 tile range, and fiery sweat doesn't cause spread on
+ contact.
+ - image: Added some neat new sprites for the new mutations, and added a greyscale
+ version of the magic hand sprites.
+ - code_imp: Infinitesmally improved mutation code.
+ delingar:
+ - bugfix: Lavaland elite are at lavaland fauna faction now
+ hyperjll:
+ - bugfix: Inducers now accept megacells AND regular cells.
+ junkgle01:
+ - bugfix: added a keycard auth to QM room
+ necromanceranne:
+ - bugfix: Emergency firesuits no longer hide your gloves.
+ - qol: Punching bags are now a equal method of training to the fitness machinery.
+ - qol: Boxing grants more experience overall for participation.
+2024-06-30:
+ Exester509:
+ - spellcheck: Fixed two typos in the heretic lore
+ Ghommie:
+ - bugfix: cigarettes and vapes are no longer treated as clothing (eg. They no longer
+ get shredded and need to be repaired with... cloth).
+ GoblinBackwards:
+ - bugfix: Fixed gas canister shields turning themselves off in unpowered areas when
+ they weren't drawing any cell power.
+ LT3:
+ - code_imp: Blood filter only pings and says finished when it's actually finished
+ Sadboysuss:
+ - bugfix: fixed cyborgs and monkeys not being able to buckle to chairs
+ SmArtKar:
+ - bugfix: Storage no longer deletes all of its viewers upon being deleted
+ - bugfix: Storage UI now renders properly
+ - bugfix: Guns no longer can be overfilled by 1 bullet
+ - bugfix: Russian revolvers now spawn with only 1 live round as originally intended,
+ and click when firing a blank.
+ Xander3359:
+ - bugfix: Fix being unable to add a flux core to new the combat heart cybernetic
+ aaaa1023:
+ - bugfix: Fixed the camera offset for the navigation console on a handful of Whiteships.
+ - bugfix: Fixed the Pubby Whiteship drifting sideways through hyperspace when in
+ flight.
+ - bugfix: Fixed the Kilo Whiteship flying backwards through hyperspace when in flight.
+ - bugfix: The Birdshot Whiteship should actually be able to spawn now.
+ - spellcheck: fixed spelling of "aggressive" in the shuttle manipulator description
+ for the Birdshot Whiteship.
+ carlarctg:
+ - spellcheck: Syndicate jaws of life are now jaws of death!
+ - spellcheck: Made its desc. more descriptive, stating that its faster.
+ - rscadd: Heretics can now sacrifice Cultists for sweet loot.
+ - rscadd: Cultists can now sacrifice Heretics for sick trinkets.
+ - rscdel: Removed Bastard Blade from the game, code, and life
+ - balance: Aggressive Spread now rusts non-turfs next to you as well
+ - balance: Raise Construction cd raised to 7, now breaks rust walls as well, improved
+ autoaim making it actually usable midfight
+ - refactor: Auto-aim code now works on any atoms if configured
+ grungussuss , Kayozz:
+ - sound: exosuit fabricators, Autolathes and Techfabs will now produce sounds when
+ printing items
+ grungususs:
+ - bugfix: fixed the name of a request console in the medical sec outpost on metastation
+ mc-oofert:
+ - bugfix: both engineers and roboticists may now access the controls of a firebot
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 96c02aa91f990..67b8ea51c1850 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/effects/mouse_pointers/cool_sword.dmi b/icons/effects/mouse_pointers/cool_sword.dmi
new file mode 100644
index 0000000000000..a34fa56d87d3c
Binary files /dev/null and b/icons/effects/mouse_pointers/cool_sword.dmi differ
diff --git a/icons/effects/random_spawners.dmi b/icons/effects/random_spawners.dmi
index ddd6fd6f608bd..ed6c0c8702e45 100644
Binary files a/icons/effects/random_spawners.dmi and b/icons/effects/random_spawners.dmi differ
diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi
index e56df0560531a..dda7d6cc635af 100644
Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ
diff --git a/icons/hud/screen_clockwork.dmi b/icons/hud/screen_clockwork.dmi
index 0923e42e7e429..17e0c92972e25 100644
Binary files a/icons/hud/screen_clockwork.dmi and b/icons/hud/screen_clockwork.dmi differ
diff --git a/icons/hud/screen_detective.dmi b/icons/hud/screen_detective.dmi
index aed6e0d6572a5..9704ca96f4c12 100644
Binary files a/icons/hud/screen_detective.dmi and b/icons/hud/screen_detective.dmi differ
diff --git a/icons/hud/screen_glass.dmi b/icons/hud/screen_glass.dmi
index 63ad3293921b8..6b6d9d515c5f0 100644
Binary files a/icons/hud/screen_glass.dmi and b/icons/hud/screen_glass.dmi differ
diff --git a/icons/hud/screen_midnight.dmi b/icons/hud/screen_midnight.dmi
index 5483ddf4564a5..8a6f2e1e8e06c 100644
Binary files a/icons/hud/screen_midnight.dmi and b/icons/hud/screen_midnight.dmi differ
diff --git a/icons/hud/screen_operative.dmi b/icons/hud/screen_operative.dmi
index f2d60d394acc9..73afee5b3ca40 100644
Binary files a/icons/hud/screen_operative.dmi and b/icons/hud/screen_operative.dmi differ
diff --git a/icons/hud/screen_plasmafire.dmi b/icons/hud/screen_plasmafire.dmi
index 5423d3855b2b6..b0b2c7999c92d 100644
Binary files a/icons/hud/screen_plasmafire.dmi and b/icons/hud/screen_plasmafire.dmi differ
diff --git a/icons/hud/screen_retro.dmi b/icons/hud/screen_retro.dmi
index b4252109d6847..a0d5abf3be511 100644
Binary files a/icons/hud/screen_retro.dmi and b/icons/hud/screen_retro.dmi differ
diff --git a/icons/hud/screen_slimecore.dmi b/icons/hud/screen_slimecore.dmi
index a75fe55c37839..84a7abec2be5f 100644
Binary files a/icons/hud/screen_slimecore.dmi and b/icons/hud/screen_slimecore.dmi differ
diff --git a/icons/hud/screen_trasenknox.dmi b/icons/hud/screen_trasenknox.dmi
index 2569d2a635edd..00ad01258a36a 100644
Binary files a/icons/hud/screen_trasenknox.dmi and b/icons/hud/screen_trasenknox.dmi differ
diff --git a/icons/mob/actions/actions_cult.dmi b/icons/mob/actions/actions_cult.dmi
index f73f5bb6367fa..7725ae691b4c6 100644
Binary files a/icons/mob/actions/actions_cult.dmi and b/icons/mob/actions/actions_cult.dmi differ
diff --git a/icons/mob/actions/actions_ecult.dmi b/icons/mob/actions/actions_ecult.dmi
index 67b6bf1fd2257..3ce72ae54ffe7 100644
Binary files a/icons/mob/actions/actions_ecult.dmi and b/icons/mob/actions/actions_ecult.dmi differ
diff --git a/icons/mob/actions/actions_genetic.dmi b/icons/mob/actions/actions_genetic.dmi
index 9ead1795fe72e..497abffe67451 100644
Binary files a/icons/mob/actions/actions_genetic.dmi and b/icons/mob/actions/actions_genetic.dmi differ
diff --git a/icons/mob/actions/actions_spells.dmi b/icons/mob/actions/actions_spells.dmi
index fb8c121218ffc..b8d3c3ce34b54 100644
Binary files a/icons/mob/actions/actions_spells.dmi and b/icons/mob/actions/actions_spells.dmi differ
diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi
index 52be2d07923e5..eb3f87d9c71f0 100644
Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ
diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi
index f8673eedd9518..a2d318adfb7d1 100644
Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ
diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi
index 69fd53612f01d..9594f6227730f 100644
Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ
diff --git a/icons/mob/clothing/modsuit/mod_clothing.dmi b/icons/mob/clothing/modsuit/mod_clothing.dmi
index 613559b726a7d..64affedb2de4c 100644
Binary files a/icons/mob/clothing/modsuit/mod_clothing.dmi and b/icons/mob/clothing/modsuit/mod_clothing.dmi differ
diff --git a/icons/mob/clothing/neck.dmi b/icons/mob/clothing/neck.dmi
index a193fbd74a8e3..ed0bb34b46449 100644
Binary files a/icons/mob/clothing/neck.dmi and b/icons/mob/clothing/neck.dmi differ
diff --git a/icons/mob/effects/genetics.dmi b/icons/mob/effects/genetics.dmi
index ebaad5028a25a..76d5224b3c7e7 100644
Binary files a/icons/mob/effects/genetics.dmi and b/icons/mob/effects/genetics.dmi differ
diff --git a/icons/mob/huds/antag_hud.dmi b/icons/mob/huds/antag_hud.dmi
index c51fcc5baa8c6..2a916d01d9553 100644
Binary files a/icons/mob/huds/antag_hud.dmi and b/icons/mob/huds/antag_hud.dmi differ
diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi
index a3bbdf2ede075..086e886bab7b2 100644
Binary files a/icons/mob/huds/hud.dmi and b/icons/mob/huds/hud.dmi differ
diff --git a/icons/mob/human/bodyparts.dmi b/icons/mob/human/bodyparts.dmi
index d6e4472973a32..78be880423c1e 100644
Binary files a/icons/mob/human/bodyparts.dmi and b/icons/mob/human/bodyparts.dmi differ
diff --git a/icons/mob/human/species/ghetto.dmi b/icons/mob/human/species/ghetto.dmi
new file mode 100644
index 0000000000000..e11701428ebcb
Binary files /dev/null and b/icons/mob/human/species/ghetto.dmi differ
diff --git a/icons/mob/human/species/lizard/lizard_markings.dmi b/icons/mob/human/species/lizard/lizard_markings.dmi
new file mode 100644
index 0000000000000..7cc8f2fa1b8a5
Binary files /dev/null and b/icons/mob/human/species/lizard/lizard_markings.dmi differ
diff --git a/icons/mob/human/species/lizard/lizard_misc.dmi b/icons/mob/human/species/lizard/lizard_misc.dmi
index ab228f29076f0..346581978e4b7 100644
Binary files a/icons/mob/human/species/lizard/lizard_misc.dmi and b/icons/mob/human/species/lizard/lizard_misc.dmi differ
diff --git a/icons/mob/inhands/64x64_lefthand.dmi b/icons/mob/inhands/64x64_lefthand.dmi
index e0545c0d89395..d15a47206f984 100644
Binary files a/icons/mob/inhands/64x64_lefthand.dmi and b/icons/mob/inhands/64x64_lefthand.dmi differ
diff --git a/icons/mob/inhands/64x64_righthand.dmi b/icons/mob/inhands/64x64_righthand.dmi
index bf101ad0ea700..88ad954734bf5 100644
Binary files a/icons/mob/inhands/64x64_righthand.dmi and b/icons/mob/inhands/64x64_righthand.dmi differ
diff --git a/icons/mob/inhands/clothing/masks_lefthand.dmi b/icons/mob/inhands/clothing/masks_lefthand.dmi
index 64fcf4d70bd27..cac122916bdd2 100644
Binary files a/icons/mob/inhands/clothing/masks_lefthand.dmi and b/icons/mob/inhands/clothing/masks_lefthand.dmi differ
diff --git a/icons/mob/inhands/clothing/masks_righthand.dmi b/icons/mob/inhands/clothing/masks_righthand.dmi
index 99f45bd1b17c0..f68f2d905e627 100644
Binary files a/icons/mob/inhands/clothing/masks_righthand.dmi and b/icons/mob/inhands/clothing/masks_righthand.dmi differ
diff --git a/icons/mob/inhands/equipment/jetpacks_lefthand.dmi b/icons/mob/inhands/equipment/jetpacks_lefthand.dmi
index 113a8349008b8..8096611173054 100644
Binary files a/icons/mob/inhands/equipment/jetpacks_lefthand.dmi and b/icons/mob/inhands/equipment/jetpacks_lefthand.dmi differ
diff --git a/icons/mob/inhands/equipment/jetpacks_righthand.dmi b/icons/mob/inhands/equipment/jetpacks_righthand.dmi
index 6337f0c0d2a02..8e2ce1de8b2a5 100644
Binary files a/icons/mob/inhands/equipment/jetpacks_righthand.dmi and b/icons/mob/inhands/equipment/jetpacks_righthand.dmi differ
diff --git a/icons/mob/inhands/items/touchspell_lefthand.dmi b/icons/mob/inhands/items/touchspell_lefthand.dmi
index 1fc8d962aec11..2cf040fcf8d18 100644
Binary files a/icons/mob/inhands/items/touchspell_lefthand.dmi and b/icons/mob/inhands/items/touchspell_lefthand.dmi differ
diff --git a/icons/mob/inhands/items/touchspell_righthand.dmi b/icons/mob/inhands/items/touchspell_righthand.dmi
index cc3adf5eb1032..d4815fe6b65dc 100644
Binary files a/icons/mob/inhands/items/touchspell_righthand.dmi and b/icons/mob/inhands/items/touchspell_righthand.dmi differ
diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi
index 967968b339ba7..5515ad69c3486 100644
Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ
diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi
index beb3c84860d64..fdad955fd9a6f 100644
Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ
diff --git a/icons/mob/inhands/weapons/swords_lefthand.dmi b/icons/mob/inhands/weapons/swords_lefthand.dmi
index 40c58203286df..b9552c754c082 100644
Binary files a/icons/mob/inhands/weapons/swords_lefthand.dmi and b/icons/mob/inhands/weapons/swords_lefthand.dmi differ
diff --git a/icons/mob/inhands/weapons/swords_righthand.dmi b/icons/mob/inhands/weapons/swords_righthand.dmi
index 0600498a34ba9..f132e997658cb 100644
Binary files a/icons/mob/inhands/weapons/swords_righthand.dmi and b/icons/mob/inhands/weapons/swords_righthand.dmi differ
diff --git a/icons/mob/nonhuman-player/cult.dmi b/icons/mob/nonhuman-player/cult.dmi
index 9241b138227c5..683ee9bd6fe32 100644
Binary files a/icons/mob/nonhuman-player/cult.dmi and b/icons/mob/nonhuman-player/cult.dmi differ
diff --git a/icons/mob/rideables/mecha.dmi b/icons/mob/rideables/mecha.dmi
index 76b089534e6f9..0c0f62de4d26e 100644
Binary files a/icons/mob/rideables/mecha.dmi and b/icons/mob/rideables/mecha.dmi differ
diff --git a/icons/mob/silicon/robot_items.dmi b/icons/mob/silicon/robot_items.dmi
index 5ad091d6c9f86..00c813ace7f48 100644
Binary files a/icons/mob/silicon/robot_items.dmi and b/icons/mob/silicon/robot_items.dmi differ
diff --git a/icons/obj/antags/cult/items.dmi b/icons/obj/antags/cult/items.dmi
index 9a3435dcd833e..fcd5f13c85bf5 100644
Binary files a/icons/obj/antags/cult/items.dmi and b/icons/obj/antags/cult/items.dmi differ
diff --git a/icons/obj/antags/cult/structures.dmi b/icons/obj/antags/cult/structures.dmi
index 373371f5a2f98..982742e876492 100644
Binary files a/icons/obj/antags/cult/structures.dmi and b/icons/obj/antags/cult/structures.dmi differ
diff --git a/icons/obj/canisters.dmi b/icons/obj/canisters.dmi
index 277833976adbb..436467648880b 100644
Binary files a/icons/obj/canisters.dmi and b/icons/obj/canisters.dmi differ
diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi
index 3612c747f50e2..1be85df6c156d 100644
Binary files a/icons/obj/cigarettes.dmi and b/icons/obj/cigarettes.dmi differ
diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi
index 5cb090978ae7c..436785ce6e5e9 100644
Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ
diff --git a/icons/obj/clothing/neck.dmi b/icons/obj/clothing/neck.dmi
index e937d125ec2a4..e8726cfcb73a5 100644
Binary files a/icons/obj/clothing/neck.dmi and b/icons/obj/clothing/neck.dmi differ
diff --git a/icons/obj/devices/tracker.dmi b/icons/obj/devices/tracker.dmi
index 59884c0aff881..39be63ef4de81 100644
Binary files a/icons/obj/devices/tracker.dmi and b/icons/obj/devices/tracker.dmi differ
diff --git a/icons/obj/fishing.dmi b/icons/obj/fishing.dmi
index 92d7da8238ad3..92d1cf9a12231 100644
Binary files a/icons/obj/fishing.dmi and b/icons/obj/fishing.dmi differ
diff --git a/icons/obj/machines/cell_charger.dmi b/icons/obj/machines/cell_charger.dmi
index 5ce285fc81782..1082130dadb1e 100644
Binary files a/icons/obj/machines/cell_charger.dmi and b/icons/obj/machines/cell_charger.dmi differ
diff --git a/icons/obj/machines/kitchen.dmi b/icons/obj/machines/kitchen.dmi
index c94afb8d78ad6..2142125c5aa5c 100644
Binary files a/icons/obj/machines/kitchen.dmi and b/icons/obj/machines/kitchen.dmi differ
diff --git a/icons/obj/machines/lathes.dmi b/icons/obj/machines/lathes.dmi
index 0e7d91484216c..4a90132ae60a1 100644
Binary files a/icons/obj/machines/lathes.dmi and b/icons/obj/machines/lathes.dmi differ
diff --git a/icons/obj/medical/organs/organs.dmi b/icons/obj/medical/organs/organs.dmi
index 0d04f7fae3ce4..62a45426e186e 100644
Binary files a/icons/obj/medical/organs/organs.dmi and b/icons/obj/medical/organs/organs.dmi differ
diff --git a/icons/obj/service/bureaucracy.dmi b/icons/obj/service/bureaucracy.dmi
index e9f8347b0487b..b400b7aee8b72 100644
Binary files a/icons/obj/service/bureaucracy.dmi and b/icons/obj/service/bureaucracy.dmi differ
diff --git a/icons/obj/service/library.dmi b/icons/obj/service/library.dmi
index 79a06dd4b8f91..f9273a55e5530 100644
Binary files a/icons/obj/service/library.dmi and b/icons/obj/service/library.dmi differ
diff --git a/icons/obj/signs.dmi b/icons/obj/signs.dmi
index 78cc96fabbc13..a2069ba5d9d3b 100644
Binary files a/icons/obj/signs.dmi and b/icons/obj/signs.dmi differ
diff --git a/icons/obj/toys/balloons.dmi b/icons/obj/toys/balloons.dmi
index 96afdaea2c0ed..1e02ed072d79e 100644
Binary files a/icons/obj/toys/balloons.dmi and b/icons/obj/toys/balloons.dmi differ
diff --git a/icons/obj/wallmounts.dmi b/icons/obj/wallmounts.dmi
index e020a8818e186..e70024a9edb23 100644
Binary files a/icons/obj/wallmounts.dmi and b/icons/obj/wallmounts.dmi differ
diff --git a/icons/obj/weapons/guns/ammo.dmi b/icons/obj/weapons/guns/ammo.dmi
index 7554749a7e4be..e3a82a81cd31d 100644
Binary files a/icons/obj/weapons/guns/ammo.dmi and b/icons/obj/weapons/guns/ammo.dmi differ
diff --git a/icons/obj/weapons/guns/projectiles.dmi b/icons/obj/weapons/guns/projectiles.dmi
index 98a2e59dbc9c3..a13ebcc636009 100644
Binary files a/icons/obj/weapons/guns/projectiles.dmi and b/icons/obj/weapons/guns/projectiles.dmi differ
diff --git a/icons/obj/weapons/hand.dmi b/icons/obj/weapons/hand.dmi
index 5d8827e0a7b9b..071113138a7a5 100644
Binary files a/icons/obj/weapons/hand.dmi and b/icons/obj/weapons/hand.dmi differ
diff --git a/icons/obj/weapons/khopesh.dmi b/icons/obj/weapons/khopesh.dmi
index 95774e7f6c733..3c4ba40b34ac1 100644
Binary files a/icons/obj/weapons/khopesh.dmi and b/icons/obj/weapons/khopesh.dmi differ
diff --git a/icons/obj/weapons/sword.dmi b/icons/obj/weapons/sword.dmi
index ca819ffcc5136..d9a443cfc2699 100644
Binary files a/icons/obj/weapons/sword.dmi and b/icons/obj/weapons/sword.dmi differ
diff --git a/interface/skin.dmf b/interface/skin.dmf
index 3bfab58ea52a9..5f4fd5eda69c1 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -70,8 +70,8 @@ window "mainwindow"
menu = "menu"
elem "split"
type = CHILD
- pos = 3,0
- size = 634x440
+ pos = 0,0
+ size = 640x440
anchor1 = 0,0
anchor2 = 100,100
saved-params = "splitter"
@@ -159,58 +159,67 @@ window "infowindow"
is-vert = false
elem "changelog"
type = BUTTON
- pos = 16,5
- size = 104x20
- anchor1 = 3,0
- anchor2 = 19,0
+ pos = 5,5
+ size = 90x20
+ anchor1 = 1,0
+ anchor2 = 15,0
saved-params = "is-checked"
text = "Changelog"
command = "changelog"
elem "rules"
type = BUTTON
- pos = 120,5
- size = 100x20
- anchor1 = 19,0
- anchor2 = 34,0
+ pos = 95,5
+ size = 90x20
+ anchor1 = 15,0
+ anchor2 = 29,0
saved-params = "is-checked"
text = "Rules"
command = "rules"
elem "wiki"
type = BUTTON
- pos = 220,5
- size = 100x20
- anchor1 = 34,0
- anchor2 = 50,0
+ pos = 185,5
+ size = 90x20
+ anchor1 = 29,0
+ anchor2 = 43,0
saved-params = "is-checked"
text = "Wiki"
command = "wiki"
elem "forum"
type = BUTTON
- pos = 320,5
- size = 100x20
- anchor1 = 50,0
- anchor2 = 66,0
+ pos = 275,5
+ size = 90x20
+ anchor1 = 43,0
+ anchor2 = 57,0
saved-params = "is-checked"
text = "Forum"
command = "forum"
elem "github"
type = BUTTON
- pos = 420,5
- size = 100x20
- anchor1 = 66,0
- anchor2 = 81,0
+ pos = 365,5
+ size = 90x20
+ anchor1 = 57,0
+ anchor2 = 71,0
saved-params = "is-checked"
text = "Github"
command = "github"
elem "report-issue"
type = BUTTON
- pos = 520,5
- size = 100x20
- anchor1 = 81,0
- anchor2 = 97,0
+ pos = 455,5
+ size = 90x20
+ anchor1 = 71,0
+ anchor2 = 85,0
saved-params = "is-checked"
text = "Report Issue"
command = "report-issue"
+ elem "fullscreen-toggle"
+ type = BUTTON
+ pos = 545,5
+ size = 90x20
+ anchor1 = 85,0
+ anchor2 = 99,0
+ saved-params = "is-checked"
+ text = "Fullscreen"
+ command = "fullscreen"
window "outputwindow"
elem "outputwindow"
diff --git a/modular_bandastation/_defines220/code/signals_item.dm b/modular_bandastation/_defines220/code/signals_item.dm
index 815e17895d9f3..b6d7f92239339 100644
--- a/modular_bandastation/_defines220/code/signals_item.dm
+++ b/modular_bandastation/_defines220/code/signals_item.dm
@@ -1,2 +1,2 @@
-///from base of obj/item/stock_parts/cell/give(): (power_used)
-#define COMSIG_CELL_GIVE "cell_give"
+// /obj/item/stock_parts/power_store/give(): (amount)
+#define COMSIG_POWER_STORE_GIVE "power_store_give"
diff --git a/modular_bandastation/_signals220/code/signals_item.dm b/modular_bandastation/_signals220/code/signals_item.dm
index 918deb48a9187..9ada1ae6d6696 100644
--- a/modular_bandastation/_signals220/code/signals_item.dm
+++ b/modular_bandastation/_signals220/code/signals_item.dm
@@ -1,3 +1,3 @@
-/obj/item/stock_parts/cell/give(amount)
+/obj/item/stock_parts/power_store/give(amount)
. = ..()
- SEND_SIGNAL(src, COMSIG_CELL_GIVE, .)
+ SEND_SIGNAL(src, COMSIG_POWER_STORE_GIVE, .)
diff --git a/modular_bandastation/drinks/_drinks.dm b/modular_bandastation/drinks/_drinks.dm
new file mode 100644
index 0000000000000..945a7494fff9b
--- /dev/null
+++ b/modular_bandastation/drinks/_drinks.dm
@@ -0,0 +1,4 @@
+/datum/modpack/drinks
+ name = "Напитки"
+ desc = "Добавляет новые напитки"
+ author = "HardexZ"
diff --git a/modular_bandastation/drinks/_drinks.dme b/modular_bandastation/drinks/_drinks.dme
new file mode 100644
index 0000000000000..fc01683b4c707
--- /dev/null
+++ b/modular_bandastation/drinks/_drinks.dme
@@ -0,0 +1,3 @@
+#include "_drinks.dm"
+
+#include "code/drinks.dm"
diff --git a/modular_bandastation/drinks/code/drinks.dm b/modular_bandastation/drinks/code/drinks.dm
new file mode 100644
index 0000000000000..048c84b68df57
--- /dev/null
+++ b/modular_bandastation/drinks/code/drinks.dm
@@ -0,0 +1,25 @@
+/datum/reagent/consumable/kvass
+ name = "Квас"
+ description = "Напиток, приготовленный путем брожения хлеба, ржи или ячменя, который обладает освежающим и слегка кисловатым вкусом."
+ color = "#351300"
+ nutriment_factor = 1
+ taste_description = "a pleasant tartness with a hint of sweetness and a bread-like aftertaste."
+
+/datum/glass_style/drinking_glass/kvass
+ required_drink_type = /datum/reagent/consumable/kvass
+ name = "стакан кваса"
+ desc = "В стакане кристально чистая жидкость насыщенного темно-коричневого цвета, которая кажется почти янтарной при определенном угле освещения."
+ icon = 'modular_bandastation/drinks/icons/drinks.dmi'
+ icon_state = "kvass"
+
+/datum/export/large/reagent_dispenser/kvass
+ unit_name = "kvasstank"
+ export_types = list(/obj/structure/reagent_dispensers/kvasstank)
+
+/obj/structure/reagent_dispensers/kvasstank
+ name = "бочка кваса"
+ desc = "Ярко-желтая бочка с квасом, которая сразу привлекает внимание своим насыщенным цветом. Она выполнена в классическом стиле, из толстого, прочного металла с гладкой, блестящей поверхностью. Бочка имеет цилиндрическую форму, слегка расширяясь к середине и снова сужаясь к краям."
+ icon = 'modular_bandastation/drinks/icons/chemical_tanks.dmi'
+ icon_state = "kvass"
+ reagent_id = /datum/reagent/consumable/kvass
+ openable = TRUE
diff --git a/modular_bandastation/drinks/icons/chemical_tanks.dmi b/modular_bandastation/drinks/icons/chemical_tanks.dmi
new file mode 100644
index 0000000000000..4ef5653be309a
Binary files /dev/null and b/modular_bandastation/drinks/icons/chemical_tanks.dmi differ
diff --git a/modular_bandastation/drinks/icons/drinks.dmi b/modular_bandastation/drinks/icons/drinks.dmi
new file mode 100644
index 0000000000000..c84f9a1ae5ae1
Binary files /dev/null and b/modular_bandastation/drinks/icons/drinks.dmi differ
diff --git a/modular_bandastation/gunhud/code/gunhud_component.dm b/modular_bandastation/gunhud/code/gunhud_component.dm
index 8f89869cdf875..0ccc9a22e9d6a 100644
--- a/modular_bandastation/gunhud/code/gunhud_component.dm
+++ b/modular_bandastation/gunhud/code/gunhud_component.dm
@@ -31,7 +31,7 @@
if(istype(parent, /obj/item/gun/energy))
var/obj/item/gun/energy/energy_gun = parent
if(energy_gun.cell)
- RegisterSignal(energy_gun.cell, COMSIG_CELL_GIVE, PROC_REF(update_hud))
+ RegisterSignal(energy_gun.cell, COMSIG_POWER_STORE_GIVE, PROC_REF(update_hud))
hud.turn_on()
update_hud()
@@ -43,7 +43,7 @@
if(istype(parent, /obj/item/gun/energy))
var/obj/item/gun/energy/energy_gun = parent
if(energy_gun.cell)
- UnregisterSignal(energy_gun.cell, COMSIG_CELL_GIVE)
+ UnregisterSignal(energy_gun.cell, COMSIG_POWER_STORE_GIVE)
if(hud)
hud.turn_off()
diff --git a/modular_bandastation/modular_bandastation.dme b/modular_bandastation/modular_bandastation.dme
index 6d9df55a55547..74123237dfc0d 100644
--- a/modular_bandastation/modular_bandastation.dme
+++ b/modular_bandastation/modular_bandastation.dme
@@ -25,4 +25,5 @@
#include "whitelist220/_whitelist220.dme"
#include "world_topics/_world_topics.dme"
#include "preferences/_preferences.dme"
+#include "drinks/_drinks.dme"
#include "species/_species.dme"
diff --git a/sound/ambience/antag/ayylien.ogg b/sound/ambience/antag/ayylien.ogg
new file mode 100644
index 0000000000000..cfcb748fd775d
Binary files /dev/null and b/sound/ambience/antag/ayylien.ogg differ
diff --git a/sound/attributions.txt b/sound/attributions.txt
index bcd6f41edf278..1934edd9453d0 100644
--- a/sound/attributions.txt
+++ b/sound/attributions.txt
@@ -188,3 +188,15 @@ https://freesound.org/people/BinaryMonkFlint/sounds/333296/
tank_remove_thunk.ogg was made by mixing two sound tracks from Freesound:
https://freesound.org/people/lowdjinn/sounds/533885/ and;
https://freesound.org/people/BMacZero/sounds/96137/
+
+valve_opening.ogg was made by mixing water flowing samples from:
+https://freesound.org/people/scriotxstudios/sounds/349111/?attribution=1 and squeaky scrape sound from:
+https://freesound.org/people/Department64/sounds/669028/ which was modified with lower pitch
+
+liquid_pour2.ogg and liquid_pour3.ogg were cut from
+https://freesound.org/people/MattRuthSound/sounds/561896/
+https://freesound.org/people/MattRuthSound/sounds/561895/
+
+ayylien.ogg was made by remixing:
+SCIRetro_Energy Swells Synth_Funky Audio_Sonics Spices by Funky_Audio under CC0 -- https://freesound.org/people/realtheremin/sounds/119011/
+scifi_scare_a.aiff by realtheremin under CC0 -- https://freesound.org/people/Funky_Audio/sounds/729392/
diff --git a/sound/effects/gas_hissing.ogg b/sound/effects/gas_hissing.ogg
new file mode 100644
index 0000000000000..58df62ef0842f
Binary files /dev/null and b/sound/effects/gas_hissing.ogg differ
diff --git a/sound/effects/glug.ogg b/sound/effects/glug.ogg
new file mode 100644
index 0000000000000..268ff4557e8e6
Binary files /dev/null and b/sound/effects/glug.ogg differ
diff --git a/sound/effects/liquid_pour1.ogg b/sound/effects/liquid_pour1.ogg
new file mode 100644
index 0000000000000..71e57ad19f7ef
Binary files /dev/null and b/sound/effects/liquid_pour1.ogg differ
diff --git a/sound/effects/liquid_pour2.ogg b/sound/effects/liquid_pour2.ogg
new file mode 100644
index 0000000000000..773b30e59e5c0
Binary files /dev/null and b/sound/effects/liquid_pour2.ogg differ
diff --git a/sound/effects/liquid_pour3.ogg b/sound/effects/liquid_pour3.ogg
new file mode 100644
index 0000000000000..0548d7b14a4ed
Binary files /dev/null and b/sound/effects/liquid_pour3.ogg differ
diff --git a/sound/effects/valve_opening.ogg b/sound/effects/valve_opening.ogg
new file mode 100644
index 0000000000000..9e71912041467
Binary files /dev/null and b/sound/effects/valve_opening.ogg differ
diff --git a/sound/items/eshield_recharge.ogg b/sound/items/eshield_recharge.ogg
new file mode 100644
index 0000000000000..747ad4563e5c1
Binary files /dev/null and b/sound/items/eshield_recharge.ogg differ
diff --git a/sound/items/internals_off.ogg b/sound/items/internals_off.ogg
new file mode 100644
index 0000000000000..7336ec41d6144
Binary files /dev/null and b/sound/items/internals_off.ogg differ
diff --git a/sound/items/internals_on.ogg b/sound/items/internals_on.ogg
new file mode 100644
index 0000000000000..2a08a916d2f0b
Binary files /dev/null and b/sound/items/internals_on.ogg differ
diff --git a/sound/machines/attributions.txt b/sound/machines/attributions.txt
new file mode 100644
index 0000000000000..b459be3d3e158
--- /dev/null
+++ b/sound/machines/attributions.txt
@@ -0,0 +1 @@
+sound/machines/lathe/lathe_print.ogg - made by kayozzx (discord) , license: CCbySA
diff --git a/sound/machines/lathe/lathe_print.ogg b/sound/machines/lathe/lathe_print.ogg
new file mode 100644
index 0000000000000..eace2da907558
Binary files /dev/null and b/sound/machines/lathe/lathe_print.ogg differ
diff --git a/sound/voice/firebot/candle_tip.ogg b/sound/voice/firebot/candle_tip.ogg
new file mode 100644
index 0000000000000..0f29f18e3f969
Binary files /dev/null and b/sound/voice/firebot/candle_tip.ogg differ
diff --git a/sound/voice/firebot/electric_fire_tip.ogg b/sound/voice/firebot/electric_fire_tip.ogg
new file mode 100644
index 0000000000000..29910024b1995
Binary files /dev/null and b/sound/voice/firebot/electric_fire_tip.ogg differ
diff --git a/sound/voice/firebot/gasoline_tip.ogg b/sound/voice/firebot/gasoline_tip.ogg
new file mode 100644
index 0000000000000..838c0d267e65e
Binary files /dev/null and b/sound/voice/firebot/gasoline_tip.ogg differ
diff --git a/strings/heckacious.json b/strings/heckacious.json
new file mode 100644
index 0000000000000..1d43f0bfaffee
--- /dev/null
+++ b/strings/heckacious.json
@@ -0,0 +1,98 @@
+{
+ "heckacious": {
+ "your": "youre",
+ "fucking": "banging",
+ "economy": "econony",
+ "know": "no",
+ "ing": "in",
+ "they are": "there",
+ "sometimes": "some times",
+ "do": "does",
+ "hug": "bro hug bump",
+ "we're": "where",
+ "game": "big game",
+ "has": "hass",
+ "downtown": "down town",
+ "jimmy": "geromy",
+ "jeremy": "geromy",
+ "anywhere": "anywear",
+ "smoking": "toking up",
+ "lying": "lyong",
+ "AH": "AUGH",
+ "distraction": "distaction",
+ "lie": "ruse",
+ "angle": "angel",
+ "drink": "pour",
+ "the": "thef",
+ "backward": [ "back ward", "awayways" ],
+ "god damn": "GOD DAMN",
+ "goddamn": "GOD DAMN",
+ "trick": "dunk",
+ "impossible": "unreal",
+ "court": "coart",
+ "holding": "holdung",
+ "reverse": "flip",
+ "inverse": "flip",
+ "around": "turn-ways",
+ "difference": "differance",
+ "values": "vaules",
+ "inside": "insine",
+ "pipe": "punpe",
+ "suspicious": "plot thicken",
+ "awesome": "hella",
+ "reference": "refrance",
+ "amazing": "fucking incredible",
+ "woman": "wonan",
+ "god": "gog",
+ "bible": "bibble",
+ "jesus": "jescus",
+ "christ": [ "chris", "dick" ],
+ "sigh": "sign",
+ "bathroom": "banthroom",
+ "remember": "remender",
+ "night": "nite",
+ "nachos": "nachoes",
+ "nacho": "nancho",
+ "dorito": "nancho",
+ "party": "panty",
+ "dumbass": "dumpass",
+ "they": "their",
+ "okay": "ohh kayy",
+ "stupid": "stutid",
+ "reagent": "regent",
+ "idiot": "fuckass",
+ "awful": "conksuck",
+ "moron": "PIECE OF SHIT",
+ "more": "wider",
+ "serious": "keeping it real",
+ "extreme": "x-treme",
+ "guaranteed": "garganted",
+ "black": "blapck",
+ "glow": "glowns",
+ "deadly": "deudly",
+ "flying": "lifdoff",
+ "cloud": "cloun",
+ "seeing": "scoping",
+ "great": "choice",
+ "look": "lonk",
+ "shit": "balls warmed oveur",
+ "battery": "babbery",
+ "retard": "dicktard",
+ "gay": "homo",
+ "close": "closte",
+ "wrong": "wrog",
+ "who": "whoof",
+ "new": "newd",
+ "holy": "hopy",
+ "um": "unm",
+ "horse": "hornse",
+ "this": "thits",
+ "then": "than",
+ "quick": "soon",
+ "bro": [ "brah", "bro" ],
+ "dude": [ "duge", "bro", "brah" ],
+ "'": [ "'", "" ],
+ "i'm": [ "im", "i am" ],
+ "he's": [ "hes", "he is", "he'ss" ]
+ }
+}
diff --git a/strings/names/hackers.txt b/strings/names/hackers.txt
new file mode 100644
index 0000000000000..e2722fb09fd21
--- /dev/null
+++ b/strings/names/hackers.txt
@@ -0,0 +1,46 @@
+Ne0Phyte
+CipherX
+Gh0stWire
+L33tByt3
+Vortex9
+Syn4pse
+DarkMatt3r
+QuantumDr1ft
+Crash0verr1de
+Z3r0C00l
+NyxShad0w
+Gl1tchR3aper
+CryptoWra1th
+Raz0rEdge
+VoidWalk3r
+Neur0mancer
+EchoH3xx
+DataSt0rm
+CyberS1ren
+Rogu3Protocol
+Nexu5Prim3
+CircuitBr3aker
+EnigmaPulse
+PhantomBit
+FluxC4pac1tor
+OmegaC0dec
+Ne0nRon1n
+Senpa1Sw1pe
+MechaM0chii
+SakuraSn1per
+WaifuWarri0r
+KatanaKid99
+xXDarkL0rd69Xx
+H4xx0rNinja
+CyberNinja1337
+Ub3r1337Sk1llz
+PhrEaK420
+IRCWizard69
+EliteWar3zKing
+Y2KPwn3r
+BBSPh34r
+BlackWill0w69
+2038Pr0blem
+Sp4ceW1nd
+B0bbyT4bles
+C0deInjector
diff --git a/strings/tips.txt b/strings/tips.txt
index 8cccfe6953bb0..7d5f9f82ccc2e 100644
--- a/strings/tips.txt
+++ b/strings/tips.txt
@@ -286,3 +286,6 @@ You'll quickly lose your interest in the game if you play to win and kill. If yo
Some areas of the station use simple nautical directions to indicate their respective locations, like Fore (Front of the ship), Aft (Back), Port (Left side), Starboard (Right), Quarter and Bow (Either sides of Aft and Fore, respectively). You can review these terms on the Notepad App of your PDA.
Modular computers are compatible with integrated circuits, but most of the program-dependent circuits require them to be open/backgrounded to work. To install circuits on stationary consoles, you need to toggle interaction with the frame with right-click first.
You don't need to destroy a Spacecoin machine to make your funds stop draining. Swiping your ID on it will stop the withdrawal.
+As a Bitrunner, upgrading your quantum server will increase rewards and reduce downtime.
+As a Bitrunner, your avatar has a domain info ability which will give you clues to help complete virtual domains.
+Bitrunning is a crime.
diff --git a/tgstation.dme b/tgstation.dme
index e467ab9484891..7cc15206ec9f2 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -388,6 +388,7 @@
#include "code\__DEFINES\research\anomalies.dm"
#include "code\__DEFINES\research\research_categories.dm"
#include "code\__DEFINES\research\slimes.dm"
+#include "code\__DEFINES\research\techweb_nodes.dm"
#include "code\__DEFINES\traits\_traits.dm"
#include "code\__DEFINES\traits\declarations.dm"
#include "code\__DEFINES\traits\macros.dm"
@@ -989,6 +990,7 @@
#include "code\datums\atmosphere\planetary.dm"
#include "code\datums\bodypart_overlays\bodypart_overlay.dm"
#include "code\datums\bodypart_overlays\emote_bodypart_overlay.dm"
+#include "code\datums\bodypart_overlays\markings_bodypart_overlay.dm"
#include "code\datums\bodypart_overlays\mutant_bodypart_overlay.dm"
#include "code\datums\bodypart_overlays\simple_bodypart_overlay.dm"
#include "code\datums\brain_damage\brain_trauma.dm"
@@ -1014,6 +1016,7 @@
#include "code\datums\components\ai_has_target_timer.dm"
#include "code\datums\components\ai_listen_to_weather.dm"
#include "code\datums\components\ai_retaliate_advanced.dm"
+#include "code\datums\components\amputating_limbs.dm"
#include "code\datums\components\anti_magic.dm"
#include "code\datums\components\appearance_on_aggro.dm"
#include "code\datums\components\aquarium_content.dm"
@@ -1370,7 +1373,6 @@
#include "code\datums\elements\ai_retaliate.dm"
#include "code\datums\elements\ai_swap_combat_mode.dm"
#include "code\datums\elements\ai_target_damagesource.dm"
-#include "code\datums\elements\amputating_limbs.dm"
#include "code\datums\elements\animal_variety.dm"
#include "code\datums\elements\art.dm"
#include "code\datums\elements\atmos_requirements.dm"
@@ -1456,6 +1458,7 @@
#include "code\datums\elements\kneejerk.dm"
#include "code\datums\elements\knockback.dm"
#include "code\datums\elements\lazy_fishing_spot.dm"
+#include "code\datums\elements\leeching_walk.dm"
#include "code\datums\elements\lifesteal.dm"
#include "code\datums\elements\light_blocking.dm"
#include "code\datums\elements\light_eaten.dm"
@@ -1641,6 +1644,7 @@
#include "code\datums\mood_events\needs_events.dm"
#include "code\datums\mutations\_combined.dm"
#include "code\datums\mutations\_mutations.dm"
+#include "code\datums\mutations\active.dm"
#include "code\datums\mutations\adaptation.dm"
#include "code\datums\mutations\antenna.dm"
#include "code\datums\mutations\autotomy.dm"
@@ -1648,13 +1652,14 @@
#include "code\datums\mutations\chameleon.dm"
#include "code\datums\mutations\cold.dm"
#include "code\datums\mutations\fire_breath.dm"
+#include "code\datums\mutations\hot.dm"
#include "code\datums\mutations\hulk.dm"
#include "code\datums\mutations\olfaction.dm"
#include "code\datums\mutations\passive.dm"
#include "code\datums\mutations\radioactive.dm"
+#include "code\datums\mutations\reach.dm"
#include "code\datums\mutations\sight.dm"
#include "code\datums\mutations\speech.dm"
-#include "code\datums\mutations\telekinesis.dm"
#include "code\datums\mutations\telepathy.dm"
#include "code\datums\mutations\tongue_spike.dm"
#include "code\datums\mutations\touch.dm"
@@ -1853,6 +1858,7 @@
#include "code\datums\status_effects\debuffs\slime\slime_leech.dm"
#include "code\datums\status_effects\debuffs\slime\slimed.dm"
#include "code\datums\storage\storage.dm"
+#include "code\datums\storage\storage_interface.dm"
#include "code\datums\storage\subtypes\backpack.dm"
#include "code\datums\storage\subtypes\bag_of_holding.dm"
#include "code\datums\storage\subtypes\cards.dm"
@@ -3045,7 +3051,6 @@
#include "code\modules\antagonists\clown_ops\clownop.dm"
#include "code\modules\antagonists\clown_ops\outfits.dm"
#include "code\modules\antagonists\cult\blood_magic.dm"
-#include "code\modules\antagonists\cult\cult_bastard_sword.dm"
#include "code\modules\antagonists\cult\cult_comms.dm"
#include "code\modules\antagonists\cult\cult_items.dm"
#include "code\modules\antagonists\cult\cult_objectives.dm"
@@ -3058,6 +3063,7 @@
#include "code\modules\antagonists\cult\cult_turf_overlay.dm"
#include "code\modules\antagonists\cult\rune_spawn_action.dm"
#include "code\modules\antagonists\cult\runes.dm"
+#include "code\modules\antagonists\cult\sword_fling.dm"
#include "code\modules\antagonists\cult\datums\constructs.dm"
#include "code\modules\antagonists\cult\datums\cult_team.dm"
#include "code\modules\antagonists\cult\datums\cultist.dm"
@@ -3080,6 +3086,7 @@
#include "code\modules\antagonists\heretic\knife_effect.dm"
#include "code\modules\antagonists\heretic\moon_lunatic.dm"
#include "code\modules\antagonists\heretic\rust_effect.dm"
+#include "code\modules\antagonists\heretic\soultrapped_heretic.dm"
#include "code\modules\antagonists\heretic\transmutation_rune.dm"
#include "code\modules\antagonists\heretic\items\corrupted_organs.dm"
#include "code\modules\antagonists\heretic\items\eldritch_flask.dm"
@@ -3534,7 +3541,6 @@
#include "code\modules\bitrunning\virtual_domain\domains\psyker_shuffle.dm"
#include "code\modules\bitrunning\virtual_domain\domains\psyker_zombies.dm"
#include "code\modules\bitrunning\virtual_domain\domains\stairs_and_cliffs.dm"
-#include "code\modules\bitrunning\virtual_domain\domains\starfront_saloon.dm"
#include "code\modules\bitrunning\virtual_domain\domains\syndicate_assault.dm"
#include "code\modules\bitrunning\virtual_domain\domains\test_only.dm"
#include "code\modules\bitrunning\virtual_domain\domains\vaporwave.dm"
@@ -3591,6 +3597,7 @@
#include "code\modules\cargo\universal_scanner.dm"
#include "code\modules\cargo\bounties\assistant.dm"
#include "code\modules\cargo\bounties\atmos.dm"
+#include "code\modules\cargo\bounties\bitrunning.dm"
#include "code\modules\cargo\bounties\botany.dm"
#include "code\modules\cargo\bounties\chef.dm"
#include "code\modules\cargo\bounties\engineering.dm"
@@ -4048,6 +4055,7 @@
#include "code\modules\experisci\experiment\types\scanning_people.dm"
#include "code\modules\experisci\experiment\types\scanning_plants.dm"
#include "code\modules\experisci\experiment\types\scanning_points.dm"
+#include "code\modules\experisci\experiment\types\scanning_reagent.dm"
#include "code\modules\experisci\experiment\types\scanning_vatgrown.dm"
#include "code\modules\explorer_drone\adventure.dm"
#include "code\modules\explorer_drone\control_console.dm"
@@ -4658,6 +4666,8 @@
#include "code\modules\mob\living\basic\bots\cleanbot\cleanbot.dm"
#include "code\modules\mob\living\basic\bots\cleanbot\cleanbot_abilities.dm"
#include "code\modules\mob\living\basic\bots\cleanbot\cleanbot_ai.dm"
+#include "code\modules\mob\living\basic\bots\firebot\firebot.dm"
+#include "code\modules\mob\living\basic\bots\firebot\firebot_ai.dm"
#include "code\modules\mob\living\basic\bots\honkbots\honkbot.dm"
#include "code\modules\mob\living\basic\bots\honkbots\honkbot_abilities.dm"
#include "code\modules\mob\living\basic\bots\honkbots\honkbot_ai.dm"
@@ -4665,6 +4675,9 @@
#include "code\modules\mob\living\basic\bots\hygienebot\hygienebot_ai.dm"
#include "code\modules\mob\living\basic\bots\medbot\medbot.dm"
#include "code\modules\mob\living\basic\bots\medbot\medbot_ai.dm"
+#include "code\modules\mob\living\basic\bots\vibebot\vibebot.dm"
+#include "code\modules\mob\living\basic\bots\vibebot\vibebot_abilities.dm"
+#include "code\modules\mob\living\basic\bots\vibebot\vibebot_ai.dm"
#include "code\modules\mob\living\basic\clown\clown.dm"
#include "code\modules\mob\living\basic\clown\clown_ai.dm"
#include "code\modules\mob\living\basic\cult\shade.dm"
@@ -4957,9 +4970,10 @@
#include "code\modules\mob\living\basic\vermin\crab.dm"
#include "code\modules\mob\living\basic\vermin\frog.dm"
#include "code\modules\mob\living\basic\vermin\lizard.dm"
-#include "code\modules\mob\living\basic\vermin\mothroach.dm"
#include "code\modules\mob\living\basic\vermin\mouse.dm"
#include "code\modules\mob\living\basic\vermin\space_bat.dm"
+#include "code\modules\mob\living\basic\vermin\mothroach\mothroach.dm"
+#include "code\modules\mob\living\basic\vermin\mothroach\mothroach_ai.dm"
#include "code\modules\mob\living\brain\brain.dm"
#include "code\modules\mob\living\brain\brain_cybernetic.dm"
#include "code\modules\mob\living\brain\brain_item.dm"
@@ -5109,12 +5123,10 @@
#include "code\modules\mob\living\simple_animal\bot\bot_announcement.dm"
#include "code\modules\mob\living\simple_animal\bot\construction.dm"
#include "code\modules\mob\living\simple_animal\bot\ed209bot.dm"
-#include "code\modules\mob\living\simple_animal\bot\firebot.dm"
#include "code\modules\mob\living\simple_animal\bot\floorbot.dm"
#include "code\modules\mob\living\simple_animal\bot\mulebot.dm"
#include "code\modules\mob\living\simple_animal\bot\secbot.dm"
#include "code\modules\mob\living\simple_animal\bot\SuperBeepsky.dm"
-#include "code\modules\mob\living\simple_animal\bot\vibebot.dm"
#include "code\modules\mob\living\simple_animal\hostile\dark_wizard.dm"
#include "code\modules\mob\living\simple_animal\hostile\hostile.dm"
#include "code\modules\mob\living\simple_animal\hostile\illusion.dm"
@@ -5252,6 +5264,7 @@
#include "code\modules\modular_computers\file_system\programs\chatroom\ntnrc_client.dm"
#include "code\modules\modular_computers\file_system\programs\maintenance\_maintenance_program.dm"
#include "code\modules\modular_computers\file_system\programs\maintenance\camera.dm"
+#include "code\modules\modular_computers\file_system\programs\maintenance\cool_sword.dm"
#include "code\modules\modular_computers\file_system\programs\maintenance\modsuit.dm"
#include "code\modules\modular_computers\file_system\programs\maintenance\phys_scanner.dm"
#include "code\modules\modular_computers\file_system\programs\maintenance\spectre_meter.dm"
@@ -5331,6 +5344,7 @@
#include "code\modules\plumbing\plumbers\teleporter.dm"
#include "code\modules\plumbing\plumbers\vatgrower.dm"
#include "code\modules\point\point.dm"
+#include "code\modules\power\battery.dm"
#include "code\modules\power\cable.dm"
#include "code\modules\power\cell.dm"
#include "code\modules\power\energy_accumulator.dm"
@@ -5341,6 +5355,7 @@
#include "code\modules\power\pipecleaners.dm"
#include "code\modules\power\port_gen.dm"
#include "code\modules\power\power.dm"
+#include "code\modules\power\power_store.dm"
#include "code\modules\power\powernet.dm"
#include "code\modules\power\rtg.dm"
#include "code\modules\power\smes.dm"
@@ -5361,12 +5376,12 @@
#include "code\modules\power\lighting\light_items.dm"
#include "code\modules\power\lighting\light_mapping_helpers.dm"
#include "code\modules\power\lighting\light_wallframes.dm"
-#include "code\modules\power\singularity\boh_tear.dm"
#include "code\modules\power\singularity\containment_field.dm"
#include "code\modules\power\singularity\dark_matter_singularity.dm"
#include "code\modules\power\singularity\emitter.dm"
#include "code\modules\power\singularity\field_generator.dm"
#include "code\modules\power\singularity\narsie.dm"
+#include "code\modules\power\singularity\reality_tear.dm"
#include "code\modules\power\singularity\singularity.dm"
#include "code\modules\power\supermatter\supermatter.dm"
#include "code\modules\power\supermatter\supermatter_extra_effects.dm"
@@ -5678,8 +5693,24 @@
#include "code\modules\research\techweb\__techweb_helpers.dm"
#include "code\modules\research\techweb\_techweb.dm"
#include "code\modules\research\techweb\_techweb_node.dm"
-#include "code\modules\research\techweb\all_nodes.dm"
#include "code\modules\research\techweb\techweb_types.dm"
+#include "code\modules\research\techweb\nodes\alien_nodes.dm"
+#include "code\modules\research\techweb\nodes\atmos_nodes.dm"
+#include "code\modules\research\techweb\nodes\bepis_nodes.dm"
+#include "code\modules\research\techweb\nodes\biology_nodes.dm"
+#include "code\modules\research\techweb\nodes\circuit_nodes.dm"
+#include "code\modules\research\techweb\nodes\cyborg_nodes.dm"
+#include "code\modules\research\techweb\nodes\engi_nodes.dm"
+#include "code\modules\research\techweb\nodes\mech_nodes.dm"
+#include "code\modules\research\techweb\nodes\medbay_nodes.dm"
+#include "code\modules\research\techweb\nodes\mining_nodes.dm"
+#include "code\modules\research\techweb\nodes\modsuit_nodes.dm"
+#include "code\modules\research\techweb\nodes\research_nodes.dm"
+#include "code\modules\research\techweb\nodes\robo_nodes.dm"
+#include "code\modules\research\techweb\nodes\security_nodes.dm"
+#include "code\modules\research\techweb\nodes\service_nodes.dm"
+#include "code\modules\research\techweb\nodes\surgery_nodes.dm"
+#include "code\modules\research\techweb\nodes\syndicate_nodes.dm"
#include "code\modules\research\xenobiology\xenobio_camera.dm"
#include "code\modules\research\xenobiology\xenobiology.dm"
#include "code\modules\research\xenobiology\crossbreeding\__corecross.dm"
@@ -5879,6 +5910,7 @@
#include "code\modules\surgery\advanced\bioware\vein_threading.dm"
#include "code\modules\surgery\bodyparts\_bodyparts.dm"
#include "code\modules\surgery\bodyparts\dismemberment.dm"
+#include "code\modules\surgery\bodyparts\ghetto_parts.dm"
#include "code\modules\surgery\bodyparts\head.dm"
#include "code\modules\surgery\bodyparts\head_hair_and_lips.dm"
#include "code\modules\surgery\bodyparts\helpers.dm"
@@ -5913,6 +5945,7 @@
#include "code\modules\surgery\organs\internal\ears\_ears.dm"
#include "code\modules\surgery\organs\internal\eyes\_eyes.dm"
#include "code\modules\surgery\organs\internal\heart\_heart.dm"
+#include "code\modules\surgery\organs\internal\heart\heart_anomalock.dm"
#include "code\modules\surgery\organs\internal\heart\heart_ethereal.dm"
#include "code\modules\surgery\organs\internal\liver\_liver.dm"
#include "code\modules\surgery\organs\internal\liver\liver_golem.dm"
diff --git a/tgui/packages/tgui-panel/themes.ts b/tgui/packages/tgui-panel/themes.ts
index d8f0ce50b7974..67061ff1f4cf1 100644
--- a/tgui/packages/tgui-panel/themes.ts
+++ b/tgui/packages/tgui-panel/themes.ts
@@ -57,6 +57,8 @@ export const setClientTheme = (name) => {
'github.text-color': '#000000',
'report-issue.background-color': 'none',
'report-issue.text-color': '#000000',
+ 'fullscreen-toggle.background-color': 'none',
+ 'fullscreen-toggle.text-color': '#000000',
// Status and verb tabs
'output.background-color': 'none',
'output.text-color': '#000000',
@@ -109,6 +111,8 @@ export const setClientTheme = (name) => {
'github.text-color': COLOR_DARK_TEXT,
'report-issue.background-color': '#492020',
'report-issue.text-color': COLOR_DARK_TEXT,
+ 'fullscreen-toggle.background-color': '#494949',
+ 'fullscreen-toggle.text-color': COLOR_DARK_TEXT,
// Status and verb tabs
'output.background-color': COLOR_DARK_BG_DARKER,
'output.text-color': COLOR_DARK_TEXT,
diff --git a/tgui/packages/tgui-say/TguiSay.tsx b/tgui/packages/tgui-say/TguiSay.tsx
index d5b45f4d75f0f..34afaed1ff2d8 100644
--- a/tgui/packages/tgui-say/TguiSay.tsx
+++ b/tgui/packages/tgui-say/TguiSay.tsx
@@ -162,7 +162,7 @@ export class TguiSay extends Component<{}, State> {
? prefix + currentValue
: currentValue;
- this.messages.forceSayMsg(grunt);
+ this.messages.forceSayMsg(grunt, this.channelIterator.current());
this.reset();
}
@@ -274,6 +274,7 @@ export class TguiSay extends Component<{}, State> {
};
reset() {
+ this.currentPrefix = null;
this.setValue('');
this.setSize();
this.setState({
diff --git a/tgui/packages/tgui-say/timers.ts b/tgui/packages/tgui-say/timers.ts
index 85c58f7424ae9..d1388487c07c6 100644
--- a/tgui/packages/tgui-say/timers.ts
+++ b/tgui/packages/tgui-say/timers.ts
@@ -1,5 +1,7 @@
import { debounce, throttle } from 'common/timer';
+import { Channel } from './ChannelIterator';
+
const SECONDS = 1000;
/** Timers: Prevents overloading the server, throttles messages */
@@ -10,7 +12,8 @@ export const byondMessages = {
0.4 * SECONDS,
),
forceSayMsg: debounce(
- (entry: string) => Byond.sendMessage('force', { entry, channel: 'Say' }),
+ (entry: string, channel: Channel) =>
+ Byond.sendMessage('force', { entry, channel }),
1 * SECONDS,
true,
),
diff --git a/tgui/packages/tgui/interfaces/AccountingConsole.tsx b/tgui/packages/tgui/interfaces/AccountingConsole.tsx
index f737234fc6a6c..92124bc38ef02 100644
--- a/tgui/packages/tgui/interfaces/AccountingConsole.tsx
+++ b/tgui/packages/tgui/interfaces/AccountingConsole.tsx
@@ -1,7 +1,5 @@
import { BooleanLike } from 'common/react';
import { useState } from 'react';
-
-import { useBackend } from '../backend';
import {
BlockQuote,
Collapsible,
@@ -9,7 +7,9 @@ import {
Section,
Stack,
Tabs,
-} from '../components';
+} from 'tgui-core/components';
+
+import { useBackend } from '../backend';
import { Window } from '../layouts';
type Data = {
diff --git a/tgui/packages/tgui/interfaces/AirAlarm.tsx b/tgui/packages/tgui/interfaces/AirAlarm.tsx
index bacfe259fe182..448d233d36839 100644
--- a/tgui/packages/tgui/interfaces/AirAlarm.tsx
+++ b/tgui/packages/tgui/interfaces/AirAlarm.tsx
@@ -1,7 +1,5 @@
import { BooleanLike } from 'common/react';
import { Fragment } from 'react';
-
-import { useBackend, useLocalState } from '../backend';
import {
Box,
Button,
@@ -11,7 +9,9 @@ import {
Section,
Table,
VirtualList,
-} from '../components';
+} from 'tgui-core/components';
+
+import { useBackend, useLocalState } from '../backend';
import { Window } from '../layouts';
import {
Scrubber,
diff --git a/tgui/packages/tgui/interfaces/Autolathe.tsx b/tgui/packages/tgui/interfaces/Autolathe.tsx
index cf110806830fc..67f707476fe83 100644
--- a/tgui/packages/tgui/interfaces/Autolathe.tsx
+++ b/tgui/packages/tgui/interfaces/Autolathe.tsx
@@ -1,7 +1,5 @@
import { BooleanLike, classes } from 'common/react';
import { capitalize } from 'common/string';
-
-import { useBackend } from '../backend';
import {
Box,
Button,
@@ -12,7 +10,9 @@ import {
Section,
Stack,
Tooltip,
-} from '../components';
+} from 'tgui-core/components';
+
+import { useBackend } from '../backend';
import { Window } from '../layouts';
import { DesignBrowser } from './Fabrication/DesignBrowser';
import { MaterialCostSequence } from './Fabrication/MaterialCostSequence';
diff --git a/tgui/packages/tgui/interfaces/CameraConsole.tsx b/tgui/packages/tgui/interfaces/CameraConsole.tsx
index 3dafe1240dfe3..f28c308f1b5b5 100644
--- a/tgui/packages/tgui/interfaces/CameraConsole.tsx
+++ b/tgui/packages/tgui/interfaces/CameraConsole.tsx
@@ -2,8 +2,6 @@ import { filter, sort } from 'common/collections';
import { BooleanLike, classes } from 'common/react';
import { createSearch } from 'common/string';
import { useState } from 'react';
-
-import { useBackend } from '../backend';
import {
Button,
ByondUi,
@@ -11,7 +9,9 @@ import {
NoticeBox,
Section,
Stack,
-} from '../components';
+} from 'tgui-core/components';
+
+import { useBackend } from '../backend';
import { Window } from '../layouts';
type Data = {
diff --git a/tgui/packages/tgui/interfaces/ChemDispenser.tsx b/tgui/packages/tgui/interfaces/ChemDispenser.tsx
index 2bb50df59de26..3e0174a3b2f54 100644
--- a/tgui/packages/tgui/interfaces/ChemDispenser.tsx
+++ b/tgui/packages/tgui/interfaces/ChemDispenser.tsx
@@ -1,8 +1,6 @@
import { BooleanLike } from 'common/react';
import { toTitleCase } from 'common/string';
import { useState } from 'react';
-
-import { useBackend } from '../backend';
import {
Box,
Button,
@@ -10,7 +8,9 @@ import {
LabeledList,
ProgressBar,
Section,
-} from '../components';
+} from 'tgui-core/components';
+
+import { useBackend } from '../backend';
import { Window } from '../layouts';
import { Beaker, BeakerDisplay } from './common/BeakerDisplay';
diff --git a/tgui/packages/tgui/interfaces/CrewConsole.tsx b/tgui/packages/tgui/interfaces/CrewConsole.tsx
index 52af3eaff4320..7394d9964fde6 100644
--- a/tgui/packages/tgui/interfaces/CrewConsole.tsx
+++ b/tgui/packages/tgui/interfaces/CrewConsole.tsx
@@ -1,9 +1,9 @@
import { BooleanLike } from 'common/react';
import { createSearch } from 'common/string';
import { useState } from 'react';
+import { Box, Button, Icon, Input, Section, Table } from 'tgui-core/components';
import { useBackend } from '../backend';
-import { Box, Button, Icon, Input, Section, Table } from '../components';
import { COLORS } from '../constants';
import { Window } from '../layouts';
diff --git a/tgui/packages/tgui/interfaces/Fabricator.tsx b/tgui/packages/tgui/interfaces/Fabricator.tsx
index 0511907618023..9c50cf973b31b 100644
--- a/tgui/packages/tgui/interfaces/Fabricator.tsx
+++ b/tgui/packages/tgui/interfaces/Fabricator.tsx
@@ -1,6 +1,4 @@
import { classes } from 'common/react';
-
-import { useBackend } from '../backend';
import {
Box,
Button,
@@ -9,7 +7,9 @@ import {
Section,
Stack,
Tooltip,
-} from '../components';
+} from 'tgui-core/components';
+
+import { useBackend } from '../backend';
import { Window } from '../layouts';
import { DesignBrowser } from './Fabrication/DesignBrowser';
import { MaterialAccessBar } from './Fabrication/MaterialAccessBar';
diff --git a/tgui/packages/tgui/interfaces/Flatpacker.tsx b/tgui/packages/tgui/interfaces/Flatpacker.tsx
index 43fed9e49e4b9..157a30a375b41 100644
--- a/tgui/packages/tgui/interfaces/Flatpacker.tsx
+++ b/tgui/packages/tgui/interfaces/Flatpacker.tsx
@@ -39,7 +39,7 @@ export const Flatpacker = (props: any) => {
const { SHEET_MATERIAL_AMOUNT, materials, design, busy } = data;
return (
-
+
{!!busy && (
{
tooltipPosition="left"
height="37px"
width="37px"
+ disabled={!design}
onClick={() => act('ejectBoard')}
>
@@ -167,22 +168,28 @@ const CostPreview = (props: CostPreviewProps) => {
const { materials, SHEET_MATERIAL_AMOUNT } = props;
return (
-
+
{materials ? (
{materials.map((material) => (
-
+
+
+
- {toTitleCase(material.name)}
+
+ {toTitleCase(material.name)}
+
- ×{(material.amount / SHEET_MATERIAL_AMOUNT).toFixed(2)}
+
+ {(material.amount / SHEET_MATERIAL_AMOUNT).toFixed(2)}
+
))}
diff --git a/tgui/packages/tgui/interfaces/MessageMonitor.tsx b/tgui/packages/tgui/interfaces/MessageMonitor.tsx
index ed3afac07a2c2..fb237bb786d4d 100644
--- a/tgui/packages/tgui/interfaces/MessageMonitor.tsx
+++ b/tgui/packages/tgui/interfaces/MessageMonitor.tsx
@@ -133,7 +133,12 @@ const MessageLogsScreen = (props) => {
{message.sender}
{message.recipient}
- {message.message}
+
+
+
))}
diff --git a/tgui/packages/tgui/interfaces/Microscope.jsx b/tgui/packages/tgui/interfaces/Microscope.jsx
deleted file mode 100644
index 74591fce7d3c3..0000000000000
--- a/tgui/packages/tgui/interfaces/Microscope.jsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import { useBackend, useSharedState } from '../backend';
-import { Button, LabeledList, NoticeBox, Section, Tabs } from '../components';
-import { Window } from '../layouts';
-
-export const Microscope = (props) => {
- const { act, data } = useBackend();
- const [tab, setTab] = useSharedState('tab', 1);
- const { has_dish, cell_lines = [], viruses = [] } = data;
-
- return (
-
-
-
-
-
-
-
-
-
- setTab(1)}
- >
- Micro-Organisms ({cell_lines.length})
-
- setTab(2)}
- >
- Viruses ({viruses.length})
-
-
- {tab === 1 && }
- {tab === 2 && }
-
-
- );
-};
-
-const Organisms = (props) => {
- const { cell_lines } = props;
- const { act, data } = useBackend();
- if (!cell_lines.length) {
- return No micro-organisms found;
- }
-
- return cell_lines.map((cell_line) => {
- return (
-
-
-
- {cell_line.growth_rate}
-
-
- {cell_line.suspectibility}
-
-
- {cell_line.requireds}
-
-
- {cell_line.supplementaries}
-
-
- {cell_line.suppressives}
-
-
-
- );
- });
-};
-
-const Viruses = (props) => {
- const { viruses } = props;
- const { act } = useBackend();
- if (!viruses.length) {
- return No viruses found;
- }
- return viruses.map((virus) => {
- return ;
- });
-};
diff --git a/tgui/packages/tgui/interfaces/Microscope.tsx b/tgui/packages/tgui/interfaces/Microscope.tsx
new file mode 100644
index 0000000000000..44aa7d2b660b0
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/Microscope.tsx
@@ -0,0 +1,184 @@
+import { BooleanLike } from 'common/react';
+
+import { useBackend } from '../backend';
+import {
+ Box,
+ Button,
+ Divider,
+ DmIcon,
+ Icon,
+ NoticeBox,
+ Section,
+ Stack,
+} from '../components';
+import { Window } from '../layouts';
+
+type Data = {
+ has_dish: BooleanLike;
+ cell_lines: CellLine[];
+};
+
+type CellLine = {
+ type: string;
+ name: string;
+ desc: string;
+ icon: string;
+ icon_state: string;
+ consumption_rate: number;
+ growth_rate: number;
+ suspectibility: number;
+ requireds: Record;
+ supplementaries: Record;
+ suppressives: Record;
+};
+
+export const Microscope = (props) => {
+ const { act, data } = useBackend();
+ const { has_dish, cell_lines = [] } = data;
+
+ return (
+
+
+ act('eject_petridish')}
+ >
+ Take Dish
+
+ )
+ }
+ >
+
+
+
+
+ );
+};
+
+const CellList = (props) => {
+ const { cell_lines } = props;
+ const fallback = (
+
+ );
+ if (!cell_lines.length) {
+ return No micro-organisms found;
+ }
+
+ return cell_lines.map((cell_line) => {
+ return cell_line.type !== 'virus' ? (
+
+
+
+
+
+
+ }
+ >
+
+ Consume {cell_line.consumption_rate} units of every nutrient per
+ second to grow by {cell_line.growth_rate}%.
+
+ {cell_line.suspectibility > 0 && (
+
+ Reduced by {cell_line.suspectibility}% when infected with
+ viruses.
+
+ )}
+
+
+
+ {Object.keys(cell_line.requireds).map((reagent) => (
+
+ ))}
+
+
+
+ {Object.keys(cell_line.supplementaries).map((reagent) => (
+
+ ))}
+
+
+
+ {Object.keys(cell_line.suppressives).map((reagent) => (
+
+ ))}
+
+
+
+
+
+ ) : (
+
+
+
+
+
+
+
+ Reduces growth of other cell lines when not suppressed by
+ Spaceacillin.
+
+
+
+
+ );
+ });
+};
+
+const GroupTitle = (props) => {
+ const { title } = props;
+ return (
+
+
+
+
+
+ {title}
+
+
+
+
+
+ ) as any;
+};
diff --git a/tgui/packages/tgui/interfaces/NtosCursor.tsx b/tgui/packages/tgui/interfaces/NtosCursor.tsx
new file mode 100644
index 0000000000000..6c62df26a1762
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/NtosCursor.tsx
@@ -0,0 +1,63 @@
+import { useState } from 'react';
+
+import { useBackend } from '../backend';
+import { Button, DmIcon, NoticeBox, Section, Stack } from '../components';
+import { NtosWindow } from '../layouts';
+
+type Data = {
+ dmi: {
+ icon: string;
+ icon_state: string;
+ };
+};
+
+export const NtosCursor = () => {
+ const { data } = useBackend();
+
+ const { dmi } = data;
+
+ const [numClicked, incrementClicked] = useState(0);
+
+ const NoticeBoxText = () => {
+ if (numClicked <= 2) {
+ return `There's only one option... It's the sword.`;
+ } else if (numClicked === 3) {
+ return `You clicked the sword. It's still the sword.`;
+ } else if (numClicked === 4) {
+ return `You clicked the sword again. It's still the sword.`;
+ } else if (numClicked === 5) {
+ return `Trying to click the sword again? It's still the sword.`;
+ }
+ return `You clicked the sword ${numClicked} times... It's still the sword.`;
+ };
+
+ return (
+
+
+
+
+
+
+
+
+ {NoticeBoxText()}
+
+
+
+
+
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx b/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx
index b168b05729786..bdbd24adb25ec 100644
--- a/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx
+++ b/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx
@@ -1,5 +1,4 @@
import { BooleanLike } from 'common/react';
-import { decodeHtmlEntities } from 'common/string';
import { Component, createRef, RefObject } from 'react';
import { useBackend } from '../../backend';
@@ -402,12 +401,14 @@ const ChatMessage = (props: ChatMessageProps) => {
const { message, everyone, outgoing, photoPath, timestamp, onPreviewImage } =
props;
- const displayMessage = decodeHtmlEntities(message);
+ const messageHTML = {
+ __html: `${message}`,
+ };
return (
- {displayMessage}
+
{
return (
-
+
@@ -50,31 +48,132 @@ const PaperPublishing = (props) => {
return (
<>
-
-
+ {fileList.length === 0 && (
+
+ Use data disk to download files from compressor or doppler array.
+
+ )}
+
+
+ }
+ >
+
+
+ act('select_file', {
+ selected_uid: fileList[ordfile_name],
+ })
+ }
+ />
+
+
+
+ }
+ >
+
+
+ act('select_experiment', {
+ selected_expath: expList[experiment_name],
+ })
+ }
+ />
+
+
+
+ }
+ >
+
+ String(number))}
+ selected={String(tier)}
+ onSelected={(new_tier) =>
+ act('select_tier', {
+ selected_tier: Number(new_tier),
+ })
+ }
+ />
+
+
+
+ }
+ >
+
+
+ act('select_partner', {
+ selected_partner: allowedPartners[new_partner],
+ })
+ }
+ />
+
+
+ act('et_alia')}
+ />
+ }
+ >
act('rewrite', {
- title: value,
+ author: value,
})
}
/>
-
+
act('rewrite', {
- author: value,
+ title: value,
})
}
/>
-
{
}
/>
-
-
-
-
- act('select_file', {
- selected_uid: fileList[ordfile_name],
- })
- }
- />
-
-
-
-
-
-
-
-
-
-
-
-
- act('select_experiment', {
- selected_expath: expList[experiment_name],
- })
- }
- />
-
-
-
-
-
-
-
-
-
-
-
- String(number))}
- selected={String(tier)}
- onSelected={(new_tier) =>
- act('select_tier', {
- selected_tier: Number(new_tier),
- })
- }
- />
-
-
-
-
-
-
-
-
-
-
-
-
- act('select_partner', {
- selected_partner: allowedPartners[new_partner],
- })
- }
- />
-
-
-
-
-
-
-
-
-
-
-
+
{' Cooperation: '}
{gains[coopIndex - 1]}
-
-
-
+
{' Funding: '}
{gains[fundingIndex - 1]}
>
);
@@ -366,7 +367,7 @@ export const NtosScipaperContent = (props) => {
Please sync this application to a valid techweb to upload progress!
)}
-
+
@@ -385,7 +386,7 @@ export const NtosScipaperContent = (props) => {
})
}
>
- {'View Previous Publications'}
+ {'Publications'}
{
})
}
>
- {'View Available Experiments'}
+ {'Experiments'}
{
})
}
>
- {'View Scientific Partners'}
+ {'Scientific Partners'}
{currentTab === 1 && }
diff --git a/tgui/packages/tgui/interfaces/Orbit/OrbitContent.tsx b/tgui/packages/tgui/interfaces/Orbit/OrbitContent.tsx
index 91502644faade..24aab8eba74bc 100644
--- a/tgui/packages/tgui/interfaces/Orbit/OrbitContent.tsx
+++ b/tgui/packages/tgui/interfaces/Orbit/OrbitContent.tsx
@@ -15,7 +15,7 @@ type ContentSection = {
/**
* The primary content display for points of interest.
- * Renders a scrollable section replete collapsibles for each
+ * Renders a scrollable section replete with collapsibles for each
* observable group.
*/
export function OrbitContent(props) {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx
index 9473506b80c97..55bfac0db0e71 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx
@@ -106,15 +106,12 @@ export const CharacterPreferenceWindow = (props) => {
profiles={data.character_profiles}
/>
-
{!data.content_unlocked && (
Buy BYOND premium for more slots!
)}
-
-
@@ -185,9 +182,7 @@ export const CharacterPreferenceWindow = (props) => {
)}
-
-
{pageContents}
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/DeleteCharacterPopup.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/DeleteCharacterPopup.tsx
new file mode 100644
index 0000000000000..3656465677b21
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/DeleteCharacterPopup.tsx
@@ -0,0 +1,57 @@
+import { useEffect, useState } from 'react';
+
+import { useBackend } from '../../backend';
+import { Box, Button, Modal, Stack } from '../../components';
+import { PreferencesMenuData } from './data';
+
+export const DeleteCharacterPopup = (props: { close: () => void }) => {
+ const { data, act } = useBackend();
+ const [secondsLeft, setSecondsLeft] = useState(3);
+
+ const { close } = props;
+
+ useEffect(() => {
+ const interval = setInterval(() => {
+ setSecondsLeft((current) => current - 1);
+ }, 1000);
+
+ return () => clearInterval(interval);
+ });
+
+ return (
+
+
+
+ Wait!
+
+
+
+ {`You're about to delete ${data.character_preferences.names[data.name_to_use]} forever. Are you sure you want to do this?`}
+
+
+
+
+
+ {/* Explicit width so that the layout doesn't shift */}
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx
index c79827d2abe74..35ddf9d2a7326 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/MainPage.tsx
@@ -1,7 +1,7 @@
import { filter, map, sortBy } from 'common/collections';
import { classes } from 'common/react';
import { createSearch } from 'common/string';
-import { useState } from 'react';
+import { ReactNode, useState } from 'react';
import { sendAct, useBackend } from '../../backend';
import {
@@ -21,6 +21,7 @@ import {
RandomSetting,
ServerData,
} from './data';
+import { DeleteCharacterPopup } from './DeleteCharacterPopup';
import { MultiNameInput, NameInput } from './names';
import features from './preferences/features';
import {
@@ -383,6 +384,7 @@ export const PreferenceList = (props: {
preferences: Record;
randomizations: Record;
maxHeight: string;
+ children?: ReactNode;
}) => {
return (
+
+ {props.children}
);
};
@@ -478,6 +482,8 @@ export const MainPage = (props: { openSpecies: () => void }) => {
const [currentClothingMenu, setCurrentClothingMenu] = useState(
null,
);
+ const [deleteCharacterPopupOpen, setDeleteCharacterPopupOpen] =
+ useState(false);
const [multiNameInputOpen, setMultiNameInputOpen] = useState(false);
const [randomToggleEnabled] = useRandomToggleState();
@@ -549,6 +555,12 @@ export const MainPage = (props: { openSpecies: () => void }) => {
/>
)}
+ {deleteCharacterPopupOpen && (
+ setDeleteCharacterPopupOpen(false)}
+ />
+ )}
+
@@ -648,7 +660,21 @@ export const MainPage = (props: { openSpecies: () => void }) => {
)}
preferences={nonContextualPreferences}
maxHeight="auto"
- />
+ >
+
+
+
+
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx
index 17d20d381fce1..06f7540b04ceb 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx
@@ -211,6 +211,7 @@ function QuirkPopper(props: QuirkPopperProps) {
placement="bottom-end"
onClickOutside={() => setCustomizationExpanded(false)}
isOpen={customizationExpanded}
+ baseZIndex={1}
content={
{!!customization_options && hasExpandableCustomization && (
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx
index 8516823a5587f..3f1c50c16f9f1 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx
@@ -10,6 +10,7 @@ import { FeatureDropdownInput } from '../dropdowns';
export const sound_ambience: FeatureToggle = {
name: 'Enable ambience',
category: 'SOUND',
+ description: `Ambience refers to the more noticeable ambient sounds that play on occasion.`,
component: CheckboxInput,
};
@@ -81,6 +82,7 @@ export const sound_midi: FeatureToggle = {
export const sound_ship_ambience: FeatureToggle = {
name: 'Enable ship ambience',
category: 'SOUND',
+ description: `Ship ambience refers to the low ambient buzz that plays on loop.`,
component: CheckboxInput,
};
diff --git a/tgui/packages/tgui/interfaces/QuantumConsole.tsx b/tgui/packages/tgui/interfaces/QuantumConsole.tsx
index bba1d85801933..c42a7ce9402d2 100644
--- a/tgui/packages/tgui/interfaces/QuantumConsole.tsx
+++ b/tgui/packages/tgui/interfaces/QuantumConsole.tsx
@@ -1,6 +1,4 @@
import { BooleanLike } from 'common/react';
-
-import { useBackend, useSharedState } from '../backend';
import {
Button,
Collapsible,
@@ -12,7 +10,9 @@ import {
Table,
Tabs,
Tooltip,
-} from '../components';
+} from 'tgui-core/components';
+
+import { useBackend, useSharedState } from '../backend';
import { TableCell, TableRow } from '../components/Table';
import { Window } from '../layouts';
import { LoadingScreen } from './common/LoadingToolbox';
diff --git a/tgui/packages/tgui/interfaces/RestockTracker.jsx b/tgui/packages/tgui/interfaces/RestockTracker.jsx
index 7df606adffcd3..ab6f1d012edf0 100644
--- a/tgui/packages/tgui/interfaces/RestockTracker.jsx
+++ b/tgui/packages/tgui/interfaces/RestockTracker.jsx
@@ -81,7 +81,17 @@ export const RestockTracker = (props) => {
))}
+ {vending_list.length === 0 &&
}
);
};
+
+export const RestockTrackerFull = (props) => {
+ const { data } = useBackend();
+ return (
+
+ All vending machines stocked!
+
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/Secrets.jsx b/tgui/packages/tgui/interfaces/Secrets.jsx
index ebd0b998d2c28..a0896ec750722 100644
--- a/tgui/packages/tgui/interfaces/Secrets.jsx
+++ b/tgui/packages/tgui/interfaces/Secrets.jsx
@@ -301,13 +301,13 @@ const FunTab = (props) => {
/>
-
- Your admin button here, coder!
-
+ content="Mass Heal everyone"
+ onClick={() => act('mass_heal')}
+ />
diff --git a/tgui/packages/tgui/interfaces/TankCompressor.jsx b/tgui/packages/tgui/interfaces/TankCompressor.jsx
deleted file mode 100644
index 1fddb2b1938f6..0000000000000
--- a/tgui/packages/tgui/interfaces/TankCompressor.jsx
+++ /dev/null
@@ -1,356 +0,0 @@
-import { useBackend, useSharedState } from '../backend';
-import {
- Box,
- Button,
- Flex,
- Icon,
- LabeledList,
- Modal,
- NoticeBox,
- RoundGauge,
- Section,
- Slider,
- Stack,
- Tabs,
-} from '../components';
-import { Window } from '../layouts';
-import { GasmixParser } from './common/GasmixParser';
-
-export const TankCompressor = (props) => {
- return (
-
-
-
-
-
- );
-};
-
-const TankCompressorContent = (props) => {
- const { act, data } = useBackend();
- const { disk, storage } = data;
- const [currentTab, changeTab] = useSharedState('compressorTab', 1);
-
- return (
-
- {currentTab === 1 && }
- {currentTab === 2 && }
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
-
-const AlertBoxes = (props) => {
- const { text_content, icon_name, icon_break, color, active } = props;
-
- return (
-
-
-
-
- {icon_break &&
}
- {text_content}
-
-
-
- );
-};
-
-const TankCompressorControls = (props) => {
- const { act, data } = useBackend();
- const {
- tankPresent,
- leaking,
- lastPressure,
- leakPressure,
- fragmentPressure,
- tankPressure,
- maxTransfer,
- active,
- transferRate,
- ejectPressure,
- inputData,
- outputData,
- bufferData,
- } = data;
- const pressure = tankPresent ? tankPressure : lastPressure;
- const usingLastData = !!(lastPressure && !tankPresent);
-
- return (
- <>
-
- ejectPressure}
- onClick={() => act('eject_tank')}
- >
- {'Eject Tank'}
-
- }
- >
- {!pressure && {'No Pressure Detected'}}
- {usingLastData && (
-
- {'Tank destroyed. Displaying last recorded data.'}
-
- )}
-
-
- (value ? value.toFixed(2) : '-') + ' kPa'}
- />
-
-
-
-
-
- = leakPressure}
- />
-
-
-
-
- = leakPressure &&
- pressure < fragmentPressure) ||
- leaking
- }
- />
-
-
- = fragmentPressure}
- />
-
-
-
-
-
-
-
-
-
-
-
- act('change_rate', { target: new_rate })
- }
- />
-
-
-
-
-
-
-
-
-
-
-
- {!inputData.total_moles && {'No Gas Present'}}
-
-
-
-
-
- {!outputData.inputData && {'No Gas Present'}}
-
-
-
-
-
- }
- >
- {!bufferData.total_moles && {'No Gas Present'}}
-
-
-
-
-
- >
- );
-};
-
-const TankCompressorRecords = (props) => {
- const { act, data } = useBackend();
- const { records = [], disk } = data;
- const [activeRecordRef, setActiveRecordRef] = useSharedState(
- 'recordRef',
- records[0]?.ref,
- );
- const activeRecord =
- !!activeRecordRef &&
- records.find((record) => activeRecordRef === record.ref);
- if (records.length === 0) {
- return (
-
- No Records
-
- );
- }
-
- return (
-
-
-
-
- {records.map((record) => (
- setActiveRecordRef(record.ref)}
- >
- {record.name}
-
- ))}
-
-
- {activeRecord ? (
-
- {
- act('delete_record', {
- ref: activeRecord.ref,
- });
- }}
- />,
-
-
- ) : (
-
- No Record Selected
-
- )}
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/TankCompressor.tsx b/tgui/packages/tgui/interfaces/TankCompressor.tsx
new file mode 100644
index 0000000000000..a0d2acc14fb4b
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/TankCompressor.tsx
@@ -0,0 +1,322 @@
+import { toFixed } from 'common/math';
+import { BooleanLike } from 'common/react';
+
+import { useBackend, useSharedState } from '../backend';
+import {
+ Box,
+ Button,
+ Knob,
+ LabeledControls,
+ LabeledList,
+ NoticeBox,
+ RoundGauge,
+ Section,
+ Stack,
+ Tabs,
+} from '../components';
+import { formatSiUnit } from '../format';
+import { Window } from '../layouts';
+
+type Data = {
+ // Dynamic
+ tankPresent: BooleanLike;
+ tankPressure: number;
+ leaking: BooleanLike;
+ active: BooleanLike;
+ transferRate: number;
+ lastPressure: number;
+ disk: string;
+ storage: string;
+ records: Record[];
+ // Static
+ maxTransfer: number;
+ leakPressure: number;
+ fragmentPressure: number;
+ ejectPressure: number;
+};
+
+type Record = {
+ ref: string;
+ name: string;
+ timestamp: string;
+ source: string;
+ gases: GasMoles[];
+};
+
+type GasMoles = {
+ [key: string]: number;
+};
+
+const formatPressure = (value) => {
+ if (value < 10000) {
+ return toFixed(value) + ' kPa';
+ }
+ return formatSiUnit(value * 1000, 1, 'Pa');
+};
+
+export const TankCompressor = (props) => {
+ return (
+
+
+
+
+
+ );
+};
+
+const TankCompressorContent = (props) => {
+ const { act, data } = useBackend
();
+ const { disk, storage } = data;
+
+ return (
+
+
+
+ act('eject_disk')}
+ >
+ Eject Disk
+
+ }
+ >
+
+
+
+
+ );
+};
+
+const TankCompressorControls = (props) => {
+ const { act, data } = useBackend();
+ const {
+ tankPresent,
+ leaking,
+ lastPressure,
+ leakPressure,
+ fragmentPressure,
+ tankPressure,
+ maxTransfer,
+ active,
+ transferRate,
+ ejectPressure,
+ } = data;
+ const pressure = tankPresent ? tankPressure : lastPressure;
+ const usingLastData = !!(lastPressure && !tankPresent);
+ const notice_color =
+ usingLastData || leaking || pressure > fragmentPressure
+ ? 'bad'
+ : !tankPresent
+ ? 'blue'
+ : pressure > leakPressure
+ ? 'average'
+ : 'good';
+ const notice_text = usingLastData
+ ? 'Tank destroyed. Displaying last recorded data.'
+ : !tankPresent
+ ? 'No Tank Detected'
+ : leaking
+ ? 'Tank Leaking'
+ : !pressure
+ ? 'No Pressure Detected'
+ : pressure < leakPressure
+ ? 'Tank Pressure Nominal'
+ : pressure < fragmentPressure
+ ? 'Leak Hazard'
+ : 'Explosive Hazard';
+
+ return (
+
+ ejectPressure}
+ onClick={() => act('eject_tank')}
+ >
+ {'Eject Tank'}
+
+ }
+ >
+ {notice_text}
+
+
+
+
+
+
+
+ act('change_rate', {
+ target: value,
+ })
+ }
+ />
+
+
+
+ act('toggle_injection')}
+ >
+ {active ? 'On' : 'Off'}
+
+
+
+
+
+ );
+};
+
+const TankCompressorRecords = (props) => {
+ const { act, data } = useBackend();
+ const { records = [], disk } = data;
+ const [activeRecordRef, setActiveRecordRef] = useSharedState(
+ 'recordRef',
+ records[0]?.ref,
+ );
+ const activeRecord =
+ !!activeRecordRef &&
+ records.find((record) => activeRecordRef === record.ref);
+ if (records.length === 0) {
+ return (
+
+ No Records
+
+ );
+ }
+
+ return (
+
+
+
+
+ {records.map((record) => (
+ setActiveRecordRef(record.ref)}
+ >
+ {record.name}
+
+ ))}
+
+
+ {activeRecord ? (
+
+
+
+ {activeRecord.name}
+
+
+ {activeRecord.timestamp}
+
+
+ {activeRecord.source}
+
+
+
+ {Object.keys(activeRecord.gases).map((gas_name) => (
+
+ {(activeRecord.gases[gas_name]
+ ? activeRecord.gases[gas_name].toFixed(2)
+ : '-') + ' moles'}
+
+ ))}
+
+
+
+ {
+ act('save_record', {
+ ref: activeRecord.ref,
+ });
+ }}
+ />
+ {
+ act('delete_record', {
+ ref: activeRecord.ref,
+ });
+ }}
+ />
+
+
+
+ ) : (
+
+ No Record Selected
+
+ )}
+
+
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/TankDispenser.jsx b/tgui/packages/tgui/interfaces/TankDispenser.jsx
deleted file mode 100644
index ea94a5f3148c1..0000000000000
--- a/tgui/packages/tgui/interfaces/TankDispenser.jsx
+++ /dev/null
@@ -1,43 +0,0 @@
-import { useBackend } from '../backend';
-import { Button, LabeledList, Section } from '../components';
-import { Window } from '../layouts';
-
-export const TankDispenser = (props) => {
- const { act, data } = useBackend();
- return (
-
-
-
-
- act('plasma')}
- />
- }
- >
- {data.plasma}
-
- act('oxygen')}
- />
- }
- >
- {data.oxygen}
-
-
-
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/Techweb.jsx b/tgui/packages/tgui/interfaces/Techweb.jsx
index c041d646d7d99..dcafea78bf529 100644
--- a/tgui/packages/tgui/interfaces/Techweb.jsx
+++ b/tgui/packages/tgui/interfaces/Techweb.jsx
@@ -621,7 +621,7 @@ const TechNode = (props) => {
{design_ids.map((k, i) => (
{
const { debugLayout = false } = useDebug();
useEffect(() => {
- const updateGeometry = () => {
- const options = {
- ...config.window,
- size: DEFAULT_SIZE,
+ if (!suspended) {
+ const updateGeometry = () => {
+ const options = {
+ ...config.window,
+ size: DEFAULT_SIZE,
+ };
+
+ if (width && height) {
+ options.size = [width, height];
+ }
+ if (config.window?.key) {
+ setWindowKey(config.window.key);
+ }
+ recallWindowGeometry(options);
};
- if (width && height) {
- options.size = [width, height];
- }
- if (config.window?.key) {
- setWindowKey(config.window.key);
- }
- recallWindowGeometry(options);
- };
-
- Byond.winset(Byond.windowId, {
- 'can-close': Boolean(canClose),
- });
- logger.log('mounting');
- updateGeometry();
-
- return () => {
- logger.log('unmounting');
- };
+ Byond.winset(Byond.windowId, {
+ 'can-close': Boolean(canClose),
+ });
+ logger.log('mounting');
+ updateGeometry();
+
+ return () => {
+ logger.log('unmounting');
+ };
+ }
}, [width, height]);
const dispatch = globalStore.dispatch;
diff --git a/tgui/packages/tgui/package.json b/tgui/packages/tgui/package.json
index efe74af8123b0..a9ab77fac4526 100644
--- a/tgui/packages/tgui/package.json
+++ b/tgui/packages/tgui/package.json
@@ -16,6 +16,7 @@
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-popper": "^2.3.0",
+ "tgui-core": "^1.0.18",
"tgui-dev-server": "workspace:*",
"tgui-polyfill": "workspace:*"
}
diff --git a/tgui/webpack.config.js b/tgui/webpack.config.js
index fa1782eb073b2..6ff3d1bf4a06a 100644
--- a/tgui/webpack.config.js
+++ b/tgui/webpack.config.js
@@ -60,7 +60,7 @@ module.exports = (env = {}, argv) => {
],
},
{
- test: /\.scss$/,
+ test: /\.(s)?css$/,
use: [
{
loader: ExtractCssPlugin.loader,
diff --git a/tgui/yarn.lock b/tgui/yarn.lock
index 1caeb0d24e853..5421adc80571b 100644
--- a/tgui/yarn.lock
+++ b/tgui/yarn.lock
@@ -8281,6 +8281,16 @@ __metadata:
languageName: unknown
linkType: soft
+"tgui-core@npm:^1.0.18":
+ version: 1.0.18
+ resolution: "tgui-core@npm:1.0.18"
+ peerDependencies:
+ react: ^18.2.0
+ react-dom: ^18.2.0
+ checksum: 10c0/f5fa9078649ba0aa052116cd3ecbbb3a38113e9c32e6875c233d074f38db6abdb4dbfc3fb846d3cd125d4572eaf999988a082c1650b94ae429ace90e56deaca9
+ languageName: node
+ linkType: hard
+
"tgui-dev-server@workspace:*, tgui-dev-server@workspace:packages/tgui-dev-server":
version: 0.0.0-use.local
resolution: "tgui-dev-server@workspace:packages/tgui-dev-server"
@@ -8389,6 +8399,7 @@ __metadata:
react: "npm:^18.2.0"
react-dom: "npm:^18.2.0"
react-popper: "npm:^2.3.0"
+ tgui-core: "npm:^1.0.18"
tgui-dev-server: "workspace:*"
tgui-polyfill: "workspace:*"
languageName: unknown
diff --git a/tools/UpdatePaths/Scripts/74651_apc_to_apc_helpers.txt b/tools/UpdatePaths/Scripts/74651_apc_to_apc_helpers.txt
index 34c4c581f5266..bfedeb2406c31 100644
--- a/tools/UpdatePaths/Scripts/74651_apc_to_apc_helpers.txt
+++ b/tools/UpdatePaths/Scripts/74651_apc_to_apc_helpers.txt
@@ -35,4 +35,4 @@
/obj/machinery/power/apc/@SUBTYPES{cell_type = /obj/item/stock_parts/cell/upgraded/plus} : @OLD{@OLD;cell_type=@SKIP}, /obj/effect/mapping_helpers/apc/cell_5k
/obj/machinery/power/apc/@SUBTYPES{cell_type = /obj/item/stock_parts/cell/high} : @OLD{@OLD;cell_type=@SKIP}, /obj/effect/mapping_helpers/apc/cell_10k
/obj/machinery/power/apc/@SUBTYPES{start_charge = 100} : @OLD{@OLD;start_charge=@SKIP}, /obj/effect/mapping_helpers/apc/full_charge
-/obj/machinery/power/apc/@SUBTYPES{start_charge = 0} : @OLD{@OLD;start_charge=@SKIP}, /obj/effect/mapping_helpers/apc/no_charge
\ No newline at end of file
+/obj/machinery/power/apc/@SUBTYPES{start_charge = 0} : @OLD{@OLD;start_charge=@SKIP}, /obj/effect/mapping_helpers/apc/no_charge
diff --git a/tools/UpdatePaths/Scripts/82942_cigs_vape_repath.txt b/tools/UpdatePaths/Scripts/82942_cigs_vape_repath.txt
new file mode 100644
index 0000000000000..22cf75332bfee
--- /dev/null
+++ b/tools/UpdatePaths/Scripts/82942_cigs_vape_repath.txt
@@ -0,0 +1,2 @@
+/obj/item/clothing/mask/cigarette/@SUBTYPES : /obj/item/cigarette/@SUBTYPES{@OLD}
+/obj/item/clothing/mask/vape/@SUBTYPES : /obj/item/vape/@SUBTYPES{@OLD}
\ No newline at end of file
diff --git a/tools/UpdatePaths/Scripts/83861_firebots.txt b/tools/UpdatePaths/Scripts/83861_firebots.txt
new file mode 100644
index 0000000000000..152220c38b2d3
--- /dev/null
+++ b/tools/UpdatePaths/Scripts/83861_firebots.txt
@@ -0,0 +1 @@
+/mob/living/simple_animal/bot/firebot/@SUBTYPES : /mob/living/basic/bot/firebot/@SUBTYPES{@OLD}
\ No newline at end of file
diff --git a/tools/UpdatePaths/Scripts/84079_cell_updates.txt b/tools/UpdatePaths/Scripts/84079_cell_updates.txt
new file mode 100644
index 0000000000000..ac792704f1baf
--- /dev/null
+++ b/tools/UpdatePaths/Scripts/84079_cell_updates.txt
@@ -0,0 +1,2 @@
+/obj/item/stock_parts/cell : /obj/item/stock_parts/power_store/cell{@OLD}
+/obj/item/stock_parts/cell/@SUBTYPES : /obj/item/stock_parts/power_store/cell/@SUBTYPES{@OLD}
diff --git a/tools/UpdatePaths/Scripts/84143_vibebots.txt b/tools/UpdatePaths/Scripts/84143_vibebots.txt
new file mode 100644
index 0000000000000..e5474e517e350
--- /dev/null
+++ b/tools/UpdatePaths/Scripts/84143_vibebots.txt
@@ -0,0 +1 @@
+/mob/living/simple_animal/bot/secbot/vibebot/@SUBTYPES : /mob/living/basic/bot/vibebot/@SUBTYPES{@OLD}
\ No newline at end of file
diff --git a/tools/ci/check_grep.sh b/tools/ci/check_grep.sh
index 8436073fe97cb..c78e8fecf7c87 100644
--- a/tools/ci/check_grep.sh
+++ b/tools/ci/check_grep.sh
@@ -287,7 +287,7 @@ if [ "$pcre2_support" -eq 1 ]; then
st=1
fi
part "datum stockpart sanity"
- if $grep -P 'for\b.*/obj/item/stock_parts/(?!cell)(?![\w_]+ in )' $code_files; then
+ if $grep -P 'for\b.*/obj/item/stock_parts/(?!power_store)(?![\w_]+ in )' $code_files; then
echo
echo -e "${RED}ERROR: Should be using datum/stock_part instead"
st=1
diff --git a/tools/ci/od_lints.dm b/tools/ci/od_lints.dm
index e339f5acb2d72..710a13e2492c7 100644
--- a/tools/ci/od_lints.dm
+++ b/tools/ci/od_lints.dm
@@ -12,7 +12,6 @@
#pragma SoftReservedKeyword error
#pragma DuplicateVariable error
#pragma DuplicateProcDefinition error
-#pragma TooManyArguments error
#pragma PointlessParentCall error
#pragma PointlessBuiltinCall error
#pragma SuspiciousMatrixCall error
diff --git a/tools/maplint/lints/telescreen_varedits.yml b/tools/maplint/lints/telescreen_varedits.yml
new file mode 100644
index 0000000000000..37ea2d72b67c8
--- /dev/null
+++ b/tools/maplint/lints/telescreen_varedits.yml
@@ -0,0 +1,8 @@
+help: "Use the directional variants when possible."
+/obj/machinery/computer/security/telescreen:
+ banned_variables:
+ pixel_x:
+ pixel_y:
+ dir:
+ deny: [1, 2, 4, 8]
+ network: