diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm
index faa5cf18ae978..fd292ec768512 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" = (
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/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
index fb738781bc752..09405b243349c 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
@@ -2006,7 +2006,7 @@
},
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/structure/cable,
/turf/open/floor/mineral/plastitanium,
/area/ruin/syndicate_lava_base/cargo)
@@ -2081,7 +2081,7 @@
/obj/machinery/firealarm/directional/west,
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
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/garbagetruck1.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm
index 8aa85a7e1534d..65c448e94c426 100644
--- a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm
+++ b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm
@@ -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..0f2f425fe6293 100644
--- a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm
+++ b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm
@@ -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,
@@ -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,7 +754,7 @@
/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
},
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/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/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/TheBeach.dmm b/_maps/RandomZLevels/TheBeach.dmm
index 22dab6907a688..3f18eb1d627d3 100644
--- a/_maps/RandomZLevels/TheBeach.dmm
+++ b/_maps/RandomZLevels/TheBeach.dmm
@@ -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..721efba7619cc 100644
--- a/_maps/RandomZLevels/moonoutpost19.dmm
+++ b/_maps/RandomZLevels/moonoutpost19.dmm
@@ -3045,7 +3045,7 @@
"ty" = (
/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/siding/thinplating_new/light,
/turf/open/floor/iron,
/area/awaymission/moonoutpost19/arrivals)
@@ -5428,7 +5428,7 @@
/obj/structure/table,
/obj/machinery/cell_charger,
/obj/machinery/light/small/directional/west,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/item/paper/fluff/awaymissions/moonoutpost19/engineering,
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -5728,7 +5728,7 @@
/obj/structure/table,
/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 = 8;
pixel_y = 17
@@ -5775,7 +5775,7 @@
/area/awaymission/moonoutpost19/arrivals)
"MW" = (
/obj/structure/table,
-/obj/item/stock_parts/cell/crap/empty{
+/obj/item/stock_parts/power_store/cell/crap/empty{
pixel_x = -4
},
/turf/open/floor/pod/dark,
@@ -6525,9 +6525,9 @@
/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{
+/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
},
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..8ce159cb3993a 100644
--- a/_maps/RandomZLevels/undergroundoutpost45.dmm
+++ b/_maps/RandomZLevels/undergroundoutpost45.dmm
@@ -2161,8 +2161,8 @@
"iY" = (
/obj/structure/table,
/obj/machinery/cell_charger,
-/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/machinery/light/small/directional/west,
/turf/open/floor/iron/white,
/area/awaymission/undergroundoutpost45/research)
@@ -2996,8 +2996,8 @@
/obj/item/stack/sheet/mineral/plasma{
amount = 26
},
-/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/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/awaymission/undergroundoutpost45/engineering)
@@ -3019,7 +3019,7 @@
"ma" = (
/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 = -7
@@ -5957,7 +5957,7 @@
"vW" = (
/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/tile/yellow/anticorner/contrasted,
/turf/open/floor/iron,
/area/awaymission/undergroundoutpost45/engineering)
diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm
index ef02944be5751..e830561e58900 100644
--- a/_maps/map_files/Birdshot/birdshot.dmm
+++ b/_maps/map_files/Birdshot/birdshot.dmm
@@ -1543,6 +1543,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,
@@ -2242,15 +2259,6 @@
/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
@@ -3531,6 +3539,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/clothing/mask/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,
@@ -3838,6 +3862,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,
@@ -5280,6 +5326,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,
@@ -6321,22 +6379,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)
@@ -10333,6 +10375,15 @@
/obj/effect/landmark/navigate_destination/aiupload,
/turf/open/floor/iron/white,
/area/station/hallway/primary/starboard)
+"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/engineering/storage/tech)
"enD" = (
/obj/effect/turf_decal/tile/green{
dir = 8
@@ -11095,6 +11146,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
@@ -11681,12 +11746,6 @@
/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,
@@ -12778,13 +12837,6 @@
/obj/effect/landmark/start/depsec/science,
/turf/open/floor/iron,
/area/station/security/checkpoint/science)
-"fnm" = (
-/obj/structure/filingcabinet/chestdrawer,
-/obj/item/book/manual/wiki/engineering_guide{
- pixel_y = 6
- },
-/turf/open/floor/iron/grimy,
-/area/station/engineering/main)
"fnw" = (
/obj/structure/chair{
pixel_y = -2
@@ -17382,18 +17434,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
@@ -17533,12 +17573,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,
-/turf/open/floor/iron/grimy,
-/area/station/engineering/main)
"gUC" = (
/obj/structure/disposalpipe/segment{
dir = 6
@@ -17778,6 +17812,21 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/security/checkpoint/escape)
+"gZy" = (
+/obj/structure/table,
+/obj/machinery/cell_charger{
+ pixel_y = 18
+ },
+/obj/item/stock_parts/power_store/cell/high{
+ pixel_y = 18
+ },
+/obj/item/clothing/suit/hazardvest,
+/obj/effect/turf_decal/siding/thinplating_new/terracotta{
+ dir = 4
+ },
+/obj/machinery/firealarm/directional/west,
+/turf/open/floor/iron,
+/area/station/command/teleporter)
"gZM" = (
/obj/item/kirbyplants/random,
/obj/machinery/light/cold/directional/east,
@@ -18266,23 +18315,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{
@@ -19626,18 +19658,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,
@@ -22824,6 +22844,30 @@
/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,
@@ -22891,6 +22935,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,
@@ -23156,6 +23216,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{
@@ -24073,20 +24139,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,
@@ -24165,13 +24217,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,
@@ -25555,22 +25600,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";
@@ -27118,6 +27147,12 @@
/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,
@@ -27769,6 +27804,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,
@@ -29643,24 +29690,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/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)
"kWk" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -30636,22 +30665,6 @@
},
/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)
"lkR" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -31914,6 +31927,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,
@@ -33408,6 +33428,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,
@@ -34657,6 +34688,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,
@@ -34913,6 +34950,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{
@@ -35459,6 +35512,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,
@@ -38159,6 +38228,19 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/smooth,
/area/station/cargo/warehouse)
+"nLM" = (
+/obj/structure/cable,
+/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)
"nLN" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -38946,6 +39028,20 @@
dir = 1
},
/area/station/hallway/primary/central/fore)
+"oaY" = (
+/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/power_store/cell/high{
+ pixel_x = 4;
+ pixel_y = 5
+ },
+/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
@@ -40595,6 +40691,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
@@ -40655,6 +40763,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
@@ -42854,30 +42980,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,
@@ -43205,6 +43307,14 @@
/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/station/service/kitchen/coldroom)
+"pxW" = (
+/obj/structure/table,
+/obj/machinery/cell_charger{
+ pixel_y = 5
+ },
+/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,
@@ -45114,17 +45224,6 @@
/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/effect/spawner/random/armory/dragnet,
-/turf/open/floor/iron/dark/small,
-/area/station/ai_monitored/security/armory)
"qaV" = (
/obj/structure/disposalpipe/segment{
dir = 10
@@ -45719,14 +45818,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,
@@ -48397,12 +48488,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{
@@ -51001,28 +51086,6 @@
/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{
@@ -54091,18 +54154,6 @@
/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,
-/obj/structure/cable,
-/turf/open/floor/iron/cafeteria,
-/area/station/science/circuits)
"sFH" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -54519,6 +54570,17 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/exit/departure_lounge)
+"sNr" = (
+/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/effect/spawner/random/armory/dragnet,
+/turf/open/floor/iron/dark/small,
+/area/station/ai_monitored/security/armory)
"sNv" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -55549,6 +55611,13 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
+"tcA" = (
+/obj/structure/filingcabinet/chestdrawer,
+/obj/item/stock_parts/power_store/cell/emproof{
+ pixel_y = 9
+ },
+/turf/open/floor/iron/grimy,
+/area/station/engineering/main)
"tcB" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -56787,20 +56856,6 @@
},
/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,
@@ -62907,21 +62962,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"
@@ -63856,19 +63896,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
@@ -66659,22 +66686,6 @@
/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
- },
-/obj/item/clothing/mask/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)
"wjZ" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -66729,17 +66740,6 @@
/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,
@@ -88401,7 +88401,7 @@ mVt
dIt
huN
jBr
-qaH
+sNr
syk
vYD
lox
@@ -89601,7 +89601,7 @@ ojz
sLu
urE
ess
-jCY
+mFH
vfG
oSw
jyl
@@ -89612,7 +89612,7 @@ obW
grF
ecn
kmH
-rLu
+bHp
cPe
obW
blb
@@ -90375,7 +90375,7 @@ euP
all
eWf
eIx
-kWg
+oHJ
bNq
wxG
uIX
@@ -90614,7 +90614,7 @@ ufR
xYG
xYG
rDV
-cGb
+mOx
dwC
iAk
sql
@@ -90628,11 +90628,11 @@ sHO
drI
cRq
rbl
-jcx
+tcA
uKO
vfG
-fnm
-gUo
+lGJ
+mAK
bNq
hOX
fEU
@@ -92198,7 +92198,7 @@ eEq
sRg
gQG
hbw
-hgb
+aGI
hmQ
pGE
jug
@@ -92286,7 +92286,7 @@ xAR
trp
etx
fwS
-ePg
+iLZ
trp
jRx
xul
@@ -92944,7 +92944,7 @@ paX
rdH
gpI
ceP
-wld
+mcj
gpI
qCT
rWH
@@ -93193,7 +93193,7 @@ cED
nQE
rLj
gNt
-lkQ
+iIK
gKL
fMA
gFF
@@ -95246,7 +95246,7 @@ gwl
pPm
jKU
qbP
-psL
+iGM
nck
tau
gKL
@@ -95537,7 +95537,7 @@ sUy
muW
mOk
iap
-gSQ
+oGo
iDk
sUy
jaK
@@ -97082,7 +97082,7 @@ xMk
xsh
hcc
xGJ
-wjY
+bBN
jwi
qtd
hOg
@@ -98890,7 +98890,7 @@ myT
iMg
iYj
sDp
-vjx
+gZy
kke
kgz
oGJ
@@ -104791,7 +104791,7 @@ gKg
xbl
uhI
yhW
-hAQ
+clV
gcz
hyv
fyH
@@ -109476,9 +109476,9 @@ aZL
ciR
mwu
yeP
-aXg
+enq
ivY
-vuK
+nLM
ssz
ssz
kHo
@@ -112024,7 +112024,7 @@ vDX
vDX
xww
vDX
-twR
+eDr
xdc
xtL
xQW
@@ -118461,7 +118461,7 @@ wHg
mbZ
xia
jYr
-jbc
+oaY
lZB
ivz
jYr
@@ -119244,7 +119244,7 @@ pXQ
kwA
xaR
sYa
-qiO
+pxW
xlP
gpy
xlP
@@ -121527,7 +121527,7 @@ oyQ
pVa
qjh
qzL
-qYq
+kbI
xok
vhC
sHV
@@ -122844,7 +122844,7 @@ ifa
ifa
ifa
ifa
-sFD
+kmP
vLi
tQr
ifa
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 9f1a266b18575..84d42a3ec31ca 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)
@@ -875,17 +859,6 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron,
/area/station/security/prison/visit)
-"ale" = (
-/obj/structure/rack,
-/obj/effect/turf_decal/bot,
-/obj/structure/window/reinforced/spawner/directional/east{
- pixel_x = 3
- },
-/obj/structure/window/reinforced/spawner/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)
"alG" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -4466,6 +4439,14 @@
/obj/effect/mapping_helpers/airlock/access/all/command/hop,
/turf/open/floor/wood,
/area/station/command/heads_quarters/hop)
+"beI" = (
+/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)
"beP" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -5383,14 +5364,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,
@@ -6004,6 +5977,18 @@
},
/turf/open/floor/wood,
/area/station/engineering/break_room)
+"byI" = (
+/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)
"byP" = (
/obj/machinery/firealarm/directional/east,
/obj/machinery/camera{
@@ -7687,15 +7672,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,
@@ -8311,15 +8287,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,
@@ -8841,6 +8808,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/hallway/secondary/construction)
+"cfW" = (
+/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)
"cgf" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -12531,17 +12507,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
@@ -13578,6 +13543,17 @@
/obj/structure/sign/poster/random/directional/south,
/turf/open/floor/iron/dark,
/area/station/maintenance/department/engine/atmos)
+"dpR" = (
+/obj/structure/rack,
+/obj/effect/turf_decal/bot,
+/obj/structure/window/reinforced/spawner/directional/east{
+ pixel_x = 3
+ },
+/obj/structure/window/reinforced/spawner/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)
"dqc" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -18064,6 +18040,14 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central/aft)
+"ewl" = (
+/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)
"ewQ" = (
/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{
dir = 4
@@ -19551,6 +19535,14 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/turf/open/floor/engine,
/area/station/engineering/supermatter)
+"ePX" = (
+/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)
"ePZ" = (
/obj/structure/window/reinforced/spawner/directional/south,
/obj/structure/window/reinforced/spawner/directional/north,
@@ -21470,6 +21462,21 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/command/bridge)
+"fnC" = (
+/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)
"fnD" = (
/obj/structure/table,
/obj/machinery/requests_console/directional/north{
@@ -22650,6 +22657,44 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron,
/area/station/engineering/main)
+"fDT" = (
+/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)
"fEd" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/sign/warning/vacuum/directional/west,
@@ -28382,6 +28427,14 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/command/gateway)
+"gWT" = (
+/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)
"gWV" = (
/obj/machinery/door/firedoor,
/obj/effect/mapping_helpers/airlock/access/all/medical/morgue,
@@ -30204,6 +30257,15 @@
},
/turf/open/floor/iron,
/area/station/commons/storage/tools)
+"hwJ" = (
+/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)
"hwK" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/half/contrasted{
@@ -31756,6 +31818,13 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/grimy,
/area/station/service/abandoned_gambling_den)
+"hSF" = (
+/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)
"hST" = (
/obj/structure/destructible/cult/item_dispenser/archives/library,
/obj/effect/decal/cleanable/cobweb,
@@ -31937,6 +32006,20 @@
/obj/structure/sign/warning/no_smoking,
/turf/closed/wall,
/area/station/engineering/atmos/storage)
+"hUZ" = (
+/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)
"hVi" = (
/obj/machinery/power/apc/auto_name/directional/west,
/obj/structure/cable,
@@ -35750,25 +35833,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,
@@ -36254,6 +36318,25 @@
},
/turf/open/floor/iron,
/area/station/security/execution/transfer)
+"iZH" = (
+/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)
"iZN" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -38196,6 +38279,18 @@
},
/turf/open/floor/iron,
/area/station/engineering/main)
+"jwW" = (
+/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)
"jxd" = (
/obj/docking_port/stationary/mining_home/common,
/turf/open/space/basic,
@@ -38528,13 +38623,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,
@@ -40383,18 +40471,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
@@ -40834,15 +40910,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,
@@ -41076,25 +41143,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,
@@ -41207,6 +41255,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/station/maintenance/department/science)
+"khr" = (
+/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)
"khB" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/line{
@@ -42451,44 +42508,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,
@@ -43800,14 +43819,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{
@@ -48560,6 +48571,13 @@
},
/turf/open/floor/iron,
/area/station/cargo/storage)
+"mcm" = (
+/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)
"mcp" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{
@@ -49251,6 +49269,17 @@
"mlE" = (
/turf/closed/wall/r_wall,
/area/station/ai_monitored/command/storage/eva)
+"mlR" = (
+/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)
"mlW" = (
/obj/structure/sign/nanotrasen{
pixel_y = 32
@@ -50975,18 +51004,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,
@@ -52347,6 +52364,13 @@
/obj/effect/spawner/random/trash/grille_or_waste,
/turf/open/floor/plating,
/area/station/maintenance/fore)
+"nba" = (
+/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)
"nbc" = (
/turf/open/floor/plating,
/area/station/service/theater/abandoned)
@@ -52503,17 +52527,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,
@@ -57243,15 +57256,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,
@@ -58921,13 +58925,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,
@@ -59278,13 +59275,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,
@@ -62129,14 +62119,6 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/science/xenobiology)
-"pDi" = (
-/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
-/obj/structure/table,
-/obj/machinery/newscaster/directional/west,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/science/circuits)
"pDt" = (
/obj/machinery/flasher/portable,
/obj/effect/turf_decal/bot,
@@ -66707,14 +66689,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;
@@ -68820,6 +68794,25 @@
},
/turf/open/floor/wood,
/area/station/service/electronic_marketing_den)
+"rjN" = (
+/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)
"rjO" = (
/obj/effect/turf_decal/siding/blue{
dir = 9
@@ -69356,19 +69349,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,
@@ -70246,6 +70226,19 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/command/bridge)
+"rBY" = (
+/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)
"rCc" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -70822,6 +70815,22 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/security/medical)
+"rJY" = (
+/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)
"rKb" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible,
@@ -72260,6 +72269,15 @@
},
/turf/open/floor/iron,
/area/station/service/hydroponics)
+"sas" = (
+/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)
"sau" = (
/obj/machinery/blackbox_recorder,
/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
@@ -73890,16 +73908,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{
@@ -77992,6 +78000,17 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/security/interrogation)
+"tyF" = (
+/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)
"tyK" = (
/obj/machinery/vending/wardrobe/jani_wardrobe,
/turf/open/floor/iron/dark,
@@ -78114,6 +78133,16 @@
/obj/structure/sign/poster/contraband/random/directional/east,
/turf/open/floor/iron,
/area/station/service/hydroponics/garden)
+"tAB" = (
+/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)
"tAL" = (
/obj/structure/sign/nanotrasen{
pixel_y = 32
@@ -78137,6 +78166,13 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron,
/area/station/engineering/atmos)
+"tAO" = (
+/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)
"tAS" = (
/obj/effect/turf_decal/siding/white,
/obj/structure/cable,
@@ -78570,21 +78606,6 @@
/obj/structure/sign/poster/official/random/directional/west,
/turf/open/floor/wood,
/area/station/maintenance/port/fore)
-"tFu" = (
-/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" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
@@ -78913,13 +78934,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,
@@ -88366,6 +88380,13 @@
},
/turf/open/floor/plating,
/area/station/maintenance/port/aft)
+"wdm" = (
+/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)
"wdt" = (
/obj/structure/cable,
/obj/effect/turf_decal/stripes/line{
@@ -93023,20 +93044,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,
@@ -95705,13 +95712,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,
@@ -104082,7 +104082,7 @@ ueB
uhL
btH
bPC
-bRC
+sas
bTs
rPe
vvL
@@ -119755,7 +119755,7 @@ jLx
dFw
mPr
bAR
-swg
+tAB
gsV
auh
tMl
@@ -120524,7 +120524,7 @@ pQo
uCa
wkj
bqP
-jYv
+jwW
bAR
gHt
bAV
@@ -121547,7 +121547,7 @@ wiZ
fXF
xkz
hwe
-tFu
+fnC
vpV
uCa
gQk
@@ -122298,10 +122298,10 @@ sID
pUW
qSm
wIf
-rpm
+rBY
lvJ
jYA
-xTC
+nba
eVG
wqF
npE
@@ -122893,7 +122893,7 @@ wEI
qNb
naL
nEc
-oSo
+mcm
kGQ
bGz
nzb
@@ -123117,7 +123117,7 @@ grl
iJU
pJM
pec
-bpL
+beI
fii
fii
lBz
@@ -124405,11 +124405,11 @@ swD
baw
fii
iqz
-kgi
+iZH
hps
hkJ
tum
-iTM
+rjN
abO
pTC
sNd
@@ -125944,7 +125944,7 @@ rnr
lRx
gRl
iQr
-bYv
+hwJ
pTC
qcM
vcB
@@ -126178,7 +126178,7 @@ aJU
keE
tbf
sdB
-kSn
+ePX
urC
aZo
jPJ
@@ -127005,7 +127005,7 @@ jqt
qub
uFt
elq
-pDi
+gWT
bWH
jDd
plP
@@ -127488,7 +127488,7 @@ pTC
pTC
unj
fKQ
-kyI
+fDT
xGw
iCI
pTC
@@ -127722,7 +127722,7 @@ tlp
nLY
uyf
klO
-dbC
+mlR
iNR
bCj
tjp
@@ -127992,7 +127992,7 @@ vcB
vcB
vcB
pTC
-qHo
+ewl
ydp
uTm
nfR
@@ -130295,7 +130295,7 @@ uQt
nia
vBY
eYN
-oNm
+wdm
iyq
iCO
uED
@@ -130572,7 +130572,7 @@ fHD
tCD
khb
rNZ
-xkV
+hUZ
ryp
khb
gmZ
@@ -132131,7 +132131,7 @@ bgL
mfI
fvi
tpg
-mHL
+byI
oZz
bpM
vzA
@@ -134170,7 +134170,7 @@ bMB
drM
mlE
odw
-kdL
+khr
eAY
fot
mpb
@@ -139045,7 +139045,7 @@ nrd
ivA
cVy
kSu
-jBs
+tAO
dsT
qBq
fQw
@@ -139216,7 +139216,7 @@ coH
xrr
adR
abi
-aeE
+rJY
aff
afG
afY
@@ -140272,7 +140272,7 @@ xGK
jdL
juz
jdL
-ncT
+tyF
hTl
tjl
kdE
@@ -146537,7 +146537,7 @@ feV
wZE
xvr
rmI
-tJB
+hSF
vTn
wZE
dre
@@ -148849,7 +148849,7 @@ iBx
nXH
qAu
kZE
-ooJ
+cfW
mzX
xin
dJP
@@ -150855,7 +150855,7 @@ aWO
bLs
iRi
nIV
-ale
+dpR
vyj
snW
auW
diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
index 9e5ecd8c0486f..3207e159113b2 100644
--- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm
+++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
@@ -1856,6 +1856,22 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
+"aCV" = (
+/obj/machinery/door/airlock/medical/glass{
+ name = "Medbay Chemistry Access"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/firedoor,
+/obj/structure/cable,
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/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)
"aCX" = (
/obj/structure/table,
/obj/item/stock_parts/subspace/filter,
@@ -2144,6 +2160,12 @@
dir = 9
},
/area/station/science/explab)
+"aIv" = (
+/obj/structure/railing/wooden_fence{
+ dir = 1
+ },
+/turf/open/misc/hay/icemoon,
+/area/icemoon/underground/explored)
"aIA" = (
/obj/effect/turf_decal/siding/thinplating/dark{
dir = 9
@@ -3789,6 +3811,10 @@
},
/turf/open/floor/plating,
/area/station/maintenance/starboard/aft)
+"bhs" = (
+/obj/item/flashlight/lantern/on,
+/turf/open/misc/hay/icemoon,
+/area/icemoon/underground/explored)
"bht" = (
/obj/structure/closet/lasertag/red,
/obj/effect/spawner/random/contraband/permabrig_gear,
@@ -3842,10 +3868,6 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/engineering/atmos/hfr_room)
-"bil" = (
-/obj/structure/railing/wooden_fence,
-/turf/open/misc/hay/icemoon,
-/area/icemoon/underground/explored)
"bin" = (
/obj/effect/turf_decal/stripes/asteroid/line{
dir = 4
@@ -5066,6 +5088,12 @@
/obj/structure/girder,
/turf/open/floor/plating,
/area/station/maintenance/fore)
+"byV" = (
+/obj/structure/railing/wooden_fence{
+ dir = 8
+ },
+/turf/open/misc/hay/icemoon,
+/area/icemoon/underground/explored)
"bzc" = (
/obj/machinery/status_display/evac/directional/east,
/obj/effect/turf_decal/tile/blue,
@@ -5212,6 +5240,16 @@
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/ce)
+"bAW" = (
+/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)
"bAX" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
@@ -6109,16 +6147,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,
@@ -6350,12 +6378,6 @@
/obj/effect/turf_decal/tile/green/full,
/turf/open/floor/iron/dark/smooth_large,
/area/station/medical/virology)
-"bPR" = (
-/obj/structure/railing/wooden_fence{
- dir = 1
- },
-/turf/open/misc/hay/icemoon,
-/area/icemoon/underground/explored)
"bPV" = (
/obj/item/kirbyplants/random/dead,
/turf/open/floor/plating/snowed/icemoon,
@@ -7863,6 +7885,17 @@
},
/turf/open/floor/iron,
/area/station/science/ordnance/testlab)
+"clX" = (
+/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)
"clY" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -8257,7 +8290,10 @@
dir = 8
},
/obj/machinery/light/small/directional/west,
-/obj/machinery/requests_console/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,
@@ -9080,14 +9116,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
@@ -9891,6 +9919,14 @@
/obj/effect/mapping_helpers/airlock/unres,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
+"cOY" = (
+/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)
"cPd" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -10292,6 +10328,27 @@
},
/turf/open/floor/wood/parquet,
/area/station/service/theater)
+"cWn" = (
+/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)
"cWq" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/obj/effect/turf_decal/tile/green/half/contrasted{
@@ -11340,9 +11397,6 @@
/obj/structure/marker_beacon/burgundy,
/turf/open/floor/plating/snowed/icemoon,
/area/icemoon/surface/outdoors/nospawn)
-"dlu" = (
-/turf/closed/wall/mineral/wood/nonmetal,
-/area/icemoon/underground/explored)
"dlB" = (
/obj/structure/table/wood,
/obj/item/storage/photo_album/chapel,
@@ -11544,6 +11598,34 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/wood/large,
/area/mine/eva/lower)
+"doO" = (
+/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)
"doW" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -12211,19 +12293,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 +12649,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,
@@ -14823,15 +14880,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,
@@ -16951,6 +16999,12 @@
/obj/structure/table/wood,
/turf/open/floor/carpet,
/area/station/command/meeting_room)
+"eYU" = (
+/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)
"eYX" = (
/obj/effect/turf_decal/trimline/green/filled/corner{
dir = 1
@@ -20633,12 +20687,6 @@
/obj/structure/closet/crate,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
-"ghA" = (
-/obj/structure/railing/wooden_fence{
- dir = 5
- },
-/turf/open/misc/hay/icemoon,
-/area/icemoon/underground/explored)
"ghE" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/camera/directional/west{
@@ -21817,6 +21865,27 @@
/obj/effect/landmark/generic_maintenance_landmark,
/turf/open/floor/plating,
/area/station/maintenance/port/aft)
+"gBg" = (
+/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)
"gBl" = (
/obj/structure/sign/warning/electric_shock,
/turf/closed/wall/r_wall,
@@ -22046,16 +22115,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
@@ -23036,22 +23095,6 @@
/obj/machinery/light/directional/west,
/turf/open/floor/plating,
/area/station/cargo/storage)
-"gTi" = (
-/obj/machinery/door/airlock/medical/glass{
- name = "Medbay Chemistry Access"
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/door/firedoor,
-/obj/structure/cable,
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/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)
"gTq" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -24211,6 +24254,12 @@
/obj/structure/mirror/directional/east,
/turf/open/floor/iron/freezer,
/area/station/commons/toilet/locker)
+"hnc" = (
+/obj/structure/railing/wooden_fence{
+ dir = 9
+ },
+/turf/open/misc/hay/icemoon,
+/area/icemoon/underground/explored)
"hnd" = (
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/plating,
@@ -24285,6 +24334,12 @@
/obj/machinery/hydroponics/constructable,
/turf/open/floor/iron/dark,
/area/station/service/hydroponics)
+"hop" = (
+/obj/structure/railing/wooden_fence{
+ dir = 6
+ },
+/turf/open/misc/hay/icemoon,
+/area/icemoon/underground/explored)
"hos" = (
/obj/structure/disposalpipe/trunk/multiz/down{
dir = 1
@@ -24660,13 +24715,12 @@
/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)
+"hsU" = (
+/obj/structure/railing/wooden_fence{
+ dir = 4
+ },
+/turf/open/misc/hay/icemoon,
+/area/icemoon/underground/explored)
"htd" = (
/obj/structure/sign/warning/docking/directional/north,
/turf/open/misc/asteroid/snow/icemoon,
@@ -24907,6 +24961,9 @@
},
/turf/open/floor/iron,
/area/station/cargo/office)
+"hwL" = (
+/turf/open/misc/hay/icemoon,
+/area/icemoon/underground/explored)
"hwR" = (
/obj/machinery/camera/directional/west{
c_tag = "Security - Equipment Room"
@@ -26584,6 +26641,19 @@
},
/turf/open/floor/plating/snowed/icemoon,
/area/icemoon/underground/explored)
+"hYU" = (
+/obj/effect/turf_decal/siding/yellow/corner,
+/obj/machinery/status_display/evac/directional/south,
+/obj/structure/table,
+/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)
"hZe" = (
/obj/effect/turf_decal/trimline/yellow/warning{
dir = 1
@@ -26924,12 +26994,6 @@
},
/turf/open/floor/iron/smooth,
/area/station/security/holding_cell)
-"idH" = (
-/obj/structure/railing/wooden_fence{
- dir = 6
- },
-/turf/open/misc/hay/icemoon,
-/area/icemoon/underground/explored)
"idN" = (
/obj/structure/window/reinforced/spawner/directional/north,
/obj/machinery/door/window/brigdoor/left/directional/south{
@@ -27181,28 +27245,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,
@@ -27945,6 +27987,16 @@
},
/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/surface/outdoors/nospawn)
+"itQ" = (
+/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)
"itY" = (
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating/snowed/icemoon,
@@ -28296,26 +28348,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,
@@ -28874,12 +28906,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{
@@ -29736,16 +29762,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
@@ -30515,17 +30531,6 @@
/obj/effect/turf_decal/tile/dark/fourcorners,
/turf/open/floor/iron,
/area/mine/living_quarters)
-"jko" = (
-/obj/structure/railing,
-/obj/structure/rack,
-/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;
@@ -30543,12 +30548,6 @@
/obj/effect/landmark/blobstart,
/turf/open/floor/engine,
/area/station/science/explab)
-"jkK" = (
-/obj/structure/railing/wooden_fence{
- dir = 9
- },
-/turf/open/misc/hay/icemoon,
-/area/icemoon/underground/explored)
"jkN" = (
/obj/effect/spawner/random/entertainment/arcade,
/obj/machinery/status_display/ai/directional/north,
@@ -31079,34 +31078,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;
@@ -31814,6 +31785,9 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/command/nuke_storage)
+"jEa" = (
+/turf/closed/wall/mineral/wood/nonmetal,
+/area/icemoon/underground/explored)
"jEf" = (
/obj/effect/turf_decal/trimline/green/filled/line{
dir = 5
@@ -33374,6 +33348,18 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
+"kck" = (
+/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)
"kcm" = (
/obj/structure/rack,
/obj/effect/spawner/random/techstorage/command_all,
@@ -33569,16 +33555,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,
@@ -35019,6 +34995,12 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"kyM" = (
+/obj/structure/table,
+/obj/item/plant_analyzer,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/plating,
+/area/station/engineering/storage/tech)
"kyU" = (
/obj/machinery/modular_computer/preset/id,
/obj/machinery/light/directional/north,
@@ -35188,6 +35170,13 @@
},
/turf/open/floor/iron,
/area/station/command/bridge)
+"kBw" = (
+/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)
"kBL" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 1
@@ -36844,11 +36833,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron/large,
/area/station/engineering/engine_smes)
-"kYN" = (
-/obj/structure/table/wood,
-/obj/item/flashlight/lantern/on,
-/turf/open/misc/hay/icemoon,
-/area/icemoon/underground/explored)
"kZa" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -40266,6 +40250,17 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/turf/open/floor/plating,
/area/station/engineering/storage_shared)
+"mci" = (
+/obj/structure/railing,
+/obj/structure/rack,
+/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)
"mco" = (
/obj/structure/closet/emcloset,
/turf/open/floor/plating,
@@ -40484,16 +40479,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,
@@ -40531,12 +40516,6 @@
},
/turf/open/floor/iron,
/area/station/ai_monitored/command/storage/eva)
-"mhj" = (
-/obj/structure/railing/wooden_fence{
- dir = 10
- },
-/turf/open/misc/hay/icemoon,
-/area/icemoon/underground/explored)
"mhq" = (
/obj/structure/closet,
/obj/effect/spawner/random/maintenance,
@@ -41523,27 +41502,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,
@@ -42205,6 +42163,19 @@
/obj/machinery/duct,
/turf/open/floor/iron/kitchen/diagonal,
/area/station/service/kitchen)
+"mMj" = (
+/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)
"mMk" = (
/obj/machinery/telecomms/message_server/preset,
/turf/open/floor/iron/dark/telecomms,
@@ -43309,17 +43280,6 @@
/obj/item/kirbyplants/random,
/turf/open/floor/iron,
/area/station/commons/locker)
-"ncx" = (
-/obj/structure/table/wood,
-/obj/item/soap/deluxe{
- pixel_y = 11
- },
-/obj/item/soap/deluxe{
- pixel_y = 6
- },
-/obj/item/soap/deluxe,
-/turf/open/misc/hay/icemoon,
-/area/icemoon/underground/explored)
"ncB" = (
/obj/machinery/door/airlock/security/glass{
name = "Brig Walkway"
@@ -45437,10 +45397,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/hallway/secondary/entry)
-"nEI" = (
-/obj/item/flashlight/lantern/on,
-/turf/open/misc/hay/icemoon,
-/area/icemoon/underground/explored)
"nEV" = (
/obj/machinery/vending/wardrobe/sec_wardrobe,
/obj/structure/cable,
@@ -47285,16 +47241,6 @@
/obj/structure/urinal/directional/north,
/turf/open/floor/iron/freezer,
/area/station/commons/toilet)
-"oiB" = (
-/obj/machinery/door/airlock/maintenance{
- name = "Chemistry Lab Utilities"
- },
-/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/general,
-/turf/open/floor/iron/smooth,
-/area/station/maintenance/department/medical/central)
"oiD" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -48561,6 +48507,17 @@
/obj/machinery/atmospherics/pipe/smart/simple/violet/visible/layer1,
/turf/open/floor/iron,
/area/station/engineering/atmos/storage)
+"oAJ" = (
+/obj/structure/table/wood,
+/obj/item/raptor_dex{
+ pixel_y = 13
+ },
+/obj/item/raptor_dex{
+ pixel_y = 7
+ },
+/obj/item/raptor_dex,
+/turf/open/misc/hay/icemoon,
+/area/icemoon/underground/explored)
"oAM" = (
/obj/structure/fluff/tram_rail/end{
dir = 4
@@ -48639,6 +48596,28 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/solars/starboard/fore)
+"oCm" = (
+/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)
"oCs" = (
/obj/structure/table,
/obj/item/radio/headset/headset_med{
@@ -49499,18 +49478,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{
@@ -51026,6 +50993,16 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/smooth,
/area/station/security/holding_cell)
+"pmA" = (
+/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)
"pna" = (
/obj/machinery/door/poddoor/preopen{
id = "Engineering";
@@ -51427,19 +51404,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
@@ -51512,27 +51476,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,
@@ -51563,6 +51506,16 @@
/obj/machinery/firealarm/directional/north,
/turf/open/floor/iron/dark,
/area/station/cargo/drone_bay)
+"pvd" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Chemistry Lab Utilities"
+ },
+/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/general,
+/turf/open/floor/iron/smooth,
+/area/station/maintenance/department/medical/central)
"pve" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -52447,17 +52400,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
@@ -53704,10 +53646,6 @@
/obj/effect/mapping_helpers/airlock/access/any/engineering/external,
/turf/open/floor/plating,
/area/station/medical/morgue)
-"qbM" = (
-/obj/structure/ore_container/food_trough/raptor_trough,
-/turf/open/misc/hay/icemoon,
-/area/icemoon/underground/explored)
"qbO" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -53767,12 +53705,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,
@@ -55507,6 +55439,12 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/wood,
/area/station/commons/dorms)
+"qBi" = (
+/obj/structure/railing/wooden_fence{
+ dir = 10
+ },
+/turf/open/misc/hay/icemoon,
+/area/icemoon/underground/explored)
"qBj" = (
/obj/structure/cable,
/turf/open/floor/iron/white,
@@ -55888,6 +55826,11 @@
/obj/effect/turf_decal/bot_white,
/turf/open/floor/iron/checker,
/area/station/commons/storage/emergency/port)
+"qGX" = (
+/obj/structure/table/wood,
+/obj/item/flashlight/lantern/on,
+/turf/open/misc/hay/icemoon,
+/area/icemoon/underground/explored)
"qHg" = (
/obj/structure/transit_tube/curved/flipped{
dir = 1
@@ -55930,6 +55873,10 @@
/obj/structure/flora/bush/fullgrass/style_random,
/turf/open/floor/grass,
/area/station/service/hydroponics)
+"qHt" = (
+/obj/structure/railing/wooden_fence,
+/turf/open/misc/hay/icemoon,
+/area/icemoon/underground/explored)
"qHz" = (
/obj/machinery/light_switch/directional/west,
/obj/machinery/disposal/bin{
@@ -58932,17 +58879,6 @@
/obj/machinery/digital_clock/directional/south,
/turf/open/openspace,
/area/station/medical/medbay/lobby)
-"rzY" = (
-/obj/structure/table/wood,
-/obj/item/raptor_dex{
- pixel_y = 13
- },
-/obj/item/raptor_dex{
- pixel_y = 7
- },
-/obj/item/raptor_dex,
-/turf/open/misc/hay/icemoon,
-/area/icemoon/underground/explored)
"rAr" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -59326,12 +59262,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/science/ordnance)
-"rEn" = (
-/obj/structure/railing/wooden_fence{
- dir = 4
- },
-/turf/open/misc/hay/icemoon,
-/area/icemoon/underground/explored)
"rEp" = (
/obj/structure/table,
/obj/item/hand_labeler,
@@ -59947,6 +59877,18 @@
"rQf" = (
/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
+"rQh" = (
+/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)
"rQl" = (
/obj/structure/lattice/catwalk,
/obj/structure/railing/corner,
@@ -66988,6 +66930,19 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron/dark,
/area/mine/mechbay)
+"tWF" = (
+/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)
"tWK" = (
/obj/structure/cable,
/turf/open/floor/plating/snowed/icemoon,
@@ -67111,6 +67066,16 @@
/obj/machinery/light/directional/north,
/turf/open/floor/iron,
/area/station/security/prison/garden)
+"tYL" = (
+/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)
"tYZ" = (
/obj/machinery/door/airlock/external{
name = "External Airlock"
@@ -69495,6 +69460,26 @@
},
/turf/open/floor/iron/dark,
/area/mine/storage)
+"uMw" = (
+/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)
"uMx" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
@@ -70664,6 +70649,10 @@
},
/turf/open/floor/iron,
/area/station/science/ordnance)
+"vfO" = (
+/obj/structure/ore_container/food_trough/raptor_trough,
+/turf/open/misc/hay/icemoon,
+/area/icemoon/underground/explored)
"vfS" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -71357,6 +71346,15 @@
/obj/item/kirbyplants/random,
/turf/open/floor/iron,
/area/station/security/courtroom)
+"vrl" = (
+/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)
"vrr" = (
/obj/machinery/computer/operating{
dir = 8
@@ -72257,6 +72255,16 @@
},
/turf/open/floor/iron,
/area/mine/laborcamp)
+"vDG" = (
+/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)
"vDQ" = (
/obj/effect/spawner/random/decoration/flower,
/obj/structure/flora/rock/pile/icy/style_random,
@@ -74881,19 +74889,6 @@
},
/turf/open/floor/iron/dark/textured,
/area/station/security/prison)
-"wuV" = (
-/obj/effect/turf_decal/siding/yellow/corner,
-/obj/machinery/status_display/evac/directional/south,
-/obj/structure/table,
-/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" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron/white,
@@ -74902,9 +74897,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/carpet,
/area/station/service/chapel)
-"wvu" = (
-/turf/open/misc/hay/icemoon,
-/area/icemoon/underground/explored)
"wvv" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -76587,16 +76579,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{
@@ -77908,6 +77890,16 @@
/obj/item/stack/sheet/leather,
/turf/open/floor/iron,
/area/station/maintenance/starboard/fore)
+"xpH" = (
+/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)
"xpJ" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -78453,12 +78445,6 @@
},
/turf/open/floor/iron/dark,
/area/station/engineering/atmos/hfr_room)
-"xxH" = (
-/obj/structure/railing/wooden_fence{
- dir = 8
- },
-/turf/open/misc/hay/icemoon,
-/area/icemoon/underground/explored)
"xxI" = (
/obj/machinery/airalarm/directional/north,
/obj/item/kirbyplants/random,
@@ -79729,6 +79715,12 @@
dir = 1
},
/area/station/security/processing)
+"xQJ" = (
+/obj/structure/railing/wooden_fence{
+ dir = 5
+ },
+/turf/open/misc/hay/icemoon,
+/area/icemoon/underground/explored)
"xQK" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
@@ -80073,6 +80065,17 @@
/obj/item/plate,
/turf/open/floor/iron,
/area/station/security/prison/mess)
+"xWC" = (
+/obj/structure/table/wood,
+/obj/item/soap/deluxe{
+ pixel_y = 11
+ },
+/obj/item/soap/deluxe{
+ pixel_y = 6
+ },
+/obj/item/soap/deluxe,
+/turf/open/misc/hay/icemoon,
+/area/icemoon/underground/explored)
"xWG" = (
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron/freezer,
@@ -169287,7 +169290,7 @@ hdb
avh
qGg
uUT
-dDQ
+rQh
lQh
diI
uUT
@@ -170287,14 +170290,14 @@ thA
thA
thA
thA
-dlu
-dlu
-dlu
-dlu
-dlu
-dlu
-dlu
-dlu
+jEa
+jEa
+jEa
+jEa
+jEa
+jEa
+jEa
+jEa
qgQ
qgQ
rrl
@@ -170544,14 +170547,14 @@ thA
thA
thA
thA
-dlu
-qbM
-wvu
-wvu
-bPR
-qbM
-wvu
-bil
+jEa
+vfO
+hwL
+hwL
+aIv
+vfO
+hwL
+qHt
ijY
iDt
iDt
@@ -170801,14 +170804,14 @@ thA
thA
thA
thA
-dlu
-nEI
-wvu
-wvu
-bPR
-nEI
-wvu
-bil
+jEa
+bhs
+hwL
+hwL
+aIv
+bhs
+hwL
+qHt
iDt
iDt
iDt
@@ -171058,14 +171061,14 @@ thA
thA
thA
thA
-dlu
-wvu
-wvu
-wvu
-bPR
-wvu
-wvu
-bil
+jEa
+hwL
+hwL
+hwL
+aIv
+hwL
+hwL
+qHt
iDt
iDt
ayJ
@@ -171315,14 +171318,14 @@ tjo
thA
thA
thA
-dlu
-rEn
-rEn
-wvu
-ghA
-rEn
-wvu
-idH
+jEa
+hsU
+hsU
+hwL
+xQJ
+hsU
+hwL
+hop
iDt
iDt
iDt
@@ -171572,14 +171575,14 @@ tjo
thA
thA
thA
-dlu
-wvu
-wvu
-wvu
-wvu
-wvu
-wvu
-wvu
+jEa
+hwL
+hwL
+hwL
+hwL
+hwL
+hwL
+hwL
iDt
iDt
iDt
@@ -171829,14 +171832,14 @@ tjo
thA
thA
thA
-dlu
-ncx
-kYN
-wvu
-wvu
-rzY
-kYN
-wvu
+jEa
+xWC
+qGX
+hwL
+hwL
+oAJ
+qGX
+hwL
ayJ
iDt
iDt
@@ -172086,14 +172089,14 @@ tjo
thA
thA
thA
-dlu
-wvu
-wvu
-wvu
-wvu
-wvu
-wvu
-wvu
+jEa
+hwL
+hwL
+hwL
+hwL
+hwL
+hwL
+hwL
iDt
iDt
iDt
@@ -172343,14 +172346,14 @@ tjo
thA
thA
thA
-dlu
-xxH
-xxH
-wvu
-jkK
-xxH
-wvu
-mhj
+jEa
+byV
+byV
+hwL
+hnc
+byV
+hwL
+qBi
iDt
iDt
iDt
@@ -172600,14 +172603,14 @@ tjo
thA
thA
thA
-dlu
-wvu
-wvu
-wvu
-bPR
-wvu
-wvu
-bil
+jEa
+hwL
+hwL
+hwL
+aIv
+hwL
+hwL
+qHt
iDt
iDt
ayJ
@@ -172857,14 +172860,14 @@ tjo
thA
thA
thA
-dlu
-nEI
-wvu
-wvu
-bPR
-nEI
-wvu
-bil
+jEa
+bhs
+hwL
+hwL
+aIv
+bhs
+hwL
+qHt
iDt
iDt
iDt
@@ -173114,14 +173117,14 @@ tjo
thA
thA
thA
-dlu
-qbM
-wvu
-wvu
-bPR
-qbM
-wvu
-bil
+jEa
+vfO
+hwL
+hwL
+aIv
+vfO
+hwL
+qHt
iDt
iDt
iDt
@@ -173371,14 +173374,14 @@ tjo
thA
thA
thA
-dlu
-dlu
-dlu
-dlu
-dlu
-dlu
-dlu
-dlu
+jEa
+jEa
+jEa
+jEa
+jEa
+jEa
+jEa
+jEa
iDx
rrl
iDx
@@ -230667,7 +230670,7 @@ lJO
qzs
jnV
lJO
-iWO
+xpH
gHS
iMT
hqx
@@ -237675,7 +237678,7 @@ mNY
kCn
mNY
dUn
-ptx
+mMj
cpH
kbJ
kbJ
@@ -237686,7 +237689,7 @@ epY
vWe
kIt
kMY
-qde
+eYU
lha
kAK
iLY
@@ -238090,7 +238093,7 @@ aWk
diC
bJj
lyG
-jko
+mci
bXy
feJ
xWb
@@ -238705,7 +238708,7 @@ mNY
akL
tvF
tvF
-izF
+uMw
gTK
ruO
fKe
@@ -238932,7 +238935,7 @@ ylU
bep
paM
xxQ
-keX
+vDG
kzO
gdP
ykL
@@ -239402,7 +239405,7 @@ wqx
gEb
gYp
bWn
-bMC
+itQ
cGt
wRI
qdE
@@ -239959,7 +239962,7 @@ dnq
vrX
pua
paM
-iIW
+kyM
vJI
uud
gdP
@@ -239990,7 +239993,7 @@ mNY
ixG
aPf
dzJ
-puI
+cWn
twt
mEw
sSJ
@@ -240234,7 +240237,7 @@ dPT
pRj
pMu
gVD
-dxJ
+tWF
ajF
qwe
uJH
@@ -241776,7 +241779,7 @@ vvv
tTV
jtA
bID
-wUE
+bAW
miw
gCK
cMd
@@ -242041,7 +242044,7 @@ dcC
jGB
akz
sCA
-pIF
+clX
ojv
bAT
eri
@@ -242300,7 +242303,7 @@ wHj
mBB
juH
ojv
-htc
+kBw
mDw
jDT
qKQ
@@ -242810,7 +242813,7 @@ bDz
rSC
inE
oPU
-wuV
+hYU
qnC
qnC
sCA
@@ -245556,7 +245559,7 @@ bln
bln
fsm
bUx
-cCC
+cOY
wph
fnS
skl
@@ -246892,7 +246895,7 @@ veU
vEQ
kRP
kRP
-oiB
+pvd
kRP
pao
cGA
@@ -247661,7 +247664,7 @@ sEz
jFZ
uoV
gnb
-gTi
+aCV
whh
pQL
nCV
@@ -257423,8 +257426,8 @@ gqK
nxU
gjg
dxg
-jth
-mgu
+doO
+pmA
dkr
cHQ
jDm
@@ -257705,7 +257708,7 @@ kLy
bGA
lKq
bNu
-myU
+gBg
bKm
xMT
hjE
@@ -257713,8 +257716,8 @@ sJP
bkS
pJc
iBO
-iji
-gEo
+oCm
+tYL
bgx
buv
jhC
@@ -259189,7 +259192,7 @@ fLb
oHh
kKL
bpQ
-epd
+vrl
oih
dmL
lUC
@@ -260251,7 +260254,7 @@ mrw
kuV
cAi
qWn
-oPq
+kck
fOR
tFF
tia
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 6cd01a35c9daf..5e7ab642c2741 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
@@ -1105,14 +1098,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)
@@ -4887,6 +4872,15 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"bKi" = (
+/obj/structure/rack,
+/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)
"bKv" = (
/obj/item/pen,
/obj/structure/table/reinforced,
@@ -5167,16 +5161,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,
@@ -7433,6 +7417,12 @@
},
/turf/open/floor/plating,
/area/station/science/genetics)
+"cIl" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/plating,
+/area/station/maintenance/port/aft)
"cIK" = (
/obj/machinery/smartfridge/chemistry/preloaded,
/obj/effect/turf_decal/tile/yellow/fourcorners,
@@ -7459,12 +7449,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,
@@ -9208,20 +9192,6 @@
/obj/structure/closet/emcloset,
/turf/open/floor/plating,
/area/station/hallway/secondary/entry)
-"dqE" = (
-/obj/structure/closet/toolcloset,
-/obj/effect/turf_decal/bot,
-/obj/effect/turf_decal/tile/yellow{
- dir = 4
- },
-/obj/machinery/light/small/directional/north,
-/obj/item/lightreplacer{
- pixel_y = 7
- },
-/turf/open/floor/iron/dark/corner{
- dir = 1
- },
-/area/station/engineering/storage_shared)
"dqI" = (
/obj/effect/turf_decal/bot,
/obj/machinery/vending/cigarette,
@@ -9843,6 +9813,22 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron,
/area/station/science/robotics/mechbay)
+"dEk" = (
+/obj/effect/turf_decal/bot,
+/obj/structure/rack,
+/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)
"dEx" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -10986,6 +10972,30 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plating,
/area/station/security/prison)
+"dXp" = (
+/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)
"dXs" = (
/obj/structure/secure_safe/directional/north{
name = "armory safe A"
@@ -11675,6 +11685,18 @@
dir = 8
},
/area/station/service/chapel)
+"ehL" = (
+/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)
"ehX" = (
/turf/open/floor/iron/dark,
/area/station/medical/storage)
@@ -12669,6 +12691,15 @@
/obj/effect/turf_decal/tile/blue/fourcorners,
/turf/open/floor/iron/white,
/area/station/medical/surgery/theatre)
+"eyz" = (
+/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)
"eyD" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible,
@@ -14326,6 +14357,20 @@
/obj/item/aquarium_kit,
/turf/open/floor/iron,
/area/station/hallway/secondary/service)
+"ffO" = (
+/obj/structure/closet/toolcloset,
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/machinery/light/small/directional/north,
+/obj/item/lightreplacer{
+ pixel_y = 7
+ },
+/turf/open/floor/iron/dark/corner{
+ dir = 1
+ },
+/area/station/engineering/storage_shared)
"ffP" = (
/obj/effect/spawner/random/structure/grille,
/turf/open/floor/plating/foam{
@@ -15169,6 +15214,19 @@
/obj/effect/mapping_helpers/airlock/access/all/security/entrance,
/turf/open/floor/iron,
/area/station/security/brig)
+"frK" = (
+/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)
"frZ" = (
/obj/effect/turf_decal/delivery,
/obj/machinery/atmospherics/components/binary/pump{
@@ -15344,6 +15402,20 @@
/obj/structure/marker_beacon/olive,
/turf/open/space/basic,
/area/space/nearstation)
+"fxE" = (
+/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)
"fxI" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -16126,6 +16198,13 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/ce)
+"fMR" = (
+/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)
"fMT" = (
/obj/structure/table,
/obj/item/radio/intercom/directional/south,
@@ -16762,6 +16841,20 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
+"gaP" = (
+/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)
"gaU" = (
/obj/machinery/button/door/directional/west{
id = "hop";
@@ -16818,6 +16911,20 @@
/obj/effect/mapping_helpers/airlock/unres,
/turf/open/floor/plating,
/area/station/science/research)
+"gcz" = (
+/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)
"gcA" = (
/obj/machinery/navbeacon{
codes_txt = "patrol;next_patrol=5-Customs";
@@ -19642,6 +19749,16 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"hcA" = (
+/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)
"hcP" = (
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plating,
@@ -22689,19 +22806,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{
@@ -22787,25 +22891,6 @@
/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")
- },
-/turf/open/floor/iron,
-/area/station/science/robotics/mechbay)
"ihW" = (
/obj/structure/lattice/catwalk,
/obj/structure/disposalpipe/trunk{
@@ -25564,13 +25649,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,
@@ -26388,20 +26466,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"
@@ -27201,16 +27265,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{
@@ -29971,23 +30025,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"
@@ -30853,30 +30890,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)
@@ -32128,15 +32141,6 @@
},
/turf/open/floor/plating,
/area/station/maintenance/fore)
-"loY" = (
-/obj/structure/rack,
-/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" = (
/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{
dir = 4
@@ -33579,15 +33583,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";
@@ -37199,30 +37194,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,
@@ -37566,6 +37537,13 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/security/office)
+"nnu" = (
+/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)
"nnD" = (
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
dir = 4
@@ -39812,20 +39790,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,
@@ -39900,6 +39864,12 @@
/obj/structure/window/reinforced/spawner/directional/east,
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/rd)
+"obU" = (
+/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)
"ocg" = (
/obj/structure/extinguisher_cabinet/directional/south,
/obj/structure/cable,
@@ -42020,12 +41990,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";
@@ -42049,6 +42013,32 @@
},
/turf/open/floor/iron/cafeteria,
/area/station/service/kitchen)
+"oRA" = (
+/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)
"oRM" = (
/obj/machinery/atmospherics/pipe/smart/simple/yellow/visible{
dir = 4
@@ -42624,6 +42614,15 @@
},
/turf/open/floor/iron/white,
/area/station/command/heads_quarters/cmo)
+"pcP" = (
+/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)
"pcS" = (
/obj/item/stack/ore/silver,
/obj/item/stack/ore/silver,
@@ -46153,20 +46152,6 @@
/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,
@@ -46940,15 +46925,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,
@@ -49578,13 +49554,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,
@@ -49753,32 +49722,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{
@@ -52680,6 +52623,13 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
+"sDl" = (
+/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)
"sDo" = (
/obj/structure/cable,
/obj/effect/landmark/event_spawn,
@@ -54592,6 +54542,30 @@
/obj/item/radio/intercom/prison/directional/north,
/turf/open/floor/iron,
/area/station/security/prison)
+"tkT" = (
+/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)
"tlh" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -54984,6 +54958,14 @@
/obj/item/knife/kitchen,
/turf/open/floor/iron/white,
/area/station/science/cytology)
+"tsN" = (
+/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)
"tsT" = (
/obj/effect/turf_decal/stripes/corner{
dir = 1
@@ -56717,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
@@ -57829,6 +57800,25 @@
/obj/structure/chair/stool/directional/east,
/turf/open/floor/iron,
/area/station/commons/dorms)
+"urN" = (
+/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)
"urQ" = (
/obj/structure/lattice/catwalk,
/obj/item/stack/cable_coil,
@@ -58914,22 +58904,6 @@
/obj/machinery/computer/accounting,
/turf/open/floor/wood,
/area/station/command/heads_quarters/hop)
-"uJz" = (
-/obj/effect/turf_decal/bot,
-/obj/structure/rack,
-/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" = (
/obj/structure/chair/stool/directional/east,
/turf/open/floor/iron,
@@ -59286,6 +59260,14 @@
},
/turf/open/floor/iron,
/area/station/service/hydroponics/garden)
+"uPS" = (
+/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)
"uQe" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -61572,18 +61554,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,
@@ -63552,6 +63522,16 @@
/obj/effect/landmark/start/hangover/closet,
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
+"wiQ" = (
+/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)
"wiS" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/cable,
@@ -64452,6 +64432,17 @@
},
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
+"wAc" = (
+/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)
"wAk" = (
/obj/machinery/status_display/evac/directional/south,
/obj/structure/disposalpipe/segment{
@@ -67049,14 +67040,6 @@
/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
@@ -68571,6 +68554,23 @@
/obj/item/radio/intercom/directional/north,
/turf/open/floor/iron,
/area/station/security/courtroom)
+"xZe" = (
+/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)
"xZu" = (
/obj/structure/sink/kitchen/directional/east{
desc = "A sink used for washing one's hands and face. It looks rusty and home-made";
@@ -85318,7 +85318,7 @@ lMJ
lMJ
lMJ
pnI
-qqp
+gcz
xDu
pcS
pnI
@@ -86859,7 +86859,7 @@ jXu
bZz
vRr
paD
-kAh
+xZe
dSG
apC
sUD
@@ -88201,7 +88201,7 @@ kRA
jUb
xYq
dqN
-cIS
+cIl
jUb
rvI
jUb
@@ -93073,7 +93073,7 @@ jIg
dTr
rIL
bwN
-avJ
+uPS
ukk
rGm
gqX
@@ -94353,7 +94353,7 @@ ndS
urA
pFG
gBD
-xxn
+tsN
fRu
hVE
xXw
@@ -96100,7 +96100,7 @@ aaa
aaa
aeq
xCo
-loY
+bKi
tTP
fdQ
uou
@@ -96142,7 +96142,7 @@ gGy
qVc
dMY
jYL
-lUo
+eyz
aAt
duI
pCO
@@ -96414,7 +96414,7 @@ haP
jzN
fEC
eQe
-oQS
+obU
iAA
oSo
cgF
@@ -97455,7 +97455,7 @@ rgZ
suW
hJF
cZK
-ihF
+urN
cXg
nyy
gVl
@@ -98490,7 +98490,7 @@ cBV
xlv
eut
bUo
-jrR
+fxE
jtS
bFH
mMl
@@ -98985,7 +98985,7 @@ nse
bmb
lwg
aAK
-qGc
+pcP
tvE
qJU
hPM
@@ -99506,7 +99506,7 @@ kON
ylQ
bGC
wHu
-igr
+frK
ibw
ibw
nIP
@@ -102083,7 +102083,7 @@ ftj
wXF
doM
tZo
-vCR
+ehL
oFT
gvS
oYZ
@@ -107697,10 +107697,10 @@ psZ
psZ
qXB
gAU
-tXl
+wAc
oUK
eRR
-ryp
+sDl
cdX
sDE
hjS
@@ -107711,7 +107711,7 @@ ggM
ggM
dLq
lzL
-aev
+fMR
lzL
lzL
scG
@@ -108454,7 +108454,7 @@ rpx
dPy
loA
poc
-ngY
+dXp
uXd
tfg
tfg
@@ -108711,12 +108711,12 @@ oKx
gLK
joo
sHT
-rBe
+oRA
uXd
dVc
bYp
gXu
-oaC
+gaP
uXd
gMG
dWG
@@ -109239,7 +109239,7 @@ woL
jLo
nwC
nLz
-jEh
+wiQ
hYE
rEd
sby
@@ -109487,7 +109487,7 @@ cnK
jPe
dPy
poc
-jdB
+nnu
cnK
giH
aJj
@@ -111293,7 +111293,7 @@ qLw
tdf
mdk
kYG
-dqE
+ffO
oFH
oFH
sSz
@@ -111807,7 +111807,7 @@ hko
uLp
qTX
kYG
-uJz
+dEk
iHy
vSC
eKw
@@ -113630,7 +113630,7 @@ efd
nwK
fFC
uVf
-kRc
+tkT
gDq
ich
jnQ
@@ -118805,7 +118805,7 @@ aaa
lMJ
jlU
jlU
-bPu
+hcA
aYl
kcu
jlU
diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm
index 1ae71b1799f2c..b38b99867ab47 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{
diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm
index 7ce411f102fc1..0791f34e05b23 100644
--- a/_maps/map_files/NorthStar/north_star.dmm
+++ b/_maps/map_files/NorthStar/north_star.dmm
@@ -2709,28 +2709,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,
@@ -3270,20 +3248,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,
@@ -4468,14 +4432,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 +5240,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 +5391,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,
@@ -20604,6 +20545,11 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/medical/virology)
+"frG" = (
+/obj/structure/rack,
+/obj/effect/spawner/random/armory/dragnet,
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/security/armory)
"frL" = (
/turf/closed/wall,
/area/station/engineering/gravity_generator)
@@ -24323,6 +24269,24 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/security/prison/visit)
+"gra" = (
+/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)
"grb" = (
/obj/effect/turf_decal/trimline/green/filled/line,
/obj/effect/turf_decal/trimline/green/filled/line{
@@ -25328,14 +25292,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"
@@ -26255,6 +26211,21 @@
initial_gas_mix = "TEMP=2.7"
},
/area/station/science/ordnance/bomb)
+"gQW" = (
+/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)
"gRf" = (
/obj/machinery/door/airlock/public/glass{
name = "Public Airlock"
@@ -26749,21 +26720,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,
@@ -28966,12 +28922,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
@@ -30903,6 +30853,14 @@
/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron,
/area/station/engineering/engine_smes)
+"ibO" = (
+/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)
"ibT" = (
/obj/effect/turf_decal/delivery,
/obj/effect/decal/cleanable/dirt,
@@ -31320,20 +31278,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,
@@ -42024,6 +41968,14 @@
},
/turf/open/floor/iron/dark/side,
/area/station/engineering/engine_smes)
+"kSG" = (
+/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)
"kSN" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -42140,26 +42092,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,
@@ -42606,6 +42538,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/hallway/floor3/fore)
+"kZI" = (
+/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)
"kZS" = (
/obj/effect/turf_decal/siding/wood,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -47566,22 +47506,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
@@ -49279,12 +49203,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
@@ -50918,16 +50836,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
@@ -52483,6 +52391,12 @@
dir = 4
},
/area/station/hallway/floor1/fore)
+"nwk" = (
+/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)
"nwx" = (
/obj/item/wallframe/button,
/obj/effect/mapping_helpers/burnt_floor,
@@ -52539,6 +52453,28 @@
},
/turf/open/floor/plating,
/area/station/maintenance/disposal)
+"nxB" = (
+/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)
"nxC" = (
/obj/effect/turf_decal/stripes/full,
/obj/machinery/door/airlock{
@@ -53015,30 +52951,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/pod/light,
/area/station/maintenance/floor1/starboard/fore)
-"nDQ" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
-/obj/structure/table/reinforced,
-/obj/structure/window/spawner/directional/south,
-/obj/effect/turf_decal/trimline/yellow/corner{
- dir = 4
- },
-/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
- },
-/area/station/engineering/lobby)
"nEa" = (
/obj/structure/table/wood,
/obj/item/flashlight/lamp/green,
@@ -53499,6 +53411,16 @@
/obj/structure/foamedmetal,
/turf/open/floor/engine,
/area/station/maintenance/floor1/port/aft)
+"nJz" = (
+/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)
"nJC" = (
/obj/item/restraints/handcuffs,
/obj/item/restraints/handcuffs,
@@ -54681,6 +54603,26 @@
},
/turf/open/floor/iron/dark,
/area/station/hallway/secondary/exit/departure_lounge)
+"nYQ" = (
+/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)
"nYZ" = (
/obj/effect/turf_decal/tile/red/half/contrasted,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -56058,6 +56000,17 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/carpet,
/area/station/medical/psychology)
+"orW" = (
+/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)
"osk" = (
/obj/effect/turf_decal/siding/wood,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -56749,16 +56702,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{
@@ -57666,11 +57609,6 @@
/obj/structure/extinguisher_cabinet/directional/north,
/turf/open/floor/iron/white,
/area/station/science/lower)
-"oOW" = (
-/obj/structure/rack,
-/obj/effect/spawner/random/armory/dragnet,
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/security/armory)
"oOY" = (
/obj/structure/table/wood/fancy/red,
/obj/item/flashlight/flare/candle,
@@ -58794,13 +58732,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,
@@ -63144,6 +63075,20 @@
},
/turf/open/floor/iron,
/area/station/cargo/miningdock)
+"qlT" = (
+/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)
"qmb" = (
/obj/effect/turf_decal/trimline/brown/filled/line{
dir = 1
@@ -64283,6 +64228,20 @@
/obj/machinery/door/firedoor,
/turf/open/floor/iron/white,
/area/station/science/cytology)
+"qzq" = (
+/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)
"qzx" = (
/obj/structure/bookcase/random/fiction,
/turf/open/floor/carpet/royalblack,
@@ -65381,6 +65340,12 @@
/obj/effect/turf_decal/trimline/blue/filled/corner,
/turf/open/floor/iron/dark/side,
/area/station/hallway/floor2/aft)
+"qOL" = (
+/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)
"qON" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/airalarm/directional/south,
@@ -70272,6 +70237,22 @@
dir = 9
},
/area/station/security/brig)
+"sfE" = (
+/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)
"sfG" = (
/obj/item/radio/intercom/directional/north,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
@@ -71668,6 +71649,13 @@
},
/turf/open/floor/iron/dark,
/area/station/hallway/secondary/exit/departure_lounge)
+"sAf" = (
+/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)
"sAi" = (
/obj/effect/turf_decal/trimline/red/filled/line,
/obj/effect/turf_decal/trimline/red/arrow_ccw{
@@ -74094,24 +74082,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"
@@ -74610,17 +74580,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,
@@ -75733,6 +75692,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/medical/abandoned)
+"tzz" = (
+/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)
"tzA" = (
/obj/effect/turf_decal/siding/wood{
dir = 9
@@ -87476,6 +87445,30 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/pod/light,
/area/station/maintenance/floor2/port/aft)
+"wyg" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/obj/structure/table/reinforced,
+/obj/structure/window/spawner/directional/south,
+/obj/effect/turf_decal/trimline/yellow/corner{
+ dir = 4
+ },
+/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
+ },
+/area/station/engineering/lobby)
"wym" = (
/obj/effect/turf_decal/siding/wood{
dir = 10
@@ -88118,16 +88111,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,
@@ -88216,6 +88199,14 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/pod/light,
/area/station/maintenance/floor4/port/aft)
+"wIf" = (
+/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)
"wIn" = (
/obj/structure/sign/poster/official/random/directional/west,
/obj/structure/easel,
@@ -90610,6 +90601,16 @@
},
/turf/open/floor/pod/light,
/area/station/maintenance/floor1/starboard/fore)
+"xof" = (
+/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)
"xoj" = (
/obj/effect/turf_decal/trimline/green/filled/line{
dir = 6
@@ -93702,6 +93703,13 @@
/obj/structure/table/reinforced,
/turf/open/floor/iron/kitchen/herringbone,
/area/station/service/kitchen)
+"ydf" = (
+/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)
"ydi" = (
/obj/machinery/firealarm/directional/south,
/obj/effect/landmark/navigate_destination/chapel,
@@ -94094,14 +94102,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,
@@ -116266,7 +116266,7 @@ owI
owI
oic
oic
-mlC
+sfE
laR
oic
jdc
@@ -118591,7 +118591,7 @@ eaW
lSJ
mxC
jUP
-gYy
+gQW
myW
kga
uTH
@@ -131976,7 +131976,7 @@ nor
rcc
sHG
uxT
-tlq
+orW
qkL
snO
jRp
@@ -137886,7 +137886,7 @@ wmU
pVZ
uKL
rGe
-nDQ
+wyg
wWw
xFR
gPc
@@ -138639,7 +138639,7 @@ kDg
vsL
kDg
rBP
-iht
+qzq
ykU
mMO
tCC
@@ -181592,7 +181592,7 @@ lQI
lQI
ozr
jJu
-aJO
+nxB
qiR
rkZ
kms
@@ -182071,7 +182071,7 @@ mKZ
sxl
naI
lNN
-peN
+ydf
xuv
jBm
xuv
@@ -182850,7 +182850,7 @@ oFY
mBZ
ijS
obj
-ndG
+nJz
sEL
biW
xWe
@@ -184650,7 +184650,7 @@ kJg
kmR
lcB
kGf
-aRG
+qlT
wXC
ePa
rNg
@@ -189018,7 +189018,7 @@ kXZ
wbS
eGF
dpL
-tdM
+gra
bvx
btp
dpL
@@ -197257,7 +197257,7 @@ woE
biz
dzM
kUl
-kUf
+nYQ
dzM
dYM
scx
@@ -200859,7 +200859,7 @@ bet
iAb
bif
fSi
-bnI
+sAf
aal
aAK
ybG
@@ -203168,7 +203168,7 @@ igE
hcr
jbR
cqR
-bfA
+kSG
aFs
jeF
blv
@@ -204200,7 +204200,7 @@ bgz
bid
grk
bmL
-bpD
+wIf
mOH
jhU
btW
@@ -262026,7 +262026,7 @@ oNV
eLw
cmh
kSU
-yjm
+ibO
piR
piR
roj
@@ -267688,7 +267688,7 @@ hLo
piR
xRs
bKR
-mHo
+qOL
piR
mom
hcT
@@ -309554,7 +309554,7 @@ bfx
eGK
onE
aNs
-gEo
+kZI
wFT
gaJ
qOq
@@ -309566,7 +309566,7 @@ qNY
iTN
qGF
uIx
-wHe
+xof
lvm
vSG
mpK
@@ -316234,7 +316234,7 @@ fkN
fQx
nTJ
iXS
-hBF
+nwk
hNh
hNh
hNh
@@ -317777,7 +317777,7 @@ xvr
hIB
nTo
hns
-oCb
+tzz
jbr
iXS
eHr
@@ -322683,7 +322683,7 @@ cbw
lOp
ira
dtX
-oOW
+frG
qjr
qjr
qjr
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/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 a8b81413f9cb6..9dd8fc2958e58 100644
--- a/_maps/map_files/tramstation/tramstation.dmm
+++ b/_maps/map_files/tramstation/tramstation.dmm
@@ -3736,23 +3736,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
@@ -6707,6 +6690,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/carpet,
/area/station/commons/dorms)
+"bmd" = (
+/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)
"bmp" = (
/obj/effect/turf_decal/trimline/green/corner{
dir = 1
@@ -6825,21 +6817,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{
@@ -7892,6 +7869,13 @@
/obj/effect/turf_decal/siding/thinplating/dark,
/turf/open/floor/iron/white,
/area/station/science/research)
+"bJN" = (
+/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)
"bJP" = (
/obj/structure/railing{
dir = 10
@@ -13695,6 +13679,13 @@
},
/turf/open/floor/iron/dark,
/area/station/service/chapel/monastery)
+"dGP" = (
+/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)
"dHc" = (
/obj/structure/window/reinforced/spawner/directional/west,
/obj/structure/table,
@@ -15812,13 +15803,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{
@@ -17395,6 +17379,16 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/cargo/miningdock/oresilo)
+"fcZ" = (
+/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)
"fdc" = (
/obj/machinery/brm,
/obj/machinery/conveyor{
@@ -19631,17 +19625,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,
@@ -20331,6 +20314,13 @@
},
/turf/open/floor/iron/dark,
/area/station/service/chapel)
+"ggW" = (
+/obj/structure/rack,
+/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)
"ghg" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/catwalk_floor,
@@ -23545,6 +23535,17 @@
/obj/machinery/computer/security/telescreen/entertainment/directional/east,
/turf/open/floor/wood/large,
/area/station/service/barber)
+"hqw" = (
+/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)
"hqx" = (
/obj/effect/turf_decal/trimline/purple/filled/line{
dir = 8
@@ -23587,6 +23588,16 @@
/obj/structure/table/wood,
/turf/open/floor/wood,
/area/station/service/theater)
+"hrq" = (
+/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)
"hrr" = (
/obj/structure/table/reinforced,
/obj/machinery/microwave/engineering/cell_included,
@@ -24518,17 +24529,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 +25648,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 +26008,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,
@@ -27220,6 +27187,16 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron,
/area/station/hallway/primary/tram/center)
+"iNs" = (
+/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)
"iNB" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
@@ -27587,19 +27564,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
@@ -28694,13 +28658,6 @@
},
/turf/open/floor/iron,
/area/station/cargo/storage)
-"jlQ" = (
-/obj/structure/rack,
-/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" = (
/obj/effect/turf_decal/trimline/red/filled/line{
dir = 8
@@ -29697,6 +29654,24 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/cafeteria,
/area/station/security/prison/mess)
+"jCi" = (
+/obj/effect/turf_decal/trimline/brown/filled/line{
+ dir = 5
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 5
+ },
+/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)
"jCn" = (
/obj/effect/turf_decal/trimline/neutral/filled/line{
dir = 1
@@ -29713,18 +29688,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,
@@ -30636,6 +30599,18 @@
},
/turf/open/floor/iron/dark,
/area/station/ai_monitored/command/nuke_storage)
+"jVK" = (
+/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)
"jVT" = (
/obj/structure/table,
/obj/effect/turf_decal/trimline/neutral/filled/line{
@@ -31808,6 +31783,29 @@
/obj/machinery/newscaster/directional/south,
/turf/open/floor/iron,
/area/station/hallway/primary/tram/left)
+"klq" = (
+/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)
"kly" = (
/obj/structure/cable,
/obj/structure/disposalpipe/junction/flip{
@@ -31825,19 +31823,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"
@@ -31920,6 +31905,13 @@
/obj/structure/sink/kitchen/directional/south,
/turf/open/floor/iron/white,
/area/station/commons/vacant_room)
+"knq" = (
+/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)
"knO" = (
/obj/effect/turf_decal/trimline/blue/filled/corner,
/obj/effect/turf_decal/trimline/blue/filled/corner{
@@ -34058,6 +34050,23 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/medical/virology)
+"kXU" = (
+/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)
"kXZ" = (
/obj/machinery/door/airlock{
name = "Private Quarters L";
@@ -37619,6 +37628,25 @@
/obj/structure/cable,
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
+"mgK" = (
+/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)
"mgS" = (
/turf/open/floor/iron/cafeteria,
/area/station/security/prison/mess)
@@ -38434,13 +38462,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
@@ -40306,6 +40327,21 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white,
/area/station/science/xenobiology)
+"njk" = (
+/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)
"njl" = (
/obj/machinery/duct,
/obj/effect/turf_decal/trimline/neutral/filled/corner{
@@ -41150,6 +41186,17 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/exit)
+"nxM" = (
+/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)
"nxN" = (
/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron,
@@ -44033,6 +44080,27 @@
},
/turf/open/space/openspace,
/area/station/solars/starboard/fore)
+"ozH" = (
+/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)
"ozM" = (
/obj/structure/table/wood/poker,
/obj/item/storage/dice,
@@ -48105,6 +48173,13 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/catwalk_floor,
/area/station/maintenance/starboard/greater)
+"pZg" = (
+/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)
"pZr" = (
/mob/living/basic/mouse/brown/tom,
/turf/open/misc/asteroid,
@@ -48330,6 +48405,19 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
+"qdr" = (
+/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)
"qdy" = (
/obj/structure/cable,
/turf/open/floor/iron,
@@ -48543,14 +48631,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,
@@ -49188,13 +49268,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,
@@ -49376,24 +49449,6 @@
},
/turf/open/floor/iron,
/area/station/security/prison/work)
-"qwn" = (
-/obj/effect/turf_decal/trimline/brown/filled/line{
- dir = 5
- },
-/obj/effect/turf_decal/trimline/yellow/filled/warning{
- dir = 5
- },
-/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" = (
/obj/structure/table/wood,
/obj/item/radio/intercom,
@@ -50908,27 +50963,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
@@ -51406,6 +51440,14 @@
/obj/effect/landmark/navigate_destination/aiupload,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/ai_upload)
+"reJ" = (
+/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)
"reU" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/camera/directional/south{
@@ -52516,16 +52558,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)
@@ -53637,6 +53669,19 @@
},
/turf/open/floor/iron/cafeteria,
/area/station/commons/dorms/laundry)
+"rVw" = (
+/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)
"rVD" = (
/obj/effect/turf_decal/trimline/green/corner,
/obj/effect/turf_decal/trimline/green/corner{
@@ -53985,15 +54030,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,
@@ -56816,16 +56852,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,
@@ -61538,25 +61564,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,
@@ -71407,13 +71414,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,
@@ -99252,7 +99252,7 @@ jIG
jHb
tPW
tPW
-uEx
+mgK
jIG
abM
abM
@@ -100015,7 +100015,7 @@ mOW
iwV
nav
fEK
-scn
+bmd
pkp
jYz
kSp
@@ -100531,7 +100531,7 @@ bUj
kdb
yih
pkp
-iTL
+qdr
ifX
iRe
wJt
@@ -101040,7 +101040,7 @@ abM
jnq
jIy
tsa
-klY
+rVw
hJa
kdb
msU
@@ -101576,7 +101576,7 @@ lku
oxs
sna
gRQ
-tbC
+hrq
cuQ
arO
arT
@@ -103874,7 +103874,7 @@ ixT
gYI
cgR
ial
-qwn
+jCi
amV
mvy
iXQ
@@ -103884,7 +103884,7 @@ dor
fSp
vKv
roB
-axh
+kXU
iHK
bAK
jsW
@@ -106141,7 +106141,7 @@ pCM
kzx
oSl
kzx
-myN
+bJN
alg
aes
khE
@@ -119036,7 +119036,7 @@ cJS
nhj
cVU
oRz
-ipP
+klq
sQZ
nhj
prI
@@ -119290,7 +119290,7 @@ owO
owO
owO
cJS
-iih
+fcZ
cVU
cFW
cFW
@@ -150854,7 +150854,7 @@ fLY
tFk
kcV
xNL
-qXK
+ozH
tFk
aaa
aaa
@@ -151122,8 +151122,8 @@ hzN
hzN
hzN
hzN
-exq
-fTM
+dGP
+nxM
rcx
hzN
xQv
@@ -154718,7 +154718,7 @@ mwg
ceF
avX
qyZ
-qsI
+knq
joF
kSZ
bvq
@@ -156237,7 +156237,7 @@ aaa
aaa
aaa
dEv
-jlQ
+ggW
sne
ubk
hgn
@@ -156532,7 +156532,7 @@ aQO
rup
wzm
rAh
-qgy
+reJ
eUy
mgq
nhV
@@ -180203,7 +180203,7 @@ ixu
eeE
muZ
gSF
-bpa
+njk
uje
dLO
dLO
@@ -181221,7 +181221,7 @@ mEd
kuq
aHq
lfQ
-jCw
+jVK
aHQ
tFB
vnu
@@ -182472,7 +182472,7 @@ cdy
iWz
hFV
gDr
-yiX
+pZg
uax
axG
bTx
@@ -183561,7 +183561,7 @@ vSa
cJR
qVr
qVr
-rAB
+iNs
qVL
tBo
qVr
@@ -185303,7 +185303,7 @@ udQ
udQ
aWL
tft
-hMU
+hqw
qyg
utY
fHV
diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm
index f06276d3e9fa2..7cd10a421e4bb 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
@@ -148,6 +136,9 @@
id = "ordstorage"
},
/obj/structure/cable,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
/turf/open/floor/iron/white,
/area/station/science/ordnance/storage)
"abX" = (
@@ -784,13 +775,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,
@@ -1709,11 +1693,11 @@
/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,
+/obj/machinery/portable_atmospherics/scrubber,
/turf/open/floor/iron/dark/smooth_large,
/area/station/science/ordnance)
"aCp" = (
@@ -2298,6 +2282,17 @@
/obj/item/radio/intercom/directional/south,
/turf/open/floor/iron,
/area/station/cargo/warehouse/upper)
+"aLF" = (
+/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)
"aLH" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -3534,6 +3529,10 @@
/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)
"bjM" = (
@@ -3598,6 +3597,12 @@
/obj/effect/turf_decal/sand/plating,
/turf/open/floor/plating,
/area/station/asteroid)
+"blP" = (
+/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)
"bme" = (
/obj/structure/sign/warning,
/turf/closed/wall/r_wall,
@@ -3959,13 +3964,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,
@@ -4479,16 +4477,6 @@
/obj/structure/girder/displaced,
/turf/open/misc/asteroid,
/area/station/maintenance/central/greater)
-"bCr" = (
-/obj/machinery/computer/security/mining{
- dir = 8
- },
-/obj/machinery/keycard_auth/directional/east,
-/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
- dir = 4
- },
-/turf/open/floor/iron/dark,
-/area/station/command/bridge)
"bCv" = (
/obj/effect/decal/cleanable/blood/old,
/obj/item/restraints/handcuffs,
@@ -4649,6 +4637,9 @@
},
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/hos)
+"bFj" = (
+/turf/closed/wall/rock/porous,
+/area/station/science/ordnance)
"bFw" = (
/obj/machinery/door/window/right/directional/east{
name = "Delivery Door";
@@ -5227,8 +5218,7 @@
/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,
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
"bSr" = (
@@ -5768,6 +5758,17 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/catwalk_floor/iron_dark,
/area/station/ai_monitored/turret_protected/aisat_interior)
+"cbT" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock/command,
+/obj/effect/mapping_helpers/airlock/access/any/command/general,
+/obj/effect/mapping_helpers/airlock/autoname,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/command/emergency_closet)
"cca" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -6603,23 +6604,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/construction/mining/aux_base)
-"ctE" = (
-/obj/machinery/door/airlock/research{
- name = "Research Division Access"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "sci-entrance"
- },
-/obj/effect/mapping_helpers/airlock/unres{
- dir = 4
- },
-/obj/machinery/door/firedoor,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/mapping_helpers/airlock/access/all/science/general,
-/turf/open/floor/iron/white,
-/area/station/science/research)
"ctL" = (
/obj/structure/window/reinforced/spawner/directional/west,
/obj/structure/cable,
@@ -6899,17 +6883,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/cargo/storage)
-"cAy" = (
-/obj/structure/table/glass,
-/obj/item/flatpack{
- board = /obj/item/circuitboard/machine/flatpacker;
- pixel_x = -5
- },
-/obj/item/multitool{
- pixel_x = 8
- },
-/turf/open/floor/iron,
-/area/station/engineering/lobby)
"cAC" = (
/obj/effect/turf_decal/stripes/end{
dir = 4
@@ -7099,6 +7072,22 @@
/obj/effect/turf_decal/stripes,
/turf/open/floor/engine,
/area/station/engineering/atmospherics_engine)
+"cEi" = (
+/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)
"cEr" = (
/obj/structure/chair/sofa/bench/right{
dir = 1
@@ -7662,9 +7651,13 @@
},
/area/station/science/research)
"cPs" = (
-/obj/item/coin/plasma,
-/turf/open/misc/asteroid,
-/area/station/maintenance/department/science)
+/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)
"cPt" = (
/turf/closed/wall/r_wall,
/area/station/science/lab)
@@ -8329,24 +8322,11 @@
},
/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{
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{
dir = 4
},
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
-"dbJ" = (
-/obj/machinery/door/airlock/command/glass{
- name = "Bridge"
- },
-/obj/effect/mapping_helpers/airlock/access/any/command/general,
-/obj/machinery/door/firedoor,
-/obj/structure/cable,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "bridgec"
- },
-/obj/effect/mapping_helpers/airlock/access/any/admin/general,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/command)
"dbN" = (
/obj/effect/turf_decal/tile/neutral{
dir = 4
@@ -9034,24 +9014,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
-"dmE" = (
-/obj/machinery/door/airlock/research{
- name = "Research Division Access"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "sci-entrance"
- },
-/obj/effect/mapping_helpers/airlock/unres{
- dir = 4
- },
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/mapping_helpers/airlock/access/all/science/general,
-/turf/open/floor/iron/white,
-/area/station/science/research)
"dmH" = (
/obj/effect/turf_decal/siding/white{
dir = 4
@@ -9212,11 +9174,6 @@
},
/turf/open/floor/iron/white,
/area/station/medical/virology)
-"dpf" = (
-/obj/structure/transport/linear/public,
-/obj/machinery/light/floor/transport,
-/turf/open/floor/plating/elevatorshaft,
-/area/station/medical/treatment_center)
"dpj" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
@@ -9542,12 +9499,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
-"duB" = (
-/obj/structure/cable,
-/obj/structure/window/reinforced/spawner/directional/west,
-/obj/machinery/firealarm/directional/east,
-/turf/open/floor/iron/dark,
-/area/station/security/prison)
"duS" = (
/obj/machinery/duct,
/obj/structure/cable,
@@ -10517,6 +10468,18 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/hallway/secondary/command)
+"dLy" = (
+/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)
"dLI" = (
/obj/effect/landmark/event_spawn,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -11030,6 +10993,28 @@
/obj/machinery/computer/security/telescreen/entertainment/directional/east,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"dTV" = (
+/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)
"dUb" = (
/obj/machinery/airalarm/directional/west,
/obj/item/kirbyplants/random,
@@ -12006,11 +11991,9 @@
/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,
+/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/iron/white,
/area/station/science/ordnance/storage)
"emf" = (
@@ -12408,6 +12391,15 @@
},
/turf/open/floor/iron,
/area/station/service/hydroponics)
+"etE" = (
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Primary Tool Storage"
+ },
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/commons/storage/primary)
"etI" = (
/obj/structure/table,
/obj/effect/spawner/random/food_or_drink/snack,
@@ -12697,6 +12689,17 @@
},
/turf/open/floor/iron/white/smooth_large,
/area/station/command/heads_quarters/cmo)
+"ezH" = (
+/obj/effect/turf_decal/tile/brown/half/contrasted{
+ dir = 1
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 4
+ },
+/obj/machinery/requests_console/auto_name/directional/north,
+/obj/effect/mapping_helpers/requests_console/assistance,
+/turf/open/floor/iron,
+/area/station/cargo/storage)
"ezL" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -13058,6 +13061,17 @@
},
/turf/open/floor/engine,
/area/station/science/xenobiology)
+"eFd" = (
+/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)
"eFj" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -13173,9 +13187,16 @@
/turf/open/floor/iron,
/area/station/commons/storage/art)
"eGL" = (
-/obj/structure/grille/broken,
-/turf/open/misc/asteroid,
-/area/station/maintenance/department/science)
+/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)
"eGN" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -13186,13 +13207,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
-"eHa" = (
-/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
- dir = 4
- },
-/obj/structure/sign/poster/official/random/directional/east,
-/turf/open/floor/iron,
-/area/station/command/bridge)
"eHc" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
@@ -13542,15 +13556,6 @@
/obj/structure/sign/poster/random/directional/west,
/turf/open/floor/plating,
/area/station/maintenance/department/medical)
-"eQJ" = (
-/obj/structure/rack,
-/obj/effect/turf_decal/tile/red/half/contrasted{
- dir = 1
- },
-/obj/item/radio/intercom/directional/south,
-/obj/effect/spawner/random/armory/dragnet,
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/security/armory)
"eQQ" = (
/obj/machinery/door/firedoor/border_only{
dir = 4
@@ -14287,6 +14292,20 @@
/obj/effect/turf_decal/sand/plating,
/turf/open/floor/plating,
/area/station/maintenance/solars/port/fore)
+"fgZ" = (
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Engineering Foyer"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/engineering/general,
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/effect/landmark/navigate_destination/engineering,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/access/any/engineering/construction,
+/turf/open/floor/iron,
+/area/station/engineering/lobby)
"fhs" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 8
@@ -14524,6 +14543,17 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
+"flW" = (
+/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)
"flZ" = (
/obj/structure/cable,
/obj/structure/disposalpipe/sorting/mail/flip{
@@ -14535,15 +14565,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,
@@ -15968,14 +15989,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,
@@ -16008,6 +16021,13 @@
},
/turf/open/floor/carpet/purple,
/area/station/service/library)
+"fKp" = (
+/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)
"fKs" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
@@ -16054,11 +16074,6 @@
},
/turf/open/floor/iron/half,
/area/station/security/breakroom)
-"fLM" = (
-/obj/structure/transport/linear/public,
-/obj/machinery/light/floor/transport,
-/turf/open/floor/plating/elevatorshaft,
-/area/station/cargo/storage)
"fLU" = (
/obj/effect/spawner/random/trash/mess,
/obj/effect/mapping_helpers/broken_floor,
@@ -16500,6 +16515,26 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/station/science/ordnance)
+"fSH" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/machinery/button/door/directional/south{
+ id = "capshut";
+ pixel_x = -8;
+ name = "shutter control"
+ },
+/obj/machinery/fax{
+ fax_name = "Captain's Office";
+ name = "Captain's Fax Machine"
+ },
+/obj/structure/table/reinforced,
+/obj/machinery/keycard_auth/directional/south{
+ pixel_y = -24;
+ pixel_x = 8
+ },
+/turf/open/floor/carpet/royalblue,
+/area/station/command/heads_quarters/captain/private)
"fSK" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 6
@@ -17152,6 +17187,13 @@
},
/turf/open/floor/wood/parquet,
/area/station/medical/psychology)
+"gez" = (
+/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)
"geB" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -17364,6 +17406,18 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/cargo/drone_bay)
+"giX" = (
+/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)
"gjo" = (
/obj/structure/cable,
/obj/machinery/button/door/directional/east{
@@ -18829,6 +18883,7 @@
/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)
"gKt" = (
@@ -19813,6 +19868,21 @@
"hbV" = (
/turf/open/floor/iron/dark,
/area/station/science/xenobiology)
+"hcd" = (
+/obj/machinery/door/airlock/research{
+ name = "Research Division Access"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "sci-entrance"
+ },
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/mapping_helpers/airlock/access/all/science/general,
+/turf/open/floor/iron/white,
+/area/station/science/research)
"hce" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -20010,6 +20080,19 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/engineering/atmos)
+"hfq" = (
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Break Room"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/engineering/general,
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/yellow/fourcorners,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/mapping_helpers/airlock/access/any/engineering/construction,
+/turf/open/floor/iron,
+/area/station/engineering/break_room)
"hfv" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/effect/decal/cleanable/dirt/dust,
@@ -20075,10 +20158,14 @@
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
"hgq" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/grille,
+/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/maintenance/department/science)
+/area/station/science/ordnance)
"hgB" = (
/obj/machinery/door/airlock/maintenance/external,
/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance,
@@ -20088,6 +20175,16 @@
},
/turf/open/floor/plating,
/area/station/science/lobby)
+"hgE" = (
+/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
+ dir = 8
+ },
+/obj/machinery/computer/security/telescreen/minisat{
+ dir = 4;
+ pixel_x = -29
+ },
+/turf/open/floor/iron,
+/area/station/command/bridge)
"hgN" = (
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/west,
@@ -20426,6 +20523,19 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/aisat/teleporter)
+"hng" = (
+/obj/machinery/portable_atmospherics/canister/anesthetic_mix,
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/obj/structure/window/reinforced/spawner/directional/east,
+/obj/machinery/door/window/right/directional/north{
+ req_access = list("medical");
+ name = "Anti Assistant Protection Door"
+ },
+/obj/effect/turf_decal/tile/blue/fourcorners,
+/turf/open/floor/iron/white,
+/area/station/medical/treatment_center)
"hnh" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
@@ -20572,6 +20682,12 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"hpC" = (
+/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)
"hpT" = (
/obj/machinery/door/airlock/command{
name = "Quartermaster's Office"
@@ -21372,6 +21488,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
+"hDM" = (
+/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)
"hDV" = (
/obj/effect/turf_decal/tile/yellow/diagonal_centre,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -21445,8 +21571,8 @@
/area/station/maintenance/disposal/incinerator)
"hFq" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8
+/obj/machinery/atmospherics/components/binary/valve{
+ dir = 4
},
/turf/open/floor/plating,
/area/station/maintenance/department/science)
@@ -21661,7 +21787,7 @@
},
/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{
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{
dir = 5
},
/turf/open/floor/iron/dark,
@@ -22319,6 +22445,14 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/engine,
/area/station/science/xenobiology)
+"hVb" = (
+/obj/item/stock_parts/power_store/cell/bluespace{
+ rigged = 1;
+ pixel_x = -5;
+ pixel_y = -8
+ },
+/turf/open/misc/asteroid,
+/area/station/asteroid)
"hVe" = (
/obj/effect/turf_decal/bot{
dir = 1
@@ -22729,6 +22863,10 @@
/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)
"idU" = (
@@ -24140,6 +24278,17 @@
dir = 1
},
/area/station/service/chapel)
+"iEL" = (
+/obj/structure/table/glass,
+/obj/item/flatpack{
+ board = /obj/item/circuitboard/machine/flatpacker;
+ pixel_x = -5
+ },
+/obj/item/multitool{
+ pixel_x = 8
+ },
+/turf/open/floor/iron,
+/area/station/engineering/lobby)
"iEO" = (
/turf/closed/wall,
/area/station/security/prison/mess)
@@ -24195,24 +24344,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
@@ -24490,6 +24621,9 @@
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)
"iKc" = (
@@ -25952,6 +26086,17 @@
},
/turf/open/floor/iron/textured,
/area/station/cargo/storage)
+"jnV" = (
+/obj/machinery/disposal/bin,
+/obj/effect/turf_decal/tile/blue/fourcorners,
+/obj/effect/turf_decal/box/white{
+ color = "#52B4E9"
+ },
+/obj/structure/disposalpipe/trunk,
+/obj/machinery/requests_console/auto_name/directional/north,
+/obj/effect/mapping_helpers/requests_console/assistance,
+/turf/open/floor/iron/white,
+/area/station/medical/storage)
"jnY" = (
/obj/effect/spawner/structure/window/reinforced/plasma,
/obj/structure/cable,
@@ -26387,6 +26532,13 @@
},
/turf/open/floor/wood,
/area/station/commons/lounge)
+"jvU" = (
+/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)
"jvV" = (
/obj/machinery/computer/operating{
dir = 8
@@ -26978,6 +27130,11 @@
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/iron/freezer,
/area/station/security/prison/shower)
+"jEO" = (
+/obj/structure/transport/linear/public,
+/obj/machinery/light/floor/transport,
+/turf/open/floor/plating/elevatorshaft,
+/area/station/medical/treatment_center)
"jEX" = (
/obj/machinery/newscaster/directional/west,
/turf/open/floor/carpet/orange,
@@ -27142,7 +27299,7 @@
/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{
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{
dir = 9
},
/turf/open/floor/iron/white,
@@ -27757,21 +27914,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/commons/vacant_room/commissary)
-"jSs" = (
-/obj/machinery/door/airlock/command{
- name = "Head of Personnel's Booth"
- },
-/obj/effect/turf_decal/siding/wood,
-/obj/effect/mapping_helpers/airlock/access/any/command/hop,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/cable,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "bridgehop"
- },
-/turf/open/floor/carpet/green,
-/area/station/command/heads_quarters/hop)
"jSu" = (
/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
dir = 8
@@ -28215,6 +28357,22 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/hallway/secondary/command)
+"kaD" = (
+/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)
"kaJ" = (
/obj/effect/turf_decal/tile/red/half/contrasted,
/obj/structure/cable,
@@ -28257,6 +28415,18 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/dark,
/area/station/command/bridge)
+"kbU" = (
+/obj/machinery/door/airlock/command{
+ name = "Head of Personnel's Quarters"
+ },
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/any/command/hop,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "bridgehop"
+ },
+/turf/open/floor/iron,
+/area/station/command/heads_quarters/hop)
"kbW" = (
/obj/structure/chair/plastic{
dir = 8
@@ -30445,6 +30615,13 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/aft/upper)
+"kKS" = (
+/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)
"kLi" = (
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/station/maintenance/department/medical/central)
@@ -30550,6 +30727,16 @@
},
/turf/open/floor/engine,
/area/station/command/corporate_dock)
+"kNM" = (
+/obj/machinery/door/airlock/multi_tile/public{
+ name = "Corporate Private Dock"
+ },
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/any/command/general,
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/command/corporate_dock)
"kNO" = (
/obj/effect/turf_decal/siding/wood,
/obj/machinery/newscaster/directional/south,
@@ -31853,6 +32040,17 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
+"lmw" = (
+/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)
"lmI" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/components/unary/passive_vent/layer2{
@@ -31971,18 +32169,6 @@
/obj/item/toy/figure/borg,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/aisat/teleporter)
-"loC" = (
-/obj/machinery/door/airlock/command{
- name = "Head of Personnel's Quarters"
- },
-/obj/effect/turf_decal/siding/wood,
-/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/access/any/command/hop,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "bridgehop"
- },
-/turf/open/floor/iron,
-/area/station/command/heads_quarters/hop)
"loR" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/machinery/power/port_gen/pacman/pre_loaded,
@@ -32075,25 +32261,13 @@
/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,
+/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/iron/white,
/area/station/science/ordnance/storage)
"lrc" = (
@@ -33029,28 +33203,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{
@@ -34005,6 +34157,10 @@
/obj/machinery/firealarm/directional/west,
/turf/open/floor/wood,
/area/station/commons/lounge)
+"maT" = (
+/obj/structure/window/reinforced/spawner/directional/west,
+/turf/open/floor/glass/reinforced,
+/area/station/security/prison)
"maY" = (
/obj/structure/table/wood,
/obj/effect/turf_decal/tile/red/half/contrasted{
@@ -34169,15 +34325,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/station/security/lockers)
-"meT" = (
-/obj/effect/turf_decal/tile/brown/half/contrasted,
-/obj/machinery/disposal/bin,
-/obj/structure/disposalpipe/trunk{
- dir = 1
- },
-/obj/machinery/digital_clock/directional/south,
-/turf/open/floor/iron,
-/area/station/cargo/storage)
"mff" = (
/obj/effect/turf_decal/tile/blue/half/contrasted,
/turf/open/floor/iron,
@@ -35006,21 +35153,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
-"mtG" = (
-/obj/machinery/door/airlock/command,
-/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/access/any/command/general,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "bridgec"
- },
-/obj/effect/mapping_helpers/airlock/access/any/admin/general,
-/turf/open/floor/iron/dark/side{
- dir = 4
- },
-/area/station/command/corporate_showroom)
"mtH" = (
/turf/open/floor/plating/airless,
/area/station/solars/port)
@@ -35459,20 +35591,6 @@
/obj/structure/weightmachine,
/turf/open/floor/iron/white/textured_large,
/area/station/commons/fitness/recreation)
-"mBX" = (
-/obj/machinery/door/airlock/engineering/glass{
- name = "Engineering Foyer"
- },
-/obj/effect/mapping_helpers/airlock/access/any/engineering/general,
-/obj/structure/cable,
-/obj/machinery/door/firedoor,
-/obj/effect/landmark/navigate_destination/engineering,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/mapping_helpers/airlock/access/any/engineering/construction,
-/turf/open/floor/iron,
-/area/station/engineering/lobby)
"mBY" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
@@ -35532,6 +35650,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/kitchen,
/area/station/service/kitchen)
+"mCH" = (
+/obj/machinery/computer/security{
+ dir = 4
+ },
+/obj/structure/sign/poster/official/random/directional/west,
+/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/station/command/bridge)
"mCN" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable,
@@ -35681,6 +35809,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/freezer,
/area/station/security/prison/shower)
+"mGg" = (
+/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)
"mGk" = (
/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{
dir = 9
@@ -35712,6 +35850,21 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/station/hallway/primary/central)
+"mGw" = (
+/obj/machinery/door/airlock/command,
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/any/command/general,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "bridgec"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/turf/open/floor/iron/dark/side{
+ dir = 4
+ },
+/area/station/command/corporate_showroom)
"mGG" = (
/turf/closed/wall,
/area/station/security/breakroom)
@@ -36118,20 +36271,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/security/courtroom)
-"mOc" = (
-/obj/machinery/door/airlock/research{
- name = "Research Division Access"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "sci-entrance"
- },
-/obj/effect/mapping_helpers/airlock/unres{
- dir = 4
- },
-/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/access/all/science/general,
-/turf/open/floor/iron/white,
-/area/station/science/research)
"mOo" = (
/obj/effect/turf_decal/tile/brown/half/contrasted,
/turf/open/floor/iron,
@@ -36425,6 +36564,15 @@
/obj/machinery/camera/autoname/directional/south,
/turf/open/floor/iron/dark/corner,
/area/station/engineering/atmos)
+"mVR" = (
+/obj/structure/rack,
+/obj/effect/turf_decal/tile/red/half/contrasted{
+ dir = 1
+ },
+/obj/item/radio/intercom/directional/south,
+/obj/effect/spawner/random/armory/dragnet,
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/security/armory)
"mVU" = (
/obj/effect/spawner/random/maintenance/two,
/obj/effect/spawner/random/structure/crate,
@@ -36557,6 +36705,18 @@
},
/turf/open/floor/plating/airless,
/area/station/maintenance/department/medical/central)
+"mXT" = (
+/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)
"mXV" = (
/obj/effect/turf_decal/tile/red/anticorner/contrasted{
dir = 4
@@ -36945,6 +37105,12 @@
},
/turf/closed/wall,
/area/station/service/bar)
+"ndC" = (
+/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)
"ndI" = (
/obj/structure/table,
/obj/item/hand_labeler,
@@ -37237,6 +37403,20 @@
dir = 10
},
/area/station/maintenance/radshelter/medical)
+"nhc" = (
+/obj/machinery/door/airlock/research{
+ name = "Research Division Access"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "sci-entrance"
+ },
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/access/all/science/general,
+/turf/open/floor/iron/white,
+/area/station/science/research)
"nhf" = (
/obj/machinery/computer/records/medical/laptop{
dir = 8;
@@ -37471,6 +37651,16 @@
/obj/structure/cable/multilayer/multiz,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
+"nmF" = (
+/obj/machinery/computer/security/mining{
+ dir = 8
+ },
+/obj/machinery/keycard_auth/directional/east,
+/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/station/command/bridge)
"nmG" = (
/obj/effect/turf_decal/trimline/blue/filled/end,
/obj/structure/cable,
@@ -37941,6 +38131,16 @@
/obj/machinery/camera/autoname/directional/south,
/turf/open/floor/iron,
/area/station/security/detectives_office)
+"nwi" = (
+/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)
"nwp" = (
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 8
@@ -38286,7 +38486,7 @@
/area/station/maintenance/aft/upper)
"nCv" = (
/obj/effect/turf_decal/stripes/line{
- dir = 1
+ dir = 5
},
/turf/open/floor/iron/white,
/area/station/science/ordnance/storage)
@@ -38614,17 +38814,6 @@
/obj/effect/spawner/random/clothing/pirate_or_bandana,
/turf/open/floor/plating,
/area/station/maintenance/aft/upper)
-"nKa" = (
-/obj/machinery/disposal/bin,
-/obj/effect/turf_decal/tile/blue/fourcorners,
-/obj/effect/turf_decal/box/white{
- color = "#52B4E9"
- },
-/obj/structure/disposalpipe/trunk,
-/obj/machinery/requests_console/auto_name/directional/north,
-/obj/effect/mapping_helpers/requests_console/assistance,
-/turf/open/floor/iron/white,
-/area/station/medical/storage)
"nKc" = (
/obj/effect/turf_decal/tile/yellow/half/contrasted{
dir = 1
@@ -39049,12 +39238,21 @@
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
"nSZ" = (
-/obj/machinery/portable_atmospherics/scrubber,
/obj/effect/turf_decal/stripes/line{
dir = 9
},
+/obj/machinery/portable_atmospherics/scrubber,
/turf/open/floor/iron/dark/smooth_large,
/area/station/science/ordnance)
+"nTb" = (
+/obj/effect/turf_decal/tile/brown/half/contrasted,
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/obj/machinery/digital_clock/directional/south,
+/turf/open/floor/iron,
+/area/station/cargo/storage)
"nTm" = (
/obj/structure/chair/office{
dir = 1
@@ -39235,6 +39433,11 @@
/obj/machinery/light/warm/directional/east,
/turf/open/floor/wood/tile,
/area/station/service/chapel)
+"nYi" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/iron/dark,
+/area/station/science/ordnance)
"nYj" = (
/obj/effect/turf_decal/stripes/line,
/obj/effect/decal/cleanable/dirt,
@@ -39891,12 +40094,6 @@
/obj/machinery/quantum_server,
/turf/open/floor/circuit,
/area/station/cargo/bitrunning/den)
-"omE" = (
-/obj/structure/table/glass,
-/obj/effect/spawner/random/food_or_drink/snack,
-/obj/effect/spawner/random/food_or_drink/refreshing_beverage,
-/turf/open/floor/iron,
-/area/station/engineering/lobby)
"omL" = (
/obj/machinery/door/firedoor/border_only{
dir = 8
@@ -40433,7 +40630,7 @@
/area/station/engineering/atmospherics_engine)
"oxg" = (
/obj/effect/turf_decal/stripes/line{
- dir = 1
+ dir = 9
},
/obj/structure/cable,
/turf/open/floor/iron/white,
@@ -40462,20 +40659,6 @@
/obj/machinery/light_switch/directional/south,
/turf/open/floor/iron,
/area/station/service/hydroponics)
-"oxN" = (
-/obj/machinery/door/airlock/multi_tile/public{
- dir = 4
- },
-/obj/effect/mapping_helpers/airlock/access/any/command/general,
-/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/unres{
- dir = 8
- },
-/obj/structure/cable,
-/obj/effect/mapping_helpers/airlock/autoname,
-/obj/effect/mapping_helpers/airlock/access/any/admin/general,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/command/meeting_room)
"oxU" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -41207,17 +41390,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,
@@ -41862,6 +42034,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/station/maintenance/solars/port)
+"oWw" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/effect/turf_decal/siding/thinplating/dark{
+ dir = 9
+ },
+/obj/machinery/firealarm/directional/west,
+/turf/open/floor/iron/checker,
+/area/station/science/research)
"oWy" = (
/obj/effect/turf_decal/box/corners,
/turf/open/floor/iron/dark,
@@ -42407,16 +42589,6 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/iron,
/area/station/maintenance/department/cargo)
-"pgS" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/obj/effect/turf_decal/siding/thinplating/dark{
- dir = 9
- },
-/obj/machinery/firealarm/directional/west,
-/turf/open/floor/iron/checker,
-/area/station/science/research)
"pgW" = (
/obj/effect/turf_decal/trimline/blue/filled/corner,
/obj/effect/landmark/start/medical_doctor,
@@ -42554,6 +42726,20 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
/area/station/hallway/secondary/exit/departure_lounge)
+"pjf" = (
+/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)
"pjk" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
/turf/open/floor/engine/n2,
@@ -42640,6 +42826,9 @@
"pka" = (
/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)
"pkl" = (
@@ -43561,6 +43750,19 @@
/obj/machinery/newscaster/directional/south,
/turf/open/floor/iron,
/area/station/security/prison/garden)
+"pBf" = (
+/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)
"pBg" = (
/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{
dir = 1
@@ -44007,6 +44209,10 @@
},
/turf/open/floor/iron/white,
/area/station/science/research)
+"pIB" = (
+/obj/structure/window/reinforced/spawner/directional/south,
+/turf/open/floor/glass/reinforced,
+/area/station/security/prison)
"pIF" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/brigdoor/right/directional/north{
@@ -44624,10 +44830,10 @@
/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{
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{
dir = 4
},
-/turf/open/floor/iron/white,
+/turf/open/floor/catwalk_floor/flat_white,
/area/station/science/ordnance)
"pTC" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -45403,19 +45609,9 @@
/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)
-"qhg" = (
-/obj/structure/cable,
-/obj/machinery/door/airlock/command,
-/obj/effect/mapping_helpers/airlock/access/any/command/general,
-/obj/effect/mapping_helpers/airlock/autoname,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/mapping_helpers/airlock/access/any/admin/general,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/command/emergency_closet)
"qhm" = (
/obj/effect/turf_decal/sand/plating,
/obj/effect/turf_decal/stripes/asteroid/line{
@@ -45445,6 +45641,19 @@
"qhP" = (
/turf/closed/wall/r_wall,
/area/station/security/execution/education)
+"qhQ" = (
+/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)
"qhS" = (
/obj/structure/disposalpipe/junction/flip{
dir = 1
@@ -45698,15 +45907,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plating,
/area/station/hallway/secondary/command)
-"qmD" = (
-/obj/machinery/door/airlock/engineering/glass{
- name = "Primary Tool Storage"
- },
-/obj/structure/cable,
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/turf/open/floor/iron,
-/area/station/commons/storage/primary)
"qmI" = (
/obj/effect/turf_decal/tile/purple/fourcorners,
/obj/machinery/light/small/directional/north,
@@ -45750,6 +45950,17 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
+"qny" = (
+/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)
"qnQ" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -46636,10 +46847,6 @@
},
/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)
@@ -46782,8 +46989,16 @@
"qII" = (
/obj/effect/turf_decal/delivery,
/obj/structure/table,
-/obj/item/binoculars,
/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)
"qIJ" = (
@@ -47068,16 +47283,6 @@
/obj/item/airlock_painter/decal,
/turf/open/floor/iron,
/area/station/cargo/warehouse)
-"qOO" = (
-/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
- dir = 8
- },
-/obj/machinery/computer/security/telescreen/minisat{
- dir = 4;
- pixel_x = -29
- },
-/turf/open/floor/iron,
-/area/station/command/bridge)
"qOP" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/rack,
@@ -47629,7 +47834,7 @@
/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{
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{
dir = 10
},
/turf/open/floor/iron/dark,
@@ -47885,16 +48090,6 @@
},
/turf/open/floor/iron/checker,
/area/station/maintenance/department/medical)
-"rcz" = (
-/obj/machinery/computer/security{
- dir = 4
- },
-/obj/structure/sign/poster/official/random/directional/west,
-/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
- dir = 8
- },
-/turf/open/floor/iron/dark,
-/area/station/command/bridge)
"rcG" = (
/obj/machinery/mech_bay_recharge_port{
dir = 1
@@ -48430,6 +48625,12 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
/area/station/security/brig/entrance)
+"rjP" = (
+/obj/structure/table/glass,
+/obj/machinery/cell_charger,
+/obj/item/stock_parts/power_store/cell/high,
+/turf/open/floor/iron,
+/area/station/engineering/lobby)
"rjX" = (
/turf/closed/wall,
/area/station/security/courtroom)
@@ -48687,6 +48888,15 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/security)
+"roH" = (
+/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)
"roO" = (
/obj/machinery/door/airlock/security/glass{
name = "Prison Wing"
@@ -49069,6 +49279,12 @@
},
/turf/open/floor/iron/white/textured,
/area/station/maintenance/department/medical/central)
+"rvu" = (
+/obj/structure/cable,
+/obj/structure/window/reinforced/spawner/directional/west,
+/obj/machinery/firealarm/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/security/prison)
"rwf" = (
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/plating,
@@ -49261,19 +49477,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
-"ryG" = (
-/obj/structure/cable,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Break Room"
- },
-/obj/effect/turf_decal/tile/yellow/fourcorners,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/mapping_helpers/airlock/access/any/engineering/general,
-/obj/effect/mapping_helpers/airlock/access/any/engineering/construction,
-/turf/open/floor/iron,
-/area/station/engineering/break_room)
"ryP" = (
/obj/structure/closet/secure_closet/brig{
id = "Cell 2";
@@ -50021,7 +50224,7 @@
/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{
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden{
dir = 5
},
/turf/open/floor/iron/dark,
@@ -50133,18 +50336,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
@@ -51089,6 +51280,7 @@
/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)
"sbL" = (
@@ -51112,9 +51304,7 @@
"sbS" = (
/obj/machinery/power/apc/auto_name/directional/west,
/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
- dir = 1
- },
+/obj/machinery/atmospherics/pipe/smart/simple/green/hidden,
/turf/open/floor/iron/white,
/area/station/science/ordnance/testlab)
"sbU" = (
@@ -51353,17 +51543,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron,
/area/station/engineering/main)
-"sgR" = (
-/obj/effect/turf_decal/tile/brown/half/contrasted{
- dir = 1
- },
-/obj/machinery/door/firedoor/border_only{
- dir = 4
- },
-/obj/machinery/requests_console/auto_name/directional/north,
-/obj/effect/mapping_helpers/requests_console/assistance,
-/turf/open/floor/iron,
-/area/station/cargo/storage)
"sgW" = (
/obj/structure/chair/office/tactical{
dir = 8
@@ -53040,18 +53219,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,
@@ -54092,6 +54259,23 @@
"tdq" = (
/turf/open/floor/plating,
/area/station/maintenance/department/cargo)
+"tdN" = (
+/obj/machinery/door/airlock/research{
+ name = "Research Division Access"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "sci-entrance"
+ },
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/access/all/science/general,
+/turf/open/floor/iron/white,
+/area/station/science/research)
"tdW" = (
/obj/effect/turf_decal/tile/red/anticorner/contrasted{
dir = 4
@@ -54166,6 +54350,23 @@
},
/turf/open/space/basic,
/area/space/nearstation)
+"tgn" = (
+/obj/machinery/computer/pod/old/mass_driver_controller/trash{
+ pixel_x = -32;
+ pixel_y = 6;
+ range = 5
+ },
+/obj/structure/cable,
+/obj/machinery/button/door/directional/west{
+ id = "Disposal Exit";
+ name = "Disposal Vent Control";
+ req_access = list("maint_tunnels");
+ pixel_x = -32;
+ pixel_y = -6
+ },
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/station/maintenance/disposal)
"tgr" = (
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
dir = 6
@@ -55057,19 +55258,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";
@@ -55247,6 +55435,15 @@
},
/turf/open/floor/iron/large,
/area/station/hallway/secondary/exit/departure_lounge)
+"tAs" = (
+/obj/machinery/suit_storage_unit/standard_unit,
+/obj/machinery/door/window/brigdoor/right/directional/east{
+ req_access = list("command")
+ },
+/obj/effect/turf_decal/bot,
+/obj/machinery/light/small/dim/directional/west,
+/turf/open/floor/iron,
+/area/station/command/bridge)
"tAt" = (
/obj/machinery/power/smes,
/turf/open/floor/plating,
@@ -55293,23 +55490,6 @@
},
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
-"tBe" = (
-/obj/machinery/computer/pod/old/mass_driver_controller/trash{
- pixel_x = -32;
- pixel_y = 6;
- range = 5
- },
-/obj/structure/cable,
-/obj/machinery/button/door/directional/west{
- id = "Disposal Exit";
- name = "Disposal Vent Control";
- req_access = list("maint_tunnels");
- pixel_x = -32;
- pixel_y = -6
- },
-/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/plating,
-/area/station/maintenance/disposal)
"tBg" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -55548,6 +55728,13 @@
"tEy" = (
/turf/open/floor/plating,
/area/station/maintenance/department/bridge)
+"tEB" = (
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Primary Tool Storage"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/station/commons/storage/primary)
"tEH" = (
/obj/machinery/light/directional/east,
/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
@@ -55687,6 +55874,19 @@
/obj/machinery/light_switch/directional/west,
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/chemistry)
+"tGU" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock/engineering/glass{
+ name = "Break Room"
+ },
+/obj/effect/turf_decal/tile/yellow/fourcorners,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/mapping_helpers/airlock/access/any/engineering/general,
+/obj/effect/mapping_helpers/airlock/access/any/engineering/construction,
+/turf/open/floor/iron,
+/area/station/engineering/break_room)
"tGW" = (
/obj/machinery/atmospherics/pipe/smart/simple/dark/visible,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -56173,6 +56373,7 @@
/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)
"tOA" = (
@@ -56369,6 +56570,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/science/xenobiology)
+"tRT" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/medkit/regular,
+/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
+ dir = 1
+ },
+/turf/open/floor/iron/dark,
+/area/station/command/bridge)
"tRX" = (
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 8
@@ -56505,13 +56714,6 @@
dir = 4
},
/area/station/command/meeting_room)
-"tUF" = (
-/obj/structure/table/wood,
-/obj/item/flashlight/lamp,
-/obj/machinery/camera/autoname/directional/north,
-/obj/machinery/keycard_auth/directional/north,
-/turf/open/floor/carpet/green,
-/area/station/command/heads_quarters/hop)
"tUG" = (
/obj/structure/chair/stool/bar/directional/west,
/obj/effect/turf_decal/siding/wood{
@@ -56533,6 +56735,14 @@
/obj/structure/cable,
/turf/closed/wall/r_wall,
/area/station/engineering/main)
+"tVn" = (
+/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)
"tVF" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle,
/obj/structure/cable,
@@ -56930,6 +57140,24 @@
/obj/effect/landmark/start/hangover/closet,
/turf/open/floor/iron,
/area/station/commons/fitness/recreation)
+"uby" = (
+/obj/structure/transport/linear/public,
+/obj/machinery/light/floor/transport,
+/turf/open/floor/plating/elevatorshaft,
+/area/station/cargo/storage)
+"ubF" = (
+/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)
"ubV" = (
/obj/structure/chair{
dir = 1
@@ -59112,20 +59340,6 @@
/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,
@@ -59711,14 +59925,6 @@
},
/turf/open/floor/iron/white,
/area/station/medical/virology)
-"vay" = (
-/obj/structure/table/reinforced,
-/obj/item/storage/medkit/regular,
-/obj/effect/turf_decal/tile/dark_blue/half/contrasted{
- dir = 1
- },
-/turf/open/floor/iron/dark,
-/area/station/command/bridge)
"vaC" = (
/turf/open/floor/catwalk_floor/iron_dark,
/area/station/command/corporate_dock)
@@ -60001,12 +60207,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,
@@ -60206,6 +60406,22 @@
/obj/structure/tank_dispenser/oxygen,
/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
+"vkP" = (
+/obj/machinery/door/airlock/command/glass{
+ name = "Bridge"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/command/general,
+/obj/structure/cable,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "bridgec"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/turf/open/floor/iron,
+/area/station/hallway/secondary/command)
"vkR" = (
/obj/machinery/firealarm/directional/west,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -61012,22 +61228,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
@@ -61080,6 +61280,13 @@
},
/turf/open/floor/engine,
/area/station/science/xenobiology)
+"vDA" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/tank/oxygen{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/department/science)
"vDK" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -61588,19 +61795,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/service/bar)
-"vME" = (
-/obj/machinery/door/airlock/engineering/glass{
- name = "Break Room"
- },
-/obj/effect/mapping_helpers/airlock/access/any/engineering/general,
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/yellow/fourcorners,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/mapping_helpers/airlock/access/any/engineering/construction,
-/turf/open/floor/iron,
-/area/station/engineering/break_room)
"vMN" = (
/obj/structure/flora/coconuts,
/turf/open/floor/grass,
@@ -61854,15 +62048,6 @@
/obj/structure/grille,
/turf/open/floor/plating,
/area/station/engineering/supermatter/room)
-"vQf" = (
-/obj/machinery/suit_storage_unit/standard_unit,
-/obj/machinery/door/window/brigdoor/right/directional/east{
- req_access = list("command")
- },
-/obj/effect/turf_decal/bot,
-/obj/machinery/light/small/dim/directional/west,
-/turf/open/floor/iron,
-/area/station/command/bridge)
"vQn" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 1
@@ -62284,6 +62469,21 @@
/obj/structure/cable,
/turf/open/floor/plating,
/area/station/maintenance/department/medical/central)
+"vXW" = (
+/obj/machinery/door/airlock/command{
+ name = "Head of Personnel's Booth"
+ },
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/mapping_helpers/airlock/access/any/command/hop,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "bridgehop"
+ },
+/turf/open/floor/carpet/green,
+/area/station/command/heads_quarters/hop)
"vYg" = (
/obj/effect/turf_decal/bot/right,
/turf/open/floor/engine,
@@ -62297,6 +62497,15 @@
"vYz" = (
/turf/closed/wall/r_wall,
/area/station/medical/chemistry/minisat)
+"vYH" = (
+/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)
"vYL" = (
/obj/machinery/computer/atmos_control/nitrous_tank,
/obj/effect/turf_decal/tile/yellow{
@@ -62497,6 +62706,14 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/fore)
+"wcl" = (
+/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)
"wcm" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/light/cold/directional/north,
@@ -63690,6 +63907,24 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/command/storage/satellite)
+"wzW" = (
+/obj/machinery/door/airlock/research{
+ name = "Research Division Access"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
+ cycle_id = "sci-entrance"
+ },
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/access/all/science/general,
+/turf/open/floor/iron/white,
+/area/station/science/research)
"wzX" = (
/obj/structure/flora/tree/palm/style_random,
/turf/open/floor/grass,
@@ -64297,6 +64532,24 @@
},
/turf/open/floor/iron/dark,
/area/station/medical/chemistry/minisat)
+"wJo" = (
+/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)
"wJy" = (
/turf/closed/wall,
/area/station/medical/storage)
@@ -64882,21 +65135,6 @@
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/plating,
/area/station/engineering/atmos)
-"wVL" = (
-/obj/machinery/door/airlock/research{
- name = "Research Division Access"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "sci-entrance"
- },
-/obj/effect/mapping_helpers/airlock/unres{
- dir = 4
- },
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/effect/mapping_helpers/airlock/access/all/science/general,
-/turf/open/floor/iron/white,
-/area/station/science/research)
"wWk" = (
/obj/effect/turf_decal/stripes{
dir = 1
@@ -65195,19 +65433,6 @@
/obj/effect/turf_decal/siding/purple/corner,
/turf/open/floor/iron/white/smooth_large,
/area/station/science/research)
-"xaC" = (
-/obj/machinery/portable_atmospherics/canister/anesthetic_mix,
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 1
- },
-/obj/structure/window/reinforced/spawner/directional/east,
-/obj/machinery/door/window/right/directional/north{
- req_access = list("medical");
- name = "Anti Assistant Protection Door"
- },
-/obj/effect/turf_decal/tile/blue/fourcorners,
-/turf/open/floor/iron/white,
-/area/station/medical/treatment_center)
"xaH" = (
/obj/structure/filingcabinet,
/obj/machinery/button/ticket_machine{
@@ -65282,10 +65507,6 @@
/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,
@@ -65920,22 +66141,6 @@
/obj/item/tank/internals/anesthetic,
/turf/open/floor/engine,
/area/station/science/xenobiology)
-"xnc" = (
-/obj/machinery/door/airlock/command/glass{
- name = "Bridge"
- },
-/obj/effect/mapping_helpers/airlock/access/any/command/general,
-/obj/structure/cable,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/segment,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{
- cycle_id = "bridgec"
- },
-/obj/effect/mapping_helpers/airlock/access/any/admin/general,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/command)
"xne" = (
/obj/structure/cable,
/obj/effect/spawner/random/maintenance/two,
@@ -66435,6 +66640,17 @@
/obj/structure/cable/layer1,
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
+"xwJ" = (
+/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)
"xwO" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/disposalpipe/segment,
@@ -66467,16 +66683,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos/pumproom)
-"xxs" = (
-/obj/machinery/door/airlock/multi_tile/public{
- name = "Corporate Private Dock"
- },
-/obj/structure/cable,
-/obj/machinery/door/firedoor,
-/obj/effect/mapping_helpers/airlock/access/any/command/general,
-/obj/effect/mapping_helpers/airlock/access/any/admin/general,
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/command/corporate_dock)
"xxH" = (
/obj/machinery/firealarm/directional/south,
/obj/effect/turf_decal/stripes/line{
@@ -66566,22 +66772,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,
@@ -66935,14 +67125,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
@@ -67259,26 +67441,6 @@
},
/turf/open/floor/iron/dark/textured,
/area/station/medical/morgue)
-"xNb" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/machinery/button/door/directional/south{
- id = "capshut";
- pixel_x = -8;
- name = "shutter control"
- },
-/obj/machinery/fax{
- fax_name = "Captain's Office";
- name = "Captain's Fax Machine"
- },
-/obj/structure/table/reinforced,
-/obj/machinery/keycard_auth/directional/south{
- pixel_y = -24;
- pixel_x = 8
- },
-/turf/open/floor/carpet/royalblue,
-/area/station/command/heads_quarters/captain/private)
"xNh" = (
/obj/effect/turf_decal/stripes/corner{
dir = 4
@@ -67597,6 +67759,20 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron,
/area/station/cargo/storage)
+"xTN" = (
+/obj/machinery/door/airlock/multi_tile/public{
+ dir = 4
+ },
+/obj/effect/mapping_helpers/airlock/access/any/command/general,
+/obj/machinery/door/firedoor,
+/obj/effect/mapping_helpers/airlock/unres{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/effect/mapping_helpers/airlock/autoname,
+/obj/effect/mapping_helpers/airlock/access/any/admin/general,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/command/meeting_room)
"xTP" = (
/obj/machinery/atmospherics/pipe/smart/simple/green/visible{
dir = 5
@@ -67779,6 +67955,15 @@
},
/turf/open/floor/circuit/green,
/area/station/ai_monitored/turret_protected/ai)
+"xXf" = (
+/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)
"xXh" = (
/obj/machinery/power/shieldwallgen,
/obj/effect/decal/cleanable/dirt/dust,
@@ -68155,13 +68340,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/service/theater)
-"ydy" = (
-/obj/machinery/door/airlock/engineering/glass{
- name = "Primary Tool Storage"
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/iron,
-/area/station/commons/storage/primary)
"ydC" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/holosign/barrier,
@@ -80342,7 +80520,7 @@ uMa
sdc
sdc
hCS
-xFj
+wcl
lLk
lLk
sWd
@@ -81604,7 +81782,7 @@ eio
eio
mxq
iPw
-tBe
+tgn
vjZ
jtd
bPP
@@ -82385,7 +82563,7 @@ jch
oey
dhN
sdc
-sgR
+ezH
eQQ
vSt
umh
@@ -82426,7 +82604,7 @@ jPO
osT
dci
piH
-xaC
+hng
dKw
dKw
dKw
@@ -82683,10 +82861,10 @@ pwn
eaL
eUB
dgR
-uPg
+pjf
bui
yit
-dpf
+jEO
yit
dKw
miD
@@ -83671,11 +83849,11 @@ uDB
uDB
uDB
sdc
-fLM
+uby
soZ
jCX
jCX
-fLM
+uby
sdc
guF
uyL
@@ -84194,7 +84372,7 @@ xSE
twR
uyL
dUS
-meT
+nTb
sdc
mHU
cAQ
@@ -84208,7 +84386,7 @@ ylV
wdx
rnk
rnk
-nKa
+jnV
kxa
gwA
mcl
@@ -84699,11 +84877,11 @@ iHv
rZJ
rAK
sdc
-fLM
+uby
jCX
qzF
jCX
-fLM
+uby
sdc
dro
uyL
@@ -88819,7 +88997,7 @@ axi
bAw
cGP
ygb
-aat
+mXT
lQN
qsI
haf
@@ -91398,7 +91576,7 @@ tWs
acc
oRa
hWx
-amE
+jvU
acc
vjq
pKb
@@ -94182,11 +94360,11 @@ jpd
jRc
ruc
jcW
-xNb
+fSH
axD
eKR
sgz
-tUF
+fKp
sPv
eoo
iLG
@@ -94441,13 +94619,13 @@ aEP
axD
axD
axD
-vQf
+tAs
sgz
vlD
puT
tsP
wNa
-jSs
+vXW
jzC
mcw
aKg
@@ -94691,15 +94869,15 @@ cLf
bqX
bqX
bhY
-rcz
+mCH
eYO
mrq
eBK
bQc
-qOO
+hgE
nZB
fCY
-loC
+kbU
ejb
fZr
bUM
@@ -95732,7 +95910,7 @@ alc
jZj
nAx
kaz
-dbJ
+ubF
mMH
sPS
jww
@@ -95989,7 +96167,7 @@ cgo
wHs
odL
wHs
-xnc
+vkP
rEp
qgd
xaI
@@ -96501,7 +96679,7 @@ oOP
eKR
eKR
juw
-mtG
+mGw
juw
juw
juw
@@ -96746,7 +96924,7 @@ cLf
cLf
bqX
cQP
-vay
+tRT
eon
sZK
sZK
@@ -97004,12 +97182,12 @@ cLf
bqX
bqX
tsJ
-bCr
+nmF
kYU
jTd
rkz
lrc
-eHa
+gez
vQP
ita
hOb
@@ -98305,7 +98483,7 @@ juw
juw
juw
wxW
-oLg
+flW
dTd
npg
juw
@@ -100880,7 +101058,7 @@ lnZ
dCu
xUR
vRm
-sJV
+dLy
utM
xsv
tHF
@@ -101952,7 +102130,7 @@ nSH
oqz
kXz
oqz
-ydy
+tEB
dct
hqk
jFc
@@ -102161,7 +102339,7 @@ vfJ
vfJ
vfJ
vfJ
-lqP
+nwi
grl
pJN
iKc
@@ -102696,7 +102874,7 @@ nJF
stw
azv
dZd
-iFD
+wJo
lYm
azv
azv
@@ -102980,7 +103158,7 @@ uLY
teG
sHg
sHg
-qmD
+etE
wKY
iFq
jFc
@@ -103421,7 +103599,7 @@ cLf
vxX
dZy
fhG
-fmm
+roH
qrt
rmx
wHJ
@@ -103712,7 +103890,7 @@ ipv
tdk
hkc
swi
-vCq
+cEi
cBB
trL
nMP
@@ -103965,9 +104143,9 @@ qIQ
irJ
rBI
cPt
-ctE
+tdN
ixU
-mOc
+nhc
swi
swi
swi
@@ -104220,12 +104398,12 @@ cPt
lcj
tCz
dfr
-btY
+kKS
cPt
iQZ
oqp
dfM
-pgS
+oWw
lMT
ixU
ixU
@@ -104993,9 +105171,9 @@ hEw
irJ
cPt
cPt
-dmE
+wzW
ixU
-wVL
+hcd
ixU
ixU
ixU
@@ -105552,7 +105730,7 @@ cwk
joB
dUi
nCe
-mBX
+fgZ
xma
dUi
xma
@@ -106327,7 +106505,7 @@ gEJ
jEc
sJo
xKC
-omE
+ndC
jxd
mQk
dUi
@@ -106578,13 +106756,13 @@ qsu
kFp
csB
pAB
-ryG
+tGU
sIx
cFc
iCM
grv
dUi
-cAy
+iEL
vqI
ger
dUi
@@ -106839,7 +107017,7 @@ gTV
aGQ
kEn
jxd
-vgS
+rjP
gur
mkE
jxd
@@ -107347,7 +107525,7 @@ vIi
dpU
eyg
gTV
-vME
+hfq
gTV
eyg
wpn
@@ -110160,7 +110338,7 @@ rFZ
bND
mjR
bND
-xzC
+kaD
fTX
fTX
fTX
@@ -111414,10 +111592,10 @@ aku
uOo
aku
aku
-uro
-rji
-ilp
-ilp
+hpC
+bFj
+bFj
+cPs
cPs
gOY
gKe
@@ -111672,11 +111850,11 @@ uOo
aku
aku
pkw
-foX
-aku
-ilp
-foX
-gOY
+lmw
+xXf
+nYi
+tVn
+aLF
bRZ
hJj
cmn
@@ -111740,7 +111918,7 @@ cvL
mCm
cpG
hRX
-tvW
+pBf
prc
prc
prc
@@ -111929,10 +112107,10 @@ uOo
aku
aku
aku
-foX
-ouA
-aku
-aku
+qhQ
+mGg
+blP
+hDM
gOY
joD
dbA
@@ -112186,10 +112364,10 @@ aku
aku
aku
aku
-foX
-aku
-jJe
-ieo
+eFd
+xwJ
+cmn
+qny
gOY
kke
qZf
@@ -112443,10 +112621,10 @@ aku
aku
aku
uro
-rji
+bFj
eGL
hgq
-vfJ
+bFj
gOY
gOY
gOY
@@ -112702,7 +112880,7 @@ aku
aku
aku
aku
-upd
+xAd
wfU
rbS
kAI
@@ -113731,7 +113909,7 @@ jBM
lJq
obA
pka
-hkG
+vDA
hkG
moe
mJU
@@ -113979,274 +114157,274 @@ cLf
cLf
cLf
cLf
-vxX
-vxX
-vxX
-obA
+vxX
+vxX
+vxX
+obA
+cLf
+cPl
+cLf
+obA
+vfJ
+vfJ
+vfJ
+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
+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
@@ -150457,7 +150635,7 @@ jOV
kDb
ctL
qCU
-duB
+rvu
nvR
fDi
uEX
@@ -151225,8 +151403,8 @@ hHw
uRG
oyP
dAq
-xbr
-qFS
+maT
+pIB
wSc
jOV
vxX
@@ -151246,7 +151424,7 @@ mqA
uaT
tGw
ipc
-eQJ
+mVR
hED
vxX
vxX
@@ -161010,7 +161188,7 @@ jxE
ttt
ttt
ttt
-qhg
+cbT
ttt
wcH
fib
@@ -161264,7 +161442,7 @@ tot
pWn
ylD
rTc
-xxs
+kNM
xeF
flm
qeA
@@ -162801,7 +162979,7 @@ fIv
fIv
fIv
iEQ
-oxN
+xTN
fIv
fIv
fIv
@@ -170554,7 +170732,7 @@ vxX
vxX
vxX
gMk
-fJs
+hVb
vxX
dtQ
vxX
@@ -172894,7 +173072,7 @@ vHa
aWD
aWD
aWD
-rOz
+giX
gCT
kgb
gaI
@@ -174165,7 +174343,7 @@ kHU
kHU
kHU
ouG
-lHF
+dTV
dBp
bPH
dUi
@@ -176443,7 +176621,7 @@ raz
raz
nzk
fpY
-lsx
+vYH
ssg
vtN
ylR
diff --git a/_maps/shuttles/emergency_birdshot.dmm b/_maps/shuttles/emergency_birdshot.dmm
index 20ffeb679d7d8..cb50d42c56db0 100644
--- a/_maps/shuttles/emergency_birdshot.dmm
+++ b/_maps/shuttles/emergency_birdshot.dmm
@@ -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_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_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..de99a937b35b1 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)
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..6acff639725ff 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" = (
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..593b84827bf3f 100644
--- a/_maps/shuttles/whiteship_birdshot.dmm
+++ b/_maps/shuttles/whiteship_birdshot.dmm
@@ -1033,7 +1033,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
},
@@ -1199,7 +1199,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{
diff --git a/_maps/shuttles/whiteship_cere.dmm b/_maps/shuttles/whiteship_cere.dmm
index 4e53e54651e16..aac0c4d7ada83 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" = (
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..eff7c2bfaadb7 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" = (
diff --git a/_maps/shuttles/whiteship_kilo.dmm b/_maps/shuttles/whiteship_kilo.dmm
index cbc214f21d828..8034d78126d68 100644
--- a/_maps/shuttles/whiteship_kilo.dmm
+++ b/_maps/shuttles/whiteship_kilo.dmm
@@ -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
},
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_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm
index 807d1385899ab..56f85fcd80218 100644
--- a/_maps/shuttles/whiteship_pubby.dmm
+++ b/_maps/shuttles/whiteship_pubby.dmm
@@ -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
diff --git a/_maps/shuttles/whiteship_tram.dmm b/_maps/shuttles/whiteship_tram.dmm
index 0dfa8b414bdd6..84f438accfd1d 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
diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm
index 001a937e97b3b..ca9ff3858872e 100644
--- a/_maps/templates/battlecruiser_starfury.dmm
+++ b/_maps/templates/battlecruiser_starfury.dmm
@@ -648,7 +648,7 @@
"cy" = (
/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/siding/thinplating_new/dark,
/obj/effect/turf_decal/stripes/red/line,
/turf/open/floor/mineral/plastitanium/red,
@@ -1735,7 +1735,7 @@
"gN" = (
/obj/structure/table,
/obj/machinery/cell_charger,
-/obj/item/stock_parts/cell/high,
+/obj/item/stock_parts/power_store/cell/high,
/obj/structure/cable,
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 8
@@ -3279,7 +3279,7 @@
"lg" = (
/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/yellow/anticorner/contrasted{
dir = 8
},
@@ -5090,8 +5090,8 @@
/area/shuttle/sbc_starfury)
"MQ" = (
/obj/structure/closet/crate,
-/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_x = -3;
pixel_y = -3
},
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/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..05c0b7aff1899 100644
--- a/code/__DEFINES/ai/bot_keys.dm
+++ b/code/__DEFINES/ai/bot_keys.dm
@@ -109,3 +109,16 @@ DEFINE_BITFIELD(honkbot_flags, list(
///key that holds our honk ability
#define BB_HONK_ABILITY "honk_ability"
+//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 7404cb9acda84..5f03bf1a5b0d7 100644
--- a/code/__DEFINES/ai/pet_commands.dm
+++ b/code/__DEFINES/ai/pet_commands.dm
@@ -7,6 +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"
-///mothroach next meal key!
-#define BB_MOTHROACH_NEXT_EAT "mothroach_next_eat"
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/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/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/mobs.dm b/code/__DEFINES/mobs.dm
index a0c40856dace1..f1a48df79faee 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -309,7 +309,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
@@ -443,13 +443,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_PLUS 3
-#define FLASH_PROTECTION_MAXIMUM 4
+#define FLASH_PROTECTION_WELDER_SENSITIVE 3
+#define FLASH_PROTECTION_WELDER_HYPER_SENSITIVE 4
// AI Toggles
#define AI_CAMERA_LUMINOSITY 5
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 62ae5a7394a0a..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
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/slimes.dm b/code/__DEFINES/research/slimes.dm
index e03c6af8f581d..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
diff --git a/code/__DEFINES/robots.dm b/code/__DEFINES/robots.dm
index 4ec8e1294c312..bcca92e606091 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.
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/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm
index c34e0f2925e9f..8d2b54ab72f87 100644
--- a/code/__DEFINES/traits/declarations.dm
+++ b/code/__DEFINES/traits/declarations.dm
@@ -553,8 +553,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
@@ -1164,4 +1167,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// 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/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index ead7b324cea13..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(
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/traits/_traits.dm b/code/_globalvars/traits/_traits.dm
index 66f32028c6b9c..5d1e88667b738 100644
--- a/code/_globalvars/traits/_traits.dm
+++ b/code/_globalvars/traits/_traits.dm
@@ -140,6 +140,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"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,
@@ -149,6 +150,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_BONSAI" = TRAIT_BONSAI,
"TRAIT_BOOZE_SLIDER" = TRAIT_BOOZE_SLIDER,
"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,
@@ -186,7 +188,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,
@@ -289,6 +292,7 @@ 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,
@@ -297,6 +301,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"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,
@@ -445,7 +450,9 @@ 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,
@@ -507,11 +514,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,
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/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/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/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/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm
index 666e84964c553..c49900df07ab4 100644
--- a/code/datums/components/crafting/ranged_weapon.dm
+++ b/code/datums/components/crafting/ranged_weapon.dm
@@ -354,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)
@@ -367,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..2398a8b54fbbe 100644
--- a/code/datums/components/crafting/robot.dm
+++ b/code/datums/components/crafting/robot.dm
@@ -119,7 +119,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/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/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/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/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/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/strippable.dm b/code/datums/elements/strippable.dm
index fc952b8a9e23c..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.
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/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/antenna.dm b/code/datums/mutations/antenna.dm
index fc1a94276f702..f33b90fd7a911 100644
--- a/code/datums/mutations/antenna.dm
+++ b/code/datums/mutations/antenna.dm
@@ -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/body.dm b/code/datums/mutations/body.dm
index eaa1ba1f5cafa..7ddeea502d947 100644
--- a/code/datums/mutations/body.dm
+++ b/code/datums/mutations/body.dm
@@ -359,7 +359,6 @@
quality = POSITIVE
instability = POSITIVE_INSTABILITY_MINI
text_gain_indication = "You feel stimmed."
- instability = 15
difficulty = 16
/datum/mutation/human/stimmed/on_acquiring(mob/living/carbon/human/owner)
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/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/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/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..c1baa172dbfd3 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -355,8 +355,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 +367,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)
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/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/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/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..2d6c5339de494 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -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
///Is the machine on?
var/on = FALSE
///What is the mode we are in now?
@@ -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
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/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/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/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..b4fb604d4574a 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(
@@ -857,7 +863,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 +884,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 +894,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 +902,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/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..ea312fc0df848 100644
--- a/code/game/objects/items/inducer.dm
+++ b/code/game/objects/items/inducer.dm
@@ -1,16 +1,17 @@
/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/cell
var/recharging = FALSE
/obj/item/inducer/Initialize(mapload)
@@ -18,9 +19,10 @@
if(!cell && cell_type)
cell = 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)
@@ -32,7 +34,7 @@
/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,9 +81,9 @@
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/cell))
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
@@ -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
@@ -166,7 +168,7 @@
/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/maintenance_loot.dm b/code/game/objects/items/maintenance_loot.dm
index e667aca6007d9..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,7 +38,7 @@
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
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/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/tools.dm b/code/game/objects/items/robot/items/tools.dm
index b9f0c103ba540..8cdf65a431a6a 100644
--- a/code/game/objects/items/robot/items/tools.dm
+++ b/code/game/objects/items/robot/items/tools.dm
@@ -176,218 +176,145 @@
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/pre_attack(atom/atom, mob/living/user, params)
+ if(selected)
+ selected.melee_attack_chain(user, atom, params)
+ return TRUE
+ 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 1a695442d8a76..84de0c577c32a 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -425,21 +425,18 @@
. = ..()
if(!.)
return .
+ 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))
- 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()
/obj/item/borg/upgrade/surgery_omnitool/deactivate(mob/living/silicon/robot/cyborg, mob/living/user = usr)
. = ..()
if(!.)
return .
+ cyborg.model.toolbox.set_upgrade(FALSE)
REMOVE_TRAIT(cyborg, TRAIT_FASTMED, REF(src))
- for(var/obj/item/borg/cyborg_omnitool/omnitool in cyborg.model.modules)
- omnitool.downgrade_omnitool()
/obj/item/borg/upgrade/engineering_omnitool
name = "cyborg engineering omni-tool upgrade"
@@ -454,19 +451,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/storage/boxes/food_boxes.dm b/code/game/objects/items/storage/boxes/food_boxes.dm
index 45de0e58ff6c1..bab60320c957f 100644
--- a/code/game/objects/items/storage/boxes/food_boxes.dm
+++ b/code/game/objects/items/storage/boxes/food_boxes.dm
@@ -95,7 +95,7 @@
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))
+ if(IS_WRITING_UTENSIL(inserted))
var/choice = show_radial_menu(user, src , papersack_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user, inserted), radius = 36, require_near = TRUE)
if(!choice || choice == design_choice)
return FALSE
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index b4d35efdda12a..bdbfa79001ddf 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -415,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)
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index f98b29e1932b1..8fd16036811fe 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -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)
@@ -817,7 +817,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
diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
index 38482fcfd9ba9..8eb5cc3b8c0d4 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)
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/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/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/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/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/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/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/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/antagonists/heretic/items/eldritch_painting.dm b/code/modules/antagonists/heretic/items/eldritch_painting.dm
index 3332c4e31ba63..3e9d3675b1351 100644
--- a/code/modules/antagonists/heretic/items/eldritch_painting.dm
+++ b/code/modules/antagonists/heretic/items/eldritch_painting.dm
@@ -1,6 +1,7 @@
// 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
@@ -9,7 +10,8 @@
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 = "eldritch_painting_debug"
custom_materials = list(/datum/material/wood =SHEET_MATERIAL_AMOUNT)
@@ -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/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/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/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/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/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/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..0b1e7c2768ae9 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
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/server/obj_generation.dm b/code/modules/bitrunning/server/obj_generation.dm
index e8dbd72228c1d..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
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/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/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/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/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 807e795568821..ef90fcf97e10a 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -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/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/deathmatch/deathmatch_loadouts.dm b/code/modules/deathmatch/deathmatch_loadouts.dm
index 9e86bf9befbb7..b4c6af04304eb 100644
--- a/code/modules/deathmatch/deathmatch_loadouts.dm
+++ b/code/modules/deathmatch/deathmatch_loadouts.dm
@@ -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 5b1f76056777e..3fa89ff5d0589 100644
--- a/code/modules/escape_menu/home_page.dm
+++ b/code/modules/escape_menu/home_page.dm
@@ -17,7 +17,7 @@
src,
"Character",
/* offset = */ 2,
- CALLBACK(src, PROC_REF(home_open_charater_settings)),
+ CALLBACK(src, PROC_REF(home_open_character_settings)),
)
)
@@ -56,7 +56,7 @@
/datum/escape_menu/proc/home_resume()
qdel(src)
-/datum/escape_menu/proc/home_open_charater_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)
diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm
index 7a7c073b75a6a..a025d90b44f4e 100644
--- a/code/modules/experisci/experiment/experiments.dm
+++ b/code/modules/experisci/experiment/experiments.dm
@@ -305,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"
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 27d43ea7dd280..f61cb43b22424 100644
--- a/code/modules/fishing/fish/fish_types.dm
+++ b/code/modules/fishing/fish/fish_types.dm
@@ -316,7 +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/cell/lead)
+ favorite_bait = list(/obj/item/stock_parts/power_store/cell/lead)
fish_traits = list(
/datum/fish_trait/parthenogenesis,
/datum/fish_trait/mixotroph,
@@ -651,7 +651,7 @@
average_size = 30
average_weight = 500
random_case_rarity = FISH_RARITY_VERY_RARE
- favorite_bait = list(/obj/item/stock_parts/cell/lead)
+ 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 b748a5215b6a6..6ee02d6d9de4d 100644
--- a/code/modules/fishing/fishing_rod.dm
+++ b/code/modules/fishing/fishing_rod.dm
@@ -277,7 +277,7 @@
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/cell/lead))
+ if(istype(bait, /obj/item/stock_parts/power_store/cell/lead))
bait_state = "battery_overlay"
. += bait_state
diff --git a/code/modules/food_and_drinks/machinery/microwave.dm b/code/modules/food_and_drinks/machinery/microwave.dm
index 0cb9867723455..b3233386f9789 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)
@@ -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/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/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/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/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/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/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/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/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/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/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/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/space_fauna/space_dragon/space_dragon.dm b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm
index 2286f65b79758..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
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/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/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 19e4b7a43deb6..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.
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index 68175333519a1..67358fa912a3b 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -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/living.dm b/code/modules/mob/living/living.dm
index df15d979836b6..54fce885a8056 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1333,16 +1333,16 @@
// 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) && !recursive_loc_check(src, target) && !CanReach(target))
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/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_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..a349ca6499598 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
diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm
index 7a205da5c089f..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
@@ -638,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
@@ -654,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/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/mod/mod_control.dm b/code/modules/mod/mod_control.dm
index c386f7f51c634..734cc6ba2510d 100644
--- a/code/modules/mod/mod_control.dm
+++ b/code/modules/mod/mod_control.dm
@@ -358,7 +358,7 @@
return NONE
/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..70f95297b9404 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)
@@ -114,15 +114,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 +131,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)
@@ -209,7 +209,7 @@
/obj/item/mod/core/standard/proc/on_attackby(datum/source, obj/item/attacking_item, mob/user)
SIGNAL_HANDLER
- if(istype(attacking_item, /obj/item/stock_parts/cell))
+ if(istype(attacking_item, /obj/item/stock_parts/power_store/cell))
if(!mod.open)
mod.balloon_alert(user, "open the cover first!")
playsound(mod, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
@@ -239,7 +239,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
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 e1081d0365a9b..cac8cfaa26eff 100644
--- a/code/modules/mod/modules/modules_engineering.dm
+++ b/code/modules/mod/modules/modules_engineering.dm
@@ -16,7 +16,7 @@
var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES)
if(istype(head_cover))
//this is a screen that displays an image, so flash sensitives can use this to protect against flashes.
- head_cover.flash_protect = FLASH_PROTECTION_MAXIMUM
+ head_cover.flash_protect = FLASH_PROTECTION_WELDER_HYPER_SENSITIVE
/obj/item/mod/module/welding/on_suit_deactivation(deleting = FALSE)
if(deleting)
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/pda.dm b/code/modules/modular_computers/computers/item/pda.dm
index c2327eac4b3b0..ca10b6c53ad84 100644
--- a/code/modules/modular_computers/computers/item/pda.dm
+++ b/code/modules/modular_computers/computers/item/pda.dm
@@ -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/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 7a65513508d3e..c8030287e8943 100644
--- a/code/modules/modular_computers/file_system/programs/frontier.dm
+++ b/code/modules/modular_computers/file_system/programs/frontier.dm
@@ -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/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/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/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..6043890bebd43 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,34 @@
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, \
+ )
+
+/*
+ * 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 +120,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 +141,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 +152,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 +163,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 +222,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 +245,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 +322,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 +334,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 +405,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 +452,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 +491,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 +502,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/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 50f10c47e33c1..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)
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 69732c69b97ac..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?
@@ -689,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_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/cell.dm b/code/modules/power/cell.dm
index 74352134f59f4..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,307 +19,26 @@
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/Initialize(mapload)
+/obj/item/stock_parts/power_store/cell/crap/Initialize(mapload)
AddElement(/datum/element/update_icon_blocker)
return ..()
-/obj/item/stock_parts/cell/crap/empty
+/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"
@@ -330,82 +46,82 @@
custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.5)
chargerate = STANDARD_CELL_RATE * 0.5
-/obj/item/stock_parts/cell/upgraded/Initialize(mapload)
+/obj/item/stock_parts/power_store/cell/upgraded/Initialize(mapload)
AddElement(/datum/element/update_icon_blocker)
return ..()
-/obj/item/stock_parts/cell/upgraded/plus
+/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"
@@ -413,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
@@ -424,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'
@@ -435,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'
@@ -451,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'
@@ -480,21 +196,21 @@
charge_light_type = null
connector_type = "slimecore"
-/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"
@@ -505,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
@@ -519,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 9d3eb222fb843..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
@@ -321,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
@@ -421,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)
@@ -482,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
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/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/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/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/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index b977441e9ae11..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)
diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm
index 78e75d1f30665..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
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/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/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/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index 6407ff0fb8b2b..a60432c078429 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -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
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/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/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 ef6c65d183175..8f857f77e8286 100644
--- a/code/modules/research/designs/machine_designs.dm
+++ b/code/modules/research/designs/machine_designs.dm
@@ -1177,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..4e95e9d4dfda7 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
diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm
index 700f99a643504..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,12 +17,12 @@
/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_1
)
@@ -30,12 +30,12 @@
/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_2
)
@@ -43,12 +43,12 @@
/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/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 d110dab03e02d..295cd05fe9040 100644
--- a/code/modules/research/machinery/_production.dm
+++ b/code/modules/research/machinery/_production.dm
@@ -416,8 +416,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
@@ -426,8 +427,9 @@
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)
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/nodes/engi_nodes.dm b/code/modules/research/techweb/nodes/engi_nodes.dm
index 182f689c372cd..02d20fef5fcd4 100644
--- a/code/modules/research/techweb/nodes/engi_nodes.dm
+++ b/code/modules/research/techweb/nodes/engi_nodes.dm
@@ -6,12 +6,14 @@
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",
- "basic_cell",
"miniature_power_cell",
"condenser",
"igniter",
@@ -36,6 +38,7 @@
"nano_servo",
"adv_matter_bin",
"adv_scanning",
+ "super_battery",
"super_cell",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
@@ -51,6 +54,7 @@
"pico_servo",
"super_matter_bin",
"phasic_scanning",
+ "hyper_battery",
"hyper_cell",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
@@ -69,6 +73,7 @@
"femto_servo",
"bluespace_matter_bin",
"triphasic_scanning",
+ "bluespace_battery",
"bluespace_cell",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
diff --git a/code/modules/research/techweb/nodes/medbay_nodes.dm b/code/modules/research/techweb/nodes/medbay_nodes.dm
index ce4ef103eda2d..ca884f1ebd566 100644
--- a/code/modules/research/techweb/nodes/medbay_nodes.dm
+++ b/code/modules/research/techweb/nodes/medbay_nodes.dm
@@ -27,6 +27,11 @@
"dropper",
"pillbottle",
)
+ experiments_to_unlock = list(
+ /datum/experiment/autopsy/human,
+ /datum/experiment/autopsy/nonhuman,
+ /datum/experiment/autopsy/xenomorph,
+ )
/datum/techweb_node/chem_synthesis
id = "chem_synthesis"
diff --git a/code/modules/research/techweb/nodes/service_nodes.dm b/code/modules/research/techweb/nodes/service_nodes.dm
index ff56afc115eb5..61c7e2545543b 100644
--- a/code/modules/research/techweb/nodes/service_nodes.dm
+++ b/code/modules/research/techweb/nodes/service_nodes.dm
@@ -82,6 +82,8 @@
"idcard",
"c-reader",
"libraryconsole",
+ "libraryscanner",
+ "bookbinder",
"barcode_scanner",
"vendor",
"custom_vendor_refill",
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/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/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/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 157e5b04fe68e..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'
diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm
index fa3ab9cc49d39..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
@@ -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
@@ -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 375b37ca434d6..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'
diff --git a/code/modules/surgery/dental_implant.dm b/code/modules/surgery/dental_implant.dm
index d720039d56b7e..3c645f240d484 100644
--- a/code/modules/surgery/dental_implant.dm
+++ b/code/modules/surgery/dental_implant.dm
@@ -2,16 +2,35 @@
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/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,7 +44,8 @@
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/activate_pill/pill_action = new(tool)
pill_action.name = "Activate [tool.name]"
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/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm
index 7db63d6b48df6..706fe290cccf4 100644
--- a/code/modules/unit_tests/simple_animal_freeze.dm
+++ b/code/modules/unit_tests/simple_animal_freeze.dm
@@ -21,7 +21,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,
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/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 ed6d085abe593..9ca0d41d85367 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -1778,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/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/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/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-83811.yml b/html/changelogs/AutoChangeLog-pr-83811.yml
new file mode 100644
index 0000000000000..2aaf9471f4b48
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-83811.yml
@@ -0,0 +1,4 @@
+author: "mc-oofert"
+delete-after: True
+changes:
+ - qol: "space dragon can see in the dark and the invalid rift location alert is more informative"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-83831.yml b/html/changelogs/AutoChangeLog-pr-83831.yml
new file mode 100644
index 0000000000000..b3e655a55ddf2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-83831.yml
@@ -0,0 +1,7 @@
+author: "carlarctg"
+delete-after: True
+changes:
+ - 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."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84043.yml b/html/changelogs/AutoChangeLog-pr-84043.yml
new file mode 100644
index 0000000000000..5397404f75b8d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84043.yml
@@ -0,0 +1,5 @@
+author: "mc-oofert"
+delete-after: True
+changes:
+ - bugfix: "durand shield doesnt immediately depower the mech when taking stamina damage"
+ - balance: "durand shield is a bit stronger"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84072.yml b/html/changelogs/AutoChangeLog-pr-84072.yml
new file mode 100644
index 0000000000000..c36813ba598d8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84072.yml
@@ -0,0 +1,4 @@
+author: "GPeckman"
+delete-after: True
+changes:
+ - bugfix: "Analyzers should work on bioscrambler anomalies again."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84075.yml b/html/changelogs/AutoChangeLog-pr-84075.yml
new file mode 100644
index 0000000000000..427cc4f1ae6d0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84075.yml
@@ -0,0 +1,4 @@
+author: "GoblinBackwards"
+delete-after: True
+changes:
+ - 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."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84079.yml b/html/changelogs/AutoChangeLog-pr-84079.yml
new file mode 100644
index 0000000000000..f191e2ef2cfad
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84079.yml
@@ -0,0 +1,6 @@
+author: "Watermelon, Mayhazah"
+delete-after: True
+changes:
+ - 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."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84135.yml b/html/changelogs/AutoChangeLog-pr-84135.yml
new file mode 100644
index 0000000000000..b503e29e311d5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84135.yml
@@ -0,0 +1,4 @@
+author: "Guestify"
+delete-after: True
+changes:
+ - bugfix: "The visor of the welding mask no longer goes down when you enable internals"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84143.yml b/html/changelogs/AutoChangeLog-pr-84143.yml
new file mode 100644
index 0000000000000..68b36d831d4f6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84143.yml
@@ -0,0 +1,5 @@
+author: "Ben10Omintrix"
+delete-after: True
+changes:
+ - refactor: "vibebots are not basic bots"
+ - rscadd: "vibebots will now seek out the depressed and cheer them up"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84155.yml b/html/changelogs/AutoChangeLog-pr-84155.yml
deleted file mode 100644
index 5b99d012a7a91..0000000000000
--- a/html/changelogs/AutoChangeLog-pr-84155.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Rhials"
-delete-after: True
-changes:
- - bugfix: "Drone fabricator subtypes that spawn pre-loaded now actually start with materials inside."
- - bugfix: "The binocular fabriactor on the MediSim shuttle works again."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84180.yml b/html/changelogs/AutoChangeLog-pr-84180.yml
deleted file mode 100644
index ba812904516a5..0000000000000
--- a/html/changelogs/AutoChangeLog-pr-84180.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Rhials"
-delete-after: True
-changes:
- - sound: "The abductor team now has their own antag stinger."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84181.yml b/html/changelogs/AutoChangeLog-pr-84181.yml
deleted file mode 100644
index 7631a664e9f59..0000000000000
--- a/html/changelogs/AutoChangeLog-pr-84181.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "DaCoolBoss"
-delete-after: True
-changes:
- - spellcheck: "Grapple gun's description has been updated."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84215.yml b/html/changelogs/AutoChangeLog-pr-84215.yml
deleted file mode 100644
index 7466a3b2006aa..0000000000000
--- a/html/changelogs/AutoChangeLog-pr-84215.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "DaCoolBoss"
-delete-after: True
-changes:
- - spellcheck: "rewrote GLA device's description for clarity"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84232.yml b/html/changelogs/AutoChangeLog-pr-84232.yml
new file mode 100644
index 0000000000000..def406abaac4a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84232.yml
@@ -0,0 +1,4 @@
+author: "mc-oofert"
+delete-after: True
+changes:
+ - rscadd: "wawastation stand-in shuttle"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84278.yml b/html/changelogs/AutoChangeLog-pr-84278.yml
new file mode 100644
index 0000000000000..e29caa1b8963f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84278.yml
@@ -0,0 +1,4 @@
+author: "hyperjll"
+delete-after: True
+changes:
+ - balance: "Thanks to incredible strides in selective slime breeding, slimes require substantially less nutrients to grow into adults, and split into children."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84279.yml b/html/changelogs/AutoChangeLog-pr-84279.yml
new file mode 100644
index 0000000000000..9fcd48259c7bb
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84279.yml
@@ -0,0 +1,5 @@
+author: "jlsnow301"
+delete-after: True
+changes:
+ - rscadd: "Bitrunning: You can now choose your hacker alias in prefs."
+ - rscadd: "Bit avatars get orbit icons."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-84282.yml b/html/changelogs/AutoChangeLog-pr-84282.yml
new file mode 100644
index 0000000000000..fe26b6cb2c010
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-84282.yml
@@ -0,0 +1,4 @@
+author: "SmArtKar"
+delete-after: True
+changes:
+ - bugfix: "RND console now properly rounds research points"
\ No newline at end of file
diff --git a/html/changelogs/archive/2024-06.yml b/html/changelogs/archive/2024-06.yml
index c7345de5701b7..267b8ab773265 100644
--- a/html/changelogs/archive/2024-06.yml
+++ b/html/changelogs/archive/2024-06.yml
@@ -1046,3 +1046,110 @@
- 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.
diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi
index f8673eedd9518..44ede20f2a5a1 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/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/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/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/machines/cell_charger.dmi b/icons/obj/machines/cell_charger.dmi
index 0c9ca53544286..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/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/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/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/sword.dmi b/icons/obj/weapons/sword.dmi
index ca819ffcc5136..9b5a989a0514d 100644
Binary files a/icons/obj/weapons/sword.dmi and b/icons/obj/weapons/sword.dmi differ
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/tgstation.dme b/tgstation.dme
index ce40a5948a3a4..95898ab0e9dc2 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -4666,6 +4666,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"
@@ -5116,7 +5119,6 @@
#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"
@@ -5333,6 +5335,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"
@@ -5343,6 +5346,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"
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/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}
+
{
{fileList.length === 0 && (
- Use the File Manager app to download files from a disk.
+ Use data disk to download files from compressor or doppler array.
)}
@@ -58,7 +58,7 @@ const PaperPublishing = (props) => {
label="File (required)"
buttons={
}
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/QuirksPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx
index 2dde5ab60cc5a..6a166bb06dbed 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx
@@ -211,6 +211,7 @@ function QuirkPopper(props: QuirkPopperProps) {
placement="bottom-end"
onClickOutside={() => setCustomizationExpanded(false)}
isOpen={customizationExpanded}
+ baseZIndex={1}
content={
{!!customization_options && hasExpandableCustomization && (
diff --git a/tgui/packages/tgui/interfaces/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/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/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