diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm index 1ba8c82249..2a5e73676f 100644 --- a/_maps/map_files/CogStation/CogStation.dmm +++ b/_maps/map_files/CogStation/CogStation.dmm @@ -850,6 +850,10 @@ /area/maintenance/fore) "acc" = ( /obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "solitarylock"; + name = "Brig Lockdown" + }, /turf/open/floor/plating, /area/security/brig) "acd" = ( @@ -1246,11 +1250,10 @@ /obj/effect/turf_decal/tile/purple{ dir = 1 }, -/obj/structure/closet/crate/freezer, /obj/machinery/firealarm{ pixel_y = 26 }, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/machinery/washing_machine, /turf/open/floor/plasteel, /area/crew_quarters/lounge) "acW" = ( @@ -2403,6 +2406,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/machinery/washing_machine, /turf/open/floor/plasteel/checker, /area/hallway/secondary/entry) "afP" = ( @@ -2636,9 +2640,6 @@ /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, -/mob/living/simple_animal/pet/redpanda{ - name = "Stinky" - }, /turf/open/floor/plasteel, /area/crew_quarters/lounge) "agt" = ( @@ -2667,6 +2668,11 @@ pixel_y = 28 }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/displaycase/labcage{ + desc = "A glass lab container for storing smelly creatures."; + name = "stinky panda containment"; + start_showpiece_type = /mob/living/simple_animal/pet/redpanda/stinky + }, /turf/open/floor/plasteel, /area/crew_quarters/lounge) "agx" = ( @@ -3089,6 +3095,10 @@ /area/crew_quarters/kitchen) "ahy" = ( /obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "solitarylock"; + name = "Brig Lockdown" + }, /turf/open/floor/plating, /area/security/warden) "ahz" = ( @@ -3586,6 +3596,8 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/effect/turf_decal/bot, +/obj/structure/closet/secure_closet/genpop, /turf/open/floor/plasteel, /area/security/brig) "aiL" = ( @@ -3791,6 +3803,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/washing_machine, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, @@ -3895,7 +3908,7 @@ /area/security/brig) "ajA" = ( /obj/effect/turf_decal/bot, -/obj/structure/closet/secure_closet/brig, +/obj/structure/closet/secure_closet/genpop, /turf/open/floor/plasteel, /area/security/brig) "ajB" = ( @@ -3905,6 +3918,10 @@ }, /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, +/obj/machinery/door/poddoor/preopen{ + id = "briglockdown"; + name = "Brig Lockdown" + }, /turf/open/floor/plasteel, /area/security/prison) "ajC" = ( @@ -9731,6 +9748,10 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, +/obj/machinery/door/poddoor/preopen{ + id = "briglockdown"; + name = "Brig Lockdown" + }, /turf/open/floor/plasteel, /area/security/prison) "awI" = ( @@ -9820,6 +9841,10 @@ dir = 1 }, /obj/effect/turf_decal/tile/bar, +/obj/machinery/door/poddoor/preopen{ + id = "briglockdown"; + name = "Brig Lockdown" + }, /turf/open/floor/plasteel, /area/security/main) "awR" = ( @@ -9903,13 +9928,21 @@ name = "Thermo-Electric Generator" }) "awY" = ( -/obj/structure/closet/wardrobe/orange, /obj/effect/turf_decal/tile/red{ dir = 1 }, /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/machinery/button/door{ + id = "solitarylock"; + name = "Solitary Lockdown"; + pixel_x = -24; + req_access_txt = "2" + }, /turf/open/floor/plasteel, /area/security/brig) "awZ" = ( @@ -10015,7 +10048,7 @@ pixel_y = 28 }, /obj/effect/turf_decal/bot, -/obj/structure/closet/secure_closet/brig, +/obj/structure/closet/secure_closet/genpop, /turf/open/floor/plasteel, /area/security/brig) "axj" = ( @@ -10780,6 +10813,10 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/door/poddoor/preopen{ + id = "briglockdown"; + name = "Brig Lockdown" + }, /turf/open/floor/plasteel, /area/security/main) "ayP" = ( @@ -10943,6 +10980,7 @@ /area/maintenance/port/central) "aze" = ( /obj/machinery/power/apc{ + dir = 1; name = "AI Chamber APC"; pixel_y = 24 }, @@ -11617,13 +11655,6 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/item/gun/energy/e_gun/advtaser{ - pixel_y = 6 - }, -/obj/item/gun/energy/e_gun/advtaser, -/obj/item/gun/energy/e_gun/advtaser{ - pixel_y = -6 - }, /obj/machinery/vending/security, /turf/open/floor/plasteel, /area/security/brig) @@ -12159,6 +12190,10 @@ dir = 1 }, /obj/effect/turf_decal/tile/bar, +/obj/machinery/door/poddoor/preopen{ + id = "briglockdown"; + name = "Brig Lockdown" + }, /turf/open/floor/plasteel, /area/security/main) "aBy" = ( @@ -12719,6 +12754,10 @@ }, /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, +/obj/machinery/door/poddoor/preopen{ + id = "briglockdown"; + name = "Brig Lockdown" + }, /turf/open/floor/plasteel, /area/security/prison) "aCI" = ( @@ -14374,7 +14413,9 @@ /turf/open/floor/plasteel, /area/storage/emergency/generic) "aFX" = ( -/obj/structure/filingcabinet, +/obj/machinery/computer/security/hos{ + dir = 4 + }, /turf/open/floor/plasteel/grimy, /area/crew_quarters/heads/hos) "aFY" = ( @@ -14809,7 +14850,9 @@ c_tag = "Security - Head of Security's Office"; pixel_x = 22 }, -/obj/machinery/computer/security/hos, +/obj/structure/chair/comfy/brown{ + dir = 8 + }, /turf/open/floor/plasteel/grimy, /area/crew_quarters/heads/hos) "aGL" = ( @@ -16299,8 +16342,9 @@ }, /obj/effect/turf_decal/tile/red, /obj/item/storage/belt/medical, -/obj/item/clothing/suit/space/hardsuit/medical, /obj/item/tank/internals/emergency_oxygen, +/obj/item/clothing/suit/space/eva/paramedic, +/obj/item/clothing/head/helmet/space/eva/paramedic, /turf/open/floor/plasteel/white, /area/medical/medbay/zone2{ name = "Medbay Treatment Center" @@ -16481,11 +16525,28 @@ /turf/open/floor/plasteel, /area/security/main) "aJV" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/closed/wall, -/area/security/prison) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, +/area/science/research{ + name = "Research Sector" + }) "aJW" = ( /obj/machinery/cryopod{ dir = 8 @@ -16773,7 +16834,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/machinery/flasher/portable, +/obj/machinery/rnd/production/techfab/department/security, /turf/open/floor/plasteel, /area/security/brig) "aKz" = ( @@ -18308,7 +18369,7 @@ pixel_x = 22 }, /obj/machinery/power/apc/highcap/fifteen_k{ - areastring = "area/tcommsat/computer"; + areastring = "/area/tcommsat/server"; dir = 1; name = "Telecomms Server APC"; pixel_y = 24 @@ -18317,7 +18378,7 @@ dir = 4 }, /turf/open/floor/plasteel, -/area/tcommsat/computer) +/area/tcommsat/server) "aND" = ( /turf/open/floor/plasteel/white, /area/medical{ @@ -19373,7 +19434,7 @@ icon_state = "4-8" }, /turf/open/floor/plating/airless, -/area/space/nearstation) +/area/crew_quarters/fitness/cogpool) "aPS" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/white, @@ -26419,6 +26480,7 @@ dir = 1 }, /obj/effect/spawner/lootdrop/maintenance, +/obj/machinery/atmospherics/components/unary/thermomachine/heater/on, /turf/open/floor/plating, /area/crew_quarters/fitness/cogpool) "bfz" = ( @@ -27000,8 +27062,8 @@ /area/quartermaster/warehouse) "bgJ" = ( /obj/machinery/portable_atmospherics/pump, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 }, /turf/open/floor/plating, /area/crew_quarters/fitness/cogpool) @@ -29276,15 +29338,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/item/surgical_drapes, -/obj/item/scalpel, -/obj/item/circular_saw{ - pixel_y = 16 - }, -/obj/item/hemostat, -/obj/item/retractor, -/obj/item/surgicaldrill, -/obj/item/cautery, +/obj/item/storage/backpack/duffelbag/med/surgery, /turf/open/floor/plasteel/white, /area/medical/medbay/zone2{ name = "Medbay Treatment Center" @@ -31598,9 +31652,6 @@ dir = 1 }, /area/hallway/secondary/exit) -"bqq" = ( -/turf/closed/wall, -/area/science/robotics/lab) "bqr" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -31615,7 +31666,7 @@ /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, -/area/science/robotics/lab) +/area/maintenance/aft) "bqt" = ( /obj/structure/table, /obj/effect/turf_decal/tile/red{ @@ -31629,7 +31680,6 @@ /obj/item/clothing/mask/surgical, /obj/item/healthanalyzer, /obj/item/clothing/neck/stethoscope, -/obj/item/razor, /turf/open/floor/plasteel/white, /area/medical/medbay/zone2{ name = "Medbay Treatment Center" @@ -31699,8 +31749,8 @@ dir = 8 }, /obj/machinery/light, -/obj/structure/disposalpipe/junction/flip{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 9 }, /turf/open/floor/plasteel, /area/hallway/primary/aft) @@ -32192,9 +32242,26 @@ /turf/open/floor/plasteel, /area/hallway/secondary/civilian) "brz" = ( -/obj/machinery/computer/rdconsole/robotics, -/turf/open/floor/circuit, -/area/science/robotics/lab) +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/machinery/power/apc{ + areastring = "/area/science/research"; + name = "Research Sector APC"; + pixel_y = -24 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/science/research{ + name = "Research Sector" + }) "brA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -32251,15 +32318,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/civilian) -"brF" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/stripes/white/full, -/obj/effect/turf_decal/stripes/line, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/science/robotics/lab) "brG" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -32274,13 +32332,21 @@ /turf/open/floor/plasteel/grimy, /area/crew_quarters/heads/hos) "brH" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/plasteel, -/area/science/robotics/lab) +/obj/structure/closet/wardrobe/chemistry_white{ + anchored = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "brI" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -32298,32 +32364,21 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "brJ" = ( -/obj/machinery/vending/assist, -/obj/machinery/light/small{ - dir = 1; - light_color = "#ffc1c1" +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/plasteel, -/area/science/robotics/lab) +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/medical/chemistry) "brK" = ( -/obj/structure/closet/crate/medical, -/obj/item/storage/firstaid/regular{ - empty = 1; - name = "First-Aid (empty)" +/obj/machinery/chem_heater, +/obj/effect/turf_decal/trimline/yellow/filled/end{ + dir = 1 }, -/obj/item/storage/firstaid/regular{ - empty = 1; - name = "First-Aid (empty)" - }, -/obj/item/storage/firstaid/regular{ - empty = 1; - name = "First-Aid (empty)" - }, -/obj/item/healthanalyzer, -/obj/item/healthanalyzer, -/obj/item/healthanalyzer, -/turf/open/floor/plasteel, -/area/science/robotics/lab) +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "brL" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -32844,42 +32899,37 @@ /turf/open/floor/grass, /area/hydroponics) "bsL" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/landmark/start/roboticist, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) -"bsM" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) -"bsN" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/disposalpipe/segment{ +/obj/effect/turf_decal/trimline/yellow/filled/end, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 5 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) +"bsM" = ( +/turf/closed/wall, /area/science/robotics/lab) +"bsN" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/eastright{ + base_state = "left"; + dir = 2; + icon_state = "left"; + name = "Chemistry Desk"; + req_access_txt = "33" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/medical/chemistry) "bsO" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/closed/wall/r_wall, /area/hallway/secondary/civilian) -"bsP" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) "bsQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/obj/machinery/smartfridge/chemistry/preloaded, +/turf/closed/wall/r_wall, +/area/medical/chemistry) "bsR" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel/grimy, @@ -32899,9 +32949,8 @@ /turf/open/space/basic, /area/space/nearstation) "bsU" = ( -/obj/effect/landmark/start/roboticist, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/dark, /area/science/robotics/lab) "bsV" = ( /turf/closed/wall, @@ -33039,18 +33088,27 @@ /turf/open/floor/plasteel/dark, /area/chapel/office) "btn" = ( -/obj/machinery/computer/mech_bay_power_console, -/turf/open/floor/plasteel, -/area/science/robotics/lab) -"bto" = ( -/turf/open/floor/mech_bay_recharge_floor, -/area/science/robotics/lab) -"btp" = ( -/obj/machinery/mech_bay_recharge_port{ - dir = 8 +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics"; + name = "robotics lab shutters" }, /turf/open/floor/plating, /area/science/robotics/lab) +"bto" = ( +/turf/open/floor/plasteel, +/area/science/robotics/lab) +"btp" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "btq" = ( /obj/machinery/vending/cigarette, /obj/effect/decal/cleanable/dirt, @@ -33072,9 +33130,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/chapel) -"bts" = ( -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) "btt" = ( /obj/structure/chair{ dir = 8 @@ -33104,12 +33159,11 @@ /turf/closed/wall, /area/hallway/secondary/civilian) "btv" = ( -/obj/structure/rack, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/belt/utility, -/obj/item/stack/cable_coil/random, -/turf/open/floor/plasteel, -/area/science/robotics/lab) +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/closed/wall/r_wall, +/area/router/medsci) "btw" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -33327,16 +33381,16 @@ /turf/open/floor/plating, /area/router) "bua" = ( -/obj/machinery/camera{ - c_tag = "Robotics Backroom"; - dir = 8; - network = list("ss13","medbay"); - pixel_y = -22 +/obj/effect/turf_decal/tile/purple{ + dir = 1 }, -/obj/structure/sign/poster/contraband/borg_fancy_2{ - pixel_x = 32 +/obj/effect/turf_decal/tile/purple{ + dir = 4 }, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark/side, /area/science/robotics/lab) "bub" = ( /obj/effect/turf_decal/tile/yellow, @@ -33390,12 +33444,6 @@ "bui" = ( /turf/open/floor/plasteel, /area/hallway/secondary/exit) -"buj" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) "buk" = ( /obj/structure/cable{ icon_state = "1-2" @@ -33410,15 +33458,13 @@ /turf/open/floor/plating, /area/router) "bul" = ( -/obj/machinery/light_switch{ - pixel_x = 24 +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chem1"; + name = "chem lab shutters" }, -/obj/machinery/light{ - dir = 4; - light_color = "#c1caff" - }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/turf/open/floor/plating, +/area/medical/chemistry) "bum" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, @@ -34046,11 +34092,25 @@ /turf/open/floor/carpet/green, /area/crew_quarters/heads/hop) "bvK" = ( -/obj/structure/table/optable, -/obj/item/tank/internals/anesthetic, -/obj/item/clothing/mask/breath, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/table/glass, +/obj/item/stack/sheet/mineral/plasma, +/obj/item/stack/cable_coil/random, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/screwdriver{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "bvL" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -34228,9 +34288,26 @@ /turf/open/floor/plating, /area/maintenance/department/chapel) "bwf" = ( -/obj/machinery/computer/operating, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/table/glass, +/obj/item/book/manual/wiki/chemistry, +/obj/item/book/manual/wiki/chemistry{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science{ + pixel_x = 2; + pixel_y = 4 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "bwg" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -35361,12 +35438,11 @@ /turf/open/floor/plating, /area/maintenance/starboard/central) "byw" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = -28 +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 }, /turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/area/medical/chemistry) "byx" = ( /obj/machinery/telecomms/processor/preset_three, /turf/open/floor/circuit/telecomms/mainframe, @@ -35396,9 +35472,11 @@ /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) "byD" = ( -/obj/effect/landmark/start/roboticist, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, /turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/area/medical/chemistry) "byE" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -35783,14 +35861,6 @@ }, /turf/open/floor/plasteel/white, /area/gateway) -"bzA" = ( -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/closed/wall, -/area/science/research{ - name = "Research Sector" - }) "bzB" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 6 @@ -35833,11 +35903,15 @@ /turf/open/floor/plating, /area/router) "bzG" = ( -/obj/machinery/light{ - dir = 8 +/obj/machinery/chem_dispenser, +/obj/item/radio/intercom{ + pixel_x = -25 }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/obj/effect/turf_decal/trimline/yellow/filled/end{ + dir = 1 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "bzH" = ( /obj/structure/disposalpipe/segment, /obj/structure/grille/broken, @@ -35853,8 +35927,8 @@ /area/hallway/primary/aft) "bzJ" = ( /obj/structure/sign/warning/biohazard, -/turf/closed/wall, -/area/science/robotics/lab) +/turf/closed/wall/r_wall, +/area/medical/chemistry) "bzK" = ( /obj/machinery/disposal/bin{ name = "Chapel Corpse Delivery" @@ -36258,26 +36332,28 @@ /turf/open/floor/plasteel, /area/quartermaster/sorting) "bAC" = ( -/obj/machinery/recharge_station, -/obj/effect/turf_decal/stripes/line{ - dir = 9 +/obj/machinery/chem_master, +/obj/machinery/requests_console{ + department = "Chemistry"; + departmentType = 2; + pixel_x = -30; + receive_ore_updates = 1 }, -/turf/open/floor/plasteel, -/area/science/robotics/lab) -"bAD" = ( -/obj/machinery/recharge_station, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/science/robotics/lab) +/obj/effect/turf_decal/trimline/yellow/filled/end, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "bAE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/structure/table/glass, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_x = -3; + pixel_y = 3 }, -/obj/effect/landmark/start/ai/secondary, -/turf/open/floor/plasteel, -/area/science/robotics/lab) +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/dropper, +/obj/effect/turf_decal/trimline/yellow/filled/end, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "bAF" = ( /obj/machinery/gateway/centerstation, /turf/open/floor/engine, @@ -36338,6 +36414,7 @@ name = "Chief Medical Officer's Office APC"; pixel_y = 24 }, +/mob/living/simple_animal/pet/cat/Runtime, /turf/open/floor/plasteel/white, /area/crew_quarters/heads/cmo) "bAK" = ( @@ -36626,12 +36703,11 @@ /turf/open/floor/plating, /area/maintenance/disposal) "bBs" = ( -/obj/machinery/aug_manipulator, -/obj/effect/turf_decal/stripes/line{ - dir = 5 +/obj/structure/sign/warning/nosmoking{ + pixel_y = -32 }, -/turf/open/floor/plasteel, -/area/science/robotics/lab) +/turf/open/floor/plasteel/dark, +/area/medical/chemistry) "bBt" = ( /obj/structure/cable{ icon_state = "4-8" @@ -36816,10 +36892,14 @@ "bBP" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, -/area/medical/chemistry) +/area/science/robotics/lab) "bBQ" = ( -/turf/closed/wall, -/area/medical/chemistry) +/obj/machinery/door/airlock/research{ + name = "Mech Bay"; + req_access_txt = "29" + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bBR" = ( /obj/structure/cable{ icon_state = "0-8" @@ -36969,13 +37049,6 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/hop) -"bCf" = ( -/obj/structure/sign/warning/fire, -/turf/closed/wall/r_wall, -/area/medical/chemistry) -"bCg" = ( -/turf/closed/wall/r_wall, -/area/medical/chemistry) "bCh" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -37297,10 +37370,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"bCY" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/science/robotics/lab) "bCZ" = ( /obj/machinery/conveyor{ dir = 8; @@ -37381,7 +37450,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/effect/decal/cleanable/dirt, -/obj/item/pipe_meter, +/obj/machinery/meter, /turf/open/floor/plating, /area/maintenance/department/chapel) "bDk" = ( @@ -37465,7 +37534,7 @@ /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, -/obj/item/pipe_meter, +/obj/machinery/meter, /turf/closed/wall/r_wall, /area/crew_quarters/kitchen/backroom) "bDs" = ( @@ -37692,13 +37761,9 @@ /turf/open/floor/plasteel/stairs, /area/crew_quarters/bar) "bDT" = ( -/obj/machinery/chem_heater, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/airalarm{ - pixel_y = 24 - }, -/turf/open/floor/plasteel, -/area/medical/chemistry) +/obj/machinery/mecha_part_fabricator, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bDU" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/effect/spawner/structure/window/reinforced, @@ -38464,8 +38529,12 @@ "bFu" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics"; + name = "robotics lab shutters" + }, /turf/open/floor/plating, -/area/medical/chemistry) +/area/science/robotics/lab) "bFv" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -38485,18 +38554,33 @@ }, /obj/structure/cable, /obj/machinery/power/apc{ - areastring = "area/science/xenobiology"; + areastring = "/area/science/xenobiology"; name = "Xenobiology Lab APC"; pixel_y = -24 }, /turf/open/floor/plasteel, /area/science/xenobiology) "bFx" = ( -/obj/machinery/chem_dispenser, -/obj/effect/turf_decal/stripes/line, -/obj/item/reagent_containers/glass/beaker/large, -/turf/open/floor/plasteel, -/area/medical/chemistry) +/obj/structure/table, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 1 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 1 + }, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/machinery/requests_console{ + department = "Robotics"; + departmentType = 2; + name = "Robotics RC"; + pixel_y = 31; + receive_ore_updates = 1 + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bFy" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ @@ -38524,33 +38608,22 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bFB" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 +/obj/structure/window/reinforced{ + dir = 8 }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/structure/bodycontainer/morgue{ + dir = 2 }, -/obj/effect/turf_decal/stripes/white/full, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bFC" = ( /obj/structure/table, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/machinery/firealarm{ - pixel_y = 26 - }, -/obj/item/storage/fancy/donut_box, -/obj/item/storage/box/beakers, -/obj/item/clothing/glasses/science, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/item/mmi, +/obj/item/mmi, +/obj/item/mmi, +/obj/item/storage/box/bodybags, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bFD" = ( /obj/structure/disposaloutlet{ dir = 4 @@ -38561,11 +38634,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/sorting) -"bFE" = ( -/obj/machinery/smoke_machine, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/medical/chemistry) "bFF" = ( /obj/machinery/light_switch{ pixel_y = 24 @@ -38575,10 +38643,6 @@ }, /turf/open/floor/plating, /area/storage/tech) -"bFG" = ( -/obj/structure/sign/departments/chemistry, -/turf/closed/wall, -/area/medical/chemistry) "bFH" = ( /obj/machinery/power/apc{ name = "Customs APC"; @@ -38849,12 +38913,12 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/machinery/light_switch{ - pixel_y = 24 - }, /obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ dir = 1 }, +/obj/machinery/airalarm{ + pixel_y = 24 + }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bGa" = ( @@ -39584,20 +39648,8 @@ /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) -"bHD" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) @@ -39614,6 +39666,13 @@ /obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ dir = 1 }, +/obj/machinery/camera{ + c_tag = "Medbay - Starboard"; + network = list("ss13","rd") + }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bHF" = ( @@ -39640,9 +39699,6 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/machinery/airalarm{ - pixel_y = 24 - }, /obj/effect/turf_decal/tile/purple{ dir = 4 }, @@ -39652,9 +39708,8 @@ /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, -/obj/machinery/camera{ - c_tag = "Medbay - Starboard"; - network = list("ss13","rd") +/obj/structure/cable{ + icon_state = "4-8" }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) @@ -39681,6 +39736,9 @@ /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bHJ" = ( @@ -39811,52 +39869,40 @@ /obj/structure/disposalpipe/junction{ dir = 8 }, -/turf/open/floor/plating, -/area/medical/chemistry) -"bId" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics"; + name = "robotics lab shutters" }, +/turf/open/floor/plating, +/area/science/robotics/lab) +"bId" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plasteel/dark/side{ + dir = 9 + }, +/area/science/robotics/lab) +"bIe" = ( /obj/effect/turf_decal/tile/purple{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/loading_area, +/turf/open/floor/plasteel/dark/side{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/mob/living/simple_animal/bot/firebot, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) -"bIe" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/area/science/robotics/lab) "bIf" = ( /obj/effect/turf_decal/tile/purple{ - dir = 4 + dir = 8 }, -/obj/effect/landmark/start/chemist, -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/dark/side{ dir = 1 }, -/obj/structure/chair/office/light{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/area/science/robotics/lab) "bIg" = ( /obj/structure/table, /obj/effect/turf_decal/tile/purple{ @@ -39874,32 +39920,19 @@ name = "Research Sector" }) "bIh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/window/reinforced{ + dir = 8 }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) -"bIi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bIj" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/machinery/door/window/southright, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bIk" = ( -/obj/machinery/smartfridge/chemistry/preloaded, -/turf/closed/wall, -/area/medical/chemistry) +/turf/closed/wall/r_wall, +/area/science/robotics/lab) "bIl" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -40119,19 +40152,6 @@ /obj/item/extinguisher, /turf/open/floor/plasteel, /area/science/xenobiology) -"bIL" = ( -/obj/structure/closet/l3closet/scientist, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) -"bIM" = ( -/turf/open/floor/plasteel/white, -/area/medical/chemistry) "bIN" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -40308,16 +40328,6 @@ /obj/structure/window/reinforced/spawner, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"bJd" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -22 - }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) "bJe" = ( /obj/structure/closet/secure_closet/personal/patient, /obj/effect/turf_decal/tile/blue, @@ -40547,27 +40557,48 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bJC" = ( -/obj/effect/turf_decal/tile/purple{ +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/machinery/button/door{ + id = "robotics2"; + name = "Shutters Control Button"; + pixel_x = 24; + pixel_y = -24; + req_access_txt = "29" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bJD" = ( -/obj/machinery/chem_heater, -/obj/effect/turf_decal/stripes/line{ - dir = 9 +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 }, -/turf/open/floor/plasteel, -/area/medical/chemistry) +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bJE" = ( -/obj/machinery/chem_dispenser, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/structure/table, +/obj/item/stack/sheet/plasteel{ + amount = 10; + pixel_x = -5 }, -/obj/item/reagent_containers/glass/beaker/large, -/turf/open/floor/plasteel, -/area/medical/chemistry) +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/stack/cable_coil/random{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bJF" = ( /obj/effect/turf_decal/tile/purple{ dir = 1 @@ -40600,8 +40631,12 @@ /area/hallway/primary/central) "bJH" = ( /obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics2"; + name = "robotics lab shutters" + }, /turf/open/floor/plating, -/area/medical/chemistry) +/area/science/robotics/lab) "bJI" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -40773,30 +40808,47 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "bKd" = ( -/obj/structure/closet/bombcloset, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) -"bKe" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) -"bKf" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, /obj/effect/turf_decal/tile/purple{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "robotics"; + name = "Shutters Control Button"; + pixel_y = 8; + req_access_txt = "29"; + pixel_x = -24 + }, +/turf/open/floor/plasteel/dark/side{ + dir = 8 + }, +/area/science/robotics/lab) +"bKe" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/dark/side{ + dir = 4 + }, +/area/science/robotics/lab) +"bKf" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bKg" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 @@ -41120,70 +41172,88 @@ /turf/open/floor/engine, /area/science/xenobiology) "bKN" = ( -/obj/machinery/vending/wardrobe/chem_wardrobe, -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/structure/table, +/obj/item/book/manual/wiki/robotics_cyborgs{ + pixel_x = -3; + pixel_y = -2 }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 +/obj/item/book/manual/ripley_build_and_repair{ + pixel_x = 3; + pixel_y = 2 }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/item/mmi/posibrain, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bKO" = ( -/obj/structure/closet/crate/medical, -/obj/effect/turf_decal/tile/purple{ - dir = 8 +/obj/structure/table, +/obj/item/storage/belt/utility, +/obj/item/storage/belt/utility, +/obj/item/multitool{ + pixel_x = 3 }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/item/multitool{ + pixel_x = 3 }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 +/obj/item/storage/toolbox/mechanical{ + pixel_x = 2; + pixel_y = -1 }, -/obj/item/stack/sheet/mineral/plasma, -/obj/item/stack/sheet/mineral/plasma, -/obj/item/reagent_containers/glass/bottle/ammonia, -/obj/item/reagent_containers/glass/bottle/atropine, -/obj/item/reagent_containers/glass/bottle/bromine, -/obj/item/reagent_containers/glass/bottle/charcoal, -/obj/item/reagent_containers/glass/bottle/diethylamine, -/obj/item/reagent_containers/glass/bottle/epinephrine, -/obj/item/reagent_containers/glass/bottle/ethanol, -/obj/item/reagent_containers/glass/bottle/formaldehyde, -/obj/item/reagent_containers/glass/bottle/iron, -/obj/item/reagent_containers/glass/bottle/morphine, -/obj/item/reagent_containers/glass/bottle/salglu_solution, -/obj/item/reagent_containers/glass/bottle/toxin, -/obj/item/reagent_containers/glass/bottle/carbon, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/item/storage/toolbox/mechanical{ + pixel_x = 2; + pixel_y = -1 + }, +/obj/item/storage/toolbox/electrical{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/storage/toolbox/electrical{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/clothing/head/welding{ + pixel_x = -3; + pixel_y = 5 + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bKP" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/window/reinforced{ - dir = 8 +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high{ + charge = 100; + maxcharge = 15000; + pixel_y = 3; + pixel_x = 4 }, -/obj/machinery/door/window/northright{ - name = "Emergency Shower" +/obj/item/stock_parts/cell/high{ + charge = 100; + maxcharge = 15000; + pixel_x = -6; + pixel_y = 6 }, -/turf/open/floor/plasteel, -/area/medical/chemistry) +/obj/item/stock_parts/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/machinery/button/door{ + id = "robotics3"; + name = "Shutters Control Button"; + pixel_x = 24; + pixel_y = -24; + req_access_txt = "29" + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bKQ" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/shower{ - dir = 8; - name = "emergency shower"; - pixel_y = -4 - }, -/turf/open/floor/plasteel, -/area/medical/chemistry) +/obj/machinery/droneDispenser, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/glass/fifty, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bKR" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -43689,7 +43759,7 @@ pixel_x = 22 }, /obj/machinery/turretid{ - control_area = "area/ai_monitored/turret_protected/ai"; + control_area = "/area/ai_monitored/turret_protected/ai"; dir = 1; name = "AI Chamber turret control"; pixel_x = 5; @@ -43834,12 +43904,33 @@ /turf/open/floor/plasteel/showroomfloor, /area/medical/morgue) "bQp" = ( -/obj/item/radio/intercom{ - name = "Station Intercom (Common)"; - pixel_x = -26 +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23 }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/obj/machinery/power/apc{ + areastring = "/area/medical/chemistry"; + dir = 1; + name = "Chemistry APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/obj/item/storage/box/syringes, +/obj/item/storage/box/beakers{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/effect/turf_decal/trimline/yellow/filled/end{ + dir = 8 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "bQq" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -44485,7 +44576,7 @@ dir = 1; network = list("minisat") }, -/turf/open/floor/circuit/green/telecomms, +/turf/open/floor/circuit/green, /area/science/server{ name = "Computer Core" }) @@ -44723,13 +44814,20 @@ /obj/effect/turf_decal/tile/purple{ dir = 1 }, -/obj/effect/turf_decal/tile/yellow, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/effect/turf_decal/tile/purple, +/obj/machinery/power/apc{ + areastring = "/area/science/robotics/lab"; + dir = 8; + name = "Robotics Lab APC"; + pixel_x = -25 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, /turf/open/floor/plasteel, -/area/science/research{ - name = "Research Sector" - }) +/area/science/robotics/lab) "bRU" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 @@ -44737,11 +44835,15 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "bRV" = ( -/obj/structure/sign/departments/chemistry, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/closed/wall, -/area/medical/chemistry) +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics"; + name = "robotics lab shutters" + }, +/turf/open/floor/plating, +/area/science/robotics/lab) "bRW" = ( /obj/effect/turf_decal/bot, /obj/structure/cable{ @@ -44796,33 +44898,22 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bSd" = ( -/obj/structure/closet/secure_closet/chemical, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, +/obj/structure/table, +/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/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, /obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bSe" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/requests_console{ - department = "Robotics"; - departmentType = 2; - name = "Robotics RC"; - pixel_x = -30; - receive_ore_updates = 1 +/obj/machinery/computer/rdconsole/robotics{ + dir = 1 }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) @@ -45150,6 +45241,7 @@ /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high/plus, /obj/item/stock_parts/cell/high/plus, +/obj/item/stack/cable_coil/red, /turf/open/floor/plasteel/white, /area/science/lab) "bSN" = ( @@ -45511,27 +45603,30 @@ }, /area/medical/medbay/lobby) "bTC" = ( -/obj/effect/turf_decal/tile/yellow{ +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) -"bTD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/disposalpipe/junction{ + dir = 1 }, -/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/dark/side{ + dir = 5 + }, +/area/science/robotics/lab) +"bTD" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bTE" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel/white, @@ -48005,31 +48100,22 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "bYo" = ( -/obj/structure/closet/emcloset, /obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/maintenance/department/science{ - name = "Research Maintenance" - }) +/obj/machinery/computer/mech_bay_power_console, +/turf/open/floor/circuit/green, +/area/science/robotics/mechbay) "bYp" = ( -/obj/structure/rack, -/obj/item/clothing/suit/fire/firefighter, -/obj/item/clothing/mask/gas, -/obj/item/wrench, -/obj/item/light/tube, -/turf/open/floor/plating, -/area/maintenance/department/science{ - name = "Research Maintenance" - }) +/turf/open/floor/plasteel/recharge_floor, +/area/science/robotics/mechbay) "bYq" = ( /obj/machinery/light/small{ dir = 1 }, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/department/science{ - name = "Research Maintenance" - }) +/obj/machinery/mech_bay_recharge_port{ + dir = 8 + }, +/turf/open/floor/circuit/green, +/area/science/robotics/mechbay) "bYr" = ( /obj/effect/turf_decal/tile/purple{ dir = 8 @@ -48104,9 +48190,7 @@ }) "bYv" = ( /turf/closed/wall, -/area/science/research{ - name = "Research Sector" - }) +/area/science/robotics/mechbay) "bYw" = ( /obj/effect/turf_decal/tile/purple{ dir = 4 @@ -48126,10 +48210,8 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plating, -/area/maintenance/department/science{ - name = "Research Maintenance" - }) +/turf/open/floor/circuit, +/area/science/robotics/mechbay) "bYy" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -48140,13 +48222,8 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plating, -/area/maintenance/department/science{ - name = "Research Maintenance" - }) +/turf/open/floor/circuit, +/area/science/robotics/mechbay) "bYz" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 10 @@ -48170,24 +48247,9 @@ name = "Research Sector" }) "bYB" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/item/clothing/gloves/color/latex, -/obj/item/book/manual/wiki/chemistry, -/obj/item/reagent_containers/dropper, -/obj/item/radio/headset/headset_medsci, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, +/area/science/robotics/lab) "bYC" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, @@ -48215,12 +48277,11 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "bYF" = ( -/obj/machinery/portable_atmospherics/pump, /obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/maintenance/department/science{ - name = "Research Maintenance" - }) +/obj/structure/cable, +/obj/machinery/recharge_station, +/turf/open/floor/circuit/green, +/area/science/robotics/mechbay) "bYG" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -48237,78 +48298,36 @@ name = "Medbay Treatment Center" }) "bYH" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, -/area/maintenance/department/science{ - name = "Research Maintenance" - }) +/obj/structure/sign/poster/contraband/kss13{ + pixel_y = -32 + }, +/obj/structure/cable, +/obj/machinery/recharge_station, +/turf/open/floor/circuit/green, +/area/science/robotics/mechbay) "bYI" = ( -/obj/structure/table, /obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/obj/effect/turf_decal/tile/yellow, -/obj/item/storage/box/beakers, -/obj/item/assembly/timer{ - pixel_y = 6 - }, -/obj/item/assembly/timer{ - pixel_y = 6 - }, -/obj/item/assembly/timer{ - pixel_y = 6 - }, -/obj/item/assembly/timer{ - pixel_y = 6 - }, -/obj/item/assembly/igniter{ - pixel_y = -4 - }, -/obj/item/assembly/igniter{ - pixel_y = -4 - }, -/obj/item/assembly/igniter{ - pixel_y = -4 - }, -/obj/item/assembly/igniter{ - pixel_y = -4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ +/obj/effect/turf_decal/tile/purple{ dir = 8 }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) -"bYJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/dark/side{ + dir = 4 + }, +/area/science/robotics/lab) +"bYJ" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) -"bYK" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/structure/disposalpipe/sorting/mail{ - dir = 8; - sortType = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bYL" = ( /obj/effect/turf_decal/tile/purple{ dir = 4 @@ -48439,13 +48458,13 @@ name = "Computer Core" }) "bYY" = ( -/turf/open/floor/circuit/green/telecomms, +/turf/open/floor/circuit/green, /area/science/server{ name = "Computer Core" }) "bYZ" = ( /obj/structure/disposalpipe/segment, -/turf/open/floor/circuit/green/telecomms, +/turf/open/floor/circuit/green, /area/science/server{ name = "Computer Core" }) @@ -48476,7 +48495,7 @@ }, /obj/item/circuitboard/machine/rdserver, /obj/item/disk/tech_disk, -/turf/open/floor/circuit/green/telecomms, +/turf/open/floor/circuit/green, /area/science/server{ name = "Computer Core" }) @@ -48486,7 +48505,7 @@ }, /obj/machinery/light, /obj/structure/disposalpipe/segment, -/turf/open/floor/circuit/green/telecomms, +/turf/open/floor/circuit/green, /area/science/server{ name = "Computer Core" }) @@ -48817,21 +48836,13 @@ /turf/closed/wall/r_wall, /area/library) "bZT" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/structure/table/optable{ + name = "Robotics Operating Table" }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/item/storage/box/pillbottles, -/obj/item/hand_labeler, -/obj/item/clothing/glasses/science, -/obj/structure/sign/poster/official/safety_eye_protection{ - pixel_y = 32 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/item/tank/internals/anesthetic, +/obj/item/clothing/mask/breath, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "bZU" = ( /obj/structure/table/wood, /obj/machinery/door/window/northright{ @@ -48947,19 +48958,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"caj" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) "cak" = ( /obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, @@ -49078,6 +49076,7 @@ pixel_y = 3 }, /obj/item/storage/toolbox/mechanical, +/obj/item/stack/cable_coil/red, /turf/open/floor/plasteel, /area/science/explab) "caD" = ( @@ -49107,32 +49106,11 @@ /area/engine/atmos) "caG" = ( /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, /obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ dir = 8 }, -/turf/open/floor/plasteel/dark/side{ - dir = 8 - }, +/turf/open/floor/plasteel/dark, /area/science/explab) -"caH" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/landmark/start/chemist, -/obj/effect/turf_decal/tile/yellow, -/obj/structure/chair/office/light, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) "caI" = ( /obj/structure/table/reinforced, /obj/item/integrated_electronics/analyzer, @@ -49171,15 +49149,9 @@ /turf/open/floor/engine/o2, /area/engine/atmos) "caO" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plating, -/area/maintenance/aft) +/obj/machinery/rnd/production/circuit_imprinter/department/science, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "caP" = ( /obj/structure/chair/office/light, /obj/effect/turf_decal/stripes/line, @@ -49564,19 +49536,6 @@ /area/engine/supermatter{ name = "Thermo-Electric Generator" }) -"cbK" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) "cbL" = ( /obj/structure/cable{ icon_state = "4-8" @@ -49758,21 +49717,8 @@ /turf/open/floor/plating/airless, /area/router/aux) "ccd" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "cce" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 @@ -49853,20 +49799,13 @@ /turf/open/floor/plasteel/stairs, /area/maintenance/department/chapel) "ccm" = ( -/obj/structure/table, -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics2"; + name = "robotics lab shutters" }, -/obj/machinery/mecha_part_fabricator, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/glass{ - amount = 20; - layer = 3.2 - }, -/turf/open/floor/plasteel, -/area/science/robotics/lab) +/turf/open/floor/plating, +/area/router/medsci) "ccn" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/conveyor/auto{ @@ -49930,9 +49869,7 @@ "cct" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, -/area/science/research{ - name = "Research Sector" - }) +/area/science/robotics/mechbay) "ccu" = ( /obj/structure/cable{ icon_state = "1-2" @@ -50021,16 +49958,23 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/window/westleft{ - name = "Chemistry Desk"; - req_access_txt = "33" - }, /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics2"; + name = "robotics lab shutters" + }, +/obj/machinery/door/window/eastright{ + base_state = "left"; + dir = 8; + icon_state = "left"; + name = "Robotics Desk"; + req_access_txt = "29" + }, /turf/open/floor/plasteel/white, -/area/medical/chemistry) +/area/science/robotics/lab) "ccC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -50734,46 +50678,12 @@ /turf/open/floor/plasteel, /area/quartermaster/sorting) "ceb" = ( -/obj/structure/table, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/light{ - dir = 1 +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics3"; + name = "robotics lab shutters" }, -/obj/item/stack/sheet/plasteel{ - amount = 15 - }, -/obj/item/storage/belt/utility, -/obj/item/crowbar/large, -/obj/item/multitool, -/obj/item/assembly/prox_sensor{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/mecha_part_fabricator, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/glass{ - amount = 20; - layer = 3.2 - }, -/obj/item/stack/sheet/plasteel{ - amount = 15 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/science/robotics/lab) "cec" = ( /obj/structure/table/glass, @@ -51819,28 +51729,25 @@ /turf/open/floor/plasteel, /area/engine/atmos) "cgf" = ( -/obj/structure/table, -/obj/structure/table, -/obj/machinery/reagentgrinder, /obj/effect/turf_decal/tile/purple{ - dir = 4 + dir = 1 }, /obj/effect/turf_decal/tile/purple{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/effect/turf_decal/tile/yellow, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 9 +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/turf/open/floor/plasteel/dark/side{ + dir = 4 + }, +/area/science/robotics/lab) "cgg" = ( /obj/effect/landmark/start/atmospheric_technician, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ @@ -51940,19 +51847,17 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "cgr" = ( +/obj/machinery/power/apc/highcap/ten_k{ + areastring = "/area/science/robotics/mechbay"; + dir = 1; + name = "Mech Bay APC"; + pixel_y = 28 + }, /obj/structure/cable{ icon_state = "0-2" }, -/obj/machinery/power/apc{ - areastring = "/area/science/research"; - dir = 1; - name = "Research Sector APC"; - pixel_y = 24 - }, -/turf/open/floor/plating, -/area/maintenance/department/science{ - name = "Research Maintenance" - }) +/turf/open/floor/plasteel/dark, +/area/science/robotics/mechbay) "cgs" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -52882,9 +52787,7 @@ dir = 4 }, /turf/closed/wall, -/area/science/research{ - name = "Research Sector" - }) +/area/science/robotics/mechbay) "cip" = ( /obj/machinery/mass_driver{ id = "cargo_in"; @@ -53170,7 +53073,7 @@ "ciW" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 8; - sortType = 14 + sortType = 11 }, /obj/structure/cable{ icon_state = "4-8" @@ -53716,23 +53619,24 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "cka" = ( -/obj/item/beacon, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "ckb" = ( -/obj/machinery/chem_master, -/obj/effect/turf_decal/stripes/line{ - dir = 5 +/obj/machinery/aug_manipulator, +/obj/machinery/camera/autoname{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel, -/area/medical/chemistry) +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "ckc" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/machinery/atmospherics/pipe/simple/general/visible, @@ -53764,10 +53668,10 @@ /obj/effect/turf_decal/tile/purple{ dir = 4 }, +/obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/science/research{ name = "Research Sector" @@ -53815,16 +53719,11 @@ c_tag = "Research Maintenance"; dir = 4 }, -/obj/machinery/power/apc{ - areastring = "/area/maintenance/department/science"; - dir = 8; - name = "Research Wing Maintenance APC"; - pixel_x = -24 +/obj/structure/cable{ + icon_state = "2-4" }, -/turf/open/floor/plating, -/area/maintenance/department/science{ - name = "Research Maintenance" - }) +/turf/open/floor/circuit, +/area/science/robotics/mechbay) "ckl" = ( /turf/open/space/basic, /area/space/station_ruins) @@ -53853,18 +53752,6 @@ /area/engine/engineering{ name = "Engine Room" }) -"ckp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/light, -/obj/structure/table, -/obj/item/book/manual/wiki/robotics_cyborgs, -/obj/item/mmi, -/obj/item/mmi, -/obj/item/mmi, -/turf/open/floor/plasteel, -/area/science/robotics/lab) "ckq" = ( /obj/structure/closet/crate/hydroponics, /obj/machinery/light_switch{ @@ -53999,31 +53886,10 @@ /turf/open/floor/plasteel, /area/engine/teg_cold) "ckD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/table, -/obj/item/storage/belt/utility, -/obj/item/crowbar/large, -/obj/item/multitool, -/obj/item/assembly/prox_sensor{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/assembly/prox_sensor{ - pixel_x = -6; - pixel_y = 4 - }, -/turf/open/floor/plasteel, -/area/science/robotics/lab) +/obj/machinery/chem_master, +/obj/effect/turf_decal/trimline/yellow/filled/end, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "ckE" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, @@ -54424,20 +54290,9 @@ /area/library) "clv" = ( /obj/structure/table, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/item/clothing/gloves/color/latex, -/obj/item/storage/box/syringes, -/obj/item/reagent_containers/dropper, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/item/storage/backpack/duffelbag/med/surgery, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "clw" = ( /obj/effect/landmark/start/librarian, /obj/machinery/newscaster{ @@ -54905,18 +54760,6 @@ }, /turf/open/floor/plasteel/grimy, /area/crew_quarters/bar) -"cmB" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - areastring = "/area/science/robotics/lab"; - dir = 4; - name = "Robotics Lab APC"; - pixel_x = 24 - }, -/turf/open/floor/plating, -/area/maintenance/aft) "cmC" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -55070,20 +54913,51 @@ /turf/open/floor/engine, /area/science/xenobiology) "cmR" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "cmS" = ( -/obj/machinery/chem_master, -/obj/effect/turf_decal/stripes/line{ - dir = 5 +/obj/structure/rack, +/obj/item/storage/firstaid/regular{ + empty = 1; + name = "First-Aid (empty)" }, -/obj/machinery/light, -/turf/open/floor/plasteel, -/area/medical/chemistry) +/obj/item/storage/firstaid/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/storage/firstaid/regular{ + empty = 1; + name = "First-Aid (empty)" + }, +/obj/item/healthanalyzer{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/item/healthanalyzer{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/item/healthanalyzer{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/item/assembly/prox_sensor, +/obj/item/assembly/prox_sensor, +/obj/item/assembly/prox_sensor, +/obj/item/assembly/prox_sensor, +/obj/item/assembly/prox_sensor, +/obj/machinery/camera/autoname{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "cmT" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -55278,14 +55152,10 @@ name = "Research Observatory" }) "cnk" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 6 - }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/obj/structure/disposalpipe/segment, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "cnl" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -55776,23 +55646,6 @@ }, /turf/open/floor/plasteel, /area/engine/teg_hot) -"col" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) -"com" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Robotics Storage"; - req_access_txt = "29" - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) "con" = ( /obj/structure/cable{ icon_state = "1-2" @@ -55878,12 +55731,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) -"cov" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/turf/open/floor/plating, -/area/science/robotics/lab) "cow" = ( /obj/machinery/door/airlock/external/glass{ name = "Asteroid Mining Access"; @@ -55903,11 +55750,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) -"cox" = ( -/obj/machinery/vending/wardrobe/robo_wardrobe, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plasteel, -/area/science/robotics/lab) "coy" = ( /obj/structure/sign/poster/official/safety_internals{ pixel_x = -32 @@ -56014,9 +55856,15 @@ /area/science/explab) "coH" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 10 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics2"; + name = "robotics lab shutters" + }, /turf/open/floor/plating, -/area/medical/chemistry) +/area/router/medsci) "coI" = ( /obj/structure/closet/secure_closet/medical1, /obj/effect/turf_decal/tile/yellow{ @@ -56213,6 +56061,8 @@ c_tag = "Medbay - Cryogenics"; dir = 1 }, +/obj/item/reagent_containers/glass/beaker/cryoxadone, +/obj/item/reagent_containers/glass/beaker/cryoxadone, /turf/open/floor/plasteel/white, /area/medical/medbay/zone2{ name = "Medbay Treatment Center" @@ -56430,36 +56280,17 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "cpw" = ( -/obj/structure/table, /obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade, -/obj/item/screwdriver, -/obj/item/stack/cable_coil/random, -/obj/item/stack/cable_coil/random, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Research - Chemistry Lab"; dir = 4 }, -/obj/machinery/requests_console{ - department = "Chemistry"; - departmentType = 1; - name = "Chemistry RC"; - pixel_x = -30; - receive_ore_updates = 1 +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/turf/open/floor/plasteel/dark/side{ + dir = 8 + }, +/area/science/robotics/lab) "cpx" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/mineral/titanium/blue, @@ -56560,13 +56391,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"cpI" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/science/robotics/lab) "cpJ" = ( /turf/closed/wall/r_wall/rust, /area/quartermaster/office) @@ -57034,28 +56858,11 @@ /turf/open/floor/plasteel, /area/engine/break_room) "cqz" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/item/clothing/gloves/color/latex, -/obj/item/book/manual/wiki/cit/chem_recipies, -/obj/item/book/manual/wiki/cit/chemistry{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/machinery/atmospherics/pipe/manifold/orange/hidden, -/obj/item/paper/fluff/cogstation/chemists, -/obj/item/reagent_containers/dropper, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/turf/open/floor/plasteel, +/area/science/robotics/lab) "cqA" = ( /obj/structure/cable{ icon_state = "1-2" @@ -57368,24 +57175,9 @@ /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "crf" = ( -/obj/structure/cable, -/obj/machinery/power/apc{ - areastring = "/area/medical/chemistry"; - name = "Chemistry Lab APC"; - pixel_y = -26 - }, -/turf/open/floor/plating, -/area/maintenance/department/science{ - name = "Research Maintenance" - }) -"crg" = ( -/obj/structure/reagent_dispensers/fueltank/high, -/obj/machinery/light/small, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/science/robotics/lab) +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel/dark, +/area/science/robotics/mechbay) "crh" = ( /obj/machinery/mass_driver{ dir = 1; @@ -57890,12 +57682,14 @@ /turf/open/floor/plasteel, /area/security/checkpoint/supply) "csi" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chem1"; + name = "chem lab shutters" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/turf/open/floor/plating, +/area/medical/chemistry) "csj" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -58195,9 +57989,8 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "csK" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/closed/wall, -/area/science/robotics/lab) +/turf/closed/wall/r_wall, +/area/medical/chemistry) "csL" = ( /obj/effect/landmark/xmastree/rdrod, /turf/open/floor/carpet{ @@ -58266,19 +58059,13 @@ /turf/open/floor/plating, /area/storage/tech) "csV" = ( -/obj/machinery/chem_master, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/machinery/mecha_part_fabricator, +/obj/machinery/camera{ + c_tag = "Robotics Lab"; + network = list("ss13","rd") }, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/radio/intercom{ - name = "Station Intercom (Common)"; - pixel_y = 26 - }, -/turf/open/floor/plasteel, -/area/medical/chemistry) +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "csW" = ( /obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel/dark, @@ -58296,10 +58083,11 @@ /turf/open/floor/plasteel/white, /area/science/xenobiology) "csZ" = ( -/obj/machinery/holopad, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/science/robotics/lab) "cta" = ( /obj/effect/landmark/blobstart, /obj/effect/landmark/xeno_spawn, @@ -59009,20 +58797,9 @@ name = "Research Observatory" }) "cum" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk, -/obj/structure/sign/poster/official/science{ - pixel_y = 32 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/machinery/computer/operating, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "cun" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/snacks/meat/steak, @@ -59040,21 +58817,16 @@ /turf/open/floor/plating, /area/hallway/primary/aft) "cup" = ( -/obj/structure/table, -/obj/item/surgical_drapes, -/obj/item/scalpel, -/obj/item/circular_saw{ - pixel_y = 16 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/hemostat, -/obj/item/retractor, -/obj/item/cautery, -/obj/item/clothing/gloves/color/latex, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 +/obj/structure/closet/secure_closet/chemical, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "cuq" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -59402,38 +59174,29 @@ /area/medical/medbay/central) "cuY" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Chemistry Lab"; - req_access_txt = "8;33;47" - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, -/turf/open/floor/plasteel, -/area/medical/chemistry) +/obj/machinery/door/airlock/research{ + name = "Robotics Lab"; + req_access_txt = "29" + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "cuZ" = ( /obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/turf/open/floor/plasteel/dark/side{ + dir = 10 + }, +/area/science/robotics/lab) "cva" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -59583,22 +59346,33 @@ /area/medical/virology) "cvt" = ( /obj/effect/turf_decal/tile/purple{ - dir = 8 + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/obj/effect/turf_decal/tile/yellow, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) -"cvu" = ( -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/dark/side, /area/science/robotics/lab) +"cvu" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "cvv" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -59899,56 +59673,37 @@ /area/janitor) "cvQ" = ( /obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/landmark/start/chemist, -/obj/effect/turf_decal/tile/yellow, -/obj/structure/chair/office/light, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) -"cvR" = ( -/obj/structure/table, -/obj/item/storage/toolbox/emergency, -/obj/item/clothing/head/welding, -/obj/item/clothing/glasses/welding, -/obj/item/weldingtool, -/obj/machinery/camera{ - c_tag = "Robotics"; - dir = 8; - network = list("ss13","medbay"); - pixel_y = -22 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 26 - }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) -"cvS" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/obj/item/paper_bin, -/obj/item/pen, -/obj/item/clothing/glasses/science, -/obj/item/hand_labeler{ - pixel_y = 8 +/obj/effect/turf_decal/tile/purple{ + dir = 4 }, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/turf/open/floor/plasteel/white, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/side, +/area/science/robotics/lab) +"cvR" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 26 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/showroomfloor, /area/medical/chemistry) +"cvS" = ( +/obj/machinery/vending/wardrobe/robo_wardrobe, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "cvT" = ( /obj/structure/extinguisher_cabinet, /turf/closed/wall, @@ -60068,23 +59823,18 @@ /turf/open/floor/plasteel/dark, /area/security/checkpoint/customs) "cwb" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Research Maintenance"; - req_one_access_txt = "12;47" - }, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/door/airlock/research{ + name = "Mech Bay"; + req_access_txt = "29" }, -/turf/open/floor/plating, -/area/science/research{ - name = "Research Sector" - }) +/turf/open/floor/circuit, +/area/science/robotics/mechbay) "cwc" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -60274,11 +60024,19 @@ /turf/open/floor/plasteel, /area/engine/workshop) "cws" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/obj/machinery/vending/wardrobe/chem_wardrobe, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "cwt" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/orange/hidden, @@ -60569,19 +60327,27 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "cxf" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) -"cxg" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) -"cxh" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 5 + dir = 4 }, /turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/area/medical/chemistry) +"cxg" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/medical/chemistry) +"cxh" = ( +/obj/machinery/chem_dispenser, +/obj/effect/turf_decal/trimline/yellow/filled/end{ + dir = 1 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "cxi" = ( /obj/structure/rack, /obj/effect/turf_decal/tile/yellow{ @@ -61106,10 +60872,6 @@ /obj/effect/turf_decal/tile/purple{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/general/hidden{ - dir = 8; - icon_state = "intact" - }, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -61187,6 +60949,7 @@ pixel_y = 24 }, /obj/machinery/power/apc{ + dir = 4; name = "Restrooms APC"; pixel_x = 24 }, @@ -61303,17 +61066,6 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plating, /area/maintenance/aft) -"cyC" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, -/area/maintenance/aft) "cyD" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -61414,15 +61166,15 @@ /area/maintenance/aft) "cyN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Robotics Lab Maintenance"; - req_access_txt = "29" - }, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, +/obj/machinery/door/airlock/maintenance{ + name = "Chemistry Maintenance"; + req_access_txt = "5; 33" + }, /turf/open/floor/plating, -/area/science/robotics/lab) +/area/medical/chemistry) "cyO" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -61788,15 +61540,15 @@ /area/crew_quarters/heads/cmo) "czv" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Morgue"; - req_access_txt = "5;29" - }, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, +/obj/machinery/door/airlock/medical/glass{ + name = "Chemistry Lab"; + req_access_txt = "5; 33" + }, /turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/area/medical/chemistry) "czw" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 @@ -61904,6 +61656,9 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "czG" = ( @@ -61912,17 +61667,15 @@ /area/medical/morgue) "czH" = ( /obj/effect/turf_decal/tile/purple{ - dir = 8 + dir = 1 }, -/obj/effect/turf_decal/tile/yellow, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ +/obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/turf/open/floor/plasteel/dark/side{ + dir = 6 + }, +/area/science/robotics/lab) "czI" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -61957,9 +61710,8 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "czM" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, /turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/area/medical/chemistry) "czN" = ( /obj/structure/closet/crate/trashcart, /obj/structure/sign/departments/custodian{ @@ -61984,11 +61736,12 @@ /turf/open/floor/plating, /area/maintenance/disposal) "czP" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 10 +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/area/medical/chemistry) "czQ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, @@ -62070,10 +61823,6 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/machinery/door/airlock/research/glass{ - name = "Robotics Lab"; - req_access_txt = "29" - }, /obj/effect/turf_decal/tile/purple{ dir = 4 }, @@ -62081,8 +61830,16 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/machinery/door/airlock/medical/glass{ + name = "Chemistry Lab"; + req_access_txt = "5; 33" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel/white, -/area/science/robotics/lab) +/area/medical/chemistry) "czX" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/orange/hidden, @@ -62148,6 +61905,9 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "cAd" = ( @@ -63866,9 +63626,6 @@ /obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ dir = 8 }, -/obj/structure/chair/comfy/brown{ - dir = 8 - }, /turf/open/floor/plasteel/grimy, /area/crew_quarters/heads/hos) "cCX" = ( @@ -64383,6 +64140,10 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, +/obj/item/stack/cable_coil/red, +/obj/item/stack/cable_coil/red{ + pixel_x = 3 + }, /turf/open/floor/plasteel, /area/gateway) "cDU" = ( @@ -64992,15 +64753,18 @@ name = "Research Sector" }) "cEN" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, /obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plasteel, /area/science/research{ name = "Research Sector" @@ -65011,37 +64775,24 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/door/airlock/research{ - name = "Chemistry Lab"; - req_access_txt = "8; 33" - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel, -/area/medical/chemistry) -"cEP" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/machinery/door/airlock/research{ + name = "Robotics Lab"; + req_access_txt = "29" }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) +"cEP" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "cEQ" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -65392,16 +65143,8 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/item/surgical_drapes, -/obj/item/scalpel, -/obj/item/circular_saw{ - pixel_y = 16 - }, -/obj/item/hemostat, -/obj/item/retractor, -/obj/item/surgicaldrill, -/obj/item/cautery, /obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/item/storage/backpack/duffelbag/med/surgery, /turf/open/floor/plasteel/white, /area/medical/medbay/zone2{ name = "Medbay Treatment Center" @@ -65738,38 +65481,23 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "cFV" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 5 }, /obj/structure/cable{ icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "cFW" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "cFX" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ @@ -65778,28 +65506,18 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/airlock/research/glass{ - name = "Chemistry Lab"; - req_access_txt = "33" - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/obj/machinery/door/airlock/research{ + name = "Robotics Lab"; + req_access_txt = "29" + }, +/turf/open/floor/plasteel/dark, +/area/router/medsci) "cFY" = ( /turf/open/floor/plasteel, /area/router/air) @@ -66423,6 +66141,7 @@ /obj/item/stock_parts/cell/high/plus, /obj/item/stock_parts/cell/high/plus, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/item/stack/cable_coil/red, /turf/open/floor/plasteel/white, /area/science/circuit) "cHg" = ( @@ -66577,14 +66296,8 @@ dir = 8; network = list("ss13","medbay") }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/dark/side{ - dir = 8 - }, +/turf/open/floor/plasteel/dark, /area/science/explab) "cHw" = ( /obj/structure/disposalpipe/segment, @@ -66659,10 +66372,6 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, /obj/machinery/power/apc{ areastring = "/area/science/explab"; dir = 4; @@ -66670,9 +66379,7 @@ pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/dark/side{ - dir = 8 - }, +/turf/open/floor/plasteel/dark, /area/science/explab) "cHD" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ @@ -66865,14 +66572,6 @@ /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel, /area/security/checkpoint/supply) -"cHW" = ( -/obj/machinery/rnd/production/circuit_imprinter, -/obj/item/reagent_containers/glass/beaker, -/obj/structure/sign/poster/official/state_laws{ - pixel_y = 32 - }, -/turf/open/floor/circuit, -/area/science/robotics/lab) "cHX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -68196,12 +67895,24 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) "cKi" = ( -/obj/structure/sign/poster/official/space_cops{ - pixel_y = 32 +/obj/machinery/button/door{ + id = "chem1"; + name = "Shutters Control Button"; + pixel_x = -8; + pixel_y = 24; + req_access_txt = "29" }, -/obj/machinery/atmospherics/pipe/manifold/orange/hidden, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "cKj" = ( /obj/structure/closet/secure_closet/CMO, /obj/effect/turf_decal/tile/blue, @@ -69788,15 +69499,6 @@ /obj/item/stack/sheet/plasteel/fifty, /turf/open/floor/plating, /area/quartermaster/miningdock/airless) -"cNV" = ( -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel, -/area/science/robotics/lab) "cNW" = ( /obj/structure/lattice/catwalk, /obj/machinery/camera{ @@ -70482,19 +70184,14 @@ icon_state = "4-8" }, /obj/effect/landmark/event_spawn, -/turf/open/floor/plating, -/area/maintenance/department/science{ - name = "Research Maintenance" - }) -"cPw" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/structure/sign/poster/contraband/kss13{ - pixel_y = -32 +/obj/structure/cable{ + icon_state = "2-4" }, -/turf/open/floor/plating, -/area/maintenance/department/science{ - name = "Research Maintenance" - }) +/turf/open/floor/circuit, +/area/science/robotics/mechbay) +"cPw" = ( +/turf/open/floor/plasteel/dark, +/area/science/robotics/mechbay) "cPx" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -70514,6 +70211,9 @@ /obj/structure/sign/poster/official/medical_green_cross{ pixel_y = 32 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "cPy" = ( @@ -70713,45 +70413,15 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cPP" = ( -/obj/structure/table, -/obj/machinery/light{ - dir = 4; - light_color = "#c1caff" +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 }, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/plus, -/obj/item/stock_parts/cell/high/plus{ - pixel_y = 8 +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 }, -/obj/item/stock_parts/cell/high/plus{ - pixel_y = 8 - }, -/obj/item/assembly/flash/handheld{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash/handheld{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash/handheld{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash/handheld{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash/handheld{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash/handheld{ - pixel_x = -8; - pixel_y = 4 - }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/chemistry) "cPQ" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -71565,7 +71235,7 @@ icon_state = "1-8" }, /obj/machinery/turretid{ - control_area = "area/science/server"; + control_area = "/area/science/server"; icon_state = "control_stun"; name = "Computer Core turret control"; pixel_x = -3; @@ -71573,7 +71243,9 @@ req_access_txt = "65" }, /turf/open/floor/plasteel, -/area/ai_monitored/turret_protected/ai_upload_foyer) +/area/science/server{ + name = "Computer Core" + }) "cVq" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 @@ -95268,7 +94940,7 @@ adb anU aaR aqa -amZ +awY adO acN amZ @@ -95279,8 +94951,8 @@ alM axK axX azk -awY -awY +acN +acN azl aJw anU @@ -95374,12 +95046,12 @@ bYF bBP bFu bIc -bBQ -bBQ -bFG +btn +btn +bsM cuY -bCg -bCg +bIk +bIk cbB cbB cbB @@ -95629,14 +95301,14 @@ bYp bYx cPw bBQ -bFE +ccd bId -bIL +cpw cpw bKd cuZ bKN -bCg +bIk aaU aaU aaU @@ -95885,15 +95557,15 @@ bYv bYq cPv bYH -bBQ +bsM bDT bIe -bIM -bIM -bIM +bYB +bto +bYB cvt -bJD -bJH +bSe +ceb aaU aaa aaa @@ -96136,21 +95808,21 @@ bpz aaa aaU bXU -bKs -bKv +aJV +brz bYv cgr bYy crf -bBQ +bsM bFx bIf -bIM +bto csZ -bIM +bto cvQ -bJE -bJH +caO +ceb aaU aaa aaa @@ -96314,7 +95986,7 @@ aCH aew aIn aew -aJV +aFG aew aew ayT @@ -96396,18 +96068,18 @@ bXU bKs bLG bYv -bzA +bYv cwb bYv -bBQ +bsM csV bIe bYB cqz -bIM -cvt +bYB +bua cmS -bJH +ceb aaU aaa aaa @@ -96664,7 +96336,7 @@ cgf bKe czH bKO -bJH +ceb aaU aaa aaa @@ -96830,7 +96502,7 @@ aJt aJN aQg akv -aeJ +aew ayU aSQ aTg @@ -96921,7 +96593,7 @@ cka cmR cFV bKP -bJH +ceb aaU aaa aaa @@ -97087,7 +96759,7 @@ aLf aJO aQi alU -aeJ +aew ayW aSQ aAB @@ -97170,15 +96842,15 @@ cfZ bWX bWX ckf -bCf +bIk bFB bIh -bYK +ccd bJC bKf cFW bKQ -bCg +bIk aaU aaa aaa @@ -97344,7 +97016,7 @@ akv aKa aKw alU -aeJ +aew azc aSQ aAB @@ -97427,15 +97099,15 @@ bXU bXU bXU bWa -bCg +bIk bFC -bIi -caj +bIj +ccd bJD -bCg +btv cFX -bJH -bCg +ccm +cOI cOI cOI cOI @@ -97582,7 +97254,7 @@ alq alq apn aqF -aeJ +aew agD ahr aiH @@ -97684,12 +97356,12 @@ aaU aaU aaU aaU -bCg +bIk clv -bIi -caH +bsU +ccd bJE -bCg +btv cOx cOA cOE @@ -97941,10 +97613,10 @@ aaa aaa aaa aaU -bCg +bIk bZT -bIi -cbK +bsU +ccd ckb coH cOy @@ -98198,12 +97870,12 @@ aaU aaU aaU aaU -bCg +bIk cum bIj ccd cvS -bCg +cOI cOz cOC cOG @@ -98455,12 +98127,12 @@ brU cdZ brU brU -bCg -bFG +bIk +bIk bIk ccB bJH -bCg +cOI cGb bRI cOH @@ -102560,7 +102232,7 @@ bxM cyu cNJ cyB -cyC +cyB cyI cyL buS @@ -102817,7 +102489,7 @@ bbh ciQ bpD bpD -cmB +bpD bpD cyM cyB @@ -103072,16 +102744,16 @@ cgB bqx bbh bPw -bqq -bqq -bqq -bqq -bqq -bqq -bqq -bqq -bqq -bqq +bsZ +bsZ +bsZ +bsZ +csK +csK +csK +csK +csK +csK bHC cFe cFk @@ -103329,17 +103001,17 @@ cgB bqr bbh bPw -bqq -brz -bsL -bSe -bJd +bsZ +bim +bim +bim +csK bQp byw bzG bAC -bCY -bHD +csK +bHG cFf bEl aOF @@ -103586,17 +103258,17 @@ cgB bqr bbh bPw -bqq -cHW -bsM -btn -buj +bsZ +bim +bim +bim +bul bvK -bts -bts -bAD -bCY -bHD +czM +czM +czM +bsN +bHG cFf bJb bJJ @@ -103843,16 +103515,16 @@ cgB bqr bcT bPw -bqq -ccm -bsM -bto -buj +bsZ +bim +bim +bim +bul bwf byD -bts +brK bAE -bCY +bsQ bHE cAm cAt @@ -104098,18 +103770,18 @@ bdF cIL ciF bqz -bdu -caO -cov -ceb -bsN -btp -buj +bcT +bPw +bsZ +bim +bim +bim +bul cup -bts -bts -ckp -bqq +cxf +czM +czM +bsN bHG cFf bJc @@ -104358,15 +104030,15 @@ bqC bdu bXt bqs -brF -bsP +cnk +cnk cnk csi cvu cxf cxh ckD -bqq +csK cPx cFh bJe @@ -104614,19 +104286,19 @@ cjV bdu bdu bXu -bqq -brH -bsQ -col +bsZ +bim +bim +bim bul cws cxg czM bBs -bCY +csK bHI cFf -bJc +btp bJN cHO bKz @@ -104871,15 +104543,15 @@ cgB bTv bcT bQE -bqq -bqq -bqq -com -bqq -cws -byD +bsZ +bim +bim +bim +bul +brH +brJ +czP czP -cxf czW cAc cFi @@ -105128,16 +104800,16 @@ cgB bYW bcT bQE -bqq -cox -cNV -cpI +bsZ +bim +bim +bim csK cKi cvR cPP -bts -bCY +bsL +bul bHJ bIt bJf @@ -105385,16 +105057,16 @@ cgB bbh bbh bQE -bqq -brJ -bsU -crg -bqq +bsZ +bim +bim +bim +csK cyN -bqq +csK bzJ czv -bqq +csK bHK bIu bJh @@ -105642,11 +105314,11 @@ cgB bbh bpm bQE -bqq -brK -bua -btv -bqq +bsZ +bim +bim +bim +bsZ cyO byN bzK @@ -105899,11 +105571,11 @@ cmn bWZ bXj bXv -bqq -bqq -bqq -bqq -bqq +bsZ +bsZ +bsZ +bsZ +bsZ cyP byQ bzS diff --git a/_maps/map_files/Snaxi/Snaxi.dmm b/_maps/map_files/Snaxi/Snaxi.dmm index 37576ef011..395a2a2dde 100644 --- a/_maps/map_files/Snaxi/Snaxi.dmm +++ b/_maps/map_files/Snaxi/Snaxi.dmm @@ -4558,7 +4558,6 @@ department = "Mining"; pixel_x = -30 }, -/obj/structure/closet/crate/bin, /turf/open/floor/plasteel, /area/quartermaster/miningdock) "bzj" = ( @@ -10026,6 +10025,7 @@ pixel_x = 32 }, /obj/effect/turf_decal/tile/brown, +/obj/machinery/rnd/production/techfab/department/cargo, /turf/open/floor/plasteel, /area/quartermaster/storage) "dDf" = ( @@ -14580,6 +14580,10 @@ /obj/effect/turf_decal/tile/purple{ dir = 8 }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, /turf/open/floor/plasteel/white, /area/medical/genetics) "goM" = ( @@ -26013,13 +26017,6 @@ /obj/effect/landmark/start/paramedic, /turf/open/floor/plasteel/white, /area/medical/medbay/zone3) -"nhO" = ( -/obj/machinery/airalarm/server{ - dir = 1; - pixel_y = -22 - }, -/turf/open/floor/circuit/telecomms/mainframe, -/area/tcommsat/server) "nij" = ( /obj/machinery/light{ dir = 1 @@ -27181,7 +27178,6 @@ /obj/effect/turf_decal/tile/purple{ dir = 1 }, -/obj/structure/closet/crate/bin, /turf/open/floor/plasteel/white, /area/medical/genetics) "nSf" = ( @@ -28206,7 +28202,9 @@ /obj/effect/turf_decal/tile/purple{ dir = 8 }, -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/sorting/mail/flip{ + sortType = 23 + }, /turf/open/floor/plasteel/white, /area/medical/genetics) "ouE" = ( @@ -56146,7 +56144,7 @@ won evJ fsQ mxo -nhO +pTw apJ apJ apJ diff --git a/_maps/shuttles/whiteship_cog.dmm b/_maps/shuttles/whiteship_cog.dmm index 9410682219..9e4463df6b 100644 --- a/_maps/shuttles/whiteship_cog.dmm +++ b/_maps/shuttles/whiteship_cog.dmm @@ -32,11 +32,6 @@ "g" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/abandoned) -"h" = ( -/obj/machinery/door/airlock/external, -/obj/structure/fans/tiny, -/turf/open/floor/plating, -/area/shuttle/abandoned) "i" = ( /obj/machinery/suit_storage_unit/security, /obj/machinery/light/small{ @@ -64,6 +59,7 @@ /area/shuttle/abandoned) "m" = ( /obj/structure/bed, +/obj/item/bedsheet/orange, /turf/open/floor/plasteel, /area/shuttle/abandoned) "n" = ( @@ -130,7 +126,6 @@ /area/shuttle/abandoned) "x" = ( /obj/machinery/door/firedoor/border_only/closed{ - icon_state = "door_closed"; dir = 4 }, /obj/machinery/door/window/eastright, @@ -174,12 +169,12 @@ dir = 8 }, /obj/structure/closet/crate/secure/weapon, -/obj/item/gun/energy/laser/carbine, /obj/machinery/button/flasher{ id = "cogws"; pixel_x = -24; pixel_y = 8 }, +/obj/item/gun/energy/laser/retro, /turf/open/floor/plasteel, /area/shuttle/abandoned) "D" = ( @@ -191,7 +186,7 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, -/obj/item/gun/energy/e_gun/stun, +/obj/item/gun/energy/laser/retro, /turf/open/floor/plasteel, /area/shuttle/abandoned) "E" = ( @@ -228,12 +223,14 @@ "I" = ( /obj/structure/table/reinforced, /obj/item/clothing/glasses/sunglasses, +/obj/item/gps{ + gpstag = "NTPRS" + }, /turf/open/floor/plasteel/grimy, /area/shuttle/abandoned) "J" = ( /obj/structure/curtain, /obj/machinery/shower{ - name = "shower"; pixel_y = 12 }, /obj/item/soap/nanotrasen, @@ -329,13 +326,13 @@ d "} (5,1,1) = {" d -h +g n n B H n -h +g d "} (6,1,1) = {" diff --git a/code/__DEFINES/_flags/_flags.dm b/code/__DEFINES/_flags/_flags.dm index b1324000b8..7daf9fa8a3 100644 --- a/code/__DEFINES/_flags/_flags.dm +++ b/code/__DEFINES/_flags/_flags.dm @@ -145,4 +145,19 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 /// If the thing can reflect light (lasers/energy) #define RICOCHET_SHINY (1<<0) /// If the thing can reflect matter (bullets/bomb shrapnel) -#define RICOCHET_HARD (1<<1) \ No newline at end of file +#define RICOCHET_HARD (1<<1) + +#define KEEP_TOGETHER_ORIGINAL "keep_together_original" + +//setter for KEEP_TOGETHER to allow for multiple sources to set and unset it +#define ADD_KEEP_TOGETHER(x, source)\ + if ((x.appearance_flags & KEEP_TOGETHER) && !HAS_TRAIT(x, TRAIT_KEEP_TOGETHER)) ADD_TRAIT(x, TRAIT_KEEP_TOGETHER, KEEP_TOGETHER_ORIGINAL); \ + ADD_TRAIT(x, TRAIT_KEEP_TOGETHER, source);\ + x.appearance_flags |= KEEP_TOGETHER + +#define REMOVE_KEEP_TOGETHER(x, source)\ + REMOVE_TRAIT(x, TRAIT_KEEP_TOGETHER, source);\ + if(HAS_TRAIT_FROM_ONLY(x, TRAIT_KEEP_TOGETHER, KEEP_TOGETHER_ORIGINAL))\ + REMOVE_TRAIT(x, TRAIT_KEEP_TOGETHER, KEEP_TOGETHER_ORIGINAL);\ + else if(!HAS_TRAIT(x, TRAIT_KEEP_TOGETHER))\ + x.appearance_flags &= ~KEEP_TOGETHER diff --git a/code/__DEFINES/_flags/item_flags.dm b/code/__DEFINES/_flags/item_flags.dm index c6a3886ed3..b3b65bcf59 100644 --- a/code/__DEFINES/_flags/item_flags.dm +++ b/code/__DEFINES/_flags/item_flags.dm @@ -52,3 +52,4 @@ #define ORGAN_VITAL (1<<4) //Currently only the brain #define ORGAN_NO_SPOIL (1<<5) //Do not spoil under any circumstances #define ORGAN_NO_DISMEMBERMENT (1<<6) //Immune to disembowelment. +#define ORGAN_EDIBLE (1<<5) //is a snack? :D \ No newline at end of file diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index db38f1961d..4a1739437a 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -35,6 +35,7 @@ #define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params) #define COMPONENT_NO_AFTERATTACK 1 //Return this in response if you don't want afterattack to be called #define COMSIG_ATOM_HULK_ATTACK "hulk_attack" //from base of atom/attack_hulk(): (/mob/living/carbon/human) +#define COMSIG_ATOM_ATTACK_ANIMAL "attack_animal" //from base of atom/animal_attack(): (/mob/user) #define COMSIG_PARENT_EXAMINE "atom_examine" //from base of atom/examine(): (/mob, list/examine_return_text) #define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name" //from base of atom/get_examine_name(): (/mob, list/overrides) //Positions for overrides list @@ -283,6 +284,7 @@ #define COMSIG_ITEM_IMBUE_SOUL "item_imbue_soul" //return a truthy value to prevent ensouling, checked in /obj/effect/proc_holder/spell/targeted/lichdom/cast(): (mob/user) #define COMSIG_ITEM_HIT_REACT "item_hit_react" //from base of obj/item/hit_reaction(): (list/args) #define COMSIG_ITEM_WEARERCROSSED "wearer_crossed" //called on item when crossed by something (): (/atom/movable) +#define COMSIG_ITEM_MICROWAVE_ACT "microwave_act" //called on item when microwaved (): (obj/machinery/microwave/M) #define COMSIG_ITEM_WORN_OVERLAYS "item_worn_overlays" //from base of obj/item/worn_overlays(): (isinhands, icon_file, used_state, style_flags, list/overlays) // THE FOLLOWING TWO BLOCKS SHOULD RETURN BLOCK FLAGS AS DEFINED IN __DEFINES/combat.dm! #define COMSIG_ITEM_CHECK_BLOCK "check_block" //from base of obj/item/check_block(): (mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm index a347fd7327..77e8d82aca 100644 --- a/code/__DEFINES/food.dm +++ b/code/__DEFINES/food.dm @@ -18,4 +18,8 @@ #define DRINK_VERYGOOD 3 #define DRINK_FANTASTIC 4 #define FOOD_AMAZING 5 -#define RACE_DRINK 6 \ No newline at end of file +#define RACE_DRINK 6 + +#define FOOD_IN_CONTAINER (1<<0) + +#define STOP_SERVING_BREAKFAST (15 MINUTES) diff --git a/code/__DEFINES/footsteps.dm b/code/__DEFINES/footsteps.dm index 5acda2274c..2dd66b9833 100644 --- a/code/__DEFINES/footsteps.dm +++ b/code/__DEFINES/footsteps.dm @@ -6,6 +6,7 @@ #define FOOTSTEP_GRASS "grass" #define FOOTSTEP_WATER "water" #define FOOTSTEP_LAVA "lava" +#define FOOTSTEP_MEAT "meat" //barefoot sounds #define FOOTSTEP_WOOD_BAREFOOT "woodbarefoot" #define FOOTSTEP_WOOD_CLAW "woodclaw" @@ -89,6 +90,8 @@ GLOBAL_LIST_INIT(footstep, list( 'sound/effects/footstep/lava1.ogg', 'sound/effects/footstep/lava2.ogg', 'sound/effects/footstep/lava3.ogg'), 100, 0), + FOOTSTEP_MEAT = list(list( + 'sound/effects/meatslap.ogg'), 100, 0) )) //bare footsteps lists @@ -131,6 +134,8 @@ GLOBAL_LIST_INIT(barefootstep, list( 'sound/effects/footstep/lava1.ogg', 'sound/effects/footstep/lava2.ogg', 'sound/effects/footstep/lava3.ogg'), 100, 0), + FOOTSTEP_MEAT = list(list( + 'sound/effects/meatslap.ogg'), 100, 0) )) //claw footsteps lists @@ -173,6 +178,8 @@ GLOBAL_LIST_INIT(clawfootstep, list( 'sound/effects/footstep/lava1.ogg', 'sound/effects/footstep/lava2.ogg', 'sound/effects/footstep/lava3.ogg'), 100, 0), + FOOTSTEP_MEAT = list(list( + 'sound/effects/meatslap.ogg'), 100, 0) )) //heavy footsteps list @@ -189,4 +196,6 @@ GLOBAL_LIST_INIT(heavyfootstep, list( 'sound/effects/footstep/lava1.ogg', 'sound/effects/footstep/lava2.ogg', 'sound/effects/footstep/lava3.ogg'), 100, 0), + FOOTSTEP_MEAT = list(list( + 'sound/effects/meatslap.ogg'), 100, 0) )) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index de9ada7560..90c7c34f8d 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -135,6 +135,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define iscat(A) (istype(A, /mob/living/simple_animal/pet/cat)) +#define isdog(A) (istype(A, /mob/living/simple_animal/pet/dog)) + #define iscorgi(A) (istype(A, /mob/living/simple_animal/pet/dog/corgi)) #define ishostile(A) (istype(A, /mob/living/simple_animal/hostile)) diff --git a/code/__DEFINES/materials.dm b/code/__DEFINES/materials.dm index e2ae22345f..e7e62aafe1 100644 --- a/code/__DEFINES/materials.dm +++ b/code/__DEFINES/materials.dm @@ -4,8 +4,13 @@ /// Hard materials, such as iron or metal #define MAT_CATEGORY_RIGID "rigid material" +///Use this flag on TRUE if you want the basic recipes +#define MAT_CATEGORY_BASE_RECIPES "basic recipes" + /// Flag for atoms, this flag ensures it isn't re-colored by materials. Useful for snowflake icons such as default toolboxes. #define MATERIAL_COLOR (1<<0) #define MATERIAL_ADD_PREFIX (1<<1) #define MATERIAL_EFFECTS (1<<2) -#define MATERIAL_AFFECT_STATISTICS (1<<3) \ No newline at end of file +#define MATERIAL_AFFECT_STATISTICS (1<<3) + +#define MATERIAL_SOURCE(mat) "[mat.name]_material" \ No newline at end of file diff --git a/code/__DEFINES/mobs/slowdowns.dm b/code/__DEFINES/mobs/slowdowns.dm index 2d858e9509..4d9b4a0259 100644 --- a/code/__DEFINES/mobs/slowdowns.dm +++ b/code/__DEFINES/mobs/slowdowns.dm @@ -3,7 +3,7 @@ /// How much someone is slowed from fireman carrying a human #define FIREMAN_CARRY_SLOWDOWN 0 /// How much someone is slowed by piggybacking a human -#define PIGGYBACK_CARRY_SLOWDOWN 1 +#define PIGGYBACK_CARRY_SLOWDOWN 0 /// slowdown when in softcrit. Note that crawling slowdown will also apply at the same time! #define SOFTCRIT_ADD_SLOWDOWN 2 /// slowdown when crawling diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 3977b3c085..eb86c52301 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -61,6 +61,12 @@ } while (0) #define HAS_TRAIT(target, trait) (target.status_traits ? (target.status_traits[trait] ? TRUE : FALSE) : FALSE) #define HAS_TRAIT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (source in target.status_traits[trait]) : FALSE) : FALSE) +#define HAS_TRAIT_FROM_ONLY(target, trait, source) (\ + target.status_traits ?\ + (target.status_traits[trait] ?\ + ((source in target.status_traits[trait]) && (length(target.status_traits) == 1))\ + : FALSE)\ + : FALSE) #define HAS_TRAIT_NOT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (length(target.status_traits[trait] - source) > 0) : FALSE) : FALSE) //mob traits @@ -226,6 +232,8 @@ #define VEHICLE_TRAIT "vehicle" // inherited from riding vehicles #define INNATE_TRAIT "innate" +///Used for managing KEEP_TOGETHER in [appearance_flags] +#define TRAIT_KEEP_TOGETHER "keep-together" // item traits #define TRAIT_NODROP "nodrop" diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index d4ec44a641..059f9d518e 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -108,7 +108,7 @@ A.attack_animal(src) /atom/proc/attack_animal(mob/user) - return + SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ANIMAL, user) /mob/living/RestrainedClickOn(atom/A) return diff --git a/code/controllers/subsystem/materials.dm b/code/controllers/subsystem/materials.dm index 96d733e8da..23d5a7a2b7 100644 --- a/code/controllers/subsystem/materials.dm +++ b/code/controllers/subsystem/materials.dm @@ -10,24 +10,52 @@ SUBSYSTEM_DEF(materials) var/list/materials ///Dictionary of category || list of material refs var/list/materials_by_category + ///Dictionary of category || list of material types, mostly used by rnd machines like autolathes. + var/list/materialtypes_by_category + ///A cache of all material combinations that have been used + var/list/list/material_combos ///List of stackcrafting recipes for materials using rigid materials var/list/rigid_stack_recipes = list( new /datum/stack_recipe("chair", /obj/structure/chair/greyscale, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE), new /datum/stack_recipe("toilet", /obj/structure/toilet/greyscale, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE), new /datum/stack_recipe("sink", /obj/structure/sink/greyscale, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE), + new /datum/stack_recipe("Floor tile", /obj/item/stack/tile/material, 1, 4, 20, applies_mats = TRUE) ) ///Ran on initialize, populated the materials and materials_by_category dictionaries with their appropiate vars (See these variables for more info) /datum/controller/subsystem/materials/proc/InitializeMaterials() materials = list() materials_by_category = list() + materialtypes_by_category = list() + material_combos = list() for(var/type in subtypesof(/datum/material)) var/datum/material/ref = new type materials[type] = ref for(var/c in ref.categories) materials_by_category[c] += list(ref) + materialtypes_by_category[c] += list(type) /datum/controller/subsystem/materials/proc/GetMaterialRef(datum/material/fakemat) if(!materials) InitializeMaterials() - return materials[fakemat] || fakemat \ No newline at end of file + return materials[fakemat] || fakemat + + +///Returns a list to be used as an object's custom_materials. Lists will be cached and re-used based on the parameters. +/datum/controller/subsystem/materials/proc/FindOrCreateMaterialCombo(list/materials_declaration, multiplier) + if(!material_combos) + InitializeMaterials() + var/list/combo_params = list() + for(var/x in materials_declaration) + var/datum/material/mat = x + var/path_name = ispath(mat) ? "[mat]" : "[mat.type]" + combo_params += "[path_name]=[materials_declaration[mat] * multiplier]" + sortTim(combo_params, /proc/cmp_text_asc) // We have to sort now in case the declaration was not in order + var/combo_index = combo_params.Join("-") + var/list/combo = material_combos[combo_index] + if(!combo) + combo = list() + for(var/mat in materials_declaration) + combo[GetMaterialRef(mat)] = materials_declaration[mat] * multiplier + material_combos[combo_index] = combo + return combo diff --git a/code/datums/components/edible.dm b/code/datums/components/edible.dm new file mode 100644 index 0000000000..47e60a1ee1 --- /dev/null +++ b/code/datums/components/edible.dm @@ -0,0 +1,244 @@ +/*! +This component makes it possible to make things edible. What this means is that you can take a bite or force someone to take a bite (in the case of items). +These items take a specific time to eat, and can do most of the things our original food items could. +Behavior that's still missing from this component that original food items had that should either be put into seperate components or somewhere else: + Components: + Drying component (jerky etc) + Customizable component (custom pizzas etc) + Processable component (Slicing and cooking behavior essentialy, making it go from item A to B when conditions are met.) + Dunkable component (Dunking things into reagent containers to absorb a specific amount of reagents) + Misc: + Something for cakes (You can store things inside) +*/ +/datum/component/edible + ///Amount of reagents taken per bite + var/bite_consumption = 2 + ///Amount of bites taken so far + var/bitecount = 0 + ///Flags for food + var/food_flags = NONE + ///Bitfield of the types of this food + var/foodtypes = NONE + ///Amount of seconds it takes to eat this food + var/eat_time = 30 + ///Defines how much it lowers someones satiety (Need to eat, essentialy) + var/junkiness = 0 + ///Message to send when eating + var/list/eatverbs + ///Callback to be ran for when you take a bite of something + var/datum/callback/after_eat + ///Last time we checked for food likes + var/last_check_time + +/datum/component/edible/Initialize(list/initial_reagents, food_flags = NONE, foodtypes = NONE, volume = 50, eat_time = 30, list/tastes, list/eatverbs = list("bite","chew","nibble","gnaw","gobble","chomp"), bite_consumption = 2, datum/callback/after_eat) + if(!isatom(parent)) + return COMPONENT_INCOMPATIBLE + + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine) + RegisterSignal(parent, COMSIG_ATOM_ATTACK_ANIMAL, .proc/UseByAnimal) + if(isitem(parent)) + RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/UseFromHand) + else if(isturf(parent)) + RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, .proc/TryToEatTurf) + + src.bite_consumption = bite_consumption + src.food_flags = food_flags + src.foodtypes = foodtypes + src.eat_time = eat_time + src.eatverbs = eatverbs + src.junkiness = junkiness + src.after_eat = after_eat + + var/atom/owner = parent + + owner.create_reagents(volume, INJECTABLE) + + if(initial_reagents) + for(var/rid in initial_reagents) + var/amount = initial_reagents[rid] + if(tastes && tastes.len && (rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin)) + owner.reagents.add_reagent(rid, amount, tastes.Copy()) + else + owner.reagents.add_reagent(rid, amount) + +/datum/component/edible/proc/examine(datum/source, mob/user, list/examine_list) + if(!(food_flags & FOOD_IN_CONTAINER)) + switch (bitecount) + if (0) + return + if(1) + examine_list += "[parent] was bitten by someone!" + if(2,3) + examine_list += "[parent] was bitten [bitecount] times!" + else + examine_list += "[parent] was bitten multiple times!" + +/datum/component/edible/proc/UseFromHand(obj/item/source, mob/living/M, mob/living/user) + return TryToEat(M, user) + +/datum/component/edible/proc/TryToEatTurf(datum/source, mob/user) + return TryToEat(user, user) + +///All the checks for the act of eating itself and +/datum/component/edible/proc/TryToEat(mob/living/eater, mob/living/feeder) + + set waitfor = FALSE + + var/atom/owner = parent + + if(feeder.a_intent == INTENT_HARM) + return + if(!owner.reagents.total_volume)//Shouldn't be needed but it checks to see if it has anything left in it. + to_chat(feeder, "None of [owner] left, oh no!") + if(isturf(parent)) + var/turf/T = parent + T.ScrapeAway(1, CHANGETURF_INHERIT_AIR) + else + qdel(parent) + return + if(!CanConsume(eater, feeder)) + return + var/fullness = eater.nutrition + 10 //The theoretical fullness of the person eating if they were to eat this + for(var/datum/reagent/consumable/C in eater.reagents.reagent_list) //we add the nutrition value of what we're currently digesting + fullness += C.nutriment_factor * C.volume / C.metabolization_rate + + . = COMPONENT_ITEM_NO_ATTACK //Point of no return I suppose + + if(eater == feeder)//If you're eating it yourself. + if(!do_mob(feeder, eater, eat_time)) //Gotta pass the minimal eat time + return + var/eatverb = pick(eatverbs) + if(junkiness && eater.satiety < -150 && eater.nutrition > NUTRITION_LEVEL_STARVING + 50 && !HAS_TRAIT(eater, TRAIT_VORACIOUS)) + to_chat(eater, "You don't feel like eating any more junk food at the moment!") + return + else if(fullness <= 50) + eater.visible_message("[eater] hungrily [eatverb]s \the [parent], gobbling it down!", "You hungrily [eatverb] \the [parent], gobbling it down!") + else if(fullness > 50 && fullness < 150) + eater.visible_message("[eater] hungrily [eatverb]s \the [parent].", "You hungrily [eatverb] \the [parent].") + else if(fullness > 150 && fullness < 500) + eater.visible_message("[eater] [eatverb]s \the [parent].", "You [eatverb] \the [parent].") + else if(fullness > 500 && fullness < 600) + eater.visible_message("[eater] unwillingly [eatverb]s a bit of \the [parent].", "You unwillingly [eatverb] a bit of \the [parent].") + else if(fullness > (600 * (1 + eater.overeatduration / 2000))) // The more you eat - the more you can eat + eater.visible_message("[eater] cannot force any more of \the [parent] to go down [eater.p_their()] throat!", "You cannot force any more of \the [parent] to go down your throat!") + return + else //If you're feeding it to someone else. + if(isbrain(eater)) + to_chat(feeder, "[eater] doesn't seem to have a mouth!") + return + if(fullness <= (600 * (1 + eater.overeatduration / 1000))) + eater.visible_message("[feeder] attempts to feed [eater] [parent].", \ + "[feeder] attempts to feed you [parent].") + else + eater.visible_message("[feeder] cannot force any more of [parent] down [eater]'s throat!", \ + "[feeder] cannot force any more of [parent] down your throat!") + return + if(!do_mob(feeder, eater)) //Wait 3 seconds before you can feed + return + + log_combat(feeder, eater, "fed", owner.reagents.log_list()) + eater.visible_message("[feeder] forces [eater] to eat [parent]!", \ + "[feeder] forces you to eat [parent]!") + + TakeBite(eater, feeder) + +///This function lets the eater take a bite and transfers the reagents to the eater. +/datum/component/edible/proc/TakeBite(mob/living/eater, mob/living/feeder) + + var/atom/owner = parent + + if(!owner?.reagents) + return FALSE + if(eater.satiety > -200) + eater.satiety -= junkiness + playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE) + if(owner.reagents.total_volume) + SEND_SIGNAL(parent, COMSIG_FOOD_EATEN, eater, feeder) + var/fraction = min(bite_consumption / owner.reagents.total_volume, 1) + owner.reagents.reaction(eater, INGEST, fraction) + owner.reagents.trans_to(eater, bite_consumption) + bitecount++ + On_Consume(eater) + checkLiked(fraction, eater) + + //Invoke our after eat callback if it is valid + if(after_eat) + after_eat.Invoke(eater, feeder) + + return TRUE + +///Checks whether or not the eater can actually consume the food +/datum/component/edible/proc/CanConsume(mob/living/eater, mob/living/feeder) + if(!iscarbon(eater)) + return FALSE + var/mob/living/carbon/C = eater + var/covered = "" + if(C.is_mouth_covered(head_only = 1)) + covered = "headgear" + else if(C.is_mouth_covered(mask_only = 1)) + covered = "mask" + if(covered) + var/who = (isnull(feeder) || eater == feeder) ? "your" : "[eater.p_their()]" + to_chat(feeder, "You have to remove [who] [covered] first!") + return FALSE + return TRUE + +///Check foodtypes to see if we should send a moodlet +/datum/component/edible/proc/checkLiked(var/fraction, mob/M) + if(last_check_time + 50 > world.time) + return FALSE + if(!ishuman(M)) + return FALSE + var/mob/living/carbon/human/H = M + if(HAS_TRAIT(H, TRAIT_AGEUSIA) && foodtypes & H.dna.species.toxic_food) + to_chat(H, "You don't feel so good...") + H.adjust_disgust(25 + 30 * fraction) + else + if(foodtypes & H.dna.species.toxic_food) + to_chat(H,"What the hell was that thing?!") + H.adjust_disgust(25 + 30 * fraction) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food) + else if(foodtypes & H.dna.species.disliked_food) + to_chat(H,"That didn't taste very good...") + H.adjust_disgust(11 + 15 * fraction) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food) + else if(foodtypes & H.dna.species.liked_food) + to_chat(H,"I love this taste!") + H.adjust_disgust(-5 + -2.5 * fraction) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food) + if((foodtypes & BREAKFAST) && world.time - SSticker.round_start_time < STOP_SERVING_BREAKFAST) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "breakfast", /datum/mood_event/breakfast) + last_check_time = world.time + +///Delete the item when it is fully eaten +/datum/component/edible/proc/On_Consume(mob/living/eater) + + var/atom/owner = parent + + if(!eater) + return + if(!owner.reagents.total_volume) + if(isturf(parent)) + var/turf/T = parent + T.ScrapeAway(1, CHANGETURF_INHERIT_AIR) + else + qdel(parent) + +///Ability to feed food to puppers +/datum/component/edible/proc/UseByAnimal(datum/source, mob/user) + + var/atom/owner = parent + + if(!isdog(user)) + return + var/mob/living/L = user + if(bitecount == 0 || prob(50)) + L.emote("me", 1, "nibbles away at \the [parent]") + bitecount++ + . = COMPONENT_ITEM_NO_ATTACK + L.taste(owner.reagents) // why should carbons get all the fun? + if(bitecount >= 5) + var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where \the [parent] was") + if(sattisfaction_text) + L.emote("me", 1, "[sattisfaction_text]") + qdel(parent) diff --git a/code/datums/components/radioactive.dm b/code/datums/components/radioactive.dm index decc2dd65c..f12e8bf007 100644 --- a/code/datums/components/radioactive.dm +++ b/code/datums/components/radioactive.dm @@ -69,8 +69,9 @@ out += "[out ? " and it " : "[master] "]seems to be glowing a bit." if(RAD_AMOUNT_HIGH to INFINITY) //At this level the object can contaminate other objects out += "[out ? " and it " : "[master] "]hurts to look at." - else - out += "." + if(!LAZYLEN(out)) + return + out += "." examine_list += out.Join() /datum/component/radioactive/proc/rad_attack(datum/source, atom/movable/target, mob/living/user) diff --git a/code/datums/elements/beauty.dm b/code/datums/elements/beauty.dm index 8acfda73e1..8895026967 100644 --- a/code/datums/elements/beauty.dm +++ b/code/datums/elements/beauty.dm @@ -8,8 +8,11 @@ if(. == ELEMENT_INCOMPATIBLE || !isatom(target) || isarea(target)) return ELEMENT_INCOMPATIBLE beauty = beautyamount - RegisterSignal(target, COMSIG_ENTER_AREA, .proc/enter_area) - RegisterSignal(target, COMSIG_EXIT_AREA, .proc/exit_area) + + if(ismovable(target)) + RegisterSignal(target, COMSIG_ENTER_AREA, .proc/enter_area) + RegisterSignal(target, COMSIG_EXIT_AREA, .proc/exit_area) + var/area/A = get_area(target) if(A) enter_area(null, A) diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm index bafb6fbf0e..f110d5e8ed 100644 --- a/code/datums/looping_sounds/_looping_sound.dm +++ b/code/datums/looping_sounds/_looping_sound.dm @@ -23,10 +23,14 @@ var/end_sound var/chance var/volume = 100 + var/vary = FALSE var/max_loops var/direct + var/extra_range = 0 + var/falloff var/timerid + var/init_timerid /datum/looping_sound/New(list/_output_atoms=list(), start_immediately=FALSE, _direct=FALSE) if(!mid_sounds) @@ -47,13 +51,15 @@ /datum/looping_sound/proc/start(atom/add_thing) if(add_thing) output_atoms |= add_thing - if(timerid) + if(timerid || init_timerid) return on_start() /datum/looping_sound/proc/stop(atom/remove_thing) if(remove_thing) output_atoms -= remove_thing + if(init_timerid) + deltimer(init_timerid) if(!timerid) return on_stop() @@ -80,7 +86,7 @@ if(direct) SEND_SOUND(thing, S) else - playsound(thing, S, volume) + playsound(thing, S, volume, vary, extra_range, falloff) /datum/looping_sound/proc/get_sound(starttime, _mid_sounds) . = _mid_sounds || mid_sounds @@ -92,7 +98,7 @@ if(start_sound) play(start_sound) start_wait = start_length - addtimer(CALLBACK(src, .proc/sound_loop), start_wait, TIMER_CLIENT_TIME) + init_timerid = addtimer(CALLBACK(src, .proc/sound_loop), start_wait, TIMER_CLIENT_TIME | TIMER_STOPPABLE) /datum/looping_sound/proc/on_stop() if(end_sound) diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm index 1a8ce755e1..5148aab4ac 100644 --- a/code/datums/materials/_material.dm +++ b/code/datums/materials/_material.dm @@ -6,8 +6,6 @@ Simple datum which is instanced once per type and is used for every object of sa /datum/material var/name = "material" var/desc = "its..stuff." - ///Var that's mostly used by science machines to identify specific materials, should most likely be phased out at some point - var/id = "mat" ///Base color of the material, is used for greyscale. Item isn't changed in color if this is null. var/color ///Base alpha of the material, is used for greyscale icons. @@ -26,6 +24,20 @@ Simple datum which is instanced once per type and is used for every object of sa var/armor_modifiers = list("melee" = 1, "bullet" = 1, "laser" = 1, "energy" = 1, "bomb" = 1, "bio" = 1, "rad" = 1, "fire" = 1, "acid" = 1) ///How beautiful is this material per unit? var/beauty_modifier = 0 + ///Can be used to override the sound items make, lets add some SLOSHing. + var/item_sound_override + ///Can be used to override the stepsound a turf makes. MORE SLOOOSH + var/turf_sound_override + ///what texture icon state to overlay + var/texture_layer_icon_state + ///a cached filter for the texture icon + var/cached_texture_filter + +/datum/material/New() + . = ..() + if(texture_layer_icon_state) + var/texture_icon = icon('icons/materials/composite.dmi', texture_layer_icon_state) + cached_texture_filter = filter(type="layer", icon=texture_icon, blend_mode = BLEND_INSET_OVERLAY) ///This proc is called when the material is added to an object. /datum/material/proc/on_applied(atom/source, amount, material_flags) @@ -34,16 +46,27 @@ Simple datum which is instanced once per type and is used for every object of sa source.add_atom_colour(color, FIXED_COLOUR_PRIORITY) if(alpha) source.alpha = alpha + if(texture_layer_icon_state) + ADD_KEEP_TOGETHER(source, MATERIAL_SOURCE(src)) + source.filters += cached_texture_filter if(material_flags & MATERIAL_ADD_PREFIX) source.name = "[name] [source.name]" - if(istype(source, /obj)) //objs - on_applied_obj(source, amount, material_flags) - if(beauty_modifier) addtimer(CALLBACK(source, /datum.proc/_AddElement, list(/datum/element/beauty, beauty_modifier * amount)), 0) + if(istype(source, /obj)) //objs + on_applied_obj(source, amount, material_flags) + + else if(isturf(source, /turf)) //turfs + on_applied_turf(source, amount, material_flags) + + source.mat_update_desc(src) + +///This proc is called when a material updates an object's description +/atom/proc/mat_update_desc(/datum/material/mat) + return ///This proc is called when the material is added to an object specifically. /datum/material/proc/on_applied_obj(var/obj/o, amount, material_flags) if(material_flags & MATERIAL_AFFECT_STATISTICS) @@ -61,6 +84,24 @@ Simple datum which is instanced once per type and is used for every object of sa for(var/i in current_armor) temp_armor_list[i] = current_armor[i] * armor_modifiers[i] o.armor = getArmor(arglist(temp_armor_list)) + if(!isitem(o)) + return + var/obj/item/I = o + if(!item_sound_override) + return + I.hitsound = item_sound_override + I.usesound = item_sound_override + I.throwhitsound = item_sound_override + +/datum/material/proc/on_applied_turf(var/turf/T, amount, material_flags) + if(isopenturf(T)) + if(!turf_sound_override) + return + var/turf/open/O = T + O.footstep = turf_sound_override + O.barefootstep = turf_sound_override + O.clawfootstep = turf_sound_override + O.heavyfootstep = turf_sound_override ///This proc is called when the material is removed from an object. /datum/material/proc/on_removed(atom/source, material_flags) @@ -68,6 +109,9 @@ Simple datum which is instanced once per type and is used for every object of sa if(color) source.remove_atom_colour(FIXED_COLOUR_PRIORITY, color) source.alpha = initial(source.alpha) + if(texture_layer_icon_state) + source.filters -= cached_texture_filter + REMOVE_KEEP_TOGETHER(source, MATERIAL_SOURCE(src)) if(material_flags & MATERIAL_ADD_PREFIX) source.name = initial(source.name) @@ -75,10 +119,16 @@ Simple datum which is instanced once per type and is used for every object of sa if(istype(source, /obj)) //objs on_removed_obj(source, material_flags) + else if(istype(source, /turf)) //turfs + on_removed_turf(source, material_flags) + ///This proc is called when the material is removed from an object specifically. -/datum/material/proc/on_removed_obj(var/obj/o, amount, material_flags) +/datum/material/proc/on_removed_obj(obj/o, material_flags) if(material_flags & MATERIAL_AFFECT_STATISTICS) var/new_max_integrity = initial(o.max_integrity) o.modify_max_integrity(new_max_integrity) o.force = initial(o.force) o.throwforce = initial(o.throwforce) + +/datum/material/proc/on_removed_turf(turf/T, material_flags) + return diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index d4921a04d2..721af65449 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -1,21 +1,19 @@ ///Has no special properties. /datum/material/iron name = "iron" - id = "iron" desc = "Common iron ore often found in sedimentary and igneous layers of the crust." color = "#878687" - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) + categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/metal value_per_unit = 0.0025 ///Breaks extremely easily but is transparent. /datum/material/glass name = "glass" - id = "glass" desc = "Glass forged by melting sand." color = "#88cdf1" alpha = 150 - categories = list(MAT_CATEGORY_RIGID = TRUE) + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) integrity_modifier = 0.1 sheet_type = /obj/item/stack/sheet/glass value_per_unit = 0.0025 @@ -30,10 +28,9 @@ Unless you know what you're doing, only use the first three numbers. They're in ///Has no special properties. Could be good against vampires in the future perhaps. /datum/material/silver name = "silver" - id = "silver" desc = "Silver" color = list(255/255, 284/255, 302/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) + categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/silver value_per_unit = 0.025 beauty_modifier = 0.075 @@ -41,11 +38,10 @@ Unless you know what you're doing, only use the first three numbers. They're in ///Slight force increase /datum/material/gold name = "gold" - id = "gold" desc = "Gold" color = list(340/255, 240/255, 50/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //gold is shiny, but not as bright as bananium strength_modifier = 1.2 - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) + categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/gold value_per_unit = 0.0625 beauty_modifier = 0.15 @@ -54,11 +50,10 @@ Unless you know what you're doing, only use the first three numbers. They're in ///Has no special properties /datum/material/diamond name = "diamond" - id = "diamond" desc = "Highly pressurized carbon" color = list(48/255, 272/255, 301/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) alpha = 132 - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) + categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/diamond value_per_unit = 0.25 beauty_modifier = 0.3 @@ -67,10 +62,9 @@ Unless you know what you're doing, only use the first three numbers. They're in ///Is slightly radioactive /datum/material/uranium name = "uranium" - id = "uranium" desc = "Uranium" color = rgb(48, 237, 26) - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) + categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/uranium value_per_unit = 0.05 beauty_modifier = 0.3 //It shines so beautiful @@ -88,10 +82,9 @@ Unless you know what you're doing, only use the first three numbers. They're in ///Adds firestacks on hit (Still needs support to turn into gas on destruction) /datum/material/plasma name = "plasma" - id = "plasma" desc = "Isn't plasma a state of matter? Oh whatever." color = list(298/255, 46/255, 352/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) + categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/plasma value_per_unit = 0.1 beauty_modifier = 0.15 @@ -111,7 +104,6 @@ Unless you know what you're doing, only use the first three numbers. They're in ///Can cause bluespace effects on use. (Teleportation) (Not yet implemented) /datum/material/bluespace name = "bluespace crystal" - id = "bluespace_crystal" desc = "Crystals with bluespace properties" color = list(119/255, 217/255, 396/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) alpha = 200 @@ -123,10 +115,9 @@ Unless you know what you're doing, only use the first three numbers. They're in ///Honks and slips /datum/material/bananium name = "bananium" - id = "bananium" desc = "Material with hilarious properties" color = list(460/255, 464/255, 0, 0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //obnoxiously bright yellow - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) + categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/bananium value_per_unit = 0.5 beauty_modifier = 0.5 @@ -146,11 +137,10 @@ Unless you know what you're doing, only use the first three numbers. They're in ///Mediocre force increase /datum/material/titanium name = "titanium" - id = "titanium" desc = "Titanium" color = "#b3c0c7" strength_modifier = 1.3 - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE) + categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/titanium value_per_unit = 0.0625 beauty_modifier = 0.05 @@ -158,11 +148,10 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/runite name = "runite" - id = "runite" desc = "Runite" color = "#3F9995" strength_modifier = 1.3 - categories = list(MAT_CATEGORY_RIGID = TRUE) + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/runite beauty_modifier = 0.5 armor_modifiers = list("melee" = 1.35, "bullet" = 2, "laser" = 0.5, "energy" = 1.25, "bomb" = 1.25, "bio" = 1, "rad" = 1, "fire" = 1.4, "acid" = 1) //rune is weak against magic lasers but strong against bullets. This is the combat triangle. @@ -170,7 +159,6 @@ Unless you know what you're doing, only use the first three numbers. They're in ///Force decrease /datum/material/plastic name = "plastic" - id = "plastic" desc = "Plastic" color = "#caccd9" strength_modifier = 0.85 @@ -182,7 +170,6 @@ Unless you know what you're doing, only use the first three numbers. They're in ///Force decrease and mushy sound effect. (Not yet implemented) /datum/material/biomass name = "biomass" - id = "biomass" desc = "Organic matter" color = "#735b4d" strength_modifier = 0.8 @@ -190,12 +177,11 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/wood name = "wood" - id = "wood" desc = "Flexible, durable, but flamable. Hard to come across in space." color = "#bb8e53" strength_modifier = 0.5 sheet_type = /obj/item/stack/sheet/mineral/wood - categories = list(MAT_CATEGORY_RIGID = TRUE) + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) value_per_unit = 0.06 beauty_modifier = 0.1 armor_modifiers = list("melee" = 1.1, "bullet" = 1.1, "laser" = 0.4, "energy" = 0.4, "bomb" = 1, "bio" = 0.2, "rad" = 0, "fire" = 0, "acid" = 0.3) @@ -215,11 +201,10 @@ Unless you know what you're doing, only use the first three numbers. They're in ///Stronk force increase /datum/material/adamantine name = "adamantine" - id = "adamantine" desc = "A powerful material made out of magic, I mean science!" color = "#6d7e8e" strength_modifier = 1.5 - categories = list(MAT_CATEGORY_RIGID = TRUE) + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/adamantine value_per_unit = 0.25 beauty_modifier = 0.4 @@ -228,10 +213,9 @@ Unless you know what you're doing, only use the first three numbers. They're in ///RPG Magic. (Admin only) /datum/material/mythril name = "mythril" - id = "mythril" desc = "How this even exists is byond me" color = "#f2d5d7" - categories = list(MAT_CATEGORY_RIGID = TRUE) + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/mythril value_per_unit = 0.75 beauty_modifier = 0.5 @@ -246,3 +230,134 @@ Unless you know what you're doing, only use the first three numbers. They're in . = ..() if(istype(source, /obj/item)) qdel(source.GetComponent(/datum/component/fantasy)) + +//I don't like sand. It's coarse, and rough, and irritating, and it gets everywhere. +/datum/material/sand + name = "sand" + desc = "You know, it's amazing just how structurally sound sand can be." + color = "#EDC9AF" + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + sheet_type = /obj/item/stack/sheet/sandblock + value_per_unit = 0.001 + strength_modifier = 0.5 + integrity_modifier = 0.1 + armor_modifiers = list("melee" = 0.25, "bullet" = 0.25, "laser" = 1.25, "energy" = 0.25, "bomb" = 0.25, "bio" = 0.25, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5) + beauty_modifier = 0.25 + turf_sound_override = FOOTSTEP_SAND + texture_layer_icon_state = "sand" + +//And now for our lavaland dwelling friends, sand, but in stone form! Truly revolutionary. +/datum/material/sandstone + name = "sandstone" + desc = "Bialtaakid 'ant taerif ma hdha." + color = "#B77D31" + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + sheet_type = /obj/item/stack/sheet/mineral/sandstone + value_per_unit = 0.0025 + armor_modifiers = list("melee" = 0.5, "bullet" = 0.5, "laser" = 1.25, "energy" = 0.5, "bomb" = 0.5, "bio" = 0.25, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5) + beauty_modifier = 0.3 + turf_sound_override = FOOTSTEP_WOOD + texture_layer_icon_state = "brick" + +/datum/material/snow + name = "snow" + desc = "There's no business like snow business." + color = "#FFFFFF" + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + sheet_type = /obj/item/stack/sheet/mineral/snow + value_per_unit = 0.0025 + armor_modifiers = list("melee" = 0.25, "bullet" = 0.25, "laser" = 0.25, "energy" = 0.25, "bomb" = 0.25, "bio" = 0.25, "rad" = 1.5, "fire" = 0.25, "acid" = 1.5) + beauty_modifier = 0.3 + turf_sound_override = FOOTSTEP_SAND + texture_layer_icon_state = "sand" + +/datum/material/runedmetal + name = "runed metal" + desc = "Mir'ntrath barhah Nar'sie." + color = "#3C3434" + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + sheet_type = /obj/item/stack/sheet/runed_metal + value_per_unit = 0.75 + armor_modifiers = list("melee" = 1.2, "bullet" = 1.2, "laser" = 1, "energy" = 1, "bomb" = 1.2, "bio" = 1.2, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5) + beauty_modifier = -0.15 + texture_layer_icon_state = "runed" + +/datum/material/bronze + name = "bronze" + desc = "Clock Cult? Never heard of it." + color = "#92661A" + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + sheet_type = /obj/item/stack/tile/bronze + value_per_unit = 0.025 + armor_modifiers = list("melee" = 1, "bullet" = 1, "laser" = 1, "energy" = 1, "bomb" = 1, "bio" = 1, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5) + beauty_modifier = 0.2 + +/datum/material/paper + name = "paper" + desc = "Ten thousand folds of pure starchy power." + color = "#E5DCD5" + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + sheet_type = /obj/item/stack/sheet/paperframes + value_per_unit = 0.0025 + armor_modifiers = list("melee" = 0.1, "bullet" = 0.1, "laser" = 0.1, "energy" = 0.1, "bomb" = 0.1, "bio" = 0.1, "rad" = 1.5, "fire" = 0, "acid" = 1.5) + beauty_modifier = 0.3 + turf_sound_override = FOOTSTEP_SAND + texture_layer_icon_state = "paper" + +/datum/material/paper/on_applied_obj(obj/source, amount, material_flags) + . = ..() + if(material_flags & MATERIAL_AFFECT_STATISTICS) + var/obj/paper = source + paper.resistance_flags |= FLAMMABLE + paper.obj_flags |= UNIQUE_RENAME + +/datum/material/paper/on_removed_obj(obj/source, material_flags) + if(material_flags & MATERIAL_AFFECT_STATISTICS) + var/obj/paper = source + paper.resistance_flags &= ~FLAMMABLE + return ..() + +/datum/material/cardboard + name = "cardboard" + desc = "They say cardboard is used by hobos to make incredible things." + color = "#5F625C" + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + sheet_type = /obj/item/stack/sheet/cardboard + value_per_unit = 0.003 + armor_modifiers = list("melee" = 0.25, "bullet" = 0.25, "laser" = 0.25, "energy" = 0.25, "bomb" = 0.25, "bio" = 0.25, "rad" = 1.5, "fire" = 0, "acid" = 1.5) + beauty_modifier = -0.1 + +/datum/material/cardboard/on_applied_obj(obj/source, amount, material_flags) + . = ..() + if(material_flags & MATERIAL_AFFECT_STATISTICS) + var/obj/cardboard = source + cardboard.resistance_flags |= FLAMMABLE + cardboard.obj_flags |= UNIQUE_RENAME + +/datum/material/cardboard/on_removed_obj(obj/source, material_flags) + if(material_flags & MATERIAL_AFFECT_STATISTICS) + var/obj/cardboard = source + cardboard.resistance_flags &= ~FLAMMABLE + return ..() + +/datum/material/bone + name = "bone" + desc = "Man, building with this will make you the coolest caveman on the block." + color = "#e3dac9" + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + sheet_type = /obj/item/stack/sheet/bone + value_per_unit = 0.05 + armor_modifiers = list("melee" = 1.2, "bullet" = 0.75, "laser" = 0.75, "energy" = 1.2, "bomb" = 1, "bio" = 1, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5) + beauty_modifier = -0.2 + +/datum/material/bamboo + name = "bamboo" + desc = "If it's good enough for pandas, it's good enough for you." + color = "#339933" + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + sheet_type = /obj/item/stack/sheet/mineral/bamboo + value_per_unit = 0.0025 + armor_modifiers = list("melee" = 0.5, "bullet" = 0.5, "laser" = 0.5, "energy" = 0.5, "bomb" = 0.5, "bio" = 0.51, "rad" = 1.5, "fire" = 0.5, "acid" = 1.5) + beauty_modifier = 0.2 + turf_sound_override = FOOTSTEP_WOOD + texture_layer_icon_state = "bamboo" diff --git a/code/datums/materials/meat.dm b/code/datums/materials/meat.dm new file mode 100644 index 0000000000..14a373f2d2 --- /dev/null +++ b/code/datums/materials/meat.dm @@ -0,0 +1,32 @@ +///It's gross, gets the name of it's owner, and is all kinds of fucked up +/datum/material/meat + name = "meat" + desc = "Meat" + color = rgb(214, 67, 67) + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + sheet_type = /obj/item/stack/sheet/meat + value_per_unit = 0.05 + beauty_modifier = -0.3 + strength_modifier = 0.7 + armor_modifiers = list("melee" = 0.3, "bullet" = 0.3, "laser" = 1.2, "energy" = 1.2, "bomb" = 0.3, "bio" = 0, "rad" = 0.7, "fire" = 1, "acid" = 1) + item_sound_override = 'sound/effects/meatslap.ogg' + turf_sound_override = FOOTSTEP_MEAT + texture_layer_icon_state = "meat" + +/datum/material/meat/on_removed(atom/source, material_flags) + . = ..() + qdel(source.GetComponent(/datum/component/edible)) + +/datum/material/meat/on_applied_obj(obj/O, amount, material_flags) + . = ..() + O.obj_flags |= UNIQUE_RENAME //So you can name it after the person its made from, a depressing comprimise. + make_edible(O, amount, material_flags) + +/datum/material/meat/on_applied_turf(turf/T, amount, material_flags) + . = ..() + make_edible(T, amount, material_flags) + +/datum/material/meat/proc/make_edible(atom/source, amount, material_flags) + var/nutriment_count = 3 * (amount / MINERAL_MATERIAL_AMOUNT) + var/oil_count = 2 * (amount / MINERAL_MATERIAL_AMOUNT) + source.AddComponent(/datum/component/edible, list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/cooking_oil = oil_count), null, RAW | MEAT | GROSS, null, 30, list("Fleshy")) diff --git a/code/datums/materials/pizza.dm b/code/datums/materials/pizza.dm new file mode 100644 index 0000000000..2a9542234f --- /dev/null +++ b/code/datums/materials/pizza.dm @@ -0,0 +1,30 @@ +/datum/material/pizza + name = "pizza" + desc = "~Jamme, jamme, n'coppa, jamme ja! Jamme, jamme, n'coppa jamme ja, funi-culi funi-cala funi-culi funi-cala!! Jamme jamme ja funiculi funicula!~" + color = "#FF9F23" + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + sheet_type = /obj/item/stack/sheet/pizza + value_per_unit = 0.05 + beauty_modifier = 0.1 + strength_modifier = 0.7 + armor_modifiers = list("melee" = 0.3, "bullet" = 0.3, "laser" = 1.2, "energy" = 1.2, "bomb" = 0.3, "bio" = 0, "rad" = 0.7, "fire" = 1, "acid" = 1) + item_sound_override = 'sound/effects/meatslap.ogg' + turf_sound_override = FOOTSTEP_MEAT + texture_layer_icon_state = "pizza" + +/datum/material/pizza/on_removed(atom/source, material_flags) + . = ..() + qdel(source.GetComponent(/datum/component/edible)) + +/datum/material/pizza/on_applied_obj(obj/O, amount, material_flags) + . = ..() + make_edible(O, amount, material_flags) + +/datum/material/pizza/on_applied_turf(turf/T, amount, material_flags) + . = ..() + make_edible(T, amount, material_flags) + +/datum/material/pizza/proc/make_edible(atom/source, amount, material_flags) + var/nutriment_count = 3 * (amount / MINERAL_MATERIAL_AMOUNT) + var/oil_count = 2 * (amount / MINERAL_MATERIAL_AMOUNT) + source.AddComponent(/datum/component/edible, list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/cooking_oil = oil_count), null, GRAIN | MEAT | DAIRY | VEGETABLES, null, 30, list("crust", "tomato", "cheese", "meat")) diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 5282156042..d275684bba 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -462,6 +462,10 @@ suffix = "whiteship_pod" name = "Salvage Pod" +/datum/map_template/shuttle/whiteship/cog + suffix = "cog" + name = "NT Prisoner Transport" + /datum/map_template/shuttle/cargo/box suffix = "box" name = "supply shuttle (Box)" @@ -628,4 +632,4 @@ /datum/map_template/shuttle/hunter/bounty suffix = "bounty" - name = "Bounty Hunter Ship" \ No newline at end of file + name = "Bounty Hunter Ship" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index e3f4829d3d..b5cd140c36 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -48,6 +48,7 @@ var/rad_insulation = RAD_NO_INSULATION ///The custom materials this atom is made of, used by a lot of things like furniture, walls, and floors (if I finish the functionality, that is.) + ///The list referenced by this var can be shared by multiple objects and should not be directly modified. Instead, use [set_custom_materials][/atom/proc/set_custom_materials]. var/list/custom_materials ///Bitfield for how the atom handles materials. var/material_flags = NONE @@ -114,11 +115,8 @@ if (canSmoothWith) canSmoothWith = typelist("canSmoothWith", canSmoothWith) - var/temp_list = list() - for(var/i in custom_materials) - temp_list[SSmaterials.GetMaterialRef(i)] = custom_materials[i] //Get the proper instanced version - custom_materials = null //Null the list to prepare for applying the materials properly - set_custom_materials(temp_list) + // apply materials properly from the default custom_materials value + set_custom_materials(custom_materials) ComponentInitialize() @@ -446,8 +444,10 @@ return var/list/blood_dna = list() if(dna) + blood_dna["color"] = list(dna.species.exotic_blood_color) //so when combined, the list grows with the number of colors blood_dna[dna.unique_enzymes] = dna.blood_type else + blood_dna["color"] = list(BLOOD_COLOR_HUMAN) blood_dna["UNKNOWN DNA"] = "X*" return blood_dna @@ -461,8 +461,10 @@ if(!new_blood_dna) return FALSE LAZYINITLIST(blood_DNA) //if our list of DNA doesn't exist yet, initialise it. + LAZYINITLIST(blood_DNA["color"]) var/old_length = blood_DNA.len blood_DNA |= new_blood_dna + blood_DNA["color"] += new_blood_dna["bloodcolor"] if(blood_DNA.len == old_length) return FALSE return TRUE @@ -470,8 +472,11 @@ //to add blood dna info to the object's blood_DNA list /atom/proc/transfer_blood_dna(list/blood_dna, list/datum/disease/diseases) LAZYINITLIST(blood_DNA) + LAZYINITLIST(blood_dna["color"]) + var/old_length = blood_DNA.len blood_DNA |= blood_dna + blood_DNA["color"] += blood_dna["bloodcolor"] if(blood_DNA.len > old_length) return TRUE //some new blood DNA was added @@ -544,23 +549,22 @@ /atom/proc/blood_DNA_to_color() var/list/colors = list()//first we make a list of all bloodtypes present - for(var/bloop in blood_DNA) - if(colors[blood_DNA[bloop]]) - colors[blood_DNA[bloop]]++ + for(var/blood_color in blood_DNA["color"]) + if(colors[blood_color]) + colors[blood_color]++ else - colors[blood_DNA[bloop]] = 1 + colors[blood_color] = 1 var/final_rgb = BLOOD_COLOR_HUMAN //a default so we don't have white blood graphics if something messed up - if(colors.len) var/sum = 0 //this is all shitcode, but it works; trust me - final_rgb = bloodtype_to_color(colors[1]) + final_rgb = colors[1] sum = colors[colors[1]] if(colors.len > 1) var/i = 2 while(i <= colors.len) var/tmp = colors[colors[i]] - final_rgb = BlendRGB(final_rgb, bloodtype_to_color(colors[i]), tmp/(tmp+sum)) + final_rgb = BlendRGB(final_rgb, colors[i], tmp/(tmp+sum)) sum += tmp i++ @@ -1006,26 +1010,21 @@ Proc for attack log creation, because really why not ///Sets the custom materials for an item. /atom/proc/set_custom_materials(var/list/materials, multiplier = 1) - - if(!materials) - materials = custom_materials - if(custom_materials) //Only runs if custom materials existed at first. Should usually be the case but check anyways for(var/i in custom_materials) var/datum/material/custom_material = SSmaterials.GetMaterialRef(i) custom_material.on_removed(src, material_flags) //Remove the current materials if(!length(materials)) + custom_materials = null return - custom_materials = list() //Reset the list + if(material_flags & MATERIAL_EFFECTS) + for(var/x in materials) + var/datum/material/custom_material = SSmaterials.GetMaterialRef(x) + custom_material.on_applied(src, materials[x] * multiplier * material_modifier, material_flags) - for(var/x in materials) - var/datum/material/custom_material = SSmaterials.GetMaterialRef(x) - - if(material_flags & MATERIAL_EFFECTS) - custom_material.on_applied(src, materials[custom_material] * multiplier * material_modifier, material_flags) - custom_materials[custom_material] += materials[x] * multiplier + custom_materials = SSmaterials.FindOrCreateMaterialCombo(materials, multiplier) /** * Returns true if this atom has gravity for the passed in turf diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 4eeb6b8b0f..1f0687151d 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -46,29 +46,16 @@ "Dinnerware", "Imported" ) - var/list/allowed_materials = list( - /datum/material/iron, - /datum/material/glass, - /datum/material/gold, - /datum/material/silver, - /datum/material/diamond, - /datum/material/uranium, - /datum/material/plasma, - /datum/material/bluespace, - /datum/material/bananium, - /datum/material/titanium, - /datum/material/runite, - /datum/material/plastic, - /datum/material/adamantine, - /datum/material/mythril, - /datum/material/wood - ) + var/list/allowed_materials /// Base print speed var/base_print_speed = 10 /obj/machinery/autolathe/Initialize() - AddComponent(/datum/component/material_container, allowed_materials, _show_on_examine=TRUE, _after_insert=CALLBACK(src, .proc/AfterMaterialInsert)) + var/list/mats = allowed_materials + if(!mats) + mats = SSmaterials.materialtypes_by_category[MAT_CATEGORY_RIGID] + AddComponent(/datum/component/material_container, mats, _show_on_examine=TRUE, _after_insert=CALLBACK(src, .proc/AfterMaterialInsert)) . = ..() wires = new /datum/wires/autolathe(src) stored_research = new stored_research diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 1fb50e13c6..02a7e4ef97 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -18,7 +18,7 @@ var/secondsElectrified = 0 var/shockedby - var/visible = TRUE + var/visible = TRUE // To explain: Whether the door can block line of sight when closed or not. var/operating = FALSE var/glass = FALSE var/welded = FALSE diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 492e90720c..c9c577231e 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -54,6 +54,15 @@ else icon_state = "[src.base_state]open" +/obj/machinery/door/window/update_atom_colour() + if((color && (color_hex2num(color) < 255))) + visible = TRUE + if(density) + set_opacity(TRUE) + else + visible = FALSE + set_opacity(density && visible) + /obj/machinery/door/window/proc/open_and_close() open() if(src.check_access(null)) @@ -143,16 +152,18 @@ do_animate("opening") playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1) src.icon_state ="[src.base_state]open" - sleep(10) + addtimer(CALLBACK(src, .proc/finish_opening), 10) + return TRUE +/obj/machinery/door/window/proc/finish_opening() + operating = FALSE density = FALSE -// src.sd_set_opacity(0) //TODO: why is this here? Opaque windoors? ~Carn + if(visible) + set_opacity(FALSE) air_update_turf(1) update_freelook_sight() - if(operating == 1) //emag again operating = FALSE - return 1 /obj/machinery/door/window/close(forced=0) if (src.operating) @@ -171,10 +182,13 @@ density = TRUE air_update_turf(1) update_freelook_sight() - sleep(10) + addtimer(CALLBACK(src, .proc/finish_closing), 10) + return TRUE +/obj/machinery/door/window/proc/finish_closing() + if(visible) + set_opacity(TRUE) operating = FALSE - return 1 /obj/machinery/door/window/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) diff --git a/code/game/machinery/sheetifier.dm b/code/game/machinery/sheetifier.dm new file mode 100644 index 0000000000..7b83401194 --- /dev/null +++ b/code/game/machinery/sheetifier.dm @@ -0,0 +1,44 @@ +/obj/machinery/sheetifier + name = "Sheet-meister 2000" + desc = "A very sheety machine" + icon = 'icons/obj/machines/sheetifier.dmi' + icon_state = "base_machine" + density = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 10 + active_power_usage = 100 + circuit = /obj/item/circuitboard/machine/sheetifier + layer = BELOW_OBJ_LAYER + var/busy_processing = FALSE + +/obj/machinery/sheetifier/Initialize() + . = ..() + AddComponent(/datum/component/material_container, list(/datum/material/meat), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE, /obj/item/reagent_containers/food/snacks/meat/slab, CALLBACK(src, .proc/CanInsertMaterials), CALLBACK(src, .proc/AfterInsertMaterials)) + +/obj/machinery/sheetifier/update_overlays() + . = ..() + if(stat & (BROKEN|NOPOWER)) + return + var/mutable_appearance/on_overlay = mutable_appearance(icon, "buttons_on") + . += on_overlay + +/obj/machinery/sheetifier/update_icon_state() + icon_state = "base_machine[busy_processing ? "_processing" : ""]" + +/obj/machinery/sheetifier/proc/CanInsertMaterials() + return !busy_processing + +/obj/machinery/sheetifier/proc/AfterInsertMaterials(item_inserted, id_inserted, amount_inserted) + busy_processing = TRUE + update_icon() + var/datum/material/last_inserted_material = id_inserted + var/mutable_appearance/processing_overlay = mutable_appearance(icon, "processing") + processing_overlay.color = last_inserted_material.color + flick_overlay_static(processing_overlay, src, 64) + addtimer(CALLBACK(src, .proc/finish_processing), 64) + +/obj/machinery/sheetifier/proc/finish_processing() + busy_processing = FALSE + update_icon() + var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) + materials.retrieve_all() //Returns all as sheets diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index 4ddb5281ea..c13cb1d1c6 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -388,7 +388,7 @@ /obj/item/mecha_parts/mecha_equipment/generator/get_equip_info() var/output = ..() if(output) - return "[output] \[[fuel]: [round(fuel.amount*fuel.mats_per_stack,0.1)] cm3\] - [equip_ready?"A":"Dea"]ctivate" + return "[output] \[[fuel]: [round(fuel.amount*MINERAL_MATERIAL_AMOUNT,0.1)] cm3\] - [equip_ready?"A":"Dea"]ctivate" /obj/item/mecha_parts/mecha_equipment/generator/action(target) if(chassis) @@ -398,9 +398,9 @@ /obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(var/obj/item/stack/sheet/P) if(P.type == fuel.type && P.amount > 0) - var/to_load = max(max_fuel - fuel.amount*fuel.mats_per_stack,0) + var/to_load = max(max_fuel - fuel.amount*MINERAL_MATERIAL_AMOUNT,0) if(to_load) - var/units = min(max(round(to_load / P.mats_per_stack),1),P.amount) + var/units = min(max(round(to_load / MINERAL_MATERIAL_AMOUNT),1),P.amount) fuel.amount += units P.use(units) occupant_message("[units] unit\s of [fuel] successfully loaded.") @@ -454,7 +454,7 @@ if(cur_charge < chassis.cell.maxcharge) use_fuel = fuel_per_cycle_active chassis.give_power(power_per_cycle) - fuel.amount -= min(use_fuel/fuel.mats_per_stack,fuel.amount) + fuel.amount -= min(use_fuel/MINERAL_MATERIAL_AMOUNT,fuel.amount) update_equip_info() return 1 diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index a5acc7d394..fa16a95faf 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -91,7 +91,7 @@ var/mob/living/carbon/human/H = O var/obj/item/clothing/shoes/S = H.shoes if(S && S.bloody_shoes[blood_state]) - if(color != bloodtype_to_color(S.last_bloodtype)) + if(color != S.last_blood_color) return S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0) shoe_types |= S.type @@ -104,7 +104,7 @@ var/mob/living/carbon/human/H = O var/obj/item/clothing/shoes/S = H.shoes if(S && S.bloody_shoes[blood_state]) - if(color != bloodtype_to_color(S.last_bloodtype))//last entry - we check its color + if(color != S.last_blood_color)//last entry - we check its color return S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0) shoe_types |= S.type diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 60bae4016a..79e0eceb8f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -778,6 +778,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb ..() /obj/item/proc/microwave_act(obj/machinery/microwave/M) + SEND_SIGNAL(src, COMSIG_ITEM_MICROWAVE_ACT, M) if(istype(M) && M.dirty < 100) M.dirty++ diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index ea839ae12d..56eb25f953 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -61,6 +61,14 @@ name = "Experimental Clone Pod (Machine Board)" build_path = /obj/machinery/clonepod/experimental +/obj/item/circuitboard/machine/sheetifier + name = "Sheet-meister 2000 (Machine Board)" + icon_state = "supply" + build_path = /obj/machinery/sheetifier + req_components = list( + /obj/item/stock_parts/manipulator = 2, + /obj/item/stock_parts/matter_bin = 2) + /obj/item/circuitboard/machine/abductor name = "alien board (Report This)" icon_state = "abductor_mod" diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index a4ed8dedd1..fc98da2c0d 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -737,12 +737,7 @@ to_chat(usr, "A color that dark on an object like this? Surely not...") return FALSE - - if(istype(target, /obj/structure/window)) - var/obj/structure/window/W = target - W.spraycan_paint(paint_color) - else - target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) + target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) . = use_charges(user, 2) var/fraction = min(1, . / reagents.maximum_volume) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 5728a97dda..6ac2d310a1 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -258,6 +258,9 @@ GLOBAL_LIST_INIT(channel_tokens, list( name = "\proper mini Integrated Subspace Transceiver " subspace_transmission = FALSE +/obj/item/radio/headset/silicon/pai/ComponentInitialize() + . = ..() + AddElement(/datum/element/empprotection, EMP_PROTECT_WIRES) /obj/item/radio/headset/silicon/ai name = "\proper Integrated Subspace Transceiver " diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 6fdea26683..efcc075110 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -17,7 +17,6 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ throw_speed = 3 throw_range = 7 custom_materials = list(/datum/material/iron=1000) - mats_per_stack = 1000 max_amount = 50 attack_verb = list("hit", "bludgeoned", "whacked") hitsound = 'sound/weapons/grenadelaunch.ogg' diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index d28ae52b52..f5843a7df2 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -39,9 +39,11 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \ item_state = "sheet-sandstone" throw_speed = 3 throw_range = 5 - custom_materials = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT) + custom_materials = list(/datum/material/sandstone=MINERAL_MATERIAL_AMOUNT) sheettype = "sandstone" merge_type = /obj/item/stack/sheet/mineral/sandstone + walltype = /turf/closed/wall/mineral/sandstone + material_type = /datum/material/sandstone /obj/item/stack/sheet/mineral/sandstone/get_main_recipes() . = ..() @@ -107,6 +109,7 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \ point_value = 25 merge_type = /obj/item/stack/sheet/mineral/diamond material_type = /datum/material/diamond + walltype = /turf/closed/wall/mineral/diamond GLOBAL_LIST_INIT(diamond_recipes, list ( \ new/datum/stack_recipe("diamond door", /obj/structure/mineral_door/transparent/diamond, 10, one_per_turf = 1, on_floor = 1), \ @@ -135,6 +138,7 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \ point_value = 20 merge_type = /obj/item/stack/sheet/mineral/uranium material_type = /datum/material/uranium + walltype = /turf/closed/wall/mineral/uranium GLOBAL_LIST_INIT(uranium_recipes, list ( \ new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, one_per_turf = 1, on_floor = 1), \ @@ -163,6 +167,7 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \ point_value = 20 merge_type = /obj/item/stack/sheet/mineral/plasma material_type = /datum/material/plasma + walltype = /turf/closed/wall/mineral/plasma /obj/item/stack/sheet/mineral/plasma/suicide_act(mob/living/carbon/user) user.visible_message("[user] begins licking \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -205,6 +210,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ point_value = 20 merge_type = /obj/item/stack/sheet/mineral/gold material_type = /datum/material/gold + walltype = /turf/closed/wall/mineral/gold GLOBAL_LIST_INIT(gold_recipes, list ( \ new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_floor = 1), \ @@ -236,6 +242,7 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \ merge_type = /obj/item/stack/sheet/mineral/silver material_type = /datum/material/silver tableVariant = /obj/structure/table/optable + walltype = /turf/closed/wall/mineral/silver GLOBAL_LIST_INIT(silver_recipes, list ( \ new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, one_per_turf = 1, on_floor = 1), \ @@ -266,6 +273,7 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \ point_value = 50 merge_type = /obj/item/stack/sheet/mineral/bananium material_type = /datum/material/bananium + walltype = /turf/closed/wall/mineral/bananium GLOBAL_LIST_INIT(bananium_recipes, list ( \ new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20), \ @@ -294,6 +302,7 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \ point_value = 20 merge_type = /obj/item/stack/sheet/mineral/titanium material_type = /datum/material/titanium + walltype = /turf/closed/wall/mineral/titanium GLOBAL_LIST_INIT(titanium_recipes, list ( \ new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20), \ @@ -324,6 +333,7 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \ custom_materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT, /datum/material/plasma=MINERAL_MATERIAL_AMOUNT) point_value = 45 merge_type = /obj/item/stack/sheet/mineral/plastitanium + walltype = /turf/closed/wall/mineral/plastitanium /obj/item/stack/sheet/mineral/plastitanium/fifty amount = 50 @@ -390,11 +400,14 @@ GLOBAL_LIST_INIT(adamantine_recipes, list( name = "snow" icon_state = "sheet-snow" item_state = "sheet-snow" + custom_materials = list(/datum/material/snow = MINERAL_MATERIAL_AMOUNT) singular_name = "snow block" force = 1 throwforce = 2 grind_results = list(/datum/reagent/consumable/ice = 20) merge_type = /obj/item/stack/sheet/mineral/snow + walltype = /turf/closed/wall/mineral/snow + material_type = /datum/material/snow GLOBAL_LIST_INIT(snow_recipes, list ( \ new/datum/stack_recipe("Snow Wall", /turf/closed/wall/mineral/snow, 5, one_per_turf = 1, on_floor = 1), \ diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 9b356bd924..280de95388 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -207,7 +207,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ desc = "This sheet is an alloy of iron and plasma." icon_state = "sheet-plasteel" item_state = "sheet-metal" - custom_materials = list(/datum/material/iron=2000, /datum/material/plasma=2000) + custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT, /datum/material/plasma=MINERAL_MATERIAL_AMOUNT) throwforce = 10 flags_1 = CONDUCT_1 armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 80) @@ -291,6 +291,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ novariants = TRUE material_type = /datum/material/wood grind_results = list(/datum/reagent/carbon = 20) + walltype = /turf/closed/wall/mineral/wood /obj/item/stack/sheet/mineral/wood/attackby(obj/item/W, mob/user, params) // NOTE: sheet_types.dm is where the WOOD stack lives. Maybe move this over there. // Taken from /obj/item/stack/rods/attackby in [rods.dm] @@ -346,11 +347,13 @@ GLOBAL_LIST_INIT(bamboo_recipes, list ( \ icon_state = "sheet-bamboo" item_state = "sheet-bamboo" icon = 'icons/obj/stack_objects.dmi' + custom_materials = list(/datum/material/bamboo = MINERAL_MATERIAL_AMOUNT) throwforce = 15 armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) resistance_flags = FLAMMABLE merge_type = /obj/item/stack/sheet/mineral/bamboo grind_results = list(/datum/reagent/carbon = 5) + material_type = /datum/material/bamboo /obj/item/stack/sheet/mineral/bamboo/get_main_recipes() . = ..() @@ -515,12 +518,14 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ desc = "Large sheets of card, like boxes folded flat." singular_name = "cardboard sheet" icon_state = "sheet-card" + custom_materials = list(/datum/material/cardboard = MINERAL_MATERIAL_AMOUNT) item_state = "sheet-card" resistance_flags = FLAMMABLE force = 0 throwforce = 0 merge_type = /obj/item/stack/sheet/cardboard novariants = TRUE + material_type = /datum/material/cardboard /obj/item/stack/sheet/cardboard/get_main_recipes() . = ..() @@ -560,10 +565,12 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \ icon_state = "sheet-runed" item_state = "sheet-runed" icon = 'icons/obj/stack_objects.dmi' + custom_materials = list(/datum/material/runedmetal = MINERAL_MATERIAL_AMOUNT) sheettype = "runed" merge_type = /obj/item/stack/sheet/runed_metal novariants = TRUE grind_results = list(/datum/reagent/iron = 5, /datum/reagent/blood = 15) + material_type = /datum/material/runedmetal /obj/item/stack/sheet/runed_metal/ratvar_act() new /obj/item/stack/tile/brass(loc, amount) @@ -682,6 +689,7 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ icon_state = "sheet-brass" item_state = "sheet-brass" icon = 'icons/obj/stack_objects.dmi' + custom_materials = list(/datum/material/bronze = MINERAL_MATERIAL_AMOUNT) resistance_flags = FIRE_PROOF | ACID_PROOF throwforce = 10 max_amount = 50 @@ -692,6 +700,7 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ grind_results = list(/datum/reagent/iron = 5, /datum/reagent/copper = 3) //we have no "tin" reagent so this is the closest thing merge_type = /obj/item/stack/tile/bronze tableVariant = /obj/structure/table/bronze + material_type = /datum/material/bronze /obj/item/stack/tile/bronze/attack_self(mob/living/user) if(is_servant_of_ratvar(user)) //still lets them build with it, just gives a message @@ -739,6 +748,7 @@ GLOBAL_LIST_INIT(bone_recipes, list( icon = 'icons/obj/mining.dmi' icon_state = "bone" item_state = "sheet-bone" + custom_materials = list(/datum/material/bone = MINERAL_MATERIAL_AMOUNT) singular_name = "bone" desc = "Someone's been drinking their milk." force = 7 @@ -749,6 +759,7 @@ GLOBAL_LIST_INIT(bone_recipes, list( throw_range = 3 grind_results = list(/datum/reagent/carbon = 10) merge_type = /obj/item/stack/sheet/bone + material_type = /datum/material/bone /obj/item/stack/sheet/bone/get_main_recipes() . = ..() @@ -776,6 +787,7 @@ GLOBAL_LIST_INIT(plastic_recipes, list( custom_materials = list(/datum/material/plastic=MINERAL_MATERIAL_AMOUNT) throwforce = 7 grind_results = list(/datum/reagent/glitter/white = 60) + material_type = /datum/material/plastic merge_type = /obj/item/stack/sheet/plastic /obj/item/stack/sheet/plastic/fifty @@ -801,9 +813,11 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra singular_name = "paper frame" icon_state = "sheet-paper" item_state = "sheet-paper" + custom_materials = list(/datum/material/paper = MINERAL_MATERIAL_AMOUNT) merge_type = /obj/item/stack/sheet/paperframes resistance_flags = FLAMMABLE merge_type = /obj/item/stack/sheet/paperframes + material_type = /datum/material/paper /obj/item/stack/sheet/paperframes/get_main_recipes() . = ..() @@ -844,3 +858,55 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra merge_type = /obj/item/stack/sheet/cotton/durathread pull_effort = 70 loom_result = /obj/item/stack/sheet/durathread + +/obj/item/stack/sheet/meat + name = "meat sheets" + desc = "Something's bloody meat compressed into a nice solid sheet" + singular_name = "meat sheet" + icon_state = "sheet-meat" + material_flags = MATERIAL_COLOR + custom_materials = list(/datum/material/meat = MINERAL_MATERIAL_AMOUNT) + merge_type = /obj/item/stack/sheet/meat + material_type = /datum/material/meat + material_modifier = 1 //None of that wussy stuff + +/obj/item/stack/sheet/meat/fifty + amount = 50 +/obj/item/stack/sheet/meat/twenty + amount = 20 +/obj/item/stack/sheet/meat/five + amount = 5 + +/obj/item/stack/sheet/pizza + name = "pepperoni sheetzzas" + desc = "It's a delicious pepperoni sheetzza!" + singular_name = "pepperoni sheetzza" + icon_state = "sheet-pizza" + custom_materials = list(/datum/material/pizza = MINERAL_MATERIAL_AMOUNT) + merge_type = /obj/item/stack/sheet/pizza + material_type = /datum/material/pizza + material_modifier = 1 + +/obj/item/stack/sheet/pizza/fifty + amount = 50 +/obj/item/stack/sheet/pizza/twenty + amount = 20 +/obj/item/stack/sheet/pizza/five + amount = 5 + +/obj/item/stack/sheet/sandblock + name = "blocks of sand" + desc = "You're too old to be playing with sandcastles. Now you build... sandstations." + singular_name = "block of sand" + icon_state = "sheet-sandstone" + custom_materials = list(/datum/material/sand = MINERAL_MATERIAL_AMOUNT) + merge_type = /obj/item/stack/sheet/sandblock + material_type = /datum/material/sand + material_modifier = 1 + +/obj/item/stack/sheet/sandblock/fifty + amount = 50 +/obj/item/stack/sheet/sandblock/twenty + amount = 20 +/obj/item/stack/sheet/sandblock/five + amount = 5 diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm index dfba533247..57c8ba75d8 100644 --- a/code/game/objects/items/stacks/sheets/sheets.dm +++ b/code/game/objects/items/stacks/sheets/sheets.dm @@ -10,10 +10,14 @@ throw_range = 3 attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed") novariants = FALSE - mats_per_stack = MINERAL_MATERIAL_AMOUNT - var/sheettype = null //this is used for girders in the creation of walls/false walls - var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity - var/shard_type // the shard debris typepath left over by solar panels and windows etc. + ///this is used for girders in the creation of walls/false walls + var/sheettype = null + ///turn-in value for the gulag stacker - loosely relative to its rarity + var/point_value = 0 + /// the shard debris typepath left over by solar panels and windows etc. + var/shard_type + ///What type of wall does this sheet spawn + var/walltype /obj/item/stack/sheet/Initialize(mapload, new_amount, merge) . = ..() diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 2c8e700316..b124908bf2 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -22,7 +22,7 @@ var/merge_type = null // This path and its children should merge with this stack, defaults to src.type var/full_w_class = WEIGHT_CLASS_NORMAL //The weight class the stack should have at amount > 2/3rds max_amount var/novariants = TRUE //Determines whether the item should update it's sprites based on amount. - var/mats_per_stack = 0 + var/list/mats_per_unit //list that tells you how much is in a single unit. ///Datum material type that this stack is made of var/material_type //NOTE: When adding grind_results, the amounts should be for an INDIVIDUAL ITEM - these amounts will be multiplied by the stack size in on_grind() @@ -47,8 +47,11 @@ if(!merge_type) merge_type = type if(custom_materials && custom_materials.len) + mats_per_unit = list() + var/in_process_mat_list = custom_materials.Copy() for(var/i in custom_materials) - custom_materials[SSmaterials.GetMaterialRef(i)] = mats_per_stack * amount + mats_per_unit[SSmaterials.GetMaterialRef(i)] = in_process_mat_list[i] + custom_materials[i] *= amount . = ..() if(merge) for(var/obj/item/stack/S in loc) @@ -60,7 +63,7 @@ var/datum/material/M = SSmaterials.GetMaterialRef(material_type) //First/main material for(var/i in M.categories) switch(i) - if(MAT_CATEGORY_RIGID) + if(MAT_CATEGORY_BASE_RECIPES) var/list/temp = SSmaterials.rigid_stack_recipes.Copy() recipes += temp update_weight() @@ -309,16 +312,19 @@ /obj/item/stack/use(used, transfer = FALSE, check = TRUE) // return 0 = borked; return 1 = had enough if(check && zero_amount()) - return FALSE + return TRUE if (is_cyborg) return source.use_charge(used * cost) if (amount < used) return FALSE amount -= used - if(check) - zero_amount() - for(var/i in custom_materials) - custom_materials[i] = amount * mats_per_stack + if(check && zero_amount()) + return FALSE + if(length(mats_per_unit)) + var/temp_materials = custom_materials.Copy() + for(var/i in mats_per_unit) + temp_materials[i] = mats_per_unit[i] * src.amount + set_custom_materials(temp_materials) update_icon() update_weight() return TRUE @@ -350,10 +356,11 @@ source.add_charge(amount * cost) else src.amount += amount - if(custom_materials && custom_materials.len) - for(var/i in custom_materials) - custom_materials[SSmaterials.GetMaterialRef(i)] = MINERAL_MATERIAL_AMOUNT * src.amount - set_custom_materials() //Refresh + if(length(mats_per_unit)) + var/temp_materials = custom_materials.Copy() + for(var/i in mats_per_unit) + temp_materials[i] = mats_per_unit[i] * src.amount + set_custom_materials(temp_materials) update_icon() update_weight() diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 0635c55ca3..13fca1e8fe 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -9,16 +9,35 @@ throw_speed = 3 throw_range = 7 max_amount = 60 - mats_per_stack = 500 var/turf_type = null var/mineralType = null novariants = TRUE + var/human_maxHealth = 100 /obj/item/stack/tile/Initialize(mapload, amount) . = ..() pixel_x = rand(-3, 3) pixel_y = rand(-3, 3) //randomize a little +/obj/item/stack/tile/examine(mob/user) + . = ..() + if(throwforce && !is_cyborg) //do not want to divide by zero or show the message to borgs who can't throw + var/verb + switch(CEILING(human_maxHealth / throwforce, 1)) //throws to crit a human + if(1 to 3) + verb = "superb" + if(4 to 6) + verb = "great" + if(7 to 9) + verb = "good" + if(10 to 12) + verb = "fairly decent" + if(13 to 15) + verb = "mediocre" + if(!verb) + return + . += "Those could work as a [verb] throwing weapon." + /obj/item/stack/tile/attackby(obj/item/W, mob/user, params) if (istype(W, /obj/item/weldingtool)) @@ -470,7 +489,7 @@ /obj/item/stack/tile/plasteel name = "floor tile" singular_name = "floor tile" - desc = "Those could work as a pretty decent throwing weapon." + desc = "The ground you walk on." icon_state = "tile" force = 6 custom_materials = list(/datum/material/iron=500) @@ -482,7 +501,15 @@ resistance_flags = FIRE_PROOF /obj/item/stack/tile/plasteel/cyborg - desc = "The ground you walk on." //Not the usual floor tile desc as that refers to throwing, Cyborgs can't do that - RR custom_materials = null // All other Borg versions of items have no Metal or Glass - RR is_cyborg = 1 cost = 125 + +/obj/item/stack/tile/material + name = "floor tile" + singular_name = "floor tile" + desc = "The ground you walk on." + throwforce = 10 + icon_state = "material_tile" + turf_type = /turf/open/floor/material + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index ee515d321f..aac642a05e 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -444,4 +444,22 @@ STR.max_combined_w_class = 30 STR.max_items = 3 STR.display_numerical_stacking = FALSE - STR.can_hold = typecacheof(list(/obj/item/ammo_box/magazine, /obj/item/ammo_casing)) \ No newline at end of file + STR.can_hold = typecacheof(list(/obj/item/ammo_box/magazine, /obj/item/ammo_casing)) + +/obj/item/storage/bag/material + name = "material pouch" + desc = "A pouch for sheets and RCD ammunition that manages to hang where you would normally put things in your pocket." + icon = 'icons/obj/items_and_weapons.dmi' + icon_state = "materialpouch" + slot_flags = ITEM_SLOT_POCKET + w_class = WEIGHT_CLASS_BULKY + resistance_flags = FLAMMABLE + +/obj/item/storage/bag/material/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_w_class = WEIGHT_CLASS_NORMAL + STR.max_combined_w_class = INFINITY + STR.max_items = 2 + STR.display_numerical_stacking = TRUE + STR.can_hold = typecacheof(list(/obj/item/rcd_ammo, /obj/item/stack/sheet)) \ No newline at end of file diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index cacf361722..ff62b9cc48 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -170,7 +170,7 @@ qdel(src) return - if(S.sheettype && S.sheettype != "runed") + if(S.sheettype != "runed") var/M = S.sheettype if(state == GIRDER_DISPLACED) var/F = text2path("/obj/structure/falsewall/[M]") @@ -188,9 +188,13 @@ transfer_fingerprints_to(FW) qdel(src) else - var/F = text2path("/turf/closed/wall/mineral/[M]") + var/list/material_list + var/F = S.walltype if(!F) - return + F = /turf/closed/wall/material + if(S.material_type) + material_list = list() + material_list[SSmaterials.GetMaterialRef(S.material_type)] = MINERAL_MATERIAL_AMOUNT * 2 if(S.get_amount() < 2) to_chat(user, "You need at least two sheets to add plating!") return @@ -201,7 +205,9 @@ S.use(2) to_chat(user, "You add the plating.") var/turf/T = get_turf(src) - T.PlaceOnTop(F) + var/turf/newturf = T.PlaceOnTop(F) + if(material_list) + newturf.set_custom_materials(material_list) transfer_fingerprints_to(T) qdel(src) return diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 5eecc6962a..41e7c6c60f 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -157,8 +157,7 @@ secret_type = /obj/effect/spawner/lootdrop/prison_loot_toilet /obj/structure/toilet/greyscale - - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_EFFECTS buildstacktype = null /obj/structure/urinal @@ -582,6 +581,12 @@ G.use(1) return + if(istype(O, /obj/item/stack/ore/glass)) + new /obj/item/stack/sheet/sandblock(loc) + to_chat(user, "You wet the sand in the sink and form it into a block.") + O.use(1) + return + if(!istype(O)) return if(O.item_flags & ABSTRACT) //Abstract items like grabs won't wash. No-drop items will though because it's still technically an item in your hand. @@ -702,11 +707,6 @@ icon_state = "puddle" resistance_flags = UNACIDABLE -/obj/structure/sink/greyscale - icon_state = "sink_greyscale" - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR - buildstacktype = null - //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/structure/sink/puddle/attack_hand(mob/M) icon_state = "puddle-splash" @@ -722,7 +722,8 @@ qdel(src) /obj/structure/sink/greyscale - material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR + icon_state = "sink_greyscale" + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_EFFECTS buildstacktype = null //Shower Curtains// diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index e896f8072b..17031a51df 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -271,29 +271,27 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) air_update_turf(TRUE) update_nearby_icons() -/obj/structure/window/proc/spraycan_paint(paint_color) - if(color_hex2num(paint_color) < 255) - set_opacity(255) - else - set_opacity(initial(opacity)) - add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) - /obj/structure/window/proc/electrochromatic_dim() if(electrochromatic_status == ELECTROCHROMATIC_DIMMED) return electrochromatic_status = ELECTROCHROMATIC_DIMMED - animate(src, color = "#222222", time = 2) - set_opacity(TRUE) + var/current = color + add_atom_colour("#222222", FIXED_COLOUR_PRIORITY) + var/newcolor = color + if(color != current) + color = current + animate(src, color = newcolor, time = 2) /obj/structure/window/proc/electrochromatic_off() if(electrochromatic_status == ELECTROCHROMATIC_OFF) return electrochromatic_status = ELECTROCHROMATIC_OFF var/current = color - update_atom_colour() + remove_atom_colour(FIXED_COLOUR_PRIORITY, "#222222") var/newcolor = color - color = current - animate(src, color = newcolor, time = 2) + if(color != current) + color = current + animate(src, color = newcolor, time = 2) /obj/structure/window/proc/remove_electrochromatic() electrochromatic_off() @@ -348,11 +346,9 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup) GLOB.electrochromatic_window_lookup[electrochromatic_id] |= src /obj/structure/window/update_atom_colour() - if((electrochromatic_status != ELECTROCHROMATIC_OFF) && (electrochromatic_status != ELECTROCHROMATIC_DIMMED)) - return FALSE . = ..() - if(color && (color_hex2num(color) < 255)) - set_opacity(255) + if(electrochromatic_status == ELECTROCHROMATIC_DIMMED || (color && (color_hex2num(color) < 255))) + set_opacity(TRUE) else set_opacity(FALSE) diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 75603a1116..bdca384bd0 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -189,9 +189,12 @@ if(user && !silent) to_chat(user, "You remove the floor tile.") if(floor_tile && make_tile) - new floor_tile(src) + spawn_tile() return make_plating() +/turf/open/floor/proc/spawn_tile() + new floor_tile(src) + /turf/open/floor/singularity_pull(S, current_size) . = ..() switch(current_size) @@ -293,3 +296,13 @@ return TRUE return FALSE + +/turf/open/floor/material + name = "floor" + icon_state = "materialfloor" + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + +/turf/open/floor/material/spawn_tile() + for(var/i in custom_materials) + var/datum/material/M = i + new M.sheet_type(src, FLOOR(custom_materials[M] / MINERAL_MATERIAL_AMOUNT, 1)) diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 8e0eace9cd..f26a4b827a 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -76,11 +76,15 @@ var/obj/item/stack/tile/W = C if(!W.use(1)) return - var/turf/open/floor/T = PlaceOnTop(W.turf_type, flags = CHANGETURF_INHERIT_AIR) - if(istype(W, /obj/item/stack/tile/light)) //TODO: get rid of this ugly check somehow - var/obj/item/stack/tile/light/L = W - var/turf/open/floor/light/F = T - F.state = L.state + if(istype(W, /obj/item/stack/tile/material)) + var/turf/newturf = PlaceOnTop(/turf/open/floor/material, flags = CHANGETURF_INHERIT_AIR) + newturf.set_custom_materials(W.custom_materials) + else if(W.turf_type) + var/turf/open/floor/T = PlaceOnTop(W.turf_type, flags = CHANGETURF_INHERIT_AIR) + if(istype(W, /obj/item/stack/tile/light)) //TODO: get rid of this ugly check somehow + var/obj/item/stack/tile/light/L = W + var/turf/open/floor/light/F = T + F.state = L.state playsound(src, 'sound/weapons/genhit.ogg', 50, 1) else to_chat(user, "This section is too damaged to support a tile! Use a welder to fix the damage.") diff --git a/code/game/turfs/simulated/wall/material_walls.dm b/code/game/turfs/simulated/wall/material_walls.dm new file mode 100644 index 0000000000..d3952609e0 --- /dev/null +++ b/code/game/turfs/simulated/wall/material_walls.dm @@ -0,0 +1,22 @@ +/turf/closed/wall/material + name = "wall" + desc = "A huge chunk of material used to separate rooms." + icon = 'icons/turf/walls/materialwall.dmi' + icon_state = "wall" + canSmoothWith = list(/turf/closed/wall/material) + smooth = SMOOTH_TRUE + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + +/turf/closed/wall/material/break_wall() + for(var/i in custom_materials) + var/datum/material/M = i + new M.sheet_type(src, FLOOR(custom_materials[M] / MINERAL_MATERIAL_AMOUNT, 1)) + return new girder_type(src) + +/turf/closed/wall/material/devastate_wall() + for(var/i in custom_materials) + var/datum/material/M = i + new M.sheet_type(src, FLOOR(custom_materials[M] / MINERAL_MATERIAL_AMOUNT, 1)) + +/turf/closed/wall/material/mat_update_desc(mat) + desc = "A huge chunk of [mat] used to separate rooms." diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 88f6dd6962..5db289bd31 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -85,6 +85,9 @@ if (opacity) has_opaque_atom = TRUE + // apply materials properly from the default custom_materials value + set_custom_materials(custom_materials) + ComponentInitialize() return INITIALIZE_HINT_NORMAL diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm index 24149e7e6c..4f518b7f8e 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm @@ -234,3 +234,7 @@ for(var/turf/T in v) . += T return pick(.) + +/proc/__nan() + var/list/L = json_decode("{\"value\":NaN}") + return L["value"] diff --git a/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm b/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm index 640c53946f..25de64fe34 100644 --- a/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm +++ b/code/modules/antagonists/bloodsucker/items/bloodsucker_organs.dm @@ -31,10 +31,6 @@ beating = 0 var/fakingit = 0 -/obj/item/organ/heart/vampheart/prepare_eat() - ..() - // Do cool stuff for eating vamp heart? - /obj/item/organ/heart/vampheart/Restart() beating = 0 // DONT run ..(). We don't want to start beating again. return 0 diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 35639bfd97..3267f2bdc1 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -397,20 +397,31 @@ escape_objective_possible = FALSE break var/changeling_objective = rand(1,3) + var/generic_absorb_objective = FALSE + var/multiple_lings = length(get_antag_minds(/datum/antagonist/changeling,TRUE)) > 1 switch(changeling_objective) if(1) - var/datum/objective/absorb/absorb_objective = new - absorb_objective.owner = owner - absorb_objective.gen_amount_goal(6, 8) - objectives += absorb_objective + generic_absorb_objective = TRUE if(2) - var/datum/objective/absorb_changeling/ac = new - ac.owner = owner - objectives += ac + if(multiple_lings) + var/datum/objective/absorb_changeling/ac = new + ac.owner = owner + objectives += ac + else + generic_absorb_objective = TRUE if(3) - var/datum/objective/absorb_most/ac = new - ac.owner = owner - objectives += ac + if(multiple_lings) + var/datum/objective/absorb_most/ac = new + ac.owner = owner + objectives += ac + else + generic_absorb_objective = TRUE + + if(generic_absorb_objective) + var/datum/objective/absorb/absorb_objective = new + absorb_objective.owner = owner + absorb_objective.gen_amount_goal(6, 8) + objectives += absorb_objective if(prob(60)) if(prob(85)) diff --git a/code/modules/antagonists/changeling/powers/spiders.dm b/code/modules/antagonists/changeling/powers/spiders.dm index 6bd15fea92..69900ea8f9 100644 --- a/code/modules/antagonists/changeling/powers/spiders.dm +++ b/code/modules/antagonists/changeling/powers/spiders.dm @@ -1,7 +1,7 @@ /obj/effect/proc_holder/changeling/spiders name = "Spread Infestation" desc = "Our form divides, creating arachnids which will grow into deadly beasts." - helptext = "The spiders are thoughtless creatures, and may attack their creators when fully grown. Requires at least 3 DNA gained through Absorb, and not through DNA sting. This ability is very loud, and will guarantee that our blood will react violently to heat." + helptext = "The spiders are thoughtless creatures, and may attack their creators when fully grown. Requires at least 3 DNA gained through Absorb (regardless of current amount), and not through DNA sting. This ability is very loud, and will guarantee that our blood will react violently to heat." chemical_cost = 45 dna_cost = 1 loudness = 4 diff --git a/code/modules/arousal/genitals.dm b/code/modules/arousal/genitals.dm index fb254a2dcc..4d2e5e6fef 100644 --- a/code/modules/arousal/genitals.dm +++ b/code/modules/arousal/genitals.dm @@ -1,7 +1,7 @@ /obj/item/organ/genital color = "#fcccb3" w_class = WEIGHT_CLASS_SMALL - organ_flags = ORGAN_NO_DISMEMBERMENT + organ_flags = ORGAN_NO_DISMEMBERMENT|ORGAN_EDIBLE var/shape var/sensitivity = 1 // wow if this were ever used that'd be cool but it's not but i'm keeping it for my unshit code var/genital_flags //see citadel_defines.dm diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 802dd7265e..447a531717 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -18,6 +18,7 @@ mutantrace_variation = STYLE_DIGITIGRADE var/last_bloodtype = "" //used to track the last bloodtype to have graced these shoes; makes for better performing footprint shenanigans var/last_blood_DNA = "" //same as last one + var/last_blood_color = "" /obj/item/clothing/shoes/ComponentInitialize() . = ..() @@ -48,6 +49,7 @@ if(blood_dna.len) last_bloodtype = blood_dna[blood_dna[blood_dna.len]]//trust me this works last_blood_DNA = blood_dna[blood_dna.len] + last_blood_color = blood_dna["color"] /obj/item/clothing/shoes/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) . = ..() diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm index 203eb3eef6..f83a1222fd 100644 --- a/code/modules/food_and_drinks/food.dm +++ b/code/modules/food_and_drinks/food.dm @@ -6,7 +6,6 @@ /// get_random_food proc. //////////////////////////////////////////////////////////////////////////////// -#define STOP_SERVING_BREAKFAST (15 MINUTES) /obj/item/reagent_containers/food possible_transfer_amounts = list() @@ -51,5 +50,3 @@ if((foodtype & BREAKFAST) && world.time - SSticker.round_start_time < STOP_SERVING_BREAKFAST) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "breakfast", /datum/mood_event/breakfast) last_check_time = world.time - -#undef STOP_SERVING_BREAKFAST diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm index b8fa64a7bc..a35dcc1dc4 100644 --- a/code/modules/food_and_drinks/food/snacks/meat.dm +++ b/code/modules/food_and_drinks/food/snacks/meat.dm @@ -1,6 +1,7 @@ /obj/item/reagent_containers/food/snacks/meat var/subjectname = "" var/subjectjob = null + custom_materials = list(/datum/material/meat = MINERAL_MATERIAL_AMOUNT * 4) /obj/item/reagent_containers/food/snacks/meat/slab name = "meat" diff --git a/code/modules/food_and_drinks/food/snacks_pizza.dm b/code/modules/food_and_drinks/food/snacks_pizza.dm index ebc67a28c1..f30c182963 100644 --- a/code/modules/food_and_drinks/food/snacks_pizza.dm +++ b/code/modules/food_and_drinks/food/snacks_pizza.dm @@ -10,6 +10,17 @@ tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1) foodtype = GRAIN | DAIRY | VEGETABLES +/obj/item/reagent_containers/food/snacks/pizzaslice/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/kitchen/rollingpin)) + if(!isturf(loc)) + to_chat(user, "You need to put [src] on a surface to roll it out!") + return + new /obj/item/stack/sheet/pizza(loc) + to_chat(user, "You smoosh [src] into a cheesy sheet.") + qdel(src) + return + return ..() + /obj/item/reagent_containers/food/snacks/pizzaslice icon = 'icons/obj/food/pizzaspaghetti.dmi' list_reagents = list(/datum/reagent/consumable/nutriment = 5) diff --git a/code/modules/integrated_electronics/subtypes/weaponized.dm b/code/modules/integrated_electronics/subtypes/weaponized.dm index 3123eeabbe..f7dea13052 100644 --- a/code/modules/integrated_electronics/subtypes/weaponized.dm +++ b/code/modules/integrated_electronics/subtypes/weaponized.dm @@ -81,7 +81,7 @@ to_chat(user, "There's no weapon to remove from the mechanism.") /obj/item/integrated_circuit/weaponized/weapon_firing/do_work() - if(!assembly || !installed_gun) + if(!assembly || !installed_gun || !installed_gun.can_shoot()) return if(isliving(assembly.loc)) var/mob/living/L = assembly.loc diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm index 439929b9c1..1de3a86702 100644 --- a/code/modules/mining/equipment/regenerative_core.dm +++ b/code/modules/mining/equipment/regenerative_core.dm @@ -111,9 +111,6 @@ go_inert() return ..() -/obj/item/organ/regenerative_core/prepare_eat() - return null - /*************************Legion core********************/ /obj/item/organ/regenerative_core/legion desc = "A strange rock that crackles with power. It can be used to heal completely, but it will rapidly decay into uselessness." diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index f6b7110803..f429230453 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -17,7 +17,6 @@ var/points = 0 //How many points this ore gets you from the ore redemption machine var/refined_type = null //What this ore defaults to being refined into novariants = TRUE // Ore stacks handle their icon updates themselves to keep the illusion that there's more going - mats_per_stack = MINERAL_MATERIAL_AMOUNT var/list/stack_overlays /obj/item/stack/ore/update_overlays() diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 612358e802..8ca4e6a0e4 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -188,7 +188,7 @@ blood_data["viruses"] += D.Copy() blood_data["blood_DNA"] = dna.unique_enzymes - blood_data["bloodcolor"] = bloodtype_to_color(dna.blood_type) + blood_data["bloodcolor"] = dna.species.exotic_blood_color if(disease_resistances && disease_resistances.len) blood_data["resistances"] = disease_resistances.Copy() var/list/temp_chem = list() diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 687442c1f8..4fda02317e 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -76,9 +76,6 @@ REMOVE_SKILL_MODIFIER_BODY(/datum/skill_modifier/heavy_brain_damage, null, C) C.update_hair() -/obj/item/organ/brain/prepare_eat() - return // Too important to eat. - /obj/item/organ/brain/proc/transfer_identity(mob/living/L) name = "[L.name]'s brain" if(brainmob) diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm index 8485fece85..8e3966eb03 100644 --- a/code/modules/mob/living/carbon/alien/organs.dm +++ b/code/modules/mob/living/carbon/alien/organs.dm @@ -1,7 +1,8 @@ /obj/item/organ/alien icon_state = "xgibmid2" + food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/toxin/acid = 10) var/list/alien_powers = list() - organ_flags = ORGAN_NO_SPOIL + organ_flags = ORGAN_NO_SPOIL|ORGAN_EDIBLE /obj/item/organ/alien/Initialize() . = ..() @@ -26,12 +27,6 @@ owner.RemoveAbility(P) ..() -/obj/item/organ/alien/prepare_eat() - var/obj/S = ..() - S.reagents.add_reagent(/datum/reagent/toxin/acid, 10) - return S - - /obj/item/organ/alien/plasmavessel name = "plasma vessel" icon_state = "plasma" @@ -39,17 +34,13 @@ zone = BODY_ZONE_CHEST slot = "plasmavessel" alien_powers = list(/obj/effect/proc_holder/alien/plant, /obj/effect/proc_holder/alien/transfer) + food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/toxin/plasma = 10) var/storedPlasma = 100 var/max_plasma = 250 var/heal_rate = 5 var/plasma_rate = 10 -/obj/item/organ/alien/plasmavessel/prepare_eat() - var/obj/S = ..() - S.reagents.add_reagent(/datum/reagent/toxin/plasma, storedPlasma/10) - return S - /obj/item/organ/alien/plasmavessel/large name = "large plasma vessel" icon_state = "plasma_large" diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 9bb50bdf42..bb92eb79bd 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -4,6 +4,7 @@ name = "alien embryo" icon = 'icons/mob/alien.dmi' icon_state = "larva0_dead" + food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/toxin/acid = 10) var/stage = 0 var/bursting = FALSE @@ -16,11 +17,6 @@ if(prob(10)) AttemptGrow(0) -/obj/item/organ/body_egg/alien_embryo/prepare_eat() - var/obj/S = ..() - S.reagents.add_reagent(/datum/reagent/toxin/acid, 10) - return S - /obj/item/organ/body_egg/alien_embryo/on_life() . = ..() if(!owner) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 4421c383e6..4166069833 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -982,7 +982,7 @@ if(target.incapacitated(FALSE, TRUE) || incapacitated(FALSE, TRUE)) target.visible_message("[target] can't hang onto [src]!") return - buckle_mob(target, TRUE, TRUE, FALSE, 0, 2, FALSE) + buckle_mob(target, TRUE, TRUE, FALSE, 1, 2, FALSE) else visible_message("[target] fails to climb onto [src]!") else diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 63ca3f372e..52027e7494 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -77,7 +77,7 @@ var/turf/T = get_turf(src) if(S.bloody_shoes && S.bloody_shoes[S.blood_state]) var/obj/effect/decal/cleanable/blood/footprints/oldFP = locate(/obj/effect/decal/cleanable/blood/footprints) in T - if(oldFP && (oldFP.blood_state == S.blood_state && oldFP.color == bloodtype_to_color(S.last_bloodtype))) + if(oldFP && (oldFP.blood_state == S.blood_state && oldFP.color == S.last_blood_color)) return S.bloody_shoes[S.blood_state] = max(0, S.bloody_shoes[S.blood_state] - BLOOD_LOSS_PER_STEP) var/obj/effect/decal/cleanable/blood/footprints/FP = new /obj/effect/decal/cleanable/blood/footprints(T) @@ -86,6 +86,7 @@ FP.bloodiness = S.bloody_shoes[S.blood_state] if(S.last_bloodtype) FP.blood_DNA += list(S.last_blood_DNA = S.last_bloodtype) + FP.blood_DNA["colors"] += S.last_blood_color FP.update_icon() update_inv_shoes() //End bloody footprints diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index f256345c68..f7ba185800 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -39,6 +39,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/use_skintones = NO_SKINTONES // does it use skintones or not? (spoiler alert this is only used by humans) var/exotic_blood = "" // If your race wants to bleed something other than bog standard blood, change this to reagent id. var/exotic_bloodtype = "" //If your race uses a non standard bloodtype (A+, O-, AB-, etc) + var/exotic_blood_color = BLOOD_COLOR_HUMAN //assume human as the default blood colour, override this default by species subtypes var/meat = /obj/item/reagent_containers/food/snacks/meat/slab/human //What the species drops on gibbing var/list/gib_types = list(/obj/effect/gibspawner/human, /obj/effect/gibspawner/human/bodypartless) var/skinned_type diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm index 595a83de9b..a79f9e2392 100644 --- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm @@ -15,6 +15,7 @@ disliked_food = TOXIC icon_limbs = DEFAULT_BODYPART_ICON_CITADEL exotic_bloodtype = "BUG" + exotic_blood_color = BLOOD_COLOR_BUG /datum/species/insect/spec_death(gibbed, mob/living/carbon/human/H) if(H) diff --git a/code/modules/mob/living/carbon/human/species_types/dwarves.dm b/code/modules/mob/living/carbon/human/species_types/dwarves.dm index bc5f198b4d..7ca057711e 100644 --- a/code/modules/mob/living/carbon/human/species_types/dwarves.dm +++ b/code/modules/mob/living/carbon/human/species_types/dwarves.dm @@ -89,11 +89,7 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) // //These count in on_life ticks which should be 2 seconds per every increment of 1 in a perfect world. var/dwarf_eth_ticker = 0 //Currently set =< 1, that means this will fire the proc around every 2 seconds var/last_alcohol_spam - -/obj/item/organ/dwarfgland/prepare_eat() - var/obj/S = ..() - S.reagents.add_reagent(/datum/reagent/consumable/ethanol, stored_alcohol/10) - return S + food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/ethanol = 10) /obj/item/organ/dwarfgland/on_life() //Primary loop to hook into to start delayed loops for other loops.. . = ..() diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index ee4ef83a44..dbf097196d 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -11,6 +11,7 @@ disliked_food = null liked_food = GROSS exotic_bloodtype = "BUG" + exotic_blood_color = BLOOD_COLOR_BUG /datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) if(istype(chem, /datum/reagent/toxin/pestkiller)) diff --git a/code/modules/mob/living/carbon/human/species_types/ipc.dm b/code/modules/mob/living/carbon/human/species_types/ipc.dm index 94d5456c3d..96efaebd74 100644 --- a/code/modules/mob/living/carbon/human/species_types/ipc.dm +++ b/code/modules/mob/living/carbon/human/species_types/ipc.dm @@ -20,6 +20,7 @@ mutanteyes = /obj/item/organ/eyes/ipc exotic_bloodtype = "HF" + exotic_blood_color = BLOOD_COLOR_OIL var/datum/action/innate/monitor_change/screen diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 5bdc0bbb39..934bbddfe1 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -13,6 +13,7 @@ gib_types = list(/obj/effect/gibspawner/slime, /obj/effect/gibspawner/slime/bodypartless) exotic_blood = /datum/reagent/blood/jellyblood exotic_bloodtype = "GEL" + exotic_blood_color = "BLOOD_COLOR_SLIME" damage_overlay_type = "" var/datum/action/innate/regenerate_limbs/regenerate_limbs var/datum/action/innate/slime_change/slime_change //CIT CHANGE @@ -41,6 +42,10 @@ slime_change.Grant(C) //CIT CHANGE C.faction |= "slime" +/datum/species/jelly/handle_mutant_bodyparts(mob/living/carbon/human/H) + //update blood color to body color + H.dna.species.exotic_blood_color = "#" + H.dna.features["mcolor"] + /datum/species/jelly/spec_life(mob/living/carbon/human/H) if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for blooduskers return diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 196073773b..c42e0bf175 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -21,6 +21,7 @@ gib_types = list(/obj/effect/gibspawner/lizard, /obj/effect/gibspawner/lizard/bodypartless) skinned_type = /obj/item/stack/sheet/animalhide/lizard exotic_bloodtype = "L" + exotic_blood_color = BLOOD_COLOR_LIZARD disliked_food = GRAIN | DAIRY liked_food = GROSS | MEAT inert_mutation = FIREBREATH diff --git a/code/modules/mob/living/carbon/human/species_types/synthliz.dm b/code/modules/mob/living/carbon/human/species_types/synthliz.dm index 408d264546..af2e83ee0f 100644 --- a/code/modules/mob/living/carbon/human/species_types/synthliz.dm +++ b/code/modules/mob/living/carbon/human/species_types/synthliz.dm @@ -18,7 +18,7 @@ mutanteyes = /obj/item/organ/eyes/ipc exotic_bloodtype = "S" - + exotic_blood_color = BLOOD_COLOR_OIL /datum/species/synthliz/qualifies_for_rank(rank, list/features) return TRUE diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 4899067d7b..1a796fb2bc 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -68,7 +68,7 @@ var/dam_colors = "#E62525" if(ishuman(src)) var/mob/living/carbon/human/H = src - dam_colors = bloodtype_to_color(H.dna.blood_type) + dam_colors = H.dna.species.exotic_blood_color var/mutable_appearance/damage_overlay = mutable_appearance('icons/mob/dam_mob.dmi', "blank", -DAMAGE_LAYER, color = dam_colors) overlays_standing[DAMAGE_LAYER] = damage_overlay diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index cb43a8489a..9e1e7a1b89 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -128,7 +128,7 @@ S.source = get_or_create_estorage(/datum/robot_energy_storage/wrapping_paper) if(S && S.source) - S.custom_materials = null + S.set_custom_materials(null) S.is_cyborg = 1 if(I.loc != src) diff --git a/code/modules/mob/living/simple_animal/friendly/panda.dm b/code/modules/mob/living/simple_animal/friendly/panda.dm index 7e523fea83..b3e8c1438f 100644 --- a/code/modules/mob/living/simple_animal/friendly/panda.dm +++ b/code/modules/mob/living/simple_animal/friendly/panda.dm @@ -21,3 +21,6 @@ response_harm_simple = "kick" gold_core_spawnable = FRIENDLY_SPAWN footstep_type = FOOTSTEP_MOB_CLAW + +/mob/living/simple_animal/pet/redpanda/stinky + name = "Stinky" diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 8ebddaa24f..9ea030da99 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -114,11 +114,13 @@ /obj/item/ammo_box/update_icon() . = ..() desc = "[initial(desc)] There [stored_ammo.len == 1 ? "is" : "are"] [stored_ammo.len] shell\s left!" - for (var/material in bullet_cost) - var/material_amount = bullet_cost[material] - material_amount = (material_amount*stored_ammo.len) + base_cost[material] - custom_materials[material] = material_amount - set_custom_materials(custom_materials)//make sure we setup the correct properties again + if(length(bullet_cost)) + var/temp_materials = custom_materials.Copy() + for (var/material in bullet_cost) + var/material_amount = bullet_cost[material] + material_amount = (material_amount*stored_ammo.len) + base_cost[material] + temp_materials[material] = material_amount + set_custom_materials(temp_materials) /obj/item/ammo_box/update_icon_state() switch(multiple_sprites) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 49c069ca62..0c723199a1 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -34,13 +34,6 @@ righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' ammo_type = list(/obj/item/ammo_casing/energy/kinetic/premium) -/obj/item/gun/energy/kinetic_accelerator/premiumka/dropped(mob/user) - . = ..() - if(!QDELING(src) && !holds_charge) - // Put it on a delay because moving item from slot to hand - // calls dropped(). - addtimer(CALLBACK(src, .proc/empty_if_not_held), 1.60) - /obj/item/ammo_casing/energy/kinetic/premium projectile_type = /obj/item/projectile/kinetic/premium @@ -151,7 +144,7 @@ addtimer(CALLBACK(src, .proc/empty_if_not_held), 2) /obj/item/gun/energy/kinetic_accelerator/proc/empty_if_not_held() - if(!ismob(loc)) + if(!ismob(loc) && !istype(loc, /obj/item/integrated_circuit)) empty() /obj/item/gun/energy/kinetic_accelerator/proc/empty() diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index f279047356..7c988ca730 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -239,7 +239,7 @@ else if(ishuman(target)) var/mob/living/carbon/human/H = target - new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir, bloodtype_to_color(H.dna.blood_type)) + new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir, H.dna.species.exotic_blood_color) else new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir, bloodtype_to_color()) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 117748afc0..93842a16c2 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -70,6 +70,8 @@ B = new(T) if(data["blood_DNA"]) B.blood_DNA[data["blood_DNA"]] = data["blood_type"] + if(!B.blood_DNA["color"]) + B.blood_DNA["color"] = list(data["bloodcolor"]) if(B.reagents) B.reagents.add_reagent(type, reac_volume) B.update_icon() @@ -77,7 +79,7 @@ /datum/reagent/blood/on_new(list/data) if(istype(data)) SetViruses(src, data) - color = bloodtype_to_color(data["blood_type"]) + color = data["bloodcolor"] if(data["blood_type"] == "SY") name = "Synthetic Blood" taste_description = "oil" diff --git a/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm b/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm index 804556cb04..e0702be689 100644 --- a/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm +++ b/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm @@ -154,3 +154,12 @@ build_path = /obj/item/circuitboard/machine/shuttle/heater category = list ("Shuttle Machinery") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/board/sheetifier + name = "Sheetifier" + desc = "This machine turns weird things into sheets." + id = "sheetifier" + build_path = /obj/item/circuitboard/machine/sheetifier + category = list ("Misc. Machinery") + departmental_flags = DEPARTMENTAL_FLAG_ALL + diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index a5df3f4d12..5a50120833 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -96,7 +96,7 @@ for(var/i in 1 to amount) var/obj/O = new path(get_turf(src)) if(efficient_with(O.type)) - O.set_custom_materials(matlist.Copy()) + O.set_custom_materials(matlist) O.rnd_crafted(src) SSblackbox.record_feedback("nested tally", "item_printed", amount, list("[type]", "[path]")) investigate_log("[key_name(user)] built [amount] of [path] at [src]([type]).", INVESTIGATE_RESEARCH) diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index 503bd8bae7..a0f0c651f0 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -24,10 +24,10 @@ var/list/tiers = list() //Assoc list, id = number, 1 is available, 2 is all reqs are 1, so on /datum/techweb/New() + hidden_nodes = SSresearch.techweb_nodes_hidden.Copy() for(var/i in SSresearch.techweb_nodes_starting) var/datum/techweb_node/DN = SSresearch.techweb_node_by_id(i) research_node(DN, TRUE, FALSE) - hidden_nodes = SSresearch.techweb_nodes_hidden.Copy() return ..() /datum/techweb/admin diff --git a/code/modules/research/techweb/nodes/engineering_nodes.dm b/code/modules/research/techweb/nodes/engineering_nodes.dm index eac8c2faf2..d024823c85 100644 --- a/code/modules/research/techweb/nodes/engineering_nodes.dm +++ b/code/modules/research/techweb/nodes/engineering_nodes.dm @@ -16,7 +16,9 @@ display_name = "Advanced Engineering" description = "Pushing the boundaries of physics, one chainsaw-fist at a time." prereq_ids = list("engineering", "emp_basic") - design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask" , "rcd_loaded", "rpd", "tray_goggles_prescription", "engine_goggles_prescription", "mesons_prescription", "rcd_upgrade_frames", "rcd_upgrade_simple_circuits", "rcd_ammo_large") + design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask" , "rcd_loaded", "rpd", + "tray_goggles_prescription", "engine_goggles_prescription", "mesons_prescription", "rcd_upgrade_frames", + "rcd_upgrade_simple_circuits", "rcd_ammo_large", "sheetifier") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) /datum/techweb_node/anomaly diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index f493137424..4ce51ae119 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -61,7 +61,7 @@ time = 64 name = "manipulate organs" repeatable = 1 - implements = list(/obj/item/organ = 100, /obj/item/reagent_containers/food/snacks/organ = 0, /obj/item/organ_storage = 100) + implements = list(/obj/item/organ = 100, /obj/item/organ_storage = 100) var/implements_extract = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 55) var/current_type var/obj/item/organ/I = null @@ -85,6 +85,10 @@ if(target_zone != I.zone || target.getorganslot(I.slot)) to_chat(user, "There is no room for [I] in [target]'s [parse_zone(target_zone)]!") return -1 + var/obj/item/organ/meatslab = tool + if(!meatslab.useable) + to_chat(user, "[I] seems to have been chewed on, you can't use this!") + return -1 display_results(user, target, "You begin to insert [tool] into [target]'s [parse_zone(target_zone)]...", "[user] begins to insert [tool] into [target]'s [parse_zone(target_zone)].", "[user] begins to insert something into [target]'s [parse_zone(target_zone)].") @@ -111,9 +115,6 @@ else return -1 - else if(istype(tool, /obj/item/reagent_containers/food/snacks/organ)) - to_chat(user, "[tool] was bitten by someone! It's too damaged to use!") - return -1 /datum/surgery_step/manipulate_organs/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) if(current_type == "insert") if(istype(tool, /obj/item/organ_storage)) diff --git a/code/modules/surgery/organs/appendix.dm b/code/modules/surgery/organs/appendix.dm index c737e8bc30..782991d79c 100644 --- a/code/modules/surgery/organs/appendix.dm +++ b/code/modules/surgery/organs/appendix.dm @@ -37,9 +37,3 @@ ..() if(inflamed) M.ForceContractDisease(new /datum/disease/appendicitis(), FALSE, TRUE) - -/obj/item/organ/appendix/prepare_eat() - var/obj/S = ..() - if(inflamed) - S.reagents.add_reagent(/datum/reagent/toxin/bad_food, 5) - return S diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 465c10c4cd..e251abfd35 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -61,10 +61,10 @@ return "a healthy" return "an unstable" -/obj/item/organ/heart/prepare_eat() - var/obj/S = ..() - S.icon_state = "[icon_base]-off" - return S +/obj/item/organ/heart/OnEatFrom(eater, feeder) + . = ..() + beating = FALSE + update_icon() /obj/item/organ/heart/on_life() . = ..() diff --git a/code/modules/surgery/organs/liver.dm b/code/modules/surgery/organs/liver.dm index b24034ca4a..2465b63800 100755 --- a/code/modules/surgery/organs/liver.dm +++ b/code/modules/surgery/organs/liver.dm @@ -23,6 +23,7 @@ var/toxLethality = LIVER_DEFAULT_TOX_LETHALITY//affects how much damage toxins do to the liver var/filterToxins = TRUE //whether to filter toxins var/cachedmoveCalc = 1 + food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/iron = 5) /obj/item/organ/liver/on_life() . = ..() @@ -44,11 +45,6 @@ if(damage > 10 && prob(damage/3))//the higher the damage the higher the probability to_chat(owner, "You feel a dull pain in your abdomen.") -/obj/item/organ/liver/prepare_eat() - var/obj/S = ..() - S.reagents.add_reagent(/datum/reagent/iron, 5) - return S - /obj/item/organ/liver/applyOrganDamage(d, maximum = maxHealth) . = ..() if(!. || QDELETED(owner)) diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index b3020ae13f..949eef62d0 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -24,6 +24,8 @@ now_fixed = "Your lungs seem to once again be able to hold air." high_threshold_cleared = "The constriction around your chest loosens as your breathing calms down." + food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/medicine/salbutamol = 5) + //Breath damage var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa @@ -458,11 +460,6 @@ else if(!(organ_flags & ORGAN_FAILING)) failed = FALSE -/obj/item/organ/lungs/prepare_eat() - var/obj/S = ..() - S.reagents.add_reagent(/datum/reagent/medicine/salbutamol, 5) - return S - /obj/item/organ/lungs/ipc name = "ipc lungs" icon_state = "lungs-c" diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 761ebc17a2..0378340117 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -8,7 +8,7 @@ var/zone = BODY_ZONE_CHEST var/slot // DO NOT add slots with matching names to different zones - it will break internal_organs_slot list! - var/organ_flags = NONE + var/organ_flags = ORGAN_EDIBLE var/maxHealth = STANDARD_ORGAN_THRESHOLD var/damage = 0 //total damage this organ has sustained ///Healing factor and decay factor function on % of maxhealth, and do not work by applying a static number per tick @@ -25,7 +25,23 @@ var/now_fixed var/high_threshold_cleared var/low_threshold_cleared - rad_flags = RAD_NO_CONTAMINATE + + ///When you take a bite you cant jam it in for surgery anymore. + var/useable = TRUE + var/list/food_reagents = list(/datum/reagent/consumable/nutriment = 5) + +/obj/item/organ/Initialize() + . = ..() + if(organ_flags & ORGAN_EDIBLE) + AddComponent(/datum/component/edible, food_reagents, null, RAW | MEAT | GROSS, null, 10, null, null, null, CALLBACK(src, .proc/OnEatFrom)) + START_PROCESSING(SSobj, src) + +/obj/item/organ/Destroy() + if(owner) + // The special flag is important, because otherwise mobs can die + // while undergoing transformation into different mobs. + Remove(TRUE) + return ..() /obj/item/organ/proc/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE) if(!iscarbon(M) || owner == M) @@ -157,47 +173,8 @@ if(damage > high_threshold) . += "[src] is starting to look discolored." - -/obj/item/organ/proc/prepare_eat() - var/obj/item/reagent_containers/food/snacks/organ/S = new - S.name = name - S.desc = desc - S.icon = icon - S.icon_state = icon_state - S.w_class = w_class - - return S - -/obj/item/reagent_containers/food/snacks/organ - name = "appendix" - icon_state = "appendix" - icon = 'icons/obj/surgery.dmi' - list_reagents = list(/datum/reagent/consumable/nutriment = 5) - foodtype = RAW | MEAT | GROSS - - -/obj/item/organ/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/organ/Destroy() - if(owner) - // The special flag is important, because otherwise mobs can die - // while undergoing transformation into different mobs. - Remove(TRUE) - return ..() - -/obj/item/organ/attack(mob/living/carbon/M, mob/user) - if(M == user && ishuman(user)) - var/mob/living/carbon/human/H = user - if(status == ORGAN_ORGANIC) - var/obj/item/reagent_containers/food/snacks/S = prepare_eat() - if(S) - qdel(src) - if(H.put_in_active_hand(S)) - S.attack(H, H) - else - ..() +/obj/item/organ/proc/OnEatFrom(eater, feeder) + useable = FALSE //You can't use it anymore after eating it you spaztic /obj/item/organ/item_action_slot_check(slot,mob/user) return //so we don't grant the organ's action to mobs who pick up the organ. diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index f8547dda6e..1c4a2d3043 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -252,6 +252,7 @@ name = "robotic voicebox" desc = "A voice synthesizer that can interface with organic lifeforms." status = ORGAN_ROBOTIC + organ_flags = ORGAN_NO_SPOIL icon_state = "tonguerobot" say_mod = "states" attack_verb = list("beeped", "booped") diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm index 50e0fb9cde..33ed831cc3 100644 --- a/code/modules/vending/engivend.dm +++ b/code/modules/vending/engivend.dm @@ -25,7 +25,8 @@ ) premium = list(/obj/item/storage/belt/utility = 3, /obj/item/storage/box/smart_metal_foam = 3, - /obj/item/rcd_ammo/large = 5 + /obj/item/rcd_ammo/large = 5, + /obj/item/storage/bag/material = 3 ) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) refill_canister = /obj/item/vending_refill/engivend diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index 35e4b3232a..8ad4b0568c 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -15,8 +15,7 @@ /obj/item/secbat = 5) contraband = list(/obj/item/clothing/glasses/sunglasses = 2, /obj/item/storage/fancy/donut_box = 2, - /obj/item/ssword_kit = 1, - /obj/item/storage/bag/ammo = 1) + /obj/item/ssword_kit = 1) premium = list(/obj/item/coin/antagtoken = 1, /obj/item/clothing/head/helmet/blueshirt = 1, /obj/item/clothing/suit/armor/vest/blueshirt = 1, @@ -24,7 +23,7 @@ /obj/item/clothing/gloves/tackler = 5, /obj/item/grenade/stingbang = 1, /obj/item/ssword_kit = 1, - /obj/item/storage/bag/ammo = 2) + /obj/item/storage/bag/ammo = 3) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/security diff --git a/html/changelog.html b/html/changelog.html index 16a0ca4665..1caffaf20d 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,56 @@ -->
+

28 June 2020

+

Detective-Google updated:

+ +

Ghommie updated:

+ +

Ghommie porting PRs by Qustinnus/Floyd, Willow, cacogen, nemvar, Ghilker and EOBGames (Inept) updated:

+ +

MrJWhit updated:

+ +

Putnam3145 updated:

+ +

b1tt3r1n0 updated:

+ +

timothyteakettle updated:

+ +

27 June 2020

Detective-Google updated: