diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index 474ef8eea83..f3ae95a673e 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -2840,6 +2840,11 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) +"mm" = ( +/obj/machinery/power/supermatter_crystal/shard, +/obj/structure/closet/crate/radiation, +/turf/open/floor/iron/white/textured, +/area/ruin/space/ancientstation/delta/proto) "mo" = ( /turf/open/floor/iron/white/corner{ dir = 1 @@ -3795,32 +3800,6 @@ /obj/effect/mapping_helpers/apc/away_general_access, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) -"rN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/glass, -/obj/item/reagent_containers/cup/bottle{ - pixel_x = 4; - list_reagents = list(/datum/reagent/growthserum=30); - name = "Experimental solution"; - renamedByPlayer = 1; - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/bottle{ - pixel_x = -4; - list_reagents = list(/datum/reagent/consumable/nutriment/peptides=30); - name = "Solution for Molly"; - renamedByPlayer = 1 - }, -/obj/item/reagent_containers/dropper{ - pixel_x = -7; - pixel_y = 10 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white/textured_edge, -/area/ruin/space/ancientstation/delta/biolab) "rP" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -5964,11 +5943,6 @@ /obj/machinery/duct, /turf/template_noop, /area/space/nearstation) -"HS" = ( -/obj/machinery/power/supermatter_crystal/shard, -/obj/structure/closet/crate/radiation, -/turf/open/floor/iron/white/textured, -/area/ruin/space/ancientstation/delta/proto) "HT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7737,6 +7711,30 @@ /obj/effect/mapping_helpers/airalarm/away_general_access, /turf/open/floor/iron/white/textured, /area/ruin/space/ancientstation/delta/proto) +"TH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/bottle{ + pixel_x = 4; + list_reagents = list(/datum/reagent/growthserum=30); + name = "Experimental solution"; + pixel_y = 8 + }, +/obj/item/reagent_containers/cup/bottle{ + pixel_x = -4; + list_reagents = list(/datum/reagent/consumable/nutriment/peptides=30); + name = "Solution for Molly" + }, +/obj/item/reagent_containers/dropper{ + pixel_x = -7; + pixel_y = 10 + }, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white/textured_edge, +/area/ruin/space/ancientstation/delta/biolab) "TI" = ( /obj/machinery/door/airlock/science, /obj/effect/decal/cleanable/dirt, @@ -14787,7 +14785,7 @@ bD Yr cD uj -HS +mm Oh uj Mx @@ -15299,7 +15297,7 @@ aa aa aa SU -rN +TH Pg zI uI diff --git a/_maps/RandomZLevels/SnowCabin.dmm b/_maps/RandomZLevels/SnowCabin.dmm index 9685c667d2c..2a23215766f 100644 --- a/_maps/RandomZLevels/SnowCabin.dmm +++ b/_maps/RandomZLevels/SnowCabin.dmm @@ -4459,7 +4459,7 @@ /obj/structure/signpost/salvation{ density = 0; desc = "An intercomm. Someone seems to be on the other end. I should use it."; - icon = 'icons/obj/radio.dmi'; + icon = 'icons/obj/device.dmi'; icon_state = "intercom"; max_integrity = 99999; name = "\proper Fun Jail intercom"; diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index 3b08b25111f..8d7b0590853 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -46,6 +46,10 @@ }, /turf/open/floor/iron, /area/station/security/tram) +"ach" = ( +/obj/machinery/netpod, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "acl" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/decal/cleanable/dirt, @@ -112,12 +116,6 @@ /obj/machinery/portable_atmospherics/canister, /turf/open/floor/plating, /area/station/engineering/atmos/project) -"adH" = ( -/obj/machinery/netpod, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "adL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -3931,6 +3929,30 @@ }, /turf/open/floor/iron, /area/station/security/processing) +"bCh" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/door/airlock/mining{ + name = "Bitrunning Den" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/turf/open/floor/iron/dark/smooth_half{ + dir = 1 + }, +/area/station/cargo/bitrunning/den) "bCi" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners, /obj/machinery/atmospherics/components/binary/crystallizer{ @@ -6106,6 +6128,27 @@ "cvJ" = ( /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) +"cvP" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_half{ + dir = 1 + }, +/area/station/cargo/bitrunning/den) "cvZ" = ( /obj/structure/closet/secure_closet/evidence, /obj/effect/decal/cleanable/dirt, @@ -11064,6 +11107,10 @@ /obj/structure/frame/computer, /turf/open/floor/eighties/red, /area/station/service/abandoned_gambling_den/gaming) +"ejq" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/bitrunning/den) "ejt" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -13973,12 +14020,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"fkL" = ( -/obj/machinery/quantum_server, -/obj/effect/turf_decal/delivery, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "fkT" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/alien/weeds, @@ -15044,25 +15085,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"fBl" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table, -/obj/item/folder/red, -/obj/item/food/monkeycube/bee{ - name = "monkey cube"; - pixel_y = 17 - }, -/obj/item/food/monkeycube/gorilla{ - desc = "Just add water!"; - name = "monkey cube"; - pixel_x = 3; - pixel_y = 13 - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) "fBq" = ( /obj/machinery/atmospherics/components/binary/valve/digital{ dir = 4 @@ -16265,9 +16287,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) -"fXd" = ( -/turf/closed/wall, -/area/station/cargo/bitrunning/den) "fXg" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -17786,10 +17805,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/grass, /area/station/service/hydroponics) -"gzl" = ( -/obj/machinery/netpod, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "gzu" = ( /obj/effect/turf_decal/tile/dark_red{ dir = 1 @@ -18380,27 +18395,6 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"gKH" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/holopad, -/turf/open/floor/iron/dark/smooth_half{ - dir = 1 - }, -/area/station/cargo/bitrunning/den) "gKK" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -18726,17 +18720,6 @@ }, /turf/open/floor/plating/rust, /area/station/maintenance/department/engine/atmos) -"gQx" = ( -/obj/effect/turf_decal/bot_white, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/gloves/color/fyellow{ - pixel_y = 7 - }, -/obj/structure/fluff/broken_canister_frame, -/obj/machinery/camera/autoname/directional/north, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plating, -/area/station/commons/storage/tools) "gQG" = ( /obj/structure/window/spawner/directional/east, /obj/structure/closet/crate, @@ -19166,30 +19149,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"gWV" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/door/airlock/mining{ - name = "Bitrunning Den" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/turf/open/floor/iron/dark/smooth_half{ - dir = 1 - }, -/area/station/cargo/bitrunning/den) "gXf" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/decal/cleanable/dirt, @@ -21651,6 +21610,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"hNv" = ( +/obj/machinery/netpod, +/obj/machinery/light_switch/directional/north, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "hNA" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /turf/open/floor/iron, @@ -25305,19 +25270,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/commons/fitness/recreation/entertainment) -"jeB" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/trimline/brown/line, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/dark/smooth_half, -/area/station/cargo/bitrunning/den) "jeC" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -26078,26 +26030,6 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/catwalk_floor/iron_dark, /area/station/commons/storage/tools) -"jux" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/smooth_half{ - dir = 1 - }, -/area/station/cargo/bitrunning/den) "juJ" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -27495,13 +27427,6 @@ /obj/item/bedsheet/brown, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) -"jSp" = ( -/obj/machinery/computer/quantum_console{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "jSw" = ( /obj/structure/railing, /turf/open/floor/catwalk_floor, @@ -27849,6 +27774,25 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/half, /area/station/hallway/primary/central/fore) +"jYV" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table, +/obj/item/folder/red, +/obj/item/food/monkeycube/bee{ + name = "monkey cube"; + pixel_y = 17 + }, +/obj/item/food/monkeycube/chicken{ + pixel_y = 15; + pixel_x = 6; + name = "monkey cube"; + desc = "A new Nanotrasen classic, the monkey cube. Tastes like everything!" + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) "jYY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30740,6 +30684,19 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) +"lbF" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/trimline/brown/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/dark/smooth_half, +/area/station/cargo/bitrunning/den) "lbG" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -32921,6 +32878,20 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"lKH" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/stripes, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/dark/smooth_half, +/area/station/cargo/bitrunning/den) "lKK" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -32936,6 +32907,13 @@ /obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/open/floor/iron, /area/station/security/checkpoint/escape) +"lLq" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/decal/cleanable/oil, +/obj/machinery/byteforge, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/bitrunning/den) "lLr" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -36381,15 +36359,6 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/white, /area/station/medical/virology) -"mVs" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/obj/structure/bed/dogbed/runtime, -/mob/living/simple_animal/pet/cat/runtime, -/turf/open/floor/iron/white/small, -/area/station/command/heads_quarters/cmo) "mVt" = ( /obj/structure/cable, /obj/effect/turf_decal/siding/dark_red{ @@ -37873,6 +37842,13 @@ }, /turf/open/floor/circuit/telecomms/mainframe, /area/station/science/xenobiology) +"nyf" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/food/cornchips/green, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/bitrunning/den) "nyi" = ( /turf/closed/wall/rust, /area/station/maintenance/hallway/abandoned_command) @@ -38223,6 +38199,13 @@ /obj/structure/falsewall, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"nEl" = ( +/obj/machinery/computer/quantum_console{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "nEo" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -38284,6 +38267,9 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/cargo/drone_bay) +"nFo" = ( +/turf/closed/wall, +/area/station/cargo/bitrunning/den) "nFp" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -39233,26 +39219,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/restrooms) -"nXz" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/trimline/brown/corner, -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/smooth_edge{ - dir = 1 - }, -/area/station/cargo/bitrunning/den) "nXP" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -40840,6 +40806,9 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"oCG" = ( +/turf/closed/wall/rust, +/area/station/cargo/bitrunning/den) "oCM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/broken_flooring/pile/directional/east, @@ -46390,10 +46359,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/xenobiology) -"qrE" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/bitrunning/den) "qrI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/textured_half{ @@ -51087,6 +51052,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer1, /turf/open/floor/catwalk_floor/iron_white, /area/station/engineering/atmos) +"rPx" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/trimline/brown/corner, +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 1 + }, +/area/station/cargo/bitrunning/den) "rPz" = ( /obj/structure/table/glass, /obj/item/flashlight/lamp/green{ @@ -51556,6 +51541,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"rWP" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/smooth_half{ + dir = 1 + }, +/area/station/cargo/bitrunning/den) "rWW" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -52532,13 +52537,6 @@ /obj/structure/thermoplastic, /turf/open/floor/tram, /area/station/security/tram) -"snI" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/oil, -/obj/machinery/byteforge, -/obj/effect/turf_decal/box, -/turf/open/floor/iron/dark/smooth_large, -/area/station/cargo/bitrunning/den) "snJ" = ( /obj/effect/turf_decal/stripes/corner, /obj/machinery/light/small/directional/south, @@ -53448,12 +53446,6 @@ }, /turf/closed/wall, /area/station/commons/storage/art) -"sBO" = ( -/obj/machinery/netpod, -/obj/machinery/light_switch/directional/north, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "sCc" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -57240,6 +57232,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) +"tPZ" = ( +/obj/machinery/netpod, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "tQx" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/fueltank, @@ -62129,6 +62127,15 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/restrooms) +"vtq" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/bed/dogbed/runtime, +/mob/living/simple_animal/pet/cat/runtime, +/turf/open/floor/iron/white/small, +/area/station/command/heads_quarters/cmo) "vtv" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -62653,13 +62660,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) -"vCa" = ( -/obj/machinery/camera/autoname/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/food/cornchips/green, -/turf/open/floor/iron/dark/smooth_large, -/area/station/cargo/bitrunning/den) "vCe" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -65762,6 +65762,18 @@ /obj/effect/landmark/start/cargo_technician, /turf/open/floor/iron/smooth, /area/station/cargo/office) +"wzp" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/gloves/color/fyellow{ + pixel_y = 7 + }, +/obj/structure/fluff/broken_canister_frame, +/obj/machinery/camera/autoname/directional/north, +/obj/item/stack/sticky_tape/super, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plating, +/area/station/commons/storage/tools) "wzK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -66911,20 +66923,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/smooth, /area/station/service/greenroom) -"wRI" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/dark/smooth_half, -/area/station/cargo/bitrunning/den) "wRL" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -71940,9 +71938,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"ygc" = ( -/turf/closed/wall/rust, -/area/station/cargo/bitrunning/den) "ygd" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/engineering/atmospherics_portable, @@ -72316,6 +72311,12 @@ "ylD" = ( /turf/closed/wall, /area/station/maintenance/starboard/greater) +"ylH" = ( +/obj/machinery/quantum_server, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "ylJ" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -84013,12 +84014,12 @@ slY ueX slY ueX -fXd -ygc -fXd -fXd -fXd -fXd +nFo +oCG +nFo +nFo +nFo +nFo lxy hzm jTA @@ -84270,12 +84271,12 @@ slY hfc jBb iNE -fXd -gzl -wRI -fkL -jSp -qrE +nFo +ach +lKH +ylH +nEl +ejq tvN lRc moz @@ -84527,12 +84528,12 @@ gZk iNE kwY kPW -fXd -adH -nXz -gKH -jux -gWV +nFo +tPZ +rPx +cvP +rWP +bCh jWA lTv oem @@ -84784,12 +84785,12 @@ slY hff kPW hfc -fXd -sBO -jeB -snI -vCa -qrE +nFo +hNv +lbF +lLq +nyf +ejq jkS lTN mRD @@ -85041,12 +85042,12 @@ slY jCo slY slY -fXd -fXd -fXd -fXd -fXd -fXd +nFo +nFo +nFo +nFo +nFo +nFo kZB lUz ohj @@ -89662,7 +89663,7 @@ ueX slY slY slY -gQx +wzp hbv rkr hmj @@ -90179,7 +90180,7 @@ hXf oQM hbI hgd -fBl +jYV xrZ sRg xat @@ -91460,7 +91461,7 @@ wbi hrY wbi wbi -wbi +dDB wbi wbi wbi @@ -100284,7 +100285,7 @@ oNd fFD cbO vDV -mVs +vtq clt jbr guF diff --git a/_maps/map_files/NSVBlueshift/Blueshift.dmm b/_maps/map_files/NSVBlueshift/Blueshift.dmm index dfb2e863343..50df0951d45 100644 --- a/_maps/map_files/NSVBlueshift/Blueshift.dmm +++ b/_maps/map_files/NSVBlueshift/Blueshift.dmm @@ -32286,7 +32286,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/sorting/mail{ name = "Detective Junction"; - renamedByPlayer = 30 }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) @@ -71348,7 +71347,6 @@ "nGH" = ( /obj/structure/disposalpipe/sorting/mail{ name = "Robotics Junction"; - renamedByPlayer = 14 }, /turf/open/floor/iron, /area/station/hallway/primary/upper) diff --git a/code/__DEFINES/religion.dm b/code/__DEFINES/religion.dm index 0db0961c12d..8dfdc2309cc 100644 --- a/code/__DEFINES/religion.dm +++ b/code/__DEFINES/religion.dm @@ -9,6 +9,9 @@ #define ALIGNMENT_NEUT "neutral" #define ALIGNMENT_EVIL "evil" +/// the probability, when not overridden by sects, for a bible's bless effect to trigger on a smack +#define DEFAULT_SMACK_CHANCE 60 + //## which weapons should we use? // unused but for clarity diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 4aa6f4a74a4..c24e23bf23e 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -440,6 +440,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Trait used by fugu glands to avoid double buffing #define TRAIT_FUGU_GLANDED "fugu_glanded" +/// Trait that tracks if something has been renamed. Typically holds a REF() to the object itself (AKA src) for wide addition/removal. +#define TRAIT_WAS_RENAMED "was_renamed" + /// When someone with this trait fires a ranged weapon, their fire delays and click cooldowns are halved #define TRAIT_DOUBLE_TAP "double_tap" diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm index 6be8cdf3f8d..d472b9bed26 100644 --- a/code/__DEFINES/traits/sources.dm +++ b/code/__DEFINES/traits/sources.dm @@ -271,3 +271,6 @@ #define CLOWNOP_TRAIT "clownop" #define ANALYZER_TRAIT "analyzer_trait" + +/// Trait when something was labelled by a pen. +#define PEN_LABEL_TRAIT "pen_label" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 79facdd304c..ac415ca6886 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -20,7 +20,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FOOD_FRIED" = TRAIT_FOOD_FRIED, "TRAIT_FOOD_GRILLED" = TRAIT_FOOD_GRILLED, "TRAIT_FOOD_SILVER" = TRAIT_FOOD_SILVER, - "TRAIT_KEEP_TOGETHER" = TRAIT_KEEP_TOGETHER,TRAIT_CUSTOMIZABLE_REAGENT_HOLDER, + "TRAIT_KEEP_TOGETHER" = TRAIT_KEEP_TOGETHER, "TRAIT_LIGHTING_DEBUGGED" = TRAIT_LIGHTING_DEBUGGED, "TRAIT_MAT_TRANSMUTED" = TRAIT_MAT_TRANSMUTED, "TRAIT_RECENTLY_COINED" = TRAIT_RECENTLY_COINED, @@ -61,6 +61,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_UNDERFLOOR" = TRAIT_UNDERFLOOR, "TRAIT_UNIQUE_IMMERSE" = TRAIT_UNIQUE_IMMERSE, "TRAIT_VOIDSTORM_IMMUNE" = TRAIT_VOIDSTORM_IMMUNE, + "TRAIT_WAS_RENAMED" = TRAIT_WAS_RENAMED, "TRAIT_WEATHER_IMMUNE" = TRAIT_WEATHER_IMMUNE, ), /datum/controller/subsystem/economy = list( diff --git a/code/datums/components/food/ice_cream_holder.dm b/code/datums/components/food/ice_cream_holder.dm index 3e212c52b9a..29625a8a321 100644 --- a/code/datums/components/food/ice_cream_holder.dm +++ b/code/datums/components/food/ice_cream_holder.dm @@ -77,8 +77,7 @@ /datum/component/ice_cream_holder/proc/on_update_name(atom/source, updates) SIGNAL_HANDLER - var/obj/obj = source - if(istype(obj) && obj.renamedByPlayer) //Renamed by the player. + if(HAS_TRAIT(source, TRAIT_WAS_RENAMED)) return var/scoops_len = length(scoops) if(!scoops_len) @@ -93,8 +92,7 @@ /datum/component/ice_cream_holder/proc/on_update_desc(atom/source, updates) SIGNAL_HANDLER - var/obj/obj = source - if(istype(obj) && obj.renamedByPlayer) //Renamed by the player. + if(HAS_TRAIT(source, TRAIT_WAS_RENAMED)) return var/scoops_len = length(scoops) if(!scoops_len) diff --git a/code/datums/components/takes_reagent_appearance.dm b/code/datums/components/takes_reagent_appearance.dm index 6505290b4cb..fd1312ba112 100644 --- a/code/datums/components/takes_reagent_appearance.dm +++ b/code/datums/components/takes_reagent_appearance.dm @@ -89,10 +89,10 @@ * * Returns [NONE] if the name was reset to initial state */ /datum/component/takes_reagent_appearance/proc/update_name(datum/glass_style/style) - var/obj/item/item_parent = parent - if(item_parent.renamedByPlayer) + if(HAS_TRAIT(parent, TRAIT_WAS_RENAMED)) return NONE + var/obj/item/item_parent = parent if(isnull(style)) // no style (reset) item_parent.name = initial(item_parent.name) @@ -111,10 +111,10 @@ * * Returns [NONE] if the description was reset to initial state */ /datum/component/takes_reagent_appearance/proc/update_desc(datum/glass_style/style) - var/obj/item/item_parent = parent - if(item_parent.renamedByPlayer) + if(HAS_TRAIT(parent, TRAIT_WAS_RENAMED)) return NONE + var/obj/item/item_parent = parent if(isnull(style)) // no style (reset) item_parent.desc = initial(item_parent.desc) diff --git a/code/datums/elements/climbable.dm b/code/datums/elements/climbable.dm index b26990c5911..56c16f303c4 100644 --- a/code/datums/elements/climbable.dm +++ b/code/datums/elements/climbable.dm @@ -23,7 +23,6 @@ RegisterSignal(target, COMSIG_ATOM_ATTACK_HAND, PROC_REF(attack_hand)) RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) RegisterSignal(target, COMSIG_MOUSEDROPPED_ONTO, PROC_REF(mousedrop_receive)) - RegisterSignal(target, COMSIG_ATOM_BUMPED, PROC_REF(try_speedrun)) ADD_TRAIT(target, TRAIT_CLIMBABLE, ELEMENT_TRAIT(type)) /datum/element/climbable/Detach(datum/target) @@ -104,8 +103,6 @@ var/x_dist = (text2num(LAZYACCESS(modifiers, ICON_X)) - world.icon_size/2) * (climbed_thing.dir & WEST ? -1 : 1) var/y_dist = (text2num(LAZYACCESS(modifiers, ICON_Y)) - world.icon_size/2) * (climbed_thing.dir & SOUTH ? -1 : 1) dir_step = (x_dist >= y_dist ? (EAST|WEST) : (NORTH|SOUTH)) & climbed_thing.dir - else //user is being moved by a forced_movement datum. dir_step will be the direction to the forced movement target. - dir_step = get_dir(user, user.force_moving.target) else dir_step = get_dir(user, get_step(climbed_thing, climbed_thing.dir)) . = step(user, dir_step) @@ -121,11 +118,3 @@ var/mob/living/living_target = dropped_atom if(living_target.mobility_flags & MOBILITY_MOVE) INVOKE_ASYNC(src, PROC_REF(climb_structure), climbed_thing, living_target, params) - -///Tries to climb onto the target if the forced movement of the mob allows it -/datum/element/climbable/proc/try_speedrun(datum/source, mob/bumpee) - SIGNAL_HANDLER - if(!istype(bumpee)) - return - if(bumpee.force_moving?.allow_climbing) - do_climb(source, bumpee) diff --git a/code/datums/forced_movement.dm b/code/datums/forced_movement.dm deleted file mode 100644 index 407f258281c..00000000000 --- a/code/datums/forced_movement.dm +++ /dev/null @@ -1,89 +0,0 @@ -//Just new and forget -//Depricated, use movement loops instead. Exists to support things that want to move more then 10 times a second -/datum/forced_movement - var/atom/movable/victim - var/atom/target - var/last_processed - var/steps_per_tick - var/allow_climbing - var/datum/callback/on_step - var/moved_at_all = FALSE - //as fast as ssfastprocess -/datum/forced_movement/New(atom/movable/_victim, atom/_target, _steps_per_tick = 0.5, _allow_climbing = FALSE, datum/callback/_on_step = null) - victim = _victim - target = _target - steps_per_tick = _steps_per_tick - allow_climbing = _allow_climbing - on_step = _on_step - - . = ..() - - if(_victim && _target && _steps_per_tick && !_victim.force_moving) - last_processed = world.time - _victim.force_moving = src - START_PROCESSING(SSfastprocess, src) - else - qdel(src) //if you want to overwrite the current forced movement, call qdel(victim.force_moving) before creating this - -/datum/forced_movement/Destroy() - if(victim.force_moving == src) - victim.force_moving = null - if(moved_at_all) - victim.forceMove(victim.loc) //get the side effects of moving here that require us to currently not be force_moving aka reslipping on ice - STOP_PROCESSING(SSfastprocess, src) - victim = null - target = null - on_step = null - return ..() - -//Todo: convert -/datum/forced_movement/process() - if(QDELETED(victim) || !victim.loc || QDELETED(target) || !target.loc) - qdel(src) - return - var/steps_to_take = round(steps_per_tick * (world.time - last_processed)) - if(steps_to_take) - for(var/i in 1 to steps_to_take) - if(TryMove()) - moved_at_all = TRUE - if(on_step) - on_step.InvokeAsync() - else - qdel(src) - return - last_processed = world.time - -/datum/forced_movement/proc/TryMove(recursive = FALSE) - if(QDELETED(src)) //Our previous step caused deletion of this datum - return - - var/atom/movable/vic = victim //sanic - var/atom/tar = target - - if(!recursive) - . = step_towards(vic, tar) - - //shit way for getting around corners - if(!.) //If stepping towards the target failed - if(tar.x > vic.x) //If we're going x, step x - if(step(vic, EAST)) - . = TRUE - else if(tar.x < vic.x) - if(step(vic, WEST)) - . = TRUE - - if(!.) //If the x step failed, go y - if(tar.y > vic.y) - if(step(vic, NORTH)) - . = TRUE - else if(tar.y < vic.y) - if(step(vic, SOUTH)) - . = TRUE - - if(!.) //If both failed, try again for some reason - if(recursive) - return FALSE - else - . = TryMove(TRUE) - - . = . && (vic.loc != tar.loc) diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm index a345aba0b81..153bc59aab0 100644 --- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm +++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_items.dm @@ -167,52 +167,52 @@ /datum/greyscale_config/encryptionkey_basic name = "Basic Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/assemblies/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_basic.json' /datum/greyscale_config/encryptionkey_cube name = "Block Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/assemblies/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_cube.json' /datum/greyscale_config/encryptionkey_research name = "Research Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/assemblies/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_research.json' /datum/greyscale_config/encryptionkey_syndicate name = "Syndicate Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/assemblies/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_syndicate.json' /datum/greyscale_config/encryptionkey_medical name = "Medical Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/assemblies/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_medical.json' /datum/greyscale_config/encryptionkey_service name = "Service Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/assemblies/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_service.json' /datum/greyscale_config/encryptionkey_engineering name = "Engineering Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/assemblies/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_engineering.json' /datum/greyscale_config/encryptionkey_centcom name = "Centcom Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/assemblies/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_centcom.json' /datum/greyscale_config/encryptionkey_cargo name = "Cargo Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/assemblies/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_cargo.json' /datum/greyscale_config/encryptionkey_security name = "Security Encryptionkey" - icon_file = 'icons/obj/radio.dmi' + icon_file = 'icons/obj/assemblies/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/encryptionkey_security.json' /datum/greyscale_config/quantum_keycard @@ -344,7 +344,7 @@ /datum/greyscale_config/circuit name = "Circuit Board" - icon_file = 'icons/obj/assemblies/module.dmi' + icon_file = 'icons/obj/assemblies/circuitry_n_data.dmi' json_config = 'code/datums/greyscale/json_configs/circuit.json' /datum/greyscale_config/janicart_upgrade diff --git a/code/datums/mutations/antenna.dm b/code/datums/mutations/antenna.dm index b71f66c0fa6..7232ea7aa39 100644 --- a/code/datums/mutations/antenna.dm +++ b/code/datums/mutations/antenna.dm @@ -11,7 +11,7 @@ /obj/item/implant/radio/antenna name = "internal antenna organ" desc = "The internal organ part of the antenna. Science has not yet given it a good name." - icon = 'icons/obj/radio.dmi'//maybe make a unique sprite later. not important + icon = 'icons/obj/device.dmi'//maybe make a unique sprite later. not important icon_state = "walkietalkie" /obj/item/implant/radio/antenna/Initialize(mapload) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 11d01fb827e..54f315e6a37 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -45,7 +45,6 @@ var/atom/movable/moving_from_pull ///Holds information about any movement loops currently running/waiting to run on the movable. Lazy, will be null if nothing's going on var/datum/movement_packet/move_packet - var/datum/forced_movement/force_moving = null //handled soley by forced_movement.dm /** * an associative lazylist of relevant nested contents by "channel", the list is of the form: list(channel = list(important nested contents of that type)) * each channel has a specific purpose and is meant to replace potentially expensive nested contents iteration. diff --git a/code/game/machinery/barsigns.dm b/code/game/machinery/barsigns.dm index dc5b4655b8e..c5349618674 100644 --- a/code/game/machinery/barsigns.dm +++ b/code/game/machinery/barsigns.dm @@ -12,6 +12,8 @@ var/datum/barsign/chosen_sign /// Do we attempt to rename the area we occupy when the chosen sign is changed? var/change_area_name = FALSE + /// What kind of sign do we drop upon being disassembled? + var/disassemble_result = /obj/item/wallframe/barsign /datum/armor/sign_barsign melee = 20 @@ -92,7 +94,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) /obj/machinery/barsign/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) if(disassembled) - new /obj/item/wallframe/barsign(loc) + new disassemble_result(drop_location()) else new /obj/item/stack/sheet/iron(drop_location(), 2) new /obj/item/stack/cable_coil(drop_location(), 2) @@ -487,6 +489,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) // For other locations that aren't in the main bar /obj/machinery/barsign/all_access req_access = null + disassemble_result = /obj/item/wallframe/barsign/all_access MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign/all_access, 32) @@ -513,3 +516,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign/all_access, 32) if(isopenturf(get_step(on_wall, EAST))) //This takes up 2 tiles so we want to make sure we have two tiles to hang it from. balloon_alert(user, "needs more support!") return FALSE + +/obj/item/wallframe/barsign/all_access + desc = "Used to help draw the rabble into your bar. Some assembly required. This one doesn't have an access lock." + result_path = /obj/machinery/barsign/all_access diff --git a/code/game/objects/items/AI_modules/_AI_modules.dm b/code/game/objects/items/AI_modules/_AI_modules.dm index 77c03cd6fc6..3e9fa583364 100644 --- a/code/game/objects/items/AI_modules/_AI_modules.dm +++ b/code/game/objects/items/AI_modules/_AI_modules.dm @@ -3,7 +3,7 @@ /obj/item/ai_module name = "\improper AI module" - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "std_mod" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' diff --git a/code/game/objects/items/choice_beacon.dm b/code/game/objects/items/choice_beacon.dm index 07a7808cd84..3fe0ea8675d 100644 --- a/code/game/objects/items/choice_beacon.dm +++ b/code/game/objects/items/choice_beacon.dm @@ -71,7 +71,8 @@ /obj/item/choice_beacon/ingredient name = "ingredient delivery beacon" desc = "Summon a box of ingredients to help you get started cooking." - icon_state = "gangtool-white" + icon_state = "sb_delivery" + inhand_icon_state = "sb_delivery" company_source = "Sophronia Broadcasting" company_message = span_bold("Please enjoy your Sophronia Broadcasting's 'Plasteel Chef' Ingredients Box, exactly as shown in the hit show!") @@ -86,6 +87,8 @@ /obj/item/choice_beacon/hero name = "heroic beacon" desc = "To summon heroes from the past to protect the future." + icon_state = "sb_delivery" + inhand_icon_state = "sb_delivery" company_source = "Sophronia Broadcasting" company_message = span_bold("Please enjoy your Sophronia Broadcasting's 'History Comes Alive branded' Costume Set, exactly as shown in the hit show!") @@ -129,7 +132,11 @@ /obj/item/choice_beacon/holy name = "armaments beacon" - desc = "Contains a set of armaments for the chaplain." + desc = "Summon a set of standard issue chaplain armaments, as dictated by I.C.R.A." + icon_state = "icra_delivery" + inhand_icon_state = "icra_delivery" + company_source = "Interstellar Conservation of Religion Association" + company_message = span_bold("A choice has already been made.") /obj/item/choice_beacon/holy/can_use_beacon(mob/living/user) if(user.mind?.holy_role) @@ -141,7 +148,6 @@ // Overrides generate options so that we can show a neat radial instead /obj/item/choice_beacon/holy/open_options_menu(mob/living/user) if(GLOB.holy_armor_type) - to_chat(user, span_warning("A selection has already been made.")) consume_use(GLOB.holy_armor_type, user) return diff --git a/code/game/objects/items/circuitboards/circuitboard.dm b/code/game/objects/items/circuitboards/circuitboard.dm index c32de5b336d..9ac21c361fd 100644 --- a/code/game/objects/items/circuitboards/circuitboard.dm +++ b/code/game/objects/items/circuitboards/circuitboard.dm @@ -7,7 +7,7 @@ name = "circuit board" /// extension that is applied after the initial name AKA (Computer/Machine Board) var/name_extension = null - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "circuit_map" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' diff --git a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm index 827642b139a..62d9ad26786 100644 --- a/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm +++ b/code/game/objects/items/devices/electroadaptive_pseudocircuit.dm @@ -2,7 +2,7 @@ /obj/item/electroadaptive_pseudocircuit name = "electroadaptive pseudocircuit" desc = "An all-in-one circuit imprinter, designer, synthesizer, outfitter, creator, and chef. It can be used in place of any generic circuit board during construction." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "boris" w_class = WEIGHT_CLASS_TINY custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3) diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index ce87739d114..d0b0ba1eb90 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -1,7 +1,7 @@ /obj/item/electropack name = "electropack" desc = "Dance my monkeys! DANCE!!!" - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/device.dmi' icon_state = "electropack0" inhand_icon_state = "electropack" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 1ae41c2b5c6..4fc64980a39 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -1,7 +1,7 @@ /obj/item/encryptionkey name = "standard encryption key" desc = "An encryption key for a radio headset." - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "cypherkey_basic" w_class = WEIGHT_CLASS_TINY /// Can this radio key access the binary radio channel? @@ -200,43 +200,3 @@ /obj/item/encryptionkey/secbot channels = list(RADIO_CHANNEL_AI_PRIVATE = 1, RADIO_CHANNEL_SECURITY = 1) - -/obj/item/encryptionkey/moth - name = "\improper Moffic translation key" - desc = "An encryption key that automatically encodes moffic heard through the radio into common. The signal's a little fuzzy." - icon_state = "translation_cypherkey" - translated_language = /datum/language/moffic - greyscale_config = null - greyscale_colors = null - -/obj/item/encryptionkey/tiziran - name = "\improper Tiziran translation key" - desc = "An encryption key that automatically encodes draconic heard through the radio into common. The signal's not quite to scale." - icon_state = "translation_cypherkey" - translated_language = /datum/language/draconic - greyscale_config = null - greyscale_colors = null - -/obj/item/encryptionkey/plasmaman - name = "\improper Calcic translation key" - desc = "An encryption key that automatically encodes calcic heard through the radio into common. The signal lacks a bit of teeth." - icon_state = "translation_cypherkey" - translated_language = /datum/language/calcic - greyscale_config = null - greyscale_colors = null - -/obj/item/encryptionkey/ethereal - name = "\improper Ethereal translation key" - desc = "An encryption key that automatically encodes ethereal heard through the radio into common. The signal's overpowering." - icon_state = "translation_cypherkey" - translated_language = /datum/language/voltaic - greyscale_config = null - greyscale_colors = null - -/obj/item/encryptionkey/felinid - name = "\improper Felinid translation key" - desc = "An encryption key that automatically encodes nekomimetic heard through the radio into common. The signal's rather scratchy." - icon_state = "translation_cypherkey" - translated_language = /datum/language/nekomimetic - greyscale_config = null - greyscale_colors = null diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index d6dd9bcc3a7..c2af9c33821 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -23,6 +23,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( /obj/item/radio/headset name = "radio headset" desc = "An updated, modular intercom that fits over the head. Takes encryption keys." + icon = 'icons/obj/clothing/headsets.dmi' icon_state = "headset" inhand_icon_state = "headset" lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 1a356686a74..5930747a252 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -1,10 +1,10 @@ #define FREQ_LISTENING (1<<0) /obj/item/radio - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/device.dmi' name = "station bounced radio" icon_state = "walkietalkie" - inhand_icon_state = "radio" + inhand_icon_state = "walkietalkie" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' worn_icon_state = "radio" diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index ec443aae220..e6ea2e21a3a 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -36,7 +36,7 @@ var/obj/item/radio/radio var/radio_key var/subspace_transmission = FALSE - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/device.dmi' icon_state = "walkietalkie" /obj/item/implant/radio/activate() diff --git a/code/game/objects/items/implants/implantuplink.dm b/code/game/objects/items/implants/implantuplink.dm index 4d90c8381d0..68263b0b206 100644 --- a/code/game/objects/items/implants/implantuplink.dm +++ b/code/game/objects/items/implants/implantuplink.dm @@ -1,7 +1,7 @@ /obj/item/implant/uplink name = "uplink implant" desc = "Sneeki breeki." - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/device.dmi' icon_state = "radio" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' diff --git a/code/game/objects/items/rcd/RHD.dm b/code/game/objects/items/rcd/RHD.dm index d9c4c7cd9b7..9ebfede50d0 100644 --- a/code/game/objects/items/rcd/RHD.dm +++ b/code/game/objects/items/rcd/RHD.dm @@ -284,7 +284,7 @@ /obj/item/rcd_upgrade name = "RCD advanced design disk" desc = "It seems to be empty." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "datadisk3" var/upgrade diff --git a/code/game/objects/items/rcd/RPD.dm b/code/game/objects/items/rcd/RPD.dm index 71a3999d261..ebe3fe36d73 100644 --- a/code/game/objects/items/rcd/RPD.dm +++ b/code/game/objects/items/rcd/RPD.dm @@ -655,7 +655,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( /obj/item/rpd_upgrade name = "RPD advanced design disk" desc = "It seems to be empty." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "datadisk3" /// Bitflags for upgrades var/upgrade_flags diff --git a/code/game/objects/items/robot/ai_upgrades.dm b/code/game/objects/items/robot/ai_upgrades.dm index f0cbb121eeb..6627b27921e 100644 --- a/code/game/objects/items/robot/ai_upgrades.dm +++ b/code/game/objects/items/robot/ai_upgrades.dm @@ -5,7 +5,7 @@ /obj/item/malf_upgrade name = "combat software upgrade" desc = "A highly illegal, highly dangerous upgrade for artificial intelligence units, granting them a variety of powers as well as the ability to hack APCs.
This upgrade does not override any active laws, and must be applied directly to an active AI core." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "datadisk3" @@ -34,7 +34,7 @@ /obj/item/surveillance_upgrade name = "surveillance software upgrade" desc = "An illegal software package that will allow an artificial intelligence to 'hear' from its cameras via lip reading and hidden microphones." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "datadisk3" /obj/item/surveillance_upgrade/pre_attack(atom/A, mob/living/user, proximity) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index b1aff8deff5..ddb45550c01 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -4,7 +4,7 @@ /obj/item/borg/upgrade name = "borg upgrade module." desc = "Protected by FRM." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "cyborg_upgrade" w_class = WEIGHT_CLASS_SMALL var/locked = FALSE @@ -268,7 +268,7 @@ /obj/item/borg/upgrade/lavaproof name = "mining cyborg lavaproof chassis" desc = "An upgrade kit to apply specialized coolant systems and insulation layers to a mining cyborg's chassis, enabling them to withstand exposure to molten rock and liquid plasma." - icon_state = "ash_plating" + icon_state = "cyborg_ash_tracks" resistance_flags = LAVA_PROOF | FIRE_PROOF | FREEZE_PROOF require_model = TRUE model_type = list(/obj/item/robot_model/miner) @@ -963,7 +963,7 @@ name = "cyborg emergency reboot module" desc = "A reusable firmware reset tool that can force a reboot of a disabled-but-repaired cyborg, bringing it back online." w_class = WEIGHT_CLASS_SMALL - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "cyborg_upgrade1" /obj/item/borg_restart_board/pre_attack(mob/living/silicon/robot/borgo, mob/living/user, params) diff --git a/code/game/objects/items/wall_mounted.dm b/code/game/objects/items/wall_mounted.dm index 48142778a92..2fa342d0d6f 100644 --- a/code/game/objects/items/wall_mounted.dm +++ b/code/game/objects/items/wall_mounted.dm @@ -83,7 +83,7 @@ /obj/item/electronics desc = "Looks like a circuit. Probably is." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "door_electronics" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 008ceccc72e..8695845bf47 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -41,8 +41,6 @@ /// Particles this obj uses when burning, if any var/burning_particles - var/renamedByPlayer = FALSE //set when a player uses a pen on a renamable object - var/drag_slowdown // Amont of multiplicative slowdown applied if pulled. >1 makes you slower, <1 makes you faster. /// Map tag for something. Tired of it being used on snowflake items. Moved here for some semblance of a standard. diff --git a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm index d2fe6ab3776..9e4c698c787 100644 --- a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm @@ -125,7 +125,7 @@ /datum/heretic_knowledge/blade_upgrade/cosmic name = "Cosmic Blade" - desc = "Your blade now deals damage to people's cells through cosmic radiation. \ + desc = "Your blade now deals damage to people's organs through cosmic radiation. \ Your attacks will chain bonus damage to up to two previous victims. \ The combo is reset after two seconds without making an attack, \ or if you attack someone already marked. If you combo more than four attacks you will recieve, \ @@ -152,6 +152,15 @@ var/combo_counter = 0 /datum/heretic_knowledge/blade_upgrade/cosmic/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) + var/static/list/valid_organ_slots = list( + ORGAN_SLOT_HEART, + ORGAN_SLOT_LUNGS, + ORGAN_SLOT_STOMACH, + ORGAN_SLOT_EYES, + ORGAN_SLOT_EARS, + ORGAN_SLOT_LIVER, + ORGAN_SLOT_BRAIN + ) if(source == target) return if(combo_timer) @@ -160,8 +169,8 @@ var/mob/living/second_target_resolved = second_target?.resolve() var/mob/living/third_target_resolved = third_target?.resolve() var/need_mob_update = FALSE - need_mob_update += target.adjustFireLoss(4, updating_health = FALSE) - need_mob_update += target.adjustCloneLoss(2, updating_health = FALSE) + need_mob_update += target.adjustFireLoss(5, updating_health = FALSE) + need_mob_update += target.adjustOrganLoss(pick(valid_organ_slots), 8) if(need_mob_update) target.updatehealth() if(target == second_target_resolved || target == third_target_resolved) @@ -173,18 +182,18 @@ new /obj/effect/temp_visual/cosmic_explosion(get_turf(second_target_resolved)) playsound(get_turf(second_target_resolved), 'sound/magic/cosmic_energy.ogg', 25, FALSE) need_mob_update = FALSE - need_mob_update += second_target_resolved.adjustFireLoss(10, updating_health = FALSE) - need_mob_update += second_target_resolved.adjustCloneLoss(6, updating_health = FALSE) + need_mob_update += second_target_resolved.adjustFireLoss(14, updating_health = FALSE) + need_mob_update += second_target_resolved.adjustOrganLoss(pick(valid_organ_slots), 12) if(need_mob_update) - target.updatehealth() + second_target_resolved.updatehealth() if(third_target_resolved) new /obj/effect/temp_visual/cosmic_domain(get_turf(third_target_resolved)) playsound(get_turf(third_target_resolved), 'sound/magic/cosmic_energy.ogg', 50, FALSE) need_mob_update = FALSE - need_mob_update += third_target_resolved.adjustFireLoss(20, updating_health = FALSE) - need_mob_update += third_target_resolved.adjustCloneLoss(12, updating_health = FALSE) + need_mob_update += third_target_resolved.adjustFireLoss(28, updating_health = FALSE) + need_mob_update += third_target_resolved.adjustOrganLoss(pick(valid_organ_slots), 14) if(need_mob_update) - target.updatehealth() + third_target_resolved.updatehealth() if(combo_counter > 3) target.apply_status_effect(/datum/status_effect/star_mark, source) if(target.mind && target.stat != DEAD) diff --git a/code/modules/antagonists/heretic/magic/star_touch.dm b/code/modules/antagonists/heretic/magic/star_touch.dm index f2f2c935bbf..9037d07295a 100644 --- a/code/modules/antagonists/heretic/magic/star_touch.dm +++ b/code/modules/antagonists/heretic/magic/star_touch.dm @@ -236,10 +236,7 @@ /// What to process when the beam is connected to a target /datum/status_effect/cosmic_beam/proc/on_beam_tick(mob/living/target) - var/need_mob_update - need_mob_update = target.adjustFireLoss(3, updating_health = FALSE) - need_mob_update += target.adjustCloneLoss(1, updating_health = FALSE) - if(need_mob_update) + if(target.adjustFireLoss(3, updating_health = FALSE)) target.updatehealth() /// What to remove when the beam disconnects from a target diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm b/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm index 6372b402cab..2ed37ffaaa0 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_authentication_disk.dm @@ -1,5 +1,5 @@ /obj/item/disk - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' w_class = WEIGHT_CLASS_TINY inhand_icon_state = "card-id" lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm index f3d2bde6fb7..48867c60854 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm @@ -7,8 +7,8 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) /obj/item/nuclear_challenge name = "Declaration of War (Challenge Mode)" icon = 'icons/obj/device.dmi' - icon_state = "gangtool-red" - inhand_icon_state = "radio" + icon_state = "nukietalkie" + inhand_icon_state = "nukietalkie" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' desc = "Use to send a declaration of hostilities to the target, delaying your shuttle departure for 20 minutes while they prepare for your assault. \ diff --git a/code/modules/bitrunning/objects/debug.dm b/code/modules/bitrunning/objects/debug.dm index 790aba73116..3b85c4f4585 100644 --- a/code/modules/bitrunning/objects/debug.dm +++ b/code/modules/bitrunning/objects/debug.dm @@ -1,7 +1,7 @@ /obj/item/bitrunning_debug name = "bitrunning debug item" desc = "Adds points and reduces cooldown time for debugging" - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' base_icon_state = "datadisk" icon_state = "datadisk0" diff --git a/code/modules/bitrunning/objects/disks.dm b/code/modules/bitrunning/objects/disks.dm index 9d7c808f356..2911539b0ac 100644 --- a/code/modules/bitrunning/objects/disks.dm +++ b/code/modules/bitrunning/objects/disks.dm @@ -7,7 +7,7 @@ /obj/item/bitrunning_disk name = "generic bitrunning program" desc = "A disk containing source code." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' base_icon_state = "datadisk" icon_state = "datadisk0" /// Name of the choice made diff --git a/code/modules/bitrunning/virtual_domain/domains/pipedream.dm b/code/modules/bitrunning/virtual_domain/domains/pipedream.dm index c8d7750e979..8b0fdbbd780 100644 --- a/code/modules/bitrunning/virtual_domain/domains/pipedream.dm +++ b/code/modules/bitrunning/virtual_domain/domains/pipedream.dm @@ -76,7 +76,7 @@ r_pocket = /obj/item/assembly/flash/handheld /datum/outfit/factory/qm - name = "Factory Quatermaster" + name = "Factory Quartermaster" id_trim = /datum/id_trim/factory/qm id = /obj/item/card/id/advanced/silver diff --git a/code/modules/cargo/goodies.dm b/code/modules/cargo/goodies.dm index 100ac4b4ce8..cf08c773d06 100644 --- a/code/modules/cargo/goodies.dm +++ b/code/modules/cargo/goodies.dm @@ -212,36 +212,6 @@ cost = PAYCHECK_CREW * 10 contains = list(/obj/item/construction/rld) -/datum/supply_pack/goody/moth_encryption_key - name = "Moffic radio encryption key" - desc = "A hi-tech radio encryption key that allows the wearer to understand moffic when the radio is worn." - cost = PAYCHECK_CREW * 12 - contains = list(/obj/item/encryptionkey/moth) - -/datum/supply_pack/goody/lizard_encryption_key - name = "Draconic radio encryption key" - desc = "A hi-tech radio encryption key that allows the wearer to understand draconic when the radio is worn." - cost = PAYCHECK_CREW * 12 - contains = list(/obj/item/encryptionkey/tiziran) - -/datum/supply_pack/goody/plasmaman_encryption_key - name = "Calcic radio encryption key" - desc = "A hi-tech radio encryption key that allows the wearer to understand calcic when the radio is worn." - cost = PAYCHECK_CREW * 12 - contains = list(/obj/item/encryptionkey/plasmaman) - -/datum/supply_pack/goody/ethereal_encryption_key - name = "Voltaic radio encryption key" - desc = "A hi-tech radio encryption key that allows the wearer to understand voltaic when the radio is worn." - cost = PAYCHECK_CREW * 12 - contains = list(/obj/item/encryptionkey/ethereal) - -/datum/supply_pack/goody/felinid_encryption_key - name = "Felinid radio encryption key" - desc = "A hi-tech radio encryption key that allows the wearer to understand nekomimetic when the radio is worn." - cost = PAYCHECK_CREW * 12 - contains = list(/obj/item/encryptionkey/felinid) - /datum/supply_pack/goody/fishing_toolbox name = "Fishing toolbox" desc = "Complete toolbox set for your fishing adventure. Advanced hooks and lines sold separetely." diff --git a/code/modules/cargo/packs/service.dm b/code/modules/cargo/packs/service.dm index e658db5229e..ac59c5cb8ff 100644 --- a/code/modules/cargo/packs/service.dm +++ b/code/modules/cargo/packs/service.dm @@ -293,5 +293,5 @@ name = "Bar Sign Replacement Kit" desc = "A replacement bar sign, perfect for drawing in customers to your bar, tavern, inn, nightclub, or even coffeehouse!" cost = CARGO_CRATE_VALUE * 14 - contains = list(/obj/item/wallframe/barsign) - crate_name = "bar sign replacement crate" + contains = list(/obj/item/wallframe/barsign/all_access) + crate_name = "bar sign crate" diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index 503effd258f..126fbf08ce2 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -704,7 +704,7 @@ /obj/item/disk/cargo/bluespace_pod //Disk that can be inserted into the Express Console to allow for Advanced Bluespace Pods name = "Bluespace Drop Pod Upgrade" desc = "This disk provides a firmware update to the Express Supply Console, granting the use of Nanotrasen's Bluespace Drop Pods to the supply department." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "cargodisk" inhand_icon_state = "card-id" w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/cargo/universal_scanner.dm b/code/modules/cargo/universal_scanner.dm index 2b9bb46e058..98049ce10ab 100644 --- a/code/modules/cargo/universal_scanner.dm +++ b/code/modules/cargo/universal_scanner.dm @@ -5,7 +5,7 @@ desc = "A device used to check objects against Nanotrasen exports database, assign price tags, or ready an item for a custom vending machine." icon = 'icons/obj/device.dmi' icon_state = "export scanner" - inhand_icon_state = "radio" + inhand_icon_state = "export_scanner" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' item_flags = NOBLUDGEON diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index d96bc1ec009..af3bbb060d5 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -84,7 +84,7 @@ /obj/structure/fermenting_barrel/update_overlays() . = ..() - if(src.renamedByPlayer || HAS_TRAIT(src, TRAIT_HAS_LABEL)) + if(HAS_TRAIT(src, TRAIT_WAS_RENAMED) || HAS_TRAIT(src, TRAIT_HAS_LABEL)) . += mutable_appearance(icon, "[base_icon_state]_overlay_label") /// Adds the fruit to the barrel to queue the fermentation diff --git a/code/modules/library/bibles.dm b/code/modules/library/bibles.dm index ecbcc397dba..6a5d1b1d5c4 100644 --- a/code/modules/library/bibles.dm +++ b/code/modules/library/bibles.dm @@ -251,27 +251,30 @@ GLOBAL_LIST_INIT(bibleitemstates, list( return ..() if(target_mob.stat == DEAD) - target_mob.visible_message(span_danger("[user] smacks [target_mob]'s lifeless corpse with [src].")) - playsound(target_mob, SFX_PUNCH, 25, TRUE, -1) + if(!GLOB.religious_sect?.sect_dead_bless(target_mob, user)) + target_mob.visible_message(span_danger("[user] smacks [target_mob]'s lifeless corpse with [src].")) + playsound(target_mob, SFX_PUNCH, 25, TRUE, -1) return if(user == target_mob) balloon_alert(user, "can't heal yourself!") return - var/smack = TRUE - if(prob(60) && bless(target_mob, user)) - smack = FALSE - else if(iscarbon(target_mob)) + var/smack_chance = DEFAULT_SMACK_CHANCE + if(GLOB.religious_sect) + smack_chance = GLOB.religious_sect.smack_chance + var/success = !prob(smack_chance) && bless(target_mob, user) + if(success) + return + if(iscarbon(target_mob)) var/mob/living/carbon/carbon_target = target_mob if(!istype(carbon_target.head, /obj/item/clothing/head/helmet)) carbon_target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5, 60) carbon_target.balloon_alert(carbon_target, "you feel dumber!") - if(smack) - target_mob.visible_message(span_danger("[user] beats [target_mob] over the head with [src]!"), \ - span_userdanger("[user] beats [target_mob] over the head with [src]!")) - playsound(target_mob, SFX_PUNCH, 25, TRUE, -1) - log_combat(user, target_mob, "attacked", src) + target_mob.visible_message(span_danger("[user] beats [target_mob] over the head with [src]!"), \ + span_userdanger("[user] beats [target_mob] over the head with [src]!")) + playsound(target_mob, SFX_PUNCH, 25, TRUE, -1) + log_combat(user, target_mob, "attacked", src) /obj/item/book/bible/attackby_storage_insert(datum/storage, atom/storage_holder, mob/user) return !istype(storage_holder, /obj/item/book/bible) diff --git a/code/modules/library/skill_learning/skillchip.dm b/code/modules/library/skill_learning/skillchip.dm index 89822976993..5d40d383fb0 100644 --- a/code/modules/library/skill_learning/skillchip.dm +++ b/code/modules/library/skill_learning/skillchip.dm @@ -9,7 +9,7 @@ name = "skillchip" desc = "This biochip integrates with user's brain to enable mastery of specific skill. Consult certified Nanotrasen neurosurgeon before use." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "skillchip" custom_price = PAYCHECK_CREW * 3 w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/mob/living/basic/heretic/star_gazer.dm b/code/modules/mob/living/basic/heretic/star_gazer.dm index f7ab925440d..3c1591c92ea 100644 --- a/code/modules/mob/living/basic/heretic/star_gazer.dm +++ b/code/modules/mob/living/basic/heretic/star_gazer.dm @@ -65,7 +65,7 @@ return target.apply_status_effect(/datum/status_effect/star_mark) - target.apply_damage(damage = 5, damagetype = CLONE) + target.apply_damage(damage = 5, damagetype = BURN) var/datum/targeting_strategy/target_confirmer = GET_TARGETING_STRATEGY(ai_controller.blackboard[BB_TARGETING_STRATEGY]) for(var/mob/living/nearby_mob in range(1, src)) if(target == nearby_mob || !target_confirmer?.can_attack(src, nearby_mob)) diff --git a/code/modules/mob/living/basic/minebots/minebot_upgrades.dm b/code/modules/mob/living/basic/minebots/minebot_upgrades.dm index 6f5d43af1af..47084a90561 100644 --- a/code/modules/mob/living/basic/minebots/minebot_upgrades.dm +++ b/code/modules/mob/living/basic/minebots/minebot_upgrades.dm @@ -2,7 +2,7 @@ name = "minebot melee upgrade" desc = "A minebot upgrade." icon_state = "door_electronics" - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' /obj/item/mine_bot_upgrade/afterattack(mob/living/basic/mining_drone/minebot, mob/user, proximity) . = ..() @@ -39,7 +39,7 @@ name = "minebot AI upgrade" desc = "Can be used to grant sentience to minebots. It's incompatible with minebot armor and melee upgrades, and will override them." icon_state = "door_electronics" - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' sentience_type = SENTIENCE_MINEBOT ///health boost to add var/base_health_add = 5 diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index e8a9f5bd467..2f67903e453 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -229,7 +229,7 @@ ///Returns a list of bodyparts with wounds (in case someone has a wound on an otherwise fully healed limb) -/mob/living/carbon/proc/get_wounded_bodyparts(brute = FALSE, burn = FALSE, required_bodytype) +/mob/living/carbon/proc/get_wounded_bodyparts(required_bodytype) var/list/obj/item/bodypart/parts = list() for(var/X in bodyparts) var/obj/item/bodypart/BP = X diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 5b91f400f4c..a99a7fd15b6 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -296,7 +296,7 @@ if(!ishuman(user)) return var/mob/living/carbon/human/human_user = user - if(human_user.dna.species.id == SPECIES_HUMAN && !HAS_MIND_TRAIT(human_user, TRAIT_MIMING)) + if((ishumanbasic(human_user) || isfelinid(human_user)) && !HAS_MIND_TRAIT(human_user, TRAIT_MIMING)) if(human_user.gender == FEMALE) return 'sound/voice/human/womanlaugh.ogg' else diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index 80809bb5a40..3a0f950b0fe 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -8,7 +8,7 @@ **/ /obj/item/robot_model name = "Default" - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "std_mod" w_class = WEIGHT_CLASS_GIGANTIC inhand_icon_state = "electronic" diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index 078ec2749b5..e17fd09e0fa 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -19,7 +19,6 @@ handle_nutrition(seconds_per_tick, times_fired) if(QDELETED(src)) // Stop if the slime split during handle_nutrition() return - reagents.remove_all(0.5 * REAGENTS_METABOLISM * reagents.reagent_list.len * seconds_per_tick) //Slimes are such snowflakes handle_targets(seconds_per_tick, times_fired) if(ckey) return diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index b03f46d5a44..8d0770d2bf5 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -120,7 +120,6 @@ else var/datum/action/innate/slime/evolve/evolve_action = new evolve_action.Grant(src) - create_reagents(100) set_slime_type(new_type) . = ..() set_nutrition(700) @@ -147,17 +146,6 @@ /mob/living/simple_animal/slime/pet docile = TRUE -/mob/living/simple_animal/slime/create_reagents(max_vol, flags) - . = ..() - RegisterSignals(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_DEL_REAGENT), PROC_REF(on_reagent_change)) - RegisterSignal(reagents, COMSIG_QDELETING, PROC_REF(on_reagents_del)) - -/// Handles removing signal hooks incase someone is crazy enough to reset the reagents datum. -/mob/living/simple_animal/slime/proc/on_reagents_del(datum/reagents/reagents) - SIGNAL_HANDLER - UnregisterSignal(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_QDELETING)) - return NONE - /mob/living/simple_animal/slime/proc/set_slime_type(new_type) slime_type = new new_type update_name() @@ -188,23 +176,6 @@ icon_state = icon_dead ..() -/** - * Snowflake handling of reagent movespeed modifiers - * - * Should be moved to the reagents at some point in the future. As it is I'm in a hurry. - */ -/mob/living/simple_animal/slime/proc/on_reagent_change(datum/reagents/holder, ...) - SIGNAL_HANDLER - remove_movespeed_modifier(/datum/movespeed_modifier/slime_reagentmod) - var/amount = 0 - if(reagents.has_reagent(/datum/reagent/medicine/morphine)) // morphine slows slimes down - amount = 2 - if(reagents.has_reagent(/datum/reagent/consumable/frostoil)) // Frostoil also makes them move VEEERRYYYYY slow - amount = 5 - if(amount) - add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_reagentmod, multiplicative_slowdown = amount) - return NONE - /mob/living/simple_animal/slime/updatehealth() . = ..() var/mod = 0 diff --git a/code/modules/modular_computers/computers/item/disks/computer_disk.dm b/code/modules/modular_computers/computers/item/disks/computer_disk.dm index c7d7688c896..d4cbbb3ba77 100644 --- a/code/modules/modular_computers/computers/item/disks/computer_disk.dm +++ b/code/modules/modular_computers/computers/item/disks/computer_disk.dm @@ -1,7 +1,7 @@ /obj/item/computer_disk name = "data disk" desc = "Removable disk used to store data." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "datadisk6" w_class = WEIGHT_CLASS_TINY ///The amount of storage space is on the disk diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 40e99eefe6a..5ee432b365e 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -236,7 +236,7 @@ label.remove_label() label.apply_label() to_chat(user, span_notice("You have successfully renamed \the [oldname] to [O].")) - O.renamedByPlayer = TRUE + ADD_TRAIT(O, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) O.update_appearance(UPDATE_ICON) if(penchoice == "Description") @@ -249,7 +249,7 @@ else O.AddComponent(/datum/component/rename, O.name, input) to_chat(user, span_notice("You have successfully changed [O]'s description.")) - O.renamedByPlayer = TRUE + ADD_TRAIT(O, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) O.update_appearance(UPDATE_ICON) if(penchoice == "Reset") @@ -265,7 +265,7 @@ label.apply_label() to_chat(user, span_notice("You have successfully reset [O]'s name and description.")) - O.renamedByPlayer = FALSE + REMOVE_TRAIT(O, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) O.update_appearance(UPDATE_ICON) /obj/item/pen/get_writing_implement_details() diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 455032f17d8..36dd4fcb8db 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -363,7 +363,7 @@ name = "minebot cooldown decrease" desc = "Decreases the cooldown of a kinetic accelerator. Only rated for minebot use." icon_state = "door_electronics" - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' denied_type = /obj/item/borg/upgrade/modkit/cooldown/minebot modifier = 10 cost = 0 diff --git a/code/modules/projectiles/guns/special/meat_hook.dm b/code/modules/projectiles/guns/special/meat_hook.dm index dd83bbd030f..cfa932a6541 100644 --- a/code/modules/projectiles/guns/special/meat_hook.dm +++ b/code/modules/projectiles/guns/special/meat_hook.dm @@ -1,5 +1,7 @@ -//Meat Hook +#define TRAIT_HOOKED "hooked" +#define IMMOBILIZATION_TIMER (0.25 SECONDS) //! How long we immobilize the firer after firing - we do cancel the immobilization early if nothing is hit. +/// Meat Hook /obj/item/gun/magic/hook name = "meat hook" desc = "Mid or feed." @@ -22,8 +24,22 @@ /obj/item/gun/magic/hook/can_trigger_gun(mob/living/user, akimbo_usage) // This isn't really a gun, so it shouldn't be checking for TRAIT_NOGUNS, a firing pin (pinless), or a trigger guard (guardless) if(akimbo_usage) return FALSE //this would be kinda weird while shooting someone down. + if(HAS_TRAIT(user, TRAIT_IMMOBILIZED)) + return FALSE return TRUE +/obj/item/gun/magic/hook/suicide_act(mob/living/user) + var/obj/item/bodypart/head/removable = user.get_bodypart(BODY_ZONE_HEAD) + if(isnull(removable)) + user.visible_message(span_suicide("[user] stuffs the chain of the [src] down the hole where their head should be! It looks like [user.p_theyre()] trying to commit suicide!")) + return OXYLOSS + + playsound(get_turf(src), fire_sound, 50, TRUE, -1) + user.visible_message(span_suicide("[user] is using the [src] on their [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!")) + playsound(get_turf(src), 'sound/weapons/bladeslice.ogg', 70) + removable.dismember(silent = FALSE) + return BRUTELOSS + /obj/item/ammo_casing/magic/hook name = "hook" desc = "A hook." @@ -41,37 +57,154 @@ armour_penetration = 60 damage_type = BRUTE hitsound = 'sound/effects/splat.ogg' - var/chain - var/knockdown_time = (0.5 SECONDS) - var/chain_icon = 'icons/effects/beam.dmi' //SKYRAT ADDITION + /// The chain we send out while we are in motion, referred to as "initial" to not get confused with the chain we use to reel the victim in. + var/datum/beam/initial_chain + var/chain_icon = 'icons/effects/beam.dmi' // SKYRAT EDIT ADDITION /obj/projectile/hook/fire(setAngle) if(firer) - chain = firer.Beam(src, icon_state = "chain", icon = chain_icon, emissive = FALSE) //SKYRAT EDIT, original: chain = firer.Beam(src, icon_state = "chain", emissive = FALSE) - ..() - //TODO: root the firer until the chain returns + initial_chain = firer.Beam(src, icon_state = "chain", icon = chain_icon, emissive = FALSE) // SKYRAT EDIT CHANGE - Adds icon arg - ORIGINAL: chain = firer.Beam(src, icon_state = "chain", emissive = FALSE) + ADD_TRAIT(firer, TRAIT_IMMOBILIZED, REF(src)) + addtimer(TRAIT_CALLBACK_REMOVE(firer, TRAIT_IMMOBILIZED, REF(src)), IMMOBILIZATION_TIMER) // safety if we miss, if we get a hit we stay immobilized + return ..() /obj/projectile/hook/on_hit(atom/target, blocked = 0, pierce_hit) . = ..() - if(ismovable(target)) - var/atom/movable/A = target - if(A.anchored) - return - A.visible_message(span_danger("[A] is snagged by [firer]'s hook!")) - //Should really be a movement loop, but I don't want to support moving 5 tiles a tick - //It just looks bad - new /datum/forced_movement(A, get_turf(firer), 5, TRUE) - if (isliving(target)) - var/mob/living/fresh_meat = target - fresh_meat.Knockdown(knockdown_time) - return - //TODO: keep the chain beamed to A - //TODO: needs a callback to delete the chain - -/obj/projectile/hook/Destroy() - qdel(chain) + if(!ismovable(target)) + return + + var/atom/movable/victim = target + if(victim.anchored || HAS_TRAIT_FROM(victim, TRAIT_HOOKED, REF(firer))) + return + + victim.visible_message(span_danger("[victim] is snagged by [firer]'s hook!")) + + var/datum/hook_and_move/puller = new + puller.begin_pulling(firer, victim, get_turf(firer)) + REMOVE_TRAIT(firer, TRAIT_IMMOBILIZED, REF(src)) + +/obj/projectile/hook/Destroy(force) + QDEL_NULL(initial_chain) + return ..() + +/// Lightweight datum that just handles moving a target for the hook. +/// For the love of God, do not use this outside this file. +/datum/hook_and_move + /// Weakref to the victim we are dragging + var/datum/weakref/victim_ref = null + /// Weakref of the destination that the victim is heading towards. + var/datum/weakref/destination_ref = null + /// Weakref to the firer of the hook + var/datum/weakref/firer_ref = null + /// String to the REF() of the dude that fired us so we can ensure we always cleanup our traits + var/firer_ref_string = null + + /// The last time our movement fired. + var/last_movement = 0 + /// The chain beam we currently own. + var/datum/beam/return_chain = null + + /// How many steps we force the victim to take per tick + var/steps_per_tick = 5 + /// How long we knockdown the victim for. + var/knockdown_time = (0.5 SECONDS) + + /// List of traits that prevent the user from moving. More restrictive than attempting to fire the hook by design. + var/static/list/prevent_movement_traits = list( + TRAIT_IMMOBILIZED, + TRAIT_UI_BLOCKED, + ) + +/datum/hook_and_move/Destroy(force) + STOP_PROCESSING(SSfastprocess, src) + QDEL_NULL(return_chain) return ..() +/// Uses fastprocessing to move our victim to the destination at a rather fast speed. +/datum/hook_and_move/proc/begin_pulling(atom/movable/firer, atom/movable/victim, atom/destination) + return_chain = firer.Beam(victim, icon_state = "chain", emissive = FALSE) + + firer_ref_string = REF(firer) + ADD_TRAIT(victim, TRAIT_HOOKED, firer_ref_string) + firer.add_traits(prevent_movement_traits, REF(src)) + if(isliving(victim)) + var/mob/living/fresh_meat = victim + fresh_meat.Knockdown(knockdown_time) + + destination_ref = WEAKREF(destination) + victim_ref = WEAKREF(victim) + firer_ref = WEAKREF(firer) + + START_PROCESSING(SSfastprocess, src) + +/// Cancels processing and removes the trait from the victim. +/datum/hook_and_move/proc/end_movement() + var/atom/movable/firer = firer_ref?.resolve() + if(!QDELETED(firer)) + firer.remove_traits(prevent_movement_traits, REF(src)) + + var/atom/movable/victim = victim_ref?.resolve() + if(!QDELETED(victim)) + REMOVE_TRAIT(victim, TRAIT_HOOKED, firer_ref_string) + + qdel(src) + +/datum/hook_and_move/process(seconds_per_tick) + var/atom/movable/victim = victim_ref?.resolve() + var/atom/destination = destination_ref?.resolve() + if(QDELETED(victim) || QDELETED(destination)) + end_movement() + return + + var/steps_to_take = round(steps_per_tick * (world.time - last_movement)) + if(steps_to_take <= 0) + return + + var/movement_result = attempt_movement(victim, destination) + if(!movement_result || (victim.loc == destination.loc)) // either we failed our movement or our mission is complete + end_movement() + +/// Attempts to move the victim towards the destination. Returns TRUE if we do a successful movement, FALSE otherwise. +/// second_attempt is a boolean to prevent infinite recursion. +/// If this whole series of events wasn't reliant on SSfastprocess firing as fast as it does, it would have been more useful to make this a move loop datum. But, we need the speed. +/datum/hook_and_move/proc/attempt_movement(atom/movable/subject, atom/target, second_attempt = FALSE) + var/actually_moved = FALSE + if(!second_attempt) + actually_moved = step_towards(subject, target) + + if(actually_moved) + return TRUE + + // alright now the code fucking sucks + var/subject_x = subject.x + var/subject_y = subject.y + var/target_x = target.x + var/target_y = target.y + + //If we're going x, step x + if((target_x > subject_x) && step(subject, EAST)) + actually_moved = TRUE + else if((target_x < subject_x) && step(subject, WEST)) + actually_moved = TRUE + + if(actually_moved) + return TRUE + + //If the x step failed, go y + if((target_y > subject_y) && step(subject, NORTH)) + actually_moved = TRUE + else if((target_y < subject_y) && step(subject, SOUTH)) + actually_moved = TRUE + + if(actually_moved) + return TRUE + + // if we fail twice, abort. otherwise queue up the second attempt. + if(second_attempt) + return FALSE + + return attempt_movement(subject, target, second_attempt = TRUE) + //just a nerfed version of the real thing for the bounty hunters. /obj/item/gun/magic/hook/bounty name = "hook" @@ -83,3 +216,12 @@ /obj/projectile/hook/bounty damage = 0 stamina = 40 + +/// Debug hook for fun (AKA admin abuse). doesn't do any more damage or anything just lets you wildfire it. +/obj/item/gun/magic/hook/debug + name = "super meat hook" + max_charges = 100 + recharge_rate = 1 + +#undef TRAIT_HOOKED +#undef IMMOBILIZATION_TIMER diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index f897d8f4bb2..2629a073120 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -352,20 +352,12 @@ heating = 5 if(holder.has_reagent(/datum/reagent/cryostylane)) holder.remove_reagent(/datum/reagent/cryostylane, 5 * REM * seconds_per_tick) - if(isslime(affected_mob)) - heating = rand(5, 20) if(15 to 25) heating = 10 - if(isslime(affected_mob)) - heating = rand(10, 20) if(25 to 35) heating = 15 - if(isslime(affected_mob)) - heating = rand(15, 20) if(35 to INFINITY) heating = 20 - if(isslime(affected_mob)) - heating = rand(20, 25) affected_mob.adjust_bodytemperature(heating * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick) /datum/reagent/consumable/frostoil @@ -387,24 +379,16 @@ cooling = -10 if(holder.has_reagent(/datum/reagent/consumable/capsaicin)) holder.remove_reagent(/datum/reagent/consumable/capsaicin, 5 * REM * seconds_per_tick) - if(isslime(affected_mob)) - cooling = -rand(5, 20) if(15 to 25) cooling = -20 - if(isslime(affected_mob)) - cooling = -rand(10, 20) if(25 to 35) cooling = -30 if(prob(1)) affected_mob.emote("shiver") - if(isslime(affected_mob)) - cooling = -rand(15, 20) if(35 to INFINITY) cooling = -40 if(prob(5)) affected_mob.emote("shiver") - if(isslime(affected_mob)) - cooling = -rand(20, 25) affected_mob.adjust_bodytemperature(cooling * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick, 50) /datum/reagent/consumable/frostoil/expose_turf(turf/exposed_turf, reac_volume) diff --git a/code/modules/reagents/reagent_containers/cups/drinkingglass.dm b/code/modules/reagents/reagent_containers/cups/drinkingglass.dm index d795a5e0dcf..8745e61cd92 100644 --- a/code/modules/reagents/reagent_containers/cups/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/cups/drinkingglass.dm @@ -34,7 +34,7 @@ /obj/item/reagent_containers/cup/glass/drinkingglass/on_reagent_change(datum/reagents/holder, ...) . = ..() if(!length(reagents.reagent_list)) - renamedByPlayer = FALSE //so new drinks can rename the glass + REMOVE_TRAIT(src, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) //so new drinks can rename the glass // Having our icon state change removes fill thresholds /obj/item/reagent_containers/cup/glass/drinkingglass/on_cup_change(datum/glass_style/style) @@ -68,13 +68,13 @@ custom_price = PAYCHECK_CREW * 0.4 /obj/item/reagent_containers/cup/glass/drinkingglass/shotglass/update_name(updates) - if(renamedByPlayer) + if(HAS_TRAIT(src, TRAIT_WAS_RENAMED)) return . = ..() name = "[length(reagents.reagent_list) ? "filled " : ""]shot glass" /obj/item/reagent_containers/cup/glass/drinkingglass/shotglass/update_desc(updates) - if(renamedByPlayer) + if(HAS_TRAIT(src, TRAIT_WAS_RENAMED)) return . = ..() if(length(reagents.reagent_list)) diff --git a/code/modules/religion/burdened/burdened_trauma.dm b/code/modules/religion/burdened/burdened_trauma.dm index b6a1052dab4..20fe35fc751 100644 --- a/code/modules/religion/burdened/burdened_trauma.dm +++ b/code/modules/religion/burdened/burdened_trauma.dm @@ -38,7 +38,7 @@ COMSIG_CARBON_LOSE_MUTATION, COMSIG_CARBON_GAIN_TRAUMA, COMSIG_CARBON_LOSE_TRAUMA, - )) + )) return ..() /** diff --git a/code/modules/religion/honorbound/honorbound_rites.dm b/code/modules/religion/honorbound/honorbound_rites.dm index c9c9e711354..88eef0340ea 100644 --- a/code/modules/religion/honorbound/honorbound_rites.dm +++ b/code/modules/religion/honorbound/honorbound_rites.dm @@ -1,3 +1,6 @@ +/// how much favor is gained when someone joins the crusade and is deaconized +#define DEACONIZE_FAVOR_GAIN 300 + ///Makes the person holy, but they now also have to follow the honorbound code (CBT). Actually earns favor, convincing others to uphold the code (tm) is not easy /datum/religion_rites/deaconize name = "Join Crusade" @@ -64,7 +67,7 @@ var/datum/brain_trauma/special/honorbound/honor = user.has_trauma_type(/datum/brain_trauma/special/honorbound) if(joining_now in honor.guilty) honor.guilty -= joining_now - GLOB.religious_sect.adjust_favor(200, user) + GLOB.religious_sect.adjust_favor(DEACONIZE_FAVOR_GAIN, user) to_chat(user, span_notice("[GLOB.deity] has bound [joining_now] to the code! They are now a holy role! (albeit the lowest level of such)")) joining_now.mind.holy_role = HOLY_ROLE_DEACON GLOB.religious_sect.on_conversion(joining_now) @@ -151,7 +154,8 @@
1.) Thou shalt not attack the unready!
Those who are not ready for battle should not be wrought low. The evil of this world must lose - in a fair battle if you are to conquer them completely. + in a fair battle if you are to conquer them completely. Lesser creatures are given the benefit of + being unready, keep that in mind.

2.) Thou shalt not attack the just!
@@ -162,7 +166,9 @@
3.) Thou shalt not attack the innocent!
There is no honor on a pre-emptive strike, unless they are truly evil vermin. - Those who are guilty will either lay a hand on you first, or you may declare their evil. + Those who are guilty will either lay a hand on you first, or you may declare their evil. Mindless, lesser + creatures cannot be considered innocent, nor evil. They are beings of passion and function, and + may be dispatched as such if their passions misalign with the pursuits of a better world.

4.) Thou shalt not use profane magicks!
@@ -172,3 +178,5 @@ been allowed as it is a school focused on the light and mending of this world. "} return ..() + +#undef DEACONIZE_FAVOR_GAIN diff --git a/code/modules/religion/honorbound/honorbound_trauma.dm b/code/modules/religion/honorbound/honorbound_trauma.dm index 29152e5bc72..399bf6765ed 100644 --- a/code/modules/religion/honorbound/honorbound_trauma.dm +++ b/code/modules/religion/honorbound/honorbound_trauma.dm @@ -1,3 +1,6 @@ +/// one reason for declaring guilty is specifically checked for, keeping it as a define to avoid future mistakes +#define GUILT_REASON_DECLARATION "from your declaration." + ///Honorbound prevents you from attacking the unready, the just, or the innocent /datum/brain_trauma/special/honorbound name = "Dogmatic Compulsions" @@ -45,38 +48,59 @@ if(!isliving(clickingon)) return - var/mob/living/clickedmob = clickingon + var/mob/living/clicked_mob = clickingon var/obj/item/weapon = honorbound.get_active_held_item() - if(!honorbound.DirectAccess(clickedmob) && !isgun(weapon)) + if(!honorbound.DirectAccess(clicked_mob) && !isgun(weapon)) return if(weapon?.item_flags & NOBLUDGEON) return - if(!honorbound.combat_mode && (HAS_TRAIT(clickedmob, TRAIT_ALLOWED_HONORBOUND_ATTACK) || ((!weapon || !weapon.force) && !LAZYACCESS(modifiers, RIGHT_CLICK)))) + if(!honorbound.combat_mode && (HAS_TRAIT(clicked_mob, TRAIT_ALLOWED_HONORBOUND_ATTACK) || ((!weapon || !weapon.force) && !LAZYACCESS(modifiers, RIGHT_CLICK)))) return - if(!is_honorable(honorbound, clickedmob)) + if(!(clicked_mob in guilty)) + check_visible_guilt(clicked_mob) + if(!is_honorable(honorbound, clicked_mob)) return (COMSIG_MOB_CANCEL_CLICKON) +/// Checks a mob for any obvious signs of evil, and applies a guilty reason for each. +/datum/brain_trauma/special/honorbound/proc/check_visible_guilt(mob/living/attacked_mob) + //will most likely just hit nuke ops but good catch-all. WON'T hit traitors + if(ROLE_SYNDICATE in attacked_mob.faction) + guilty(attacked_mob, "for their misaligned association with the Syndicate!") + //not an antag datum check so it applies to wizard minions as well + if(ROLE_WIZARD in attacked_mob.faction) + guilty(attacked_mob, "for blasphemous magicks!") + if(HAS_TRAIT(attacked_mob, TRAIT_CULT_HALO)) + guilty(attacked_mob, "for blasphemous worship!") + if(attacked_mob.mind) + var/datum/mind/guilty_conscience = attacked_mob.mind + if(guilty_conscience.has_antag_datum(/datum/antagonist/abductor)) + guilty(attacked_mob, "for their blatant surgical malice...") + if(guilty_conscience.has_antag_datum(/datum/antagonist/nightmare)) + guilty(attacked_mob, "for being a light-consuming nightmare!") + if(guilty_conscience.has_antag_datum(/datum/antagonist/ninja)) + guilty(attacked_mob, "for their misaligned association with the Spider Clan!") + var/datum/antagonist/heretic/heretic_datum = guilty_conscience.has_antag_datum(/datum/antagonist/heretic) + if(heretic_datum?.ascended) + guilty(attacked_mob, "for blasphemous, heretical, out of control worship!") + /** * Called by hooked signals whenever someone attacks the person with this trauma * Checks if the attacker should be considered guilty and adds them to the guilty list if true * * Arguments: * * user: person who attacked the honorbound - * * declaration: if this wasn't an attack, but instead the honorbound spending favor on declaring this person guilty + * * reason: why this person is now guilty (future pr idea: letting honorbound print a receipt for why someone is guilty? lol) */ -/datum/brain_trauma/special/honorbound/proc/guilty(mob/living/user, declaration = FALSE) +/datum/brain_trauma/special/honorbound/proc/guilty(mob/living/user, reason = "for no particular reason!") if(user in guilty) return var/datum/mind/guilty_conscience = user.mind - if(guilty_conscience && !declaration) //sec and medical are immune to becoming guilty through attack (we don't check holy because holy shouldn't be able to attack eachother anyways) + if(guilty_conscience && reason != GUILT_REASON_DECLARATION) //sec and medical are immune to becoming guilty through attack (we don't check holy because holy shouldn't be able to attack eachother anyways) var/datum/job/job = guilty_conscience.assigned_role if(job.departments_bitflags & (DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SECURITY)) return - if(declaration) - to_chat(owner, span_notice("[user] is now considered guilty by [GLOB.deity] from your declaration.")) - else - to_chat(owner, span_notice("[user] is now considered guilty by [GLOB.deity] for attacking you first.")) + to_chat(owner, span_notice("[user] is now considered guilty by [GLOB.deity] [reason]")) to_chat(user, span_danger("[GLOB.deity] no longer considers you innocent!")) guilty += user @@ -84,7 +108,7 @@ /datum/brain_trauma/special/honorbound/proc/on_attacked(mob/source, mob/attacker, attack_flags) SIGNAL_HANDLER if(!(attack_flags & (ATTACKER_STAMINA_ATTACK|ATTACKER_SHOVING))) - guilty(attacker) + guilty(attacker, "for attacking [source] first.") /** * Called by attack_honor signal to check whether an attack should be allowed or not @@ -95,6 +119,7 @@ */ /datum/brain_trauma/special/honorbound/proc/is_honorable(mob/living/carbon/human/honorbound_human, mob/living/target_creature) var/is_guilty = (target_creature in guilty) + var/is_human = ishuman(target_creature) //THE UNREADY (Applies over ANYTHING else!) if(honorbound_human == target_creature) return TRUE //oh come on now @@ -102,7 +127,7 @@ to_chat(honorbound_human, span_warning("There is no honor in attacking the unready.")) return FALSE //THE JUST (Applies over guilt except for med, so you best be careful!) - if(ishuman(target_creature)) + if(is_human) var/mob/living/carbon/human/target_human = target_creature var/datum/job/job = target_human.mind?.assigned_role var/is_holy = target_human.mind?.holy_role @@ -112,9 +137,9 @@ if(job?.departments_bitflags & DEPARTMENT_BITFLAG_MEDICAL && !is_guilty) to_chat(honorbound_human, span_warning("If you truly think this healer is not innocent, declare them guilty.")) return FALSE - //THE INNOCENT - if(!is_guilty) - to_chat(honorbound_human, span_warning("There is nothing righteous in attacking the innocent.")) + //THE INNOCENT (human and borg exclusive) + if(!is_guilty && (is_human || issilicon(target_creature))) + to_chat(target_creature, span_warning("There is nothing righteous in attacking the innocent.")) return FALSE return TRUE @@ -262,4 +287,6 @@ /datum/action/cooldown/spell/pointed/declare_evil/cast(mob/living/cast_on) . = ..() GLOB.religious_sect.adjust_favor(-required_favor, owner) - honor_trauma.guilty(cast_on, declaration = TRUE) + honor_trauma.guilty(cast_on, GUILT_REASON_DECLARATION) + +#undef GUILT_REASON_DECLARATION diff --git a/code/modules/religion/pyre_rites.dm b/code/modules/religion/pyre/pyre_rites.dm similarity index 100% rename from code/modules/religion/pyre_rites.dm rename to code/modules/religion/pyre/pyre_rites.dm diff --git a/code/modules/religion/religion_sects.dm b/code/modules/religion/religion_sects.dm index 8b96c210511..7b5fd398f1a 100644 --- a/code/modules/religion/religion_sects.dm +++ b/code/modules/religion/religion_sects.dm @@ -38,6 +38,8 @@ var/altar_icon_state /// Currently Active (non-deleted) rites var/list/active_rites + /// Chance that we fail a bible blessing. + var/smack_chance = DEFAULT_SMACK_CHANCE /// Whether the structure has CANDLE OVERLAYS! var/candle_overlay = TRUE @@ -123,6 +125,10 @@ blessed.add_mood_event("blessing", /datum/mood_event/blessing) return TRUE +/// What happens if we bless a corpse? By default just do the default smack behavior +/datum/religion_sect/proc/sect_dead_bless(mob/living/target, mob/living/chap) + return FALSE + /**** Nanotrasen Approved God ****/ /datum/religion_sect/puritanism @@ -286,11 +292,12 @@ name = "Punished God" quote = "To feel the freedom, you must first understand captivity." desc = "Incapacitate yourself in any way possible. Bad mutations, lost limbs, traumas, \ - even addictions. You will learn the secrets of the universe from your defeated shell." + even addictions. You will learn the secrets of the universe from your defeated shell." tgui_icon = "user-injured" altar_icon_state = "convertaltar-burden" alignment = ALIGNMENT_NEUT candle_overlay = FALSE + smack_chance = 0 rites_list = list(/datum/religion_rites/nullrod_transformation) /datum/religion_sect/burden/on_conversion(mob/living/carbon/human/new_convert) @@ -298,11 +305,11 @@ if(!ishuman(new_convert)) to_chat(new_convert, span_warning("[GLOB.deity] needs higher level creatures to fully comprehend the suffering. You are not burdened.")) return - new_convert.gain_trauma(/datum/brain_trauma/special/burdened, TRAUMA_RESILIENCE_MAGIC) + new_convert.gain_trauma(/datum/brain_trauma/special/burdened, TRAUMA_RESILIENCE_ABSOLUTE) /datum/religion_sect/burden/on_deconversion(mob/living/carbon/human/new_convert) if (ishuman(new_convert)) - new_convert.cure_trauma_type(/datum/brain_trauma/special/burdened, TRAUMA_RESILIENCE_MAGIC) + new_convert.cure_trauma_type(/datum/brain_trauma/special/burdened, TRAUMA_RESILIENCE_ABSOLUTE) return ..() /datum/religion_sect/burden/tool_examine(mob/living/carbon/human/burdened) //display burden level @@ -313,6 +320,76 @@ return "You are at burden level [burden.burden_level]/9." return "You are not burdened." +/datum/religion_sect/burden/sect_bless(mob/living/carbon/target, mob/living/carbon/chaplain) + if(!istype(target) || !istype(chaplain)) + return FALSE + var/datum/brain_trauma/special/burdened/burden = chaplain.has_trauma_type(/datum/brain_trauma/special/burdened) + if(!burden) + return FALSE + var/burden_modifier = max(1 - 0.07 * burden.burden_level, 0.01) + var/transferred = FALSE + var/list/hurt_limbs = target.get_damaged_bodyparts(1, 1, BODYTYPE_ORGANIC) + target.get_wounded_bodyparts(BODYTYPE_ORGANIC) + var/list/chaplains_limbs = list() + for(var/obj/item/bodypart/possible_limb in chaplain.bodyparts) + if(IS_ORGANIC_LIMB(possible_limb)) + chaplains_limbs += possible_limb + if(length(chaplains_limbs)) + for(var/obj/item/bodypart/affected_limb as anything in hurt_limbs) + var/obj/item/bodypart/chaplains_limb = chaplain.get_bodypart(affected_limb.body_zone) + if(!chaplains_limb || !IS_ORGANIC_LIMB(chaplains_limb)) + chaplains_limb = pick(chaplains_limbs) + var/brute_damage = affected_limb.brute_dam + var/burn_damage = affected_limb.burn_dam + if((brute_damage || burn_damage)) + transferred = TRUE + affected_limb.heal_damage(brute_damage, burn_damage, required_bodytype = BODYTYPE_ORGANIC) + chaplains_limb.receive_damage(brute_damage * burden_modifier, burn_damage * burden_modifier, forced = TRUE, wound_bonus = CANT_WOUND) + for(var/datum/wound/iter_wound as anything in affected_limb.wounds) + transferred = TRUE + iter_wound.remove_wound() + iter_wound.apply_wound(chaplains_limb) + if(HAS_TRAIT_FROM(target, TRAIT_HUSK, BURN)) + transferred = TRUE + target.cure_husk(BURN) + chaplain.become_husk(BURN) + var/toxin_damage = target.getToxLoss() + if(toxin_damage && !HAS_TRAIT(chaplain, TRAIT_TOXIMMUNE)) + transferred = TRUE + target.adjustToxLoss(-toxin_damage) + chaplain.adjustToxLoss(toxin_damage * burden_modifier, forced = TRUE) + var/suffocation_damage = target.getOxyLoss() + if(suffocation_damage && !HAS_TRAIT(chaplain, TRAIT_NOBREATH)) + transferred = TRUE + target.adjustOxyLoss(-suffocation_damage) + chaplain.adjustOxyLoss(suffocation_damage * burden_modifier, forced = TRUE) + var/clone_damage = target.getCloneLoss() + if(clone_damage && !HAS_TRAIT(chaplain, TRAIT_NOCLONELOSS)) + transferred = TRUE + target.adjustCloneLoss(-clone_damage) + chaplain.adjustCloneLoss(clone_damage * burden_modifier, forced = TRUE) + if(!HAS_TRAIT(chaplain, TRAIT_NOBLOOD)) + if(target.blood_volume < BLOOD_VOLUME_SAFE) + var/target_blood_data = target.get_blood_data(target.get_blood_id()) + var/chaplain_blood_data = chaplain.get_blood_data(chaplain.get_blood_id()) + var/transferred_blood_amount = min(chaplain.blood_volume, BLOOD_VOLUME_SAFE - target.blood_volume) + if(transferred_blood_amount && (chaplain_blood_data["blood_type"] in get_safe_blood(target_blood_data["blood_type"]))) + transferred = TRUE + chaplain.transfer_blood_to(target, transferred_blood_amount, forced = TRUE) + if(target.blood_volume > BLOOD_VOLUME_EXCESS) + target.transfer_blood_to(chaplain, target.blood_volume - BLOOD_VOLUME_EXCESS, forced = TRUE) + target.update_damage_overlays() + chaplain.update_damage_overlays() + if(transferred) + target.visible_message(span_notice("[chaplain] takes on [target]'s burden!")) + to_chat(target, span_boldnotice("May the power of [GLOB.deity] compel you to be healed!")) + playsound(chaplain, SFX_PUNCH, 25, vary = TRUE, extrarange = -1) + target.add_mood_event("blessing", /datum/mood_event/blessing) + else + to_chat(chaplain, span_warning("They hold no burden!")) + return TRUE + +/datum/religion_sect/burden/sect_dead_bless(mob/living/target, mob/living/chaplain) + return sect_bless(target, chaplain) /datum/religion_sect/honorbound name = "Honorbound God" diff --git a/code/modules/uplink/uplink_devices.dm b/code/modules/uplink/uplink_devices.dm index 5106401c4aa..65cbe2c35b4 100644 --- a/code/modules/uplink/uplink_devices.dm +++ b/code/modules/uplink/uplink_devices.dm @@ -5,7 +5,7 @@ // simultaneously is an annoying distraction. /obj/item/uplink name = "station bounced radio" - icon = 'icons/obj/radio.dmi' + icon = 'icons/obj/device.dmi' icon_state = "radio" inhand_icon_state = "radio" worn_icon_state = "radio" diff --git a/code/modules/vehicles/mecha/mecha_parts.dm b/code/modules/vehicles/mecha/mecha_parts.dm index fe5b53caba7..18598ed465a 100644 --- a/code/modules/vehicles/mecha/mecha_parts.dm +++ b/code/modules/vehicles/mecha/mecha_parts.dm @@ -336,7 +336,7 @@ /obj/item/circuitboard/mecha name = "exosuit circuit board" - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "std_mod" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' diff --git a/code/modules/wiremod/core/component.dm b/code/modules/wiremod/core/component.dm index 55fb258f0fb..fbaa01fc030 100644 --- a/code/modules/wiremod/core/component.dm +++ b/code/modules/wiremod/core/component.dm @@ -9,7 +9,7 @@ */ /obj/item/circuit_component name = COMPONENT_DEFAULT_NAME - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "component" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' diff --git a/code/modules/wiremod/core/integrated_circuit.dm b/code/modules/wiremod/core/integrated_circuit.dm index 4a04da3480e..41e6c91d0c6 100644 --- a/code/modules/wiremod/core/integrated_circuit.dm +++ b/code/modules/wiremod/core/integrated_circuit.dm @@ -11,7 +11,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) /obj/item/integrated_circuit name = "integrated circuit" desc = "By inserting components and a cell into this, wiring them up, and putting them into a shell, anyone can pretend to be a programmer." - icon = 'icons/obj/assemblies/module.dmi' + icon = 'icons/obj/assemblies/circuitry_n_data.dmi' icon_state = "integrated_circuit" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' diff --git a/html/changelogs/AutoChangeLog-pr-740.yml b/html/changelogs/AutoChangeLog-pr-740.yml new file mode 100644 index 00000000000..5be58bef7f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-740.yml @@ -0,0 +1,5 @@ +author: "YesterdaysPromise" +delete-after: True +changes: + - image: "Following now have unique item sprites: syndicate war declaration radio, curator and chief beacon's, chaplain beacon." + - image: "Following now have unique inhand sprites: radio, export scanner, walkie-talkie, syndicate war declaration radio, curator and chief beacon's, chaplain beacon." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-904.yml b/html/changelogs/AutoChangeLog-pr-904.yml deleted file mode 100644 index 8c5ed217d78..00000000000 --- a/html/changelogs/AutoChangeLog-pr-904.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "mc-oofert" -delete-after: True -changes: - - bugfix: "shield wall gens actually use power now" - - qol: "shield wall gens may now be rebuilt and use some balloon alerts, and have wiring" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-905.yml b/html/changelogs/AutoChangeLog-pr-905.yml deleted file mode 100644 index 883430ed4dc..00000000000 --- a/html/changelogs/AutoChangeLog-pr-905.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Autisem" -delete-after: True -changes: - - admin: "A new debug verb to turn yourself into an MMI(almost the funniest thing)" - - bugfix: "MMI's inside mechs can now properly open doors like there posibrain counterparts" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-906.yml b/html/changelogs/AutoChangeLog-pr-906.yml deleted file mode 100644 index 64a5a78e51c..00000000000 --- a/html/changelogs/AutoChangeLog-pr-906.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Pickle-Coding" -delete-after: True -changes: - - code_imp: "The singularity processing is a bit more important than the other subsystems." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-908.yml b/html/changelogs/AutoChangeLog-pr-908.yml new file mode 100644 index 00000000000..9dfc802f117 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-908.yml @@ -0,0 +1,5 @@ +author: "Vekter" +delete-after: True +changes: + - rscdel: "Replaced the \"monkey cube\" in Birdshot's tool storage with a different \"monkey cube\"." + - rscadd: "Added a fun surprise item to Birdshot's tool storage to compensate for the above change." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-909.yml b/html/changelogs/AutoChangeLog-pr-909.yml new file mode 100644 index 00000000000..e927e5b6c8d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-909.yml @@ -0,0 +1,4 @@ +author: "Fikou" +delete-after: True +changes: + - rscadd: "Instead of punished sect healing people like the normal bibble- you take their burdens on instead!" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-911.yml b/html/changelogs/AutoChangeLog-pr-911.yml deleted file mode 100644 index d043809b784..00000000000 --- a/html/changelogs/AutoChangeLog-pr-911.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MidoriWroth" -delete-after: True -changes: - - bugfix: "Icebox chemistry lab shutters are controlled by the button in the chemistry lab and not in the pharmacy again." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-912.yml b/html/changelogs/AutoChangeLog-pr-912.yml deleted file mode 100644 index d745ebed747..00000000000 --- a/html/changelogs/AutoChangeLog-pr-912.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ben10Omintrix" -delete-after: True -changes: - - bugfix: "fix parrots not appearing dead sometimes" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-913.yml b/html/changelogs/AutoChangeLog-pr-913.yml deleted file mode 100644 index 2b62623c418..00000000000 --- a/html/changelogs/AutoChangeLog-pr-913.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Jacquerel" -delete-after: True -changes: - - rscadd: "Agent IDs once more trick Beepsky into treating you more leniently." - - rscadd: "Prisoner IDs make Beepsky treat you somewhat more suspiciously, as do Syndicate IDs. Wearing a Centcomm ID means that Beepsky is aware that you are above the law." - - rscadd: "Player-controlled security bots can view someone's assessed threat level by examining them." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-914.yml b/html/changelogs/AutoChangeLog-pr-914.yml deleted file mode 100644 index cc06743c2c4..00000000000 --- a/html/changelogs/AutoChangeLog-pr-914.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "00-Steven" -delete-after: True -changes: - - bugfix: "Sign Language action properly toggles between an active/inactive background again." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-915.yml b/html/changelogs/AutoChangeLog-pr-915.yml deleted file mode 100644 index c70d44d8b94..00000000000 --- a/html/changelogs/AutoChangeLog-pr-915.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SyncIt21" -delete-after: True -changes: - - bugfix: "crafting food or any other items that require reagents will not leave behind blank reagents. That and properly updates the holder those reagents are stored in" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-916.yml b/html/changelogs/AutoChangeLog-pr-916.yml deleted file mode 100644 index acc04c06187..00000000000 --- a/html/changelogs/AutoChangeLog-pr-916.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Fikou" -delete-after: True -changes: - - qol: "psyker echolocation cooldown time has been reduced from 2 to 1.8 seconds" - - bugfix: "psyker heads no longer render an overlay of not having eyes" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-917.yml b/html/changelogs/AutoChangeLog-pr-917.yml deleted file mode 100644 index 7ad9a9fd1b9..00000000000 --- a/html/changelogs/AutoChangeLog-pr-917.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "jlsnow301" -delete-after: True -changes: - - bugfix: "Mod links are now disabled in the virtual realm." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-918.yml b/html/changelogs/AutoChangeLog-pr-918.yml new file mode 100644 index 00000000000..aaa0efb7110 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-918.yml @@ -0,0 +1,4 @@ +author: "Hatterhat" +delete-after: True +changes: + - bugfix: "The toxin damage from overdosing on TWitch now respects server tickrate/REM." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-919.yml b/html/changelogs/AutoChangeLog-pr-919.yml new file mode 100644 index 00000000000..9722aa69845 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-919.yml @@ -0,0 +1,6 @@ +author: "tralezab" +delete-after: True +changes: + - balance: "Honorbound no longer cares about innocence when it comes to lesser creatures. They can still be considered unready in some cases." + - balance: "Attacking a cultist with a halo or a nuclear operative first instantly makes THEM guilty, allowing further attacks." + - balance: "More favor for converting someone to the honorbound rules" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-920.yml b/html/changelogs/AutoChangeLog-pr-920.yml deleted file mode 100644 index d61cc3b3bbf..00000000000 --- a/html/changelogs/AutoChangeLog-pr-920.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed an issue with the offsets of ridden vehicles on tables, and another when buckled to a bed." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-931.yml b/html/changelogs/AutoChangeLog-pr-931.yml new file mode 100644 index 00000000000..e1ef37722a0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-931.yml @@ -0,0 +1,4 @@ +author: "IsaacExists" +delete-after: True +changes: + - sound: "Added human laughter to felinids" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-932.yml b/html/changelogs/AutoChangeLog-pr-932.yml new file mode 100644 index 00000000000..13166c6e94c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-932.yml @@ -0,0 +1,4 @@ +author: "Rhials" +delete-after: True +changes: + - qol: "Bar signs ordered from cargo will no longer be access-restricted." \ No newline at end of file diff --git a/html/changelogs/archive/2023-12.yml b/html/changelogs/archive/2023-12.yml index 07886050898..e99df6cc6f7 100644 --- a/html/changelogs/archive/2023-12.yml +++ b/html/changelogs/archive/2023-12.yml @@ -9,3 +9,40 @@ - bugfix: bitrunning den shows up on the camera console now. Vermidia: - spellcheck: fixed typo in one of spacer's moodlets +2023-12-03: + 00-Steven: + - bugfix: Sign Language action properly toggles between an active/inactive background + again. + Autisem: + - admin: A new debug verb to turn yourself into an MMI(almost the funniest thing) + - bugfix: MMI's inside mechs can now properly open doors like there posibrain counterparts + Ben10Omintrix: + - bugfix: fix parrots not appearing dead sometimes + Fikou: + - qol: psyker echolocation cooldown time has been reduced from 2 to 1.8 seconds + - bugfix: psyker heads no longer render an overlay of not having eyes + Ghommie: + - bugfix: Fixed an issue with the offsets of ridden vehicles on tables, and another + when buckled to a bed. + Jacquerel: + - rscadd: Agent IDs once more trick Beepsky into treating you more leniently. + - rscadd: Prisoner IDs make Beepsky treat you somewhat more suspiciously, as do + Syndicate IDs. Wearing a Centcomm ID means that Beepsky is aware that you are + above the law. + - rscadd: Player-controlled security bots can view someone's assessed threat level + by examining them. + MidoriWroth: + - bugfix: Icebox chemistry lab shutters are controlled by the button in the chemistry + lab and not in the pharmacy again. + Pickle-Coding: + - code_imp: The singularity processing is a bit more important than the other subsystems. + SyncIt21: + - bugfix: crafting food or any other items that require reagents will not leave + behind blank reagents. That and properly updates the holder those reagents are + stored in + jlsnow301: + - bugfix: Mod links are now disabled in the virtual realm. + mc-oofert: + - bugfix: shield wall gens actually use power now + - qol: shield wall gens may now be rebuilt and use some balloon alerts, and have + wiring diff --git a/icons/mob/inhands/items/devices_lefthand.dmi b/icons/mob/inhands/items/devices_lefthand.dmi index bf9c3154c62..7b558c20e6e 100644 Binary files a/icons/mob/inhands/items/devices_lefthand.dmi and b/icons/mob/inhands/items/devices_lefthand.dmi differ diff --git a/icons/mob/inhands/items/devices_righthand.dmi b/icons/mob/inhands/items/devices_righthand.dmi index 93a5d929610..042ecb745c4 100644 Binary files a/icons/mob/inhands/items/devices_righthand.dmi and b/icons/mob/inhands/items/devices_righthand.dmi differ diff --git a/icons/obj/assemblies/circuitry_n_data.dmi b/icons/obj/assemblies/circuitry_n_data.dmi new file mode 100644 index 00000000000..20a83f03e53 Binary files /dev/null and b/icons/obj/assemblies/circuitry_n_data.dmi differ diff --git a/icons/obj/assemblies/module.dmi b/icons/obj/assemblies/module.dmi deleted file mode 100644 index 2656c8db432..00000000000 Binary files a/icons/obj/assemblies/module.dmi and /dev/null differ diff --git a/icons/obj/assemblies/stock_parts.dmi b/icons/obj/assemblies/stock_parts.dmi index 6b2353b80dd..d249b0ab234 100644 Binary files a/icons/obj/assemblies/stock_parts.dmi and b/icons/obj/assemblies/stock_parts.dmi differ diff --git a/icons/obj/clothing/headsets.dmi b/icons/obj/clothing/headsets.dmi new file mode 100644 index 00000000000..b977487e2c6 Binary files /dev/null and b/icons/obj/clothing/headsets.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index fe74b6c11c5..4cb32290fc5 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi deleted file mode 100644 index 7794b8ca5c8..00000000000 Binary files a/icons/obj/radio.dmi and /dev/null differ diff --git a/modular_skyrat/master_files/code/game/objects/items/encryptionkey.dm b/modular_skyrat/master_files/code/game/objects/items/encryptionkey.dm deleted file mode 100644 index 793371eff89..00000000000 --- a/modular_skyrat/master_files/code/game/objects/items/encryptionkey.dm +++ /dev/null @@ -1,101 +0,0 @@ -/obj/item/encryptionkey/translation - name = "translation key" - desc = "An encryption key that automatically encodes nothing. You shouldn't be seeing this." - icon_state = "translation_cypherkey" - greyscale_config = null - greyscale_colors = null - -/obj/item/encryptionkey/translation/beach_bum - name = "\improper Beachtongue translation key" - desc = "An encryption key that automatically encodes Beachtongue heard through the radio into common." - translated_language = /datum/language/beachbum - -/obj/item/encryptionkey/translation/buzzwords - name = "\improper Buzzwords translation key" - desc = "An encryption key that automatically encodes Buzzwords heard through the radio into common." - translated_language = /datum/language/buzzwords - -/obj/item/encryptionkey/translation/gutter - name = "\improper Gutter translation key" - desc = "An encryption key that automatically encodes Gutter heard through the radio into common." - translated_language = /datum/language/gutter - -/obj/item/encryptionkey/translation/machine - name = "\improper Encoded Audio Language translation key" - desc = "An encryption key that automatically encodes Encoded Audio Language heard through the radio into common." - translated_language = /datum/language/machine - -/obj/item/encryptionkey/translation/mushroom - name = "\improper Mushroom translation key" - desc = "An encryption key that automatically encodes Mushroom heard through the radio into common." - translated_language = /datum/language/mushroom - -/obj/item/encryptionkey/pan_slavic - name = "\improper Pan-Slavic translation key" - desc = "An encryption key that automatically encodes Pan-Slavic heard through the radio into common." - translated_language = /datum/language/panslavic - -/obj/item/encryptionkey/translation/shadow - name = "\improper Shadowtongue translation key" - desc = "An encryption key that automatically encodes Shadowtongue heard through the radio into common." - translated_language = /datum/language/shadowtongue - -/obj/item/encryptionkey/translation/skrellian - name = "\improper Skrellian translation key" - desc = "An encryption key that automatically encodes Skrellian heard through the radio into common." - translated_language = /datum/language/skrell - -/obj/item/encryptionkey/translation/slime - name = "\improper Slime translation key" - desc = "An encryption key that automatically encodes Slime heard through the radio into common." - translated_language = /datum/language/slime - -/obj/item/encryptionkey/translation/spacer - name = "\improper Spacer translation key" - desc = "An encryption key that automatically encodes Spacer heard through the radio into common." - translated_language = /datum/language/spacer - -/obj/item/encryptionkey/translation/sylvan - name = "\improper Sylvan translation key" - desc = "An encryption key that automatically encodes Sylvan heard through the radio into common." - translated_language = /datum/language/sylvan - -/obj/item/encryptionkey/translation/tajaran - name = "\improper Siik'tajr translation key" - desc = "An encryption key that automatically encodes Siik'tajr heard through the radio into common." - translated_language = /datum/language/siiktajr - -/obj/item/encryptionkey/translation/akula - name = "\improper Te Velu Akko translation key" - desc = "An encryption key that automatically encodes Te Velu Akko heard through the radio into common." - translated_language = /datum/language/akulan - -/obj/item/encryptionkey/translation/terrum - name = "\improper Terrum translation key" - desc = "An encryption key that automatically encodes Terrum heard through the radio into common." - translated_language = /datum/language/terrum - -/obj/item/encryptionkey/translation/teshari - name = "\improper Schechi translation key" - desc = "An encryption key that automatically encodes Schechi heard through the radio into common." - translated_language = /datum/language/schechi - -/obj/item/encryptionkey/translation/uncommon - name = "\improper Galactic Uncommon translation key" - desc = "An encryption key that automatically encodes Galactic Uncommon heard through the radio into common." - translated_language = /datum/language/uncommon - -/obj/item/encryptionkey/translation/vox - name = "\improper Vox-pidgin translation key" - desc = "An encryption key that automatically encodes Vox-pidgin heard through the radio into common." - translated_language = /datum/language/vox - -/obj/item/encryptionkey/translation/vulpkanin - name = "\improper Canilunzt translation key" - desc = "An encryption key that automatically encodes Canilunzt heard through the radio into common." - translated_language = /datum/language/canilunzt - -/obj/item/encryptionkey/translation/yangyu - name = "\improper Yangyu translation key" - desc = "An encryption key that automatically encodes Yangyu heard through the radio into common." - translated_language = /datum/language/yangyu diff --git a/modular_skyrat/modules/deforest_medical_items/code/chemicals/twitch.dm b/modular_skyrat/modules/deforest_medical_items/code/chemicals/twitch.dm index 424430d1234..d3016e10bbe 100644 --- a/modular_skyrat/modules/deforest_medical_items/code/chemicals/twitch.dm +++ b/modular_skyrat/modules/deforest_medical_items/code/chemicals/twitch.dm @@ -161,7 +161,6 @@ /datum/reagent/drug/twitch/overdose_process(mob/living/carbon/our_guy, seconds_per_tick, times_fired) . = ..() - our_guy.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) our_guy.adjustOrganLoss(ORGAN_SLOT_HEART, 1 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) @@ -176,7 +175,6 @@ our_guy.add_filter(TWITCH_OVERDOSE_BLUR_EFFECT, 2, phase_filter(8)) addtimer(CALLBACK(our_guy, TYPE_PROC_REF(/datum, remove_filter), TWITCH_OVERDOSE_BLUR_EFFECT), 0.5 SECONDS) - /// Changes heard message spans into that defined on the drug earlier /datum/reagent/drug/twitch/proc/distort_hearing(datum/source, list/hearing_args) SIGNAL_HANDLER diff --git a/tgstation.dme b/tgstation.dme index 83556138c36..6542ef67643 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -842,7 +842,6 @@ #include "code\datums\ductnet.dm" #include "code\datums\emotes.dm" #include "code\datums\ert.dm" -#include "code\datums\forced_movement.dm" #include "code\datums\hailer_phrase.dm" #include "code\datums\holocall.dm" #include "code\datums\hotkeys_help.dm" @@ -5462,7 +5461,6 @@ #include "code\modules\recycling\disposal\outlet.dm" #include "code\modules\recycling\disposal\pipe.dm" #include "code\modules\recycling\disposal\pipe_sorting.dm" -#include "code\modules\religion\pyre_rites.dm" #include "code\modules\religion\religion_sects.dm" #include "code\modules\religion\religion_structures.dm" #include "code\modules\religion\rites.dm" @@ -5471,6 +5469,7 @@ #include "code\modules\religion\festival\instrument_rites.dm" #include "code\modules\religion\honorbound\honorbound_rites.dm" #include "code\modules\religion\honorbound\honorbound_trauma.dm" +#include "code\modules\religion\pyre\pyre_rites.dm" #include "code\modules\religion\sparring\ceremonial_gear.dm" #include "code\modules\religion\sparring\sparring_contract.dm" #include "code\modules\religion\sparring\sparring_datum.dm" @@ -6165,7 +6164,6 @@ #include "modular_skyrat\master_files\code\game\objects\items\AI_modules.dm" #include "modular_skyrat\master_files\code\game\objects\items\cards_ids.dm" #include "modular_skyrat\master_files\code\game\objects\items\dyekit.dm" -#include "modular_skyrat\master_files\code\game\objects\items\encryptionkey.dm" #include "modular_skyrat\master_files\code\game\objects\items\hhmirror.dm" #include "modular_skyrat\master_files\code\game\objects\items\holy_weapons.dm" #include "modular_skyrat\master_files\code\game\objects\items\oxygen_candle.dm"