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"