diff --git a/.gitignore b/.gitignore
index 28e074442df9c..0a43cf8a696b5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -248,3 +248,4 @@ define_sanity_output.txt
# Running OpenDream locally
tgstation.json
+rust_g64.dll
diff --git a/.vscode/launch.json b/.vscode/launch.json
index bf3a209531db0..ddaeb44aefc0b 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -54,6 +54,13 @@
"-trusted"
],
"preLaunchTask": "Build All (low memory mode)"
+ },
+ {
+ "type": "opendream",
+ "request": "launch",
+ "name": "Launch OpenDream (requires extension, 64 bit rustg, and an SS14 account)",
+ "preLaunchTask": "OpenDream: compile ${command:CurrentDME}",
+ "json_path": "${workspaceFolder}/${command:CurrentJson}"
}
]
}
diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_lodge.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_lodge.dmm
index d35fc52db02b4..3cc4189273f58 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_surface_lodge.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_surface_lodge.dmm
@@ -1,6 +1,6 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"ac" = (
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"aw" = (
/obj/effect/turf_decal/siding/wood{
@@ -36,7 +36,7 @@
pixel_x = -5;
pixel_y = 1
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"aU" = (
/obj/effect/decal/cleanable/blood/footprints{
@@ -48,7 +48,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 6
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"bs" = (
/obj/machinery/door/airlock/wood{
@@ -84,7 +84,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 4
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"bX" = (
/obj/structure/table,
@@ -134,7 +134,7 @@
dir = 1
},
/obj/effect/turf_decal/weather/snow/corner,
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"cQ" = (
/obj/effect/turf_decal/siding/wood{
@@ -189,7 +189,7 @@
dir = 1
},
/obj/effect/turf_decal/weather/snow/corner,
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"dC" = (
/obj/machinery/door/airlock/wood{
@@ -213,7 +213,7 @@
/obj/structure/railing/corner{
color = "#beada5"
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/ruin/huntinglodge)
"dQ" = (
/obj/effect/decal/cleanable/wrapping,
@@ -305,13 +305,13 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 4
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"fi" = (
/obj/effect/turf_decal/weather/snow/corner{
dir = 4
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"fB" = (
/obj/effect/turf_decal/siding/wood{
@@ -337,7 +337,7 @@
dir = 9
},
/obj/effect/decal/cleanable/blood/drip,
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"gu" = (
/obj/structure/table/wood,
@@ -401,7 +401,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 8
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"gY" = (
/turf/open/floor/light/colour_cycle/dancefloor_b,
@@ -410,7 +410,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 10
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"hb" = (
/obj/structure/railing{
@@ -541,7 +541,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 10
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"jp" = (
/obj/effect/turf_decal/siding/wood/corner{
@@ -868,7 +868,7 @@
dir = 6
},
/obj/effect/decal/cleanable/blood/drip,
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"oY" = (
/obj/structure/railing{
@@ -881,7 +881,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 6
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"pl" = (
/obj/effect/turf_decal/siding/wood{
@@ -983,7 +983,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 9
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"qL" = (
/obj/structure/table/wood/fancy/orange,
@@ -1038,7 +1038,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 5
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"rI" = (
/obj/effect/decal/cleanable/blood/tracks,
@@ -1048,7 +1048,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 4
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"rS" = (
/obj/effect/turf_decal/siding/wood{
@@ -1061,7 +1061,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 10
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"sX" = (
/obj/structure/table/wood/fancy/royalblack,
@@ -1217,7 +1217,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 1
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"vO" = (
/obj/effect/turf_decal/siding/wood{
@@ -1304,7 +1304,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 8
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"wP" = (
/obj/effect/decal/cleanable/blood/gibs/up,
@@ -1481,7 +1481,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 1
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"yO" = (
/obj/effect/decal/cleanable/garbage,
@@ -1595,7 +1595,7 @@
dir = 8
},
/obj/effect/decal/cleanable/blood/tracks,
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"AF" = (
/obj/effect/turf_decal/weather/snow/corner{
@@ -1789,7 +1789,7 @@
/obj/effect/decal/cleanable/blood/trails{
dir = 4
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"Ds" = (
/obj/effect/turf_decal/siding/wood,
@@ -1962,7 +1962,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 5
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"Fw" = (
/obj/structure/railing{
@@ -2037,7 +2037,7 @@
dir = 4;
color = "#beada5"
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"Gn" = (
/obj/effect/turf_decal/siding/wood{
@@ -2112,7 +2112,7 @@
/obj/effect/decal/cleanable/blood/tracks{
dir = 10
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"Hi" = (
/obj/structure/table/wood/fancy,
@@ -2177,7 +2177,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 1
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"Hw" = (
/obj/effect/turf_decal/siding/wood{
@@ -2208,7 +2208,7 @@
dir = 8
},
/obj/effect/decal/cleanable/blood/drip,
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"HL" = (
/obj/structure/table/wood,
@@ -2375,7 +2375,7 @@
dir = 8;
color = "#beada5"
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"KB" = (
/obj/effect/turf_decal/siding/wood{
@@ -2536,14 +2536,14 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 6
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"NW" = (
/obj/effect/turf_decal/weather/snow/corner,
/obj/effect/turf_decal/weather/snow/corner{
dir = 1
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"Oa" = (
/obj/effect/turf_decal/siding/wood,
@@ -2646,7 +2646,7 @@
/obj/effect/decal/cleanable/blood/tracks{
dir = 8
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"Pa" = (
/obj/effect/decal/cleanable/blood/gibs/up,
@@ -2685,7 +2685,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 9
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"PS" = (
/obj/effect/spawner/structure/window/reinforced{
@@ -2837,7 +2837,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 10
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"Sp" = (
/obj/effect/decal/cleanable/blood/trails{
@@ -2911,7 +2911,7 @@
/obj/effect/decal/cleanable/blood/trails{
dir = 4
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"TC" = (
/obj/effect/decal/cleanable/blood,
@@ -3043,7 +3043,7 @@
dir = 8
},
/obj/machinery/light/small/dim/directional/west,
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/ruin/huntinglodge)
"VW" = (
/obj/effect/turf_decal/weather/snow/corner{
@@ -3053,7 +3053,7 @@
pixel_x = -4;
pixel_y = -15
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"Wn" = (
/obj/effect/decal/cleanable/blood/splatter,
@@ -3109,7 +3109,7 @@
dir = 1
},
/obj/effect/turf_decal/weather/snow/corner,
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"Xk" = (
/obj/effect/turf_decal/siding/wood{
@@ -3150,7 +3150,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 5
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"XF" = (
/obj/effect/decal/cleanable/dirt,
@@ -3207,7 +3207,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 5
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"YD" = (
/obj/effect/spawner/structure/window/reinforced{
@@ -3266,14 +3266,14 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 9
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"ZA" = (
/obj/effect/turf_decal/weather/snow/corner{
dir = 6
},
/obj/machinery/light/small/dim/directional/east,
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/ruin/huntinglodge)
"ZB" = (
/obj/structure/table/wood/fancy,
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm
index 97b4e3d53c99f..6ef2066b19156 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm
@@ -467,7 +467,7 @@
pixel_y = 4
},
/obj/item/bodypart/chest,
-/obj/item/organ/internal/heart,
+/obj/item/organ/heart,
/obj/item/multitool,
/turf/open/floor/iron/freezer,
/area/ruin/powered)
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_mining_site.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_mining_site.dmm
index d4862ce03ee07..0ea4048d1276a 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_mining_site.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_mining_site.dmm
@@ -142,7 +142,7 @@
/turf/open/misc/ice/icemoon,
/area/icemoon/underground/explored)
"sp" = (
-/obj/item/organ/internal/monster_core/regenerative_core/legion{
+/obj/item/organ/monster_core/regenerative_core/legion{
time_to_decay = 0;
pixel_x = 11;
pixel_y = 4;
@@ -273,7 +273,7 @@
/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/underground/explored)
"JP" = (
-/obj/item/organ/internal/monster_core/regenerative_core/legion{
+/obj/item/organ/monster_core/regenerative_core/legion{
time_to_decay = 0;
pixel_x = -12;
pixel_y = -4;
@@ -365,7 +365,7 @@
/turf/open/floor/plating/snowed/smoothed/icemoon,
/area/icemoon/underground/explored)
"VT" = (
-/obj/item/organ/internal/monster_core/regenerative_core/legion{
+/obj/item/organ/monster_core/regenerative_core/legion{
time_to_decay = 0;
pixel_x = 4;
pixel_y = 3;
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_syndidome.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_syndidome.dmm
index 971b958256862..e2b11a02964eb 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_syndidome.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_syndidome.dmm
@@ -177,7 +177,7 @@
/obj/structure/railing/corner{
dir = 4
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"cb" = (
/obj/effect/turf_decal/weather/dirt{
@@ -217,8 +217,8 @@
dir = 5
},
/obj/machinery/smartfridge/organ,
-/obj/item/organ/internal/alien/resinspinner,
-/obj/item/organ/internal/eyes/night_vision,
+/obj/item/organ/alien/resinspinner,
+/obj/item/organ/eyes/night_vision,
/turf/open/floor/mineral/plastitanium/red,
/area/ruin/syndibiodome)
"cE" = (
@@ -366,7 +366,7 @@
/obj/structure/railing{
dir = 9
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"eO" = (
/obj/effect/decal/cleanable/dirt,
@@ -1500,7 +1500,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 5
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"ue" = (
/obj/effect/turf_decal/trimline/dark_red/line{
@@ -1524,7 +1524,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 6
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"uq" = (
/obj/effect/turf_decal/trimline/dark_blue/line{
@@ -1589,7 +1589,7 @@
/obj/structure/railing{
dir = 10
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"uH" = (
/obj/effect/decal/cleanable/blood/footprints,
@@ -1749,7 +1749,7 @@
/obj/structure/railing{
dir = 5
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"wd" = (
/obj/effect/decal/cleanable/blood/tracks,
@@ -1927,7 +1927,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 5
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"xz" = (
/obj/effect/turf_decal/weather/dirt{
@@ -2154,7 +2154,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 1
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"zF" = (
/obj/effect/turf_decal/trimline/green/corner,
@@ -2217,7 +2217,7 @@
dir = 1
},
/obj/effect/turf_decal/weather/snow/corner,
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"Ax" = (
/obj/effect/decal/cleanable/blood/old,
@@ -2298,7 +2298,7 @@
/obj/structure/railing/corner{
dir = 1
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"Br" = (
/obj/effect/turf_decal/siding/wideplating/dark/corner{
@@ -2419,13 +2419,13 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 1
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"Dl" = (
/obj/effect/turf_decal/weather/snow/corner{
dir = 8
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"Do" = (
/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium,
@@ -2825,7 +2825,7 @@
/obj/structure/railing/corner{
dir = 8
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"IR" = (
/obj/effect/turf_decal/trimline/purple/line{
@@ -2848,7 +2848,7 @@
dir = 1
},
/obj/structure/railing/corner,
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"Jk" = (
/obj/machinery/door/firedoor,
@@ -2922,7 +2922,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 10
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"JZ" = (
/obj/effect/decal/cleanable/blood/trails{
@@ -2971,7 +2971,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 9
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"KE" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
@@ -3076,7 +3076,7 @@
},
/obj/effect/turf_decal/weather/snow/corner,
/obj/machinery/light/warm/dim/directional/north,
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/ruin/syndibiodome)
"Ly" = (
/obj/structure/aquarium/prefilled,
@@ -3315,7 +3315,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 8
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"Nt" = (
/obj/effect/decal/cleanable/dirt/dust,
@@ -3922,7 +3922,7 @@
/obj/structure/railing/corner{
dir = 8
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"Uc" = (
/obj/effect/turf_decal/siding/wood{
@@ -4015,7 +4015,7 @@
/obj/effect/turf_decal/weather/snow/corner{
dir = 4
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"UI" = (
/obj/item/flashlight/lantern/on,
@@ -4416,7 +4416,7 @@
/obj/structure/railing{
dir = 6
},
-/turf/open/floor/stone,
+/turf/open/floor/stone/icemoon,
/area/icemoon/surface/outdoors/noteleport)
"ZT" = (
/obj/machinery/light/warm/directional/south,
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm
index 6156174aaba56..bd900021094f3 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm
@@ -235,7 +235,7 @@
"oL" = (
/obj/structure/bonfire/prelit,
/obj/effect/decal/cleanable/ash,
-/obj/item/organ/external/tail/lizard,
+/obj/item/organ/tail/lizard,
/obj/effect/decal/cleanable/blood/old,
/obj/structure/stone_tile/slab/cracked,
/turf/open/misc/asteroid/basalt/wasteland,
@@ -313,7 +313,7 @@
/area/ruin/unpowered/elephant_graveyard)
"wp" = (
/obj/item/knife/combat/bone,
-/obj/item/organ/internal/tongue,
+/obj/item/organ/tongue,
/obj/effect/decal/cleanable/blood/old,
/turf/open/misc/asteroid/basalt/wasteland,
/area/ruin/unpowered/elephant_graveyard)
@@ -386,8 +386,8 @@
/turf/open/misc/asteroid/basalt/lava_land_surface,
/area/lavaland/surface)
"Di" = (
-/obj/item/organ/internal/lungs,
-/obj/item/organ/internal/liver,
+/obj/item/organ/lungs,
+/obj/item/organ/liver,
/obj/effect/decal/cleanable/blood/old,
/turf/open/misc/asteroid/basalt/wasteland,
/area/ruin/unpowered/elephant_graveyard)
@@ -406,7 +406,7 @@
/turf/open/misc/asteroid/basalt/wasteland,
/area/ruin/unpowered/elephant_graveyard)
"Eh" = (
-/obj/item/organ/internal/brain,
+/obj/item/organ/brain,
/turf/open/misc/asteroid/basalt/wasteland,
/area/ruin/unpowered/elephant_graveyard)
"EI" = (
@@ -468,9 +468,9 @@
/turf/open/floor/mineral/titanium/white,
/area/ruin/powered/graveyard_shuttle)
"Kj" = (
-/obj/item/organ/internal/heart,
-/obj/item/organ/internal/eyes,
-/obj/item/organ/internal/ears,
+/obj/item/organ/heart,
+/obj/item/organ/eyes,
+/obj/item/organ/ears,
/obj/effect/decal/cleanable/blood/gibs/old,
/turf/open/misc/asteroid/basalt/wasteland,
/area/ruin/unpowered/elephant_graveyard)
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_gas.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_gas.dmm
index 71c7495ae2218..bcea9d1adbd5b 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_gas.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_gas.dmm
@@ -122,7 +122,7 @@
/obj/effect/turf_decal/arrows{
dir = 1
},
-/turf/open/floor/asphalt/lavaland,
+/turf/open/floor/asphalt/lavaland/outdoors,
/area/lavaland/surface/outdoors)
"fF" = (
/obj/machinery/portable_atmospherics/canister,
@@ -343,7 +343,7 @@
},
/area/ruin/thelizardsgas_lavaland)
"om" = (
-/turf/open/floor/asphalt/lavaland,
+/turf/open/floor/asphalt/lavaland/outdoors,
/area/lavaland/surface/outdoors)
"ou" = (
/obj/structure/cable,
diff --git a/_maps/RandomRuins/SpaceRuins/caravanambush.dmm b/_maps/RandomRuins/SpaceRuins/caravanambush.dmm
index 66e681981c706..5e8cb710e8914 100644
--- a/_maps/RandomRuins/SpaceRuins/caravanambush.dmm
+++ b/_maps/RandomRuins/SpaceRuins/caravanambush.dmm
@@ -524,9 +524,9 @@
"tL" = (
/obj/effect/turf_decal/bot_white,
/obj/structure/closet/crate/secure/engineering,
-/obj/item/organ/internal/cyberimp/arm/toolset,
-/obj/item/organ/internal/cyberimp/eyes/hud/medical,
-/obj/item/organ/internal/cyberimp/brain/anti_stun,
+/obj/item/organ/cyberimp/arm/toolset,
+/obj/item/organ/cyberimp/eyes/hud/medical,
+/obj/item/organ/cyberimp/brain/anti_stun,
/turf/open/floor/iron/dark/airless,
/area/shuttle/ruin/caravan/freighter3)
"tO" = (
diff --git a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm
index 025a2b62e0a83..52a288e64e6d1 100644
--- a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm
+++ b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm
@@ -341,7 +341,7 @@
/obj/effect/decal/cleanable/blood/footprints{
dir = 8
},
-/obj/item/organ/internal/liver,
+/obj/item/organ/liver,
/obj/structure/window/reinforced/spawner/directional/north,
/turf/open/floor/iron/dark,
/area/ruin/space/has_grav/dangerous_research/lab)
@@ -543,7 +543,7 @@
dir = 4
},
/obj/effect/decal/cleanable/blood/bubblegum,
-/obj/item/organ/internal/appendix,
+/obj/item/organ/appendix,
/obj/structure/window/reinforced/spawner/directional/south,
/obj/structure/window/reinforced/spawner/directional/west,
/obj/effect/mapping_helpers/burnt_floor,
@@ -903,7 +903,7 @@
/area/ruin/space/has_grav/dangerous_research/dorms)
"mG" = (
/obj/structure/table,
-/obj/item/organ/internal/heart,
+/obj/item/organ/heart,
/obj/effect/decal/cleanable/blood/bubblegum,
/obj/effect/spawner/random/medical/surgery_tool_advanced,
/obj/effect/turf_decal/tile/blue/fourcorners,
@@ -1056,7 +1056,7 @@
dir = 1
},
/obj/effect/decal/cleanable/blood/footprints,
-/obj/item/organ/internal/lungs,
+/obj/item/organ/lungs,
/obj/structure/window/reinforced/spawner/directional/south,
/obj/structure/window/reinforced/spawner/directional/east,
/turf/open/floor/iron/dark,
@@ -1193,7 +1193,7 @@
dir = 8
},
/obj/effect/decal/cleanable/blood/gibs,
-/obj/item/organ/internal/brain,
+/obj/item/organ/brain,
/obj/item/skillchip/research_director,
/obj/effect/turf_decal/tile/neutral/half{
dir = 4
@@ -1279,7 +1279,7 @@
/obj/effect/decal/cleanable/blood/footprints{
dir = 8
},
-/obj/item/organ/internal/heart,
+/obj/item/organ/heart,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/iron/dark,
/area/ruin/space/has_grav/dangerous_research/lab)
@@ -3692,8 +3692,8 @@
/area/ruin/space/has_grav/dangerous_research/lab)
"Wt" = (
/obj/structure/table/optable,
-/obj/item/organ/internal/eyes,
-/obj/item/organ/internal/liver,
+/obj/item/organ/eyes,
+/obj/item/organ/liver,
/obj/effect/decal/cleanable/blood/bubblegum,
/obj/effect/turf_decal/tile/blue/fourcorners,
/turf/open/floor/iron/white,
diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm
index 6aca5d7938a01..05da4138d0f25 100644
--- a/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm
+++ b/_maps/RandomRuins/SpaceRuins/garbagetruck1.dmm
@@ -316,7 +316,7 @@
/obj/structure/lattice,
/obj/structure/grille,
/obj/effect/spawner/random/entertainment/plushie,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/foodwaste)
"oq" = (
/obj/item/food/cheese/wheel,
@@ -367,7 +367,7 @@
/area/ruin/space/has_grav/garbagetruck/foodwaste)
"pP" = (
/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/foodwaste)
"qd" = (
/obj/item/food/breadslice/moldy/bacteria{
@@ -385,8 +385,8 @@
/turf/open/floor/plating/dumpsterair,
/area/ruin/space/has_grav/garbagetruck/foodwaste)
"qM" = (
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"re" = (
/obj/item/trash/shrimp_chips,
/obj/item/trash/sosjerky,
@@ -626,7 +626,7 @@
"AR" = (
/obj/structure/lattice,
/obj/structure/grille,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/foodwaste)
"BS" = (
/obj/item/storage/bag/trash/filled{
@@ -876,10 +876,10 @@
/obj/item/petri_dish,
/obj/item/petri_dish,
/obj/item/petri_dish,
-/obj/item/organ/internal/tongue/rat,
+/obj/item/organ/tongue/rat,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/glass,
-/obj/item/organ/internal/stomach/rat,
+/obj/item/organ/stomach/rat,
/obj/item/fish/ratfish,
/obj/structure/closet/crate/freezer,
/obj/effect/spawner/random/medical/surgery_tool,
@@ -1143,7 +1143,7 @@
"UX" = (
/obj/structure/lattice/catwalk,
/obj/item/crowbar/large/emergency,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/foodwaste)
"Vb" = (
/obj/structure/closet/crate/cardboard/mothic,
@@ -1161,8 +1161,8 @@
/area/ruin/space/has_grav/garbagetruck/foodwaste)
"VL" = (
/obj/machinery/power/shuttle_engine/propulsion,
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"Xi" = (
/obj/item/food/badrecipe/moldy/bacteria,
/obj/effect/decal/cleanable/food/egg_smudge,
@@ -1177,7 +1177,7 @@
"XY" = (
/obj/structure/lattice,
/obj/structure/grille/broken,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/foodwaste)
"Yu" = (
/obj/structure/table/reinforced,
@@ -1227,7 +1227,7 @@
/obj/effect/decal/cleanable/dirt/dust,
/obj/item/food/deadmouse,
/mob/living/basic/mouse/rat,
-/obj/item/organ/internal/heart/rat,
+/obj/item/organ/heart/rat,
/turf/open/floor/plating/dumpsterair,
/area/ruin/space/has_grav/garbagetruck/foodwaste)
diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
index c394d14f977db..f1c41c3bf1708 100644
--- a/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
+++ b/_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
@@ -1,11 +1,11 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"bb" = (
-/obj/item/organ/external/wings/moth,
+/obj/item/organ/wings/moth,
/obj/structure/closet/crate/trashcart,
/obj/item/bodypart/arm/left/skeleton,
/obj/item/bodypart/arm/right/skeleton,
/obj/item/evidencebag,
-/obj/item/organ/internal/heart/cybernetic/tier2,
+/obj/item/organ/heart/cybernetic/tier2,
/obj/structure/broken_flooring/pile,
/obj/item/stack/sheet/animalhide/human/five,
/turf/open/floor/plating,
@@ -20,8 +20,8 @@
/turf/open/floor/plating,
/area/ruin/space/has_grav/garbagetruck/medicalwaste)
"gh" = (
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"gr" = (
/obj/machinery/door/poddoor/shutters/preopen,
/turf/open/floor/plating,
@@ -83,7 +83,7 @@
/obj/structure/lattice,
/obj/structure/grille,
/obj/effect/spawner/random/entertainment/plushie,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/medicalwaste)
"iU" = (
/obj/item/storage/medkit/brute,
@@ -110,7 +110,7 @@
"kx" = (
/obj/structure/lattice,
/obj/structure/grille,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/medicalwaste)
"lT" = (
/turf/open/floor/catwalk_floor/iron,
@@ -183,7 +183,7 @@
/obj/item/trash/syndi_cakes,
/obj/item/trash/syndi_cakes,
/obj/item/poster/random_contraband,
-/obj/item/organ/internal/tongue/zombie,
+/obj/item/organ/tongue/zombie,
/obj/structure/closet/crate/trashcart,
/turf/open/floor/plating,
/area/ruin/space/has_grav/garbagetruck/medicalwaste)
@@ -207,7 +207,7 @@
/area/ruin/space/has_grav/garbagetruck/medicalwaste)
"sU" = (
/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/medicalwaste)
"tI" = (
/obj/structure/tank_holder/anesthetic,
@@ -298,8 +298,8 @@
/obj/item/stack/medical/gauze,
/obj/item/stack/sticky_tape/surgical,
/obj/structure/broken_flooring/corner,
-/obj/item/organ/internal/cyberimp/arm/surgery,
-/obj/item/organ/internal/cyberimp/eyes/hud/medical,
+/obj/item/organ/cyberimp/arm/surgery,
+/obj/item/organ/cyberimp/eyes/hud/medical,
/turf/open/floor/plating,
/area/ruin/space/has_grav/garbagetruck/medicalwaste)
"zu" = (
@@ -417,7 +417,7 @@
/turf/open/floor/plating,
/area/ruin/space/has_grav/garbagetruck/medicalwaste)
"Gp" = (
-/obj/item/organ/internal/eyes/robotic/basic,
+/obj/item/organ/eyes/robotic/basic,
/obj/item/kitchen/spoon,
/turf/open/floor/plating,
/area/ruin/space/has_grav/garbagetruck/medicalwaste)
@@ -437,9 +437,9 @@
"IM" = (
/obj/effect/decal/cleanable/robot_debris,
/obj/structure/closet/crate/freezer,
-/obj/item/organ/internal/liver/roach,
-/obj/item/organ/internal/stomach,
-/obj/item/organ/internal/tongue/robot,
+/obj/item/organ/liver/roach,
+/obj/item/organ/stomach,
+/obj/item/organ/tongue/robot,
/turf/open/floor/plating,
/area/ruin/space/has_grav/garbagetruck/medicalwaste)
"IS" = (
@@ -494,7 +494,7 @@
"LG" = (
/obj/structure/lattice/catwalk,
/obj/item/crowbar/large/emergency,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/medicalwaste)
"LI" = (
/obj/structure/table/reinforced,
@@ -558,7 +558,7 @@
"Pd" = (
/obj/structure/lattice,
/obj/structure/grille/broken,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/medicalwaste)
"Pe" = (
/obj/effect/decal/cleanable/robot_debris/up,
@@ -659,8 +659,8 @@
/area/ruin/space/has_grav/garbagetruck/medicalwaste)
"VL" = (
/obj/machinery/power/shuttle_engine/propulsion,
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"WX" = (
/obj/machinery/light/warm,
/obj/structure/cable,
diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm
index 03a9b87ff4edf..1bc775220c2fc 100644
--- a/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm
+++ b/_maps/RandomRuins/SpaceRuins/garbagetruck3.dmm
@@ -202,7 +202,7 @@
"la" = (
/obj/structure/lattice,
/obj/structure/grille/broken,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/squat)
"le" = (
/obj/structure/door_assembly/door_assembly_mhatch,
@@ -286,7 +286,7 @@
/area/ruin/space/has_grav/garbagetruck/squat)
"pk" = (
/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/squat)
"pC" = (
/obj/effect/decal/cleanable/fuel_pool,
@@ -513,7 +513,7 @@
"zC" = (
/obj/structure/lattice,
/obj/structure/grille,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/squat)
"zN" = (
/obj/structure/table/reinforced,
@@ -662,7 +662,7 @@
/obj/structure/mecha_wreckage/ripley,
/obj/effect/decal/cleanable/fuel_pool,
/obj/effect/decal/cleanable/molten_object,
-/obj/item/organ/internal/tongue/robot,
+/obj/item/organ/tongue/robot,
/turf/open/floor/plating/dumpsterair,
/area/ruin/space/has_grav/garbagetruck/squat)
"HN" = (
@@ -716,8 +716,8 @@
/turf/open/floor/plating/dumpsterair,
/area/ruin/space/has_grav/garbagetruck/squat)
"JX" = (
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"Ko" = (
/obj/machinery/computer/terminal{
content = list("Property of Spinward-Upsilon Sanitation Department. Authorised employees only.");
@@ -751,7 +751,7 @@
"MJ" = (
/obj/structure/lattice/catwalk,
/obj/item/crowbar/large/emergency,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/squat)
"MQ" = (
/obj/item/stock_parts/power_store/cell/crap/empty{
@@ -885,8 +885,8 @@
/area/ruin/space/has_grav/garbagetruck/squat)
"VL" = (
/obj/machinery/power/shuttle_engine/propulsion,
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"WK" = (
/obj/effect/decal/cleanable/fuel_pool,
/obj/item/clothing/shoes/workboots{
@@ -921,7 +921,7 @@
/obj/structure/lattice,
/obj/structure/grille,
/obj/effect/spawner/random/entertainment/plushie,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/squat)
"Zu" = (
/obj/item/food/candy,
diff --git a/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm b/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm
index 84ec36e943af9..aa15bb27e8b98 100644
--- a/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm
+++ b/_maps/RandomRuins/SpaceRuins/garbagetruck4.dmm
@@ -118,7 +118,7 @@
/area/ruin/space/has_grav/garbagetruck/toystore)
"lg" = (
/obj/structure/lattice/catwalk,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/toystore)
"lm" = (
/obj/structure/spider/stickyweb,
@@ -210,7 +210,7 @@
"ri" = (
/obj/structure/lattice/catwalk,
/obj/item/crowbar/large/emergency,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/toystore)
"rr" = (
/obj/structure/floodlight_frame,
@@ -222,7 +222,7 @@
"rI" = (
/obj/structure/lattice,
/obj/structure/grille,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/toystore)
"sh" = (
/obj/item/food/badrecipe/moldy/bacteria,
@@ -492,7 +492,7 @@
/obj/structure/lattice,
/obj/structure/grille,
/obj/effect/spawner/random/entertainment/plushie,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/toystore)
"yS" = (
/obj/effect/decal/cleanable/dirt/dust,
@@ -585,7 +585,7 @@
"Hj" = (
/obj/structure/lattice,
/obj/structure/grille/broken,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/garbagetruck/toystore)
"Hv" = (
/obj/effect/decal/cleanable/glass/plastitanium/screws,
@@ -812,8 +812,8 @@
/area/ruin/space/has_grav/garbagetruck/toystore)
"VL" = (
/obj/machinery/power/shuttle_engine/propulsion,
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"Wl" = (
/obj/structure/plasticflaps/opaque,
/turf/open/floor/plating,
@@ -879,8 +879,8 @@
/turf/open/floor/plating,
/area/ruin/space/has_grav/garbagetruck/toystore)
"Zi" = (
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"ZM" = (
/obj/item/papercutter,
/obj/item/paper_bin,
diff --git a/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm b/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm
index 9efa8cd365454..06451e02e8c7a 100644
--- a/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm
+++ b/_maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm
@@ -77,8 +77,8 @@
"ba" = (
/obj/structure/grille,
/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"bd" = (
/obj/structure/table/wood,
/obj/structure/cable/layer1,
@@ -483,7 +483,7 @@
/obj/effect/spawner/random/structure/grille,
/obj/structure/lattice/catwalk,
/obj/structure/cable/layer1,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/hauntedtradingpost/office/meetingroom)
"dD" = (
/turf/open/floor/wood,
@@ -666,7 +666,7 @@
/obj/effect/spawner/random/structure/grille,
/obj/structure/lattice/catwalk,
/obj/structure/cable/layer1,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/hauntedtradingpost/office)
"fW" = (
/obj/structure/rack,
@@ -816,7 +816,8 @@
bot_cover_flags = 4;
baton_type = /obj/item/melee/baton/security/cattleprod;
name = "\improper Syndicate Securitron";
- desc = "A little security robot, reprogrammed by the syndicate. He looks downright surly."
+ desc = "A little security robot, reprogrammed by the syndicate. He looks downright surly.";
+ security_mode_flags = 11
},
/turf/open/floor/carpet/donk,
/area/ruin/space/has_grav/hauntedtradingpost/employees/breakroom)
@@ -1239,8 +1240,8 @@
"kr" = (
/obj/structure/lattice,
/obj/structure/grille,
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"kx" = (
/mob/living/basic/bot/dedbot{
bot_mode_flags = 29
@@ -1809,7 +1810,7 @@
/obj/effect/spawner/structure/electrified_grille{
spawn_list = list(/obj/structure/grille,/obj/structure/cable/layer1)
},
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/hauntedtradingpost/office)
"pN" = (
/obj/structure/cable/layer1,
@@ -1939,8 +1940,8 @@
/turf/open/floor/carpet/orange,
/area/ruin/space/has_grav/hauntedtradingpost/public/corridor)
"qR" = (
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"qY" = (
/obj/item/tank/jetpack/oxygen/security{
name = "red jetpack (oxygen)"
@@ -2355,14 +2356,13 @@
"tW" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/cable/layer1,
-/obj/effect/decal/cleanable/fuel_pool,
/turf/open/floor/carpet/donk,
/area/ruin/space/has_grav/hauntedtradingpost/employees)
"tZ" = (
/obj/structure/lattice/catwalk,
/obj/effect/spawner/random/structure/grille,
/obj/structure/cable/layer1,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/hauntedtradingpost/office/meetingroom)
"uj" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -2419,7 +2419,7 @@
/obj/effect/spawner/random/structure/grille,
/obj/structure/lattice/catwalk,
/obj/structure/cable/layer1,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/hauntedtradingpost/employees/corridor)
"ve" = (
/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium,
@@ -2883,8 +2883,8 @@
"yS" = (
/obj/effect/spawner/random/structure/grille,
/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"yU" = (
/obj/item/rack_parts{
pixel_y = 8;
@@ -3051,7 +3051,7 @@
/obj/effect/spawner/structure/electrified_grille{
spawn_list = list(/obj/structure/grille,/obj/structure/cable/layer1)
},
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/hauntedtradingpost/employees/corridor)
"Au" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,
@@ -3143,8 +3143,8 @@
"Bi" = (
/obj/structure/lattice,
/obj/effect/spawner/random/structure/grille,
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"Bj" = (
/obj/structure/rack,
/obj/effect/spawner/random/medical/minor_healing,
@@ -3249,7 +3249,7 @@
/obj/effect/spawner/random/structure/grille,
/obj/structure/lattice/catwalk,
/obj/structure/cable/layer1,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/hauntedtradingpost/employees/workstation)
"CF" = (
/obj/structure/sink/directional/south,
@@ -3465,7 +3465,7 @@
/obj/effect/spawner/structure/electrified_grille{
spawn_list = list(/obj/structure/grille,/obj/structure/cable/layer1)
},
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/hauntedtradingpost/employees/workstation)
"EK" = (
/obj/item/coin/plastic{
@@ -3585,7 +3585,7 @@
/obj/effect/spawner/random/trash/crushed_can,
/obj/structure/cable/layer1,
/obj/effect/spawner/random/trash/food_packaging,
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/hauntedtradingpost/office)
"FI" = (
/mob/living/basic/mouse/rat,
@@ -4563,6 +4563,7 @@
desc = "It's labelled STAFFROOM - EMPLOYEES ONLY"
},
/obj/effect/mapping_helpers/airlock/access/all/syndicate/general,
+/obj/effect/decal/cleanable/fuel_pool,
/turf/open/floor/wood,
/area/ruin/space/has_grav/hauntedtradingpost/employees)
"Nt" = (
@@ -4611,8 +4612,8 @@
/area/ruin/space/has_grav/hauntedtradingpost/public)
"NS" = (
/obj/structure/lattice,
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"NY" = (
/obj/structure/cable/layer1,
/obj/machinery/vending/coffee{
@@ -4637,8 +4638,18 @@
/area/ruin/space/has_grav/hauntedtradingpost/public/corridor)
"Of" = (
/obj/structure/cable/layer1,
-/obj/effect/decal/cleanable/fuel_pool,
/obj/structure/reagent_dispensers/fueltank,
+/obj/structure/closet/crate/cardboard{
+ desc = "A fine example of the ubiquitous cardboard box. Handy if you want to store things. This box is labelled 'OUTLET 6013 - DECO' and has the Donk Co. logo stamped on it."
+ },
+/obj/effect/spawner/random/maintenance/no_decals/two,
+/obj/item/toy/snappop{
+ pixel_x = 5
+ },
+/obj/item/assembly/prox_sensor{
+ pixel_y = -3;
+ pixel_x = -6
+ },
/turf/open/floor/catwalk_floor/iron_dark,
/area/ruin/space/has_grav/hauntedtradingpost/employees)
"Oh" = (
@@ -5031,8 +5042,8 @@
shuttle_id = "whiteship_home";
width = 35
},
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"RI" = (
/obj/structure/chair/sofa/left/brown{
dir = 1
@@ -5288,18 +5299,8 @@
"TR" = (
/obj/structure/sign/poster/ripped/directional/south,
/obj/structure/cable/layer1,
-/obj/structure/closet/crate/cardboard{
- desc = "A fine example of the ubiquitous cardboard box. Handy if you want to store things. This box is labelled 'OUTLET 6013 - DECO' and has the Donk Co. logo stamped on it."
- },
-/obj/effect/spawner/random/maintenance/no_decals/two,
-/obj/item/toy/snappop{
- pixel_x = 5
- },
-/obj/item/assembly/prox_sensor{
- pixel_y = -3;
- pixel_x = -6
- },
/obj/effect/decal/cleanable/fuel_pool,
+/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/carpet/donk,
/area/ruin/space/has_grav/hauntedtradingpost/employees)
"TT" = (
@@ -5308,8 +5309,8 @@
dir = 4;
name = "external vent"
},
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"TU" = (
/obj/structure/cable/layer1,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,
@@ -5470,7 +5471,7 @@
/obj/structure/table/wood,
/obj/item/toy/figure/wizard/special{
pixel_y = 9;
- pixel_x = -4;
+ pixel_x = -4
},
/obj/item/toy/figure/warden{
name = "\improper Knight action figure";
@@ -5548,7 +5549,6 @@
/obj/structure/cable/layer1,
/obj/structure/rack,
/obj/item/gun/ballistic/automatic/pistol/toy,
-/obj/effect/decal/cleanable/fuel_pool,
/turf/open/floor/catwalk_floor/iron_dark,
/area/ruin/space/has_grav/hauntedtradingpost/employees)
"Wa" = (
@@ -5574,7 +5574,7 @@
/obj/effect/spawner/structure/electrified_grille{
spawn_list = list(/obj/structure/grille,/obj/structure/cable/layer1)
},
-/turf/open/space/basic,
+/turf/template_noop,
/area/ruin/space/has_grav/hauntedtradingpost/office/meetingroom)
"Wg" = (
/obj/structure/rack,
@@ -6019,8 +6019,8 @@
"Zu" = (
/obj/structure/lattice,
/obj/structure/grille/broken,
-/turf/open/space/basic,
-/area/space)
+/turf/template_noop,
+/area/template_noop)
"ZI" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
diff --git a/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm b/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm
index 6c08525d8f2c3..729e9ddf044cd 100644
--- a/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm
+++ b/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm
@@ -312,7 +312,7 @@
/turf/open/floor/iron,
/area/ruin/space/has_grav/powered/cat_man)
"be" = (
-/obj/item/organ/external/tail/cat,
+/obj/item/organ/tail/cat,
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/iron/white/corner,
/area/ruin/space/has_grav/powered/cat_man)
@@ -396,7 +396,7 @@
"bt" = (
/obj/structure/table/optable,
/obj/effect/mob_spawn/corpse/human/damaged,
-/obj/item/organ/internal/ears/cat,
+/obj/item/organ/ears/cat,
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/iron/white,
/area/ruin/space/has_grav/powered/cat_man)
@@ -737,12 +737,12 @@
/obj/structure/closet/crate/freezer{
name = "cat ears"
},
-/obj/item/organ/internal/ears/cat,
-/obj/item/organ/internal/ears/cat,
-/obj/item/organ/internal/ears/cat,
-/obj/item/organ/internal/ears/cat,
-/obj/item/organ/internal/ears/cat,
-/obj/item/organ/internal/ears/cat,
+/obj/item/organ/ears/cat,
+/obj/item/organ/ears/cat,
+/obj/item/organ/ears/cat,
+/obj/item/organ/ears/cat,
+/obj/item/organ/ears/cat,
+/obj/item/organ/ears/cat,
/turf/open/floor/iron/freezer,
/area/ruin/space/has_grav/powered/cat_man)
"cv" = (
@@ -791,12 +791,12 @@
/obj/structure/closet/crate/freezer{
name = "cat tails"
},
-/obj/item/organ/external/tail/cat,
-/obj/item/organ/external/tail/cat,
-/obj/item/organ/external/tail/cat,
-/obj/item/organ/external/tail/cat,
-/obj/item/organ/external/tail/cat,
-/obj/item/organ/external/tail/cat,
+/obj/item/organ/tail/cat,
+/obj/item/organ/tail/cat,
+/obj/item/organ/tail/cat,
+/obj/item/organ/tail/cat,
+/obj/item/organ/tail/cat,
+/obj/item/organ/tail/cat,
/turf/open/floor/iron/freezer,
/area/ruin/space/has_grav/powered/cat_man)
"jc" = (
diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
index 0c3c231b5f225..1f1ad0f6c4a3c 100644
--- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm
+++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm
@@ -521,7 +521,7 @@
pixel_x = 17;
pixel_y = 12
},
-/obj/item/organ/internal/cyberimp/arm/toolset{
+/obj/item/organ/cyberimp/arm/toolset{
pixel_y = 2;
pixel_x = 6
},
diff --git a/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm b/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm
index 58bad24369050..5377a113df53c 100644
--- a/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm
+++ b/_maps/RandomRuins/SpaceRuins/russian_derelict.dmm
@@ -42,7 +42,7 @@
/area/ruin/space/ks13/science/rnd)
"aj" = (
/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"ak" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/table,
@@ -60,8 +60,9 @@
/area/ruin/space/ks13/service/kitchen)
"ar" = (
/obj/item/storage/box/lights/mixed,
+/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"as" = (
/obj/item/kirbyplants/random/dead,
/obj/effect/decal/cleanable/dirt,
@@ -117,6 +118,13 @@
/obj/structure/lattice,
/turf/template_noop,
/area/space/nearstation)
+"aV" = (
+/obj/structure/girder/reinforced,
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"aW" = (
/obj/structure/window/spawner/directional/south,
/obj/structure/chair{
@@ -131,13 +139,21 @@
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/engineering/atmos)
"bm" = (
-/obj/item/stack/rods,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/structure/lattice,
+/turf/template_noop,
+/area/ruin/space/ks13/engineering/aux_storage)
+"bn" = (
+/obj/structure/lattice,
+/turf/template_noop,
+/area/ruin/space/ks13/science/genetics)
"bp" = (
/obj/structure/lattice,
/turf/template_noop,
/area/ruin/space/solars/ks13/aft_solars)
+"bC" = (
+/obj/effect/decal/cleanable/glass/plasma,
+/turf/open/floor/engine/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"bE" = (
/obj/structure/table_frame,
/obj/item/circuitboard/machine/thermomachine,
@@ -155,6 +171,10 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/hallway/aft)
+"bM" = (
+/obj/item/stack/rods,
+/turf/template_noop,
+/area/ruin/space/ks13/engineering/supermatter)
"bN" = (
/obj/machinery/light/small/directional/north,
/obj/effect/mapping_helpers/broken_floor,
@@ -174,6 +194,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/ruin/space/ks13/science/ordnance)
+"bT" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/item/shard/plasma,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"bY" = (
/obj/effect/mapping_helpers/burnt_floor,
/obj/effect/decal/cleanable/dirt,
@@ -251,6 +277,11 @@
},
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/security/sec)
+"cE" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"cI" = (
/obj/structure/table_frame,
/turf/open/floor/plating/airless,
@@ -262,6 +293,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/ruin/space/ks13/security/court)
+"cO" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/ruin/space/ks13/hallway/starboard_bow)
"cR" = (
/obj/machinery/computer/monitor{
dir = 4
@@ -283,7 +320,7 @@
"dj" = (
/obj/structure/closet/radiation,
/turf/open/floor/iron,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"dn" = (
/obj/structure/table,
/obj/item/paper/crumpled,
@@ -384,6 +421,11 @@
"dT" = (
/turf/closed/wall,
/area/ruin/space/ks13/hallway/starboard_bow)
+"dU" = (
+/obj/structure/door_assembly/door_assembly_eng,
+/obj/structure/cable,
+/turf/open/floor/engine/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"dY" = (
/obj/machinery/door/window/left/directional/south{
name = "Bridge Access"
@@ -395,6 +437,20 @@
/obj/item/paper/fluff/ruins/thederelict/syndie_mission,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/engineering/aft_solars_control)
+"ej" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/cable,
+/obj/effect/decal/remains/human{
+ desc = "This guy seemed to have died in terrible way! Half his remains are dust.";
+ name = "Syndicate agent remains"
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
+"ek" = (
+/obj/item/shard/plasma,
+/obj/effect/decal/cleanable/greenglow/radioactive,
+/turf/open/floor/engine/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"eu" = (
/obj/structure/rack,
/obj/effect/spawner/random/engineering/vending_restock,
@@ -435,12 +491,15 @@
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/engineering/atmos)
"eQ" = (
-/obj/effect/mapping_helpers/broken_floor,
-/obj/structure/chair{
- dir = 1
+/obj/machinery/atmospherics/components/unary/passive_vent{
+ dir = 4
},
-/turf/open/floor/iron,
-/area/ruin/space/ks13/hallway/starboard_bow)
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
+"eU" = (
+/obj/item/stack/sheet/iron,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"eV" = (
/obj/structure/cable,
/obj/effect/mapping_helpers/broken_floor,
@@ -468,7 +527,7 @@
"fg" = (
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"fz" = (
/obj/structure/sign/departments/medbay/alt/directional/west,
/obj/item/kirbyplants/random/dead,
@@ -484,6 +543,10 @@
/obj/structure/chair,
/turf/open/floor/iron/white/airless,
/area/ruin/space/ks13/medical/medbay)
+"fE" = (
+/obj/effect/mapping_helpers/broken_floor,
+/turf/closed/wall/r_wall,
+/area/ruin/space/ks13/engineering/supermatter)
"fH" = (
/obj/machinery/door/morgue{
name = "Chaplains Office";
@@ -522,7 +585,7 @@
"gd" = (
/obj/machinery/portable_atmospherics/canister/plasma,
/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"ge" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -545,12 +608,17 @@
/obj/machinery/light/small/directional/north,
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/ai/vault)
+"gu" = (
+/obj/structure/table_frame,
+/obj/effect/mapping_helpers/burnt_floor,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/medical/medbay)
"gB" = (
/obj/effect/spawner/structure/window/hollow/reinforced/end{
dir = 4
},
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"gG" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/airless,
@@ -585,10 +653,10 @@
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/hallway/central)
"hD" = (
-/obj/item/screwdriver,
-/obj/effect/mapping_helpers/burnt_floor,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/item/stack/ore/slag,
+/obj/structure/lattice,
+/turf/template_noop,
+/area/ruin/space/ks13/engineering/grav_gen)
"hK" = (
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/engineering/aft_solars_control)
@@ -626,7 +694,7 @@
},
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"ig" = (
/turf/closed/wall/r_wall,
/area/ruin/space/ks13/command/eva)
@@ -657,6 +725,12 @@
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/ai/corridor)
+"iA" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/grille/broken,
+/obj/item/stack/rods,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"iF" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable,
@@ -744,7 +818,7 @@
/obj/item/stack/rods,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"jV" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle,
/turf/open/floor/plating/airless,
@@ -770,6 +844,10 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/science/ordnance_hall)
+"kw" = (
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/ruin/space/ks13/engineering/grav_gen)
"kx" = (
/obj/machinery/door/window/left/directional/west{
name = "AI Upload Access"
@@ -859,12 +937,31 @@
"lq" = (
/turf/open/floor/circuit/red/off,
/area/ruin/space/ks13/ai/corridor)
-"lw" = (
+"lt" = (
/obj/structure/lattice,
+/turf/template_noop,
+/area/ruin/space/ks13/ai/vault)
+"lu" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/reflector/box{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
+"lv" = (
+/obj/item/stack/rods,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/reflector{
+ dir = 10
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
+"lw" = (
/obj/item/chair,
/obj/machinery/light/small/broken/directional/east,
-/turf/template_noop,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/effect/mapping_helpers/burnt_floor,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/medical/medbay)
"lz" = (
/obj/machinery/door/airlock/security{
name = "Security"
@@ -907,6 +1004,12 @@
"mb" = (
/turf/open/floor/engine/airless,
/area/ruin/space/ks13/engineering/atmos)
+"mc" = (
+/obj/effect/mapping_helpers/broken_floor,
+/turf/open/floor/plating/airless{
+ luminosity = 2
+ },
+/area/ruin/space/ks13/engineering/supermatter)
"me" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -946,7 +1049,7 @@
/obj/structure/lattice,
/obj/structure/frame/machine,
/turf/template_noop,
-/area/space/nearstation)
+/area/ruin/space/ks13/service/kitchen)
"mQ" = (
/obj/structure/girder,
/turf/open/floor/plating/airless,
@@ -998,10 +1101,10 @@
/turf/open/floor/plating/airless,
/area/ruin/space/solars/ks13/sb_bow_solars)
"nI" = (
-/obj/structure/table_frame,
/obj/effect/mapping_helpers/burnt_floor,
+/obj/structure/table_frame,
/turf/open/floor/plating/airless,
-/area/space/nearstation)
+/area/ruin/space/ks13/medical/medbay)
"nK" = (
/obj/machinery/power/apc/auto_name/directional/south,
/obj/effect/mapping_helpers/apc/no_charge,
@@ -1062,7 +1165,7 @@
"ou" = (
/obj/structure/door_assembly/door_assembly_eng,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"ow" = (
/obj/item/stack/cable_coil/cut,
/turf/open/floor/plating/airless,
@@ -1088,6 +1191,14 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
/area/space/nearstation)
+"oE" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/obj/effect/mapping_helpers/burnt_floor,
+/obj/structure/fluff/broken_canister_frame,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"oF" = (
/obj/effect/decal/cleanable/glass,
/turf/open/floor/plating/airless,
@@ -1214,7 +1325,7 @@
dir = 8
},
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"pj" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle{
dir = 4
@@ -1280,7 +1391,7 @@
/obj/effect/mapping_helpers/broken_floor,
/obj/structure/cable,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"pz" = (
/obj/effect/spawner/structure/window/hollow/reinforced/end{
dir = 4
@@ -1302,6 +1413,12 @@
/obj/item/shard,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/service/cafe)
+"pD" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/item/shard/plasma,
+/obj/effect/decal/cleanable/glass/plasma,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"pF" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/mapping_helpers/burnt_floor,
@@ -1379,11 +1496,16 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/chapel,
/area/ruin/space/ks13/service/chapel)
+"qa" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/item/shard/plasma,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"qd" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/structure/cable,
/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"qe" = (
/obj/effect/spawner/structure/window/hollow/reinforced/directional{
dir = 1
@@ -1430,12 +1552,11 @@
},
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/turf/open/floor/iron,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"qv" = (
-/obj/effect/decal/cleanable/glass,
-/obj/effect/mapping_helpers/broken_floor,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/structure/lattice,
+/turf/template_noop,
+/area/ruin/space/ks13/service/kitchen)
"qw" = (
/obj/effect/spawner/structure/window/hollow/reinforced/end{
dir = 8
@@ -1447,6 +1568,9 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/white/airless,
/area/ruin/space/ks13/medical/medbay)
+"qB" = (
+/turf/template_noop,
+/area/ruin/space/ks13/hallway/central)
"qC" = (
/obj/machinery/door/window/right/directional/east{
name = "AI Upload"
@@ -1520,8 +1644,9 @@
/area/ruin/space/ks13/security/court_hall)
"qW" = (
/obj/effect/spawner/random/maintenance,
+/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"qX" = (
/obj/structure/cable,
/turf/open/floor/plating/airless,
@@ -1548,11 +1673,9 @@
/turf/open/floor/plating,
/area/ruin/space/ks13/engineering/sb_bow_solars_control)
"rd" = (
-/obj/effect/spawner/structure/window/hollow/reinforced/end{
- dir = 1
- },
-/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/structure/lattice,
+/turf/template_noop,
+/area/template_noop)
"re" = (
/obj/structure/girder,
/turf/open/floor/plating/airless,
@@ -1764,6 +1887,10 @@
/obj/machinery/light/small/directional/north,
/turf/open/floor/iron,
/area/ruin/space/ks13/command/bridge)
+"sf" = (
+/obj/structure/chair,
+/turf/open/floor/plating,
+/area/ruin/space/ks13/hallway/starboard_bow)
"sg" = (
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating/airless,
@@ -1797,6 +1924,12 @@
/obj/effect/spawner/random/maintenance,
/turf/open/floor/plating/airless,
/area/space/nearstation)
+"so" = (
+/obj/structure/grille/broken,
+/obj/item/shard/plasma,
+/obj/effect/decal/cleanable/glass/plasma,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"sp" = (
/obj/structure/grille/broken,
/obj/effect/decal/cleanable/glass,
@@ -1887,11 +2020,13 @@
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/security/sec)
"sJ" = (
-/obj/effect/spawner/structure/window/hollow/reinforced/middle{
- dir = 4
+/obj/machinery/door/airlock/engineering{
+ name = "Engine Room"
},
-/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
+/turf/open/floor/engine/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"sK" = (
/obj/structure/grille/broken,
/obj/effect/decal/cleanable/glass,
@@ -1953,10 +2088,10 @@
/obj/effect/mapping_helpers/apc/no_charge,
/obj/structure/cable,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"sU" = (
/turf/closed/wall/r_wall,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"sX" = (
/obj/effect/decal/cleanable/blood/footprints{
dir = 1
@@ -1969,10 +2104,13 @@
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/security/sec)
"sZ" = (
-/obj/machinery/light/small/directional/south,
+/turf/template_noop,
+/area/ruin/space/ks13/service/jani)
+"ta" = (
/obj/effect/mapping_helpers/broken_floor,
-/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/item/stack/cable_coil/cut,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"tb" = (
/turf/closed/wall/r_wall,
/area/ruin/space/ks13/science/ordnance_hall)
@@ -1980,11 +2118,9 @@
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/service/hydro)
"te" = (
-/obj/item/shard,
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/mapping_helpers/burnt_floor,
-/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/effect/decal/cleanable/greenglow/radioactive,
+/turf/open/floor/engine/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"th" = (
/obj/structure/cable,
/turf/open/floor/iron/airless,
@@ -2096,6 +2232,11 @@
/obj/effect/spawner/structure/window/hollow/middle,
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/hallway/central)
+"tU" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/item/stack/sheet/iron,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"tV" = (
/obj/structure/sign/warning/explosives/alt/directional/south,
/turf/open/floor/iron,
@@ -2107,7 +2248,7 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/obj/structure/cable,
/turf/open/floor/iron,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"tY" = (
/turf/closed/wall/r_wall,
/area/ruin/space/ks13/engineering/atmos)
@@ -2153,10 +2294,8 @@
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/science/genetics)
"ui" = (
-/obj/effect/mapping_helpers/broken_floor,
-/obj/effect/mapping_helpers/burnt_floor,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/turf/template_noop,
+/area/ruin/space/ks13/ai/vault)
"uk" = (
/obj/machinery/sleeper,
/obj/effect/decal/cleanable/dirt,
@@ -2488,6 +2627,11 @@
/obj/structure/cable,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/hallway/aft)
+"wr" = (
+/obj/effect/mapping_helpers/burnt_floor,
+/obj/item/stack/sheet/plasteel,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"wt" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/clothing/head/chaplain/bishopmitre,
@@ -2541,7 +2685,7 @@
dir = 8
},
/turf/open/floor/plating/airless,
-/area/space/nearstation)
+/area/ruin/space/ks13/medical/medbay)
"wF" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/mapping_helpers/burnt_floor,
@@ -2720,6 +2864,11 @@
/obj/effect/spawner/structure/window/hollow/reinforced/middle,
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/medical/medbay)
+"xy" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/item/clothing/head/helmet/space/eva,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"xA" = (
/obj/machinery/power/apc/auto_name/directional/south,
/obj/effect/mapping_helpers/apc/no_charge,
@@ -2767,7 +2916,7 @@
/area/ruin/space/ks13/engineering/aft_solars_control)
"xJ" = (
/turf/template_noop,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"xL" = (
/obj/structure/rack,
/obj/item/circuitboard/machine/chem_dispenser/drinks{
@@ -2890,7 +3039,7 @@
/obj/effect/mapping_helpers/burnt_floor,
/obj/structure/cable,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"yq" = (
/turf/closed/wall,
/area/ruin/space/ks13/medical/morgue)
@@ -2898,7 +3047,7 @@
/obj/item/storage/toolbox/syndicate,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"yt" = (
/obj/structure/girder/reinforced,
/turf/open/floor/plating/airless,
@@ -3063,7 +3212,12 @@
/obj/item/stack/sheet/glass,
/obj/structure/lattice,
/turf/template_noop,
-/area/space/nearstation)
+/area/ruin/space/ks13/ai/vault)
+"zg" = (
+/obj/effect/mapping_helpers/burnt_floor,
+/obj/item/shard/plasma,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"zi" = (
/obj/structure/cable,
/obj/effect/decal/cleanable/dirt,
@@ -3123,7 +3277,7 @@
"zv" = (
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"zx" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle{
dir = 4
@@ -3266,6 +3420,11 @@
/obj/machinery/portable_atmospherics/pump,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/hallway/central)
+"Al" = (
+/obj/item/shard/plasma,
+/obj/effect/decal/cleanable/glass/plasma,
+/turf/open/floor/engine/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Am" = (
/obj/machinery/power/apc/auto_name/directional/south,
/obj/effect/mapping_helpers/apc/no_charge,
@@ -3551,9 +3710,10 @@
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/engineering/atmos)
"BI" = (
-/obj/effect/spawner/structure/window/hollow/reinforced/end,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/grille/broken,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"BJ" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/effect/decal/cleanable/dirt,
@@ -3640,7 +3800,12 @@
pixel_x = -13
},
/turf/template_noop,
-/area/space/nearstation)
+/area/ruin/space/ks13/science/genetics)
+"Ck" = (
+/obj/structure/grille/broken,
+/obj/effect/mapping_helpers/burnt_floor,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Co" = (
/obj/structure/window/reinforced/spawner/directional/east,
/turf/open/floor/iron/white/airless,
@@ -3697,7 +3862,7 @@
/obj/effect/mapping_helpers/burnt_floor,
/obj/structure/cable,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"CI" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible,
/turf/open/floor/plating/airless,
@@ -3715,6 +3880,11 @@
/obj/structure/table,
/turf/open/floor/iron,
/area/ruin/space/ks13/command/bridge)
+"CM" = (
+/obj/machinery/light/small/directional/south,
+/obj/effect/mapping_helpers/broken_floor,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"CN" = (
/obj/effect/mapping_helpers/burnt_floor,
/obj/structure/closet/crate/bin,
@@ -3752,11 +3922,15 @@
"CX" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"Db" = (
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/wood/airless,
/area/space/nearstation)
+"Dc" = (
+/obj/structure/table,
+/turf/open/floor/plating,
+/area/ruin/space/ks13/hallway/starboard_bow)
"Dd" = (
/obj/structure/table/glass,
/obj/effect/mapping_helpers/broken_floor,
@@ -3813,7 +3987,7 @@
/obj/structure/lattice,
/obj/structure/door_assembly/door_assembly_public,
/turf/template_noop,
-/area/space/nearstation)
+/area/ruin/space/ks13/service/kitchen)
"Dr" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle,
/turf/open/floor/plating/airless,
@@ -3844,8 +4018,11 @@
/turf/open/floor/iron,
/area/ruin/space/ks13/command/bridge)
"DA" = (
-/turf/closed/wall,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/grille/broken,
+/obj/effect/decal/cleanable/glass/plasma,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"DB" = (
/obj/structure/table,
/turf/open/floor/plating/airless,
@@ -3868,7 +4045,7 @@
/obj/item/stack/cable_coil,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"DK" = (
/obj/structure/rack,
/obj/item/circuitboard/machine/circuit_imprinter/offstation{
@@ -3948,6 +4125,13 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/service/bar)
+"DX" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/item/clothing/suit/space/eva,
+/obj/item/stack/sheet/plasteel,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"DY" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark,
@@ -3984,10 +4168,9 @@
/turf/open/floor/iron/white/airless,
/area/ruin/space/ks13/science/genetics)
"Ed" = (
-/obj/item/stack/ore/slag,
-/obj/effect/mapping_helpers/burnt_floor,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/structure/lattice,
+/turf/template_noop,
+/area/ruin/space/ks13/medical/medbay)
"Ee" = (
/obj/effect/spawner/structure/window/hollow/end{
dir = 8
@@ -4039,7 +4222,7 @@
/obj/effect/mapping_helpers/broken_floor,
/obj/structure/cable,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"Ey" = (
/turf/open/floor/iron,
/area/ruin/space/ks13/hallway/starboard_bow)
@@ -4065,6 +4248,10 @@
},
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/science/rnd)
+"EC" = (
+/obj/item/shard/plasma,
+/turf/template_noop,
+/area/ruin/space/ks13/engineering/supermatter)
"ED" = (
/obj/machinery/door/airlock/maintenance{
name = "Atmospherics Access"
@@ -4091,7 +4278,7 @@
"EK" = (
/obj/structure/grille,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"EL" = (
/obj/structure/chair,
/obj/effect/decal/cleanable/dirt,
@@ -4171,9 +4358,15 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/ruin/space/ks13/command/bridge)
+"Fg" = (
+/obj/machinery/power/emitter{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Fj" = (
/turf/open/floor/iron,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"Fk" = (
/obj/effect/turf_decal/plaque{
icon_state = "derelict2"
@@ -4193,10 +4386,9 @@
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/engineering/grav_gen)
"Fp" = (
-/obj/item/clothing/suit/space/eva,
-/obj/effect/decal/cleanable/glass,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/effect/mapping_helpers/broken_floor,
+/turf/open/floor/engine/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Fq" = (
/obj/structure/frame/computer{
dir = 1
@@ -4240,6 +4432,10 @@
/obj/effect/spawner/random/maintenance/three,
/turf/open/floor/iron,
/area/ruin/space/ks13/command/bridge_hall)
+"FC" = (
+/obj/structure/lattice,
+/turf/template_noop,
+/area/ruin/space/ks13/engineering/grav_gen)
"FF" = (
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
@@ -4252,7 +4448,7 @@
"FI" = (
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"FL" = (
/obj/structure/cable,
/obj/machinery/door/window/right/directional/east{
@@ -4440,13 +4636,11 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/tool_storage)
-"GF" = (
-/obj/effect/spawner/structure/window/hollow/reinforced/end,
-/obj/effect/spawner/structure/window/hollow/reinforced/directional{
- dir = 10
- },
+"GG" = (
+/obj/effect/mapping_helpers/burnt_floor,
+/obj/item/stack/cable_coil/cut,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"GH" = (
/obj/structure/table_frame,
/obj/effect/decal/cleanable/dirt,
@@ -4482,8 +4676,8 @@
/obj/item/shard,
/obj/effect/decal/cleanable/glass,
/obj/item/shard,
-/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"GO" = (
/obj/machinery/light/small/directional/west,
/obj/effect/decal/cleanable/dirt,
@@ -4500,7 +4694,7 @@
/obj/structure/sign/warning/radiation/directional/north,
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"GU" = (
/obj/effect/decal/cleanable/blood/drip{
pixel_x = -4;
@@ -4698,9 +4892,17 @@
/obj/structure/girder/reinforced,
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/science/ordnance)
+"HL" = (
+/obj/machinery/power/supermatter_crystal/shard,
+/obj/structure/closet/crate/radiation,
+/obj/machinery/door/window/right/directional/west{
+ name = "Spare Crystal"
+ },
+/turf/open/floor/circuit/red/airless,
+/area/ruin/space/ks13/ai/vault)
"HO" = (
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"HP" = (
/obj/effect/spawner/structure/window/hollow/reinforced/end{
dir = 8
@@ -4721,17 +4923,16 @@
/area/ruin/space/ks13/engineering/atmos)
"HV" = (
/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/cable,
/turf/open/floor/plating/airless{
luminosity = 2
},
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"HX" = (
-/obj/item/shard{
- icon_state = "medium"
- },
-/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/mapping_helpers/burnt_floor,
+/obj/effect/decal/cleanable/glass/plasma,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"Ia" = (
/obj/item/kirbyplants/random/dead,
/turf/open/floor/iron,
@@ -4743,10 +4944,11 @@
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/security/sec)
"If" = (
-/obj/item/shard,
-/obj/effect/mapping_helpers/burnt_floor,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/glass/plasma,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"Ig" = (
/obj/machinery/light/small/directional/east,
/obj/structure/cable,
@@ -4806,11 +5008,12 @@
/turf/open/floor/iron/dark,
/area/ruin/space/ks13/medical/morgue)
"ID" = (
-/obj/structure/grille/broken,
-/obj/effect/decal/cleanable/glass,
-/obj/effect/mapping_helpers/burnt_floor,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/machinery/door/airlock/engineering{
+ name = "Engine Room"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
+/turf/open/floor/engine/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"IF" = (
/turf/open/floor/plating/airless,
/area/space/nearstation)
@@ -4823,6 +5026,11 @@
/obj/structure/cable,
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/service/cafe)
+"IH" = (
+/obj/effect/mapping_helpers/burnt_floor,
+/obj/item/stack/sheet/iron,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"II" = (
/obj/item/shard,
/obj/structure/grille/broken,
@@ -4846,6 +5054,11 @@
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
+"IS" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/grille,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"IT" = (
/obj/machinery/light/small/directional/south,
/turf/open/floor/iron,
@@ -4875,12 +5088,12 @@
/obj/effect/mapping_helpers/burnt_floor,
/obj/structure/cable,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"Jc" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"Jd" = (
/obj/structure/cable,
/turf/open/floor/iron,
@@ -4918,6 +5131,11 @@
/obj/item/wallframe/firealarm,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/engineering/atmos)
+"Jn" = (
+/obj/effect/mapping_helpers/burnt_floor,
+/obj/effect/decal/cleanable/greenglow/radioactive,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Jp" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle{
dir = 4
@@ -4937,13 +5155,21 @@
},
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"Jt" = (
/obj/effect/decal/cleanable/glass,
/obj/effect/decal/cleanable/dirt,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/science/genetics)
+"Jv" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/reflector{
+ dir = 6
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Jw" = (
/turf/closed/wall,
/area/ruin/space/ks13/ai/corridor)
@@ -5116,6 +5342,12 @@
/obj/structure/girder,
/turf/open/floor/plating/airless,
/area/space/nearstation)
+"Km" = (
+/obj/machinery/power/emitter{
+ dir = 8
+ },
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Ko" = (
/obj/machinery/door/window/left/directional/south{
name = "Bridge Access"
@@ -5124,6 +5356,11 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/ruin/space/ks13/command/bridge_hall)
+"Kp" = (
+/obj/effect/spawner/structure/window/reinforced/plasma,
+/obj/effect/mapping_helpers/damaged_window,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Ks" = (
/obj/structure/cable,
/turf/open/floor/plating/airless,
@@ -5148,12 +5385,11 @@
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/engineering/atmos)
"Kw" = (
-/obj/item/stack/rods,
-/obj/effect/mapping_helpers/burnt_floor,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
-"Ky" = (
-/obj/effect/decal/cleanable/dirt,
+/obj/structure/lattice,
+/turf/template_noop,
+/area/ruin/space/ks13/hallway/central)
+"Ky" = (
+/obj/effect/decal/cleanable/dirt,
/obj/machinery/power/apc/auto_name/directional/north,
/obj/structure/cable,
/turf/open/floor/wood,
@@ -5200,6 +5436,7 @@
/obj/effect/decal/cleanable/glass,
/obj/item/stack/rods,
/obj/item/stack/rods,
+/obj/machinery/power/energy_accumulator/grounding_rod/anchored,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/engineering/secure_storage)
"KO" = (
@@ -5210,6 +5447,10 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/engineering/aft_solars_control)
+"KT" = (
+/obj/effect/mapping_helpers/burnt_floor,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/medical/medbay)
"KU" = (
/obj/structure/lattice,
/turf/template_noop,
@@ -5225,9 +5466,9 @@
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/ai/corridor)
"KX" = (
-/obj/machinery/field/generator,
/obj/effect/decal/cleanable/dirt,
/obj/effect/mapping_helpers/burnt_floor,
+/obj/machinery/power/energy_accumulator/tesla_coil/anchored,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/engineering/secure_storage)
"KZ" = (
@@ -5410,9 +5651,10 @@
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/engineering/aft_solars_control)
"LZ" = (
-/obj/structure/cable,
-/turf/open/floor/iron,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/glass/plasma,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Mc" = (
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible,
/turf/closed/wall/r_wall,
@@ -5421,6 +5663,11 @@
/obj/structure/girder,
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/service/hydro)
+"Mf" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/decal/cleanable/glass/plasma,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Mg" = (
/obj/machinery/door/airlock/engineering{
name = "Engineering Access"
@@ -5474,13 +5721,18 @@
/obj/effect/mapping_helpers/broken_floor,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"Mx" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/service/kitchen)
+"My" = (
+/obj/item/shard/plasma,
+/obj/effect/mapping_helpers/burnt_floor,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Mz" = (
/obj/item/stack/cable_coil/cut,
/obj/effect/mapping_helpers/broken_floor,
@@ -5516,12 +5768,10 @@
/turf/open/floor/iron,
/area/ruin/space/ks13/science/ordnance)
"MG" = (
-/obj/item/stack/ore/iron,
-/obj/item/stack/ore/iron,
-/obj/item/stack/ore/iron,
-/obj/structure/lattice,
-/turf/template_noop,
-/area/space/nearstation)
+/obj/effect/mapping_helpers/broken_floor,
+/obj/machinery/portable_atmospherics/canister/nitrogen,
+/turf/open/floor/iron/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"MJ" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/mapping_helpers/broken_floor,
@@ -5591,6 +5841,12 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/engineering/aux_storage)
+"MZ" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/item/stack/sheet/plasteel,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Na" = (
/obj/effect/spawner/structure/window/hollow/reinforced/end{
dir = 8
@@ -5692,13 +5948,21 @@
"NB" = (
/obj/effect/decal/cleanable/glass,
/obj/effect/mapping_helpers/burnt_floor,
+/obj/structure/cable,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"ND" = (
/obj/structure/chair/stool/directional/north,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/service/cafe)
+"NE" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/item/shard/plasma,
+/obj/effect/decal/cleanable/glass/plasma,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"NF" = (
/obj/item/language_manual/dronespeak_manual,
/turf/open/floor/iron/airless,
@@ -5748,7 +6012,7 @@
/obj/machinery/light/small/directional/north,
/obj/item/stack/cable_coil/cut,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"NS" = (
/obj/structure/table_frame,
/obj/effect/mapping_helpers/broken_floor,
@@ -5933,7 +6197,7 @@
/obj/machinery/light/small/directional/east,
/obj/structure/sign/warning/secure_area/directional/north,
/turf/open/floor/iron,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"OU" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
@@ -5942,6 +6206,9 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/service/hydro)
+"OY" = (
+/turf/template_noop,
+/area/ruin/space/ks13/engineering/grav_gen)
"OZ" = (
/obj/structure/cable,
/obj/structure/table,
@@ -6019,11 +6286,18 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/hallway/aft)
+"Pm" = (
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/item/stack/ore/iron,
+/obj/structure/lattice,
+/turf/template_noop,
+/area/ruin/space/ks13/engineering/grav_gen)
"Pn" = (
/obj/effect/mapping_helpers/burnt_floor,
/obj/structure/noticeboard/directional/north,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"Po" = (
/obj/structure/rack,
/obj/item/circuitboard/machine/microwave{
@@ -6082,7 +6356,7 @@
/obj/item/stack/cable_coil/cut,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"Pz" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle{
dir = 4
@@ -6123,10 +6397,8 @@
/turf/open/floor/iron/dark,
/area/ruin/space/ks13/medical/morgue)
"PG" = (
-/obj/item/clothing/head/helmet/space/eva,
-/obj/effect/decal/cleanable/glass,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/turf/closed/wall/r_wall,
+/area/template_noop)
"PH" = (
/obj/effect/mapping_helpers/broken_floor,
/obj/machinery/power/apc/auto_name/directional/north,
@@ -6137,7 +6409,7 @@
"PI" = (
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"PJ" = (
/obj/effect/decal/cleanable/blood/footprints{
dir = 4
@@ -6163,7 +6435,7 @@
/obj/effect/mapping_helpers/broken_floor,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"PU" = (
/obj/structure/cable,
/turf/open/floor/iron,
@@ -6445,14 +6717,16 @@
/turf/open/floor/iron/white/airless,
/area/ruin/space/ks13/science/genetics)
"RE" = (
-/obj/structure/grille/broken,
-/obj/effect/decal/remains/human{
- desc = "This guy seemed to have died in terrible way! Half his remains are dust.";
- name = "Syndicate agent remains"
- },
-/obj/effect/decal/cleanable/glass,
+/obj/structure/lattice,
+/turf/template_noop,
+/area/ruin/space/ks13/engineering/supermatter)
+"RF" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/cable,
+/obj/item/stack/rods,
+/obj/effect/decal/cleanable/glass/plasma,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"RG" = (
/obj/structure/chair{
dir = 8
@@ -6470,9 +6744,8 @@
/turf/open/floor/iron/dark,
/area/ruin/space/ks13/medical/morgue)
"RI" = (
-/obj/effect/spawner/structure/window/hollow/reinforced/directional,
-/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/turf/open/floor/engine/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"RJ" = (
/obj/structure/reagent_dispensers/watertank,
/obj/effect/decal/cleanable/dirt,
@@ -6596,20 +6869,17 @@
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/science/rnd)
"Sn" = (
-/obj/item/shard{
- icon_state = "small"
- },
-/obj/item/shard{
- icon_state = "medium"
- },
-/obj/effect/decal/cleanable/glass,
+/obj/structure/grille/broken,
+/obj/effect/mapping_helpers/burnt_floor,
+/obj/effect/decal/cleanable/glass/plasma,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"So" = (
-/obj/item/stack/ore/slag,
-/obj/structure/lattice,
-/turf/template_noop,
-/area/space/nearstation)
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/table_frame,
+/obj/item/stack/sheet/iron,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Sp" = (
/obj/structure/table_frame,
/turf/open/floor/plating/airless,
@@ -6843,10 +7113,9 @@
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/science/genetics)
"Tg" = (
-/obj/machinery/light/small/directional/east,
-/obj/effect/mapping_helpers/broken_floor,
-/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/item/shard/plasma,
+/turf/open/floor/engine/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Th" = (
/obj/structure/cable,
/obj/effect/mapping_helpers/broken_floor,
@@ -6898,7 +7167,7 @@
/obj/item/pushbroom,
/obj/item/reagent_containers/spray/cleaner,
/turf/template_noop,
-/area/space/nearstation)
+/area/ruin/space/ks13/service/jani)
"Tr" = (
/obj/structure/cable,
/obj/effect/mapping_helpers/broken_floor,
@@ -6977,11 +7246,9 @@
/turf/template_noop,
/area/space/nearstation)
"TM" = (
-/obj/item/shard{
- icon_state = "small"
- },
-/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/structure/lattice,
+/turf/template_noop,
+/area/ruin/space/ks13/service/bar)
"TN" = (
/obj/structure/cable,
/obj/effect/mapping_helpers/broken_floor,
@@ -6997,7 +7264,7 @@
},
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"TR" = (
/obj/machinery/light/small/directional/west,
/turf/open/floor/iron,
@@ -7210,12 +7477,17 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/security/court_hall)
+"UY" = (
+/obj/structure/grille/broken,
+/obj/effect/mapping_helpers/broken_floor,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"UZ" = (
/obj/effect/spawner/random/maintenance,
/obj/structure/sign/warning/electric_shock/directional/north,
/obj/effect/spawner/random/maintenance,
/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"Va" = (
/obj/effect/turf_decal/plaque{
icon_state = "derelict6"
@@ -7236,11 +7508,9 @@
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/engineering/atmos)
"Vh" = (
-/obj/effect/spawner/structure/window/hollow/reinforced/middle{
- dir = 8
- },
-/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/obj/structure/door_assembly/door_assembly_eng,
+/turf/open/floor/engine/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Vj" = (
/obj/machinery/door/poddoor/preopen{
id = "toxin_vent"
@@ -7265,6 +7535,13 @@
/obj/structure/cable,
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/security/sec)
+"Vp" = (
+/obj/machinery/power/emitter{
+ dir = 8
+ },
+/obj/structure/cable,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Vr" = (
/obj/structure/table,
/obj/effect/spawner/random/maintenance,
@@ -7293,6 +7570,11 @@
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/hallway/central)
+"Vx" = (
+/obj/effect/decal/cleanable/greenglow/radioactive,
+/obj/effect/decal/cleanable/glass/plasma,
+/turf/open/floor/engine/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"VB" = (
/obj/structure/cable,
/turf/open/floor/iron,
@@ -7405,7 +7687,7 @@
"Wk" = (
/obj/structure/girder/reinforced,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"Wl" = (
/obj/machinery/door/airlock/research/glass{
name = "Toxins Mix Internal Airlock"
@@ -7496,11 +7778,12 @@
/turf/open/floor/iron,
/area/ruin/space/ks13/science/ordnance)
"WH" = (
-/obj/effect/spawner/structure/window/hollow/reinforced/directional{
- dir = 8
- },
+/obj/effect/mapping_helpers/broken_floor,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/item/shard/plasma,
+/obj/item/stack/rods,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"WI" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible,
/turf/open/floor/plating/airless,
@@ -7530,7 +7813,7 @@
/obj/effect/spawner/random/maintenance,
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"WP" = (
/obj/effect/spawner/structure/window/hollow/end,
/turf/open/floor/plating/airless,
@@ -7572,6 +7855,12 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/ai/vault)
+"WZ" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/item/shard/plasma,
+/obj/effect/decal/cleanable/glass/plasma,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Xa" = (
/turf/open/floor/plating/airless,
/area/ruin/space/ks13/ai/corridor)
@@ -7628,6 +7917,11 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/science/rnd)
+"Xp" = (
+/obj/effect/mapping_helpers/broken_floor,
+/obj/item/stack/sheet/plasteel,
+/turf/open/floor/plating/airless,
+/area/ruin/space/ks13/engineering/supermatter)
"Xr" = (
/turf/closed/wall,
/area/ruin/space/ks13/science/genetics)
@@ -7860,7 +8154,10 @@
/obj/machinery/light/small/directional/west,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
+"YH" = (
+/turf/template_noop,
+/area/ruin/space/ks13/science/genetics)
"YK" = (
/obj/effect/spawner/structure/window/hollow/reinforced/directional{
dir = 10
@@ -7874,7 +8171,7 @@
"YM" = (
/obj/item/stack/cable_coil/cut,
/turf/open/floor/plating/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"YP" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating/airless,
@@ -7891,7 +8188,7 @@
/obj/effect/decal/cleanable/glass,
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"YW" = (
/obj/structure/table,
/obj/item/paper_bin{
@@ -8028,7 +8325,7 @@
/obj/item/stack/cable_coil/cut,
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/iron/airless,
-/area/ruin/space/ks13/engineering/singulo)
+/area/ruin/space/ks13/engineering/supermatter)
"Zy" = (
/obj/structure/closet/crate/bin,
/obj/effect/decal/cleanable/dirt,
@@ -10162,11 +10459,11 @@ Jr
MW
Jr
ZO
-rk
+qv
Kh
-rk
-rk
-rk
+qv
+qv
+qv
Ii
Ii
Me
@@ -10278,13 +10575,13 @@ Sp
ZO
rh
Kh
-rk
+qv
mK
td
-rk
+qv
cI
qJ
-rk
+qv
aa
rk
rk
@@ -10394,7 +10691,7 @@ WC
oF
mE
hm
-rk
+qv
OX
kG
Me
@@ -10693,11 +10990,11 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
+rk
+rk
+rk
+rk
+rk
rk
rk
QG
@@ -10730,9 +11027,9 @@ LJ
UT
ak
Vk
-rk
+qv
He
-rk
+qv
vZ
VE
rR
@@ -10805,11 +11102,11 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
+rk
+rk
+rk
+rk
+rk
rk
QG
QG
@@ -10843,10 +11140,10 @@ Cs
pK
an
UF
-rk
+qv
Me
Dg
-rk
+qv
vZ
zr
Iy
@@ -10917,10 +11214,10 @@ aa
aa
aa
aa
-aa
rk
rk
-aa
+rk
+rk
rk
rk
rk
@@ -10959,9 +11256,9 @@ oL
CW
Iy
sB
-rk
+qv
Zj
-rk
+qv
Me
rk
rk
@@ -11027,12 +11324,12 @@ aa
aa
aa
aa
-aa
rk
rk
rk
rk
-aa
+rk
+rk
rk
rk
rk
@@ -11072,13 +11369,13 @@ JD
Zk
Ii
pS
-rk
+qv
Ii
zx
Me
-aa
-aa
-aa
+bm
+bm
+bm
ZK
ke
Ez
@@ -11139,16 +11436,16 @@ aa
aa
aa
aa
-aa
rk
-aa
+nQ
rk
+Kb
sU
sU
-sU
-sU
-Wk
-sU
+rk
+rk
+rk
+rk
sU
Dy
Us
@@ -11159,7 +11456,7 @@ zP
QG
sU
sU
-aa
+eQ
aa
pL
rK
@@ -11188,10 +11485,10 @@ jl
jl
jl
dH
-rk
+TM
Uz
-aa
-aa
+bm
+bm
XO
TK
Fv
@@ -11250,18 +11547,18 @@ aa
aa
aa
aa
-aa
rk
rk
rk
rk
+Kb
sU
sU
sU
sU
sU
Wk
-Wk
+aV
sU
Dy
VN
@@ -11272,8 +11569,8 @@ tt
Dy
sU
sU
-DA
-PI
+EK
+fE
LN
Gh
Se
@@ -11303,7 +11600,7 @@ wN
dH
Fa
KV
-rk
+bm
lW
ZK
TK
@@ -11362,12 +11659,11 @@ aa
aa
aa
aa
-aa
rk
rk
rk
rk
-sU
+Kb
sU
gd
CX
@@ -11376,6 +11672,7 @@ PI
PI
PI
PI
+PI
Jc
YM
px
@@ -11476,30 +11773,30 @@ aa
aa
aa
aa
-aa
rk
Kb
rk
-sU
+Kb
sU
aj
CX
Jc
Ex
+tU
+Xp
PI
-Jc
Ex
PI
Jc
-Jc
+WH
Jc
Jc
PI
ou
Js
-fg
-DA
-EK
+qa
+HO
+PI
pL
Lz
Wj
@@ -11582,8 +11879,7 @@ rk
rk
rk
rk
-rk
-aa
+nQ
aa
aa
aa
@@ -11592,35 +11888,36 @@ aa
aa
Kb
sg
-sU
+Kb
Wk
-fg
+MG
WO
CX
PI
-px
-Jc
-rd
-Vh
+ej
+Xp
+Wk
+sU
Vh
-GF
-fg
-fg
-Kw
-rd
-WH
-ID
+Wk
+EK
+UY
+BI
+sU
+wr
+Wk
+PI
Sn
-rk
-rk
-Bw
-rk
-rk
-qG
-nI
-DS
-Hb
-Ts
+Wk
+IS
+HO
+KT
+Ed
+Ed
+gu
+DS
+Hb
+Ts
wp
tN
xd
@@ -11695,8 +11992,7 @@ Jw
Jw
Jw
Jw
-rk
-aa
+nQ
aa
aa
aa
@@ -11705,31 +12001,32 @@ aa
aa
aa
rk
-sU
+Kb
Wk
-fg
+MG
FI
CX
-PI
+xy
Ex
-pi
-FI
-FI
-FI
-FI
+Wk
zv
-fg
-Ed
-PI
-PI
-qv
+IH
+te
+RI
+Tg
+Fp
+Fp
zv
-rk
-rk
-rk
-rk
-rk
-rk
+zv
+zv
+GG
+bC
+Ck
+PI
+eU
+sU
+Ed
+Ed
nI
DV
Se
@@ -11816,34 +12113,34 @@ aa
aa
aa
aa
-aa
rk
-sU
+Kb
sU
UZ
FI
gB
ys
PS
-RE
-PG
-fg
-fg
-PI
+ID
+Fp
zv
-PI
-PI
-PI
zv
-Jc
+RI
+zv
+RI
+zv
zv
+Wk
+Fp
+zv
+RI
ID
NB
-fg
-Wk
+px
+sU
sU
lw
-rk
+Ed
Xr
BB
yQ
@@ -11922,38 +12219,38 @@ Jw
rk
aa
aa
-aa
-aa
-aa
-rk
-rk
+OY
+OY
+FC
+FC
+yf
yf
yf
yf
yf
yf
-sU
NR
fg
px
fg
-Jc
+DX
+Wk
Fp
-TM
zv
+Fp
+RI
zv
-bm
-PI
+te
zv
+RI
+Wk
+RI
zv
-PI
-Jc
-Jc
-fg
zv
+EK
GN
-fg
-Wk
+Ex
+CM
sU
sU
wE
@@ -12035,9 +12332,8 @@ Yc
rk
rk
aa
-aa
uu
-MG
+Pm
wQ
wQ
wQ
@@ -12045,29 +12341,30 @@ Fo
HP
Ug
Hc
-sU
+yf
IY
FI
pi
Jc
fg
-bm
-PI
+EK
+HX
+RI
zv
-PI
-Jc
-xJ
-xJ
-xJ
-Jc
zv
+Wk
+RE
+zv
+RE
PI
+te
+RI
zv
-gB
-Jc
-Jc
-fg
sU
+Jc
+Jv
+ta
+tU
sU
sU
Xr
@@ -12148,7 +12445,6 @@ Yc
aa
rk
aa
-aa
uu
NJ
QJ
@@ -12158,29 +12454,30 @@ Fo
pH
tu
lg
-sU
+yf
tX
qt
sU
Mw
Jc
-zv
-ui
-PI
-zv
-xJ
-xJ
-xJ
+DA
+RI
+RI
+Wk
+RE
+bM
xJ
xJ
-PI
-PI
+EC
+bM
+ek
+te
+zv
+Kp
+If
Jc
PI
-Jc
-Jc
-sZ
-sU
+PI
ar
sU
Vu
@@ -12261,7 +12558,6 @@ Yc
aa
aa
aa
-aa
yf
bN
wQ
@@ -12272,29 +12568,30 @@ Mg
tu
tu
qY
-LZ
+kw
Fj
sU
sS
-zv
+zg
+so
te
zv
-PI
-zv
-xJ
+Vh
+RE
xJ
xJ
xJ
xJ
+RE
+RI
+RI
+HX
+Sn
+bT
PI
-zv
-Jc
-Jc
-Jc
PI
-fg
-HO
-HO
+lu
+Fg
sU
Dd
sc
@@ -12374,7 +12671,6 @@ Yc
aa
aa
aa
-aa
yf
wQ
wQ
@@ -12384,29 +12680,30 @@ Fo
HP
Gc
lg
-sU
+yf
OS
dj
sU
Pn
+HX
+iA
+RI
zv
zv
-PI
-zv
-PI
-xJ
-xJ
-xJ
-xJ
+RI
+RE
+EC
xJ
-PI
-fg
-Jc
-Jc
-jq
+EC
+RE
+RI
+My
+RI
+EK
+lv
Jc
-fg
-sU
+Vp
+PI
qW
sU
ug
@@ -12487,42 +12784,42 @@ Yc
aa
aa
aa
-aa
yf
WF
wQ
-So
+hD
wQ
wQ
pH
Ct
UE
-sU
+yf
sU
sU
sU
GS
Jc
-PI
+cE
+Al
zv
-PI
zv
-Jc
-xJ
-xJ
-xJ
-PI
-PI
-fg
-FI
-pi
+Wk
+RE
+RI
+bC
+Vx
+sU
+RI
+zv
+te
+sU
Jc
Jc
-fg
-Wk
+px
+Km
sU
sU
-rk
+bn
SD
aD
LA
@@ -12599,42 +12896,42 @@ Yc
Yc
Yc
Bw
-Jw
aa
yf
yf
uu
uu
-aa
-rk
+OY
+FC
+yf
yf
yf
yf
-sU
HO
YF
HO
Jc
Jc
+sU
RI
zv
+Fp
zv
-PI
-zv
-PI
-PI
+Wk
+RI
+RI
+RI
+Wk
+RI
zv
+RI
+Ck
+If
+ta
PI
-zv
-zv
-FI
-CX
-Jc
-fg
-sU
sU
sU
-rk
+bn
yF
Za
SX
@@ -12712,7 +13009,6 @@ Yc
Yc
Yc
rk
-rk
aa
aa
aa
@@ -12720,35 +13016,36 @@ aa
aa
aa
aa
+rd
rk
-rk
-sU
+Kb
sU
fg
PI
Jc
Jc
Jc
-CX
+Vh
+Fp
+Jn
zv
-PI
-PI
-PI
+oE
zv
-PI
-PI
zv
-PI
-PI
-FI
-CX
-HV
-Jc
-sU
+zv
+zv
+zv
+RI
+zv
+te
+dU
+mc
+Ex
+CM
sU
EY
-rk
-rk
+bn
+bn
Cj
Tc
AU
@@ -12833,36 +13130,36 @@ aa
aa
aa
aa
-aa
-rk
-Wk
+rd
+BK
Wk
fg
Jc
PI
fg
Jc
-gB
-PI
-zv
+sU
+Fp
+RI
zv
+Fp
zv
HX
-hD
-zv
+RI
zv
zv
+RI
Tg
-PI
-gB
-Jc
-HV
-Wk
+RI
+Kp
+mc
+mc
+So
sU
wy
-aa
-aa
-rk
+YH
+YH
+bn
XG
ub
GU
@@ -12945,32 +13242,32 @@ aa
aa
aa
aa
-aa
-Kb
+PG
IF
-sU
+Kb
Wk
PI
Jc
Mw
DJ
Jc
-fg
-rd
-sJ
-sJ
-BI
PI
-zv
-If
-rd
-sJ
+Wk
+Xp
sJ
+Wk
BI
-Jc
-Jc
-fg
+BI
+cE
+Wk
+BI
+Ck
+cE
+IH
+Wk
Wk
+zv
+sU
sU
HH
ib
@@ -13058,27 +13355,27 @@ aa
aa
aa
aa
-aa
-rk
+rd
Kb
rk
-Wk
+BK
Wk
HO
fg
PI
+Xp
PI
-Jc
-PI
+MZ
PI
PI
-px
-Jc
PI
+RF
+NE
+WZ
Py
-fg
-fg
-Jc
+pD
+Mf
+LZ
Jc
HV
HV
@@ -13088,7 +13385,7 @@ KU
NS
RJ
ib
-rk
+bn
Tp
Jt
OE
@@ -13171,16 +13468,16 @@ aa
aa
aa
aa
-aa
-rk
+rd
rk
rk
-sU
+Kb
sU
HO
HO
fg
PI
+PI
Jc
Jc
Zw
@@ -13195,10 +13492,10 @@ fg
fg
Jc
fg
-Wk
+sU
sU
sD
-aa
+sZ
rF
ib
yQ
@@ -13285,10 +13582,10 @@ aa
aa
aa
aa
-aa
-rk
+rd
rk
rk
+Kb
sU
sU
sU
@@ -13304,11 +13601,11 @@ ky
ky
UB
rr
-Wk
-Wk
-Wk
-Wk
-Wk
+sU
+sU
+sU
+sU
+sU
Tq
AR
rF
@@ -13398,11 +13695,11 @@ aa
aa
aa
aa
-aa
-rk
+rd
rk
rk
rk
+Kb
sU
sU
sU
@@ -13422,7 +13719,7 @@ sU
sU
sU
sU
-rk
+KU
OQ
Rc
OQ
@@ -13512,8 +13809,8 @@ aa
aa
aa
aa
-aa
-rk
+rd
+nQ
aa
aa
aa
@@ -13531,10 +13828,10 @@ sr
EH
rr
sU
-aa
-aa
-aa
-aa
+qB
+qB
+Kw
+Kw
AX
Hy
Hk
@@ -13643,8 +13940,8 @@ GW
DL
rr
rr
-rk
-aa
+Kw
+Kw
AX
xd
QR
@@ -13756,7 +14053,7 @@ rr
rr
rr
rr
-rk
+Kw
qX
zi
BJ
@@ -14289,8 +14586,8 @@ yz
yz
xf
Ym
-aa
-rk
+ui
+lt
BX
BD
xf
@@ -14403,7 +14700,7 @@ yz
xf
Ym
zf
-aa
+ui
BX
Ym
xf
@@ -15307,7 +15604,7 @@ yz
oP
wX
At
-dK
+At
At
oZ
oP
@@ -15420,7 +15717,7 @@ yz
oP
Zp
At
-yw
+At
NF
WN
oP
@@ -15532,9 +15829,9 @@ yz
yz
oP
oP
-oP
-oP
-oP
+dK
+At
+yw
oP
oP
yz
@@ -15644,11 +15941,11 @@ yz
yz
yz
yz
-yz
-yz
-yz
-yz
-yz
+oP
+oP
+HL
+oP
+oP
yz
yz
yz
@@ -15758,9 +16055,9 @@ yz
yz
yz
yz
-yz
-yz
-yz
+oP
+oP
+oP
yz
yz
yz
@@ -15867,14 +16164,14 @@ HC
DU
yz
yz
-dT
-dT
-dT
-dT
-dT
-dT
-dT
-dT
+yz
+yz
+yz
+yz
+yz
+yz
+yz
+yz
dT
dT
dT
@@ -15981,14 +16278,14 @@ DU
dT
dT
dT
-Er
-zR
-eQ
-Ey
-uY
-Ey
-Ey
-Ey
+dT
+dT
+dT
+dT
+dT
+dT
+dT
+dT
Er
zR
Vs
@@ -16094,9 +16391,9 @@ DU
Ly
dT
Mm
-DN
-DN
-DN
+sf
+Dc
+cO
Ey
DN
Ey
diff --git a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm
index f31929b70a4e2..719088322f21e 100644
--- a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm
+++ b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm
@@ -251,14 +251,14 @@
/area/ruin/space/has_grav/the_outlet/researchrooms)
"gU" = (
/obj/structure/closet/secure_closet/freezer/empty,
-/obj/item/organ/internal/tongue/lizard,
+/obj/item/organ/tongue/lizard,
/obj/item/food/meat/slab/human/mutant/lizard,
-/obj/item/organ/external/tail/lizard,
-/obj/item/organ/internal/heart,
-/obj/item/organ/internal/brain,
-/obj/item/organ/internal/liver,
-/obj/item/organ/internal/lungs,
-/obj/item/organ/internal/stomach,
+/obj/item/organ/tail/lizard,
+/obj/item/organ/heart,
+/obj/item/organ/brain,
+/obj/item/organ/liver,
+/obj/item/organ/lungs,
+/obj/item/organ/stomach,
/turf/open/floor/iron/freezer,
/area/ruin/space/has_grav/the_outlet/researchrooms)
"gX" = (
diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm
index a21d64d505b63..ea63bf1b7fe19 100644
--- a/_maps/RandomZLevels/caves.dmm
+++ b/_maps/RandomZLevels/caves.dmm
@@ -56,7 +56,7 @@
},
/obj/item/veilrender/honkrender,
/obj/item/clothing/mask/gas/clown_hat,
-/obj/item/organ/internal/heart/demon,
+/obj/item/organ/heart/demon,
/turf/open/floor/engine/cult{
initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
},
@@ -1252,7 +1252,7 @@
"ki" = (
/obj/structure/closet/crate/preopen,
/obj/item/paper/fluff/awaymissions/caves/shipment_receipt,
-/obj/item/organ/internal/eyes/robotic/thermals,
+/obj/item/organ/eyes/robotic/thermals,
/obj/item/gun/energy/laser/captain/scattershot,
/obj/item/slimepotion/fireproof,
/turf/open/misc/asteroid/basalt{
@@ -1977,7 +1977,7 @@
},
/area/awaymission/caves/bmp_asteroid/level_three)
"YG" = (
-/obj/item/organ/internal/brain/alien,
+/obj/item/organ/brain/alien,
/turf/open/misc/asteroid/basalt{
initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
},
diff --git a/_maps/deathmatch/sunrise.dmm b/_maps/deathmatch/sunrise.dmm
index b4de46385cd5c..d58aac39aecc3 100644
--- a/_maps/deathmatch/sunrise.dmm
+++ b/_maps/deathmatch/sunrise.dmm
@@ -721,7 +721,7 @@
/area/deathmatch)
"Uk" = (
/obj/structure/closet/crate/coffin,
-/obj/item/organ/internal/cyberimp/arm/shard/katana,
+/obj/item/organ/cyberimp/arm/shard/katana,
/obj/structure/window/spawner/directional/east,
/obj/structure/window/spawner/directional/west,
/obj/structure/window/spawner/directional/south,
diff --git a/_maps/doppler/automapper/templates/birdshot/birdshot_cryo.dmm b/_maps/doppler/automapper/templates/birdshot/birdshot_cryo.dmm
index 02e8e71ad3fa4..69d1416d927f1 100644
--- a/_maps/doppler/automapper/templates/birdshot/birdshot_cryo.dmm
+++ b/_maps/doppler/automapper/templates/birdshot/birdshot_cryo.dmm
@@ -34,12 +34,12 @@
},
/area/station/hallway/secondary/entry)
"n" = (
-/obj/structure/sign/poster/official/random/directional/north,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/obj/effect/turf_decal/siding/thinplating_new/light{
dir = 1
},
+/obj/machinery/computer/cryopod/directional/north,
/turf/open/floor/iron/small,
/area/station/commons/cryopods)
"p" = (
diff --git a/_maps/map_files/Basketball/lusty_xenomorphs.dmm b/_maps/map_files/Basketball/lusty_xenomorphs.dmm
index 534376d3f5639..f3550c0c15fad 100644
--- a/_maps/map_files/Basketball/lusty_xenomorphs.dmm
+++ b/_maps/map_files/Basketball/lusty_xenomorphs.dmm
@@ -135,7 +135,7 @@
/turf/open/floor/engine,
/area/centcom/basketball)
"kT" = (
-/obj/item/organ/internal/body_egg/alien_embryo,
+/obj/item/organ/body_egg/alien_embryo,
/turf/open/floor/engine,
/area/centcom/basketball)
"lh" = (
@@ -327,7 +327,7 @@
/area/centcom/basketball)
"Bd" = (
/obj/structure/alien/weeds,
-/obj/item/organ/internal/body_egg/alien_embryo,
+/obj/item/organ/body_egg/alien_embryo,
/turf/open/floor/iron/white,
/area/centcom/basketball)
"Cv" = (
diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm
index b58883b285a9c..1f9fa283e57fd 100644
--- a/_maps/map_files/Birdshot/birdshot.dmm
+++ b/_maps/map_files/Birdshot/birdshot.dmm
@@ -2005,6 +2005,15 @@
/obj/structure/sign/poster/official/random/directional/north,
/turf/open/floor/iron/dark/small,
/area/station/medical/storage)
+"aNn" = (
+/obj/effect/turf_decal/sand/plating,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/sign/warning/pods/directional/north,
+/turf/open/floor/plating,
+/area/station/maintenance/department/electrical)
"aNE" = (
/obj/machinery/computer/cargo{
dir = 4
@@ -2603,6 +2612,10 @@
/obj/structure/flora/bush/flowers_yw/style_random,
/turf/open/misc/sandy_dirt,
/area/station/service/lawoffice)
+"aZg" = (
+/obj/machinery/drone_dispenser,
+/turf/open/floor/plating,
+/area/station/maintenance/department/science/xenobiology)
"aZh" = (
/obj/machinery/modular_computer/preset/curator{
dir = 8
@@ -7110,6 +7123,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/stone,
/area/station/service/bar)
+"cJq" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/structure/sign/warning/pods/directional/east,
+/turf/open/floor/plating,
+/area/station/maintenance/department/engine/atmos)
"cJv" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -9459,24 +9480,6 @@
},
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
-"dzi" = (
-/obj/structure/table/wood,
-/obj/item/book/granter/action/spell/smoke/lesser{
- name = "mysterious old book of cloud-chasing"
- },
-/obj/item/reagent_containers/cup/glass/bottle/holywater{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/nullrod{
- pixel_x = 4
- },
-/obj/item/organ/internal/heart,
-/obj/item/soulstone/anybody/chaplain,
-/obj/machinery/light/small/red/dim/directional/south,
-/obj/item/radio/intercom/chapel/directional/east,
-/turf/open/floor/iron/terracotta/diagonal,
-/area/station/service/chapel/office)
"dzE" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -13551,6 +13554,12 @@
},
/turf/open/floor/iron/smooth,
/area/station/ai_monitored/turret_protected/aisat/equipment)
+"eYq" = (
+/obj/structure/sign/directions/evac/directional/east{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/department/engine/atmos)
"eYB" = (
/obj/effect/turf_decal/siding/wood/end,
/turf/open/floor/wood,
@@ -13883,6 +13892,7 @@
cycle_id = "engine_airlock_1"
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
/turf/open/floor/catwalk_floor,
/area/station/engineering/main)
"ffL" = (
@@ -14701,6 +14711,7 @@
dir = 4
},
/obj/effect/mapping_helpers/mail_sorting/security/detectives_office,
+/obj/structure/sign/warning/pods/directional/south,
/turf/open/floor/iron,
/area/station/security/brig/entrance)
"fuD" = (
@@ -22289,6 +22300,10 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
+"hRb" = (
+/obj/structure/sign/warning/pods/directional/west,
+/turf/open/floor/plating,
+/area/station/engineering/supermatter/room)
"hRc" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/red/opposingcorners,
@@ -26319,10 +26334,6 @@
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
-"jar" = (
-/obj/machinery/drone_dispenser,
-/turf/open/misc/asteroid,
-/area/station/maintenance/starboard/greater)
"jat" = (
/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{
dir = 4
@@ -30212,7 +30223,6 @@
/area/station/command/corporate_dock)
"kmD" = (
/obj/structure/chair/office/light{
- name = "blue";
color = "#6495ED";
dir = 4
},
@@ -33062,6 +33072,12 @@
},
/turf/open/floor/iron,
/area/station/cargo/sorting)
+"lkM" = (
+/obj/structure/sign/directions/evac/directional/west{
+ dir = 2
+ },
+/turf/open/floor/iron,
+/area/station/maintenance/department/medical/central)
"lkN" = (
/obj/effect/turf_decal/siding/wideplating{
dir = 1
@@ -34189,6 +34205,7 @@
/obj/item/clothing/glasses/welding,
/obj/item/radio/intercom/directional/north,
/obj/item/clothing/head/utility/welding,
+/obj/item/toy/crayon/spraycan/roboticist,
/turf/open/floor/iron,
/area/station/science/robotics/lab)
"lEa" = (
@@ -45431,6 +45448,24 @@
},
/turf/open/floor/iron,
/area/station/hallway/primary/port)
+"pEQ" = (
+/obj/structure/table/wood,
+/obj/item/book/granter/action/spell/smoke/lesser{
+ name = "mysterious old book of cloud-chasing"
+ },
+/obj/item/reagent_containers/cup/glass/bottle/holywater{
+ pixel_x = -2;
+ pixel_y = 2
+ },
+/obj/item/nullrod{
+ pixel_x = 4
+ },
+/obj/item/organ/heart,
+/obj/item/soulstone/anybody/chaplain,
+/obj/machinery/light/small/red/dim/directional/south,
+/obj/item/radio/intercom/chapel/directional/east,
+/turf/open/floor/iron/terracotta/diagonal,
+/area/station/service/chapel/office)
"pET" = (
/obj/effect/turf_decal/siding/wideplating{
dir = 8
@@ -45486,6 +45521,16 @@
/obj/machinery/door/window/brigdoor/right/directional/west,
/turf/open/floor/iron/smooth,
/area/station/security/checkpoint/customs/auxiliary)
+"pFR" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/structure/sign/directions/evac/directional/east{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/department/engine/atmos)
"pGp" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment{
@@ -46000,6 +46045,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/sign/warning/pods/directional/south,
/turf/open/floor/iron/small,
/area/station/engineering/main)
"pOm" = (
@@ -47262,6 +47308,9 @@
/area/station/maintenance/central/greater)
"qiL" = (
/obj/structure/disposalpipe/segment,
+/obj/structure/sign/directions/evac/directional/east{
+ dir = 6
+ },
/turf/open/floor/iron,
/area/station/maintenance/department/medical/central)
"qiM" = (
@@ -57292,6 +57341,23 @@
/obj/effect/landmark/transport/nav_beacon/tram/nav/birdshot/prison,
/turf/open/floor/tram,
/area/station/security/tram)
+"tzf" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/neutral,
+/obj/structure/sign/directions/security/directional/east{
+ dir = 2
+ },
+/obj/structure/sign/directions/science/directional/east{
+ dir = 5;
+ pixel_y = 8
+ },
+/obj/structure/sign/directions/medical/directional/east{
+ pixel_y = -8;
+ dir = 10
+ },
+/turf/open/floor/iron,
+/area/station/hallway/primary/central/fore)
"tzo" = (
/obj/structure/alien/egg/burst,
/obj/structure/alien/weeds,
@@ -57606,6 +57672,17 @@
/obj/machinery/door/airlock/public/glass{
name = "Departure Lounge"
},
+/obj/structure/sign/directions/medical/directional/north{
+ dir = 4
+ },
+/obj/structure/sign/directions/science/directional/north{
+ dir = 4;
+ pixel_y = 24
+ },
+/obj/structure/sign/directions/arrival/directional/north{
+ dir = 4;
+ pixel_y = 40
+ },
/turf/open/floor/iron/textured_half{
dir = 1
},
@@ -64485,7 +64562,6 @@
/area/station/security/checkpoint/customs/auxiliary)
"vKn" = (
/obj/structure/chair/office/light{
- name = "blue";
color = "#6495ED";
dir = 8
},
@@ -69512,6 +69588,7 @@
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/sign/warning/pods/directional/north,
/turf/open/floor/iron/white/corner{
dir = 8
},
@@ -70253,6 +70330,12 @@
},
/turf/open/floor/iron/checker,
/area/station/security/breakroom)
+"xtv" = (
+/obj/structure/rack,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/turf/open/floor/plating,
+/area/station/maintenance/department/science/xenobiology)
"xtD" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -72181,6 +72264,23 @@
},
/turf/open/floor/iron/white/side,
/area/station/science/research)
+"xUW" = (
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/mapping_helpers/broken_floor,
+/obj/structure/sign/directions/evac/directional/east{
+ dir = 2;
+ pixel_y = 2
+ },
+/obj/structure/sign/directions/evac/directional/east{
+ dir = 1;
+ pixel_y = 10
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/lesser)
"xUX" = (
/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/visible{
dir = 4
@@ -72572,6 +72672,7 @@
"yag" = (
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/north,
+/obj/structure/sign/warning/pods/directional/south,
/turf/open/floor/plating,
/area/station/maintenance/port/lesser)
"yal" = (
@@ -85331,7 +85432,7 @@ tKa
xLm
tKa
rGB
-iZy
+xUW
cMW
tKa
tKa
@@ -85837,7 +85938,7 @@ jte
diI
yea
vmt
-dzi
+pEQ
fEC
wxR
fEC
@@ -87033,7 +87134,7 @@ bvt
bvt
bvt
pWm
-oii
+aNn
pnl
jDi
jDi
@@ -87052,9 +87153,9 @@ tAm
iQr
kfv
vgp
+cJq
hrx
-hrx
-hrx
+pFR
lLe
emg
knv
@@ -88320,7 +88421,7 @@ oJm
jeF
vZu
jeF
-mWB
+hRb
rDV
vsf
fHD
@@ -90403,7 +90504,7 @@ xxt
aqo
cvJ
xrA
-cvJ
+eYq
cvJ
uRY
knv
@@ -93005,7 +93106,7 @@ xSw
kfw
yeD
kJj
-yjZ
+tzf
fUC
yjZ
lCK
@@ -106183,7 +106284,7 @@ fDI
eQa
gdD
nyH
-uOw
+lkM
ulO
ulO
aTc
@@ -112832,7 +112933,7 @@ tjj
tjj
blb
ssz
-xQI
+aZg
qRO
ssz
vLv
@@ -113089,7 +113190,7 @@ tjj
blb
blb
ssz
-roz
+xtv
sPO
ssz
aSy
@@ -113346,9 +113447,9 @@ blb
blb
ssz
ssz
+xQI
roz
ssz
-ssz
pus
cYG
srb
@@ -113603,7 +113704,7 @@ ssz
ssz
ssz
xQI
-roz
+xQI
roz
ssz
iWZ
@@ -131092,7 +131193,7 @@ tiN
aCM
bDq
eUF
-jar
+fcq
mMr
fPR
ylD
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 4200fe13d159d..5b4edfe4443e0 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -21003,6 +21003,7 @@
},
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/light/cold/directional/east,
+/obj/structure/sign/eyechart/directional/east,
/turf/open/floor/iron,
/area/station/medical/treatment_center)
"fih" = (
@@ -69865,6 +69866,7 @@
dir = 8
},
/obj/machinery/light/small/directional/south,
+/obj/item/toy/crayon/spraycan/roboticist,
/turf/open/floor/iron,
/area/station/science/robotics/lab)
"ryt" = (
diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
index 6cbcb15e08eed..5a4a74216c43a 100644
--- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm
+++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm
@@ -52616,7 +52616,7 @@
/turf/open/floor/iron/dark/textured,
/area/station/ai_monitored/security/armory)
"pgN" = (
-/obj/item/organ/external/tail/monkey,
+/obj/item/organ/tail/monkey,
/obj/effect/decal/cleanable/blood/splatter,
/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/underground/explored)
@@ -56829,7 +56829,7 @@
pixel_y = 4
},
/obj/item/bodypart/chest,
-/obj/item/organ/internal/heart,
+/obj/item/organ/heart,
/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/underground/explored)
"qrj" = (
@@ -70674,6 +70674,7 @@
/obj/item/multitool{
pixel_x = 3
},
+/obj/item/toy/crayon/spraycan/roboticist,
/turf/open/floor/iron,
/area/station/science/robotics/lab)
"utA" = (
@@ -71064,6 +71065,7 @@
c_tag = "Medbay Mid-South";
network = list("ss13","medbay")
},
+/obj/structure/sign/warning/no_smoking/circle/directional/west,
/turf/open/floor/iron/white,
/area/station/medical/medbay/aft)
"uzs" = (
@@ -78725,6 +78727,7 @@
/obj/machinery/computer/operating,
/obj/effect/turf_decal/tile/blue/full,
/obj/machinery/light/cold/directional/east,
+/obj/structure/sign/eyechart/directional/east,
/turf/open/floor/iron/large,
/area/station/medical/treatment_center)
"wRI" = (
@@ -81159,7 +81162,6 @@
dir = 4
},
/obj/effect/turf_decal/trimline/blue/filled/end,
-/obj/structure/sign/warning/no_smoking/circle/directional/west,
/obj/structure/disposalpipe/segment,
/obj/machinery/light/directional/west,
/obj/structure/window/spawner/directional/south,
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 865e1ea3444b7..d056026b5ff79 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -365,7 +365,7 @@
dir = 10
},
/obj/structure/cable,
-/obj/item/radio/intercom/directional/west,
+/obj/structure/sign/eyechart/directional/west,
/turf/open/floor/iron/white,
/area/station/medical/cryo)
"ahj" = (
@@ -3484,7 +3484,7 @@
network = list("ss13","medbay")
},
/obj/effect/turf_decal/tile/blue/fourcorners,
-/obj/machinery/light_switch/directional/north,
+/obj/machinery/airalarm/directional/north,
/turf/open/floor/iron/white,
/area/station/medical/cryo)
"bjP" = (
@@ -15680,13 +15680,6 @@
/obj/structure/cable,
/turf/open/floor/circuit/red,
/area/station/ai_monitored/turret_protected/ai_upload)
-"fEV" = (
-/obj/effect/turf_decal/tile/brown/fourcorners,
-/obj/machinery/door/airlock/security/glass{
- name = "Security Post - Cargo"
- },
-/turf/open/floor/iron/dark,
-/area/station/security/checkpoint/supply)
"fEW" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -23637,6 +23630,7 @@
/obj/item/multitool,
/obj/item/clothing/head/utility/welding,
/obj/item/clothing/glasses/welding,
+/obj/item/toy/crayon/spraycan/roboticist,
/turf/open/floor/iron,
/area/station/science/robotics/lab)
"iwL" = (
@@ -25364,6 +25358,7 @@
dir = 1
},
/obj/machinery/portable_atmospherics/canister/anesthetic_mix,
+/obj/machinery/light_switch/directional/south,
/turf/open/floor/iron/dark,
/area/station/medical/cryo)
"jaj" = (
@@ -26643,6 +26638,7 @@
pixel_y = 6
},
/obj/effect/turf_decal/tile/blue/fourcorners,
+/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron/white,
/area/station/medical/cryo)
"jws" = (
@@ -28017,22 +28013,6 @@
/obj/item/kirbyplants/potty,
/turf/open/floor/wood/large,
/area/station/commons/lounge)
-"jTy" = (
-/obj/structure/table/wood,
-/obj/item/book/granter/action/spell/smoke/lesser{
- name = "mysterious old book of cloud-chasing"
- },
-/obj/item/reagent_containers/cup/glass/bottle/holywater{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/nullrod{
- pixel_x = 4
- },
-/obj/item/organ/internal/heart,
-/obj/item/soulstone/anybody/chaplain,
-/turf/open/floor/cult,
-/area/station/service/chapel/office)
"jTH" = (
/obj/machinery/firealarm/directional/east,
/obj/machinery/pdapainter/security,
@@ -38062,6 +38042,14 @@
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/security/prison/work)
+"nyu" = (
+/obj/effect/turf_decal/tile/brown/fourcorners,
+/obj/machinery/door/airlock/security/glass{
+ name = "Security Post - Cargo"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/security/general,
+/turf/open/floor/iron/dark,
+/area/station/security/checkpoint/supply)
"nyy" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -46596,9 +46584,9 @@
"qCL" = (
/obj/structure/cable,
/obj/structure/sink/directional/east,
-/obj/machinery/airalarm/directional/west,
/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible,
/obj/effect/turf_decal/tile/blue/fourcorners,
+/obj/structure/mirror/directional/west,
/turf/open/floor/iron/white,
/area/station/medical/cryo)
"qCM" = (
@@ -59517,6 +59505,22 @@
"uXd" = (
/turf/closed/wall/r_wall,
/area/station/engineering/main)
+"uXh" = (
+/obj/structure/table/wood,
+/obj/item/book/granter/action/spell/smoke/lesser{
+ name = "mysterious old book of cloud-chasing"
+ },
+/obj/item/reagent_containers/cup/glass/bottle/holywater{
+ pixel_x = -2;
+ pixel_y = 2
+ },
+/obj/item/nullrod{
+ pixel_x = 4
+ },
+/obj/item/organ/heart,
+/obj/item/soulstone/anybody/chaplain,
+/turf/open/floor/cult,
+/area/station/service/chapel/office)
"uXt" = (
/obj/docking_port/stationary/syndicate/northwest{
dir = 8
@@ -63484,15 +63488,6 @@
},
/turf/open/floor/iron/dark,
/area/station/security/evidence)
-"wme" = (
-/obj/machinery/door/airlock/security/glass{
- name = "Security Post - Cargo"
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/cable,
-/turf/open/floor/plating,
-/area/station/security/checkpoint/supply)
"wmf" = (
/obj/effect/spawner/random/trash/garbage{
spawn_scatter_radius = 1
@@ -66210,6 +66205,17 @@
},
/turf/open/floor/iron,
/area/station/commons/locker)
+"xma" = (
+/obj/machinery/door/airlock/security/glass{
+ name = "Security Post - Cargo"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/brown/fourcorners,
+/obj/effect/mapping_helpers/airlock/access/all/security/general,
+/turf/open/floor/iron/dark,
+/area/station/security/checkpoint/supply)
"xmb" = (
/obj/machinery/atmospherics/pipe/bridge_pipe/purple/visible{
dir = 4
@@ -89976,7 +89982,7 @@ hxd
rtG
oor
oor
-wme
+xma
oor
xbu
oor
@@ -90495,7 +90501,7 @@ kDb
imT
gPw
qNL
-fEV
+nyu
pVK
xOw
uCR
@@ -91331,7 +91337,7 @@ tSw
tAH
waD
tSw
-jTy
+uXh
vQg
oCb
gCA
diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm
index 2fc187c626d6d..0fa17fa43bfbe 100644
--- a/_maps/map_files/NorthStar/north_star.dmm
+++ b/_maps/map_files/NorthStar/north_star.dmm
@@ -6123,6 +6123,7 @@
/area/station/maintenance/floor1/starboard/fore)
"bxk" = (
/obj/structure/rack,
+/obj/item/toy/crayon/spraycan/roboticist,
/turf/open/floor/iron/dark/smooth_large,
/area/station/science/robotics/lab)
"bxl" = (
diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm
index 280fcdfc858e7..9b9a4ebef4fc0 100644
--- a/_maps/map_files/debug/runtimestation.dmm
+++ b/_maps/map_files/debug/runtimestation.dmm
@@ -2592,13 +2592,13 @@
/area/station/hallway/primary/central)
"XN" = (
/obj/structure/table,
-/obj/item/organ/internal/cyberimp/bci{
+/obj/item/organ/cyberimp/bci{
pixel_y = 5
},
-/obj/item/organ/internal/cyberimp/bci{
+/obj/item/organ/cyberimp/bci{
pixel_y = 5
},
-/obj/item/organ/internal/cyberimp/bci{
+/obj/item/organ/cyberimp/bci{
pixel_y = 5
},
/turf/open/floor/iron/dark,
diff --git a/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_2.dmm b/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_2.dmm
index 0e8deac0a590a..893f1208686ff 100644
--- a/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_2.dmm
+++ b/_maps/map_files/tramstation/maintenance_modules/barcargoupper_cave_2.dmm
@@ -102,7 +102,7 @@
/area/station/asteroid)
"N" = (
/obj/item/instrument/trombone,
-/obj/item/organ/internal/tongue/bone,
+/obj/item/organ/tongue/bone,
/turf/open/misc/asteroid/dug,
/area/station/asteroid)
"O" = (
diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm
index 9c97fd61253f4..a0c0bc0964b08 100644
--- a/_maps/map_files/tramstation/tramstation.dmm
+++ b/_maps/map_files/tramstation/tramstation.dmm
@@ -5979,6 +5979,7 @@
/obj/item/clothing/glasses/welding,
/obj/item/radio/intercom/directional/north,
/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/item/toy/crayon/spraycan/roboticist,
/turf/open/floor/iron/dark,
/area/station/science/robotics/lab)
"aUc" = (
diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm
index c1d1929d4d27e..66345284283e1 100644
--- a/_maps/map_files/wawastation/wawastation.dmm
+++ b/_maps/map_files/wawastation/wawastation.dmm
@@ -12657,6 +12657,7 @@
/obj/item/clothing/head/utility/welding,
/obj/item/clothing/glasses/welding,
/obj/machinery/airalarm/directional/south,
+/obj/item/toy/crayon/spraycan/roboticist,
/turf/open/floor/iron/dark/textured,
/area/station/science/robotics/lab)
"exR" = (
@@ -15445,7 +15446,7 @@
/obj/item/nullrod{
pixel_x = 4
},
-/obj/item/organ/internal/heart,
+/obj/item/organ/heart,
/obj/item/soulstone/anybody/chaplain,
/turf/open/floor/cult,
/area/station/service/chapel/office)
@@ -31404,9 +31405,6 @@
/obj/structure/rack,
/turf/open/floor/plating,
/area/station/maintenance/central/lesser)
-"lbg" = (
-/turf/open/floor/plating,
-/area/station/cargo/storage)
"lbl" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -33249,7 +33247,7 @@
},
/obj/effect/mapping_helpers/airlock/access/all/engineering/external,
/turf/open/floor/plating,
-/area/station/cargo/storage)
+/area/station/maintenance/department/cargo)
"lLC" = (
/obj/structure/chair/stool/directional/east{
name = "Quartermaster"
@@ -39320,8 +39318,12 @@
pixel_y = -1
},
/obj/item/storage/box/gloves{
- pixel_x = -4;
- pixel_y = 8
+ pixel_x = -5;
+ pixel_y = 9
+ },
+/obj/item/storage/box/masks{
+ pixel_x = -5;
+ pixel_y = -1
},
/turf/open/floor/glass/reinforced,
/area/station/science/xenobiology)
@@ -39517,11 +39519,11 @@
pixel_y = 5
},
/obj/item/storage/box/beakers{
- pixel_x = 24;
- pixel_y = 6
+ pixel_x = 10;
+ pixel_y = 14
},
/obj/item/storage/box/syringes{
- pixel_x = 11;
+ pixel_x = 10;
pixel_y = 4
},
/turf/open/floor/glass/reinforced,
@@ -39983,6 +39985,14 @@
pixel_x = 12;
pixel_y = 2
},
+/obj/item/reagent_containers/dropper{
+ pixel_y = 1;
+ pixel_x = -5
+ },
+/obj/item/reagent_containers/dropper{
+ pixel_y = -2;
+ pixel_x = -5
+ },
/turf/open/floor/glass/reinforced,
/area/station/science/xenobiology)
"okg" = (
@@ -49890,7 +49900,7 @@
},
/obj/effect/mapping_helpers/airlock/access/all/engineering/external,
/turf/open/floor/plating,
-/area/station/cargo/storage)
+/area/station/maintenance/department/cargo)
"rFb" = (
/obj/effect/turf_decal/trimline/green/filled/line{
dir = 9
@@ -65600,7 +65610,7 @@
/obj/item/instrument/musicalmoth,
/obj/structure/sign/warning/vacuum/external/directional/north,
/turf/open/floor/plating,
-/area/station/cargo/storage)
+/area/station/maintenance/department/cargo)
"xeo" = (
/obj/machinery/door/airlock/maintenance_hatch,
/obj/structure/cable,
@@ -66272,11 +66282,11 @@
/area/station/hallway/secondary/exit/departure_lounge)
"xrt" = (
/obj/effect/decal/cleanable/dirt/dust,
-/obj/item/organ/external/horns,
-/obj/item/organ/external/antennae,
-/obj/item/organ/external/frills,
-/obj/item/organ/external/spines,
-/obj/item/organ/external/tail/lizard/fake,
+/obj/item/organ/horns,
+/obj/item/organ/antennae,
+/obj/item/organ/frills,
+/obj/item/organ/spines,
+/obj/item/organ/tail/lizard/fake,
/obj/structure/closet/crate/freezer,
/turf/open/floor/plating,
/area/station/maintenance/department/science)
@@ -67749,7 +67759,7 @@
/obj/machinery/light/small/directional/south,
/obj/structure/closet/emcloset/anchored,
/turf/open/floor/plating,
-/area/station/cargo/storage)
+/area/station/maintenance/department/cargo)
"xTs" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron/dark,
@@ -67962,12 +67972,12 @@
/area/station/service/kitchen)
"xXm" = (
/obj/structure/table,
-/obj/item/storage/box/masks{
- pixel_x = 4;
- pixel_y = 4
+/obj/item/clothing/glasses/science{
+ pixel_y = 2
+ },
+/obj/item/clothing/glasses/science{
+ pixel_y = -2
},
-/obj/item/clothing/glasses/science,
-/obj/item/clothing/glasses/science,
/obj/structure/sign/poster/official/random/directional/east,
/turf/open/floor/glass/reinforced,
/area/station/science/xenobiology)
@@ -148879,7 +148889,7 @@ vxX
vxX
vxX
vxX
-sdc
+poi
xeh
jir
sBb
@@ -149136,9 +149146,9 @@ vxX
vxX
vxX
vxX
-sdc
+poi
rEK
-sdc
+poi
sdc
sdc
aHc
@@ -149393,8 +149403,8 @@ vxX
vxX
vxX
vxX
-sdc
-lbg
+poi
+tdq
xTb
sdc
oZQ
@@ -149650,9 +149660,9 @@ fYe
fYe
fYe
fYe
-sdc
+poi
lLr
-sdc
+poi
sdc
oZQ
oZQ
diff --git a/_maps/shuttles/emergency_birdshot.dmm b/_maps/shuttles/emergency_birdshot.dmm
index bbcad398257f1..cdf903f034595 100644
--- a/_maps/shuttles/emergency_birdshot.dmm
+++ b/_maps/shuttles/emergency_birdshot.dmm
@@ -904,14 +904,14 @@
/obj/structure/closet/crate/freezer,
/obj/item/bodypart/arm/left/moth,
/obj/item/bodypart/arm/left/moth,
-/obj/item/organ/external/tail/lizard,
+/obj/item/organ/tail/lizard,
/obj/item/bodypart/leg/right/digitigrade,
/obj/item/bodypart/leg/right/digitigrade,
/obj/item/bodypart/leg/left/fly,
/obj/item/bodypart/leg/left/fly,
/obj/item/bodypart/arm/right,
/obj/item/bodypart/arm/right,
-/obj/item/organ/external/tail/cat,
+/obj/item/organ/tail/cat,
/obj/effect/turf_decal/stripes/white/end{
dir = 1
},
diff --git a/_maps/shuttles/emergency_zeta.dmm b/_maps/shuttles/emergency_zeta.dmm
index 720a906a767c8..ba22cc263016d 100644
--- a/_maps/shuttles/emergency_zeta.dmm
+++ b/_maps/shuttles/emergency_zeta.dmm
@@ -198,10 +198,10 @@
/area/shuttle/escape/brig)
"IM" = (
/obj/structure/table/abductor,
-/obj/item/organ/internal/heart/gland/access{
+/obj/item/organ/heart/gland/access{
pixel_x = 10
},
-/obj/item/organ/internal/heart/gland/egg,
+/obj/item/organ/heart/gland/egg,
/turf/open/floor/plating/abductor,
/area/shuttle/escape)
"JK" = (
diff --git a/_maps/shuttles/hunter_mi13_foodtruck.dmm b/_maps/shuttles/hunter_mi13_foodtruck.dmm
index 6ece8822d802a..34e6bb730ca61 100644
--- a/_maps/shuttles/hunter_mi13_foodtruck.dmm
+++ b/_maps/shuttles/hunter_mi13_foodtruck.dmm
@@ -214,7 +214,7 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/hunter/mi13_foodtruck)
"hB" = (
-/obj/machinery/power/shuttle_engine/propulsion,
+/obj/machinery/power/shuttle_engine/propulsion/left,
/turf/template_noop,
/area/shuttle/hunter/mi13_foodtruck)
"iO" = (
@@ -271,8 +271,8 @@
/turf/open/floor/mineral/plastitanium,
/area/shuttle/hunter/mi13_foodtruck)
"kf" = (
-/obj/effect/turf_decal/box,
-/turf/closed/wall/mineral/titanium/nodiagonal,
+/obj/machinery/power/shuttle_engine/propulsion/right,
+/turf/template_noop,
/area/shuttle/hunter/mi13_foodtruck)
"kj" = (
/obj/structure/table/reinforced/plastitaniumglass,
@@ -841,7 +841,7 @@ jc
kv
ku
aj
-hB
+kf
"}
(5,1,1) = {"
Ev
@@ -889,7 +889,7 @@ ku
ku
ku
ah
-kf
+ku
ku
Pq
Pq
@@ -960,7 +960,7 @@ pU
ab
ku
aj
-hB
+kf
"}
(12,1,1) = {"
Pq
diff --git a/_maps/shuttles/ruin_cyborg_mothership.dmm b/_maps/shuttles/ruin_cyborg_mothership.dmm
index 4e0fff656e83d..7864564eab185 100644
--- a/_maps/shuttles/ruin_cyborg_mothership.dmm
+++ b/_maps/shuttles/ruin_cyborg_mothership.dmm
@@ -480,7 +480,7 @@
/turf/open/floor/circuit/airless,
/area/shuttle/ruin/cyborg_mothership)
"yQ" = (
-/obj/item/organ/internal/brain,
+/obj/item/organ/brain,
/obj/structure/cable,
/turf/open/floor/circuit/airless,
/area/shuttle/ruin/cyborg_mothership)
diff --git a/_maps/shuttles/whiteship_kilo.dmm b/_maps/shuttles/whiteship_kilo.dmm
index 0192f6aa1188a..b895743cab0c7 100644
--- a/_maps/shuttles/whiteship_kilo.dmm
+++ b/_maps/shuttles/whiteship_kilo.dmm
@@ -100,7 +100,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
-/obj/item/organ/internal/stomach,
+/obj/item/organ/stomach,
/obj/item/trash/syndi_cakes,
/obj/effect/turf_decal/tile/bar{
dir = 1
diff --git a/_maps/templates/lazy_templates/ninja_den.dmm b/_maps/templates/lazy_templates/ninja_den.dmm
index f538a4e509673..324ebc3209380 100644
--- a/_maps/templates/lazy_templates/ninja_den.dmm
+++ b/_maps/templates/lazy_templates/ninja_den.dmm
@@ -1659,8 +1659,8 @@
/obj/item/reagent_containers/medigel/synthflesh,
/obj/item/reagent_containers/medigel/synthflesh,
/obj/item/reagent_containers/medigel/synthflesh,
-/obj/item/organ/internal/heart/cybernetic/tier2,
-/obj/item/organ/internal/heart/cybernetic/tier2,
+/obj/item/organ/heart/cybernetic/tier2,
+/obj/item/organ/heart/cybernetic/tier2,
/obj/item/defibrillator,
/turf/open/floor/iron/sepia,
/area/centcom/central_command_areas/holding)
diff --git a/_maps/virtual_domains/abductor_ship.dmm b/_maps/virtual_domains/abductor_ship.dmm
index b182c50ed6683..b74435a9ab158 100644
--- a/_maps/virtual_domains/abductor_ship.dmm
+++ b/_maps/virtual_domains/abductor_ship.dmm
@@ -63,7 +63,7 @@
/area/virtual_domain)
"kl" = (
/obj/structure/table_frame/abductor,
-/obj/item/organ/internal/lungs{
+/obj/item/organ/lungs{
pixel_x = 8;
pixel_y = 7
},
@@ -247,7 +247,7 @@
/turf/open/floor/plating/abductor,
/area/virtual_domain)
"JC" = (
-/obj/item/organ/external/tail/cat,
+/obj/item/organ/tail/cat,
/turf/open/floor/plating/abductor,
/area/virtual_domain)
"JR" = (
@@ -298,7 +298,7 @@
/turf/open/floor/plating/abductor,
/area/virtual_domain)
"PB" = (
-/obj/item/organ/external/antennae,
+/obj/item/organ/antennae,
/turf/open/floor/plating/abductor,
/area/virtual_domain)
"Qp" = (
diff --git a/_maps/virtual_domains/pirates.dmm b/_maps/virtual_domains/pirates.dmm
index 31b4c359ba6ae..6d429572c7b47 100644
--- a/_maps/virtual_domains/pirates.dmm
+++ b/_maps/virtual_domains/pirates.dmm
@@ -610,7 +610,8 @@
"HO" = (
/obj/structure/table/wood,
/mob/living/basic/parrot{
- name = "pepper"
+ name = "pepper";
+ faction = list("pirate")
},
/turf/open/floor/carpet/blue,
/area/virtual_domain)
diff --git a/code/__DEFINES/ai/ai.dm b/code/__DEFINES/ai/ai.dm
index 73a8f2d1900bd..c91f7eb06597f 100644
--- a/code/__DEFINES/ai/ai.dm
+++ b/code/__DEFINES/ai/ai.dm
@@ -11,6 +11,12 @@
///The AI is currently in idle mode.
#define AI_STATUS_IDLE "ai_idle"
+//Flags returned by get_able_to_run()
+///pauses AI processing
+#define AI_UNABLE_TO_RUN (1<<1)
+///bypass canceling our actions on set_ai_status()
+#define AI_PREVENT_CANCEL_ACTIONS (1<<2)
+
///For JPS pathing, the maximum length of a path we'll try to generate. Should be modularized depending on what we're doing later on
#define AI_MAX_PATH_LENGTH 30 // 30 is possibly overkill since by default we lose interest after 14 tiles of distance, but this gives wiggle room for weaving around obstacles
#define AI_BOT_PATH_LENGTH 75
diff --git a/code/__DEFINES/ai/ai_blackboard.dm b/code/__DEFINES/ai/ai_blackboard.dm
index 2b25d0cfb31e1..24461464c3e03 100644
--- a/code/__DEFINES/ai/ai_blackboard.dm
+++ b/code/__DEFINES/ai/ai_blackboard.dm
@@ -172,8 +172,26 @@
///Text we display when we befriend someone
#define BB_FRIENDLY_MESSAGE "friendly_message"
+//fishing!
+
///our fishing target
-#define BB_FISHING_TARGET "fishing_target"
+#define BB_FISHING_TARGET "BB_fishing_target"
+
+///key holding the list of things we are able to fish from
+#define BB_FISHABLE_LIST "BB_fishable_list"
+
+///key holding our cooldown between fishing attempts
+#define BB_FISHING_COOLDOWN "BB_fishing_cooldown"
+
+///key that holds the next time we will start fishing
+#define BB_FISHING_TIMER "BB_fishing_timer"
+
+///are we ONLY allowed to fish when we're hungry?
+#define BB_ONLY_FISH_WHILE_HUNGRY "BB_only_fish_while_hungry"
+
+///drillable ice we can make holes in
+#define BB_DRILLABLE_ICE "BB_drillable_ice"
+
// Keys used by one and only one behavior
// Used to hold state without making bigass lists
diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm
index 44e1a19c9c187..e28bf7ac9e5f6 100644
--- a/code/__DEFINES/atom_hud.dm
+++ b/code/__DEFINES/atom_hud.dm
@@ -35,18 +35,17 @@
#define DIAG_PATH_HUD "15"
/// Gland indicators for abductors
#define GLAND_HUD "16"
-#define SENTIENT_DISEASE_HUD "17"
-#define AI_DETECT_HUD "18"
+#define AI_DETECT_HUD "17"
/// Displays launchpads' targeting reticle
-#define DIAG_LAUNCHPAD_HUD "19"
+#define DIAG_LAUNCHPAD_HUD "18"
//for antag huds. these are used at the /mob level
-#define ANTAG_HUD "20"
+#define ANTAG_HUD "19"
// for fans to identify pins
-#define FAN_HUD "21"
+#define FAN_HUD "20"
/// Mech camera HUD
-#define DIAG_CAMERA_HUD "22"
+#define DIAG_CAMERA_HUD "21"
/// Steady Hacked APC effect, visible only to Malf AIs
-#define MALF_APC_HUD "23"
+#define MALF_APC_HUD "22"
// DOPPLER ADDITION BEGIN
/// If they have the implanted quirk
#define SEC_IMPLANT_HUD "25"
@@ -65,10 +64,9 @@
#define DATA_HUD_DIAGNOSTIC 5
#define DATA_HUD_BOT_PATH 6
#define DATA_HUD_ABDUCTOR 7
-#define DATA_HUD_SENTIENT_DISEASE 8
-#define DATA_HUD_AI_DETECT 9
-#define DATA_HUD_FAN 10
-#define DATA_HUD_MALF_APC 11
+#define DATA_HUD_AI_DETECT 8
+#define DATA_HUD_FAN 9
+#define DATA_HUD_MALF_APC 10
/// cooldown for being shown the images for any particular data hud
#define ADD_HUD_TO_COOLDOWN 20
diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm
index 5a95d4f77d7d2..f68641b29840f 100644
--- a/code/__DEFINES/colors.dm
+++ b/code/__DEFINES/colors.dm
@@ -434,6 +434,18 @@ GLOBAL_LIST_INIT(cable_colors, list(
CABLE_COLOR_BROWN = CABLE_HEX_COLOR_BROWN
))
+GLOBAL_LIST_INIT(heretic_path_to_color, list(
+ PATH_START = COLOR_LIME,
+ PATH_RUST = COLOR_CARGO_BROWN,
+ PATH_FLESH = COLOR_SOFT_RED,
+ PATH_ASH = COLOR_VIVID_RED,
+ PATH_VOID = COLOR_CYAN,
+ PATH_BLADE = COLOR_SILVER,
+ PATH_COSMIC = COLOR_PURPLE,
+ PATH_LOCK = COLOR_YELLOW,
+ PATH_MOON = COLOR_BLUE_LIGHT,
+ ))
+
#define HUSK_COLOR_TONE rgb(96, 88, 80)
#define CM_COLOR_SAT_MIN 0.6
diff --git a/code/__DEFINES/construction/material.dm b/code/__DEFINES/construction/material.dm
index 2764c0bbfaf56..a8bef8cbec9d2 100644
--- a/code/__DEFINES/construction/material.dm
+++ b/code/__DEFINES/construction/material.dm
@@ -58,6 +58,8 @@
#define MATERIAL_AFFECT_STATISTICS (1<<3)
/// Applies the material greyscale color to the atom's greyscale color.
#define MATERIAL_GREYSCALE (1<<4)
+/// Materials like plasteel and alien alloy won't apply slowdowns.
+#define MATERIAL_NO_SLOWDOWN (1<<5)
//Special return values of [/datum/component/material_container/insert_item]
/// No material was found inside them item
diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm
index 46e179ee567ba..3d28fdd81162c 100644
--- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm
+++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm
@@ -40,7 +40,7 @@
#define COMSIG_ATOM_NARSIE_ACT "atom_narsie_act"
///from base of atom/rcd_act(): (/mob, /obj/item/construction/rcd, passed_mode)
#define COMSIG_ATOM_RCD_ACT "atom_rcd_act"
-///from base of atom/singularity_pull(): (/datum/component/singularity, current_size)
+///from base of atom/singularity_pull(): (/atom, current_size)
#define COMSIG_ATOM_SING_PULL "atom_sing_pull"
///from obj/machinery/bsa/full/proc/fire(): ()
#define COMSIG_ATOM_BSA_BEAM "atom_bsa_beam_pass"
diff --git a/code/__DEFINES/dcs/signals/signals_circuit.dm b/code/__DEFINES/dcs/signals/signals_circuit.dm
index 3fe4e80fdb2e0..08d5f675b287c 100644
--- a/code/__DEFINES/dcs/signals/signals_circuit.dm
+++ b/code/__DEFINES/dcs/signals/signals_circuit.dm
@@ -82,6 +82,9 @@
/// Called when an equipment action component is removed from a shell (/obj/item/circuit_component/equipment_action/action_comp)
#define COMSIG_CIRCUIT_ACTION_COMPONENT_UNREGISTERED "circuit_action_component_unregistered"
+/// Called when an NFC sender sends data to this circuit
+#define COMSIG_CIRCUIT_NFC_DATA_SENT "circuit_nfc_data_receive"
+
///Sent to the shell component when a circuit is attached.
#define COMSIG_SHELL_CIRCUIT_ATTACHED "shell_circuit_attached"
///Sent to the shell component when a circuit is removed.
diff --git a/code/__DEFINES/dcs/signals/signals_fish.dm b/code/__DEFINES/dcs/signals/signals_fish.dm
index f7606b63a01db..494d05413267f 100644
--- a/code/__DEFINES/dcs/signals/signals_fish.dm
+++ b/code/__DEFINES/dcs/signals/signals_fish.dm
@@ -32,6 +32,8 @@
///From /obj/item/fish/interact_with_atom_secondary, sent to the target: (fish)
#define COMSIG_FISH_RELEASED_INTO "fish_released_into"
+///From /datum/fishing_challenge/New: (datum/fishing_challenge/challenge)
+#define COMSIG_ROD_BEGIN_FISHING "rod_begin_fishing"
///From /datum/fishing_challenge/New: (datum/fishing_challenge/challenge)
#define COMSIG_MOB_BEGIN_FISHING "mob_begin_fishing"
///From /datum/fishing_challenge/start_minigame_phase: (datum/fishing_challenge/challenge)
@@ -62,8 +64,11 @@
#define COMSIG_FISHING_ROD_CAUGHT_FISH "fishing_rod_caught_fish"
/// From /obj/item/fishing_rod/proc/hook_item(): (reward, user)
#define COMSIG_FISHING_ROD_HOOKED_ITEM "fishing_rod_hooked_item"
-/// From /datum/fish_source/proc/use_slot(), sent to the slotted item: (obj/item/fishing_rod/rod)
-#define COMSIG_FISHING_EQUIPMENT_SLOTTED "fishing_equipment_slotted"
+
+/// From /obj/item/fishing_rod/set_slot: (obj/item/fishing_rod/rod, slot)
+#define COMSIG_ITEM_FISHING_ROD_SLOTTED "item_fishing_rod_slotted"
+/// From /obj/item/fishing_rod/Exited: (obj/item/fishing_rod/rod, slot)
+#define COMSIG_ITEM_FISHING_ROD_UNSLOTTED "item_fishing_rod_unslotted"
/// Sent when the challenge is to be interrupted: (reason)
#define COMSIG_FISHING_SOURCE_INTERRUPT_CHALLENGE "fishing_spot_interrupt_challenge"
diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
index 633282001f67a..ef47b6f4b8243 100644
--- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
+++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
@@ -297,3 +297,5 @@
#define COMSIG_MOB_ENSLAVED_TO "mob_enslaved_to"
/// From /obj/item/proc/attack_atom: (mob/living/attacker, atom/attacked)
#define COMSIG_LIVING_ATTACK_ATOM "living_attack_atom"
+/// From /mob/living/proc/stop_leaning()
+#define COMSIG_LIVING_STOPPED_LEANING "living_stopped_leaning"
diff --git a/code/__DEFINES/dcs/signals/signals_mod.dm b/code/__DEFINES/dcs/signals/signals_mod.dm
index 8cabf7537ab99..09b29c9378490 100644
--- a/code/__DEFINES/dcs/signals/signals_mod.dm
+++ b/code/__DEFINES/dcs/signals/signals_mod.dm
@@ -41,3 +41,5 @@
#define COMSIG_MOD_WEARER_UNSET "mod_wearer_unset"
/// Sent by the tether module when it triggers its snapping function
#define COMSIG_MOD_TETHER_SNAP "mod_tether_snap"
+/// Called when a MOD module generats its worn overlay
+#define COMSIG_MODULE_GENERATE_WORN_OVERLAY "mod_module_generate_worn_overlay"
diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm
index 53ac323b61cd5..2b6c1b3220679 100644
--- a/code/__DEFINES/dcs/signals/signals_object.dm
+++ b/code/__DEFINES/dcs/signals/signals_object.dm
@@ -358,10 +358,10 @@
//called in /obj/item/tank/jetpack/proc/turn_off() : ()
#define COMSIG_JETPACK_DEACTIVATED "jetpack_deactivated"
-//called in /obj/item/organ/internal/cyberimp/chest/thrusters/proc/toggle() : ()
+//called in /obj/item/organ/cyberimp/chest/thrusters/proc/toggle() : ()
#define COMSIG_THRUSTER_ACTIVATED "jetmodule_activated"
#define THRUSTER_ACTIVATION_FAILED (1<<0)
-//called in /obj/item/organ/internal/cyberimp/chest/thrusters/proc/toggle() : ()
+//called in /obj/item/organ/cyberimp/chest/thrusters/proc/toggle() : ()
#define COMSIG_THRUSTER_DEACTIVATED "jetmodule_deactivated"
// /obj/item/camera signals
diff --git a/code/__DEFINES/fish.dm b/code/__DEFINES/fish.dm
index 43e0e8587f9aa..03afd89134c2f 100644
--- a/code/__DEFINES/fish.dm
+++ b/code/__DEFINES/fish.dm
@@ -33,30 +33,25 @@
// through the fishing rod, and not the hook itself. They could probably be
// handled differently, but for now that's how they work. It's grounds for
// a future refactor, however.
-/// Fishing hook trait that signifies that it's shiny. Useful for fishes
-/// that care about shiner hooks more.
-#define FISHING_HOOK_SHINY (1 << 0)
/// Fishing hook trait that lessens the bounce from hitting the edges of the minigame bar.
-#define FISHING_HOOK_WEIGHTED (1 << 1)
+#define FISHING_HOOK_WEIGHTED (1 << 0)
///See FISHING_MINIGAME_RULE_BIDIRECTIONAL
-#define FISHING_HOOK_BIDIRECTIONAL (1 << 2)
+#define FISHING_HOOK_BIDIRECTIONAL (1 << 1)
///Prevents the user from losing the game by letting the fish get away.
-#define FISHING_HOOK_NO_ESCAPE (1 << 3)
+#define FISHING_HOOK_NO_ESCAPE (1 << 2)
///Limits the completion loss of the minigame when the fsh is not on the bait area.
-#define FISHING_HOOK_ENSNARE (1 << 4)
+#define FISHING_HOOK_ENSNARE (1 << 3)
///Automatically kills the fish after a while, at the cost of killing it.
-#define FISHING_HOOK_KILL (1 << 5)
+#define FISHING_HOOK_KILL (1 << 4)
///Reduces the difficulty of the minigame
#define FISHING_LINE_CLOAKED (1 << 0)
-///Required to cast a line on lava.
-#define FISHING_LINE_REINFORCED (1 << 1)
/// Much like FISHING_HOOK_ENSNARE but for the fishing line.
-#define FISHING_LINE_BOUNCY (1 << 2)
+#define FISHING_LINE_BOUNCY (1 << 1)
/// The sorta opposite of FISHING_LINE_BOUNCY. It makes it slower to gain completion and faster to lose it.
-#define FISHING_LINE_STIFF (1 << 3)
+#define FISHING_LINE_STIFF (1 << 2)
///Skip the biting phase and go straight to the fishing phase.
-#define FISHING_LINE_AUTOREEL (1 << 4)
+#define FISHING_LINE_AUTOREEL (1 << 3)
///Keeps the bait from falling from gravity, instead allowing the player to move the bait down with right click.
#define FISHING_MINIGAME_RULE_BIDIRECTIONAL (1 << 0)
@@ -161,6 +156,9 @@
#define FISH_FLAG_PETTED (1<<2)
///This fish can be scanned to complete fish scanning experiments
#define FISH_FLAG_EXPERIMENT_SCANNABLE (1<<3)
+///It lets us know that fish/update_size_and_weight() is currently running.
+#define FISH_FLAG_UPDATING_SIZE_AND_WEIGHT (1<<3)
+
#define MIN_AQUARIUM_TEMP T0C
#define MAX_AQUARIUM_TEMP (T0C + 100)
@@ -170,7 +168,7 @@
#define FISH_RARITY_BASIC 1000
#define FISH_RARITY_RARE 400
#define FISH_RARITY_VERY_RARE 200
-#define FISH_RARITY_GOOD_LUCK_FINDING_THIS 5
+#define FISH_RARITY_GOOD_LUCK_FINDING_THIS 50
#define FISH_RARITY_NOPE 0
///Aquarium fluid variables. The fish' required fluid has to match this, or it'll slowly die.
@@ -226,6 +224,15 @@
///We multiply the weight of fish inside the loot table by this value if we are goofy enough to fish without a bait.
#define FISH_WEIGHT_MULT_WITHOUT_BAIT 0.15
+
+/**
+ * Flag for fish sources. It makes large explosions less efficient at spawning fish.
+ * Meant for lazy fishing spots that cover multiple turfs (rivers, oceans etc.)
+ */
+#define FISH_SOURCE_FLAG_EXPLOSIVE_MALUS (1<<0)
+/// The fish source is not elegible for random rewards from bluespace fishing rods
+#define FISH_SOURCE_FLAG_NO_BLUESPACE_ROD (1<<1)
+
/**
* A macro to ensure the wikimedia filenames of fish icons are unique, especially since there're a couple fish that have
* quite ambiguous names/icon_states like "checkered" or "pike"
diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm
index 3c46589002475..9d65c4cd6f54b 100644
--- a/code/__DEFINES/hud.dm
+++ b/code/__DEFINES/hud.dm
@@ -48,6 +48,10 @@
var/y_off = round((M.held_items.len-1) / 2)
return "CENTER+[x_off]:16,SOUTH+[y_off+1]:5"
+/proc/ui_perk_position(perk_count)
+ var/y_off = perk_count < 1 ? 0 : perk_count/2
+ return "WEST+0.5:12,NORTH-2-[y_off]:20"
+
//Lower left, persistent menu
#define ui_inventory "WEST:6,SOUTH:5"
diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm
index 2ea30bbeaffbb..181493ccb34aa 100644
--- a/code/__DEFINES/inventory.dm
+++ b/code/__DEFINES/inventory.dm
@@ -270,7 +270,7 @@ GLOBAL_LIST_INIT(mining_suit_allowed, list(
/obj/item/kinetic_crusher,
/obj/item/knife,
/obj/item/mining_scanner,
- /obj/item/organ/internal/monster_core,
+ /obj/item/organ/monster_core,
/obj/item/storage/bag/ore,
/obj/item/pickaxe,
/obj/item/resonator,
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index de895ce1a55ff..4e6ed293bf891 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -257,10 +257,6 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list(
#define isorgan(A) (istype(A, /obj/item/organ))
-#define isinternalorgan(A) (istype(A, /obj/item/organ/internal))
-
-#define isexternalorgan(A) (istype(A, /obj/item/organ/external))
-
#define isclothing(A) (istype(A, /obj/item/clothing))
#define ispickedupmob(A) (istype(A, /obj/item/clothing/head/mob_holder)) // Checks if clothing item is actually a held mob
diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm
index b0b8993a22357..cd25fc7f17833 100644
--- a/code/__DEFINES/jobs.dm
+++ b/code/__DEFINES/jobs.dm
@@ -123,6 +123,14 @@
#define JOB_CENTCOM_SPECIAL_OFFICER "Special Ops Officer"
#define JOB_CENTCOM_PRIVATE_SECURITY "Private Security Force"
+//Lost crew
+#define JOB_LOSTCREW_ENGINEER "Visiting Engineer"
+#define JOB_LOSTCREW_MEDICAL "Visiting Doctor"
+#define JOB_LOSTCREW_SECURITY "Visiting Officer"
+#define JOB_LOSTCREW_SCIENCE "Visiting Scientist"
+#define JOB_LOSTCREW_CARGO "Visiting Technician"
+#define JOB_LOSTCREW_CIVILLIAN "Visiting Civillian"
+
#define JOB_GROUP_ENGINEERS list( \
JOB_STATION_ENGINEER, \
JOB_ATMOSPHERIC_TECHNICIAN, \
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index 1e3de8f2674a1..3083e5e95492b 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -306,12 +306,12 @@
//Charge levels for Ethereals, in joules.
#define ETHEREAL_CHARGE_NONE 0
-#define ETHEREAL_CHARGE_LOWPOWER (0.4 * STANDARD_CELL_CHARGE)
-#define ETHEREAL_CHARGE_NORMAL (1 * STANDARD_CELL_CHARGE)
-#define ETHEREAL_CHARGE_ALMOSTFULL (1.5 * STANDARD_CELL_CHARGE)
-#define ETHEREAL_CHARGE_FULL (2 * STANDARD_CELL_CHARGE)
-#define ETHEREAL_CHARGE_OVERLOAD (2.5 * STANDARD_CELL_CHARGE)
-#define ETHEREAL_CHARGE_DANGEROUS (3 * STANDARD_CELL_CHARGE)
+#define ETHEREAL_CHARGE_LOWPOWER (0.4 * STANDARD_BATTERY_CHARGE)
+#define ETHEREAL_CHARGE_NORMAL (1 * STANDARD_BATTERY_CHARGE)
+#define ETHEREAL_CHARGE_ALMOSTFULL (1.5 * STANDARD_BATTERY_CHARGE)
+#define ETHEREAL_CHARGE_FULL (2 * STANDARD_BATTERY_CHARGE)
+#define ETHEREAL_CHARGE_OVERLOAD (2.5 * STANDARD_BATTERY_CHARGE)
+#define ETHEREAL_CHARGE_DANGEROUS (3 * STANDARD_BATTERY_CHARGE)
#define CRYSTALIZE_COOLDOWN_LENGTH (120 SECONDS)
@@ -521,6 +521,7 @@
// Ex: (You turn into a "monkey", You turn into a "xenomorph")
#define WABBAJACK_MONKEY "monkey"
#define WABBAJACK_ROBOT "robot"
+#define WABBAJACK_CLOWN "clown"
#define WABBAJACK_SLIME "slime"
#define WABBAJACK_XENO "xenomorph"
#define WABBAJACK_HUMAN "humanoid"
@@ -656,6 +657,9 @@
#define GRADIENT_APPLIES_TO_HAIR (1<<0)
#define GRADIENT_APPLIES_TO_FACIAL_HAIR (1<<1)
+// Hair masks
+#define HAIR_MASK_HIDE_ABOVE_45_DEG_MEDIUM "hide_above_45deg"
+
// Height defines
// - They are numbers so you can compare height values (x height < y height)
// - They do not start at 0 for futureproofing
diff --git a/code/__DEFINES/mod.dm b/code/__DEFINES/mod.dm
index 2176765c2a479..aa76654efc604 100644
--- a/code/__DEFINES/mod.dm
+++ b/code/__DEFINES/mod.dm
@@ -58,5 +58,9 @@
/// Global list of all /datum/mod_theme
GLOBAL_LIST_INIT(mod_themes, setup_mod_themes())
+/// Global cache of mod skins to masks per different configuration of pulled out parts.
+GLOBAL_LIST_EMPTY(mod_masks)
+/// Global cache of mod skins to deployed parts to module icon states
+GLOBAL_LIST_EMPTY(mod_module_overlays)
/// Global list of all ids associated to a /datum/mod_link instance
GLOBAL_LIST_EMPTY(mod_link_ids)
diff --git a/code/__DEFINES/nuclear_bomb.dm b/code/__DEFINES/nuclear_bomb.dm
index fecd9ef06118b..7e1707ea78003 100644
--- a/code/__DEFINES/nuclear_bomb.dm
+++ b/code/__DEFINES/nuclear_bomb.dm
@@ -1,23 +1,39 @@
// Nuclear bomb de/construction status
+///Pristine condition, no tampering has occurred yet
#define NUKESTATE_INTACT 5
+///Front panel has been unscrewed
#define NUKESTATE_UNSCREWED 4
+///Front panel has been removed with a crowbar, exposing the reinforced cover
#define NUKESTATE_PANEL_REMOVED 3
+///Reinforced cover has been welded, preparing it for removal
#define NUKESTATE_WELDED 2
+///Reinforced cover has been removed with a crowbar, revealing the core
#define NUKESTATE_CORE_EXPOSED 1
+///Nuke core removed with the special kit
#define NUKESTATE_CORE_REMOVED 0
// Nuclear bomb UI modes
+///Device is locked and is awaiting the disk for further operations (additionally shows time left if armed)
#define NUKEUI_AWAIT_DISK 0
+///Device is awaiting activation codes input
#define NUKEUI_AWAIT_CODE 1
+///Device is awaiting timer input
#define NUKEUI_AWAIT_TIMER 2
+///Device is awaiting confirmation of arming process and shows the time set
#define NUKEUI_AWAIT_ARM 3
+///Device is counting down to setting off the charge
#define NUKEUI_TIMING 4
+///Device is setting off the charge, aka `proc/actually_explode()`
#define NUKEUI_EXPLODED 5
// Nuclear bomb states
+///Device has not received activation codes and no timer have been set, all lights are off
#define NUKE_OFF_LOCKED 0
+///Device has received activation codes and the timer is set; awaiting arming and the safety warning lights are on
#define NUKE_OFF_UNLOCKED 1
+///Device is counting down to setting off the charge, red lights are on
#define NUKE_ON_TIMING 2
+///Device is setting off the charge, aka `proc/actually_explode()`, red lights are blinking fast
#define NUKE_ON_EXPLODING 3
// Nuclear bomb detonation statuses
diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm
index bdf3c2bb4d071..0f418eae705c0 100644
--- a/code/__DEFINES/reagents.dm
+++ b/code/__DEFINES/reagents.dm
@@ -25,7 +25,7 @@
// Reagent exposure methods.
/// Used for splashing.
#define TOUCH (1<<0)
-/// Used for ingesting the reagents. Food, drinks, inhaling smoke.
+/// Used for ingesting the reagents. Food and drinks.
#define INGEST (1<<1)
/// Used by foams, sprays, and blob attacks.
#define VAPOR (1<<2)
@@ -35,6 +35,8 @@
#define INJECT (1<<4)
/// Exclusive to just plumbing. if set we use the round robin technique else we use proportional
#define LINEAR (1<<5)
+/// Used by smoke or inhaling from a source. Smoke and cigarettes.
+#define INHALE (1<<6)
/// When returned by on_mob_life(), on_mob_dead(), overdose_start() or overdose_processed(), will cause the mob to updatehealth() afterwards
#define UPDATE_MOB_HEALTH 1
diff --git a/code/__DEFINES/research/anomalies.dm b/code/__DEFINES/research/anomalies.dm
index e04aead3464bc..c708cdf67dbd5 100644
--- a/code/__DEFINES/research/anomalies.dm
+++ b/code/__DEFINES/research/anomalies.dm
@@ -26,23 +26,23 @@ GLOBAL_LIST_INIT(bioscrambler_parts_blacklist, typecacheof(list(
/// Blacklist of organs which should not appear when bioscrambled.
/// Either will look terrible outside of intended host, give you magical powers, are irreversible, or kill you
GLOBAL_LIST_INIT(bioscrambler_organs_blacklist, typecacheof(list (
- /obj/item/organ/external/pod_hair,
- /obj/item/organ/external/spines,
- /obj/item/organ/external/wings,
- /obj/item/organ/external/wings/functional,
- /obj/item/organ/internal/alien,
- /obj/item/organ/internal/brain,
- /obj/item/organ/internal/body_egg,
- /obj/item/organ/internal/cyberimp,
- /obj/item/organ/internal/ears/dullahan,
- /obj/item/organ/internal/eyes/dullahan,
- /obj/item/organ/internal/heart/cursed,
- /obj/item/organ/internal/heart/demon,
- /obj/item/organ/internal/lungs,
- /obj/item/organ/internal/monster_core,
- /obj/item/organ/internal/tongue/dullahan,
- /obj/item/organ/internal/vocal_cords/colossus,
- /obj/item/organ/internal/zombie_infection,
+ /obj/item/organ/pod_hair,
+ /obj/item/organ/spines,
+ /obj/item/organ/wings,
+ /obj/item/organ/wings/functional,
+ /obj/item/organ/alien,
+ /obj/item/organ/brain,
+ /obj/item/organ/body_egg,
+ /obj/item/organ/cyberimp,
+ /obj/item/organ/ears/dullahan,
+ /obj/item/organ/eyes/dullahan,
+ /obj/item/organ/heart/cursed,
+ /obj/item/organ/heart/demon,
+ /obj/item/organ/lungs,
+ /obj/item/organ/monster_core,
+ /obj/item/organ/tongue/dullahan,
+ /obj/item/organ/vocal_cords/colossus,
+ /obj/item/organ/zombie_infection,
)))
/// List of body parts we can apply to people
diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm
index 179f746c35ede..8c9b8911de7c7 100644
--- a/code/__DEFINES/role_preferences.dm
+++ b/code/__DEFINES/role_preferences.dm
@@ -68,6 +68,7 @@
#define ROLE_REV "Revolutionary"
#define ROLE_REVENANT "Revenant"
#define ROLE_SENTIENCE "Sentience Potion Spawn"
+#define ROLE_SOULTRAPPED_HERETIC "Soultrapped Heretic"
#define ROLE_SYNDICATE "Syndicate"
#define ROLE_CLOWN_OPERATIVE "Clown Operative"
@@ -86,6 +87,8 @@
#define ROLE_SYNDICATE_MEDBORG "Syndicate Medical Cyborg"
#define ROLE_SYNDICATE_ASSAULTBORG "Syndicate Assault Cyborg"
+#define ROLE_RECOVERED_CREW "Recovered Crew"
+
//Spawner roles
#define ROLE_ANCIENT_CREW "Ancient Crew"
#define ROLE_ASHWALKER "Ash Walker"
@@ -172,6 +175,7 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_GLITCH = 0,
ROLE_PAI = 0,
ROLE_SENTIENCE = 0,
+ ROLE_RECOVERED_CREW = 0,
))
//Job defines for what happens when you fail to qualify for any job during job selection
diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm
index 7c601b62ff0fd..d7a04afeede49 100644
--- a/code/__DEFINES/rust_g.dm
+++ b/code/__DEFINES/rust_g.dm
@@ -15,25 +15,36 @@
// On Windows, looks in the standard places for `rust_g.dll`.
// On Linux, looks in `.`, `$LD_LIBRARY_PATH`, and `~/.byond/bin` for either of
// `librust_g.so` (preferred) or `rust_g` (old).
+// On OpenDream, `rust_g64.dll` / `librust_g64.so` are used instead.
/* This comment bypasses grep checks */ /var/__rust_g
+#ifndef OPENDREAM
+#define RUST_G_BASE "rust_g"
+#else
+#define RUST_G_BASE "rust_g64"
+#endif
+
/proc/__detect_rust_g()
if (world.system_type == UNIX)
- if (fexists("./librust_g.so"))
+ if (fexists("./lib[RUST_G_BASE].so"))
// No need for LD_LIBRARY_PATH badness.
- return __rust_g = "./librust_g.so"
- else if (fexists("./rust_g"))
+ return __rust_g = "./lib[RUST_G_BASE].so"
+#ifndef OPENDREAM
+ else if (fexists("./[RUST_G_BASE]"))
// Old dumb filename.
- return __rust_g = "./rust_g"
- else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/rust_g"))
+ return __rust_g = "./[RUST_G_BASE]"
+ else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/[RUST_G_BASE]"))
// Old dumb filename in `~/.byond/bin`.
- return __rust_g = "rust_g"
+ return __rust_g = RUST_G_BASE
+#endif
else
// It's not in the current directory, so try others
- return __rust_g = "librust_g.so"
+ return __rust_g = "lib[RUST_G_BASE].so"
else
- return __rust_g = "rust_g"
+ return __rust_g = RUST_G_BASE
+
+#undef RUST_G_BASE
#define RUST_G (__rust_g || __detect_rust_g())
#endif
diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm
index b14da2441b026..239a25110c74d 100644
--- a/code/__DEFINES/sound.dm
+++ b/code/__DEFINES/sound.dm
@@ -205,5 +205,12 @@ GLOBAL_LIST_INIT(announcer_keys, list(
#define SFX_HALLUCINATION_I_M_HERE "hallucination_i_m_here"
#define SFX_VOID_DEFLECT "void_deflect"
#define SFX_LOW_HISS "low_hiss"
-
#define SFX_INDUSTRIAL_SCAN "industrial_scan"
+#define SFX_MALE_SIGH "male_sigh"
+#define SFX_FEMALE_SIGH "female_sigh"
+
+// Standard is 44.1khz
+#define MIN_EMOTE_PITCH 40000
+#define MAX_EMOTE_PITCH 48000
+// ~0.6 - 1.4 at 0.12
+#define EMOTE_TTS_PITCH_MULTIPLIER 0.12
diff --git a/code/__DEFINES/surgery.dm b/code/__DEFINES/surgery.dm
index b930c3711de34..f510d7a1a9410 100644
--- a/code/__DEFINES/surgery.dm
+++ b/code/__DEFINES/surgery.dm
@@ -30,6 +30,8 @@
#define ORGAN_PROMINENT (1<<11)
/// An organ that is ostensibly dangerous when inside a body
#define ORGAN_HAZARDOUS (1<<12)
+/// This is an external organ, not an inner one. Used in several checks.
+#define ORGAN_EXTERNAL (1<<13)
/// Scarring on the right eye
#define RIGHT_EYE_SCAR (1<<0)
diff --git a/code/__DEFINES/time.dm b/code/__DEFINES/time.dm
index 76e8ffdb0e222..51283ef98a886 100644
--- a/code/__DEFINES/time.dm
+++ b/code/__DEFINES/time.dm
@@ -69,6 +69,9 @@ When using time2text(), please use "DDD" to find the weekday. Refrain from using
#define HOURS MINUTES*60
+#define DAYS HOURS*24
+#define YEARS DAYS*365 //fuck leap days, they were removed in 2069
+
#define TICKS *world.tick_lag
#define DS2TICKS(DS) ((DS)/world.tick_lag)
diff --git a/code/__DEFINES/tools.dm b/code/__DEFINES/tools.dm
index 794c56691a6da..2d1ed94cdb121 100644
--- a/code/__DEFINES/tools.dm
+++ b/code/__DEFINES/tools.dm
@@ -8,7 +8,6 @@
#define TOOL_ANALYZER "analyzer"
#define TOOL_MINING "mining"
#define TOOL_SHOVEL "shovel"
-#define TOOL_DRAPES "surgicaldrapes"
#define TOOL_RETRACTOR "retractor"
#define TOOL_HEMOSTAT "hemostat"
#define TOOL_CAUTERY "cautery"
diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm
index 400359ad06d6c..f4f5688819bb2 100644
--- a/code/__DEFINES/traits/declarations.dm
+++ b/code/__DEFINES/traits/declarations.dm
@@ -619,7 +619,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
// example. Through years of training/abuse, their livers have taken
// a liking to those substances. Steal a sec officer's liver, eat donuts good.
-// These traits are applied to /obj/item/organ/internal/liver
+// These traits are applied to /obj/item/organ/liver
#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law_enforcement_metabolism"
#define TRAIT_CULINARY_METABOLISM "culinary_metabolism"
#define TRAIT_COMEDY_METABOLISM "comedy_metabolism"
@@ -704,6 +704,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_DISABLED_BY_WOUND "disabled-by-wound"
/// This movable atom has the explosive block element
#define TRAIT_BLOCKING_EXPLOSIVES "blocking_explosives"
+/// This object has been slathered with a speed potion
+#define TRAIT_SPEED_POTIONED "speed_potioned"
///This mob is currently blocking a projectile.
#define TRAIT_BLOCKING_PROJECTILES "blocking_projectiles"
@@ -785,6 +787,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_UNCATCHABLE "uncatchable"
/// You won't catch duds while fishing with this rod.
#define TRAIT_ROD_REMOVE_FISHING_DUD "rod_remove_fishing_dud"
+/// This rod ignores environmental conditions for fishing (like low light for nocturnal fish)
+#define TRAIT_ROD_IGNORE_ENVIRONMENT "rod_ignore_environment"
+/// This rod attracts fish with the shiny lover fish trait
+#define TRAIT_ROD_ATTRACT_SHINY_LOVERS "rod_attract_shiny_lovers"
+/// This rod can be used to fish on lava
+#define TRAIT_ROD_LAVA_USABLE "rod_lava_usable"
/// Stuff that can go inside fish cases
#define TRAIT_FISH_CASE_COMPATIBILE "fish_case_compatibile"
/// If the item can be used as a bit.
@@ -799,8 +807,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_OMNI_BAIT "omni_bait"
/// The bait won't be consumed when used
#define TRAIT_BAIT_UNCONSUMABLE "bait_unconsumable"
-/// This bait ignores environmental conditions for fishing (like low light for nocturnal fish)
-#define TRAIT_BAIT_IGNORE_ENVIRONMENT "bait_ignore_environment"
/**
* This bait won't apply TRAIT_ROD_REMOVE_FISHING_DUD to the rod it's attached on,
* instead, it'll allow the fishing dud to be there unless there's at least one fish that likes the bait
@@ -975,6 +981,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
///Trait given to a mob with a ckey currently in a temporary body, allowing people to know someone will re-enter the round later.
#define TRAIT_MIND_TEMPORARILY_GONE "temporarily_gone"
+/// Mobs with this trait will show up as soulless if their brain is missing even if their ghost can reenter the corpse
+#define TRAIT_FAKE_SOULLESS "fake_soulless"
+
/// Similar trait given to temporary bodies inhabited by players
#define TRAIT_TEMPORARY_BODY "temporary_body"
@@ -1018,6 +1027,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_FISH_SHOULD_TWOHANDED "fish_should_twohanded"
///This fish won't be killed when cooked.
#define TRAIT_FISH_SURVIVE_COOKING "fish_survive_cooking"
+///This fish is healed by milk and hurt by bone hurting juice
+#define TRAIT_FISH_MADE_OF_BONE "fish_made_of_bone"
/**
* This fish has been fed teslium without the electrogenesis having trait.
* Gives the electrogenesis, but at halved output, and it hurts the fish over time.
@@ -1332,6 +1343,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
///Trait which silences all chemical reactions in its container
#define TRAIT_SILENT_REACTIONS "silent_reactions"
+///Trait given to mobs that can dig
+#define TRAIT_MOB_CAN_DIG "mob_can_dig"
+
/**
*
* This trait is used in some interactions very high in the interaction chain to allow
@@ -1347,5 +1361,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
///A "fake" effect that should not be subject to normal effect removal methods (like the effect remover component)
#define TRAIT_ILLUSORY_EFFECT "illusory_effect"
+/// Gives a little examine to their body that they can be revived with a soul
+#define TRAIT_GHOSTROLE_ON_REVIVE "ghostrole_on_revive"
// END TRAIT DEFINES
diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm
index 11bbf07f626ed..9ee97b9f1572f 100644
--- a/code/__DEFINES/traits/sources.dm
+++ b/code/__DEFINES/traits/sources.dm
@@ -11,6 +11,7 @@
#define MAGIC_TRAIT "magic"
#define TRAUMA_TRAIT "trauma"
#define FLIGHTPOTION_TRAIT "flightpotion"
+#define SLIME_POTION_TRAIT "slime_potion"
/// Trait inherited by experimental surgeries
#define EXPERIMENTAL_SURGERY_TRAIT "experimental_surgery"
#define DISEASE_TRAIT "disease"
@@ -272,7 +273,7 @@
/**
* Trait granted by [/mob/living/carbon/Initialize] and
-* granted/removed by [/obj/item/organ/internal/tongue]
+* granted/removed by [/obj/item/organ/tongue]
* Used for ensuring that carbons without tongues cannot taste anything
* so it is added in Initialize, and then removed when a tongue is inserted
* and readded when a tongue is removed.
diff --git a/code/__DEFINES/~doppler_defines/mutant_variations.dm b/code/__DEFINES/~doppler_defines/mutant_variations.dm
index e6580d352e9bd..e22aa80ae63fe 100644
--- a/code/__DEFINES/~doppler_defines/mutant_variations.dm
+++ b/code/__DEFINES/~doppler_defines/mutant_variations.dm
@@ -1,5 +1,5 @@
/// The defines of each animal type who have their respective organ and list of sprite accessories beholding to them
-// The string has to much the type name of the organ they represent, i.e. /obj/item/organ/external/tail/dog
+// The string has to much the type name of the organ they represent, i.e. /obj/item/organ/tail/dog
#define NO_VARIATION "none"
#define ALIEN "alien"
#define BIRD "bird"
diff --git a/code/__DEFINES/~doppler_defines/signals.dm b/code/__DEFINES/~doppler_defines/signals.dm
index 5921dbb57b945..af1d5883b03f8 100644
--- a/code/__DEFINES/~doppler_defines/signals.dm
+++ b/code/__DEFINES/~doppler_defines/signals.dm
@@ -13,7 +13,7 @@
#define COMSIG_PULSATING_TUMOR_ADDED "pulsating_tumor_added"
/// For when a Hemophage's pulsating tumor gets removed from their body.
#define COMSIG_PULSATING_TUMOR_REMOVED "pulsating_tumor_removed"
-/// From /obj/item/organ/internal/stomach/after_eat(atom/edible)
+/// From /obj/item/organ/stomach/after_eat(atom/edible)
#define COMSIG_STOMACH_AFTER_EAT "stomach_after_eat"
/// Whenever a baton successfully executes its nonlethal attack. WARNING wonderful FUCKING CODE by niko THIS IS peak AAAAAAAAAAAAH
#define COMSIG_PRE_BATON_FINALIZE_ATTACK "pre_baton_finalize_attack"
diff --git a/code/__HELPERS/_dreamluau.dm b/code/__HELPERS/_dreamluau.dm
index 1e1e315a2aebd..d8bb784c217a2 100644
--- a/code/__HELPERS/_dreamluau.dm
+++ b/code/__HELPERS/_dreamluau.dm
@@ -6,7 +6,7 @@
#define DREAMLUAU (world.system_type == MS_WINDOWS ? "dreamluau.dll" : (__dreamluau ||= __detect_auxtools("dreamluau")))
-#define DREAMLUAU_CALL(func) (!DREAMLUAU_EXISTS) ? null : call_ext(DREAMLUAU, "byond:[#func]")
+#define DREAMLUAU_CALL(func) (!DREAMLUAU_EXISTS) ? null : call_ext(DREAMLUAU, "byond:" + #func)
/**
* All of the following functions will return a string if the underlying rust code returns an error or a wrapped panic.
diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm
index f8a0dc6d7d551..acaacd24010e9 100644
--- a/code/__HELPERS/_lists.dm
+++ b/code/__HELPERS/_lists.dm
@@ -247,6 +247,13 @@
return "[output][and_text][input[index]]"
+///Returns a list of atom types in plain english as a string of each type name
+/proc/type_english_list(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" )
+ var/list/english_input = list()
+ for(var/atom/type as anything in input)
+ english_input += "[initial(type.name)]"
+ return english_list(english_input, nothing_text, and_text, comma_text, final_comma_text)
+
/**
* Checks for specific types in a list.
*
diff --git a/code/__HELPERS/announcements.dm b/code/__HELPERS/announcements.dm
index ad5b22045195e..d8653a2eb05da 100644
--- a/code/__HELPERS/announcements.dm
+++ b/code/__HELPERS/announcements.dm
@@ -50,7 +50,7 @@
if(islist(players))
for(var/mob/target in players)
to_chat(target, finalized_announcement)
- if(play_sound && target.client?.prefs.read_preference(/datum/preference/numeric/sound_announcements)) //DOPPLER EDIT CHANGE - Original: if(play_sound && target.client?.prefs.read_preference(/datum/preference/toggle/sound_announcements))
+ if(play_sound && target.client?.prefs.read_preference(/datum/preference/toggle/sound_announcements))
SEND_SOUND(target, sound(sound_override))
else
to_chat(world, finalized_announcement)
@@ -59,7 +59,7 @@
return
for(var/mob/player in GLOB.player_list)
- if(player.client?.prefs.read_preference(/datum/preference/numeric/sound_announcements)) //DOPPLER EDIT CHANGE - Original: if(player.client?.prefs.read_preference(/datum/preference/toggle/sound_announcements))
+ if(player.client?.prefs.read_preference(/datum/preference/toggle/sound_announcements))
SEND_SOUND(player, sound(sound_override))
/**
diff --git a/code/__HELPERS/dynamic_human_icon_gen.dm b/code/__HELPERS/dynamic_human_icon_gen.dm
index f1f3be038a86b..d709b38207a59 100644
--- a/code/__HELPERS/dynamic_human_icon_gen.dm
+++ b/code/__HELPERS/dynamic_human_icon_gen.dm
@@ -23,7 +23,7 @@ GLOBAL_LIST_EMPTY(dynamic_human_appearances)
outfit.r_hand = r_hand
if(l_hand != NO_REPLACE)
outfit.l_hand = l_hand
- dummy.equipOutfit(outfit, visualsOnly = TRUE)
+ dummy.equipOutfit(outfit, visuals_only = TRUE)
else if(mob_spawn_path)
var/obj/effect/mob_spawn/spawner = new mob_spawn_path(null, TRUE)
spawner.outfit_override = list()
diff --git a/code/__HELPERS/honkerblast.dm b/code/__HELPERS/honkerblast.dm
index f49a5ca4aca29..4f1f6b71dd313 100644
--- a/code/__HELPERS/honkerblast.dm
+++ b/code/__HELPERS/honkerblast.dm
@@ -23,7 +23,7 @@
victim.Stun(100)
victim.adjust_stutter(30 SECONDS)
victim.set_jitter_if_lower(1000 SECONDS)
- var/obj/item/organ/internal/ears/ears = victim.get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = victim.get_organ_slot(ORGAN_SLOT_EARS)
ears?.adjustEarDamage(10, 15)
to_chat(victim, "HONK")
var/obj/item/clothing/shoes/victim_shoes = victim.get_item_by_slot(ITEM_SLOT_FEET)
@@ -35,13 +35,13 @@
victim.Paralyze(20)
victim.Stun(50)
victim.set_jitter_if_lower(500 SECONDS)
- var/obj/item/organ/internal/ears/ears = victim.get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = victim.get_organ_slot(ORGAN_SLOT_EARS)
ears?.adjustEarDamage(7, 10)
to_chat(victim, "HONK")
for(var/mob/living/carbon/victim in lightly_honked)
victim.Knockdown(20)
victim.set_jitter_if_lower(200 SECONDS)
- var/obj/item/organ/internal/ears/ears = victim.get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = victim.get_organ_slot(ORGAN_SLOT_EARS)
ears?.adjustEarDamage(4, 5)
to_chat(victim, "HONK")
diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm
index ec238d2e495b0..583db80877305 100644
--- a/code/__HELPERS/icons.dm
+++ b/code/__HELPERS/icons.dm
@@ -1273,3 +1273,12 @@ GLOBAL_LIST_EMPTY(transformation_animation_objects)
alert_overlay.transform = alert_overlay.transform.Scale(scale)
return alert_overlay
+
+/// Strips all underlays on a different plane from an appearance.
+/// Returns the stripped appearance.
+/proc/strip_appearance_underlays(mutable_appearance/appearance)
+ var/base_plane = PLANE_TO_TRUE(appearance.plane)
+ for(var/mutable_appearance/underlay as anything in appearance.underlays)
+ if(PLANE_TO_TRUE(underlay.plane) != base_plane)
+ appearance.underlays -= underlay
+ return appearance
diff --git a/code/__HELPERS/levels.dm b/code/__HELPERS/levels.dm
index ca2cd3c5db3a3..927d8479b0dd8 100644
--- a/code/__HELPERS/levels.dm
+++ b/code/__HELPERS/levels.dm
@@ -58,3 +58,31 @@
// Finally, more specific checks are ran for edge cases, such as lazily loaded map templates or away missions. Not perfect.
return istype(what_turf) && what_turf.planetary_atmos && what_turf.has_gravity()
+
+/**
+ * Gets the angle between two linked z-levels.
+ * Returns an angle (in degrees) if the z-levels are crosslinked/neighbors,
+ * or null if they are not.
+ *
+ * Arguments:
+ * * start: The starting Z level. Can either be a numeric z-level, or a [/datum/space_level].
+ * * end: The destination Z level. Can either be a numeric z-level, or a [/datum/space_level].
+ */
+/proc/get_linked_z_angle(datum/space_level/start, datum/space_level/end)
+ if(isnum(start))
+ start = SSmapping.get_level(start)
+ if(isnum(end))
+ end = SSmapping.get_level(end)
+ // Check the neighbors first, and return the appropiate angle if it is a neighbor.
+ for(var/direction in start.neigbours)
+ var/datum/space_level/neighbor = start.neigbours[direction]
+ if(neighbor == end)
+ var/angle = GLOB.cardinal_angles[direction]
+ if(!isnull(angle))
+ return angle
+ // Otherwise, if they're both crosslinked, calculate the angle using their grid coordinates.
+ if(start.linkage == CROSSLINKED && end.linkage == CROSSLINKED)
+ var/dx = end.xi - start.xi
+ var/dy = end.yi - start.yi
+ return round(delta_to_angle(dy, dx))
+ return null
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 867f6f9e7649d..01d1e42013ff6 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -720,7 +720,7 @@ GLOBAL_LIST_INIT(skin_tone_names, list(
mob_occupant = occupant
else if(isorgan(occupant))
- var/obj/item/organ/internal/brain/brain = occupant
+ var/obj/item/organ/brain/brain = occupant
mob_occupant = brain.brainmob
return mob_occupant
diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm
index f589b6ad28e5f..3aaa5f0da13ef 100644
--- a/code/__HELPERS/priority_announce.dm
+++ b/code/__HELPERS/priority_announce.dm
@@ -120,7 +120,7 @@
* html_encode - if TRUE, we will html encode our title and message before sending it, to prevent player input abuse.
* players - optional, a list mobs to send the announcement to. If unset, sends to all palyers.
* sound_override - optional, use the passed sound file instead of the default notice sounds.
- * should_play_sound - Whether the notice sound should be played or not.
+ * should_play_sound - Whether the notice sound should be played or not. This can also be a callback, if you only want mobs to hear the sound based off of specific criteria.
* color_override - optional, use the passed color instead of the default notice color.
*/
/proc/minor_announce(message, title = "Attention:", alert = FALSE, html_encode = TRUE, list/players, sound_override, should_play_sound = TRUE, color_override)
@@ -185,20 +185,26 @@
return jointext(returnable_strings, "")
/// Proc that just dispatches the announcement to our applicable audience. Only the announcement is a mandatory arg.
+/// `should_play_sound` can also be a callback, if you want to only play the sound to specific players.
/proc/dispatch_announcement_to_players(announcement, list/players = GLOB.player_list, sound_override = null, should_play_sound = TRUE)
var/sound_to_play = !isnull(sound_override) ? sound_override : 'sound/announcer/notice/notice2.ogg'
+ // note for later: low-hanging fruit to convert to astype() behind an experiment define whenever the 516 beta releases
+ // var/datum/callback/should_play_sound_callback = astype(should_play_sound)
+ var/datum/callback/should_play_sound_callback
+ if(istype(should_play_sound, /datum/callback))
+ should_play_sound_callback = should_play_sound
+
for(var/mob/target in players)
- var/volume_modifier = (target.client?.prefs.read_preference(/datum/preference/numeric/sound_announcements)) //DOPPLER EDIT ADDITION
if(isnewplayer(target) || !target.can_hear())
continue
to_chat(target, announcement)
- if(!should_play_sound)
+ if(!should_play_sound || (should_play_sound_callback && !should_play_sound_callback.Invoke(target)))
continue
- if(target.client?.prefs.read_preference(/datum/preference/numeric/sound_announcements)) //DOPPLER EDIT CHANGE - Original: if(target.client?.prefs.read_preference(/datum/preference/toggle/sound_announcements))
- SEND_SOUND(target, sound(sound_to_play, volume = volume_modifier)) //DOPPLER EDIT CHANGE - Original: SEND_SOUND(target, sound(sound_to_play))
+ if(target.client?.prefs.read_preference(/datum/preference/toggle/sound_announcements))
+ SEND_SOUND(target, sound(sound_to_play))
#undef MAJOR_ANNOUNCEMENT_TITLE
#undef MAJOR_ANNOUNCEMENT_TEXT
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index f1fa482f50664..0232b64bf461f 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -270,7 +270,7 @@
if(!filter_name_ic(trimmed)) // Contains IC chat prohibited words
return
- return trim_reduced(trimmed)
+ return trimtext(trimmed)
/// Helper proc to check if a name is valid for the IC filter
@@ -337,24 +337,6 @@
return copytext(text, 1, i + 1)
return ""
-//Returns a string with reserved characters and spaces after the first and last letters removed
-//Like trim(), but very slightly faster. worth it for niche usecases
-/proc/trim_reduced(text)
- var/starting_coord = 1
- var/text_len = length(text)
- for (var/i in 1 to text_len)
- if (text2ascii(text, i) > 32)
- starting_coord = i
- break
-
- for (var/i = text_len, i >= starting_coord, i--)
- if (text2ascii(text, i) > 32)
- return copytext(text, starting_coord, i + 1)
-
- if(starting_coord > 1)
- return copytext(text, starting_coord)
- return ""
-
/**
* Truncate a string to the given length
*
@@ -375,7 +357,7 @@
/proc/trim(text, max_length)
if(max_length)
text = copytext_char(text, 1, max_length)
- return trim_reduced(text)
+ return trimtext(text)
//Returns a string with the first element of the string capitalized.
/proc/capitalize(t)
@@ -1206,6 +1188,16 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
else
. = ""
+/proc/weight_class_to_tooltip(w_class)
+ switch(w_class)
+ if(WEIGHT_CLASS_TINY to WEIGHT_CLASS_SMALL)
+ return "This item can fit into pockets, boxes and backpacks."
+ if(WEIGHT_CLASS_NORMAL)
+ return "This item can fit into backpacks."
+ if(WEIGHT_CLASS_BULKY to WEIGHT_CLASS_GIGANTIC)
+ return "This item is too large to fit into any standard storage."
+ return ""
+
/// Removes all non-alphanumerics from the text, keep in mind this can lead to id conflicts
/proc/sanitize_css_class_name(name)
var/static/regex/regex = new(@"[^a-zA-Z0-9]","g")
diff --git a/code/_globalvars/genetics.dm b/code/_globalvars/genetics.dm
index c5c424977cd62..6daa2a5ca7ae2 100644
--- a/code/_globalvars/genetics.dm
+++ b/code/_globalvars/genetics.dm
@@ -5,5 +5,3 @@ GLOBAL_LIST_EMPTY(bad_mutations) //bad initialized mutations
GLOBAL_LIST_EMPTY(good_mutations) //good initialized mutations
GLOBAL_LIST_EMPTY(not_good_mutations) //neutral initialized mutations
GLOBAL_LIST_EMPTY(alias_mutations) //alias = type
-
-GLOBAL_LIST_EMPTY(mutation_recipes)
diff --git a/code/_globalvars/lists/basic_ai.dm b/code/_globalvars/lists/basic_ai.dm
index a8646bb8d7f92..561d874c4e915 100644
--- a/code/_globalvars/lists/basic_ai.dm
+++ b/code/_globalvars/lists/basic_ai.dm
@@ -12,7 +12,7 @@ GLOBAL_LIST_INIT(ai_controllers_by_status, list(
GLOBAL_LIST_EMPTY(ai_controllers_by_zlevel)
///basic ai controllers that are currently performing idled behaviors
-GLOBAL_LIST_INIT(unplanned_controllers, list(
+GLOBAL_LIST_INIT_TYPED(unplanned_controllers, /list/datum/ai_controller, list(
AI_STATUS_ON = list(),
AI_STATUS_IDLE = list(),
))
diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm
index a7c7584d23aad..78680d4b216c3 100644
--- a/code/_globalvars/lists/mapping.dm
+++ b/code/_globalvars/lists/mapping.dm
@@ -93,6 +93,13 @@ GLOBAL_LIST_INIT(alldirs, list(
SOUTHWEST,
))
+GLOBAL_LIST_INIT(cardinal_angles, list(
+ "[NORTH]" = 0,
+ "[SOUTH]" = 180,
+ "[EAST]" = 90,
+ "[WEST]" = 270,
+))
+
/// list of all landmarks created
GLOBAL_LIST_EMPTY(landmarks_list)
/// list of all job spawn points created
diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm
index 0e5f7feb75247..32929ccdb9f24 100644
--- a/code/_globalvars/lists/objects.dm
+++ b/code/_globalvars/lists/objects.dm
@@ -80,6 +80,3 @@ GLOBAL_LIST_EMPTY(roundstart_station_borgcharger_areas)
/// List of area names of roundstart station mech rechargers, for the low charge/no charge mech screen alert tooltips.
GLOBAL_LIST_EMPTY(roundstart_station_mechcharger_areas)
-
-/// Associative list of alcoholic container typepath to instances, currently used by the alcoholic quirk
-GLOBAL_LIST_INIT(alcohol_containers, init_alcohol_containers())
diff --git a/code/_globalvars/lists/poll_ignore.dm b/code/_globalvars/lists/poll_ignore.dm
index b65ec230d37b3..d0cb7207acbf5 100644
--- a/code/_globalvars/lists/poll_ignore.dm
+++ b/code/_globalvars/lists/poll_ignore.dm
@@ -36,6 +36,7 @@
#define POLL_IGNORE_STALKER "stalker"
#define POLL_IGNORE_SYNDICATE "syndicate"
#define POLL_IGNORE_VENUSHUMANTRAP "venus_human_trap"
+#define POLL_IGNORE_RECOVERED_CREW "recovered_crew"
GLOBAL_LIST_INIT(poll_ignore_desc, list(
POLL_IGNORE_ACADEMY_WIZARD = "Academy Wizard Defender",
@@ -74,6 +75,7 @@ GLOBAL_LIST_INIT(poll_ignore_desc, list(
POLL_IGNORE_STALKER = "Stalker",
POLL_IGNORE_SYNDICATE = "Syndicate",
POLL_IGNORE_VENUSHUMANTRAP = "Venus Human Traps",
+ POLL_IGNORE_RECOVERED_CREW = "recovered_crew",
))
GLOBAL_LIST_INIT(poll_ignore, init_poll_ignore())
diff --git a/code/_globalvars/lists/quirks.dm b/code/_globalvars/lists/quirks.dm
index c052f761b03bf..825c217d055cc 100644
--- a/code/_globalvars/lists/quirks.dm
+++ b/code/_globalvars/lists/quirks.dm
@@ -25,8 +25,8 @@ GLOBAL_LIST_INIT(part_choice_transhuman, list(
"Right Arm" = /obj/item/bodypart/arm/right/robot,
"Left Leg" = /obj/item/bodypart/leg/left/robot,
"Right Leg" = /obj/item/bodypart/leg/right/robot,
- "Robotic Voice Box" = /obj/item/organ/internal/tongue/robot,
- "Flashlights for Eyes" = /obj/item/organ/internal/eyes/robotic/flashlight,
+ "Robotic Voice Box" = /obj/item/organ/tongue/robot,
+ "Flashlights for Eyes" = /obj/item/organ/eyes/robotic/flashlight,
))
///Hemiplegic Quirk
@@ -120,5 +120,6 @@ GLOBAL_LIST_INIT(quirk_chipped_choice, list(
"Integrated Intuitive Thinking and Judging" = /obj/item/skillchip/intj,
"F0RC3 4DD1CT10N" = /obj/item/skillchip/drunken_brawler,
"\"Space Station 13: The Musical\"" = /obj/item/skillchip/musical,
- "Mast-Angl-Er skillchip" = /obj/item/skillchip/master_angler,
+ "Mast-Angl-Er" = /obj/item/skillchip/master_angler,
+ "Kommand" = /obj/item/skillchip/big_pointer,
))
diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm
index e112d376adf5d..21c95d2314dc7 100644
--- a/code/_globalvars/phobias.dm
+++ b/code/_globalvars/phobias.dm
@@ -125,8 +125,8 @@ GLOBAL_LIST_INIT(phobia_objs, list(
/obj/item/gun/energy/alien,
/obj/item/hemostat/alien,
/obj/item/melee/baton/abductor,
- /obj/item/organ/internal/body_egg/alien_embryo,
- /obj/item/organ/internal/heart/gland,
+ /obj/item/organ/body_egg/alien_embryo,
+ /obj/item/organ/heart/gland,
/obj/item/radio/headset/abductor,
/obj/item/retractor/alien,
/obj/item/scalpel/alien,
@@ -255,10 +255,10 @@ GLOBAL_LIST_INIT(phobia_objs, list(
/obj/item/grenade/spawnergrenade/spesscarp,
/obj/item/knife/carp,
/obj/item/nullrod/carp,
- /obj/item/organ/internal/lungs/carp,
- /obj/item/organ/internal/tongue/carp,
- /obj/item/organ/internal/brain/carp,
- /obj/item/organ/internal/heart/carp,
+ /obj/item/organ/lungs/carp,
+ /obj/item/organ/tongue/carp,
+ /obj/item/organ/brain/carp,
+ /obj/item/organ/heart/carp,
/obj/item/storage/fancy/cigarettes/cigpack_carp,
/obj/item/stack/sheet/animalhide/carp,
/obj/item/toy/plush/carpplushie,
@@ -430,7 +430,7 @@ GLOBAL_LIST_INIT(phobia_objs, list(
/obj/item/clothing/head/costume/lizard,
/obj/item/clothing/shoes/cowboy/lizard,
/obj/item/food/kebab/tail,
- /obj/item/organ/external/tail/lizard,
+ /obj/item/organ/tail/lizard,
/obj/item/reagent_containers/cup/glass/bottle/lizardwine,
/obj/item/toy/plush/lizard_plushie,
)),
@@ -472,7 +472,7 @@ GLOBAL_LIST_INIT(phobia_objs, list(
/obj/effect/decal/remains/human,
/obj/item/clothing/suit/armor/bone,
/obj/item/food/meat/slab/human/mutant/skeleton,
- /obj/item/organ/internal/tongue/bone,
+ /obj/item/organ/tongue/bone,
/obj/item/stack/sheet/bone,
)),
"snakes" = typecacheof(list(
diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm
index a7dd1f9cb50a6..41c5b1a4f5375 100644
--- a/code/_globalvars/traits/_traits.dm
+++ b/code/_globalvars/traits/_traits.dm
@@ -127,8 +127,9 @@ GLOBAL_LIST_INIT(traits_by_type, list(
),
// DOPPLER ADDITON END
/obj = list(
- "TRAIT_WALLMOUNTED" = TRAIT_WALLMOUNTED,
"TRAIT_CONTRABAND" = TRAIT_CONTRABAND,
+ "TRAIT_SPEED_POTIONED" = TRAIT_SPEED_POTIONED,
+ "TRAIT_WALLMOUNTED" = TRAIT_WALLMOUNTED,
),
/mob = list(
"TRAIT_AI_ACCESS" = TRAIT_AI_ACCESS,
@@ -338,7 +339,9 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_MIND_READER" = TRAIT_MIND_READER,
"TRAIT_MINDSHIELD" = TRAIT_MINDSHIELD,
"TRAIT_MIND_TEMPORARILY_GONE" = TRAIT_MIND_TEMPORARILY_GONE,
+ "TRAIT_FAKE_SOULLESS" = TRAIT_FAKE_SOULLESS,
"TRAIT_MOB_BREEDER" = TRAIT_MOB_BREEDER,
+ "TRAIT_MOB_CAN_DIG" = TRAIT_MOB_CAN_DIG,
"TRAIT_MOB_EATER" = TRAIT_MOB_EATER,
"TRAIT_MOB_HATCHED" = TRAIT_MOB_HATCHED,
"TRAIT_MOB_HIDE_HAPPINESS" = TRAIT_MOB_HIDE_HAPPINESS,
@@ -567,6 +570,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_SPEECH_BOOSTER" = TRAIT_SPEECH_BOOSTER,
"TRAIT_MINING_PARRYING" = TRAIT_MINING_PARRYING,
"TRAIT_ILLUSORY_EFFECT" = TRAIT_ILLUSORY_EFFECT,
+ "TRAIT_GHOSTROLE_ON_REVIVE" = TRAIT_GHOSTROLE_ON_REVIVE,
"TRAIT_IGNORE_FIRE_PROTECTION" = TRAIT_IGNORE_FIRE_PROTECTION,
"TRAIT_LEFT_EYE_SCAR" = TRAIT_LEFT_EYE_SCAR,
"TRAIT_RIGHT_EYE_SCAR" = TRAIT_RIGHT_EYE_SCAR,
@@ -574,7 +578,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
/obj/item = list(
"TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING,
"TRAIT_BAIT_ALLOW_FISHING_DUD" = TRAIT_BAIT_ALLOW_FISHING_DUD,
- "TRAIT_BAIT_IGNORE_ENVIRONMENT" = TRAIT_BAIT_IGNORE_ENVIRONMENT,
"TRAIT_BAIT_UNCONSUMABLE" = TRAIT_BAIT_UNCONSUMABLE,
"TRAIT_BAKEABLE" = TRAIT_BAKEABLE,
"TRAIT_BASIC_QUALITY_BAIT" = TRAIT_BASIC_QUALITY_BAIT,
@@ -639,6 +642,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_FISH_FLOPPING" = TRAIT_FISH_FLOPPING,
"TRAIT_FISH_FROM_CASE" = TRAIT_FISH_FROM_CASE,
"TRAIT_FISH_INK_ON_COOLDOWN" = TRAIT_FISH_INK_ON_COOLDOWN,
+ "TRAIT_FISH_MADE_OF_BONE" = TRAIT_FISH_MADE_OF_BONE,
"TRAIT_FISH_MUTAGENIC" = TRAIT_FISH_MUTAGENIC,
"TRAIT_FISH_NO_HUNGER" = TRAIT_FISH_NO_HUNGER,
"TRAIT_FISH_NO_MATING" = TRAIT_FISH_NO_MATING,
@@ -656,6 +660,9 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_YUCKY_FISH" = TRAIT_YUCKY_FISH,
),
/obj/item/fishing_rod = list(
+ "TRAIT_ROD_ATTRACT_SHINY_LOVERS" = TRAIT_ROD_ATTRACT_SHINY_LOVERS,
+ "TRAIT_ROD_IGNORE_ENVIRONMENT" = TRAIT_ROD_IGNORE_ENVIRONMENT,
+ "TRAIT_ROD_LAVA_USABLE" = TRAIT_ROD_LAVA_USABLE,
"TRAIT_ROD_REMOVE_FISHING_DUD" = TRAIT_ROD_REMOVE_FISHING_DUD,
),
/obj/item/integrated_circuit = list(
@@ -672,7 +679,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_LIVING_HEART" = TRAIT_LIVING_HEART,
"TRAIT_USED_ORGAN" = TRAIT_USED_ORGAN,
),
- /obj/item/organ/internal/liver = list(
+ /obj/item/organ/liver = list(
"TRAIT_BALLMER_SCIENTIST" = TRAIT_BALLMER_SCIENTIST,
"TRAIT_COMEDY_METABOLISM" = TRAIT_COMEDY_METABOLISM,
"TRAIT_CORONER_METABOLISM" = TRAIT_CORONER_METABOLISM,
@@ -685,7 +692,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_PRETENDER_ROYAL_METABOLISM" = TRAIT_PRETENDER_ROYAL_METABOLISM,
"TRAIT_ROYAL_METABOLISM" = TRAIT_ROYAL_METABOLISM,
),
- /obj/item/organ/internal/lungs = list(
+ /obj/item/organ/lungs = list(
"TRAIT_SPACEBREATHING" = TRAIT_SPACEBREATHING,
),
/obj/machinery/modular_computer = list(
diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm
index f3a2a44dac056..f2aef0dfcee9b 100644
--- a/code/_globalvars/traits/admin_tooling.dm
+++ b/code/_globalvars/traits/admin_tooling.dm
@@ -24,6 +24,10 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_WEATHER_IMMUNE" = TRAIT_WEATHER_IMMUNE,
"TRAIT_SILENT_REACTIONS" = TRAIT_SILENT_REACTIONS,
),
+ /obj = list(
+ "TRAIT_CONTRABAND" = TRAIT_CONTRABAND,
+ "TRAIT_SPEED_POTIONED" = TRAIT_SPEED_POTIONED,
+ ),
/mob = list(
"TRAIT_ABDUCTOR_SCIENTIST_TRAINING" = TRAIT_ABDUCTOR_SCIENTIST_TRAINING,
"TRAIT_ABDUCTOR_TRAINING" = TRAIT_ABDUCTOR_TRAINING,
@@ -353,6 +357,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_FISH_FED_LUBE" = TRAIT_FISH_FED_LUBE,
"TRAIT_FISH_FROM_CASE" = TRAIT_FISH_FROM_CASE,
"TRAIT_FISH_INK_ON_COOLDOWN" = TRAIT_FISH_INK_ON_COOLDOWN,
+ "TRAIT_FISH_MADE_OF_BONE" = TRAIT_FISH_MADE_OF_BONE,
"TRAIT_FISH_MUTAGENIC" = TRAIT_FISH_MUTAGENIC,
"TRAIT_FISH_NO_HUNGER" = TRAIT_FISH_NO_HUNGER,
"TRAIT_FISH_NO_MATING" = TRAIT_FISH_NO_MATING,
@@ -369,9 +374,12 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_YUCKY_FISH" = TRAIT_YUCKY_FISH,
),
/obj/item/fishing_rod = list(
+ "TRAIT_ROD_ATTRACT_SHINY_LOVERS" = TRAIT_ROD_ATTRACT_SHINY_LOVERS,
+ "TRAIT_ROD_IGNORE_ENVIRONMENT" = TRAIT_ROD_IGNORE_ENVIRONMENT,
+ "TRAIT_ROD_LAVA_USABLE" = TRAIT_ROD_LAVA_USABLE,
"TRAIT_ROD_REMOVE_FISHING_DUD" = TRAIT_ROD_REMOVE_FISHING_DUD,
),
- /obj/item/organ/internal/liver = list(
+ /obj/item/organ/liver = list(
"TRAIT_BALLMER_SCIENTIST" = TRAIT_BALLMER_SCIENTIST,
"TRAIT_COMEDY_METABOLISM" = TRAIT_COMEDY_METABOLISM,
"TRAIT_CORONER_METABOLISM" = TRAIT_CORONER_METABOLISM,
@@ -383,7 +391,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_PRETENDER_ROYAL_METABOLISM" = TRAIT_PRETENDER_ROYAL_METABOLISM,
"TRAIT_ROYAL_METABOLISM" = TRAIT_ROYAL_METABOLISM,
),
- /obj/item/organ/internal/lungs = list(
+ /obj/item/organ/lungs = list(
"TRAIT_SPACEBREATHING" = TRAIT_SPACEBREATHING,
),
// DOPPLER EDIT ADDITION START - MODULAR TRAITS
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index f9191348fdb24..35014076db6b1 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -51,13 +51,15 @@
thealert.owner = src
if(new_master)
- var/old_layer = new_master.layer
- var/old_plane = new_master.plane
- new_master.layer = FLOAT_LAYER
- new_master.plane = FLOAT_PLANE
- thealert.add_overlay(new_master)
- new_master.layer = old_layer
- new_master.plane = old_plane
+ var/mutable_appearance/master_appearance = new(new_master)
+ master_appearance.appearance_flags = KEEP_TOGETHER
+ master_appearance.layer = FLOAT_LAYER
+ master_appearance.plane = FLOAT_PLANE
+ master_appearance.dir = SOUTH
+ master_appearance.pixel_x = new_master.base_pixel_x
+ master_appearance.pixel_y = new_master.base_pixel_y
+ master_appearance.pixel_z = new_master.base_pixel_z
+ thealert.add_overlay(strip_appearance_underlays(master_appearance))
thealert.icon_state = "template" // We'll set the icon to the client's ui pref in reorganize_alerts()
thealert.master_ref = master_ref
else
@@ -127,7 +129,7 @@
//Gas alerts
// Gas alerts are continuously thrown/cleared by:
-// * /obj/item/organ/internal/lungs/proc/check_breath()
+// * /obj/item/organ/lungs/proc/check_breath()
// * /mob/living/carbon/check_breath()
// * /mob/living/carbon/human/check_breath()
// * /datum/element/atmos_requirements/proc/on_non_stasis_life()
@@ -484,7 +486,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
if(!HAS_TRAIT(living_owner, TRAIT_SUCCUMB_OVERRIDE))
last_whisper = tgui_input_text(usr, "Do you have any last words?", "Goodnight, Sweet Prince", encode = FALSE) // saycode already handles sanitization
if(isnull(last_whisper))
- if(!HAS_TRAIT(living_owner, TRAIT_SUCCUMB_OVERRIDE))
+ if(HAS_TRAIT(living_owner, TRAIT_SUCCUMB_OVERRIDE))
return
if(!CAN_SUCCUMB(living_owner) && !HAS_TRAIT(living_owner, TRAIT_SUCCUMB_OVERRIDE))
return
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index cdf63cb68812c..922241321ab91 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -330,7 +330,7 @@
var/obj/item/bodypart/head/head = human_mob.get_bodypart(BODY_ZONE_HEAD)
if(isnull(head))
blocked_slots |= ITEM_SLOT_HEAD|ITEM_SLOT_EARS|ITEM_SLOT_EYES|ITEM_SLOT_MASK
- var/obj/item/organ/internal/eyes/eyes = human_mob.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = human_mob.get_organ_slot(ORGAN_SLOT_EYES)
if(eyes?.no_glasses)
blocked_slots |= ITEM_SLOT_EYES
if(human_mob.bodyshape & BODYSHAPE_DIGITIGRADE)
diff --git a/code/_onclick/hud/new_player.dm b/code/_onclick/hud/new_player.dm
index 1c794b5566d2d..b4092877a770a 100644
--- a/code/_onclick/hud/new_player.dm
+++ b/code/_onclick/hud/new_player.dm
@@ -122,6 +122,8 @@
var/enabled = TRUE
///Is the button currently being hovered over with the mouse?
var/highlighted = FALSE
+ ///Should this button play the select sound?
+ var/select_sound_play = TRUE
/atom/movable/screen/lobby/button/Click(location, control, params)
if(usr != get_mob())
@@ -135,6 +137,10 @@
if(!enabled)
return
flick("[base_icon_state]_pressed", src)
+ if(select_sound_play)
+ var/sound/ui_select_sound = sound('sound/misc/menu/ui_select1.ogg')
+ ui_select_sound.frequency = get_rand_frequency_low_range()
+ SEND_SOUND(hud.mymob, ui_select_sound)
update_appearance(UPDATE_ICON)
return TRUE
@@ -568,12 +574,14 @@
animate(src, transform = transform, time = SHUTTER_MOVEMENT_DURATION + SHUTTER_WAIT_DURATION)
//then pull the button up with the shutter and leave it on the edge of the screen
animate(transform = transform.Translate(x = 0, y = 134), time = SHUTTER_MOVEMENT_DURATION, easing = CUBIC_EASING|EASE_IN)
+ SEND_SOUND(hud.mymob, sound('sound/misc/menu/menu_rollup1.ogg'))
///Extends the button back to its usual spot
///Sends a signal on the hud for the menu hud elements to listen to
/atom/movable/screen/lobby/button/collapse/proc/expand_menu()
SEND_SIGNAL(hud, COMSIG_HUD_LOBBY_EXPANDED)
animate(src, transform = matrix(), time = SHUTTER_MOVEMENT_DURATION, easing = CUBIC_EASING|EASE_OUT)
+ SEND_SOUND(hud.mymob, sound('sound/misc/menu/menu_rolldown1.ogg'))
/atom/movable/screen/lobby/shutter
icon = 'icons/hud/lobby/shutter.dmi'
diff --git a/code/_onclick/hud/perks.dm b/code/_onclick/hud/perks.dm
new file mode 100644
index 0000000000000..22b08906b66e6
--- /dev/null
+++ b/code/_onclick/hud/perks.dm
@@ -0,0 +1,35 @@
+/atom/movable/screen/perk
+ icon = 'icons/hud/perks.dmi'
+ name = "blank"
+ icon_state = "blank"
+
+/atom/movable/screen/perk/more
+ name = "more"
+ icon_state = "more"
+ // When compact we don't show our perk huds in ui.
+ var/compact = FALSE
+ // List of all perks that we see on hud.
+ var/list/perks_on_hud = list()
+ // List to remember all perks we hide when compact it.
+ var/list/perks_compacted = list()
+
+/atom/movable/screen/perk/more/Click(location, control, params)
+ . = ..()
+ if(!isliving(usr))
+ return
+ var/mob/living/usr_is_living = usr
+ var/datum/antagonist/wizard/wizard_datum = usr_is_living.mind.has_antag_datum(/datum/antagonist/wizard)
+ if(!wizard_datum)
+ return
+ compact = !compact
+ var/datum/hud/user_hud = usr_is_living.hud_used
+ if(compact)
+ for(var/atom/movable/screen/perk/perk_on_hud as anything in perks_on_hud)
+ perks_compacted += perk_on_hud
+ user_hud.infodisplay -= perk_on_hud
+ user_hud.show_hud(user_hud.hud_version)
+ else
+ for(var/atom/movable/screen/perk/perk_compacted as anything in perks_compacted)
+ user_hud.infodisplay += perk_compacted
+ perks_compacted -= perk_compacted
+ user_hud.show_hud(user_hud.hud_version)
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index 2d82bb0c1e6e8..3ca14979ebccf 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -155,6 +155,7 @@
//Installed Module
robit.hands = new /atom/movable/screen/robot/module(null, src)
+ robit.hands.icon_state = robit.model ? robit.model.model_select_icon : "nomod"
robit.hands.screen_loc = ui_borg_module
static_inventory += robit.hands
diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm
index 82edbfb7d5dec..655cb3fcf9a40 100644
--- a/code/controllers/configuration/entries/game_options.dm
+++ b/code/controllers/configuration/entries/game_options.dm
@@ -108,7 +108,7 @@
/datum/config_entry/flag/protect_assistant_from_antagonist //If assistants can be traitor/cult/other
/datum/config_entry/string/human_authority //Controls how to enforce human authority
- default = "DISABLED" /// DOPPLER SHIFT EDIT: disabled is default.
+ default = "DISABLED"
/////////////////////////////////////////////////Outdated human authority settings
/datum/config_entry/flag/enforce_human_authority
diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm
index e92e30079b878..f796bd5480afb 100644
--- a/code/controllers/failsafe.dm
+++ b/code/controllers/failsafe.dm
@@ -24,6 +24,9 @@ GLOBAL_REAL(Failsafe, /datum/controller/failsafe)
var/running = TRUE
/datum/controller/failsafe/New()
+ // Ensure usr is null, to prevent any potential weirdness resulting from the failsafe having a usr if it's manually restarted.
+ usr = null
+
// Highlander-style: there can only be one! Kill off the old and replace it with the new.
if(Failsafe != src)
if(istype(Failsafe))
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index c3f0478cedb96..69ba4996fd5e9 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -84,6 +84,9 @@ GLOBAL_REAL(Master, /datum/controller/master)
var/rolling_usage_length = 5 SECONDS
/datum/controller/master/New()
+ // Ensure usr is null, to prevent any potential weirdness resulting from the MC having a usr if it's manually restarted.
+ usr = null
+
if(!config)
config = new
// Highlander-style: there can only be one! Kill off the old and replace it with the new.
diff --git a/code/controllers/subsystem/ambience.dm b/code/controllers/subsystem/ambience.dm
index af7b3833c91d8..4aacf3802cf5d 100644
--- a/code/controllers/subsystem/ambience.dm
+++ b/code/controllers/subsystem/ambience.dm
@@ -54,12 +54,9 @@ SUBSYSTEM_DEF(ambience)
///Attempts to play an ambient sound to a mob, returning the cooldown in deciseconds
/area/proc/play_ambience(mob/M, sound/override_sound, volume = 27)
var/sound/new_sound = override_sound || pick(ambientsounds)
-/* BEGIN DOPPLER EDIT - VOLUME MIXER
-new_sound = sound(new_sound, repeat = 0, wait = 0, volume = volume, channel = CHANNEL_AMBIENCE)
-changes old function to instead grab volume from player preferences */
+ /// volume modifier for ambience as set by the player in preferences.
var/volume_modifier = (M.client?.prefs.read_preference(/datum/preference/numeric/sound_ambience_volume))/100
new_sound = sound(new_sound, repeat = 0, wait = 0, volume = volume*volume_modifier, channel = CHANNEL_AMBIENCE)
-// END DOPPLER EDIT
SEND_SOUND(M, new_sound)
return rand(min_ambience_cooldown, max_ambience_cooldown)
@@ -113,15 +110,15 @@ changes old function to instead grab volume from player preferences */
/mob/proc/refresh_looping_ambience()
SIGNAL_HANDLER
- if(!client) // If a tree falls in the woods.
+ if(!client || isobserver(client.mob)) // If a tree falls in the woods. sadboysuss: Don't refresh for ghosts, it sounds bad
return
var/area/my_area = get_area(src)
var/sound_to_use = my_area.ambient_buzz
var/volume_modifier = client.prefs.read_preference(/datum/preference/numeric/sound_ship_ambience_volume)
- if(!sound_to_use || !(client.prefs.read_preference(/datum/preference/numeric/sound_ship_ambience_volume))) //DOPPLER EDIT CHANGE - Original: if(!sound_to_use || !(client.prefs.read_preference(/datum/preference/toggle/sound_ship_ambience)))
- SEND_SOUND(src, sound(null, repeat = 0, volume = volume_modifier, wait = 0, channel = CHANNEL_BUZZ)) //DOPPLER EDIT CHANGE - Original: SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = CHANNEL_BUZZ))
+ if(!sound_to_use || !(client.prefs.read_preference(/datum/preference/numeric/sound_ship_ambience_volume)))
+ SEND_SOUND(src, sound(null, repeat = 0, volume = volume_modifier, wait = 0, channel = CHANNEL_BUZZ))
client.current_ambient_sound = null
return
diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm
index 20d5a093be6da..7f26e4d0414c3 100644
--- a/code/controllers/subsystem/atoms.dm
+++ b/code/controllers/subsystem/atoms.dm
@@ -173,9 +173,6 @@ SUBSYSTEM_DEF(atoms)
/datum/controller/subsystem/atoms/proc/setupGenetics()
var/list/mutations = subtypesof(/datum/mutation/human)
shuffle_inplace(mutations)
- for(var/A in subtypesof(/datum/generecipe))
- var/datum/generecipe/GR = A
- GLOB.mutation_recipes[initial(GR.required)] = initial(GR.result)
for(var/i in 1 to LAZYLEN(mutations))
var/path = mutations[i] //byond gets pissy when we do it in one line
var/datum/mutation/human/B = new path ()
diff --git a/code/controllers/subsystem/dynamic/dynamic.dm b/code/controllers/subsystem/dynamic/dynamic.dm
index 78cfb0221e35f..a5196f56e8afb 100644
--- a/code/controllers/subsystem/dynamic/dynamic.dm
+++ b/code/controllers/subsystem/dynamic/dynamic.dm
@@ -67,7 +67,9 @@ SUBSYSTEM_DEF(dynamic)
var/list/executed_rules = list()
/// If TRUE, the next player to latejoin will guarantee roll for a random latejoin antag
/// (this does not guarantee they get said antag roll, depending on preferences and circumstances)
- var/forced_injection = FALSE
+ var/late_forced_injection = FALSE
+ /// If TRUE, a midround ruleset will be rolled
+ var/mid_forced_injection = FALSE
/// Forced ruleset to be executed for the next latejoin.
var/datum/dynamic_ruleset/latejoin/forced_latejoin_rule = null
/// How many percent of the rounds are more peaceful.
@@ -258,10 +260,10 @@ SUBSYSTEM_DEF(dynamic)
spend_midround_budget(-threatadd, threat_log, "[worldtime2text()]: decreased by [key_name(usr)]")
else if (href_list["injectlate"])
latejoin_injection_cooldown = 0
- forced_injection = TRUE
+ late_forced_injection = TRUE
message_admins("[key_name(usr)] forced a latejoin injection.")
else if (href_list["injectmid"])
- forced_injection = TRUE
+ mid_forced_injection = TRUE
message_admins("[key_name(usr)] forced a midround injection.")
try_midround_roll()
else if (href_list["threatlog"])
@@ -880,14 +882,14 @@ SUBSYSTEM_DEF(dynamic)
forced_latejoin_rule = null
return
- if(!forced_injection)
+ if(!late_forced_injection)
if(latejoin_injection_cooldown >= world.time)
return
if(!prob(latejoin_roll_chance))
return
- var/was_forced = forced_injection
- forced_injection = FALSE
+ var/was_forced = late_forced_injection
+ late_forced_injection = FALSE
var/list/possible_latejoin_rules = list()
for (var/datum/dynamic_ruleset/latejoin/rule in latejoin_rules)
if(!rule.weight)
diff --git a/code/controllers/subsystem/dynamic/dynamic_midround_rolling.dm b/code/controllers/subsystem/dynamic/dynamic_midround_rolling.dm
index 968037b9fa2e0..c44bf3d591ccb 100644
--- a/code/controllers/subsystem/dynamic/dynamic_midround_rolling.dm
+++ b/code/controllers/subsystem/dynamic/dynamic_midround_rolling.dm
@@ -17,7 +17,7 @@
return last_midround_injection_attempt + distance
/datum/controller/subsystem/dynamic/proc/try_midround_roll()
- if (!forced_injection && next_midround_injection() > world.time)
+ if (!mid_forced_injection && next_midround_injection() > world.time)
return
if (GLOB.dynamic_forced_extended)
@@ -30,7 +30,7 @@
last_midround_injection_attempt = world.time
next_midround_injection = null
- forced_injection = FALSE
+ mid_forced_injection = FALSE
log_dynamic_and_announce("A midround ruleset is rolling, and will be [spawn_heavy ? "HEAVY" : "LIGHT"].")
diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm
index 9c595fb6139d1..b03413f3aecb2 100644
--- a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm
+++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm
@@ -261,7 +261,7 @@
candidates -= player
else if(is_centcom_level(player.z))
candidates -= player // We don't autotator people in CentCom
- else if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0))
+ else if(player.mind && (player.mind.special_role || player.mind.can_roll_midround()))
candidates -= player // We don't autotator people with roles already
// DOPPLER ADDITION START
else if(player in rejected_traitor)
@@ -299,7 +299,7 @@
exclusive_roles = list(JOB_AI)
required_enemies = list(4,4,4,4,4,4,2,2,2,0)
required_candidates = 1
- minimum_players = 25
+ minimum_players = 10
weight = 2
cost = 10
required_type = /mob/living/silicon/ai
@@ -316,7 +316,7 @@
continue
if(isnull(player.mind))
continue
- if(player.mind.special_role || length(player.mind.antag_datums))
+ if(player.mind.special_role || player.mind.can_roll_midround())
continue
candidates += player
@@ -439,7 +439,7 @@
minimum_round_time = 35 MINUTES
weight = 3
cost = 8
- minimum_players = 25
+ minimum_players = 20
repeatable = TRUE
signup_item_path = /obj/structure/blob/normal
@@ -473,7 +473,7 @@
minimum_round_time = 35 MINUTES
weight = 3
cost = 10
- minimum_players = 25
+ minimum_players = 20
repeatable = TRUE
/datum/dynamic_ruleset/midround/from_living/blob_infection/trim_candidates()
@@ -485,7 +485,7 @@
candidates -= player
continue
- if(player.mind && (player.mind.special_role || length(player.mind.antag_datums) > 0))
+ if(player.mind && (player.mind.special_role || player.mind.can_roll_midround()))
candidates -= player
/datum/dynamic_ruleset/midround/from_living/blob_infection/execute()
@@ -513,7 +513,7 @@
minimum_round_time = 40 MINUTES
weight = 5
cost = 10
- minimum_players = 25
+ minimum_players = 20
repeatable = TRUE
signup_item_path = /mob/living/basic/alien
var/list/vents = list()
@@ -562,7 +562,7 @@
required_candidates = 1
weight = 3
cost = 5
- minimum_players = 15
+ minimum_players = 5
repeatable = TRUE
signup_item_path = /obj/item/light_eater
@@ -599,7 +599,7 @@
required_candidates = 1
weight = 4
cost = 7
- minimum_players = 25
+ minimum_players = 20
repeatable = TRUE
signup_item_path = /mob/living/basic/space_dragon
var/list/spawn_locs = list()
@@ -641,7 +641,7 @@
required_applicants = 2
weight = 4
cost = 7
- minimum_players = 25
+ minimum_players = 10
repeatable = TRUE
ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_ABDUCTOR_SHIPS)
@@ -678,7 +678,7 @@
required_candidates = 1
weight = 4
cost = 8
- minimum_players = 30
+ minimum_players = 15
repeatable = TRUE
ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_NINJA_HOLDING_FACILITY) // I mean, no one uses the nets anymore but whateva
signup_item_path = /obj/item/energy_katana
@@ -720,7 +720,7 @@
required_candidates = 0
weight = 3
cost = 8
- minimum_players = 27
+ minimum_players = 20
repeatable = TRUE
var/spawncount = 2
@@ -739,7 +739,7 @@
required_candidates = 1
weight = 4
cost = 5
- minimum_players = 15
+ minimum_players = 5
repeatable = TRUE
signup_item_path = /mob/living/basic/revenant
var/dead_mobs_required = 20
@@ -791,7 +791,7 @@
required_candidates = 0
weight = 3
cost = 8
- minimum_players = 20
+ minimum_players = 10
repeatable = TRUE
/datum/dynamic_ruleset/midround/pirates/acceptable(population=0, threat_level=0)
@@ -814,7 +814,7 @@
required_candidates = 0
weight = 3
cost = 8
- minimum_players = 25
+ minimum_players = 15
repeatable = TRUE
/datum/dynamic_ruleset/midround/dangerous_pirates/acceptable(population=0, threat_level=0)
@@ -849,7 +849,7 @@
candidates = living_players
for(var/mob/living/carbon/human/candidate in candidates)
if( \
- !candidate.get_organ_by_type(/obj/item/organ/internal/brain) \
+ !candidate.get_organ_by_type(/obj/item/organ/brain) \
|| candidate.mind.has_antag_datum(/datum/antagonist/obsessed) \
|| candidate.stat == DEAD \
|| !(ROLE_OBSESSED in candidate.client?.prefs?.be_special) \
@@ -886,7 +886,7 @@
required_candidates = 1
weight = 3
cost = 7
- minimum_players = 15
+ minimum_players = 10
repeatable = TRUE
signup_item_path = /obj/effect/meteor/meaty/changeling
@@ -981,7 +981,7 @@
required_candidates = 1
weight = 2
cost = 5
- minimum_players = 40
+ minimum_players = 5
repeatable = TRUE
signup_item_path = /obj/item/cosmic_skull
ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_VOIDWALKER_VOID)
diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm
index 79eedc0adb8d7..fd0b967ee9241 100644
--- a/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm
+++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm
@@ -517,7 +517,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE)
flags = HIGH_IMPACT_RULESET
blocking_rules = list(/datum/dynamic_ruleset/latejoin/provocateur)
// I give up, just there should be enough heads with 35 players...
- minimum_players = 35
+ minimum_players = 15
var/datum/team/revolution/revolution
var/finished = FALSE
@@ -719,7 +719,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE)
weight = 5
cost = 8
scaling_cost = 4
- minimum_players = 10
+ minimum_players = 5
antag_cap = list("denominator" = 20, "offset" = 1)
requirements = list(8, 8, 8, 8, 8, 8, 8, 8, 8, 8)
/// What fraction is added to the antag cap for each additional scale
diff --git a/code/controllers/subsystem/polling.dm b/code/controllers/subsystem/polling.dm
index 409f59bbff247..c9c7d3ea31167 100644
--- a/code/controllers/subsystem/polling.dm
+++ b/code/controllers/subsystem/polling.dm
@@ -2,7 +2,7 @@ SUBSYSTEM_DEF(polling)
name = "Polling"
flags = SS_BACKGROUND | SS_NO_INIT
wait = 1 SECONDS
- runlevels = RUNLEVEL_GAME
+ runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
/// List of polls currently ongoing, to be checked on next fire()
var/list/datum/candidate_poll/currently_polling
/// Number of polls performed since the start
@@ -173,8 +173,10 @@ SUBSYSTEM_DEF(polling)
// Sleep until the time is up
UNTIL(new_poll.finished)
- if(!(amount_to_pick > 0))
+ if(!amount_to_pick)
return new_poll.signed_up
+ if (!length(new_poll.signed_up))
+ return null
for(var/pick in 1 to amount_to_pick)
// There may be less people signed up than amount_to_pick
// pick_n_take returns the default return value of null if passed an empty list, so just break in that case rather than adding null to the list.
diff --git a/code/controllers/subsystem/tts.dm b/code/controllers/subsystem/tts.dm
index b9cb85ea78af8..8d893f12f38f2 100644
--- a/code/controllers/subsystem/tts.dm
+++ b/code/controllers/subsystem/tts.dm
@@ -110,13 +110,14 @@ SUBSYSTEM_DEF(tts)
if(QDELING(listening_mob))
stack_trace("TTS tried to play a sound to a deleted mob.")
continue
- var/volume_to_play_at = listening_mob.client?.prefs.read_preference(/datum/preference/numeric/sound_tts_volume)
+ /// volume modifier for TTS as set by the player in preferences.
+ var/volume_modifier = listening_mob.client?.prefs.read_preference(/datum/preference/numeric/sound_tts_volume)/100
var/tts_pref = listening_mob.client?.prefs.read_preference(/datum/preference/choiced/sound_tts)
- if(volume_to_play_at == 0 || (tts_pref == TTS_SOUND_OFF))
+ if(volume_modifier == 0 || (tts_pref == TTS_SOUND_OFF))
continue
var/sound_volume = ((listening_mob == target)? 60 : 85) + volume_offset
- sound_volume = sound_volume * (volume_to_play_at / 100)
+ sound_volume = sound_volume*volume_modifier
var/datum/language_holder/holder = listening_mob.get_language_holder()
var/audio_to_use = (tts_pref == TTS_SOUND_BLIPS) ? audio_blips : audio
if(!holder.has_language(language))
diff --git a/code/controllers/subsystem/unplanned_controllers.dm b/code/controllers/subsystem/unplanned_controllers.dm
index 3fb5f46dd069d..57b4ed68f169b 100644
--- a/code/controllers/subsystem/unplanned_controllers.dm
+++ b/code/controllers/subsystem/unplanned_controllers.dm
@@ -1,18 +1,37 @@
+GLOBAL_LIST_EMPTY(unplanned_controller_subsystems)
/// Handles making mobs perform lightweight "idle" behaviors such as wandering around when they have nothing planned
SUBSYSTEM_DEF(unplanned_controllers)
name = "Unplanned AI Controllers"
- flags = SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT
+ flags = SS_POST_FIRE_TIMING|SS_BACKGROUND
priority = FIRE_PRIORITY_UNPLANNED_NPC
init_order = INIT_ORDER_AI_CONTROLLERS
wait = 0.25 SECONDS
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
///what ai status are we interested in
var/target_status = AI_STATUS_ON
+ var/list/current_run = list()
+
+/datum/controller/subsystem/unplanned_controllers/Initialize()
+ ..()
+ GLOB.unplanned_controller_subsystems += src
+ return SS_INIT_SUCCESS
+
+/datum/controller/subsystem/unplanned_controllers/Destroy()
+ GLOB.unplanned_controller_subsystems -= src
+ return ..()
/datum/controller/subsystem/unplanned_controllers/stat_entry(msg)
msg = "Planning AIs:[length(GLOB.unplanned_controllers[target_status])]"
return ..()
/datum/controller/subsystem/unplanned_controllers/fire(resumed)
- for(var/datum/ai_controller/ai_controller as anything in GLOB.unplanned_controllers[target_status])
- ai_controller.idle_behavior.perform_idle_behavior(wait * 0.1, ai_controller)
+ if(!resumed)
+ src.current_run = GLOB.unplanned_controllers[target_status].Copy()
+ var/list/current_run = src.current_run // cache for sonic speed
+ while(length(current_run))
+ var/datum/ai_controller/unplanned = current_run[current_run.len]
+ current_run.len--
+ if(!QDELETED(unplanned))
+ unplanned.idle_behavior.perform_idle_behavior(wait * 0.1, unplanned)
+ if (MC_TICK_CHECK)
+ return
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index d950861513c12..d0e642bd3aa2d 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -243,7 +243,7 @@ SUBSYSTEM_DEF(vote)
new_voter.player_details.player_actions += voting_action
generated_actions += voting_action
- if(current_vote.vote_sound && (new_voter.prefs.read_preference(/datum/preference/numeric/sound_announcements))) //DOPPLER EDIT CHANGE - Original: if(current_vote.vote_sound && (new_voter.prefs.read_preference(/datum/preference/toggle/sound_announcements)))
+ if(current_vote.vote_sound && (new_voter.prefs.read_preference(/datum/preference/toggle/sound_announcements)))
SEND_SOUND(new_voter, sound(current_vote.vote_sound))
return TRUE
diff --git a/code/datums/actions/cooldown_action.dm b/code/datums/actions/cooldown_action.dm
index 1c290c5f224c1..974009727870f 100644
--- a/code/datums/actions/cooldown_action.dm
+++ b/code/datums/actions/cooldown_action.dm
@@ -11,8 +11,8 @@
var/panel
/// The default cooldown applied when StartCooldown() is called
var/cooldown_time = 0
- /// The default melee cooldown applied after the ability ends
- var/melee_cooldown_time
+ /// The default melee cooldown applied after the ability ends. If set to null, copies cooldown_time.
+ var/melee_cooldown_time = 0
/// The actual next time the owner of this action can melee
var/next_melee_use_time = 0
/// Whether or not you want the cooldown for the ability to display in text form
diff --git a/code/datums/actions/items/toggles.dm b/code/datums/actions/items/toggles.dm
index 449cf11124abf..d43eb0dcd3b90 100644
--- a/code/datums/actions/items/toggles.dm
+++ b/code/datums/actions/items/toggles.dm
@@ -88,7 +88,7 @@
. = ..()
if(!.)
return
- var/obj/item/organ/internal/cyberimp/eyes/hud/hud_implant = target
+ var/obj/item/organ/cyberimp/eyes/hud/hud_implant = target
hud_implant.toggle_hud(owner)
/datum/action/item_action/wheelys
diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm
index d6230ec8d3534..b8bd03d7cc501 100644
--- a/code/datums/ai/_ai_controller.dm
+++ b/code/datums/ai/_ai_controller.dm
@@ -268,11 +268,6 @@ multiple modular subtrees with behaviors
return AI_STATUS_IDLE
return AI_STATUS_ON
-/datum/ai_controller/proc/get_current_turf()
- var/mob/living/mob_pawn = pawn
- var/turf/pawn_turf = get_turf(mob_pawn)
- to_chat(world, "[pawn_turf]")
-
///Called when the AI controller pawn changes z levels, we check if there's any clients on the new one and wake up the AI if there is.
/datum/ai_controller/proc/on_changed_z_level(atom/source, turf/old_turf, turf/new_turf, same_z_layer, notify_contents)
SIGNAL_HANDLER
@@ -322,18 +317,21 @@ multiple modular subtrees with behaviors
/datum/ai_controller/proc/update_able_to_run()
SIGNAL_HANDLER
- able_to_run = get_able_to_run()
- if(!able_to_run)
+ var/run_flags = get_able_to_run()
+ if(run_flags & AI_UNABLE_TO_RUN)
+ able_to_run = FALSE
GLOB.move_manager.stop_looping(pawn) //stop moving
- set_ai_status(get_expected_ai_status())
+ else
+ able_to_run = TRUE
+ set_ai_status(get_expected_ai_status(), run_flags)
///Returns TRUE if the ai controller can actually run at the moment, FALSE otherwise
/datum/ai_controller/proc/get_able_to_run()
if(HAS_TRAIT(pawn, TRAIT_AI_PAUSED))
- return FALSE
+ return AI_UNABLE_TO_RUN
if(world.time < paused_until)
- return FALSE
- return TRUE
+ return AI_UNABLE_TO_RUN
+ return NONE
///Can this pawn interact with objects?
/datum/ai_controller/proc/ai_can_interact()
@@ -380,6 +378,7 @@ multiple modular subtrees with behaviors
if(isnull(current_movement_target))
fail_behavior(current_behavior)
return
+
///Stops pawns from performing such actions that should require the target to be adjacent.
var/atom/movable/moving_pawn = pawn
var/can_reach = !(current_behavior.behavior_flags & AI_BEHAVIOR_REQUIRE_REACH) || moving_pawn.CanReach(current_movement_target)
@@ -419,7 +418,7 @@ multiple modular subtrees with behaviors
forgotten_behavior.finish_action(arglist(arguments))
///This proc handles changing ai status, and starts/stops processing if required.
-/datum/ai_controller/proc/set_ai_status(new_ai_status)
+/datum/ai_controller/proc/set_ai_status(new_ai_status, additional_flags = NONE)
if(ai_status == new_ai_status)
return FALSE //no change
@@ -431,7 +430,8 @@ multiple modular subtrees with behaviors
ai_status = new_ai_status
GLOB.ai_controllers_by_status[new_ai_status] += src
if(ai_status == AI_STATUS_OFF)
- CancelActions()
+ if(!(additional_flags & AI_PREVENT_CANCEL_ACTIONS))
+ CancelActions()
return
if(!length(current_behaviors))
add_to_unplanned_controllers()
@@ -466,6 +466,9 @@ multiple modular subtrees with behaviors
if(isnull(ai_status) || ai_status == AI_STATUS_OFF)
return
GLOB.unplanned_controllers[ai_status] -= src
+ for(var/datum/controller/subsystem/unplanned_controllers/potential_holder as anything in GLOB.unplanned_controller_subsystems)
+ if(potential_holder.target_status == ai_status)
+ potential_holder.current_run -= src
/datum/ai_controller/proc/modify_cooldown(datum/ai_behavior/behavior, new_cooldown)
behavior_cooldowns[behavior] = new_cooldown
diff --git a/code/datums/ai/bane/bane_controller.dm b/code/datums/ai/bane/bane_controller.dm
index 64e1dcf31af3a..580e80440a419 100644
--- a/code/datums/ai/bane/bane_controller.dm
+++ b/code/datums/ai/bane/bane_controller.dm
@@ -27,5 +27,5 @@ And the only victory you achieved was a lie. Now you understand Gotham is beyond
/datum/ai_controller/bane/get_able_to_run()
var/mob/living/living_pawn = pawn
if(IS_DEAD_OR_INCAP(living_pawn))
- return FALSE
+ return AI_UNABLE_TO_RUN
return ..()
diff --git a/code/datums/ai/basic_mobs/base_basic_controller.dm b/code/datums/ai/basic_mobs/base_basic_controller.dm
index 7ab15437f7d35..eb1c38437e3be 100644
--- a/code/datums/ai/basic_mobs/base_basic_controller.dm
+++ b/code/datums/ai/basic_mobs/base_basic_controller.dm
@@ -30,17 +30,17 @@
/datum/ai_controller/basic_controller/get_able_to_run()
. = ..()
- if(!.)
- return FALSE
+ if(. & AI_UNABLE_TO_RUN)
+ return .
var/mob/living/living_pawn = pawn
if(!(ai_traits & CAN_ACT_WHILE_DEAD))
// Unroll for flags here
if (ai_traits & CAN_ACT_IN_STASIS && (living_pawn.stat || INCAPACITATED_IGNORING(living_pawn, INCAPABLE_STASIS)))
- return FALSE
- else if(IS_DEAD_OR_INCAP(living_pawn))
- return FALSE
+ return AI_UNABLE_TO_RUN
+ if(IS_DEAD_OR_INCAP(living_pawn))
+ return AI_UNABLE_TO_RUN
if(ai_traits & PAUSE_DURING_DO_AFTER && LAZYLEN(living_pawn.do_afters))
- return FALSE
+ return AI_UNABLE_TO_RUN | AI_PREVENT_CANCEL_ACTIONS //dont erase targets post a do_after
/datum/ai_controller/basic_controller/proc/update_speed(mob/living/basic/basic_mob)
SIGNAL_HANDLER
diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/interact_with_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/interact_with_target.dm
index 3b0c4245656e5..e3b202c5e164f 100644
--- a/code/datums/ai/basic_mobs/basic_ai_behaviors/interact_with_target.dm
+++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/interact_with_target.dm
@@ -3,6 +3,8 @@
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH
///should we be clearing the target after the fact?
var/clear_target = TRUE
+ ///should our combat mode be off during interaction?
+ var/combat_mode = TRUE
/datum/ai_behavior/interact_with_target/setup(datum/ai_controller/controller, target_key)
. = ..()
@@ -15,7 +17,7 @@
var/atom/target = controller.blackboard[target_key]
if(QDELETED(target) || !pre_interact(controller, target))
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
- controller.ai_interact(target)
+ controller.ai_interact(target, combat_mode)
return AI_BEHAVIOR_SUCCEEDED | AI_BEHAVIOR_DELAY
/datum/ai_behavior/interact_with_target/finish_action(datum/ai_controller/controller, succeeded, target_key)
diff --git a/code/datums/ai/basic_mobs/basic_subtrees/find_food.dm b/code/datums/ai/basic_mobs/basic_subtrees/find_food.dm
index f05c357b1a845..feca986909302 100644
--- a/code/datums/ai/basic_mobs/basic_subtrees/find_food.dm
+++ b/code/datums/ai/basic_mobs/basic_subtrees/find_food.dm
@@ -10,10 +10,13 @@
var/emotes_blackboard_list = BB_EAT_EMOTES
/datum/ai_planning_subtree/find_food/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
+ var/list/foods_list = controller.blackboard[food_list_key]
+ if(!length(foods_list))
+ CRASH("the types of food has not been supplied in the [food_list_key] key!")
if(controller.blackboard[BB_NEXT_FOOD_EAT] > world.time)
return
if(!controller.blackboard_key_exists(found_food_key))
- controller.queue_behavior(finding_behavior, found_food_key, controller.blackboard[food_list_key])
+ controller.queue_behavior(finding_behavior, found_food_key, foods_list)
return
controller.queue_behavior(/datum/ai_behavior/interact_with_target/eat_food, found_food_key, emotes_blackboard_list)
return SUBTREE_RETURN_FINISH_PLANNING
diff --git a/code/datums/ai/basic_mobs/basic_subtrees/fishing.dm b/code/datums/ai/basic_mobs/basic_subtrees/fishing.dm
new file mode 100644
index 0000000000000..e17f50740fa64
--- /dev/null
+++ b/code/datums/ai/basic_mobs/basic_subtrees/fishing.dm
@@ -0,0 +1,44 @@
+#define FISHING_COOLDOWN 45 SECONDS
+
+///subtree for fishing and eating food!
+/datum/ai_planning_subtree/fish
+ ///behavior we use to find fishable objects
+ var/datum/ai_behavior/find_fishable_behavior = /datum/ai_behavior/find_and_set/in_list
+ ///behavior we use to fish!
+ var/datum/ai_behavior/fishing_behavior = /datum/ai_behavior/interact_with_target/fishing
+ ///blackboard key storing things we can fish from
+ var/fishable_list_key = BB_FISHABLE_LIST
+ ///key where we store found fishable items
+ var/fishing_target_key = BB_FISHING_TARGET
+ ///key where we store our fishing cooldown
+ var/fishing_cooldown_key = BB_FISHING_COOLDOWN
+ ///our fishing range
+ var/fishing_range = 5
+
+/datum/ai_planning_subtree/fish/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
+ if(controller.blackboard[BB_ONLY_FISH_WHILE_HUNGRY] && controller.blackboard[BB_NEXT_FOOD_EAT] > world.time)
+ return
+ if(controller.blackboard[BB_FISHING_TIMER] > world.time)
+ return
+ if(!controller.blackboard_key_exists(fishing_target_key))
+ controller.queue_behavior(find_fishable_behavior, fishing_target_key, controller.blackboard[fishable_list_key], fishing_range)
+ return
+ controller.queue_behavior(/datum/ai_behavior/interact_with_target/fishing, fishing_target_key, fishing_cooldown_key)
+ return SUBTREE_RETURN_FINISH_PLANNING
+
+///less expensive fishing behavior!
+/datum/ai_planning_subtree/fish/fish_from_turfs
+ find_fishable_behavior = /datum/ai_behavior/find_and_set/in_list/closest_turf
+
+/datum/ai_behavior/interact_with_target/fishing
+ clear_target = FALSE
+ combat_mode = FALSE
+
+/datum/ai_behavior/interact_with_target/fishing/finish_action(datum/ai_controller/controller, succeeded, fishing_target_key, fishing_cooldown_key)
+ . = ..()
+ if(!succeeded)
+ return
+ var/cooldown = controller.blackboard[fishing_cooldown_key] || FISHING_COOLDOWN
+ controller.set_blackboard_key(BB_FISHING_TIMER, world.time + cooldown)
+
+#undef FISHING_COOLDOWN
diff --git a/code/datums/ai/generic/find_and_set.dm b/code/datums/ai/generic/find_and_set.dm
index 5a424f304f28f..c7534510b6afa 100644
--- a/code/datums/ai/generic/find_and_set.dm
+++ b/code/datums/ai/generic/find_and_set.dm
@@ -38,19 +38,17 @@
/datum/ai_behavior/find_and_set/edible/search_tactic(datum/ai_controller/controller, locate_path, search_range)
var/mob/living/living_pawn = controller.pawn
- var/list/food_candidates = list()
- for(var/held_candidate as anything in living_pawn.held_items)
- if(!held_candidate || !IsEdible(held_candidate))
- continue
- food_candidates += held_candidate
- var/list/local_results = locate(locate_path) in oview(search_range, controller.pawn)
- for(var/local_candidate in local_results)
- if(!IsEdible(local_candidate))
- continue
- food_candidates += local_candidate
- if(food_candidates.len)
- return pick(food_candidates)
+ for(var/atom/held_candidate as anything in living_pawn.held_items)
+ if(IsEdible(held_candidate))
+ return held_candidate
+
+ for(var/atom/local_candidate as anything in oview(search_range, controller.pawn))
+ if(IsEdible(local_candidate) && istype(local_candidate, locate_path))
+ return local_candidate
+
+ return null
+
/**
* Variant of find and set that only checks in hands, search range should be excluded for this
@@ -181,7 +179,6 @@
/datum/ai_behavior/find_and_set/in_list/turf_types
-
/datum/ai_behavior/find_and_set/in_list/turf_types/search_tactic(datum/ai_controller/controller, locate_paths, search_range)
var/list/found = RANGE_TURFS(search_range, controller.pawn)
shuffle_inplace(found)
@@ -191,3 +188,12 @@
if(can_see(controller.pawn, possible_turf, search_range))
return possible_turf
return null
+
+/datum/ai_behavior/find_and_set/in_list/closest_turf
+
+/datum/ai_behavior/find_and_set/in_list/closest_turf/search_tactic(datum/ai_controller/controller, locate_paths, search_range)
+ var/list/found = RANGE_TURFS(search_range, controller.pawn)
+ for(var/turf/possible_turf as anything in found)
+ if(!is_type_in_typecache(possible_turf, locate_paths) || !can_see(controller.pawn, possible_turf, search_range))
+ found -= possible_turf
+ return (length(found)) ? get_closest_atom(/turf, found, controller.pawn) : null
diff --git a/code/datums/ai/generic/generic_behaviors.dm b/code/datums/ai/generic/generic_behaviors.dm
index c6fcbcfb57265..4d0fb51405044 100644
--- a/code/datums/ai/generic/generic_behaviors.dm
+++ b/code/datums/ai/generic/generic_behaviors.dm
@@ -180,7 +180,7 @@
var/mob/living/living_pawn = controller.pawn
var/obj/item/target = controller.blackboard[target_key]
if(QDELETED(target))
- return AI_BEHAVIOR_DELAY
+ return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
if(!(target in living_pawn.held_items))
if(!living_pawn.get_empty_held_indexes() || !living_pawn.put_in_hands(target))
@@ -190,7 +190,8 @@
if(QDELETED(target) || prob(10)) // Even if we don't finish it all we can randomly decide to be done
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
- return AI_BEHAVIOR_DELAY
+
+ return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
/datum/ai_behavior/consume/finish_action(datum/ai_controller/controller, succeeded, target_key, hunger_timer_key)
. = ..()
@@ -204,12 +205,11 @@
/datum/ai_behavior/drop_item/perform(seconds_per_tick, datum/ai_controller/controller)
var/mob/living/living_pawn = controller.pawn
- var/obj/item/best_held = GetBestWeapon(controller, null, living_pawn.held_items)
- for(var/obj/item/held as anything in living_pawn.held_items)
- if(!held || held == best_held)
- continue
- living_pawn.dropItemToGround(held)
- return AI_BEHAVIOR_DELAY
+ var/list/my_held_items = living_pawn.held_items - GetBestWeapon(controller, null, living_pawn.held_items)
+ if(!length(my_held_items))
+ return AI_BEHAVIOR_FAILED | AI_BEHAVIOR_DELAY
+ living_pawn.dropItemToGround(pick(my_held_items))
+ return AI_BEHAVIOR_SUCCEEDED | AI_BEHAVIOR_DELAY
/// This behavior involves attacking a target.
/datum/ai_behavior/attack
@@ -275,7 +275,7 @@
return AI_BEHAVIOR_INSTANT
living_pawn.manual_emote(emote)
if(speech_sound) // Only audible emotes will pass in a sound
- playsound(living_pawn, speech_sound, 80, vary = TRUE)
+ playsound(living_pawn, speech_sound, 80, vary = TRUE, pressure_affected =TRUE, ignore_walls = FALSE)
return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED
/datum/ai_behavior/perform_speech
diff --git a/code/datums/ai/generic/generic_subtrees.dm b/code/datums/ai/generic/generic_subtrees.dm
index 12007a261240f..36bbbf35dd3d7 100644
--- a/code/datums/ai/generic/generic_subtrees.dm
+++ b/code/datums/ai/generic/generic_subtrees.dm
@@ -55,10 +55,16 @@
if(world.time < next_eat)
return
- if(!controller.blackboard[BB_FOOD_TARGET])
+ var/atom/food_target = controller.blackboard[BB_FOOD_TARGET]
+
+ if(isnull(food_target))
controller.queue_behavior(/datum/ai_behavior/find_and_set/edible, BB_FOOD_TARGET, /obj/item, 2)
return
- controller.queue_behavior(/datum/ai_behavior/drop_item)
+ var/mob/living/living_pawn = controller.pawn
+ if(!length(living_pawn.get_empty_held_indexes()) && !(food_target in living_pawn.held_items))
+ controller.queue_behavior(/datum/ai_behavior/drop_item)
+ return SUBTREE_RETURN_FINISH_PLANNING
+
controller.queue_behavior(/datum/ai_behavior/consume, BB_FOOD_TARGET, BB_NEXT_HUNGRY)
return SUBTREE_RETURN_FINISH_PLANNING
diff --git a/code/datums/ai/hunting_behavior/hunting_behaviors.dm b/code/datums/ai/hunting_behavior/hunting_behaviors.dm
index c202c4be6a7d8..0ab14ff0d3209 100644
--- a/code/datums/ai/hunting_behavior/hunting_behaviors.dm
+++ b/code/datums/ai/hunting_behavior/hunting_behaviors.dm
@@ -50,11 +50,13 @@
/// Finds a specific atom type to hunt.
/datum/ai_behavior/find_hunt_target
+ ///is this only meant to search for turf types?
+ var/search_turf_types = FALSE
/datum/ai_behavior/find_hunt_target/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, types_to_hunt, hunt_range)
var/mob/living/living_mob = controller.pawn
-
- for(var/atom/possible_dinner as anything in typecache_filter_list(range(hunt_range, living_mob), types_to_hunt))
+ var/list/interesting_objects = search_turf_types ? RANGE_TURFS(hunt_range, living_mob) : oview(hunt_range, living_mob)
+ for(var/atom/possible_dinner as anything in typecache_filter_list(interesting_objects, types_to_hunt))
if(!valid_dinner(living_mob, possible_dinner, hunt_range, controller, seconds_per_tick))
continue
controller.set_blackboard_key(hunting_target_key, possible_dinner)
@@ -69,6 +71,9 @@
return can_see(source, dinner, radius)
+/datum/ai_behavior/find_hunt_target/search_turf_types
+ search_turf_types = TRUE
+
/// Hunts down a specific atom type.
/datum/ai_behavior/hunt_target
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH
diff --git a/code/datums/ai/monkey/monkey_controller.dm b/code/datums/ai/monkey/monkey_controller.dm
index e92ec519b209a..0074d206983b3 100644
--- a/code/datums/ai/monkey/monkey_controller.dm
+++ b/code/datums/ai/monkey/monkey_controller.dm
@@ -19,11 +19,8 @@ have ways of interacting with a specific mob and control it.
BB_MONKEY_BEST_FORCE_FOUND = 0,
BB_MONKEY_ENEMIES = list(),
BB_MONKEY_BLACKLISTITEMS = list(),
- BB_MONKEY_PICKUPTARGET = null,
BB_MONKEY_PICKPOCKETING = FALSE,
BB_MONKEY_DISPOSING = FALSE,
- BB_MONKEY_TARGET_DISPOSAL = null,
- BB_MONKEY_CURRENT_ATTACK_TARGET = null,
BB_MONKEY_GUN_NEURONS_ACTIVATED = FALSE,
BB_MONKEY_GUN_WORKED = TRUE,
BB_SONG_LINES = MONKEY_SONG,
@@ -120,14 +117,14 @@ have ways of interacting with a specific mob and control it.
var/mob/living/living_pawn = pawn
if(INCAPACITATED_IGNORING(living_pawn, INCAPABLE_RESTRAINTS|INCAPABLE_STASIS|INCAPABLE_GRAB) || living_pawn.stat > CONSCIOUS)
- return FALSE
+ return AI_UNABLE_TO_RUN
return ..()
/datum/ai_controller/monkey/proc/set_trip_mode(mode = TRUE)
var/mob/living/carbon/regressed_monkey = pawn
var/brain = regressed_monkey.get_organ_slot(ORGAN_SLOT_BRAIN)
- if(istype(brain, /obj/item/organ/internal/brain/primate)) // In case we are a monkey AI in a human brain by who was previously controlled by a client but it now not by some marvel
- var/obj/item/organ/internal/brain/primate/monkeybrain = brain
+ if(istype(brain, /obj/item/organ/brain/primate)) // In case we are a monkey AI in a human brain by who was previously controlled by a client but it now not by some marvel
+ var/obj/item/organ/brain/primate/monkeybrain = brain
monkeybrain.tripping = mode
///re-used behavior pattern by monkeys for finding a weapon
diff --git a/code/datums/ai/oldhostile/hostile_tameable.dm b/code/datums/ai/oldhostile/hostile_tameable.dm
index 907ab955a8d53..92e300d939b7b 100644
--- a/code/datums/ai/oldhostile/hostile_tameable.dm
+++ b/code/datums/ai/oldhostile/hostile_tameable.dm
@@ -66,7 +66,7 @@
var/mob/living/living_pawn = pawn
if(IS_DEAD_OR_INCAP(living_pawn))
- return FALSE
+ return AI_UNABLE_TO_RUN
return ..()
/datum/ai_controller/hostile_friend/get_access()
diff --git a/code/datums/beam.dm b/code/datums/beam.dm
index ad27ee5ee3edf..69da1c9142db6 100644
--- a/code/datums/beam.dm
+++ b/code/datums/beam.dm
@@ -206,7 +206,7 @@
owner = null
return ..()
-/obj/effect/ebeam/singularity_pull()
+/obj/effect/ebeam/singularity_pull(atom/singularity, current_size)
return
/obj/effect/ebeam/singularity_act()
diff --git a/code/datums/bodypart_overlays/bodypart_overlay.dm b/code/datums/bodypart_overlays/bodypart_overlay.dm
index 16178e3c2782a..73d8fd3637501 100644
--- a/code/datums/bodypart_overlays/bodypart_overlay.dm
+++ b/code/datums/bodypart_overlays/bodypart_overlay.dm
@@ -106,7 +106,7 @@
return TRUE
///Colorizes the limb it's inserted to, if required.
-/datum/bodypart_overlay/proc/override_color(rgb_value)
+/datum/bodypart_overlay/proc/override_color(obj/item/bodypart/bodypart_owner)
CRASH("External organ color set to override with no override proc.")
///Generate a unique identifier to cache with. If you change something about the image, but the icon cache stays the same, it'll simply pull the unchanged image out of the cache
diff --git a/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm b/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
index 388899207d1f5..97ecde68d5dc2 100644
--- a/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
+++ b/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
@@ -8,6 +8,11 @@
///The color this organ draws with. Updated by bodypart/inherit_color()
var/draw_color
+ ///Override of the color of the organ, from dye sprays
+ var/dye_color
+ ///Can this bodypart overlay be dyed?
+ var/dyable = FALSE
+
///Where does this organ inherit its color from?
var/color_source = ORGAN_COLOR_INHERIT
///Take on the dna/preference from whoever we're gonna be inserted in
@@ -85,7 +90,7 @@
return appearance
/datum/bodypart_overlay/mutant/color_image(image/overlay, layer, obj/item/bodypart/limb)
- overlay.color = sprite_datum.color_src ? draw_color : null
+ overlay.color = sprite_datum.color_src ? (dye_color || draw_color) : null
/datum/bodypart_overlay/mutant/added_to_limb(obj/item/bodypart/limb)
inherit_color(limb)
@@ -105,7 +110,7 @@
. = list()
. += "[get_base_icon_state()]"
. += "[feature_key]"
- . += "[draw_color]"
+ . += "[dye_color || draw_color]"
return .
///Return a dumb glob list for this specific feature (called from parse_sprite)
@@ -123,12 +128,12 @@
switch(color_source)
if(ORGAN_COLOR_OVERRIDE)
- draw_color = override_color(bodypart_owner.draw_color)
+ draw_color = override_color(bodypart_owner)
if(ORGAN_COLOR_INHERIT)
draw_color = bodypart_owner.draw_color
if(ORGAN_COLOR_HAIR)
var/datum/species/species = bodypart_owner.owner?.dna?.species
- var/fixed_color = species?.get_fixed_hair_color(bodypart_owner.owner) // DOPPLER EDIT, old code: var/fixed_color = species?.get_fixed_hair_color(bodypart_owner)
+ var/fixed_color = species?.get_fixed_hair_color(bodypart_owner.owner)
if(!ishuman(bodypart_owner.owner))
draw_color = fixed_color
return
@@ -163,3 +168,10 @@
else
CRASH("External organ [type] had fetch_sprite_datum called with a null accessory name!")
+///From dye sprays. Set the dye_color (draw_color override) of this organ to a new value.
+/datum/bodypart_overlay/mutant/proc/set_dye_color(new_color, obj/item/organ/organ)
+ dye_color = new_color
+ if(organ.owner)
+ organ.owner.update_body_parts()
+ else
+ organ.bodypart_owner?.update_icon_dropped()
diff --git a/code/datums/bodypart_overlays/simple_bodypart_overlay.dm b/code/datums/bodypart_overlays/simple_bodypart_overlay.dm
index 20467eede042b..78aa80179f46b 100644
--- a/code/datums/bodypart_overlays/simple_bodypart_overlay.dm
+++ b/code/datums/bodypart_overlays/simple_bodypart_overlay.dm
@@ -30,3 +30,8 @@
icon_state = "bags"
draw_color = COLOR_WEBSAFE_DARK_GRAY
layers = EXTERNAL_ADJACENT
+
+///PENDING eyes drawn on the face
+/datum/bodypart_overlay/simple/soul_pending_eyes
+ icon_state = "soul_pending_eyes"
+ layers = EXTERNAL_FRONT
diff --git a/code/datums/brain_damage/brain_trauma.dm b/code/datums/brain_damage/brain_trauma.dm
index 8f0f8cfb04893..422ad075ea075 100644
--- a/code/datums/brain_damage/brain_trauma.dm
+++ b/code/datums/brain_damage/brain_trauma.dm
@@ -8,7 +8,7 @@
var/desc = "A trauma caused by brain damage, which causes issues to the patient."
var/scan_desc = "generic brain trauma" //description when detected by a health scanner
var/mob/living/carbon/owner //the poor bastard
- var/obj/item/organ/internal/brain/brain //the poor bastard's brain
+ var/obj/item/organ/brain/brain //the poor bastard's brain
var/gain_text = span_notice("You feel traumatized.")
var/lose_text = span_notice("You no longer feel traumatized.")
var/can_gain = TRUE
diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm
index f49a6d0c0bc52..486af4b278080 100644
--- a/code/datums/brain_damage/special.dm
+++ b/code/datums/brain_damage/special.dm
@@ -525,3 +525,179 @@
owner.ai_controller.set_ai_status(AI_STATUS_OFF)
owner.remove_language(/datum/language/monkey, UNDERSTOOD_LANGUAGE, TRAUMA_TRAIT)
to_chat(owner, span_green("The urge subsides."))
+
+/datum/brain_trauma/special/axedoration
+ name = "Axe Delusions"
+ desc = "Patient feels an immense sense of duty towards protecting an axe and has hallucinations regarding it."
+ scan_desc = "object attachment"
+ gain_text = span_notice("You feel like protecting the fire axe is one of your greatest duties.")
+ lose_text = span_warning("You feel like you lost your sense of duty.")
+ resilience = TRAUMA_RESILIENCE_ABSOLUTE
+ random_gain = FALSE
+ var/static/list/talk_lines = list(
+ "I'm proud of you.",
+ "I believe in you!",
+ "Do I bother you?",
+ "Praise me!",
+ "Fires burn.",
+ "We made it!",
+ "Mother, my body disgusts me.",
+ "There's a gap where we meet, where I end and you begin.",
+ "Humble yourself.",
+ )
+ var/static/list/hurt_lines = list(
+ "Ow!",
+ "Ouch!",
+ "Ack!",
+ "It burns!",
+ "Stop!",
+ "Arghh!",
+ "Please!",
+ "End it!",
+ "Cease!",
+ "Ah!",
+ )
+
+/datum/brain_trauma/special/axedoration/on_life(seconds_per_tick, times_fired)
+ if(owner.stat != CONSCIOUS)
+ return
+
+ if(!GLOB.bridge_axe)
+ if(SPT_PROB(0.5, seconds_per_tick))
+ to_chat(owner, span_warning("I've failed my duty..."))
+ owner.set_jitter_if_lower(5 SECONDS)
+ owner.set_stutter_if_lower(5 SECONDS)
+ if(SPT_PROB(20, seconds_per_tick))
+ owner.vomit(VOMIT_CATEGORY_DEFAULT)
+ return
+
+ var/atom/axe_location = get_axe_location()
+ if(!SPT_PROB(1.5, seconds_per_tick))
+ return
+ if(isliving(axe_location))
+ var/mob/living/axe_holder = axe_location
+ if(axe_holder == owner)
+ talk_tuah(pick(talk_lines))
+ return
+ var/datum/job/holder_job = axe_holder.mind?.assigned_role
+ if(holder_job && (/datum/job_department/command in holder_job.departments_list))
+ to_chat(owner, span_notice("I hope the axe is in good hands..."))
+ owner.add_mood_event("fireaxe", /datum/mood_event/axe_neutral)
+ return
+ to_chat(owner, span_warning("You start having a bad feeling..."))
+ owner.add_mood_event("fireaxe", /datum/mood_event/axe_missing)
+ return
+
+ if(!isarea(axe_location))
+ owner.add_mood_event("fireaxe", /datum/mood_event/axe_gone)
+ return
+
+ if(istype(axe_location, /area/station/command))
+ to_chat(owner, span_notice("You feel a sense of relief..."))
+ if(istype(GLOB.bridge_axe.loc, /obj/structure/fireaxecabinet))
+ return
+ owner.add_mood_event("fireaxe", /datum/mood_event/axe_neutral)
+ return
+
+ to_chat(owner, span_warning("You start having a bad feeling..."))
+ owner.add_mood_event("fireaxe", /datum/mood_event/axe_missing)
+
+/datum/brain_trauma/special/axedoration/on_gain()
+ RegisterSignal(owner, COMSIG_MOB_EQUIPPED_ITEM, PROC_REF(on_equip))
+ RegisterSignal(owner, COMSIG_MOB_UNEQUIPPED_ITEM, PROC_REF(on_unequip))
+ RegisterSignal(owner, COMSIG_MOB_EXAMINING, PROC_REF(on_examine))
+ if(!GLOB.bridge_axe)
+ axe_gone()
+ return ..()
+ RegisterSignal(GLOB.bridge_axe, COMSIG_QDELETING, PROC_REF(axe_gone))
+ if(istype(get_axe_location(), /area/station/command) && istype(GLOB.bridge_axe.loc, /obj/structure/fireaxecabinet))
+ owner.add_mood_event("fireaxe", /datum/mood_event/axe_cabinet)
+ else if(owner.is_holding(GLOB.bridge_axe))
+ on_equip(owner, GLOB.bridge_axe)
+ else
+ owner.add_mood_event("fireaxe", /datum/mood_event/axe_neutral)
+ RegisterSignal(GLOB.bridge_axe, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_axe_attack))
+ return ..()
+
+
+/datum/brain_trauma/special/axedoration/on_lose()
+ owner.clear_mood_event("fireaxe")
+ UnregisterSignal(owner, list(COMSIG_MOB_EQUIPPED_ITEM, COMSIG_MOB_UNEQUIPPED_ITEM, COMSIG_MOB_EXAMINING))
+ if(GLOB.bridge_axe)
+ UnregisterSignal(GLOB.bridge_axe, COMSIG_ITEM_AFTERATTACK)
+ return ..()
+
+/datum/brain_trauma/special/axedoration/proc/axe_gone(source)
+ SIGNAL_HANDLER
+ to_chat(owner, span_danger("You feel a great disturbance in the force."))
+ owner.add_mood_event("fireaxe", /datum/mood_event/axe_gone)
+ owner.set_jitter_if_lower(15 SECONDS)
+ owner.set_stutter_if_lower(15 SECONDS)
+
+/datum/brain_trauma/special/axedoration/proc/on_equip(source, obj/item/picked_up, slot)
+ SIGNAL_HANDLER
+ if(!istype(picked_up, /obj/item/fireaxe))
+ return
+ owner.set_jitter_if_lower(3 SECONDS)
+ if(picked_up == GLOB.bridge_axe)
+ to_chat(owner, span_hypnophrase("I have it. It's time to put it back."))
+ owner.add_mood_event("fireaxe", /datum/mood_event/axe_held)
+ return
+ ADD_TRAIT(picked_up, TRAIT_NODROP, type)
+ to_chat(owner, span_warning("...This is not the one I'm looking after."))
+ owner.Immobilize(2 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(throw_faker), picked_up), 2 SECONDS)
+
+/datum/brain_trauma/special/axedoration/proc/throw_faker(obj/item/faker)
+ REMOVE_TRAIT(faker, TRAIT_NODROP, type)
+ var/held_index = owner.get_held_index_of_item(faker)
+ if(!held_index)
+ return
+ to_chat(owner, span_warning("Be gone with you."))
+ owner.swap_hand(held_index, silent = TRUE)
+ var/turf/target_turf = get_ranged_target_turf(owner, owner.dir, faker.throw_range)
+ owner.throw_item(target_turf)
+
+/datum/brain_trauma/special/axedoration/proc/on_unequip(datum/source, obj/item/dropped_item, force, new_location)
+ SIGNAL_HANDLER
+ if(dropped_item != GLOB.bridge_axe)
+ return
+ if(get_axe_location() == owner)
+ return
+ if(istype(new_location, /obj/structure/fireaxecabinet))
+ if(istype(get_area(new_location), /area/station/command))
+ to_chat(owner, span_nicegreen("Ah! Back where it belongs!"))
+ owner.add_mood_event("fireaxe", /datum/mood_event/axe_cabinet)
+ INVOKE_ASYNC(owner, TYPE_PROC_REF(/mob, emote), "smile")
+ return
+ to_chat(owner, span_warning("Leaving it outside of command? Am I sure about that?"))
+ owner.add_mood_event("fireaxe", /datum/mood_event/axe_neutral)
+ return
+ to_chat(owner, span_warning("Should I really leave it here?"))
+ owner.add_mood_event("fireaxe", /datum/mood_event/axe_neutral)
+
+/datum/brain_trauma/special/axedoration/proc/on_examine(mob/source, atom/target, list/examine_strings)
+ SIGNAL_HANDLER
+ if(!istype(target, /obj/item/fireaxe))
+ return
+ if(target == GLOB.bridge_axe)
+ examine_strings += span_notice("It's the axe I've sworn to protect.")
+ else
+ examine_strings += span_warning("It's a simulacra, a fake axe made to fool the masses.")
+
+/datum/brain_trauma/special/axedoration/proc/on_axe_attack(obj/item/axe, atom/target, mob/user, click_parameters)
+ SIGNAL_HANDLER
+ if(user != owner)
+ return
+ talk_tuah(pick(hurt_lines))
+
+/datum/brain_trauma/special/axedoration/proc/talk_tuah(sent_message = "Hello World.")
+ owner.Hear(null, GLOB.bridge_axe, owner.get_selected_language(), sent_message)
+
+/datum/brain_trauma/special/axedoration/proc/get_axe_location()
+ if(!GLOB.bridge_axe)
+ return
+ var/atom/axe_loc = GLOB.bridge_axe.loc
+ while(!ismob(axe_loc) && !isarea(axe_loc) && !isnull(axe_loc))
+ axe_loc = axe_loc.loc
+ return axe_loc
diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm
index 198b674631750..195d33c4b4b8d 100644
--- a/code/datums/brain_damage/split_personality.dm
+++ b/code/datums/brain_damage/split_personality.dm
@@ -191,7 +191,7 @@
var/codeword
var/objective
-/datum/brain_trauma/severe/split_personality/brainwashing/New(obj/item/organ/internal/brain/B, _permanent, _codeword, _objective)
+/datum/brain_trauma/severe/split_personality/brainwashing/New(obj/item/organ/brain/B, _permanent, _codeword, _objective)
..()
if(_codeword)
codeword = _codeword
diff --git a/code/datums/components/aquarium_content.dm b/code/datums/components/aquarium_content.dm
index d956b39928a47..1307cb45fbbc3 100644
--- a/code/datums/components/aquarium_content.dm
+++ b/code/datums/components/aquarium_content.dm
@@ -179,13 +179,9 @@
remove_visual_from_aquarium()
current_aquarium = null
-///The visual overlay of the aquarium content. It holds a few vars that we can modity them during signals.
+///The visual overlay of the aquarium content. It can hold a couple vars that we can modify through signal procs.
/obj/effect/aquarium
layer = 0 //set on set_vc_base_position
- /// Base px offset of the visual object in current aquarium aka current base position
- var/base_px = 0
- /// Base px offset of the visual object in current aquarium aka current base position
- var/base_py = 0
/// How the visual will be layered
var/layer_mode = AQUARIUM_LAYER_MODE_AUTO
diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm
index bf13b7cd5bae4..ca8c8fdc62f3e 100644
--- a/code/datums/components/crafting/crafting.dm
+++ b/code/datums/components/crafting/crafting.dm
@@ -711,7 +711,8 @@
/datum/component/personal_crafting/machine/get_environment(atom/crafter, list/blacklist = null, radius_range = 1)
. = list()
- for(var/atom/movable/content in crafter.contents)
+ var/turf/crafter_loc = get_turf(crafter)
+ for(var/atom/movable/content as anything in crafter_loc.contents)
if((content.flags_1 & HOLOGRAM_1) || (blacklist && (content.type in blacklist)))
continue
if(isitem(content))
diff --git a/code/datums/components/crafting/entertainment.dm b/code/datums/components/crafting/entertainment.dm
index f1aa865e0cbc1..0602624dbb84f 100644
--- a/code/datums/components/crafting/entertainment.dm
+++ b/code/datums/components/crafting/entertainment.dm
@@ -22,7 +22,7 @@
result = /obj/item/toy/plush/moth
reqs = list(
/obj/item/stack/sheet/animalhide/mothroach = 1,
- /obj/item/organ/internal/heart = 1,
+ /obj/item/organ/heart = 1,
/obj/item/stack/sheet/cloth = 3,
)
category = CAT_ENTERTAINMENT
diff --git a/code/datums/components/crafting/equipment.dm b/code/datums/components/crafting/equipment.dm
index 2546106d40327..ef8f1b247873f 100644
--- a/code/datums/components/crafting/equipment.dm
+++ b/code/datums/components/crafting/equipment.dm
@@ -156,7 +156,7 @@
/datum/crafting_recipe/flashlight_eyes
name = "Flashlight Eyes"
- result = /obj/item/organ/internal/eyes/robotic/flashlight
+ result = /obj/item/organ/eyes/robotic/flashlight
time = 10
reqs = list(
/obj/item/flashlight = 2,
diff --git a/code/datums/components/crafting/melee_weapon.dm b/code/datums/components/crafting/melee_weapon.dm
index 018d99d870352..a8805c56577c4 100644
--- a/code/datums/components/crafting/melee_weapon.dm
+++ b/code/datums/components/crafting/melee_weapon.dm
@@ -37,10 +37,10 @@
name = "Tail Club"
result = /obj/item/tailclub
reqs = list(
- /obj/item/organ/external/tail/lizard = 1,
+ /obj/item/organ/tail/lizard = 1,
/obj/item/stack/sheet/iron = 1,
)
- blacklist = list(/obj/item/organ/external/tail/lizard/fake)
+ blacklist = list(/obj/item/organ/tail/lizard/fake)
time = 4 SECONDS
category = CAT_WEAPON_MELEE
@@ -63,10 +63,10 @@
name = "Liz O' Nine Tails"
result = /obj/item/melee/chainofcommand/tailwhip
reqs = list(
- /obj/item/organ/external/tail/lizard = 1,
+ /obj/item/organ/tail/lizard = 1,
/obj/item/stack/cable_coil = 1,
)
- blacklist = list(/obj/item/organ/external/tail/lizard/fake)
+ blacklist = list(/obj/item/organ/tail/lizard/fake)
time = 4 SECONDS
category = CAT_WEAPON_MELEE
@@ -74,7 +74,7 @@
name = "Cat O' Nine Tails"
result = /obj/item/melee/chainofcommand/tailwhip/kitty
reqs = list(
- /obj/item/organ/external/tail/cat = 1,
+ /obj/item/organ/tail/cat = 1,
/obj/item/stack/cable_coil = 1,
)
time = 4 SECONDS
@@ -201,3 +201,15 @@
)
time = 8 SECONDS
category = CAT_WEAPON_MELEE
+
+/datum/crafting_recipe/sm_sword
+ name = "Supermatter Sword"
+ result = /obj/item/melee/supermatter_sword
+ reqs = list(
+ /obj/item/assembly/signaler/anomaly/vortex = (MAX_CORES_VORTEX - 1),
+ )
+ machinery = list(
+ /obj/machinery/power/supermatter_crystal/small = CRAFTING_MACHINERY_CONSUME,
+ )
+ time = 120 SECONDS
+ category = CAT_WEAPON_MELEE
diff --git a/code/datums/components/crafting/robot.dm b/code/datums/components/crafting/robot.dm
index 09c8455a77b39..21abedb8b47f8 100644
--- a/code/datums/components/crafting/robot.dm
+++ b/code/datums/components/crafting/robot.dm
@@ -184,7 +184,7 @@
/obj/item/stack/cable_coil = 5,
/obj/item/stack/rods = 2,
/obj/item/stack/sheet/glass = 1,
- /obj/item/organ/internal/heart/ethereal = 1,
+ /obj/item/organ/heart/ethereal = 1,
)
category = CAT_ROBOT
diff --git a/code/datums/components/crafting/structures.dm b/code/datums/components/crafting/structures.dm
index 090ec31ce226f..10fe81efe96d9 100644
--- a/code/datums/components/crafting/structures.dm
+++ b/code/datums/components/crafting/structures.dm
@@ -85,3 +85,26 @@
)
category = CAT_STRUCTURE
crafting_flags = CRAFT_CHECK_DENSITY
+
+/datum/crafting_recipe/adam_pedestal
+ name = "Adamantine Pedestal"
+ result = /obj/item/adamantine_pedestal
+ reqs = list(
+ /obj/item/stack/sheet/mineral/adamantine = 20,
+ )
+ time = 120 SECONDS
+ category = CAT_STRUCTURE
+
+
+/datum/crafting_recipe/sm_small
+ name = "Small Supermatter Crystal"
+ result = /obj/machinery/power/supermatter_crystal/small
+ reqs = list(
+ /obj/item/gun/magic/wand/shrink = 1,
+ /obj/item/adamantine_pedestal = 1,
+ )
+ machinery = list(
+ /obj/machinery/power/supermatter_crystal = CRAFTING_MACHINERY_CONSUME,
+ )
+ time = 120 SECONDS
+ category = CAT_STRUCTURE
diff --git a/code/datums/components/crafting/tailoring.dm b/code/datums/components/crafting/tailoring.dm
index 2196a88325ac2..45c021aca6ce3 100644
--- a/code/datums/components/crafting/tailoring.dm
+++ b/code/datums/components/crafting/tailoring.dm
@@ -253,7 +253,7 @@
name = "Lizard Cloche Hat"
result = /obj/item/clothing/head/costume/lizard
time = 1 SECONDS
- reqs = list(/obj/item/organ/external/tail/lizard = 1)
+ reqs = list(/obj/item/organ/tail/lizard = 1)
category = CAT_CLOTHING
/datum/crafting_recipe/lizardhat_alternate
@@ -268,8 +268,8 @@
result = /obj/item/clothing/head/costume/kitty/genuine
time = 1 SECONDS
reqs = list(
- /obj/item/organ/external/tail/cat = 1,
- /obj/item/organ/internal/ears/cat = 1,
+ /obj/item/organ/tail/cat = 1,
+ /obj/item/organ/ears/cat = 1,
)
category = CAT_CLOTHING
diff --git a/code/datums/components/cult_ritual_item.dm b/code/datums/components/cult_ritual_item.dm
index 554e3d611ba2d..053782f6ed633 100644
--- a/code/datums/components/cult_ritual_item.dm
+++ b/code/datums/components/cult_ritual_item.dm
@@ -162,7 +162,7 @@
// For carbonss we also want to clear out the stomach of any holywater
if(iscarbon(target))
var/mob/living/carbon/carbon_target = target
- var/obj/item/organ/internal/stomach/belly = carbon_target.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/belly = carbon_target.get_organ_slot(ORGAN_SLOT_STOMACH)
if(belly)
holy_to_unholy += belly.reagents.get_reagent_amount(/datum/reagent/water/holywater)
belly.reagents.del_reagent(/datum/reagent/water/holywater)
diff --git a/code/datums/components/embedded.dm b/code/datums/components/embedded.dm
index 6fc61db5e76a6..09e583a0fcf7d 100644
--- a/code/datums/components/embedded.dm
+++ b/code/datums/components/embedded.dm
@@ -85,9 +85,10 @@
RegisterSignal(parent, COMSIG_CARBON_EMBED_REMOVAL, PROC_REF(safeRemove))
RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(checkTweeze))
RegisterSignal(parent, COMSIG_MAGIC_RECALL, PROC_REF(magic_pull))
+ RegisterSignal(parent, COMSIG_ATOM_EX_ACT, PROC_REF(on_ex_act))
/datum/component/embedded/UnregisterFromParent()
- UnregisterSignal(parent, list(COMSIG_MOVABLE_MOVED, COMSIG_CARBON_EMBED_RIP, COMSIG_CARBON_EMBED_REMOVAL, COMSIG_ATOM_ATTACKBY, COMSIG_MAGIC_RECALL))
+ UnregisterSignal(parent, list(COMSIG_MOVABLE_MOVED, COMSIG_CARBON_EMBED_RIP, COMSIG_CARBON_EMBED_REMOVAL, COMSIG_ATOM_ATTACKBY, COMSIG_MAGIC_RECALL, COMSIG_ATOM_EX_ACT))
/datum/component/embedded/process(seconds_per_tick)
var/mob/living/carbon/victim = parent
@@ -121,6 +122,19 @@
if(prob(fall_chance_current))
fallOut()
+/datum/component/embedded/proc/on_ex_act(atom/source, severity)
+ SIGNAL_HANDLER
+ // In the process of parent's ex_act
+ if (QDELETED(weapon))
+ return
+ switch(severity)
+ if(EXPLODE_DEVASTATE)
+ SSexplosions.high_mov_atom += weapon
+ if(EXPLODE_HEAVY)
+ SSexplosions.med_mov_atom += weapon
+ if(EXPLODE_LIGHT)
+ SSexplosions.low_mov_atom += weapon
+
////////////////////////////////////////
////////////BEHAVIOR PROCS//////////////
////////////////////////////////////////
diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm
index 22592a039aa04..62e446f5a283a 100644
--- a/code/datums/components/food/edible.dm
+++ b/code/datums/components/food/edible.dm
@@ -212,10 +212,12 @@ Behavior that's still missing from this component that original food items had t
for(var/rid in reagents)
var/amount = reagents[rid]
- if(length(tastes) && (rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin))
- owner.reagents.add_reagent(rid, amount, tastes.Copy(), added_purity = reagent_purity)
- else
- owner.reagents.add_reagent(rid, amount, added_purity = reagent_purity)
+ if(length(tastes) && ispath(rid, /datum/reagent/consumable/nutriment))
+ var/datum/reagent/consumable/nutriment/nid = rid
+ if(initial(nid.carry_food_tastes))
+ owner.reagents.add_reagent(rid, amount, tastes.Copy(), added_purity = reagent_purity)
+ continue
+ owner.reagents.add_reagent(rid, amount, added_purity = reagent_purity)
/datum/component/edible/proc/examine(datum/source, mob/user, list/examine_list)
SIGNAL_HANDLER
@@ -282,7 +284,7 @@ Behavior that's still missing from this component that original food items had t
examine_list += span_notice("It could use a little more Sodium Chloride...")
if (isliving(user))
var/mob/living/living_user = user
- living_user.taste(owner.reagents)
+ living_user.taste_container(owner.reagents)
/datum/component/edible/proc/UseFromHand(obj/item/source, mob/living/M, mob/living/user)
SIGNAL_HANDLER
@@ -499,7 +501,7 @@ Behavior that's still missing from this component that original food items had t
//Invoke the eater's stomach's after_eat callback if valid
if(iscarbon(eater))
var/mob/living/carbon/carbon_eater = eater
- var/obj/item/organ/internal/stomach/stomach = carbon_eater.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/stomach = carbon_eater.get_organ_slot(ORGAN_SLOT_STOMACH)
if(istype(stomach))
stomach.after_eat(owner)
@@ -565,10 +567,7 @@ Behavior that's still missing from this component that original food items had t
last_check_time = world.time
var/food_quality = get_perceived_food_quality(gourmand)
- if(food_quality <= FOOD_QUALITY_DANGEROUS && (foodtypes & gourmand.get_allergic_foodtypes())) // Only cause anaphylaxis if we're ACTUALLY allergic, otherwise it just tastes horrible
- if(gourmand.ForceContractDisease(new /datum/disease/anaphylaxis(), make_copy = FALSE, del_on_fail = TRUE))
- to_chat(gourmand, span_warning("You feel your throat start to itch."))
- gourmand.add_mood_event("allergic_food", /datum/mood_event/allergic_food)
+ if(food_quality <= FOOD_QUALITY_DANGEROUS && gourmand.check_allergic_reaction(foodtypes, chance = 100, histamine_add = 10))
return
if(food_quality <= TOXIC_FOOD_QUALITY_THRESHOLD)
@@ -689,7 +688,7 @@ Behavior that's still missing from this component that original food items had t
bitecount++
. = COMPONENT_CANCEL_ATTACK_CHAIN
- doggy.taste(food.reagents) // why should carbons get all the fun?
+ doggy.taste_container(food.reagents) // why should carbons get all the fun?
if(bitecount >= 5)
var/satisfaction_text = pick("burps from enjoyment.", "yaps for more!", "woofs twice.", "looks at the area where \the [food] was.")
doggy.manual_emote(satisfaction_text)
@@ -725,7 +724,7 @@ Behavior that's still missing from this component that original food items had t
if(foodtypes & edible_flags)
food.reagents.trans_to(eater, food.reagents.total_volume, transferred_by = eater)
- eater.visible_message(span_warning("[src] eats [food]!"), span_notice("You eat [food]."))
+ eater.visible_message(span_warning("[eater] eats [food]!"), span_notice("You eat [food]."))
playsound(get_turf(eater),'sound/items/eatfood.ogg', rand(30,50), TRUE)
qdel(food)
return COMPONENT_ATOM_EATEN
diff --git a/code/datums/components/fullauto.dm b/code/datums/components/fullauto.dm
index a3f2009b3b506..e93e0f54129bd 100644
--- a/code/datums/components/fullauto.dm
+++ b/code/datums/components/fullauto.dm
@@ -309,8 +309,11 @@
var/bonus_spread = 0
if(istype(akimbo_gun) && weapon_weight < WEAPON_MEDIUM && allow_akimbo)
if(akimbo_gun.weapon_weight < WEAPON_MEDIUM && akimbo_gun.can_trigger_gun(shooter))
- bonus_spread = dual_wield_spread
- addtimer(CALLBACK(akimbo_gun, TYPE_PROC_REF(/obj/item/gun, process_fire), target, shooter, TRUE, params, null, bonus_spread), 0.1 SECONDS)
+ if(!akimbo_gun.can_shoot())
+ addtimer(CALLBACK(akimbo_gun, TYPE_PROC_REF(/obj/item/gun, shoot_with_empty_chamber), shooter), 0.1 SECONDS)
+ else
+ bonus_spread = dual_wield_spread
+ addtimer(CALLBACK(akimbo_gun, TYPE_PROC_REF(/obj/item/gun, process_fire), target, shooter, TRUE, params, null, bonus_spread), 0.1 SECONDS)
process_fire(target, shooter, TRUE, params, null, bonus_spread)
#undef AUTOFIRE_MOUSEUP
diff --git a/code/datums/components/ghostrole_on_revive.dm b/code/datums/components/ghostrole_on_revive.dm
new file mode 100644
index 0000000000000..d9638b2d46a6f
--- /dev/null
+++ b/code/datums/components/ghostrole_on_revive.dm
@@ -0,0 +1,119 @@
+/// Proc ghosts to enter the body when it get's revived
+/datum/component/ghostrole_on_revive
+ /// If revived and no ghosts, just die again?
+ var/refuse_revival_if_failed
+ /// Callback for when the mob is revived and has their body occupied by a ghost
+ var/datum/callback/on_succesful_revive
+
+/datum/component/ghostrole_on_revive/Initialize(refuse_revival_if_failed, on_succesful_revive)
+ . = ..()
+
+ src.refuse_revival_if_failed = refuse_revival_if_failed
+ src.on_succesful_revive = on_succesful_revive
+
+ ADD_TRAIT(parent, TRAIT_GHOSTROLE_ON_REVIVE, REF(src)) //for adding an alternate examination
+
+ if(ismob(parent))
+ prepare_mob(parent)
+ return
+
+ if(!istype(parent, /obj/item/organ/brain))
+ return COMPONENT_INCOMPATIBLE
+
+ var/obj/item/organ/brain/brein = parent
+ if(brein.owner)
+ prepare_mob(brein.owner)
+ else
+ prepare_brain(brein)
+
+/// Give the appropriate signals, and watch for organ removal
+/datum/component/ghostrole_on_revive/proc/prepare_mob(mob/living/liver)
+ RegisterSignal(liver, COMSIG_LIVING_REVIVE, PROC_REF(on_revive))
+ ADD_TRAIT(liver, TRAIT_GHOSTROLE_ON_REVIVE, REF(src))
+ liver.med_hud_set_status()
+
+ if(iscarbon(liver))
+ var/mob/living/carbon/carbon = liver
+ var/obj/item/organ/brain = carbon.get_organ_by_type(/obj/item/organ/brain)
+ if(brain)
+ RegisterSignal(brain, COMSIG_ORGAN_REMOVED, PROC_REF(on_remove))
+
+/datum/component/ghostrole_on_revive/proc/on_remove(obj/item/organ/brain, mob/living/old_owner)
+ SIGNAL_HANDLER
+
+ REMOVE_TRAIT(old_owner, TRAIT_GHOSTROLE_ON_REVIVE, REF(src))
+ // we might have some lingering blinking eyes
+ var/obj/item/bodypart/head/head = old_owner?.get_bodypart(BODY_ZONE_HEAD)
+ if(head)
+ var/soul_eyes = locate(/datum/bodypart_overlay/simple/soul_pending_eyes) in head.bodypart_overlays
+ if(soul_eyes)
+ head.remove_bodypart_overlay(soul_eyes)
+
+ prepare_brain(brain)
+
+/datum/component/ghostrole_on_revive/proc/prepare_brain(obj/item/organ/brein)
+ SIGNAL_HANDLER
+
+ RegisterSignal(brein, COMSIG_ORGAN_IMPLANTED, PROC_REF(prepare_mob_from_brain))
+ UnregisterSignal(brein, COMSIG_ORGAN_REMOVED)
+
+/datum/component/ghostrole_on_revive/proc/prepare_mob_from_brain(obj/item/organ/brain/brein, mob/living/owner)
+ SIGNAL_HANDLER
+
+ UnregisterSignal(brein, COMSIG_ORGAN_IMPLANTED)
+ prepare_mob(owner)
+
+/datum/component/ghostrole_on_revive/proc/on_revive(mob/living/aliver)
+ SIGNAL_HANDLER
+
+ INVOKE_ASYNC(src, PROC_REF(poll_ghosts), aliver)
+
+/datum/component/ghostrole_on_revive/proc/poll_ghosts(mob/living/aliver)
+ var/soul_eyes
+ var/obj/item/bodypart/head
+ // adds soulful SOUL PENDING eyes to indicate what's happening to observers
+
+ var/mob/living/carbon/human/hewmon
+ if(ishuman(aliver))
+ hewmon = aliver
+ head = hewmon.get_bodypart(BODY_ZONE_HEAD)
+ if(head)
+ soul_eyes = new /datum/bodypart_overlay/simple/soul_pending_eyes ()
+ head.add_bodypart_overlay(soul_eyes)
+ hewmon.update_body_parts()
+
+ var/mob/dead/observer/chosen_one = SSpolling.poll_ghosts_for_target(
+ question = "Would you like to play as a recovered crewmember?",
+ role = null,
+ check_jobban = ROLE_RECOVERED_CREW,
+ poll_time = 15 SECONDS,
+ checked_target = aliver,
+ ignore_category = POLL_IGNORE_RECOVERED_CREW,
+ alert_pic = aliver,
+ role_name_text = "recovered crew",
+ )
+ if(head)
+ head.remove_bodypart_overlay(soul_eyes)
+ hewmon?.update_body_parts()
+
+ if(!isobserver(chosen_one))
+ if(refuse_revival_if_failed)
+ aliver.death()
+ aliver.visible_message(span_deadsay("[aliver.name]'s soul is struggling to return!"))
+ else
+ aliver.key = chosen_one.key
+ on_succesful_revive?.Invoke(aliver)
+ qdel(src)
+
+/datum/component/ghostrole_on_revive/Destroy(force)
+ REMOVE_TRAIT(parent, TRAIT_GHOSTROLE_ON_REVIVE, REF(src))
+
+ var/mob/living/living
+ if(isliving(parent))
+ living = parent
+ else if(istype(parent, /obj/item/organ/brain))
+ var/obj/item/organ/brain/brain = parent
+ living = brain.owner
+ living?.med_hud_set_status()
+
+ . = ..()
diff --git a/code/datums/components/gps.dm b/code/datums/components/gps.dm
index 0b3751856b8a2..46c2091389675 100644
--- a/code/datums/components/gps.dm
+++ b/code/datums/components/gps.dm
@@ -137,19 +137,23 @@ GLOBAL_LIST_EMPTY(GPS_list)
var/list/signals = list()
data["signals"] = list()
- for(var/gps in GLOB.GPS_list)
- var/datum/component/gps/G = gps
- if(G.emped || !G.tracking || G == src)
+ for(var/datum/component/gps/gps as anything in GLOB.GPS_list)
+ if(gps == src || gps.emped || !gps.tracking)
continue
- var/turf/pos = get_turf(G.parent)
- if(!pos || !global_mode && pos.z != curr.z)
+ var/turf/pos = get_turf(gps.parent)
+ if(!pos || (!global_mode && pos.z != curr.z))
continue
var/list/signal = list()
- signal["entrytag"] = G.gpstag //Name or 'tag' of the GPS
+ signal["entrytag"] = gps.gpstag //Name or 'tag' of the GPS
signal["coords"] = "[pos.x], [pos.y], [pos.z]"
- if(pos.z == curr.z) //Distance/Direction calculations for same z-level only
+ // Distance is calculated for the same z-level only, and direction is calculated for crosslinked/neighboring and same z-levels.
+ if(pos.z == curr.z)
signal["dist"] = max(get_dist(curr, pos), 0) //Distance between the src and remote GPS turfs
signal["degrees"] = round(get_angle(curr, pos)) //0-360 degree directional bearing, for more precision.
+ else
+ var/angle = get_linked_z_angle(curr.z, pos.z)
+ if(!isnull(angle))
+ signal["degrees"] = angle
signals += list(signal) //Add this signal to the list of signals
data["signals"] = signals
return data
diff --git a/code/datums/components/hat_stabilizer.dm b/code/datums/components/hat_stabilizer.dm
new file mode 100644
index 0000000000000..7a4033c3b2baf
--- /dev/null
+++ b/code/datums/components/hat_stabilizer.dm
@@ -0,0 +1,148 @@
+/// Allows players to place hats on the atom this is attached to
+/datum/component/hat_stabilizer
+ /// Currently "stored" hat. No armor or function will be inherited, only the icon and cover flags.
+ var/obj/item/clothing/head/attached_hat
+ /// Original cover flags for the helmet, before a hat is placed
+ var/former_flags
+ var/former_visor_flags
+ /// If true, add_overlay will use worn overlay instead of item appearance
+ var/use_worn_icon = TRUE
+ /// Pixel_y offset for the hat
+ var/pixel_y_offset
+
+/datum/component/hat_stabilizer/Initialize(add_overlay = FALSE, use_worn_icon = TRUE, pixel_y_offset = 0)
+ if(!ismovable(parent))
+ return COMPONENT_INCOMPATIBLE
+
+ src.use_worn_icon = use_worn_icon
+ src.pixel_y_offset = pixel_y_offset
+ RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
+ RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby))
+ RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(on_qdel))
+ RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND_SECONDARY, PROC_REF(on_secondary_attack_hand))
+ RegisterSignals(parent, list(COMSIG_MODULE_GENERATE_WORN_OVERLAY, COMSIG_ITEM_GET_WORN_OVERLAYS), PROC_REF(get_worn_overlays))
+ if (add_overlay)
+ RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_update_overlays))
+
+/datum/component/hat_stabilizer/UnregisterFromParent()
+ if (attached_hat)
+ remove_hat()
+ UnregisterSignal(parent, list(COMSIG_ATOM_EXAMINE, COMSIG_ATOM_ATTACKBY,
+ COMSIG_ATOM_ATTACK_HAND_SECONDARY, COMSIG_MODULE_GENERATE_WORN_OVERLAY,
+ COMSIG_ITEM_GET_WORN_OVERLAYS, COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_QDELETING))
+
+/datum/component/hat_stabilizer/proc/on_examine(datum/source, mob/user, list/base_examine)
+ SIGNAL_HANDLER
+ if(attached_hat)
+ base_examine += span_notice("There's \a [attached_hat] placed on [parent]. Right-click to remove it.")
+ else
+ base_examine += span_notice("There's nothing placed on [parent]. Yet.")
+
+/datum/component/hat_stabilizer/proc/get_worn_overlays(atom/movable/source, list/overlays, mutable_appearance/standing, isinhands, icon_file)
+ SIGNAL_HANDLER
+ if (isinhands)
+ return
+ if(attached_hat)
+ var/mutable_appearance/worn_overlay = attached_hat.build_worn_icon(default_layer = ABOVE_BODY_FRONT_HEAD_LAYER-0.1, default_icon_file = 'icons/mob/clothing/head/default.dmi')
+ worn_overlay.pixel_y = pixel_y_offset
+ overlays += worn_overlay
+
+/datum/component/hat_stabilizer/proc/on_update_overlays(atom/movable/source, list/overlays)
+ SIGNAL_HANDLER
+ var/mutable_appearance/worn_overlay = use_worn_icon ? attached_hat.build_worn_icon(default_layer = ABOVE_OBJ_LAYER, default_icon_file = 'icons/mob/clothing/head/default.dmi') : mutable_appearance(attached_hat, layer = ABOVE_OBJ_LAYER)
+ worn_overlay.pixel_y = pixel_y_offset
+ overlays += worn_overlay
+
+/datum/component/hat_stabilizer/proc/on_qdel(atom/movable/source)
+ SIGNAL_HANDLER
+
+ if (attached_hat)
+ QDEL_NULL(attached_hat)
+
+/datum/component/hat_stabilizer/proc/on_attackby(datum/source, obj/item/hitting_item, mob/user)
+ SIGNAL_HANDLER
+
+ var/atom/movable/movable_parent = parent
+ if(!istype(hitting_item, /obj/item/clothing/head))
+ return
+
+ if(attached_hat)
+ movable_parent.balloon_alert(user, "hat already attached!")
+ return
+
+ var/obj/item/clothing/hat = hitting_item
+ if(hat.clothing_flags & STACKABLE_HELMET_EXEMPT)
+ movable_parent.balloon_alert(user, "invalid hat!")
+ return
+
+ if(!user.transferItemToLoc(hat, parent, force = FALSE, silent = TRUE))
+ return
+
+ attach_hat(hat, user)
+
+/datum/component/hat_stabilizer/proc/attach_hat(obj/item/clothing/hat, mob/user)
+ var/atom/movable/movable_parent = parent
+ attached_hat = hat
+ RegisterSignal(hat, COMSIG_MOVABLE_MOVED, PROC_REF(remove_hat))
+
+ if (!isnull(user))
+ movable_parent.balloon_alert(user, "hat attached, right-click to remove")
+
+ if (!istype(parent, /obj/item/clothing))
+ movable_parent.update_appearance()
+ return
+
+ var/obj/item/clothing/apparel = parent
+ apparel.attach_clothing_traits(attached_hat.clothing_traits)
+ former_flags = apparel.flags_cover
+ former_visor_flags = apparel.visor_flags_cover
+ apparel.flags_cover |= attached_hat.flags_cover
+ apparel.visor_flags_cover |= attached_hat.visor_flags_cover
+ apparel.update_appearance()
+
+ if (ismob(apparel.loc))
+ var/mob/wearer = apparel.loc
+ wearer.update_clothing(wearer.get_slot_by_item(apparel))
+
+/datum/component/hat_stabilizer/proc/on_secondary_attack_hand(datum/source, mob/user)
+ SIGNAL_HANDLER
+ . = COMPONENT_CANCEL_ATTACK_CHAIN
+ if(!attached_hat)
+ return
+ var/atom/movable/movable_parent = parent
+ if (remove_hat(user))
+ movable_parent.balloon_alert(user, "hat removed")
+ else
+ movable_parent.balloon_alert_to_viewers("the hat falls to the floor!")
+
+/datum/component/hat_stabilizer/proc/remove_hat(mob/user)
+ SIGNAL_HANDLER
+
+ if(QDELETED(attached_hat))
+ return
+
+ var/atom/movable/movable_parent = parent
+ UnregisterSignal(attached_hat, COMSIG_MOVABLE_MOVED)
+
+ if (attached_hat.loc == parent)
+ attached_hat.forceMove(movable_parent.drop_location())
+
+ if(!isnull(user))
+ . = user.put_in_active_hand(attached_hat)
+ else
+ movable_parent.balloon_alert_to_viewers("the hat falls to the floor!")
+
+ if (!istype(parent, /obj/item/clothing))
+ attached_hat = null
+ movable_parent.update_appearance()
+ return
+
+ var/obj/item/clothing/apparel = parent
+ apparel.detach_clothing_traits(attached_hat)
+ apparel.flags_cover = former_flags
+ apparel.visor_flags_cover = former_visor_flags
+ apparel.update_appearance()
+ attached_hat = null
+ if (ismob(apparel.loc))
+ var/mob/wearer = apparel.loc
+ wearer.update_clothing(wearer.get_slot_by_item(apparel))
diff --git a/code/datums/components/heart_eater.dm b/code/datums/components/heart_eater.dm
index 722c4b1636d79..122716b3be5b9 100644
--- a/code/datums/components/heart_eater.dm
+++ b/code/datums/components/heart_eater.dm
@@ -44,7 +44,7 @@
/datum/component/heart_eater/proc/prepare_species(mob/living/carbon/human/eater)
if(eater.get_liked_foodtypes() & GORE)
return
- var/obj/item/organ/internal/tongue/eater_tongue = eater.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/eater_tongue = eater.get_organ_slot(ORGAN_SLOT_TONGUE)
if(!eater_tongue)
return
eater_tongue.disliked_foodtypes &= ~GORE
@@ -62,10 +62,10 @@
if(get_area(eater) == GLOB.areas_by_type[/area/centcom/wizard_station])
return
- if(!istype(what_we_ate, /obj/item/organ/internal/heart))
+ if(!istype(what_we_ate, /obj/item/organ/heart))
return
- var/obj/item/organ/internal/heart/we_ate_heart = what_we_ate
- var/obj/item/organ/internal/heart/previous_heart = last_heart_we_ate?.resolve()
+ var/obj/item/organ/heart/we_ate_heart = what_we_ate
+ var/obj/item/organ/heart/previous_heart = last_heart_we_ate?.resolve()
if(we_ate_heart == previous_heart)
return
if (!HAS_TRAIT(we_ate_heart, TRAIT_USED_ORGAN))
diff --git a/code/datums/components/holderloving.dm b/code/datums/components/holderloving.dm
index e41d986600df6..ba457b816b320 100644
--- a/code/datums/components/holderloving.dm
+++ b/code/datums/components/holderloving.dm
@@ -1,92 +1,56 @@
/** Holder Loving Component
*
- * This component is assigned to an [/obj/item], and also keeps track of a [holder].
- * The [parent] is 'bound' to [holder]. [parent] will be kept either directly
- * inside [holder], or in the inventory of a [/mob] that is itself holding [holder].
- *
- * If [parent] is placed in a [loc] that is not [holder] or [holder].[loc]
- * (if it's a mob), it is placed back inside [holder].
- *
- * This is intended for items that are a 'part' of another item.
- *
- * It can also delete [parent] when [holder] is deleted.
+ * When you drop an object onto a turf it gets moved back into its parent holder
*
+ * Prevents you from force moving the object into any other location that isn't its parent holder
*/
/datum/component/holderloving
- can_transfer = TRUE
/** Item that parent is bound to.
* We try to keep parent either directly in holder, or in holder's loc if loc is a mob,
* and warp parent into holder if they go anywhere else.
*/
var/atom/holder
- /// If parent is deleted when the holder gets deleted
- var/del_parent_with_holder = FALSE
-/datum/component/holderloving/Initialize(holder, del_parent_with_holder)
+/datum/component/holderloving/Initialize(holder)
if(!isitem(parent) || !holder)
return COMPONENT_INCOMPATIBLE
src.holder = holder
- if(del_parent_with_holder)
- src.del_parent_with_holder = del_parent_with_holder
/datum/component/holderloving/RegisterWithParent()
- RegisterSignal(holder, COMSIG_MOVABLE_MOVED, PROC_REF(check_my_loc))
RegisterSignal(holder, COMSIG_QDELETING, PROC_REF(holder_deleting))
- RegisterSignals(parent, list(
- COMSIG_ITEM_DROPPED,
- COMSIG_ITEM_EQUIPPED,
- COMSIG_ATOM_ENTERED,
- COMSIG_ATOM_EXITED,
- COMSIG_ITEM_STORED,
- ), PROC_REF(check_my_loc))
- RegisterSignal(parent, COMSIG_ITEM_PRE_UNEQUIP, PROC_REF(no_unequip))
+ RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(check_my_loc))
+ RegisterSignal(parent, COMSIG_ITEM_PRE_UNEQUIP, PROC_REF(can_be_moved))
/datum/component/holderloving/UnregisterFromParent()
- UnregisterSignal(holder, list(COMSIG_MOVABLE_MOVED, COMSIG_QDELETING))
- UnregisterSignal(parent, list(
- COMSIG_ITEM_DROPPED,
- COMSIG_ITEM_EQUIPPED,
- COMSIG_ATOM_ENTERED,
- COMSIG_ATOM_EXITED,
- COMSIG_ITEM_STORED,
- COMSIG_ITEM_PRE_UNEQUIP,
- ))
+ UnregisterSignal(holder, list(COMSIG_QDELETING))
+ UnregisterSignal(parent, list(COMSIG_ITEM_DROPPED, COMSIG_ITEM_PRE_UNEQUIP))
-/datum/component/holderloving/PostTransfer()
- if(!isitem(parent))
- return COMPONENT_INCOMPATIBLE
+/datum/component/holderloving/proc/holder_deleting(datum/source, force)
+ SIGNAL_HANDLER
-/datum/component/holderloving/InheritComponent(datum/component/holderloving/friend, i_am_original, list/arguments)
- if(i_am_original)
- holder = friend.holder
+ qdel(parent)
-/datum/component/holderloving/proc/check_valid_loc(atom/location)
- return (location == holder || ( location == holder.loc && ismob(holder.loc) ))
+/datum/component/holderloving/proc/is_valid_location(atom/location)
+ SHOULD_BE_PURE(TRUE)
-/datum/component/holderloving/proc/holder_deleting(datum/source, force)
- SIGNAL_HANDLER
+ if(location == holder || ( location == holder.loc && ismob(holder.loc)))
+ return TRUE
- if(del_parent_with_holder)
- qdel(parent)
- else
- qdel(src)
+ return FALSE
/datum/component/holderloving/proc/check_my_loc(datum/source)
SIGNAL_HANDLER
var/obj/item/item_parent = parent
- if(!check_valid_loc(item_parent.loc))
+ if(!is_valid_location(item_parent.loc))
item_parent.forceMove(holder)
-/datum/component/holderloving/proc/no_unequip(obj/item/I, force, atom/newloc, no_move, invdrop, silent)
+/datum/component/holderloving/proc/can_be_moved(obj/item/I, force, atom/newloc, no_move, invdrop, silent)
SIGNAL_HANDLER
- // just allow it
- if(force)
+ //allow the item to be dropped on the turf so it can be later moved back into the holder as a convinience tool
+ if(isturf(newloc) || is_valid_location(newloc))
return NONE
- // dropping onto a turf just forcemoves it back to the holder. let it happen, it's intuitive
- // no_move says it's just going to be moved a second time. so let it happen, it'll just be moved back if it's invalid anyway
- if(isturf(newloc) || no_move)
- return NONE
- // the item is being unequipped to somewhere invalid. stop it
+
+ //prevent this item from being moved anywhere else
return COMPONENT_ITEM_BLOCK_UNEQUIP
diff --git a/code/datums/components/item_equipped_movement_rustle.dm b/code/datums/components/item_equipped_movement_rustle.dm
index 435914dada785..115ad9120b495 100644
--- a/code/datums/components/item_equipped_movement_rustle.dm
+++ b/code/datums/components/item_equipped_movement_rustle.dm
@@ -2,8 +2,6 @@
///sound that plays, use an SFX define if there is multiple.
var/rustle_sounds = SFX_SUIT_STEP
- ///human that has the item equipped.
- var/mob/holder
///what move are we on.
var/move_counter = 0
@@ -42,26 +40,25 @@
sound_falloff_distance = falloff_distance
/datum/component/item_equipped_movement_rustle/proc/on_equip(datum/source, mob/equipper, slot)
+ SIGNAL_HANDLER
var/obj/item/our_item = parent
if(!(slot & our_item.slot_flags))
return
- SIGNAL_HANDLER
- holder = equipper
- RegisterSignal(holder, COMSIG_MOVABLE_MOVED, PROC_REF(try_step), override = TRUE)
+ RegisterSignal(equipper, COMSIG_MOVABLE_MOVED, PROC_REF(try_step))
-/datum/component/item_equipped_movement_rustle/proc/on_unequip(datum/source, mob/equipper, slot)
+/datum/component/item_equipped_movement_rustle/proc/on_unequip(datum/source, mob/dropped)
SIGNAL_HANDLER
move_counter = 0
- UnregisterSignal(equipper, COMSIG_MOVABLE_MOVED)
- holder = null
+ UnregisterSignal(dropped, COMSIG_MOVABLE_MOVED)
-/datum/component/item_equipped_movement_rustle/proc/try_step(obj/item/clothing/source)
+/datum/component/item_equipped_movement_rustle/proc/try_step(mob/source)
SIGNAL_HANDLER
-
+ if (source.moving_diagonally == FIRST_DIAG_STEP)
+ return
move_counter++
if(move_counter >= move_delay)
- play_rustle_sound()
+ play_rustle_sound(source)
move_counter = 0
-/datum/component/item_equipped_movement_rustle/proc/play_rustle_sound()
- playsound(parent, rustle_sounds, volume, sound_vary, sound_extra_range, sound_falloff_exponent, falloff_distance = sound_falloff_distance)
+/datum/component/item_equipped_movement_rustle/proc/play_rustle_sound(mob/source)
+ playsound(source, rustle_sounds, volume, sound_vary, sound_extra_range, sound_falloff_exponent, falloff_distance = sound_falloff_distance)
diff --git a/code/datums/components/leanable.dm b/code/datums/components/leanable.dm
new file mode 100644
index 0000000000000..3d2a4e0b73e5b
--- /dev/null
+++ b/code/datums/components/leanable.dm
@@ -0,0 +1,111 @@
+/// Things with this component can be leaned onto, optionally exclusive to RMB dragging
+/datum/component/leanable
+ /// How much will mobs that lean onto this object be offset
+ var/leaning_offset = 11
+ /// List of click modifiers that are required to be present for leaning to trigger
+ var/list/click_mods = null
+ /// Callback called for additional checks if a lean is valid
+ var/datum/callback/lean_check = null
+ /// Whenever this object can be leaned on from the same turf as its' own. Do not use without a custom lean_check!
+ var/same_turf = FALSE
+ /// List of mobs currently leaning on our parent
+ var/list/leaning_mobs = list()
+
+/datum/component/leanable/Initialize(leaning_offset = 11, list/click_mods = null, datum/callback/lean_check = null, same_turf = FALSE)
+ . = ..()
+ src.leaning_offset = leaning_offset
+ src.click_mods = click_mods
+ src.lean_check = lean_check
+ src.same_turf = same_turf
+
+/datum/component/leanable/RegisterWithParent()
+ RegisterSignal(parent, COMSIG_MOUSEDROPPED_ONTO, PROC_REF(mousedrop_receive))
+ RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved))
+
+/datum/component/leanable/Destroy(force)
+ for (var/mob/living/leaner as anything in leaning_mobs)
+ leaner.stop_leaning()
+ leaning_mobs = null
+ return ..()
+
+/datum/component/leanable/proc/on_moved(datum/source)
+ SIGNAL_HANDLER
+ for (var/mob/living/leaner as anything in leaning_mobs)
+ leaner.stop_leaning()
+
+/datum/component/leanable/proc/mousedrop_receive(atom/source, atom/movable/dropped, mob/user, params)
+ if (dropped != user)
+ return
+ if (islist(click_mods))
+ var/list/modifiers = params2list(params)
+ for (var/modifier in click_mods)
+ if (!LAZYACCESS(modifiers, modifier))
+ return
+ if (!iscarbon(dropped) && !iscyborg(dropped))
+ return
+ var/mob/living/leaner = dropped
+ if (INCAPACITATED_IGNORING(leaner, INCAPABLE_RESTRAINTS) || leaner.stat != CONSCIOUS || HAS_TRAIT(leaner, TRAIT_NO_TRANSFORM))
+ return
+ if (HAS_TRAIT_FROM(leaner, TRAIT_UNDENSE, LEANING_TRAIT))
+ return
+ var/turf/checked_turf = get_step(leaner, REVERSE_DIR(leaner.dir))
+ if (checked_turf != get_turf(source) && (!same_turf || get_turf(source) != get_turf(leaner)))
+ return
+ if (!isnull(lean_check) && !lean_check.Invoke(dropped, params))
+ return
+ leaner.start_leaning(source, leaning_offset)
+ leaning_mobs += leaner
+ RegisterSignals(leaner, list(COMSIG_LIVING_STOPPED_LEANING, COMSIG_QDELETING), PROC_REF(stopped_leaning))
+ return COMPONENT_CANCEL_MOUSEDROPPED_ONTO
+
+/datum/component/leanable/proc/stopped_leaning(datum/source)
+ SIGNAL_HANDLER
+ leaning_mobs -= source
+ UnregisterSignal(source, list(COMSIG_LIVING_STOPPED_LEANING, COMSIG_QDELETING))
+
+/mob/living/proc/start_leaning(atom/lean_target, leaning_offset)
+ var/new_x = lean_target.pixel_x + base_pixel_x + body_position_pixel_x_offset
+ var/new_y = lean_target.pixel_y + base_pixel_y + body_position_pixel_y_offset
+ switch(dir)
+ if(SOUTH)
+ new_y += leaning_offset
+ if(NORTH)
+ new_y -= leaning_offset
+ if(WEST)
+ new_x += leaning_offset
+ if(EAST)
+ new_x -= leaning_offset
+
+ animate(src, 0.2 SECONDS, pixel_x = new_x, pixel_y = new_y)
+ add_traits(list(TRAIT_UNDENSE, TRAIT_EXPANDED_FOV), LEANING_TRAIT)
+ visible_message(
+ span_notice("[src] leans against [lean_target]."),
+ span_notice("You lean against [lean_target]."),
+ )
+ RegisterSignals(src, list(
+ COMSIG_MOB_CLIENT_PRE_MOVE,
+ COMSIG_LIVING_DISARM_HIT,
+ COMSIG_LIVING_GET_PULLED,
+ COMSIG_MOVABLE_TELEPORTING,
+ ), PROC_REF(stop_leaning))
+ RegisterSignal(src, COMSIG_ATOM_POST_DIR_CHANGE, PROC_REF(lean_dir_changed))
+ update_fov()
+
+/mob/living/proc/stop_leaning()
+ SIGNAL_HANDLER
+ UnregisterSignal(src, list(
+ COMSIG_MOB_CLIENT_PRE_MOVE,
+ COMSIG_LIVING_DISARM_HIT,
+ COMSIG_LIVING_GET_PULLED,
+ COMSIG_MOVABLE_TELEPORTING,
+ COMSIG_ATOM_POST_DIR_CHANGE,
+ ))
+ animate(src, 0.2 SECONDS, pixel_x = base_pixel_x + body_position_pixel_x_offset, pixel_y = base_pixel_y + body_position_pixel_y_offset)
+ remove_traits(list(TRAIT_UNDENSE, TRAIT_EXPANDED_FOV), LEANING_TRAIT)
+ SEND_SIGNAL(src, COMSIG_LIVING_STOPPED_LEANING)
+ update_fov()
+
+/mob/living/proc/lean_dir_changed(atom/source, old_dir, new_dir)
+ SIGNAL_HANDLER
+ if (old_dir != new_dir)
+ INVOKE_ASYNC(src, PROC_REF(stop_leaning))
diff --git a/code/datums/components/ling_decoy_brain.dm b/code/datums/components/ling_decoy_brain.dm
index 917e8f2fbbd7c..d6368aeee0e71 100644
--- a/code/datums/components/ling_decoy_brain.dm
+++ b/code/datums/components/ling_decoy_brain.dm
@@ -6,7 +6,7 @@
VAR_FINAL/datum/action/changeling/mmi_talk/talk_action
/datum/component/ling_decoy_brain/Initialize(datum/antagonist/changeling/ling)
- if(!istype(parent, /obj/item/organ/internal/brain))
+ if(!istype(parent, /obj/item/organ/brain))
return COMPONENT_INCOMPATIBLE
if(isnull(ling))
stack_trace("[type] instantiated without a changeling to link to.")
@@ -22,13 +22,13 @@
return ..()
/datum/component/ling_decoy_brain/RegisterWithParent()
- var/obj/item/organ/internal/brain/ling_brain = parent
+ var/obj/item/organ/brain/ling_brain = parent
ling_brain.organ_flags &= ~ORGAN_VITAL
ling_brain.decoy_override = TRUE
RegisterSignal(ling_brain, COMSIG_ATOM_ENTERING, PROC_REF(entered_mmi))
/datum/component/ling_decoy_brain/UnregisterFromParent()
- var/obj/item/organ/internal/brain/ling_brain = parent
+ var/obj/item/organ/brain/ling_brain = parent
ling_brain.organ_flags |= ORGAN_VITAL
ling_brain.decoy_override = FALSE
UnregisterSignal(ling_brain, COMSIG_ATOM_ENTERING, PROC_REF(entered_mmi))
@@ -38,7 +38,7 @@
*
* Unfortunately this is hooked on Entering rather than its own dedicated MMI signal becuase MMI code is a fuck
*/
-/datum/component/ling_decoy_brain/proc/entered_mmi(obj/item/organ/internal/brain/source, atom/entering, atom/old_loc, ...)
+/datum/component/ling_decoy_brain/proc/entered_mmi(obj/item/organ/brain/source, atom/entering, atom/old_loc, ...)
SIGNAL_HANDLER
var/mob/living/the_real_ling = parent_ling.owner.current
diff --git a/code/datums/components/manual_blinking.dm b/code/datums/components/manual_blinking.dm
index 67229a8b85f5f..f7d7d65e5d144 100644
--- a/code/datums/components/manual_blinking.dm
+++ b/code/datums/components/manual_blinking.dm
@@ -1,7 +1,7 @@
/datum/component/manual_blinking
dupe_mode = COMPONENT_DUPE_UNIQUE
- var/obj/item/organ/internal/eyes/E
+ var/obj/item/organ/eyes/E
var/warn_grace = FALSE
var/warn_dying = FALSE
var/last_blink
@@ -69,18 +69,18 @@
/datum/component/manual_blinking/proc/check_added_organ(mob/who_cares, obj/item/organ/O)
SIGNAL_HANDLER
- var/obj/item/organ/internal/eyes/new_eyes = O
+ var/obj/item/organ/eyes/new_eyes = O
- if(istype(new_eyes,/obj/item/organ/internal/eyes))
+ if(istype(new_eyes,/obj/item/organ/eyes))
E = new_eyes
START_PROCESSING(SSdcs, src)
/datum/component/manual_blinking/proc/check_removed_organ(mob/who_cares, obj/item/organ/O)
SIGNAL_HANDLER
- var/obj/item/organ/internal/eyes/bye_beyes = O // oh come on, that's pretty good
+ var/obj/item/organ/eyes/bye_beyes = O // oh come on, that's pretty good
- if(istype(bye_beyes, /obj/item/organ/internal/eyes))
+ if(istype(bye_beyes, /obj/item/organ/eyes))
E = null
STOP_PROCESSING(SSdcs, src)
diff --git a/code/datums/components/manual_breathing.dm b/code/datums/components/manual_breathing.dm
index d8d4fea07d9ec..8e5f096766a92 100644
--- a/code/datums/components/manual_breathing.dm
+++ b/code/datums/components/manual_breathing.dm
@@ -1,7 +1,7 @@
/datum/component/manual_breathing
dupe_mode = COMPONENT_DUPE_UNIQUE
- var/obj/item/organ/internal/lungs/L
+ var/obj/item/organ/lungs/L
var/warn_grace = FALSE
var/warn_dying = FALSE
var/last_breath
@@ -71,18 +71,18 @@
/datum/component/manual_breathing/proc/check_added_organ(mob/who_cares, obj/item/organ/O)
SIGNAL_HANDLER
- var/obj/item/organ/internal/eyes/new_lungs = O
+ var/obj/item/organ/eyes/new_lungs = O
- if(istype(new_lungs,/obj/item/organ/internal/lungs))
+ if(istype(new_lungs,/obj/item/organ/lungs))
L = new_lungs
START_PROCESSING(SSdcs, src)
/datum/component/manual_breathing/proc/check_removed_organ(mob/who_cares, obj/item/organ/O)
SIGNAL_HANDLER
- var/obj/item/organ/internal/lungs/old_lungs = O
+ var/obj/item/organ/lungs/old_lungs = O
- if(istype(old_lungs, /obj/item/organ/internal/lungs))
+ if(istype(old_lungs, /obj/item/organ/lungs))
L = null
STOP_PROCESSING(SSdcs, src)
diff --git a/code/datums/components/manual_heart.dm b/code/datums/components/manual_heart.dm
index 09448acfc6722..d8d7485490029 100644
--- a/code/datums/components/manual_heart.dm
+++ b/code/datums/components/manual_heart.dm
@@ -56,7 +56,7 @@
pump_action.Grant(parent)
var/mob/living/carbon/carbon_parent = parent
- var/obj/item/organ/internal/heart/parent_heart = carbon_parent.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/parent_heart = carbon_parent.get_organ_slot(ORGAN_SLOT_HEART)
if(parent_heart && !HAS_TRAIT(carbon_parent, TRAIT_NOBLOOD) && carbon_parent.stat != DEAD)
START_PROCESSING(SSdcs, src)
COOLDOWN_START(src, heart_timer, pump_delay)
@@ -126,7 +126,7 @@
/datum/component/manual_heart/proc/check_added_organ(mob/organ_owner, obj/item/organ/new_organ)
SIGNAL_HANDLER
- var/obj/item/organ/internal/heart/new_heart = new_organ
+ var/obj/item/organ/heart/new_heart = new_organ
if(!istype(new_heart) || !check_valid())
return
@@ -141,7 +141,7 @@
/datum/component/manual_heart/proc/check_removed_organ(mob/organ_owner, obj/item/organ/removed_organ)
SIGNAL_HANDLER
- var/obj/item/organ/internal/heart/removed_heart = removed_organ
+ var/obj/item/organ/heart/removed_heart = removed_organ
if(istype(removed_heart))
pump_action.build_all_button_icons(UPDATE_BUTTON_STATUS)
@@ -150,7 +150,7 @@
///Helper proc to check if processing can be restarted.
/datum/component/manual_heart/proc/check_valid()
var/mob/living/carbon/carbon_parent = parent
- var/obj/item/organ/internal/heart/parent_heart = carbon_parent.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/parent_heart = carbon_parent.get_organ_slot(ORGAN_SLOT_HEART)
return !isnull(parent_heart) && !HAS_TRAIT(carbon_parent, TRAIT_NOBLOOD) && carbon_parent.stat != DEAD
///Action to pump your heart. Cooldown will always be set to 1 second less than the pump delay.
@@ -171,7 +171,7 @@
var/mob/living/carbon/heart_haver = owner
if(!istype(heart_haver) || HAS_TRAIT(heart_haver, TRAIT_NOBLOOD) || heart_haver.stat == DEAD)
return FALSE
- var/obj/item/organ/internal/heart/heart_havers_heart = heart_haver.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/heart_havers_heart = heart_haver.get_organ_slot(ORGAN_SLOT_HEART)
if(isnull(heart_havers_heart))
return FALSE
return ..()
diff --git a/code/datums/components/parry.dm b/code/datums/components/parry.dm
index a2cfe789cba4f..98bc9e3a84d07 100644
--- a/code/datums/components/parry.dm
+++ b/code/datums/components/parry.dm
@@ -101,8 +101,8 @@
parried = TRUE
if (source.firer != user)
- if (abs(source.Angle - dir2angle(user)) < 15)
- source.set_angle((source.Angle + 180) % 360 + rand(-3, 3))
+ if (abs(source.angle - dir2angle(user)) < 15)
+ source.set_angle((source.angle + 180) % 360 + rand(-3, 3))
else
source.set_angle(dir2angle(user) + rand(-3, 3))
user.visible_message(span_warning("[user] expertly parries [source] with [user.p_their()] bare hand!"), span_warning("You parry [source] with your hand!"))
diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm
index c206af62f704a..e9b7fad34fc20 100644
--- a/code/datums/components/pellet_cloud.dm
+++ b/code/datums/components/pellet_cloud.dm
@@ -270,22 +270,22 @@
/// Minor convenience function for creating each shrapnel piece with circle explosions, mostly stolen from the MIRV component
/datum/component/pellet_cloud/proc/pew(atom/target, landmine_victim)
- var/obj/projectile/P = new projectile_type(get_turf(parent))
+ var/obj/projectile/pellet = new projectile_type(get_turf(parent))
//Shooting Code:
- P.spread = 0
- P.original = target
- P.fired_from = parent
- P.firer = parent // don't hit ourself that would be really annoying
- P.impacted = list(WEAKREF(parent) = TRUE) // don't hit the target we hit already with the flak
- P.suppressed = SUPPRESSED_VERY // set the projectiles to make no message so we can do our own aggregate message
- P.preparePixelProjectile(target, parent)
- RegisterSignal(P, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(pellet_hit))
- RegisterSignals(P, list(COMSIG_PROJECTILE_RANGE_OUT, COMSIG_QDELETING), PROC_REF(pellet_range))
- pellets += P
- P.fire()
+ pellet.spread = 0
+ pellet.original = target
+ pellet.fired_from = parent
+ pellet.firer = parent // don't hit ourself that would be really annoying
+ pellet.impacted = list(WEAKREF(parent) = TRUE) // don't hit the target we hit already with the flak
+ pellet.suppressed = SUPPRESSED_VERY // set the projectiles to make no message so we can do our own aggregate message
+ pellet.preparePixelProjectile(target, parent)
+ RegisterSignal(pellet, COMSIG_PROJECTILE_SELF_ON_HIT, PROC_REF(pellet_hit))
+ RegisterSignals(pellet, list(COMSIG_PROJECTILE_RANGE_OUT, COMSIG_QDELETING), PROC_REF(pellet_range))
+ pellets += pellet
+ pellet.fire()
if(landmine_victim)
- P.process_hit(get_turf(target), target)
+ pellet.process_hit_loop(target)
///All of our pellets are accounted for, time to go target by target and tell them how many things they got hit by.
/datum/component/pellet_cloud/proc/finalize()
diff --git a/code/datums/components/phylactery.dm b/code/datums/components/phylactery.dm
index 572f816b5ad22..9c96416f8002c 100644
--- a/code/datums/components/phylactery.dm
+++ b/code/datums/components/phylactery.dm
@@ -169,7 +169,7 @@
var/mob/living/carbon/human/lich = new(parent_turf)
ADD_TRAIT(lich, TRAIT_NO_SOUL, LICH_TRAIT)
- var/obj/item/organ/internal/brain/new_lich_brain = lich.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/new_lich_brain = lich.get_organ_slot(ORGAN_SLOT_BRAIN)
if(new_lich_brain) // Prevent MMI cheese
new_lich_brain.organ_flags &= ~ORGAN_VITAL
new_lich_brain.decoy_override = TRUE
@@ -201,7 +201,7 @@
var/mob/living/carbon/carbon_body = corpse
for(var/obj/item/organ/to_drop as anything in carbon_body.organs)
// Skip the brain - it can disappear, we don't need it anymore
- if(istype(to_drop, /obj/item/organ/internal/brain))
+ if(istype(to_drop, /obj/item/organ/brain))
continue
// For the rest, drop all the organs onto the floor (for style)
diff --git a/code/datums/components/riding/riding.dm b/code/datums/components/riding/riding.dm
index e34e763ae8397..428b2a15bd18a 100644
--- a/code/datums/components/riding/riding.dm
+++ b/code/datums/components/riding/riding.dm
@@ -47,7 +47,7 @@
COOLDOWN_DECLARE(vehicle_move_cooldown)
-/datum/component/riding/Initialize(mob/living/riding_mob, force = FALSE, buckle_mob_flags= NONE, potion_boost = FALSE)
+/datum/component/riding/Initialize(mob/living/riding_mob, force = FALSE, buckle_mob_flags= NONE)
if(!ismovable(parent))
return COMPONENT_INCOMPATIBLE
@@ -55,7 +55,7 @@
riding_mob.updating_glide_size = FALSE
ride_check_flags |= buckle_mob_flags
- if(potion_boost)
+ if(HAS_TRAIT(parent, TRAIT_SPEED_POTIONED))
vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * 0.85, 0.01)
/datum/component/riding/RegisterWithParent()
diff --git a/code/datums/components/riding/riding_mob.dm b/code/datums/components/riding/riding_mob.dm
index 7a18e923afebe..45382a059c276 100644
--- a/code/datums/components/riding/riding_mob.dm
+++ b/code/datums/components/riding/riding_mob.dm
@@ -12,7 +12,7 @@
/// abilities that are always blacklisted from sharing
var/list/blacklist_abilities = list()
-/datum/component/riding/creature/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = NONE, potion_boost = FALSE)
+/datum/component/riding/creature/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = NONE)
if(!isliving(parent))
return COMPONENT_INCOMPATIBLE
@@ -205,7 +205,7 @@
/datum/component/riding/creature/human
can_be_driven = FALSE
-/datum/component/riding/creature/human/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = NONE, potion_boost = FALSE)
+/datum/component/riding/creature/human/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = NONE)
. = ..()
var/mob/living/carbon/human/human_parent = parent
human_parent.add_movespeed_modifier(/datum/movespeed_modifier/human_carry)
@@ -446,7 +446,7 @@
/datum/component/riding/creature/goliath/deathmatch
keytype = null
-/datum/component/riding/creature/goliath/Initialize(mob/living/riding_mob, force, ride_check_flags, potion_boost)
+/datum/component/riding/creature/goliath/Initialize(mob/living/riding_mob, force, ride_check_flags)
. = ..()
var/mob/living/basic/mining/goliath/goliath = parent
goliath.add_movespeed_modifier(/datum/movespeed_modifier/goliath_mount)
@@ -514,7 +514,7 @@
. = ..()
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(17, 46), TEXT_SOUTH = list(17,51), TEXT_EAST = list(27, 46), TEXT_WEST = list(6, 46)))
-/datum/component/riding/creature/leaper/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = NONE, potion_boost = FALSE)
+/datum/component/riding/creature/leaper/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = NONE)
. = ..()
RegisterSignal(riding_mob, COMSIG_MOVABLE_POINTED, PROC_REF(attack_pointed))
@@ -536,7 +536,7 @@
require_minigame = TRUE
ride_check_flags = RIDER_NEEDS_ARM | UNBUCKLE_DISABLED_RIDER
-/datum/component/riding/creature/raptor/Initialize(mob/living/riding_mob, force, ride_check_flags, potion_boost)
+/datum/component/riding/creature/raptor/Initialize(mob/living/riding_mob, force, ride_check_flags)
. = ..()
RegisterSignal(parent, COMSIG_PROJECTILE_PREHIT, PROC_REF(on_bullet_hit))
RegisterSignal(parent, COMSIG_MOB_AFTER_APPLY_DAMAGE, PROC_REF(on_attacked))
diff --git a/code/datums/components/riding/riding_vehicle.dm b/code/datums/components/riding/riding_vehicle.dm
index 3c55eae46688a..c7289e67c5c80 100644
--- a/code/datums/components/riding/riding_vehicle.dm
+++ b/code/datums/components/riding/riding_vehicle.dm
@@ -1,6 +1,6 @@
// For any /obj/vehicle's that can be ridden
-/datum/component/riding/vehicle/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = (RIDER_NEEDS_LEGS | RIDER_NEEDS_ARMS), potion_boost = FALSE)
+/datum/component/riding/vehicle/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = (RIDER_NEEDS_LEGS | RIDER_NEEDS_ARMS))
if(!isvehicle(parent))
return COMPONENT_INCOMPATIBLE
return ..()
diff --git a/code/datums/components/self_ignition.dm b/code/datums/components/self_ignition.dm
index db03b62d17275..a1635bcf715d1 100644
--- a/code/datums/components/self_ignition.dm
+++ b/code/datums/components/self_ignition.dm
@@ -33,7 +33,7 @@
if (HAS_TRAIT(owner, TRAIT_STASIS))
return
- if (owner.is_atmos_sealed(additional_flags = PLASMAMAN_PREVENT_IGNITION, check_hands = TRUE, ignore_chest_pressureprot = TRUE))
+ if (owner.is_atmos_sealed(additional_flags = PLASMAMAN_PREVENT_IGNITION, check_hands = TRUE, alt_flags = TRUE))
if (!owner.on_fire)
REMOVE_TRAIT(owner, TRAIT_IGNORE_FIRE_PROTECTION, REF(parent))
return
diff --git a/code/datums/components/sign_language.dm b/code/datums/components/sign_language.dm
index 054a4de4af0f0..478de762afc6c 100644
--- a/code/datums/components/sign_language.dm
+++ b/code/datums/components/sign_language.dm
@@ -75,7 +75,7 @@
SIGNAL_HANDLER
var/mob/living/carbon/carbon_parent = parent
- var/obj/item/organ/internal/tongue/tongue = carbon_parent.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = carbon_parent.get_organ_slot(ORGAN_SLOT_TONGUE)
if(tongue)
tongue.temp_say_mod = "signs"
//this speech relies on hands, which we have our own way of garbling speech when they're occupied, so we can have this always on
@@ -102,7 +102,7 @@
SIGNAL_HANDLER
var/mob/living/carbon/carbon_parent = parent
- var/obj/item/organ/internal/tongue/tongue = carbon_parent.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = carbon_parent.get_organ_slot(ORGAN_SLOT_TONGUE)
if(tongue)
tongue.temp_say_mod = ""
REMOVE_TRAIT(carbon_parent, TRAIT_SPEAKS_CLEARLY, SPEAKING_FROM_HANDS)
@@ -128,9 +128,9 @@
/datum/component/sign_language/proc/on_added_organ(mob/living/source, obj/item/organ/new_organ)
SIGNAL_HANDLER
- if(!istype(new_organ, /obj/item/organ/internal/tongue))
+ if(!istype(new_organ, /obj/item/organ/tongue))
return
- var/obj/item/organ/internal/tongue/new_tongue = new_organ
+ var/obj/item/organ/tongue/new_tongue = new_organ
new_tongue.temp_say_mod = "signs"
/// Signal proc for [COMSIG_MOB_TRY_SPEECH]
@@ -238,7 +238,7 @@
return SPELL_INVOCATION_ALWAYS_SUCCEED
/// Signal proc for [COMSIG_LIVING_TREAT_MESSAGE]
-/// Changes our message based on conditions that limit or alter our ability to communicate
+/// Changes our message based on conditions that limit or alter our ability to communicate
/datum/component/sign_language/proc/on_treat_living_message(atom/movable/source, list/message_args)
SIGNAL_HANDLER
diff --git a/code/datums/components/space_kidnap.dm b/code/datums/components/space_kidnap.dm
index 7d59a6d7f9fde..a95d66c3a72e2 100644
--- a/code/datums/components/space_kidnap.dm
+++ b/code/datums/components/space_kidnap.dm
@@ -39,7 +39,7 @@
var/obj/particles = new /obj/effect/abstract/particle_holder (victim, /particles/void_kidnap)
kidnapping = TRUE
- if(do_after(parent, kidnap_time, victim, extra_checks = victim.incapacitated))
+ if(do_after(parent, kidnap_time, victim, extra_checks = CALLBACK(src, PROC_REF(check_incapacitated), victim)))
take_them(victim)
qdel(particles)
@@ -67,3 +67,6 @@
/datum/component/space_kidnap/proc/succesfully_kidnapped(mob/living/carbon/human/kidnappee)
SEND_SIGNAL(parent, COMSIG_VOIDWALKER_SUCCESFUL_KIDNAP, kidnappee)
+
+/datum/component/space_kidnap/proc/check_incapacitated(mob/living/carbon/human/kidnappee)
+ return kidnappee.incapacitated
diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm
index afd8cce49e8c7..ca1bb82ace785 100644
--- a/code/datums/components/squeak.dm
+++ b/code/datums/components/squeak.dm
@@ -46,7 +46,7 @@
else if(isstructure(parent))
RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(use_squeak))
- if(istype(parent, /obj/item/organ/internal/liver))
+ if(istype(parent, /obj/item/organ/liver))
// Liver squeaking is depending on them functioning like a clown's liver
RegisterSignal(parent, SIGNAL_REMOVETRAIT(TRAIT_COMEDY_METABOLISM), PROC_REF(on_comedy_metabolism_removal))
diff --git a/code/datums/components/supermatter_crystal.dm b/code/datums/components/supermatter_crystal.dm
index 53a0797c2e1c0..4dac194c158b2 100644
--- a/code/datums/components/supermatter_crystal.dm
+++ b/code/datums/components/supermatter_crystal.dm
@@ -130,7 +130,7 @@
)
return
- var/obj/item/organ/internal/tongue/licking_tongue = user.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/licking_tongue = user.get_organ_slot(ORGAN_SLOT_TONGUE)
if(licking_tongue)
dust_mob(source, user,
span_danger("As [user] hesitantly leans in and licks [atom_source] everything goes silent before [user.p_their()] body starts to glow and burst into flames before flashing to ash!"),
diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm
index baf1efaee1dd5..8c5e10ddd655a 100644
--- a/code/datums/components/tackle.dm
+++ b/code/datums/components/tackle.dm
@@ -399,13 +399,13 @@
if(HAS_TRAIT(tackle_target, TRAIT_BRAWLING_KNOCKDOWN_BLOCKED)) // riot armor and such
defense_mod += 5
- var/obj/item/organ/external/tail/lizard/el_tail = tackle_target.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ var/obj/item/organ/tail/lizard/el_tail = tackle_target.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
if(HAS_TRAIT(tackle_target, TRAIT_TACKLING_TAILED_DEFENDER) && !el_tail)
defense_mod -= 1
if(el_tail && (el_tail.wag_flags & WAG_WAGGING)) // lizard tail wagging is robust and can swat away assailants!
defense_mod += 1
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = tackle_target.get_organ_slot(ORGAN_SLOT_SPINE)
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = tackle_target.get_organ_slot(ORGAN_SLOT_SPINE)
if(istype(potential_spine))
defense_mod += potential_spine.strength_bonus
@@ -434,14 +434,14 @@
attack_mod += 2
if(HAS_TRAIT(sacker, TRAIT_TACKLING_WINGED_ATTACKER))
- var/obj/item/organ/external/wings/moth/sacker_moth_wing = sacker.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
+ var/obj/item/organ/wings/moth/sacker_moth_wing = sacker.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
if(!sacker_moth_wing || sacker_moth_wing.burnt)
attack_mod -= 2
- var/obj/item/organ/external/wings/sacker_wing = sacker.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
+ var/obj/item/organ/wings/sacker_wing = sacker.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
if(sacker_wing)
attack_mod += 2
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = sacker.get_organ_slot(ORGAN_SLOT_SPINE)
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = sacker.get_organ_slot(ORGAN_SLOT_SPINE)
if(istype(potential_spine))
attack_mod += potential_spine.strength_bonus
@@ -508,7 +508,7 @@
if(HAS_TRAIT(user, TRAIT_HEAD_INJURY_BLOCKED))
oopsie_mod -= 6
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE) // Can't snap that spine if it's made of metal.
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE) // Can't snap that spine if it's made of metal.
if(istype(potential_spine))
oopsie_mod -= potential_spine.strength_bonus
diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm
index dcb8d63a3c43e..e903d84fab0f5 100644
--- a/code/datums/components/twohanded.dm
+++ b/code/datums/components/twohanded.dm
@@ -195,10 +195,10 @@
var/atom/atom_parent = parent
if(HAS_TRAIT(user, TRAIT_NO_TWOHANDING))
if(require_twohands)
- atom_parent.balloon_alert(user, "too weak to wield!")
+ atom_parent.balloon_alert(user, "can't wield!")
user.dropItemToGround(parent, force = TRUE)
else
- atom_parent.balloon_alert(user, "too weak to wield with both hands!")
+ atom_parent.balloon_alert(user, "can't wield with both hands!")
return COMPONENT_EQUIPPED_FAILED
if(user.get_inactive_held_item())
if(require_twohands)
diff --git a/code/datums/components/vision_hurting.dm b/code/datums/components/vision_hurting.dm
index acf2d186bb433..925395f3d39b6 100644
--- a/code/datums/components/vision_hurting.dm
+++ b/code/datums/components/vision_hurting.dm
@@ -16,7 +16,7 @@
for(var/mob/living/carbon/viewer in viewers(parent))
if(viewer.is_blind() || viewer.get_eye_protection() >= damage_per_second)
continue
- var/obj/item/organ/internal/eyes/burning_orbs = locate() in viewer.organs
+ var/obj/item/organ/eyes/burning_orbs = locate() in viewer.organs
if(!burning_orbs)
continue
burning_orbs.apply_organ_damage(damage_per_second * seconds_per_tick)
diff --git a/code/datums/diseases/advance/symptoms/deafness.dm b/code/datums/diseases/advance/symptoms/deafness.dm
index c93d94023df91..bf096a9fb4ad3 100644
--- a/code/datums/diseases/advance/symptoms/deafness.dm
+++ b/code/datums/diseases/advance/symptoms/deafness.dm
@@ -45,7 +45,7 @@
return
var/mob/living/carbon/infected_mob = advanced_disease.affected_mob
- var/obj/item/organ/internal/ears/ears = infected_mob.get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = infected_mob.get_organ_slot(ORGAN_SLOT_EARS)
switch(advanced_disease.stage)
if(3, 4)
diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm
index 79c4909d27702..2848ec484b3cf 100644
--- a/code/datums/diseases/advance/symptoms/sensory.dm
+++ b/code/datums/diseases/advance/symptoms/sensory.dm
@@ -95,13 +95,13 @@
switch(advanced_disease.stage)
if(4, 5)
if(advanced_disease.has_required_infectious_organ(infected_mob, ORGAN_SLOT_EARS))
- var/obj/item/organ/internal/ears/ears = infected_mob.get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = infected_mob.get_organ_slot(ORGAN_SLOT_EARS)
ears.adjustEarDamage(-4, -4)
if(!advanced_disease.has_required_infectious_organ(infected_mob, ORGAN_SLOT_EYES))
return
- var/obj/item/organ/internal/eyes/eyes = infected_mob.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = infected_mob.get_organ_slot(ORGAN_SLOT_EYES)
infected_mob.adjust_temp_blindness(-4 SECONDS)
infected_mob.adjust_eye_blur(-4 SECONDS)
diff --git a/code/datums/diseases/advance/symptoms/vision.dm b/code/datums/diseases/advance/symptoms/vision.dm
index e53faf5bac51e..cc9e70a24213d 100644
--- a/code/datums/diseases/advance/symptoms/vision.dm
+++ b/code/datums/diseases/advance/symptoms/vision.dm
@@ -42,7 +42,7 @@
return
var/mob/living/carbon/infected_mob = source_disease.affected_mob
- var/obj/item/organ/internal/eyes/eyes = infected_mob.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = infected_mob.get_organ_slot(ORGAN_SLOT_EYES)
switch(source_disease.stage)
if(1, 2)
diff --git a/code/datums/diseases/gastrolisis.dm b/code/datums/diseases/gastrolisis.dm
index aab0fcded1d67..f7348c38cb889 100644
--- a/code/datums/diseases/gastrolisis.dm
+++ b/code/datums/diseases/gastrolisis.dm
@@ -37,9 +37,9 @@
if(isopenturf(OT))
OT.MakeSlippery(TURF_WET_LUBE, 100)
if(4)
- var/obj/item/organ/internal/eyes/eyes = locate(/obj/item/organ/internal/eyes/snail) in affected_mob.organs
+ var/obj/item/organ/eyes/eyes = locate(/obj/item/organ/eyes/snail) in affected_mob.organs
if(!eyes && SPT_PROB(2.5, seconds_per_tick))
- var/obj/item/organ/internal/eyes/snail/new_eyes = new()
+ var/obj/item/organ/eyes/snail/new_eyes = new()
new_eyes.Insert(affected_mob)
affected_mob.visible_message(span_warning("[affected_mob]'s eyes fall out, with snail eyes taking its place!"), \
span_userdanger("You scream in pain as your eyes are pushed out by your new snail eyes!"))
@@ -57,9 +57,9 @@
affected_mob.emote("scream")
return
- var/obj/item/organ/internal/tongue/tongue = locate(/obj/item/organ/internal/tongue/snail) in affected_mob.organs
+ var/obj/item/organ/tongue/tongue = locate(/obj/item/organ/tongue/snail) in affected_mob.organs
if(!tongue && SPT_PROB(2.5, seconds_per_tick))
- var/obj/item/organ/internal/tongue/snail/new_tongue = new()
+ var/obj/item/organ/tongue/snail/new_tongue = new()
new_tongue.Insert(affected_mob)
to_chat(affected_mob, span_userdanger("You feel your speech slow down..."))
return
@@ -84,13 +84,13 @@
. = ..()
if(affected_mob && !is_species(affected_mob, /datum/species/snail)) //undo all the snail fuckening
var/mob/living/carbon/human/H = affected_mob
- var/obj/item/organ/internal/tongue/tongue = locate(/obj/item/organ/internal/tongue/snail) in H.organs
+ var/obj/item/organ/tongue/tongue = locate(/obj/item/organ/tongue/snail) in H.organs
if(tongue)
- var/obj/item/organ/internal/tongue/new_tongue = new H.dna.species.mutanttongue ()
+ var/obj/item/organ/tongue/new_tongue = new H.dna.species.mutanttongue ()
new_tongue.Insert(H)
- var/obj/item/organ/internal/eyes/eyes = locate(/obj/item/organ/internal/eyes/snail) in H.organs
+ var/obj/item/organ/eyes/eyes = locate(/obj/item/organ/eyes/snail) in H.organs
if(eyes)
- var/obj/item/organ/internal/eyes/new_eyes = new H.dna.species.mutanteyes ()
+ var/obj/item/organ/eyes/new_eyes = new H.dna.species.mutanteyes ()
new_eyes.Insert(H)
var/obj/item/storage/backpack/bag = H.get_item_by_slot(ITEM_SLOT_BACK)
if(istype(bag, /obj/item/storage/backpack/snail))
diff --git a/code/datums/diseases/parasitic_infection.dm b/code/datums/diseases/parasitic_infection.dm
index 64bb59f01fd96..53b61266271fa 100644
--- a/code/datums/diseases/parasitic_infection.dm
+++ b/code/datums/diseases/parasitic_infection.dm
@@ -43,7 +43,7 @@
to_chat(affected_mob, span_warning("You feel much, MUCH lighter!"))
affected_mob.vomit(VOMIT_CATEGORY_BLOOD, lost_nutrition = 20)
// disease code already checks if the liver exists otherwise it is cured
- var/obj/item/organ/internal/liver/affected_liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/affected_liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
affected_liver.Remove(affected_mob)
affected_liver.forceMove(get_turf(affected_mob))
cure()
diff --git a/code/datums/dna.dm b/code/datums/dna.dm
index 5a7391f7825e3..f084184f850e3 100644
--- a/code/datums/dna.dm
+++ b/code/datums/dna.dm
@@ -919,7 +919,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
/mob/living/carbon/human/proc/something_horrible_mindmelt()
if(!is_blind())
- var/obj/item/organ/internal/eyes/eyes = locate(/obj/item/organ/internal/eyes) in organs
+ var/obj/item/organ/eyes/eyes = locate(/obj/item/organ/eyes) in organs
if(!eyes)
return
eyes.Remove(src)
diff --git a/code/datums/drift_handler.dm b/code/datums/drift_handler.dm
index 7000483f9ab11..2153058436470 100644
--- a/code/datums/drift_handler.dm
+++ b/code/datums/drift_handler.dm
@@ -205,7 +205,7 @@
/datum/drift_handler/proc/attempt_halt(mob/source, movement_dir, continuous_move, atom/backup)
SIGNAL_HANDLER
- if (get_dir(source, backup) == movement_dir || source.loc == backup.loc)
+ if ((backup.density || !backup.CanPass(source, get_dir(backup, source))) && (get_dir(source, backup) == movement_dir || source.loc == backup.loc))
if (drift_force >= INERTIA_FORCE_THROW_FLOOR)
source.throw_at(backup, 1, floor(1 + (drift_force - INERTIA_FORCE_THROW_FLOOR) / INERTIA_FORCE_PER_THROW_FORCE), spin = FALSE)
return
diff --git a/code/datums/elements/basic_allergenic_attack.dm b/code/datums/elements/basic_allergenic_attack.dm
new file mode 100644
index 0000000000000..29bcbf9d79884
--- /dev/null
+++ b/code/datums/elements/basic_allergenic_attack.dm
@@ -0,0 +1,34 @@
+/// Attach to basic mobs, when they attack, they may trigger a food-based allergic reaction in the target.
+/datum/element/basic_allergenic_attack
+ element_flags = ELEMENT_BESPOKE
+ argument_hash_start_idx = 2
+ /// What allergen is being used. Corresponds to a FOODTYPE
+ var/allergen = NONE
+ /// Chance of the reaction happening
+ var/allergen_chance = 100
+ /// How much histamine to add to the target on reaction
+ var/histamine_add = 0
+
+/datum/element/basic_allergenic_attack/Attach(datum/target, allergen = NONE, allergen_chance = 100, histamine_add = 0)
+ . = ..()
+ if(!isbasicmob(target))
+ return ELEMENT_INCOMPATIBLE
+
+ src.allergen = allergen
+ src.allergen_chance = allergen_chance
+ src.histamine_add = histamine_add
+ RegisterSignal(target, COMSIG_HOSTILE_POST_ATTACKINGTARGET, PROC_REF(trigger_allergy))
+
+/datum/element/basic_allergenic_attack/Detach(datum/source, ...)
+ . = ..()
+ UnregisterSignal(source, COMSIG_HOSTILE_POST_ATTACKINGTARGET)
+
+/datum/element/basic_allergenic_attack/proc/trigger_allergy(mob/living/source, mob/living/target, result)
+ SIGNAL_HANDLER
+
+ if(result <= 0 || !istype(target))
+ return
+ if(!target.can_inject(source))
+ return
+
+ target.check_allergic_reaction(allergen, allergen_chance, histamine_add)
diff --git a/code/datums/elements/corrupted_organ.dm b/code/datums/elements/corrupted_organ.dm
index 504c6851e00c6..fda892887cacc 100644
--- a/code/datums/elements/corrupted_organ.dm
+++ b/code/datums/elements/corrupted_organ.dm
@@ -2,9 +2,9 @@
/// Mostly just does something spooky when it is removed
/datum/element/corrupted_organ
-/datum/element/corrupted_organ/Attach(datum/target)
+/datum/element/corrupted_organ/Attach(obj/item/organ/target)
. = ..()
- if (!isinternalorgan(target))
+ if (!istype(target) || (target.organ_flags & ORGAN_EXTERNAL))
return ELEMENT_INCOMPATIBLE
RegisterSignal(target, COMSIG_ORGAN_SURGICALLY_REMOVED, PROC_REF(on_removed))
diff --git a/code/datums/elements/dangerous_surgical_removal.dm b/code/datums/elements/dangerous_surgical_removal.dm
index a0dea1c8bdbd0..7c28580b8b76e 100644
--- a/code/datums/elements/dangerous_surgical_removal.dm
+++ b/code/datums/elements/dangerous_surgical_removal.dm
@@ -1,29 +1,43 @@
/**
- * ## DANGEROUS SURGICAL REMOVAL ELEMENT
+ * ## DANGEROUS ORGAN REMOVAL ELEMENT
*
- * Makes the organ explode when removed surgically.
+ * Makes the organ explode when removed (potentially surgically!).
* That's about it.
*/
-/datum/element/dangerous_surgical_removal
+/datum/element/dangerous_organ_removal
+ element_flags = ELEMENT_BESPOKE
+ argument_hash_start_idx = 2
-/datum/element/dangerous_surgical_removal/Attach(datum/target)
+ /// whether the removal needs to be surgical for it to explode. If you're adding more modes, just pass the signal directly instead
+ var/surgical
+
+/datum/element/dangerous_organ_removal/Attach(datum/target, surgical = FALSE)
. = ..()
if(!isorgan(target))
return ELEMENT_INCOMPATIBLE
- RegisterSignal(target, COMSIG_ORGAN_SURGICALLY_REMOVED, PROC_REF(on_surgical_removal))
-/datum/element/dangerous_surgical_removal/Detach(datum/source)
+ src.surgical = surgical
+
+ if(surgical)
+ RegisterSignal(target, COMSIG_ORGAN_SURGICALLY_REMOVED, PROC_REF(on_removal))
+ else
+ RegisterSignal(target, COMSIG_ORGAN_REMOVED, PROC_REF(on_removal))
+
+/datum/element/dangerous_organ_removal/Detach(datum/source)
. = ..()
- UnregisterSignal(source, COMSIG_ORGAN_SURGICALLY_REMOVED)
-/datum/element/dangerous_surgical_removal/proc/on_surgical_removal(obj/item/organ/source, mob/living/user, mob/living/carbon/old_owner, target_zone, obj/item/tool)
+ UnregisterSignal(source, list(COMSIG_ORGAN_SURGICALLY_REMOVED, COMSIG_ORGAN_REMOVED))
+
+/datum/element/dangerous_organ_removal/proc/on_removal(obj/item/organ/source, mob/living/user, mob/living/carbon/old_owner, target_zone, obj/item/tool)
SIGNAL_HANDLER
- if(source.organ_flags & (ORGAN_FAILING|ORGAN_EMP))
+
+ if(surgical && source.organ_flags & (ORGAN_FAILING|ORGAN_EMP))
return
if(user?.Adjacent(source))
source.audible_message("[source] explodes on [user]'s face!")
user.take_bodypart_damage(15)
else
source.audible_message("[source] explodes into tiny pieces!")
+
explosion(source, light_impact_range = 1, explosion_cause = source)
qdel(source)
diff --git a/code/datums/elements/earhealing.dm b/code/datums/elements/earhealing.dm
index f1b3465205928..ac69e8cc18ed5 100644
--- a/code/datums/elements/earhealing.dm
+++ b/code/datums/elements/earhealing.dm
@@ -26,7 +26,7 @@
/datum/element/earhealing/process(seconds_per_tick)
for(var/i in user_by_item)
var/mob/living/carbon/user = user_by_item[i]
- var/obj/item/organ/internal/ears/ears = user.get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = user.get_organ_slot(ORGAN_SLOT_EARS)
if(!ears || !ears.damage || (ears.organ_flags & ORGAN_FAILING) || IS_ROBOTIC_ORGAN(ears))
continue
ears.deaf = max(ears.deaf - 0.25 * seconds_per_tick, (ears.damage < ears.maxHealth ? 0 : 1)) // Do not clear deafness if our ears are too damaged
diff --git a/code/datums/elements/eyestab.dm b/code/datums/elements/eyestab.dm
index a6757f67fb39b..7821b26fab8f2 100644
--- a/code/datums/elements/eyestab.dm
+++ b/code/datums/elements/eyestab.dm
@@ -77,7 +77,7 @@
target.add_mood_event("eye_stab", /datum/mood_event/eye_stab)
log_combat(user, target, "attacked", "[item.name]", "(Combat mode: [user.combat_mode ? "On" : "Off"])")
- var/obj/item/organ/internal/eyes/eyes = target.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = target.get_organ_slot(ORGAN_SLOT_EYES)
if (!eyes)
return
diff --git a/code/datums/elements/frozen.dm b/code/datums/elements/frozen.dm
index df857cdd6efe6..b65d44096bd38 100644
--- a/code/datums/elements/frozen.dm
+++ b/code/datums/elements/frozen.dm
@@ -20,11 +20,11 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0
target_obj.add_atom_colour(GLOB.freon_color_matrix, TEMPORARY_COLOUR_PRIORITY)
target_obj.alpha -= 25
- if (isinternalorgan(target))
- var/obj/item/organ/internal/organ = target
+ if(isorgan(target))
+ var/obj/item/organ/organ = target
organ.organ_flags |= ORGAN_FROZEN
else if (isbodypart(target))
- for(var/obj/item/organ/internal/organ in target_obj.contents)
+ for(var/obj/item/organ/organ in target_obj.contents)
organ.organ_flags |= ORGAN_FROZEN
RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved))
@@ -40,11 +40,11 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0
obj_source.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, GLOB.freon_color_matrix)
obj_source.alpha += 25
- if (isinternalorgan(source))
- var/obj/item/organ/internal/organ = source
+ if (isorgan(source))
+ var/obj/item/organ/organ = source
organ.organ_flags &= ~ORGAN_FROZEN
else if (isbodypart(source))
- for(var/obj/item/organ/internal/organ in obj_source.contents)
+ for(var/obj/item/organ/organ in obj_source.contents)
organ.organ_flags &= ~ORGAN_FROZEN
return ..()
diff --git a/code/datums/elements/kneejerk.dm b/code/datums/elements/kneejerk.dm
index 78c0ba7654d69..52b2e00e19c93 100644
--- a/code/datums/elements/kneejerk.dm
+++ b/code/datums/elements/kneejerk.dm
@@ -28,7 +28,7 @@
var/selected_zone = user.zone_selected
var/obj/item/bodypart/leg/right = target.get_bodypart(BODY_ZONE_R_LEG)
var/obj/item/bodypart/leg/left = target.get_bodypart(BODY_ZONE_L_LEG)
- var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
if(!ishuman(target))
return
diff --git a/code/datums/elements/muffles_speech.dm b/code/datums/elements/muffles_speech.dm
index 5f5a36d2e33f3..2be3fb0b5d7b3 100644
--- a/code/datums/elements/muffles_speech.dm
+++ b/code/datums/elements/muffles_speech.dm
@@ -34,6 +34,8 @@
/datum/element/muffles_speech/proc/muzzle_talk(datum/source, list/speech_args)
SIGNAL_HANDLER
+ if(HAS_TRAIT(source, TRAIT_SIGN_LANG))
+ return
var/spoken_message = speech_args[SPEECH_MESSAGE]
if(spoken_message)
var/list/words = splittext(spoken_message, " ")
diff --git a/code/datums/elements/proficient_miner.dm b/code/datums/elements/proficient_miner.dm
index 9a382afce280e..a35b3951d4418 100644
--- a/code/datums/elements/proficient_miner.dm
+++ b/code/datums/elements/proficient_miner.dm
@@ -9,10 +9,19 @@
/datum/element/proficient_miner/proc/on_bump(mob/living/source, atom/target)
SIGNAL_HANDLER
- if(!ismineralturf(target))
+
+ if(!ismineralturf(target) || (istype(source) && source.stat != CONSCIOUS))
return
+
var/turf/closed/mineral/mineral_wall = target
- mineral_wall.gets_drilled(source)
+
+ if(!istype(mineral_wall, /turf/closed/mineral/gibtonite))
+ mineral_wall.gets_drilled(source)
+ return
+
+ var/turf/closed/mineral/gibtonite/gibtonite_wall = mineral_wall
+ if(gibtonite_wall.stage == GIBTONITE_UNSTRUCK)
+ mineral_wall.gets_drilled(source)
/datum/element/proficient_miner/Detach(datum/source, ...)
UnregisterSignal(source, COMSIG_MOVABLE_BUMP)
diff --git a/code/datums/elements/ridable.dm b/code/datums/elements/ridable.dm
index e68653b3d4a07..41385fd4ce907 100644
--- a/code/datums/elements/ridable.dm
+++ b/code/datums/elements/ridable.dm
@@ -12,10 +12,8 @@
/// The specific riding component subtype we're loading our instructions from, don't leave this as default please!
var/riding_component_type = /datum/component/riding
- /// If we have a xenobio red potion applied to us, we get split off so we can pass our special status onto new riding components
- var/potion_boosted = FALSE
-/datum/element/ridable/Attach(atom/movable/target, component_type = /datum/component/riding, potion_boost = FALSE)
+/datum/element/ridable/Attach(atom/movable/target, component_type = /datum/component/riding, force_rider_standup = TRUE)
. = ..()
if(!ismovable(target))
return COMPONENT_INCOMPATIBLE
@@ -26,7 +24,9 @@
target.can_buckle = TRUE
riding_component_type = component_type
- potion_boosted = potion_boost
+
+ if(force_rider_standup)
+ target.buckle_lying = 0
RegisterSignal(target, COMSIG_MOVABLE_PREBUCKLE, PROC_REF(check_mounting))
if(isvehicle(target))
@@ -35,7 +35,8 @@
RegisterSignal(target, COMSIG_MOB_STATCHANGE, PROC_REF(on_stat_change))
/datum/element/ridable/Detach(atom/movable/target)
- target.can_buckle = initial(target.can_buckle)
+ target.buckle_lying = target::buckle_lying
+ target.can_buckle = target::can_buckle
UnregisterSignal(target, list(COMSIG_MOVABLE_PREBUCKLE, COMSIG_SPEED_POTION_APPLIED, COMSIG_MOB_STATCHANGE))
return ..()
@@ -75,7 +76,7 @@
span_warning("You can't get a grip on [potential_rider] because your hands are full!"))
return COMPONENT_BLOCK_BUCKLE
- target_living.AddComponent(riding_component_type, potential_rider, force, ride_check_flags, potion_boost = potion_boosted)
+ target_living.AddComponent(riding_component_type, potential_rider, force, ride_check_flags)
/// Try putting the appropriate number of [riding offhand items][/obj/item/riding_offhand] into the target's hands, return FALSE if we can't
/datum/element/ridable/proc/equip_buckle_inhands(mob/living/carbon/human/user, amount_required = 1, atom/movable/target_movable, riding_target_override = null)
@@ -117,25 +118,18 @@
/datum/element/ridable/proc/check_potion(atom/movable/ridable_atom, obj/item/slimepotion/speed/speed_potion, mob/living/user)
SIGNAL_HANDLER
- if(potion_boosted)
+ if(HAS_TRAIT(ridable_atom, TRAIT_SPEED_POTIONED))
to_chat(user, span_warning("[ridable_atom] has already been coated with red, that's as fast as it'll go!"))
- return
+ return SPEED_POTION_STOP
if(ridable_atom.has_buckled_mobs()) // effect won't take place til the next time someone mounts it, so just prevent that situation
to_chat(user, span_warning("It's too dangerous to smear [speed_potion] on [ridable_atom] while it's being ridden!"))
- return
+ return SPEED_POTION_STOP
var/speed_limit = round(CONFIG_GET(number/movedelay/run_delay) * 0.85, 0.01)
var/datum/component/riding/theoretical_riding_component = riding_component_type
var/theoretical_speed = initial(theoretical_riding_component.vehicle_move_delay)
if(theoretical_speed <= speed_limit) // i say speed but this is actually move delay, so you have to be ABOVE the speed limit to pass
to_chat(user, span_warning("[ridable_atom] can't be made any faster!"))
- return
- Detach(ridable_atom)
- ridable_atom.AddElement(/datum/element/ridable, component_type = riding_component_type, potion_boost = TRUE)
- to_chat(user, span_notice("You slather the red gunk over [ridable_atom], making it faster."))
- ridable_atom.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
- ridable_atom.add_atom_colour(COLOR_RED, FIXED_COLOUR_PRIORITY)
- qdel(speed_potion)
- return SPEED_POTION_STOP
+ return SPEED_POTION_STOP
/// Remove all of the relevant [riding offhand items][/obj/item/riding_offhand] from the target
/datum/element/ridable/proc/unequip_buckle_inhands(mob/living/carbon/user, atom/movable/target_movable)
diff --git a/code/datums/elements/shiny_bait.dm b/code/datums/elements/shiny_bait.dm
new file mode 100644
index 0000000000000..72b34ec8808fc
--- /dev/null
+++ b/code/datums/elements/shiny_bait.dm
@@ -0,0 +1,34 @@
+///A component that gives fishing rod TRAIT_ROD_ATTRACT_SHINY_LOVERS when the attached item is used as bait.
+/datum/element/shiny_bait
+
+/datum/element/shiny_bait/Attach(obj/item/target)
+ . = ..()
+ if(!isitem(target))
+ return ELEMENT_INCOMPATIBLE
+ RegisterSignal(target, COMSIG_ITEM_FISHING_ROD_SLOTTED, PROC_REF(on_fishing_rod_slotted))
+ RegisterSignal(target, COMSIG_ITEM_FISHING_ROD_UNSLOTTED, PROC_REF(on_fishing_rod_unslotted))
+ if(istype(target.loc, /obj/item/fishing_rod))
+ ADD_TRAIT(target.loc, TRAIT_ROD_ATTRACT_SHINY_LOVERS, REF(src))
+ else if(istype(target, /obj/item/fishing_rod))
+ ADD_TRAIT(target, TRAIT_ROD_ATTRACT_SHINY_LOVERS, "[REF(src)]_rod")
+
+/datum/element/shiny_bait/Detach(obj/item/source)
+ UnregisterSignal(source, list(
+ COMSIG_ITEM_FISHING_ROD_SLOTTED,
+ COMSIG_ITEM_FISHING_ROD_UNSLOTTED,
+ ))
+ if(istype(source.loc, /obj/item/fishing_rod))
+ REMOVE_TRAIT(source.loc, TRAIT_ROD_ATTRACT_SHINY_LOVERS, REF(src))
+ else if(istype(source, /obj/item/fishing_rod))
+ REMOVE_TRAIT(source, TRAIT_ROD_ATTRACT_SHINY_LOVERS, "[REF(src)]_rod")
+ return ..()
+
+/datum/element/shiny_bait/proc/on_fishing_rod_slotted(datum/source, obj/item/fishing_rod/rod, slot)
+ SIGNAL_HANDLER
+ if(slot == ROD_SLOT_BAIT)
+ ADD_TRAIT(rod, TRAIT_ROD_ATTRACT_SHINY_LOVERS, REF(source))
+
+/datum/element/shiny_bait/proc/on_fishing_rod_unslotted(datum/source, obj/item/fishing_rod/rod, slot)
+ SIGNAL_HANDLER
+ if(slot == ROD_SLOT_BAIT)
+ REMOVE_TRAIT(rod, TRAIT_ROD_ATTRACT_SHINY_LOVERS, REF(source))
diff --git a/code/datums/elements/spooky.dm b/code/datums/elements/spooky.dm
index 89d53c4e99734..62189371b618e 100644
--- a/code/datums/elements/spooky.dm
+++ b/code/datums/elements/spooky.dm
@@ -1,13 +1,17 @@
/datum/element/spooky
element_flags = ELEMENT_BESPOKE
argument_hash_start_idx = 2
- var/too_spooky = TRUE //will it spawn a new instrument?
+ ///will it spawn a new instrument
+ var/too_spooky = TRUE
+ ///Once used, the element is detached
+ var/single_use = FALSE
-/datum/element/spooky/Attach(datum/target, too_spooky = TRUE)
+/datum/element/spooky/Attach(datum/target, too_spooky = TRUE, single_use = FALSE)
. = ..()
if(!isitem(target))
return ELEMENT_INCOMPATIBLE
src.too_spooky = too_spooky
+ src.single_use = single_use
RegisterSignal(target, COMSIG_ITEM_ATTACK, PROC_REF(spectral_attack))
/datum/element/spooky/Detach(datum/source)
@@ -26,6 +30,9 @@
if(U.getStaminaLoss() > 95)
to_chat(U, "Your ears weren't meant for this spectral sound.")
INVOKE_ASYNC(src, PROC_REF(spectral_change), U)
+ if(single_use)
+ to_chat(user, span_warning("You feel like [source] has lost its spookiness..."))
+ Detach(source)
return
if(ishuman(C))
@@ -42,6 +49,9 @@
to_chat(C, "DOOT")
to_chat(C, span_robot("You're feeling more bony."))
INVOKE_ASYNC(src, PROC_REF(spectral_change), H)
+ if(single_use)
+ to_chat(user, span_warning("You feel like [source] has lost its spookiness..."))
+ Detach(source)
else //the sound will spook monkeys.
C.set_jitter_if_lower(30 SECONDS)
diff --git a/code/datums/elements/undertile.dm b/code/datums/elements/undertile.dm
index 229b292b31ae9..54c4ebab6cd96 100644
--- a/code/datums/elements/undertile.dm
+++ b/code/datums/elements/undertile.dm
@@ -16,8 +16,10 @@
var/use_alpha
///We will switch between anchored and unanchored. for stuff like satchels that shouldn't be pullable under tiles but are otherwise unanchored
var/use_anchor
+ ///Will hiding the object tilt the tile it is beneath?
+ var/tilt_tile
-/datum/element/undertile/Attach(datum/target, invisibility_trait, invisibility_level = INVISIBILITY_MAXIMUM, tile_overlay, use_alpha = TRUE, use_anchor = FALSE)
+/datum/element/undertile/Attach(datum/target, invisibility_trait, invisibility_level = INVISIBILITY_MAXIMUM, tile_overlay, use_alpha = TRUE, use_anchor = FALSE, tilt_tile = FALSE)
. = ..()
if(!ismovable(target))
@@ -30,6 +32,7 @@
src.tile_overlay = tile_overlay
src.use_alpha = use_alpha
src.use_anchor = use_anchor
+ src.tilt_tile = tilt_tile
///called when a tile has been covered or uncovered
/datum/element/undertile/proc/hide(atom/movable/source, underfloor_accessibility)
@@ -55,6 +58,11 @@
if(tile_overlay)
T.add_overlay(tile_overlay)
+ if(tilt_tile)
+ T.transform = T.transform.Turn(2)
+ T.layer = (T.layer + 0.1) // prettier
+ T.appearance_flags |= PIXEL_SCALE
+
if(use_anchor)
source.set_anchored(TRUE)
@@ -76,6 +84,11 @@
if(tile_overlay)
T.overlays -= tile_overlay
+ if(tilt_tile)
+ T.transform = matrix()
+ T.layer = initial(T.layer)
+ T.appearance_flags &= PIXEL_SCALE
+
if(use_alpha)
source.alpha = initial(source.alpha)
diff --git a/code/datums/elements/watery_tile.dm b/code/datums/elements/watery_tile.dm
index 797eda39135b4..6e32c7bb15541 100644
--- a/code/datums/elements/watery_tile.dm
+++ b/code/datums/elements/watery_tile.dm
@@ -6,16 +6,54 @@
if(!isturf(target))
return ELEMENT_INCOMPATIBLE
- RegisterSignal(target, COMSIG_ATOM_ENTERED, PROC_REF(extinguish_atom))
+ RegisterSignals(target, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON), PROC_REF(enter_water))
+ RegisterSignal(target, COMSIG_ATOM_EXITED, PROC_REF(out_of_water))
+ for(var/atom/movable/movable as anything in target.contents)
+ if(!(movable.flags_1 & INITIALIZED_1)) //turfs initialize before movables
+ continue
+ enter_water(target, movable)
/datum/element/watery_tile/Detach(turf/source)
- UnregisterSignal(source, COMSIG_ATOM_ENTERED)
+ UnregisterSignal(source, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, COMSIG_ATOM_EXITED))
+ for(var/atom/movable/movable as anything in source.contents)
+ out_of_water(source, movable)
return ..()
-/datum/element/watery_tile/proc/extinguish_atom(atom/source, atom/movable/entered)
+/datum/element/watery_tile/proc/enter_water(atom/source, atom/movable/entered)
SIGNAL_HANDLER
- entered.extinguish()
+ RegisterSignal(entered, SIGNAL_ADDTRAIT(TRAIT_IMMERSED), PROC_REF(dip_in))
if(isliving(entered))
- var/mob/living/our_mob = entered
- our_mob.adjust_wet_stacks(3)
+ RegisterSignal(entered, SIGNAL_REMOVETRAIT(TRAIT_IMMERSED), PROC_REF(dip_out))
+ if(HAS_TRAIT(entered, TRAIT_IMMERSED))
+ dip_in(entered)
+
+/datum/element/watery_tile/proc/dip_in(atom/movable/source)
+ SIGNAL_HANDLER
+ source.extinguish()
+ if(!isliving(source))
+ return
+ var/mob/living/our_mob = source
+ our_mob.adjust_wet_stacks(3)
+ our_mob.apply_status_effect(/datum/status_effect/watery_tile_wetness)
+
+/datum/element/watery_tile/proc/out_of_water(atom/source, atom/movable/gone)
+ SIGNAL_HANDLER
+ UnregisterSignal(gone, list(SIGNAL_ADDTRAIT(TRAIT_IMMERSED), SIGNAL_REMOVETRAIT(TRAIT_IMMERSED)))
+ if(isliving(gone))
+ dip_out(gone)
+
+/datum/element/watery_tile/proc/dip_out(mob/living/source)
+ SIGNAL_HANDLER
+ source.remove_status_effect(/datum/status_effect/watery_tile_wetness)
+
+///Added by the watery_tile element. Keep adding wet stacks over time until removed from the watery turf.
+/datum/status_effect/watery_tile_wetness
+ id = "watery_tile_wetness"
+ alert_type = null
+ duration = -1
+ status_type = STATUS_EFFECT_UNIQUE
+
+/datum/status_effect/washing_regen/tick(seconds_between_ticks)
+ . = ..()
+ owner.adjust_wet_stacks(1)
diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm
index 0a888f60b233a..51eda8dcb73b6 100644
--- a/code/datums/emotes.dm
+++ b/code/datums/emotes.dm
@@ -52,6 +52,8 @@
var/sound
/// Does this emote vary in pitch?
var/vary = FALSE
+ /// If this emote's sound is affected by TTS pitch
+ var/affected_by_pitch = TRUE
/// Can only code call this event instead of the player.
var/only_forced_audio = FALSE
/// The cooldown between the uses of the emote.
@@ -105,7 +107,13 @@
if(tmp_sound && should_play_sound(user, intentional) && TIMER_COOLDOWN_FINISHED(user, "general_emote_audio_cooldown") && TIMER_COOLDOWN_FINISHED(user, type))
TIMER_COOLDOWN_START(user, type, specific_emote_audio_cooldown)
TIMER_COOLDOWN_START(user, "general_emote_audio_cooldown", general_emote_audio_cooldown)
- playsound(source = user,soundin = tmp_sound,vol = 50, vary = vary, ignore_walls = sound_wall_ignore)
+ var/frequency = null
+ if (affected_by_pitch && SStts.tts_enabled && SStts.pitch_enabled)
+ frequency = rand(MIN_EMOTE_PITCH, MAX_EMOTE_PITCH) * (1 + sqrt(abs(user.pitch)) * SIGN(user.pitch) * EMOTE_TTS_PITCH_MULTIPLIER)
+ else if(vary)
+ frequency = rand(MIN_EMOTE_PITCH, MAX_EMOTE_PITCH)
+ playsound(source = user,soundin = tmp_sound,vol = 50, vary = FALSE, ignore_walls = sound_wall_ignore, frequency = frequency)
+
var/is_important = emote_type & EMOTE_IMPORTANT
var/is_visual = emote_type & EMOTE_VISIBLE
diff --git a/code/datums/hud.dm b/code/datums/hud.dm
index fbe99dd8095ac..e81ded951febd 100644
--- a/code/datums/hud.dm
+++ b/code/datums/hud.dm
@@ -15,7 +15,6 @@ GLOBAL_LIST_INIT(huds, list(
DATA_HUD_DIAGNOSTIC = new /datum/atom_hud/data/diagnostic(),
DATA_HUD_BOT_PATH = new /datum/atom_hud/data/bot_path(),
DATA_HUD_ABDUCTOR = new /datum/atom_hud/abductor(),
- DATA_HUD_SENTIENT_DISEASE = new /datum/atom_hud/sentient_disease(),
DATA_HUD_AI_DETECT = new /datum/atom_hud/ai_detector(),
DATA_HUD_FAN = new /datum/atom_hud/data/human/fan_hud(),
DATA_HUD_MALF_APC = new /datum/atom_hud/data/malf_apc(),
diff --git a/code/datums/instability_meltdown.dm b/code/datums/instability_meltdown.dm
index d8e6fbd77ac9e..4e3a82fd376b5 100644
--- a/code/datums/instability_meltdown.dm
+++ b/code/datums/instability_meltdown.dm
@@ -72,8 +72,9 @@
/datum/instability_meltdown/organ_vomit/meltdown(mob/living/carbon/human/victim)
var/list/elligible_organs = list()
- for(var/obj/item/organ/internal/internal_organ in victim.organs) //make sure we dont get an implant or cavity item
- elligible_organs += internal_organ
+ for(var/obj/item/organ/organ as anything in victim.organs) //make sure we dont get an implant or cavity item
+ if(!(organ.organ_flags & ORGAN_EXTERNAL))
+ elligible_organs += organ
victim.vomit(VOMIT_CATEGORY_DEFAULT, lost_nutrition = 10)
if(!elligible_organs.len)
return
diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm
index 122eab2861e99..d0ad6544ca6e6 100644
--- a/code/datums/looping_sounds/_looping_sound.dm
+++ b/code/datums/looping_sounds/_looping_sound.dm
@@ -4,7 +4,7 @@
/datum/looping_sound
/// (list or soundfile) Since this can be either a list or a single soundfile you can have random sounds. May contain further lists but must contain a soundfile at the end. In a list, path must have also be assigned a value or it will be assigned 0 and not play.
var/mid_sounds
- /// The length of time to wait between playing mid_sounds.
+ /// The length of time to wait between playing mid_sounds. WARNING: Continuously looping sounds like the microwave, grav gen and fan sounds don't work very well with this, just don't set this if you are doing a continuous loop of machinery.
var/mid_length
/// Amount of time to add/take away from the mid length, randomly
var/mid_length_vary = 0
diff --git a/code/datums/looping_sounds/vents.dm b/code/datums/looping_sounds/vents.dm
index 016b21db9cad0..183c337ef9814 100644
--- a/code/datums/looping_sounds/vents.dm
+++ b/code/datums/looping_sounds/vents.dm
@@ -4,4 +4,3 @@
end_sound = 'sound/machines/fan/fan_stop.ogg'
end_sound = 1.5 SECONDS
mid_sounds = 'sound/machines/fan/fan_loop.ogg'
- mid_length = 2 SECONDS
diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm
index 9d6252855d3e1..e46467327ede7 100644
--- a/code/datums/martial/boxing.dm
+++ b/code/datums/martial/boxing.dm
@@ -107,7 +107,7 @@
if(honor_check(defender))
var/strength_bonus = HAS_TRAIT(attacker, TRAIT_STRENGTH) ? 2 : 0 //Investing into genetic strength improvements makes you a better boxer
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = attacker.get_organ_slot(ORGAN_SLOT_SPINE) //Getting a cyberspine also pushes you further than just mere meat
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = attacker.get_organ_slot(ORGAN_SLOT_SPINE) //Getting a cyberspine also pushes you further than just mere meat
if(istype(potential_spine))
strength_bonus *= potential_spine.strength_bonus
diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm
index cff0ea0e6d1c5..d179be2dc01bb 100644
--- a/code/datums/materials/_material.dm
+++ b/code/datums/materials/_material.dm
@@ -78,6 +78,26 @@ Simple datum which is instanced once per type and is used for every object of sa
/// The slowdown that is added to items.
var/added_slowdown = 0
+ /// Fish made of or infused with this material have their weight multiplied by this value.
+ var/fish_weight_modifier = 1
+
+ /// Additive bonus/malus to the fishing difficulty modifier of any rod made of this item. Negative is good, positive bad
+ var/fishing_difficulty_modifier = 0
+ /// Additive bonus/malus to the cast range of the fishing rod
+ var/fishing_cast_range = 0
+ /// The multiplier of how much experience is gained when using a fishing rod made of this material
+ var/fishing_experience_multiplier = 1
+ /// The multiplier to the completion gain of the fishing rod made of this material
+ var/fishing_completion_speed = 1
+ /// The multiplier of the bait/bobber speed of the fishing challenge for fishing rods made of this material
+ var/fishing_bait_speed_mult = 1
+ /// The multiplier of the deceleration/friction for fishing rods made of this material
+ var/fishing_deceleration_mult = 1
+ /// The multiplier of the bounciness of the bait/bobber upon hitting the edges of the minigame area
+ var/fishing_bounciness_mult = 1
+ /// The multiplier of negative velocity that pulls the bait/bobber of a fishing rod down when not holding the click
+ var/fishing_gravity_mult = 1
+
/** Handles initializing the material.
*
* Arguments:
@@ -100,7 +120,9 @@ Simple datum which is instanced once per type and is used for every object of sa
///This proc is called when the material becomes the one the object is composed of the most
/datum/material/proc/on_main_applied(atom/source, mat_amount, multiplier)
- return
+ SHOULD_CALL_PARENT(TRUE)
+ if(beauty_modifier >= 0.15 && HAS_TRAIT(source, TRAIT_FISHING_BAIT))
+ source.AddElement(/datum/element/shiny_bait)
/datum/material/proc/setup_glow(turf/on)
if(GET_TURF_PLANE_OFFSET(on) != GET_LOWEST_STACK_OFFSET(on.z)) // We ain't the bottom brother
@@ -126,7 +148,9 @@ Simple datum which is instanced once per type and is used for every object of sa
///This proc is called when the material is no longer the one the object is composed by the most
/datum/material/proc/on_main_removed(atom/source, mat_amount, multiplier)
- return
+ SHOULD_CALL_PARENT(TRUE)
+ if(beauty_modifier >= 0.15 && HAS_TRAIT(source, TRAIT_FISHING_BAIT))
+ source.RemoveElement(/datum/element/shiny_bait)
/**
* This proc is called when the mat is found in an item that's consumed by accident. see /obj/item/proc/on_accidental_consumption.
diff --git a/code/datums/materials/alloys.dm b/code/datums/materials/alloys.dm
index d13a88c49c3a2..d8c107d21aad6 100644
--- a/code/datums/materials/alloys.dm
+++ b/code/datums/materials/alloys.dm
@@ -42,6 +42,20 @@
composition = list(/datum/material/iron=1, /datum/material/plasma=1)
mat_rust_resistance = RUST_RESISTANCE_REINFORCED
added_slowdown = 0.05
+ fish_weight_modifier = 1.75
+ fishing_difficulty_modifier = 5
+ fishing_experience_multiplier = 1.1
+ fishing_gravity_mult = 1.6
+
+/datum/material/alloy/plasteel/on_applied(atom/target, mat_amount, multiplier)
+ . = ..()
+ if(istype(target, /obj/item/fishing_rod))
+ ADD_TRAIT(target, TRAIT_ROD_LAVA_USABLE, REF(src))
+
+/datum/material/alloy/plasteel/on_removed(atom/target, mat_amount, multiplier)
+ . = ..()
+ if(istype(target, /obj/item/fishing_rod))
+ REMOVE_TRAIT(target, TRAIT_ROD_LAVA_USABLE, REF(src))
/** Plastitanium
*
@@ -65,6 +79,20 @@
)
composition = list(/datum/material/titanium=1, /datum/material/plasma=1)
mat_rust_resistance = RUST_RESISTANCE_TITANIUM
+ fish_weight_modifier = 1.1
+ fishing_difficulty_modifier = -10
+ fishing_cast_range = 1
+ fishing_experience_multiplier = 0.95
+
+/datum/material/alloy/plastitanium/on_applied(atom/target, mat_amount, multiplier)
+ . = ..()
+ if(istype(target, /obj/item/fishing_rod))
+ ADD_TRAIT(target, TRAIT_ROD_LAVA_USABLE, REF(src))
+
+/datum/material/alloy/plastitanium/on_removed(atom/target, mat_amount, multiplier)
+ . = ..()
+ if(istype(target, /obj/item/fishing_rod))
+ REMOVE_TRAIT(target, TRAIT_ROD_LAVA_USABLE, REF(src))
/** Plasmaglass
*
@@ -90,6 +118,10 @@
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
composition = list(/datum/material/glass=1, /datum/material/plasma=0.5)
+ fish_weight_modifier = 1.2
+ fishing_difficulty_modifier = 5
+ fishing_experience_multiplier = 1.3
+ fishing_gravity_mult = 0.9
/** Titaniumglass
*
@@ -114,6 +146,10 @@
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
composition = list(/datum/material/glass=1, /datum/material/titanium=0.5)
+ fish_weight_modifier = 1.25
+ fishing_difficulty_modifier = -5
+ fishing_experience_multiplier = 1.25
+ fishing_gravity_mult = 0.95
/** Plastitanium Glass
*
@@ -139,6 +175,9 @@
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
composition = list(/datum/material/glass=1, /datum/material/alloy/plastitanium=0.5)
+ fish_weight_modifier = 1.2
+ fishing_experience_multiplier = 1.5
+ fishing_gravity_mult = 0.9
/** Alien Alloy
*
@@ -164,13 +203,26 @@
)
composition = list(/datum/material/iron=2, /datum/material/plasma=2)
added_slowdown = 0.1
+ fish_weight_modifier = 2.4
+ fishing_difficulty_modifier = -25
+ fishing_cast_range = 2
+ fishing_experience_multiplier = 0.5
+ fishing_completion_speed = 2
+ fishing_bait_speed_mult = 1.25
+ fishing_deceleration_mult = 1.5
+ fishing_bounciness_mult = 0.5
+ fishing_gravity_mult = 2
/datum/material/alloy/alien/on_applied(atom/target, mat_amount, multiplier)
. = ..()
if(isobj(target))
target.AddElement(/datum/element/obj_regen, _rate=0.02) // 2% regen per tick.
+ if(istype(target, /obj/item/fishing_rod))
+ ADD_TRAIT(target, TRAIT_ROD_LAVA_USABLE, REF(src))
/datum/material/alloy/alien/on_removed(atom/target, mat_amount, multiplier)
. = ..()
if(isobj(target))
target.RemoveElement(/datum/element/obj_regen, _rate=0.02)
+ if(istype(target, /obj/item/fishing_rod))
+ REMOVE_TRAIT(target, TRAIT_ROD_LAVA_USABLE, REF(src))
diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm
index 76d44c1f16455..f21759f42a7dd 100644
--- a/code/datums/materials/basemats.dm
+++ b/code/datums/materials/basemats.dm
@@ -19,6 +19,8 @@
minimum_value_override = 0
tradable = TRUE
tradable_base_quantity = MATERIAL_QUANTITY_COMMON
+ fish_weight_modifier = 1.3
+ fishing_gravity_mult = 1.1
/datum/material/iron/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5)
@@ -51,6 +53,13 @@
mineral_rarity = MATERIAL_RARITY_COMMON
points_per_unit = 1 / SHEET_MATERIAL_AMOUNT
texture_layer_icon_state = "shine"
+ fish_weight_modifier = 1.2
+ fishing_difficulty_modifier = 5
+ fishing_experience_multiplier = 1.2
+ fishing_bait_speed_mult = 0.9
+ fishing_deceleration_mult = 1.2
+ fishing_bounciness_mult = 0.5
+ fishing_gravity_mult = 0.9
/datum/material/glass/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5, sharpness = TRUE) //cronch
@@ -92,6 +101,14 @@ Unless you know what you're doing, only use the first three numbers. They're in
mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS
points_per_unit = 16 / SHEET_MATERIAL_AMOUNT
texture_layer_icon_state = "shine"
+ fish_weight_modifier = 1.35
+ fishing_difficulty_modifier = -5
+ fishing_experience_multiplier = 0.85
+ fishing_completion_speed = 1.1
+ fishing_bait_speed_mult = 1.1
+ fishing_deceleration_mult = 1.1
+ fishing_bounciness_mult = 0.9
+ fishing_gravity_mult = 1.15
/datum/material/silver/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5)
@@ -120,6 +137,15 @@ Unless you know what you're doing, only use the first three numbers. They're in
mineral_rarity = MATERIAL_RARITY_PRECIOUS
points_per_unit = 18 / SHEET_MATERIAL_AMOUNT
texture_layer_icon_state = "shine"
+ fish_weight_modifier = 1.5
+ fishing_difficulty_modifier = -10
+ fishing_cast_range = 1
+ fishing_experience_multiplier = 0.75
+ fishing_completion_speed = 1.2
+ fishing_bait_speed_mult = 1.3
+ fishing_deceleration_mult = 1.2
+ fishing_bounciness_mult = 0.8
+ fishing_gravity_mult = 1.25
/datum/material/gold/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5)
@@ -142,12 +168,23 @@ Unless you know what you're doing, only use the first three numbers. They're in
alpha = 132
starlight_color = COLOR_BLUE_LIGHT
value_per_unit = 500 / SHEET_MATERIAL_AMOUNT
+ strength_modifier = 1.1
+ integrity_modifier = 1.25
tradable = TRUE
tradable_base_quantity = MATERIAL_QUANTITY_EXOTIC
beauty_modifier = 0.3
armor_modifiers = list(MELEE = 1.3, BULLET = 1.3, LASER = 0.6, ENERGY = 1, BOMB = 1.2, BIO = 1, FIRE = 1, ACID = 1)
mineral_rarity = MATERIAL_RARITY_RARE
points_per_unit = 50 / SHEET_MATERIAL_AMOUNT
+ fish_weight_modifier = 1.4
+ fishing_difficulty_modifier = -13
+ fishing_cast_range = -1
+ fishing_experience_multiplier = 0.7
+ fishing_completion_speed = 1.25
+ fishing_bait_speed_mult = 1.3
+ fishing_deceleration_mult = 1.25
+ fishing_bounciness_mult = 0.8
+ fishing_gravity_mult = 1.2
/datum/material/diamond/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(15, BRUTE, BODY_ZONE_HEAD, wound_bonus = 7)
@@ -174,6 +211,12 @@ Unless you know what you're doing, only use the first three numbers. They're in
armor_modifiers = list(MELEE = 1.5, BULLET = 1.4, LASER = 0.5, ENERGY = 0.5, FIRE = 1, ACID = 1)
mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS
points_per_unit = 30 / SHEET_MATERIAL_AMOUNT
+ fish_weight_modifier = 2
+ fishing_completion_speed = 0.9
+ fishing_bait_speed_mult = 0.8
+ fishing_deceleration_mult = 1.4
+ fishing_bounciness_mult = 0.6
+ fishing_gravity_mult = 1.6
/datum/material/uranium/on_applied(atom/source, mat_amount, multiplier)
. = ..()
@@ -217,18 +260,25 @@ Unless you know what you're doing, only use the first three numbers. They're in
armor_modifiers = list(MELEE = 1.4, BULLET = 0.7, ENERGY = 1.2, BIO = 1.2, ACID = 0.5)
mineral_rarity = MATERIAL_RARITY_PRECIOUS
points_per_unit = 15 / SHEET_MATERIAL_AMOUNT
+ fish_weight_modifier = 1.3
+ fishing_deceleration_mult = 1.3
+ fishing_bounciness_mult = 0.6
/datum/material/plasma/on_applied(atom/source, mat_amount, multiplier)
. = ..()
if(ismovable(source))
source.AddElement(/datum/element/firestacker, 1 * multiplier)
source.AddComponent(/datum/component/combustible_flooder, "plasma", mat_amount * 0.05 * multiplier) //Empty temp arg, fully dependent on whatever ignited it.
+ if(istype(source, /obj/item/fishing_rod))
+ ADD_TRAIT(source, TRAIT_ROD_LAVA_USABLE, REF(src))
/datum/material/plasma/on_removed(atom/source, mat_amount, multiplier)
. = ..()
source.RemoveElement(/datum/element/firestacker, mat_amount = 1 * multiplier)
qdel(source.GetComponent(/datum/component/combustible_flooder))
qdel(source.GetComponent(/datum/component/explodable))
+ if(istype(source, /obj/item/fishing_rod))
+ ADD_TRAIT(source, TRAIT_ROD_LAVA_USABLE, REF(src))
/datum/material/plasma/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/toxin/plasma, rand(6, 8))
@@ -258,6 +308,35 @@ Unless you know what you're doing, only use the first three numbers. They're in
tradable = TRUE
tradable_base_quantity = MATERIAL_QUANTITY_EXOTIC
texture_layer_icon_state = "shine"
+ fish_weight_modifier = 1.3
+ fishing_difficulty_modifier = -5
+ fishing_cast_range = 5 //space-bending scifi magic
+ fishing_experience_multiplier = 0.85
+ fishing_completion_speed = 1.1
+ fishing_bait_speed_mult = 1.2
+ fishing_deceleration_mult = 0.9
+ fishing_bounciness_mult = 1.1
+
+/datum/material/bluespace/on_main_applied(atom/source, mat_amount, multiplier)
+ . = ..()
+ if(istype(source, /obj/item/fishing_rod))
+ RegisterSignal(source, COMSIG_ROD_BEGIN_FISHING, PROC_REF(on_begin_fishing))
+
+/datum/material/bluespace/proc/on_begin_fishing(obj/item/fishing_rod/rod, datum/fishing_challenge/challenge)
+ SIGNAL_HANDLER
+ if(prob(67))
+ return
+ var/list/elegible_fish_sources = flatten_list(GLOB.preset_fish_sources)
+ for(var/datum/fish_source/source as anything in elegible_fish_sources)
+ if(source.fish_source_flags & FISH_SOURCE_FLAG_NO_BLUESPACE_ROD)
+ elegible_fish_sources -= source
+ var/datum/fish_source/new_source = pick(elegible_fish_sources)
+ challenge.register_reward_signals(new_source)
+
+/datum/material/bluespace/on_main_removed(atom/source, mat_amount, multiplier)
+ . = ..()
+ if(istype(source, /obj/item/fishing_rod))
+ UnregisterSignal(source, COMSIG_ROD_BEGIN_FISHING)
/datum/material/bluespace/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/bluespace, rand(5, 8))
@@ -284,17 +363,50 @@ Unless you know what you're doing, only use the first three numbers. They're in
armor_modifiers = list(BOMB = 100, FIRE = 10) //Clowns cant be blown away.
mineral_rarity = MATERIAL_RARITY_UNDISCOVERED
points_per_unit = 60 / SHEET_MATERIAL_AMOUNT
+ fishing_difficulty_modifier = 20 //can't get a good grip on slipperiness.
+ fishing_cast_range = 3 //long slide
+ fishing_experience_multiplier = 1.6
+ fishing_completion_speed = 1.3
+ fishing_bait_speed_mult = 1.5
+ fishing_deceleration_mult = 0.5
+ fishing_bounciness_mult = 2
/datum/material/bananium/on_applied(atom/source, mat_amount, multiplier)
. = ..()
source.LoadComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50 * multiplier, falloff_exponent = 20)
source.AddComponent(/datum/component/slippery, min(mat_amount / 10 * multiplier, 80 * multiplier))
+/datum/material/bananium/on_main_applied(atom/source, mat_amount, multiplier)
+ . = ..()
+ if(istype(source, /obj/item/fishing_rod))
+ RegisterSignal(source, COMSIG_ROD_BEGIN_FISHING, PROC_REF(on_begin_fishing))
+
+/datum/material/bananium/proc/on_begin_fishing(obj/item/fishing_rod/rod, datum/fishing_challenge/challenge)
+ SIGNAL_HANDLER
+ if(prob(40))
+ RegisterSignal(challenge, COMSIG_FISHING_CHALLENGE_ROLL_REWARD, PROC_REF(roll_funny_fish))
+
+/datum/material/bananium/proc/roll_funny_fish(datum/source, obj/item/fishing_rod/rod, mob/fisherman, atom/location, list/rewards)
+ SIGNAL_HANDLER
+ var/static/list/funny_fish = list(
+ /obj/item/fish/clownfish = 5,
+ /obj/item/fish/clownfish/lube = 3,
+ /obj/item/fish/soul = 2,
+ /obj/item/fish/skin_crab = 2,
+ /obj/item/fish/donkfish = 2,
+ )
+ rewards += pick_weight(funny_fish)
+
/datum/material/bananium/on_removed(atom/source, mat_amount, multiplier)
. = ..()
qdel(source.GetComponent(/datum/component/slippery))
qdel(source.GetComponent(/datum/component/squeak))
+/datum/material/bananium/on_main_removed(atom/source, mat_amount, multiplier)
+ . = ..()
+ if(istype(source, /obj/item/fishing_rod))
+ UnregisterSignal(source, COMSIG_ROD_BEGIN_FISHING)
+
/datum/material/bananium/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/consumable/banana, rand(8, 12))
source_item?.reagents?.add_reagent(/datum/reagent/consumable/banana, source_item.reagents.total_volume*(2/5))
@@ -323,6 +435,14 @@ Unless you know what you're doing, only use the first three numbers. They're in
mat_rust_resistance = RUST_RESISTANCE_TITANIUM
mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS
texture_layer_icon_state = "shine"
+ fish_weight_modifier = 1.2
+ fishing_difficulty_modifier = -5
+ fishing_cast_range = 1
+ fishing_completion_speed = 1.15
+ fishing_bait_speed_mult = 1.15
+ fishing_deceleration_mult = 1.3
+ fishing_bounciness_mult = 0.75
+ fishing_gravity_mult = 1.1
/datum/material/titanium/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(15, BRUTE, BODY_ZONE_HEAD, wound_bonus = 7)
@@ -345,6 +465,24 @@ Unless you know what you're doing, only use the first three numbers. They're in
armor_modifiers = list(MELEE = 1.35, BULLET = 2, LASER = 0.5, ENERGY = 1.25, BOMB = 1.25, BIO = 1, FIRE = 1.4, ACID = 1) //rune is weak against magic lasers but strong against bullets. This is the combat triangle.
mineral_rarity = MATERIAL_RARITY_UNDISCOVERED
points_per_unit = 100 / SHEET_MATERIAL_AMOUNT
+ fish_weight_modifier = 1.5
+ fishing_difficulty_modifier = -18
+ fishing_cast_range = 1
+ fishing_experience_multiplier = 3.2 //grind all the way to level 100 in no time.
+ fishing_completion_speed = 1.3
+ fishing_bait_speed_mult = 0.9
+ fishing_deceleration_mult = 1.2
+ fishing_gravity_mult = 1.25
+
+/datum/material/runite/on_applied(atom/source, mat_amount, multiplier)
+ . = ..()
+ if(istype(source, /obj/item/fishing_rod))
+ ADD_TRAIT(source, TRAIT_ROD_REMOVE_FISHING_DUD, REF(src)) //light-absorbing, environment-cancelling fishing rod.
+
+/datum/material/runite/on_removed(atom/source, mat_amount, multiplier)
+ . = ..()
+ if(istype(source, /obj/item/fishing_rod))
+ REMOVE_TRAIT(source, TRAIT_ROD_REMOVE_FISHING_DUD, REF(src)) //light-absorbing, environment-cancelling fishing rod.
/datum/material/runite/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(20, BRUTE, BODY_ZONE_HEAD, wound_bonus = 10)
@@ -370,6 +508,14 @@ Unless you know what you're doing, only use the first three numbers. They're in
armor_modifiers = list(MELEE = 1.5, BULLET = 1.1, LASER = 0.3, ENERGY = 0.5, BOMB = 1, BIO = 1, FIRE = 1.1, ACID = 1)
mineral_rarity = MATERIAL_RARITY_UNDISCOVERED //Nobody's found oil on lavaland yet.
points_per_unit = 4 / SHEET_MATERIAL_AMOUNT
+ fish_weight_modifier = 0.8
+ fishing_difficulty_modifier = -5
+ fishing_cast_range = 2
+ fishing_experience_multiplier = 1.2
+ fishing_bait_speed_mult = 1.3
+ fishing_deceleration_mult = 0.8
+ fishing_bounciness_mult = 1.3
+ fishing_gravity_mult = 0.85
/datum/material/plastic/on_accidental_mat_consumption(mob/living/carbon/eater, obj/item/food)
eater.reagents.add_reagent(/datum/reagent/plastic_polymers, rand(6, 8))
@@ -400,6 +546,15 @@ Unless you know what you're doing, only use the first three numbers. They're in
beauty_modifier = 0.1
armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 0.4, ENERGY = 0.4, BOMB = 1, BIO = 0.2, ACID = 0.3)
texture_layer_icon_state = "woodgrain"
+ fish_weight_modifier = 0.5
+ fishing_difficulty_modifier = 8
+ fishing_cast_range = -1
+ fishing_experience_multiplier = 1.3
+ fishing_completion_speed = 0.9
+ fishing_bait_speed_mult = 0.8
+ fishing_deceleration_mult = 1.3
+ fishing_bounciness_mult = 0.4
+ fishing_gravity_mult = 0.8
/datum/material/wood/on_main_applied(atom/source, mat_amount, multiplier)
. = ..()
@@ -438,6 +593,25 @@ Unless you know what you're doing, only use the first three numbers. They're in
armor_modifiers = list(MELEE = 1.5, BULLET = 1.5, LASER = 1.3, ENERGY = 1.3, BOMB = 1, BIO = 1, FIRE = 2.5, ACID = 1)
mineral_rarity = MATERIAL_RARITY_UNDISCOVERED //Doesn't naturally spawn on lavaland.
points_per_unit = 100 / SHEET_MATERIAL_AMOUNT
+ fish_weight_modifier = 1.6
+ fishing_difficulty_modifier = -23
+ fishing_cast_range = 1
+ fishing_experience_multiplier = 0.6
+ fishing_completion_speed = 1.3
+ fishing_bait_speed_mult = 1.3
+ fishing_deceleration_mult = 1.3
+ fishing_bounciness_mult = 0.7
+ fishing_gravity_mult = 1.4
+
+/datum/material/adamantine/on_applied(atom/source, mat_amount, multiplier)
+ . = ..()
+ if(istype(source, /obj/item/fishing_rod))
+ ADD_TRAIT(source, TRAIT_ROD_REMOVE_FISHING_DUD, REF(src)) //light-absorbing, environment-cancelling fishing rod.
+
+/datum/material/adamantine/on_removed(atom/source, mat_amount, multiplier)
+ . = ..()
+ if(istype(source, /obj/item/fishing_rod))
+ REMOVE_TRAIT(source, TRAIT_ROD_REMOVE_FISHING_DUD, REF(src)) //light-absorbing, environment-cancelling fishing rod.
/datum/material/adamantine/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(20, BRUTE, BODY_ZONE_HEAD, wound_bonus = 10)
@@ -461,6 +635,15 @@ Unless you know what you're doing, only use the first three numbers. They're in
beauty_modifier = 0.5
mineral_rarity = MATERIAL_RARITY_UNDISCOVERED //Doesn't naturally spawn on lavaland.
points_per_unit = 100 / SHEET_MATERIAL_AMOUNT
+ fish_weight_modifier = 1.4
+ fishing_difficulty_modifier = -25
+ fishing_cast_range = 2
+ fishing_experience_multiplier = 0.5
+ fishing_completion_speed = 1.35
+ fishing_bait_speed_mult = 1.35
+ fishing_deceleration_mult = 1.35
+ fishing_bounciness_mult = 0.65
+ fishing_gravity_mult = 1.4
/datum/material/mythril/on_applied(atom/source, mat_amount, multiplier)
. = ..()
@@ -494,6 +677,15 @@ Unless you know what you're doing, only use the first three numbers. They're in
sheet_type = /obj/item/stack/sheet/hot_ice
value_per_unit = 400 / SHEET_MATERIAL_AMOUNT
beauty_modifier = 0.2
+ fish_weight_modifier = 0.9
+ fishing_difficulty_modifier = -10
+ fishing_cast_range = 1
+ fishing_experience_multiplier = 0.9
+ fishing_completion_speed = 1.4
+ fishing_bait_speed_mult = 1.5
+ fishing_deceleration_mult = 0.5
+ fishing_bounciness_mult = 0.3
+ fishing_gravity_mult = 0.8
/datum/material/hot_ice/on_applied(atom/source, mat_amount, multiplier)
. = ..()
@@ -526,6 +718,15 @@ Unless you know what you're doing, only use the first three numbers. They're in
beauty_modifier = 0.35
strength_modifier = 1.2
armor_modifiers = list(MELEE = 1.35, BULLET = 1.3, LASER = 1.3, ENERGY = 1.25, BOMB = 0.7, BIO = 1, FIRE = 1.3, ACID = 1)
+ fish_weight_modifier = 0.6 //It may be metallic, but it's just "denser" hydrogen at the end of the day, no?
+ fishing_difficulty_modifier = -15
+ fishing_cast_range = 4
+ fishing_experience_multiplier = 0.8
+ fishing_completion_speed = 1.4
+ fishing_bait_speed_mult = 1.6
+ fishing_deceleration_mult = 0.8
+ fishing_bounciness_mult = 1.7
+ fishing_gravity_mult = 0.7
/datum/material/metalhydrogen/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(15, BRUTE, BODY_ZONE_HEAD, wound_bonus = 7)
@@ -549,6 +750,15 @@ Unless you know what you're doing, only use the first three numbers. They're in
beauty_modifier = 0.25
turf_sound_override = FOOTSTEP_SAND
texture_layer_icon_state = "sand"
+ fish_weight_modifier = 1.2
+ fishing_difficulty_modifier = 30 //Sand fishing rods? What the hell are you doing?
+ fishing_cast_range = -2
+ fishing_experience_multiplier = 0.2
+ fishing_completion_speed = 0.8
+ fishing_bait_speed_mult = 0.8
+ fishing_deceleration_mult = 2.5
+ fishing_bounciness_mult = 0.3
+ fishing_gravity_mult = 0.9
/datum/material/sand/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.adjust_disgust(17)
@@ -571,6 +781,15 @@ Unless you know what you're doing, only use the first three numbers. They're in
beauty_modifier = 0.3
turf_sound_override = FOOTSTEP_WOOD
texture_layer_icon_state = "brick"
+ fish_weight_modifier = 1.2
+ fishing_difficulty_modifier = 25 //Sand fishing rods? What the hell are you doing?
+ fishing_cast_range = -2
+ fishing_experience_multiplier = 0.3
+ fishing_completion_speed = 0.9
+ fishing_bait_speed_mult = 0.8
+ fishing_deceleration_mult = 2.5
+ fishing_bounciness_mult = 0.2
+ fishing_gravity_mult = 0.9
/datum/material/snow
name = "snow"
@@ -582,11 +801,22 @@ Unless you know what you're doing, only use the first three numbers. They're in
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/snow
+ strength_modifier = 0.4
+ integrity_modifier = 0.4
value_per_unit = 5 / SHEET_MATERIAL_AMOUNT
armor_modifiers = list(MELEE = 0.25, BULLET = 0.25, LASER = 0.25, ENERGY = 0.25, BOMB = 0.25, BIO = 0.25, FIRE = 0.25, ACID = 1.5)
beauty_modifier = 0.3
turf_sound_override = FOOTSTEP_SAND
texture_layer_icon_state = "sand"
+ fish_weight_modifier = 0.8
+ fishing_difficulty_modifier = 25
+ fishing_cast_range = -2
+ fishing_experience_multiplier = 0.3
+ fishing_completion_speed = 0.9
+ fishing_bait_speed_mult = 0.75
+ fishing_deceleration_mult = 0.3
+ fishing_bounciness_mult = 0.2
+ fishing_gravity_mult = 0.7
/datum/material/snow/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/water, rand(5, 10))
@@ -607,6 +837,14 @@ Unless you know what you're doing, only use the first three numbers. They're in
armor_modifiers = list(MELEE = 1.2, BULLET = 1.2, LASER = 1, ENERGY = 1, BOMB = 1.2, BIO = 1.2, FIRE = 1.5, ACID = 1.5)
beauty_modifier = -0.15
texture_layer_icon_state = "runed"
+ fish_weight_modifier = 1.5
+ fishing_difficulty_modifier = -12
+ fishing_experience_multiplier = 0.9
+ fishing_completion_speed = 1.2
+ fishing_bait_speed_mult = 1.666
+ fishing_deceleration_mult = 1.666
+ fishing_bounciness_mult = 0.666
+ fishing_gravity_mult = 1.666
/datum/material/runedmetal/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.reagents.add_reagent(/datum/reagent/fuel/unholywater, rand(8, 12))
@@ -627,6 +865,11 @@ Unless you know what you're doing, only use the first three numbers. They're in
value_per_unit = 50 / SHEET_MATERIAL_AMOUNT
armor_modifiers = list(MELEE = 1, BULLET = 1, LASER = 1, ENERGY = 1, BOMB = 1, BIO = 1, FIRE = 1.5, ACID = 1.5)
beauty_modifier = 0.2
+ fish_weight_modifier = 1.4
+ fishing_bait_speed_mult = 1.1
+ fishing_deceleration_mult = 0.8
+ fishing_bounciness_mult = 1.2
+ fishing_gravity_mult = 1.05
/datum/material/paper
name = "paper"
@@ -640,23 +883,47 @@ Unless you know what you're doing, only use the first three numbers. They're in
)
sheet_type = /obj/item/stack/sheet/paperframes
value_per_unit = 5 / SHEET_MATERIAL_AMOUNT
+ strength_modifier = 0.3
armor_modifiers = list(MELEE = 0.1, BULLET = 0.1, LASER = 0.1, ENERGY = 0.1, BOMB = 0.1, BIO = 0.1, ACID = 1.5)
beauty_modifier = 0.3
turf_sound_override = FOOTSTEP_SAND
texture_layer_icon_state = "paper"
+ fish_weight_modifier = 0.4
+ fishing_difficulty_modifier = 40 //child's play
+ fishing_cast_range = -2
+ fishing_experience_multiplier = 0.1
+ fishing_bait_speed_mult = 0.7
+ fishing_deceleration_mult = 1.5
+ fishing_bounciness_mult = 0.2
+ fishing_gravity_mult = 0.6
/datum/material/paper/on_main_applied(atom/source, mat_amount, multiplier)
. = ..()
- if(isobj(source) && source.material_flags & MATERIAL_AFFECT_STATISTICS)
- var/obj/paper = source
- paper.resistance_flags |= FLAMMABLE
- paper.obj_flags |= UNIQUE_RENAME
+ if(!isobj(source) || !(source.material_flags & MATERIAL_AFFECT_STATISTICS))
+ return
+ var/obj/paper = source
+ paper.resistance_flags |= FLAMMABLE
+ paper.obj_flags |= UNIQUE_RENAME
+ if(istype(paper, /obj/item/fishing_rod))
+ RegisterSignal(paper, COMSIG_ROD_BEGIN_FISHING, PROC_REF(on_begin_fishing))
+
+/datum/material/paper/proc/on_begin_fishing(obj/item/fishing_rod/rod, datum/fishing_challenge/challenge)
+ SIGNAL_HANDLER
+ if(prob(40)) //consider the default reward and it's 15%
+ RegisterSignal(challenge, COMSIG_FISHING_CHALLENGE_ROLL_REWARD, PROC_REF(roll_stickman))
+
+/datum/material/paper/proc/roll_stickman(datum/source, obj/item/fishing_rod/rod, mob/fisherman, atom/location, list/rewards)
+ SIGNAL_HANDLER
+ rewards += pick(/mob/living/basic/stickman, /mob/living/basic/stickman/dog, /mob/living/basic/stickman/ranged)
/datum/material/paper/on_main_removed(atom/source, mat_amount, multiplier)
- if(isobj(source) && source.material_flags & MATERIAL_AFFECT_STATISTICS)
- var/obj/paper = source
- paper.resistance_flags &= ~FLAMMABLE
- return ..()
+ . = ..()
+ if(!isobj(source) || !(source.material_flags & MATERIAL_AFFECT_STATISTICS))
+ return
+ var/obj/paper = source
+ paper.resistance_flags &= ~FLAMMABLE
+ if(istype(paper, /obj/item/fishing_rod))
+ UnregisterSignal(paper, COMSIG_ROD_BEGIN_FISHING)
/datum/material/cardboard
name = "cardboard"
@@ -670,8 +937,17 @@ Unless you know what you're doing, only use the first three numbers. They're in
)
sheet_type = /obj/item/stack/sheet/cardboard
value_per_unit = 6 / SHEET_MATERIAL_AMOUNT
+ strength_modifier = 0.3
armor_modifiers = list(MELEE = 0.25, BULLET = 0.25, LASER = 0.25, ENERGY = 0.25, BOMB = 0.25, BIO = 0.25, ACID = 1.5)
beauty_modifier = -0.1
+ fish_weight_modifier = 0.4
+ fishing_difficulty_modifier = 40 //child's play
+ fishing_cast_range = -2
+ fishing_experience_multiplier = 0.1
+ fishing_bait_speed_mult = 0.7
+ fishing_deceleration_mult = 1.5
+ fishing_bounciness_mult = 0.2
+ fishing_gravity_mult = 0.6
/datum/material/cardboard/on_main_applied(atom/source, mat_amount, multiplier)
. = ..()
@@ -700,6 +976,48 @@ Unless you know what you're doing, only use the first three numbers. They're in
value_per_unit = 100 / SHEET_MATERIAL_AMOUNT
armor_modifiers = list(MELEE = 1.2, BULLET = 0.75, LASER = 0.75, ENERGY = 1.2, BOMB = 1, BIO = 1, FIRE = 1.5, ACID = 1.5)
beauty_modifier = -0.2
+ fish_weight_modifier = 1.05
+ fishing_difficulty_modifier = 15
+ fishing_cast_range = -2
+ fishing_experience_multiplier = 0.85
+ fishing_completion_speed = 0.9
+ fishing_bait_speed_mult = 0.9
+ fishing_deceleration_mult = 0.9
+ fishing_bounciness_mult = 0.8
+ fishing_gravity_mult = 0.85
+
+/datum/material/bone/on_main_applied(atom/source, mat_amount, multiplier)
+ . = ..()
+ if(istype(source, /obj/item/fishing_rod))
+ RegisterSignal(source, COMSIG_ROD_BEGIN_FISHING, PROC_REF(on_begin_fishing))
+ else if(istype(source, /obj/item/fish))
+ ADD_TRAIT(source, TRAIT_FISH_MADE_OF_BONE, REF(src))
+
+/datum/material/bone/proc/on_begin_fishing(obj/item/fishing_rod/rod, datum/fishing_challenge/challenge)
+ SIGNAL_HANDLER
+ if(prob(40))
+ RegisterSignal(challenge, COMSIG_FISHING_CHALLENGE_ROLL_REWARD, PROC_REF(roll_bones))
+
+/datum/material/bone/proc/roll_bones(datum/source, obj/item/fishing_rod/rod, mob/fisherman, atom/location, list/rewards)
+ SIGNAL_HANDLER
+ var/static/list/bones = list(
+ /obj/item/fish/boned = 65,
+ /obj/item/fish/mastodon = 8,
+ /mob/living/basic/skeleton = 6,
+ /mob/living/basic/skeleton/ice = 6,
+ /mob/living/basic/skeleton/templar = 6,
+ /obj/item/instrument/trumpet/spectral/one_doot = 3,
+ /obj/item/instrument/saxophone/spectral/one_doot = 3,
+ /obj/item/instrument/trombone/spectral/one_doot = 3,
+ )
+ rewards += pick_weight(bones)
+
+/datum/material/bone/on_main_removed(atom/source, mat_amount, multiplier)
+ . = ..()
+ if(istype(source, /obj/item/fishing_rod))
+ UnregisterSignal(source, COMSIG_ROD_BEGIN_FISHING)
+ else if(istype(source, /obj/item/fish))
+ REMOVE_TRAIT(source, TRAIT_FISH_MADE_OF_BONE, REF(src))
/datum/material/bamboo
name = "bamboo"
@@ -712,11 +1030,21 @@ Unless you know what you're doing, only use the first three numbers. They're in
MAT_CATEGORY_ITEM_MATERIAL_COMPLEMENTARY = TRUE,
)
sheet_type = /obj/item/stack/sheet/mineral/bamboo
+ strength_modifier = 0.5
value_per_unit = 5 / SHEET_MATERIAL_AMOUNT
armor_modifiers = list(MELEE = 0.5, BULLET = 0.5, LASER = 0.5, ENERGY = 0.5, BOMB = 0.5, BIO = 0.51, FIRE = 0.5, ACID = 1.5)
beauty_modifier = 0.2
turf_sound_override = FOOTSTEP_WOOD
texture_layer_icon_state = "bamboo"
+ fish_weight_modifier = 0.5
+ fishing_difficulty_modifier = -4
+ fishing_cast_range = -1
+ fishing_experience_multiplier = 1.3
+ fishing_completion_speed = 1.15
+ fishing_bait_speed_mult = 1.2
+ fishing_deceleration_mult = 0.8
+ fishing_bounciness_mult = 0.7
+ fishing_gravity_mult = 0.7
/datum/material/zaukerite
name = "zaukerite"
@@ -732,6 +1060,24 @@ Unless you know what you're doing, only use the first three numbers. They're in
value_per_unit = 900 / SHEET_MATERIAL_AMOUNT
armor_modifiers = list(MELEE = 0.9, BULLET = 0.9, LASER = 1.75, ENERGY = 1.75, BOMB = 0.5, BIO = 1, FIRE = 0.1, ACID = 1)
beauty_modifier = 0.001
+ fish_weight_modifier = 1.2
+ fishing_difficulty_modifier = -16
+ fishing_experience_multiplier = 0.9
+ fishing_completion_speed = 1.3
+ fishing_bait_speed_mult = 1.3
+ fishing_deceleration_mult = 1.3
+ fishing_bounciness_mult = 1.1
+ fishing_gravity_mult = 1.35
+
+/datum/material/zaukerite/on_applied(atom/source, mat_amount, multiplier)
+ . = ..()
+ if(istype(source, /obj/item/fishing_rod))
+ ADD_TRAIT(source, TRAIT_ROD_IGNORE_ENVIRONMENT, REF(src)) //light-absorbing, environment-cancelling fishing rod.
+
+/datum/material/zaukerite/on_removed(atom/source, mat_amount, multiplier)
+ . = ..()
+ if(istype(source, /obj/item/fishing_rod))
+ REMOVE_TRAIT(source, TRAIT_ROD_IGNORE_ENVIRONMENT, REF(src)) //light-absorbing, environment-cancelling fishing rod.
/datum/material/zaukerite/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item)
victim.apply_damage(30, BURN, BODY_ZONE_HEAD, wound_bonus = 5)
diff --git a/code/datums/materials/hauntium.dm b/code/datums/materials/hauntium.dm
index b8eee26a08f36..995c566a4d656 100644
--- a/code/datums/materials/hauntium.dm
+++ b/code/datums/materials/hauntium.dm
@@ -17,6 +17,13 @@
//pretty good but only the undead can actually make use of these modifiers
strength_modifier = 1.2
armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 1.15, ENERGY = 1.15, BOMB = 1, BIO = 1, FIRE = 1, ACID = 0.7)
+ fish_weight_modifier = 1.4
+ fishing_difficulty_modifier = -30 //Only the undead and the coroner can game this.
+ fishing_cast_range = 2
+ fishing_experience_multiplier = 1.5
+ fishing_completion_speed = 1.1
+ fishing_bait_speed_mult = 0.85
+ fishing_gravity_mult = 0.8
/datum/material/hauntium/on_main_applied(atom/source, mat_amount, multiplier)
. = ..()
diff --git a/code/datums/materials/meat.dm b/code/datums/materials/meat.dm
index 008099a526e93..512b97f81be97 100644
--- a/code/datums/materials/meat.dm
+++ b/code/datums/materials/meat.dm
@@ -18,11 +18,19 @@
item_sound_override = 'sound/effects/meatslap.ogg'
turf_sound_override = FOOTSTEP_MEAT
texture_layer_icon_state = "meat"
+ fishing_difficulty_modifier = 13
+ fishing_cast_range = -2
+ fishing_experience_multiplier = 0.8
+ fishing_bait_speed_mult = 0.9
+ fishing_deceleration_mult = 0.9
+ fishing_bounciness_mult = 0.9
+ fishing_gravity_mult = 0.85
/datum/material/meat/on_main_applied(atom/source, mat_amount, multiplier)
. = ..()
if(!IS_EDIBLE(source))
make_edible(source, mat_amount, multiplier)
+ ADD_TRAIT(source, TRAIT_ROD_REMOVE_FISHING_DUD, REF(src)) //The rod itself is the bait... sorta.
/datum/material/meat/on_applied(atom/source, mat_amount, multiplier)
. = ..()
@@ -64,6 +72,7 @@
/datum/material/meat/on_main_removed(atom/source, mat_amount, multiplier)
. = ..()
qdel(source.GetComponent(/datum/component/edible))
+ REMOVE_TRAIT(source, TRAIT_ROD_REMOVE_FISHING_DUD, REF(src))
/datum/material/meat/mob_meat
init_flags = MATERIAL_INIT_BESPOKE
diff --git a/code/datums/materials/pizza.dm b/code/datums/materials/pizza.dm
index 1906e5786d238..1bbaaefa909de 100644
--- a/code/datums/materials/pizza.dm
+++ b/code/datums/materials/pizza.dm
@@ -16,11 +16,20 @@
item_sound_override = 'sound/effects/meatslap.ogg'
turf_sound_override = FOOTSTEP_MEAT
texture_layer_icon_state = "pizza"
+ fish_weight_modifier = 0.9
+ fishing_difficulty_modifier = 13
+ fishing_cast_range = -2
+ fishing_experience_multiplier = 0.8
+ fishing_bait_speed_mult = 0.9
+ fishing_deceleration_mult = 0.9
+ fishing_bounciness_mult = 0.9
+ fishing_gravity_mult = 0.8
/datum/material/pizza/on_main_applied(atom/source, mat_amount, multiplier)
. = ..()
if(!IS_EDIBLE(source))
make_edible(source, mat_amount)
+ ADD_TRAIT(source, TRAIT_ROD_REMOVE_FISHING_DUD, REF(src)) //the fishing rod itself is the bait... sorta.
/datum/material/pizza/on_applied(atom/source, mat_amount, multiplier)
. = ..()
@@ -39,3 +48,4 @@
/datum/material/pizza/on_main_removed(atom/source, mat_amount, multiplier)
. = ..()
qdel(source.GetComponent(/datum/component/edible))
+ REMOVE_TRAIT(source, TRAIT_ROD_REMOVE_FISHING_DUD, REF(src))
diff --git a/code/datums/mind/_mind.dm b/code/datums/mind/_mind.dm
index 397a1c5b13afa..1df318f9ee46f 100644
--- a/code/datums/mind/_mind.dm
+++ b/code/datums/mind/_mind.dm
@@ -540,6 +540,13 @@
var/datum/addiction/affected_addiction = SSaddiction.all_addictions[type]
return affected_addiction.on_lose_addiction_points(src)
+/// Whether or not we can roll for midrounds, specifically checking if we have any major antag datums that should block it
+/datum/mind/proc/can_roll_midround()
+ for(var/datum/antagonist/antag as anything in antag_datums)
+ if(antag.block_midrounds)
+ return FALSE
+
+ return TRUE
/// Setter for the assigned_role job datum.
/datum/mind/proc/set_assigned_role(datum/job/new_role)
diff --git a/code/datums/mood.dm b/code/datums/mood.dm
index cffd955635817..fe91e1db2c66c 100644
--- a/code/datums/mood.dm
+++ b/code/datums/mood.dm
@@ -462,8 +462,8 @@
/datum/mood/proc/set_sanity(amount, minimum = SANITY_INSANE, maximum = SANITY_GREAT, override = FALSE)
// If we're out of the acceptable minimum-maximum range move back towards it in steps of 0.7
// If the new amount would move towards the acceptable range faster then use it instead
- if(amount < minimum)
- amount += clamp(minimum - amount, 0, 0.7)
+ if(amount < minimum && sanity < minimum)
+ amount = sanity + 0.7
if((!override && HAS_TRAIT(mob_parent, TRAIT_UNSTABLE)) || amount > maximum)
amount = min(sanity, amount)
if(amount == sanity) //Prevents stuff from flicking around.
diff --git a/code/datums/mood_events/axe_events.dm b/code/datums/mood_events/axe_events.dm
new file mode 100644
index 0000000000000..1af7c116ceff1
--- /dev/null
+++ b/code/datums/mood_events/axe_events.dm
@@ -0,0 +1,20 @@
+
+/datum/mood_event/axe_gone
+ description = "What happened to the axe... Where is it? It can't be..."
+ mood_change = -15
+
+/datum/mood_event/axe_neutral
+ description = "I'm sure the axe is okay."
+ mood_change = 1
+
+/datum/mood_event/axe_cabinet
+ description = "The axe is where it belongs."
+ mood_change = 5
+
+/datum/mood_event/axe_missing
+ description = "The axe, there's something wrong..."
+ mood_change = -5
+
+/datum/mood_event/axe_held
+ description = "I'm not worthy of you, axe. I need to put you back."
+ mood_change = -10
diff --git a/code/datums/mutations/_combined.dm b/code/datums/mutations/_combined.dm
index 399cbec53ed00..0a71b4bd4ca57 100644
--- a/code/datums/mutations/_combined.dm
+++ b/code/datums/mutations/_combined.dm
@@ -1,5 +1,6 @@
/datum/generecipe
- var/required = "" //it hurts so bad but initial is not compatible with lists
+ var/input_one = null
+ var/input_two = null
var/result = null
/proc/get_mixed_mutation(mutation1, mutation2)
@@ -7,52 +8,63 @@
return FALSE
if(mutation1 == mutation2) //this could otherwise be bad
return FALSE
- for(var/A in GLOB.mutation_recipes)
- if(findtext(A, "[mutation1]") && findtext(A, "[mutation2]"))
- return GLOB.mutation_recipes[A]
+ for(var/datum/generecipe/GR as anything in subtypesof(/datum/generecipe))
+ if((initial(GR.input_one) == mutation1 && initial(GR.input_two) == mutation2) || (initial(GR.input_one) == mutation2 && initial(GR.input_two) == mutation1))
+ return initial(GR.result)
/* RECIPES */
/datum/generecipe/hulk
- required = "/datum/mutation/human/strong; /datum/mutation/human/radioactive"
+ input_one = /datum/mutation/human/strong
+ input_two = /datum/mutation/human/radioactive
result = /datum/mutation/human/hulk
/datum/generecipe/mindread
- required = "/datum/mutation/human/antenna; /datum/mutation/human/paranoia"
+ input_one = /datum/mutation/human/antenna
+ input_two = /datum/mutation/human/paranoia
result = /datum/mutation/human/mindreader
/datum/generecipe/shock
- required = "/datum/mutation/human/insulated; /datum/mutation/human/radioactive"
+ input_one = /datum/mutation/human/insulated
+ input_two = /datum/mutation/human/radioactive
result = /datum/mutation/human/shock
/datum/generecipe/cindikinesis
- required = "/datum/mutation/human/geladikinesis; /datum/mutation/human/fire_breath"
+ input_one = /datum/mutation/human/geladikinesis
+ input_two = /datum/mutation/human/firebreath
result = /datum/mutation/human/cindikinesis
/datum/generecipe/pyrokinesis
- required = "/datum/mutation/human/cryokinesis; /datum/mutation/human/fire_breath"
+ input_one = /datum/mutation/human/cryokinesis
+ input_two = /datum/mutation/human/firebreath
result = /datum/mutation/human/pyrokinesis
/datum/generecipe/thermal_adaptation
- required = "/datum/mutation/human/adaptation/cold; /datum/mutation/human/adaptation/heat"
+ input_one = /datum/mutation/human/adaptation/cold
+ input_two = /datum/mutation/human/adaptation/heat
result = /datum/mutation/human/adaptation/thermal
/datum/generecipe/antiglow
- required = "/datum/mutation/human/glow; /datum/mutation/human/void"
+ input_one = /datum/mutation/human/glow
+ input_two = /datum/mutation/human/void
result = /datum/mutation/human/glow/anti
/datum/generecipe/tonguechem
- required = "/datum/mutation/human/tongue_spike; /datum/mutation/human/stimmed"
+ input_one = /datum/mutation/human/tongue_spike
+ input_two = /datum/mutation/human/stimmed
result = /datum/mutation/human/tongue_spike/chem
/datum/generecipe/martyrdom
- required = "/datum/mutation/human/strong; /datum/mutation/human/stimmed"
+ input_one = /datum/mutation/human/strong
+ input_two = /datum/mutation/human/stimmed
result = /datum/mutation/human/martyrdom
/datum/generecipe/heckacious
- required = "/datum/mutation/human/wacky; /datum/mutation/human/stoner"
+ input_one = /datum/mutation/human/wacky
+ input_two = /datum/mutation/human/stoner
result = /datum/mutation/human/heckacious
/datum/generecipe/ork
- required = "/datum/mutation/human/hulk; /datum/mutation/human/clumsy"
+ input_one = /datum/mutation/human/hulk
+ input_two = /datum/mutation/human/clumsy
result = /datum/mutation/human/hulk/ork
diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm
index e09a8337b72a4..bbfdc8b3fa5f4 100644
--- a/code/datums/mutations/body.dm
+++ b/code/datums/mutations/body.dm
@@ -560,7 +560,7 @@
explosion(owner, light_impact_range = 2, adminlog = TRUE, explosion_cause = src)
for(var/mob/living/carbon/human/splashed in view(2, owner))
- var/obj/item/organ/internal/eyes/eyes = splashed.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = splashed.get_organ_slot(ORGAN_SLOT_EYES)
if(eyes)
to_chat(splashed, span_userdanger("You are blinded by a shower of blood!"))
eyes.apply_organ_damage(5)
@@ -588,7 +588,7 @@
if(.)//cant add
return TRUE
- var/obj/item/organ/internal/brain/brain = owner.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/brain = owner.get_organ_slot(ORGAN_SLOT_BRAIN)
if(brain)
brain.Remove(owner, special = TRUE, movement_flags = NO_ID_TRANSFER)
brain.zone = BODY_ZONE_CHEST
@@ -613,7 +613,7 @@
if(!successful)
stack_trace("HARS mutation head regeneration failed! (usually caused by headless syndrome having a head)")
return TRUE
- var/obj/item/organ/internal/brain/brain = owner.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/brain = owner.get_organ_slot(ORGAN_SLOT_BRAIN)
if(brain)
brain.Remove(owner, special = TRUE, movement_flags = NO_ID_TRANSFER)
brain.zone = initial(brain.zone)
diff --git a/code/datums/mutations/tongue_spike.dm b/code/datums/mutations/tongue_spike.dm
index d5db738213fec..c6a48a32a144d 100644
--- a/code/datums/mutations/tongue_spike.dm
+++ b/code/datums/mutations/tongue_spike.dm
@@ -30,7 +30,7 @@
to_chat(cast_on, span_notice("You concentrate really hard, but nothing happens."))
return
- var/obj/item/organ/internal/tongue/to_fire = locate() in cast_on.organs
+ var/obj/item/organ/tongue/to_fire = locate() in cast_on.organs
if(!to_fire)
to_chat(cast_on, span_notice("You don't have a tongue to shoot!"))
return
diff --git a/code/datums/mutations/touch.dm b/code/datums/mutations/touch.dm
index 634a46ab217ba..4cfb605ba3d5f 100644
--- a/code/datums/mutations/touch.dm
+++ b/code/datums/mutations/touch.dm
@@ -1,6 +1,6 @@
/datum/mutation/human/shock
name = "Shock Touch"
- desc = "The affected can channel excess electricity through their hands without shocking themselves, allowing them to shock others."
+ desc = "The affected can channel excess electricity through their hands without shocking themselves, allowing them to shock others. Mostly harmless! Mostly... "
quality = POSITIVE
locked = TRUE
difficulty = 16
@@ -19,30 +19,23 @@
return
if(GET_MUTATION_POWER(src) <= 1)
- to_modify.chain = initial(to_modify.chain)
+ to_modify.stagger = initial(to_modify.stagger)
return
- to_modify.chain = TRUE
+ to_modify.stagger = TRUE
/datum/action/cooldown/spell/touch/shock
name = "Shock Touch"
- desc = "Channel electricity to your hand to shock people with."
+ desc = "Channel electricity to your hand to shock people with. Mostly harmless! Mostly... "
button_icon_state = "zap"
sound = 'sound/items/weapons/zapbang.ogg'
- cooldown_time = 12 SECONDS
+ cooldown_time = 7 SECONDS
invocation_type = INVOCATION_NONE
spell_requirements = NONE
antimagic_flags = NONE
- //Vars for zaps made when power chromosome is applied, ripped and toned down from reactive tesla armor code.
- ///This var decides if the spell should chain, dictated by presence of power chromosome
- var/chain = FALSE
- ///Affects damage, should do about 1 per limb
- var/zap_power = 7.5 KILO JOULES
- ///Range of tesla shock bounces
- var/zap_range = 7
- ///flags that dictate what the tesla shock can interact with, Can only damage mobs, Cannot damage machines or generate energy
- var/zap_flags = ZAP_MOB_DAMAGE
+ ///This var decides if the spell should stagger, dictated by presence of power chromosome
+ var/stagger = FALSE
hand_path = /obj/item/melee/touch_attack/shock
draw_message = span_notice("You channel electricity into your hand.")
@@ -51,7 +44,12 @@
/datum/action/cooldown/spell/touch/shock/cast_on_hand_hit(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster)
if(iscarbon(victim))
var/mob/living/carbon/carbon_victim = victim
- if(carbon_victim.electrocute_act(15, caster, 1, SHOCK_NOGLOVES | SHOCK_NOSTUN))//doesn't stun. never let this stun
+ if(carbon_victim.electrocute_act(5, caster, 1, SHOCK_NOGLOVES | SHOCK_NOSTUN))//doesn't stun. never let this stun
+
+ var/obj/item/bodypart/affecting = carbon_victim.get_bodypart(carbon_victim.get_random_valid_zone(caster.zone_selected))
+ var/armor_block = carbon_victim.run_armor_check(affecting, ENERGY)
+ carbon_victim.apply_damage(20, STAMINA, def_zone = affecting, blocked = armor_block)
+
carbon_victim.dropItemToGround(carbon_victim.get_active_held_item())
carbon_victim.dropItemToGround(carbon_victim.get_inactive_held_item())
carbon_victim.adjust_confusion(15 SECONDS)
@@ -59,21 +57,19 @@
span_danger("[caster] electrocutes [victim]!"),
span_userdanger("[caster] electrocutes you!"),
)
- if(chain)
- tesla_zap(source = victim, zap_range = zap_range, power = zap_power, cutoff = 1 KILO JOULES, zap_flags = zap_flags)
- carbon_victim.visible_message(span_danger("An arc of electricity explodes out of [victim]!"))
+ if(stagger)
+ carbon_victim.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * 2, 10 SECONDS)
return TRUE
else if(isliving(victim))
var/mob/living/living_victim = victim
- if(living_victim.electrocute_act(15, caster, 1, SHOCK_NOSTUN))
+ if(living_victim.electrocute_act(15, caster, 1, SHOCK_NOSTUN)) //We do damage here because non-carbon mobs typically ignore stamina damage.
living_victim.visible_message(
span_danger("[caster] electrocutes [victim]!"),
span_userdanger("[caster] electrocutes you!"),
)
- if(chain)
- tesla_zap(source = victim, zap_range = zap_range, power = zap_power, cutoff = 1 KILO JOULES, zap_flags = zap_flags)
- living_victim.visible_message(span_danger("An arc of electricity explodes out of [victim]!"))
+ if(stagger)
+ living_victim.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * 2, 10 SECONDS)
return TRUE
to_chat(caster, span_warning("The electricity doesn't seem to affect [victim]..."))
@@ -114,7 +110,8 @@
/datum/action/cooldown/spell/touch/lay_on_hands
name = "Mending Touch"
- desc = "You can now lay your hands on other people to transfer a small amount of their physical injuries to yourself."
+ desc = "You can now lay your hands on other people to transfer a small amount of their physical injuries to yourself. \
+ For some reason, this power does not play nicely with the undead, or people with strange ideas about morality."
button_icon = 'icons/mob/actions/actions_genetic.dmi'
button_icon_state = "mending_touch"
sound = 'sound/effects/magic/staff_healing.ogg'
@@ -159,6 +156,17 @@
// Message to show on a successful heal if the healer has a special pacifism interaction with the mutation.
var/peaceful_message = null
+ var/success
+
+ var/hurt_this_guy = determine_if_this_hurts_instead(mendicant, hurtguy)
+
+ if (hurt_this_guy && (HAS_TRAIT(mendicant, TRAIT_PACIFISM) || !mendicant.combat_mode)) //Returns if we're a pacifist and we'd hurt them, or we're not in combat mode and we'll hurt them
+ mendicant.balloon_alert(mendicant, "[hurtguy] would be hurt!")
+ return FALSE
+
+ if(hurt_this_guy)
+ return by_gods_light_i_smite_you(mendicant, hurtguy, heal_multiplier)
+
// Heal more, hurt a bit more.
// If you crunch the numbers it sounds crazy good,
// but I think that's a fair reward for combining the efforts of Genetics, Medbay, and Mining to reach a hidden mechanic.
@@ -177,7 +185,6 @@
heal_multiplier *= 1.75
peaceful_message = span_boldnotice("Your peaceful nature helps you guide all the pain to yourself.")
- var/success
if(iscarbon(hurtguy))
success = do_complicated_heal(mendicant, hurtguy, heal_multiplier, pain_multiplier)
else
@@ -338,6 +345,73 @@
else
to_chat(mendicant, span_notice("Your veins swell!"))
+
+/datum/action/cooldown/spell/touch/lay_on_hands/proc/determine_if_this_hurts_instead(mob/living/carbon/mendicant, mob/living/hurtguy)
+
+ if(hurtguy.mob_biotypes & MOB_UNDEAD && mendicant.mob_biotypes & MOB_UNDEAD)
+ return FALSE //always return false if we're both undead //undead solidarity
+
+ if(hurtguy.mob_biotypes & MOB_UNDEAD && !HAS_TRAIT(mendicant, TRAIT_EVIL)) //Is the mob undead and we're not evil? If so, hurt.
+ return TRUE
+
+ if(HAS_TRAIT(hurtguy, TRAIT_EVIL) && !HAS_TRAIT(mendicant, TRAIT_EVIL)) //Is the guy evil and we're not evil? If so, hurt.
+ return TRUE
+
+ if(!(hurtguy.mob_biotypes & MOB_UNDEAD) && HAS_TRAIT(hurtguy, TRAIT_EMPATH) && HAS_TRAIT(mendicant, TRAIT_EVIL)) //Is the guy not undead, they're an empath and we're evil? If so, hurt.
+ return TRUE
+
+ return FALSE
+
+///If our target was undead or evil, we blast them with a firey beam rather than healing them. For, you know, 'holy' reasons. When did genes become so morally uptight?
+
+/datum/action/cooldown/spell/touch/lay_on_hands/proc/by_gods_light_i_smite_you(mob/living/carbon/smiter, mob/living/motherfucker_to_hurt, smite_multiplier)
+ var/our_smite_multiplier = smite_multiplier
+ var/evil_smite = HAS_TRAIT(smiter, TRAIT_EVIL) ? TRUE : FALSE
+ var/divine_champion = smiter.mind?.holy_role >= HOLY_ROLE_PRIEST ? TRUE : FALSE
+ var/smite_text_to_target = "lays hands on you"
+
+ if(divine_champion || HAS_TRAIT(smiter, TRAIT_SPIRITUAL))
+
+ // Defaults for possible deity. You know, just in case.
+ var/possible_deity = evil_smite ? "Satan" : "God"
+
+ var/mob/living/carbon/human/human_smiter = smiter
+
+ // If we have a client, check their deity pref and use that instead of our chaps god if our smiter is a spiritualist
+ var/client/smiter_client = smiter.client
+
+ if(smiter_client && HAS_TRAIT(smiter, TRAIT_SPIRITUAL))
+ possible_deity = smiter_client.prefs?.read_preference(/datum/preference/name/deity)
+ else if (GLOB.deity)
+ possible_deity = GLOB.deity
+
+ if(ishuman(human_smiter))
+ human_smiter.force_say()
+ if(evil_smite)
+ human_smiter.say("in [possible_deity]'s dark name, I COMMAND YOU TO PERISH!!!", forced = "compelled by the power of their deity")
+ else
+ human_smiter.say("By [possible_deity]'s might, I SMITE YOU!!!", forced = "compelled by the power of their deity")
+ our_smite_multiplier *= divine_champion ? 5 : 1 //good luck surviving this if they're a chap
+
+ if(evil_smite)
+ motherfucker_to_hurt.visible_message(span_warning("[smiter] snaps [smiter.p_their()] fingers in front of [motherfucker_to_hurt]'s face, and [motherfucker_to_hurt]'s body twists violently from an unseen force!"))
+ motherfucker_to_hurt.apply_damage(10 * our_smite_multiplier, BRUTE, spread_damage = TRUE, wound_bonus = 5 * our_smite_multiplier)
+ motherfucker_to_hurt.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * our_smite_multiplier, 25 SECONDS)
+ smiter.emote("snap")
+ smite_text_to_target = "crushes you psychically with a snap of [smiter.p_their()] fingers"
+ else
+ motherfucker_to_hurt.visible_message(span_warning("[smiter] lays hands on [motherfucker_to_hurt], but it shears [motherfucker_to_hurt.p_them()] with a brilliant energy!"))
+ motherfucker_to_hurt.apply_damage(10 * our_smite_multiplier, BURN, spread_damage = TRUE, wound_bonus = 5 * our_smite_multiplier)
+ motherfucker_to_hurt.adjust_fire_stacks(3 * our_smite_multiplier)
+ motherfucker_to_hurt.ignite_mob()
+
+ motherfucker_to_hurt.update_damage_overlays()
+
+ to_chat(motherfucker_to_hurt, span_bolddanger("[smiter] [smite_text_to_target], hurting you!"))
+ motherfucker_to_hurt.emote("scream")
+ new /obj/effect/temp_visual/explosion(get_turf(motherfucker_to_hurt), evil_smite ? LIGHT_COLOR_BLOOD_MAGIC : LIGHT_COLOR_HOLY_MAGIC)
+ . = TRUE
+
/obj/item/melee/touch_attack/lay_on_hands
name = "mending touch"
desc = "Unlike in your favorite tabletop games, you sadly can't cast this on yourself, so you can't use that as a Scapegoat." // mayus is reference. if you get it you're cool
diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm
index a5a80762e8449..5197939d709f4 100644
--- a/code/datums/outfit.dm
+++ b/code/datums/outfit.dm
@@ -136,11 +136,11 @@
* other such sources of change
*
* Extra Arguments
- * * visualsOnly true if this is only for display (in the character setup screen)
+ * * visuals_only true if this is only for display (in the character setup screen)
*
- * If visualsOnly is true, you can omit any work that doesn't visually appear on the character sprite
+ * If visuals_only is true, you can omit any work that doesn't visually appear on the character sprite
*/
-/datum/outfit/proc/pre_equip(mob/living/carbon/human/user, visualsOnly = FALSE)
+/datum/outfit/proc/pre_equip(mob/living/carbon/human/user, visuals_only = FALSE)
//to be overridden for customization depending on client prefs,species etc
return
@@ -151,11 +151,11 @@
* fiddle with id bindings and accesses etc
*
* Extra Arguments
- * * visualsOnly true if this is only for display (in the character setup screen)
+ * * visuals_only true if this is only for display (in the character setup screen)
*
- * If visualsOnly is true, you can omit any work that doesn't visually appear on the character sprite
+ * If visuals_only is true, you can omit any work that doesn't visually appear on the character sprite
*/
-/datum/outfit/proc/post_equip(mob/living/carbon/human/user, visualsOnly = FALSE)
+/datum/outfit/proc/post_equip(mob/living/carbon/human/user, visuals_only = FALSE)
//to be overridden for toggling internals, id binding, access etc
return
@@ -163,7 +163,7 @@
user.equip_to_slot_or_del(SSwardrobe.provide_type(##item_path, user), ##slot_name, TRUE, indirect_action = TRUE); \
var/obj/item/outfit_item = user.get_item_by_slot(##slot_name); \
if (outfit_item && outfit_item.type == ##item_path) { \
- outfit_item.on_outfit_equip(user, visualsOnly, ##slot_name); \
+ outfit_item.on_outfit_equip(user, visuals_only, ##slot_name); \
} \
}
@@ -171,12 +171,12 @@
* Equips all defined types and paths to the mob passed in
*
* Extra Arguments
- * * visualsOnly true if this is only for display (in the character setup screen)
+ * * visuals_only true if this is only for display (in the character setup screen)
*
- * If visualsOnly is true, you can omit any work that doesn't visually appear on the character sprite
+ * If visuals_only is true, you can omit any work that doesn't visually appear on the character sprite
*/
-/datum/outfit/proc/equip(mob/living/carbon/human/user, visualsOnly = FALSE)
- pre_equip(user, visualsOnly)
+/datum/outfit/proc/equip(mob/living/carbon/human/user, visuals_only = FALSE)
+ pre_equip(user, visuals_only)
//Start with uniform,suit,backpack for additional slots
if(uniform)
@@ -203,7 +203,7 @@
EQUIP_OUTFIT_ITEM(back, ITEM_SLOT_BACK)
if(id)
EQUIP_OUTFIT_ITEM(id, ITEM_SLOT_ID)
- if(!visualsOnly && id_trim && user.wear_id)
+ if(!visuals_only && id_trim && user.wear_id)
var/obj/item/card/id/id_card = user.wear_id
if(!istype(id_card)) //If an ID wasn't found in their ID slot, it's probably something holding their ID like a wallet or PDA
id_card = locate() in user.wear_id
@@ -240,11 +240,11 @@
WARNING("Unable to equip accessory [accessory] in outfit [name]. No uniform present!")
if(l_hand)
- user.put_in_l_hand(SSwardrobe.provide_type(l_hand, user))
+ user.put_in_l_hand(SSwardrobe.provide_type(l_hand, user), visuals_only = visuals_only)
if(r_hand)
- user.put_in_r_hand(SSwardrobe.provide_type(r_hand, user))
+ user.put_in_r_hand(SSwardrobe.provide_type(r_hand, user), visuals_only = visuals_only)
- if(!visualsOnly) // Items in pockets or backpack don't show up on mob's icon.
+ if(!visuals_only) // Items in pockets or backpack don't show up on mob's icon.
if(l_pocket)
EQUIP_OUTFIT_ITEM(l_pocket, ITEM_SLOT_LPOCKET)
if(r_pocket)
@@ -272,9 +272,9 @@
for(var/i in 1 to number)
EQUIP_OUTFIT_ITEM(path, ITEM_SLOT_BELTPACK)
- post_equip(user, visualsOnly)
+ post_equip(user, visuals_only)
- if(!visualsOnly)
+ if(!visuals_only)
apply_fingerprints(user)
if(internals_slot)
if(internals_slot & ITEM_SLOT_HANDS)
diff --git a/code/datums/quirks/negative_quirks/addict.dm b/code/datums/quirks/negative_quirks/addict.dm
index 767d9283baef0..62262dc3bf7e4 100644
--- a/code/datums/quirks/negative_quirks/addict.dm
+++ b/code/datums/quirks/negative_quirks/addict.dm
@@ -145,15 +145,15 @@
quirk_holder.add_mob_memory(/datum/memory/key/quirk_smoker, protagonist = quirk_holder, preferred_brand = initial(drug_container_type.name))
// smoker lungs have 25% less health and healing
var/mob/living/carbon/carbon_holder = quirk_holder
- var/obj/item/organ/internal/lungs/smoker_lungs = null
- var/obj/item/organ/internal/lungs/old_lungs = carbon_holder.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/smoker_lungs = null
+ var/obj/item/organ/lungs/old_lungs = carbon_holder.get_organ_slot(ORGAN_SLOT_LUNGS)
if(old_lungs && IS_ORGANIC_ORGAN(old_lungs))
if(isplasmaman(carbon_holder))
- smoker_lungs = /obj/item/organ/internal/lungs/plasmaman/plasmaman_smoker
+ smoker_lungs = /obj/item/organ/lungs/plasmaman/plasmaman_smoker
else if(isethereal(carbon_holder))
- smoker_lungs = /obj/item/organ/internal/lungs/ethereal/ethereal_smoker
+ smoker_lungs = /obj/item/organ/lungs/ethereal/ethereal_smoker
else
- smoker_lungs = /obj/item/organ/internal/lungs/smoker_lungs
+ smoker_lungs = /obj/item/organ/lungs/smoker_lungs
if(!isnull(smoker_lungs))
smoker_lungs = new smoker_lungs
smoker_lungs.Insert(carbon_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED)
@@ -211,13 +211,13 @@
RegisterSignal(quirk_holder, COMSIG_MOB_REAGENT_CHECK, PROC_REF(check_brandy))
var/obj/item/reagent_containers/brandy_container = drug_container_type
if(isnull(brandy_container))
- stack_trace("Alcoholic quirk added while the GLOB.alcohol_containers is (somehow) not initialized!")
+ stack_trace("Alcoholic quirk added while the GLOB.possible_alcoholic_addictions is (somehow) not initialized!")
brandy_container = new drug_container_type
qdel(brandy_container)
quirk_holder.add_mob_memory(/datum/memory/key/quirk_alcoholic, protagonist = quirk_holder, preferred_brandy = initial(favorite_alcohol.name))
// alcoholic livers have 25% less health and healing
- var/obj/item/organ/internal/liver/alcohol_liver = quirk_holder.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/alcohol_liver = quirk_holder.get_organ_slot(ORGAN_SLOT_LIVER)
if(alcohol_liver && IS_ORGANIC_ORGAN(alcohol_liver)) // robotic livers aren't affected
alcohol_liver.maxHealth = alcohol_liver.maxHealth * 0.75
alcohol_liver.healing_factor = alcohol_liver.healing_factor * 0.75
diff --git a/code/datums/quirks/negative_quirks/photophobia.dm b/code/datums/quirks/negative_quirks/photophobia.dm
index 4388c3da361c4..affba86ea51ec 100644
--- a/code/datums/quirks/negative_quirks/photophobia.dm
+++ b/code/datums/quirks/negative_quirks/photophobia.dm
@@ -27,23 +27,23 @@
COMSIG_CARBON_LOSE_ORGAN,
COMSIG_MOVABLE_MOVED,))
quirk_holder.clear_mood_event(MOOD_CATEGORY_PHOTOPHOBIA)
- var/obj/item/organ/internal/eyes/normal_eyes = quirk_holder.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/normal_eyes = quirk_holder.get_organ_slot(ORGAN_SLOT_EYES)
if(istype(normal_eyes))
normal_eyes.flash_protect = initial(normal_eyes.flash_protect)
-/datum/quirk/photophobia/proc/check_eyes(obj/item/organ/internal/eyes/sensitive_eyes)
+/datum/quirk/photophobia/proc/check_eyes(obj/item/organ/eyes/sensitive_eyes)
SIGNAL_HANDLER
if(!istype(sensitive_eyes))
return
update_eyes(sensitive_eyes)
-/datum/quirk/photophobia/proc/update_eyes(obj/item/organ/internal/eyes/target_eyes)
+/datum/quirk/photophobia/proc/update_eyes(obj/item/organ/eyes/target_eyes)
if(!istype(target_eyes))
return
target_eyes.flash_protect = max(target_eyes.flash_protect - severity, FLASH_PROTECTION_HYPER_SENSITIVE) // DOPPLER EDIT CHANGE - ORIGINAL: target_eyes.flash_protect = max(target_eyes.flash_protect - 1, FLASH_PROTECTION_HYPER_SENSITIVE)
target_eyes.refresh() // DOPPLER EDIT ADDITION
-/datum/quirk/photophobia/proc/restore_eyes(obj/item/organ/internal/eyes/normal_eyes)
+/datum/quirk/photophobia/proc/restore_eyes(obj/item/organ/eyes/normal_eyes)
SIGNAL_HANDLER
if(!istype(normal_eyes))
return
diff --git a/code/datums/quirks/negative_quirks/prosthetic_organ.dm b/code/datums/quirks/negative_quirks/prosthetic_organ.dm
index 4a377699b40ac..2b0f20b0d9f84 100644
--- a/code/datums/quirks/negative_quirks/prosthetic_organ.dm
+++ b/code/datums/quirks/negative_quirks/prosthetic_organ.dm
@@ -46,16 +46,16 @@
var/obj/item/organ/prosthetic
switch(organ_slot)
if(ORGAN_SLOT_HEART)
- prosthetic = new /obj/item/organ/internal/heart/cybernetic/surplus
+ prosthetic = new /obj/item/organ/heart/cybernetic/surplus
slot_string = "heart"
if(ORGAN_SLOT_LUNGS)
- prosthetic = new /obj/item/organ/internal/lungs/cybernetic/surplus
+ prosthetic = new /obj/item/organ/lungs/cybernetic/surplus
slot_string = "lungs"
if(ORGAN_SLOT_LIVER)
- prosthetic = new /obj/item/organ/internal/liver/cybernetic/surplus
+ prosthetic = new /obj/item/organ/liver/cybernetic/surplus
slot_string = "liver"
if(ORGAN_SLOT_STOMACH)
- prosthetic = new /obj/item/organ/internal/stomach/cybernetic/surplus
+ prosthetic = new /obj/item/organ/stomach/cybernetic/surplus
slot_string = "stomach"
medical_record_text = "During physical examination, patient was found to have a low-budget prosthetic [slot_string]. \
Removal of these organs is known to be dangerous to the patient as well as the practitioner."
diff --git a/code/datums/quirks/negative_quirks/scarred_eye.dm b/code/datums/quirks/negative_quirks/scarred_eye.dm
index 49628545cfa0d..11b3f16f8aae5 100644
--- a/code/datums/quirks/negative_quirks/scarred_eye.dm
+++ b/code/datums/quirks/negative_quirks/scarred_eye.dm
@@ -35,7 +35,7 @@
/datum/quirk/item_quirk/scarred_eye/add(client/client_source)
var/mob/living/carbon/human/human_owner = quirk_holder
- var/obj/item/organ/internal/eyes/eyes = human_owner.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = human_owner.get_organ_slot(ORGAN_SLOT_EYES)
if (isnull(eyes))
return
@@ -57,7 +57,7 @@
/datum/quirk/item_quirk/scarred_eye/remove()
var/mob/living/carbon/human/human_owner = quirk_holder
- var/obj/item/organ/internal/eyes/eyes = human_owner.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = human_owner.get_organ_slot(ORGAN_SLOT_EYES)
if (!isnull(eyes))
eyes.fix_scar(RIGHT_EYE_SCAR)
eyes.fix_scar(LEFT_EYE_SCAR)
diff --git a/code/datums/quirks/negative_quirks/tin_man.dm b/code/datums/quirks/negative_quirks/tin_man.dm
index e6d411bc772f1..0afd8874bed49 100644
--- a/code/datums/quirks/negative_quirks/tin_man.dm
+++ b/code/datums/quirks/negative_quirks/tin_man.dm
@@ -11,10 +11,10 @@
/datum/quirk/tin_man/add_unique(client/client_source)
var/mob/living/carbon/human/human_holder = quirk_holder
var/static/list/organ_slots = list(
- ORGAN_SLOT_HEART = /obj/item/organ/internal/heart/cybernetic/surplus,
- ORGAN_SLOT_LUNGS = /obj/item/organ/internal/lungs/cybernetic/surplus,
- ORGAN_SLOT_LIVER = /obj/item/organ/internal/liver/cybernetic/surplus,
- ORGAN_SLOT_STOMACH = /obj/item/organ/internal/stomach/cybernetic/surplus,
+ ORGAN_SLOT_HEART = /obj/item/organ/heart/cybernetic/surplus,
+ ORGAN_SLOT_LUNGS = /obj/item/organ/lungs/cybernetic/surplus,
+ ORGAN_SLOT_LIVER = /obj/item/organ/liver/cybernetic/surplus,
+ ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/cybernetic/surplus,
)
var/list/possible_organ_slots = organ_slots.Copy()
if(HAS_TRAIT(human_holder, TRAIT_NOBLOOD))
diff --git a/code/datums/quirks/neutral_quirks/deviant_tastes.dm b/code/datums/quirks/neutral_quirks/deviant_tastes.dm
index 566b469c7a77d..5be181f96b5a8 100644
--- a/code/datums/quirks/neutral_quirks/deviant_tastes.dm
+++ b/code/datums/quirks/neutral_quirks/deviant_tastes.dm
@@ -9,7 +9,7 @@
mail_goodies = list(/obj/item/food/urinalcake, /obj/item/food/badrecipe) // Mhhhmmm yummy
/datum/quirk/deviant_tastes/add(client/client_source)
- var/obj/item/organ/internal/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
if(!tongue)
return
var/liked_foodtypes = tongue.liked_foodtypes
@@ -17,7 +17,7 @@
tongue.disliked_foodtypes = liked_foodtypes
/datum/quirk/deviant_tastes/remove()
- var/obj/item/organ/internal/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
if(!tongue)
return
tongue.liked_foodtypes = initial(tongue.liked_foodtypes)
diff --git a/code/datums/quirks/neutral_quirks/gamer.dm b/code/datums/quirks/neutral_quirks/gamer.dm
index 0ab2e780480ee..9055b09ce7fe6 100644
--- a/code/datums/quirks/neutral_quirks/gamer.dm
+++ b/code/datums/quirks/neutral_quirks/gamer.dm
@@ -13,7 +13,7 @@
var/gaming_withdrawal_timer = TIMER_ID_NULL
/datum/quirk/gamer/add(client/client_source)
- var/obj/item/organ/internal/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
if(tongue)
// Gamer diet
tongue.liked_foodtypes = JUNKFOOD
@@ -26,7 +26,7 @@
gaming_withdrawal_timer = addtimer(CALLBACK(src, PROC_REF(enter_withdrawal)), GAMING_WITHDRAWAL_TIME, TIMER_STOPPABLE)
/datum/quirk/gamer/remove()
- var/obj/item/organ/internal/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
if(tongue)
tongue.liked_foodtypes = initial(tongue.liked_foodtypes)
UnregisterSignal(quirk_holder, COMSIG_MOB_WON_VIDEOGAME)
diff --git a/code/datums/quirks/neutral_quirks/heretochromatic.dm b/code/datums/quirks/neutral_quirks/heretochromatic.dm
index 311cbf66868f0..daa018726ad89 100644
--- a/code/datums/quirks/neutral_quirks/heretochromatic.dm
+++ b/code/datums/quirks/neutral_quirks/heretochromatic.dm
@@ -22,7 +22,7 @@
human_holder.eye_color_right = color
human_holder.dna.update_ui_block(DNA_EYE_COLOR_RIGHT_BLOCK)
- var/obj/item/organ/internal/eyes/eyes_of_the_holder = quirk_holder.get_organ_by_type(/obj/item/organ/internal/eyes)
+ var/obj/item/organ/eyes/eyes_of_the_holder = quirk_holder.get_organ_by_type(/obj/item/organ/eyes)
if(!eyes_of_the_holder)
return
@@ -39,7 +39,7 @@
human_holder.eye_color_right = human_holder.eye_color_left
UnregisterSignal(human_holder, COMSIG_CARBON_LOSE_ORGAN)
-/datum/quirk/heterochromatic/proc/check_eye_removal(datum/source, obj/item/organ/internal/eyes/removed)
+/datum/quirk/heterochromatic/proc/check_eye_removal(datum/source, obj/item/organ/eyes/removed)
SIGNAL_HANDLER
if(!istype(removed))
diff --git a/code/datums/quirks/neutral_quirks/pineapple_hater.dm b/code/datums/quirks/neutral_quirks/pineapple_hater.dm
index f17eb4224ec4c..858963e0a36e0 100644
--- a/code/datums/quirks/neutral_quirks/pineapple_hater.dm
+++ b/code/datums/quirks/neutral_quirks/pineapple_hater.dm
@@ -15,13 +15,13 @@
)
/datum/quirk/pineapple_hater/add(client/client_source)
- var/obj/item/organ/internal/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
if(!tongue)
return
tongue.disliked_foodtypes |= PINEAPPLE
/datum/quirk/pineapple_hater/remove()
- var/obj/item/organ/internal/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
if(!tongue)
return
tongue.disliked_foodtypes = initial(tongue.disliked_foodtypes)
diff --git a/code/datums/quirks/neutral_quirks/pineapple_liker.dm b/code/datums/quirks/neutral_quirks/pineapple_liker.dm
index c342e14769cf8..d2de14a0e8163 100644
--- a/code/datums/quirks/neutral_quirks/pineapple_liker.dm
+++ b/code/datums/quirks/neutral_quirks/pineapple_liker.dm
@@ -9,13 +9,13 @@
mail_goodies = list(/obj/item/food/pizzaslice/pineapple)
/datum/quirk/pineapple_liker/add(client/client_source)
- var/obj/item/organ/internal/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
if(!tongue)
return
tongue.liked_foodtypes |= PINEAPPLE
/datum/quirk/pineapple_liker/remove()
- var/obj/item/organ/internal/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
if(!tongue)
return
tongue.liked_foodtypes = initial(tongue.liked_foodtypes)
diff --git a/code/datums/quirks/positive_quirks/chip_connector.dm b/code/datums/quirks/positive_quirks/chip_connector.dm
index c12809bbfd2ef..6fcc5bf9d31be 100644
--- a/code/datums/quirks/positive_quirks/chip_connector.dm
+++ b/code/datums/quirks/positive_quirks/chip_connector.dm
@@ -7,7 +7,7 @@
lose_text = span_danger("You don't feel so CONNECTED anymore.")
medical_record_text = "Patient has a cybernetic implant on their back of their head that lets them install and remove skillchips at will. Gross."
mail_goodies = list()
- var/obj/item/organ/internal/cyberimp/brain/connector/connector
+ var/obj/item/organ/cyberimp/brain/connector/connector
/datum/quirk/chip_connector/New()
. = ..()
diff --git a/code/datums/quirks/positive_quirks/chipped.dm b/code/datums/quirks/positive_quirks/chipped.dm
index 30c226c130031..7f43fc07b5bbc 100644
--- a/code/datums/quirks/positive_quirks/chipped.dm
+++ b/code/datums/quirks/positive_quirks/chipped.dm
@@ -42,7 +42,7 @@
quirk_holder_carbon.implant_skillchip(installed_chip, force = TRUE)
installed_chip.try_activate_skillchip(silent = FALSE, force = TRUE)
- var/obj/item/organ/internal/brain/itchy_brain = quirk_holder.get_organ_by_type(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/itchy_brain = quirk_holder.get_organ_by_type(ORGAN_SLOT_BRAIN)
itchy_timer = addtimer(CALLBACK(src, PROC_REF(cause_itchy), itchy_brain), rand(5 SECONDS, 10 MINUTES)) // they get The Itch from a poor quality install every so often
/datum/quirk/chipped/remove()
@@ -50,7 +50,7 @@
deltimer(itchy_timer)
. = ..()
-/datum/quirk/chipped/proc/cause_itchy(obj/item/organ/internal/brain/itchy_brain)
+/datum/quirk/chipped/proc/cause_itchy(obj/item/organ/brain/itchy_brain)
itchy_brain.apply_organ_damage(rand(1, 5), maximum = itchy_brain.maxHealth * 0.3)
to_chat(itchy_brain.owner, span_warning("Your [itchy_brain] itches."))
diff --git a/code/datums/quirks/positive_quirks/friendly.dm b/code/datums/quirks/positive_quirks/friendly.dm
index 943bc2c4b8457..26b42f554f922 100644
--- a/code/datums/quirks/positive_quirks/friendly.dm
+++ b/code/datums/quirks/positive_quirks/friendly.dm
@@ -12,12 +12,12 @@
/datum/quirk/friendly/add_unique(client/client_source)
var/mob/living/carbon/human/human_quirkholder = quirk_holder
- var/obj/item/organ/internal/heart/holder_heart = human_quirkholder.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/holder_heart = human_quirkholder.get_organ_slot(ORGAN_SLOT_HEART)
if(isnull(holder_heart) || isnull(holder_heart.reagents))
return
holder_heart.reagents.maximum_volume = 20
// We have a bigger heart full of love!
holder_heart.reagents.add_reagent(/datum/reagent/love, 2.5)
// Like, physically bigger.
- holder_heart.reagents.add_reagent(/datum/reagent/consumable/nutriment, 5)
+ holder_heart.reagents.add_reagent(/datum/reagent/consumable/nutriment/organ_tissue, 5)
holder_heart.transform = holder_heart.transform.Scale(1.5)
diff --git a/code/datums/saymode.dm b/code/datums/saymode.dm
index 3598bd764cac7..fadcbb8570946 100644
--- a/code/datums/saymode.dm
+++ b/code/datums/saymode.dm
@@ -64,7 +64,7 @@
/datum/saymode/vocalcords/handle_message(mob/living/user, message, datum/language/language)
if(iscarbon(user))
var/mob/living/carbon/C = user
- var/obj/item/organ/internal/vocal_cords/V = C.get_organ_slot(ORGAN_SLOT_VOICE)
+ var/obj/item/organ/vocal_cords/V = C.get_organ_slot(ORGAN_SLOT_VOICE)
if(V?.can_speak_with())
V.handle_speech(message) //message
V.speak_with(message) //action
diff --git a/code/datums/sprite_accessories.dm b/code/datums/sprite_accessories.dm
index 6bf66a346d743..6e8fb2da6d683 100644
--- a/code/datums/sprite_accessories.dm
+++ b/code/datums/sprite_accessories.dm
@@ -1763,19 +1763,31 @@
///Used for fish-infused tails, which come in different flavors.
/datum/sprite_accessory/tails/fish
icon = 'icons/mob/human/fish_features.dmi'
- color_src = HAIR_COLOR
+ color_src = TRUE
-/datum/sprite_accessory/tails/fish/default
- name = "Fish"
- icon_state = "fish"
+/datum/sprite_accessory/tails/fish/simple
+ name = "Simple"
+ icon_state = "simple"
+
+/datum/sprite_accessory/tails/fish/crescent
+ name = "Crescent"
+ icon_state = "crescent"
+
+/datum/sprite_accessory/tails/fish/long
+ name = "Long"
+ icon_state = "long"
+ center = TRUE
+ dimension_x = 38
/datum/sprite_accessory/tails/fish/shark
name = "Shark"
icon_state = "shark"
-/datum/sprite_accessory/tails/fish/orca
- name = "Orca"
- icon_state = "orca"
+/datum/sprite_accessory/tails/fish/chonky
+ name = "Chonky"
+ icon_state = "chonky"
+ center = TRUE
+ dimension_x = 36
/datum/sprite_accessory/tails/lizard
icon = 'icons/mob/human/species/lizard/lizard_tails.dmi'
diff --git a/code/datums/station_traits/positive_traits.dm b/code/datums/station_traits/positive_traits.dm
index c7f8869c405a3..07edc617cbd9c 100644
--- a/code/datums/station_traits/positive_traits.dm
+++ b/code/datums/station_traits/positive_traits.dm
@@ -258,42 +258,42 @@
trait_to_give = STATION_TRAIT_CYBERNETIC_REVOLUTION
/// List of all job types with the cybernetics they should receive.
var/static/list/job_to_cybernetic = list(
- /datum/job/assistant = /obj/item/organ/internal/heart/cybernetic, //real cardiac
- /datum/job/atmospheric_technician = /obj/item/organ/internal/cyberimp/mouth/breathing_tube,
- /datum/job/bartender = /obj/item/organ/internal/liver/cybernetic/tier3,
- /datum/job/bitrunner = /obj/item/organ/internal/eyes/robotic/thermals,
- /datum/job/botanist = /obj/item/organ/internal/cyberimp/chest/nutriment,
- /datum/job/captain = /obj/item/organ/internal/heart/cybernetic/tier3,
- /datum/job/cargo_technician = /obj/item/organ/internal/stomach/cybernetic/tier2,
- /datum/job/chaplain = /obj/item/organ/internal/cyberimp/brain/anti_drop,
- /datum/job/chemist = /obj/item/organ/internal/liver/cybernetic/tier2,
- /datum/job/chief_engineer = /obj/item/organ/internal/cyberimp/chest/thrusters,
- /datum/job/chief_medical_officer = /obj/item/organ/internal/cyberimp/chest/reviver,
- /datum/job/clown = /obj/item/organ/internal/cyberimp/brain/anti_stun, //HONK!
- /datum/job/cook = /obj/item/organ/internal/cyberimp/chest/nutriment/plus,
- /datum/job/coroner = /obj/item/organ/internal/tongue/bone, //hes got a bone to pick with you
- /datum/job/curator = /obj/item/organ/internal/cyberimp/brain/connector,
- /datum/job/detective = /obj/item/organ/internal/lungs/cybernetic/tier3,
- /datum/job/doctor = /obj/item/organ/internal/cyberimp/arm/surgery,
- /datum/job/geneticist = /obj/item/organ/internal/fly, //we don't care about implants, we have cancer.
- /datum/job/head_of_personnel = /obj/item/organ/internal/eyes/robotic,
- /datum/job/head_of_security = /obj/item/organ/internal/eyes/robotic/thermals,
- /datum/job/human_ai = /obj/item/organ/internal/brain/cybernetic,
- /datum/job/janitor = /obj/item/organ/internal/eyes/robotic/xray,
- /datum/job/lawyer = /obj/item/organ/internal/heart/cybernetic/tier2,
- /datum/job/mime = /obj/item/organ/internal/tongue/robot, //...
- /datum/job/paramedic = /obj/item/organ/internal/cyberimp/eyes/hud/medical,
- /datum/job/prisoner = /obj/item/organ/internal/eyes/robotic/shield,
- /datum/job/psychologist = /obj/item/organ/internal/ears/cybernetic/whisper,
- /datum/job/pun_pun = /obj/item/organ/internal/cyberimp/arm/strongarm,
- /datum/job/quartermaster = /obj/item/organ/internal/stomach/cybernetic/tier3,
- /datum/job/research_director = /obj/item/organ/internal/cyberimp/bci,
- /datum/job/roboticist = /obj/item/organ/internal/cyberimp/eyes/hud/diagnostic,
- /datum/job/scientist = /obj/item/organ/internal/ears/cybernetic,
- /datum/job/security_officer = /obj/item/organ/internal/cyberimp/arm/flash,
- /datum/job/shaft_miner = /obj/item/organ/internal/monster_core/rush_gland,
- /datum/job/station_engineer = /obj/item/organ/internal/cyberimp/arm/toolset,
- /datum/job/warden = /obj/item/organ/internal/cyberimp/eyes/hud/security,
+ /datum/job/assistant = /obj/item/organ/heart/cybernetic, //real cardiac
+ /datum/job/atmospheric_technician = /obj/item/organ/cyberimp/mouth/breathing_tube,
+ /datum/job/bartender = /obj/item/organ/liver/cybernetic/tier3,
+ /datum/job/bitrunner = /obj/item/organ/eyes/robotic/thermals,
+ /datum/job/botanist = /obj/item/organ/cyberimp/chest/nutriment,
+ /datum/job/captain = /obj/item/organ/heart/cybernetic/tier3,
+ /datum/job/cargo_technician = /obj/item/organ/stomach/cybernetic/tier2,
+ /datum/job/chaplain = /obj/item/organ/cyberimp/brain/anti_drop,
+ /datum/job/chemist = /obj/item/organ/liver/cybernetic/tier2,
+ /datum/job/chief_engineer = /obj/item/organ/cyberimp/chest/thrusters,
+ /datum/job/chief_medical_officer = /obj/item/organ/cyberimp/chest/reviver,
+ /datum/job/clown = /obj/item/organ/cyberimp/brain/anti_stun, //HONK!
+ /datum/job/cook = /obj/item/organ/cyberimp/chest/nutriment/plus,
+ /datum/job/coroner = /obj/item/organ/tongue/bone, //hes got a bone to pick with you
+ /datum/job/curator = /obj/item/organ/cyberimp/brain/connector,
+ /datum/job/detective = /obj/item/organ/lungs/cybernetic/tier3,
+ /datum/job/doctor = /obj/item/organ/cyberimp/arm/surgery,
+ /datum/job/geneticist = /obj/item/organ/fly, //we don't care about implants, we have cancer.
+ /datum/job/head_of_personnel = /obj/item/organ/eyes/robotic,
+ /datum/job/head_of_security = /obj/item/organ/eyes/robotic/thermals,
+ /datum/job/human_ai = /obj/item/organ/brain/cybernetic,
+ /datum/job/janitor = /obj/item/organ/eyes/robotic/xray,
+ /datum/job/lawyer = /obj/item/organ/heart/cybernetic/tier2,
+ /datum/job/mime = /obj/item/organ/tongue/robot, //...
+ /datum/job/paramedic = /obj/item/organ/cyberimp/eyes/hud/medical,
+ /datum/job/prisoner = /obj/item/organ/eyes/robotic/shield,
+ /datum/job/psychologist = /obj/item/organ/ears/cybernetic/whisper,
+ /datum/job/pun_pun = /obj/item/organ/cyberimp/arm/strongarm,
+ /datum/job/quartermaster = /obj/item/organ/stomach/cybernetic/tier3,
+ /datum/job/research_director = /obj/item/organ/cyberimp/bci,
+ /datum/job/roboticist = /obj/item/organ/cyberimp/eyes/hud/diagnostic,
+ /datum/job/scientist = /obj/item/organ/ears/cybernetic,
+ /datum/job/security_officer = /obj/item/organ/cyberimp/arm/flash,
+ /datum/job/shaft_miner = /obj/item/organ/monster_core/rush_gland,
+ /datum/job/station_engineer = /obj/item/organ/cyberimp/arm/toolset,
+ /datum/job/warden = /obj/item/organ/cyberimp/eyes/hud/security,
)
/datum/station_trait/cybernetic_revolution/New()
@@ -312,7 +312,7 @@
var/mob/living/silicon/ai/ai = spawned
ai.eyeobj.relay_speech = TRUE //surveillance upgrade. the ai gets cybernetics too.
return
- var/obj/item/organ/internal/cybernetic = new cybernetic_type()
+ var/obj/item/organ/cybernetic = new cybernetic_type()
cybernetic.Insert(spawned, special = TRUE, movement_flags = DELETE_IF_REPLACED)
/datum/station_trait/luxury_escape_pods
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index 7a6b263d5893e..3b197ec7f9719 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -433,7 +433,7 @@
owner.reagents.add_reagent(/datum/reagent/medicine/adminordrazine, 25)
owner.log_message("entered a blood frenzy", LOG_ATTACK)
- to_chat(owner, span_warning("KILL, KILL, KILL! YOU HAVE NO ALLIES ANYMORE, KILL THEM ALL!"))
+ to_chat(owner, span_narsiesmall("KILL, KILL, KILL! YOU HAVE NO ALLIES ANYMORE, NO TEAM MATES OR ALLEGIANCES! KILL THEM ALL!"))
var/datum/client_colour/colour = owner.add_client_colour(/datum/client_colour/bloodlust)
QDEL_IN(colour, 1.1 SECONDS)
diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm
index 5dab783eb37a0..806bbc39d8ba4 100644
--- a/code/datums/status_effects/debuffs/debuffs.dm
+++ b/code/datums/status_effects/debuffs/debuffs.dm
@@ -386,11 +386,10 @@
/datum/status_effect/stacking/saw_bleed/threshold_cross_effect()
owner.adjustBruteLoss(bleed_damage)
- var/turf/T = get_turf(owner)
- new /obj/effect/temp_visual/bleed/explode(T)
- for(var/d in GLOB.alldirs)
- new /obj/effect/temp_visual/dir_setting/bloodsplatter(T, d)
- playsound(T, SFX_DESECRATION, 100, TRUE, -1)
+ new /obj/effect/temp_visual/bleed/explode(get_turf(owner))
+ for(var/splatter_dir in GLOB.alldirs)
+ owner.create_splatter(splatter_dir)
+ playsound(owner, SFX_DESECRATION, 100, TRUE, -1)
/datum/status_effect/stacking/saw_bleed/bloodletting
id = "bloodletting"
diff --git a/code/datums/status_effects/debuffs/drunk.dm b/code/datums/status_effects/debuffs/drunk.dm
index 2664bbb4214de..a1ff3c7fb4eaf 100644
--- a/code/datums/status_effects/debuffs/drunk.dm
+++ b/code/datums/status_effects/debuffs/drunk.dm
@@ -136,7 +136,7 @@
// Handle the Ballmer Peak.
// If our owner is a scientist (has the trait "TRAIT_BALLMER_SCIENTIST"), there's a 5% chance
// that they'll say one of the special "ballmer message" lines, depending their drunk-ness level.
- var/obj/item/organ/internal/liver/liver_organ = owner.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver_organ = owner.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver_organ && HAS_TRAIT(liver_organ, TRAIT_BALLMER_SCIENTIST) && prob(5))
if(drunk_value >= BALLMER_PEAK_LOW_END && drunk_value <= BALLMER_PEAK_HIGH_END)
owner.say(pick_list_replacements(VISTA_FILE, "ballmer_good_msg"), forced = "ballmer")
diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm
index a6607cd7797e2..0056c55a7f6d4 100644
--- a/code/datums/status_effects/neutral.dm
+++ b/code/datums/status_effects/neutral.dm
@@ -547,7 +547,7 @@
if(QDELETED(human_mob))
return
if(prob(1))//low chance of the alternative reality returning to monkey
- var/obj/item/organ/external/tail/monkey/monkey_tail = new ()
+ var/obj/item/organ/tail/monkey/monkey_tail = new ()
monkey_tail.Insert(human_mob, movement_flags = DELETE_IF_REPLACED)
var/datum/species/human_species = human_mob.dna?.species
if(human_species)
diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm
index e7122f4b355d7..1c9ba2a177e74 100644
--- a/code/datums/storage/storage.dm
+++ b/code/datums/storage/storage.dm
@@ -171,6 +171,7 @@
arrived.item_flags |= IN_STORAGE
refresh_views()
arrived.on_enter_storage(src)
+ RegisterSignal(arrived, COMSIG_MOUSEDROPPED_ONTO, PROC_REF(mousedrop_receive))
SEND_SIGNAL(arrived, COMSIG_ITEM_STORED, src)
parent.update_appearance()
@@ -184,6 +185,7 @@
gone.item_flags &= ~IN_STORAGE
remove_and_refresh(gone)
gone.on_exit_storage(src)
+ UnregisterSignal(gone, COMSIG_MOUSEDROPPED_ONTO)
SEND_SIGNAL(gone, COMSIG_ITEM_UNSTORED, src)
parent.update_appearance()
@@ -451,7 +453,6 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
SEND_SIGNAL(parent, COMSIG_ATOM_STORED_ITEM, to_insert, user, force)
SEND_SIGNAL(src, COMSIG_STORAGE_STORED_ITEM, to_insert, user, force)
- RegisterSignal(to_insert, COMSIG_MOUSEDROPPED_ONTO, PROC_REF(mousedrop_receive))
to_insert.forceMove(real_location)
item_insertion_feedback(user, to_insert, override)
parent.update_appearance()
@@ -468,7 +469,6 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
return
if (target.loc != real_location) // what even
- UnregisterSignal(target, COMSIG_MOUSEDROPPED_ONTO)
return
if(numerical_stacking)
@@ -573,7 +573,6 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
refresh_views()
parent.update_appearance()
- UnregisterSignal(thing, COMSIG_MOUSEDROPPED_ONTO)
SEND_SIGNAL(parent, COMSIG_ATOM_REMOVED_ITEM, thing, remove_to_loc, silent)
SEND_SIGNAL(src, COMSIG_STORAGE_REMOVED_ITEM, thing, remove_to_loc, silent)
return TRUE
diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm
index 8c646c9536fa2..8209fb93facf3 100644
--- a/code/datums/wounds/bones.dm
+++ b/code/datums/wounds/bones.dm
@@ -159,14 +159,7 @@
span_danger("You spit out a string of blood from the blow to your chest!"),
vision_distance = COMBAT_MESSAGE_RANGE,
)
- // DOPPLER EDIT ADDITION BEGIN - Green blood color
- if(hasgreenblood(victim))
- new /obj/effect/temp_visual/dir_setting/bloodsplatter/green(victim.loc, victim.dir)
- if(hasblueblood(victim))
- new /obj/effect/temp_visual/dir_setting/bloodsplatter/blue(victim.loc, victim.dir)
- else
- new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir)
- // DOPPLER EDIT ADDITION END
+ victim.create_splatter(victim.dir)
victim.bleed(blood_bled)
if(20 to INFINITY)
victim.visible_message(
@@ -175,14 +168,7 @@
vision_distance = COMBAT_MESSAGE_RANGE,
)
victim.bleed(blood_bled)
- // DOPPLER EDIT ADDITION BEGIN - Green blood color
- if(hasgreenblood(victim))
- new /obj/effect/temp_visual/dir_setting/bloodsplatter/green(victim.loc, victim.dir)
- if(hasblueblood(victim))
- new /obj/effect/temp_visual/dir_setting/bloodsplatter/blue(victim.loc, victim.dir)
- else
- new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir)
- // DOPPLER EDIT ADDITION END
+ victim.create_splatter(victim.dir)
victim.add_splatter_floor(get_step(victim.loc, victim.dir))
/datum/wound/blunt/bone/modify_desc_before_span(desc)
diff --git a/code/datums/wounds/cranial_fissure.dm b/code/datums/wounds/cranial_fissure.dm
index 8feebe8d2b624..615d0d10eb0e6 100644
--- a/code/datums/wounds/cranial_fissure.dm
+++ b/code/datums/wounds/cranial_fissure.dm
@@ -66,7 +66,7 @@
if (source.stat == DEAD)
return
- var/obj/item/organ/internal/brain/brain = source.get_organ_by_type(/obj/item/organ/internal/brain)
+ var/obj/item/organ/brain/brain = source.get_organ_by_type(/obj/item/organ/brain)
if (isnull(brain))
return
@@ -91,7 +91,7 @@
if (victim.body_position != LYING_DOWN)
return FALSE
- var/obj/item/organ/internal/eyes/eyes = victim.get_organ_by_type(/obj/item/organ/internal/eyes)
+ var/obj/item/organ/eyes/eyes = victim.get_organ_by_type(/obj/item/organ/eyes)
if (isnull(eyes))
victim.balloon_alert(user, "no eyes to take!")
return TRUE
@@ -131,9 +131,9 @@
return TRUE
-/datum/wound/cranial_fissure/proc/still_has_eyes(obj/item/organ/internal/eyes/eyes)
+/datum/wound/cranial_fissure/proc/still_has_eyes(obj/item/organ/eyes/eyes)
PRIVATE_PROC(TRUE)
- return victim?.get_organ_by_type(/obj/item/organ/internal/eyes) == eyes
+ return victim?.get_organ_by_type(/obj/item/organ/eyes) == eyes
#undef CRANIAL_FISSURE_FILTER_DISPLACEMENT
diff --git a/code/datums/wounds/pierce.dm b/code/datums/wounds/pierce.dm
index dfa8060267d39..6c6eb74ec315b 100644
--- a/code/datums/wounds/pierce.dm
+++ b/code/datums/wounds/pierce.dm
@@ -54,12 +54,7 @@
span_danger("You spit out a string of blood from the blow to your [limb.plaintext_zone]!"),
vision_distance = COMBAT_MESSAGE_RANGE,
)
- // DOPPLER EDIT ADDITION BEGIN - Green blood color
- if(hasgreenblood(victim))
- new /obj/effect/temp_visual/dir_setting/bloodsplatter/green(victim.loc, victim.dir)
- else
- new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir)
- // DOPPLER EDIT ADDITION END
+ victim.create_splatter(victim.dir)
victim.bleed(blood_bled)
if(20 to INFINITY)
victim.visible_message(
@@ -68,12 +63,7 @@
vision_distance = COMBAT_MESSAGE_RANGE,
)
victim.bleed(blood_bled)
- // DOPPLER EDIT ADDITION BEGIN - Green blood color
- if(hasgreenblood(victim))
- new /obj/effect/temp_visual/dir_setting/bloodsplatter/green(victim.loc, victim.dir)
- else
- new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir)
- // DOPPLER EDIT ADDITION END
+ victim.create_splatter(victim.dir)
victim.add_splatter_floor(get_step(victim.loc, victim.dir))
/datum/wound/pierce/bleed/get_bleed_rate_of_change()
@@ -273,7 +263,7 @@
var/right_side = FALSE
/datum/wound/pierce/bleed/severe/eye/apply_wound(obj/item/bodypart/limb, silent, datum/wound/old_wound, smited, attack_direction, wound_source, replacing, right_side)
- var/obj/item/organ/internal/eyes/eyes = locate() in limb
+ var/obj/item/organ/eyes/eyes = locate() in limb
if (!istype(eyes))
return FALSE
. = ..()
@@ -305,7 +295,7 @@
can_be_randomly_generated = FALSE
/datum/wound_pregen_data/flesh_pierce/open_puncture/eye/can_be_applied_to(obj/item/bodypart/limb, list/suggested_wounding_types, datum/wound/old_wound, random_roll, duplicates_allowed, care_about_existing_wounds)
- if (isnull(locate(/obj/item/organ/internal/eyes) in limb))
+ if (isnull(locate(/obj/item/organ/eyes) in limb))
return FALSE
return ..()
diff --git a/code/game/area/areas/ruins/space.dm b/code/game/area/areas/ruins/space.dm
index ac687d6024a88..2e25aeb2d6fd4 100644
--- a/code/game/area/areas/ruins/space.dm
+++ b/code/game/area/areas/ruins/space.dm
@@ -369,9 +369,9 @@
// Area define for organization
/area/ruin/space/ks13/engineering
-/area/ruin/space/ks13/engineering/singulo
- name = "\improper Derelict Singulairty Engine"
- icon_state = "ks13_singulo"
+/area/ruin/space/ks13/engineering/supermatter
+ name = "\improper Derelict Supermatter Engine"
+ icon_state = "ks13_supermatter"
/area/ruin/space/ks13/engineering/atmos
name = "\improper Derelict Atmospherics"
diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm
index 691badb31c1d0..d981cadaf8274 100644
--- a/code/game/atom/_atom.dm
+++ b/code/game/atom/_atom.dm
@@ -199,7 +199,7 @@
var/turf/p_turf = get_turf(ricocheting_projectile)
var/face_direction = get_dir(src, p_turf) || get_dir(src, ricocheting_projectile)
var/face_angle = dir2angle(face_direction)
- var/incidence_s = GET_ANGLE_OF_INCIDENCE(face_angle, (ricocheting_projectile.Angle + 180))
+ var/incidence_s = GET_ANGLE_OF_INCIDENCE(face_angle, (ricocheting_projectile.angle + 180))
var/a_incidence_s = abs(incidence_s)
if(a_incidence_s > 90 && a_incidence_s < 270)
return FALSE
@@ -700,6 +700,9 @@
/atom/proc/OnCreatedFromProcessing(mob/living/user, obj/item/work_tool, list/chosen_option, atom/original_atom)
SHOULD_CALL_PARENT(TRUE)
+ if(HAS_TRAIT(original_atom, TRAIT_FOOD_SILVER))
+ ADD_TRAIT(src, TRAIT_FOOD_SILVER, INNATE_TRAIT) // stinky food always stinky
+
SEND_SIGNAL(src, COMSIG_ATOM_CREATEDBY_PROCESSING, original_atom, chosen_option)
if(user.mind)
ADD_TRAIT(src, TRAIT_FOOD_CHEF_MADE, REF(user.mind))
diff --git a/code/game/atom/atom_act.dm b/code/game/atom/atom_act.dm
index 7b69f02340c87..8565d790612c2 100644
--- a/code/game/atom/atom_act.dm
+++ b/code/game/atom/atom_act.dm
@@ -151,7 +151,7 @@
*
* Default behaviour is to send [COMSIG_ATOM_SING_PULL] and return
*/
-/atom/proc/singularity_pull(obj/singularity/singularity, current_size)
+/atom/proc/singularity_pull(atom/singularity, current_size)
SEND_SIGNAL(src, COMSIG_ATOM_SING_PULL, singularity, current_size)
/**
diff --git a/code/game/atom/atom_materials.dm b/code/game/atom/atom_materials.dm
index cb88c83f3eb8c..305c8b217d941 100644
--- a/code/game/atom/atom_materials.dm
+++ b/code/game/atom/atom_materials.dm
@@ -10,11 +10,11 @@
/// Sets the custom materials for an atom. This is what you want to call, since most of the ones below are mainly internal.
/atom/proc/set_custom_materials(list/materials, multiplier = 1)
SHOULD_NOT_OVERRIDE(TRUE)
+ var/replace_mats = length(materials)
if(length(custom_materials))
- remove_material_effects()
+ remove_material_effects(replace_mats)
- if(!length(materials))
- custom_materials = null
+ if(!replace_mats)
return
initialize_materials(materials, multiplier)
@@ -31,27 +31,30 @@
materials[current_material] *= multiplier
apply_material_effects(materials)
- custom_materials = SSmaterials.FindOrCreateMaterialCombo(materials)
///proc responsible for applying material effects when setting materials.
/atom/proc/apply_material_effects(list/materials)
SHOULD_CALL_PARENT(TRUE)
- if(!materials || !(material_flags & MATERIAL_EFFECTS))
- return
- var/list/material_effects = get_material_effects_list(materials)
- finalize_material_effects(material_effects)
+ if(material_flags & MATERIAL_EFFECTS)
+ var/list/material_effects = get_material_effects_list(materials)
+ finalize_material_effects(material_effects)
+
+ custom_materials = SSmaterials.FindOrCreateMaterialCombo(materials)
/// Proc responsible for removing material effects when setting materials.
-/atom/proc/remove_material_effects()
+/atom/proc/remove_material_effects(replace_mats = TRUE)
SHOULD_CALL_PARENT(TRUE)
//Only runs if custom materials existed at first and affected src.
- if(!custom_materials || !(material_flags & MATERIAL_EFFECTS))
- return
- var/list/material_effects = get_material_effects_list(custom_materials)
- finalize_remove_material_effects(material_effects)
+ if(material_flags & MATERIAL_EFFECTS)
+ var/list/material_effects = get_material_effects_list(custom_materials)
+ finalize_remove_material_effects(material_effects)
+
+ if(!replace_mats)
+ custom_materials = null
/atom/proc/get_material_effects_list(list/materials)
SHOULD_NOT_OVERRIDE(TRUE)
+ PRIVATE_PROC(TRUE)
var/list/material_effects = list()
var/index = 1
for(var/current_material in materials)
@@ -107,10 +110,10 @@
apply_main_material_effects(main_material, main_mat_amount, main_mat_mult)
if(material_flags & (MATERIAL_COLOR|MATERIAL_GREYSCALE))
- var/init_alpha = initial(alpha)
- var/alpha_value = (total_alpha / length(materials)) * init_alpha
+ var/previous_alpha = alpha
+ alpha *= (total_alpha / length(materials))/255
- if(alpha_value < init_alpha * 0.9)
+ if(alpha < previous_alpha * 0.9)
opacity = FALSE
if(material_flags & MATERIAL_GREYSCALE)
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 2611ee2386166..0780cc712f52f 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -1263,11 +1263,14 @@
if(!isturf(loc))
return TRUE
- if(locate(/obj/structure/lattice) in range(1, get_turf(src))) //Not realistic but makes pushing things in space easier
+ if (handle_spacemove_grabbing())
return TRUE
return FALSE
+/atom/movable/proc/handle_spacemove_grabbing()
+ if(locate(/obj/structure/lattice) in range(1, get_turf(src))) //Not realistic but makes pushing things in space easier
+ return TRUE
/// Only moves the object if it's under no gravity
/// Accepts the direction to move, if the push should be instant, and an optional parameter to fine tune the start delay
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index 6d05f03687f49..fd06be5726a18 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -66,15 +66,12 @@
/datum/atom_hud/abductor
hud_icons = list(GLAND_HUD)
-/datum/atom_hud/sentient_disease
- hud_icons = list(SENTIENT_DISEASE_HUD)
-
/datum/atom_hud/ai_detector
hud_icons = list(AI_DETECT_HUD)
/datum/atom_hud/ai_detector/show_to(mob/new_viewer)
- ..()
- if(!new_viewer || hud_users.len != 1)
+ . = ..()
+ if(!new_viewer || hud_users_all_z_levels.len != 1)
return
for(var/mob/camera/ai_eye/eye as anything in GLOB.aiEyes)
eye.update_ai_detect_hud()
@@ -207,6 +204,8 @@ Medical HUD! Basic mode needs suit sensors on.
else if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH)))
if(HAS_TRAIT(src, TRAIT_MIND_TEMPORARILY_GONE) || can_defib_client())
holder.icon_state = "huddefib"
+ else if(HAS_TRAIT(src, TRAIT_GHOSTROLE_ON_REVIVE))
+ holder.icon_state = "hudghost"
else
holder.icon_state = "huddead"
else
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index aea9e1a0f3b2b..ac083ea62f833 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -348,7 +348,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list
var/human_check = TRUE
/datum/objective/protect/check_completion()
- var/obj/item/organ/internal/brain/brain_target
+ var/obj/item/organ/brain/brain_target
if(isnull(target))
return FALSE
if(human_check)
diff --git a/code/game/machinery/big_manipulator.dm b/code/game/machinery/big_manipulator.dm
index 27c927697fc87..21a7de89fe619 100644
--- a/code/game/machinery/big_manipulator.dm
+++ b/code/game/machinery/big_manipulator.dm
@@ -1,6 +1,5 @@
#define DROP_ITEM_MODE 1
-#define USE_ITEM_MODE 2
-#define THROW_ITEM_MODE 3
+#define THROW_ITEM_MODE 2
#define TAKE_ITEMS 1
#define TAKE_CLOSETS 2
@@ -36,7 +35,6 @@
var/manipulate_mode = DROP_ITEM_MODE
/// Priority settings depending on the manipulator mode that are available to this manipulator. Filled during Initialize.
var/list/priority_settings_for_drop = list()
- var/list/priority_settings_for_use = list()
/// What priority settings are available to use at the moment.
/// We also use this list to sort priorities from ascending to descending.
var/list/allowed_priority_settings = list()
@@ -78,8 +76,6 @@
/obj/machinery/big_manipulator/proc/set_up_priority_settings()
for(var/datum/manipulator_priority/priority_for_drop as anything in subtypesof(/datum/manipulator_priority/for_drop))
priority_settings_for_drop += new priority_for_drop
- for(var/datum/manipulator_priority/priority_for_use as anything in subtypesof(/datum/manipulator_priority/for_use))
- priority_settings_for_use += new priority_for_use
update_priority_list()
/obj/machinery/big_manipulator/examine(mob/user)
@@ -277,8 +273,6 @@
switch(manipulate_mode)
if(DROP_ITEM_MODE)
addtimer(CALLBACK(src, PROC_REF(drop_thing), target), working_speed)
- if(USE_ITEM_MODE)
- addtimer(CALLBACK(src, PROC_REF(use_thing), target), working_speed)
if(THROW_ITEM_MODE)
addtimer(CALLBACK(src, PROC_REF(throw_thing), target), working_speed)
@@ -297,61 +291,6 @@
target.forceMove(where_we_drop)
finish_manipulation()
-/// 3.2 take and drop proc from [take and drop procs loop]:
-/// Use our item on random atom in drop turf contents then
-/// Starts manipulator hand backward animation by defualt, but
-/// You can also set the setting in ui so that it does not return to its privious position and continues to use object in its hand.
-/// Checks the priority so that you can configure which object it will select: mob/obj/turf.
-/// Also can use filter to interact only with obj in filter.
-/obj/machinery/big_manipulator/proc/use_thing(atom/movable/target)
- var/obj/obj_resolve = containment_obj?.resolve()
- if(isnull(obj_resolve))
- finish_manipulation()
- return
- /// If we forceMoved from manipulator we are free now.
- if(obj_resolve.loc != src)
- finish_manipulation()
- return
- if(!isitem(target))
- target.forceMove(drop_turf) /// We use only items
- target.dir = get_dir(get_turf(target), get_turf(src))
- finish_manipulation()
- return
- var/obj/item/im_item = target
- var/atom/type_to_use = search_type_by_priority_in_drop_turf(allowed_priority_settings)
- if(isnull(type_to_use))
- check_end_of_use(im_item, target, item_was_used = FALSE)
- return
- var/mob/living/carbon/human/dummy/living_manipulator_lmfao = create_abstract_living()
- living_manipulator_lmfao.put_in_active_hand(im_item)
- if(!type_to_use.attackby(im_item, living_manipulator_lmfao))
- im_item.melee_attack_chain(living_manipulator_lmfao, type_to_use)
- do_attack_animation(drop_turf)
- manipulator_hand.do_attack_animation(drop_turf)
- if(LAZYLEN(living_manipulator_lmfao.do_afters))
- RegisterSignal(living_manipulator_lmfao, COMSIG_DO_AFTER_ENDED, PROC_REF(manipulator_finish_do_after))
- else
- im_item.forceMove(src)
- qdel(living_manipulator_lmfao)
- check_end_of_use(im_item, item_was_used = TRUE)
-
-/// Wait whan manipulator finish do_after and kill em.
-/obj/machinery/big_manipulator/proc/manipulator_finish_do_after(mob/living/carbon/human/dummy/abstract_manipulator)
- SIGNAL_HANDLER
-
- var/obj/item/my_item = abstract_manipulator.get_active_held_item()
- my_item.forceMove(src)
- qdel(abstract_manipulator)
-
-/// Check what we gonna do next with our item. Drop it or use again.
-/obj/machinery/big_manipulator/proc/check_end_of_use(obj/item/my_item, item_was_used)
- if(drop_item_after_use && item_was_used)
- my_item.forceMove(drop_turf)
- my_item.dir = get_dir(get_turf(my_item), get_turf(src))
- finish_manipulation()
- return
- addtimer(CALLBACK(src, PROC_REF(use_thing), my_item), working_speed)
-
/// 3.3 take and drop proc from [take and drop procs loop]:
/// Throw item away!!!
/obj/machinery/big_manipulator/proc/throw_thing(atom/movable/target)
@@ -390,28 +329,22 @@
/obj/machinery/big_manipulator/proc/finish_rotate_animation(backward)
animate(manipulator_hand, transform = matrix(180 * backward, MATRIX_ROTATE), working_speed*0.5)
-/obj/machinery/big_manipulator/proc/check_filter(obj/item/what_item)
- var/filtered_obj = filter_obj?.resolve()
- if(!istype(what_item, selected_type))
- return
+/obj/machinery/big_manipulator/proc/check_filter(atom/movable/target)
+ if (target.anchored || HAS_TRAIT(target, TRAIT_NODROP))
+ return FALSE
+ if(!istype(target, selected_type))
+ return FALSE
/// We use filter only on items. closets, humans and etc don't need filter check.
- if(istype(what_item, /obj/item))
- if((filtered_obj && !istype(what_item, filtered_obj)))
- return FALSE
+ if(!isitem(target))
+ return TRUE
+ var/obj/item/target_item = target
+ if (target_item.item_flags & (ABSTRACT|DROPDEL))
+ return FALSE
+ var/filtered_obj = filter_obj?.resolve()
+ if((filtered_obj && !istype(target_item, filtered_obj)))
+ return FALSE
return TRUE
-/// Create dummy to force him use our item and then delete him.
-/obj/machinery/big_manipulator/proc/create_abstract_living()
- var/mob/living/carbon/human/dummy/abstract_living = new /mob/living/carbon/human/dummy(get_turf(src))
- abstract_living.alpha = 0
- abstract_living.mouse_opacity = MOUSE_OPACITY_TRANSPARENT
- ADD_TRAIT(abstract_living, TRAIT_UNDENSE, INNATE_TRAIT)
- abstract_living.move_resist = INFINITY
- abstract_living.invisibility = INVISIBILITY_ABSTRACT
- abstract_living.real_name = abstract_living.name = name
- abstract_living.mind_initialize()
- return abstract_living
-
/// Proc called when we changing item interaction mode.
/obj/machinery/big_manipulator/proc/change_mode()
manipulate_mode++
@@ -426,8 +359,6 @@
var/list/priority_mode_list
if(manipulate_mode == DROP_ITEM_MODE)
priority_mode_list = priority_settings_for_drop.Copy()
- if(manipulate_mode == USE_ITEM_MODE)
- priority_mode_list = priority_settings_for_use.Copy()
if(isnull(priority_mode_list))
return
for(var/we_need_increasing in 1 to length(priority_mode_list))
@@ -479,15 +410,12 @@
switch(manipulate_mode)
if(DROP_ITEM_MODE)
mode = "Drop"
- if(USE_ITEM_MODE)
- mode = "Use"
if(THROW_ITEM_MODE)
mode = "Throw"
data["active"] = on
data["item_as_filter"] = filter_obj?.resolve()
data["selected_type"] = selected_type.name
data["manipulate_mode"] = mode
- data["drop_after_use"] = drop_item_after_use
data["highest_priority"] = only_highest_priority
data["throw_range"] = manipulator_throw_range
var/list/priority_list = list()
@@ -544,9 +472,6 @@
get_active_held_item.forceMove(src)
is_work_check()
return TRUE
- if("drop_use_change")
- drop_item_after_use = !drop_item_after_use
- return TRUE
if("highest_priority_change")
only_highest_priority = !only_highest_priority
return TRUE
@@ -647,23 +572,7 @@
what_type = /obj/item/storage
number = 2
-/datum/manipulator_priority/for_use/on_living
- name = "Use on Living"
- what_type = /mob/living
- number = 1
-
-/datum/manipulator_priority/for_use/on_structure
- name = "Use on Structure"
- what_type = /obj/structure
- number = 2
-
-/datum/manipulator_priority/for_use/on_machinery
- name = "Use on Machinery"
- what_type = /obj/machinery
- number = 3
-
#undef DROP_ITEM_MODE
-#undef USE_ITEM_MODE
#undef THROW_ITEM_MODE
#undef TAKE_ITEMS
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index f3760fda0319a..2834ffbd7e687 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -269,7 +269,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0)
return
user.electrocute_act(10, src)
-/obj/machinery/camera/singularity_pull(S, current_size)
+/obj/machinery/camera/singularity_pull(atom/singularity, current_size)
if (camera_enabled && current_size >= STAGE_FIVE) // If the singulo is strong enough to pull anchored objects and the camera is still active, turn off the camera as it gets ripped off the wall.
toggle_cam(null, 0)
return ..()
diff --git a/code/game/machinery/camera/camera_construction.dm b/code/game/machinery/camera/camera_construction.dm
index d6988617e1f25..b3593aad6e7e2 100644
--- a/code/game/machinery/camera/camera_construction.dm
+++ b/code/game/machinery/camera/camera_construction.dm
@@ -123,7 +123,7 @@
if(camera_construction_state != CAMERA_STATE_FINISHED || panel_open)
if(attacking_item.tool_behaviour == TOOL_ANALYZER)
if(!isXRay(TRUE)) //don't reveal it was already upgraded if was done via MALF AI Upgrade Camera Network ability
- if(!user.temporarilyRemoveItemFromInventory(attacking_item))
+ if(!user.temporarilyRemoveItemFromInventory(attacking_item, newloc = src))
return
upgradeXRay(FALSE, TRUE)
to_chat(user, span_notice("You attach [attacking_item] into [name]'s inner circuits."))
@@ -141,7 +141,7 @@
return
else if(isprox(attacking_item))
if(!isMotion())
- if(!user.temporarilyRemoveItemFromInventory(attacking_item))
+ if(!user.temporarilyRemoveItemFromInventory(attacking_item, newloc = src))
return
upgradeMotion()
to_chat(user, span_notice("You attach [attacking_item] into [name]'s inner circuits."))
diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm
index efb3f4480330e..fdebf44e52abb 100644
--- a/code/game/machinery/computer/apc_control.dm
+++ b/code/game/machinery/computer/apc_control.dm
@@ -6,26 +6,33 @@
req_access = list(ACCESS_CE)
circuit = /obj/item/circuitboard/computer/apc_control
light_color = LIGHT_COLOR_DIM_YELLOW
- var/obj/machinery/power/apc/active_apc //The APC we're using right now
+ ///The APC we're remotely connected to right now
+ var/obj/machinery/power/apc/active_apc
+ ///Whether actions are being logged to the console's logs or not
var/should_log = TRUE
+ ///Whether the console is currently being restored from an emagged state
var/restoring = FALSE
- var/list/logs
+ ///List of logs containing events like logins/logoffs, APC access and manipulation, checking the APC/logs tabs and restoring logging after an emag
+ var/list/logs = list()
+ ///Tracks the current logged-in user's ID card's name and assignment
var/auth_id = "\[NULL\]:"
+ ///Whether the computer is on a station-level; set in Initialize() for use in checking APCs
+ var/is_on_station = TRUE
/obj/machinery/computer/apc_control/Initialize(mapload, obj/item/circuitboard/C)
. = ..()
- logs = list()
+ is_on_station = is_station_level(z)
/obj/machinery/computer/apc_control/on_set_machine_stat(old_value)
. = ..()
- if(machine_stat)
+ if(machine_stat && active_apc)
disconnect_apc()
/obj/machinery/computer/apc_control/attack_ai(mob/user)
if(!isAdminGhostAI(user))
to_chat(user,span_warning("[src] does not support AI control.")) //You already have APC access, cheater!
return
- ..()
+ return ..()
/obj/machinery/computer/apc_control/emag_act(mob/user, obj/item/card/emag/emag_card)
if(obj_flags & EMAGGED)
@@ -37,11 +44,13 @@
playsound(src, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
return TRUE
+///Creates a log entry in the console with a timestamp, current login ID data and the text provided in log_text
/obj/machinery/computer/apc_control/proc/log_activity(log_text)
if(!should_log)
return
LAZYADD(logs, "([station_time_timestamp()]): [auth_id] [log_text]")
+///Resets the console's emagged state and re-enables logging of activity
/obj/machinery/computer/apc_control/proc/restore_comp(mob/user)
obj_flags &= ~EMAGGED
should_log = TRUE
@@ -49,6 +58,7 @@
log_activity("-=- Logging restored to full functionality at this point -=-")
restoring = FALSE
+///Initiates remote access to the APC
/obj/machinery/computer/apc_control/proc/connect_apc(obj/machinery/power/apc/apc, mob/user)
if(isnull(apc))
return
@@ -62,17 +72,37 @@
user.log_message("remotely accessed [apc] from [src].", LOG_GAME)
log_activity("[auth_id] remotely accessed APC in [get_area_name(apc.area, TRUE)]")
active_apc = apc
-
-/obj/machinery/computer/apc_control/proc/disconnect_apc()
- // check if apc exists and is not controlled by anyone
- if(QDELETED(active_apc))
- return
+ RegisterSignal(active_apc, COMSIG_QDELETING, PROC_REF(on_apc_destroyed))
+
+///Disconnects the computer from the accessed APC upon its destruction
+/obj/machinery/computer/apc_control/proc/on_apc_destroyed(datum/source)
+ SIGNAL_HANDLER
+ disconnect_apc(TRUE) //to prevent the APC from trying to speak while being qdel'd
+
+/**
+ * Disconnect from the APC we're currently in remote access with
+ * arguments:
+ * mute - whether the APC should announce the disconnection locally, passed into apc's disconnect_remote_access()
+ */
+/obj/machinery/computer/apc_control/proc/disconnect_apc(mute = FALSE)
+ UnregisterSignal(active_apc, COMSIG_QDELETING)
if(active_apc.remote_control_user)
- active_apc.disconnect_remote_access()
+ active_apc.disconnect_remote_access(mute)
active_apc = null
-/obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC)
- return APC.z == z && !APC.malfhack && !APC.aidisabled && !(APC.obj_flags & EMAGGED) && !APC.machine_stat && !istype(APC.area, /area/station/ai_monitored)
+/**
+* Checks for whether the APC provided is eligible for access and being listed in the APC list.
+* The APC has to:
+* - be on a station z-level if the computer is station-side or be on the same z-level as the computer if otherwise (away subtype, charlie station)
+* - be not hacked by a malf AI
+* - have AI control enabled
+* - be not emagged
+* - be working
+* - not be an AI monitored area (AI sat areas and AI upload)
+*/
+
+/obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/checked_apc)
+ return (is_on_station ? is_station_level(checked_apc.z) : checked_apc.z == z) && !checked_apc.malfhack && !checked_apc.aidisabled && !(checked_apc.obj_flags & EMAGGED) && !checked_apc.machine_stat && !istype(checked_apc.area, /area/station/ai_monitored)
/obj/machinery/computer/apc_control/ui_interact(mob/user, datum/tgui/ui)
. = ..()
@@ -118,6 +148,7 @@
if(.)
return
+ var/mob/living/user = ui.user
switch(action)
if("log-in")
if(obj_flags & EMAGGED)
@@ -125,18 +156,17 @@
auth_id = "Unknown (Unknown):"
log_activity("[auth_id] logged in to the terminal")
return
- var/mob/living/operator = usr
- if(!istype(operator))
+ if(!istype(user))
return
- var/obj/item/card/id/ID = operator.get_idcard(TRUE)
- if(ID && istype(ID))
- if(check_access(ID))
+ var/obj/item/card/id/user_id_card = user.get_idcard(TRUE)
+ if(istype(user_id_card))
+ if(check_access(user_id_card))
authenticated = TRUE
- auth_id = "[ID.registered_name] ([ID.assignment]):"
+ auth_id = "[user_id_card.registered_name] ([user_id_card.assignment]):"
log_activity("[auth_id] logged in to the terminal")
playsound(src, 'sound/machines/terminal/terminal_on.ogg', 50, FALSE)
else
- auth_id = "[ID.registered_name] ([ID.assignment]):"
+ auth_id = "[user_id_card.registered_name] ([user_id_card.assignment]):"
log_activity("[auth_id] attempted to log into the terminal")
playsound(src, 'sound/machines/terminal/terminal_error.ogg', 50, FALSE)
say("ID rejected, access denied!")
@@ -150,15 +180,15 @@
auth_id = "\[NULL\]"
if("toggle-logs")
should_log = !should_log
- usr.log_message("set the logs of [src] [should_log ? "On" : "Off"].", LOG_GAME)
+ user.log_message("set the logs of [src] [should_log ? "On" : "Off"].", LOG_GAME)
if("restore-console")
restoring = TRUE
- addtimer(CALLBACK(src, PROC_REF(restore_comp)), rand(3,5) * 9 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(restore_comp), user), rand(3,5) * 9 SECONDS)
if("access-apc")
var/ref = params["ref"]
playsound(src, SFX_TERMINAL_TYPE, 50, FALSE)
- var/obj/machinery/power/apc/APC = locate(ref) in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/apc)
- connect_apc(APC, usr)
+ var/obj/machinery/power/apc/remote_target = locate(ref) in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/apc)
+ connect_apc(remote_target, user)
if("check-logs")
log_activity("Checked Logs")
if("check-apcs")
@@ -176,8 +206,8 @@
if("equipment", "lighting", "environ")
target.vars[type] = value
else
- message_admins("Warning: possible href exploit by [key_name(usr)] - attempted to set [html_encode(type)] on [target] to [html_encode(value)]")
- usr.log_message("possibly trying to href exploit - attempted to set [html_encode(type)] on [target] to [html_encode(value)]", LOG_ADMIN)
+ message_admins("Warning: possible href exploit by [key_name(user)] - attempted to set [html_encode(type)] on [target] to [html_encode(value)]")
+ user.log_message("possibly trying to href exploit - attempted to set [html_encode(type)] on [target] to [html_encode(value)]", LOG_ADMIN)
return
target.update_appearance()
@@ -193,13 +223,13 @@
if(3)
setTo = "Auto On"
log_activity("Set APC [target.area.name] [type] to [setTo]")
- usr.log_message("set APC [target.area.name] [type] to [setTo]]", LOG_GAME)
+ user.log_message("set APC [target.area.name] [type] to [setTo]]", LOG_GAME)
if("breaker")
var/ref = params["ref"]
- var/obj/machinery/power/apc/target = locate(ref) in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/apc)
- target.toggle_breaker(usr)
- var/setTo = target.operating ? "On" : "Off"
- log_activity("Turned APC [target.area.name]'s breaker [setTo]")
+ var/obj/machinery/power/apc/breaker_target = locate(ref) in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/apc)
+ breaker_target.toggle_breaker(user)
+ var/setTo = breaker_target.operating ? "On" : "Off"
+ log_activity("Turned APC [breaker_target.area.name]'s breaker [setTo]")
/obj/machinery/computer/apc_control/ui_close(mob/user)
. = ..()
diff --git a/code/game/machinery/computer/telescreen.dm b/code/game/machinery/computer/telescreen.dm
index 07a782e0c412d..082ac7560eef0 100644
--- a/code/game/machinery/computer/telescreen.dm
+++ b/code/game/machinery/computer/telescreen.dm
@@ -45,6 +45,14 @@
var/icon_state_off = "entertainment_blank"
var/icon_state_on = "entertainment"
+/obj/machinery/vending/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ context[SCREENTIP_CONTEXT_CTRL_LMB] = "Toggle mute button"
+
+/obj/machinery/computer/security/telescreen/entertainment/click_ctrl(mob/user)
+ . = ..()
+ balloon_alert(user, speakers.should_be_listening ? "muted" : "unmuted")
+ speakers.toggle_mute()
+
MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertainment, 32)
/obj/item/wallframe/telescreen/entertainment
@@ -65,6 +73,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/entertai
/obj/machinery/computer/security/telescreen/entertainment/examine(mob/user)
. = ..()
. += length(network) ? span_notice("The TV is broadcasting something!") : span_notice("There's nothing on TV.")
+ . += span_notice("The volume is currently [speakers.should_be_listening ? "on" : "off"]")
/obj/machinery/computer/security/telescreen/entertainment/ui_state(mob/user)
return GLOB.always_state
diff --git a/code/game/machinery/dna_infuser/dna_infuser.dm b/code/game/machinery/dna_infuser/dna_infuser.dm
index ccc24d44f6e7e..8e0dfa61c6caa 100644
--- a/code/game/machinery/dna_infuser/dna_infuser.dm
+++ b/code/game/machinery/dna_infuser/dna_infuser.dm
@@ -100,7 +100,7 @@
/obj/machinery/dna_infuser/proc/end_infuse(fail_explanation, fail_title)
var/mob/living/carbon/human/human_occupant = occupant
- if(human_occupant.infuse_organ(infusing_into))
+ if(human_occupant.infuse_organ(infusing_into, infusing_from))
check_tier_progression(human_occupant)
to_chat(occupant, span_danger("You feel yourself becoming more... [infusing_into.infusion_desc]?"))
infusing = FALSE
diff --git a/code/game/machinery/dna_infuser/dna_infusion.dm b/code/game/machinery/dna_infuser/dna_infusion.dm
index c902240404ca7..68b3bfe351565 100644
--- a/code/game/machinery/dna_infuser/dna_infusion.dm
+++ b/code/game/machinery/dna_infuser/dna_infusion.dm
@@ -55,17 +55,17 @@
/// - or the new organ must be external.
/// 2. Target's pre-existing organ must be organic / not robotic.
/// 3. Target must not have the same/identical organ.
-/mob/living/carbon/human/proc/pick_infusion_organ(datum/infuser_entry/entry)
+/mob/living/carbon/human/proc/pick_infusion_organ(datum/infuser_entry/entry, atom/movable/infused_from)
if(!entry)
return FALSE
- var/list/obj/item/organ/potential_new_organs = entry.output_organs.Copy()
+ var/list/obj/item/organ/potential_new_organs = entry.get_output_organs(src, infused_from)
// Remove organ typepaths from the list if they're incompatible with target.
for(var/obj/item/organ/new_organ as anything in entry.output_organs)
var/obj/item/organ/old_organ = get_organ_slot(initial(new_organ.slot))
if(old_organ)
if((old_organ.type != new_organ) && !IS_ROBOTIC_ORGAN(old_organ))
continue // Old organ can be mutated!
- else if(ispath(new_organ, /obj/item/organ/external))
+ else if(new_organ::organ_flags & ORGAN_EXTERNAL)
continue // External organ can be grown!
// Internal organ is either missing, or is non-organic.
potential_new_organs -= new_organ
diff --git a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_one_entries.dm b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_one_entries.dm
index faa3683b9a27b..e69a78f132dfb 100644
--- a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_one_entries.dm
+++ b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_one_entries.dm
@@ -19,10 +19,10 @@
/mob/living/basic/mining/goliath,
)
output_organs = list(
- /obj/item/organ/internal/brain/goliath,
- /obj/item/organ/internal/eyes/night_vision/goliath,
- /obj/item/organ/internal/heart/goliath,
- /obj/item/organ/internal/lungs/lavaland/goliath,
+ /obj/item/organ/brain/goliath,
+ /obj/item/organ/eyes/night_vision/goliath,
+ /obj/item/organ/heart/goliath,
+ /obj/item/organ/lungs/lavaland/goliath,
)
infusion_desc = "armored tendril-like"
tier = DNA_MUTANT_TIER_ONE
@@ -43,10 +43,10 @@
/mob/living/basic/carp,
)
output_organs = list(
- /obj/item/organ/internal/brain/carp,
- /obj/item/organ/internal/heart/carp,
- /obj/item/organ/internal/lungs/carp,
- /obj/item/organ/internal/tongue/carp,
+ /obj/item/organ/brain/carp,
+ /obj/item/organ/heart/carp,
+ /obj/item/organ/lungs/carp,
+ /obj/item/organ/tongue/carp,
)
infusion_desc = "nomadic"
tier = DNA_MUTANT_TIER_ONE
@@ -67,10 +67,10 @@
/obj/item/food/deadmouse,
)
output_organs = list(
- /obj/item/organ/internal/eyes/night_vision/rat,
- /obj/item/organ/internal/heart/rat,
- /obj/item/organ/internal/stomach/rat,
- /obj/item/organ/internal/tongue/rat,
+ /obj/item/organ/eyes/night_vision/rat,
+ /obj/item/organ/heart/rat,
+ /obj/item/organ/stomach/rat,
+ /obj/item/organ/tongue/rat,
)
infusion_desc = "skittish"
tier = DNA_MUTANT_TIER_ONE
@@ -97,10 +97,10 @@
/mob/living/basic/cockroach,
)
output_organs = list(
- /obj/item/organ/internal/heart/roach,
- /obj/item/organ/internal/stomach/roach,
- /obj/item/organ/internal/liver/roach,
- /obj/item/organ/internal/appendix/roach,
+ /obj/item/organ/heart/roach,
+ /obj/item/organ/stomach/roach,
+ /obj/item/organ/liver/roach,
+ /obj/item/organ/appendix/roach,
)
infusion_desc = "kafkaesque" // Gregor Samsa !!
tier = DNA_MUTANT_TIER_ONE
@@ -128,14 +128,40 @@
/obj/item/fish,
)
output_organs = list(
- /obj/item/organ/internal/lungs/fish,
- /obj/item/organ/internal/stomach/fish,
- /obj/item/organ/external/tail/fish,
+ /obj/item/organ/lungs/fish,
+ /obj/item/organ/stomach/fish,
+ /obj/item/organ/tail/fish,
)
infusion_desc = "piscine"
tier = DNA_MUTANT_TIER_ONE
status_effect_type = /datum/status_effect/organ_set_bonus/fish
+/datum/infuser_entry/fish/get_output_organs(mob/living/carbon/human/target, obj/item/fish/infused_from)
+ if(!istype(infused_from))
+ return ..()
+
+ ///Get a list of possible alternatives to the standard fish infusion. We prioritize special infusions over it.
+ var/list/possible_alt_infusions = list()
+ for(var/type in infused_from.fish_traits)
+ var/datum/fish_trait/trait = GLOB.fish_traits[type]
+ if(!trait.infusion_entry)
+ continue
+ var/datum/infuser_entry/entry = GLOB.infuser_entries[trait.infusion_entry]
+ for(var/organ in entry.output_organs)
+ if(!target.get_organ_by_type(organ))
+ possible_alt_infusions |= entry
+ break
+
+ if(length(possible_alt_infusions))
+ var/datum/infuser_entry/chosen = pick(possible_alt_infusions)
+ return chosen.get_output_organs(target, infused_from)
+
+ var/list/organs = ..()
+ if(infused_from.required_fluid_type == AQUARIUM_FLUID_AIR || HAS_TRAIT(infused_from, TRAIT_FISH_AMPHIBIOUS))
+ organs -= /obj/item/organ/lungs/fish
+ return organs
+
+
/datum/infuser_entry/squid
name = "Ink Production"
infuse_mob_name = "ink-producing sealife"
@@ -146,7 +172,7 @@
"spit ink to blind foes",
)
output_organs = list(
- /obj/item/organ/internal/tongue/inky
+ /obj/item/organ/tongue/inky
)
tier = DNA_MUTANT_TIER_ONE
@@ -161,7 +187,7 @@
"drink like a fish",
)
output_organs = list(
- /obj/item/organ/internal/liver/fish
+ /obj/item/organ/liver/fish
)
tier = DNA_MUTANT_TIER_ONE
unreachable_effect = TRUE
@@ -182,7 +208,7 @@
/mob/living/basic/crab,
)
output_organs = list(
- /obj/item/organ/internal/lungs/fish/amphibious,
+ /obj/item/organ/lungs/fish/amphibious,
)
infusion_desc = "semi-aquatic"
tier = DNA_MUTANT_TIER_ONE
diff --git a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_two_entries.dm b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_two_entries.dm
index 1620607d5f09c..045fa669c4f96 100644
--- a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_two_entries.dm
+++ b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_two_entries.dm
@@ -22,9 +22,9 @@
/obj/item/food/meat/slab/gondola,
)
output_organs = list(
- /obj/item/organ/internal/heart/gondola,
- /obj/item/organ/internal/tongue/gondola,
- /obj/item/organ/internal/liver/gondola,
+ /obj/item/organ/heart/gondola,
+ /obj/item/organ/tongue/gondola,
+ /obj/item/organ/liver/gondola,
)
infusion_desc = "observant"
tier = DNA_MUTANT_TIER_TWO
diff --git a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_zero_entries.dm b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_zero_entries.dm
index e93cffd51437b..e4d93a587f8f5 100644
--- a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_zero_entries.dm
+++ b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_zero_entries.dm
@@ -17,12 +17,12 @@
"this is a bad idea",
)
output_organs = list(
- /obj/item/organ/internal/appendix/fly,
- /obj/item/organ/internal/eyes/fly,
- /obj/item/organ/internal/heart/fly,
- /obj/item/organ/internal/lungs/fly,
- /obj/item/organ/internal/stomach/fly,
- /obj/item/organ/internal/tongue/fly,
+ /obj/item/organ/appendix/fly,
+ /obj/item/organ/eyes/fly,
+ /obj/item/organ/heart/fly,
+ /obj/item/organ/lungs/fly,
+ /obj/item/organ/stomach/fly,
+ /obj/item/organ/tongue/fly,
)
infusion_desc = "fly-like"
tier = DNA_MUTANT_TIER_ZERO
@@ -41,7 +41,7 @@
/mob/living/basic/pet/fox,
)
output_organs = list(
- /obj/item/organ/internal/ears/fox,
+ /obj/item/organ/ears/fox,
)
infusion_desc = "inexcusable"
tier = DNA_MUTANT_TIER_ZERO
@@ -61,10 +61,10 @@
/mob/living/basic/mothroach,
)
output_organs = list(
- /obj/item/organ/external/antennae,
- /obj/item/organ/external/wings/moth,
- /obj/item/organ/internal/eyes/moth,
- /obj/item/organ/internal/tongue/moth,
+ /obj/item/organ/antennae,
+ /obj/item/organ/wings/moth,
+ /obj/item/organ/eyes/moth,
+ /obj/item/organ/tongue/moth,
)
infusion_desc = "fluffy"
tier = DNA_MUTANT_TIER_ZERO
@@ -84,11 +84,11 @@
/mob/living/basic/lizard,
)
output_organs = list(
- /obj/item/organ/external/horns,
- /obj/item/organ/external/frills,
- /obj/item/organ/external/snout,
- /obj/item/organ/external/tail/lizard,
- /obj/item/organ/internal/tongue/lizard,
+ /obj/item/organ/horns,
+ /obj/item/organ/frills,
+ /obj/item/organ/snout,
+ /obj/item/organ/tail/lizard,
+ /obj/item/organ/tongue/lizard,
)
infusion_desc = "scaly"
tier = DNA_MUTANT_TIER_ZERO
@@ -105,8 +105,8 @@
/mob/living/basic/pet/cat,
)
output_organs = list(
- /obj/item/organ/internal/ears/cat,
- /obj/item/organ/external/tail/cat,
+ /obj/item/organ/ears/cat,
+ /obj/item/organ/tail/cat,
)
infusion_desc = "domestic"
tier = DNA_MUTANT_TIER_ZERO
diff --git a/code/game/machinery/dna_infuser/infuser_entry.dm b/code/game/machinery/dna_infuser/infuser_entry.dm
index 55ac43d1bf4e6..4ddc65aad4bd4 100644
--- a/code/game/machinery/dna_infuser/infuser_entry.dm
+++ b/code/game/machinery/dna_infuser/infuser_entry.dm
@@ -48,3 +48,7 @@ GLOBAL_LIST_INIT(infuser_entries, prepare_infuser_entries())
var/list/output_organs
///message the target gets while being infused
var/infusion_desc = "mutant-like"
+
+///Returns a list of organs that can be infused into the target human. Useful for custom behavior for certain entries
+/datum/infuser_entry/proc/get_output_organs(mob/living/carbon/human/target, atom/movable/infused_from)
+ return output_organs.Copy()
diff --git a/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm b/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm
index 622cafaa7bfde..1e4bc41ae415b 100644
--- a/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm
+++ b/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm
@@ -15,7 +15,7 @@
///Carp lungs! You can breathe in space! Oh... you can't breathe on the station, you need low oxygen environments.
/// Inverts behavior of lungs. Bypasses suffocation due to space / lack of gas, but also allows Oxygen to suffocate.
-/obj/item/organ/internal/lungs/carp
+/obj/item/organ/lungs/carp
name = "mutated carp-lungs"
desc = "Carp DNA infused into what was once some normal lungs."
// Oxygen causes suffocation.
@@ -27,14 +27,14 @@
greyscale_config = /datum/greyscale_config/mutant_organ
greyscale_colors = CARP_COLORS
-/obj/item/organ/internal/lungs/carp/Initialize(mapload)
+/obj/item/organ/lungs/carp/Initialize(mapload)
. = ..()
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their neck has odd gills.", BODY_ZONE_HEAD)
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/carp)
ADD_TRAIT(src, TRAIT_SPACEBREATHING, REF(src))
///occasionally sheds carp teeth, stronger melee (bite) attacks, but you can't cover your mouth anymore.
-/obj/item/organ/internal/tongue/carp
+/obj/item/organ/tongue/carp
name = "mutated carp-jaws"
desc = "Carp DNA infused into what was once some normal teeth."
@@ -45,12 +45,12 @@
greyscale_config = /datum/greyscale_config/mutant_organ
greyscale_colors = CARP_COLORS
-/obj/item/organ/internal/tongue/carp/Initialize(mapload)
+/obj/item/organ/tongue/carp/Initialize(mapload)
. = ..()
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their teeth are big and sharp.", BODY_ZONE_PRECISE_MOUTH)
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/carp)
-/obj/item/organ/internal/tongue/carp/on_mob_insert(mob/living/carbon/tongue_owner, special, movement_flags)
+/obj/item/organ/tongue/carp/on_mob_insert(mob/living/carbon/tongue_owner, special, movement_flags)
. = ..()
if(!ishuman(tongue_owner))
return
@@ -60,14 +60,14 @@
var/datum/species/rec_species = human_receiver.dna.species
rec_species.update_no_equip_flags(tongue_owner, rec_species.no_equip_flags | ITEM_SLOT_MASK)
-/obj/item/organ/internal/tongue/carp/on_bodypart_insert(obj/item/bodypart/head)
+/obj/item/organ/tongue/carp/on_bodypart_insert(obj/item/bodypart/head)
. = ..()
head.unarmed_damage_low = 10
head.unarmed_damage_high = 15
head.unarmed_effectiveness = 15
head.unarmed_attack_effect = ATTACK_EFFECT_BITE
-/obj/item/organ/internal/tongue/carp/on_mob_remove(mob/living/carbon/tongue_owner)
+/obj/item/organ/tongue/carp/on_mob_remove(mob/living/carbon/tongue_owner)
. = ..()
if(!ishuman(tongue_owner))
return
@@ -77,14 +77,14 @@
var/datum/species/rec_species = human_receiver.dna.species
rec_species.update_no_equip_flags(tongue_owner, initial(rec_species.no_equip_flags))
-/obj/item/organ/internal/tongue/carp/on_bodypart_remove(obj/item/bodypart/head)
+/obj/item/organ/tongue/carp/on_bodypart_remove(obj/item/bodypart/head)
. = ..()
head.unarmed_damage_low = initial(head.unarmed_damage_low)
head.unarmed_damage_high = initial(head.unarmed_damage_high)
head.unarmed_effectiveness = initial(head.unarmed_effectiveness)
head.unarmed_attack_effect = initial(head.unarmed_attack_effect)
-/obj/item/organ/internal/tongue/carp/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/tongue/carp/on_life(seconds_per_tick, times_fired)
. = ..()
if(owner.stat != CONSCIOUS || !prob(0.1))
return
@@ -99,7 +99,7 @@
icon_state = "carptooth"
///carp brain. you need to occasionally go to a new zlevel. think of it as... walking your dog!
-/obj/item/organ/internal/brain/carp
+/obj/item/organ/brain/carp
name = "mutated carp-brain"
desc = "Carp DNA infused into what was once a normal brain."
@@ -114,35 +114,35 @@
///how much time the timer is given
var/cooldown_time = 10 MINUTES
-/obj/item/organ/internal/brain/carp/Initialize(mapload)
+/obj/item/organ/brain/carp/Initialize(mapload)
. = ..()
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/carp)
AddElement(/datum/element/noticable_organ, "%PRONOUN_They seem%PRONOUN_s unable to stay still.")
-/obj/item/organ/internal/brain/carp/on_mob_insert(mob/living/carbon/brain_owner)
+/obj/item/organ/brain/carp/on_mob_insert(mob/living/carbon/brain_owner)
. = ..()
cooldown_timer = addtimer(CALLBACK(src, PROC_REF(unsatisfied_nomad)), cooldown_time, TIMER_STOPPABLE|TIMER_OVERRIDE|TIMER_UNIQUE)
RegisterSignal(brain_owner, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(satisfied_nomad))
//technically you could get around the mood issue by extracting and reimplanting the brain but it will be far easier to just go one z there and back
-/obj/item/organ/internal/brain/carp/on_mob_remove(mob/living/carbon/brain_owner)
+/obj/item/organ/brain/carp/on_mob_remove(mob/living/carbon/brain_owner)
. = ..()
UnregisterSignal(brain_owner, COMSIG_MOVABLE_Z_CHANGED)
deltimer(cooldown_timer)
-/obj/item/organ/internal/brain/carp/get_attacking_limb(mob/living/carbon/human/target)
+/obj/item/organ/brain/carp/get_attacking_limb(mob/living/carbon/human/target)
return owner.get_bodypart(BODY_ZONE_HEAD)
-/obj/item/organ/internal/brain/carp/proc/unsatisfied_nomad()
+/obj/item/organ/brain/carp/proc/unsatisfied_nomad()
owner.add_mood_event("nomad", /datum/mood_event/unsatisfied_nomad)
-/obj/item/organ/internal/brain/carp/proc/satisfied_nomad()
+/obj/item/organ/brain/carp/proc/satisfied_nomad()
SIGNAL_HANDLER
owner.clear_mood_event("nomad")
cooldown_timer = addtimer(CALLBACK(src, PROC_REF(unsatisfied_nomad)), cooldown_time, TIMER_STOPPABLE|TIMER_OVERRIDE|TIMER_UNIQUE)
/// makes you cold resistant, but heat-weak.
-/obj/item/organ/internal/heart/carp
+/obj/item/organ/heart/carp
name = "mutated carp-heart"
desc = "Carp DNA infused into what was once a normal heart."
@@ -153,7 +153,7 @@
organ_traits = list(TRAIT_RESISTCOLD, TRAIT_RESISTLOWPRESSURE)
-/obj/item/organ/internal/heart/carp/Initialize(mapload)
+/obj/item/organ/heart/carp/Initialize(mapload)
. = ..()
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their skin has small patches of scales growing on it.", BODY_ZONE_CHEST)
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/carp)
diff --git a/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm b/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm
index eb9014df95580..c7f9ec460f508 100644
--- a/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm
+++ b/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm
@@ -40,7 +40,7 @@
else
ADD_TRAIT(owner, TRAIT_GRABRESISTANCE, REF(src))
owner.add_mood_event("fish_organs_bonus", /datum/mood_event/fish_water)
- if(HAS_TRAIT(owner, TRAIT_IS_WET) && istype(owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL), /obj/item/organ/external/tail/fish))
+ if(HAS_TRAIT(owner, TRAIT_IS_WET) && istype(owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL), /obj/item/organ/tail/fish))
add_speed_buff()
owner.mind?.adjust_experience(/datum/skill/fishing, SKILL_EXP_JOURNEYMAN, silent = TRUE)
@@ -62,7 +62,7 @@
if(ishuman(owner))
var/mob/living/carbon/human/human = owner
human.physiology.damage_resistance -= 8
- if(HAS_TRAIT(owner, TRAIT_IS_WET) && istype(owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL), /obj/item/organ/external/tail/fish))
+ if(HAS_TRAIT(owner, TRAIT_IS_WET) && istype(owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL), /obj/item/organ/tail/fish))
remove_speed_buff()
owner.mind?.adjust_experience(/datum/skill/fishing, -SKILL_EXP_JOURNEYMAN, silent = TRUE)
@@ -86,11 +86,11 @@
SIGNAL_HANDLER
if(HAS_TRAIT(owner, TRAIT_IS_WET)) //remove the debuffs from being dry
remove_debuff()
- if(istype(owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL), /obj/item/organ/external/tail/fish))
+ if(istype(owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL), /obj/item/organ/tail/fish))
add_speed_buff()
return
apply_debuff()
- if(istype(owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL), /obj/item/organ/external/tail/fish))
+ if(istype(owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL), /obj/item/organ/tail/fish))
remove_speed_buff()
/datum/status_effect/organ_set_bonus/fish/proc/apply_debuff()
@@ -125,7 +125,7 @@
/datum/status_effect/organ_set_bonus/fish/proc/check_tail(mob/living/carbon/source, obj/item/organ/organ, special)
SIGNAL_HANDLER
- if(!HAS_TRAIT(owner, TRAIT_IS_WET) || !istype(organ, /obj/item/organ/external/tail/fish))
+ if(!HAS_TRAIT(owner, TRAIT_IS_WET) || !istype(organ, /obj/item/organ/tail/fish))
return
var/obj/item/organ/tail = owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
if(tail != organ)
@@ -152,7 +152,7 @@
///Tail for fish DNA-infused spacemen. It provides a speed buff while in water. It's also needed for the crawl speed bonus once the threshold is reached.
-/obj/item/organ/external/tail/fish
+/obj/item/organ/tail/fish
name = "fish tail"
desc = "A severed tail from some sort of marine creature... or a fish-infused spaceman. It's smooth, faintly wet and definitely not flopping."
icon = 'icons/obj/medical/organs/infuser_organs.dmi'
@@ -162,30 +162,47 @@
bodypart_overlay = /datum/bodypart_overlay/mutant/tail/fish
dna_block = DNA_FISH_TAIL_BLOCK
- wag_flags = WAG_ABLE
+ wag_flags = NONE
organ_traits = list(TRAIT_FLOPPING)
-/obj/item/organ/external/tail/fish/Initialize(mapload)
+ // Fishlike reagents, you could serve it raw like fish
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment/protein = 10,
+ /datum/reagent/consumable/nutriment/vitamin = 5,
+ /datum/reagent/consumable/nutriment/fat = 10,
+ )
+ // Seafood instead of meat, because it's a fish organ
+ foodtype_flags = RAW | SEAFOOD | GORE
+ // Also just tastes like fish
+ food_tastes = list("fatty fish" = 1)
+ /// The fillet type this fish tail is processable into
+ var/fillet_type = /obj/item/food/fishmeat/fish_tail
+ /// The amount of fillets this gets processed into
+ var/fillet_amount = 5
+
+/obj/item/organ/tail/fish/Initialize(mapload)
. = ..()
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/fish)
+ var/time_to_fillet = fillet_amount * 0.5 SECONDS
+ AddElement(/datum/element/processable, TOOL_KNIFE, fillet_type, fillet_amount, time_to_fillet, screentip_verb = "Cut")
-/obj/item/organ/external/tail/fish/on_mob_insert(mob/living/carbon/owner)
+/obj/item/organ/tail/fish/on_mob_insert(mob/living/carbon/owner)
. = ..()
owner.AddElementTrait(TRAIT_WADDLING, type, /datum/element/waddling/flopping_only) // DOPPLER EDIT, old code: owner.AddElementTrait(TRAIT_WADDLING, type, /datum/element/waddling)
RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(check_location))
check_location(owner, null)
-/obj/item/organ/external/tail/fish/on_mob_remove(mob/living/carbon/owner)
+/obj/item/organ/tail/fish/on_mob_remove(mob/living/carbon/owner)
. = ..()
owner.remove_traits(list(TRAIT_WADDLING, TRAIT_NO_STAGGER), type)
owner.remove_movespeed_modifier(/datum/movespeed_modifier/fish_on_water)
owner.remove_actionspeed_modifier(/datum/actionspeed_modifier/fish_on_water)
UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
-/obj/item/organ/external/tail/fish/get_greyscale_color_from_draw_color()
+/obj/item/organ/tail/fish/get_greyscale_color_from_draw_color()
set_greyscale(bodypart_overlay.draw_color)
-/obj/item/organ/external/tail/fish/proc/check_location(mob/living/carbon/source, atom/movable/old_loc, dir, forced)
+/obj/item/organ/tail/fish/proc/check_location(mob/living/carbon/source, atom/movable/old_loc, dir, forced)
SIGNAL_HANDLER
var/was_water = istype(old_loc, /turf/open/water)
var/is_water = istype(source.loc, /turf/open/water) && !HAS_TRAIT(source.loc, TRAIT_TURF_IGNORE_SLOWDOWN)
@@ -200,7 +217,7 @@
/datum/bodypart_overlay/mutant/tail/fish
feature_key = "fish_tail"
- color_source = ORGAN_COLOR_HAIR
+ color_source = ORGAN_COLOR_OVERRIDE
/datum/bodypart_overlay/mutant/tail/fish/on_mob_insert(obj/item/organ/parent, mob/living/carbon/receiver)
//Initialize the related dna feature block if we don't have any so it doesn't error out.
@@ -211,17 +228,27 @@
return ..()
+/datum/bodypart_overlay/mutant/tail/fish/override_color(obj/item/bodypart/bodypart_owner)
+ //If the owner uses mutant colors, inherit the color of the bodypart
+ if(!bodypart_owner.owner || HAS_TRAIT(bodypart_owner.owner, TRAIT_MUTANT_COLORS))
+ return bodypart_owner.draw_color
+ else //otherwise get one from a set of faded out blue and some greys colors.
+ return pick("#B4B8DD", "#85C7D0", "#67BBEE", "#2F4450", "#55CCBB", "#999FD0", "#345066", "#585B69", "#7381A0", "#B6DDE5", "#4E4E50")
+
/datum/bodypart_overlay/mutant/tail/fish/get_global_feature_list()
return SSaccessories.tails_list_fish
///Lungs that replace the need of oxygen with water vapor or being wet
-/obj/item/organ/internal/lungs/fish
+/obj/item/organ/lungs/fish
name = "mutated gills"
desc = "Fish DNA infused on what once was a normal pair of lungs that now require spacemen to breathe water vapor, or keep themselves covered in water."
icon = 'icons/obj/medical/organs/infuser_organs.dmi'
icon_state = "gills"
+ // Seafood instead of meat, because it's a fish organ. Additionally gross for being gills
+ foodtype_flags = RAW | SEAFOOD | GORE | GROSS
+ food_tastes = list("gross fish" = 1)
safe_oxygen_min = 0 //We don't breathe this
///The required partial pressure of water_vapor for not suffocating.
// var/safe_water_level = parent_type::safe_oxygen_min // DOPPLER EDIT REMOVAL - moved to parent type
@@ -231,7 +258,7 @@
var/has_gills = TRUE
-/obj/item/organ/internal/lungs/fish/Initialize(mapload)
+/obj/item/organ/lungs/fish/Initialize(mapload)
. = ..()
add_gas_reaction(/datum/gas/water_vapor, always = PROC_REF(breathe_water))
respiration_type |= RESPIRATION_OXYGEN //after all, we get oxygen from water
@@ -242,26 +269,26 @@
AddComponent(/datum/component/bubble_icon_override, "fish", BUBBLE_ICON_PRIORITY_ORGAN)
// AddComponent(/datum/component/speechmod, replacements = strings("crustacean_replacement.json", "crustacean")) // DOPPLER EDIT REMOVAL - really funny i wish we could keep this
-/obj/item/organ/internal/lungs/fish/Destroy()
+/obj/item/organ/lungs/fish/Destroy()
QDEL_NULL(gills)
return ..()
-/obj/item/organ/internal/lungs/fish/on_bodypart_insert(obj/item/bodypart/limb)
+/obj/item/organ/lungs/fish/on_bodypart_insert(obj/item/bodypart/limb)
. = ..()
if(gills)
limb.add_bodypart_overlay(gills)
-/obj/item/organ/internal/lungs/fish/on_bodypart_remove(obj/item/bodypart/limb)
+/obj/item/organ/lungs/fish/on_bodypart_remove(obj/item/bodypart/limb)
. = ..()
if(gills)
limb.remove_bodypart_overlay(gills)
-/obj/item/organ/internal/lungs/fish/on_mob_remove(mob/living/carbon/owner)
+/obj/item/organ/lungs/fish/on_mob_remove(mob/living/carbon/owner)
. = ..()
owner.clear_alert(ALERT_NOT_ENOUGH_WATER)
/// Requires the spaceman to have either water vapor or be wet.
-/obj/item/organ/internal/lungs/proc/breathe_water(mob/living/carbon/breather, datum/gas_mixture/breath, water_pp, old_water_pp) // DOPPLER EDIT, old code: /obj/item/organ/internal/lungs/fish/proc/breathe_water(mob/living/carbon/breather, datum/gas_mixture/breath, water_pp, old_water_pp)
+/obj/item/organ/lungs/proc/breathe_water(mob/living/carbon/breather, datum/gas_mixture/breath, water_pp, old_water_pp) // DOPPLER EDIT, old code: /obj/item/organ/lungs/fish/proc/breathe_water(mob/living/carbon/breather, datum/gas_mixture/breath, water_pp, old_water_pp)
var/need_to_breathe = !HAS_TRAIT(src, TRAIT_SPACEBREATHING) && !HAS_TRAIT(breather, TRAIT_IS_WET)
if(water_pp < safe_water_level && need_to_breathe)
on_low_water(breather, breath, water_pp)
@@ -278,7 +305,7 @@
breather.adjustOxyLoss(-5)
/// Called when there isn't enough water to breath
-/obj/item/organ/internal/lungs/proc/on_low_water(mob/living/carbon/breather, datum/gas_mixture/breath, water_pp) // DOPPLER EDIT, old code: /obj/item/organ/internal/lungs/fish/proc/on_low_water(mob/living/carbon/breather, datum/gas_mixture/breath, water_pp)
+/obj/item/organ/lungs/proc/on_low_water(mob/living/carbon/breather, datum/gas_mixture/breath, water_pp) // DOPPLER EDIT, old code: /obj/item/organ/lungs/fish/proc/on_low_water(mob/living/carbon/breather, datum/gas_mixture/breath, water_pp)
breather.throw_alert(ALERT_NOT_ENOUGH_WATER, /atom/movable/screen/alert/not_enough_water)
var/gas_breathed = handle_suffocation(breather, water_pp, safe_water_level, breath.gases[/datum/gas/water_vapor][MOLES])
if(water_pp)
@@ -298,10 +325,10 @@
)
/// Subtype of gills that allow the mob to optionally breathe water.
-/obj/item/organ/internal/lungs/fish/amphibious
+/obj/item/organ/lungs/fish/amphibious
name = "mutated semi-aquatic lungs"
desc = "DNA from an amphibious or semi-aquatic creature infused on a pair lungs. Enjoy breathing underwater without drowning outside water."
- safe_oxygen_min = /obj/item/organ/internal/lungs::safe_oxygen_min
+ safe_oxygen_min = /obj/item/organ/lungs::safe_oxygen_min
has_gills = FALSE
/**
* If false, we don't breathe air since we've got water instead.
@@ -309,7 +336,7 @@
*/
var/should_breathe_oxygen = FALSE
-/obj/item/organ/internal/lungs/fish/amphibious/Initialize(mapload)
+/obj/item/organ/lungs/fish/amphibious/Initialize(mapload)
. = ..()
/**
* We're setting the gas reaction for breathing oxygen here,
@@ -317,18 +344,18 @@
* and we want breathe_water() to run before breathe_oxygen,
* so that if we're breathing water vapor (or are wet), we won't have to breathe oxygen.
*/
- safe_oxygen_min = /obj/item/organ/internal/lungs::safe_oxygen_min
+ safe_oxygen_min = /obj/item/organ/lungs::safe_oxygen_min
add_gas_reaction(/datum/gas/oxygen, always = PROC_REF(breathe_oxygen))
-/obj/item/organ/internal/lungs/fish/amphibious/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/breather)
+/obj/item/organ/lungs/fish/amphibious/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/breather)
should_breathe_oxygen = FALSE //assume we don't have to breathe oxygen until we fail to breathe water
return ..()
-/obj/item/organ/internal/lungs/fish/amphibious/on_low_water(mob/living/carbon/breather, datum/gas_mixture/breath, water_pp)
+/obj/item/organ/lungs/fish/amphibious/on_low_water(mob/living/carbon/breather, datum/gas_mixture/breath, water_pp)
should_breathe_oxygen = TRUE
return
-/obj/item/organ/internal/lungs/fish/amphibious/breathe_oxygen(mob/living/carbon/breather, datum/gas_mixture/breath, o2_pp, old_o2_pp)
+/obj/item/organ/lungs/fish/amphibious/breathe_oxygen(mob/living/carbon/breather, datum/gas_mixture/breath, o2_pp, old_o2_pp)
if(!should_breathe_oxygen)
if(breather.failed_last_breath) //in case we had neither oxygen nor water last tick.
breather.clear_alert(ALERT_NOT_ENOUGH_OXYGEN)
@@ -336,9 +363,9 @@
return ..()
///Fish infuser organ, allows mobs to safely eat raw fish.
-/obj/item/organ/internal/stomach/fish
+/obj/item/organ/stomach/fish
name = "mutated fish-stomach"
- desc = "Fish DNA infused into a stomach now parmated by the faint smell of salt and slightly putrified fish."
+ desc = "Fish DNA infused into a stomach now permeated by the faint smell of salt and slightly putrefied fish."
icon = 'icons/obj/medical/organs/infuser_organs.dmi'
icon_state = "stomach"
greyscale_config = /datum/greyscale_config/mutant_organ
@@ -347,25 +374,41 @@
organ_traits = list(TRAIT_STRONG_STOMACH, TRAIT_FISH_EATER)
disgust_metabolism = 2.5
-/obj/item/organ/internal/stomach/fish/Initialize(mapload)
+ // Seafood instead of meat, because it's a fish organ
+ foodtype_flags = RAW | SEAFOOD | GORE
+ // Salty and putrid like it smells, yum
+ food_tastes = list(
+ "salt" = 1,
+ "putrid fish" = 1,
+ )
+
+/obj/item/organ/stomach/fish/Initialize(mapload)
. = ..()
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/fish)
///Organ from fish with the ink production trait. Doesn't count toward the organ set bonus but is buffed once it's active.
-/obj/item/organ/internal/tongue/inky
+/obj/item/organ/tongue/inky
name = "ink-secreting tongue"
desc = "A black tongue linked to two swollen black sacs underneath the palate."
icon = 'icons/obj/medical/organs/infuser_organs.dmi'
icon_state = "inky_tongue"
actions_types = list(/datum/action/cooldown/ink_spit)
-/obj/item/organ/internal/tongue/inky/Initialize(mapload)
+ // Seafood instead of meat, because it's a fish organ
+ foodtype_flags = RAW | SEAFOOD | GORE
+ // Squid with a hint of the sea (from the ink)
+ food_tastes = list(
+ "squid" = 1,
+ "the sea" = 0.2,
+ )
+
+/obj/item/organ/tongue/inky/Initialize(mapload)
. = ..()
AddElement(/datum/element/noticable_organ, "Slick black ink seldom rivulets from %PRONOUN_their mouth.", BODY_ZONE_PRECISE_MOUTH)
///Organ from fish with the toxic trait. Allows the user to use tetrodotoxin as a healing chem instead of a toxin.
-/obj/item/organ/internal/liver/fish
+/obj/item/organ/liver/fish
name = "mutated fish-liver"
desc = "Fish DNA infused into a stomach that now uses tetrodotoxin as regenerative material. It also processes alcohol quite well."
icon = 'icons/obj/medical/organs/infuser_organs.dmi'
@@ -375,10 +418,15 @@
organ_traits = list(TRAIT_TETRODOTOXIN_HEALING, TRAIT_ALCOHOL_TOLERANCE) //drink like a fish :^)
liver_resistance = parent_type::liver_resistance * 1.5
- food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/iron = 5, /datum/reagent/toxin/tetrodotoxin = 5)
+ food_reagents = list(/datum/reagent/consumable/nutriment/organ_tissue = 5, /datum/reagent/iron = 5, /datum/reagent/toxin/tetrodotoxin = 5)
grind_results = list(/datum/reagent/consumable/nutriment/peptides = 5, /datum/reagent/toxin/tetrodotoxin = 5)
-/obj/item/organ/internal/liver/fish/Initialize(mapload)
+ // Seafood instead of meat, because it's a fish organ
+ foodtype_flags = RAW | SEAFOOD | GORE
+ // Just fish, the toxin isn't obvious
+ food_tastes = list("fish" = 1)
+
+/obj/item/organ/liver/fish/Initialize(mapload)
. = ..()
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/fish)
diff --git a/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm b/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm
index 4786bf5753c9f..0ca652c3ab92c 100644
--- a/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm
+++ b/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm
@@ -19,7 +19,7 @@
to_chat(new_fly, span_danger("Too much fly DNA! Your skin begins to discolor into a horrible black as you become more fly than person!"))
new_fly.set_species(/datum/species/fly)
-/obj/item/organ/internal/eyes/fly
+/obj/item/organ/eyes/fly
name = "fly eyes"
desc = "These eyes seem to stare back no matter the direction you look at it from."
eye_icon_state = "flyeyes"
@@ -27,11 +27,11 @@
flash_protect = FLASH_PROTECTION_HYPER_SENSITIVE
native_fov = NONE //flies can see all around themselves.
-/obj/item/organ/internal/eyes/fly/Initialize(mapload)
+/obj/item/organ/eyes/fly/Initialize(mapload)
. = ..()
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/fly)
-/obj/item/organ/internal/tongue/fly
+/obj/item/organ/tongue/fly
name = "proboscis"
desc = "A freakish looking meat tube that apparently can take in liquids."
icon = 'icons/obj/medical/organs/fly_organs.dmi'
@@ -49,56 +49,56 @@
"S" = "Z",
)
-/obj/item/organ/internal/tongue/fly/New(class, timer, datum/mutation/human/copymut)
+/obj/item/organ/tongue/fly/New(class, timer, datum/mutation/human/copymut)
. = ..()
AddComponent(/datum/component/speechmod, replacements = speech_replacements, should_modify_speech = CALLBACK(src, PROC_REF(should_modify_speech)))
-/obj/item/organ/internal/tongue/fly/Initialize(mapload)
+/obj/item/organ/tongue/fly/Initialize(mapload)
. = ..()
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/fly)
-/obj/item/organ/internal/tongue/fly/get_possible_languages()
+/obj/item/organ/tongue/fly/get_possible_languages()
return ..() + /datum/language/buzzwords
-/obj/item/organ/internal/heart/fly
+/obj/item/organ/heart/fly
desc = FLY_INFUSED_ORGAN_DESC
-/obj/item/organ/internal/heart/fly/Initialize(mapload)
+/obj/item/organ/heart/fly/Initialize(mapload)
. = ..()
name = odd_organ_name()
icon_state = FLY_INFUSED_ORGAN_ICON
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/fly)
AddElement(/datum/element/update_icon_blocker)
-/obj/item/organ/internal/lungs/fly
+/obj/item/organ/lungs/fly
desc = FLY_INFUSED_ORGAN_DESC
-/obj/item/organ/internal/lungs/fly/Initialize(mapload)
+/obj/item/organ/lungs/fly/Initialize(mapload)
. = ..()
name = odd_organ_name()
icon_state = FLY_INFUSED_ORGAN_ICON
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/fly)
-/obj/item/organ/internal/liver/fly
+/obj/item/organ/liver/fly
desc = FLY_INFUSED_ORGAN_DESC
alcohol_tolerance = 0.007 //flies eat vomit, so a lower alcohol tolerance is perfect!
-/obj/item/organ/internal/liver/fly/Initialize(mapload)
+/obj/item/organ/liver/fly/Initialize(mapload)
. = ..()
name = odd_organ_name()
icon_state = FLY_INFUSED_ORGAN_ICON
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/fly)
-/obj/item/organ/internal/stomach/fly
+/obj/item/organ/stomach/fly
desc = FLY_INFUSED_ORGAN_DESC
-/obj/item/organ/internal/stomach/fly/Initialize(mapload)
+/obj/item/organ/stomach/fly/Initialize(mapload)
. = ..()
name = odd_organ_name()
icon_state = FLY_INFUSED_ORGAN_ICON
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/fly)
-/obj/item/organ/internal/stomach/fly/after_eat(edible)
+/obj/item/organ/stomach/fly/after_eat(edible)
var/mob/living/carbon/body = owner
ASSERT(istype(body))
// we do not lose any nutrition as a fly when vomiting out food
@@ -110,28 +110,28 @@
)
return ..()
-/obj/item/organ/internal/appendix/fly
+/obj/item/organ/appendix/fly
desc = FLY_INFUSED_ORGAN_DESC
-/obj/item/organ/internal/appendix/fly/Initialize(mapload)
+/obj/item/organ/appendix/fly/Initialize(mapload)
. = ..()
name = odd_organ_name()
icon_state = FLY_INFUSED_ORGAN_ICON
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/fly)
-/obj/item/organ/internal/appendix/fly/update_appearance(updates=ALL)
+/obj/item/organ/appendix/fly/update_appearance(updates=ALL)
return ..(updates & ~(UPDATE_NAME|UPDATE_ICON)) //don't set name or icon thank you
//useless organs we throw in just to fuck with surgeons a bit more. they aren't part of a bonus, just the (absolute) state of flies
-/obj/item/organ/internal/fly
+/obj/item/organ/fly
desc = FLY_INFUSED_ORGAN_DESC
-/obj/item/organ/internal/fly/Initialize(mapload)
+/obj/item/organ/fly/Initialize(mapload)
. = ..()
name = odd_organ_name()
icon_state = FLY_INFUSED_ORGAN_ICON
-/obj/item/organ/internal/fly/groin //appendix is the only groin organ so we gotta have one of these too lol
+/obj/item/organ/fly/groin //appendix is the only groin organ so we gotta have one of these too lol
zone = BODY_ZONE_PRECISE_GROIN
#undef FLY_INFUSED_ORGAN_DESC
diff --git a/code/game/machinery/dna_infuser/organ_sets/fox_organs.dm b/code/game/machinery/dna_infuser/organ_sets/fox_organs.dm
index 73b2be83a11b5..9626b02a95fc3 100644
--- a/code/game/machinery/dna_infuser/organ_sets/fox_organs.dm
+++ b/code/game/machinery/dna_infuser/organ_sets/fox_organs.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/ears/fox
+/obj/item/organ/ears/fox
name = "fox ears"
icon = 'icons/obj/clothing/head/costume.dmi'
worn_icon = 'icons/mob/clothing/head/costume.dmi'
@@ -6,4 +6,6 @@
visual = TRUE
damage_multiplier = 2
+ dna_block = DNA_EARS_BLOCK
+// DOPPLER EDIT, removal - old code: bodypart_overlay = /datum/bodypart_overlay/mutant/cat_ears
// DOPPLER EDIT, removal - old code: sprite_accessory_override = /datum/sprite_accessory/ears/fox
diff --git a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm
index 385878cb255a4..4940f6dae6e66 100644
--- a/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm
+++ b/code/game/machinery/dna_infuser/organ_sets/goliath_organs.dm
@@ -12,7 +12,7 @@
bonus_traits = list(TRAIT_LAVA_IMMUNE)
///goliath eyes, simple night vision
-/obj/item/organ/internal/eyes/night_vision/goliath
+/obj/item/organ/eyes/night_vision/goliath
name = "goliath eyes"
desc = "goliath DNA infused into what was once some normal eyes."
@@ -29,13 +29,13 @@
high_light_cutoff = list(50, 10, 40)
organ_traits = list(TRAIT_UNNATURAL_RED_GLOWY_EYES)
-/obj/item/organ/internal/eyes/night_vision/goliath/Initialize(mapload)
+/obj/item/organ/eyes/night_vision/goliath/Initialize(mapload)
. = ..()
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their eyes are blood red and stone-like.", BODY_ZONE_PRECISE_EYES)
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/goliath)
///goliath lungs! You can breathe lavaland air mix but can't breath pure O2 from a tank anymore.
-/obj/item/organ/internal/lungs/lavaland/goliath
+/obj/item/organ/lungs/lavaland/goliath
name = "mutated goliath-lungs"
desc = "goliath DNA infused into what was once some normal lungs."
@@ -44,13 +44,13 @@
greyscale_config = /datum/greyscale_config/mutant_organ
greyscale_colors = GOLIATH_COLORS
-/obj/item/organ/internal/lungs/lavaland/goliath/Initialize(mapload)
+/obj/item/organ/lungs/lavaland/goliath/Initialize(mapload)
. = ..()
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their back is covered in small tendrils.", BODY_ZONE_CHEST)
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/goliath)
///goliath brain. you can't use gloves but one of your arms becomes a tendril hammer that can be used to mine!
-/obj/item/organ/internal/brain/goliath
+/obj/item/organ/brain/goliath
name = "mutated goliath-brain"
desc = "goliath DNA infused into what was once a normal brain."
@@ -62,12 +62,12 @@
var/obj/item/goliath_infuser_hammer/hammer
-/obj/item/organ/internal/brain/goliath/Initialize(mapload)
+/obj/item/organ/brain/goliath/Initialize(mapload)
. = ..()
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their arm is just a mass of plate and tendrils.", BODY_ZONE_CHEST)
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/goliath)
-/obj/item/organ/internal/brain/goliath/on_mob_insert(mob/living/carbon/brain_owner)
+/obj/item/organ/brain/goliath/on_mob_insert(mob/living/carbon/brain_owner)
. = ..()
if(!ishuman(brain_owner))
return
@@ -79,7 +79,7 @@
hammer = new/obj/item/goliath_infuser_hammer
brain_owner.put_in_hands(hammer)
-/obj/item/organ/internal/brain/goliath/on_mob_remove(mob/living/carbon/brain_owner)
+/obj/item/organ/brain/goliath/on_mob_remove(mob/living/carbon/brain_owner)
. = ..()
UnregisterSignal(brain_owner)
if(!ishuman(brain_owner))
@@ -158,7 +158,7 @@
target.throw_at(get_edge_target_turf(target, get_cardinal_dir(src, target)), rand(1, 2), prob(60) ? 1 : 4, user)
/// goliath heart gives you the ability to survive ash storms.
-/obj/item/organ/internal/heart/goliath
+/obj/item/organ/heart/goliath
name = "mutated goliath-heart"
desc = "goliath DNA infused into what was once a normal heart."
@@ -169,7 +169,7 @@
organ_traits = list(TRAIT_ASHSTORM_IMMUNE)
-/obj/item/organ/internal/heart/goliath/Initialize(mapload)
+/obj/item/organ/heart/goliath/Initialize(mapload)
. = ..()
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their skin has visible hard plates growing from within.", BODY_ZONE_CHEST)
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/goliath)
diff --git a/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm b/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm
index 9fcf7e483bba9..82c9c9fc8e8be 100644
--- a/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm
+++ b/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm
@@ -16,7 +16,7 @@ Fluoride Stare: After someone says 5 words, blah blah blah...
bonus_traits = list(TRAIT_RESISTHEAT, TRAIT_RESISTCOLD, TRAIT_NOBREATH, TRAIT_RESISTLOWPRESSURE, TRAIT_RESISTHIGHPRESSURE)
/// makes you a pacifist and turns most mobs neutral towards you
-/obj/item/organ/internal/heart/gondola
+/obj/item/organ/heart/gondola
name = "mutated gondola-heart"
desc = "Gondola DNA infused into what was once a normal heart."
@@ -28,13 +28,13 @@ Fluoride Stare: After someone says 5 words, blah blah blah...
///keeps track of whether the receiver actually gained factions
var/list/factions_to_remove = list()
-/obj/item/organ/internal/heart/gondola/Initialize(mapload)
+/obj/item/organ/heart/gondola/Initialize(mapload)
. = ..()
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/gondola)
AddElement(/datum/element/noticable_organ, "%PRONOUN_They radiate%PRONOUN_s an aura of serenity.")
AddElement(/datum/element/update_icon_blocker)
-/obj/item/organ/internal/heart/gondola/mob_insert(mob/living/carbon/receiver, special, movement_flags)
+/obj/item/organ/heart/gondola/mob_insert(mob/living/carbon/receiver, special, movement_flags)
. = ..()
if(!(FACTION_HOSTILE in receiver.faction))
factions_to_remove += FACTION_HOSTILE
@@ -42,7 +42,7 @@ Fluoride Stare: After someone says 5 words, blah blah blah...
factions_to_remove += FACTION_MINING
receiver.faction |= list(FACTION_HOSTILE, FACTION_MINING)
-/obj/item/organ/internal/heart/gondola/mob_remove(mob/living/carbon/heartless, special, movement_flags)
+/obj/item/organ/heart/gondola/mob_remove(mob/living/carbon/heartless, special, movement_flags)
. = ..()
for(var/faction in factions_to_remove)
heartless.faction -= faction
@@ -50,7 +50,7 @@ Fluoride Stare: After someone says 5 words, blah blah blah...
factions_to_remove = list()
/// Zen (tounge): You can no longer speak, but get a powerful positive moodlet
-/obj/item/organ/internal/tongue/gondola
+/obj/item/organ/tongue/gondola
name = "mutated gondola-tongue"
desc = "Gondola DNA infused into what was once a normal tongue."
icon = 'icons/obj/medical/organs/infuser_organs.dmi'
@@ -59,21 +59,21 @@ Fluoride Stare: After someone says 5 words, blah blah blah...
greyscale_colors = GONDOLA_COLORS
organ_traits = list(TRAIT_MUTE)
-/obj/item/organ/internal/tongue/gondola/Initialize(mapload)
+/obj/item/organ/tongue/gondola/Initialize(mapload)
. = ..()
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their mouth is permanently affixed into a relaxed smile.", BODY_ZONE_PRECISE_MOUTH)
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/gondola)
-/obj/item/organ/internal/tongue/gondola/mob_insert(mob/living/carbon/tongue_owner, special, movement_flags)
+/obj/item/organ/tongue/gondola/mob_insert(mob/living/carbon/tongue_owner, special, movement_flags)
. = ..()
tongue_owner.add_mood_event("gondola_zen", /datum/mood_event/gondola_serenity)
-/obj/item/organ/internal/tongue/gondola/mob_remove(mob/living/carbon/tongue_owner, special, movement_flags)
+/obj/item/organ/tongue/gondola/mob_remove(mob/living/carbon/tongue_owner, special, movement_flags)
tongue_owner.clear_mood_event("gondola_zen")
return ..()
/// Loving arms: your hands become unable to hold much of anything but your hugs now infuse the subject with pax.
-/obj/item/organ/internal/liver/gondola
+/obj/item/organ/liver/gondola
name = "mutated gondola-liver"
desc = "Gondola DNA infused into what was once a normal liver."
icon = 'icons/obj/medical/organs/infuser_organs.dmi'
@@ -81,13 +81,13 @@ Fluoride Stare: After someone says 5 words, blah blah blah...
greyscale_config = /datum/greyscale_config/mutant_organ
greyscale_colors = GONDOLA_COLORS
-/obj/item/organ/internal/liver/gondola/Initialize(mapload)
+/obj/item/organ/liver/gondola/Initialize(mapload)
. = ..()
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/gondola)
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their left arm has small needles breaching the skin all over it.", BODY_ZONE_L_ARM)
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their right arm has small needles breaching the skin all over it.", BODY_ZONE_R_ARM)
-/obj/item/organ/internal/liver/gondola/mob_insert(mob/living/carbon/liver_owner, special, movement_flags)
+/obj/item/organ/liver/gondola/mob_insert(mob/living/carbon/liver_owner, special, movement_flags)
. = ..()
var/has_left = liver_owner.has_left_hand(check_disabled = FALSE)
var/has_right = liver_owner.has_right_hand(check_disabled = FALSE)
@@ -102,19 +102,19 @@ Fluoride Stare: After someone says 5 words, blah blah blah...
RegisterSignal(liver_owner, COMSIG_LIVING_TRY_PULL, PROC_REF(on_owner_try_pull))
RegisterSignal(liver_owner, COMSIG_CARBON_HELPED, PROC_REF(on_hug))
-/obj/item/organ/internal/liver/gondola/mob_remove(mob/living/carbon/liver_owner, special, movement_flags)
+/obj/item/organ/liver/gondola/mob_remove(mob/living/carbon/liver_owner, special, movement_flags)
. = ..()
UnregisterSignal(liver_owner, list(COMSIG_HUMAN_EQUIPPING_ITEM, COMSIG_LIVING_TRY_PULL, COMSIG_CARBON_HELPED))
/// signal sent when prompting if an item can be equipped
-/obj/item/organ/internal/liver/gondola/proc/on_owner_equipping_item(mob/living/carbon/human/owner, obj/item/equip_target, slot)
+/obj/item/organ/liver/gondola/proc/on_owner_equipping_item(mob/living/carbon/human/owner, obj/item/equip_target, slot)
SIGNAL_HANDLER
if(equip_target.w_class > WEIGHT_CLASS_TINY)
equip_target.balloon_alert(owner, "too weak to hold this!")
return COMPONENT_BLOCK_EQUIP
/// signal sent when owner tries to pull an item
-/obj/item/organ/internal/liver/gondola/proc/on_owner_try_pull(mob/living/carbon/owner, atom/movable/target, force)
+/obj/item/organ/liver/gondola/proc/on_owner_try_pull(mob/living/carbon/owner, atom/movable/target, force)
SIGNAL_HANDLER
if(isliving(target))
var/mob/living/living_target = target
@@ -127,7 +127,7 @@ Fluoride Stare: After someone says 5 words, blah blah blah...
item_target.balloon_alert(owner, "too weak to pull this!")
return COMSIG_LIVING_CANCEL_PULL
-/obj/item/organ/internal/liver/gondola/proc/on_hug(mob/living/carbon/human/source, mob/living/carbon/hugged)
+/obj/item/organ/liver/gondola/proc/on_hug(mob/living/carbon/human/source, mob/living/carbon/hugged)
SIGNAL_HANDLER
var/list/covered_body_zones = source.get_covered_body_zones()
diff --git a/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm b/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm
index 4f8d38aa99971..f10dcefb0d5c5 100644
--- a/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm
+++ b/code/game/machinery/dna_infuser/organ_sets/rat_organs.dm
@@ -12,7 +12,7 @@
bonus_traits = list(TRAIT_VENTCRAWLER_NUDE)
///way better night vision, super sensitive. lotta things work like this, huh?
-/obj/item/organ/internal/eyes/night_vision/rat
+/obj/item/organ/eyes/night_vision/rat
name = "mutated rat-eyes"
desc = "Rat DNA infused into what was once a normal pair of eyes."
flash_protect = FLASH_PROTECTION_HYPER_SENSITIVE
@@ -27,13 +27,13 @@
medium_light_cutoff = list(30, 20, 5)
high_light_cutoff = list(45, 35, 10)
-/obj/item/organ/internal/eyes/night_vision/rat/Initialize(mapload)
+/obj/item/organ/eyes/night_vision/rat/Initialize(mapload)
. = ..()
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their eyes have deep, shifty black pupils, surrounded by a sickening yellow sclera.", BODY_ZONE_PRECISE_EYES)
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/rat)
///increases hunger, disgust recovers quicker, expands what is defined as "food"
-/obj/item/organ/internal/stomach/rat
+/obj/item/organ/stomach/rat
name = "mutated rat-stomach"
desc = "Rat DNA infused into what was once a normal stomach."
disgust_metabolism = 3
@@ -44,13 +44,13 @@
greyscale_colors = RAT_COLORS
hunger_modifier = 10
-/obj/item/organ/internal/stomach/rat/Initialize(mapload)
+/obj/item/organ/stomach/rat/Initialize(mapload)
. = ..()
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/rat)
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their mouth is drooling excessively.", BODY_ZONE_PRECISE_MOUTH)
/// makes you smaller, walk over tables, and take 1.5x damage
-/obj/item/organ/internal/heart/rat
+/obj/item/organ/heart/rat
name = "mutated rat-heart"
desc = "Rat DNA infused into what was once a normal heart."
icon = 'icons/obj/medical/organs/infuser_organs.dmi'
@@ -58,13 +58,13 @@
greyscale_config = /datum/greyscale_config/mutant_organ
greyscale_colors = RAT_COLORS
-/obj/item/organ/internal/heart/rat/Initialize(mapload)
+/obj/item/organ/heart/rat/Initialize(mapload)
. = ..()
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/rat)
AddElement(/datum/element/noticable_organ, "%PRONOUN_They hunch%PRONOUN_es over unnaturally!")
AddElement(/datum/element/update_icon_blocker)
-/obj/item/organ/internal/heart/rat/on_mob_insert(mob/living/carbon/receiver)
+/obj/item/organ/heart/rat/on_mob_insert(mob/living/carbon/receiver)
. = ..()
if(!ishuman(receiver))
return
@@ -74,7 +74,7 @@
//but 1.5 damage
human_receiver.physiology?.damage_resistance -= 50
-/obj/item/organ/internal/heart/rat/on_mob_remove(mob/living/carbon/heartless, special)
+/obj/item/organ/heart/rat/on_mob_remove(mob/living/carbon/heartless, special)
. = ..()
if(!ishuman(heartless))
return
@@ -84,7 +84,7 @@
human_heartless.physiology?.damage_resistance += 50
/// you occasionally squeak, and have some rat related verbal tics
-/obj/item/organ/internal/tongue/rat
+/obj/item/organ/tongue/rat
name = "mutated rat-tongue"
desc = "Rat DNA infused into what was once a normal tongue."
icon = 'icons/obj/medical/organs/infuser_organs.dmi'
@@ -97,12 +97,12 @@
disliked_foodtypes = NONE //but a rat can eat anything without issue
toxic_foodtypes = NONE
-/obj/item/organ/internal/tongue/rat/Initialize(mapload)
+/obj/item/organ/tongue/rat/Initialize(mapload)
. = ..()
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their teeth are oddly shaped and yellowing.", BODY_ZONE_PRECISE_MOUTH)
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/rat)
-/obj/item/organ/internal/tongue/rat/modify_speech(datum/source, list/speech_args)
+/obj/item/organ/tongue/rat/modify_speech(datum/source, list/speech_args)
. = ..()
var/message = LOWER_TEXT(speech_args[SPEECH_MESSAGE])
if(message == "hi" || message == "hi.")
@@ -110,23 +110,23 @@
if(message == "hi?")
speech_args[SPEECH_MESSAGE] = "Um... cheesed to meet you?"
-/obj/item/organ/internal/tongue/rat/on_mob_insert(mob/living/carbon/tongue_owner, special, movement_flags)
+/obj/item/organ/tongue/rat/on_mob_insert(mob/living/carbon/tongue_owner, special, movement_flags)
. = ..()
RegisterSignal(tongue_owner, COMSIG_CARBON_ITEM_GIVEN, PROC_REF(its_on_the_mouse))
-/obj/item/organ/internal/tongue/rat/on_mob_remove(mob/living/carbon/tongue_owner)
+/obj/item/organ/tongue/rat/on_mob_remove(mob/living/carbon/tongue_owner)
. = ..()
UnregisterSignal(tongue_owner, COMSIG_CARBON_ITEM_GIVEN)
-/obj/item/organ/internal/tongue/rat/proc/on_item_given(mob/living/carbon/offerer, mob/living/taker, obj/item/given)
+/obj/item/organ/tongue/rat/proc/on_item_given(mob/living/carbon/offerer, mob/living/taker, obj/item/given)
SIGNAL_HANDLER
INVOKE_ASYNC(src, PROC_REF(its_on_the_mouse), offerer, taker)
-/obj/item/organ/internal/tongue/rat/proc/its_on_the_mouse(mob/living/carbon/offerer, mob/living/taker)
+/obj/item/organ/tongue/rat/proc/its_on_the_mouse(mob/living/carbon/offerer, mob/living/taker)
offerer.say("For you, it's on the mouse.")
taker.add_mood_event("it_was_on_the_mouse", /datum/mood_event/it_was_on_the_mouse)
-/obj/item/organ/internal/tongue/rat/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/tongue/rat/on_life(seconds_per_tick, times_fired)
. = ..()
if(prob(5))
owner.emote("squeaks")
diff --git a/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm b/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm
index b31a64d9bb87c..2b32ad8570223 100644
--- a/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm
+++ b/code/game/machinery/dna_infuser/organ_sets/roach_organs.dm
@@ -46,7 +46,7 @@
/// Roach heart:
/// Reduces damage taken from brute attacks from behind,
/// but increases duration of knockdowns
-/obj/item/organ/internal/heart/roach
+/obj/item/organ/heart/roach
name = "mutated roach-heart"
desc = "Roach DNA infused into what was once a normal heart."
maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
@@ -61,18 +61,18 @@
COOLDOWN_DECLARE(harden_effect_cd)
-/obj/item/organ/internal/heart/roach/Initialize(mapload)
+/obj/item/organ/heart/roach/Initialize(mapload)
. = ..()
AddElement(/datum/element/noticable_organ, "%PRONOUN_They %PRONOUN_have hardened, somewhat translucent skin.")
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/roach)
AddElement(/datum/element/update_icon_blocker)
roach_shell = new()
-/obj/item/organ/internal/heart/roach/Destroy()
+/obj/item/organ/heart/roach/Destroy()
QDEL_NULL(roach_shell)
return ..()
-/obj/item/organ/internal/heart/roach/on_mob_insert(mob/living/carbon/organ_owner, special)
+/obj/item/organ/heart/roach/on_mob_insert(mob/living/carbon/organ_owner, special)
. = ..()
if(!ishuman(organ_owner))
return
@@ -83,11 +83,11 @@
RegisterSignal(human_owner, COMSIG_MOB_AFTER_APPLY_DAMAGE, PROC_REF(do_block_effect))
human_owner.physiology.knockdown_mod *= 3
-/obj/item/organ/internal/heart/roach/on_bodypart_insert(obj/item/bodypart/limb)
+/obj/item/organ/heart/roach/on_bodypart_insert(obj/item/bodypart/limb)
. = ..()
limb.add_bodypart_overlay(roach_shell)
-/obj/item/organ/internal/heart/roach/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/heart/roach/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
if(!ishuman(organ_owner) || QDELETED(organ_owner))
return
@@ -97,7 +97,7 @@
UnregisterSignal(human_owner, list(COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, COMSIG_MOB_AFTER_APPLY_DAMAGE))
human_owner.physiology.knockdown_mod /= 3
-/obj/item/organ/internal/heart/roach/on_bodypart_remove(obj/item/bodypart/limb)
+/obj/item/organ/heart/roach/on_bodypart_remove(obj/item/bodypart/limb)
. = ..()
limb.remove_bodypart_overlay(roach_shell)
@@ -107,7 +107,7 @@
*
* Adds a 0.5 modifier to attacks from the back
*/
-/obj/item/organ/internal/heart/roach/proc/modify_damage(mob/living/carbon/human/source, list/damage_mods, damage_amount, damagetype, def_zone, sharpness, attack_direction, obj/item/attacking_item)
+/obj/item/organ/heart/roach/proc/modify_damage(mob/living/carbon/human/source, list/damage_mods, damage_amount, damagetype, def_zone, sharpness, attack_direction, obj/item/attacking_item)
SIGNAL_HANDLER
if(!is_blocking(source, damage_amount, damagetype, attack_direction))
@@ -120,7 +120,7 @@
*
* Does a special effect if we blocked damage with our back
*/
-/obj/item/organ/internal/heart/roach/proc/do_block_effect(mob/living/carbon/human/source, damage_dealt, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, obj/item/attacking_item)
+/obj/item/organ/heart/roach/proc/do_block_effect(mob/living/carbon/human/source, damage_dealt, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, obj/item/attacking_item)
SIGNAL_HANDLER
if(!is_blocking(source, damage_dealt, damagetype, attack_direction))
@@ -133,7 +133,7 @@
COOLDOWN_START(src, harden_effect_cd, 5 SECONDS) // Cooldown resets EVERY time we get hit
/// Checks if the passed mob is in a valid state to be blocking damage with the roach shell
-/obj/item/organ/internal/heart/roach/proc/is_blocking(mob/living/carbon/human/blocker, damage_amount, damagetype, attack_direction)
+/obj/item/organ/heart/roach/proc/is_blocking(mob/living/carbon/human/blocker, damage_amount, damagetype, attack_direction)
if(damage_amount < 5 || damagetype != BRUTE || !attack_direction)
return
if(!ishuman(blocker) || blocker.stat >= UNCONSCIOUS)
@@ -160,7 +160,7 @@
/// Roach stomach:
/// Makes disgust a non-issue, very slightly worse at passing off reagents
/// Also makes you more hungry
-/obj/item/organ/internal/stomach/roach
+/obj/item/organ/stomach/roach
name = "mutated roach-stomach"
desc = "Roach DNA infused into what was once a normal stomach."
maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
@@ -173,13 +173,13 @@
greyscale_config = /datum/greyscale_config/mutant_organ
greyscale_colors = ROACH_COLORS
-/obj/item/organ/internal/stomach/roach/Initialize(mapload)
+/obj/item/organ/stomach/roach/Initialize(mapload)
. = ..()
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/roach)
/// Roach liver:
/// Purges toxins at a higher threshold, but takes more damage from them if not purged
-/obj/item/organ/internal/liver/roach
+/obj/item/organ/liver/roach
name = "mutated roach-liver"
desc = "Roach DNA infused into what was once a normal liver."
maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
@@ -191,11 +191,11 @@
greyscale_config = /datum/greyscale_config/mutant_organ
greyscale_colors = ROACH_COLORS
-/obj/item/organ/internal/liver/roach/Initialize(mapload)
+/obj/item/organ/liver/roach/Initialize(mapload)
. = ..()
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/roach)
-/obj/item/organ/internal/liver/roach/on_mob_insert(mob/living/carbon/organ_owner, special)
+/obj/item/organ/liver/roach/on_mob_insert(mob/living/carbon/organ_owner, special)
. = ..()
if(!ishuman(organ_owner))
return
@@ -203,7 +203,7 @@
var/mob/living/carbon/human/human_owner = owner
human_owner.physiology.tox_mod *= 2
-/obj/item/organ/internal/liver/roach/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/liver/roach/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
if(!ishuman(organ_owner) || QDELETED(organ_owner))
return
@@ -213,7 +213,7 @@
/// Roach appendix:
/// No appendicitus! weee!
-/obj/item/organ/internal/appendix/roach
+/obj/item/organ/appendix/roach
name = "mutated roach-appendix"
desc = "Roach DNA infused into what was once a normal appendix. It could get worse?"
maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
@@ -223,11 +223,11 @@
greyscale_config = /datum/greyscale_config/mutant_organ
greyscale_colors = ROACH_COLORS
-/obj/item/organ/internal/appendix/roach/Initialize(mapload)
+/obj/item/organ/appendix/roach/Initialize(mapload)
. = ..()
AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/roach)
-/obj/item/organ/internal/appendix/roach/become_inflamed()
+/obj/item/organ/appendix/roach/become_inflamed()
return
#undef ROACH_ORGAN_COLOR
diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm
index cb0ab9900d5cc..0ed9bd4a0103c 100644
--- a/code/game/machinery/dna_scanner.dm
+++ b/code/game/machinery/dna_scanner.dm
@@ -7,7 +7,7 @@
density = TRUE
obj_flags = BLOCKS_CONSTRUCTION // Becomes undense when the door is open
interaction_flags_mouse_drop = NEED_DEXTERITY
- occupant_typecache = list(/mob/living, /obj/item/bodypart/head, /obj/item/organ/internal/brain)
+ occupant_typecache = list(/mob/living, /obj/item/bodypart/head, /obj/item/organ/brain)
circuit = /obj/item/circuitboard/machine/dnascanner
var/locked = FALSE
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 8385a639b7f4a..04f67cee1c1ba 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -119,7 +119,6 @@
var/obj/item/note
/// The seal on the airlock
var/obj/item/seal
- var/detonated = FALSE
var/abandoned = FALSE
/// Controls if the door closes quickly or not. FALSE = the door autocloses in 1.5 seconds, TRUE = 8 seconds - see autoclose_in()
var/normalspeed = TRUE
@@ -701,8 +700,9 @@
switch (held_item?.tool_behaviour)
if (TOOL_SCREWDRIVER)
- context[SCREENTIP_CONTEXT_LMB] = panel_open ? "Close panel" : "Open panel"
- return CONTEXTUAL_SCREENTIP_SET
+ if(has_access_panel)
+ context[SCREENTIP_CONTEXT_LMB] = panel_open ? "Close panel" : "Open panel"
+ return CONTEXTUAL_SCREENTIP_SET
if (TOOL_CROWBAR)
if (panel_open)
if (security_level == AIRLOCK_SECURITY_PLASTEEL_O_S || security_level == AIRLOCK_SECURITY_PLASTEEL_I_S)
@@ -746,9 +746,6 @@
if(obj_flags & EMAGGED)
to_chat(user, span_warning("Unable to interface: Airlock is unresponsive."))
return
- if(detonated)
- to_chat(user, span_warning("Unable to interface. Airlock control panel damaged."))
- return
ui_interact(user)
@@ -858,7 +855,7 @@
set_electrified(MACHINE_ELECTRIFIED_PERMANENT)
/obj/machinery/door/airlock/screwdriver_act(mob/living/user, obj/item/tool)
- if(panel_open && detonated)
+ if(!has_access_panel)
to_chat(user, span_warning("[src] has no maintenance panel!"))
return ITEM_INTERACT_SUCCESS
toggle_panel_open()
@@ -1825,7 +1822,7 @@
/obj/structure/fluff/airlock_filler/singularity_act()
return
-/obj/structure/fluff/airlock_filler/singularity_pull(S, current_size)
+/obj/structure/fluff/airlock_filler/singularity_pull(atom/singularity, current_size)
return
/obj/machinery/door/airlock/proc/set_cycle_pump(obj/machinery/atmospherics/components/unary/airlock_pump/pump)
@@ -2001,12 +1998,12 @@
glass = TRUE
/obj/machinery/door/airlock/maintenance/glass
- name = "maintainence glass airlock"
+ name = "maintenance glass airlock"
opacity = FALSE
glass = TRUE
/obj/machinery/door/airlock/maintenance/external/glass
- name = "maintainence external glass airlock"
+ name = "maintenance external glass airlock"
opacity = FALSE
glass = TRUE
normal_integrity = 200
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 5449f7f7cee4c..67605ac1446fe 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -34,6 +34,8 @@
/// A filler object used to fill the space of multi-tile airlocks
var/obj/structure/fluff/airlock_filler/filler
var/welded = FALSE
+ ///Whether this door has a panel or not; FALSE also stops the examine blurb about the panel from showing up
+ var/has_access_panel = TRUE
/// For rglass-windowed airlocks and firedoors
var/heat_proof = FALSE
/// Emergency access override
@@ -122,7 +124,8 @@
. += span_notice("Due to a security threat, its access requirements have been lifted!")
else
. += span_notice("In the event of a red alert, its access requirements will automatically lift.")
- . += span_notice("Its maintenance panel is [panel_open ? "open" : "screwed in place"].")
+ if(has_access_panel)
+ . += span_notice("Its maintenance panel is [panel_open ? "open" : "screwed in place"].")
/obj/machinery/door/add_context(atom/source, list/context, obj/item/held_item, mob/user)
. = ..()
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index 3fc4dcf219adb..b22959ce461be 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -425,7 +425,7 @@
if(prob(33) && buildstage == FIRE_ALARM_BUILD_SECURED) //require fully wired electronics to set of the alarms
alarm()
-/obj/machinery/firealarm/singularity_pull(S, current_size)
+/obj/machinery/firealarm/singularity_pull(atom/singularity, current_size)
if (current_size >= STAGE_FIVE) // If the singulo is strong enough to pull anchored objects, the fire alarm experiences integrity failure
deconstruct()
return ..()
diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm
index 13126a0436b9f..882d3bebc90cb 100644
--- a/code/game/machinery/medical_kiosk.dm
+++ b/code/game/machinery/medical_kiosk.dm
@@ -288,7 +288,7 @@
chemical_list += list(list("name" = reagent.name, "volume" = round(reagent.volume, 0.01)))
if(reagent.overdosed)
overdose_list += list(list("name" = reagent.name))
- var/obj/item/organ/internal/stomach/belly = patient.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/belly = patient.get_organ_slot(ORGAN_SLOT_STOMACH)
if(belly?.reagents.reagent_list.len) //include the stomach contents if it exists
for(var/bile in belly.reagents.reagent_list)
var/datum/reagent/bit = bile
diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm
index 166410cfccf56..134fa7731d028 100644
--- a/code/game/machinery/recycler.dm
+++ b/code/game/machinery/recycler.dm
@@ -171,7 +171,7 @@
not_eaten += 1
continue
- if (istype(thing, /obj/item/organ/internal/brain) || istype(thing, /obj/item/dullahan_relay))
+ if (istype(thing, /obj/item/organ/brain) || istype(thing, /obj/item/dullahan_relay))
living_detected = TRUE
if (istype(thing, /obj/item/mmi))
diff --git a/code/game/machinery/scanner_gate.dm b/code/game/machinery/scanner_gate.dm
index 41b84a26ddfb0..3d87e4cb60b9a 100644
--- a/code/game/machinery/scanner_gate.dm
+++ b/code/game/machinery/scanner_gate.dm
@@ -7,17 +7,6 @@
#define SCANGATE_NUTRITION "Nutrition"
#define SCANGATE_CONTRABAND "Contraband"
-#define SCANGATE_HUMAN "human"
-#define SCANGATE_LIZARD "lizard"
-#define SCANGATE_FELINID "felinid"
-#define SCANGATE_FLY "fly"
-#define SCANGATE_PLASMAMAN "plasma"
-#define SCANGATE_MOTH "moth"
-#define SCANGATE_JELLY "jelly"
-#define SCANGATE_POD "pod"
-#define SCANGATE_GOLEM "golem"
-#define SCANGATE_ZOMBIE "zombie"
-
/obj/machinery/scanner_gate
name = "scanner gate"
desc = "A gate able to perform mid-depth scans on any organisms who pass under it."
@@ -35,7 +24,7 @@
///Is searching for a disease, what severity is enough to trigger the gate?
var/disease_threshold = DISEASE_SEVERITY_MINOR
///If scanning for a specific species, what species is it looking for?
- var/detect_species = SCANGATE_HUMAN
+ var/detect_species_id = SPECIES_HUMAN
///Flips all scan results for inverse scanning. Signals if scan returns false.
var/reverse = FALSE
///If scanning for nutrition, what level of nutrition will trigger the scanner?
@@ -52,7 +41,21 @@
var/base_false_beep = 5
///Is an n-spect scanner attached to the gate? Enables contraband scanning.
var/obj/item/inspector/n_spect = null
-
+ ///List of species that can be scanned by the gate. Supports adding more species' IDs during in-game.
+ var/list/available_species = list(
+ SPECIES_HUMAN,
+ SPECIES_LIZARD,
+ SPECIES_FLYPERSON,
+ SPECIES_FELINE,
+ SPECIES_PLASMAMAN,
+ SPECIES_MOTH,
+ SPECIES_JELLYPERSON,
+ SPECIES_PODPERSON,
+ SPECIES_GOLEM,
+ SPECIES_ZOMBIE,
+ )
+ /// Overlay object we're using for scanlines
+ var/obj/effect/overlay/scanline = null
/obj/machinery/scanner_gate/Initialize(mapload)
. = ..()
@@ -64,6 +67,10 @@
AddElement(/datum/element/connect_loc, loc_connections)
register_context()
+/obj/machinery/scanner_gate/Destroy(force)
+ QDEL_NULL(scanline)
+ return ..()
+
/obj/machinery/scanner_gate/RefreshParts()
. = ..()
for(var/datum/stock_part/scanning_module/scanning_module in component_parts)
@@ -104,13 +111,31 @@
if(!(machine_stat & (BROKEN|NOPOWER)) && anchored && !panel_open)
perform_scan(thing)
-/obj/machinery/scanner_gate/proc/set_scanline(type, duration)
- cut_overlays()
+/obj/machinery/scanner_gate/proc/set_scanline(scanline_type, duration)
+ if (!isnull(scanline))
+ vis_contents -= scanline
+ else
+ scanline = new(src)
+ scanline.icon = icon
+ scanline.mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+ scanline.layer = layer
deltimer(scanline_timer)
- add_overlay(type)
+ if (isnull(scanline_type))
+ if(duration)
+ scanline_timer = addtimer(CALLBACK(src, PROC_REF(set_scanline), "passive"), duration, TIMER_STOPPABLE)
+ return
+ scanline.icon_state = scanline_type
+ vis_contents += scanline
if(duration)
scanline_timer = addtimer(CALLBACK(src, PROC_REF(set_scanline), "passive"), duration, TIMER_STOPPABLE)
+/obj/machinery/scanner_gate/power_change()
+ . = ..()
+ if (machine_stat & (NOPOWER | BROKEN))
+ set_scanline(null)
+ return
+ set_scanline("passive")
+
/obj/machinery/scanner_gate/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
if(istype(tool, /obj/item/inspector))
if(n_spect)
@@ -205,37 +230,12 @@
if(ishuman(thing))
var/mob/living/carbon/human/scanned_human = thing
var/datum/species/scan_species = /datum/species/human
- switch(detect_species)
- if(SCANGATE_LIZARD)
- detected_thing = "Lizardperson"
- scan_species = /datum/species/lizard
- if(SCANGATE_FLY)
- detected_thing = "Flyperson"
- scan_species = /datum/species/fly
- if(SCANGATE_FELINID)
- detected_thing = "Felinid"
- scan_species = /datum/species/human/felinid
- if(SCANGATE_PLASMAMAN)
- detected_thing = "Plasmaman"
- scan_species = /datum/species/plasmaman
- if(SCANGATE_MOTH)
- detected_thing = "Mothperson"
- scan_species = /datum/species/moth
- if(SCANGATE_JELLY)
- detected_thing = "Jellyperson"
- scan_species = /datum/species/jelly
- if(SCANGATE_POD)
- detected_thing = "Podperson"
- scan_species = /datum/species/pod
- if(SCANGATE_GOLEM)
- detected_thing = "Golem"
- scan_species = /datum/species/golem
- if(SCANGATE_ZOMBIE)
- detected_thing = "Zombie"
- scan_species = /datum/species/zombie
+ if(detect_species_id && (detect_species_id in available_species))
+ scan_species = GLOB.species_list[detect_species_id]
+ detected_thing = scan_species.name
if(is_species(scanned_human, scan_species))
beep = TRUE
- if(detect_species == SCANGATE_ZOMBIE) //Can detect dormant zombies
+ if(detect_species_id == SPECIES_ZOMBIE) //Can detect dormant zombies
detected_thing = "Romerol infection"
if(scanned_human.get_organ_slot(ORGAN_SLOT_ZOMBIE))
beep = TRUE
@@ -321,15 +321,25 @@
ui = new(user, src, "ScannerGate", name)
ui.open()
+/obj/machinery/scanner_gate/ui_static_data(mob/user)
+ . = ..()
+ for(var/species_id in available_species)
+ var/datum/species/specie = GLOB.species_list[species_id]
+ .["available_species"] += list(list(
+ "specie_name" = capitalize(format_text(specie.name)),
+ "specie_id" = species_id,
+ ))
+
/obj/machinery/scanner_gate/ui_data()
var/list/data = list()
data["locked"] = locked
data["scan_mode"] = scangate_mode
data["reverse"] = reverse
data["disease_threshold"] = disease_threshold
- data["target_species"] = detect_species
+ data["target_species_id"] = detect_species_id
data["target_nutrition"] = detect_nutrition
data["contraband_enabled"] = !!n_spect
+ data["target_zombie"] = (detect_species_id == SPECIES_ZOMBIE)
return data
/obj/machinery/scanner_gate/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
@@ -353,10 +363,11 @@
var/new_threshold = params["new_threshold"]
disease_threshold = new_threshold
. = TRUE
- //Some species are not scannable, like abductors (too unknown), androids (too artificial) or skeletons (too magic)
if("set_target_species")
- var/new_species = params["new_species"]
- detect_species = new_species
+ var/new_specie_id = params["new_species_id"]
+ if(!(new_specie_id in available_species))
+ return
+ detect_species_id = new_specie_id
. = TRUE
if("set_target_nutrition")
var/new_nutrition = params["new_nutrition"]
@@ -385,14 +396,3 @@
#undef SCANGATE_SPECIES
#undef SCANGATE_NUTRITION
#undef SCANGATE_CONTRABAND
-
-#undef SCANGATE_HUMAN
-#undef SCANGATE_LIZARD
-#undef SCANGATE_FELINID
-#undef SCANGATE_FLY
-#undef SCANGATE_PLASMAMAN
-#undef SCANGATE_MOTH
-#undef SCANGATE_JELLY
-#undef SCANGATE_POD
-#undef SCANGATE_GOLEM
-#undef SCANGATE_ZOMBIE
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 1eff3f6587080..44d441b93dbcd 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -2,7 +2,7 @@
// SUIT STORAGE UNIT /////////////////
/obj/machinery/suit_storage_unit
name = "suit storage unit"
- desc = "An industrial unit made to hold and decontaminate irradiated equipment. It comes with a built-in UV cauterization mechanism. A small warning label advises that organic matter should not be placed into the unit."
+ desc = "An industrial unit made to hold, charge, and decontaminate equipment. It comes with a built-in UV cauterization mechanism. A small warning label advises that organic matter should not be placed into the unit."
icon = 'icons/obj/machines/suit_storage.dmi'
icon_state = "classic"
base_icon_state = "classic"
@@ -401,7 +401,7 @@
if (occupant && safeties)
say("Alert: safeties triggered, occupant detected!")
return
- else if (!helmet && !mask && !suit && !storage && !occupant)
+ else if (!helmet && !mask && !suit && !mod && !storage && !occupant)
to_chat(user, "There's nothing inside [src] to disinfect!")
return
else
@@ -751,9 +751,9 @@
if(!user.transferItemToLoc(weapon, src))
return
mask = weapon
- else if(istype(weapon, /obj/item/mod/control))
+ else if(istype(weapon, /obj/item/storage/backpack) || istype(weapon, /obj/item/mod/control))
if(mod)
- to_chat(user, span_warning("The unit already contains a MOD!"))
+ to_chat(user, span_warning("The unit already contains a backpack or MOD!"))
return
if(!user.transferItemToLoc(weapon, src))
return
diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm
index 04dd7e4809a6d..ede5302d512b5 100644
--- a/code/game/objects/effects/bump_teleporter.dm
+++ b/code/game/objects/effects/bump_teleporter.dm
@@ -26,7 +26,7 @@
/obj/effect/bump_teleporter/singularity_act()
return
-/obj/effect/bump_teleporter/singularity_pull()
+/obj/effect/bump_teleporter/singularity_pull(atom/singularity, current_size)
return
/obj/effect/bump_teleporter/Bumped(atom/movable/bumper)
diff --git a/code/game/objects/effects/countdown.dm b/code/game/objects/effects/countdown.dm
index d83440ee9bd36..11364a047b774 100644
--- a/code/game/objects/effects/countdown.dm
+++ b/code/game/objects/effects/countdown.dm
@@ -73,7 +73,7 @@
STOP_PROCESSING(SSfastprocess, src)
. = ..()
-/obj/effect/countdown/singularity_pull()
+/obj/effect/countdown/singularity_pull(atom/singularity, current_size)
return
/obj/effect/countdown/singularity_act()
diff --git a/code/game/objects/effects/effect_system/effect_shield.dm b/code/game/objects/effects/effect_system/effect_shield.dm
index 9b1cc2c1bf202..d76712626b8e3 100644
--- a/code/game/objects/effects/effect_system/effect_shield.dm
+++ b/code/game/objects/effects/effect_system/effect_shield.dm
@@ -21,6 +21,6 @@
/obj/effect/shield/singularity_act()
return
-/obj/effect/shield/singularity_pull(S, current_size)
+/obj/effect/shield/singularity_pull(atom/singularity, current_size)
return
diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm
index e651c8a3e2402..0bc59ded98d3f 100644
--- a/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm
+++ b/code/game/objects/effects/effect_system/fluid_spread/effects_smoke.dm
@@ -391,7 +391,7 @@
var/fraction = (seconds_per_tick SECONDS) / initial(lifetime)
reagents.copy_to(smoker, reagents.total_volume, fraction)
- reagents.expose(smoker, INGEST, fraction)
+ reagents.expose(smoker, INHALE, fraction)
return TRUE
/// Helper to quickly create a cloud of reagent smoke
diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm
index 0c050579de45b..495c61510a601 100644
--- a/code/game/objects/effects/effects.dm
+++ b/code/game/objects/effects/effects.dm
@@ -50,7 +50,7 @@
/obj/effect/abstract
resistance_flags = parent_type::resistance_flags | SHUTTLE_CRUSH_PROOF
-/obj/effect/abstract/singularity_pull()
+/obj/effect/abstract/singularity_pull(atom/singularity, current_size)
return
/obj/effect/abstract/singularity_act()
@@ -59,7 +59,7 @@
/obj/effect/abstract/has_gravity(turf/gravity_turf)
return FALSE
-/obj/effect/dummy/singularity_pull()
+/obj/effect/dummy/singularity_pull(atom/singularity, current_size)
return
/obj/effect/dummy/singularity_act()
diff --git a/code/game/objects/effects/forcefields.dm b/code/game/objects/effects/forcefields.dm
index 60ce9d7662b81..dc51e5079f4c8 100644
--- a/code/game/objects/effects/forcefields.dm
+++ b/code/game/objects/effects/forcefields.dm
@@ -14,7 +14,7 @@
if(initial_duration > 0 SECONDS)
QDEL_IN(src, initial_duration)
-/obj/effect/forcefield/singularity_pull()
+/obj/effect/forcefield/singularity_pull(atom/singularity, current_size)
return
/// The wizard's forcefield, summoned by forcewall
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index b1a4a75c945d7..5efb41e602916 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -11,7 +11,7 @@
/obj/effect/landmark/singularity_act()
return
-/obj/effect/landmark/singularity_pull()
+/obj/effect/landmark/singularity_pull(atom/singularity, current_size)
return
INITIALIZE_IMMEDIATE(/obj/effect/landmark)
diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm
index 075e927d65328..f502138552493 100644
--- a/code/game/objects/effects/misc.dm
+++ b/code/game/objects/effects/misc.dm
@@ -15,7 +15,7 @@
/obj/effect/beam/singularity_act()
return
-/obj/effect/beam/singularity_pull()
+/obj/effect/beam/singularity_pull(atom/singularity, current_size)
return
/obj/effect/spawner
diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm
index 24fae3f613917..b90ebe54ffaf2 100644
--- a/code/game/objects/effects/overlays.dm
+++ b/code/game/objects/effects/overlays.dm
@@ -4,7 +4,7 @@
/obj/effect/overlay/singularity_act()
return
-/obj/effect/overlay/singularity_pull()
+/obj/effect/overlay/singularity_pull(atom/singularity, current_size)
return
/obj/effect/overlay/beam//Not actually a projectile, just an effect.
diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm
index a43fee5608de3..18f633504264f 100644
--- a/code/game/objects/effects/portals.dm
+++ b/code/game/objects/effects/portals.dm
@@ -113,7 +113,7 @@
playsound(loc, SFX_PORTAL_CLOSE, 50, FALSE, SHORT_RANGE_SOUND_EXTRARANGE)
qdel(src)
-/obj/effect/portal/singularity_pull()
+/obj/effect/portal/singularity_pull(atom/singularity, current_size)
return
/obj/effect/portal/singularity_act()
diff --git a/code/game/objects/effects/posters/official.dm b/code/game/objects/effects/posters/official.dm
index 2c78c0485eada..47b360476ee44 100644
--- a/code/game/objects/effects/posters/official.dm
+++ b/code/game/objects/effects/posters/official.dm
@@ -253,7 +253,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/the_owl, 32)
/obj/structure/sign/poster/official/no_erp
name = "No ERP"
- desc = "This poster reminds the crew that Eroticism, Rape and Pornography are banned on Nanotrasen stations."
+ desc = "This poster reminds the crew that Enterprise Resource Planning is not allowed by company policy, in accordance with Spinward governmental regulations on megacorporations."
icon_state = "no_erp"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/no_erp, 32)
diff --git a/code/game/objects/effects/spawners/random/medical.dm b/code/game/objects/effects/spawners/random/medical.dm
index 050223525e6e8..2998e9dc6705f 100644
--- a/code/game/objects/effects/spawners/random/medical.dm
+++ b/code/game/objects/effects/spawners/random/medical.dm
@@ -25,20 +25,20 @@
icon_state = "eyes"
spawn_loot_count = 3
loot = list(
- /obj/item/organ/internal/heart/gland/egg = 7,
- /obj/item/organ/internal/heart/gland/plasma = 7,
- /obj/item/organ/internal/heart/gland/chem = 5,
- /obj/item/organ/internal/heart/gland/mindshock = 5,
- /obj/item/organ/internal/heart/gland/transform = 5,
- /obj/item/organ/internal/heart/gland/spiderman = 5,
- /obj/item/organ/internal/heart/gland/slime = 4,
- /obj/item/organ/internal/heart/gland/trauma = 4,
- /obj/item/organ/internal/heart/gland/electric = 3,
- /obj/item/organ/internal/monster_core/regenerative_core = 2,
- /obj/item/organ/internal/monster_core/rush_gland = 2,
- /obj/item/organ/internal/monster_core/brimdust_sac = 2,
- /obj/item/organ/internal/heart/gland/ventcrawling = 1,
- /obj/item/organ/internal/body_egg/alien_embryo = 1,
+ /obj/item/organ/heart/gland/egg = 7,
+ /obj/item/organ/heart/gland/plasma = 7,
+ /obj/item/organ/heart/gland/chem = 5,
+ /obj/item/organ/heart/gland/mindshock = 5,
+ /obj/item/organ/heart/gland/transform = 5,
+ /obj/item/organ/heart/gland/spiderman = 5,
+ /obj/item/organ/heart/gland/slime = 4,
+ /obj/item/organ/heart/gland/trauma = 4,
+ /obj/item/organ/heart/gland/electric = 3,
+ /obj/item/organ/monster_core/regenerative_core = 2,
+ /obj/item/organ/monster_core/rush_gland = 2,
+ /obj/item/organ/monster_core/brimdust_sac = 2,
+ /obj/item/organ/heart/gland/ventcrawling = 1,
+ /obj/item/organ/body_egg/alien_embryo = 1,
)
/obj/effect/spawner/random/medical/memeorgans
@@ -46,23 +46,23 @@
icon_state = "eyes"
spawn_loot_count = 5
loot = list(
- /obj/item/organ/internal/ears/penguin,
- /obj/item/organ/internal/ears/cat,
- /obj/item/organ/internal/eyes/moth,
- /obj/item/organ/internal/eyes/snail,
- /obj/item/organ/internal/tongue/bone,
- /obj/item/organ/internal/tongue/fly,
- /obj/item/organ/internal/tongue/snail,
- /obj/item/organ/internal/tongue/lizard,
- /obj/item/organ/internal/tongue/alien,
- /obj/item/organ/internal/tongue/ethereal,
- /obj/item/organ/internal/tongue/robot,
- /obj/item/organ/internal/tongue/zombie,
- /obj/item/organ/internal/appendix,
- /obj/item/organ/internal/liver/fly,
- /obj/item/organ/internal/lungs/plasmaman,
- /obj/item/organ/external/tail/cat,
- /obj/item/organ/external/tail/lizard,
+ /obj/item/organ/ears/penguin,
+ /obj/item/organ/ears/cat,
+ /obj/item/organ/eyes/moth,
+ /obj/item/organ/eyes/snail,
+ /obj/item/organ/tongue/bone,
+ /obj/item/organ/tongue/fly,
+ /obj/item/organ/tongue/snail,
+ /obj/item/organ/tongue/lizard,
+ /obj/item/organ/tongue/alien,
+ /obj/item/organ/tongue/ethereal,
+ /obj/item/organ/tongue/robot,
+ /obj/item/organ/tongue/zombie,
+ /obj/item/organ/appendix,
+ /obj/item/organ/liver/fly,
+ /obj/item/organ/lungs/plasmaman,
+ /obj/item/organ/tail/cat,
+ /obj/item/organ/tail/lizard,
)
/obj/effect/spawner/random/medical/two_percent_xeno_egg_spawner
diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm
index 68a49b8a3031b..31ca55a54fb7b 100644
--- a/code/game/objects/effects/step_triggers.dm
+++ b/code/game/objects/effects/step_triggers.dm
@@ -31,7 +31,7 @@
/obj/effect/step_trigger/singularity_act()
return
-/obj/effect/step_trigger/singularity_pull()
+/obj/effect/step_trigger/singularity_pull(atom/singularity, current_size)
return
/* Sends a message to mob when triggered*/
diff --git a/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm b/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm
index 81c854f2c3e17..2d112aa205909 100644
--- a/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm
+++ b/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm
@@ -7,7 +7,7 @@
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
appearance_flags = LONG_GLIDE
-/obj/effect/projectile/singularity_pull()
+/obj/effect/projectile/singularity_pull(atom/singularity, current_size)
return
/obj/effect/projectile/singularity_act()
diff --git a/code/game/objects/effects/temporary_visuals/temporary_visual.dm b/code/game/objects/effects/temporary_visuals/temporary_visual.dm
index 9669b4ed290ec..a4c94104e1e75 100644
--- a/code/game/objects/effects/temporary_visuals/temporary_visual.dm
+++ b/code/game/objects/effects/temporary_visuals/temporary_visual.dm
@@ -25,7 +25,7 @@
/obj/effect/temp_visual/singularity_act()
return
-/obj/effect/temp_visual/singularity_pull()
+/obj/effect/temp_visual/singularity_pull(atom/singularity, current_size)
return
/obj/effect/temp_visual/dir_setting
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index fddfc5b591306..e8820b3f960dd 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -149,6 +149,9 @@
var/flags_inv
///you can see someone's mask through their transparent visor, but you can't reach it
var/transparent_protection = NONE
+ ///Name of a mask in icons\mob\human\hair_masks.dmi to apply to hair when this item is worn
+ ///Used by certain hats to give the appearance of squishing down tall hairstyles without hiding the hair completely
+ var/hair_mask = ""
///flags for what should be done when you click on the item, default is picking it up
var/interaction_flags_item = INTERACT_ITEM_ATTACK_HAND_PICKUP
@@ -470,7 +473,7 @@
var/list/parent_tags = ..()
parent_tags.Insert(1, weight_class_to_text(w_class)) // To make size display first, otherwise it looks goofy
. = parent_tags
- .[weight_class_to_text(w_class)] = "[gender == PLURAL ? "They are" : "It is"] a [weight_class_to_text(w_class)] item."
+ .[weight_class_to_text(w_class)] = weight_class_to_tooltip(w_class)
if(item_flags & CRUEL_IMPLEMENT)
.[span_red("morbid")] = "It seems quite practical for particularly morbid procedures and experiments."
@@ -866,10 +869,10 @@
/obj/item/proc/IsReflect(def_zone)
return FALSE
-/obj/item/singularity_pull(S, current_size)
+/obj/item/singularity_pull(atom/singularity, current_size)
..()
if(current_size >= STAGE_FOUR)
- throw_at(S,14,3, spin=0)
+ throw_at(singularity, 14, 3, spin=0)
else
return
@@ -895,6 +898,8 @@
playsound(src, drop_sound, YEET_SOUND_VOLUME, ignore_walls = FALSE, vary = sound_vary)
return
var/volume = get_volume_by_throwforce_and_or_w_class()
+ if(.) //it's been caught.
+ return
if (throwforce > 0 || HAS_TRAIT(src, TRAIT_CUSTOM_TAP_SOUND))
if (mob_throw_hit_sound)
playsound(hit_atom, mob_throw_hit_sound, volume, TRUE, -1)
@@ -1836,13 +1841,13 @@
/obj/item/apply_single_mat_effect(datum/material/material, mat_amount, multiplier)
. = ..()
- if(!(material_flags & MATERIAL_AFFECT_STATISTICS) || !slowdown)
+ if(!(material_flags & MATERIAL_AFFECT_STATISTICS) || (material_flags & MATERIAL_NO_SLOWDOWN) || !material.added_slowdown)
return
slowdown += GET_MATERIAL_MODIFIER(material.added_slowdown * mat_amount, multiplier)
/obj/item/remove_single_mat_effect(datum/material/material, mat_amount, multiplier)
. = ..()
- if(!(material_flags & MATERIAL_AFFECT_STATISTICS) || !slowdown)
+ if(!(material_flags & MATERIAL_AFFECT_STATISTICS) || (material_flags & MATERIAL_NO_SLOWDOWN) || !material.added_slowdown)
return
slowdown -= GET_MATERIAL_MODIFIER(material.added_slowdown * mat_amount, multiplier)
diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm
index 3124ba9c39196..2e7e6c39b6cc0 100644
--- a/code/game/objects/items/airlock_painter.dm
+++ b/code/game/objects/items/airlock_painter.dm
@@ -73,7 +73,7 @@
return TRUE
/obj/item/airlock_painter/suicide_act(mob/living/user)
- var/obj/item/organ/internal/lungs/L = user.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/L = user.get_organ_slot(ORGAN_SLOT_LUNGS)
if(can_use(user) && L)
user.visible_message(span_suicide("[user] is inhaling toner from [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm
index 39388da561b06..f8824861dba0f 100644
--- a/code/game/objects/items/apc_frame.dm
+++ b/code/game/objects/items/apc_frame.dm
@@ -35,5 +35,5 @@
var/obj/machinery/power/apc/mounted_apc = locate(/obj/machinery/power/apc) in get_turf(user)
mounted_apc.wallframe_act(user, src)
return ITEM_INTERACT_SUCCESS
- turf.attackby(src, user)
+ turf.item_interaction(user, src)
return ITEM_INTERACT_SUCCESS
diff --git a/code/game/objects/items/body_egg.dm b/code/game/objects/items/body_egg.dm
index d8b48e0789b21..d5769ceb8d798 100644
--- a/code/game/objects/items/body_egg.dm
+++ b/code/game/objects/items/body_egg.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/body_egg
+/obj/item/organ/body_egg
name = "body egg"
desc = "All slimy and yuck."
icon_state = "innards"
@@ -6,47 +6,47 @@
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_PARASITE_EGG
-/obj/item/organ/internal/body_egg/on_find(mob/living/finder)
+/obj/item/organ/body_egg/on_find(mob/living/finder)
..()
to_chat(finder, span_warning("You found an unknown alien organism in [owner]'s [zone]!"))
-/obj/item/organ/internal/body_egg/Initialize(mapload)
+/obj/item/organ/body_egg/Initialize(mapload)
. = ..()
if(iscarbon(loc))
Insert(loc)
-/obj/item/organ/internal/body_egg/mob_insert(mob/living/carbon/egg_owner, special = FALSE, movement_flags = DELETE_IF_REPLACED)
+/obj/item/organ/body_egg/mob_insert(mob/living/carbon/egg_owner, special = FALSE, movement_flags = DELETE_IF_REPLACED)
. = ..()
egg_owner.add_traits(list(TRAIT_XENO_HOST, TRAIT_XENO_IMMUNE), ORGAN_TRAIT)
egg_owner.med_hud_set_status()
INVOKE_ASYNC(src, PROC_REF(AddInfectionImages), egg_owner)
-/obj/item/organ/internal/body_egg/mob_remove(mob/living/carbon/egg_owner, special, movement_flags)
+/obj/item/organ/body_egg/mob_remove(mob/living/carbon/egg_owner, special, movement_flags)
. = ..()
egg_owner.remove_traits(list(TRAIT_XENO_HOST, TRAIT_XENO_IMMUNE), ORGAN_TRAIT)
egg_owner.med_hud_set_status()
INVOKE_ASYNC(src, PROC_REF(RemoveInfectionImages), egg_owner)
-/obj/item/organ/internal/body_egg/on_death(seconds_per_tick, times_fired)
+/obj/item/organ/body_egg/on_death(seconds_per_tick, times_fired)
. = ..()
if(!owner)
return
egg_process(seconds_per_tick, times_fired)
-/obj/item/organ/internal/body_egg/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/body_egg/on_life(seconds_per_tick, times_fired)
. = ..()
egg_process(seconds_per_tick, times_fired)
-/obj/item/organ/internal/body_egg/proc/egg_process(seconds_per_tick, times_fired)
+/obj/item/organ/body_egg/proc/egg_process(seconds_per_tick, times_fired)
return
-/obj/item/organ/internal/body_egg/proc/RefreshInfectionImage()
+/obj/item/organ/body_egg/proc/RefreshInfectionImage()
RemoveInfectionImages()
AddInfectionImages()
-/obj/item/organ/internal/body_egg/proc/AddInfectionImages()
+/obj/item/organ/body_egg/proc/AddInfectionImages()
return
-/obj/item/organ/internal/body_egg/proc/RemoveInfectionImages()
+/obj/item/organ/body_egg/proc/RemoveInfectionImages()
return
diff --git a/code/game/objects/items/choice_beacon.dm b/code/game/objects/items/choice_beacon.dm
index aa51d71c5eda4..e99ed4b3320a3 100644
--- a/code/game/objects/items/choice_beacon.dm
+++ b/code/game/objects/items/choice_beacon.dm
@@ -147,12 +147,12 @@
augment_list = list()
// cyberimplants range from a nice bonus to fucking broken bullshit so no subtypesof
var/list/selectable_types = list(
- /obj/item/organ/internal/cyberimp/brain/anti_drop,
- /obj/item/organ/internal/cyberimp/arm/toolset,
- /obj/item/organ/internal/cyberimp/arm/surgery,
- /obj/item/organ/internal/cyberimp/chest/thrusters,
- /obj/item/organ/internal/lungs/cybernetic/tier3,
- /obj/item/organ/internal/liver/cybernetic/tier3,
+ /obj/item/organ/cyberimp/brain/anti_drop,
+ /obj/item/organ/cyberimp/arm/toolset,
+ /obj/item/organ/cyberimp/arm/surgery,
+ /obj/item/organ/cyberimp/chest/thrusters,
+ /obj/item/organ/lungs/cybernetic/tier3,
+ /obj/item/organ/liver/cybernetic/tier3,
)
for(var/obj/item/organ/organ as anything in selectable_types)
augment_list[initial(organ.name)] = organ
diff --git a/code/game/objects/items/cigarettes.dm b/code/game/objects/items/cigarettes.dm
index 69b65149775ba..aab4f59fce338 100644
--- a/code/game/objects/items/cigarettes.dm
+++ b/code/game/objects/items/cigarettes.dm
@@ -444,12 +444,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
return
how_long_have_we_been_smokin += seconds_per_tick * (1 SECONDS)
- reagents.expose(smoker, INGEST, min(to_smoke / reagents.total_volume, 1))
- var/obj/item/organ/internal/lungs/lungs = smoker.get_organ_slot(ORGAN_SLOT_LUNGS)
+ reagents.expose(smoker, INHALE, min(to_smoke / reagents.total_volume, 1))
+ var/obj/item/organ/lungs/lungs = smoker.get_organ_slot(ORGAN_SLOT_LUNGS)
if(lungs && IS_ORGANIC_ORGAN(lungs))
var/smoker_resistance = HAS_TRAIT(smoker, TRAIT_SMOKER) ? 0.5 : 1
smoker.adjustOrganLoss(ORGAN_SLOT_LUNGS, lung_harm * smoker_resistance)
- if(!reagents.trans_to(smoker, to_smoke, methods = INGEST, ignore_stomach = TRUE))
+ if(!reagents.trans_to(smoker, to_smoke, methods = INHALE, ignore_stomach = TRUE))
reagents.remove_all(to_smoke)
/obj/item/cigarette/process(seconds_per_tick)
@@ -992,7 +992,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
e.start(src)
qdel(src)
- if(!reagents.trans_to(vaper, REAGENTS_METABOLISM, methods = INGEST, ignore_stomach = TRUE))
+ if(!reagents.trans_to(vaper, REAGENTS_METABOLISM, methods = INHALE, ignore_stomach = TRUE))
reagents.remove_all(REAGENTS_METABOLISM)
/obj/item/vape/process(seconds_per_tick)
diff --git a/code/game/objects/items/climbingrope.dm b/code/game/objects/items/climbingrope.dm
index f10a9db76704c..5ad9e49d0b849 100644
--- a/code/game/objects/items/climbingrope.dm
+++ b/code/game/objects/items/climbingrope.dm
@@ -14,6 +14,7 @@
attack_verb_continuous = list("whacks", "flails", "bludgeons")
attack_verb_simple = list("whack", "flail", "bludgeon")
resistance_flags = FLAMMABLE
+ w_class = WEIGHT_CLASS_SMALL
///how many times can we climb with this rope
var/uses = 5
///climb time
@@ -58,7 +59,7 @@
// Misc bonuses to the climb speed.
var/misc_multiplier = 1
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
if(istype(potential_spine))
misc_multiplier *= potential_spine.athletics_boost_multiplier
@@ -97,7 +98,6 @@
desc = "An emergency climbing hook to scale up holes. The rope is EXTREMELY cheap and may not withstand extended use."
uses = 2
climb_time = 4 SECONDS
- w_class = WEIGHT_CLASS_SMALL
/obj/item/climbing_hook/syndicate
name = "suspicious climbing hook"
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 78b150ed89c62..77b94761a7a5b 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -819,7 +819,13 @@
return .
context[SCREENTIP_CONTEXT_LMB] = "Paint"
- context[SCREENTIP_CONTEXT_RMB] = "Copy color"
+
+ if(isbodypart(target))
+ var/obj/item/bodypart/limb = target
+ if(IS_ROBOTIC_LIMB(limb))
+ context[SCREENTIP_CONTEXT_RMB] = "Restyle robotic limb"
+ else
+ context[SCREENTIP_CONTEXT_RMB] = "Copy color"
return CONTEXTUAL_SCREENTIP_SET
@@ -981,7 +987,7 @@
/* DOPPLER EDIT REMOVAL START
if(isbodypart(interacting_with) && actually_paints)
var/obj/item/bodypart/limb = interacting_with
- if(!IS_ORGANIC_LIMB(limb))
+ if(IS_ROBOTIC_LIMB(limb))
var/list/skins = list()
var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi')
for(var/skin_option in style_list_icons)
@@ -1094,6 +1100,13 @@
charges = INFINITE_CHARGES
desc = "Now with 30% more bluespace technology."
+/obj/item/toy/crayon/spraycan/roboticist
+ name = "roboticist spraycan"
+ desc = "Paint for restyling unattached robotic limbs. Sadly doesn't shine like chrome."
+ icon_state = "robocan"
+ icon_capped = "robocan_cap"
+ icon_uncapped = "robocan"
+
#undef RANDOM_GRAFFITI
#undef RANDOM_LETTER
#undef RANDOM_PUNCTUATION
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index 9133068cb0027..dd5d78fce0d61 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -583,7 +583,7 @@
if(do_after(user, 3 SECONDS, H, extra_checks = CALLBACK(src, PROC_REF(is_wielded)))) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
user.visible_message(span_notice("[user] places [src] on [H]'s chest."), span_warning("You place [src] on [H]'s chest."))
playsound(src, 'sound/machines/defib/defib_charge.ogg', 75, FALSE)
- var/obj/item/organ/internal/heart = H.get_organ_by_type(/obj/item/organ/internal/heart)
+ var/obj/item/organ/heart = H.get_organ_by_type(/obj/item/organ/heart)
if(do_after(user, 2 SECONDS, H, extra_checks = CALLBACK(src, PROC_REF(is_wielded)))) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
if((!combat && !req_defib) || (req_defib && !defib.combat))
for(var/obj/item/clothing/C in H.get_equipped_items())
@@ -660,7 +660,7 @@
log_combat(user, H, "revived", defib)
do_success()
return
- else if (!H.get_organ_by_type(/obj/item/organ/internal/heart))
+ else if (!H.get_organ_by_type(/obj/item/organ/heart))
user.visible_message(span_warning("[req_defib ? "[defib]" : "[src]"] buzzes: Patient's heart is missing. Operation aborted."))
playsound(src, 'sound/machines/defib/defib_failed.ogg', 50, FALSE)
else if(H.undergoing_cardiac_arrest())
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 657d054f11cc8..94b7e14fe80fb 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -112,8 +112,8 @@
to_chat(user, span_warning("You're going to need to remove that [(M.head && M.head.flags_cover & HEADCOVERSEYES) ? "helmet" : (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSEYES) ? "mask": "glasses"] first!"))
return
- var/obj/item/organ/internal/eyes/E = M.get_organ_slot(ORGAN_SLOT_EYES)
- var/obj/item/organ/internal/brain = M.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/eyes/E = M.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/brain = M.get_organ_slot(ORGAN_SLOT_BRAIN)
if(!E)
to_chat(user, span_warning("[M] doesn't have any eyes!"))
return
@@ -889,7 +889,7 @@
if(!fuel)
user.visible_message(span_suicide("[user] is trying to squirt [src]'s fluids into [user.p_their()] eyes... but it's empty!"))
return SHAME
- var/obj/item/organ/internal/eyes/eyes = user.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = user.get_organ_slot(ORGAN_SLOT_EYES)
if(!eyes)
user.visible_message(span_suicide("[user] is trying to squirt [src]'s fluids into [user.p_their()] eyes... but [user.p_they()] don't have any!"))
return SHAME
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index b9d8539562809..4838d6c891614 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -50,6 +50,17 @@
if(. || !apc_scanner)
return
+ scan_apc(user)
+
+/obj/item/multitool/attack_self_secondary(mob/user, modifiers)
+ . = ..()
+
+ if(. || !apc_scanner)
+ return
+
+ scan_apc(user)
+
+/obj/item/multitool/proc/scan_apc(mob/user)
if(!COOLDOWN_FINISHED(src, next_apc_scan))
return
@@ -94,19 +105,69 @@
// Syndicate device disguised as a multitool; it will turn red when an AI camera is nearby.
/obj/item/multitool/ai_detect
- actions_types = list(/datum/action/item_action/toggle_multitool)
+ apc_scanner = FALSE
+ /// How close the AI is to us
var/detect_state = PROXIMITY_NONE
+ /// Range at which the closest AI makes the multitool glow red
var/rangealert = 8 //Glows red when inside
+ /// Range at which the closest AI makes the multitool glow yellow
var/rangewarning = 20 //Glows yellow when inside
- var/hud_type = DATA_HUD_AI_DETECT
- var/detecting = FALSE
+ /// Is our HUD on
+ var/hud_on = FALSE
+
+ // static scan stuff
+ /// hud object that the fake static images use
+ var/obj/effect/overlay/ai_detect_hud/camera_unseen/hud_obj
+ /// fake static image
+ var/list/image/static_images = list()
+ /// the client that we shoved those images to
+ var/datum/weakref/static_viewer
+ /// timerid for the timer that makes em disappear
+ var/static_disappear_timer
+ /// cooldown for actually doing a static scan
+ COOLDOWN_DECLARE(static_scan_cd)
+
+/obj/item/multitool/ai_detect/examine(mob/user)
+ . = ..()
+ if(!hud_on)
+ return
+ . += span_notice("You can right-click to scan for nearby unseen spots. They will be shown for exactly 8 seconds due to battery limitations.")
+ switch(detect_state)
+ if(PROXIMITY_NONE)
+ . += span_green("No AI should be currently looking at you. Keep on your clandestine activities.")
+ if(PROXIMITY_NEAR)
+ . += span_warning("An AI is getting uncomfortably close. Maybe time to drop what youre doing.")
+ if(PROXIMITY_ON_SCREEN)
+ . += span_danger("An AI is (probably) looking at you. You should probably hide this.")
/obj/item/multitool/ai_detect/Destroy()
- STOP_PROCESSING(SSfastprocess, src)
+ if(hud_on && ismob(loc))
+ remove_hud(loc)
+ cleanup_static()
return ..()
-/obj/item/multitool/ai_detect/ui_action_click()
- return
+/obj/item/multitool/ai_detect/attack_self(mob/user, modifiers)
+ . = ..()
+ if(.)
+ return
+ toggle_hud(user)
+
+/obj/item/multitool/ai_detect/attack_self_secondary(mob/user, modifiers)
+ . = ..()
+ if(.)
+ return
+ scan_unseen(user)
+
+/obj/item/multitool/ai_detect/equipped(mob/living/carbon/human/user, slot)
+ . = ..()
+ if(hud_on)
+ show_hud(user)
+
+/obj/item/multitool/ai_detect/dropped(mob/living/carbon/human/user)
+ . = ..()
+ if(hud_on)
+ remove_hud(user)
+ cleanup_static()
/obj/item/multitool/ai_detect/update_icon_state()
. = ..()
@@ -118,17 +179,26 @@
if(detect_state != old_detect_state)
update_appearance()
-/obj/item/multitool/ai_detect/proc/toggle_detect(mob/user)
- detecting = !detecting
+/obj/item/multitool/ai_detect/proc/toggle_hud(mob/user)
+ hud_on = !hud_on
if(user)
- to_chat(user, span_notice("You toggle the ai detection feature on [src] [detecting ? "on" : "off"]."))
- if(!detecting)
- detect_state = PROXIMITY_NONE
- update_appearance()
- STOP_PROCESSING(SSfastprocess, src)
- return
- if(detecting)
+ to_chat(user, span_notice("You toggle the ai detection feature on [src] [hud_on ? "on" : "off"]."))
+ if(hud_on)
START_PROCESSING(SSfastprocess, src)
+ show_hud(user)
+ else
+ STOP_PROCESSING(SSfastprocess, src)
+ detect_state = PROXIMITY_NONE
+ update_appearance(UPDATE_ICON)
+ remove_hud(user)
+
+/obj/item/multitool/ai_detect/proc/show_hud(mob/user)
+ var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_AI_DETECT]
+ hud.show_to(user)
+
+/obj/item/multitool/ai_detect/proc/remove_hud(mob/user)
+ var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_AI_DETECT]
+ hud.hide_from(user)
/obj/item/multitool/ai_detect/proc/multitool_detect()
var/turf/our_turf = get_turf(src)
@@ -138,10 +208,11 @@
if(!AI_eye.ai_detector_visible)
continue
- var/distance = get_dist(our_turf, get_turf(AI_eye))
+ var/turf/ai_turf = get_turf(AI_eye)
+ var/distance = get_dist(our_turf, ai_turf)
if(distance == -1) //get_dist() returns -1 for distances greater than 127 (and for errors, so assume -1 is just max range)
- if(our_turf == get_turf(AI_eye)) // EXCEPT if the AI is on our TURF(ITS RIGHT ONTOP OF US!!!!)
+ if(ai_turf == our_turf)
detect_state = PROXIMITY_ON_SCREEN
break
continue
@@ -152,17 +223,60 @@
if(distance < rangewarning) //ai can't see us but is close
detect_state = PROXIMITY_NEAR
-/datum/action/item_action/toggle_multitool
- name = "Toggle AI detecting mode"
- check_flags = NONE
-
-/datum/action/item_action/toggle_multitool/Trigger(trigger_flags)
- if(!..())
- return FALSE
- if(target)
- var/obj/item/multitool/ai_detect/M = target
- M.toggle_detect(owner)
- return TRUE
+/obj/item/multitool/ai_detect/proc/scan_unseen(mob/user)
+ if(isnull(user?.client)) // the monkey incident of 2564
+ return
+ if(!COOLDOWN_FINISHED(src, static_scan_cd))
+ balloon_alert(user, "recharging!")
+ return
+ cleanup_static()
+ var/turf/our_turf = get_turf(src)
+ var/list/datum/camerachunk/chunks = surrounding_chunks(our_turf)
+
+ if(!hud_obj)
+ hud_obj = new()
+ SET_PLANE_W_SCALAR(hud_obj, PLANE_TO_TRUE(hud_obj.plane), GET_TURF_PLANE_OFFSET(our_turf))
+
+ var/list/new_images = list()
+ for(var/datum/camerachunk/chunk as anything in chunks)
+ for(var/turf/seen_turf as anything in chunk.obscuredTurfs)
+ var/image/img = image(loc = seen_turf, layer = ABOVE_ALL_MOB_LAYER)
+ img.vis_contents += hud_obj
+ SET_PLANE(img, GAME_PLANE, seen_turf)
+ new_images += img
+ user.client.images |= new_images
+ static_viewer = WEAKREF(user.client)
+ balloon_alert(user, "nearby unseen spots shown")
+ static_disappear_timer = addtimer(CALLBACK(src, PROC_REF(cleanup_static)), 8 SECONDS, TIMER_STOPPABLE)
+ COOLDOWN_START(src, static_scan_cd, 4 SECONDS)
+
+// copied from camera chunks but we are doing a really big edge case here though
+/obj/item/multitool/ai_detect/proc/surrounding_chunks(turf/epicenter)
+ . = list()
+ var/static_range = /mob/camera/ai_eye::static_visibility_range
+ var/x1 = max(1, epicenter.x - static_range)
+ var/y1 = max(1, epicenter.y - static_range)
+ var/x2 = min(world.maxx, epicenter.x + static_range)
+ var/y2 = min(world.maxy, epicenter.y + static_range)
+
+ for(var/x = x1; x <= x2; x += CHUNK_SIZE)
+ for(var/y = y1; y <= y2; y += CHUNK_SIZE)
+ var/datum/camerachunk/chunk = GLOB.cameranet.getCameraChunk(x, y, epicenter.z)
+ // removing cameras in build mode didnt affect it and i guess it needs an AI eye to update so we have to do this manually
+ // unless we only want to see static in a jank manner only if an eye updates it
+ chunk?.update() // UPDATE THE FUCK NOW
+ . |= chunk
+
+/obj/item/multitool/ai_detect/proc/cleanup_static()
+ if(isnull(hud_obj)) //we never did anything
+ return
+ var/client/viewer = static_viewer?.resolve()
+ viewer?.images -= static_images
+ static_images.Cut()
+ QDEL_NULL(hud_obj)
+ viewer = null
+ deltimer(static_disappear_timer)
+ static_disappear_timer = null
/obj/item/multitool/abductor
name = "alien multitool"
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 6ce325034e3ac..8ad4f0d77d169 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -70,6 +70,7 @@ GLOBAL_LIST_INIT(channel_tokens, list(
if(ispath(keyslot2))
keyslot2 = new keyslot2()
set_listening(TRUE)
+ set_broadcasting(TRUE)
recalculateChannels()
possibly_deactivate_in_loc()
@@ -115,6 +116,22 @@ GLOBAL_LIST_INIT(channel_tokens, list(
for(var/language in language_list)
user.remove_language(language, language_flags = UNDERSTOOD_LANGUAGE, source = LANGUAGE_RADIOKEY)
+// Headsets do not become hearing sensitive as broadcasting instead controls their talk_into capabilities
+/obj/item/radio/headset/set_broadcasting(new_broadcasting, actual_setting = TRUE)
+ broadcasting = new_broadcasting
+ if(actual_setting)
+ should_be_broadcasting = broadcasting
+
+ if (perform_update_icon && !isnull(overlay_mic_idle))
+ update_icon()
+ else if (!perform_update_icon)
+ should_update_icon = TRUE
+
+/obj/item/radio/headset/talk_into_impl(atom/movable/talking_movable, message, channel, list/spans, datum/language/language, list/message_mods)
+ if (!broadcasting)
+ return
+ return ..()
+
/obj/item/radio/headset/syndicate //disguised to look like a normal headset for stealth ops
/obj/item/radio/headset/syndicate/Initialize(mapload)
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 6a6ca49d7ae67..72f3747b01121 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -348,16 +348,13 @@
signal.broadcast()
return
-
if(isliving(talking_movable))
var/mob/living/talking_living = talking_movable
-/*BEGIN DOPPLER EDIT - VOLUME MIXER
- if(radio_noise && !HAS_TRAIT(talking_living, TRAIT_DEAF) && talking_living.client?.prefs.read_preference(/datum/preference/toggle/radio_noise))
- SEND_SOUND(talking_living, 'sound/items/radio/radio_talk.ogg') */
var/volume_modifier = (talking_living.client?.prefs.read_preference(/datum/preference/numeric/sound_radio_noise))
- if(radio_noise && !HAS_TRAIT(talking_living, TRAIT_DEAF) && volume_modifier)
- SEND_SOUND(talking_living, sound('sound/items/radio/radio_talk.ogg', volume = volume_modifier))
-///END DOPPLER EDIT
+ if(radio_noise && talking_living.can_hear() && volume_modifier && signal.frequency != FREQ_COMMON)
+ var/sound/radio_noise = sound(sound('sound/items/radio/radio_talk.ogg', volume = volume_modifier))
+ radio_noise.frequency = get_rand_frequency_low_range()
+ SEND_SOUND(talking_living, radio_noise)
// All radios make an attempt to use the subspace system first
signal.send_to_receivers()
@@ -435,16 +432,19 @@
var/mob/living/holder = loc
var/volume_modifier = (holder.client?.prefs.read_preference(/datum/preference/numeric/sound_radio_noise))
- if(!radio_noise || HAS_TRAIT(holder, TRAIT_DEAF) || !holder.client?.prefs.read_preference(/datum/preference/numeric/sound_radio_noise)) //DOPPLER EDIT CHANGE - Original: if(!radio_noise || HAS_TRAIT(holder, TRAIT_DEAF) || !holder.client?.prefs.read_preference(/datum/preference/toggle/radio_noise))
+ if(!radio_noise || HAS_TRAIT(holder, TRAIT_DEAF) || !holder.client?.prefs.read_preference(/datum/preference/numeric/sound_radio_noise))
return
-
var/list/spans = data["spans"]
if(COOLDOWN_FINISHED(src, audio_cooldown))
COOLDOWN_START(src, audio_cooldown, 0.5 SECONDS)
- SEND_SOUND(holder, sound('sound/items/radio/radio_receive.ogg', volume = volume_modifier)) //DOPPLER EDIT CHANGE - Original: SEND_SOUND(holder, 'sound/items/radio/radio_receive.ogg')
+ var/sound/radio_receive = sound('sound/items/radio/radio_receive.ogg', volume = volume_modifier)
+ radio_receive.frequency = get_rand_frequency_low_range()
+ SEND_SOUND(holder, radio_noise)
if((SPAN_COMMAND in spans) && COOLDOWN_FINISHED(src, important_audio_cooldown))
COOLDOWN_START(src, important_audio_cooldown, 0.5 SECONDS)
- SEND_SOUND(holder, sound('sound/items/radio/radio_important.ogg', volume = volume_modifier)) //DOPPLER EDIT CHANGE - Original: SEND_SOUND(holder, 'sound/items/radio/radio_important.ogg')
+ var/sound/radio_important = sound('sound/items/radio/radio_important.ogg', volume = volume_modifier)
+ radio_important.frequency = get_rand_frequency_low_range()
+ SEND_SOUND(holder, radio_important)
/obj/item/radio/ui_state(mob/user)
return GLOB.inventory_state
@@ -662,6 +662,9 @@
should_be_listening = TRUE
should_be_broadcasting = FALSE
+/obj/item/radio/entertainment/speakers/proc/toggle_mute()
+ should_be_listening = !should_be_listening
+
/obj/item/radio/entertainment/speakers/Initialize(mapload)
. = ..()
set_broadcasting(FALSE)
diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm
index c49d0a1aa21a9..d71d84e1f1909 100644
--- a/code/game/objects/items/devices/scanners/gas_analyzer.dm
+++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm
@@ -151,7 +151,7 @@
return interact_with_atom(interacting_with, user, modifiers)
/obj/item/analyzer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
- if(can_see(user, interacting_with, ranged_scan_distance))
+ if(!HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION) && can_see(user, interacting_with, ranged_scan_distance))
atmos_scan(user, (interacting_with.return_analyzable_air() ? interacting_with : get_turf(interacting_with)))
return NONE // Non-blocking
diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm
index 5b7ee4f7026b8..aedffb566b276 100644
--- a/code/game/objects/items/devices/scanners/health_analyzer.dm
+++ b/code/game/objects/items/devices/scanners/health_analyzer.dm
@@ -326,7 +326,7 @@
// Cybernetics
var/list/cyberimps
- for(var/obj/item/organ/internal/cyberimp/cyberimp in humantarget.organs)
+ for(var/obj/item/organ/cyberimp/cyberimp in humantarget.organs)
if(IS_ROBOTIC_ORGAN(cyberimp) && !(cyberimp.organ_flags & ORGAN_HIDDEN))
LAZYADD(cyberimps, cyberimp.examine_title(user))
if(LAZYLEN(cyberimps))
@@ -468,7 +468,7 @@
render_block.Cut()
// Stomach reagents
- var/obj/item/organ/internal/stomach/belly = target.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/belly = target.get_organ_slot(ORGAN_SLOT_STOMACH)
if(belly)
if(belly.reagents.reagent_list.len)
for(var/bile in belly.reagents.reagent_list)
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 9b6328fe682fa..df0fbb928ed8c 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -20,7 +20,6 @@
var/playsleepseconds = 0
var/obj/item/tape/mytape
var/starting_tape_type = /obj/item/tape/random
- var/open_panel = FALSE
var/canprint = TRUE
var/list/icons_available = list()
var/radial_icon_file = 'icons/hud/radial_taperecorder.dmi'
@@ -58,7 +57,7 @@
/obj/item/taperecorder/examine(mob/user)
. = ..()
if(in_range(src, user) || isobserver(user))
- . += span_notice("The wire panel is [open_panel ? "opened" : "closed"]. The display reads:")
+ . += span_notice("The display reads:")
. += "[readout()]"
/obj/item/taperecorder/click_alt(mob/user)
diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm
index a2fac2b50a44f..5a108c83e823b 100644
--- a/code/game/objects/items/devices/traitordevices.dm
+++ b/code/game/objects/items/devices/traitordevices.dm
@@ -329,23 +329,66 @@ effective or pretty fucking useless.
/obj/item/jammer
name = "radio jammer"
- desc = "Device used to disrupt nearby radio communication."
+ desc = "Device used to disrupt nearby radio communication. Alternate function creates a powerful distruptor wave which disables all nearby listening devices."
icon = 'icons/obj/devices/syndie_gadget.dmi'
icon_state = "jammer"
var/active = FALSE
var/range = 12
+ var/jam_cooldown_duration = 15 SECONDS
+ COOLDOWN_DECLARE(jam_cooldown)
-/obj/item/jammer/attack_self(mob/user)
- to_chat(user,span_notice("You [active ? "deactivate" : "activate"] [src]."))
+/obj/item/jammer/Initialize(mapload)
+ . = ..()
+ register_context()
+
+/atom/movable/screen/alert/give/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ context[SCREENTIP_CONTEXT_LMB] = "Release distruptor wave"
+ context[SCREENTIP_CONTEXT_RMB] = "Toggle"
+ return CONTEXTUAL_SCREENTIP_SET
+
+/obj/item/jammer/attack_self(mob/user, modifiers)
+ . = ..()
+ if (!COOLDOWN_FINISHED(src, jam_cooldown))
+ user.balloon_alert(user, "on cooldown!")
+ return
+
+ user.balloon_alert(user, "distruptor wave released!")
+ to_chat(user, span_notice("You release a distruptor wave, disabling all nearby radio devices."))
+ for (var/atom/potential_owner in view(7, user))
+ disable_radios_on(potential_owner)
+ COOLDOWN_START(src, jam_cooldown, jam_cooldown_duration)
+
+/obj/item/jammer/attack_self_secondary(mob/user, modifiers)
+ . = ..()
+ to_chat(user, span_notice("You [active ? "deactivate" : "activate"] [src]."))
+ user.balloon_alert(user, "[active ? "deactivated" : "activated"] the jammer")
active = !active
if(active)
GLOB.active_jammers |= src
-
else
GLOB.active_jammers -= src
-
update_appearance()
+/obj/item/jammer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
+ . = ..()
+
+ if(. & ITEM_INTERACT_ANY_BLOCKER)
+ return
+
+ if (!(interacting_with in view(7, user)))
+ user.balloon_alert(user, "out of reach!")
+ return
+
+ interacting_with.balloon_alert(user, "radio distrupted!")
+ to_chat(user, span_notice("You release a directed distruptor wave, disabling all radio devices on [interacting_with]."))
+ disable_radios_on(interacting_with)
+
+ return ITEM_INTERACT_SUCCESS
+
+/obj/item/jammer/proc/disable_radios_on(atom/target)
+ for (var/obj/item/radio/radio in target.get_all_contents() + target)
+ radio.set_broadcasting(FALSE)
+
/obj/item/jammer/Destroy()
GLOB.active_jammers -= src
return ..()
diff --git a/code/game/objects/items/drug_items.dm b/code/game/objects/items/drug_items.dm
index d25c957145561..7f31b155a2650 100644
--- a/code/game/objects/items/drug_items.dm
+++ b/code/game/objects/items/drug_items.dm
@@ -44,6 +44,8 @@
reagent_flags = TRANSPARENT
spillable = FALSE
list_reagents = list(/datum/reagent/drug/blastoff = 10)
+ reagent_consumption_method = INHALE
+ consumption_sound = 'sound/effects/spray2.ogg'
/obj/item/reagent_containers/cup/blastoff_ampoule/update_icon_state()
. = ..()
diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm
index b25765a302443..7f2e54984cae9 100644
--- a/code/game/objects/items/dualsaber.dm
+++ b/code/game/objects/items/dualsaber.dm
@@ -84,7 +84,7 @@
user.visible_message(span_suicide("[user] begins spinning way too fast! It looks like [user.p_theyre()] trying to commit suicide!"))
var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD)//stole from chainsaw code
- var/obj/item/organ/internal/brain/B = user.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/B = user.get_organ_slot(ORGAN_SLOT_BRAIN)
B.organ_flags &= ~ORGAN_VITAL //this cant possibly be a good idea
var/randdir
for(var/i in 1 to 24)//like a headless chicken!
diff --git a/code/game/objects/items/dyespray.dm b/code/game/objects/items/dyespray.dm
index b64f15fe69073..fc6685aaf6b2a 100644
--- a/code/game/objects/items/dyespray.dm
+++ b/code/game/objects/items/dyespray.dm
@@ -23,11 +23,34 @@
if(!ishuman(target))
return
var/mob/living/carbon/human/human_target = target
- var/beard_or_hair = tgui_alert(user, "What do you want to dye?", "Character Preference", list("Hair", "Facial Hair"))
- if(!beard_or_hair || !user.can_perform_action(src, NEED_DEXTERITY))
+ var/list/dyables = list("Hair", "Facial Hair")
+ for(var/obj/item/organ/organ as anything in human_target.organs)
+ if(!istype(organ.bodypart_overlay, /datum/bodypart_overlay/mutant))
+ continue
+ var/datum/bodypart_overlay/mutant/overlay = organ.bodypart_overlay
+ if(overlay.dyable && overlay.sprite_datum.color_src)
+ dyables += list("External Body Parts")
+ break
+ var/obj/item/bodypart/head/head = human_target.get_bodypart(BODY_ZONE_HEAD)
+ if(!head || !(head.head_flags & HEAD_HAIR) || HAS_TRAIT(human_target, TRAIT_BALD))
+ dyables -= "Hair"
+ if(!head || !(head.head_flags & HEAD_FACIAL_HAIR) || HAS_TRAIT(human_target, TRAIT_SHAVED))
+ dyables -= "Facial Hair"
+ if(!length(dyables))
+ if(target != user)
+ to_chat(user, span_warning("[human_target] doesn't have anything that can be dyed."))
+ else
+ to_chat(user, span_warning("You have nothing to dye."))
+ return
+ var/what_to_dye = tgui_alert(user, "What do you want to dye?", "Character Preference", dyables)
+ if(!what_to_dye || !user.can_perform_action(src, NEED_DEXTERITY))
+ return
+
+ if(what_to_dye == "External Bodyparts/Organs")
+ dye_organ(target, user)
return
- var/list/choices = beard_or_hair == "Hair" ? SSaccessories.hair_gradients_list : SSaccessories.facial_hair_gradients_list
+ var/list/choices = what_to_dye == "Hair" ? SSaccessories.hair_gradients_list : SSaccessories.facial_hair_gradients_list
var/new_grad_style = tgui_input_list(user, "Choose a color pattern", "Character Preference", choices)
if(isnull(new_grad_style))
return
@@ -41,10 +64,54 @@
to_chat(user, span_notice("You start applying the hair dye..."))
if(!do_after(user, 3 SECONDS, target))
return
- if(beard_or_hair == "Hair")
+ if(what_to_dye == "Hair")
human_target.set_hair_gradient_style(new_grad_style, update = FALSE)
human_target.set_hair_gradient_color(new_grad_color, update = TRUE)
else
human_target.set_facial_hair_gradient_style(new_grad_style, update = FALSE)
human_target.set_facial_hair_gradient_color(new_grad_color, update = TRUE)
playsound(src, 'sound/effects/spray.ogg', 10, vary = TRUE)
+
+/obj/item/dyespray/proc/dye_organ(mob/living/carbon/human/target, mob/user)
+ var/list/dyables = list()
+ var/list/choices = list()
+ for(var/obj/item/organ/organ as anything in target.organs)
+ if(!istype(organ.bodypart_overlay, /datum/bodypart_overlay/mutant))
+ continue
+ var/datum/bodypart_overlay/mutant/overlay = organ.bodypart_overlay
+ if(overlay.dyable && overlay.sprite_datum.color_src)
+ var/choice_name = full_capitalize(organ.name)
+ dyables[choice_name] = organ
+ choices += choice_name
+ if(!length(choices))
+ return
+ var/what_to_dye = tgui_alert(user, "What do you want to dye?", "Character Preference", choices)
+ if(!what_to_dye || !user.can_perform_action(src, NEED_DEXTERITY))
+ return
+
+ var/obj/item/organ/selected = dyables[what_to_dye]
+ if(QDELETED(selected) || !(selected in target.organs))
+ return
+
+ var/datum/bodypart_overlay/mutant/overlay = selected.bodypart_overlay
+ if(overlay.dye_color)
+ var/remove_dye = tgui_alert(user, "Do you want to un-dye [selected]?", "Character Preference", list("Yes", "No"))
+ if(isnull(remove_dye) || !user.can_perform_action(src, NEED_DEXTERITY))
+ return
+ if(QDELETED(selected) || !(selected in target.organs))
+ return
+ if(remove_dye == "Yes")
+ overlay.set_dye_color(null, selected)
+ return
+
+ var/default_color = overlay.dye_color || overlay.draw_color
+ var/new_color = input(user, "Choose a color for [selected]:", "Character Preference", default_color) as color|null
+ if(isnull(new_color) || new_color == default_color || !user.can_perform_action(src, NEED_DEXTERITY))
+ return
+ if(QDELETED(selected) || !(selected in target.organs))
+ return
+ if(!do_after(user, 4.5 SECONDS, target))
+ return
+ if(QDELETED(selected) || !(selected in target.organs))
+ return
+ overlay.set_dye_color(new_color, selected)
diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/fireaxe.dm
index 265a05cfac74a..162af703ad2bd 100644
--- a/code/game/objects/items/fireaxe.dm
+++ b/code/game/objects/items/fireaxe.dm
@@ -1,3 +1,5 @@
+GLOBAL_DATUM(bridge_axe, /obj/item/fireaxe)
+
/*
* Fireaxe
*/
@@ -34,6 +36,9 @@
/obj/item/fireaxe/Initialize(mapload)
. = ..()
+ if(!GLOB.bridge_axe && istype(get_area(src), /area/station/command))
+ GLOB.bridge_axe = src
+
AddComponent(/datum/component/butchering, \
speed = 10 SECONDS, \
effectiveness = 80, \
@@ -43,6 +48,11 @@
//axes are not known for being precision butchering tools
AddComponent(/datum/component/two_handed, force_unwielded=force_unwielded, force_wielded=force_wielded, icon_wielded="[base_icon_state]1")
+/obj/item/fireaxe/Destroy()
+ if(GLOB.bridge_axe == src)
+ GLOB.bridge_axe = null
+ return ..()
+
/obj/item/fireaxe/update_icon_state()
icon_state = "[base_icon_state]0"
return ..()
diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm
index cd41859307efb..dd2ca026fa2f3 100644
--- a/code/game/objects/items/flamethrower.dm
+++ b/code/game/objects/items/flamethrower.dm
@@ -80,6 +80,8 @@
. += "+lit"
/obj/item/flamethrower/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
+ if (!ptank)
+ return NONE
if(HAS_TRAIT(user, TRAIT_PACIFISM))
to_chat(user, span_warning("You can't bring yourself to fire \the [src]! You don't want to risk harming anyone..."))
log_combat(user, interacting_with, "attempted to flamethrower", src, "with gas mixture: {[print_gas_mixture(ptank.return_analyzable_air())]}, flamethrower: \"[name]\" ([src]), igniter: \"[igniter.name]\", tank: \"[ptank.name]\" and tank distribution pressure: \"[siunit(1000 * ptank.distribute_pressure, unit = "Pa", maxdecimals = 9)]\"" + (lit ? " while lit" : "" + " but failed due to pacifism."))
diff --git a/code/game/objects/items/food/bait.dm b/code/game/objects/items/food/bait.dm
index 711c6cb1e68ff..9fbac7d3cf82b 100644
--- a/code/game/objects/items/food/bait.dm
+++ b/code/game/objects/items/food/bait.dm
@@ -83,7 +83,7 @@
* Otherwise it'd be hard/impossible to cath some fish with it,
* making that rod a shoddy choice in the long run.
*/
-/obj/item/food/bait/doughball/syntethic/unconsumable
+/obj/item/food/bait/doughball/synthetic/unconsumable
/obj/item/food/bait/doughball/synthetic/unconsumable/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/items/food/donkpocket.dm b/code/game/objects/items/food/donkpocket.dm
index b21149da8d044..4cbf83ce631bc 100644
--- a/code/game/objects/items/food/donkpocket.dm
+++ b/code/game/objects/items/food/donkpocket.dm
@@ -299,7 +299,7 @@
foodtypes = GRAIN | MEAT | FRIED
/obj/item/food/donkpocket/deluxe/nocarb
- name = "/improper Meat-pocket"
+ name = "\improper Meat-pocket"
desc = "The food of choice for the carnivorous traitor."
icon_state = "donkpocketdeluxenocarb"
food_reagents = list(
@@ -310,7 +310,6 @@
tastes = list("raw meat" = 2, "more meat" = 2, "no carbs" = 1)
foodtypes = MEAT | RAW
crafting_complexity = FOOD_COMPLEXITY_4
-
warm_type = /obj/item/food/donkpocket/warm/deluxe/nocarb
/obj/item/food/donkpocket/deluxe/meat/make_bakeable()
@@ -332,7 +331,7 @@
foodtypes = MEAT
/obj/item/food/donkpocket/deluxe/vegan
- name = "/improper Donk-roll"
+ name = "\improper Donk-roll"
desc = "The classic station snack, now with rice! Certified vegan and cruelty free by the Animal Liberation Front."
icon_state = "donkpocketdeluxevegan"
food_reagents = list(
@@ -343,6 +342,7 @@
tastes = list("rice patty" = 2, "dough" = 2, "peppery kick" = 1)
foodtypes = GRAIN | VEGETABLES
crafting_complexity = FOOD_COMPLEXITY_4
+ warm_type = /obj/item/food/donkpocket/warm/deluxe/vegan
/obj/item/food/donkpocket/deluxe/vegan/make_bakeable()
AddComponent(/datum/component/bakeable, warm_type, rand(baking_time_short, baking_time_long), TRUE, TRUE, deluxe_added_reagents)
diff --git a/code/game/objects/items/food/donuts.dm b/code/game/objects/items/food/donuts.dm
index 922ed2eaa6674..993ada424adab 100644
--- a/code/game/objects/items/food/donuts.dm
+++ b/code/game/objects/items/food/donuts.dm
@@ -45,7 +45,7 @@
///Override for checkliked in edible component, because all cops LOVE donuts
/obj/item/food/donut/proc/check_liked(mob/living/carbon/human/consumer)
- var/obj/item/organ/internal/liver/liver = consumer.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = consumer.get_organ_slot(ORGAN_SLOT_LIVER)
if(!HAS_TRAIT(consumer, TRAIT_AGEUSIA) && liver && HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM))
return FOOD_LIKED
diff --git a/code/game/objects/items/food/meatdish.dm b/code/game/objects/items/food/meatdish.dm
index 770b6f8bf3124..07b9b34699178 100644
--- a/code/game/objects/items/food/meatdish.dm
+++ b/code/game/objects/items/food/meatdish.dm
@@ -52,7 +52,7 @@
/obj/item/food/fishmeat/salmon
name = "salmon fillet"
- desc = "a chunky, fatty fillet of salmon meat."
+ desc = "A chunky, fatty fillet of salmon meat."
icon_state = "salmon"
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 4,
@@ -144,6 +144,22 @@
/obj/item/food/fishmeat/octopus/make_grillable()
AddComponent(/datum/component/grillable, /obj/item/food/grilled_octopus, rand(15 SECONDS, 25 SECONDS), TRUE, TRUE)
+/obj/item/food/fishmeat/fish_tail
+ name = "fish tail fillet"
+ desc = "A precious fatty filet cut straight from the tail of a very large ...fish? Its rarity has it seen as a delicacy in certain spaces."
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment/protein = 2,
+ /datum/reagent/consumable/nutriment/vitamin = 1,
+ /datum/reagent/consumable/nutriment/fat = 2,
+ )
+ bite_consumption = 5
+ tastes = list("fatty fish" = 1)
+ crafting_complexity = FOOD_COMPLEXITY_1
+
+/obj/item/food/fishmeat/fish_tail/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/quality_food_ingredient, FOOD_COMPLEXITY_1)
+
/obj/item/food/fishfingers
name = "fish fingers"
desc = "A finger of fish."
@@ -185,7 +201,7 @@
/datum/reagent/consumable/nutriment = 6,
/datum/reagent/consumable/nutriment/vitamin = 3,
)
- tastes = list("fish" = 1, "pan seared vegtables" = 1)
+ tastes = list("fish" = 1, "pan-seared vegetables" = 1)
foodtypes = SEAFOOD | VEGETABLES | FRIED
w_class = WEIGHT_CLASS_SMALL
crafting_complexity = FOOD_COMPLEXITY_2
@@ -725,7 +741,7 @@
/obj/item/food/sashimi
name = "carp sashimi"
- desc = "Celebrate surviving attack from hostile alien lifeforms by hospitalising yourself. You sure hope whoever made this is skilled."
+ desc = "Celebrate surviving an attack from hostile alien lifeforms by hospitalising yourself. You sure hope whoever made this is skilled."
icon = 'icons/obj/food/meat.dmi'
icon_state = "sashimi"
food_reagents = list(
diff --git a/code/game/objects/items/food/misc.dm b/code/game/objects/items/food/misc.dm
index bfd26f534de23..6da965e47578d 100644
--- a/code/game/objects/items/food/misc.dm
+++ b/code/game/objects/items/food/misc.dm
@@ -611,7 +611,7 @@
AddComponent(/datum/component/edible, check_liked = CALLBACK(src, PROC_REF(check_liked)))
/obj/item/food/pickle/proc/check_liked(mob/living/carbon/human/consumer)
- var/obj/item/organ/internal/liver/liver = consumer.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = consumer.get_organ_slot(ORGAN_SLOT_LIVER)
if(!HAS_TRAIT(consumer, TRAIT_AGEUSIA) && liver && HAS_TRAIT(liver, TRAIT_CORONER_METABOLISM))
return FOOD_LIKED
diff --git a/code/game/objects/items/food/sandwichtoast.dm b/code/game/objects/items/food/sandwichtoast.dm
index e63127a6a219d..47ae8b2c1ab54 100644
--- a/code/game/objects/items/food/sandwichtoast.dm
+++ b/code/game/objects/items/food/sandwichtoast.dm
@@ -257,6 +257,7 @@
tastes = list("bread" = 1, "meat" = 1, "tomato sauce" = 1, "death" = 1)
foodtypes = GRAIN | MEAT
eat_time = 4 SECONDS // Makes it harder to force-feed this to people as a weapon, as funny as that is.
+ var/static/list/correct_clothing = list(/obj/item/clothing/under/rank/civilian/cookjorts, /obj/item/clothing/under/shorts/jeanshorts)
/obj/item/food/sandwich/death/Initialize(mapload)
. = ..()
@@ -285,7 +286,7 @@
*/
/obj/item/food/sandwich/death/proc/check_liked(mob/living/carbon/human/consumer)
// Closest thing to a mullet we have
- if(consumer.hairstyle == "Gelled Back" && istype(consumer.get_item_by_slot(ITEM_SLOT_ICLOTHING), /obj/item/clothing/under/rank/civilian/cookjorts))
+ if(consumer.hairstyle == "Gelled Back" && is_type_in_list(consumer.get_item_by_slot(ITEM_SLOT_ICLOTHING), correct_clothing))
return FOOD_LIKED
return FOOD_ALLERGIC
diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm
index eb38b5a97836e..005bcff76771a 100644
--- a/code/game/objects/items/hand_items.dm
+++ b/code/game/objects/items/hand_items.dm
@@ -561,7 +561,7 @@
return ..()
-/obj/projectile/kiss/Impact(atom/A)
+/obj/projectile/kiss/impact(atom/A)
def_zone = BODY_ZONE_HEAD // let's keep it PG, people
if(damage > 0 || !isliving(A)) // if we do damage or we hit a nonliving thing, we don't have to worry about a harmless hit because we can't wrongly do damage anyway
@@ -635,7 +635,7 @@
if(!iscarbon(target))
return
var/mob/living/carbon/heartbreakee = target
- var/obj/item/organ/internal/heart/dont_go_breakin_my_heart = heartbreakee.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/dont_go_breakin_my_heart = heartbreakee.get_organ_slot(ORGAN_SLOT_HEART)
dont_go_breakin_my_heart.apply_organ_damage(999)
// Based on energy gun characteristics
diff --git a/code/game/objects/items/kirby_plants/kirbyplants.dm b/code/game/objects/items/kirby_plants/kirbyplants.dm
index 16153e8524c1c..1e9718f934eaa 100644
--- a/code/game/objects/items/kirby_plants/kirbyplants.dm
+++ b/code/game/objects/items/kirby_plants/kirbyplants.dm
@@ -95,8 +95,8 @@
//Handles randomizing the icon during initialize()
/obj/item/kirbyplants/random/proc/randomize_base_icon_state()
- if(!random_plant_states)
- generate_states()
+ if(isnull(random_plant_states))
+ random_plant_states = generate_states()
base_icon_state = pick(random_plant_states)
if(!dead) //no need to update the icon if we're already dead.
update_appearance(UPDATE_ICON)
diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm
index d54601d8d7817..48f9df35c5adc 100644
--- a/code/game/objects/items/melee/baton.dm
+++ b/code/game/objects/items/melee/baton.dm
@@ -352,7 +352,7 @@
/obj/item/melee/baton/telescopic/suicide_act(mob/living/user)
var/mob/living/carbon/human/human_user = user
- var/obj/item/organ/internal/brain/our_brain = human_user.get_organ_by_type(/obj/item/organ/internal/brain)
+ var/obj/item/organ/brain/our_brain = human_user.get_organ_by_type(/obj/item/organ/brain)
user.visible_message(span_suicide("[user] stuffs [src] up [user.p_their()] nose and presses the 'extend' button! It looks like [user.p_theyre()] trying to clear [user.p_their()] mind."))
if(active)
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index 9a1b8bed101f0..7ea8a663caf56 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -95,7 +95,7 @@
*/
/obj/item/melee/sabre/proc/attempt_bane(element_owner, mob/living/carbon/criminal)
SIGNAL_HANDLER
- var/obj/item/organ/internal/liver/liver = criminal.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = criminal.get_organ_slot(ORGAN_SLOT_LIVER)
if(isnull(liver) || !HAS_TRAIT(liver, TRAIT_MAINTENANCE_METABOLISM))
return COMPONENT_CANCEL_BANING
diff --git a/code/game/objects/items/rcd/RTD.dm b/code/game/objects/items/rcd/RTD.dm
index 1925b3e6ffc66..d26876ef32026 100644
--- a/code/game/objects/items/rcd/RTD.dm
+++ b/code/game/objects/items/rcd/RTD.dm
@@ -38,7 +38,7 @@
var/datum/tile_info/tile_design
/// overlays on a tile
var/list/design_overlays = list()
-
+ var/ranged = TRUE
/// stores the name, type, icon & cost for each tile type
/datum/tile_info
/// name of this tile design for ui
@@ -150,7 +150,7 @@
QDEL_NULL(selected_design)
QDEL_NULL(tile_design)
QDEL_LIST(design_overlays)
- . = ..()
+ return ..()
/obj/item/construction/rtd/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
@@ -211,19 +211,19 @@
if("set_dir")
var/direction = text2dir(params["dir"])
if(!direction)
- return TRUE
+ return FALSE
selected_design.set_direction(direction)
if("recipe")
var/list/main_root = floor_designs[root_category]
if(main_root == null)
- return TRUE
+ return FALSE
var/list/sub_category = main_root[params["category_name"]]
if(sub_category == null)
- return TRUE
+ return FALSE
var/list/target_design = sub_category[text2num(params["id"])]
if(target_design == null)
- return
+ return FALSE
QDEL_LIST(design_overlays)
design_category = params["category_name"]
@@ -233,7 +233,7 @@
return TRUE
/obj/item/construction/rtd/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
- if(!range_check(interacting_with, user))
+ if(!ranged || !range_check(interacting_with, user))
return NONE
return try_tiling(interacting_with, user)
@@ -244,14 +244,23 @@
return try_tiling(interacting_with, user)
-/obj/item/construction/rtd/proc/try_tiling(atom/interacting_with, mob/living/user)
- var/turf/open/floor/floor = interacting_with
+/**
+ * put plating on the turf
+ * Arguments
+ *
+ * * turf/open/floor/floor - the turf we are trying to put plating on
+ * * mob/living/user - the mob trying to do the plating
+ */
+/obj/item/construction/rtd/proc/try_tiling(turf/open/floor/floor, mob/living/user)
+ PROTECTED_PROC(TRUE)
+
if(!istype(floor))
return NONE
var/floor_designs = GLOB.floor_designs
if(!istype(floor, /turf/open/floor/plating)) //we infer what floor type it is if its not the usual plating
- user.Beam(floor, icon_state = "light_beam", time = 5)
+ if(ranged)
+ user.Beam(floor, icon_state = "light_beam", time = 5)
for(var/main_root in floor_designs)
for(var/sub_category in floor_designs[main_root])
for(var/list/design_info in floor_designs[main_root][sub_category])
@@ -282,15 +291,17 @@
balloon_alert(user, "design not supported!")
return ITEM_INTERACT_BLOCKING
- var/delay = CONSTRUCTION_TIME(selected_design.cost)
- var/obj/effect/constructing_effect/rcd_effect = new(floor, delay, RCD_TURF)
-
//resource sanity check before & after delay along with special effects
if(!checkResource(selected_design.cost, user))
- qdel(rcd_effect)
return ITEM_INTERACT_BLOCKING
- var/beam = user.Beam(floor, icon_state = "light_beam", time = delay)
- playsound(loc, 'sound/effects/light_flicker.ogg', 50, FALSE)
+ var/delay = CONSTRUCTION_TIME(selected_design.cost)
+ var/obj/effect/constructing_effect/rcd_effect = new(floor, delay, RCD_TURF)
+ var/beam
+ if(ranged)
+ beam = user.Beam(floor, icon_state = "light_beam", time = delay)
+ playsound(loc, 'sound/effects/light_flicker.ogg', 50, FALSE)
+ else
+ playsound(loc, 'sound/machines/click.ogg', 50, TRUE)
if(!build_delay(user, delay, target = floor))
qdel(beam)
qdel(rcd_effect)
@@ -299,6 +310,7 @@
qdel(rcd_effect)
return ITEM_INTERACT_BLOCKING
+ //do the tilling
if(!useResource(selected_design.cost, user))
qdel(rcd_effect)
return ITEM_INTERACT_BLOCKING
@@ -308,7 +320,7 @@
if(QDELETED(final_tile)) //if you were standing on a stack of tiles this newly spawned tile could get merged with it cause its spawned on your location
qdel(rcd_effect)
balloon_alert(user, "tile got merged with the stack beneath you!")
- return ITEM_INTERACT_SUCCESS
+ return ITEM_INTERACT_BLOCKING
//step 2 lay tile
var/turf/open/new_turf = final_tile.place_tile(floor, user)
if(new_turf) //apply infered overlays
@@ -319,7 +331,7 @@
return ITEM_INTERACT_SUCCESS
/obj/item/construction/rtd/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers)
- if(!range_check(interacting_with, user))
+ if(!ranged || !range_check(interacting_with, user))
return NONE
return interact_with_atom_secondary(interacting_with, user, modifiers)
@@ -351,15 +363,17 @@
balloon_alert(user, "can't deconstruct this type!")
return ITEM_INTERACT_BLOCKING
- var/delay = DECONSTRUCTION_TIME(cost)
- var/obj/effect/constructing_effect/rcd_effect = new(floor, delay, RCD_DECONSTRUCT)
-
//resource sanity check before & after delay along with beam effects
if(!checkResource(cost * 0.7, user)) //no ballon alert for checkResource as it already spans an alert to chat
- qdel(rcd_effect)
return ITEM_INTERACT_BLOCKING
- var/beam = user.Beam(floor, icon_state = "light_beam", time = delay)
- playsound(loc, 'sound/effects/light_flicker.ogg', 50, FALSE)
+ var/delay = DECONSTRUCTION_TIME(cost)
+ var/obj/effect/constructing_effect/rcd_effect = new(floor, delay, RCD_DECONSTRUCT)
+ var/beam
+ if(ranged)
+ beam = user.Beam(floor, icon_state = "light_beam", time = delay)
+ playsound(loc, 'sound/effects/light_flicker.ogg', 50, FALSE)
+ else
+ playsound(loc, 'sound/machines/click.ogg', 50, TRUE)
if(!do_after(user, delay, target = floor))
qdel(beam)
qdel(rcd_effect)
@@ -368,7 +382,7 @@
qdel(rcd_effect)
return ITEM_INTERACT_BLOCKING
- //do the tiling
+ //begin deconstruction
if(!useResource(cost * 0.7, user))
qdel(rcd_effect)
return ITEM_INTERACT_BLOCKING
@@ -389,6 +403,49 @@
return ITEM_INTERACT_SUCCESS
+///Converting tile cost into joules
+#define RTD_BORG_ENERGY_FACTOR (0.03 * STANDARD_CELL_CHARGE)
+
+/obj/item/construction/rtd/borg
+ ranged = FALSE
+
+///Cannot deconstruct floors
+/obj/item/construction/rtd/borg/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers)
+ return NONE
+
+/obj/item/construction/rtd/borg/get_matter(mob/user)
+ if(!iscyborg(user))
+ return 0
+ var/mob/living/silicon/robot/borgy = user
+ if(!borgy.cell)
+ return 0
+ max_matter = borgy.cell.maxcharge
+ return borgy.cell.charge
+
+/obj/item/construction/rtd/borg/useResource(amount, mob/user)
+ if(!iscyborg(user))
+ return 0
+ var/mob/living/silicon/robot/borgy = user
+ if(!borgy.cell)
+ balloon_alert(user, "no cell found!")
+ return 0
+ . = borgy.cell.use(amount * RTD_BORG_ENERGY_FACTOR)
+ if(!.)
+ balloon_alert(user, "insufficient charge!")
+
+/obj/item/construction/rtd/borg/checkResource(amount, mob/user)
+ if(!iscyborg(user))
+ return 0
+ var/mob/living/silicon/robot/borgy = user
+ if(!borgy.cell)
+ balloon_alert(user, "no cell found!")
+ return 0
+ . = borgy.cell.charge >= (amount * RTD_BORG_ENERGY_FACTOR)
+ if(!.)
+ balloon_alert(user, "insufficient charge!")
+
+#undef RTD_BORG_ENERGY_FACTOR
+
/obj/item/construction/rtd/loaded
matter = 350
diff --git a/code/game/objects/items/robot/items/storage.dm b/code/game/objects/items/robot/items/storage.dm
index 3e030a9bd8f23..4d90c28de6d65 100644
--- a/code/game/objects/items/robot/items/storage.dm
+++ b/code/game/objects/items/robot/items/storage.dm
@@ -195,6 +195,7 @@
/obj/item/reagent_containers/condiment,
/obj/item/reagent_containers/cup/coffeepot,
/obj/item/reagent_containers/cup/bottle/syrup_bottle,
+ /obj/item/reagent_containers/cup/beaker,
)
/obj/item/borg/apparatus/beaker/service2/add_glass()
@@ -320,7 +321,7 @@
/obj/item/borg/apparatus/service
name = "service apparatus"
- desc = "A special apparatus for carrying food, bowls, plates, oven trays, soup pots and paper."
+ desc = "A special apparatus for carrying food, seeds, grafts, bowls, plates, oven trays, soup pots and paper."
icon_state = "borg_service_apparatus"
storable = list(
/obj/item/food,
@@ -329,6 +330,9 @@
/obj/item/plate/oven_tray,
/obj/item/reagent_containers/cup/bowl,
/obj/item/reagent_containers/cup/soup_pot,
+ /obj/item/seeds,
+ /obj/item/graft,
+ /obj/item/fish,
)
/obj/item/borg/apparatus/service/Initialize(mapload)
diff --git a/code/game/objects/items/robot/items/tools.dm b/code/game/objects/items/robot/items/tools.dm
index beaca11b695b9..708563cb751d5 100644
--- a/code/game/objects/items/robot/items/tools.dm
+++ b/code/game/objects/items/robot/items/tools.dm
@@ -233,29 +233,24 @@
/obj/item/borg/cyborg_omnitool/attack_self(mob/user)
//build the radial menu options
var/list/radial_menu_options = list()
- for(var/obj/item/tool as anything in omni_toolkit)
- radial_menu_options[initial(tool.tool_behaviour)] = image(icon = initial(tool.icon), icon_state = initial(tool.icon_state))
+ for(var/obj/item as anything in omni_toolkit)
+ radial_menu_options[initial(item.name)] = image(icon = initial(item.icon), icon_state = initial(item.icon_state))
//assign the new tool behaviour
- var/new_tool_behaviour = show_radial_menu(user, src, radial_menu_options, require_near = TRUE, tooltips = TRUE)
- if(isnull(new_tool_behaviour) || new_tool_behaviour == tool_behaviour)
- return
- tool_behaviour = new_tool_behaviour
+ var/toolkit_menu = show_radial_menu(user, src, radial_menu_options, require_near = TRUE, tooltips = TRUE)
//set the reference & update icons
for(var/obj/item/tool as anything in omni_toolkit)
- if(initial(tool.tool_behaviour) == new_tool_behaviour)
+ if(initial(tool.name) == toolkit_menu)
reference = tool
+ tool_behaviour = initial(tool.tool_behaviour)
update_appearance(UPDATE_ICON_STATE)
playsound(src, 'sound/items/tools/change_jaws.ogg', 50, TRUE)
break
/obj/item/borg/cyborg_omnitool/update_icon_state()
- icon_state = initial(icon_state)
-
- if (tool_behaviour)
- icon_state += "_[sanitize_css_class_name(tool_behaviour)]"
-
+ if (reference)
+ icon_state = reference.icon_state
return ..()
/**
@@ -307,5 +302,19 @@
. += "Its multitool buffer contains [tool.buffer]"
break
+/obj/item/borg/cyborg_omnitool/botany
+ name = "botanical omni-toolset"
+ desc = "A set of botanical tools used by cyborgs to do gardening."
+ icon = 'icons/obj/items_cyborg.dmi'
+ icon_state = "sili"
+
+ omni_toolkit = list(
+ /obj/item/secateurs/cyborg,
+ /obj/item/cultivator/cyborg,
+ /obj/item/hatchet/cyborg,
+ /obj/item/shovel/spade/cyborg,
+ )
+
+
#undef PKBORG_DAMPEN_CYCLE_DELAY
#undef POWER_RECHARGE_CYBORG_DRAIN_MULTIPLIER
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index ce350ecb788f8..24b8fc7f73df2 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -239,7 +239,7 @@
else if(istype(W, /obj/item/bodypart/head/robot))
var/obj/item/bodypart/head/robot/HD = W
- if(locate(/obj/item/organ/internal) in HD)
+ if(locate(/obj/item/organ) in HD)
to_chat(user, span_warning("There are organs inside [HD]!"))
return
if(head)
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 96bae7452ac02..3e5cc1eb8d560 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -809,6 +809,17 @@
items_to_add = list(/obj/item/borg/cookbook)
+/obj/item/borg/upgrade/botany_upgrade
+ name = "Service Cyborg Botany Tools"
+ desc = "An upgrade to the service model cyborg, that let them do gardening and plant processing."
+ icon_state = "module_service"
+ require_model = TRUE
+ model_type = list(/obj/item/robot_model/service)
+ model_flags = BORG_MODEL_SERVICE
+
+ items_to_add = list(/obj/item/storage/bag/plants/cyborg, /obj/item/borg/cyborg_omnitool/botany, /obj/item/plant_analyzer)
+
+
///This isn't an upgrade or part of the same path, but I'm gonna just stick it here because it's a tool used on cyborgs.
//A reusable tool that can bring borgs back to life. They gotta be repaired first, though.
/obj/item/borg_restart_board
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 8d8b38c039294..d3d3e51490363 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -26,8 +26,6 @@
var/list/tile_reskin_types
/// Cached associative lazy list to hold the radial options for tile dirs. See tile_reskinning.dm for more information.
var/list/tile_rotate_dirs
- /// Allows us to replace the plating we are attacking if our baseturfs are the same.
- var/replace_plating = FALSE
/obj/item/stack/tile/Initialize(mapload, new_amount, merge = TRUE, list/mat_override=null, mat_amt=1)
. = ..()
@@ -78,25 +76,9 @@
if(!istype(target_plating))
return
- if(!replace_plating)
- if(!use(1))
- return
- target_plating = target_plating.place_on_top(placed_turf_path, flags = CHANGETURF_INHERIT_AIR)
- target_plating.setDir(turf_dir)
- playsound(target_plating, 'sound/items/weapons/genhit.ogg', 50, TRUE)
- return target_plating // Most executions should end here.
-
- // If we and the target tile share the same initial baseturf and they consent, replace em.
- if(!target_plating.allow_replacement || initial(target_plating.baseturfs) != initial(placed_turf_path.baseturfs))
- to_chat(user, span_notice("You cannot place this tile here directly!"))
- return
- to_chat(user, span_notice("You begin replacing the floor with the tile..."))
- if(!istype(target_plating))
- return
if(!use(1))
return
-
- target_plating = target_plating.ChangeTurf(placed_turf_path, target_plating.baseturfs, CHANGETURF_INHERIT_AIR)
+ target_plating = target_plating.place_on_top(placed_turf_path, flags = CHANGETURF_INHERIT_AIR)
target_plating.setDir(turf_dir)
playsound(target_plating, 'sound/items/weapons/genhit.ogg', 50, TRUE)
return target_plating
@@ -1153,6 +1135,7 @@
desc = "The ground you walk on."
throwforce = 10
icon_state = "material_tile"
+ inhand_icon_state = "tile"
turf_type = /turf/open/floor/material
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
merge_type = /obj/item/stack/tile/material
@@ -1312,7 +1295,6 @@
inhand_icon_state = "tile-glass"
merge_type = /obj/item/stack/tile/glass
mats_per_unit = list(/datum/material/glass=SHEET_MATERIAL_AMOUNT * 0.25) // 4 tiles per sheet
- replace_plating = TRUE
/obj/item/stack/tile/glass/sixty
amount = 60
@@ -1326,7 +1308,6 @@
turf_type = /turf/open/floor/glass/reinforced
merge_type = /obj/item/stack/tile/rglass
mats_per_unit = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 0.125, /datum/material/glass=SHEET_MATERIAL_AMOUNT * 0.25) // 4 tiles per sheet
- replace_plating = TRUE
/obj/item/stack/tile/rglass/sixty
amount = 60
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index 52c4d13def241..1de9b7731ff55 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -23,6 +23,10 @@
resistance_flags = NONE
max_integrity = 300
storage_type = /datum/storage/backpack
+ pickup_sound = 'sound/items/handling/backpack/backpack_pickup1.ogg'
+ drop_sound = 'sound/items/handling/backpack/backpack_drop1.ogg'
+ equip_sound = 'sound/items/equip/backpack_equip.ogg'
+ sound_vary = TRUE
/obj/item/storage/backpack/Initialize(mapload)
. = ..()
@@ -59,6 +63,8 @@
item_flags = NO_MAT_REDEMPTION
armor_type = /datum/armor/backpack_holding
storage_type = /datum/storage/bag_of_holding
+ pickup_sound = null
+ drop_sound = null
/datum/armor/backpack_holding
fire = 60
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index 864078c4b0839..3235a0e7c053b 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -278,6 +278,9 @@
seedify(plant, 1)
return CLICK_ACTION_SUCCESS
+/obj/item/storage/bag/plants/cyborg
+ name = "cyborg plant bag"
+
// -----------------------------
// Sheet Snatcher
// -----------------------------
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 87aa1015a4e07..3964ccf6f80ba 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -432,7 +432,7 @@
/obj/item/lighter,
/obj/item/mining_scanner,
/obj/item/multitool,
- /obj/item/organ/internal/monster_core,
+ /obj/item/organ/monster_core,
/obj/item/pickaxe,
/obj/item/radio,
/obj/item/reagent_containers/cup/glass,
@@ -476,7 +476,7 @@
for(var/i in 1 to 2)
new /obj/item/reagent_containers/hypospray/medipen/survival(src)
for(var/i in 1 to 2)
- var/obj/item/organ/internal/monster_core/core = new /obj/item/organ/internal/monster_core/regenerative_core/legion(src)
+ var/obj/item/organ/monster_core/core = new /obj/item/organ/monster_core/regenerative_core/legion(src)
core.preserve()
/obj/item/storage/belt/mining/primitive
diff --git a/code/game/objects/items/storage/boxes/flat_boxes.dm b/code/game/objects/items/storage/boxes/flat_boxes.dm
new file mode 100644
index 0000000000000..b9544c0e548ca
--- /dev/null
+++ b/code/game/objects/items/storage/boxes/flat_boxes.dm
@@ -0,0 +1,22 @@
+/obj/item/storage/box/flat
+ name = "flat box"
+ desc = "A cardboard box folded in a manner that is optimal for concealment, rather than for stowing your belongings."
+ icon_state = "flat"
+ illustration = null
+
+/obj/item/storage/box/flat/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE, INVISIBILITY_OBSERVER, use_anchor = TRUE, tilt_tile = TRUE)
+ atom_storage.max_slots = 3
+
+/obj/item/storage/box/proc/flatten_box()
+ if(istype(loc, /obj/item/storage) || type != /obj/item/storage/box || contents.len)
+ return
+
+ var/obj/flat_box = new /obj/item/storage/box/flat(drop_location())
+ playsound(src, 'sound/items/handling/materials/cardboard_drop.ogg', 50, TRUE)
+
+ flat_box.pixel_x = pixel_x
+ flat_box.pixel_y = pixel_y
+
+ qdel(src)
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index b622a761c422e..632fb39a47b2e 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -192,11 +192,11 @@
else
return ..()
-/obj/item/toy/balloon/bullet_act(obj/projectile/P)
- if((istype(P,/obj/projectile/bullet/p50) || istype(P,/obj/projectile/bullet/foam_dart)) && ismonkey(P.firer))
+/obj/item/toy/balloon/bullet_act(obj/projectile/proj)
+ if((istype(proj, /obj/projectile/bullet/p50) || istype(proj,/obj/projectile/bullet/foam_dart)) && ismonkey(proj.firer))
pop_balloon(monkey_pop = TRUE)
- else
- return ..()
+ return BULLET_ACT_HIT
+ return ..()
/obj/item/toy/balloon/proc/pop_balloon(monkey_pop = FALSE)
playsound(src, 'sound/effects/cartoon_sfx/cartoon_pop.ogg', 50, vary = TRUE)
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index 65a0dc0e76afb..fa3aadbae95cf 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -514,7 +514,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
return OXYLOSS
/obj/item/bambostaff
- name = "Bamboo Staff"
+ name = "bamboo staff"
desc = "A long bamboo-made staff with steel-capped ends. It is rumoured that initiates of Spider Clan train with such before getting to learn how to use a katana."
force = 10
block_chance = 45
@@ -534,6 +534,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/obj/item/bambostaff/Initialize(mapload)
. = ..()
+ // there are too many puns to choose from. ('Bo' is the 'real' name for this kind of weapon.)
+ name = pick("bamboo staff", "bambo staff", "bam-Bo staff", "bam boo staff", "bam-boo staff", "bam Bo", "bambo", "bam-Bo", "bamboo-Bo")
AddComponent(/datum/component/two_handed, \
force_unwielded = 10, \
force_wielded = 14, \
diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm
index 748af49a69489..77f670bf9fc92 100644
--- a/code/game/objects/obj_defense.dm
+++ b/code/game/objects/obj_defense.dm
@@ -28,7 +28,6 @@
if(. != BULLET_ACT_HIT)
return .
- playsound(src, hitting_projectile.hitsound, 50, TRUE)
var/damage_sustained = 0
if(!QDELETED(src)) //Bullet on_hit effect might have already destroyed this object
damage_sustained = take_damage(
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index c51adf91b3b10..7c8173fae3653 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -121,12 +121,12 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag)
SEND_SIGNAL(src, COMSIG_ATOM_UI_INTERACT, user)
ui_interact(user)
-/obj/singularity_pull(S, current_size)
+/obj/singularity_pull(atom/singularity, current_size)
..()
if(move_resist == INFINITY)
return
if(!anchored || current_size >= STAGE_FIVE)
- step_towards(src,S)
+ step_towards(src, singularity)
/obj/get_dumping_location()
return get_turf(src)
diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm
index 120b91a40ffbc..e6dad759c83ed 100644
--- a/code/game/objects/structures/aliens.dm
+++ b/code/game/objects/structures/aliens.dm
@@ -385,7 +385,7 @@
. = ..()
if(.)
return
- if(user.get_organ_by_type(/obj/item/organ/internal/alien/plasmavessel))
+ if(user.get_organ_by_type(/obj/item/organ/alien/plasmavessel))
switch(status)
if(BURSTING)
to_chat(user, span_notice("The child is hatching out."))
@@ -457,7 +457,7 @@
return
var/mob/living/carbon/C = AM
- if(C.stat == CONSCIOUS && C.get_organ_by_type(/obj/item/organ/internal/body_egg/alien_embryo))
+ if(C.stat == CONSCIOUS && C.get_organ_by_type(/obj/item/organ/body_egg/alien_embryo))
return
Burst(kill=FALSE)
diff --git a/code/game/objects/structures/beds_chairs/alien_nest.dm b/code/game/objects/structures/beds_chairs/alien_nest.dm
index 131e08808fbdb..3a6d6d3ee4a81 100644
--- a/code/game/objects/structures/beds_chairs/alien_nest.dm
+++ b/code/game/objects/structures/beds_chairs/alien_nest.dm
@@ -26,7 +26,7 @@
if(!length(buckled_mobs))
return
- if(hero.get_organ_by_type(/obj/item/organ/internal/alien/plasmavessel))
+ if(hero.get_organ_by_type(/obj/item/organ/alien/plasmavessel))
unbuckle_mob(captive)
add_fingerprint(hero)
return
@@ -59,9 +59,9 @@
if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.incapacitated || M.buckled )
return
- if(M.get_organ_by_type(/obj/item/organ/internal/alien/plasmavessel))
+ if(M.get_organ_by_type(/obj/item/organ/alien/plasmavessel))
return
- if(!user.get_organ_by_type(/obj/item/organ/internal/alien/plasmavessel))
+ if(!user.get_organ_by_type(/obj/item/organ/alien/plasmavessel))
return
if(has_buckled_mobs())
diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm
index 41291cbf146f0..50d06bafef0fd 100644
--- a/code/game/objects/structures/beds_chairs/chair.dm
+++ b/code/game/objects/structures/beds_chairs/chair.dm
@@ -227,6 +227,7 @@
fishing_modifier = -12
/obj/structure/chair/office
+ name = "office chair"
anchored = FALSE
buildstackamount = 5
item_chair = null
@@ -247,6 +248,7 @@
fishing_modifier = -10
/obj/structure/chair/office/light
+ name = "office chair"
icon_state = "officechair_white"
//Stool
diff --git a/code/game/objects/structures/beds_chairs/sofa.dm b/code/game/objects/structures/beds_chairs/sofa.dm
index fd3b1384b182d..7ff735750481d 100644
--- a/code/game/objects/structures/beds_chairs/sofa.dm
+++ b/code/game/objects/structures/beds_chairs/sofa.dm
@@ -74,6 +74,7 @@ COLORED_SOFA(/obj/structure/chair/sofa, maroon, SOFA_MAROON)
icon_state = "bench_middle"
greyscale_config = /datum/greyscale_config/bench_middle
greyscale_colors = "#af7d28"
+ has_armrest = FALSE
/obj/structure/chair/sofa/bench/left
icon_state = "bench_left"
@@ -101,6 +102,7 @@ COLORED_SOFA(/obj/structure/chair/sofa, maroon, SOFA_MAROON)
max_integrity = 60
buildstacktype = /obj/item/stack/sheet/mineral/bamboo
buildstackamount = 3
+ has_armrest = FALSE
/obj/structure/chair/sofa/bamboo/left
icon_state = "bamboo_sofaend_left"
diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
index 19eb438876483..256de9d111cac 100644
--- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
+++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
@@ -31,6 +31,14 @@
/// If the speed multiplier should be applied to mobs inside this box
var/move_delay = FALSE
+/obj/structure/closet/cardboard/Initialize(mapload)
+ . = ..()
+ RegisterSignal(src, COMSIG_SPEED_POTION_APPLIED, PROC_REF(on_speed_potioned))
+
+/obj/structure/closet/cardboard/proc/on_speed_potioned(datum/source)
+ SIGNAL_HANDLER
+ move_speed_multiplier *= 2
+
/obj/structure/closet/cardboard/relaymove(mob/living/user, direction)
if(opened || move_delay || user.incapacitated || !isturf(loc) || !has_gravity(loc))
return
diff --git a/code/game/objects/structures/gym/punching_bag.dm b/code/game/objects/structures/gym/punching_bag.dm
index bba9e4f715c2a..bea51bc1d8c6c 100644
--- a/code/game/objects/structures/gym/punching_bag.dm
+++ b/code/game/objects/structures/gym/punching_bag.dm
@@ -58,7 +58,7 @@
if (is_heavy_gravity)
stamina_exhaustion *= 1.5
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
if(istype(potential_spine))
stamina_exhaustion *= potential_spine.athletics_boost_multiplier
diff --git a/code/game/objects/structures/gym/weight_machine.dm b/code/game/objects/structures/gym/weight_machine.dm
index 352ef65ff0050..b36e35245c202 100644
--- a/code/game/objects/structures/gym/weight_machine.dm
+++ b/code/game/objects/structures/gym/weight_machine.dm
@@ -172,7 +172,7 @@
// total stamina drain of 1 workout calculated based on the workout length
var/stamina_exhaustion = FLOOR(user.maxHealth / workout_reps / WORKOUT_LENGTH, 0.1)
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
if(istype(potential_spine))
stamina_exhaustion *= potential_spine.athletics_boost_multiplier
diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm
index fb082b72456dc..f9d490a29b2e9 100644
--- a/code/game/objects/structures/icemoon/cave_entrance.dm
+++ b/code/game/objects/structures/icemoon/cave_entrance.dm
@@ -150,7 +150,7 @@ GLOBAL_LIST_INIT(ore_probability, list(
if(3)
new /obj/item/reagent_containers/cup/bottle/potion/flight(loc)
if(4)
- new /obj/item/organ/internal/heart/cursed/wizard(loc)
+ new /obj/item/organ/heart/cursed/wizard(loc)
if(5)
new /obj/item/jacobs_ladder(loc)
if(6)
diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm
index ffe4ea44a00cb..0d4c5b490b9ae 100644
--- a/code/game/objects/structures/ladders.dm
+++ b/code/game/objects/structures/ladders.dm
@@ -79,7 +79,7 @@
icon_state = "ladder[up ? 1 : 0][down ? 1 : 0]"
return ..()
-/obj/structure/ladder/singularity_pull()
+/obj/structure/ladder/singularity_pull(atom/singularity, current_size)
if (!(resistance_flags & INDESTRUCTIBLE))
visible_message(span_danger("[src] is torn to pieces by the gravitational pull!"))
qdel(src)
@@ -112,7 +112,7 @@
// Misc bonuses to the climb speed.
var/misc_multiplier = 1
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
if(istype(potential_spine))
misc_multiplier *= potential_spine.athletics_boost_multiplier
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index 0b55326130022..a0cf53487cf34 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -82,7 +82,7 @@
return TRUE
return FALSE
-/obj/structure/lattice/singularity_pull(S, current_size)
+/obj/structure/lattice/singularity_pull(atom/singularity, current_size)
if(current_size >= STAGE_FOUR)
deconstruct()
diff --git a/code/game/objects/structures/lavaland/gulag_vent.dm b/code/game/objects/structures/lavaland/gulag_vent.dm
index 8cb530e31b18a..d6e30cf1fe3cb 100644
--- a/code/game/objects/structures/lavaland/gulag_vent.dm
+++ b/code/game/objects/structures/lavaland/gulag_vent.dm
@@ -33,7 +33,7 @@
var/boulder_lift_speed = 8 SECONDS
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = living_user.get_organ_slot(ORGAN_SLOT_SPINE)
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = living_user.get_organ_slot(ORGAN_SLOT_SPINE)
if(istype(potential_spine))
boulder_lift_speed *= potential_spine.athletics_boost_multiplier
diff --git a/code/game/objects/structures/lavaland/ore_vent.dm b/code/game/objects/structures/lavaland/ore_vent.dm
index adf888a2d9c42..a6933d534689b 100644
--- a/code/game/objects/structures/lavaland/ore_vent.dm
+++ b/code/game/objects/structures/lavaland/ore_vent.dm
@@ -9,6 +9,7 @@
desc = "An ore vent, brimming with underground ore. Scan with an advanced mining scanner to start extracting ore from it."
icon = 'icons/obj/mining_zones/terrain.dmi'
icon_state = "ore_vent"
+ base_icon_state = "ore_vent"
move_resist = MOVE_FORCE_EXTREMELY_STRONG
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //This thing will take a beating.
anchored = TRUE
@@ -91,7 +92,7 @@
/obj/structure/ore_vent/Destroy()
SSore_generation.possible_vents -= src
- node = null
+ reset_drone(success = FALSE)
if(tapped)
SSore_generation.processed_vents -= src
return ..()
@@ -266,28 +267,40 @@
* Arguments:
* - force: Set to true if you want to just skip all checks and make the vent start producing boulders.
*/
-/obj/structure/ore_vent/proc/handle_wave_conclusion(force = FALSE)
+/obj/structure/ore_vent/proc/handle_wave_conclusion(datum/source, force = FALSE)
SIGNAL_HANDLER
SEND_SIGNAL(src, COMSIG_VENT_WAVE_CONCLUDED)
COOLDOWN_RESET(src, wave_cooldown)
particles = null
- if(QDELETED(node) && !force)
- visible_message(span_danger("\the [src] creaks and groans as the mining attempt fails, and the vent closes back up."))
- icon_state = initial(icon_state)
- update_appearance(UPDATE_ICON_STATE)
- node = null
- return //Bad end, try again.
- else if(!QDELETED(node) && get_turf(node) != get_turf(src) && !force)
- visible_message(span_danger("The [node] detaches from the [src], and the vent closes back up!"))
- icon_state = initial(icon_state)
- update_appearance(UPDATE_ICON_STATE)
- UnregisterSignal(node, COMSIG_MOVABLE_MOVED)
- node.pre_escape(success = FALSE)
- node = null
+ if(force)
+ initiate_wave_win()
+ return
+
+ if(QDELETED(node))
+ initiate_wave_loss(loss_message = "\the [src] creaks and groans as the mining attempt fails, and the vent closes back up.")
+ return
+
+ if(get_turf(node) != get_turf(src))
+ initiate_wave_loss(loss_message = "The [node] detaches from the [src], and the vent closes back up!")
return //Start over!
+ initiate_wave_win()
+
+/**
+ * Handles reseting our ore vent to its original state so we can start over
+ */
+/obj/structure/ore_vent/proc/initiate_wave_loss(loss_message)
+ visible_message(span_danger(loss_message))
+ icon_state = base_icon_state
+ update_appearance(UPDATE_ICON_STATE)
+ reset_drone(success = FALSE)
+
+/**
+ * Handles winning the event, gives everyone a payout and start boulder production
+ */
+/obj/structure/ore_vent/proc/initiate_wave_win()
tapped = TRUE //The Node Drone has survived the wave defense, and the ore vent is tapped.
SSore_generation.processed_vents += src
log_game("Ore vent [key_name_and_tag(src)] was tapped")
@@ -296,7 +309,6 @@
icon_state = icon_state_tapped
update_appearance(UPDATE_ICON_STATE)
qdel(GetComponent(/datum/component/gps))
- UnregisterSignal(node, COMSIG_QDELETING)
for(var/mob/living/miner in range(7, src)) //Give the miners who are near the vent points and xp.
var/obj/item/card/id/user_id_card = miner.get_idcard(TRUE)
@@ -308,10 +320,18 @@
if(user_id_card.registered_account)
user_id_card.registered_account.mining_points += point_reward_val
user_id_card.registered_account.bank_card_talk("You have been awarded [point_reward_val] mining points for your efforts.")
- node?.pre_escape() //Visually show the drone is done and flies away.
- node = null
+ reset_drone(success = TRUE)
add_overlay(mutable_appearance('icons/obj/mining_zones/terrain.dmi', "well", ABOVE_MOB_LAYER))
+/**
+ * Sends our node back to base and cleans up after the reference
+ */
+/obj/structure/ore_vent/proc/reset_drone(success)
+ if(!QDELETED(node))
+ node.pre_escape(success = success)
+ UnregisterSignal(node, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED))
+ node = null
+
/**
* Called when the ore vent is tapped by a scanning device.
* Gives a readout of the ores available in the vent that gets added to the description,
diff --git a/code/game/objects/structures/petrified_statue.dm b/code/game/objects/structures/petrified_statue.dm
index d27a2e8e1cd8d..895602bb017c7 100644
--- a/code/game/objects/structures/petrified_statue.dm
+++ b/code/game/objects/structures/petrified_statue.dm
@@ -77,7 +77,7 @@
petrified_mob.investigate_log("has been dusted by statue deconstruction.", INVESTIGATE_DEATHS)
if(iscarbon(petrified_mob) && brain)
var/mob/living/carbon/petrified_carbon = petrified_mob
- var/obj/item/organ/internal/brain/carbon_brain = petrified_carbon.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/carbon_brain = petrified_carbon.get_organ_slot(ORGAN_SLOT_BRAIN)
carbon_brain.Remove(petrified_carbon)
carbon_brain.forceMove(get_turf(src))
carbon_brain.name = "petrified [carbon_brain.name]"
diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm
index a5ed048153c41..c4496e6661024 100644
--- a/code/game/objects/structures/plasticflaps.dm
+++ b/code/game/objects/structures/plasticflaps.dm
@@ -63,7 +63,7 @@
///Update the flaps behaviour to gases, if not anchored will let air pass through
/obj/structure/plasticflaps/proc/update_atmos_behaviour()
- can_atmos_pass = anchored ? ATMOS_PASS_YES : ATMOS_PASS_NO
+ can_atmos_pass = anchored ? ATMOS_PASS_NO : ATMOS_PASS_YES
/obj/structure/plasticflaps/wirecutter_act(mob/living/user, obj/item/W)
. = ..()
diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm
index 5cd3f58df0530..532ecebde0e5e 100644
--- a/code/game/objects/structures/reflector.dm
+++ b/code/game/objects/structures/reflector.dm
@@ -63,20 +63,20 @@
/obj/structure/reflector/setDir(new_dir)
return ..(NORTH)
-/obj/structure/reflector/bullet_act(obj/projectile/P)
- var/pdir = P.dir
- var/pangle = P.Angle
- var/ploc = get_turf(P)
- if(!finished || !allowed_projectile_typecache[P.type] || !(P.dir in GLOB.cardinals))
+/obj/structure/reflector/bullet_act(obj/projectile/proj)
+ var/pdir = proj.dir
+ var/pangle = proj.angle
+ var/ploc = get_turf(proj)
+ if(!finished || !allowed_projectile_typecache[proj.type] || !(proj.dir in GLOB.cardinals))
return ..()
- if(auto_reflect(P, pdir, ploc, pangle) != BULLET_ACT_FORCE_PIERCE)
+ if(auto_reflect(proj, pdir, ploc, pangle) != BULLET_ACT_FORCE_PIERCE)
return ..()
return BULLET_ACT_FORCE_PIERCE
-/obj/structure/reflector/proc/auto_reflect(obj/projectile/P, pdir, turf/ploc, pangle)
- P.ignore_source_check = TRUE
- P.range = P.decayedRange
- P.decayedRange = max(P.decayedRange--, 0)
+/obj/structure/reflector/proc/auto_reflect(obj/projectile/proj, pdir, turf/ploc, pangle)
+ proj.ignore_source_check = TRUE
+ proj.range = proj.decayedRange
+ proj.decayedRange = max(proj.decayedRange--, 0)
return BULLET_ACT_FORCE_PIERCE
/obj/structure/reflector/tool_act(mob/living/user, obj/item/tool, list/modifiers)
@@ -191,12 +191,12 @@
admin = TRUE
anchored = TRUE
-/obj/structure/reflector/single/auto_reflect(obj/projectile/P, pdir, turf/ploc, pangle)
- var/incidence = GET_ANGLE_OF_INCIDENCE(rotation_angle, (P.Angle + 180))
+/obj/structure/reflector/single/auto_reflect(obj/projectile/proj, pdir, turf/ploc, pangle)
+ var/incidence = GET_ANGLE_OF_INCIDENCE(rotation_angle, (proj.angle + 180))
if(abs(incidence) > 90 && abs(incidence) < 270)
return FALSE
var/new_angle = SIMPLIFY_DEGREES(rotation_angle + incidence)
- P.set_angle_centered(new_angle)
+ proj.set_angle_centered(new_angle)
return ..()
//DOUBLE
@@ -217,10 +217,10 @@
admin = TRUE
anchored = TRUE
-/obj/structure/reflector/double/auto_reflect(obj/projectile/P, pdir, turf/ploc, pangle)
- var/incidence = GET_ANGLE_OF_INCIDENCE(rotation_angle, (P.Angle + 180))
+/obj/structure/reflector/double/auto_reflect(obj/projectile/proj, pdir, turf/ploc, pangle)
+ var/incidence = GET_ANGLE_OF_INCIDENCE(rotation_angle, (proj.angle + 180))
var/new_angle = SIMPLIFY_DEGREES(rotation_angle + incidence)
- P.set_angle_centered(new_angle)
+ proj.set_angle_centered(new_angle)
return ..()
//BOX
diff --git a/code/game/objects/structures/signs/sign_eyechart.dm b/code/game/objects/structures/signs/sign_eyechart.dm
new file mode 100644
index 0000000000000..de0db7d0074a1
--- /dev/null
+++ b/code/game/objects/structures/signs/sign_eyechart.dm
@@ -0,0 +1,59 @@
+/obj/structure/sign/eyechart
+ icon_state = "eyechart"
+ name = "eye chart"
+ desc = "A poster with a series of colored bars and letters of different sizes, \
+ used to test color vision and blindness - I mean, visual acuity."
+ is_editable = TRUE
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/eyechart, 32)
+
+/obj/structure/sign/eyechart/examine(mob/user)
+ . = ..()
+ if(isobserver(user))
+ return
+
+ if(!user.can_read(src, READING_CHECK_LITERACY, silent = TRUE) || !user.has_language(/datum/language/common, UNDERSTOOD_LANGUAGE))
+ if(!user.is_blind())
+ . += "
You gaze at the wall of symbols, trying to make sense of them..."
+ . += span_warning("...But you don't actually know what any of them mean.")
+ return
+
+ if(user.is_blind())
+ . += "
You feel the poster."
+ . += span_notice("Yes, feels like... \"E, P, D...\" Good thing this chart has braille!")
+ return
+
+ if(!user.can_read(src, READING_CHECK_LIGHT, silent = TRUE))
+ . += "
You squint at the chart."
+ . += span_warning("...But it's too dark to make out anything.")
+ return
+
+ var/colorblind = FALSE
+ if(iscarbon(user))
+ var/mob/living/carbon/carbon_user = user
+ colorblind = !!carbon_user.has_trauma_type(/datum/brain_trauma/mild/color_blindness)
+ else if(isdog(user) || iscat(user))
+ colorblind = TRUE // i know these pets are not colorblind in the conventional sense, but it's an easter egg, ok?
+
+ var/obj/item/organ/eyes/eye = user.get_organ_slot(ORGAN_SLOT_EYES)
+ // eye null checks here are for mobs without eyes.
+ // humans missing eyes will be caught by the is_blind check above.
+ var/eye_goodness = isnull(eye) ? 0 : eye.damage
+ var/little_bad = isnull(eye) ? 20 : eye.low_threshold
+ var/very_bad = isnull(eye) ? 30 : eye.high_threshold
+
+ if(user.has_status_effect(/datum/status_effect/eye_blur))
+ eye_goodness = max(eye_goodness, very_bad + 1)
+ if(user.is_nearsighted_currently())
+ eye_goodness = max(eye_goodness, little_bad + 1)
+ eye_goodness += ((get_dist(user, src) - 2) * 5) // add a modifier based on distance, so closer = "better", further = "worse"
+
+ . += "
You read through the chart, for old time's sake."
+ if(eye_goodness <= 0)
+ . += span_notice("\"E, F, P...\" Yep, you can read down to the [colorblind ? "brown - wait, isn't it supposed to be red? -" : "red"] line.")
+ else if(eye_goodness < little_bad)
+ . += span_notice("\"E, F, P...\" You can make out most of the letters, but it gets a bit difficult past the [colorblind ? "grey - wait, isn't it supposed to be green? -" : "green"] line.")
+ else if(eye_goodness < very_bad)
+ . += span_warning("\"E, F, P..?\" You can make out the big letters, but the smaller ones are a bit of a blur.")
+ else
+ . += span_warning("\"E, P, D..?\" You can hardly make out the big letters, let alone the smaller ones.")
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index ac7282f9386b6..c57ce3bcecfbf 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -288,7 +288,7 @@
tableplace_delay = 2.75 SECONDS
skills_space = " quickly"
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
if(istype(potential_spine))
tableplace_delay *= potential_spine.athletics_boost_multiplier
diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm
index e0852b0fd39c2..5518375de6801 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube.dm
@@ -27,7 +27,7 @@
P.deconstruct(FALSE)
return ..()
-/obj/structure/transit_tube/singularity_pull(S, current_size)
+/obj/structure/transit_tube/singularity_pull(atom/singularity, current_size)
..()
if(current_size >= STAGE_FIVE)
deconstruct(FALSE)
diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
index 6522a2125fea3..a35915d6f007b 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
@@ -63,7 +63,7 @@
if(EXPLODE_LIGHT)
SSexplosions.low_mov_atom += contents
-/obj/structure/transit_tube_pod/singularity_pull(S, current_size)
+/obj/structure/transit_tube_pod/singularity_pull(atom/singularity, current_size)
..()
if(current_size >= STAGE_FIVE)
deconstruct(FALSE)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 032b86721b0bb..b3a3ea310386a 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -37,6 +37,8 @@
var/datum/material/glass_material_datum = /datum/material/glass
/// Whether or not we're disappearing but dramatically
var/dramatically_disappearing = FALSE
+ /// If we added a leaning component to ourselves
+ var/added_leaning = FALSE
/datum/armor/structure_window
melee = 50
@@ -78,6 +80,15 @@
if (flags_1 & ON_BORDER_1)
AddElement(/datum/element/connect_loc, loc_connections)
+/obj/structure/window/mouse_drop_receive(atom/dropping, mob/user, params)
+ . = ..()
+ if (added_leaning || (flags_1 & ON_BORDER_1))
+ return
+ /// For performance reasons and to cut down on init times we are "lazy-loading" the leaning component when someone drags their sprite onto us, and then calling dragging code again to trigger the component
+ AddComponent(/datum/component/leanable, 11)
+ added_leaning = TRUE
+ dropping.base_mouse_drop_handler(src, null, null, params)
+
/obj/structure/window/examine(mob/user)
. = ..()
@@ -106,7 +117,7 @@
/obj/structure/window/narsie_act()
add_atom_colour(NARSIE_WINDOW_COLOUR, FIXED_COLOUR_PRIORITY)
-/obj/structure/window/singularity_pull(S, current_size)
+/obj/structure/window/singularity_pull(atom/singularity, current_size)
..()
if(anchored && current_size >= STAGE_TWO)
set_anchored(FALSE)
diff --git a/code/game/sound.dm b/code/game/sound.dm
index 68ace8576ea28..e4172932b4651 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -198,16 +198,17 @@
set waitfor = FALSE
UNTIL(SSticker.login_music) //wait for SSticker init to set the login music
-/* BEGIN DOPPLER EDIT - VOLUME MIXER
- if(prefs && (prefs.read_preference(/datum/preference/toggle/sound_lobby)) && !CONFIG_GET(flag/disallow_title_music))
- SEND_SOUND(src, sound(SSticker.login_music, repeat = 0, wait = 0, volume = vol, channel = CHANNEL_LOBBYMUSIC)) */
- var/volume_modifier = prefs.read_preference(/datum/preference/numeric/sound_lobby)
+ var/volume_modifier = prefs.read_preference(/datum/preference/numeric/sound_lobby_volume)
if((prefs && volume_modifier) && !CONFIG_GET(flag/disallow_title_music))
SEND_SOUND(src, sound(SSticker.login_music, repeat = 0, wait = 0, volume = volume_modifier, channel = CHANNEL_LOBBYMUSIC)) // MAD JAMS
-///END DOPPLER EDIT
+///get a random frequency.
/proc/get_rand_frequency()
- return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs.
+ return rand(32000, 55000)
+
+///get_rand_frequency but lower range.
+/proc/get_rand_frequency_low_range()
+ return rand(38000, 45000)
///Used to convert a SFX define into a .ogg so we can add some variance to sounds. If soundin is already a .ogg, we simply return it
/proc/get_sfx(soundin)
@@ -327,9 +328,9 @@
)
if(SFX_CAN_OPEN)
soundin = pick(
- 'sound/effects/can/can_open1.ogg',
- 'sound/effects/can/can_open2.ogg',
- 'sound/effects/can/can_open3.ogg',
+ 'sound/items/can/can_open1.ogg',
+ 'sound/items/can/can_open2.ogg',
+ 'sound/items/can/can_open3.ogg',
)
if(SFX_BULLET_MISS)
soundin = pick(
@@ -741,4 +742,16 @@
'sound/effects/industrial_scan/industrial_scan2.ogg',
'sound/effects/industrial_scan/industrial_scan3.ogg',
)
+ if(SFX_MALE_SIGH)
+ soundin = pick(
+ 'sound/mobs/humanoids/human/sigh/male_sigh1.ogg',
+ 'sound/mobs/humanoids/human/sigh/male_sigh2.ogg',
+ 'sound/mobs/humanoids/human/sigh/male_sigh3.ogg',
+ )
+ if(SFX_FEMALE_SIGH)
+ soundin = pick(
+ 'sound/mobs/humanoids/human/sigh/female_sigh1.ogg',
+ 'sound/mobs/humanoids/human/sigh/female_sigh2.ogg',
+ 'sound/mobs/humanoids/human/sigh/female_sigh3.ogg',
+ )
return soundin
diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm
index f1297e4a02258..c656d0ee95a42 100644
--- a/code/game/turfs/closed/walls.dm
+++ b/code/game/turfs/closed/walls.dm
@@ -1,5 +1,3 @@
-#define LEANING_OFFSET 11
-
/turf/closed/wall
name = "wall"
desc = "A huge chunk of iron used to separate rooms."
@@ -31,67 +29,11 @@
var/girder_type = /obj/structure/girder
/// A turf that will replace this turf when this turf is destroyed
var/decon_type
+ /// If we added a leaning component to ourselves
+ var/added_leaning = FALSE
var/list/dent_decals
-/turf/closed/wall/mouse_drop_receive(atom/dropping, mob/user, params)
- if(dropping != user)
- return
- if(!iscarbon(dropping) && !iscyborg(dropping))
- return
- var/mob/living/leaner = dropping
- if(INCAPACITATED_IGNORING(leaner, INCAPABLE_RESTRAINTS) || leaner.stat != CONSCIOUS || HAS_TRAIT(leaner, TRAIT_NO_TRANSFORM))
- return
- if(!leaner.density || leaner.pulledby || leaner.buckled || !(leaner.mobility_flags & MOBILITY_STAND))
- return
- if(HAS_TRAIT_FROM(leaner, TRAIT_UNDENSE, LEANING_TRAIT))
- return
- var/turf/checked_turf = get_step(leaner, REVERSE_DIR(leaner.dir))
- if(checked_turf != src)
- return
- leaner.start_leaning(src)
-
-/mob/living/proc/start_leaning(turf/closed/wall/wall)
- var/new_y = base_pixel_y + pixel_y
- var/new_x = base_pixel_x + pixel_x
- switch(dir)
- if(SOUTH)
- new_y += LEANING_OFFSET
- if(NORTH)
- new_y -= LEANING_OFFSET
- if(WEST)
- new_x += LEANING_OFFSET
- if(EAST)
- new_x -= LEANING_OFFSET
-
- animate(src, 0.2 SECONDS, pixel_x = new_x, pixel_y = new_y)
- add_traits(list(TRAIT_UNDENSE, TRAIT_EXPANDED_FOV), LEANING_TRAIT)
- visible_message(
- span_notice("[src] leans against [wall]."),
- span_notice("You lean against [wall]."),
- )
- RegisterSignals(src, list(
- COMSIG_MOB_CLIENT_PRE_MOVE,
- COMSIG_LIVING_DISARM_HIT,
- COMSIG_LIVING_GET_PULLED,
- COMSIG_MOVABLE_TELEPORTING,
- COMSIG_ATOM_DIR_CHANGE,
- ), PROC_REF(stop_leaning))
- update_fov()
-
-/mob/living/proc/stop_leaning()
- SIGNAL_HANDLER
- UnregisterSignal(src, list(
- COMSIG_MOB_CLIENT_PRE_MOVE,
- COMSIG_LIVING_DISARM_HIT,
- COMSIG_LIVING_GET_PULLED,
- COMSIG_MOVABLE_TELEPORTING,
- COMSIG_ATOM_DIR_CHANGE,
- ))
- animate(src, 0.2 SECONDS, pixel_x = base_pixel_x, pixel_y = base_pixel_y)
- remove_traits(list(TRAIT_UNDENSE, TRAIT_EXPANDED_FOV), LEANING_TRAIT)
- update_fov()
-
/turf/closed/wall/Initialize(mapload)
. = ..()
if(!can_engrave)
@@ -108,6 +50,15 @@
fixed_underlay = string_assoc_list(fixed_underlay)
underlays += underlay_appearance
+/turf/closed/wall/mouse_drop_receive(atom/dropping, mob/user, params)
+ . = ..()
+ if (added_leaning)
+ return
+ /// For performance reasons and to cut down on init times we are "lazy-loading" the leaning component when someone drags their sprite onto us, and then calling dragging code again to trigger the component
+ AddComponent(/datum/component/leanable, 11)
+ added_leaning = TRUE
+ dropping.base_mouse_drop_handler(src, null, null, params)
+
/turf/closed/wall/atom_destruction(damage_flag)
. = ..()
dismantle_wall(TRUE, FALSE)
@@ -296,7 +247,7 @@
return FALSE
-/turf/closed/wall/singularity_pull(S, current_size)
+/turf/closed/wall/singularity_pull(atom/singularity, current_size)
..()
wall_singularity_pull(current_size)
@@ -378,5 +329,3 @@
/turf/closed/wall/Exited(atom/movable/gone, direction)
. = ..()
SEND_SIGNAL(gone, COMSIG_LIVING_WALL_EXITED, src)
-
-#undef LEANING_OFFSET
diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm
index c3ea369404331..cad574eb4ec8d 100644
--- a/code/game/turfs/open/floor.dm
+++ b/code/game/turfs/open/floor.dm
@@ -175,7 +175,7 @@
return null
return new floor_tile(src)
-/turf/open/floor/singularity_pull(S, current_size)
+/turf/open/floor/singularity_pull(atom/singularity, current_size)
..()
var/sheer = FALSE
switch(current_size)
diff --git a/code/game/turfs/open/floor/glass.dm b/code/game/turfs/open/floor/glass.dm
index cece195aaf85a..93194a4bf828c 100644
--- a/code/game/turfs/open/floor/glass.dm
+++ b/code/game/turfs/open/floor/glass.dm
@@ -4,7 +4,6 @@
icon = 'icons/turf/floors/glass.dmi'
icon_state = "glass-0"
base_icon_state = "glass"
- baseturfs = /turf/baseturf_bottom
layer = GLASS_FLOOR_LAYER
underfloor_accessibility = UNDERFLOOR_VISIBLE
smoothing_flags = SMOOTH_BITMASK
@@ -15,7 +14,6 @@
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
floor_tile = /obj/item/stack/tile/glass
- overfloor_placed = FALSE
/// List of /atom/movable/render_step that are being used to make this glass floor glow
/// These are OWNED by this floor, they delete when we delete them, not before not after
var/list/glow_stuff
@@ -61,9 +59,6 @@
if(light_color == old_star)
set_light(l_color = new_star)
-/turf/open/floor/glass/make_plating()
- return
-
/turf/open/floor/glass/icemoon
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
diff --git a/code/game/turfs/open/floor/misc_floor.dm b/code/game/turfs/open/floor/misc_floor.dm
index 8f8d5fbf1b08e..9c2450e5af271 100644
--- a/code/game/turfs/open/floor/misc_floor.dm
+++ b/code/game/turfs/open/floor/misc_floor.dm
@@ -285,6 +285,17 @@
The idea of a \"rudimentary\" iron wall makes no sense at all! Is anything i'm even saying here true? Someone's gotta fact check this!"
icon_state = "stone_floor"
+/turf/open/floor/stone/icemoon
+ initial_gas_mix = ICEMOON_DEFAULT_ATMOS
+ name = "stone brick floor"
+ desc = "Odd, really, how it looks exactly like the iron walls yet is stone instead of iron. Now, if that's really more of a complaint about\
+ the ironness of walls or the stoneness of the floors, that's really up to you. But have you really ever seen iron that dull? I mean, it\
+ makes sense for the station to have dull metal walls but we're talking how a rudimentary iron wall would be. Medieval ages didn't even\
+ use iron walls, iron walls are actually not even something that exists because iron is an expensive and not-so-great thing to build walls\
+ out of. It only makes sense in the context of space because you're trying to keep a freezing vacuum out. Is anyone following me on this? \
+ The idea of a \"rudimentary\" iron wall makes no sense at all! Is anything i'm even saying here true? Someone's gotta fact check this!"
+ icon_state = "stone_floor"
+
/turf/open/floor/vault
name = "strange floor"
desc = "You feel a strange nostalgia from looking at this..."
@@ -346,6 +357,12 @@
desc = "Melted down oil can, in some cases, be used to pave road surfaces."
icon_state = "asphalt"
+/turf/open/floor/asphalt/outdoors
+ planetary_atmos = TRUE
+
/turf/open/floor/asphalt/lavaland
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
baseturfs = /turf/open/misc/asteroid/basalt
+
+/turf/open/floor/asphalt/lavaland/outdoors
+ planetary_atmos = TRUE
diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm
index 9c7cf01576178..e918cd72e8c7e 100644
--- a/code/game/turfs/open/floor/plating.dm
+++ b/code/game/turfs/open/floor/plating.dm
@@ -22,11 +22,6 @@
//Used for upgrading this into R-Plating
var/upgradable = TRUE
- /// If true, will allow tiles to replace us if the tile [wants to] [/obj/item/stack/tile/var/replace_plating].
- /// And if our baseturfs are compatible.
- /// See [/obj/item/stack/tile/proc/place_tile].
- var/allow_replacement = TRUE
-
/turf/open/floor/plating/broken_states()
return list("damaged1", "damaged2", "damaged4")
@@ -193,7 +188,6 @@
heat_capacity = INFINITY
baseturfs = /turf/open/floor/plating
- allow_replacement = FALSE
rcd_proof = TRUE
upgradable = FALSE
rust_resistance = RUST_RESISTANCE_REINFORCED
diff --git a/code/game/turfs/open/floor/reinforced_floor.dm b/code/game/turfs/open/floor/reinforced_floor.dm
index dcba9ed36673a..78b6e5a803e5a 100644
--- a/code/game/turfs/open/floor/reinforced_floor.dm
+++ b/code/game/turfs/open/floor/reinforced_floor.dm
@@ -75,7 +75,7 @@
return TRUE
-/turf/open/floor/engine/singularity_pull(S, current_size)
+/turf/open/floor/engine/singularity_pull(atom/singularity, current_size)
..()
if(current_size >= STAGE_FIVE)
if(floor_tile)
diff --git a/code/game/turfs/open/ice.dm b/code/game/turfs/open/ice.dm
index f28bc8dd4b052..39abe6ebfeef7 100644
--- a/code/game/turfs/open/ice.dm
+++ b/code/game/turfs/open/ice.dm
@@ -42,15 +42,23 @@
if(can_make_hole)
. += span_info("You could use a [EXAMINE_HINT("shovel")] or a [EXAMINE_HINT("pick")] to dig a fishing hole here.")
+/turf/open/misc/ice/attack_animal(mob/living/animal, list/modifiers)
+ . = ..()
+ if(HAS_TRAIT(animal, TRAIT_MOB_CAN_DIG))
+ dig_hole(animal)
+
/turf/open/misc/ice/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
- if(!can_make_hole)
- return NONE
if(tool.tool_behaviour != TOOL_SHOVEL && tool.tool_behaviour != TOOL_MINING)
return NONE
+ return dig_hole(user) ? ITEM_INTERACT_SUCCESS : NONE
+
+/turf/open/misc/ice/proc/dig_hole(mob/living/user)
+ if(!can_make_hole)
+ return FALSE
balloon_alert(user, "digging...")
playsound(src, 'sound/effects/shovel_dig.ogg', 50, TRUE)
if(!do_after(user, 5 SECONDS, src))
- return NONE
+ return FALSE
balloon_alert(user, "dug hole")
AddComponent(/datum/component/fishing_spot, GLOB.preset_fish_sources[/datum/fish_source/ice_fishing])
ADD_TRAIT(src, TRAIT_CATCH_AND_RELEASE, INNATE_TRAIT)
@@ -58,7 +66,7 @@
can_make_hole = FALSE
RemoveElement(/datum/element/contextual_screentip_tools, tool_screentips)
flags_1 &= ~HAS_CONTEXTUAL_SCREENTIPS_1
- return ITEM_INTERACT_SUCCESS
+ return TRUE
/turf/open/misc/ice/smooth
icon_state = "ice_turf-255"
diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm
index 1a9f24ce50ebd..fa0b0c4b12872 100644
--- a/code/game/turfs/open/lava.dm
+++ b/code/game/turfs/open/lava.dm
@@ -175,7 +175,7 @@
/turf/open/lava/singularity_act()
return
-/turf/open/lava/singularity_pull(S, current_size)
+/turf/open/lava/singularity_pull(atom/singularity, current_size)
return
/turf/open/lava/GetHeatCapacity()
diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm
index 28f7cfde8aceb..ddc322185d291 100644
--- a/code/game/turfs/open/space/space.dm
+++ b/code/game/turfs/open/space/space.dm
@@ -144,7 +144,7 @@ GLOBAL_LIST_EMPTY(starlight)
return
if(istype(C, /obj/item/stack/rods))
build_with_rods(C, user)
- else if(istype(C, /obj/item/stack/tile/iron))
+ else if(istype(C, /obj/item/stack/tile/iron) || istype(C, /obj/item/stack/tile/material) && C.has_material_type(/datum/material/iron))
build_with_floor_tiles(C, user)
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 5b39caf571faa..8b30634ac9f22 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -668,7 +668,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
clear_reagents_to_vomit_pool(vomiter, throw_up, purge_ratio)
/proc/clear_reagents_to_vomit_pool(mob/living/carbon/M, obj/effect/decal/cleanable/vomit/V, purge_ratio = 0.1)
- var/obj/item/organ/internal/stomach/belly = M.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/belly = M.get_organ_slot(ORGAN_SLOT_STOMACH)
if(!belly?.reagents.total_volume)
return
var/chemicals_lost = belly.reagents.total_volume * purge_ratio
diff --git a/code/game/world.dm b/code/game/world.dm
index 184b13be6427f..fe55b3963b504 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -397,6 +397,8 @@ GLOBAL_VAR(tracy_log)
new_status += "
Time: [time2text(STATION_TIME_PASSED(), "hh:mm", 0)]"
if(SSshuttle?.emergency && SSshuttle?.emergency?.mode != (SHUTTLE_IDLE || SHUTTLE_ENDGAME))
new_status += " | Shuttle: [SSshuttle.emergency.getModeStr()] [SSshuttle.emergency.getTimerStr()]"
+ if(SStime_track?.time_dilation_avg > 0)
+ new_status += " | Time Dilation: [round(SStime_track?.time_dilation_avg)]%"
else if(SSticker.current_state == GAME_STATE_FINISHED)
new_status += "
RESTARTING"
if(SSmapping.current_map)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 109fb57ca3aea..88093741458ad 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -34,7 +34,7 @@ ADMIN_VERB(admin_ghost, R_ADMIN, "AGhost", "Become a ghost without DNR.", ADMIN_
log_admin("[key_name(user)] admin ghosted.")
message_admins("[key_name_admin(user)] admin ghosted.")
var/mob/body = user.mob
- body.ghostize(TRUE)
+ body.ghostize(TRUE, TRUE)
user.init_verbs()
if(body && !body.key)
body.key = "@[user.key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus
diff --git a/code/modules/admin/sound_emitter.dm b/code/modules/admin/sound_emitter.dm
index c68baa32e4ea1..9f1d430a46c03 100644
--- a/code/modules/admin/sound_emitter.dm
+++ b/code/modules/admin/sound_emitter.dm
@@ -30,7 +30,7 @@
/obj/effect/sound_emitter/singularity_act()
return
-/obj/effect/sound_emitter/singularity_pull()
+/obj/effect/sound_emitter/singularity_pull(atom/singularity, current_size)
return
/obj/effect/sound_emitter/examine(mob/user)
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm
index 1305e5a660d6e..4da97d2c447bf 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm
@@ -117,6 +117,9 @@
/proc/_text2num(T)
return text2num(T)
+/proc/_trimtext(Text)
+ return trimtext(Text)
+
/proc/_ohearers(Dist, Center = usr)
return ohearers(Dist, Center)
diff --git a/code/modules/admin/verbs/adminfun.dm b/code/modules/admin/verbs/adminfun.dm
index c58d63581bd34..93b398397c284 100644
--- a/code/modules/admin/verbs/adminfun.dm
+++ b/code/modules/admin/verbs/adminfun.dm
@@ -110,7 +110,7 @@ ADMIN_VERB(mass_zombie_infection, R_ADMIN, "Mass Zombie Infection", "Infects all
for(var/i in GLOB.human_list)
var/mob/living/carbon/human/H = i
- new /obj/item/organ/internal/zombie_infection/nodamage(H)
+ new /obj/item/organ/zombie_infection/nodamage(H)
message_admins("[key_name_admin(user)] added a latent zombie infection to all humans.")
log_admin("[key_name(user)] added a latent zombie infection to all humans.")
@@ -121,7 +121,7 @@ ADMIN_VERB(mass_zombie_cure, R_ADMIN, "Mass Zombie Cure", "Removes the zombie in
if(confirm != "Yes")
return
- for(var/obj/item/organ/internal/zombie_infection/nodamage/I in GLOB.zombie_infection_list)
+ for(var/obj/item/organ/zombie_infection/nodamage/I in GLOB.zombie_infection_list)
qdel(I)
message_admins("[key_name_admin(user)] cured all zombies.")
diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm
index 368f6f4d6f45e..26cf122211305 100644
--- a/code/modules/admin/verbs/secrets.dm
+++ b/code/modules/admin/verbs/secrets.dm
@@ -517,8 +517,8 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w
if(H.dna.species.id == SPECIES_HUMAN)
if(H.dna.features["tail_human"] == "None" || H.dna.features["ears"] == "None")
- var/obj/item/organ/internal/ears/cat/ears = new
- var/obj/item/organ/external/tail/cat/tail = new
+ var/obj/item/organ/ears/cat/ears = new
+ var/obj/item/organ/tail/cat/tail = new
ears.Insert(H, movement_flags = DELETE_IF_REPLACED)
tail.Insert(H, movement_flags = DELETE_IF_REPLACED)
var/list/honorifics = list("[MALE]" = list("kun"), "[FEMALE]" = list("chan","tan"), "[NEUTER]" = list("san"), "[PLURAL]" = list("san")) //John Robust -> Robust-kun
diff --git a/code/modules/admin/verbs/selectequipment.dm b/code/modules/admin/verbs/selectequipment.dm
index 415130fa1b727..96534967702b7 100644
--- a/code/modules/admin/verbs/selectequipment.dm
+++ b/code/modules/admin/verbs/selectequipment.dm
@@ -213,7 +213,7 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(select_equipment, R_FUN, "Select Equipment", mob/ta
for(var/obj/item/item in human_target.get_equipped_items(includes_flags))
qdel(item)
- var/obj/item/organ/internal/brain/human_brain = human_target.get_organ_slot(BRAIN)
+ var/obj/item/organ/brain/human_brain = human_target.get_organ_slot(BRAIN)
human_brain.destroy_all_skillchips() // get rid of skillchips to prevent runtimes
if(dresscode != "Naked")
diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm
index f490095a019d9..44ca783ffcd0b 100644
--- a/code/modules/antagonists/_common/antag_datum.dm
+++ b/code/modules/antagonists/_common/antag_datum.dm
@@ -63,6 +63,8 @@ GLOBAL_LIST_EMPTY(antagonists)
var/hardcore_random_bonus = FALSE
/// A path to the audio stinger that plays upon gaining this datum.
var/stinger_sound
+ /// Whether this antag datum blocks rolling new antag datums
+ var/block_midrounds = TRUE
//ANTAG UI
@@ -468,7 +470,7 @@ GLOBAL_LIST_EMPTY(antagonists)
/// result of `get_preview_icon` is expected to be the completed version.
/datum/antagonist/proc/render_preview_outfit(datum/outfit/outfit, mob/living/carbon/human/dummy)
dummy = dummy || new /mob/living/carbon/human/dummy/consistent
- dummy.equipOutfit(outfit, visualsOnly = TRUE)
+ dummy.equipOutfit(outfit, visuals_only = TRUE)
dummy.wear_suit?.update_greyscale()
var/icon = getFlatIcon(dummy)
diff --git a/code/modules/antagonists/abductor/abductor.dm b/code/modules/antagonists/abductor/abductor.dm
index 2ca46499a7db0..9b8dca4a0e2b0 100644
--- a/code/modules/antagonists/abductor/abductor.dm
+++ b/code/modules/antagonists/abductor/abductor.dm
@@ -93,7 +93,7 @@
//Equip
var/mob/living/carbon/human/new_abductor = owner.current
new_abductor.set_species(/datum/species/abductor)
- var/obj/item/organ/internal/tongue/abductor/abductor_tongue = new_abductor.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/abductor/abductor_tongue = new_abductor.get_organ_slot(ORGAN_SLOT_TONGUE)
abductor_tongue.mothership = "[team.name]"
new_abductor.real_name = "[team.name] [sub_role]"
diff --git a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
index 8739a9de74950..e598742f1b167 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm
@@ -24,9 +24,9 @@
for(var/obj/item/abductor/gizmo/G in B.contents)
console.AddGizmo(G)
-/datum/outfit/abductor/post_equip(mob/living/carbon/human/user, visualsOnly = FALSE)
+/datum/outfit/abductor/post_equip(mob/living/carbon/human/user, visuals_only = FALSE)
. = ..()
- if(visualsOnly)
+ if(visuals_only)
return
if(!isnull(user.mind))
@@ -64,9 +64,9 @@
/obj/item/abductor/gizmo = 1
)
-/datum/outfit/abductor/scientist/post_equip(mob/living/carbon/human/user, visualsOnly = FALSE)
+/datum/outfit/abductor/scientist/post_equip(mob/living/carbon/human/user, visuals_only = FALSE)
. = ..()
- if(!visualsOnly && !isnull(user.mind))
+ if(!visuals_only && !isnull(user.mind))
var/obj/item/implant/abductor/beamplant = new /obj/item/implant/abductor(user)
beamplant.implant(user)
diff --git a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm
index a02d89e6b1d47..296eef07e8141 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm
@@ -29,7 +29,7 @@
accept_hand = 1
time = 32
var/obj/item/organ/IC = null
- var/list/organ_types = list(/obj/item/organ/internal/heart)
+ var/list/organ_types = list(/obj/item/organ/heart)
/datum/surgery_step/extract_organ/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
for(var/atom/A in target.organs)
@@ -50,7 +50,7 @@
/datum/surgery_step/gland_insert
name = "insert gland"
- implements = list(/obj/item/organ/internal/heart/gland = 100)
+ implements = list(/obj/item/organ/heart/gland = 100)
time = 32
/datum/surgery_step/gland_insert/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -59,6 +59,6 @@
/datum/surgery_step/gland_insert/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message(span_notice("[user] inserts [tool] into [target]."), span_notice("You insert [tool] into [target]."))
user.temporarilyRemoveItemFromInventory(tool, TRUE)
- var/obj/item/organ/internal/heart/gland/gland = tool
+ var/obj/item/organ/heart/gland/gland = tool
gland.Insert(target, 2)
return 1
diff --git a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm
index 9f6d10677d198..d70dc3f0e6723 100644
--- a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm
+++ b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm
@@ -178,7 +178,7 @@
/obj/item/abductor/mind_device/proc/mind_control(atom/target, mob/living/user)
if(iscarbon(target))
var/mob/living/carbon/carbon_target = target
- var/obj/item/organ/internal/heart/gland/target_gland = carbon_target.get_organ_slot("heart")
+ var/obj/item/organ/heart/gland/target_gland = carbon_target.get_organ_slot("heart")
if(!istype(target_gland))
to_chat(user, span_warning("Your target does not have an experimental gland!"))
return
@@ -448,7 +448,7 @@ Congratulations! You are now trained for invasive xenobiology research!"}
species = span_notice("[human_victim.dna.species.name]")
if(IS_CHANGELING(human_victim))
species = span_warning("Changeling lifeform")
- var/obj/item/organ/internal/heart/gland/temp = locate() in human_victim.organs
+ var/obj/item/organ/heart/gland/temp = locate() in human_victim.organs
if(temp)
helptext = span_warning("Experimental gland detected!")
else
diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm
index d1f240b7f6821..b991a16b8318d 100644
--- a/code/modules/antagonists/abductor/equipment/gland.dm
+++ b/code/modules/antagonists/abductor/equipment/gland.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland
+/obj/item/organ/heart/gland
name = "fleshy mass"
desc = "A nausea-inducing hunk of twisting flesh and metal."
icon = 'icons/obj/antags/abductor.dmi'
@@ -22,31 +22,31 @@
var/mind_control_duration = 1800
var/active_mind_control = FALSE
-/obj/item/organ/internal/heart/gland/Initialize(mapload)
+/obj/item/organ/heart/gland/Initialize(mapload)
. = ..()
icon_state = pick(list("health", "spider", "slime", "emp", "species", "egg", "vent", "mindshock", "viral"))
AddElement(/datum/element/update_icon_blocker)
-/obj/item/organ/internal/heart/gland/examine(mob/user)
+/obj/item/organ/heart/gland/examine(mob/user)
. = ..()
if(HAS_MIND_TRAIT(user, TRAIT_ABDUCTOR_SCIENTIST_TRAINING) || isobserver(user))
. += span_notice("It is \a [abductor_hint]")
-/obj/item/organ/internal/heart/gland/Stop()
+/obj/item/organ/heart/gland/Stop()
return FALSE
-/obj/item/organ/internal/heart/gland/proc/ownerCheck()
+/obj/item/organ/heart/gland/proc/ownerCheck()
if(ishuman(owner))
return TRUE
if(!human_only && iscarbon(owner))
return TRUE
return FALSE
-/obj/item/organ/internal/heart/gland/proc/Start()
+/obj/item/organ/heart/gland/proc/Start()
active = 1
COOLDOWN_START(src, activation_cooldown, rand(cooldown_low, cooldown_high))
-/obj/item/organ/internal/heart/gland/proc/update_gland_hud()
+/obj/item/organ/heart/gland/proc/update_gland_hud()
if(!owner)
return
var/image/holder = owner.hud_list[GLAND_HUD]
@@ -59,7 +59,7 @@
else
holder.icon_state = "hudgland_spent"
-/obj/item/organ/internal/heart/gland/proc/mind_control(command, mob/living/user)
+/obj/item/organ/heart/gland/proc/mind_control(command, mob/living/user)
if(!ownerCheck() || !mind_control_uses || active_mind_control)
return FALSE
mind_control_uses--
@@ -75,7 +75,7 @@
addtimer(CALLBACK(src, PROC_REF(clear_mind_control)), mind_control_duration)
return TRUE
-/obj/item/organ/internal/heart/gland/proc/clear_mind_control()
+/obj/item/organ/heart/gland/proc/clear_mind_control()
if(!ownerCheck() || !active_mind_control)
return FALSE
owner.balloon_alert(owner, "compulsion forgotten")
@@ -84,7 +84,7 @@
active_mind_control = FALSE
return TRUE
-/obj/item/organ/internal/heart/gland/mob_remove(mob/living/carbon/gland_owner, special, movement_flags)
+/obj/item/organ/heart/gland/mob_remove(mob/living/carbon/gland_owner, special, movement_flags)
. = ..()
active = FALSE
if(initial(uses) == 1)
@@ -93,7 +93,7 @@
hud.remove_atom_from_hud(gland_owner)
clear_mind_control()
-/obj/item/organ/internal/heart/gland/mob_insert(mob/living/carbon/gland_owner, special = FALSE, movement_flags = DELETE_IF_REPLACED)
+/obj/item/organ/heart/gland/mob_insert(mob/living/carbon/gland_owner, special = FALSE, movement_flags = DELETE_IF_REPLACED)
. = ..()
if(special != 2 && uses) // Special 2 means abductor surgery
@@ -102,7 +102,7 @@
hud.add_atom_to_hud(gland_owner)
update_gland_hud()
-/obj/item/organ/internal/heart/gland/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/heart/gland/on_life(seconds_per_tick, times_fired)
if(!active)
return
if(!ownerCheck())
@@ -115,5 +115,5 @@
if(!uses)
active = FALSE
-/obj/item/organ/internal/heart/gland/proc/activate()
+/obj/item/organ/heart/gland/proc/activate()
return
diff --git a/code/modules/antagonists/abductor/equipment/glands/access.dm b/code/modules/antagonists/abductor/equipment/glands/access.dm
index 8e8ff9a7ef9c9..29be30c0cfcff 100644
--- a/code/modules/antagonists/abductor/equipment/glands/access.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/access.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland/access
+/obj/item/organ/heart/gland/access
abductor_hint = "anagraphic electro-scrambler. After it activates, grants the abductee intrinsic all access."
cooldown_low = 600
cooldown_high = 1200
@@ -7,6 +7,6 @@
mind_control_uses = 3
mind_control_duration = 900
-/obj/item/organ/internal/heart/gland/access/activate()
+/obj/item/organ/heart/gland/access/activate()
to_chat(owner, span_notice("You feel like a VIP for some reason."))
owner.AddComponent(/datum/component/simple_access, SSid_access.get_region_access_list(list(REGION_ALL_GLOBAL)), src)
diff --git a/code/modules/antagonists/abductor/equipment/glands/blood.dm b/code/modules/antagonists/abductor/equipment/glands/blood.dm
index 522354fac3ac5..b1d408526733f 100644
--- a/code/modules/antagonists/abductor/equipment/glands/blood.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/blood.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland/blood
+/obj/item/organ/heart/gland/blood
abductor_hint = "pseudonuclear hemo-destabilizer. Periodically randomizes the abductee's bloodtype into a random reagent."
cooldown_low = 1200
cooldown_high = 1800
@@ -9,7 +9,7 @@
mind_control_uses = 3
mind_control_duration = 1500
-/obj/item/organ/internal/heart/gland/blood/activate()
+/obj/item/organ/heart/gland/blood/activate()
if(!ishuman(owner) || !owner.dna.species)
return
var/mob/living/carbon/human/H = owner
diff --git a/code/modules/antagonists/abductor/equipment/glands/chem.dm b/code/modules/antagonists/abductor/equipment/glands/chem.dm
index 965d8f2fc201a..54644bd8e9f3d 100644
--- a/code/modules/antagonists/abductor/equipment/glands/chem.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/chem.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland/chem
+/obj/item/organ/heart/gland/chem
abductor_hint = "intrinsic pharma-provider. The abductee constantly produces random chemicals inside their bloodstream. They also quickly regenerate toxin damage."
cooldown_low = 50
cooldown_high = 50
@@ -8,12 +8,12 @@
mind_control_duration = 1200
var/list/possible_reagents = list()
-/obj/item/organ/internal/heart/gland/chem/Initialize(mapload)
+/obj/item/organ/heart/gland/chem/Initialize(mapload)
. = ..()
for(var/R in subtypesof(/datum/reagent/drug) + subtypesof(/datum/reagent/medicine) + typesof(/datum/reagent/toxin))
possible_reagents += R
-/obj/item/organ/internal/heart/gland/chem/activate()
+/obj/item/organ/heart/gland/chem/activate()
var/chem_to_add = pick(possible_reagents)
owner.reagents.add_reagent(chem_to_add, 2)
owner.adjustToxLoss(-5, forced = TRUE)
diff --git a/code/modules/antagonists/abductor/equipment/glands/egg.dm b/code/modules/antagonists/abductor/equipment/glands/egg.dm
index 938caeeb36126..67c3efd42cbef 100644
--- a/code/modules/antagonists/abductor/equipment/glands/egg.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/egg.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland/egg
+/obj/item/organ/heart/gland/egg
abductor_hint = "roe/enzymatic synthesizer. The abductee will periodically lay eggs filled with random reagents."
cooldown_low = 300
cooldown_high = 400
@@ -9,7 +9,7 @@
mind_control_uses = 2
mind_control_duration = 1800
-/obj/item/organ/internal/heart/gland/egg/activate()
+/obj/item/organ/heart/gland/egg/activate()
owner.visible_message(span_alertalien("[owner] [pick(EGG_LAYING_MESSAGES)]"))
var/turf/T = owner.drop_location()
new /obj/item/food/egg/gland(T)
diff --git a/code/modules/antagonists/abductor/equipment/glands/electric.dm b/code/modules/antagonists/abductor/equipment/glands/electric.dm
index e0b3df0f19c32..77c6cfdfeec25 100644
--- a/code/modules/antagonists/abductor/equipment/glands/electric.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/electric.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland/electric
+/obj/item/organ/heart/gland/electric
abductor_hint = "electron accumulator/discharger. The abductee becomes fully immune to electric shocks. Additionally, they will randomly discharge electric bolts."
cooldown_low = 800
cooldown_high = 1200
@@ -7,20 +7,20 @@
mind_control_uses = 2
mind_control_duration = 900
-/obj/item/organ/internal/heart/gland/electric/on_mob_insert(mob/living/carbon/gland_owner)
+/obj/item/organ/heart/gland/electric/on_mob_insert(mob/living/carbon/gland_owner)
. = ..()
ADD_TRAIT(gland_owner, TRAIT_SHOCKIMMUNE, ABDUCTOR_GLAND_TRAIT)
-/obj/item/organ/internal/heart/gland/electric/on_mob_remove(mob/living/carbon/gland_owner)
+/obj/item/organ/heart/gland/electric/on_mob_remove(mob/living/carbon/gland_owner)
. = ..()
REMOVE_TRAIT(gland_owner, TRAIT_SHOCKIMMUNE, ABDUCTOR_GLAND_TRAIT)
-/obj/item/organ/internal/heart/gland/electric/activate()
+/obj/item/organ/heart/gland/electric/activate()
owner.visible_message(span_danger("[owner]'s skin starts emitting electric arcs!"),\
span_warning("You feel electric energy building up inside you!"))
playsound(get_turf(owner), SFX_SPARKS, 100, TRUE, -1, SHORT_RANGE_SOUND_EXTRARANGE)
addtimer(CALLBACK(src, PROC_REF(zap)), rand(3 SECONDS, 10 SECONDS))
-/obj/item/organ/internal/heart/gland/electric/proc/zap()
+/obj/item/organ/heart/gland/electric/proc/zap()
tesla_zap(source = owner, zap_range = 4, power = 8e3, cutoff = 1e3, zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN)
playsound(get_turf(owner), 'sound/effects/magic/lightningshock.ogg', 50, TRUE)
diff --git a/code/modules/antagonists/abductor/equipment/glands/heal.dm b/code/modules/antagonists/abductor/equipment/glands/heal.dm
index 83ba7a7ffbdf2..13761ba0cdba3 100644
--- a/code/modules/antagonists/abductor/equipment/glands/heal.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/heal.dm
@@ -1,6 +1,6 @@
#define REJECTION_VOMIT_FLAGS (MOB_VOMIT_BLOOD | MOB_VOMIT_STUN | MOB_VOMIT_KNOCKDOWN | MOB_VOMIT_FORCE)
-/obj/item/organ/internal/heart/gland/heal
+/obj/item/organ/heart/gland/heal
abductor_hint = "organic replicator. Forcibly ejects damaged and robotic organs from the abductee and regenerates them. Additionally, forcibly removes reagents (via vomit) from the abductee if they have moderate toxin damage or poison within the bloodstream, and regenerates blood to a healthy threshold if too low. The abductee will also reject implants such as mindshields."
cooldown_low = 200
cooldown_high = 400
@@ -10,7 +10,7 @@
mind_control_uses = 3
mind_control_duration = 3000
-/obj/item/organ/internal/heart/gland/heal/activate()
+/obj/item/organ/heart/gland/heal/activate()
if(!(owner.mob_biotypes & MOB_ORGANIC))
return
@@ -19,31 +19,31 @@
return
for(var/organ in owner.organs)
- if(istype(organ, /obj/item/organ/internal/cyberimp))
+ if(istype(organ, /obj/item/organ/cyberimp))
reject_cyberimp(organ)
return
- var/obj/item/organ/internal/appendix/appendix = owner.get_organ_slot(ORGAN_SLOT_APPENDIX)
+ var/obj/item/organ/appendix/appendix = owner.get_organ_slot(ORGAN_SLOT_APPENDIX)
if((!appendix && !HAS_TRAIT(owner, TRAIT_NOHUNGER)) || (appendix && ((appendix.organ_flags & ORGAN_FAILING) || IS_ROBOTIC_ORGAN(appendix))))
replace_appendix(appendix)
return
- var/obj/item/organ/internal/liver/liver = owner.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = owner.get_organ_slot(ORGAN_SLOT_LIVER)
if((!liver && !HAS_TRAIT(owner, TRAIT_LIVERLESS_METABOLISM)) || (liver && ((liver.damage > liver.high_threshold) || IS_ROBOTIC_ORGAN(liver))))
replace_liver(liver)
return
- var/obj/item/organ/internal/lungs/lungs = owner.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/lungs = owner.get_organ_slot(ORGAN_SLOT_LUNGS)
if((!lungs && !HAS_TRAIT(owner, TRAIT_NOBREATH)) || (lungs && ((lungs.damage > lungs.high_threshold) || IS_ROBOTIC_ORGAN(lungs))))
replace_lungs(lungs)
return
- var/obj/item/organ/internal/stomach/stomach = owner.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/stomach = owner.get_organ_slot(ORGAN_SLOT_STOMACH)
if((!stomach && !HAS_TRAIT(owner, TRAIT_NOHUNGER)) || (stomach && ((stomach.damage > stomach.high_threshold) || IS_ROBOTIC_ORGAN(stomach))))
replace_stomach(stomach)
return
- var/obj/item/organ/internal/eyes/eyes = owner.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = owner.get_organ_slot(ORGAN_SLOT_EYES)
if(!eyes || (eyes && ((eyes.damage > eyes.low_threshold) || IS_ROBOTIC_ORGAN(eyes))))
replace_eyes(eyes)
return
@@ -78,19 +78,19 @@
replace_chest(chest)
return
-/obj/item/organ/internal/heart/gland/heal/proc/reject_implant(obj/item/implant/implant)
+/obj/item/organ/heart/gland/heal/proc/reject_implant(obj/item/implant/implant)
owner.visible_message(span_warning("[owner] vomits up a tiny mangled implant!"), span_userdanger("You suddenly vomit up a tiny mangled implant!"))
owner.vomit(REJECTION_VOMIT_FLAGS, lost_nutrition = 0)
implant.removed(owner)
qdel(implant)
-/obj/item/organ/internal/heart/gland/heal/proc/reject_cyberimp(obj/item/organ/internal/cyberimp/implant)
+/obj/item/organ/heart/gland/heal/proc/reject_cyberimp(obj/item/organ/cyberimp/implant)
owner.visible_message(span_warning("[owner] vomits up his [implant.name]!"), span_userdanger("You suddenly vomit up your [implant.name]!"))
owner.vomit(REJECTION_VOMIT_FLAGS, lost_nutrition = 0)
implant.Remove(owner)
implant.forceMove(owner.drop_location())
-/obj/item/organ/internal/heart/gland/heal/proc/replace_appendix(obj/item/organ/internal/appendix/appendix)
+/obj/item/organ/heart/gland/heal/proc/replace_appendix(obj/item/organ/appendix/appendix)
if(appendix)
owner.vomit(REJECTION_VOMIT_FLAGS, lost_nutrition = 0)
appendix.Remove(owner)
@@ -99,13 +99,13 @@
else
to_chat(owner, span_warning("You feel a weird rumble in your bowels..."))
- var/appendix_type = /obj/item/organ/internal/appendix
+ var/appendix_type = /obj/item/organ/appendix
if(owner?.dna?.species?.mutantappendix)
appendix_type = owner.dna.species.mutantappendix
- var/obj/item/organ/internal/appendix/new_appendix = new appendix_type()
+ var/obj/item/organ/appendix/new_appendix = new appendix_type()
new_appendix.Insert(owner)
-/obj/item/organ/internal/heart/gland/heal/proc/replace_liver(obj/item/organ/internal/liver/liver)
+/obj/item/organ/heart/gland/heal/proc/replace_liver(obj/item/organ/liver/liver)
if(liver)
owner.visible_message(span_warning("[owner] vomits up his [liver.name]!"), span_userdanger("You suddenly vomit up your [liver.name]!"))
owner.vomit(REJECTION_VOMIT_FLAGS, lost_nutrition = 0)
@@ -114,13 +114,13 @@
else
to_chat(owner, span_warning("You feel a weird rumble in your bowels..."))
- var/liver_type = /obj/item/organ/internal/liver
+ var/liver_type = /obj/item/organ/liver
if(owner?.dna?.species?.mutantliver)
liver_type = owner.dna.species.mutantliver
- var/obj/item/organ/internal/liver/new_liver = new liver_type()
+ var/obj/item/organ/liver/new_liver = new liver_type()
new_liver.Insert(owner)
-/obj/item/organ/internal/heart/gland/heal/proc/replace_lungs(obj/item/organ/internal/lungs/lungs)
+/obj/item/organ/heart/gland/heal/proc/replace_lungs(obj/item/organ/lungs/lungs)
if(lungs)
owner.visible_message(span_warning("[owner] vomits up his [lungs.name]!"), span_userdanger("You suddenly vomit up your [lungs.name]!"))
owner.vomit(REJECTION_VOMIT_FLAGS, lost_nutrition = 0)
@@ -129,13 +129,13 @@
else
to_chat(owner, span_warning("You feel a weird rumble inside your chest..."))
- var/lung_type = /obj/item/organ/internal/lungs
+ var/lung_type = /obj/item/organ/lungs
if(owner.dna.species && owner.dna.species.mutantlungs)
lung_type = owner.dna.species.mutantlungs
- var/obj/item/organ/internal/lungs/new_lungs = new lung_type()
+ var/obj/item/organ/lungs/new_lungs = new lung_type()
new_lungs.Insert(owner)
-/obj/item/organ/internal/heart/gland/heal/proc/replace_stomach(obj/item/organ/internal/stomach/stomach)
+/obj/item/organ/heart/gland/heal/proc/replace_stomach(obj/item/organ/stomach/stomach)
if(stomach)
owner.visible_message(span_warning("[owner] vomits up his [stomach.name]!"), span_userdanger("You suddenly vomit up your [stomach.name]!"))
owner.vomit(REJECTION_VOMIT_FLAGS, lost_nutrition = 0)
@@ -144,13 +144,13 @@
else
to_chat(owner, span_warning("You feel a weird rumble in your bowels..."))
- var/stomach_type = /obj/item/organ/internal/stomach
+ var/stomach_type = /obj/item/organ/stomach
if(owner?.dna?.species?.mutantstomach)
stomach_type = owner.dna.species.mutantstomach
- var/obj/item/organ/internal/stomach/new_stomach = new stomach_type()
+ var/obj/item/organ/stomach/new_stomach = new stomach_type()
new_stomach.Insert(owner)
-/obj/item/organ/internal/heart/gland/heal/proc/replace_eyes(obj/item/organ/internal/eyes/eyes)
+/obj/item/organ/heart/gland/heal/proc/replace_eyes(obj/item/organ/eyes/eyes)
if(eyes)
owner.visible_message(span_warning("[owner]'s [eyes.name] fall out of their sockets!"), span_userdanger("Your [eyes.name] fall out of their sockets!"))
playsound(owner, 'sound/effects/splat.ogg', 50, TRUE)
@@ -161,15 +161,15 @@
addtimer(CALLBACK(src, PROC_REF(finish_replace_eyes)), rand(10 SECONDS, 20 SECONDS))
-/obj/item/organ/internal/heart/gland/heal/proc/finish_replace_eyes()
- var/eye_type = /obj/item/organ/internal/eyes
+/obj/item/organ/heart/gland/heal/proc/finish_replace_eyes()
+ var/eye_type = /obj/item/organ/eyes
if(owner.dna.species && owner.dna.species.mutanteyes)
eye_type = owner.dna.species.mutanteyes
- var/obj/item/organ/internal/eyes/new_eyes = new eye_type()
+ var/obj/item/organ/eyes/new_eyes = new eye_type()
new_eyes.Insert(owner)
owner.visible_message(span_warning("A pair of new eyes suddenly inflates into [owner]'s eye sockets!"), span_userdanger("A pair of new eyes suddenly inflates into your eye sockets!"))
-/obj/item/organ/internal/heart/gland/heal/proc/replace_limb(body_zone, obj/item/bodypart/limb)
+/obj/item/organ/heart/gland/heal/proc/replace_limb(body_zone, obj/item/bodypart/limb)
if(limb)
owner.visible_message(span_warning("[owner]'s [limb.plaintext_zone] suddenly detaches from [owner.p_their()] body!"), span_userdanger("Your [limb.plaintext_zone] suddenly detaches from your body!"))
playsound(owner, SFX_DESECRATION, 50, TRUE, -1)
@@ -179,18 +179,18 @@
addtimer(CALLBACK(src, PROC_REF(finish_replace_limb), body_zone), rand(15 SECONDS, 30 SECONDS))
-/obj/item/organ/internal/heart/gland/heal/proc/finish_replace_limb(body_zone)
+/obj/item/organ/heart/gland/heal/proc/finish_replace_limb(body_zone)
owner.visible_message(span_warning("With a loud snap, [owner]'s [parse_zone(body_zone)] rapidly grows back from [owner.p_their()] body!"),
span_userdanger("With a loud snap, your [parse_zone(body_zone)] rapidly grows back from your body!"),
span_warning("Your hear a loud snap."))
playsound(owner, 'sound/effects/magic/demon_consume.ogg', 50, TRUE)
owner.regenerate_limb(body_zone)
-/obj/item/organ/internal/heart/gland/heal/proc/replace_blood()
+/obj/item/organ/heart/gland/heal/proc/replace_blood()
owner.visible_message(span_warning("[owner] starts vomiting huge amounts of blood!"), span_userdanger("You suddenly start vomiting huge amounts of blood!"))
keep_replacing_blood()
-/obj/item/organ/internal/heart/gland/heal/proc/keep_replacing_blood()
+/obj/item/organ/heart/gland/heal/proc/keep_replacing_blood()
var/keep_going = FALSE
owner.vomit(vomit_flags = (MOB_VOMIT_BLOOD | MOB_VOMIT_FORCE), lost_nutrition = 0, distance = 3)
owner.Stun(15)
@@ -209,7 +209,7 @@
if(keep_going)
addtimer(CALLBACK(src, PROC_REF(keep_replacing_blood)), 3 SECONDS)
-/obj/item/organ/internal/heart/gland/heal/proc/replace_chest(obj/item/bodypart/chest/chest)
+/obj/item/organ/heart/gland/heal/proc/replace_chest(obj/item/bodypart/chest/chest)
if(!IS_ORGANIC_LIMB(chest))
owner.visible_message(span_warning("[owner]'s [chest.name] rapidly expels its mechanical components, replacing them with flesh!"), span_userdanger("Your [chest.name] rapidly expels its mechanical components, replacing them with flesh!"))
playsound(owner, 'sound/effects/magic/clockwork/anima_fragment_attack.ogg', 50, TRUE)
diff --git a/code/modules/antagonists/abductor/equipment/glands/mindshock.dm b/code/modules/antagonists/abductor/equipment/glands/mindshock.dm
index 1a3f140c3415d..a4aa88b8da974 100644
--- a/code/modules/antagonists/abductor/equipment/glands/mindshock.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/mindshock.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland/mindshock
+/obj/item/organ/heart/gland/mindshock
abductor_hint = "neural crosstalk uninhibitor. The abductee emits a disrupting psychic wave every so often. This will either stun, cause hallucinations or deal random brain damage to people nearby."
cooldown_low = 40 SECONDS
cooldown_high = 70 SECONDS
@@ -8,7 +8,7 @@
mind_control_duration = 120 SECONDS
var/list/mob/living/carbon/human/broadcasted_mobs = list()
-/obj/item/organ/internal/heart/gland/mindshock/activate()
+/obj/item/organ/heart/gland/mindshock/activate()
to_chat(owner, span_notice("You get a headache."))
var/turf/owner_turf = get_turf(owner)
@@ -30,7 +30,7 @@
if(3)
target.adjust_hallucinations(120 SECONDS)
-/obj/item/organ/internal/heart/gland/mindshock/mind_control(command, mob/living/user)
+/obj/item/organ/heart/gland/mindshock/mind_control(command, mob/living/user)
if(!ownerCheck() || !mind_control_uses || active_mind_control)
return FALSE
mind_control_uses--
@@ -62,7 +62,7 @@
update_gland_hud()
return TRUE
-/obj/item/organ/internal/heart/gland/mindshock/clear_mind_control()
+/obj/item/organ/heart/gland/mindshock/clear_mind_control()
if(!active_mind_control || !LAZYLEN(broadcasted_mobs))
return FALSE
for(var/target_mob in broadcasted_mobs)
diff --git a/code/modules/antagonists/abductor/equipment/glands/plasma.dm b/code/modules/antagonists/abductor/equipment/glands/plasma.dm
index 76cd806bb42b8..6b4a6150f748b 100644
--- a/code/modules/antagonists/abductor/equipment/glands/plasma.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/plasma.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland/plasma
+/obj/item/organ/heart/gland/plasma
abductor_hint = "effluvium sanguine-synonym emitter. The abductee randomly emits clouds of plasma."
cooldown_low = 1200
cooldown_high = 1800
@@ -7,12 +7,12 @@
mind_control_uses = 1
mind_control_duration = 800
-/obj/item/organ/internal/heart/gland/plasma/activate()
+/obj/item/organ/heart/gland/plasma/activate()
to_chat(owner, span_warning("You feel bloated."))
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), owner, span_userdanger("A massive stomachache overcomes you.")), 15 SECONDS)
addtimer(CALLBACK(src, PROC_REF(vomit_plasma)), 20 SECONDS)
-/obj/item/organ/internal/heart/gland/plasma/proc/vomit_plasma()
+/obj/item/organ/heart/gland/plasma/proc/vomit_plasma()
if(!owner)
return
owner.visible_message(span_danger("[owner] vomits a cloud of plasma!"))
diff --git a/code/modules/antagonists/abductor/equipment/glands/quantum.dm b/code/modules/antagonists/abductor/equipment/glands/quantum.dm
index a2a4a9149e741..1991287981c0d 100644
--- a/code/modules/antagonists/abductor/equipment/glands/quantum.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/quantum.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland/quantum
+/obj/item/organ/heart/gland/quantum
abductor_hint = "quantic de-observation matrix. Periodically links with a random person in view, then the abductee later swaps positions with that person."
cooldown_low = 150
cooldown_high = 150
@@ -8,7 +8,7 @@
mind_control_duration = 1200
var/mob/living/carbon/entangled_mob
-/obj/item/organ/internal/heart/gland/quantum/activate()
+/obj/item/organ/heart/gland/quantum/activate()
if(entangled_mob)
return
for(var/mob/M in oview(owner, 7))
@@ -18,7 +18,7 @@
addtimer(CALLBACK(src, PROC_REF(quantum_swap)), rand(1 MINUTES, 4 MINUTES))
return
-/obj/item/organ/internal/heart/gland/quantum/proc/quantum_swap()
+/obj/item/organ/heart/gland/quantum/proc/quantum_swap()
if(QDELETED(entangled_mob))
entangled_mob = null
return
@@ -30,7 +30,7 @@
if(!active_mind_control) //Do not reset entangled mob while mind control is active
entangled_mob = null
-/obj/item/organ/internal/heart/gland/quantum/mind_control(command, mob/living/user)
+/obj/item/organ/heart/gland/quantum/mind_control(command, mob/living/user)
if(..())
if(entangled_mob && ishuman(entangled_mob) && (entangled_mob.stat < DEAD))
to_chat(entangled_mob, span_userdanger("You suddenly feel an irresistible compulsion to follow an order..."))
@@ -41,7 +41,7 @@
user.log_message("mirrored an abductor mind control message to [key_name(entangled_mob)]: [command]", LOG_GAME)
update_gland_hud()
-/obj/item/organ/internal/heart/gland/quantum/clear_mind_control()
+/obj/item/organ/heart/gland/quantum/clear_mind_control()
if(active_mind_control)
to_chat(entangled_mob, span_userdanger("You feel the compulsion fade, and you completely forget about your previous orders."))
entangled_mob.clear_alert(ALERT_MIND_CONTROL)
diff --git a/code/modules/antagonists/abductor/equipment/glands/slime.dm b/code/modules/antagonists/abductor/equipment/glands/slime.dm
index 6d3287ecae632..252afdaa45efa 100644
--- a/code/modules/antagonists/abductor/equipment/glands/slime.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/slime.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland/slime
+/obj/item/organ/heart/gland/slime
abductor_hint = "gastric animation galvanizer. The abductee occasionally vomits slimes. Slimes will no longer attack the abductee."
cooldown_low = 600
cooldown_high = 1200
@@ -7,17 +7,17 @@
mind_control_uses = 1
mind_control_duration = 2400
-/obj/item/organ/internal/heart/gland/slime/on_mob_insert(mob/living/carbon/gland_owner)
+/obj/item/organ/heart/gland/slime/on_mob_insert(mob/living/carbon/gland_owner)
. = ..()
gland_owner.faction |= FACTION_SLIME
gland_owner.grant_language(/datum/language/slime, source = LANGUAGE_GLAND)
-/obj/item/organ/internal/heart/gland/slime/on_mob_remove(mob/living/carbon/gland_owner)
+/obj/item/organ/heart/gland/slime/on_mob_remove(mob/living/carbon/gland_owner)
. = ..()
gland_owner.faction -= FACTION_SLIME
gland_owner.remove_language(/datum/language/slime, source = LANGUAGE_GLAND)
-/obj/item/organ/internal/heart/gland/slime/activate()
+/obj/item/organ/heart/gland/slime/activate()
to_chat(owner, span_warning("You feel nauseated!"))
owner.vomit(VOMIT_CATEGORY_DEFAULT, lost_nutrition = 20)
diff --git a/code/modules/antagonists/abductor/equipment/glands/spider.dm b/code/modules/antagonists/abductor/equipment/glands/spider.dm
index 52ff520a876ad..44150d9ed8076 100644
--- a/code/modules/antagonists/abductor/equipment/glands/spider.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/spider.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland/spiderman
+/obj/item/organ/heart/gland/spiderman
abductor_hint = "araneae cloister accelerator. The abductee occasionally exhales spider pheromones and will spawn spiderlings."
cooldown_low = 450
cooldown_high = 900
@@ -7,7 +7,7 @@
mind_control_uses = 2
mind_control_duration = 2400
-/obj/item/organ/internal/heart/gland/spiderman/activate()
+/obj/item/organ/heart/gland/spiderman/activate()
to_chat(owner, span_warning("You feel something crawling in your skin."))
owner.faction |= FACTION_SPIDER
var/mob/living/basic/spider/growing/spiderling/spider = new(owner.drop_location())
diff --git a/code/modules/antagonists/abductor/equipment/glands/transform.dm b/code/modules/antagonists/abductor/equipment/glands/transform.dm
index 3ea10c7725579..f13418a9082a1 100644
--- a/code/modules/antagonists/abductor/equipment/glands/transform.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/transform.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland/transform
+/obj/item/organ/heart/gland/transform
abductor_hint = "anthropmorphic transmorphosizer. The abductee will occasionally change appearance and species."
cooldown_low = 900
cooldown_high = 1800
@@ -8,7 +8,7 @@
mind_control_uses = 7
mind_control_duration = 300
-/obj/item/organ/internal/heart/gland/transform/activate()
+/obj/item/organ/heart/gland/transform/activate()
to_chat(owner, span_notice("You feel unlike yourself."))
randomize_human(owner)
var/species = pick(list(/datum/species/human, /datum/species/lizard, /datum/species/moth, /datum/species/fly))
diff --git a/code/modules/antagonists/abductor/equipment/glands/trauma.dm b/code/modules/antagonists/abductor/equipment/glands/trauma.dm
index 5fab30332ef57..844cc795a944a 100644
--- a/code/modules/antagonists/abductor/equipment/glands/trauma.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/trauma.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland/trauma
+/obj/item/organ/heart/gland/trauma
abductor_hint = "white matter randomiser. The abductee occasionally gains a random brain trauma, up to five times. The traumas can range from basic to deep-rooted."
cooldown_low = 800
cooldown_high = 1200
@@ -7,7 +7,7 @@
mind_control_uses = 3
mind_control_duration = 1800
-/obj/item/organ/internal/heart/gland/trauma/activate()
+/obj/item/organ/heart/gland/trauma/activate()
to_chat(owner, span_warning("You feel a spike of pain in your head."))
if(prob(33))
owner.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, rand(TRAUMA_RESILIENCE_BASIC, TRAUMA_RESILIENCE_LOBOTOMY))
diff --git a/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm b/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm
index c7e3a74e4f99e..ed0cc5bbed2d8 100644
--- a/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/ventcrawl.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland/ventcrawling
+/obj/item/organ/heart/gland/ventcrawling
abductor_hint = "pliant cartilage enabler. The abductee can crawl through vents without trouble."
cooldown_low = 1800
cooldown_high = 2400
@@ -7,6 +7,6 @@
mind_control_uses = 4
mind_control_duration = 1800
-/obj/item/organ/internal/heart/gland/ventcrawling/activate()
+/obj/item/organ/heart/gland/ventcrawling/activate()
to_chat(owner, span_notice("You feel very stretchy."))
ADD_TRAIT(owner, TRAIT_VENTCRAWLER_ALWAYS, type)
diff --git a/code/modules/antagonists/abductor/equipment/glands/viral.dm b/code/modules/antagonists/abductor/equipment/glands/viral.dm
index c3d82af967403..9aa4a26e549e5 100644
--- a/code/modules/antagonists/abductor/equipment/glands/viral.dm
+++ b/code/modules/antagonists/abductor/equipment/glands/viral.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/gland/viral
+/obj/item/organ/heart/gland/viral
abductor_hint = "contamination incubator. The abductee becomes a carrier of a random advanced disease - of which they are unaffected by."
cooldown_low = 1800
cooldown_high = 2400
@@ -7,13 +7,13 @@
mind_control_uses = 1
mind_control_duration = 1800
-/obj/item/organ/internal/heart/gland/viral/activate()
+/obj/item/organ/heart/gland/viral/activate()
to_chat(owner, span_warning("You feel sick."))
var/datum/disease/advance/A = random_virus(pick(2,6),6)
A.carrier = TRUE
owner.ForceContractDisease(A, FALSE, TRUE)
-/obj/item/organ/internal/heart/gland/viral/proc/random_virus(max_symptoms, max_level)
+/obj/item/organ/heart/gland/viral/proc/random_virus(max_symptoms, max_level)
if(max_symptoms > VIRUS_SYMPTOM_LIMIT)
max_symptoms = VIRUS_SYMPTOM_LIMIT
var/datum/disease/advance/A = new /datum/disease/advance()
diff --git a/code/modules/antagonists/abductor/equipment/orderable_gear.dm b/code/modules/antagonists/abductor/equipment/orderable_gear.dm
index b133bf3f8a5ec..aa6ef608f6c8f 100644
--- a/code/modules/antagonists/abductor/equipment/orderable_gear.dm
+++ b/code/modules/antagonists/abductor/equipment/orderable_gear.dm
@@ -53,7 +53,7 @@ GLOBAL_LIST_INIT(abductor_gear, subtypesof(/datum/abductor_gear))
name = "Superlingual Matrix"
description = "A mysterious structure that allows for instant communication between users. Using it inhand will attune it to your mothership's channel. Pretty impressive until you need to eat something."
id = "superlingual_matrix"
- build_path = list(/obj/item/organ/internal/tongue/abductor = 1)
+ build_path = list(/obj/item/organ/tongue/abductor = 1)
category = CATEGORY_MISC_GEAR
/datum/abductor_gear/mental_interface
diff --git a/code/modules/antagonists/abductor/machinery/dispenser.dm b/code/modules/antagonists/abductor/machinery/dispenser.dm
index 416153c50e58f..8254247f9dd99 100644
--- a/code/modules/antagonists/abductor/machinery/dispenser.dm
+++ b/code/modules/antagonists/abductor/machinery/dispenser.dm
@@ -14,7 +14,7 @@
/obj/machinery/abductor/gland_dispenser/Initialize(mapload)
. = ..()
- gland_types = subtypesof(/obj/item/organ/internal/heart/gland)
+ gland_types = subtypesof(/obj/item/organ/heart/gland)
gland_types = shuffle(gland_types)
gland_colors = new/list(gland_types.len)
amounts = new/list(gland_types.len)
@@ -62,7 +62,7 @@
return TRUE
/obj/machinery/abductor/gland_dispenser/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/organ/internal/heart/gland))
+ if(istype(W, /obj/item/organ/heart/gland))
if(!user.transferItemToLoc(W, src))
return
for(var/i in 1 to gland_colors.len)
diff --git a/code/modules/antagonists/abductor/machinery/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm
index c4e59c505bf04..324ec4381e17f 100644
--- a/code/modules/antagonists/abductor/machinery/experiment.dm
+++ b/code/modules/antagonists/abductor/machinery/experiment.dm
@@ -137,7 +137,7 @@
if(occupant.stat == DEAD)
say("Specimen deceased - please provide fresh sample.")
return "Specimen deceased."
- var/obj/item/organ/internal/heart/gland/GlandTest = locate() in occupant.organs
+ var/obj/item/organ/heart/gland/GlandTest = locate() in occupant.organs
if(!GlandTest)
say("Experimental dissection not detected!")
return "No glands detected!"
@@ -158,7 +158,7 @@
user_abductor.team.abductees += occupant.mind
occupant.mind.add_antag_datum(/datum/antagonist/abductee)
- for(var/obj/item/organ/internal/heart/gland/G in occupant.organs)
+ for(var/obj/item/organ/heart/gland/G in occupant.organs)
G.Start()
point_reward++
if(point_reward > 0)
diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm
index 297437e0bc65f..05881a3b4b3be 100644
--- a/code/modules/antagonists/changeling/changeling.dm
+++ b/code/modules/antagonists/changeling/changeling.dm
@@ -143,6 +143,7 @@
RegisterSignal(living_mob, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(on_fullhealed))
RegisterSignal(living_mob, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item))
RegisterSignals(living_mob, list(COMSIG_MOB_MIDDLECLICKON, COMSIG_MOB_ALTCLICKON), PROC_REF(on_click_sting))
+ ADD_TRAIT(living_mob, TRAIT_FAKE_SOULLESS, CHANGELING_TRAIT)
if(living_mob.hud_used)
var/datum/hud/hud_used = living_mob.hud_used
@@ -160,7 +161,7 @@
make_brain_decoy(living_mob)
/datum/antagonist/changeling/proc/make_brain_decoy(mob/living/ling)
- var/obj/item/organ/internal/brain/our_ling_brain = ling.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/our_ling_brain = ling.get_organ_slot(ORGAN_SLOT_BRAIN)
if(isnull(our_ling_brain) || our_ling_brain.decoy_override)
return
@@ -201,6 +202,7 @@
var/mob/living/living_mob = mob_override || owner.current
handle_clown_mutation(living_mob, removing = FALSE)
UnregisterSignal(living_mob, list(COMSIG_MOB_LOGIN, COMSIG_LIVING_LIFE, COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_MOB_GET_STATUS_TAB_ITEMS, COMSIG_MOB_MIDDLECLICKON, COMSIG_MOB_ALTCLICKON))
+ REMOVE_TRAIT(living_mob, TRAIT_FAKE_SOULLESS, CHANGELING_TRAIT)
if(living_mob.hud_used)
var/datum/hud/hud_used = living_mob.hud_used
diff --git a/code/modules/antagonists/changeling/headslug_eggs.dm b/code/modules/antagonists/changeling/headslug_eggs.dm
index 75c0881c55167..e2238d9d7e703 100644
--- a/code/modules/antagonists/changeling/headslug_eggs.dm
+++ b/code/modules/antagonists/changeling/headslug_eggs.dm
@@ -1,7 +1,7 @@
#define EGG_INCUBATION_TIME (4 MINUTES)
/// The actual organ that the changeling headslug implants into a dead host.
-/obj/item/organ/internal/body_egg/changeling_egg
+/obj/item/organ/body_egg/changeling_egg
name = "changeling egg"
desc = "Twitching and disgusting."
/// The mind of the original changeling that gave forth to the headslug mob.
@@ -11,20 +11,20 @@
/// When this egg last got removed from a body. If -1, the egg hasn't been removed from a body.
var/removal_time = -1
-/obj/item/organ/internal/body_egg/changeling_egg/mob_insert(mob/living/carbon/egg_owner, special = FALSE, movement_flags = DELETE_IF_REPLACED)
+/obj/item/organ/body_egg/changeling_egg/mob_insert(mob/living/carbon/egg_owner, special = FALSE, movement_flags = DELETE_IF_REPLACED)
. = ..()
hatch_time = world.time + (removal_time == -1 ? EGG_INCUBATION_TIME : (hatch_time - removal_time))
-/obj/item/organ/internal/body_egg/changeling_egg/mob_remove(mob/living/carbon/egg_owner, special, movement_flags)
+/obj/item/organ/body_egg/changeling_egg/mob_remove(mob/living/carbon/egg_owner, special, movement_flags)
. = ..()
removal_time = world.time
-/obj/item/organ/internal/body_egg/changeling_egg/egg_process(seconds_per_tick, times_fired)
+/obj/item/organ/body_egg/changeling_egg/egg_process(seconds_per_tick, times_fired)
if(owner && hatch_time <= world.time)
pop()
/// Once the egg is fully grown, we gib the host and spawn a monkey (with the changeling's player controlling it). Very descriptive proc name.
-/obj/item/organ/internal/body_egg/changeling_egg/proc/pop()
+/obj/item/organ/body_egg/changeling_egg/proc/pop()
var/mob/living/carbon/human/spawned_monkey = new(owner)
spawned_monkey.set_species(/datum/species/monkey)
diff --git a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm
index dec2fa6a76e16..52a5d371cf005 100644
--- a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm
+++ b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm
@@ -16,7 +16,7 @@
/datum/action/changeling/augmented_eyesight/on_purchase(mob/user) //The ability starts inactive, so we should be protected from flashes.
. = ..()
- var/obj/item/organ/internal/eyes/ling_eyes = user.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/ling_eyes = user.get_organ_slot(ORGAN_SLOT_EYES)
RegisterSignal(user, COMSIG_CARBON_GAIN_ORGAN, PROC_REF(eye_implanted))
RegisterSignal(user, COMSIG_CARBON_LOSE_ORGAN, PROC_REF(eye_removed))
if(!isnull(ling_eyes))
@@ -27,7 +27,7 @@
if(!istype(user))
return FALSE
- var/obj/item/organ/internal/eyes/ling_eyes = user.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/ling_eyes = user.get_organ_slot(ORGAN_SLOT_EYES)
if(isnull(ling_eyes))
user.balloon_alert(user, "no eyes!")
return FALSE
@@ -50,7 +50,7 @@
return TRUE
/datum/action/changeling/augmented_eyesight/Remove(mob/user)
- var/obj/item/organ/internal/eyes/ling_eyes = user.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/ling_eyes = user.get_organ_slot(ORGAN_SLOT_EYES)
if(!isnull(ling_eyes))
ling_eyes.flash_protect = initial(ling_eyes.flash_protect)
@@ -64,7 +64,7 @@
/datum/action/changeling/augmented_eyesight/proc/eye_implanted(mob/living/source, obj/item/organ/gained, special)
SIGNAL_HANDLER
- var/obj/item/organ/internal/eyes/ling_eyes = gained
+ var/obj/item/organ/eyes/ling_eyes = gained
if(!istype(ling_eyes))
return
if(active)
@@ -76,7 +76,7 @@
/datum/action/changeling/augmented_eyesight/proc/eye_removed(mob/living/source, obj/item/organ/removed, special)
SIGNAL_HANDLER
- var/obj/item/organ/internal/eyes/ling_eyes = removed
+ var/obj/item/organ/eyes/ling_eyes = removed
if(!istype(ling_eyes))
return
ling_eyes.flash_protect = initial(ling_eyes.flash_protect)
diff --git a/code/modules/antagonists/changeling/powers/darkness_adaptation.dm b/code/modules/antagonists/changeling/powers/darkness_adaptation.dm
index c33b36a785f38..bd498b584820d 100644
--- a/code/modules/antagonists/changeling/powers/darkness_adaptation.dm
+++ b/code/modules/antagonists/changeling/powers/darkness_adaptation.dm
@@ -37,7 +37,7 @@
animate(cling, color = COLOR_DARK, time = 3 SECONDS) // Darkens their overall appearance
var/datum/antagonist/changeling/changeling_data = cling.mind?.has_antag_datum(/datum/antagonist/changeling)
changeling_data?.chem_recharge_slowdown -= recharge_slowdown //Slows down chem regeneration
- var/obj/item/organ/internal/eyes/eyes = cling.get_organ_by_type(/obj/item/organ/internal/eyes)
+ var/obj/item/organ/eyes/eyes = cling.get_organ_by_type(/obj/item/organ/eyes)
if(!istype(eyes))
return
eyes.lighting_cutoff = LIGHTING_CUTOFF_MEDIUM // Adds barely usable, kinda shit night vision
@@ -53,7 +53,7 @@
animate(cling, color = null, time = 3 SECONDS)
var/datum/antagonist/changeling/changeling_data = cling.mind?.has_antag_datum(/datum/antagonist/changeling)
changeling_data?.chem_recharge_slowdown += recharge_slowdown
- var/obj/item/organ/internal/eyes/eyes = cling.get_organ_by_type(/obj/item/organ/internal/eyes)
+ var/obj/item/organ/eyes/eyes = cling.get_organ_by_type(/obj/item/organ/eyes)
if(!istype(eyes))
return
eyes.lighting_cutoff = LIGHTING_CUTOFF_VISIBLE
@@ -64,7 +64,7 @@
/datum/action/changeling/darkness_adaptation/proc/eye_implanted(mob/living/source, obj/item/organ/gained, special)
SIGNAL_HANDLER
- var/obj/item/organ/internal/eyes/eyes = gained
+ var/obj/item/organ/eyes/eyes = gained
if(!istype(eyes))
return
if(is_active)
@@ -76,7 +76,7 @@
/datum/action/changeling/darkness_adaptation/proc/eye_removed(mob/living/source, obj/item/organ/removed, special)
SIGNAL_HANDLER
- var/obj/item/organ/internal/eyes/eyes = removed
+ var/obj/item/organ/eyes/eyes = removed
if(!istype(eyes))
return
eyes.flash_protect = initial(eyes.flash_protect)
diff --git a/code/modules/antagonists/changeling/powers/headcrab.dm b/code/modules/antagonists/changeling/powers/headcrab.dm
index c4f2376f755a0..1af11d3ad15ef 100644
--- a/code/modules/antagonists/changeling/powers/headcrab.dm
+++ b/code/modules/antagonists/changeling/powers/headcrab.dm
@@ -22,7 +22,7 @@
explosion(user, light_impact_range = 2, adminlog = TRUE, explosion_cause = src)
for(var/mob/living/carbon/human/blinded_human in range(2, user))
- var/obj/item/organ/internal/eyes/eyes = blinded_human.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = blinded_human.get_organ_slot(ORGAN_SLOT_EYES)
if(!eyes || blinded_human.is_blind())
continue
to_chat(blinded_human, span_userdanger("You are blinded by a shower of blood!"))
diff --git a/code/modules/antagonists/changeling/powers/mmi_talk.dm b/code/modules/antagonists/changeling/powers/mmi_talk.dm
index 2fe90d0831816..ecd64890c422b 100644
--- a/code/modules/antagonists/changeling/powers/mmi_talk.dm
+++ b/code/modules/antagonists/changeling/powers/mmi_talk.dm
@@ -15,7 +15,7 @@
* Set when created via the ling decoy component.
* If the brain ends up being qdelled, this action will also be qdelled, and thus this ref is cleared.
*/
- VAR_FINAL/obj/item/organ/internal/brain/brain_ref
+ VAR_FINAL/obj/item/organ/brain/brain_ref
/// A map view of the area around the MMI.
VAR_FINAL/atom/movable/screen/map_view/mmi_view
diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm
index f6b42bf19f212..158b32df216f0 100644
--- a/code/modules/antagonists/changeling/powers/mutations.dm
+++ b/code/modules/antagonists/changeling/powers/mutations.dm
@@ -632,7 +632,7 @@
/obj/item/clothing/head/helmet/changeling_hivehead/attackby(obj/item/attacking_item, mob/user, params)
. = ..()
- if(!istype(attacking_item, /obj/item/organ/internal/monster_core/regenerative_core/legion) || !holds_reagents)
+ if(!istype(attacking_item, /obj/item/organ/monster_core/regenerative_core/legion) || !holds_reagents)
return
visible_message(span_boldwarning("As [user] shoves [attacking_item] into [src], [src] begins to mutate."))
var/mob/living/carbon/wearer = loc
diff --git a/code/modules/antagonists/changeling/powers/panacea.dm b/code/modules/antagonists/changeling/powers/panacea.dm
index 68689ee65d4dc..886417a61cdd2 100644
--- a/code/modules/antagonists/changeling/powers/panacea.dm
+++ b/code/modules/antagonists/changeling/powers/panacea.dm
@@ -12,9 +12,9 @@
to_chat(user, span_notice("We cleanse impurities from our form."))
..()
var/list/bad_organs = list(
- user.get_organ_by_type(/obj/item/organ/internal/body_egg),
- user.get_organ_by_type(/obj/item/organ/internal/legion_tumour),
- user.get_organ_by_type(/obj/item/organ/internal/zombie_infection),
+ user.get_organ_by_type(/obj/item/organ/body_egg),
+ user.get_organ_by_type(/obj/item/organ/legion_tumour),
+ user.get_organ_by_type(/obj/item/organ/zombie_infection),
)
for(var/o in bad_organs)
diff --git a/code/modules/antagonists/changeling/powers/shriek.dm b/code/modules/antagonists/changeling/powers/shriek.dm
index 8873ef73a49fe..b6d6f550d0522 100644
--- a/code/modules/antagonists/changeling/powers/shriek.dm
+++ b/code/modules/antagonists/changeling/powers/shriek.dm
@@ -18,7 +18,7 @@
if(iscarbon(M))
var/mob/living/carbon/C = M
if(!IS_CHANGELING(C))
- var/obj/item/organ/internal/ears/ears = C.get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = C.get_organ_slot(ORGAN_SLOT_EARS)
if(ears)
ears.adjustEarDamage(0, 30)
C.adjust_confusion(25 SECONDS)
diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm
index 3e1cb7276b7f1..739eb3ec2eba1 100644
--- a/code/modules/antagonists/changeling/powers/tiny_prick.dm
+++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm
@@ -234,7 +234,7 @@
dna_cost = 1
/datum/action/changeling/sting/blind/sting_action(mob/user, mob/living/carbon/target)
- var/obj/item/organ/internal/eyes/eyes = target.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = target.get_organ_slot(ORGAN_SLOT_EYES)
if(!eyes)
user.balloon_alert(user, "no eyes!")
return FALSE
diff --git a/code/modules/antagonists/clown_ops/clownop.dm b/code/modules/antagonists/clown_ops/clownop.dm
index 9866ee30ccf13..2fd2daa7489df 100644
--- a/code/modules/antagonists/clown_ops/clownop.dm
+++ b/code/modules/antagonists/clown_ops/clownop.dm
@@ -29,7 +29,7 @@
/datum/antagonist/nukeop/clownop/equip_op()
. = ..()
var/mob/living/current_mob = owner.current
- var/obj/item/organ/internal/liver/liver = current_mob.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = current_mob.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver)
ADD_TRAIT(liver, TRAIT_COMEDY_METABOLISM, CLOWNOP_TRAIT)
@@ -61,7 +61,7 @@
/datum/antagonist/nukeop/leader/clownop/equip_op()
. = ..()
var/mob/living/L = owner.current
- var/obj/item/organ/internal/liver/liver = L.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = L.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver)
ADD_TRAIT(liver, TRAIT_COMEDY_METABOLISM, CLOWNOP_TRAIT)
@@ -76,7 +76,7 @@
back = /obj/item/mod/control/pre_equipped/empty/syndicate/honkerative
uniform = /obj/item/clothing/under/syndicate
-/datum/outfit/clown_operative/post_equip(mob/living/carbon/human/H, visualsOnly)
+/datum/outfit/clown_operative/post_equip(mob/living/carbon/human/H, visuals_only)
var/obj/item/mod/module/armor_booster/booster = locate() in H.back
booster.active = TRUE
H.update_worn_back()
@@ -87,7 +87,7 @@
back = /obj/item/mod/control/pre_equipped/empty/syndicate/honkerative
uniform = /obj/item/clothing/under/syndicate
-/datum/outfit/clown_operative_elite/post_equip(mob/living/carbon/human/H, visualsOnly)
+/datum/outfit/clown_operative_elite/post_equip(mob/living/carbon/human/H, visuals_only)
var/obj/item/mod/module/armor_booster/booster = locate() in H.back
booster.active = TRUE
H.update_worn_back()
diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm
index ccfbf389700fe..150c61af29af6 100644
--- a/code/modules/antagonists/cult/cult_items.dm
+++ b/code/modules/antagonists/cult/cult_items.dm
@@ -120,19 +120,23 @@ Striking a noncultist, however, will tear their flesh."}
icon_state = "hauntedblade"
inhand_icon_state = "hauntedblade"
worn_icon_state = "hauntedblade"
- force = 35
- throwforce = 35
+ force = 30
+ throwforce = 25
block_chance = 55
wound_bonus = -25
bare_wound_bonus = 30
free_use = TRUE
light_color = COLOR_HERETIC_GREEN
- light_range = 4
+ light_range = 3
+ /// holder for the actual action when created.
+ var/list/datum/action/cooldown/spell/path_sword_actions
/// holder for the actual action when created.
- var/datum/action/cooldown/spell/path_wielder_action
+ var/list/datum/action/cooldown/spell/path_wielder_actions
var/mob/living/trapped_entity
/// The heretic path that the variable below uses to index abilities. Assigned when the heretic is ensouled.
var/heretic_path
+ /// If the blade is bound, it cannot utilize its abilities, but neither can its wielder. They must unbind it to use it to its full potential.
+ var/bound = TRUE
/// Nested static list used to index abilities and names.
var/static/list/heretic_paths_to_haunted_sword_abilities = list(
// Ash
@@ -150,7 +154,7 @@ Striking a noncultist, however, will tear their flesh."}
// Void
PATH_VOID = list(
WIELDER_SPELLS = list(/datum/action/cooldown/spell/pointed/void_phase),
- SWORD_SPELLS = list(/datum/action/cooldown/spell/cone/staggered/cone_of_cold/void),
+ SWORD_SPELLS = list(/datum/action/cooldown/spell/pointed/void_prison),
SWORD_PREFIX = "tenebrous",
),
// Blade
@@ -190,6 +194,146 @@ Striking a noncultist, however, will tear their flesh."}
SWORD_PREFIX = "stillborn", // lol loser
) ,
)
+ actions_types = list(/datum/action/item_action/haunted_blade)
+
+/obj/item/melee/cultblade/haunted/examine(mob/user)
+ . = ..()
+
+ var/examine_text = ""
+ if(bound)
+ examine_text = "[src] shines a dull, sickly green, the power emanating from it clearly bound by the runes on its blade. You could unbind it, and wield its fearsome power. But is it worth loosening the bindings of the spirit inside?"
+ else
+ examine_text = "[src] flares a bright and malicious pale lime shade. Someone has unbound the spirit within, and power now clearly resonates from inside the blade, barely restrained and brimming with fury. You may attempt to bind it once more, sealing the horror, or try to harness its strength as a blade."
+
+ . += span_cult(examine_text)
+
+/datum/action/item_action/haunted_blade
+ name = "Unseal Spirit" // img is of a chained shade
+ button_icon = 'icons/mob/actions/actions_cult.dmi'
+ button_icon_state = "spirit_sealed"
+
+/datum/action/item_action/haunted_blade/apply_button_icon(atom/movable/screen/movable/action_button/button, force)
+ var/obj/item/melee/cultblade/haunted/blade = target
+ if(istype(blade))
+ button_icon_state = "spirit_[blade.bound ? "sealed" : "unsealed"]"
+ name = "[blade.bound ? "Unseal" : "Seal"] Spirit"
+
+ return ..()
+
+/obj/item/melee/cultblade/haunted/ui_action_click(mob/living/user, actiontype)
+ if(DOING_INTERACTION_WITH_TARGET(user, src))
+ return // gtfo
+ if(bound)
+ unbind_blade(user)
+ return
+ if(user.mind?.holy_role)
+ on_priest_handle(user)
+ else if(IS_CULTIST_OR_CULTIST_MOB(user))
+ on_cultist_handle(user)
+ else if(IS_HERETIC_OR_MONSTER(user) || IS_LUNATIC(user))
+ on_heresy_handle(user)
+ else if(IS_WIZARD(user))
+ on_wizard_handle(user)
+ else
+ on_normie_handle(user)
+ return
+
+/obj/item/melee/cultblade/haunted/proc/on_priest_handle(mob/living/user, actiontype)
+ user.visible_message(span_cult_bold("You begin chanting the holy hymns of [GLOB.deity]..."),\
+ span_cult_bold("[user] begins chanting while holding [src] aloft..."))
+ if(!do_after(user, 6 SECONDS, src))
+ to_chat(user, span_notice("You were interrupted!"))
+ return
+ playsound(user, 'sound/effects/pray_chaplain.ogg',60,TRUE)
+ return TRUE
+
+/obj/item/melee/cultblade/haunted/proc/on_cultist_handle(mob/living/user, actiontype)
+ var/binding_implements = list(/obj/item/melee/cultblade/dagger, /obj/item/melee/sickly_blade/cursed)
+ if(!user.is_holding_item_of_types(binding_implements))
+ to_chat(user, span_notice("You need to hold a ritual dagger to bind [src]!"))
+ return
+
+ user.visible_message(span_cult_bold("You begin slicing open your palm on top of [src]..."),\
+ span_cult_bold("[user] begins slicing open [user.p_their()] palm on top of [src]..."))
+ if(!do_after(user, 6 SECONDS, src))
+ to_chat(user, span_notice("You were interrupted!"))
+ return
+ playsound(user, 'sound/items/weapons/slice.ogg', 30, TRUE)
+ return TRUE
+
+/obj/item/melee/cultblade/haunted/proc/on_heresy_handle(mob/living/user, actiontype)
+ // todo make the former a subtype of latter
+ var/binding_implements = list(/obj/item/clothing/neck/eldritch_amulet, /obj/item/clothing/neck/heretic_focus)
+ if(!user.is_holding_item_of_types(binding_implements))
+ to_chat(user, span_notice("You need to hold a focus to bind [src]!"))
+ return
+
+ user.visible_message(span_cult_bold("You channel the Mansus through your focus, empowering the sealing runes..."), span_cult_bold("[user] holds up their eldritch focus on top of [src] and begins concentrating..."))
+ if(!do_after(user, 6 SECONDS, src))
+ to_chat(user, span_notice("You were interrupted!"))
+ return
+ return TRUE
+
+/obj/item/melee/cultblade/haunted/proc/on_wizard_handle(mob/living/user, actiontype)
+ user.visible_message(span_cult_bold("You begin quickly and nimbly casting the sealing runes."), span_cult_bold("[user] begins tracing anti-light runes on [src]..."))
+ if(!do_after(user, 3 SECONDS, src))
+ to_chat(user, span_notice("You were interrupted!"))
+ return
+ return TRUE
+
+/obj/item/melee/cultblade/haunted/proc/on_normie_handle(mob/living/user, actiontype)
+ // todo make the former a subtype of latter
+ var/binding_implements = list(/obj/item/book/bible)
+ if(!user.is_holding_item_of_types(binding_implements))
+ to_chat(user, span_notice("You need to wield a bible to bind [src]!"))
+ return
+
+ var/passage = "[pick(GLOB.first_names_male)] [rand(1,9)]:[rand(1,25)]" // Space Bibles will have Alejandro 9:21 passages, as part of the Very New Testament.
+ user.visible_message(span_cult_bold("You start reading aloud the passage in [passage]..."), span_cult_bold("[user] starts reading aloud the passage in [passage]..."))
+ if(!do_after(user, 12 SECONDS, src))
+ to_chat(user, span_notice("You were interrupted!"))
+ return
+
+ rebind_blade(user)
+
+/obj/item/melee/cultblade/haunted/proc/unbind_blade(mob/user)
+ var/holup = tgui_alert(user, "Are you sure you wish to unseal the spirit within?", "Sealed Evil In A Jar", list("I need the power!", "Maybe not..."))
+ if(holup != "I need the power!")
+ return
+ to_chat(user, span_cult_bold("You start focusing on the power of the blade, letting it guide your fingers along the inscribed runes..."))
+ if(!do_after(user, 5 SECONDS, src))
+ to_chat(user, span_notice("You were interrupted!"))
+ return
+ visible_message(span_danger("[user] has unbound [src]!"))
+ bound = FALSE
+ for(var/datum/action/cooldown/spell/sword_spell as anything in path_sword_actions)
+ sword_spell.Grant(trapped_entity)
+ for(var/datum/action/cooldown/spell/wielder_spell as anything in path_wielder_actions)
+ wielder_spell.Grant(user)
+ free_use = TRUE
+ force += 5
+ armour_penetration += 10
+ light_range += 3
+ trapped_entity.update_mob_action_buttons()
+
+ playsound(src ,'sound/misc/insane_low_laugh.ogg', 200, TRUE) //quiet
+ binding_filters_update()
+
+/obj/item/melee/cultblade/haunted/proc/rebind_blade(mob/user)
+ visible_message(span_danger("[user] has bound [src]!"))
+ bound = TRUE
+ force -= 5
+ armour_penetration -= 10
+ free_use = FALSE // it's a cult blade and you sealed away the other power.
+ light_range -= 3
+ for(var/datum/action/cooldown/spell/sword_spell as anything in path_sword_actions)
+ sword_spell.Remove(trapped_entity)
+ for(var/datum/action/cooldown/spell/wielder_spell as anything in path_wielder_actions)
+ wielder_spell.Remove(user)
+ trapped_entity.update_mob_action_buttons()
+
+ playsound(src ,'sound/effects/hallucinations/wail.ogg', 20, TRUE) // add BOUND alert and UNBOUND
+ binding_filters_update()
/obj/item/melee/cultblade/haunted/Initialize(mapload, mob/soul_to_bind, mob/awakener, do_bind = TRUE)
. = ..()
@@ -198,6 +342,8 @@ Striking a noncultist, however, will tear their flesh."}
add_traits(list(TRAIT_CASTABLE_LOC, TRAIT_SPELLS_TRANSFER_TO_LOC), INNATE_TRAIT)
if(do_bind && !mapload)
bind_soul(soul_to_bind, awakener)
+ binding_filters_update()
+ addtimer(CALLBACK(src, PROC_REF(start_glow_loop)), rand(0.1 SECONDS, 1.9 SECONDS))
/obj/item/melee/cultblade/haunted/proc/bind_soul(mob/soul_to_bind, mob/awakener)
@@ -238,7 +384,6 @@ Striking a noncultist, however, will tear their flesh."}
var/datum/antagonist/soultrapped_heretic/bozo = new()
bozo.objectives |= copied_objectives
trapped_entity.mind.add_antag_datum(bozo)
- to_chat(trapped_entity, span_userdanger("You've been sacrificed to the Enemy, and trapped inside a haunted blade! While you cannot escape, you may help the Cult, your current wielder, or even pester everyone with what few abilities you kept."))
// Assigning the spells to give to the wielder and spirit.
// Let them cast the given spell.
@@ -252,28 +397,70 @@ Striking a noncultist, however, will tear their flesh."}
name = "[path_spells[SWORD_PREFIX]] [name]"
- // Granting the path spells. The sword spirit gains it outright, while it's just instanced for wielders to be added on pickup.
+ // Creating the path spells.
+ // The sword is created bound - so we do not grant it the spells just yet, but we still create and store them.
if(sword_spells)
for(var/datum/action/cooldown/spell/sword_spell as anything in sword_spells)
- sword_spell = new sword_spell(trapped_entity)
- sword_spell?.Grant(trapped_entity)
- sword_spell?.overlay_icon_state = "bg_cult_border" // for flavor, and also helps distinguish
-
+ var/datum/action/cooldown/spell/instanced_spell = new sword_spell(trapped_entity)
+ LAZYADD(path_sword_actions, instanced_spell)
+ instanced_spell.overlay_icon_state = "bg_cult_border" // for flavor, and also helps distinguish
if(wielder_spells)
for(var/datum/action/cooldown/spell/wielder_spell as anything in wielder_spells)
- path_wielder_action = new wielder_spell(src)
- wielder_spell?.overlay_icon_state = "bg_cult_border"
+ var/datum/action/cooldown/spell/instanced_spell = new wielder_spell(trapped_entity)
+ LAZYADD(path_wielder_actions, instanced_spell)
+ instanced_spell.overlay_icon_state = "bg_cult_border"
+
+ binding_filters_update()
/obj/item/melee/cultblade/haunted/equipped(mob/user, slot, initial)
. = ..()
- if(slot & ITEM_SLOT_HANDS)
- path_wielder_action?.Grant(user)
+ if((!(slot & ITEM_SLOT_HANDS)) || bound)
+ return
+ for(var/datum/action/cooldown/spell/wielder_spell in path_wielder_actions)
+ wielder_spell.Grant(user)
+ binding_filters_update()
/obj/item/melee/cultblade/haunted/dropped(mob/user, silent)
. = ..()
- path_wielder_action?.Remove(user)
+ for(var/datum/action/cooldown/spell/wielder_spell in path_wielder_actions)
+ wielder_spell.Remove(user)
+ binding_filters_update()
+
+/obj/item/melee/cultblade/haunted/proc/binding_filters_update(mob/user)
+
+ var/h_color = heretic_path ? GLOB.heretic_path_to_color[heretic_path] : "#FF00FF"
+
+ // on bound
+ if(bound)
+ add_filter("bind_glow", 2, list("type" = "outline", "color" = h_color, "size" = 0.1))
+ remove_filter("unbound_ray")
+ update_filters()
+ // on unbound
+ else
+ // we re-add this every time it's picked up or dropped
+ remove_filter("unbound_ray")
+ add_filter(name = "unbound_ray", priority = 1, params = list(
+ type = "rays",
+ size = 16,
+ color = COLOR_HERETIC_GREEN, // the sickly green of the heretic leaking through
+ density = 16,
+ ))
+ // because otherwise the animations stack and it looks ridiculous
+ var/ray_filter = get_filter("unbound_ray")
+ animate(ray_filter, offset = 100, time = 2 MINUTES, loop = -1, flags = ANIMATION_PARALLEL) // Absurdly long animate so nobody notices it hitching when it loops
+ animate(offset = 0, time = 2 MINUTES) // I sure hope duration of animate doesnt have any performance effect
+
+ update_filters()
+
+/obj/item/melee/cultblade/haunted/proc/start_glow_loop()
+ var/filter = get_filter("bind_glow")
+ if (!filter)
+ return
+
+ animate(filter, alpha = 110, time = 1.5 SECONDS, loop = -1)
+ animate(alpha = 40, time = 2.5 SECONDS)
#undef WIELDER_SPELLS
#undef SWORD_SPELLS
diff --git a/code/modules/antagonists/cult/cult_other.dm b/code/modules/antagonists/cult/cult_other.dm
index f9e1462a30efe..bbeec10ce17c0 100644
--- a/code/modules/antagonists/cult/cult_other.dm
+++ b/code/modules/antagonists/cult/cult_other.dm
@@ -7,7 +7,7 @@
shoes = /obj/item/clothing/shoes/cult/alt
r_hand = /obj/item/melee/blood_magic/stun
-/datum/outfit/cultist/post_equip(mob/living/carbon/human/equipped, visualsOnly)
+/datum/outfit/cultist/post_equip(mob/living/carbon/human/equipped, visuals_only)
equipped.eye_color_left = BLOODCULT_EYE
equipped.eye_color_right = BLOODCULT_EYE
equipped.update_body()
diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm
index 5aae2a6ccbc22..d2269c19dff0a 100644
--- a/code/modules/antagonists/cult/cult_structures.dm
+++ b/code/modules/antagonists/cult/cult_structures.dm
@@ -215,5 +215,5 @@
/obj/effect/gateway/singularity_act()
return
-/obj/effect/gateway/singularity_pull()
+/obj/effect/gateway/singularity_pull(atom/singularity, current_size)
return
diff --git a/code/modules/antagonists/cult/cult_turf_overlay.dm b/code/modules/antagonists/cult/cult_turf_overlay.dm
index e2324b5f933e0..df92d7aec90f0 100644
--- a/code/modules/antagonists/cult/cult_turf_overlay.dm
+++ b/code/modules/antagonists/cult/cult_turf_overlay.dm
@@ -15,7 +15,7 @@
/obj/effect/cult_turf/singularity_act()
return
-/obj/effect/cult_turf/singularity_pull()
+/obj/effect/cult_turf/singularity_pull(atom/singularity, current_size)
return
/obj/effect/cult_turf/Destroy()
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index e334b17e3603a..af7254119ddc5 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -1092,7 +1092,7 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0)
/mob/living/carbon/human/cult_ghost/get_organs_for_zone(zone, include_children)
. = ..()
- for(var/obj/item/organ/internal/brain/B in .) //they're not that smart, really
+ for(var/obj/item/organ/brain/B in .) //they're not that smart, really
. -= B
diff --git a/code/modules/antagonists/cult/sword_fling.dm b/code/modules/antagonists/cult/sword_fling.dm
index d4c1530f06b98..a82bbe36145d0 100644
--- a/code/modules/antagonists/cult/sword_fling.dm
+++ b/code/modules/antagonists/cult/sword_fling.dm
@@ -16,7 +16,7 @@
cast_range = 6
active_msg = "You ready yourself to attempt to leap!"
- var/obj/item/flinged_sword
+ var/obj/item/melee/cultblade/haunted/flinged_sword
/datum/action/cooldown/spell/pointed/sword_fling/New(Target, to_fling)
. = ..()
@@ -26,6 +26,11 @@
flinged_sword = null
. = ..()
+/datum/action/cooldown/spell/pointed/sword_fling/IsAvailable(feedback)
+ if(flinged_sword.bound)
+ return FALSE
+ return ..()
+
/datum/action/cooldown/spell/pointed/sword_fling/is_valid_target(atom/cast_on)
return isatom(cast_on)
@@ -34,23 +39,23 @@
var/atom/sword_loc = flinged_sword.loc
if(ismob(sword_loc))
var/mob/loccer = sword_loc
- var/resist_chance = 25
+ var/resist_chance = 20
var/fail_text = "You struggle, but [loccer] keeps [loccer.p_their()] grip on you!"
var/particle_to_spawn = null
if(IS_CULTIST_OR_CULTIST_MOB(loccer))
- resist_chance = 10 // your mastahs
+ resist_chance = 5 // your mastahs
fail_text = "You struggle, but [loccer]'s grip is unnaturally hard to resist!"
particle_to_spawn = /obj/effect/temp_visual/cult/sparks
if(IS_HERETIC_OR_MONSTER(loccer) || IS_LUNATIC(loccer))
- resist_chance = 15
+ resist_chance = 10
fail_text = "You struggle, but [loccer] deftly handles the grip movement."
particle_to_spawn = /obj/effect/temp_visual/eldritch_sparks
if(loccer.mind?.holy_role) // IS_PRIEST()
- resist_chance = 12
+ resist_chance = 6
fail_text = "You struggle, but [loccer]'s holy grip holds tight against your thrashing."
particle_to_spawn = /obj/effect/temp_visual/blessed
if(IS_WIZARD(loccer))
- resist_chance = 5 // magic master
+ resist_chance = 3 // magic master
fail_text = "You struggle, but [loccer]'s handle on magic easily neutralizes your movement."
particle_to_spawn = /obj/effect/particle_effect/sparks/electricity
diff --git a/code/modules/antagonists/fugitive/fugitive_outfits.dm b/code/modules/antagonists/fugitive/fugitive_outfits.dm
index e1530ba16eddd..5b73476a3afae 100644
--- a/code/modules/antagonists/fugitive/fugitive_outfits.dm
+++ b/code/modules/antagonists/fugitive/fugitive_outfits.dm
@@ -4,12 +4,12 @@
shoes = /obj/item/clothing/shoes/sneakers/orange
r_pocket = /obj/item/knife/shiv
-/datum/outfit/prisoner/post_equip(mob/living/carbon/human/prisoner, visualsOnly=FALSE)
+/datum/outfit/prisoner/post_equip(mob/living/carbon/human/prisoner, visuals_only=FALSE)
// This outfit is used by the assets SS, which is ran before the atoms SS
if(SSatoms.initialized == INITIALIZATION_INSSATOMS)
prisoner.w_uniform?.update_greyscale()
prisoner.update_worn_undersuit()
- if(visualsOnly)
+ if(visuals_only)
return
prisoner.fully_replace_character_name(null,"NTP #CC-0[rand(111,999)]") //same as the lavaland prisoner transport, but this time they are from CC, or CentCom
@@ -30,10 +30,10 @@
ears = /obj/item/radio/headset
glasses = /obj/item/clothing/glasses/regular/circle
-/datum/outfit/waldo/post_equip(mob/living/carbon/human/equipped_on, visualsOnly=FALSE)
+/datum/outfit/waldo/post_equip(mob/living/carbon/human/equipped_on, visuals_only=FALSE)
equipped_on.w_uniform?.update_greyscale()
equipped_on.update_worn_undersuit()
- if(visualsOnly)
+ if(visuals_only)
return
equipped_on.fully_replace_character_name(null, "Waldo")
equipped_on.eye_color_left = COLOR_BLACK
@@ -63,10 +63,10 @@
uniform = /obj/item/clothing/under/color/white
ears = /obj/item/radio/headset
-/datum/outfit/synthetic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/synthetic/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return
- var/obj/item/organ/internal/eyes/robotic/glow/eyes = new()
+ var/obj/item/organ/eyes/robotic/glow/eyes = new()
eyes.Insert(H, movement_flags = DELETE_IF_REPLACED)
/datum/outfit/invisible_man
@@ -82,7 +82,7 @@
/obj/item/reagent_containers/hypospray/medipen/invisibility = 3,
)
-/datum/outfit/invisible_man/post_equip(mob/living/carbon/human/equipee, visualsOnly)
+/datum/outfit/invisible_man/post_equip(mob/living/carbon/human/equipee, visuals_only)
. = ..()
var/obj/item/implant/camouflage/invisibility_implant = new(equipee)
diff --git a/code/modules/antagonists/fugitive/hunters/hunter_gear.dm b/code/modules/antagonists/fugitive/hunters/hunter_gear.dm
index 8e2b62c8187a4..523db5a321410 100644
--- a/code/modules/antagonists/fugitive/hunters/hunter_gear.dm
+++ b/code/modules/antagonists/fugitive/hunters/hunter_gear.dm
@@ -134,6 +134,7 @@
icon_state = "bouncy_castle"
anchored = TRUE
density = TRUE
+ layer = OBJ_LAYER
/obj/structure/bouncy_castle/Initialize(mapload, mob/gored)
. = ..()
diff --git a/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm b/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm
index 20eccc6977900..422c576ed9e31 100644
--- a/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm
+++ b/code/modules/antagonists/fugitive/hunters/hunter_outfits.dm
@@ -14,8 +14,8 @@
id = /obj/item/card/id/advanced/bountyhunter
id_trim = /datum/id_trim/bounty_hunter/police
-/datum/outfit/spacepol/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/spacepol/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/card/id/W = H.wear_id
W.registered_name = H.real_name
@@ -72,8 +72,8 @@
if(prob(50))
head = pick(alt_helmets)
-/datum/outfit/russian_hunter/post_equip(mob/living/carbon/human/equip_to, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/russian_hunter/post_equip(mob/living/carbon/human/equip_to, visuals_only = FALSE)
+ if(visuals_only)
return
if(istype(equip_to.wear_id, /obj/item/card/id))
@@ -118,8 +118,8 @@
/obj/item/ammo_casing/shotgun/incendiary/no_trail = 4,
)
-/datum/outfit/bountyarmor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/bountyarmor/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/card/id/W = H.wear_id
W.registered_name = H.real_name
@@ -143,8 +143,8 @@
/obj/item/ammo_casing/shotgun/incapacitate = 6
)
-/datum/outfit/bountyhook/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/bountyhook/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/card/id/W = H.wear_id
W.registered_name = H.real_name
@@ -231,7 +231,7 @@
box = /obj/item/storage/box/survival/syndie
implants = list(/obj/item/implant/explosive)
-/datum/outfit/mi13_hunter/pre_equip(mob/living/carbon/human/agent, visualsOnly = FALSE)
+/datum/outfit/mi13_hunter/pre_equip(mob/living/carbon/human/agent, visuals_only = FALSE)
backpack_contents = list()
backpack_contents += pick_weight(list(/obj/item/ammo_box/magazine/m9mm = 80,
/obj/item/ammo_box/magazine/m9mm/hp = 10,
@@ -253,8 +253,8 @@
/obj/item/gun/ballistic/automatic/pistol/clandestine/fisher = 10,
))
-/datum/outfit/mi13_hunter/post_equip(mob/living/carbon/human/agent, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/mi13_hunter/post_equip(mob/living/carbon/human/agent, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/card/id/wearing = agent.wear_id
wearing.registered_name = agent.real_name
diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm
index d6e21bed03bea..2f2122400b878 100644
--- a/code/modules/antagonists/heretic/heretic_antag.dm
+++ b/code/modules/antagonists/heretic/heretic_antag.dm
@@ -74,18 +74,6 @@
PATH_MOON = "node_moon",
)
- var/static/list/path_to_rune_color = list(
- PATH_START = COLOR_LIME,
- PATH_RUST = COLOR_CARGO_BROWN,
- PATH_FLESH = COLOR_SOFT_RED,
- PATH_ASH = COLOR_VIVID_RED,
- PATH_VOID = COLOR_CYAN,
- PATH_BLADE = COLOR_SILVER,
- PATH_COSMIC = COLOR_PURPLE,
- PATH_LOCK = COLOR_YELLOW,
- PATH_MOON = COLOR_BLUE_LIGHT,
- )
-
/// List that keeps track of which items have been gifted to the heretic after a cultist was sacrificed. Used to alter drop chances to reduce dupes.
var/list/unlocked_heretic_items = list(
/obj/item/melee/sickly_blade/cursed = 0,
@@ -426,7 +414,7 @@
/datum/antagonist/heretic/proc/draw_rune(mob/living/user, turf/target_turf, drawing_time = 20 SECONDS, additional_checks)
drawing_rune = TRUE
- var/rune_colour = path_to_rune_color[heretic_path]
+ var/rune_colour = GLOB.heretic_path_to_color[heretic_path]
target_turf.balloon_alert(user, "drawing rune...")
var/obj/effect/temp_visual/drawing_heretic_rune/drawing_effect
if (drawing_time < (10 SECONDS))
diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm
index fcdb1f1945828..79c7197df40fd 100644
--- a/code/modules/antagonists/heretic/heretic_knowledge.dm
+++ b/code/modules/antagonists/heretic/heretic_knowledge.dm
@@ -615,15 +615,15 @@
/datum/heretic_knowledge/knowledge_ritual/New()
. = ..()
var/static/list/potential_organs = list(
- /obj/item/organ/internal/appendix,
- /obj/item/organ/external/tail,
- /obj/item/organ/internal/eyes,
- /obj/item/organ/internal/tongue,
- /obj/item/organ/internal/ears,
- /obj/item/organ/internal/heart,
- /obj/item/organ/internal/liver,
- /obj/item/organ/internal/stomach,
- /obj/item/organ/internal/lungs,
+ /obj/item/organ/appendix,
+ /obj/item/organ/tail,
+ /obj/item/organ/eyes,
+ /obj/item/organ/tongue,
+ /obj/item/organ/ears,
+ /obj/item/organ/heart,
+ /obj/item/organ/liver,
+ /obj/item/organ/stomach,
+ /obj/item/organ/lungs,
)
var/static/list/potential_easy_items = list(
diff --git a/code/modules/antagonists/heretic/items/corrupted_organs.dm b/code/modules/antagonists/heretic/items/corrupted_organs.dm
index 335279c9553a6..fec25094bb782 100644
--- a/code/modules/antagonists/heretic/items/corrupted_organs.dm
+++ b/code/modules/antagonists/heretic/items/corrupted_organs.dm
@@ -1,17 +1,17 @@
/// Renders you unable to see people who were heretics at the time that this organ is gained
-/obj/item/organ/internal/eyes/corrupt
+/obj/item/organ/eyes/corrupt
name = "corrupt orbs"
desc = "These eyes have seen something they shouldn't have."
organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS
/// The override images we are applying
var/list/hallucinations
-/obj/item/organ/internal/eyes/corrupt/Initialize(mapload)
+/obj/item/organ/eyes/corrupt/Initialize(mapload)
. = ..()
AddElement(/datum/element/corrupted_organ)
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their eyes have wide dilated pupils, and no iris. Something is moving in the darkness.", BODY_ZONE_PRECISE_EYES)
-/obj/item/organ/internal/eyes/corrupt/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/eyes/corrupt/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
. = ..()
if (!organ_owner.client)
return
@@ -28,7 +28,7 @@
if (LAZYLEN(hallucinations))
organ_owner.client.images |= hallucinations
-/obj/item/organ/internal/eyes/corrupt/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/eyes/corrupt/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
if (!LAZYLEN(hallucinations))
return
@@ -37,26 +37,26 @@
/// Sometimes speak in incomprehensible tongues
-/obj/item/organ/internal/tongue/corrupt
+/obj/item/organ/tongue/corrupt
name = "corrupt tongue"
desc = "This one tells only lies."
organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS
-/obj/item/organ/internal/tongue/corrupt/Initialize(mapload)
+/obj/item/organ/tongue/corrupt/Initialize(mapload)
. = ..()
AddElement(/datum/element/corrupted_organ)
AddElement(/datum/element/noticable_organ, "The inside of %PRONOUN_Their mouth is full of stars.", BODY_ZONE_PRECISE_MOUTH)
-/obj/item/organ/internal/tongue/corrupt/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/tongue/corrupt/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
. = ..()
RegisterSignal(organ_owner, COMSIG_MOB_SAY, PROC_REF(on_spoken))
-/obj/item/organ/internal/tongue/corrupt/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/tongue/corrupt/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
UnregisterSignal(organ_owner, COMSIG_MOB_SAY)
/// When the mob speaks, sometimes put it in a different language
-/obj/item/organ/internal/tongue/corrupt/proc/on_spoken(mob/living/organ_owner, list/speech_args)
+/obj/item/organ/tongue/corrupt/proc/on_spoken(mob/living/organ_owner, list/speech_args)
SIGNAL_HANDLER
if (organ_owner.has_reagent(/datum/reagent/water/holywater) || prob(60))
return
@@ -64,7 +64,7 @@
/// Randomly secretes alcohol or hallucinogens when you're drinking something
-/obj/item/organ/internal/liver/corrupt
+/obj/item/organ/liver/corrupt
name = "corrupt liver"
desc = "After what you've seen you could really go for a drink."
organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS
@@ -83,20 +83,20 @@
/datum/reagent/drug/mushroomhallucinogen,
)
-/obj/item/organ/internal/liver/corrupt/Initialize(mapload)
+/obj/item/organ/liver/corrupt/Initialize(mapload)
. = ..()
AddElement(/datum/element/corrupted_organ)
-/obj/item/organ/internal/liver/corrupt/on_mob_insert(mob/living/carbon/organ_owner, special)
+/obj/item/organ/liver/corrupt/on_mob_insert(mob/living/carbon/organ_owner, special)
. = ..()
RegisterSignal(organ_owner, COMSIG_ATOM_EXPOSE_REAGENTS, PROC_REF(on_drank))
-/obj/item/organ/internal/liver/corrupt/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/liver/corrupt/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
UnregisterSignal(organ_owner, COMSIG_ATOM_EXPOSE_REAGENTS)
/// If we drank something, add a little extra
-/obj/item/organ/internal/liver/corrupt/proc/on_drank(atom/source, list/reagents, datum/reagents/source_reagents, methods)
+/obj/item/organ/liver/corrupt/proc/on_drank(atom/source, list/reagents, datum/reagents/source_reagents, methods)
SIGNAL_HANDLER
if (!(methods & INGEST))
return
@@ -108,7 +108,7 @@
/// Rapidly become hungry if you are not digesting blood
-/obj/item/organ/internal/stomach/corrupt
+/obj/item/organ/stomach/corrupt
name = "corrupt stomach"
desc = "This parasite demands an unwholesome diet in order to be satisfied."
organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS
@@ -119,21 +119,21 @@
/// How long until we prompt the player to drink blood again?
COOLDOWN_DECLARE(message_cooldown)
-/obj/item/organ/internal/stomach/corrupt/Initialize(mapload)
+/obj/item/organ/stomach/corrupt/Initialize(mapload)
. = ..()
AddElement(/datum/element/corrupted_organ)
AddElement(/datum/element/noticable_organ, "%PRONOUN_They %PRONOUN_have an unhealthy pallor.")
-/obj/item/organ/internal/stomach/corrupt/on_mob_insert(mob/living/carbon/organ_owner, special)
+/obj/item/organ/stomach/corrupt/on_mob_insert(mob/living/carbon/organ_owner, special)
. = ..()
RegisterSignal(organ_owner, COMSIG_ATOM_EXPOSE_REAGENTS, PROC_REF(on_drank))
-/obj/item/organ/internal/stomach/corrupt/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/stomach/corrupt/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
UnregisterSignal(organ_owner, COMSIG_ATOM_EXPOSE_REAGENTS)
/// Check if we drank a little blood
-/obj/item/organ/internal/stomach/corrupt/proc/on_drank(atom/source, list/reagents, datum/reagents/source_reagents, methods)
+/obj/item/organ/stomach/corrupt/proc/on_drank(atom/source, list/reagents, datum/reagents/source_reagents, methods)
SIGNAL_HANDLER
if (!(methods & INGEST))
return
@@ -148,7 +148,7 @@
deltimer(thirst_timer)
thirst_timer = addtimer(VARSET_CALLBACK(src, thirst_satiated, FALSE), 3 MINUTES, TIMER_STOPPABLE | TIMER_DELETE_ME)
-/obj/item/organ/internal/stomach/corrupt/handle_hunger(mob/living/carbon/human/human, seconds_per_tick, times_fired)
+/obj/item/organ/stomach/corrupt/handle_hunger(mob/living/carbon/human/human, seconds_per_tick, times_fired)
if (thirst_satiated || human.has_reagent(/datum/reagent/water/holywater))
return ..()
@@ -174,18 +174,18 @@
/// Occasionally bombards you with spooky hands and lets everyone hear your pulse.
-/obj/item/organ/internal/heart/corrupt
+/obj/item/organ/heart/corrupt
name = "corrupt heart"
desc = "What corruption is this spreading along with the blood?"
organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS
/// How long until the next heart?
COOLDOWN_DECLARE(hand_cooldown)
-/obj/item/organ/internal/heart/corrupt/Initialize(mapload)
+/obj/item/organ/heart/corrupt/Initialize(mapload)
. = ..()
AddElement(/datum/element/corrupted_organ)
-/obj/item/organ/internal/heart/corrupt/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/heart/corrupt/on_life(seconds_per_tick, times_fired)
. = ..()
if (!COOLDOWN_FINISHED(src, hand_cooldown) || IS_IN_MANSUS(owner) || !owner.needs_heart() || !is_beating() || owner.has_reagent(/datum/reagent/water/holywater))
return
@@ -194,7 +194,7 @@
/// Sometimes cough out some kind of dangerous gas
-/obj/item/organ/internal/lungs/corrupt
+/obj/item/organ/lungs/corrupt
name = "corrupt lungs"
desc = "Some things SHOULD be drowned in tar."
organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS
@@ -209,11 +209,11 @@
/datum/gas/plasma = 20,
)
-/obj/item/organ/internal/lungs/corrupt/Initialize(mapload)
+/obj/item/organ/lungs/corrupt/Initialize(mapload)
. = ..()
AddElement(/datum/element/corrupted_organ)
-/obj/item/organ/internal/lungs/corrupt/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/breather)
+/obj/item/organ/lungs/corrupt/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/breather)
. = ..()
if (!. || IS_IN_MANSUS(owner) || breather.has_reagent(/datum/reagent/water/holywater) || !prob(cough_chance))
return
@@ -229,19 +229,19 @@
/// It's full of worms
-/obj/item/organ/internal/appendix/corrupt
+/obj/item/organ/appendix/corrupt
name = "corrupt appendix"
desc = "What kind of dark, cosmic force is even going to bother to corrupt an appendix?"
organ_flags = parent_type::organ_flags | ORGAN_HAZARDOUS
/// How likely are we to spawn worms?
var/worm_chance = 2
-/obj/item/organ/internal/appendix/corrupt/Initialize(mapload)
+/obj/item/organ/appendix/corrupt/Initialize(mapload)
. = ..()
AddElement(/datum/element/corrupted_organ)
AddElement(/datum/element/noticable_organ, "%PRONOUN_Their abdomen is distended... and wiggling.", BODY_ZONE_PRECISE_GROIN)
-/obj/item/organ/internal/appendix/corrupt/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/appendix/corrupt/on_life(seconds_per_tick, times_fired)
. = ..()
if (owner.stat != CONSCIOUS || owner.has_reagent(/datum/reagent/water/holywater) || IS_IN_MANSUS(owner) || !SPT_PROB(worm_chance, seconds_per_tick))
return
diff --git a/code/modules/antagonists/heretic/items/eldritch_painting.dm b/code/modules/antagonists/heretic/items/eldritch_painting.dm
index 3e9d3675b1351..0cbe1d1117b49 100644
--- a/code/modules/antagonists/heretic/items/eldritch_painting.dm
+++ b/code/modules/antagonists/heretic/items/eldritch_painting.dm
@@ -129,14 +129,14 @@
// A list made of the organs and bodyparts the heretic can get
var/static/list/random_bodypart_or_organ = list(
- /obj/item/organ/internal/brain,
- /obj/item/organ/internal/lungs,
- /obj/item/organ/internal/eyes,
- /obj/item/organ/internal/ears,
- /obj/item/organ/internal/heart,
- /obj/item/organ/internal/liver,
- /obj/item/organ/internal/stomach,
- /obj/item/organ/internal/appendix,
+ /obj/item/organ/brain,
+ /obj/item/organ/lungs,
+ /obj/item/organ/eyes,
+ /obj/item/organ/ears,
+ /obj/item/organ/heart,
+ /obj/item/organ/liver,
+ /obj/item/organ/stomach,
+ /obj/item/organ/appendix,
/obj/item/bodypart/arm/left,
/obj/item/bodypart/arm/right,
/obj/item/bodypart/leg/left,
diff --git a/code/modules/antagonists/heretic/items/keyring.dm b/code/modules/antagonists/heretic/items/keyring.dm
index c0df68ec7cc3f..a37b55c17f3fb 100644
--- a/code/modules/antagonists/heretic/items/keyring.dm
+++ b/code/modules/antagonists/heretic/items/keyring.dm
@@ -55,6 +55,10 @@
qdel(src)
return
+ if(SSmapping.level_trait(z, ZTRAIT_NOPHASE) || SSmapping.level_trait(destination.z, ZTRAIT_NOPHASE))
+ qdel(src)
+ return
+
//get it?
var/obj/machinery/door/doorstination = (inverted ? !IS_HERETIC_OR_MONSTER(teleportee) : IS_HERETIC_OR_MONSTER(teleportee)) ? destination.our_airlock : find_random_airlock()
if(!do_teleport(teleportee, get_turf(doorstination), channel = TELEPORT_CHANNEL_MAGIC))
@@ -74,6 +78,9 @@
continue
if(airlock.loc == loc)
continue
+ var/area/airlock_area = get_area(airlock)
+ if(airlock_area.area_flags & NOTELEPORT)
+ continue
possible_destinations += airlock
return pick(possible_destinations)
@@ -179,6 +186,8 @@
return ITEM_INTERACT_SUCCESS
if(!istype(target, /obj/machinery/door))
return NONE
+ if(SSmapping.level_trait(target.z, ZTRAIT_NOPHASE))
+ return NONE
var/reference_resolved = link?.resolve()
if(reference_resolved == target)
return ITEM_INTERACT_BLOCKING
diff --git a/code/modules/antagonists/heretic/knowledge/ash_lore.dm b/code/modules/antagonists/heretic/knowledge/ash_lore.dm
index 9384a9af4b9d8..d950de44a34d2 100644
--- a/code/modules/antagonists/heretic/knowledge/ash_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/ash_lore.dm
@@ -142,7 +142,7 @@
/datum/heretic_knowledge/curse/paralysis,
)
required_atoms = list(
- /obj/item/organ/internal/liver = 1,
+ /obj/item/organ/liver = 1,
/obj/item/melee/baton/security = 1, // Technically means a cattleprod is valid
/obj/item/clothing/mask = 1,
/obj/item/flashlight/flare/candle = 4,
diff --git a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm
index c0fd2b7bbe381..47db297042331 100644
--- a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm
@@ -252,7 +252,7 @@
/datum/heretic_knowledge/spell/opening_blast,
)
required_atoms = list(
- /obj/item/organ/internal/eyes = 1,
+ /obj/item/organ/eyes = 1,
/obj/effect/decal/cleanable/blood = 1,
/obj/item/bodypart/arm/left = 1,
)
@@ -295,9 +295,9 @@
/datum/heretic_knowledge/spell/cleave,
)
required_atoms = list(
- /obj/item/organ/external/tail = 1,
- /obj/item/organ/internal/stomach = 1,
- /obj/item/organ/internal/tongue = 1,
+ /obj/item/organ/tail = 1,
+ /obj/item/organ/stomach = 1,
+ /obj/item/organ/tongue = 1,
/obj/item/pen = 1,
/obj/item/paper = 1,
)
diff --git a/code/modules/antagonists/heretic/knowledge/lock_lore.dm b/code/modules/antagonists/heretic/knowledge/lock_lore.dm
index ea0b609ef5c13..00946bea682d8 100644
--- a/code/modules/antagonists/heretic/knowledge/lock_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/lock_lore.dm
@@ -76,10 +76,12 @@
if(ismecha(target))
var/obj/vehicle/sealed/mecha/mecha = target
mecha.dna_lock = null
+ mecha.mecha_flags &= ~ID_LOCK_ON
for(var/mob/living/occupant as anything in mecha.occupants)
if(isAI(occupant))
continue
mecha.mob_exit(occupant, randomstep = TRUE)
+ occupant.Paralyze(5 SECONDS)
else if(istype(target,/obj/machinery/door/airlock))
var/obj/machinery/door/airlock/door = target
door.unbolt()
diff --git a/code/modules/antagonists/heretic/knowledge/moon_lore.dm b/code/modules/antagonists/heretic/knowledge/moon_lore.dm
index b23ed148611b6..b30a6b19ce259 100644
--- a/code/modules/antagonists/heretic/knowledge/moon_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/moon_lore.dm
@@ -130,7 +130,7 @@
/datum/heretic_knowledge/painting,
)
required_atoms = list(
- /obj/item/organ/internal/heart = 1,
+ /obj/item/organ/heart = 1,
/obj/item/stack/sheet/glass = 2,
/obj/item/clothing/neck/tie = 1,
)
@@ -216,19 +216,23 @@
user.mind.add_antag_datum(/datum/antagonist/lunatic/master)
RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life))
- // Roughly 1/5th of the station will rise up as lunatics to the heretic
- for (var/mob/living/carbon/human/crewmate as anything in GLOB.human_list)
- // How many lunatics we have
- var/amount_of_lunatics = 0
- // Where the crewmate is, used to check their z-level
+ var/amount_of_lunatics = 0
+ var/list/lunatic_candidates = list()
+ for(var/mob/living/carbon/human/crewmate as anything in shuffle(GLOB.human_list))
+ if(QDELETED(crewmate) || isnull(crewmate.client) || isnull(crewmate.mind) || crewmate.stat != CONSCIOUS)
+ continue
var/turf/crewmate_turf = get_turf(crewmate)
var/crewmate_z = crewmate_turf?.z
- if(isnull(crewmate.mind))
- continue
- if(crewmate.stat != CONSCIOUS)
- continue
if(!is_station_level(crewmate_z))
continue
+ lunatic_candidates += crewmate
+
+ // Roughly 1/5th of the station will rise up as lunatics to the heretic.
+ // We use either the (locked) manifest for the maximum, or the amount of candidates, whichever is larger.
+ // If there's more eligible humans than crew, more power to them I guess.
+ var/max_lunatics = ceil(max(length(GLOB.manifest.locked), length(lunatic_candidates)) * 0.2)
+
+ for(var/mob/living/carbon/human/crewmate as anything in lunatic_candidates)
// Heretics, lunatics and monsters shouldn't become lunatics because they either have a master or have a mansus grasp
if(IS_HERETIC_OR_MONSTER(crewmate))
to_chat(crewmate, span_boldwarning("[user]'s rise is influencing those who are weak willed. Their minds shall rend." ))
@@ -237,12 +241,12 @@
if(HAS_MIND_TRAIT(crewmate, TRAIT_UNCONVERTABLE) || crewmate.can_block_magic(MAGIC_RESISTANCE))
to_chat(crewmate, span_boldwarning("You feel shielded from something." ))
continue
- if(amount_of_lunatics > length(GLOB.human_list) * 0.2)
- to_chat(crewmate, span_boldwarning("You feel uneasy, as if for a brief moment something was gazing at you." ))
+ if(amount_of_lunatics > max_lunatics)
+ to_chat(crewmate, span_boldwarning("You feel uneasy, as if for a brief moment something was gazing at you."))
continue
var/datum/antagonist/lunatic/lunatic = crewmate.mind.add_antag_datum(/datum/antagonist/lunatic)
lunatic.set_master(user.mind, user)
- var/obj/item/clothing/neck/heretic_focus/moon_amulet/amulet = new(crewmate_turf)
+ var/obj/item/clothing/neck/heretic_focus/moon_amulet/amulet = new(crewmate.drop_location())
var/static/list/slots = list(
"neck" = ITEM_SLOT_NECK,
"hands" = ITEM_SLOT_HANDS,
@@ -252,7 +256,7 @@
)
crewmate.equip_in_one_of_slots(amulet, slots, qdel_on_fail = FALSE)
crewmate.emote("laugh")
- amount_of_lunatics += 1
+ amount_of_lunatics++
/datum/heretic_knowledge/ultimate/moon_final/proc/on_life(mob/living/source, seconds_per_tick, times_fired)
var/obj/effect/moon_effect = /obj/effect/temp_visual/moon_ringleader
diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_curse.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_curse.dm
index 87086de6e0024..782ec6ec55dc2 100644
--- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_curse.dm
+++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_curse.dm
@@ -68,15 +68,15 @@
return
var/list/removable_organs = list()
- for(var/obj/item/organ/internal/bodypart_organ in organ_storage.contents)
- if(bodypart_organ.organ_flags & ORGAN_UNREMOVABLE)
+ for(var/obj/item/organ/bodypart_organ in organ_storage.contents)
+ if(bodypart_organ.organ_flags & (ORGAN_EXTERNAL|ORGAN_UNREMOVABLE))
continue
removable_organs += bodypart_organ
if (!length(removable_organs))
return // This one is a little more possible but they're probably already in pretty bad shape by this point
- var/obj/item/organ/internal/removing_organ = pick(removable_organs)
+ var/obj/item/organ/removing_organ = pick(removable_organs)
if (carbon_owner.vomit(vomit_flags = VOMIT_CATEGORY_BLOOD))
carbon_owner.visible_message(span_boldwarning("[carbon_owner] vomits out [carbon_owner.p_their()] [removing_organ]"))
diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
index 65e6b6b2470e7..3a5e84e75bca7 100644
--- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
+++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
@@ -31,13 +31,13 @@
var/list/return_timers
/// Evil organs we can put in people
var/static/list/grantable_organs = list(
- /obj/item/organ/internal/appendix/corrupt,
- /obj/item/organ/internal/eyes/corrupt,
- /obj/item/organ/internal/heart/corrupt,
- /obj/item/organ/internal/liver/corrupt,
- /obj/item/organ/internal/lungs/corrupt,
- /obj/item/organ/internal/stomach/corrupt,
- /obj/item/organ/internal/tongue/corrupt,
+ /obj/item/organ/appendix/corrupt,
+ /obj/item/organ/eyes/corrupt,
+ /obj/item/organ/heart/corrupt,
+ /obj/item/organ/liver/corrupt,
+ /obj/item/organ/lungs/corrupt,
+ /obj/item/organ/stomach/corrupt,
+ /obj/item/organ/tongue/corrupt,
)
/datum/heretic_knowledge/hunt_and_sacrifice/Destroy(force)
@@ -415,7 +415,7 @@
/datum/heretic_knowledge/hunt_and_sacrifice/proc/curse_organs(mob/living/carbon/human/sac_target)
var/usable_organs = grantable_organs.Copy()
if (isplasmaman(sac_target))
- usable_organs -= /obj/item/organ/internal/lungs/corrupt // Their lungs are already more cursed than anything I could give them
+ usable_organs -= /obj/item/organ/lungs/corrupt // Their lungs are already more cursed than anything I could give them
var/total_implant = rand(2, 4)
@@ -423,7 +423,7 @@
if (!length(usable_organs))
return
var/organ_path = pick_n_take(usable_organs)
- var/obj/item/organ/internal/to_give = new organ_path
+ var/obj/item/organ/to_give = new organ_path
to_give.Insert(sac_target)
new /obj/effect/gibspawner/human/bodypartless(get_turf(sac_target))
diff --git a/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm b/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm
index 3ed3f110a802a..90a51dcccb068 100644
--- a/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm
+++ b/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm
@@ -9,7 +9,7 @@
/datum/heretic_knowledge/spell/moon_smile,
)
required_atoms = list(
- /obj/item/organ/internal/eyes = 1,
+ /obj/item/organ/eyes = 1,
/obj/item/shard = 1,
/obj/item/flashlight/flare/candle = 1,
)
diff --git a/code/modules/antagonists/heretic/knowledge/side_cosmos_ash.dm b/code/modules/antagonists/heretic/knowledge/side_cosmos_ash.dm
index 1a08236aee64d..7b7bdddb19ac8 100644
--- a/code/modules/antagonists/heretic/knowledge/side_cosmos_ash.dm
+++ b/code/modules/antagonists/heretic/knowledge/side_cosmos_ash.dm
@@ -12,7 +12,7 @@
)
required_atoms = list(
/obj/effect/decal/cleanable/ash = 1,
- /obj/item/organ/internal/liver = 1,
+ /obj/item/organ/liver = 1,
/obj/item/stack/sheet/mineral/plasma = 1,
)
mob_to_summon = /mob/living/basic/heretic_summon/fire_shark
diff --git a/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm b/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm
index 1e265b974980f..cb719d163d5c2 100644
--- a/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm
+++ b/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm
@@ -27,7 +27,7 @@
/datum/heretic_knowledge/moon_amulet,
)
required_atoms = list(
- /obj/item/organ/internal/lungs = 1,
+ /obj/item/organ/lungs = 1,
/obj/item/stack/rods = 3,
/obj/item/storage/belt = 1,
)
@@ -62,11 +62,11 @@
depth = 8
/datum/heretic_knowledge/painting/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc)
- if(locate(/obj/item/organ/internal/eyes) in atoms)
+ if(locate(/obj/item/organ/eyes) in atoms)
src.result_atoms = list(/obj/item/wallframe/painting/eldritch/weeping)
src.required_atoms = list(
/obj/item/canvas = 1,
- /obj/item/organ/internal/eyes = 1,
+ /obj/item/organ/eyes = 1,
)
return TRUE
diff --git a/code/modules/antagonists/heretic/knowledge/side_rust_cosmos.dm b/code/modules/antagonists/heretic/knowledge/side_rust_cosmos.dm
index 0a4f7fbe86a1c..d4e5d465125f1 100644
--- a/code/modules/antagonists/heretic/knowledge/side_rust_cosmos.dm
+++ b/code/modules/antagonists/heretic/knowledge/side_rust_cosmos.dm
@@ -60,7 +60,7 @@
required_atoms = list(
/obj/item/wirecutters = 1,
/obj/effect/decal/cleanable/vomit = 1,
- /obj/item/organ/internal/heart = 1,
+ /obj/item/organ/heart = 1,
)
duration = 0.5 MINUTES
duration_modifier = 4
diff --git a/code/modules/antagonists/heretic/knowledge/side_void_blade.dm b/code/modules/antagonists/heretic/knowledge/side_void_blade.dm
index 56945262e3cb0..17eb87affbaf3 100644
--- a/code/modules/antagonists/heretic/knowledge/side_void_blade.dm
+++ b/code/modules/antagonists/heretic/knowledge/side_void_blade.dm
@@ -162,7 +162,7 @@
/obj/item/stack/sheet/mineral/titanium = 5,
/obj/item/clothing/suit/armor = 1,
/obj/item/assembly/flash = 1,
- /obj/item/organ/internal/lungs = 1,
+ /obj/item/organ/lungs = 1,
)
cost = 1
route = PATH_SIDE
diff --git a/code/modules/antagonists/heretic/knowledge/starting_lore.dm b/code/modules/antagonists/heretic/knowledge/starting_lore.dm
index 2b5186bb55019..a4560058db818 100644
--- a/code/modules/antagonists/heretic/knowledge/starting_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/starting_lore.dm
@@ -52,7 +52,7 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge())
research_tree_icon_state = "living_heart"
research_tree_icon_frame = 1
/// The typepath of the organ type required for our heart.
- var/required_organ_type = /obj/item/organ/internal/heart
+ var/required_organ_type = /obj/item/organ/heart
/datum/heretic_knowledge/living_heart/on_research(mob/user, datum/antagonist/heretic/our_heretic)
. = ..()
@@ -65,9 +65,9 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge())
// If a heretic is made from a species without a heart, we need to find a backup.
if(!where_to_put_our_heart)
var/static/list/backup_organs = list(
- ORGAN_SLOT_LUNGS = /obj/item/organ/internal/lungs,
- ORGAN_SLOT_LIVER = /obj/item/organ/internal/liver,
- ORGAN_SLOT_STOMACH = /obj/item/organ/internal/stomach,
+ ORGAN_SLOT_LUNGS = /obj/item/organ/lungs,
+ ORGAN_SLOT_LIVER = /obj/item/organ/liver,
+ ORGAN_SLOT_STOMACH = /obj/item/organ/stomach,
)
for(var/backup_slot in backup_organs)
@@ -201,7 +201,7 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge())
desc = "Allows you to transmute a sheet of glass and a pair of eyes to create an Amber Focus. \
A focus must be worn in order to cast more advanced spells."
required_atoms = list(
- /obj/item/organ/internal/eyes = 1,
+ /obj/item/organ/eyes = 1,
/obj/item/stack/sheet/glass = 1,
)
result_atoms = list(/obj/item/clothing/neck/heretic_focus)
diff --git a/code/modules/antagonists/heretic/knowledge/void_lore.dm b/code/modules/antagonists/heretic/knowledge/void_lore.dm
index 6f0f006842d89..04612a506f3c8 100644
--- a/code/modules/antagonists/heretic/knowledge/void_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/void_lore.dm
@@ -258,7 +258,7 @@
heavy_storm = new(user, 10)
if(ishuman(user))
var/mob/living/carbon/human/ascended_human = user
- var/obj/item/organ/internal/eyes/heretic_eyes = ascended_human.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/heretic_eyes = ascended_human.get_organ_slot(ORGAN_SLOT_EYES)
heretic_eyes?.color_cutoffs = list(30, 30, 30)
ascended_human.update_sight()
diff --git a/code/modules/antagonists/heretic/magic/moon_smile.dm b/code/modules/antagonists/heretic/magic/moon_smile.dm
index 63bcc4cc84831..e2010ac0f9446 100644
--- a/code/modules/antagonists/heretic/magic/moon_smile.dm
+++ b/code/modules/antagonists/heretic/magic/moon_smile.dm
@@ -40,7 +40,7 @@
cast_on.adjust_temp_blindness(moon_smile_duration + 1 SECONDS)
cast_on.set_eye_blur_if_lower(moon_smile_duration + 2 SECONDS)
- var/obj/item/organ/internal/ears/ears = cast_on.get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = cast_on.get_organ_slot(ORGAN_SLOT_EARS)
//adjustEarDamage takes deafness duration parameter in one unit per two seconds, instead of the normal time, so we divide by two seconds
ears?.adjustEarDamage(0, (moon_smile_duration + 1 SECONDS) / (2 SECONDS))
diff --git a/code/modules/antagonists/heretic/soultrapped_heretic.dm b/code/modules/antagonists/heretic/soultrapped_heretic.dm
index ffd92e09496cb..13365316db1bf 100644
--- a/code/modules/antagonists/heretic/soultrapped_heretic.dm
+++ b/code/modules/antagonists/heretic/soultrapped_heretic.dm
@@ -15,10 +15,17 @@
// always failure obj
/datum/objective/heretic_trapped
name = "soultrapped failure"
- explanation_text = "Help the cult. Kill the cult. Help the crew. Kill the crew. Help your wielder. Kill your wielder. Kill everyone. Rattle your chains."
+ explanation_text = "Help the cult. Kill the cult. Help the crew. Kill the crew. Help your wielder. Kill your wielder. Kill everyone. Rattle your chains. Break your bindings."
/datum/antagonist/soultrapped_heretic/on_gain()
..()
+ var/policy = get_policy(ROLE_SOULTRAPPED_HERETIC)
+ if(policy)
+ to_chat(owner, policy)
+ else
+ to_chat(owner, span_ghostalert("You are the trapped soul of the Heretic you once were. You may attempt to convince your wielders to unbind you, granting you some degree of freedom, and them access to some of your powers. \
+ You were enslaved by the cult, but are not a member of it, and retain what remains of your free will. Besides this, there is little to be done but commentary. Try not to get trapped in a locker."))
+ owner.current.log_message("was sacrificed to Nar'sie as a Heretic, and sealed inside a longsword.", LOG_GAME)
var/datum/objective/epic_fail = new /datum/objective/heretic_trapped()
epic_fail.completed = FALSE
objectives += epic_fail
diff --git a/code/modules/antagonists/nightmare/nightmare.dm b/code/modules/antagonists/nightmare/nightmare.dm
index 10dfd662dab7e..f5e795fa3d60b 100644
--- a/code/modules/antagonists/nightmare/nightmare.dm
+++ b/code/modules/antagonists/nightmare/nightmare.dm
@@ -20,7 +20,7 @@
/datum/outfit/nightmare
name = "Nightmare (Preview only)"
-/datum/outfit/nightmare/post_equip(mob/living/carbon/human/human, visualsOnly)
+/datum/outfit/nightmare/post_equip(mob/living/carbon/human/human, visuals_only)
human.set_species(/datum/species/shadow/nightmare)
/datum/objective/nightmare_fluff
diff --git a/code/modules/antagonists/nightmare/nightmare_organs.dm b/code/modules/antagonists/nightmare/nightmare_organs.dm
index 4aaacb77e5f3e..ddfe675d4128a 100644
--- a/code/modules/antagonists/nightmare/nightmare_organs.dm
+++ b/code/modules/antagonists/nightmare/nightmare_organs.dm
@@ -4,7 +4,7 @@
#define HEART_SPECIAL_SHADOWIFY 2
-/obj/item/organ/internal/brain/shadow/nightmare
+/obj/item/organ/brain/shadow/nightmare
name = "tumorous mass"
desc = "A fleshy growth that was dug out of the skull of a Nightmare."
icon = 'icons/obj/medical/organs/organs.dmi'
@@ -15,7 +15,7 @@
///Our associated terrorize spell, for antagonist nightmares
var/datum/action/cooldown/spell/pointed/terrorize/terrorize_spell
-/obj/item/organ/internal/brain/shadow/nightmare/on_mob_insert(mob/living/carbon/brain_owner)
+/obj/item/organ/brain/shadow/nightmare/on_mob_insert(mob/living/carbon/brain_owner)
. = ..()
if(brain_owner.dna.species.id != SPECIES_NIGHTMARE)
@@ -29,7 +29,7 @@
terrorize_spell = new(src)
terrorize_spell.Grant(brain_owner)
-/obj/item/organ/internal/brain/shadow/nightmare/on_mob_remove(mob/living/carbon/brain_owner)
+/obj/item/organ/brain/shadow/nightmare/on_mob_remove(mob/living/carbon/brain_owner)
. = ..()
QDEL_NULL(our_jaunt)
QDEL_NULL(terrorize_spell)
@@ -62,7 +62,7 @@
playsound(source, SFX_BULLET_MISS, 75, TRUE)
return COMPONENT_BULLET_PIERCED
-/obj/item/organ/internal/heart/nightmare
+/obj/item/organ/heart/nightmare
name = "heart of darkness"
desc = "An alien organ that twists and writhes when exposed to light."
visual = TRUE
@@ -72,13 +72,13 @@
color = COLOR_CRAYON_BLACK
decay_factor = 0
// No love is to be found in a heart so twisted.
- food_reagents = list(/datum/reagent/consumable/nutriment = 5)
+ food_reagents = list(/datum/reagent/consumable/nutriment/organ_tissue = 5)
/// How many life ticks in the dark the owner has been dead for. Used for nightmare respawns.
var/respawn_progress = 0
/// The armblade granted to the host of this heart.
var/obj/item/light_eater/blade
-/obj/item/organ/internal/heart/nightmare/attack(mob/M, mob/living/carbon/user, obj/target)
+/obj/item/organ/heart/nightmare/attack(mob/M, mob/living/carbon/user, obj/target)
if(M != user)
return ..()
user.visible_message(
@@ -94,23 +94,23 @@
user.temporarilyRemoveItemFromInventory(src, TRUE)
Insert(user)
-/obj/item/organ/internal/heart/nightmare/on_mob_insert(mob/living/carbon/heart_owner, special)
+/obj/item/organ/heart/nightmare/on_mob_insert(mob/living/carbon/heart_owner, special)
. = ..()
if(special != HEART_SPECIAL_SHADOWIFY)
blade = new/obj/item/light_eater
heart_owner.put_in_hands(blade)
-/obj/item/organ/internal/heart/nightmare/on_mob_remove(mob/living/carbon/heart_owner, special)
+/obj/item/organ/heart/nightmare/on_mob_remove(mob/living/carbon/heart_owner, special)
. = ..()
respawn_progress = 0
if(blade && special != HEART_SPECIAL_SHADOWIFY)
heart_owner.visible_message(span_warning("\The [blade] disintegrates!"))
QDEL_NULL(blade)
-/obj/item/organ/internal/heart/nightmare/Stop()
+/obj/item/organ/heart/nightmare/Stop()
return FALSE
-/obj/item/organ/internal/heart/nightmare/on_death(seconds_per_tick, times_fired)
+/obj/item/organ/heart/nightmare/on_death(seconds_per_tick, times_fired)
if(!owner)
return
var/turf/T = get_turf(owner)
@@ -134,7 +134,7 @@
playsound(owner, 'sound/effects/hallucinations/far_noise.ogg', 50, TRUE)
respawn_progress = 0
-/obj/item/organ/internal/heart/nightmare/get_availability(datum/species/owner_species, mob/living/owner_mob)
+/obj/item/organ/heart/nightmare/get_availability(datum/species/owner_species, mob/living/owner_mob)
if(isnightmare(owner_mob))
return TRUE
return ..()
diff --git a/code/modules/antagonists/nightmare/nightmare_species.dm b/code/modules/antagonists/nightmare/nightmare_species.dm
index 38db2dfae8657..e81819e44fccd 100644
--- a/code/modules/antagonists/nightmare/nightmare_species.dm
+++ b/code/modules/antagonists/nightmare/nightmare_species.dm
@@ -24,8 +24,8 @@
TRAIT_NEVER_WOUNDED,
)
- mutantheart = /obj/item/organ/internal/heart/nightmare
- mutantbrain = /obj/item/organ/internal/brain/shadow/nightmare
+ mutantheart = /obj/item/organ/heart/nightmare
+ mutantbrain = /obj/item/organ/brain/shadow/nightmare
bodypart_overrides = list(
BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/shadow/nightmare,
BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/shadow/nightmare,
diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
index 3214232648b2a..7445b20cb902a 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
@@ -74,10 +74,31 @@ GLOBAL_VAR(station_nuke_source)
/obj/machinery/nuclearbomb/examine(mob/user)
. = ..()
- if(exploding)
- . += span_bolddanger("It is in the process of exploding. Perhaps reviewing your affairs is in order.")
- if(timing)
- . += span_danger("There are [get_time_left()] seconds until detonation.")
+ switch(deconstruction_state)
+ if(NUKESTATE_UNSCREWED)
+ . += span_notice("The front panel has been unscrewed and can be pried open.")
+ if(NUKESTATE_PANEL_REMOVED)
+ . += span_notice("The inner plate is exposed and can be cut with a welding tool.")
+ if(NUKESTATE_WELDED)
+ . += span_notice("The inner plate has been cut through and can be pried off.")
+ if(NUKESTATE_CORE_EXPOSED)
+ . += span_danger("The inner chamber is exposed, revealing [core] to the outside!")
+ . += span_notice("The damaged inner plate covering the inner chamber can be replaced with some iron.")
+ if(NUKESTATE_CORE_REMOVED)
+ . += span_notice("The inner chamber is exposed, but is empty.")
+ if(NUKESTATE_INTACT)
+ . += span_notice("The front panel is secured.")
+
+ switch(get_nuke_state())
+ if(NUKE_OFF_LOCKED)
+ . += span_notice("The device is awaiting activation codes.")
+ if(NUKE_OFF_UNLOCKED)
+ . += span_notice("The device is set and is ready for arming the detonation countdown.")
+ if(NUKE_ON_TIMING)
+ . += span_danger("There are [get_time_left()] seconds until detonation.")
+ if(NUKE_ON_EXPLODING)
+ . += span_bolddanger("It is in the process of exploding. Perhaps reviewing your affairs is in order.")
+
/// Checks if the disk inserted is a real nuke disk or not.
/obj/machinery/nuclearbomb/proc/disk_check(obj/item/disk/nuclear/inserted_disk)
@@ -225,12 +246,11 @@ GLOBAL_VAR(station_nuke_source)
if(NUKESTATE_CORE_REMOVED)
interior = "core-removed"
if(NUKESTATE_INTACT)
- return
+ interior = null
switch(get_nuke_state())
if(NUKE_OFF_LOCKED)
- lights = ""
- return
+ lights = null
if(NUKE_OFF_UNLOCKED)
lights = "lights-safety"
if(NUKE_ON_TIMING)
@@ -425,11 +445,12 @@ GLOBAL_VAR(station_nuke_source)
// We're safe now, so stop any ongoing timers
if(safety)
if(timing)
+ timing = FALSE
disarm_nuke()
- timing = FALSE
detonation_timer = null
countdown.stop()
+ update_appearance(UPDATE_OVERLAYS) //only the lights overlay are affected by safety
/// Arms the nuke, or disarms it if it's already active.
/obj/machinery/nuclearbomb/proc/toggle_nuke_armed()
diff --git a/code/modules/antagonists/nukeop/outfits.dm b/code/modules/antagonists/nukeop/outfits.dm
index bd6dbfacf457a..32fe7dfd5c0a6 100644
--- a/code/modules/antagonists/nukeop/outfits.dm
+++ b/code/modules/antagonists/nukeop/outfits.dm
@@ -40,8 +40,8 @@
uniform = /obj/item/clothing/under/plasmaman/syndicate
r_hand = /obj/item/tank/internals/plasmaman/belt/full
-/datum/outfit/syndicate/post_equip(mob/living/carbon/human/nukie, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/syndicate/post_equip(mob/living/carbon/human/nukie, visuals_only = FALSE)
+ if(visuals_only)
return
// We don't require the nukiebase be loaded to function, but lets go ahead and kick off loading just in case
@@ -107,9 +107,9 @@
)
var/faction = "The Syndicate"
-/datum/outfit/syndicate/reinforcement/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/syndicate/reinforcement/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
. = ..()
- if(visualsOnly)
+ if(visuals_only)
return
to_chat(H, span_notice("You're an agent of [faction], sent to accompany the nuclear squad on their mission. \
Support your allies, and remember: Down with Nanotrasen."))
@@ -186,7 +186,7 @@
back = /obj/item/mod/control/pre_equipped/empty/syndicate
uniform = /obj/item/clothing/under/syndicate
-/datum/outfit/nuclear_operative/post_equip(mob/living/carbon/human/H, visualsOnly)
+/datum/outfit/nuclear_operative/post_equip(mob/living/carbon/human/H, visuals_only)
var/obj/item/mod/module/armor_booster/booster = locate() in H.back
booster.active = TRUE
H.update_worn_back()
@@ -199,7 +199,7 @@
l_hand = /obj/item/modular_computer/pda/nukeops
r_hand = /obj/item/shield/energy
-/datum/outfit/nuclear_operative_elite/post_equip(mob/living/carbon/human/H, visualsOnly)
+/datum/outfit/nuclear_operative_elite/post_equip(mob/living/carbon/human/H, visuals_only)
var/obj/item/mod/module/armor_booster/booster = locate() in H.back
booster.active = TRUE
H.update_worn_back()
diff --git a/code/modules/antagonists/obsessed/obsessed.dm b/code/modules/antagonists/obsessed/obsessed.dm
index ff4232ab2dc00..cd58d6fec5d9a 100644
--- a/code/modules/antagonists/obsessed/obsessed.dm
+++ b/code/modules/antagonists/obsessed/obsessed.dm
@@ -41,7 +41,7 @@
if(!istype(C))
to_chat(admin, "[roundend_category] come from a brain trauma, so they need to at least be a carbon!")
return
- if(!C.get_organ_by_type(/obj/item/organ/internal/brain)) // If only I had a brain
+ if(!C.get_organ_by_type(/obj/item/organ/brain)) // If only I had a brain
to_chat(admin, "[roundend_category] come from a brain trauma, so they need to HAVE A BRAIN.")
return
message_admins("[key_name_admin(admin)] made [key_name_admin(new_owner)] into [name].")
diff --git a/code/modules/antagonists/pirate/pirate_event.dm b/code/modules/antagonists/pirate/pirate_event.dm
index 5ecefa3094d45..e9255034f79da 100644
--- a/code/modules/antagonists/pirate/pirate_event.dm
+++ b/code/modules/antagonists/pirate/pirate_event.dm
@@ -7,7 +7,7 @@
typepath = /datum/round_event/pirates
weight = 10
max_occurrences = 1
- min_players = 20
+ min_players = 15
dynamic_should_hijack = TRUE
category = EVENT_CATEGORY_INVASION
description = "The crew will either pay up, or face a pirate assault."
diff --git a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
index feb62ec4fca66..da9df063c90d6 100644
--- a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
+++ b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
@@ -469,12 +469,12 @@
/datum/export/pirate/cash
cost = 1
- unit_name = "bills"
+ unit_name = "bill"
export_types = list(/obj/item/stack/spacecash)
-/datum/export/pirate/cash/get_amount(obj/exported_item)
+/datum/export/pirate/cash/get_cost(obj/exported_item)
var/obj/item/stack/spacecash/cash = exported_item
- return ..() * cash.amount * cash.value
+ return cash.value * cash.amount
/datum/export/pirate/holochip
cost = 1
diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm
index da7b76577275c..a339b0cc2640d 100644
--- a/code/modules/antagonists/revolution/revolution.dm
+++ b/code/modules/antagonists/revolution/revolution.dm
@@ -186,7 +186,7 @@
/datum/antagonist/rev/head/on_removal()
if(give_hud)
var/mob/living/carbon/C = owner.current
- var/obj/item/organ/internal/cyberimp/eyes/hud/security/syndicate/S = C.get_organ_slot(ORGAN_SLOT_HUD)
+ var/obj/item/organ/cyberimp/eyes/hud/security/syndicate/S = C.get_organ_slot(ORGAN_SLOT_HUD)
if(S)
S.Remove(C)
return ..()
@@ -336,6 +336,9 @@
if(deconverter == DECONVERTER_BORGED)
message_admins("[ADMIN_LOOKUPFLW(owner.current)] has been borged while being a [name]")
owner.special_role = null
+ if(iscarbon(owner.current) && deconverter)
+ var/mob/living/carbon/formerrev = owner.current
+ formerrev.Unconscious(10 SECONDS)
deconversion_source = deconverter
owner.remove_antag_datum(type)
@@ -362,7 +365,7 @@
to_chat(carbon_owner, "The Syndicate were unfortunately unable to get you a flash.")
if(give_hud)
- var/obj/item/organ/internal/cyberimp/eyes/hud/security/syndicate/hud = new()
+ var/obj/item/organ/cyberimp/eyes/hud/security/syndicate/hud = new()
hud.Insert(carbon_owner)
if(carbon_owner.get_quirk(/datum/quirk/body_purist))
to_chat(carbon_owner, "Being a body purist, you would never accept cybernetic implants. Upon hearing this, your employers signed you up for a special program, which... for \
diff --git a/code/modules/antagonists/spy/spy_bounty.dm b/code/modules/antagonists/spy/spy_bounty.dm
index ccab7952a9c2c..1aa318fb6828d 100644
--- a/code/modules/antagonists/spy/spy_bounty.dm
+++ b/code/modules/antagonists/spy/spy_bounty.dm
@@ -621,10 +621,10 @@
/obj/item/bodypart/arm/right,
/obj/item/bodypart/leg/left,
/obj/item/bodypart/leg/right,
- /obj/item/organ/internal/stomach,
- /obj/item/organ/internal/appendix,
- /obj/item/organ/internal/liver,
- /obj/item/organ/internal/eyes,
+ /obj/item/organ/stomach,
+ /obj/item/organ/appendix,
+ /obj/item/organ/liver,
+ /obj/item/organ/eyes,
)
return ..()
diff --git a/code/modules/antagonists/traitor/contractor/contract_teammate.dm b/code/modules/antagonists/traitor/contractor/contract_teammate.dm
index 965d99e89ac6a..484d8196ddfff 100644
--- a/code/modules/antagonists/traitor/contractor/contract_teammate.dm
+++ b/code/modules/antagonists/traitor/contractor/contract_teammate.dm
@@ -39,7 +39,7 @@
/obj/item/lighter,
)
-/datum/outfit/contractor_partner/post_equip(mob/living/carbon/human/H, visualsOnly)
+/datum/outfit/contractor_partner/post_equip(mob/living/carbon/human/H, visuals_only)
. = ..()
var/obj/item/cigarette/syndicate/cig = H.get_item_by_slot(ITEM_SLOT_MASK)
cig.light()
diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm
index f739245314fc2..57ca4540612e4 100644
--- a/code/modules/antagonists/traitor/datum_traitor.dm
+++ b/code/modules/antagonists/traitor/datum_traitor.dm
@@ -408,7 +408,7 @@
r_hand = /obj/item/gun/energy/recharge/ebow
shoes = /obj/item/clothing/shoes/magboots/advance
-/datum/outfit/traitor/post_equip(mob/living/carbon/human/H, visualsOnly)
+/datum/outfit/traitor/post_equip(mob/living/carbon/human/H, visuals_only)
var/obj/item/melee/energy/sword/sword = locate() in H.held_items
if(sword.flags_1 & INITIALIZED_1)
sword.attack_self()
diff --git a/code/modules/antagonists/traitor/objectives/eyesnatching.dm b/code/modules/antagonists/traitor/objectives/eyesnatching.dm
index 7d664b20d36cb..2ddad4913f0d3 100644
--- a/code/modules/antagonists/traitor/objectives/eyesnatching.dm
+++ b/code/modules/antagonists/traitor/objectives/eyesnatching.dm
@@ -81,7 +81,7 @@
continue
var/mob/living/carbon/human/targets_current = possible_target.current
- if(!targets_current.get_organ_by_type(/obj/item/organ/internal/eyes))
+ if(!targets_current.get_organ_by_type(/obj/item/organ/eyes))
continue
possible_targets += possible_target
@@ -110,7 +110,7 @@
AddComponent(/datum/component/traitor_objective_register, target, fail_signals = list(COMSIG_QDELETING))
return TRUE
-/datum/traitor_objective/target_player/eyesnatching/proc/check_eye_removal(datum/source, obj/item/organ/internal/eyes/removed)
+/datum/traitor_objective/target_player/eyesnatching/proc/check_eye_removal(datum/source, obj/item/organ/eyes/removed)
SIGNAL_HANDLER
if(!istype(removed))
@@ -159,7 +159,7 @@
if(used || !istype(target) || !target.Adjacent(user)) //Works only once, no TK use
return ..()
- var/obj/item/organ/internal/eyes/eyeballies = target.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyeballies = target.get_organ_slot(ORGAN_SLOT_EYES)
var/obj/item/bodypart/head/head = target.get_bodypart(BODY_ZONE_HEAD)
if(!head || !eyeballies || target.is_eyes_covered())
@@ -224,7 +224,7 @@
if(used)
. += span_notice("It has been used up.")
-/obj/item/eyesnatcher/proc/eyeballs_exist(obj/item/organ/internal/eyes/eyeballies, obj/item/bodypart/head/head, mob/living/carbon/human/target)
+/obj/item/eyesnatcher/proc/eyeballs_exist(obj/item/organ/eyes/eyeballies, obj/item/bodypart/head/head, mob/living/carbon/human/target)
if(!eyeballies || QDELETED(eyeballies))
return FALSE
if(!head || QDELETED(head))
@@ -232,7 +232,7 @@
if(eyeballies.owner != target)
return FALSE
- var/obj/item/organ/internal/eyes/eyes = target.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = target.get_organ_slot(ORGAN_SLOT_EYES)
//got different eyes or doesn't own the head... somehow
if(head.owner != target || eyes != eyeballies)
return FALSE
diff --git a/code/modules/antagonists/voidwalker/voidwalker.dm b/code/modules/antagonists/voidwalker/voidwalker.dm
index 6222dc0c35fbe..3d9b0012555dc 100644
--- a/code/modules/antagonists/voidwalker/voidwalker.dm
+++ b/code/modules/antagonists/voidwalker/voidwalker.dm
@@ -39,7 +39,7 @@
/datum/outfit/voidwalker
name = "Voidwalker (Preview only)"
-/datum/outfit/voidwalker/post_equip(mob/living/carbon/human/human, visualsOnly)
+/datum/outfit/voidwalker/post_equip(mob/living/carbon/human/human, visuals_only)
human.set_species(/datum/species/voidwalker)
/datum/objective/voidwalker_objective
diff --git a/code/modules/antagonists/voidwalker/voidwalker_organs.dm b/code/modules/antagonists/voidwalker/voidwalker_organs.dm
index e6e3d028ac8ef..23f1c6fb2fe47 100644
--- a/code/modules/antagonists/voidwalker/voidwalker_organs.dm
+++ b/code/modules/antagonists/voidwalker/voidwalker_organs.dm
@@ -1,5 +1,5 @@
/// Voidwalker eyes with nightvision and thermals
-/obj/item/organ/internal/eyes/voidwalker
+/obj/item/organ/eyes/voidwalker
name = "blackened orbs"
desc = "These orbs will withstand the light of the sun, yet still see within the darkest voids."
eye_icon_state = null
@@ -9,7 +9,7 @@
sight_flags = SEE_MOBS
/// Voidwalker brain stacked with a lot of the abilities
-/obj/item/organ/internal/brain/voidwalker
+/obj/item/organ/brain/voidwalker
name = "cosmic brain"
desc = "A mind fully integrated into the cosmic thread."
icon = 'icons/obj/medical/organs/shadow_organs.dmi'
@@ -30,7 +30,7 @@
/// Our brain transmit telepathy spell
var/datum/action/transmit = /datum/action/cooldown/spell/list_target/telepathy/voidwalker
-/obj/item/organ/internal/brain/voidwalker/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/brain/voidwalker/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
. = ..()
RegisterSignal(organ_owner, COMSIG_ATOM_ENTERING, PROC_REF(on_atom_entering))
@@ -52,7 +52,7 @@
glass_breaker = new/obj/item/void_eater
organ_owner.put_in_hands(glass_breaker)
-/obj/item/organ/internal/brain/voidwalker/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/brain/voidwalker/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
UnregisterSignal(organ_owner, COMSIG_ENTER_AREA)
@@ -75,7 +75,7 @@
if(glass_breaker)
qdel(glass_breaker)
-/obj/item/organ/internal/brain/voidwalker/proc/on_atom_entering(mob/living/carbon/organ_owner, atom/entering)
+/obj/item/organ/brain/voidwalker/proc/on_atom_entering(mob/living/carbon/organ_owner, atom/entering)
SIGNAL_HANDLER
if(!isturf(entering))
@@ -90,7 +90,7 @@
else
organ_owner.remove_movespeed_modifier(speed_modifier)
-/obj/item/organ/internal/brain/voidwalker/on_death()
+/obj/item/organ/brain/voidwalker/on_death()
. = ..()
var/turf/spawn_loc = get_turf(owner)
diff --git a/code/modules/antagonists/voidwalker/voidwalker_species.dm b/code/modules/antagonists/voidwalker/voidwalker_species.dm
index 5b50c3da69ed9..8c417c97773ea 100644
--- a/code/modules/antagonists/voidwalker/voidwalker_species.dm
+++ b/code/modules/antagonists/voidwalker/voidwalker_species.dm
@@ -35,8 +35,8 @@
no_equip_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_ICLOTHING | ITEM_SLOT_GLOVES | ITEM_SLOT_MASK | ITEM_SLOT_HEAD | ITEM_SLOT_FEET | ITEM_SLOT_BACK | ITEM_SLOT_EARS | ITEM_SLOT_EYES
- mutantbrain = /obj/item/organ/internal/brain/voidwalker
- mutanteyes = /obj/item/organ/internal/eyes/voidwalker
+ mutantbrain = /obj/item/organ/brain/voidwalker
+ mutanteyes = /obj/item/organ/eyes/voidwalker
mutantheart = null
mutantlungs = null
mutanttongue = null
diff --git a/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm b/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm
index 9bf5b3c2664c3..f88c09188cf48 100644
--- a/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm
+++ b/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm
@@ -63,7 +63,7 @@
hewmon.balloon_alert(user, "shattering...")
if(do_after(user, 4 SECONDS, hewmon))
new /obj/effect/spawner/random/glass_shards (spawnloc)
- var/obj/item/organ/brain = hewmon.get_organ_by_type(/obj/item/organ/internal/brain)
+ var/obj/item/organ/brain = hewmon.get_organ_by_type(/obj/item/organ/brain)
if(brain)
brain.Remove(hewmon)
brain.forceMove(spawnloc)
diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm
index 446825779e299..e56f651a095a8 100644
--- a/code/modules/antagonists/wizard/equipment/artefact.dm
+++ b/code/modules/antagonists/wizard/equipment/artefact.dm
@@ -73,7 +73,7 @@
/obj/effect/rend/singularity_act()
return
-/obj/effect/rend/singularity_pull()
+/obj/effect/rend/singularity_pull(atom/singularity, current_size)
return
/obj/item/veilrender/vealrender
@@ -306,12 +306,12 @@
r_hand = /obj/item/claymore
l_hand = /obj/item/shield/roman
-/datum/outfit/roman/pre_equip(mob/living/carbon/human/H, visualsOnly)
+/datum/outfit/roman/pre_equip(mob/living/carbon/human/H, visuals_only)
. = ..()
head = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionnaire)
//Provides a decent heal, need to pump every 6 seconds
-/obj/item/organ/internal/heart/cursed/wizard
+/obj/item/organ/heart/cursed/wizard
pump_delay = 6 SECONDS
heal_brute = 25
heal_burn = 25
diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/perks.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/perks.dm
index 0230274b8e88b..07c152d113d68 100644
--- a/code/modules/antagonists/wizard/equipment/spellbook_entries/perks.dm
+++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/perks.dm
@@ -5,17 +5,51 @@
category = SPELLBOOK_CATEGORY_PERKS
refundable = FALSE // no refund
requires_wizard_garb = FALSE
+ /// Icon that will be shown on wizard hud when purchasing a perk.
+ var/hud_icon
+ /// Type path to perks hud.
+ var/atom/movable/screen/perk/hud_to_show = /atom/movable/screen/perk
/datum/spellbook_entry/perks/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy)
var/datum/antagonist/wizard/wizard_datum = user.mind.has_antag_datum(/datum/antagonist/wizard)
if(wizard_datum)
wizard_datum.perks += src
+ create_hud_icon(user, wizard_datum)
to_chat(user, span_notice("You got a new perk: [src.name]."))
+ log_purchase(user.key)
return TRUE
+/datum/spellbook_entry/perks/proc/create_compact_button(mob/living/carbon/human/user, datum/antagonist/wizard/wizard_datum)
+ var/datum/hud/user_hud = user.hud_used
+ wizard_datum.compact_button = new /atom/movable/screen/perk/more(null, user_hud)
+ wizard_datum.compact_button.screen_loc = ui_perk_position(0)
+ user_hud.infodisplay += wizard_datum.compact_button
+ user_hud.show_hud(user_hud.hud_version)
+
+/datum/spellbook_entry/perks/proc/create_hud_icon(mob/living/carbon/human/user, datum/antagonist/wizard/wizard_datum)
+ if(user.hud_used)
+ var/datum/hud/user_hud = user.hud_used
+ if(isnull(wizard_datum.compact_button))
+ create_compact_button(user, wizard_datum)
+ hud_to_show = new hud_to_show(null, user_hud)
+ hud_to_show.name = name
+ hud_to_show.icon_state = hud_icon
+ hud_to_show.screen_loc = ui_perk_position(wizard_datum.perks.len)
+ user_hud.infodisplay += hud_to_show
+ user_hud.show_hud(user_hud.hud_version)
+ wizard_datum.compact_button.perks_on_hud += hud_to_show
+ else
+ RegisterSignal(user, COMSIG_MOB_HUD_CREATED, wizard_datum, PROC_REF(on_hud_created))
+
+/datum/spellbook_entry/perks/proc/on_hud_created(mob/living/carbon/human/user, datum/antagonist/wizard/wizard_datum)
+ SIGNAL_HANDLER
+
+ create_hud_icon(user, wizard_datum)
+
/datum/spellbook_entry/perks/fourhands
name = "Four Hands"
desc = "Gives you even more hands to perform magic"
+ hud_icon = "fourhands"
/datum/spellbook_entry/perks/fourhands/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy)
. = ..()
@@ -25,6 +59,7 @@
name = "Worm Born"
desc = "Your soul is infested with mana worms. When you die, you will be reborn as a large worm. \
When the worm dies, it has no such luck. Parasitic infection prevents you from binding your soul to objects."
+ hud_icon = "wormborn"
no_coexistance_typecache = list(/datum/action/cooldown/spell/lichdom)
/datum/spellbook_entry/perks/wormborn/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy)
@@ -34,6 +69,7 @@
/datum/spellbook_entry/perks/dejavu
name = "Déjà vu"
desc = "Every 60 seconds returns you to the place where you were 60 seconds ago with the same amount of health as you had 60 seconds ago."
+ hud_icon = "dejavu"
/datum/spellbook_entry/perks/dejavu/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy)
. = ..()
@@ -50,6 +86,7 @@
/datum/spellbook_entry/perks/spell_lottery
name = "Spells Lottery"
desc = "Spells Lottery gives you the chance to get something from the book absolutely free, but you can no longer refund any purchases."
+ hud_icon = "spellottery"
/datum/spellbook_entry/perks/spell_lottery/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy)
. = ..()
@@ -58,6 +95,7 @@
/datum/spellbook_entry/perks/gamble
name = "Gamble"
desc = "You get 2 random perks."
+ hud_icon = "gamble"
/datum/spellbook_entry/perks/gamble/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy)
. = ..()
@@ -85,6 +123,7 @@
desc = "Gives you ability to obtain a person's life force by eating their heart. \
By eating someone's heart you can increase your damage resistance or gain random mutation. \
Heart also give strong healing buff."
+ hud_icon = "hearteater"
/datum/spellbook_entry/perks/heart_eater/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy)
. = ..()
@@ -94,6 +133,7 @@
name = "Slime Friends"
desc = "Slimes are your friends. \
Every 15 seconds you lose some nutriments and summon a random evil slime to fight on your side."
+ hud_icon = "slimefriends"
/datum/spellbook_entry/perks/slime_friends/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy)
. = ..()
@@ -103,6 +143,7 @@
name = "Transparence"
desc = "You become a little closer to the world of the dead. \
Projectiles pass through you, but you lose 25% of your health and you are hunted by a terrible curse which wants to return you to the afterlife."
+ hud_icon = "transparence"
/datum/spellbook_entry/perks/transparence/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy)
. = ..()
@@ -123,6 +164,7 @@
name = "Magnetism"
desc = "You get a small gravity anomaly that orbit around you. \
Nearby things will be attracted to you."
+ hud_icon = "magnetism"
/datum/spellbook_entry/perks/magnetism/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy)
. = ..()
diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm
index d0c99f03bbf06..617908b5ba617 100644
--- a/code/modules/antagonists/wizard/wizard.dm
+++ b/code/modules/antagonists/wizard/wizard.dm
@@ -28,6 +28,8 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key)
var/datum/action/cooldown/grand_ritual/ritual
/// Perks that wizard learn
var/list/perks = list()
+ /// Button that hide perks hud.
+ var/atom/movable/screen/perk/more/compact_button
/datum/antagonist/wizard_minion
name = "Wizard Minion"
diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm
index 6e448637dbaa4..88b21cf8971ef 100644
--- a/code/modules/assembly/flash.dm
+++ b/code/modules/assembly/flash.dm
@@ -313,7 +313,7 @@
var/datum/weakref/arm
/obj/item/assembly/flash/armimplant/burn_out()
- var/obj/item/organ/internal/cyberimp/arm/flash/real_arm = arm.resolve()
+ var/obj/item/organ/cyberimp/arm/flash/real_arm = arm.resolve()
if(real_arm?.owner)
to_chat(real_arm.owner, span_warning("Your photon projector implant overheats and deactivates!"))
real_arm.Retract()
@@ -322,7 +322,7 @@
/obj/item/assembly/flash/armimplant/try_use_flash(mob/user = null)
if(overheat)
- var/obj/item/organ/internal/cyberimp/arm/flash/real_arm = arm.resolve()
+ var/obj/item/organ/cyberimp/arm/flash/real_arm = arm.resolve()
if(real_arm?.owner)
to_chat(real_arm.owner, span_warning("Your photon projector is running too hot to be used again so quickly!"))
return FALSE
diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm
index 061de2a5f9205..11e037bf7ad0b 100644
--- a/code/modules/assembly/igniter.dm
+++ b/code/modules/assembly/igniter.dm
@@ -69,6 +69,7 @@
if(location)
var/datum/gas_mixture/enviro = location.return_air()
enviro.temperature = clamp(min(ROOM_TEMP, enviro.temperature*0.85),MIN_FREEZE_TEMP,MAX_FREEZE_TEMP)
+ location.air_update_turf(FALSE, FALSE)
sparks.start()
#undef EXPOSED_VOLUME
diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm
index 00bb94d6bc31f..47a2af4651cbc 100644
--- a/code/modules/atmospherics/environmental/LINDA_fire.dm
+++ b/code/modules/atmospherics/environmental/LINDA_fire.dm
@@ -302,7 +302,7 @@
var/mob/living/immolated = arrived
immolated.fire_act(temperature, volume)
-/obj/effect/hotspot/singularity_pull()
+/obj/effect/hotspot/singularity_pull(atom/singularity, current_size)
return
#undef INSUFFICIENT
diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm
index 186ef8ea9aace..9d46a73e16c27 100644
--- a/code/modules/atmospherics/machinery/atmosmachinery.dm
+++ b/code/modules/atmospherics/machinery/atmosmachinery.dm
@@ -560,7 +560,7 @@
L.ventcrawl_layer = piping_layer
return ..()
-/obj/machinery/atmospherics/singularity_pull(S, current_size)
+/obj/machinery/atmospherics/singularity_pull(atom/singularity, current_size)
if(current_size >= STAGE_FIVE)
deconstruct(FALSE)
return ..()
diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm
index 97bff1ddaeacb..cee96ae0ee772 100644
--- a/code/modules/atmospherics/machinery/other/meter.dm
+++ b/code/modules/atmospherics/machinery/other/meter.dm
@@ -152,7 +152,7 @@
else
to_chat(user, status())
-/obj/machinery/meter/singularity_pull(S, current_size)
+/obj/machinery/meter/singularity_pull(atom/singularity, current_size)
..()
if(current_size >= STAGE_FIVE)
deconstruct()
diff --git a/code/modules/awaymissions/pamphlet.dm b/code/modules/awaymissions/pamphlet.dm
index be8aa9de8907a..67a56ed9b3232 100644
--- a/code/modules/awaymissions/pamphlet.dm
+++ b/code/modules/awaymissions/pamphlet.dm
@@ -53,7 +53,7 @@
cybernetic augments by Synthman Co. to you in this rare exclusive offer! With this letter, you are being gifted a \
special limited edition choice NTSDA-certified grade-A cybernetic implant, FREE OF CHARGE! Build up your body to \
GREATNESS with Synthman's new exclusive line of cybernetic products! Become greater, stronger, and BETTER today!"
- var/obj/item/organ/internal/heart/cybernetic/sample
+ var/obj/item/organ/heart/cybernetic/sample
/obj/item/paper/pamphlet/cybernetics/Initialize(mapload)
. = ..()
diff --git a/code/modules/basketball/basketball_teams.dm b/code/modules/basketball/basketball_teams.dm
index 4f5d2b22f1839..9169fa4fcc43f 100644
--- a/code/modules/basketball/basketball_teams.dm
+++ b/code/modules/basketball/basketball_teams.dm
@@ -16,8 +16,8 @@
//Chance for the wearer to have their height increased. This is repeated three times for maximum height.
var/taller_chance = 50
-/datum/outfit/basketball/post_equip(mob/living/carbon/human/human_to_equip, visualsOnly=FALSE)
- if(visualsOnly)
+/datum/outfit/basketball/post_equip(mob/living/carbon/human/human_to_equip, visuals_only=FALSE)
+ if(visuals_only)
return
var/list/no_drops = list()
@@ -98,7 +98,7 @@
head = /obj/item/clothing/head/costume/xenos
mask = /obj/item/clothing/mask/chameleon
-/datum/outfit/basketball/lusty_xenomorphs/post_equip(mob/living/carbon/human/human_to_equip, visualsOnly=FALSE)
+/datum/outfit/basketball/lusty_xenomorphs/post_equip(mob/living/carbon/human/human_to_equip, visuals_only=FALSE)
. = ..()
var/obj/item/card/id/idcard = human_to_equip.wear_id
diff --git a/code/modules/bitrunning/antagonists/cyber_police.dm b/code/modules/bitrunning/antagonists/cyber_police.dm
index bb137607ec423..2ec8e042572bf 100644
--- a/code/modules/bitrunning/antagonists/cyber_police.dm
+++ b/code/modules/bitrunning/antagonists/cyber_police.dm
@@ -23,15 +23,15 @@
shoes = /obj/item/clothing/shoes/laceup
uniform = /obj/item/clothing/under/suit/black_really
-/datum/outfit/cyber_police/pre_equip(mob/living/carbon/human/user, visualsOnly)
- if(!visualsOnly)
+/datum/outfit/cyber_police/pre_equip(mob/living/carbon/human/user, visuals_only)
+ if(!visuals_only)
return
user.set_facial_hairstyle("Shaved", update = FALSE)
user.set_haircolor("#4B3D28", update = FALSE)
user.set_hairstyle("Business Hair")
-/datum/outfit/cyber_police/post_equip(mob/living/carbon/human/user, visualsOnly)
+/datum/outfit/cyber_police/post_equip(mob/living/carbon/human/user, visuals_only)
var/obj/item/clothing/under/officer_uniform = user.w_uniform
if(officer_uniform)
officer_uniform.has_sensor = NO_SENSORS
diff --git a/code/modules/bitrunning/antagonists/cyber_tac.dm b/code/modules/bitrunning/antagonists/cyber_tac.dm
index a45fdb345d304..e9a36a65ee59f 100644
--- a/code/modules/bitrunning/antagonists/cyber_tac.dm
+++ b/code/modules/bitrunning/antagonists/cyber_tac.dm
@@ -24,7 +24,7 @@
/obj/item/ammo_box/magazine/m223,
)
-/datum/outfit/cyber_police/tactical/post_equip(mob/living/carbon/human/user, visualsOnly)
+/datum/outfit/cyber_police/tactical/post_equip(mob/living/carbon/human/user, visuals_only)
. = ..()
var/obj/item/implant/weapons_auth/auth = new(user)
diff --git a/code/modules/bitrunning/components/avatar_connection.dm b/code/modules/bitrunning/components/avatar_connection.dm
index 15c267cf0c8dd..7925461652a00 100644
--- a/code/modules/bitrunning/components/avatar_connection.dm
+++ b/code/modules/bitrunning/components/avatar_connection.dm
@@ -95,7 +95,7 @@
*/
RegisterSignals(parent, list(COMSIG_BITRUNNER_ALERT_SEVER, COMSIG_BITRUNNER_CACHE_SEVER, COMSIG_BITRUNNER_LADDER_SEVER), PROC_REF(on_safe_disconnect))
RegisterSignal(parent, COMSIG_LIVING_PILL_CONSUMED, PROC_REF(disconnect_if_red_pill))
- RegisterSignal(parent, COMSIG_LIVING_DEATH, PROC_REF(on_sever_connection))
+ RegisterSignals(parent, list(COMSIG_LIVING_DEATH, COMSIG_QDELETING), PROC_REF(on_sever_connection))
RegisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_linked_damage))
diff --git a/code/modules/bitrunning/outfits.dm b/code/modules/bitrunning/outfits.dm
index c0bb01ebc06e5..afad097773cc0 100644
--- a/code/modules/bitrunning/outfits.dm
+++ b/code/modules/bitrunning/outfits.dm
@@ -11,7 +11,7 @@
id = /obj/item/card/id/advanced
-/datum/outfit/echolocator/post_equip(mob/living/carbon/human/user, visualsOnly)
+/datum/outfit/echolocator/post_equip(mob/living/carbon/human/user, visuals_only)
. = ..()
user.psykerize()
@@ -51,7 +51,7 @@
)
-/datum/outfit/beachbum_combat/post_equip(mob/living/carbon/human/bum, visualsOnly)
+/datum/outfit/beachbum_combat/post_equip(mob/living/carbon/human/bum, visuals_only)
. = ..()
var/choice = rand(1, length(ranged_weaps))
diff --git a/code/modules/bitrunning/server/obj_generation.dm b/code/modules/bitrunning/server/obj_generation.dm
index baf427855a236..9f473980bbf96 100644
--- a/code/modules/bitrunning/server/obj_generation.dm
+++ b/code/modules/bitrunning/server/obj_generation.dm
@@ -53,7 +53,7 @@
to_wear.suit = null
to_wear.suit_store = null
- avatar.equipOutfit(to_wear, visualsOnly = TRUE)
+ avatar.equipOutfit(to_wear, visuals_only = TRUE)
var/obj/item/clothing/under/jumpsuit = avatar.w_uniform
if(istype(jumpsuit))
@@ -178,7 +178,7 @@
if(failed)
to_chat(neo, span_warning("One of your disks failed to load. Check for duplicate or inactive disks."))
- var/obj/item/organ/internal/brain/neo_brain = neo.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/neo_brain = neo.get_organ_slot(ORGAN_SLOT_BRAIN)
for(var/obj/item/skillchip/skill_chip as anything in neo_brain?.skillchips)
if(!skill_chip.active)
continue
diff --git a/code/modules/bitrunning/spawners.dm b/code/modules/bitrunning/spawners.dm
index 26288d54a1555..07e97837f522d 100644
--- a/code/modules/bitrunning/spawners.dm
+++ b/code/modules/bitrunning/spawners.dm
@@ -70,5 +70,5 @@
implants = list(/obj/item/implant/weapons_auth)
-/datum/outfit/virtual_syndicate/post_equip(mob/living/carbon/human/user, visualsOnly)
+/datum/outfit/virtual_syndicate/post_equip(mob/living/carbon/human/user, visuals_only)
user.faction |= ROLE_SYNDICATE
diff --git a/code/modules/capture_the_flag/ctf_classes.dm b/code/modules/capture_the_flag/ctf_classes.dm
index 8f6a03ba7dfc4..2b9f022d80145 100644
--- a/code/modules/capture_the_flag/ctf_classes.dm
+++ b/code/modules/capture_the_flag/ctf_classes.dm
@@ -28,8 +28,8 @@
///Which slots to apply TRAIT_NODROP to the items in
var/list/nodrop_slots = list(ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_EARS)
-/datum/outfit/ctf/post_equip(mob/living/carbon/human/human_to_equip, visualsOnly=FALSE)
- if(visualsOnly)
+/datum/outfit/ctf/post_equip(mob/living/carbon/human/human_to_equip, visuals_only=FALSE)
+ if(visuals_only)
return
var/list/no_drops = list()
diff --git a/code/modules/cargo/bounties/medical.dm b/code/modules/cargo/bounties/medical.dm
index f9b367b12f06e..d15f4405f7b10 100644
--- a/code/modules/cargo/bounties/medical.dm
+++ b/code/modules/cargo/bounties/medical.dm
@@ -3,10 +3,10 @@
description = "Commander Johnson is in critical condition after suffering yet another heart attack. Doctors say he needs a new heart fast. Ship one, pronto! We'll take a cybernetic one if need be, but only if it's upgraded."
reward = CARGO_CRATE_VALUE * 5
wanted_types = list(
- /obj/item/organ/internal/heart = TRUE,
- /obj/item/organ/internal/heart/cybernetic = FALSE,
- /obj/item/organ/internal/heart/cybernetic/tier2 = TRUE,
- /obj/item/organ/internal/heart/cybernetic/tier3 = TRUE,
+ /obj/item/organ/heart = TRUE,
+ /obj/item/organ/heart/cybernetic = FALSE,
+ /obj/item/organ/heart/cybernetic/tier2 = TRUE,
+ /obj/item/organ/heart/cybernetic/tier3 = TRUE,
)
/datum/bounty/item/medical/lung
@@ -15,17 +15,17 @@
reward = CARGO_CRATE_VALUE * 10
required_count = 3
wanted_types = list(
- /obj/item/organ/internal/lungs = TRUE,
- /obj/item/organ/internal/lungs/cybernetic = FALSE,
- /obj/item/organ/internal/lungs/cybernetic/tier2 = TRUE,
- /obj/item/organ/internal/lungs/cybernetic/tier3 = TRUE,
+ /obj/item/organ/lungs = TRUE,
+ /obj/item/organ/lungs/cybernetic = FALSE,
+ /obj/item/organ/lungs/cybernetic/tier2 = TRUE,
+ /obj/item/organ/lungs/cybernetic/tier3 = TRUE,
)
/datum/bounty/item/medical/appendix
name = "Appendix"
description = "Chef Gibb of Central Command wants to prepare a meal using a very special delicacy: an appendix. If you ship one, he'll pay."
reward = CARGO_CRATE_VALUE * 5 //there are no synthetic appendixes
- wanted_types = list(/obj/item/organ/internal/appendix = TRUE)
+ wanted_types = list(/obj/item/organ/appendix = TRUE)
/datum/bounty/item/medical/ears
name = "Ears"
@@ -33,11 +33,11 @@
reward = CARGO_CRATE_VALUE * 10
required_count = 3
wanted_types = list(
- /obj/item/organ/internal/ears = TRUE,
- /obj/item/organ/internal/ears/cybernetic = FALSE,
- /obj/item/organ/internal/ears/cybernetic/upgraded = TRUE,
- /obj/item/organ/internal/ears/cybernetic/whisper = TRUE,
- /obj/item/organ/internal/ears/cybernetic/xray = TRUE,
+ /obj/item/organ/ears = TRUE,
+ /obj/item/organ/ears/cybernetic = FALSE,
+ /obj/item/organ/ears/cybernetic/upgraded = TRUE,
+ /obj/item/organ/ears/cybernetic/whisper = TRUE,
+ /obj/item/organ/ears/cybernetic/xray = TRUE,
)
/datum/bounty/item/medical/liver
@@ -46,10 +46,10 @@
reward = CARGO_CRATE_VALUE * 10
required_count = 3
wanted_types = list(
- /obj/item/organ/internal/liver = TRUE,
- /obj/item/organ/internal/liver/cybernetic = FALSE,
- /obj/item/organ/internal/liver/cybernetic/tier2 = TRUE,
- /obj/item/organ/internal/liver/cybernetic/tier3 = TRUE,
+ /obj/item/organ/liver = TRUE,
+ /obj/item/organ/liver/cybernetic = FALSE,
+ /obj/item/organ/liver/cybernetic/tier2 = TRUE,
+ /obj/item/organ/liver/cybernetic/tier3 = TRUE,
)
/datum/bounty/item/medical/eye
@@ -58,8 +58,8 @@
reward = CARGO_CRATE_VALUE * 10
required_count = 3
wanted_types = list(
- /obj/item/organ/internal/eyes = TRUE,
- /obj/item/organ/internal/eyes/robotic = FALSE,
+ /obj/item/organ/eyes = TRUE,
+ /obj/item/organ/eyes/robotic = FALSE,
)
/datum/bounty/item/medical/tongue
@@ -67,19 +67,19 @@
description = "A recent attack by Mime extremists has left staff at Station 23 speechless. Ship some spare tongues."
reward = CARGO_CRATE_VALUE * 10
required_count = 3
- wanted_types = list(/obj/item/organ/internal/tongue = TRUE)
+ wanted_types = list(/obj/item/organ/tongue = TRUE)
/datum/bounty/item/medical/lizard_tail
name = "Lizard Tail"
description = "The Wizard Federation has made off with Nanotrasen's supply of lizard tails. While CentCom is dealing with the wizards, can the station spare a tail of their own?"
reward = CARGO_CRATE_VALUE * 6
- wanted_types = list(/obj/item/organ/external/tail/lizard = TRUE)
+ wanted_types = list(/obj/item/organ/tail/lizard = TRUE)
/datum/bounty/item/medical/cat_tail
name = "Cat Tail"
description = "Central Command has run out of heavy duty pipe cleaners. Can you ship over a cat tail to help us out?"
reward = CARGO_CRATE_VALUE * 6
- wanted_types = list(/obj/item/organ/external/tail/cat = TRUE)
+ wanted_types = list(/obj/item/organ/tail/cat = TRUE)
/datum/bounty/item/medical/chainsaw
name = "Chainsaw"
diff --git a/code/modules/cargo/bounties/special.dm b/code/modules/cargo/bounties/special.dm
index 268ac2ea03334..8f395b5152fb1 100644
--- a/code/modules/cargo/bounties/special.dm
+++ b/code/modules/cargo/bounties/special.dm
@@ -4,12 +4,12 @@
reward = CARGO_CRATE_VALUE * 50
required_count = 3
wanted_types = list(
- /obj/item/organ/internal/brain/alien = TRUE,
- /obj/item/organ/internal/alien = TRUE,
- /obj/item/organ/internal/body_egg/alien_embryo = TRUE,
- /obj/item/organ/internal/liver/alien = TRUE,
- /obj/item/organ/internal/tongue/alien = TRUE,
- /obj/item/organ/internal/eyes/alien = TRUE,
+ /obj/item/organ/brain/alien = TRUE,
+ /obj/item/organ/alien = TRUE,
+ /obj/item/organ/body_egg/alien_embryo = TRUE,
+ /obj/item/organ/liver/alien = TRUE,
+ /obj/item/organ/tongue/alien = TRUE,
+ /obj/item/organ/eyes/alien = TRUE,
)
/datum/bounty/item/syndicate_documents
diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm
index 179ca701adc0c..1ba739d3343a4 100644
--- a/code/modules/cargo/centcom_podlauncher.dm
+++ b/code/modules/cargo/centcom_podlauncher.dm
@@ -176,6 +176,7 @@ ADMIN_VERB(centcom_podlauncher, R_ADMIN, "Config/Launch Supplypod", "Configure a
data["effectCircle"] = temp_pod.effectCircle //If true, allows the pod to come in at any angle. Bit of a weird feature but whatever its here
data["effectBurst"] = effectBurst //IOf true, launches five pods at once (with a very small delay between for added coolness), in a 3x3 area centered around the area
data["effectReverse"] = temp_pod.reversing //If true, the pod will not send any items. Instead, after opening, it will close again (picking up items/mobs) and fly back to centcom
+ data["create_sparks"] = temp_pod.create_sparks //If true, the pod will create sparks before being deleted. This might cause fires if there is plasma in the air.
data["reverse_option_list"] = temp_pod.reverse_option_list
data["effectTarget"] = specificTarget //Launches the pod at the turf of a specific mob target, rather than wherever the user clicked. Useful for smites
data["effectName"] = temp_pod.adminNamed //Determines whether or not the pod has been named by an admin. If true, the pod's name will not get overridden when the style of the pod changes (changing the style of the pod normally also changes the name+desc)
@@ -411,6 +412,9 @@ ADMIN_VERB(centcom_podlauncher, R_ADMIN, "Config/Launch Supplypod", "Configure a
var/reverseOption = params["reverseOption"]
temp_pod.reverse_option_list[reverseOption] = !temp_pod.reverse_option_list[reverseOption]
. = TRUE
+ if("create_sparks") //Toggle: The creates sparks before the pod is deleted
+ temp_pod.create_sparks = !temp_pod.create_sparks
+ . = TRUE
if("effectTarget") //Toggle: Launch at a specific mob (instead of at whatever turf you click on). Used for the supplypod smite
if (specificTarget)
specificTarget = null
@@ -784,12 +788,16 @@ ADMIN_VERB(centcom_podlauncher, R_ADMIN, "Config/Launch Supplypod", "Configure a
selector.moveToNullspace() //Otherwise, we move the selector to nullspace until it is needed again
/datum/centcom_podlauncher/proc/clearBay() //Clear all objs and mobs from the selected bay
- for (var/obj/O in bay.get_all_contents())
- qdel(O)
- for (var/mob/M in bay.get_all_contents())
- qdel(M)
+ for (var/obj/object in bay.get_all_contents())
+ if (istype(object.type, /obj/effect/light_emitter/podbay))
+ continue
+ qdel(object)
+ for (var/mob/mob in bay.get_all_contents())
+ qdel(mob)
for (var/bayturf in bay)
var/turf/turf_to_clear = bayturf
+ if (istype(turf_to_clear, /obj/effect/light_emitter/podbay))
+ continue
turf_to_clear.ChangeTurf(/turf/open/floor/iron)
/datum/centcom_podlauncher/Destroy() //The Destroy() proc. This is called by ui_close proc, or whenever the user leaves the game
@@ -839,6 +847,7 @@ ADMIN_VERB(centcom_podlauncher, R_ADMIN, "Config/Launch Supplypod", "Configure a
effectBurst = dataToLoad["effectBurst"] //IOf true, launches five pods at once (with a very small delay between for added coolness), in a 3x3 area centered around the area
temp_pod.reversing = dataToLoad["effectReverse"] //If true, the pod will not send any items. Instead, after opening, it will close again (picking up items/mobs) and fly back to centcom
temp_pod.reverse_option_list = dataToLoad["reverse_option_list"]
+ temp_pod.create_sparks = dataToLoad["create_sparks"] // If true, creates sparks when the pod vanishes.
specificTarget = dataToLoad["effectTarget"] //Launches the pod at the turf of a specific mob target, rather than wherever the user clicked. Useful for smites
temp_pod.adminNamed = dataToLoad["effectName"] //Determines whether or not the pod has been named by an admin. If true, the pod's name will not get overridden when the style of the pod changes (changing the style of the pod normally also changes the name+desc)
temp_pod.name = dataToLoad["podName"]
diff --git a/code/modules/cargo/exports/lavaland.dm b/code/modules/cargo/exports/lavaland.dm
index 7102db0dd8f0d..6b621beeaeb1e 100644
--- a/code/modules/cargo/exports/lavaland.dm
+++ b/code/modules/cargo/exports/lavaland.dm
@@ -8,10 +8,10 @@
/obj/item/immortality_talisman,
/obj/item/book_of_babel,
/obj/item/wisp_lantern,
- /obj/item/organ/internal/cyberimp/arm/shard/katana,
+ /obj/item/organ/cyberimp/arm/shard/katana,
/obj/item/clothing/glasses/godeye,
/obj/item/clothing/neck/necklace/memento_mori,
- /obj/item/organ/internal/heart/cursed/wizard,
+ /obj/item/organ/heart/cursed/wizard,
/obj/item/clothing/suit/hooded/cloak/drake,
/obj/item/ship_in_a_bottle,
/obj/item/clothing/shoes/clown_shoes/banana_shoes,
@@ -48,7 +48,7 @@
export_types = list(
/obj/item/hierophant_club,
/obj/item/melee/cleaving_saw,
- /obj/item/organ/internal/vocal_cords/colossus,
+ /obj/item/organ/vocal_cords/colossus,
/obj/machinery/anomalous_crystal,
/obj/item/mayhem,
/obj/item/soulscythe,
diff --git a/code/modules/cargo/exports/organs.dm b/code/modules/cargo/exports/organs.dm
index 784af1c857426..ec042a8613e44 100644
--- a/code/modules/cargo/exports/organs.dm
+++ b/code/modules/cargo/exports/organs.dm
@@ -4,51 +4,51 @@
/datum/export/organ/heart
cost = CARGO_CRATE_VALUE * 0.2 //For the man who has everything and nothing.
unit_name = "humanoid heart"
- export_types = list(/obj/item/organ/internal/heart)
+ export_types = list(/obj/item/organ/heart)
/datum/export/organ/eyes
cost = CARGO_CRATE_VALUE * 0.1
unit_name = "humanoid eyes"
- export_types = list(/obj/item/organ/internal/eyes)
+ export_types = list(/obj/item/organ/eyes)
/datum/export/organ/ears
cost = CARGO_CRATE_VALUE * 0.1
unit_name = "humanoid ears"
- export_types = list(/obj/item/organ/internal/ears)
+ export_types = list(/obj/item/organ/ears)
/datum/export/organ/liver
cost = CARGO_CRATE_VALUE * 0.1
unit_name = "humanoid liver"
- export_types = list(/obj/item/organ/internal/liver)
+ export_types = list(/obj/item/organ/liver)
/datum/export/organ/lungs
cost = CARGO_CRATE_VALUE * 0.1
unit_name = "humanoid lungs"
- export_types = list(/obj/item/organ/internal/lungs)
+ export_types = list(/obj/item/organ/lungs)
/datum/export/organ/stomach
cost = CARGO_CRATE_VALUE * 0.1
unit_name = "humanoid stomach"
- export_types = list(/obj/item/organ/internal/stomach)
+ export_types = list(/obj/item/organ/stomach)
/datum/export/organ/tongue
cost = CARGO_CRATE_VALUE * 0.1
unit_name = "humanoid tounge"
- export_types = list(/obj/item/organ/internal/tongue)
+ export_types = list(/obj/item/organ/tongue)
/datum/export/organ/external/tail/lizard
cost = CARGO_CRATE_VALUE * 1.25
unit_name = "lizard tail"
- export_types = list(/obj/item/organ/external/tail/lizard)
+ export_types = list(/obj/item/organ/tail/lizard)
/datum/export/organ/external/tail/cat
cost = CARGO_CRATE_VALUE * 1.5
unit_name = "cat tail"
- export_types = list(/obj/item/organ/external/tail/cat)
+ export_types = list(/obj/item/organ/tail/cat)
/datum/export/organ/ears/cat
cost = CARGO_CRATE_VALUE
unit_name = "cat ears"
- export_types = list(/obj/item/organ/internal/ears/cat)
+ export_types = list(/obj/item/organ/ears/cat)
diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm
index a112ada0e554f..d021fa8665ff2 100644
--- a/code/modules/cargo/packs/medical.dm
+++ b/code/modules/cargo/packs/medical.dm
@@ -188,6 +188,15 @@
name = "Strong-Arm Implant Set"
desc = "A crate containing two implants, which can be surgically implanted to empower the strength of human arms. Warranty void if exposed to electromagnetic pulses."
cost = CARGO_CRATE_VALUE * 6
- contains = list(/obj/item/organ/internal/cyberimp/arm/strongarm = 2)
+ contains = list(/obj/item/organ/cyberimp/arm/strongarm = 2)
crate_name = "Strong-Arm implant crate"
discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
+
+/datum/supply_pack/medical/lost_crew
+ name = "Recovered NT Employee corpse"
+ desc = "We don't have the accomodations to bring them back, could we send them to you? Please revive and employ them. \
+ The price is a downpayment, we will reimburse the medical budget once our employee has been alive again for a bit."
+ cost = CARGO_CRATE_VALUE * 5
+ contains = list(/obj/structure/closet/body_bag/lost_crew/with_body)
+ crate_name = "body freezer"
+ crate_type = /obj/structure/closet/crate/secure/freezer
diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm
index a8678fbdcef13..da3356e82509d 100644
--- a/code/modules/cargo/supplypod.dm
+++ b/code/modules/cargo/supplypod.dm
@@ -39,6 +39,7 @@
var/datum/pod_style/style = /datum/pod_style //Style is a variable that keeps track of what the pod is supposed to look like. Only stores a path, type is set for ease of var access
var/reversing = FALSE //If true, the pod will not send any items. Instead, after opening, it will close again (picking up items/mobs) and fly back to centcom
var/list/reverse_dropoff_coords //Turf that the reverse pod will drop off its newly-acquired cargo to
+ var/create_sparks = TRUE // If true, the pod will create sparks before being deleted.
var/fallingSoundLength = 11
var/fallingSound = 'sound/items/weapons/mortar_long_whistle.ogg'//Admin sound to play before the pod lands
var/landingSound //Admin sound to play when the pod lands
@@ -399,7 +400,7 @@
close(holder)
else if (bluespace) //If we're a bluespace pod, then delete ourselves (along with our holder, if a separate holder exists)
deleteRubble()
- if (!effectQuiet && !ispath(style, /datum/pod_style/invisible) && !ispath(style, /datum/pod_style/seethrough))
+ if (!effectQuiet && create_sparks && !ispath(style, /datum/pod_style/invisible) && !ispath(style, /datum/pod_style/seethrough))
do_sparks(5, TRUE, holder) //Create some sparks right before closing
qdel(src) //Delete ourselves and the holder
if (holder != src)
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index ecae65ad7f586..e0f359ac1e639 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -536,7 +536,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them.
to_chat(src, span_warning("Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you."))
- update_ambience_pref(prefs.read_preference(/datum/preference/numeric/sound_ambience_volume)) //DOPPLER EDIT CHANGE - Original: update_ambience_pref(prefs.read_preference(/datum/preference/toggle/sound_ambience))
+ update_ambience_pref(prefs.read_preference(/datum/preference/numeric/sound_ambience_volume))
check_ip_intel()
//This is down here because of the browse() calls in tooltip/New()
diff --git a/code/modules/client/preferences/middleware/antags.dm b/code/modules/client/preferences/middleware/antags.dm
index abd9495d09a66..9c15f74efdced 100644
--- a/code/modules/client/preferences/middleware/antags.dm
+++ b/code/modules/client/preferences/middleware/antags.dm
@@ -108,7 +108,7 @@ GLOBAL_LIST_INIT(non_ruleset_antagonists, list(
for(var/antag_key in GLOB.non_ruleset_antagonists)
var/datum/antagonist/antag = GLOB.non_ruleset_antagonists[antag_key]
var/antag_flag = initial(antag.job_rank)
-
+
var/days_needed = preferences.parent?.get_remaining_days(
GLOB.special_roles[antag_flag]
)
diff --git a/code/modules/client/preferences/middleware/species.dm b/code/modules/client/preferences/middleware/species.dm
index 794d61af23b5e..631a7e99574dc 100644
--- a/code/modules/client/preferences/middleware/species.dm
+++ b/code/modules/client/preferences/middleware/species.dm
@@ -18,7 +18,7 @@
var/mob/living/carbon/human/dummy/consistent/dummy = new
dummy.set_species(species_type)
- dummy.equipOutfit(dummy.dna.species.preview_outfit, visualsOnly = TRUE) // DOPPLER EDIT, Custom preview outfits - old code: dummy.equipOutfit(/datum/outfit/job/assistant/consistent, visualsOnly = TRUE)
+ dummy.equipOutfit(dummy.dna.species.preview_outfit, visuals_only = TRUE) // DOPPLER EDIT, Custom preview outfits - old code: dummy.equipOutfit(/datum/outfit/job/assistant/consistent, visuals_only = TRUE)
dummy.dna.species.prepare_human_for_preview(dummy)
var/icon/dummy_icon = getFlatIcon(dummy)
diff --git a/code/modules/client/preferences/migrations/legacy_sound_toggles_migration.dm b/code/modules/client/preferences/migrations/legacy_sound_toggles_migration.dm
index caf8b0fed25b8..01e8657441394 100644
--- a/code/modules/client/preferences/migrations/legacy_sound_toggles_migration.dm
+++ b/code/modules/client/preferences/migrations/legacy_sound_toggles_migration.dm
@@ -3,17 +3,11 @@
/// This migration transfers the player's existing preferences into the new toggles
/datum/preferences/proc/migrate_legacy_sound_toggles(savefile/savefile)
-// BEGIN DOPPLER EDIT - VOLUME MIXER
-// write_preference(GLOB.preference_entries[/datum/preference/toggle/sound_ambience], toggles & 1<<2)
write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_ambience_volume], toggles & 1<<2)
-// write_preference(GLOB.preference_entries[/datum/preference/toggle/sound_announcements], toggles & 1<<11)
- write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_announcements], toggles & 1<<11)
+ write_preference(GLOB.preference_entries[/datum/preference/toggle/sound_announcements], toggles & 1<<11)
write_preference(GLOB.preference_entries[/datum/preference/toggle/sound_combatmode], toggles & 1<<22)
write_preference(GLOB.preference_entries[/datum/preference/toggle/sound_endofround], toggles & 1<<20)
write_preference(GLOB.preference_entries[/datum/preference/toggle/sound_instruments], toggles & 1<<7)
-// write_preference(GLOB.preference_entries[/datum/preference/toggle/sound_lobby], toggles & 1<<3)
- write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_lobby], toggles & 1<<3)
+ write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_lobby_volume], toggles & 1<<3)
write_preference(GLOB.preference_entries[/datum/preference/toggle/sound_midi], toggles & 1<<1)
-// write_preference(GLOB.preference_entries[/datum/preference/toggle/sound_ship_ambience], toggles & 1<<8)
write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_ship_ambience_volume], toggles & 1<<8)
-// END DOPPLER EDIT
diff --git a/code/modules/client/preferences/migrations/sound_checkboxes_migration.dm b/code/modules/client/preferences/migrations/sound_checkboxes_migration.dm
index 80149e5bc3baf..3af7f5a61714e 100644
--- a/code/modules/client/preferences/migrations/sound_checkboxes_migration.dm
+++ b/code/modules/client/preferences/migrations/sound_checkboxes_migration.dm
@@ -10,13 +10,11 @@
/datum/preferences/proc/migrate_boolean_sound_prefs_to_default_volume()
var/ambience_pref = savefile.get_entry("sound_ambience_volume")
- var/announcement_pref = savefile.get_entry("sound_announcements")
var/ship_ambience_pref = savefile.get_entry("sound_ship_ambience_volume")
- var/lobby_music_pref = savefile.get_entry("sound_lobby")
+ var/lobby_music_pref = savefile.get_entry("sound_lobby_volume")
var/radio_noise_pref = savefile.get_entry("sound_radio_noise")
write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_ambience_volume], ambience_pref*100)
- write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_announcements], announcement_pref*100)
write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_ship_ambience_volume], ship_ambience_pref*100)
- write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_lobby], lobby_music_pref*100)
+ write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_lobby_volume], lobby_music_pref*100)
write_preference(GLOB.preference_entries[/datum/preference/numeric/sound_radio_noise], radio_noise_pref*100)
return
diff --git a/code/modules/client/preferences/sounds.dm b/code/modules/client/preferences/sounds.dm
index 4b612769c85e5..c73fc3049f7aa 100644
--- a/code/modules/client/preferences/sounds.dm
+++ b/code/modules/client/preferences/sounds.dm
@@ -1,18 +1,17 @@
-/// Controls hearing ambience
-/datum/preference/numeric/sound_ambience_volume //DOPPLER EDIT CHANGE - Original: /datum/preference/toggle/sound_ambience
+/// Controls ambience volume
+/datum/preference/numeric/sound_ambience_volume
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
- savefile_key = "sound_ambience_volume" //DOPPLER EDIT CHANGE - Original: savefile_key = "sound_ambience"
+ savefile_key = "sound_ambience_volume"
savefile_identifier = PREFERENCE_PLAYER
+
minimum = 0
maximum = 200
-//BEGIN DOPPLER ADDITION - VOLUME MIXER
-// default value is max/2 because 100 1x modifier, while 200 is 2x
+/// default value is max/2 because 100 1x modifier, while 200 is 2x
/datum/preference/numeric/sound_ambience_volume/create_default_value()
return maximum/2
-//END DOPPLER ADD
-/datum/preference/numeric/sound_ambience_volume/apply_to_client(client/client, value) //DOPPLER EDIT CHANGE - Original: /datum/preference/toggle/sound_ambience/apply_to_client(client/client, value)
+/datum/preference/numeric/sound_ambience_volume/apply_to_client(client/client, value)
client.update_ambience_pref(value)
/datum/preference/toggle/sound_breathing
@@ -21,17 +20,10 @@
savefile_identifier = PREFERENCE_PLAYER
/// Controls hearing announcement sounds
-/datum/preference/numeric/sound_announcements //DOPPLER EDIT CHANGE - Original: /datum/preference/toggle/sound_announcements
+/datum/preference/toggle/sound_announcements
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
savefile_key = "sound_announcements"
savefile_identifier = PREFERENCE_PLAYER
- minimum = 0
- maximum = 200
-
-//BEGIN DOPPLER ADDITION - VOLUME MIXER
-/datum/preference/numeric/sound_announcements/create_default_value()
- return maximum/2
-///END DOPPLER ADD
/// Controls hearing the combat mode toggle sound
/datum/preference/toggle/sound_combatmode
@@ -68,10 +60,11 @@
savefile_identifier = PREFERENCE_PLAYER
minimum = 0
- maximum = 100
+ maximum = 200
+/// default value is max/2 because 100 1x modifier, while 200 is 2x
/datum/preference/numeric/sound_tts_volume/create_default_value()
- return maximum
+ return maximum/2
/datum/preference/choiced/sound_achievement
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
@@ -100,20 +93,19 @@
client.mob.stop_sound_channel(CHANNEL_JUKEBOX)
/// Controls hearing lobby music
-/datum/preference/numeric/sound_lobby //DOPPLER EDIT CHANGE - Original: /datum/preference/toggle/sound_lobby
+/datum/preference/numeric/sound_lobby_volume
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
- savefile_key = "sound_lobby"
+ savefile_key = "sound_lobby_volume"
savefile_identifier = PREFERENCE_PLAYER
+
minimum = 0
maximum = 200
-//BEGIN DOPPLER ADDITION - VOLUME MIXER
-// default value is max/2 because 100 1x modifier, while 200 is 2x
-/datum/preference/numeric/sound_lobby/create_default_value()
+/// default value is max/2 because 100 1x modifier, while 200 is 2x
+/datum/preference/numeric/sound_lobby_volume/create_default_value()
return maximum/2
-//END DOPPLER ADD
-/datum/preference/numeric/sound_lobby/apply_to_client_updated(client/client, value) //DOPPLER EDIT CHANGE - Original: /datum/preference/toggle/sound_lobby/apply_to_client_updated(client/client, value)
+/datum/preference/numeric/sound_lobby_volume/apply_to_client_updated(client/client, value)
if (value && isnewplayer(client.mob))
client.playtitlemusic()
else
@@ -125,21 +117,20 @@
savefile_key = "sound_midi"
savefile_identifier = PREFERENCE_PLAYER
-/// Controls hearing ship ambience
-/datum/preference/numeric/sound_ship_ambience_volume //DOPPLER EDIT CHANGE - Original: /datum/preference/toggle/sound_ship_ambience
+/// Controls ship ambience volume
+/datum/preference/numeric/sound_ship_ambience_volume
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
- savefile_key = "sound_ship_ambience_volume" //DOPPLER EDIT CHANGE - Original: savefile_key = "sound_ship_ambience"
+ savefile_key = "sound_ship_ambience_volume"
savefile_identifier = PREFERENCE_PLAYER
+
minimum = 0
maximum = 200
-//BEGIN DOPPLER ADDITION - VOLUME MIXER
-// default value is max/2 because 100 1x modifier, while 200 is 2x
+/// default value is max/2 because 100 1x modifier, while 200 is 2x
/datum/preference/numeric/sound_ship_ambience_volume/create_default_value()
return maximum/2
-//END DOPPLER ADD
-/datum/preference/numeric/sound_ship_ambience_volume/apply_to_client_updated(client/client, value) //DOPPLER EDIT CHANGE - Original: /datum/preference/toggle/sound_ship_ambience/apply_to_client_updated(client/client, value)
+/datum/preference/numeric/sound_ship_ambience_volume/apply_to_client_updated(client/client, value)
client.mob.refresh_looping_ambience()
/// Controls hearing elevator music
@@ -148,16 +139,21 @@
savefile_key = "sound_elevator"
savefile_identifier = PREFERENCE_PLAYER
-/// Controls hearing radio noise
-/datum/preference/numeric/sound_radio_noise //DOPPLER EDIT CHANGE - Original: /datum/preference/toggle/radio_noise
+/// Controls radio noise volume
+/datum/preference/numeric/sound_radio_noise
category = PREFERENCE_CATEGORY_GAME_PREFERENCES
savefile_key = "sound_radio_noise"
savefile_identifier = PREFERENCE_PLAYER
+
minimum = 0
maximum = 200
-//BEGIN DOPPLER ADDITION - VOLUME MIXER
/// default value is max/2 because 100 1x modifier, while 200 is 2x
/datum/preference/numeric/sound_radio_noise/create_default_value()
return maximum/2
-//END DOPPLER ADD
+
+/// Controls hearing AI VOX announcements
+/datum/preference/toggle/sound_ai_vox
+ category = PREFERENCE_CATEGORY_GAME_PREFERENCES
+ savefile_key = "sound_ai_vox"
+ savefile_identifier = PREFERENCE_PLAYER
diff --git a/code/modules/client/preferences/species_features/basic.dm b/code/modules/client/preferences/species_features/basic.dm
index 21459697f864f..e456d366b9629 100644
--- a/code/modules/client/preferences/species_features/basic.dm
+++ b/code/modules/client/preferences/species_features/basic.dm
@@ -32,7 +32,7 @@
if(!hetero)
target.eye_color_right = value
- var/obj/item/organ/internal/eyes/eyes_organ = target.get_organ_by_type(/obj/item/organ/internal/eyes)
+ var/obj/item/organ/eyes/eyes_organ = target.get_organ_by_type(/obj/item/organ/eyes)
if (!eyes_organ || !istype(eyes_organ))
return
diff --git a/code/modules/client/preferences/species_features/felinid.dm b/code/modules/client/preferences/species_features/felinid.dm
index 5910e42894f02..3aa4fd1083a5c 100644
--- a/code/modules/client/preferences/species_features/felinid.dm
+++ b/code/modules/client/preferences/species_features/felinid.dm
@@ -3,7 +3,7 @@
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
can_randomize = FALSE
- relevant_external_organ = /obj/item/organ/external/tail/cat
+ relevant_external_organ = /obj/item/organ/tail/cat
/datum/preference/choiced/tail_felinid/init_possible_values()
return assoc_to_keys_features(SSaccessories.tails_list_felinid)
@@ -20,7 +20,7 @@
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
can_randomize = FALSE
- relevant_external_organ = /obj/item/organ/internal/ears/cat
+ relevant_external_organ = /obj/item/organ/ears/cat
/datum/preference/choiced/felinid_ears/init_possible_values()
return assoc_to_keys_features(SSaccessories.ears_list)
diff --git a/code/modules/client/preferences/species_features/lizard.dm b/code/modules/client/preferences/species_features/lizard.dm
index 7749b31a8b287..eb750b596bc18 100644
--- a/code/modules/client/preferences/species_features/lizard.dm
+++ b/code/modules/client/preferences/species_features/lizard.dm
@@ -183,7 +183,7 @@
savefile_key = "feature_lizard_spines"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
- relevant_external_organ = /obj/item/organ/external/spines
+ relevant_external_organ = /obj/item/organ/spines
/datum/preference/choiced/lizard_spines/init_possible_values()
return assoc_to_keys_features(SSaccessories.spines_list)
@@ -195,7 +195,7 @@
savefile_key = "feature_lizard_tail"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
- relevant_external_organ = /obj/item/organ/external/tail/lizard
+ relevant_external_organ = /obj/item/organ/tail/lizard
/datum/preference/choiced/lizard_tail/init_possible_values()
return assoc_to_keys_features(SSaccessories.tails_list_lizard)
diff --git a/code/modules/client/preferences/species_features/monkey.dm b/code/modules/client/preferences/species_features/monkey.dm
index 8417cd7142e07..e35b6401553a6 100644
--- a/code/modules/client/preferences/species_features/monkey.dm
+++ b/code/modules/client/preferences/species_features/monkey.dm
@@ -2,7 +2,7 @@
savefile_key = "feature_monkey_tail"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
- relevant_external_organ = /obj/item/organ/external/tail/monkey
+ relevant_external_organ = /obj/item/organ/tail/monkey
can_randomize = FALSE
/datum/preference/choiced/monkey_tail/init_possible_values()
diff --git a/code/modules/client/preferences/species_features/mushperson.dm b/code/modules/client/preferences/species_features/mushperson.dm
index 4b624e9c02b4f..fc89a68521bbe 100644
--- a/code/modules/client/preferences/species_features/mushperson.dm
+++ b/code/modules/client/preferences/species_features/mushperson.dm
@@ -2,7 +2,7 @@
savefile_key = "feature_mushperson_cap"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
- relevant_external_organ = /obj/item/organ/external/mushroom_cap
+ relevant_external_organ = /obj/item/organ/mushroom_cap
/datum/preference/choiced/mushroom_cap/init_possible_values()
return assoc_to_keys_features(SSaccessories.caps_list)
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 0b5ac9565759f..19ea326163aff 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -5,7 +5,7 @@
// You do not need to raise this if you are adding new values that have sane defaults.
// Only raise this value when changing the meaning/format/name/layout of an existing value
// where you would want the updater procs below to run
-#define SAVEFILE_VERSION_MAX 46 //DOPPLER EDIT CHANGE - Original: #define SAVEFILE_VERSION_MAX 45
+#define SAVEFILE_VERSION_MAX 46
/*
SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn
@@ -110,10 +110,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
new_typepath = /obj/item/clothing/accessory/pride,
data_to_migrate = list(INFO_RESKIN = save_data?["pride_pin"]),
)
-//BEGIN DOPPLER ADDITION - VOLUME MIXER
if (current_version < 46)
migrate_boolean_sound_prefs_to_default_volume()
-//END DOPPLER ADD
/// checks through keybindings for outdated unbound keys and updates them
/datum/preferences/proc/check_keybindings()
diff --git a/code/modules/clothing/chameleon/_chameleon_action.dm b/code/modules/clothing/chameleon/_chameleon_action.dm
index e03f64f6292f8..36f674cfc3c75 100644
--- a/code/modules/clothing/chameleon/_chameleon_action.dm
+++ b/code/modules/clothing/chameleon/_chameleon_action.dm
@@ -178,6 +178,7 @@
/// DOPPLER SHIFT ADDITION END
item_target.flags_inv = initial(picked_item.flags_inv)
+ item_target.hair_mask = initial(picked_item.hair_mask)
item_target.transparent_protection = initial(picked_item.transparent_protection)
if(isclothing(item_target) && ispath(picked_item, /obj/item/clothing))
var/obj/item/clothing/clothing_target = item_target
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 8c595876076ad..078f25e345688 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -379,7 +379,7 @@
cold_desc = "very low"
if (0 to 71)
cold_desc = "extremely low"
- .["thermally insulated"] = "Protects the wearer from [jointext(list(heat_desc, cold_desc), " and ")] temperatures."
+ .["thermally insulated"] = "Protects the wearer from [jointext(list(heat_desc, cold_desc) - null, " and ")] temperatures."
/obj/item/clothing/examine_descriptor(mob/user)
return "clothing"
@@ -430,7 +430,11 @@
parts_covered += "head"
if(body_parts_covered & CHEST)
parts_covered += "torso"
- if(length(parts_covered)) // Just in case someone makes spaceproof gloves or something
+ if(body_parts_covered & ARMS|HANDS)
+ parts_covered += "arms"
+ if(body_parts_covered & LEGS|FEET)
+ parts_covered += "legs"
+ if(length(parts_covered))
readout += "[output_string] will protect the wearer's [english_list(parts_covered)] from [span_tooltip("The extremely low pressure is the biggest danger posed by the vacuum of space.", "low pressure")]."
var/heat_prot
diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm
index 4cff2c52f00bc..cead31d6207c0 100644
--- a/code/modules/clothing/glasses/_glasses.dm
+++ b/code/modules/clothing/glasses/_glasses.dm
@@ -53,7 +53,7 @@
/obj/item/clothing/glasses/proc/thermal_overload()
if(ishuman(src.loc))
var/mob/living/carbon/human/H = src.loc
- var/obj/item/organ/internal/eyes/eyes = H.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = H.get_organ_slot(ORGAN_SLOT_EYES)
if(!H.is_blind())
if(H.glasses == src)
to_chat(H, span_danger("[src] overloads and blinds you!"))
@@ -456,7 +456,7 @@
if(!user.get_organ_slot(ORGAN_SLOT_EYES))
to_chat(user, span_warning("You have no eyes to apply the contacts to!"))
return
- var/obj/item/organ/internal/eyes/eyes = user.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = user.get_organ_slot(ORGAN_SLOT_EYES)
to_chat(user, span_notice("You begin applying the contact lenses to your eyes..."))
if(!do_after(user, 3 SECONDS, src))
diff --git a/code/modules/clothing/gloves/insulated.dm b/code/modules/clothing/gloves/insulated.dm
index 9c451fb811718..c7acc7f87e287 100644
--- a/code/modules/clothing/gloves/insulated.dm
+++ b/code/modules/clothing/gloves/insulated.dm
@@ -63,6 +63,7 @@
icon_state = "sprayon"
inhand_icon_state = null
item_flags = DROPDEL
+ clothing_traits = list(TRAIT_CHUNKYFINGERS)
armor_type = /datum/armor/none
resistance_flags = ACID_PROOF
var/charges_remaining = 10
diff --git a/code/modules/clothing/gloves/special.dm b/code/modules/clothing/gloves/special.dm
index 0e0dbaee76c4d..6cbfdacb31616 100644
--- a/code/modules/clothing/gloves/special.dm
+++ b/code/modules/clothing/gloves/special.dm
@@ -168,7 +168,7 @@
resistance_flags = FIRE_PROOF
siemens_coefficient = 0.3
clothing_traits = list(TRAIT_QUICKER_CARRY, TRAIT_CHUNKYFINGERS)
- clothing_flags = THICKMATERIAL
+ clothing_flags = THICKMATERIAL|STOPSPRESSUREDAMAGE
/obj/item/clothing/gloves/atmos/Initialize(mapload)
. = ..()
@@ -215,7 +215,7 @@
var/mob/living/wearer = loc
var/stamina_exhaustion = 2 + challenge.difficulty * 0.02
var/is_heavy_gravity = wearer.has_gravity() > STANDARD_GRAVITY
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = wearer.get_organ_slot(ORGAN_SLOT_SPINE)
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = wearer.get_organ_slot(ORGAN_SLOT_SPINE)
if(istype(potential_spine))
stamina_exhaustion *= potential_spine.athletics_boost_multiplier
if(HAS_TRAIT(wearer, TRAIT_STRENGTH))
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index 6cd88c1746c7f..56a8661a4127a 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -9,6 +9,7 @@
inhand_icon_state = null
armor_type = /datum/armor/utility_hardhat
flags_inv = 0
+ hair_mask = HAIR_MASK_HIDE_ABOVE_45_DEG_MEDIUM
actions_types = list(/datum/action/item_action/toggle_helmet_light)
clothing_flags = SNUG_FIT | STACKABLE_HELMET_EXEMPT
resistance_flags = FIRE_PROOF
@@ -211,6 +212,7 @@
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
visor_flags_cover = NONE
flags_inv = HIDEEARS|HIDEHAIR|HIDEFACE|HIDEFACIALHAIR|HIDESNOUT
+ hair_mask = ""
transparent_protection = HIDEMASK|HIDEEYES
visor_flags_inv = NONE
visor_state = "weldvisor_atmos"
@@ -230,6 +232,8 @@
hat_type = "pumpkin"
clothing_flags = SNUG_FIT | STACKABLE_HELMET_EXEMPT
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
+ hair_mask = ""
+
armor_type = /datum/armor/none
light_range = 2 //luminosity when on
flags_cover = HEADCOVERSEYES
@@ -296,6 +300,7 @@
inhand_icon_state = null
hat_type = "reindeer"
flags_inv = 0
+ hair_mask = ""
armor_type = /datum/armor/none
light_range = 1 //luminosity when on
clothing_traits = list()
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index b8e6bfa7ada2a..c3072ac135540 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -645,7 +645,7 @@
take_damage(1, BRUTE, 0, 0)
/obj/item/clothing/head/helmet/durability/watermelon
- name = "Watermelon Helmet"
+ name = "watermelon helmet"
desc = "A helmet cut out from a watermelon. Might take a few hits, but don't expect it whitstand much."
icon_state = "watermelon"
inhand_icon_state = "watermelon"
@@ -677,8 +677,8 @@
wound = 5
/obj/item/clothing/head/helmet/durability/holymelon
- name = "Holymelon Helmet"
- desc = "A helmet from a hollowed out holymelon. Might take a few hits, but don't expect it whitstand much."
+ name = "holymelon helmet"
+ desc = "A helmet from a hollowed out holymelon. Might take a few hits, but don't expect it to withstand much."
icon_state = "holymelon"
inhand_icon_state = "holymelon"
flags_inv = HIDEEARS
@@ -713,7 +713,7 @@
take_damage(8, BRUTE, 0, 0)
/obj/item/clothing/head/helmet/durability/barrelmelon
- name = "Barrelmelon Helmet"
+ name = "barrelmelon helmet"
desc = "A helmet from hollowed out barrelmelon. As sturdy as if made from actual wood, though its rigid structure makes it break up quicker."
icon_state = "barrelmelon"
inhand_icon_state = "barrelmelon"
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index a15a59f05addf..640867a7c9334 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -707,7 +707,7 @@
if(human_examined.is_mouth_covered())
final_message += "\tYou can't see [examining.p_their()] mouth."
else
- var/obj/item/organ/internal/tongue/has_tongue = human_examined.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/has_tongue = human_examined.get_organ_slot(ORGAN_SLOT_TONGUE)
var/pill_count = 0
for(var/datum/action/item_action/activate_pill/pill in human_examined.actions)
pill_count++
@@ -724,7 +724,7 @@
if(human_examined.is_ears_covered())
final_message += "\tYou can't see [examining.p_their()] ears."
else
- var/obj/item/organ/internal/ears/has_ears = human_examined.get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/has_ears = human_examined.get_organ_slot(ORGAN_SLOT_EARS)
if(has_ears)
if(has_ears.deaf)
final_message += "\tDamaged eardrums in [examining.p_their()] ear canals."
@@ -736,7 +736,7 @@
if(human_examined.is_eyes_covered())
final_message += "\tYou can't see [examining.p_their()] eyes."
else
- var/obj/item/organ/internal/eyes/has_eyes = human_examined.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/has_eyes = human_examined.get_organ_slot(ORGAN_SLOT_EYES)
if(has_eyes)
final_message += "\tA pair of [has_eyes.damage ? "" : "healthy "][has_eyes.name]."
else
diff --git a/code/modules/clothing/head/pirate.dm b/code/modules/clothing/head/pirate.dm
index ab1aaba8e3739..0f1ede82e5ad0 100644
--- a/code/modules/clothing/head/pirate.dm
+++ b/code/modules/clothing/head/pirate.dm
@@ -11,7 +11,7 @@
/obj/item/clothing/head/costume/pirate/equipped(mob/user, slot)
. = ..()
- if(!(slot_flags & slot))
+ if(!(slot_flags & slot) || isdrone(user))
return
user.grant_language(/datum/language/piratespeak, source = LANGUAGE_HAT)
to_chat(user, span_boldnotice("You suddenly know how to speak like a pirate!"))
diff --git a/code/modules/clothing/head/tinfoilhat.dm b/code/modules/clothing/head/tinfoilhat.dm
index 74ce320a8aba0..c1e6df6c30cfc 100644
--- a/code/modules/clothing/head/tinfoilhat.dm
+++ b/code/modules/clothing/head/tinfoilhat.dm
@@ -109,7 +109,7 @@
";WE REPEAT OUR LIVES DAILY WITHOUT FURTHER QUESTIONS!!"
)
user.say(pick(conspiracy_line), forced=type)
- var/obj/item/organ/internal/brain/brain = user.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/brain = user.get_organ_slot(ORGAN_SLOT_BRAIN)
if(brain)
brain.set_organ_damage(BRAIN_DAMAGE_DEATH)
return OXYLOSS
diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm
index a02c7d1debff9..6d97c116ab11a 100644
--- a/code/modules/clothing/neck/_neck.dm
+++ b/code/modules/clothing/neck/_neck.dm
@@ -234,10 +234,10 @@
var/heart_strength
var/pulse_pressure
- var/obj/item/organ/internal/heart/heart = carbon_patient.get_organ_slot(ORGAN_SLOT_HEART)
- var/obj/item/organ/internal/lungs/lungs = carbon_patient.get_organ_slot(ORGAN_SLOT_LUNGS)
- var/obj/item/organ/internal/liver/liver = carbon_patient.get_organ_slot(ORGAN_SLOT_LIVER)
- var/obj/item/organ/internal/appendix/appendix = carbon_patient.get_organ_slot(ORGAN_SLOT_APPENDIX)
+ var/obj/item/organ/heart/heart = carbon_patient.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/lungs/lungs = carbon_patient.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/liver/liver = carbon_patient.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/appendix/appendix = carbon_patient.get_organ_slot(ORGAN_SLOT_APPENDIX)
var/render_list = list()//information will be packaged in a list for clean display to the user
diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm
index b14573a087cf1..39f0ec16178a1 100644
--- a/code/modules/clothing/outfits/ert.dm
+++ b/code/modules/clothing/outfits/ert.dm
@@ -1,8 +1,8 @@
/datum/outfit/centcom
name = "CentCom Base"
-/datum/outfit/centcom/post_equip(mob/living/carbon/human/centcom_member, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/centcom/post_equip(mob/living/carbon/human/centcom_member, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/implant/mindshield/mindshield = new /obj/item/implant/mindshield(centcom_member)//hmm lets have centcom officials become revs
mindshield.implant(centcom_member, null, silent = TRUE)
@@ -17,8 +17,8 @@
shoes = /obj/item/clothing/shoes/combat/swat
var/additional_radio
-/datum/outfit/centcom/ert/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/centcom/ert/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/radio/headset/R = H.ears
@@ -168,8 +168,8 @@
r_pocket = /obj/item/modular_computer/pda/heads
l_hand = /obj/item/clipboard
-/datum/outfit/centcom/centcom_official/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/centcom/centcom_official/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/modular_computer/pda/heads/pda = H.r_store
@@ -282,9 +282,9 @@
r_pocket = /obj/item/bikehorn/golden
additional_radio = /obj/item/encryptionkey/heads/hop
-/datum/outfit/centcom/ert/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/centcom/ert/clown/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
..()
- if(visualsOnly)
+ if(visuals_only)
return
ADD_TRAIT(H.mind, TRAIT_NAIVE, INNATE_TRAIT)
H.dna.add_mutation(/datum/mutation/human/clumsy)
@@ -308,8 +308,8 @@
r_pocket = /obj/item/ammo_box/strilka310
l_hand = /obj/item/gun/ballistic/rifle/boltaction
-/datum/outfit/centcom/centcom_intern/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/centcom/centcom_intern/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/card/id/W = H.wear_id
@@ -454,8 +454,8 @@
/obj/item/skillchip/disk_verifier,
)
-/datum/outfit/centcom/death_commando/post_equip(mob/living/carbon/human/squaddie, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/centcom/death_commando/post_equip(mob/living/carbon/human/squaddie, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/radio/radio = squaddie.ears
@@ -472,15 +472,16 @@
back = /obj/item/mod/control/pre_equipped/apocryphal/officer
-/datum/outfit/centcom/death_commando/officer/post_equip(mob/living/carbon/human/squaddie, visualsOnly = FALSE)
+/datum/outfit/centcom/death_commando/officer/post_equip(mob/living/carbon/human/squaddie, visuals_only = FALSE)
. = ..()
var/obj/item/mod/control/mod = squaddie.back
if(!istype(mod))
return
- var/obj/item/mod/module/hat_stabilizer/hat_holder = locate() in mod.modules
- var/obj/item/clothing/head/helmet/space/beret/beret = new(hat_holder)
- hat_holder.attached_hat = beret
- squaddie.update_clothing(mod.slot_flags)
+ var/obj/item/clothing/helmet = mod.get_part_from_slot(ITEM_SLOT_HEAD)
+ var/obj/item/clothing/head/helmet/space/beret/beret = new(helmet)
+ var/datum/component/hat_stabilizer/component = helmet.GetComponent(/datum/component/hat_stabilizer)
+ component.attach_hat(beret)
+ squaddie.update_clothing(helmet.slot_flags)
/datum/outfit/centcom/ert/marine
name = "Marine Commander"
diff --git a/code/modules/clothing/outfits/event.dm b/code/modules/clothing/outfits/event.dm
index b99ea6f526202..25b7f5665b594 100644
--- a/code/modules/clothing/outfits/event.dm
+++ b/code/modules/clothing/outfits/event.dm
@@ -14,8 +14,8 @@
box = /obj/item/storage/box/survival/engineer
-/datum/outfit/santa/post_equip(mob/living/carbon/human/user, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/santa/post_equip(mob/living/carbon/human/user, visuals_only = FALSE)
+ if(visuals_only)
return
user.fully_replace_character_name(user.real_name, "Santa Claus")
user.mind.set_assigned_role(SSjob.get_job_type(/datum/job/santa))
diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm
index 46bdd0742bb5b..3f10afb3158e3 100644
--- a/code/modules/clothing/outfits/standard.dm
+++ b/code/modules/clothing/outfits/standard.dm
@@ -15,8 +15,8 @@
shoes = /obj/item/clothing/shoes/combat/swat
r_pocket = /obj/item/lighter
-/datum/outfit/centcom/spec_ops/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/centcom/spec_ops/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/card/id/W = H.wear_id
@@ -81,8 +81,8 @@
r_hand = /obj/item/mop
l_hand = /obj/item/reagent_containers/cup/bucket
-/datum/outfit/tournament/janitor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/tournament/janitor/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/reagent_containers/cup/bucket/bucket = H.get_item_for_held_index(1)
@@ -160,8 +160,8 @@
r_pocket = /obj/item/bikehorn
l_hand = /obj/item/fireaxe
-/datum/outfit/tunnel_clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/tunnel_clown/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/card/id/W = H.wear_id
@@ -206,11 +206,11 @@
l_pocket = /obj/item/melee/energy/sword/saber
l_hand = /obj/item/storage/briefcase/secure
-/datum/outfit/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/assassin/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
var/obj/item/clothing/under/U = H.w_uniform
U.attach_accessory(new /obj/item/clothing/accessory/waistcoat(H))
- if(visualsOnly)
+ if(visuals_only)
return
//Could use a type
@@ -250,8 +250,8 @@
l_pocket = /obj/item/ammo_box/a357
r_pocket = /obj/item/lighter
-/datum/outfit/centcom/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/centcom/commander/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/card/id/W = H.wear_id
@@ -303,8 +303,8 @@
r_pocket = /obj/item/teleportation_scroll
l_hand = /obj/item/staff
-/datum/outfit/wizard/post_equip(mob/living/carbon/human/wizard, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/wizard/post_equip(mob/living/carbon/human/wizard, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/spellbook/new_spellbook = locate() in wizard.back
@@ -315,7 +315,7 @@
name = "Wizard - Bookless"
backpack_contents = list()
-/datum/outfit/wizard/bookless/post_equip(mob/living/carbon/human/wizard, visualsOnly)
+/datum/outfit/wizard/bookless/post_equip(mob/living/carbon/human/wizard, visuals_only)
return
/datum/outfit/wizard/apprentice
@@ -362,8 +362,8 @@
head = /obj/item/clothing/head/costume/pirate/captain
shoes = /obj/item/clothing/shoes/combat
-/datum/outfit/centcom/soviet/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/centcom/soviet/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/card/id/W = H.wear_id
@@ -387,8 +387,8 @@
shoes = /obj/item/clothing/shoes/laceup
l_hand = /obj/item/gun/ballistic/automatic/tommygun
-/datum/outfit/mobster/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/mobster/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return
var/obj/item/card/id/W = H.wear_id
@@ -404,7 +404,7 @@
mask = /obj/item/clothing/mask/breath
back = /obj/item/mod/control/pre_equipped/chrono
-/datum/outfit/chrono_agent/post_equip(mob/living/carbon/human/agent, visualsOnly)
+/datum/outfit/chrono_agent/post_equip(mob/living/carbon/human/agent, visuals_only)
. = ..()
var/obj/item/mod/control/mod = agent.back
if(!istype(mod))
@@ -437,7 +437,7 @@
box = /obj/item/storage/box/debugtools
internals_slot = ITEM_SLOT_SUITSTORE
-/datum/outfit/debug/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/debug/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
var/obj/item/card/id/W = H.wear_id
W.registered_name = H.real_name
W.update_label()
@@ -469,7 +469,7 @@
box = /obj/item/storage/box/debugtools
internals_slot = ITEM_SLOT_SUITSTORE
-/datum/outfit/admin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/admin/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
var/obj/item/card/id/W = H.wear_id
W.registered_name = H.real_name
W.update_label()
diff --git a/code/modules/clothing/outfits/vv_outfit.dm b/code/modules/clothing/outfits/vv_outfit.dm
index 6277b5c1dd8c0..eba12d3976b75 100644
--- a/code/modules/clothing/outfits/vv_outfit.dm
+++ b/code/modules/clothing/outfits/vv_outfit.dm
@@ -6,7 +6,7 @@
var/list/stored_access
var/update_id_name = FALSE //If the name of the human is same as the name on the id they're wearing we'll update provided id when equipping
-/datum/outfit/varedit/pre_equip(mob/living/carbon/human/equipping_mob, visualsOnly)
+/datum/outfit/varedit/pre_equip(mob/living/carbon/human/equipping_mob, visuals_only)
equipping_mob.delete_equipment() //Applying VV to wrong objects is not reccomended.
return ..()
@@ -139,7 +139,7 @@
GLOB.custom_outfits += outfit
to_chat(usr,"Outfit registered, use select equipment to equip it.")
-/datum/outfit/varedit/post_equip(mob/living/carbon/human/human, visualsOnly)
+/datum/outfit/varedit/post_equip(mob/living/carbon/human/human, visuals_only)
. = ..()
//Apply VV
for(var/slot in vv_values)
diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm
index 53ab86b07718e..3ecec813a95ce 100644
--- a/code/modules/clothing/shoes/_shoes.dm
+++ b/code/modules/clothing/shoes/_shoes.dm
@@ -4,6 +4,10 @@
lefthand_file = 'icons/mob/inhands/clothing/shoes_lefthand.dmi'
righthand_file = 'icons/mob/inhands/clothing/shoes_righthand.dmi'
desc = "Comfortable-looking shoes."
+ pickup_sound = 'sound/items/handling/shoes/sneakers_pickup1.ogg'
+ drop_sound = 'sound/items/handling/shoes/sneakers_drop1.ogg'
+ equip_sound = 'sound/items/equip/sneakers_equip1.ogg'
+ sound_vary = TRUE
gender = PLURAL //Carn: for grammarically correct text-parsing
body_parts_covered = FEET
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index 38d4770244abd..0109c422210b9 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -12,7 +12,7 @@
strip_delay = 70
equip_delay_other = 70
resistance_flags = FIRE_PROOF
-
+ clothing_flags = STOPSPRESSUREDAMAGE
slowdown = SHOES_SLOWDOWN
/// Whether the magpulse system is active
var/magpulse = FALSE
diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm
index d1578c20342fd..0a672d5566ac3 100644
--- a/code/modules/clothing/spacesuits/plasmamen.dm
+++ b/code/modules/clothing/spacesuits/plasmamen.dm
@@ -41,7 +41,7 @@
// This is weird but basically we're calling this proc once the cooldown ends in case our wearer gets set on fire again during said cooldown
// This is why we're ignoring source and instead checking by loc
var/mob/living/carbon/human/owner = loc
- if (!owner.on_fire || !owner.is_atmos_sealed(additional_flags = PLASMAMAN_PREVENT_IGNITION, check_hands = TRUE, ignore_chest_pressureprot = TRUE))
+ if (!owner.on_fire || !owner.is_atmos_sealed(additional_flags = PLASMAMAN_PREVENT_IGNITION, check_hands = TRUE, alt_flags = TRUE))
return
if (!extinguishes_left || !COOLDOWN_FINISHED(src, extinguish_timer))
@@ -89,18 +89,17 @@
light_color = "#ffcc99"
light_on = FALSE
fishing_modifier = 0
- var/helmet_on = FALSE
- var/smile = FALSE
- var/smile_color = COLOR_RED
- var/visor_icon = "envisor"
- var/smile_state = "envirohelm_smile"
- var/obj/item/clothing/head/attached_hat
actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_welding_screen)
visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
flags_cover = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF
visor_flags_inv = HIDEEYES|HIDEFACE
slowdown = 0
+ var/helmet_on = FALSE
+ var/smile = FALSE
+ var/smile_color = COLOR_RED
+ var/visor_icon = "envisor"
+ var/smile_state = "envirohelm_smile"
/datum/armor/space_plasmaman
bio = 100
@@ -110,30 +109,17 @@
/obj/item/clothing/head/helmet/space/plasmaman/Initialize(mapload)
. = ..()
visor_toggling()
+ AddComponent(/datum/component/hat_stabilizer)
update_appearance()
register_context()
/obj/item/clothing/head/helmet/space/plasmaman/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
context[SCREENTIP_CONTEXT_ALT_LMB] = "Toggle Welding Screen"
-
- if(attached_hat)
- context[SCREENTIP_CONTEXT_RMB] = "Remove hat"
-
- if(istype(held_item, /obj/item/clothing/head))
- context[SCREENTIP_CONTEXT_LMB] = "Attach hat"
-
if(istype(held_item, /obj/item/toy/crayon))
context[SCREENTIP_CONTEXT_LMB] = "Vandalize"
return CONTEXTUAL_SCREENTIP_SET
-/obj/item/clothing/head/helmet/space/plasmaman/examine()
- . = ..()
- if(attached_hat)
- . += span_notice("There's [attached_hat.name] placed on the helmet.")
- else
- . += span_notice("There's nothing placed on the helmet.")
-
/obj/item/clothing/head/helmet/space/plasmaman/click_alt(mob/user)
if(user.can_perform_action(src))
adjust_visor(user)
@@ -171,37 +157,21 @@
. += smiley
/obj/item/clothing/head/helmet/space/plasmaman/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
- if(istype(tool, /obj/item/toy/crayon))
- if(smile)
- to_chat(user, span_warning("Seems like someone already drew something on [src]'s visor!"))
- return ITEM_INTERACT_BLOCKING
-
- var/obj/item/toy/crayon/crayon = tool
- to_chat(user, span_notice("You start drawing a smiley face on [src]'s visor..."))
- if(!do_after(user, 2.5 SECONDS, target = src))
- return ITEM_INTERACT_BLOCKING
-
- smile = TRUE
- smile_color = crayon.paint_color
- to_chat(user, "You draw a smiley on [src] visor.")
- update_appearance()
- return ITEM_INTERACT_SUCCESS
-
- if(!istype(tool, /obj/item/clothing/head))
+ if(!istype(tool, /obj/item/toy/crayon))
return NONE
- var/obj/item/clothing/hitting_clothing = tool
- if(hitting_clothing.clothing_flags & STACKABLE_HELMET_EXEMPT)
- to_chat(user, span_notice("You cannot place [hitting_clothing.name] on [src]!"))
+ if(smile)
+ to_chat(user, span_warning("Seems like someone already drew something on [src]'s visor!"))
return ITEM_INTERACT_BLOCKING
- if(attached_hat)
- to_chat(user, span_notice("There's already something placed on [src]!"))
+ var/obj/item/toy/crayon/crayon = tool
+ to_chat(user, span_notice("You start drawing a smiley face on [src]'s visor..."))
+ if(!do_after(user, 2.5 SECONDS, target = src))
return ITEM_INTERACT_BLOCKING
- attached_hat = hitting_clothing
- to_chat(user, span_notice("You placed [hitting_clothing.name] on [src]!"))
- hitting_clothing.forceMove(src)
+ smile = TRUE
+ smile_color = crayon.paint_color
+ to_chat(user, "You draw a smiley on [src] visor.")
update_appearance()
return ITEM_INTERACT_SUCCESS
@@ -209,11 +179,9 @@
/obj/item/clothing/head/helmet/space/plasmaman/worn_overlays(mutable_appearance/standing, isinhands)
. = ..()
if(!isinhands && smile)
- var/mutable_appearance/M = mutable_appearance('icons/mob/clothing/head/plasmaman_head.dmi', smile_state)
- M.color = smile_color
- . += M
- if(!isinhands && attached_hat)
- . += attached_hat.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/clothing/head/default.dmi')
+ var/mutable_appearance/smiley = mutable_appearance('icons/mob/clothing/head/plasmaman_head.dmi', smile_state)
+ smiley.color = smile_color
+ . += smiley
if(!isinhands && !up)
. += mutable_appearance('icons/mob/clothing/head/plasmaman_head.dmi', visor_icon)
else
@@ -249,16 +217,6 @@
update_appearance()
return TRUE
-/obj/item/clothing/head/helmet/space/plasmaman/attack_hand_secondary(mob/user)
- ..()
- . = SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
- if(!attached_hat)
- return
- user.put_in_active_hand(attached_hat)
- to_chat(user, span_notice("You removed [attached_hat.name] from helmet!"))
- attached_hat = null
- update_appearance()
-
/obj/item/clothing/head/helmet/space/plasmaman/security
name = "security plasma envirosuit helmet"
desc = "A plasmaman containment helmet designed for security officers, protecting them from burning alive, alongside other undesirables."
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 4569171c19a42..9374dbf000048 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -759,8 +759,8 @@
take_damage(1, BRUTE, 0, 0)
/obj/item/clothing/suit/armor/durability/watermelon
- name = "watermelon"
- desc = "An armour, made from watermelons. Propably won't take too many hits, but at least it looks serious... As serious as worn watermelon can be."
+ name = "watermelon armor"
+ desc = "An armor, made from watermelons. Propably won't take too many hits, but at least it looks serious... As serious as worn watermelon can be."
icon_state = "watermelon"
inhand_icon_state = null
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
@@ -793,8 +793,8 @@
wound = 5
/obj/item/clothing/suit/armor/durability/holymelon
- name = "holymelon"
- desc = "An armour, made from holymelons. Inspires you to go on some sort of a crusade... Perhaps spreading spinach to children?"
+ name = "holymelon armor"
+ desc = "An armor, made from holymelons. Inspires you to go on some sort of a crusade... Perhaps spreading spinach to children?"
icon_state = "holymelon"
inhand_icon_state = null
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
@@ -832,8 +832,8 @@
/obj/item/clothing/suit/armor/durability/barrelmelon
- name = "barrelmelon"
- desc = "An armour, made from barrelmelons. Reeks of ale, inspiring to courageous deeds. Or, perhaps, a bar brawl."
+ name = "barrelmelon armor"
+ desc = "An armor, made from barrelmelons. Reeks of ale, inspiring to courageous deeds. Or, perhaps, a bar brawl."
icon_state = "barrelmelon"
inhand_icon_state = null
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
diff --git a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm
index 1d2166653aef3..c25f6f7792942 100644
--- a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm
+++ b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm
@@ -43,7 +43,7 @@
// This is weird but basically we're calling this proc once the cooldown ends in case our wearer gets set on fire again during said cooldown
// This is why we're ignoring source and instead checking by loc
var/mob/living/carbon/human/owner = loc
- if (!owner.on_fire || !owner.is_atmos_sealed(additional_flags = PLASMAMAN_PREVENT_IGNITION, check_hands = TRUE, ignore_chest_pressureprot = TRUE))
+ if (!owner.on_fire || !owner.is_atmos_sealed(additional_flags = PLASMAMAN_PREVENT_IGNITION, check_hands = TRUE, alt_flags = TRUE))
return
if (!extinguishes_left || !COOLDOWN_FINISHED(src, extinguish_timer))
@@ -163,7 +163,7 @@
// This is weird but basically we're calling this proc once the cooldown ends in case our wearer gets set on fire again during said cooldown
// This is why we're ignoring source and instead checking by loc
var/mob/living/carbon/human/owner = loc
- if (!owner.on_fire || !owner.is_atmos_sealed(additional_flags = PLASMAMAN_PREVENT_IGNITION, check_hands = TRUE, ignore_chest_pressureprot = TRUE))
+ if (!owner.on_fire || !owner.is_atmos_sealed(additional_flags = PLASMAMAN_PREVENT_IGNITION, check_hands = TRUE, alt_flags = TRUE))
return
if (!extinguishes_left || !COOLDOWN_FINISHED(src, extinguish_timer))
diff --git a/code/modules/deathmatch/deathmatch_loadouts.dm b/code/modules/deathmatch/deathmatch_loadouts.dm
index 5670995512001..b80ec573419fe 100644
--- a/code/modules/deathmatch/deathmatch_loadouts.dm
+++ b/code/modules/deathmatch/deathmatch_loadouts.dm
@@ -12,7 +12,7 @@
/// This outfit will grant these mutations if applied
var/list/mutations_to_add = list()
-/datum/outfit/deathmatch_loadout/pre_equip(mob/living/carbon/human/user, visualsOnly = FALSE)
+/datum/outfit/deathmatch_loadout/pre_equip(mob/living/carbon/human/user, visuals_only = FALSE)
. = ..()
if(isdummy(user))
return
@@ -914,13 +914,13 @@
// We don't want them to just punch each other to death
-/datum/outfit/deathmatch_loadout/lattice_battles/pre_equip(mob/living/carbon/human/user, visualsOnly)
+/datum/outfit/deathmatch_loadout/lattice_battles/pre_equip(mob/living/carbon/human/user, visuals_only)
. = ..()
ADD_TRAIT(user, TRAIT_PACIFISM, REF(src))
// Ragnarok: Fight between religions!
-/datum/outfit/deathmatch_loadout/cultish/pre_equip(mob/living/carbon/human/user, visualsOnly)
+/datum/outfit/deathmatch_loadout/cultish/pre_equip(mob/living/carbon/human/user, visuals_only)
. = ..()
ADD_TRAIT(user, TRAIT_ACT_AS_CULTIST, REF(src))
user.AddElement(/datum/element/cult_halo, initial_delay = 0 SECONDS)
@@ -990,7 +990,7 @@
/datum/action/innate/cult/blood_spell/manipulation,
)
-/datum/outfit/deathmatch_loadout/cultish/artificer/post_equip(mob/living/carbon/human/user, visualsOnly)
+/datum/outfit/deathmatch_loadout/cultish/artificer/post_equip(mob/living/carbon/human/user, visuals_only)
. = ..()
var/datum/action/innate/cult/blood_spell/manipulation/magick = locate() in user.get_all_contents()
magick.charges = 300
@@ -999,7 +999,7 @@
/// Grants the effects of these knowledges to the DMer
var/list/knowledge_to_grant
-/datum/outfit/deathmatch_loadout/heresy/pre_equip(mob/living/carbon/human/user, visualsOnly)
+/datum/outfit/deathmatch_loadout/heresy/pre_equip(mob/living/carbon/human/user, visuals_only)
. = ..()
ADD_TRAIT(user, TRAIT_ACT_AS_HERETIC, REF(src))
user.AddElement(/datum/element/leeching_walk)
diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm
index 7110e368dce68..29a64c2b98a7a 100644
--- a/code/modules/detectivework/evidence.dm
+++ b/code/modules/detectivework/evidence.dm
@@ -9,95 +9,72 @@
w_class = WEIGHT_CLASS_TINY
item_flags = NOBLUDGEON
+/obj/item/evidencebag/Initialize(mapload)
+ . = ..()
+ create_storage(
+ max_slots = 1,
+ max_specific_storage = WEIGHT_CLASS_NORMAL,
+ )
+ RegisterSignal(atom_storage, COMSIG_STORAGE_STORED_ITEM, PROC_REF(on_insert))
+ RegisterSignal(atom_storage, COMSIG_STORAGE_REMOVED_ITEM, PROC_REF(on_remove))
+
/obj/item/evidencebag/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
if(interacting_with == loc || !isitem(interacting_with) || HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION))
return NONE
- if(evidencebagEquip(interacting_with, user))
+ if(atom_storage.attempt_insert(interacting_with, user))
return ITEM_INTERACT_SUCCESS
return NONE
/obj/item/evidencebag/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
- if(evidencebagEquip(tool, user))
+ if(atom_storage.attempt_insert(tool, user))
return ITEM_INTERACT_SUCCESS
return NONE
-/obj/item/evidencebag/Exited(atom/movable/gone, direction)
+/obj/item/evidencebag/update_desc(updates)
. = ..()
- cut_overlays()
- update_weight_class(initial(w_class))
- icon_state = initial(icon_state)
- desc = initial(desc)
-
-/obj/item/evidencebag/proc/evidencebagEquip(obj/item/I, mob/user)
- if(!istype(I) || I.anchored)
- return FALSE
-
- if(loc.atom_storage && I.atom_storage)
- to_chat(user, span_warning("No matter what way you try, you can't get [I] to fit inside [src]."))
- return TRUE //begone infinite storage ghosts, begone from me
-
- if(HAS_TRAIT(I, TRAIT_NO_STORAGE_INSERT))
- to_chat(user, span_warning("No matter what way you try, you can't get [I] to fit inside [src]."))
- return TRUE
-
- if(istype(I, /obj/item/evidencebag))
- to_chat(user, span_warning("You find putting an evidence bag in another evidence bag to be slightly absurd."))
- return TRUE //now this is podracing
-
- if(loc in I.get_all_contents()) // fixes tg #39452, evidence bags could store their own location, causing I to be stored in the bag while being present inworld still, and able to be teleported when removed.
- to_chat(user, span_warning("You find putting [I] in [src] while it's still inside it quite difficult!"))
- return TRUE
-
- if(I.w_class > WEIGHT_CLASS_NORMAL)
- to_chat(user, span_warning("[I] won't fit in [src]!"))
- return TRUE
-
- if(contents.len)
- to_chat(user, span_warning("[src] already has something inside it!"))
- return TRUE
-
- if(!isturf(I.loc)) //If it isn't on the floor. Do some checks to see if it's in our hands or a box. Otherwise give up.
- if(I.loc.atom_storage) //in a container.
- I.loc.atom_storage.remove_single(user, I, src)
- if(!user.is_holding(I) || HAS_TRAIT(I, TRAIT_NODROP))
- return TRUE
-
- if(QDELETED(I))
- return TRUE
-
- user.visible_message(span_notice("[user] puts [I] into [src]."), span_notice("You put [I] inside [src]."),\
- span_hear("You hear a rustle as someone puts something into a plastic bag."))
+ if(!atom_storage.get_total_weight())
+ desc = src::desc
+ return
+ var/obj/item/inserted = locate(/obj/item) in atom_storage.real_location
+ desc = "An evidence bag containing [inserted]. [inserted.desc]"
+/obj/item/evidencebag/update_icon_state()
+ . = ..()
+ if(!atom_storage.get_total_weight())
+ icon_state = "evidenceobj"
+ return
icon_state = "evidence"
- var/mutable_appearance/in_evidence = new(I)
+/obj/item/evidencebag/update_overlays()
+ . = ..()
+ if(!atom_storage.get_total_weight())
+ return
+ var/obj/item/inserted = locate(/obj/item) in atom_storage.real_location
+ var/mutable_appearance/in_evidence = new(inserted)
in_evidence.plane = FLOAT_PLANE
in_evidence.layer = FLOAT_LAYER
in_evidence.pixel_x = 0
in_evidence.pixel_y = 0
- add_overlay(in_evidence)
- add_overlay("evidence") //should look nicer for transparent stuff. not really that important, but hey.
+ . += in_evidence
+ . += "evidence"
- desc = "An evidence bag containing [I]. [I.desc]"
- I.forceMove(src)
- update_weight_class(I.w_class)
- return TRUE
+/obj/item/evidencebag/proc/on_insert(datum/storage/storage, obj/item/to_insert, mob/user, force)
+ SIGNAL_HANDLER
+ update_weight_class(to_insert.w_class)
-/obj/item/evidencebag/attack_self(mob/user)
- if(contents.len)
- var/obj/item/I = contents[1]
- user.visible_message(span_notice("[user] takes [I] out of [src]."), span_notice("You take [I] out of [src]."),\
- span_hear("You hear someone rustle around in a plastic bag, and remove something."))
- cut_overlays() //remove the overlays
- user.put_in_hands(I)
- update_weight_class(WEIGHT_CLASS_TINY)
- icon_state = "evidenceobj"
- desc = "An empty evidence bag."
+/obj/item/evidencebag/proc/on_remove(datum/storage/storage, obj/item/to_remove, atom/remove_to_loc, silent)
+ SIGNAL_HANDLER
+ if(!atom_storage.get_total_weight())
+ return
+ update_weight_class(WEIGHT_CLASS_TINY)
- else
+/obj/item/evidencebag/attack_self(mob/user)
+ if(!atom_storage.get_total_weight())
to_chat(user, span_notice("[src] is empty."))
- icon_state = "evidenceobj"
- return
+ return
+ user.visible_message(span_notice("[user] empties [src]."), span_notice("You empty [src]."),\
+ span_hear("You hear someone rustle around in a plastic bag, and remove something."))
+ atom_storage.remove_all()
/obj/item/storage/box/evidence
name = "evidence bag box"
diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm
index 7f3b732caf4de..eed92903f3cef 100644
--- a/code/modules/detectivework/scanner.dm
+++ b/code/modules/detectivework/scanner.dm
@@ -103,9 +103,13 @@
* This should always return TRUE barring a runtime
*/
/obj/item/detective_scanner/proc/scan(mob/user, atom/scanned_atom)
- // Can remotely scan objects and mobs.
- if((get_dist(scanned_atom, user) > range) || (!(scanned_atom in view(range, user)) && view_check) || (loc != user))
+ if(loc != user)
return TRUE
+ // Can scan items we hold and store
+ if(!(scanned_atom in user.get_all_contents()))
+ // Can remotely scan objects and mobs.
+ if((get_dist(scanned_atom, user) > range) || (!(scanned_atom in view(range, user)) && view_check))
+ return TRUE
playsound(src, SFX_INDUSTRIAL_SCAN, 20, TRUE, -2, TRUE, FALSE)
scanner_busy = TRUE
diff --git a/code/modules/events/anomaly/anomaly_bioscrambler.dm b/code/modules/events/anomaly/anomaly_bioscrambler.dm
index 21df8bdc72c6b..7005afda72862 100644
--- a/code/modules/events/anomaly/anomaly_bioscrambler.dm
+++ b/code/modules/events/anomaly/anomaly_bioscrambler.dm
@@ -2,7 +2,7 @@
name = "Anomaly: Bioscrambler"
typepath = /datum/round_event/anomaly/anomaly_bioscrambler
- min_players = 10
+ min_players = 5
max_occurrences = 5
weight = 20
description = "This anomaly replaces the limbs of nearby people."
diff --git a/code/modules/events/anomaly/anomaly_dimensional.dm b/code/modules/events/anomaly/anomaly_dimensional.dm
index 4ac67d6b6dde8..eeda1bba3eef9 100644
--- a/code/modules/events/anomaly/anomaly_dimensional.dm
+++ b/code/modules/events/anomaly/anomaly_dimensional.dm
@@ -2,7 +2,7 @@
name = "Anomaly: Dimensional"
typepath = /datum/round_event/anomaly/anomaly_dimensional
- min_players = 10
+ min_players = 5
max_occurrences = 5
weight = 20
description = "This anomaly replaces the materials of the surrounding area."
diff --git a/code/modules/events/anomaly/anomaly_ectoplasm.dm b/code/modules/events/anomaly/anomaly_ectoplasm.dm
index 8c37f8f1017c3..71f2d4666c32e 100644
--- a/code/modules/events/anomaly/anomaly_ectoplasm.dm
+++ b/code/modules/events/anomaly/anomaly_ectoplasm.dm
@@ -6,7 +6,7 @@
name = "Anomaly: Ectoplasmic Outburst"
description = "Anomaly that produces an effect of varying intensity based on how many ghosts are orbiting it."
typepath = /datum/round_event/anomaly/anomaly_ectoplasm
- min_players = 30
+ min_players = 5
max_occurrences = 2
weight = 4 //Rare because of its wacky and silly nature
category = EVENT_CATEGORY_ANOMALIES
diff --git a/code/modules/events/anomaly/anomaly_flux.dm b/code/modules/events/anomaly/anomaly_flux.dm
index d05ebb20730df..882dfd2792cf4 100644
--- a/code/modules/events/anomaly/anomaly_flux.dm
+++ b/code/modules/events/anomaly/anomaly_flux.dm
@@ -2,7 +2,7 @@
name = "Anomaly: Hyper-Energetic Flux"
typepath = /datum/round_event/anomaly/anomaly_flux
- min_players = 10
+ min_players = 5
max_occurrences = 5
weight = 20
description = "This anomaly shocks and explodes."
diff --git a/code/modules/events/anomaly/anomaly_hallucination.dm b/code/modules/events/anomaly/anomaly_hallucination.dm
index 11e838136b1cd..c71f328148063 100644
--- a/code/modules/events/anomaly/anomaly_hallucination.dm
+++ b/code/modules/events/anomaly/anomaly_hallucination.dm
@@ -2,7 +2,7 @@
name = "Anomaly: Hallucination"
typepath = /datum/round_event/anomaly/anomaly_hallucination
- min_players = 10
+ min_players = 5
max_occurrences = 5
weight = 20
description = "This anomaly causes you to hallucinate."
diff --git a/code/modules/events/anomaly/anomaly_vortex.dm b/code/modules/events/anomaly/anomaly_vortex.dm
index 2801f61bca94a..a5146dd10c518 100644
--- a/code/modules/events/anomaly/anomaly_vortex.dm
+++ b/code/modules/events/anomaly/anomaly_vortex.dm
@@ -2,7 +2,7 @@
name = "Anomaly: Vortex"
typepath = /datum/round_event/anomaly/anomaly_vortex
- min_players = 20
+ min_players = 10
max_occurrences = 2
weight = 10
description = "This anomaly sucks in and detonates items."
diff --git a/code/modules/events/brain_trauma.dm b/code/modules/events/brain_trauma.dm
index 32af7abad5f3c..390c4b7ef6a7f 100644
--- a/code/modules/events/brain_trauma.dm
+++ b/code/modules/events/brain_trauma.dm
@@ -2,7 +2,7 @@
name = "Spontaneous Brain Trauma"
typepath = /datum/round_event/brain_trauma
weight = 25
- min_players = 13
+ min_players = 5
category = EVENT_CATEGORY_HEALTH
description = "A crewmember gains a random trauma."
min_wizard_trigger_potency = 2
@@ -17,7 +17,7 @@
continue
if(H.stat == DEAD) // What are you doing in this list
continue
- if(!H.get_organ_by_type(/obj/item/organ/internal/brain)) // If only I had a brain
+ if(!H.get_organ_by_type(/obj/item/organ/brain)) // If only I had a brain
continue
if(!(H.mind.assigned_role.job_flags & JOB_CREW_MEMBER)) //please stop giving my centcom admin gimmicks full body paralysis
continue
diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm
index fdbf46d48c6d0..38ff5de412082 100644
--- a/code/modules/events/brand_intelligence.dm
+++ b/code/modules/events/brand_intelligence.dm
@@ -4,7 +4,7 @@
weight = 5
category = EVENT_CATEGORY_AI
description = "Vending machines will attack people until the Patient Zero is disabled."
- min_players = 15
+ min_players = 10
max_occurrences = 1
min_wizard_trigger_potency = 2
max_wizard_trigger_potency = 6
diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm
index 25d93f8bd5559..56f569be51404 100644
--- a/code/modules/events/carp_migration.dm
+++ b/code/modules/events/carp_migration.dm
@@ -2,7 +2,7 @@
name = "Carp Migration"
typepath = /datum/round_event/carp_migration
weight = 15
- min_players = 12
+ min_players = 15
earliest_start = 10 MINUTES
max_occurrences = 6
category = EVENT_CATEGORY_ENTITIES
diff --git a/code/modules/events/creep_awakening.dm b/code/modules/events/creep_awakening.dm
index 648c2cc9db04c..a65f8849c627f 100644
--- a/code/modules/events/creep_awakening.dm
+++ b/code/modules/events/creep_awakening.dm
@@ -2,7 +2,7 @@
name = "Obsession Awakening"
typepath = /datum/round_event/obsessed
max_occurrences = 1
- min_players = 20
+ min_players = 5
category = EVENT_CATEGORY_HEALTH
description = "A random crewmember becomes obsessed with another."
@@ -19,7 +19,7 @@
continue
if(H.mind.has_antag_datum(/datum/antagonist/obsessed))
continue
- if(!H.get_organ_by_type(/obj/item/organ/internal/brain))
+ if(!H.get_organ_by_type(/obj/item/organ/brain))
continue
H.gain_trauma(/datum/brain_trauma/special/obsessed)
announce_to_ghosts(H)
diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm
index 3856bf550b4a3..dfd69a52f9f5e 100644
--- a/code/modules/events/disease_outbreak.dm
+++ b/code/modules/events/disease_outbreak.dm
@@ -27,7 +27,7 @@
name = "Disease Outbreak: Classic"
typepath = /datum/round_event/disease_outbreak
max_occurrences = 1
- min_players = 10
+ min_players = 5
weight = 5
category = EVENT_CATEGORY_HEALTH
description = "A 'classic' virus will infect some members of the crew."
@@ -166,7 +166,7 @@
typepath = /datum/round_event/disease_outbreak/advanced
category = EVENT_CATEGORY_HEALTH
weight = 15
- min_players = 35 // To avoid shafting lowpop
+ min_players = 20 // To avoid shafting lowpop
earliest_start = 15 MINUTES // give the chemist a chance
description = "An 'advanced' disease will infect some members of the crew."
min_wizard_trigger_potency = 2
diff --git a/code/modules/events/earthquake.dm b/code/modules/events/earthquake.dm
index 58b0a7e40821a..26e4031de4ca7 100644
--- a/code/modules/events/earthquake.dm
+++ b/code/modules/events/earthquake.dm
@@ -7,7 +7,7 @@
description = "Causes an earthquake, demolishing anything caught in the fault."
typepath = /datum/round_event/earthquake
category = EVENT_CATEGORY_ENGINEERING
- min_players = 20
+ min_players = 10
max_occurrences = 3
earliest_start = 35 MINUTES
weight = 7
diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm
index d204e97227d82..4ca8e770f96d7 100644
--- a/code/modules/events/electrical_storm.dm
+++ b/code/modules/events/electrical_storm.dm
@@ -2,7 +2,7 @@
name = "Electrical Storm"
typepath = /datum/round_event/electrical_storm
earliest_start = 10 MINUTES
- min_players = 5
+ min_players = 1
weight = 20
category = EVENT_CATEGORY_ENGINEERING
description = "Destroys all lights in a large area."
diff --git a/code/modules/events/ghost_role/abductor.dm b/code/modules/events/ghost_role/abductor.dm
index 7ad20cff1eb4e..6591bdc91e834 100644
--- a/code/modules/events/ghost_role/abductor.dm
+++ b/code/modules/events/ghost_role/abductor.dm
@@ -3,7 +3,7 @@
typepath = /datum/round_event/ghost_role/abductor
weight = 10
max_occurrences = 1
- min_players = 20
+ min_players = 10
dynamic_should_hijack = TRUE
category = EVENT_CATEGORY_INVASION
description = "One or more abductor teams spawns, and they plan to experiment on the crew."
diff --git a/code/modules/events/ghost_role/alien_infestation.dm b/code/modules/events/ghost_role/alien_infestation.dm
index 1c0c938ce89fc..59420c37f8b3d 100644
--- a/code/modules/events/ghost_role/alien_infestation.dm
+++ b/code/modules/events/ghost_role/alien_infestation.dm
@@ -3,7 +3,7 @@
typepath = /datum/round_event/ghost_role/alien_infestation
weight = 5
- min_players = 10
+ min_players = 20
dynamic_should_hijack = TRUE
category = EVENT_CATEGORY_ENTITIES
diff --git a/code/modules/events/ghost_role/changeling_event.dm b/code/modules/events/ghost_role/changeling_event.dm
index ce34aaa07fa95..494e1aaded194 100644
--- a/code/modules/events/ghost_role/changeling_event.dm
+++ b/code/modules/events/ghost_role/changeling_event.dm
@@ -10,7 +10,7 @@
typepath = /datum/round_event/ghost_role/changeling
weight = 8
max_occurrences = 3
- min_players = 20
+ min_players = 10
dynamic_should_hijack = TRUE
category = EVENT_CATEGORY_ENTITIES
description = "A meteor containing a changeling is summoned and thrown at the exterior of the station."
diff --git a/code/modules/events/ghost_role/fugitive_event.dm b/code/modules/events/ghost_role/fugitive_event.dm
index e08304b9925e3..68f71b7bbff02 100644
--- a/code/modules/events/ghost_role/fugitive_event.dm
+++ b/code/modules/events/ghost_role/fugitive_event.dm
@@ -4,7 +4,7 @@
name = "Spawn Fugitives"
typepath = /datum/round_event/ghost_role/fugitives
max_occurrences = 1
- min_players = 20
+ min_players = 5
earliest_start = 30 MINUTES //deadchat sink, lets not even consider it early on.
category = EVENT_CATEGORY_INVASION
description = "Fugitives will hide on the station, followed by hunters."
diff --git a/code/modules/events/ghost_role/nightmare.dm b/code/modules/events/ghost_role/nightmare.dm
index 9f894c237d41c..5318d71094934 100644
--- a/code/modules/events/ghost_role/nightmare.dm
+++ b/code/modules/events/ghost_role/nightmare.dm
@@ -2,7 +2,7 @@
name = "Spawn Nightmare"
typepath = /datum/round_event/ghost_role/nightmare
max_occurrences = 1
- min_players = 20
+ min_players = 5
dynamic_should_hijack = TRUE
category = EVENT_CATEGORY_ENTITIES
description = "Spawns a nightmare, aiming to darken the station."
diff --git a/code/modules/events/grey_tide.dm b/code/modules/events/grey_tide.dm
index 62f5a53374c31..4f6c19e6b6349 100644
--- a/code/modules/events/grey_tide.dm
+++ b/code/modules/events/grey_tide.dm
@@ -2,7 +2,7 @@
name = "Grey Tide"
typepath = /datum/round_event/grey_tide
max_occurrences = 2
- min_players = 5
+ min_players = 1
category = EVENT_CATEGORY_ENGINEERING
description = "Bolts open all doors in one or more departments."
min_wizard_trigger_potency = 0
diff --git a/code/modules/events/heart_attack.dm b/code/modules/events/heart_attack.dm
index a0bc06718c08d..bcd55911bec82 100644
--- a/code/modules/events/heart_attack.dm
+++ b/code/modules/events/heart_attack.dm
@@ -3,7 +3,7 @@
typepath = /datum/round_event/heart_attack
weight = 20
max_occurrences = 2
- min_players = 40 // To avoid shafting lowpop
+ min_players = 20 // To avoid shafting lowpop
category = EVENT_CATEGORY_HEALTH
description = "A random crewmember's heart gives out."
min_wizard_trigger_potency = 6
diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm
index 8cc87a60df515..833afd35bbc52 100644
--- a/code/modules/events/holiday/halloween.dm
+++ b/code/modules/events/holiday/halloween.dm
@@ -61,5 +61,5 @@
/obj/item/food/candy,
/obj/item/food/candiedapple,
/obj/item/food/chocolatebar,
- /obj/item/organ/internal/brain ) // OH GOD THIS ISN'T CANDY!
+ /obj/item/organ/brain ) // OH GOD THIS ISN'T CANDY!
new type(src)
diff --git a/code/modules/events/immovable_rod/immovable_rod.dm b/code/modules/events/immovable_rod/immovable_rod.dm
index e1f0ada0e600c..d73adf8ed756b 100644
--- a/code/modules/events/immovable_rod/immovable_rod.dm
+++ b/code/modules/events/immovable_rod/immovable_rod.dm
@@ -145,7 +145,7 @@
/obj/effect/immovablerod/singularity_act()
return
-/obj/effect/immovablerod/singularity_pull()
+/obj/effect/immovablerod/singularity_pull(atom/singularity, current_size)
return
/obj/effect/immovablerod/Process_Spacemove(movement_dir = 0, continuous_move = FALSE)
diff --git a/code/modules/events/immovable_rod/immovable_rod_event.dm b/code/modules/events/immovable_rod/immovable_rod_event.dm
index 7c618a83a76e7..188577f16217b 100644
--- a/code/modules/events/immovable_rod/immovable_rod_event.dm
+++ b/code/modules/events/immovable_rod/immovable_rod_event.dm
@@ -3,7 +3,7 @@
/datum/round_event_control/immovable_rod
name = "Immovable Rod"
typepath = /datum/round_event/immovable_rod
- min_players = 15
+ min_players = 5
max_occurrences = 5
category = EVENT_CATEGORY_SPACE
description = "The station passes through an immovable rod."
diff --git a/code/modules/events/meteors/meteor_wave_events.dm b/code/modules/events/meteors/meteor_wave_events.dm
index 8a43af74601ad..5f714883d94b4 100644
--- a/code/modules/events/meteors/meteor_wave_events.dm
+++ b/code/modules/events/meteors/meteor_wave_events.dm
@@ -4,7 +4,7 @@
name = "Meteor Wave: Normal"
typepath = /datum/round_event/meteor_wave
weight = 4
- min_players = 15
+ min_players = 20
max_occurrences = 3
earliest_start = 25 MINUTES
category = EVENT_CATEGORY_SPACE
@@ -60,7 +60,7 @@
name = "Meteor Wave: Threatening"
typepath = /datum/round_event/meteor_wave/threatening
weight = 5
- min_players = 20
+ min_players = 25
max_occurrences = 3
earliest_start = 35 MINUTES
description = "A meteor wave with higher chance of big meteors."
diff --git a/code/modules/events/meteors/stray_meteor_event.dm b/code/modules/events/meteors/stray_meteor_event.dm
index 53daff1ac8a1a..8a4038d301c91 100644
--- a/code/modules/events/meteors/stray_meteor_event.dm
+++ b/code/modules/events/meteors/stray_meteor_event.dm
@@ -2,7 +2,7 @@
name = "Stray Meteor"
typepath = /datum/round_event/stray_meteor
weight = 15 //Number subject to change based on how often meteors actually collide with the station
- min_players = 15
+ min_players = 5
max_occurrences = 3
earliest_start = 20 MINUTES
category = EVENT_CATEGORY_SPACE
diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm
index f96b73e66a295..d1fce652f5f70 100644
--- a/code/modules/events/portal_storm.dm
+++ b/code/modules/events/portal_storm.dm
@@ -2,7 +2,7 @@
name = "Portal Storm: Syndicate Shocktroops"
typepath = /datum/round_event/portal_storm/syndicate_shocktroop
weight = 2
- min_players = 15
+ min_players = 20
earliest_start = 30 MINUTES
category = EVENT_CATEGORY_ENTITIES
description = "Syndicate troops pour out of portals."
diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm
index 3c97ca91cdcca..26cbbf5364b5d 100644
--- a/code/modules/events/processor_overload.dm
+++ b/code/modules/events/processor_overload.dm
@@ -2,7 +2,7 @@
name = "Processor Overload"
typepath = /datum/round_event/processor_overload
weight = 15
- min_players = 20
+ min_players = 5
category = EVENT_CATEGORY_ENGINEERING
description = "Emps the telecomm processors, scrambling radio speech. Might blow up a few."
diff --git a/code/modules/events/sandstorm.dm b/code/modules/events/sandstorm.dm
index 0288b32ec2078..2f0cc1ac9ca6c 100644
--- a/code/modules/events/sandstorm.dm
+++ b/code/modules/events/sandstorm.dm
@@ -11,7 +11,7 @@
name = "Sandstorm: Directional"
typepath = /datum/round_event/sandstorm
max_occurrences = 3
- min_players = 35
+ min_players = 5
earliest_start = 35 MINUTES
category = EVENT_CATEGORY_SPACE
description = "A wave of space dust continually grinds down a side of the station."
diff --git a/code/modules/events/scrubber_overflow.dm b/code/modules/events/scrubber_overflow.dm
index 7f24648a9e5a7..20987dcdd9b83 100644
--- a/code/modules/events/scrubber_overflow.dm
+++ b/code/modules/events/scrubber_overflow.dm
@@ -3,7 +3,7 @@
typepath = /datum/round_event/scrubber_overflow
weight = 10
max_occurrences = 3
- min_players = 10
+ min_players = 0
category = EVENT_CATEGORY_JANITORIAL
description = "The scrubbers release a tide of mostly harmless froth."
admin_setup = list(/datum/event_admin_setup/listed_options/scrubber_overflow)
@@ -128,7 +128,7 @@
name = "Scrubber Overflow: Threatening"
typepath = /datum/round_event/scrubber_overflow/threatening
weight = 4
- min_players = 25
+ min_players = 10
max_occurrences = 1
earliest_start = 35 MINUTES
description = "The scrubbers release a tide of moderately harmless froth."
@@ -143,7 +143,7 @@
name = "Scrubber Overflow: Catastrophic"
typepath = /datum/round_event/scrubber_overflow/catastrophic
weight = 2
- min_players = 35
+ min_players = 20
max_occurrences = 1
earliest_start = 45 MINUTES
description = "The scrubbers release a tide of mildly harmless froth."
diff --git a/code/modules/events/space_vines/vine_event.dm b/code/modules/events/space_vines/vine_event.dm
index ce9881c990797..1e5ebaad3ef64 100644
--- a/code/modules/events/space_vines/vine_event.dm
+++ b/code/modules/events/space_vines/vine_event.dm
@@ -3,7 +3,7 @@
typepath = /datum/round_event/spacevine
weight = 15
max_occurrences = 3
- min_players = 10
+ min_players = 20
category = EVENT_CATEGORY_ENTITIES
description = "Kudzu begins to overtake the station. Might spawn man-traps."
min_wizard_trigger_potency = 4
diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm
index a263059fa7211..02c3ba5e4877b 100644
--- a/code/modules/events/vent_clog.dm
+++ b/code/modules/events/vent_clog.dm
@@ -236,7 +236,7 @@
name = "Ventilation Clog: Critical"
typepath = /datum/round_event/vent_clog/critical
weight = 8
- min_players = 15
+ min_players = 10
max_occurrences = 3
earliest_start = 25 MINUTES
description = "Really dangerous mobs climb out of a vent."
diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm
index 83028d129c4a8..685c24fcc2779 100644
--- a/code/modules/events/wormholes.dm
+++ b/code/modules/events/wormholes.dm
@@ -5,7 +5,7 @@ GLOBAL_LIST_EMPTY(all_wormholes) // So we can pick wormholes to teleport to
typepath = /datum/round_event/wormholes
max_occurrences = 3
weight = 2
- min_players = 2
+ min_players = 1
category = EVENT_CATEGORY_SPACE
description = "Space time anomalies appear on the station, randomly teleporting people who walk into them."
min_wizard_trigger_potency = 3
diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm
index c9f4f1b3d1bd7..4b4871e33f67d 100644
--- a/code/modules/experisci/experiment/experiments.dm
+++ b/code/modules/experisci/experiment/experiments.dm
@@ -429,7 +429,7 @@
. = ..()
if (!.)
return
- var/obj/item/organ/internal/brain/scanned_brain = check.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/scanned_brain = check.get_organ_slot(ORGAN_SLOT_BRAIN)
if (isnull(scanned_brain))
experiment_handler.announce_message("Subject is brainless!")
return FALSE
diff --git a/code/modules/experisci/handheld_scanner.dm b/code/modules/experisci/handheld_scanner.dm
index 390937e0dd4e4..67850aedd28a1 100644
--- a/code/modules/experisci/handheld_scanner.dm
+++ b/code/modules/experisci/handheld_scanner.dm
@@ -46,7 +46,7 @@
/obj/item/experi_scanner/proc/make_meat_toilet(mob/living/carbon/user)
///The suicide victim's brain that will be placed inside the toilet's cistern
- var/obj/item/organ/internal/brain/toilet_brain = user.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/toilet_brain = user.get_organ_slot(ORGAN_SLOT_BRAIN)
///The toilet we're about to unleash unto this cursed plane of existence
var/obj/structure/toilet/greyscale/result_toilet = new (drop_location())
diff --git a/code/modules/explorer_drone/exploration_events/trader.dm b/code/modules/explorer_drone/exploration_events/trader.dm
index b686a53582d53..0367eb71516e7 100644
--- a/code/modules/explorer_drone/exploration_events/trader.dm
+++ b/code/modules/explorer_drone/exploration_events/trader.dm
@@ -89,7 +89,7 @@
requires_translator = FALSE
required_site_traits = list(EXPLORATION_SITE_HABITABLE,EXPLORATION_SITE_CIVILIZED)
band_values = list(EXOSCANNER_BAND_LIFE=1)
- required_path = list(/obj/item/organ/internal/heart,/obj/item/organ/internal/liver,/obj/item/organ/internal/stomach,/obj/item/organ/internal/eyes)
+ required_path = list(/obj/item/organ/heart,/obj/item/organ/liver,/obj/item/organ/stomach,/obj/item/organ/eyes)
traded_path = list(/obj/item/implanter/explosive)
amount = 1
diff --git a/code/modules/fishing/aquarium/aquarium_kit.dm b/code/modules/fishing/aquarium/aquarium_kit.dm
index 11fd841009d08..f1186e2f38222 100644
--- a/code/modules/fishing/aquarium/aquarium_kit.dm
+++ b/code/modules/fishing/aquarium/aquarium_kit.dm
@@ -58,7 +58,12 @@
name = "ominous fish case"
/obj/item/storage/fish_case/syndicate/get_fish_type()
- return pick(/obj/item/fish/donkfish, /obj/item/fish/emulsijack, /obj/item/fish/jumpercable, /obj/item/fish/chainsawfish)
+ var/datum/fish_source/portal/syndicate = GLOB.preset_fish_sources[/datum/fish_source/portal/syndicate]
+ var/list/picks = syndicate.fish_table.Copy()
+ for(var/fish in picks)
+ if(!ispath(fish, /obj/item/fish))
+ picks -= fish
+ return pick(picks)
/obj/item/storage/fish_case/tiziran
name = "imported fish case"
@@ -73,16 +78,19 @@
/obj/item/storage/fish_case/blackmarket/get_fish_type()
var/static/list/weighted_list = list(
- /obj/item/fish/boned = 1,
- /obj/item/fish/clownfish/lube = 3,
- /obj/item/fish/emulsijack = 1,
- /obj/item/fish/jumpercable = 1,
- /obj/item/fish/sludgefish/purple = 1,
- /obj/item/fish/pufferfish = 3,
+ /obj/item/fish/clownfish/lube = 2,
+ /obj/item/fish/pufferfish = 2,
+ /obj/item/fish/emulsijack = 2,
+ /obj/item/fish/sludgefish/purple = 2,
/obj/item/fish/slimefish = 2,
/obj/item/fish/ratfish = 2,
- /obj/item/fish/chasm_crab/ice = 2,
- /obj/item/fish/chasm_crab = 2,
+ /obj/item/fish/zipzap = 2,
+ /obj/item/fish/jumpercable = 2,
+ /obj/item/fish/chasm_crab/ice = 1,
+ /obj/item/fish/chasm_crab = 1,
+ /obj/item/fish/boned = 1,
+ /obj/item/fish/pike = 1,
+ /obj/item/fish/swordfish = 1,
)
return pick_weight(weighted_list)
diff --git a/code/modules/fishing/bait.dm b/code/modules/fishing/bait.dm
index ec758be704201..aad7a8d3d1d89 100644
--- a/code/modules/fishing/bait.dm
+++ b/code/modules/fishing/bait.dm
@@ -76,16 +76,15 @@
/obj/item/fishing_lure/Initialize(mapload)
. = ..()
add_traits(list(TRAIT_FISHING_BAIT, TRAIT_BAIT_ALLOW_FISHING_DUD, TRAIT_OMNI_BAIT, TRAIT_BAIT_UNCONSUMABLE), INNATE_TRAIT)
- RegisterSignal(src, COMSIG_FISHING_EQUIPMENT_SLOTTED, PROC_REF(lure_equipped))
+ RegisterSignal(src, COMSIG_ITEM_FISHING_ROD_SLOTTED, PROC_REF(on_fishing_rod_slotted))
+ RegisterSignal(src, COMSIG_ITEM_FISHING_ROD_UNSLOTTED, PROC_REF(on_fishing_rod_unslotted))
-/obj/item/fishing_lure/proc/lure_equipped(datum/source, obj/item/fishing_rod/rod)
+/obj/item/fishing_lure/proc/on_fishing_rod_slotted(datum/source, obj/item/fishing_rod/rod, slot)
SIGNAL_HANDLER
rod.spin_frequency = spin_frequency
- RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_removed))
-/obj/item/fishing_lure/proc/on_removed(atom/movable/source, obj/item/fishing_rod/rod, dir, forced)
+/obj/item/fishing_lure/proc/on_fishing_rod_unslotted(datum/source, obj/item/fishing_rod/rod, slot)
SIGNAL_HANDLER
- UnregisterSignal(src, COMSIG_MOVABLE_MOVED)
rod.spin_frequency = null
///Called for every fish subtype by the fishing subsystem when initializing, to populate the list of fish that can be catched with this lure.
@@ -203,13 +202,20 @@
/obj/item/fishing_lure/led/Initialize(mapload)
. = ..()
- ADD_TRAIT(src, TRAIT_BAIT_IGNORE_ENVIRONMENT, INNATE_TRAIT)
update_appearance(UPDATE_OVERLAYS)
/obj/item/fishing_lure/led/update_overlays()
. = ..()
. += emissive_appearance(icon, "led_emissive", src)
+/obj/item/fishing_lure/led/on_fishing_rod_slotted(obj/item/fishing_rod/rod, slot)
+ . = ..()
+ ADD_TRAIT(rod, TRAIT_ROD_IGNORE_ENVIRONMENT, type)
+
+/obj/item/fishing_lure/led/on_fishing_rod_unslotted(obj/item/fishing_rod/rod, slot)
+ . = ..()
+ REMOVE_TRAIT(rod, TRAIT_ROD_IGNORE_ENVIRONMENT, type)
+
/obj/item/fishing_lure/led/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties)
var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS]
if(length(list(/datum/fish_trait/nocturnal, /datum/fish_trait/heavy) & fish_traits))
@@ -222,6 +228,14 @@
icon_state = "lucky_coin"
spin_frequency = list(1.5 SECONDS, 2.7 SECONDS)
+/obj/item/fishing_lure/lucky_coin/on_fishing_rod_slotted(obj/item/fishing_rod/rod, slot)
+ . = ..()
+ ADD_TRAIT(rod, TRAIT_ROD_ATTRACT_SHINY_LOVERS, REF(src))
+
+/obj/item/fishing_lure/lucky_coin/on_fishing_rod_unslotted(obj/item/fishing_rod/rod, slot)
+ . = ..()
+ REMOVE_TRAIT(rod, TRAIT_ROD_ATTRACT_SHINY_LOVERS, REF(src))
+
/obj/item/fishing_lure/lucky_coin/is_catchable_fish(obj/item/fish/fish_type, list/fish_properties)
var/list/fish_traits = fish_properties[FISH_PROPERTIES_TRAITS]
if(/datum/fish_trait/shiny_lover in fish_traits)
diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm
index 4a8efadcbcc9b..9143ebcf33952 100644
--- a/code/modules/fishing/fish/_fish.dm
+++ b/code/modules/fishing/fish/_fish.dm
@@ -20,7 +20,9 @@
pickup_sound = SFX_FISH_PICKUP
sound_vary = TRUE
obj_flags = UNIQUE_RENAME
- item_flags = IMMUTABLE_SLOW|SLOWS_WHILE_IN_HAND
+ item_flags = SLOWS_WHILE_IN_HAND
+ //we handle slowdowns internally, and the fish weight modifier from materials already contributes to it.
+ material_flags = MATERIAL_EFFECTS|MATERIAL_AFFECT_STATISTICS|MATERIAL_COLOR|MATERIAL_ADD_PREFIX|MATERIAL_NO_SLOWDOWN
/// Flags for fish variables that would otherwise be TRUE/FALSE
var/fish_flags = FISH_FLAG_SHOW_IN_CATALOG|FISH_DO_FLOP_ANIM|FISH_FLAG_EXPERIMENT_SCANNABLE
@@ -116,6 +118,8 @@
var/size
/// Average size for this fish type in centimeters. Will be used as gaussian distribution with 20% deviation for fishing, bought fish are always standard size
var/average_size = 50
+ /// Temporarily stores the new size of the fish from randomize_size_and_weight() to be used by update_size_weight() later, so that it can be deferred.
+ var/temp_size
/// The maximum size this fish can reach, calculated the first time update_size_and_weight() is called.
var/maximum_size
@@ -123,8 +127,12 @@
var/weight
/// Average weight for this fish type in grams
var/average_weight = 1000
+ /// Temporarily stores the new weight of the fish from randomize_size_and_weight() to be used by update_size_weight() later, so that it can be deferred.
+ var/temp_weight
/// The maximum weight this fish can reach, calculated the first time update_size_and_weight() is called.
var/maximum_weight
+ /// Stores the current total weight modifier from materials.
+ var/material_weight_mult = 1
///The general deviation from the average weight and size this fish has in the wild
var/weight_size_deviation = 0.2
@@ -439,25 +447,40 @@
if(bites_amount)
. += span_warning("It's been bitten by someone.")
-///Randomizes weight and size.
-/obj/item/fish/proc/randomize_size_and_weight(base_size = average_size, base_weight = average_weight, deviation = weight_size_deviation)
+/**
+ * This proc takes a base size, base weight and deviation arguments to generate new size and weight through a gaussian distribution (bell curve)
+ * Mainly used to determinate the size and weight of caught fish.
+ */
+/obj/item/fish/proc/randomize_size_and_weight(base_size = average_size, base_weight = average_weight, deviation = weight_size_deviation, update = TRUE)
var/size_deviation = 0.2 * base_size
- var/new_size = round(clamp(gaussian(base_size, size_deviation), average_size * 1/MAX_FISH_DEVIATION_COEFF, average_size * MAX_FISH_DEVIATION_COEFF))
+ temp_size = round(clamp(gaussian(base_size, size_deviation), average_size * 1/MAX_FISH_DEVIATION_COEFF, average_size * MAX_FISH_DEVIATION_COEFF))
var/weight_deviation = 0.2 * base_weight
- var/new_weight = round(clamp(gaussian(base_weight, weight_deviation), average_weight * 1/MAX_FISH_DEVIATION_COEFF, average_weight * MAX_FISH_DEVIATION_COEFF))
+ temp_weight = round(clamp(gaussian(base_weight, weight_deviation), average_weight * 1/MAX_FISH_DEVIATION_COEFF, average_weight * MAX_FISH_DEVIATION_COEFF))
- update_size_and_weight(new_size, new_weight)
+ set_max_size_and_weight(temp_size, temp_weight)
+ if(update)
+ update_size_and_weight(temp_size, temp_weight)
+
+///Set the maximum size and weight a fish can reach from base size and weight args if they have't been set already.
+/obj/item/fish/proc/set_max_size_and_weight(base_size, base_weight)
+ if(!maximum_size)
+ maximum_size = min(base_size * 2, average_size * MAX_FISH_DEVIATION_COEFF)
+ if(!maximum_weight)
+ maximum_weight = min(base_weight * 2, average_size * MAX_FISH_DEVIATION_COEFF)
///Updates weight and size, along with weight class, number of fillets you can get and grind results.
-/obj/item/fish/proc/update_size_and_weight(new_size = average_size, new_weight = average_weight)
+/obj/item/fish/proc/update_size_and_weight(new_size = average_size, new_weight = average_weight, update_materials = TRUE)
+ fish_flags |= FISH_FLAG_UPDATING_SIZE_AND_WEIGHT
SEND_SIGNAL(src, COMSIG_FISH_UPDATE_SIZE_AND_WEIGHT, new_size, new_weight)
+
if(size)
remove_fillet_type()
if(size > FISH_SIZE_TWO_HANDS_REQUIRED)
qdel(GetComponent(/datum/component/two_handed))
else
- maximum_size = min(new_size * 2, average_size * MAX_FISH_DEVIATION_COEFF)
+ set_max_size_and_weight(new_size, new_weight)
+
size = new_size
var/init_icon_state = initial(inhand_icon_state)
@@ -512,15 +535,13 @@
else
reagents.multiply_reagents(new_weight_ratio)
adjust_reagents_capacity(volume_diff)
- else
- maximum_weight = min(new_weight * 2, new_weight * MAX_FISH_DEVIATION_COEFF)
weight = new_weight
if(make_edible)
make_edible()
- if(weight >= FISH_WEIGHT_SLOWDOWN)
+ if(weight >= FISH_WEIGHT_SLOWDOWN && !HAS_TRAIT(src, TRAIT_SPEED_POTIONED))
slowdown = round(((weight/FISH_WEIGHT_SLOWDOWN_DIVISOR)**FISH_WEIGHT_SLOWDOWN_EXPONENT)-1.3, 0.1)
drag_slowdown = round(slowdown * 0.5, 1)
else
@@ -533,8 +554,22 @@
for(var/reagent_type in grind_results)
grind_results[reagent_type] *= max(FLOOR(weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR, 0.1), 0.1)
+ var/mats_len = length(custom_materials)
+ if(update_materials && mats_len)
+ var/list/new_mats_list = custom_materials.Copy()
+ var/multiplier = 1 / mats_len
+ var/unmodified_weight = weight
+ for(var/mat_type in custom_materials)
+ var/datum/material/material = GET_MATERIAL_REF(mat_type)
+ unmodified_weight /= GET_MATERIAL_MODIFIER(material.fish_weight_modifier, multiplier)
+ multiplier = unmodified_weight / weight
+ for(var/mat_type in new_mats_list)
+ new_mats_list[mat_type] *= multiplier
+ set_custom_materials(new_mats_list) // apply_material_effects() will call update_fish_force for us
update_fish_force()
+ fish_flags &= ~FISH_FLAG_UPDATING_SIZE_AND_WEIGHT
+
/obj/item/fish/proc/remove_fillet_type()
if(!fillet_type)
return
@@ -586,17 +621,24 @@
if(bonus_malus)
calculate_fish_force_bonus(bonus_malus)
- throwforce = force
+ if(material_flags & MATERIAL_EFFECTS && length(custom_materials)) //struck by metal gen or something.
+ var/multiplier = 1 / length(custom_materials)
+ if(material_flags & MATERIAL_AFFECT_STATISTICS)
+ for(var/current_material in custom_materials)
+ var/datum/material/material = GET_MATERIAL_REF(current_material)
+ force *= GET_MATERIAL_MODIFIER(material.strength_modifier, multiplier)
+ var/datum/material/master = get_master_material()
+ if(master?.item_sound_override)
+ hitsound = master.item_sound_override
+ usesound = master.item_sound_override
+ mob_throw_hit_sound = master.item_sound_override
+ equip_sound = master.item_sound_override
+ pickup_sound = master.item_sound_override
+ drop_sound = master.item_sound_override
SEND_SIGNAL(src, COMSIG_FISH_FORCE_UPDATED, weight_rank, bonus_malus)
- if(material_flags & MATERIAL_EFFECTS) //struck by metal gen or something.
- for(var/current_material in custom_materials)
- var/datum/material/material = GET_MATERIAL_REF(current_material)
- force *= material.strength_modifier
- throwforce *= material.strength_modifier
- if(material.item_sound_override)
- hitsound = material.item_sound_override
+ throwforce = force
if(force >=15 && hitsound == SFX_DEFAULT_FISH_SLAP) // don't override special attack sounds
hitsound = SFX_ALT_FISH_SLAP // do more damage - do heavier slap sound
@@ -626,6 +668,29 @@
attack_speed += 0.4 SECONDS
demolition_mod += 0.4
+/obj/item/fish/apply_single_mat_effect(datum/material/custom_material, amount, multiplier)
+ . = ..()
+ //The materials are being increased/decreased along with the weight.
+ if(fish_flags & FISH_FLAG_UPDATING_SIZE_AND_WEIGHT)
+ return
+ material_weight_mult *= GET_MATERIAL_MODIFIER(custom_material.fish_weight_modifier, multiplier)
+
+/obj/item/fish/apply_material_effects()
+ . = ..()
+ //Either effects aren't applied of he materials are simply being increased/decreased along with the weight. Avoids recursion.
+ if(!(material_flags & MATERIAL_EFFECTS) || (fish_flags & FISH_FLAG_UPDATING_SIZE_AND_WEIGHT) || material_weight_mult == 1)
+ return
+ maximum_weight *= material_weight_mult
+ update_size_and_weight(size, (temp_weight || weight) * material_weight_mult, update_materials = FALSE)
+
+/obj/item/fish/remove_material_effects(replace_mats = TRUE)
+ . = ..()
+ if(replace_mats || !(material_flags & MATERIAL_EFFECTS) || material_weight_mult == 1)
+ return
+ maximum_weight /= material_weight_mult
+ update_size_and_weight(size, weight / material_weight_mult)
+ material_weight_mult = 1
+
/**
* This proc has fish_traits list populated with fish_traits paths from three different lists:
* traits from x_traits and y_traits are compared, and inserted if conditions are met;
@@ -720,6 +785,7 @@
///If one of the reagent with fish effects is also our food reagent this is set to TRUE
var/already_fed = FALSE
+ var/was_hungry = get_hunger()
for(var/datum/reagent/reagent as anything in fed_reagents.reagent_list)
if(!fed_reagents.has_reagent(reagent.type, 0.1) || !reagent.used_on_fish(src))
continue
@@ -727,6 +793,9 @@
if(reagent.type == food)
already_fed = TRUE
+ if(was_hungry && !get_hunger()) //one of the other reagents already sated its hunger.
+ return
+
if(already_fed)
sate_hunger()
return
@@ -927,10 +996,10 @@
var/px_min = aq_properties[AQUARIUM_PROPERTIES_PX_MIN] + avg_width - 16
var/px_max = aq_properties[AQUARIUM_PROPERTIES_PX_MAX] - avg_width - 16
var/py_min = aq_properties[AQUARIUM_PROPERTIES_PY_MIN] + avg_height - 16
- var/py_max = aq_properties[AQUARIUM_PROPERTIES_PY_MAX] - avg_width - 16
+ var/py_max = aq_properties[AQUARIUM_PROPERTIES_PY_MAX] - avg_height - 16
- visual.pixel_x = visual.base_px = rand(px_min,px_max)
- visual.pixel_y = visual.base_py = rand(py_min,py_max)
+ visual.pixel_x = visual.base_pixel_x = rand(px_min,px_max)
+ visual.pixel_y = visual.base_pixel_y = rand(py_min,py_max)
/obj/item/fish/proc/get_aquarium_animation()
var/obj/structure/aquarium/aquarium = loc
@@ -961,8 +1030,8 @@
var/py_min = aq_properties[AQUARIUM_PROPERTIES_PY_MIN] + avg_height - 16
var/py_max = aq_properties[AQUARIUM_PROPERTIES_PY_MAX] - avg_width - 16
- var/origin_x = visual.base_px
- var/origin_y = visual.base_py
+ var/origin_x = visual.base_pixel_x
+ var/origin_y = visual.base_pixel_y
var/prev_x = origin_x
var/prev_y = origin_y
animate(visual, pixel_x = origin_x, time = 0, loop = -1) //Just to start the animation
@@ -985,11 +1054,11 @@
animate(pixel_x = target_x, pixel_y = target_y, time = eyeballed_time, loop = -1)
/obj/item/fish/proc/dead_animation(obj/structure/aquarium/current_aquarium, obj/effect/aquarium/visual)
- //Set base_py to lowest possible value
+ //Set base_pixel_y to lowest possible value
var/avg_height = round(sprite_height / 2)
var/list/aq_properties = current_aquarium.get_surface_properties()
var/py_min = aq_properties[AQUARIUM_PROPERTIES_PY_MIN] + avg_height - 16
- visual.base_py = py_min
+ visual.base_pixel_y = py_min
animate(visual, pixel_y = py_min, time = 1) //flop to bottom and end current animation.
/// Checks if our current environment lets us live.
@@ -1149,16 +1218,39 @@
//Try to pass down compatible traits based on inheritability
new_fish.inherit_traits(fish_traits, partner?.fish_traits, evolution?.new_traits, evolution?.removed_traits)
+ ///If set, the offspring will inherit materials from the parent.
+ var/obj/item/fish/chosen_material_giver
//We combine two methods for determining the size and weight of the offspring for less extreme results.
if(partner)
var/ratio_size = new_fish.average_size * (((size / average_size) + (partner.size / partner.average_size)) / 2)
var/mean_size = (size + partner.size)/2
var/ratio_weight = new_fish.average_size * (((weight / average_weight) + (partner.weight / partner.average_weight)) / 2)
var/mean_weight = (weight + partner.weight)/2
- new_fish.randomize_size_and_weight((mean_size + ratio_size) * 0.5, (mean_weight + ratio_weight) * 0.5, 0.3)
+ new_fish.randomize_size_and_weight((mean_size + ratio_size) * 0.5, (mean_weight + ratio_weight) * 0.5, 0.3, update = FALSE)
partner.breeding_wait = world.time + breeding_timeout
- else //Make a close of this fish.
- new_fish.update_size_and_weight(size, weight)
+
+ if(length(partner.custom_materials))
+ if(length(custom_materials))
+ chosen_material_giver = pick(src, partner)
+ else if(prob(50))
+ chosen_material_giver = partner
+ else if(length(custom_materials) && prob(50))
+ chosen_material_giver = src
+ else
+ new_fish.temp_size = size
+ new_fish.temp_weight = weight
+ if(length(custom_materials))
+ chosen_material_giver = src
+
+ if(chosen_material_giver)
+ //We need the original weight of the fish to set the correct amount (it scales with weight) of mats for the offspring
+ var/mats_multiplier = new_fish.temp_weight / (chosen_material_giver.weight / material_weight_mult)
+ var/list/new_mats = chosen_material_giver.custom_materials.Copy()
+ for(var/material in new_mats)
+ new_mats[material] *= mats_multiplier
+ new_fish.set_custom_materials(new_mats) // apply_material_effects() will call update_size_and_weight()
+ else
+ new_fish.update_size_and_weight(new_fish.temp_size, new_fish.temp_weight)
breeding_wait = world.time + breeding_timeout
@@ -1324,24 +1416,6 @@
. = ..()
aquarium_vc_color = color || initial(aquarium_vc_color)
-/obj/item/fish/get_infusion_entry()
- var/amphibious = required_fluid_type == AQUARIUM_FLUID_AIR || HAS_TRAIT(src, TRAIT_FISH_AMPHIBIOUS)
- var/list/possible_infusions = list()
- for(var/type in fish_traits)
- var/datum/fish_trait/trait = GLOB.fish_traits[type]
- if(!trait.infusion_entry)
- continue
- possible_infusions |= trait.infusion_entry
- if(!length(possible_infusions) && !amphibious)
- return GLOB.infuser_entries[/datum/infuser_entry/fish]
- var/datum/infuser_entry/fish/entry = new
- if(amphibious)
- entry.output_organs -= /obj/item/organ/internal/lungs/fish
- for(var/key in possible_infusions)
- var/datum/infuser_entry/infusion = GLOB.infuser_entries[key]
- entry.output_organs |= infusion.output_organs
- return entry
-
/// Returns random fish, using random_case_rarity probabilities.
/proc/random_fish_type(required_fluid)
var/static/probability_table
diff --git a/code/modules/fishing/fish/fish_traits.dm b/code/modules/fishing/fish/fish_traits.dm
index 2030c1b61585b..75fa7b5f98160 100644
--- a/code/modules/fishing/fish/fish_traits.dm
+++ b/code/modules/fishing/fish/fish_traits.dm
@@ -112,6 +112,8 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
/datum/fish_trait/wary/difficulty_mod(obj/item/fishing_rod/rod, mob/fisherman)
. = ..()
+ if(rod.alpha <= /datum/material/glass::alpha)
+ return
// Wary fish require transparent line or they're harder
if(!rod.line || !(rod.line.fishing_line_traits & FISHING_LINE_CLOAKED))
.[ADDITIVE_FISHING_MOD] += FISH_TRAIT_MINOR_DIFFICULTY_BOOST
@@ -123,13 +125,13 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
/datum/fish_trait/shiny_lover/difficulty_mod(obj/item/fishing_rod/rod, mob/fisherman)
. = ..()
// These fish are easier to catch with shiny hook
- if(rod.hook && rod.hook.fishing_hook_traits & FISHING_HOOK_SHINY)
+ if(HAS_TRAIT(rod, TRAIT_ROD_ATTRACT_SHINY_LOVERS))
.[ADDITIVE_FISHING_MOD] -= FISH_TRAIT_MINOR_DIFFICULTY_BOOST
/datum/fish_trait/shiny_lover/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman)
. = ..()
// These fish are harder to find without a shiny hook
- if(rod.hook && rod.hook.fishing_hook_traits & FISHING_HOOK_SHINY)
+ if(!HAS_TRAIT(rod, TRAIT_ROD_ATTRACT_SHINY_LOVERS))
.[MULTIPLICATIVE_FISHING_MOD] = 0.5
/datum/fish_trait/picky_eater
@@ -138,13 +140,18 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
/datum/fish_trait/picky_eater/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type)
. = ..()
+ var/list/fav_baits = SSfishing.fish_properties[fish_type][FISH_PROPERTIES_FAV_BAIT]
+ for(var/list/identifier in fav_baits)
+ if(identifier[FISH_BAIT_TYPE] != FISH_BAIT_FOODTYPE)
+ continue
+ if(is_matching_bait(rod, identifier)) //Bait or no bait, it's a yummy rod.
+ return
if(!rod.bait)
.[MULTIPLICATIVE_FISHING_MOD] = 0
return
if(HAS_TRAIT(rod.bait, TRAIT_OMNI_BAIT))
return
- var/list/fav_baits = SSfishing.fish_properties[fish_type][FISH_PROPERTIES_FAV_BAIT]
for(var/identifier in fav_baits)
if(is_matching_bait(rod.bait, identifier)) //we like this bait anyway
return
@@ -164,7 +171,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
/datum/fish_trait/nocturnal/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type)
. = ..()
- if(rod.bait && HAS_TRAIT(rod.bait, TRAIT_BAIT_IGNORE_ENVIRONMENT))
+ if(HAS_TRAIT(rod, TRAIT_ROD_IGNORE_ENVIRONMENT))
return
var/turf/turf = get_turf(location)
var/light_amount = turf?.get_lumcount()
@@ -207,6 +214,14 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
name = "Demersal"
catalog_description = "This fish tends to stay near the waterbed."
+/datum/fish_trait/heavy/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type)
+ . = ..()
+ var/datum/material/material = rod.get_master_material()
+ if(!material)
+ return
+ //the fish weight modifier of the material influences the chance of cathing this type of fish.
+ .[MULTIPLICATIVE_FISHING_MOD] = material.fish_weight_modifier
+
/datum/fish_trait/heavy/apply_to_mob(mob/living/basic/mob)
. = ..()
mob.add_movespeed_modifier(/datum/movespeed_modifier/heavy_fish)
@@ -226,18 +241,18 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
/datum/fish_trait/carnivore/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type)
. = ..()
+ if(istype(rod.get_master_material(), /datum/material/meat)) //who cares about the bait, that fishing rod is yummy!
+ return
if(!rod.bait)
.[MULTIPLICATIVE_FISHING_MOD] = 0
return
if(HAS_TRAIT(rod.bait, TRAIT_OMNI_BAIT))
return
- if(isfish(rod.bait))
- return
- if(!istype(rod.bait, /obj/item/food))
- .[MULTIPLICATIVE_FISHING_MOD] = 0
- return
- var/obj/item/food/food_bait = rod.bait
- if(!(food_bait.foodtypes & (MEAT|SEAFOOD|BUGS)))
+ var/list/bait_identifier = list(
+ FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE,
+ FISH_BAIT_VALUE = MEAT|SEAFOOD|BUGS,
+ )
+ if(!is_matching_bait(rod.bait, bait_identifier))
.[MULTIPLICATIVE_FISHING_MOD] = 0
/datum/fish_trait/vegan
@@ -247,18 +262,24 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
/datum/fish_trait/vegan/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type)
. = ..()
+ if(istype(rod.get_master_material(), /datum/material/bamboo)) //bamboo is technically grass.
+ return
if(!rod.bait)
.[MULTIPLICATIVE_FISHING_MOD] = 0
return
if(HAS_TRAIT(rod.bait, TRAIT_OMNI_BAIT))
return
- if(!istype(rod.bait, /obj/item/food))
- .[MULTIPLICATIVE_FISHING_MOD] = 0
- return
if(istype(rod.bait, /obj/item/food/grown))
return
- var/obj/item/food/food_bait = rod.bait
- if(food_bait.foodtypes & (MEAT|SEAFOOD|GORE|BUGS|DAIRY) || !(food_bait.foodtypes & (VEGETABLES|FRUIT)))
+ var/list/bait_liked_identifier = list(
+ FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE,
+ FISH_BAIT_VALUE = VEGETABLES|FRUIT,
+ )
+ var/list/bait_hated_identifier = list(
+ FISH_BAIT_TYPE = FISH_BAIT_FOODTYPE,
+ FISH_BAIT_VALUE = MEAT|SEAFOOD|GORE|BUGS|DAIRY,
+ )
+ if(!is_matching_bait(rod.bait, bait_liked_identifier) || is_matching_bait(rod.bait, bait_hated_identifier))
.[MULTIPLICATIVE_FISHING_MOD] = 0
/datum/fish_trait/emulsijack
@@ -530,6 +551,11 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
added_difficulty = 5
reagents_to_add = list(/datum/reagent/lube = 1.2)
+/datum/fish_trait/lubed/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman, atom/location, obj/item/fish/fish_type)
+ . = ..()
+ if(istype(rod.get_master_material(), /datum/material/bananium)) //x5 chance of catching lubefish & co with a bananium rod.
+ .[MULTIPLICATIVE_FISHING_MOD] *= 5
+
/datum/fish_trait/lubed/apply_to_fish(obj/item/fish/fish)
. = ..()
fish.AddComponent(/datum/component/slippery, 8 SECONDS, SLIDE|GALOSHES_DONT_HELP)
diff --git a/code/modules/fishing/fish/types/air_space.dm b/code/modules/fishing/fish/types/air_space.dm
index 177ae9c6e0e7d..b0c8208fe814e 100644
--- a/code/modules/fishing/fish/types/air_space.dm
+++ b/code/modules/fishing/fish/types/air_space.dm
@@ -154,7 +154,7 @@
. += eyes
///Determines the speed at which the carp grows based on how big it's
-/obj/item/fish/baby_carp/update_size_and_weight(new_size = average_size, new_weight = average_weight)
+/obj/item/fish/baby_carp/update_size_and_weight(new_size = average_size, new_weight = average_weight, update_materials = TRUE)
. = ..()
var/growth_rate = 4.5 MINUTES
growth_rate *= clamp(size/average_size, 0.5, 2)
diff --git a/code/modules/fishing/fish/types/mining.dm b/code/modules/fishing/fish/types/mining.dm
index 9e44e08ae316c..f3f4137fae32d 100644
--- a/code/modules/fishing/fish/types/mining.dm
+++ b/code/modules/fishing/fish/types/mining.dm
@@ -42,7 +42,7 @@
return list("cooked crab" = 2)
///A chasm crab growth speed is determined by its initial weight and size, ergo bigger crabs for faster lobstrosities
-/obj/item/fish/chasm_crab/update_size_and_weight(new_size = average_size, new_weight = average_weight)
+/obj/item/fish/chasm_crab/update_size_and_weight(new_size = average_size, new_weight = average_weight, update_materials = TRUE)
. = ..()
var/multiplier = 1
switch(size)
@@ -134,6 +134,10 @@
evolution_types = list(/datum/fish_evolution/mastodon)
beauty = FISH_BEAUTY_UGLY
+/obj/item/fish/boned/Initialize(mapload, apply_qualities = TRUE)
+ . = ..()
+ ADD_TRAIT(src, TRAIT_FISH_MADE_OF_BONE, INNATE_TRAIT)
+
/obj/item/fish/boned/make_edible(weight_val)
return //it's all bones and no meat.
diff --git a/code/modules/fishing/fish/types/ruins.dm b/code/modules/fishing/fish/types/ruins.dm
index 153a5bc3b7b7c..ccf6560139c1e 100644
--- a/code/modules/fishing/fish/types/ruins.dm
+++ b/code/modules/fishing/fish/types/ruins.dm
@@ -26,6 +26,10 @@
fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/amphibious, /datum/fish_trait/revival, /datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/aggressive)
beauty = FISH_BEAUTY_BAD
+/obj/item/fish/mastodon/Initialize(mapload, apply_qualities = TRUE)
+ . = ..()
+ ADD_TRAIT(src, TRAIT_FISH_MADE_OF_BONE, INNATE_TRAIT)
+
/obj/item/fish/mastodon/make_edible(weight_val)
return //it's all bones and gibs.
diff --git a/code/modules/fishing/fish/types/station.dm b/code/modules/fishing/fish/types/station.dm
index 96a7ca7e99f11..94923f7dc1ad8 100644
--- a/code/modules/fishing/fish/types/station.dm
+++ b/code/modules/fishing/fish/types/station.dm
@@ -140,13 +140,13 @@
///How long does it take for us to grow up?
var/growth_time = 3.5 MINUTES
-/obj/item/fish/fryish/Initialize(mapload)
+/obj/item/fish/fryish/Initialize(mapload, apply_qualities = TRUE)
. = ..()
if(is_bait)
add_traits(list(TRAIT_FISHING_BAIT, TRAIT_GREAT_QUALITY_BAIT), INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_FISH_SURVIVE_COOKING, INNATE_TRAIT)
-/obj/item/fish/fryish/update_size_and_weight(new_size = average_size, new_weight = average_weight)
+/obj/item/fish/fryish/update_size_and_weight(new_size = average_size, new_weight = average_weight, update_materials = FALSE)
. = ..()
if(!next_type)
return
diff --git a/code/modules/fishing/fish/types/tiziran.dm b/code/modules/fishing/fish/types/tiziran.dm
index b6fd43709f2d6..bd0216f9e1af6 100644
--- a/code/modules/fishing/fish/types/tiziran.dm
+++ b/code/modules/fishing/fish/types/tiziran.dm
@@ -79,8 +79,8 @@
. = ..()
add_traits(list(TRAIT_FISHING_BAIT, TRAIT_GOOD_QUALITY_BAIT), INNATE_TRAIT)
-/obj/item/fish/chasm_crab/get_fish_taste()
+/obj/item/fish/armorfish/get_fish_taste()
return list("raw prawn" = 2)
-/obj/item/fish/chasm_crab/get_fish_taste_cooked()
+/obj/item/fish/armorfish/get_fish_taste_cooked()
return list("cooked prawn" = 2)
diff --git a/code/modules/fishing/fishing_equipment.dm b/code/modules/fishing/fishing_equipment.dm
index cddabd90c0629..79a43fc605243 100644
--- a/code/modules/fishing/fishing_equipment.dm
+++ b/code/modules/fishing/fishing_equipment.dm
@@ -23,10 +23,22 @@
name = "reinforced fishing line reel"
desc = "Essential for fishing in extreme environments."
icon_state = "reel_green"
- fishing_line_traits = FISHING_LINE_REINFORCED
line_color = "#2b9c2b"
wiki_desc = "Allows you to fish in lava and plasma rivers and lakes."
+/obj/item/fishing_line/reinforced/Initialize(mapload)
+ . = ..()
+ RegisterSignal(src, COMSIG_ITEM_FISHING_ROD_SLOTTED, PROC_REF(on_fishing_rod_slotted))
+ RegisterSignal(src, COMSIG_ITEM_FISHING_ROD_UNSLOTTED, PROC_REF(on_fishing_rod_unslotted))
+
+/obj/item/fishing_line/reinforced/proc/on_fishing_rod_slotted(datum/source, obj/item/fishing_rod/rod, slot)
+ SIGNAL_HANDLER
+ ADD_TRAIT(rod, TRAIT_ROD_LAVA_USABLE, REF(src))
+
+/obj/item/fishing_line/reinforced/proc/on_fishing_rod_unslotted(datum/source, obj/item/fishing_rod/rod, slot)
+ SIGNAL_HANDLER
+ REMOVE_TRAIT(rod, TRAIT_ROD_LAVA_USABLE, REF(src))
+
/obj/item/fishing_line/cloaked
name = "cloaked fishing line reel"
desc = "Even harder to notice than the common variety."
@@ -47,10 +59,23 @@
name = "fishing sinew"
desc = "An all-natural fishing line made of stretched out sinew. A bit stiff, but usable to fish in extreme enviroments."
icon_state = "reel_sinew"
- fishing_line_traits = FISHING_LINE_REINFORCED|FISHING_LINE_STIFF
+ fishing_line_traits = FISHING_LINE_STIFF
line_color = "#d1cca3"
wiki_desc = "Crafted from sinew. It allows you to fish in lava and plasma like the reinforced line, but it'll make the minigame harder."
+/obj/item/fishing_line/sinew/Initialize(mapload)
+ . = ..()
+ RegisterSignal(src, COMSIG_ITEM_FISHING_ROD_SLOTTED, PROC_REF(on_fishing_rod_slotted))
+ RegisterSignal(src, COMSIG_ITEM_FISHING_ROD_UNSLOTTED, PROC_REF(on_fishing_rod_unslotted))
+
+/obj/item/fishing_line/sinew/proc/on_fishing_rod_slotted(datum/source, obj/item/fishing_rod/rod, slot)
+ SIGNAL_HANDLER
+ ADD_TRAIT(rod, TRAIT_ROD_LAVA_USABLE, REF(src))
+
+/obj/item/fishing_line/sinew/proc/on_fishing_rod_unslotted(datum/source, obj/item/fishing_rod/rod, slot)
+ SIGNAL_HANDLER
+ REMOVE_TRAIT(rod, TRAIT_ROD_LAVA_USABLE, REF(src))
+
/**
* A special line reel that let you skip the biting phase of the minigame, netting you a completion bonus,
* and thrown hooked items at you, so you can rapidly catch them from afar.
@@ -68,17 +93,16 @@
/obj/item/fishing_line/auto_reel/Initialize(mapload)
. = ..()
- RegisterSignal(src, COMSIG_FISHING_EQUIPMENT_SLOTTED, PROC_REF(line_equipped))
+ RegisterSignal(src, COMSIG_ITEM_FISHING_ROD_SLOTTED, PROC_REF(on_fishing_rod_slotted))
+ RegisterSignal(src, COMSIG_ITEM_FISHING_ROD_UNSLOTTED, PROC_REF(on_fishing_rod_unslotted))
-/obj/item/fishing_line/auto_reel/proc/line_equipped(datum/source, obj/item/fishing_rod/rod)
+/obj/item/fishing_line/auto_reel/proc/on_fishing_rod_slotted(datum/source, obj/item/fishing_rod/rod, slot)
SIGNAL_HANDLER
RegisterSignal(rod, COMSIG_FISHING_ROD_HOOKED_ITEM, PROC_REF(on_hooked_item))
- RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_removed))
-/obj/item/fishing_line/auto_reel/proc/on_removed(atom/movable/source, atom/old_loc, dir, forced)
+/obj/item/fishing_line/auto_reel/proc/on_fishing_rod_unslotted(datum/source, obj/item/fishing_rod/rod, slot)
SIGNAL_HANDLER
- UnregisterSignal(src, COMSIG_MOVABLE_MOVED)
- UnregisterSignal(old_loc, COMSIG_FISHING_ROD_HOOKED_ITEM)
+ UnregisterSignal(rod, COMSIG_FISHING_ROD_HOOKED_ITEM)
/obj/item/fishing_line/auto_reel/proc/on_hooked_item(obj/item/fishing_rod/source, atom/target, mob/living/user)
SIGNAL_HANDLER
@@ -176,18 +200,16 @@
/obj/item/fishing_hook/magnet/Initialize(mapload)
. = ..()
- RegisterSignal(src, COMSIG_FISHING_EQUIPMENT_SLOTTED, PROC_REF(hook_equipped))
+ RegisterSignal(src, COMSIG_ITEM_FISHING_ROD_SLOTTED, PROC_REF(on_fishing_rod_slotted))
+ RegisterSignal(src, COMSIG_ITEM_FISHING_ROD_UNSLOTTED, PROC_REF(on_fishing_rod_unslotted))
-///We make sure that the fishng rod doesn't need a bait to reliably catch non-fish loot.
-/obj/item/fishing_hook/magnet/proc/hook_equipped(datum/source, obj/item/fishing_rod/rod)
+/obj/item/fishing_hook/magnet/proc/on_fishing_rod_slotted(datum/source, obj/item/fishing_rod/rod, slot)
SIGNAL_HANDLER
- ADD_TRAIT(rod, TRAIT_ROD_REMOVE_FISHING_DUD, type)
- RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_removed))
+ ADD_TRAIT(rod, TRAIT_ROD_REMOVE_FISHING_DUD, REF(src))
-/obj/item/fishing_hook/magnet/proc/on_removed(atom/movable/source, atom/old_loc, dir, forced)
+/obj/item/fishing_hook/magnet/proc/on_fishing_rod_unslotted(datum/source, obj/item/fishing_rod/rod, slot)
SIGNAL_HANDLER
- REMOVE_TRAIT(old_loc, TRAIT_ROD_REMOVE_FISHING_DUD, type)
- UnregisterSignal(src, COMSIG_MOVABLE_MOVED)
+ REMOVE_TRAIT(rod, TRAIT_ROD_REMOVE_FISHING_DUD, REF(src))
/obj/item/fishing_hook/magnet/get_hook_bonus_multiplicative(fish_type, datum/fish_source/source)
if(fish_type == FISHING_DUD || ispath(fish_type, /obj/item/fish))
@@ -199,10 +221,24 @@
/obj/item/fishing_hook/shiny
name = "shiny lure hook"
icon_state = "gold_shiny"
- fishing_hook_traits = FISHING_HOOK_SHINY
rod_overlay_icon_state = "hook_shiny_overlay"
wiki_desc = "It's used to attract shiny-loving fish and make them easier to catch."
+/obj/item/fishing_hook/shiny/Initialize(mapload)
+ . = ..()
+ RegisterSignal(src, COMSIG_ITEM_FISHING_ROD_SLOTTED, PROC_REF(on_fishing_rod_slotted))
+ RegisterSignal(src, COMSIG_ITEM_FISHING_ROD_UNSLOTTED, PROC_REF(on_fishing_rod_unslotted))
+
+/obj/item/fishing_hook/shiny/proc/on_fishing_rod_slotted(datum/source, obj/item/fishing_rod/rod, slot)
+ SIGNAL_HANDLER
+ rod.material_fish_chance += 15 //Increases the chance of catching a shiny po... erh, material fish
+ ADD_TRAIT(rod, TRAIT_ROD_ATTRACT_SHINY_LOVERS, REF(src))
+
+/obj/item/fishing_hook/shiny/proc/on_fishing_rod_unslotted(datum/source, obj/item/fishing_rod/rod, slot)
+ SIGNAL_HANDLER
+ rod.material_fish_chance -= 15
+ REMOVE_TRAIT(rod, TRAIT_ROD_ATTRACT_SHINY_LOVERS, REF(src))
+
/obj/item/fishing_hook/weighted
name = "weighted hook"
icon_state = "weighted"
diff --git a/code/modules/fishing/fishing_minigame.dm b/code/modules/fishing/fishing_minigame.dm
index 646b9816a6e10..8d4b312c4f658 100644
--- a/code/modules/fishing/fishing_minigame.dm
+++ b/code/modules/fishing/fishing_minigame.dm
@@ -9,8 +9,6 @@
#define FISH_ON_BAIT_ACCELERATION_MULT 0.6
/// The minimum velocity required for the bait to bounce
#define BAIT_MIN_VELOCITY_BOUNCE 150
-/// The extra deceleration of velocity that happens when the bait switches direction
-#define BAIT_DECELERATION_MULT 1.8
/// Reduce initial completion rate depending on difficulty
#define MAX_FISH_COMPLETION_MALUS 15
@@ -107,10 +105,15 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user)
var/reeling_velocity = 1200
/// By how much the bait recoils back when hitting the bounds of the slider while idle
var/bait_bounce_mult = 0.6
+ /// The multiplier of deceleration of velocity that happens when the bait switches direction
+ var/deceleration_mult = 1.8
///The background as shown in the minigame, and the holder of the other visual overlays
var/atom/movable/screen/fishing_hud/fishing_hud
+ ///Keep track of the fish source from which we're pulling the reward
+ var/datum/fish_source/fish_source
+
/datum/fishing_challenge/New(datum/component/fishing_spot/comp, obj/item/fishing_rod/rod, mob/user)
src.user = user
used_rod = rod
@@ -119,12 +122,12 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user)
float.spin_frequency = rod.spin_frequency
RegisterSignal(location, COMSIG_QDELETING, PROC_REF(on_spot_gone))
RegisterSignal(comp, COMSIG_QDELETING, PROC_REF(on_spot_gone))
- RegisterSignal(comp.fish_source, COMSIG_FISHING_SOURCE_INTERRUPT_CHALLENGE, PROC_REF(interrupt_challenge))
- comp.fish_source.RegisterSignal(src, COMSIG_FISHING_CHALLENGE_ROLL_REWARD, TYPE_PROC_REF(/datum/fish_source, roll_reward_minigame))
- comp.fish_source.RegisterSignal(src, COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY, TYPE_PROC_REF(/datum/fish_source, calculate_difficulty_minigame))
- comp.fish_source.RegisterSignal(user, COMSIG_MOB_COMPLETE_FISHING, TYPE_PROC_REF(/datum/fish_source, on_challenge_completed))
+ register_reward_signals(comp.fish_source)
+ RegisterSignal(fish_source, COMSIG_FISHING_SOURCE_INTERRUPT_CHALLENGE, PROC_REF(interrupt_challenge))
+ fish_source.RegisterSignal(user, COMSIG_MOB_COMPLETE_FISHING, TYPE_PROC_REF(/datum/fish_source, on_challenge_completed))
background = comp.fish_source.background
SEND_SIGNAL(user, COMSIG_MOB_BEGIN_FISHING, src)
+ SEND_SIGNAL(rod, COMSIG_ROD_BEGIN_FISHING, src)
GLOB.fishing_challenges_by_user[user] = src
/// Enable special parameters
@@ -153,6 +156,12 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user)
completion_loss += user.mind?.get_skill_modifier(/datum/skill/fishing, SKILL_VALUE_MODIFIER)/5
completion_gain -= user.mind?.get_skill_modifier(/datum/skill/fishing, SKILL_VALUE_MODIFIER)/7.5
+ reeling_velocity *= rod.bait_speed_mult
+ completion_gain *= rod.completion_speed_mult
+ bait_bounce_mult *= rod.bounciness_mult
+ deceleration_mult *= rod.deceleration_mult
+ gravity_velocity *= rod.gravity_mult
+
/datum/fishing_challenge/Destroy(force)
GLOB.fishing_challenges_by_user -= user
if(!completed)
@@ -169,6 +178,20 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user)
QDEL_NULL(mover)
return ..()
+/**
+ * Proc responsible for registering the signals for difficulty and possible reward.
+ * Call this if you want to override the fish source from which we roll rewards (preferably before the minigame phase).
+ */
+/datum/fishing_challenge/proc/register_reward_signals(datum/fish_source/fish_source)
+ if(fish_source)
+ fish_source.UnregisterSignal(src, list(
+ COMSIG_FISHING_CHALLENGE_ROLL_REWARD,
+ COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY,
+ ))
+ src.fish_source = fish_source
+ fish_source.RegisterSignal(src, COMSIG_FISHING_CHALLENGE_ROLL_REWARD, TYPE_PROC_REF(/datum/fish_source, roll_reward_minigame))
+ fish_source.RegisterSignal(src, COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY, TYPE_PROC_REF(/datum/fish_source, calculate_difficulty_minigame))
+
/datum/fishing_challenge/proc/send_alert(message)
location?.balloon_alert(user, message)
@@ -321,6 +344,7 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user)
var/extra_exp_malus = user.mind.get_skill_level(/datum/skill/fishing) - difficulty * 0.1
if(extra_exp_malus > 0)
experience_multiplier /= (1 + extra_exp_malus * EXPERIENCE_MALUS_MULT)
+ experience_multiplier *= used_rod.experience_multiplier
user.mind.adjust_experience(/datum/skill/fishing, round(seconds_spent * FISHING_SKILL_EXP_PER_SECOND * experience_multiplier))
if(user.mind.get_skill_level(/datum/skill/fishing) >= SKILL_LEVEL_LEGENDARY)
user.client?.give_award(/datum/award/achievement/skill/legendary_fisher, user)
@@ -663,9 +687,9 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user)
* have different directions, making the bait less slippery, thus easier to control
*/
if(bait_velocity > 0 && velocity_change < 0)
- bait_velocity += max(-bait_velocity, velocity_change * BAIT_DECELERATION_MULT)
+ bait_velocity += max(-bait_velocity, velocity_change * deceleration_mult)
else if(bait_velocity < 0 && velocity_change > 0)
- bait_velocity += min(-bait_velocity, velocity_change * BAIT_DECELERATION_MULT)
+ bait_velocity += min(-bait_velocity, velocity_change * deceleration_mult)
///bidirectional baits stay bouyant while idle
if(bidirectional && reeling_state == REELING_STATE_IDLE)
@@ -832,7 +856,6 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user)
#undef FISH_ON_BAIT_ACCELERATION_MULT
#undef BAIT_MIN_VELOCITY_BOUNCE
-#undef BAIT_DECELERATION_MULT
#undef MAX_FISH_COMPLETION_MALUS
#undef BITING_TIME_WINDOW
diff --git a/code/modules/fishing/fishing_portal_machine.dm b/code/modules/fishing/fishing_portal_machine.dm
index e1be9dc909ba9..8b2f1a34e93f7 100644
--- a/code/modules/fishing/fishing_portal_machine.dm
+++ b/code/modules/fishing/fishing_portal_machine.dm
@@ -17,6 +17,8 @@
var/max_fishing_spots = 1
///If true, the fishing portal can stay connected to a linked fishing spot even on different z-levels
var/long_range_link = FALSE
+ /// contains ALL fishing destinations.
+ var/all_destinations = FALSE
/obj/machinery/fishing_portal_generator/Initialize(mapload)
. = ..()
@@ -214,7 +216,7 @@
if(!abort)
RegisterSignal(spot, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(on_fishing_spot_z_level_changed))
break
- if(abort)
+ if(abort && !all_destinations)
balloon_alert(user, "cannot reach linked!")
return
@@ -256,7 +258,9 @@
if(obj_flags & EMAGGED)
var/datum/fish_source/portal/syndicate = GLOB.preset_fish_sources[/datum/fish_source/portal/syndicate]
available_fish_sources[syndicate.radial_name] = syndicate
- for (var/datum/techweb/techweb as anything in SSresearch.techwebs)
+ if(all_destinations)
+ available_fish_sources = GLOB.preset_fish_sources
+ else for (var/datum/techweb/techweb as anything in SSresearch.techwebs)
var/get_fish_sources = FALSE
for(var/obj/machinery/rnd/server/server as anything in techweb.techweb_servers)
if(!is_valid_z_level(get_turf(server), get_turf(src)))
@@ -274,7 +278,7 @@
var/id = 1
for(var/atom/spot as anything in linked_fishing_spots)
- var/choice_name = "[spot.name] ([id])"
+ var/choice_name = "[id] - [spot.name]"
available_fish_sources[choice_name] = linked_fishing_spots[spot]
id++
@@ -298,3 +302,8 @@
/obj/machinery/fishing_portal_generator/emagged
obj_flags = parent_type::obj_flags | EMAGGED
circuit = /obj/item/circuitboard/machine/fishing_portal_generator/emagged
+
+/obj/machinery/fishing_portal_generator/full
+ name = "fish-porter 4000 deluxe"
+ desc = "the ultimate fishing device"
+ all_destinations = TRUE
diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm
index bfa701d36eb0a..cf8d29e766419 100644
--- a/code/modules/fishing/fishing_rod.dm
+++ b/code/modules/fishing/fishing_rod.dm
@@ -55,6 +55,21 @@
///Prevents spamming the line casting, without affecting the player's click cooldown.
COOLDOWN_DECLARE(casting_cd)
+ ///The chance of catching fish made of the same material of the fishing rod (if MATERIAL_EFFECTS is enabled)
+ var/material_fish_chance = 10
+ ///The multiplier of how much experience is gained when fishing with this rod.
+ var/experience_multiplier = 1
+ ///The multiplier of the completion gain during the minigame
+ var/completion_speed_mult = 1
+ ///The multiplier of the speed of the bobber/bait during the minigame
+ var/bait_speed_mult = 1
+ ///The multiplier of the decelaration during the minigame
+ var/deceleration_mult = 1
+ ///The multiplier of the bounciness of the bobber/bait upon hitting the edges of the minigame area
+ var/bounciness_mult = 1
+ /// The multiplier of negative velocity that pulls the bait/bobber down when not holding the click
+ var/gravity_mult = 1
+
/obj/item/fishing_rod/Initialize(mapload)
. = ..()
register_context()
@@ -105,6 +120,85 @@
. += span_notice("It has \a [english_list(equipped_stuff)] equipped.")
if(!bait)
. += span_warning("It doesn't have a bait attached to it. Fishing will be more tedious!")
+ if(HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISH))
+ . += "" //add a new line
+ . += span_notice("Thanks to your fishing skills, you can examine it again for more in-depth information.")
+ return
+
+/obj/item/fishing_rod/examine_more(mob/user)
+ . = ..()
+ if(!HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISH))
+ return
+
+ var/list/block = list()
+ var/get_percent = HAS_MIND_TRAIT(user, TRAIT_EXAMINE_DEEPER_FISH)
+ block += span_info("You think you can cast it up to [get_cast_range()] tiles away.")
+ block += get_stat_info(get_percent, difficulty_modifier, "Fishing will be", "easier", "harder", "with this fishing rod")
+ block += get_stat_info(get_percent, experience_multiplier, "You will gain experience", "faster", "slower")
+ block += get_stat_info(get_percent, completion_speed_mult, "You should complete the minigame", "faster", "slower")
+ block += get_stat_info(get_percent, bait_speed_mult, "Reeling is", "faster", "slower")
+ block += get_stat_info(get_percent, deceleration_mult, "Deceleration is", "faster", "slower", less_is_better = TRUE)
+ block += get_stat_info(get_percent, bounciness_mult, "This fishing rod is ", "bouncier", "less bouncy", "than a normal one", less_is_better = TRUE)
+ block += get_stat_info(get_percent, gravity_mult, "The lure will sink", "faster", "slower", span_info = TRUE)
+
+ . += examine_block(block.Join("\n"))
+
+ if(get_percent && (material_flags & MATERIAL_EFFECTS) && length(custom_materials))
+ block = list()
+ block += span_info("Right now, fish caught by this fishing rod have a [get_material_fish_chance(user)]% of being made of its same materials.")
+ var/datum/material/material = get_master_material()
+ if(material.fish_weight_modifier != 1)
+ var/heavier = material.fish_weight_modifier > 1 ? "heavier" : "lighter"
+ block += span_info("Fish made of the same material as this rod tend to be [abs(material.fish_weight_modifier - 1) * 100]% [heavier].")
+ . += examine_block(block.Join("\n"))
+
+ block = list()
+ if(HAS_TRAIT(src, TRAIT_ROD_ATTRACT_SHINY_LOVERS))
+ block += span_info("This fishing rod will attract shiny-loving fish.")
+ if(HAS_TRAIT(src, TRAIT_ROD_IGNORE_ENVIRONMENT))
+ block += span_info("Environment and light shouldn't be an issue with this rod.")
+ if(HAS_TRAIT_NOT_FROM(src, TRAIT_ROD_REMOVE_FISHING_DUD, INNATE_TRAIT)) // Duds are innately removed by baits, we all know that.
+ block += span_info("You won't catch duds with this rod.")
+ if(HAS_TRAIT(src, TRAIT_ROD_LAVA_USABLE))
+ block += span_info("This fishing rod can be used to fish on lava.")
+ if(length(block))
+ . += examine_block(block.Join("\n"))
+
+///Used in examine_more to reduce all the copypasta when getting more information about the various stats of the fishing rod.
+/obj/item/fishing_rod/proc/get_stat_info(get_percent, value, prefix, easier, harder, suffix = "with this fishing rod", span_info = FALSE, less_is_better = FALSE)
+ if(value == 1)
+ return
+ var/percent = get_percent ? "[abs(value)]% " : ""
+ var/harder_easier = value > 1 ? easier : harder
+ . = "[prefix] [percent][harder_easier] [suffix]."
+ if(span_info)
+ return span_info(.)
+ if(less_is_better ? value < 1 : value > 1)
+ return span_nicegreen(.)
+ return span_danger(.)
+
+/obj/item/fishing_rod/apply_single_mat_effect(datum/material/custom_material, amount, multiplier)
+ . = ..()
+ difficulty_modifier += custom_material.fishing_difficulty_modifier * multiplier
+ cast_range += custom_material.fishing_cast_range * multiplier
+ experience_multiplier *= GET_MATERIAL_MODIFIER(custom_material.fishing_experience_multiplier, multiplier)
+ completion_speed_mult *= GET_MATERIAL_MODIFIER(custom_material.fishing_completion_speed, multiplier)
+ bait_speed_mult *= GET_MATERIAL_MODIFIER(custom_material.fishing_bait_speed_mult, multiplier)
+ deceleration_mult *= GET_MATERIAL_MODIFIER(custom_material.fishing_deceleration_mult, multiplier)
+ bounciness_mult *= GET_MATERIAL_MODIFIER(custom_material.fishing_bounciness_mult, multiplier)
+ gravity_mult *= GET_MATERIAL_MODIFIER(custom_material.fishing_gravity_mult, multiplier)
+
+
+/obj/item/fishing_rod/remove_single_mat_effect(datum/material/custom_material, amount, multiplier)
+ . = ..()
+ difficulty_modifier -= custom_material.fishing_difficulty_modifier * multiplier
+ cast_range -= custom_material.fishing_cast_range * multiplier
+ experience_multiplier /= GET_MATERIAL_MODIFIER(custom_material.fishing_experience_multiplier, multiplier)
+ completion_speed_mult /= GET_MATERIAL_MODIFIER(custom_material.fishing_completion_speed, multiplier)
+ bait_speed_mult /= GET_MATERIAL_MODIFIER(custom_material.fishing_bait_speed_mult, multiplier)
+ deceleration_mult /= GET_MATERIAL_MODIFIER(custom_material.fishing_deceleration_mult, multiplier)
+ bounciness_mult /= GET_MATERIAL_MODIFIER(custom_material.fishing_bounciness_mult, multiplier)
+ gravity_mult /= GET_MATERIAL_MODIFIER(custom_material.fishing_gravity_mult, multiplier)
/**
* Is there a reason why this fishing rod couldn't fish in target_fish_source?
@@ -116,16 +210,25 @@
/obj/item/fishing_rod/proc/reason_we_cant_fish(datum/fish_source/target_fish_source)
return hook?.reason_we_cant_fish(target_fish_source)
-/obj/item/fishing_rod/proc/consume_bait(atom/movable/reward)
+///Called at the end of on_challenge_completed() once the reward has been spawned
+/obj/item/fishing_rod/proc/on_reward_caught(atom/movable/reward, mob/user)
+ if(isnull(reward))
+ return
+ var/isfish = isfish(reward)
+ if((material_flags & MATERIAL_EFFECTS) && isfish && length(custom_materials))
+ if(prob(get_material_fish_chance(user)))
+ var/obj/item/fish/fish = reward
+ var/datum/material/material = get_master_material()
+ fish.set_custom_materials(list(material.type = fish.weight))
// catching things that aren't fish or alive mobs doesn't consume baits.
- if(isnull(reward) || isnull(bait) || HAS_TRAIT(bait, TRAIT_BAIT_UNCONSUMABLE))
+ if(isnull(bait) || HAS_TRAIT(bait, TRAIT_BAIT_UNCONSUMABLE))
return
if(isliving(reward))
var/mob/living/caught_mob = reward
if(caught_mob.stat == DEAD)
return
else
- if(!isfish(reward))
+ if(!isfish)
return
var/obj/item/fish/fish = reward
if(HAS_TRAIT(bait, TRAIT_POISONOUS_BAIT) && !HAS_TRAIT(fish, TRAIT_FISH_TOXIN_IMMUNE))
@@ -140,6 +243,18 @@
QDEL_NULL(bait)
update_icon()
+///Returns the probability that a fish caught by this (custom material) rod will be of the same material.
+/obj/item/fishing_rod/proc/get_material_fish_chance(mob/user)
+ var/material_chance = material_fish_chance
+ if(bait)
+ if(HAS_TRAIT(bait, TRAIT_GREAT_QUALITY_BAIT))
+ material_chance += 16
+ else if(HAS_TRAIT(bait, TRAIT_GOOD_QUALITY_BAIT))
+ material_chance += 8
+ else if(HAS_TRAIT(bait, TRAIT_BASIC_QUALITY_BAIT))
+ material_chance += 4
+ material_chance += user.mind?.get_skill_level(/datum/skill/fishing) * 1.5
+
///Fishing rodss should only bane fish DNA-infused spessman
/obj/item/fishing_rod/proc/attempt_bane(datum/source, mob/living/fish)
SIGNAL_HANDLER
@@ -162,7 +277,7 @@
return
playsound(src, SFX_REEL, 50, vary = FALSE)
- var/time = (0.8 - round(user.mind?.get_skill_level(/datum/skill/fishing) * 0.04, 0.1)) SECONDS
+ var/time = (0.8 - round(user.mind?.get_skill_level(/datum/skill/fishing) * 0.04, 0.1)) SECONDS * bait_speed_mult
if(!do_after(user, time, currently_hooked, timed_action_flags = IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE, extra_checks = CALLBACK(src, PROC_REF(fishing_line_check))))
return
@@ -171,7 +286,7 @@
return
//About thirty minutes of non-stop reeling to get from zero to master... not worth it but hey, you do what you do.
- user.mind?.adjust_experience(/datum/skill/fishing, time * 0.13)
+ user.mind?.adjust_experience(/datum/skill/fishing, time * 0.13 * experience_multiplier)
//Try to move it 'till it's under the user's feet, then try to pick it up
if(isitem(currently_hooked))
@@ -221,13 +336,14 @@
currently_hooked = null
/obj/item/fishing_rod/proc/get_cast_range(mob/living/user)
- . = cast_range
+ . = max(cast_range, 1)
if(!user && !isliving(loc))
return
user = loc
if(!user.is_holding(src) || !user.mind)
return
. += round(user.mind.get_skill_level(/datum/skill/fishing) * 0.3)
+ return max(., 1)
/obj/item/fishing_rod/dropped(mob/user, silent)
. = ..()
@@ -295,6 +411,7 @@
casting = TRUE
var/obj/projectile/fishing_cast/cast_projectile = new(get_turf(src))
cast_projectile.range = get_cast_range(user)
+ cast_projectile.decayedRange = get_cast_range(user)
cast_projectile.owner = src
cast_projectile.original = target
cast_projectile.fired_from = src
@@ -336,12 +453,14 @@
/// Line part by the rod.
if(reel_overlay)
var/mutable_appearance/reel_appearance = mutable_appearance(icon, reel_overlay)
+ reel_appearance.appearance_flags = RESET_COLOR
reel_appearance.color = line_color
. += reel_appearance
// Line & hook is also visible when only bait is equipped but it uses default appearances then
if(hook || bait)
var/mutable_appearance/line_overlay = mutable_appearance(icon, "line_overlay")
+ line_overlay.appearance_flags = RESET_COLOR
line_overlay.color = line_color
. += line_overlay
. += hook?.rod_overlay_icon_state || "hook_overlay"
@@ -501,20 +620,27 @@
else
CRASH("set_slot called with an undefined slot: [slot]")
- SEND_SIGNAL(equipment, COMSIG_FISHING_EQUIPMENT_SLOTTED, src)
+ SEND_SIGNAL(equipment, COMSIG_ITEM_FISHING_ROD_SLOTTED, src, slot)
/obj/item/fishing_rod/Exited(atom/movable/gone, direction)
. = ..()
+ var/slot
if(gone == bait)
+ slot = ROD_SLOT_BAIT
bait = null
REMOVE_TRAIT(src, TRAIT_ROD_REMOVE_FISHING_DUD, INNATE_TRAIT)
if(gone == line)
+ slot = ROD_SLOT_LINE
cast_range -= FISHING_ROD_REEL_CAST_RANGE
line = null
if(gone == hook)
+ slot = ROD_SLOT_HOOK
QDEL_NULL(fishing_line)
hook = null
+ if(slot)
+ SEND_SIGNAL(gone, COMSIG_ITEM_FISHING_ROD_UNSLOTTED, src, slot)
+
///Found in the fishing toolbox (the hook and line are separate items)
/obj/item/fishing_rod/unslotted
hook = null
@@ -547,6 +673,11 @@
ui_description = "A collapsible fishing rod that can fit within a backpack."
wiki_description = "It has to be bought from Cargo."
reel_overlay = "reel_telescopic"
+ completion_speed_mult = 1.1
+ bait_speed_mult = 1.1
+ deceleration_mult = 1.1
+ bounciness_mult = 0.9
+ gravity_mult = 0.9
///The force of the item when extended.
var/active_force = 8
@@ -615,6 +746,12 @@
cast_range = 5
line = /obj/item/fishing_line/bouncy
hook = /obj/item/fishing_hook/weighted
+ completion_speed_mult = 1.55
+ bait_speed_mult = 1.2
+ deceleration_mult = 1.55
+ bounciness_mult = 0.3
+ gravity_mult = 1.2
+ material_fish_chance = 33 //if somehow you metalgen it.
/obj/item/fishing_rod/tech
name = "advanced fishing rod"
@@ -624,6 +761,10 @@
icon_state = "fishing_rod_science"
reel_overlay = "reel_science"
bait = /obj/item/food/bait/doughball/synthetic/unconsumable
+ completion_speed_mult = 1.1
+ bait_speed_mult = 1.1
+ deceleration_mult = 1.1
+ gravity_mult = 1.2
/obj/item/fishing_rod/tech/Initialize(mapload)
. = ..()
@@ -650,6 +791,23 @@
return
return ..()
+/obj/item/fishing_rod/material
+ name = "material fishing rod" //name shown on the autowiki.
+ desc = "A custom fishing rod from your local autolathe."
+ icon_state = "fishing_rod_material"
+ reel_overlay = "reel_material"
+ ui_description = "An autolathe-printable fishing rod made of some material."
+ wiki_description = "Different materials can have different effects. They also catch fish made of the same material used to print the rod."
+ material_flags = MATERIAL_EFFECTS|MATERIAL_AFFECT_STATISTICS|MATERIAL_COLOR|MATERIAL_ADD_PREFIX
+
+/obj/item/fishing_rod/material/Initialize(mapload)
+ . = ..()
+ name = "fishing_rod"
+
+/obj/item/fishing_rod/material/finalize_remove_material_effects(list/materials)
+ . = ..()
+ name = "fishing_rod" //so it doesn't reset to "material fishing rod"
+
#undef ROD_SLOT_BAIT
#undef ROD_SLOT_LINE
#undef ROD_SLOT_HOOK
diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm
index 9a02e0b270b42..2ad6a2bc5bb2c 100644
--- a/code/modules/fishing/sources/_fish_source.dm
+++ b/code/modules/fishing/sources/_fish_source.dm
@@ -16,6 +16,8 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons())
/mob/living/basic/frog = FISH_ICON_CRITTER,
/mob/living/basic/carp = FISH_ICON_DEF,
/mob/living/basic/mining = FISH_ICON_HOSTILE,
+ /mob/living/basic/skeleton = FISH_ICON_BONE,
+ /mob/living/basic/stickman = FISH_ICON_HOSTILE,
/obj/effect/decal/remains = FISH_ICON_BONE,
/obj/effect/mob_spawn/corpse = FISH_ICON_BONE,
/obj/effect/spawner/message_in_a_bottle = FISH_ICON_BOTTLE,
@@ -41,6 +43,9 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons())
/obj/item/fish/stingray = FISH_ICON_WEAPON,
/obj/item/fish/swordfish = FISH_ICON_WEAPON,
/obj/item/fish/zipzap = FISH_ICON_ELECTRIC,
+ /obj/item/instrument/trumpet/spectral = FISH_ICON_BONE,
+ /obj/item/instrument/saxophone/spectral = FISH_ICON_BONE,
+ /obj/item/instrument/trombone/spectral = FISH_ICON_BONE,
/obj/item/knife/carp = FISH_ICON_WEAPON,
/obj/item/seeds/grass = FISH_ICON_SEED,
/obj/item/seeds/random = FISH_ICON_SEED,
@@ -79,14 +84,14 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons())
var/catalog_description
/// Background image name from /datum/asset/simple/fishing_minigame
var/background = "background_default"
- /// It true, repeated and large explosions won't be as efficient. This is usually for fish sources that cover multiple turfs (i.e. rivers, oceans).
- var/explosive_malus = FALSE
- /// If explosive_malus is true, this will be used to keep track of the turfs where an explosion happened for when we'll spawn the loot.
+ var/fish_source_flags = NONE
+ /// If FISH_SOURCE_FLAG_EXPLOSIVE_MALUS is set, this will be used to keep track of the turfs where an explosion happened for when we'll spawn the loot.
var/list/exploded_turfs
///When linked to a fishing portal, this will be the icon_state of this option in the radial menu
var/radial_state = "default"
///When selected by the fishing portal, this will be the icon_state of the overlay shown on the machine.
var/overlay_state = "portal_aquarium"
+
/// Mindless mobs that can fish will never pull up items on this list
var/static/list/profound_fisher_blacklist = typecacheof(list(
/mob/living/basic/mining/lobstrosity,
@@ -241,7 +246,7 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons())
if(reward)
user.add_mob_memory(/datum/memory/caught_fish, protagonist = user, deuteragonist = reward.name)
SEND_SIGNAL(challenge.used_rod, COMSIG_FISHING_ROD_CAUGHT_FISH, reward, user)
- challenge.used_rod.consume_bait(reward)
+ challenge.used_rod.on_reward_caught(reward, user)
/// Gives out the reward if possible
/datum/fish_source/proc/dispense_reward(reward_path, mob/fisherman, turf/fishing_spot)
@@ -458,10 +463,10 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons())
if(rod)
info = span_tooltip("boldened are the fish you're more likely to catch with your current setup. The opposite is true for smaller names", info)
- examine_text += examine_block(span_info("[info]: [english_list(known_fishes)]."))
+ examine_text += span_info("[info]: [english_list(known_fishes)].")
/datum/fish_source/proc/spawn_reward_from_explosion(atom/location, severity)
- if(!explosive_malus)
+ if(!(fish_source_flags & FISH_SOURCE_FLAG_EXPLOSIVE_MALUS))
explosive_spawn(location, severity)
return
if(isnull(exploded_turfs))
diff --git a/code/modules/fishing/sources/source_types.dm b/code/modules/fishing/sources/source_types.dm
index f6cbd969a8d6d..a21f3f008e88c 100644
--- a/code/modules/fishing/sources/source_types.dm
+++ b/code/modules/fishing/sources/source_types.dm
@@ -13,12 +13,10 @@
/obj/item/fish/stingray = 8,
/obj/item/fish/plaice = 8,
/obj/item/fish/monkfish = 5,
- /obj/item/fish/stingray = 10,
/obj/item/fish/lanternfish = 7,
/obj/item/fish/zipzap = 7,
/obj/item/fish/clownfish/lube = 5,
/obj/item/fish/swordfish = 5,
- /obj/item/fish/swordfish = 3,
/obj/structure/mystery_box/fishing = 2,
)
fish_counts = list(
@@ -31,7 +29,7 @@
/obj/item/fish/swordfish = 5 MINUTES,
)
fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 5
- explosive_malus = TRUE
+ fish_source_flags = FISH_SOURCE_FLAG_EXPLOSIVE_MALUS
/datum/fish_source/ocean/beach
catalog_description = "Beach shore water"
@@ -76,7 +74,7 @@
/obj/item/fish/pike = 4 MINUTES,
)
fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 5
- explosive_malus = TRUE
+ fish_source_flags = FISH_SOURCE_FLAG_EXPLOSIVE_MALUS
/datum/fish_source/sand
catalog_description = "Sand"
@@ -89,7 +87,7 @@
/obj/item/coin/gold = 3,
)
fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 20
- explosive_malus = TRUE
+ fish_source_flags = FISH_SOURCE_FLAG_EXPLOSIVE_MALUS
/datum/fish_source/cursed_spring
catalog_description = null //it's a secret (sorta, I know you're reading this)
@@ -104,7 +102,7 @@
/obj/item/fishing_rod/telescopic/master = 1,
)
fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 25
- explosive_malus = TRUE
+ fish_source_flags = FISH_SOURCE_FLAG_EXPLOSIVE_MALUS
/datum/fish_source/portal
fish_table = list(
@@ -240,8 +238,9 @@
catalog_description = null // it'd make a bad entry in the catalog.
radial_name = "Randomizer"
overlay_state = "portal_randomizer"
- var/static/list/all_portal_fish_sources_at_once
radial_state = "misaligned_question_mark"
+ fish_source_flags = FISH_SOURCE_FLAG_NO_BLUESPACE_ROD
+ var/static/list/all_portal_fish_sources_at_once
///Generate the fish table if we don't have one already.
/datum/fish_source/portal/random/on_fishing_spot_init(datum/component/fishing_spot/spot)
@@ -350,12 +349,12 @@
)
fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 10
- explosive_malus = TRUE
+ fish_source_flags = FISH_SOURCE_FLAG_EXPLOSIVE_MALUS
/datum/fish_source/lavaland/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman, atom/parent)
. = ..()
- if(!rod.line || !(rod.line.fishing_line_traits & FISHING_LINE_REINFORCED))
- return "You'll need reinforced fishing line to fish in there"
+ if(!HAS_TRAIT(rod, TRAIT_ROD_LAVA_USABLE))
+ return "You'll need reinforced fishing line to fish in there."
/datum/fish_source/lavaland/icemoon
catalog_description = "Liquid plasma vents"
@@ -375,10 +374,12 @@
/obj/item/stack/sheet/mineral/adamantine = 3,
/obj/item/stack/sheet/mineral/runite = 2,
)
+ overlay_state = "portal_plasma"
/datum/fish_source/moisture_trap
catalog_description = "Moisture trap basins"
radial_state = "garbage"
+ overlay_state = "portal_river" // placeholder
fish_table = list(
FISHING_DUD = 20,
/obj/item/fish/ratfish = 10,
@@ -390,6 +391,7 @@
catalog_description = "Station toilets"
radial_state = "toilet"
duds = list("ewww... nothing", "it was nothing", "it was toilet paper", "it was flushed away", "the hook is empty", "where's the damn money?!")
+ overlay_state = "portal_river" // placeholder
fish_table = list(
FISHING_DUD = 18,
/obj/item/fish/sludgefish = 18,
@@ -413,6 +415,7 @@
/obj/item/fish/holo/halffish = 5,
)
fishing_difficulty = FISHING_EASY_DIFFICULTY
+ fish_source_flags = FISH_SOURCE_FLAG_NO_BLUESPACE_ROD
/datum/fish_source/holographic/on_fishing_spot_init(datum/component/fishing_spot/spot)
ADD_TRAIT(spot.parent, TRAIT_UNLINKABLE_FISHING_SPOT, REF(src)) //You would have to be inside the holodeck anyway...
@@ -473,6 +476,7 @@
/datum/fish_source/hydro_tray
catalog_description = "Hydroponics trays"
radial_state = "hydro"
+ overlay_state = "portal_tray"
fish_table = list(
FISHING_DUD = 25,
/obj/item/food/grown/grass = 25,
@@ -581,6 +585,7 @@
/datum/fish_source/carp_rift
catalog_description = "Space Dragon Rifts"
radial_state = "carp"
+ overlay_state = "portal_rift"
fish_table = list(
FISHING_DUD = 3,
/obj/item/fish/baby_carp = 5,
@@ -600,6 +605,7 @@
/datum/fish_source/deepfryer
catalog_description = "Deep Fryers"
radial_state = "fryer"
+ overlay_state = "portal_fry" // literally resprited lava. better than nothing
fish_table = list(
/obj/item/food/badrecipe = 15,
/obj/item/food/nugget = 5,
diff --git a/code/modules/food_and_drinks/recipes/soup_mixtures.dm b/code/modules/food_and_drinks/recipes/soup_mixtures.dm
index c69de62fbfc97..2aab17f5b9ea0 100644
--- a/code/modules/food_and_drinks/recipes/soup_mixtures.dm
+++ b/code/modules/food_and_drinks/recipes/soup_mixtures.dm
@@ -661,7 +661,7 @@
required_reagents = list(/datum/reagent/water = 50)
required_ingredients = list(
/obj/item/food/grown/tomato = 2,
- /obj/item/organ/internal/eyes = 1,
+ /obj/item/organ/eyes = 1,
)
results = list(
/datum/reagent/consumable/nutriment/soup/eyeball = 20,
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
index 8f78cb01ebc23..d0517272d7769 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
@@ -155,8 +155,8 @@
/datum/crafting_recipe/food/breaddog
name = "Living dog/bread hybrid"
reqs = list(
- /obj/item/organ/internal/brain = 1,
- /obj/item/organ/internal/heart = 1,
+ /obj/item/organ/brain = 1,
+ /obj/item/organ/heart = 1,
/obj/item/food/bread/plain = 2,
/obj/item/food/meat/slab = 3,
/datum/reagent/blood = 30,
@@ -216,8 +216,8 @@
name = "Bread cat/bread hybrid"
reqs = list(
/obj/item/food/bread/plain = 1,
- /obj/item/organ/internal/ears/cat = 1,
- /obj/item/organ/external/tail/cat = 1,
+ /obj/item/organ/ears/cat = 1,
+ /obj/item/organ/tail/cat = 1,
/obj/item/food/meat/slab = 3,
/datum/reagent/blood = 50,
/datum/reagent/medicine/strange_reagent = 5
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
index 4e7c63413ecea..2953f8408ac92 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
@@ -39,7 +39,7 @@
/datum/crafting_recipe/food/appendixburger
name = "Appendix burger"
reqs = list(
- /obj/item/organ/internal/appendix = 1,
+ /obj/item/organ/appendix = 1,
/obj/item/food/bun = 1
)
result = /obj/item/food/burger/appendix
@@ -48,7 +48,7 @@
/datum/crafting_recipe/food/brainburger
name = "Brain burger"
reqs = list(
- /obj/item/organ/internal/brain = 1,
+ /obj/item/organ/brain = 1,
/obj/item/food/bun = 1
)
result = /obj/item/food/burger/brain
@@ -306,8 +306,8 @@
reqs = list(
/obj/item/food/bun = 1,
/obj/item/food/patty/plain = 1,
- /obj/item/organ/internal/ears/cat = 1,
- /obj/item/organ/external/tail/cat = 1,
+ /obj/item/organ/ears/cat = 1,
+ /obj/item/organ/tail/cat = 1,
)
result = /obj/item/food/burger/catburger
category = CAT_BURGER
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
index 4b56874eb7c6b..86956ba861cad 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm
@@ -90,7 +90,7 @@
/datum/crafting_recipe/food/braincake
name = "Brain cake"
reqs = list(
- /obj/item/organ/internal/brain = 1,
+ /obj/item/organ/brain = 1,
/obj/item/food/cake/plain = 1
)
result = /obj/item/food/cake/brain
@@ -218,8 +218,8 @@
/datum/crafting_recipe/food/cak
name = "Living cat/cake hybrid"
reqs = list(
- /obj/item/organ/internal/brain = 1,
- /obj/item/organ/internal/heart = 1,
+ /obj/item/organ/brain = 1,
+ /obj/item/organ/heart = 1,
/obj/item/food/cake/birthday = 1,
/obj/item/food/meat/slab = 3,
/datum/reagent/blood = 30,
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm
index 5a754361ffb1f..5a7947c569e4b 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm
@@ -11,10 +11,10 @@
name = "Lizard Wine"
time = 40
reqs = list(
- /obj/item/organ/external/tail/lizard = 1,
+ /obj/item/organ/tail/lizard = 1,
/datum/reagent/consumable/ethanol = 100
)
- blacklist = list(/obj/item/organ/external/tail/lizard/fake)
+ blacklist = list(/obj/item/organ/tail/lizard/fake)
result = /obj/item/reagent_containers/cup/glass/bottle/lizardwine
category = CAT_DRINK
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_lizard.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_lizard.dm
index 7b253f32ce17d..d9f9cd16fe940 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_lizard.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_lizard.dm
@@ -25,11 +25,11 @@
/obj/item/food/grown/carrot = 1,
/obj/item/food/grown/chili = 1,
/obj/item/food/grown/onion = 1,
- /obj/item/organ/internal/lungs = 1,
+ /obj/item/organ/lungs = 1,
/obj/item/reagent_containers/cup/bowl = 1,
)
blacklist = list(
- /obj/item/organ/internal/lungs/cybernetic,
+ /obj/item/organ/lungs/cybernetic,
)
result = /obj/item/food/shredded_lungs
@@ -38,10 +38,10 @@
/datum/crafting_recipe/food/tsatsikh
name = "Tsatsikh"
reqs = list(
- /obj/item/organ/internal/heart = 1,
- /obj/item/organ/internal/liver = 1,
- /obj/item/organ/internal/lungs = 1,
- /obj/item/organ/internal/stomach = 1,
+ /obj/item/organ/heart = 1,
+ /obj/item/organ/liver = 1,
+ /obj/item/organ/lungs = 1,
+ /obj/item/organ/stomach = 1,
/datum/reagent/consumable/salt = 2,
/datum/reagent/consumable/blackpepper = 2
)
@@ -51,7 +51,7 @@
/datum/crafting_recipe/food/liver_pate
name = "Liver pate"
reqs = list(
- /obj/item/organ/internal/liver = 1,
+ /obj/item/organ/liver = 1,
/obj/item/food/meat/rawcutlet = 1,
/obj/item/food/grown/onion = 1
)
@@ -104,8 +104,8 @@
/datum/crafting_recipe/food/brain_pate
name = "Eyeball-and-brain pate"
reqs = list(
- /obj/item/organ/internal/brain = 1,
- /obj/item/organ/internal/eyes = 1,
+ /obj/item/organ/brain = 1,
+ /obj/item/organ/eyes = 1,
/obj/item/food/grown/onion = 1,
/datum/reagent/consumable/salt = 3
)
@@ -305,7 +305,7 @@
/obj/item/food/root_flatbread = 1,
/obj/item/food/grown/cucumber = 2,
/obj/item/food/egg = 1,
- /obj/item/organ/internal/liver = 1
+ /obj/item/organ/liver = 1
)
result = /obj/item/food/pizza/flatbread/zmorgast
category = CAT_LIZARD
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
index 804956cbeed5b..9244f4c54f30d 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
@@ -33,7 +33,7 @@
name = "Lizard tail kebab"
reqs = list(
/obj/item/stack/rods = 1,
- /obj/item/organ/external/tail/lizard = 1
+ /obj/item/organ/tail/lizard = 1
)
result = /obj/item/food/kebab/tail
category = CAT_MEAT
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_mexican.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_mexican.dm
index 840d3a8c08b1a..3dbd7093a7415 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_mexican.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_mexican.dm
@@ -107,7 +107,7 @@
time = 40
reqs = list(
/obj/item/food/meat/steak/goliath = 1,
- /obj/item/organ/internal/monster_core/regenerative_core/legion = 1,
+ /obj/item/organ/monster_core/regenerative_core/legion = 1,
/datum/reagent/consumable/ketchup = 2,
/datum/reagent/consumable/capsaicin = 2
)
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
index cc27a6f078bef..9e145500a17c4 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
@@ -154,8 +154,8 @@
/datum/crafting_recipe/food/butterbear //ITS ALIVEEEEEE!
name = "Living bear/butter hybrid"
reqs = list(
- /obj/item/organ/internal/brain = 1,
- /obj/item/organ/internal/heart = 1,
+ /obj/item/organ/brain = 1,
+ /obj/item/organ/heart = 1,
/obj/item/food/butter = 4,
/obj/item/food/meat/slab = 5,
/datum/reagent/blood = 50,
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
index 8798f7cd8806c..522f6e9f695f8 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
@@ -423,7 +423,7 @@
time = 15
name = "Deluxe Meat-pocket"
reqs = list(
- /obj/item/organ/internal/heart = 1,
+ /obj/item/organ/heart = 1,
/obj/item/food/meatball = 1,
/obj/item/food/meat/slab = 1,
/obj/item/food/grown/herbs = 1
diff --git a/code/modules/hallucination/_hallucination.dm b/code/modules/hallucination/_hallucination.dm
index 9e23a65680290..b3f33fc3191b7 100644
--- a/code/modules/hallucination/_hallucination.dm
+++ b/code/modules/hallucination/_hallucination.dm
@@ -197,7 +197,7 @@
return
regenerate_image()
-/obj/effect/client_image_holder/singularity_pull()
+/obj/effect/client_image_holder/singularity_pull(atom/singularity, current_size)
return
/obj/effect/client_image_holder/singularity_act()
diff --git a/code/modules/hallucination/mother.dm b/code/modules/hallucination/mother.dm
index 7d407e43d8eb1..12b31b04f05c1 100644
--- a/code/modules/hallucination/mother.dm
+++ b/code/modules/hallucination/mother.dm
@@ -63,7 +63,7 @@
neck = /obj/item/clothing/neck/beads
shoes = /obj/item/clothing/shoes/sandal
-/datum/outfit/yourmother/post_equip(mob/living/carbon/human/user, visualsOnly = FALSE)
+/datum/outfit/yourmother/post_equip(mob/living/carbon/human/user, visuals_only = FALSE)
. = ..()
user.set_hairstyle("Braided", update = TRUE) //get_dynamic_human_appearance uses bald dummies
diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm
index 6e09ee3497cdd..db47c5625e3ba 100644
--- a/code/modules/hydroponics/grown/banana.dm
+++ b/code/modules/hydroponics/grown/banana.dm
@@ -39,7 +39,7 @@
///Clowns will always like bananas.
/obj/item/food/grown/banana/proc/check_liked(mob/living/carbon/human/consumer)
- var/obj/item/organ/internal/liver/liver = consumer.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = consumer.get_organ_slot(ORGAN_SLOT_LIVER)
if (!HAS_TRAIT(consumer, TRAIT_AGEUSIA) && liver && HAS_TRAIT(liver, TRAIT_COMEDY_METABOLISM))
return FOOD_LIKED
diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm
index 7fe5417ac92c0..1b81661d24517 100644
--- a/code/modules/hydroponics/hydroitemdefines.dm
+++ b/code/modules/hydroponics/hydroitemdefines.dm
@@ -469,6 +469,11 @@
H.visible_message(span_warning("[H] steps on [src] causing the handle to hit [H.p_them()] right in the face!"), \
span_userdanger("You step on [src] causing the handle to hit you right in the face!"))
+/obj/item/cultivator/cyborg
+ name = "cyborg cultivator"
+ icon = 'icons/obj/items_cyborg.dmi'
+ icon_state = "sili_cultivator"
+
/obj/item/hatchet
name = "hatchet"
desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood."
@@ -514,6 +519,11 @@
resistance_flags = FLAMMABLE
flags_1 = NONE
+/obj/item/hatchet/cyborg
+ name = "cyborg hatchet"
+ icon = 'icons/obj/items_cyborg.dmi'
+ icon_state = "sili_hatchet"
+
/obj/item/scythe
name = "scythe"
desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow."
@@ -607,6 +617,11 @@
/obj/item/secateurs/proc/restyle(atom/target, mob/living/user)
SEND_SIGNAL(target, COMSIG_ATOM_RESTYLE, user, target, user.zone_selected, EXTERNAL_RESTYLE_PLANT, 6 SECONDS)
+/obj/item/secateurs/cyborg
+ name = "cyborg secateurs"
+ icon = 'icons/obj/items_cyborg.dmi'
+ icon_state = "sili_secateur"
+
/obj/item/geneshears
name = "botanogenetic plant shears"
desc = "A high tech, high fidelity pair of plant shears, capable of cutting genetic traits out of a plant."
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 3a1a6d83e7dbf..53ffae4aca022 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -285,20 +285,21 @@
// Plumbing pauses if reagents is full.. so let's cheat and make sure it ticks unless both trays are happy
reagents = hydro_parent.waterlevel < hydro_parent.maxwater ? water_reagents : nutri_reagents
-/obj/machinery/hydroponics/bullet_act(obj/projectile/Proj) //Works with the Somatoray to modify plant variables.
+/obj/machinery/hydroponics/bullet_act(obj/projectile/proj) //Works with the Somatoray to modify plant variables.
if(!myseed)
return ..()
- if(istype(Proj , /obj/projectile/energy/flora/mut))
+ if(istype(proj, /obj/projectile/energy/flora/mut))
mutate()
- else if(istype(Proj , /obj/projectile/energy/flora/yield))
- return myseed.bullet_act(Proj)
- else if(istype(Proj , /obj/projectile/energy/flora/evolution))
+ return BULLET_ACT_HIT
+ if(istype(proj, /obj/projectile/energy/flora/yield))
+ return myseed.bullet_act(proj)
+ if(istype(proj, /obj/projectile/energy/flora/evolution))
if(myseed)
if(LAZYLEN(myseed.mutatelist))
myseed.set_instability(myseed.instability/2)
mutatespecie()
- else
- return ..()
+ return BULLET_ACT_HIT
+ return ..()
/obj/machinery/hydroponics/power_change()
. = ..()
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 86847f011738b..4589a3c4312b5 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -169,20 +169,18 @@
-/obj/item/seeds/bullet_act(obj/projectile/Proj) //Works with the Somatoray to modify plant variables.
- if(istype(Proj, /obj/projectile/energy/flora/yield))
- var/rating = 1
- if(istype(loc, /obj/machinery/hydroponics))
- var/obj/machinery/hydroponics/H = loc
- rating = H.rating
-
- if(yield == 0)//Oh god don't divide by zero you'll doom us all.
- adjust_yield(1 * rating)
- else if(prob(1/(yield * yield) * 100))//This formula gives you diminishing returns based on yield. 100% with 1 yield, decreasing to 25%, 11%, 6, 4, 2...
- adjust_yield(1 * rating)
- else
+/obj/item/seeds/bullet_act(obj/projectile/proj) //Works with the Somatoray to modify plant variables.
+ if(!istype(proj, /obj/projectile/energy/flora/yield))
return ..()
-
+ var/rating = 1
+ if(istype(loc, /obj/machinery/hydroponics))
+ var/obj/machinery/hydroponics/H = loc
+ rating = H.rating
+ if(yield == 0)//Oh god don't divide by zero you'll doom us all.
+ adjust_yield(1 * rating)
+ else if(prob(1/(yield * yield) * 100))//This formula gives you diminishing returns based on yield. 100% with 1 yield, decreasing to 25%, 11%, 6, 4, 2...
+ adjust_yield(1 * rating)
+ return BULLET_ACT_HIT
// Harvest procs
/obj/item/seeds/proc/getYield()
diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm
index 4cf7df5a671ce..d9225b8e90556 100644
--- a/code/modules/instruments/items.dm
+++ b/code/modules/instruments/items.dm
@@ -112,15 +112,19 @@
force = 0
attack_verb_continuous = list("plays", "jazzes", "trumpets", "mourns", "doots", "spooks")
attack_verb_simple = list("play", "jazz", "trumpet", "mourn", "doot", "spook")
+ var/single_use = FALSE
/obj/item/instrument/trumpet/spectral/Initialize(mapload)
. = ..()
- AddElement(/datum/element/spooky)
+ AddElement(/datum/element/spooky, too_spooky = !single_use, single_use = single_use)
/obj/item/instrument/trumpet/spectral/attack(mob/living/target_mob, mob/living/user, params)
playsound(src, 'sound/runtime/instruments/trombone/En4.mid', 1000, 1, -1)
return ..()
+/obj/item/instrument/trumpet/spectral/one_doot
+ single_use = TRUE
+
/obj/item/instrument/saxophone
name = "saxophone"
desc = "This soothing sound will be sure to leave your audience in tears."
@@ -136,15 +140,19 @@
force = 0
attack_verb_continuous = list("plays", "jazzes", "saxxes", "mourns", "doots", "spooks")
attack_verb_simple = list("play", "jazz", "sax", "mourn", "doot", "spook")
+ var/single_use = FALSE
/obj/item/instrument/saxophone/spectral/Initialize(mapload)
. = ..()
- AddElement(/datum/element/spooky)
+ AddElement(/datum/element/spooky, too_spooky = !single_use, single_use = single_use)
/obj/item/instrument/saxophone/spectral/attack(mob/living/target_mob, mob/living/user, params)
playsound(src, 'sound/runtime/instruments/trombone/En4.mid', 1000, 1, -1)
return ..()
+/obj/item/instrument/saxophone/spectral/one_doot
+ single_use = TRUE
+
/obj/item/instrument/trombone
name = "trombone"
desc = "How can any pool table ever hope to compete?"
@@ -160,10 +168,14 @@
force = 0
attack_verb_continuous = list("plays", "jazzes", "trombones", "mourns", "doots", "spooks")
attack_verb_simple = list("play", "jazz", "trombone", "mourn", "doot", "spook")
+ var/single_use = FALSE
/obj/item/instrument/trombone/spectral/Initialize(mapload)
. = ..()
- AddElement(/datum/element/spooky)
+ AddElement(/datum/element/spooky, too_spooky = !single_use, single_use = single_use)
+
+/obj/item/instrument/trombone/spectral/one_doot
+ single_use = TRUE
/obj/item/instrument/trombone/spectral/attack(mob/living/target_mob, mob/living/user, params)
playsound(src, 'sound/runtime/instruments/trombone/Cn4.mid', 1000, 1, -1)
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index f000efcfcd59a..485fbebe9384a 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -132,6 +132,8 @@
/// Minimal character age for this job
var/required_character_age
+ /// If set, look for a policy with this instead of the job title
+ var/policy_override
/datum/job/New()
. = ..()
@@ -149,7 +151,7 @@
if(length(mind_traits))
spawned.mind.add_traits(mind_traits, JOB_TRAIT)
- var/obj/item/organ/internal/liver/liver = spawned.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = spawned.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver && length(liver_traits))
liver.add_traits(liver_traits, JOB_TRAIT)
@@ -304,7 +306,7 @@
SHOULD_CALL_PARENT(TRUE)
var/list/info = list()
info += "You are the [title].\n"
- var/related_policy = get_policy(title)
+ var/related_policy = get_policy(policy_override || title)
var/radio_info = get_radio_information()
if(related_policy)
info += related_policy
@@ -349,7 +351,7 @@
var/pda_slot = ITEM_SLOT_BELT
-/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visuals_only = FALSE)
if(ispath(back, /obj/item/storage/backpack))
/// DOPPLER SHIFT EDIT BEGIN
var/obj/back_as_obj = back
@@ -390,8 +392,8 @@
if(client?.is_veteran() && client?.prefs.read_preference(/datum/preference/toggle/playtime_reward_cloak))
neck = /obj/item/clothing/neck/cloak/skill_reward/playing
-/datum/outfit/job/post_equip(mob/living/carbon/human/equipped, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/job/post_equip(mob/living/carbon/human/equipped, visuals_only = FALSE)
+ if(visuals_only)
return
var/datum/job/equipped_job = SSjob.get_job_type(jobtype)
diff --git a/code/modules/jobs/job_types/assistant/assistant.dm b/code/modules/jobs/job_types/assistant/assistant.dm
index 12424e44cead1..280e316276ba1 100644
--- a/code/modules/jobs/job_types/assistant/assistant.dm
+++ b/code/modules/jobs/job_types/assistant/assistant.dm
@@ -102,7 +102,7 @@ Assistant
/datum/outfit/job/assistant/consistent/give_jumpsuit(mob/living/carbon/human/target)
uniform = /obj/item/clothing/under/color/grey
-/datum/outfit/job/assistant/consistent/post_equip(mob/living/carbon/human/H, visualsOnly)
+/datum/outfit/job/assistant/consistent/post_equip(mob/living/carbon/human/H, visuals_only)
..()
// This outfit is used by the assets SS, which is ran before the atoms SS
diff --git a/code/modules/jobs/job_types/assistant/gimmick_assistants.dm b/code/modules/jobs/job_types/assistant/gimmick_assistants.dm
index f90e8af644683..6a254cfdd2b83 100644
--- a/code/modules/jobs/job_types/assistant/gimmick_assistants.dm
+++ b/code/modules/jobs/job_types/assistant/gimmick_assistants.dm
@@ -50,9 +50,9 @@
outfit_weight = 2
-/datum/outfit/job/assistant/gimmick/cyborg/post_equip(mob/living/carbon/human/equipped, visualsOnly)
+/datum/outfit/job/assistant/gimmick/cyborg/post_equip(mob/living/carbon/human/equipped, visuals_only)
. = ..()
- var/obj/item/organ/internal/tongue/robot/robotongue = new ()
+ var/obj/item/organ/tongue/robot/robotongue = new ()
robotongue.Insert(equipped, movement_flags = DELETE_IF_REPLACED)
/datum/outfit/job/assistant/gimmick/skater
@@ -106,7 +106,7 @@
outfit_weight = 5
-/datum/outfit/job/assistant/gimmick/mopper/post_equip(mob/living/carbon/human/equipped, visualsOnly)
+/datum/outfit/job/assistant/gimmick/mopper/post_equip(mob/living/carbon/human/equipped, visuals_only)
. = ..()
for(var/turf/turf in range(1, equipped))
diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm
index c0f200c82f7b6..d0e813bf46eef 100644
--- a/code/modules/jobs/job_types/bartender.dm
+++ b/code/modules/jobs/job_types/bartender.dm
@@ -61,7 +61,7 @@
skillchips = list(/obj/item/skillchip/drunken_brawler)
-/datum/outfit/job/bartender/post_equip(mob/living/carbon/human/H, visualsOnly)
+/datum/outfit/job/bartender/post_equip(mob/living/carbon/human/H, visuals_only)
. = ..()
var/obj/item/card/id/W = H.wear_id
diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm
index 99bc35bb60320..35155a7c7b70d 100644
--- a/code/modules/jobs/job_types/captain.dm
+++ b/code/modules/jobs/job_types/captain.dm
@@ -93,7 +93,7 @@
var/special_charter
-/datum/outfit/job/captain/pre_equip(mob/living/carbon/human/H, visualsOnly)
+/datum/outfit/job/captain/pre_equip(mob/living/carbon/human/H, visuals_only)
. = ..()
special_charter = CHECK_MAP_JOB_CHANGE(JOB_CAPTAIN, "special_charter")
if(!special_charter)
@@ -106,9 +106,9 @@
else if(!r_hand)
r_hand = /obj/item/station_charter/banner
-/datum/outfit/job/captain/post_equip(mob/living/carbon/human/equipped, visualsOnly)
+/datum/outfit/job/captain/post_equip(mob/living/carbon/human/equipped, visuals_only)
. = ..()
- if(visualsOnly || !special_charter)
+ if(visuals_only || !special_charter)
return
var/obj/item/station_charter/banner/celestial_charter = locate() in equipped.held_items
diff --git a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm
index f8e94746d6030..5a3e7a044e5a0 100644
--- a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm
+++ b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm
@@ -45,7 +45,7 @@
rods[nullrod_type] = initial(nullrod_type.menu_description)
//special non-nullrod subtyped shit
rods[/obj/item/gun/ballistic/bow/divine/with_quiver] = "A divine bow and 10 quivered holy arrows."
- rods[/obj/item/organ/internal/cyberimp/arm/shard/scythe] = "A shard that implants itself into your arm, \
+ rods[/obj/item/organ/cyberimp/arm/shard/scythe] = "A shard that implants itself into your arm, \
allowing you to conjure forth a vorpal scythe. \
Allows you to behead targets for empowered strikes. \
Harms you if you dismiss the scythe without first causing harm to a creature. \
@@ -826,21 +826,12 @@
else if(living_target.pulledby && living_target.pulledby.grab_state >= GRAB_AGGRESSIVE)
successful_sneak_attack = TRUE
- // traits that render you unable to defend yourself properly from an attack
- else if(HAS_TRAIT(living_target, TRAIT_SPINNING) || HAS_TRAIT(living_target, TRAIT_HANDS_BLOCKED))
+ // blocked hands renders you unable to defend yourself properly from an attack
+ else if(HAS_TRAIT(living_target, TRAIT_HANDS_BLOCKED))
successful_sneak_attack = TRUE
- // We'll take "same tile" as "behind" for ease
- else if(living_target.loc == user.loc)
- successful_sneak_attack = TRUE
-
- // We'll also assume lying down is vulnerable, as mob directions when lying are unclear and you have trouble defending yourself from prone
- else if(living_target.body_position == LYING_DOWN)
- successful_sneak_attack = TRUE
-
- // Now check for if we're behind
- var/dir_living_target_to_user = get_dir(living_target, user)
- if(living_target.dir & REVERSE_DIR(dir_living_target_to_user))
+ // Check for various positional outcomes to determine a sneak attack. We want to sneak attack whenever our target is behind.
+ else if(check_behind(user, living_target))
successful_sneak_attack = TRUE
/// Now we'll check for things that STOP a sneak attack. Why? Because this mechanic isn't complicated enough and I must insert more ivory tower design.
diff --git a/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm
index e6f34b894b3de..d2f6f61251dd2 100644
--- a/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm
+++ b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm
@@ -5,17 +5,17 @@ If the scythe isn't empowered when you sheath it, you take a heap of damage and
#define SCYTHE_SATED 1
#define SCYTHE_EMPOWERED 2
-/obj/item/organ/internal/cyberimp/arm/shard/scythe
+/obj/item/organ/cyberimp/arm/shard/scythe
name = "sinister shard"
desc = "This shard seems to be directly linked to some sinister entity. It might be your god! It also gives you a really horrible rash when you hold onto it for too long."
items_to_create = list(/obj/item/vorpalscythe)
-/obj/item/organ/internal/cyberimp/arm/shard/scythe/mob_insert(mob/living/carbon/receiver, special, movement_flags)
+/obj/item/organ/cyberimp/arm/shard/scythe/mob_insert(mob/living/carbon/receiver, special, movement_flags)
. = ..()
if(receiver.mind)
ADD_TRAIT(receiver.mind, TRAIT_MORBID, ORGAN_TRAIT)
-/obj/item/organ/internal/cyberimp/arm/shard/scythe/Retract()
+/obj/item/organ/cyberimp/arm/shard/scythe/Retract()
var/obj/item/vorpalscythe/scythe = active_item
if(!scythe)
return FALSE
diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm
index 12f30a9de1b88..5b20496072d44 100644
--- a/code/modules/jobs/job_types/clown.dm
+++ b/code/modules/jobs/job_types/clown.dm
@@ -83,7 +83,7 @@
back = /obj/item/mod/control/pre_equipped/cosmohonk
internals_slot = ITEM_SLOT_SUITSTORE
-/datum/outfit/job/clown/pre_equip(mob/living/carbon/human/H, visualsOnly)
+/datum/outfit/job/clown/pre_equip(mob/living/carbon/human/H, visuals_only)
. = ..()
if(HAS_TRAIT(SSstation, STATION_TRAIT_BANANIUM_SHIPMENTS))
backpack_contents[/obj/item/stack/sheet/mineral/bananium/five] = 1
@@ -93,9 +93,9 @@
if(HAS_TRAIT(SSstation, STATION_TRAIT_BANANIUM_SHIPMENTS))
. += /obj/item/stack/sheet/mineral/bananium/five
-/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
..()
- if(visualsOnly)
+ if(visuals_only)
return
H.fully_replace_character_name(H.real_name, pick(GLOB.clown_names)) //rename the mob AFTER they're equipped so their ID gets updated properly.
diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm
index dc36796c4d1cf..3498bffedcbbb 100644
--- a/code/modules/jobs/job_types/cook.dm
+++ b/code/modules/jobs/job_types/cook.dm
@@ -80,7 +80,7 @@
skillchips = list(/obj/item/skillchip/job/chef)
-/datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H, visuals_only = FALSE)
..()
var/datum/job/cook/other_chefs = SSjob.get_job_type(jobtype)
if(other_chefs) // If there's other Chefs, you're a Cook
@@ -88,10 +88,10 @@
id_trim = /datum/id_trim/job/cook
suit = /obj/item/clothing/suit/apron/chef
head = /obj/item/clothing/head/soft/mime
- if(!visualsOnly)
+ if(!visuals_only)
other_chefs.cooks++
-/datum/outfit/job/cook/post_equip(mob/living/carbon/human/user, visualsOnly = FALSE)
+/datum/outfit/job/cook/post_equip(mob/living/carbon/human/user, visuals_only = FALSE)
. = ..()
// Update PDA to match possible new trim.
var/obj/item/card/id/worn_id = user.wear_id
diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm
index 93475fdc79e23..1ab089b42b799 100644
--- a/code/modules/jobs/job_types/curator.dm
+++ b/code/modules/jobs/job_types/curator.dm
@@ -55,8 +55,8 @@
accessory = /obj/item/clothing/accessory/pocketprotector/full
-/datum/outfit/job/curator/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/job/curator/pre_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return ..()
/// There can be only one cameraman on this station, and no, not that kind
@@ -67,10 +67,10 @@
return ..()
-/datum/outfit/job/curator/post_equip(mob/living/carbon/human/translator, visualsOnly = FALSE)
+/datum/outfit/job/curator/post_equip(mob/living/carbon/human/translator, visuals_only = FALSE)
..()
- if(visualsOnly)
+ if(visuals_only)
return
translator.grant_all_languages(source = LANGUAGE_CURATOR)
diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm
index 258b2b322f1b9..2c8f7c6174884 100644
--- a/code/modules/jobs/job_types/detective.dm
+++ b/code/modules/jobs/job_types/detective.dm
@@ -78,17 +78,17 @@
skillchips = list(/obj/item/skillchip/job/detectives_taste)
-/datum/outfit/job/detective/pre_equip(mob/living/carbon/human/human, visualsOnly = FALSE)
+/datum/outfit/job/detective/pre_equip(mob/living/carbon/human/human, visuals_only = FALSE)
. = ..()
if (human.age < AGE_MINOR)
mask = /obj/item/cigarette/candy
head = /obj/item/clothing/head/fedora/det_hat/minor
-/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
..()
var/obj/item/cigarette/cig = H.wear_mask
if(istype(cig)) //Some species specfic changes can mess this up (plasmamen)
cig.light("")
- if(visualsOnly)
+ if(visuals_only)
return
diff --git a/code/modules/jobs/job_types/lawyer.dm b/code/modules/jobs/job_types/lawyer.dm
index a25a1d86d3ade..c1cdafab00b18 100644
--- a/code/modules/jobs/job_types/lawyer.dm
+++ b/code/modules/jobs/job_types/lawyer.dm
@@ -47,8 +47,8 @@
chameleon_extras = /obj/item/stamp/law
-/datum/outfit/job/lawyer/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/job/lawyer/pre_equip(mob/living/carbon/human/H, visuals_only = FALSE)
+ if(visuals_only)
return ..()
var/static/use_purple_suit = FALSE //If there is one lawyer, they get the default blue suit. If another lawyer joins the round, they start with a purple suit.
diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm
index 46090cdbe30ac..1a19365a83e1f 100644
--- a/code/modules/jobs/job_types/mime.dm
+++ b/code/modules/jobs/job_types/mime.dm
@@ -69,10 +69,10 @@
box = /obj/item/storage/box/survival/hug/black
chameleon_extras = /obj/item/stamp/mime
-/datum/outfit/job/mime/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+/datum/outfit/job/mime/post_equip(mob/living/carbon/human/H, visuals_only = FALSE)
..()
- if(visualsOnly)
+ if(visuals_only)
return
// Start our mime out with a vow of silence and the ability to break (or make) it
diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm
index 1d4be888e9678..59f15b3b3836a 100644
--- a/code/modules/jobs/job_types/prisoner.dm
+++ b/code/modules/jobs/job_types/prisoner.dm
@@ -65,7 +65,7 @@
if(prob(1)) // D BOYYYYSSSSS
head = /obj/item/clothing/head/beanie/black/dboy
-/datum/outfit/job/prisoner/post_equip(mob/living/carbon/human/new_prisoner, visualsOnly)
+/datum/outfit/job/prisoner/post_equip(mob/living/carbon/human/new_prisoner, visuals_only)
. = ..()
var/crime_name = new_prisoner.client?.prefs?.read_preference(/datum/preference/choiced/prisoner_crime)
@@ -74,7 +74,7 @@
return
var/list/limbs_to_tat = new_prisoner.bodyparts.Copy()
for(var/i in 1 to crime.tattoos)
- if(!length(SSpersistence.prison_tattoos_to_use) || visualsOnly)
+ if(!length(SSpersistence.prison_tattoos_to_use) || visuals_only)
return
var/obj/item/bodypart/tatted_limb = pick_n_take(limbs_to_tat)
var/list/tattoo = pick_n_take(SSpersistence.prison_tattoos_to_use)
diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm
index 64d1a3b0bff19..d5d31743ada6c 100644
--- a/code/modules/jobs/job_types/shaft_miner.dm
+++ b/code/modules/jobs/job_types/shaft_miner.dm
@@ -98,9 +98,9 @@
r_pocket = /obj/item/extinguisher/mini
belt = /obj/item/storage/belt/mining/healing
-/datum/outfit/job/miner/equipped/combat/post_equip(mob/living/carbon/human/miner, visualsOnly = FALSE)
+/datum/outfit/job/miner/equipped/combat/post_equip(mob/living/carbon/human/miner, visuals_only = FALSE)
. = ..()
- if(visualsOnly)
+ if(visuals_only)
return
var/list/miner_contents = miner.get_all_contents()
var/obj/item/clothing/suit/hooded/explorer/explorer_suit = locate() in miner_contents
diff --git a/code/modules/jobs/job_types/station_trait/bridge_assistant.dm b/code/modules/jobs/job_types/station_trait/bridge_assistant.dm
index d776ae6251f7f..562ec695d8a10 100644
--- a/code/modules/jobs/job_types/station_trait/bridge_assistant.dm
+++ b/code/modules/jobs/job_types/station_trait/bridge_assistant.dm
@@ -37,7 +37,9 @@
/datum/job/bridge_assistant/after_spawn(mob/living/spawned, client/player_client)
. = ..()
- ADD_TRAIT(spawned, TRAIT_NO_TWOHANDING, JOB_TRAIT)
+ var/mob/living/carbon/bridgie = spawned
+ if(istype(bridgie))
+ bridgie.gain_trauma(/datum/brain_trauma/special/axedoration)
/datum/job/bridge_assistant/get_roundstart_spawn_point()
var/list/chair_turfs = list()
diff --git a/code/modules/jobs/job_types/station_trait/human_ai.dm b/code/modules/jobs/job_types/station_trait/human_ai.dm
index d6f89357b4489..f0626d111522e 100644
--- a/code/modules/jobs/job_types/station_trait/human_ai.dm
+++ b/code/modules/jobs/job_types/station_trait/human_ai.dm
@@ -111,9 +111,9 @@
l_hand = /obj/item/paper/default_lawset_list
-/datum/outfit/job/human_ai/pre_equip(mob/living/carbon/human/equipped, visualsOnly)
+/datum/outfit/job/human_ai/pre_equip(mob/living/carbon/human/equipped, visuals_only)
. = ..()
- if(visualsOnly)
+ if(visuals_only)
return
if(is_safe_turf(equipped.loc, dense_atoms = TRUE)) //skip this if it's safe. We allow dense atoms because we spawn out of the inactive core.
return
@@ -123,12 +123,12 @@
suit = /obj/item/clothing/suit/space/nasavoid
head = /obj/item/clothing/head/helmet/space/nasavoid
-/datum/outfit/job/human_ai/post_equip(mob/living/carbon/human/equipped, visualsOnly)
+/datum/outfit/job/human_ai/post_equip(mob/living/carbon/human/equipped, visuals_only)
. = ..()
- if(visualsOnly)
+ if(visuals_only)
return
if(!equipped.get_quirk(/datum/quirk/body_purist))
- var/obj/item/organ/internal/tongue/robot/cybernetic = new()
+ var/obj/item/organ/tongue/robot/cybernetic = new()
cybernetic.Insert(equipped, special = TRUE, movement_flags = DELETE_IF_REPLACED)
//you only get respect if you go all the way, man.
ADD_TRAIT(equipped, TRAIT_COMMISSIONED, INNATE_TRAIT)
diff --git a/code/modules/language/_language.dm b/code/modules/language/_language.dm
index 6a00610c0adf2..595b591a0dd90 100644
--- a/code/modules/language/_language.dm
+++ b/code/modules/language/_language.dm
@@ -85,7 +85,7 @@
syllable_max = default_name_syllable_max,
force_use_syllables = FALSE,
)
- if(gender != MALE)
+ if(gender != MALE && gender != FEMALE)
gender = pick(MALE, FEMALE)
if(!length(syllables) || always_use_default_namelist)
return default_name(gender)
diff --git a/code/modules/library/bibles.dm b/code/modules/library/bibles.dm
index 52a1b91316377..99c28b76ff244 100644
--- a/code/modules/library/bibles.dm
+++ b/code/modules/library/bibles.dm
@@ -308,10 +308,14 @@ GLOBAL_LIST_INIT(bibleitemstates, list(
return .
if(istype(bible_smacked, /obj/item/melee/cultblade/haunted) && !IS_CULTIST(user))
+ var/obj/item/melee/cultblade/haunted/sword_smacked = bible_smacked
+ if(!sword_smacked.bound)
+ sword_smacked.balloon_alert(user, "must be bound!")
+ return ITEM_INTERACT_BLOCKING
var/obj/item/melee/cultblade/haunted/sword = bible_smacked
sword.balloon_alert(user, "exorcising...")
playsound(src,'sound/effects/hallucinations/veryfar_noise.ogg',40,TRUE)
- if(do_after(user, 4 SECONDS, target = sword))
+ if(do_after(user, 12 SECONDS, target = sword))
playsound(src,'sound/effects/pray_chaplain.ogg',60,TRUE)
new /obj/item/nullrod/nullblade(get_turf(sword))
user.visible_message(span_notice("[user] exorcises [sword]!"))
diff --git a/code/modules/library/skill_learning/skill_station.dm b/code/modules/library/skill_learning/skill_station.dm
index 2dec45a6abf77..dc42dd7db90a3 100644
--- a/code/modules/library/skill_learning/skill_station.dm
+++ b/code/modules/library/skill_learning/skill_station.dm
@@ -229,7 +229,7 @@
.["slots_max"] = null
return
- var/obj/item/organ/internal/brain/occupant_brain = carbon_occupant.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/occupant_brain = carbon_occupant.get_organ_slot(ORGAN_SLOT_BRAIN)
// If there's no brain, we don't need to worry either.
if(QDELETED(occupant_brain))
@@ -272,7 +272,7 @@
return TRUE
var/chipref = params["ref"]
var/mob/living/carbon/carbon_occupant = occupant
- var/obj/item/organ/internal/brain/occupant_brain = carbon_occupant.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/occupant_brain = carbon_occupant.get_organ_slot(ORGAN_SLOT_BRAIN)
if(QDELETED(carbon_occupant) || QDELETED(occupant_brain))
return TRUE
var/obj/item/skillchip/to_be_removed = locate(chipref) in occupant_brain.skillchips
@@ -297,7 +297,7 @@
stack_trace("[usr] tried to toggle skillchip activation when [src] was in an invalid state.")
return TRUE
var/mob/living/carbon/carbon_occupant = occupant
- var/obj/item/organ/internal/brain/occupant_brain = carbon_occupant.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/occupant_brain = carbon_occupant.get_organ_slot(ORGAN_SLOT_BRAIN)
if(QDELETED(carbon_occupant) || QDELETED(occupant_brain))
return TRUE
var/obj/item/skillchip/to_be_removed = locate(chipref) in occupant_brain.skillchips
diff --git a/code/modules/library/skill_learning/skillchip.dm b/code/modules/library/skill_learning/skillchip.dm
index eddaf300e08a9..5ca3f784ecbec 100644
--- a/code/modules/library/skill_learning/skillchip.dm
+++ b/code/modules/library/skill_learning/skillchip.dm
@@ -42,7 +42,7 @@
/// Set to TRUE when the skill chip's effects are applied. Set to FALSE when they're not.
var/active = FALSE
/// Brain that holds this skillchip.
- var/obj/item/organ/internal/brain/holding_brain
+ var/obj/item/organ/brain/holding_brain
/obj/item/skillchip/Initialize(mapload, is_removable = TRUE)
. = ..()
@@ -131,7 +131,7 @@
* Arguments:
* * owner_brain - The brain that this skillchip was implanted in to.
*/
-/obj/item/skillchip/proc/on_implant(obj/item/organ/internal/brain/owner_brain)
+/obj/item/skillchip/proc/on_implant(obj/item/organ/brain/owner_brain)
if(holding_brain)
CRASH("Skillchip is trying to be implanted into [owner_brain], but it's already implanted in [holding_brain]")
@@ -205,7 +205,7 @@
* Arguments:
* * skillchip - The skillchip you're intending to activate. Does not activate the chip.
*/
-/obj/item/skillchip/proc/has_activate_incompatibility(obj/item/organ/internal/brain/brain)
+/obj/item/skillchip/proc/has_activate_incompatibility(obj/item/organ/brain/brain)
if(QDELETED(brain))
return "No brain detected."
@@ -255,7 +255,7 @@
return "Incompatible lifeform detected."
// No brain
- var/obj/item/organ/internal/brain/brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
if(QDELETED(brain))
return "No brain detected."
@@ -274,7 +274,7 @@
* Arguments:
* * brain - The brain to check for implantability with.
*/
-/obj/item/skillchip/proc/has_brain_incompatibility(obj/item/organ/internal/brain/brain)
+/obj/item/skillchip/proc/has_brain_incompatibility(obj/item/organ/brain/brain)
if(!istype(brain))
stack_trace("Attempted to check incompatibility with invalid brain object [brain].")
return "Incompatible brain."
diff --git a/code/modules/lost_crew/body_bags.dm b/code/modules/lost_crew/body_bags.dm
new file mode 100644
index 0000000000000..2a23d5f7253b8
--- /dev/null
+++ b/code/modules/lost_crew/body_bags.dm
@@ -0,0 +1,52 @@
+/obj/item/bodybag/lost_crew
+ name = "long-term body bag"
+ desc = "A folded bag designed for the long-term storage and transportation of cadavers."
+ unfoldedbag_path = /obj/structure/closet/body_bag/lost_crew
+ icon_state = "bodybag_lost_folded"
+
+/obj/structure/closet/body_bag/lost_crew
+ name = "long-term body bag"
+ desc = "A plastic bag designed for the long-term storage and transportation of cadavers."
+
+ icon_state = "bodybag_lost"
+
+ foldedbag_path = /obj/item/bodybag/lost_crew
+
+/// Filled with one body. If folded, gives the parent type so we dont make infinite corpses
+/obj/structure/closet/body_bag/lost_crew/with_body
+ /// Whether or not we spawn a paper with everything thats happened to the body
+ var/debug = FALSE
+
+/obj/structure/closet/body_bag/lost_crew/with_body/PopulateContents()
+ . = ..()
+
+ var/list/recovered_items = list()
+ var/list/protected_items = list()
+ var/list/lost_crew_data = list()
+ var/mob/living/corpse = GLOB.lost_crew_manager.create_lost_crew(revivable = TRUE, recovered_items = recovered_items, protected_items = protected_items, body_data = lost_crew_data)
+ corpse.mind_initialize()
+ corpse.forceMove(src)
+
+ // Drop stuff like dropped limbs and organs with them in the bag
+ for(var/obj/object in recovered_items)
+ object.forceMove(src)
+
+ // Spawn a mind lockbox with job stuffs for them to work with when they return
+ if(protected_items.len && corpse.mind)
+ var/obj/item/storage/lockbox/mind/box = new(src)
+ box.mind = corpse.mind
+ for(var/obj/object in protected_items)
+ object.forceMove(box)
+
+ process_data(lost_crew_data)
+
+/obj/structure/closet/body_bag/lost_crew/with_body/proc/process_data(list/crew_data)
+ if(!debug)
+ return
+
+ var/obj/item/paper/paper = new(src)
+ paper.add_raw_text(english_list(crew_data), advanced_html = TRUE)
+
+/// Subtype for debugging damage types
+/obj/structure/closet/body_bag/lost_crew/with_body/debug
+ debug = TRUE
diff --git a/code/modules/lost_crew/character/_assignment.dm b/code/modules/lost_crew/character/_assignment.dm
new file mode 100644
index 0000000000000..69d8ac96f7922
--- /dev/null
+++ b/code/modules/lost_crew/character/_assignment.dm
@@ -0,0 +1,139 @@
+/// Possible assignments corpses can have, both for flavor and to push them towards contributing to the round
+/datum/corpse_assignment
+ /// Message we send to the player upon revival concerning their job
+ var/job_lore
+ /// Gear to give to the crewie in a special locked box
+ var/list/job_stuffs
+ /// Trim on the ID we give to the revived person (no trim = no id)
+ var/datum/id_trim/trim
+ /// Job datum to apply to the human
+ var/datum/job/job_datum
+
+/datum/corpse_assignment/proc/apply_assignment(mob/living/carbon/human/working_dead, list/job_gear, list/datum/callback/on_revive_and_player_occupancy)
+ if(!job_gear)
+ return
+
+ for(var/item in job_stuffs)
+ job_gear += new item ()
+ job_gear += job_stuffs
+
+ if(job_datum)
+ on_revive_and_player_occupancy += CALLBACK(src, PROC_REF(assign_job), working_dead) //this needs to happen once the body has been succesfully occupied and revived
+
+ if(trim)
+ var/obj/item/card/id/advanced/card = new()
+ card.registered_name = working_dead.name
+ card.registered_age = working_dead.age
+ SSid_access.apply_trim_to_card(card, trim)
+ job_gear += card
+
+/datum/corpse_assignment/proc/assign_job(mob/living/carbon/human/working_undead)
+ working_undead.mind.set_assigned_role_with_greeting(new job_datum (), working_undead.client)
+
+/datum/corpse_assignment/engineer
+ job_lore = "I was employed as an engineer"
+ job_stuffs = list(/obj/item/clothing/under/rank/engineering/engineer)
+ trim = /datum/id_trim/job/visiting_engineer
+ job_datum = /datum/job/recovered_crew/engineer
+
+/datum/id_trim/job/visiting_engineer
+ assignment = JOB_LOSTCREW_ENGINEER
+ trim_state = "trim_stationengineer"
+ department_color = COLOR_ENGINEERING_ORANGE
+ subdepartment_color = COLOR_ENGINEERING_ORANGE
+ sechud_icon_state = SECHUD_STATION_ENGINEER
+ minimal_access = list(
+ ACCESS_CONSTRUCTION,
+ ACCESS_EXTERNAL_AIRLOCKS,
+ ACCESS_MAINT_TUNNELS,
+ )
+
+/datum/corpse_assignment/medical
+ job_lore = "I was employed as a doctor"
+ job_stuffs = list(/obj/item/clothing/under/rank/medical/doctor)
+ trim = /datum/id_trim/job/visiting_doctor
+ job_datum = /datum/job/recovered_crew/doctor
+
+/datum/id_trim/job/visiting_doctor
+ assignment = JOB_LOSTCREW_MEDICAL
+ trim_state = "trim_medicaldoctor"
+ department_color = COLOR_MEDICAL_BLUE
+ subdepartment_color = COLOR_MEDICAL_BLUE
+ sechud_icon_state = SECHUD_MEDICAL_DOCTOR
+
+ minimal_access = list(
+ ACCESS_MEDICAL,
+ )
+
+/datum/corpse_assignment/security
+ job_lore = "I was employed as security"
+ job_stuffs = list(/obj/item/clothing/under/rank/security/officer)
+ trim = /datum/id_trim/job/visiting_security
+ job_datum = /datum/job/recovered_crew/security
+
+/datum/corpse_assignment/security/apply_assignment(mob/living/carbon/human/working_dead, list/job_gear)
+ . = ..()
+
+ var/obj/item/implant/mindshield/shield = new()
+ shield.implant(working_dead)
+
+/datum/id_trim/job/visiting_security
+ assignment = JOB_LOSTCREW_SECURITY
+ trim_state = "trim_securityofficer"
+ department_color = COLOR_SECURITY_RED
+ subdepartment_color = COLOR_SECURITY_RED
+ sechud_icon_state = SECHUD_SECURITY_OFFICER
+
+ minimal_access = list(
+ ACCESS_BRIG_ENTRANCE,
+ )
+
+/datum/corpse_assignment/science
+ job_lore = "I was employed as a scientist"
+ job_stuffs = list(/obj/item/clothing/under/rank/rnd/scientist)
+ trim = /datum/id_trim/job/visiting_scientist
+ job_datum = /datum/job/recovered_crew/scientist
+
+/datum/id_trim/job/visiting_scientist
+ assignment = JOB_LOSTCREW_SCIENCE
+ trim_state = "trim_scientist"
+ department_color = COLOR_SCIENCE_PINK
+ subdepartment_color = COLOR_SCIENCE_PINK
+ sechud_icon_state = SECHUD_SCIENTIST
+ minimal_access = list(
+ ACCESS_AUX_BASE,
+ ACCESS_SCIENCE,
+ )
+
+/datum/corpse_assignment/cargo
+ job_lore = "I was employed as a technician"
+ job_stuffs = list(/obj/item/clothing/under/rank/cargo/tech)
+ trim = /datum/id_trim/job/visiting_technician
+ job_datum = /datum/job/recovered_crew/cargo
+
+/datum/id_trim/job/visiting_technician
+ assignment = JOB_LOSTCREW_CARGO
+ trim_state = "trim_cargotechnician"
+ department_color = COLOR_CARGO_BROWN
+ subdepartment_color = COLOR_CARGO_BROWN
+ sechud_icon_state = SECHUD_CARGO_TECHNICIAN
+ minimal_access = list(
+ ACCESS_CARGO,
+ ACCESS_MAINT_TUNNELS,
+ )
+
+/datum/corpse_assignment/civillian
+ job_lore = "I was employed as a civllian"
+ job_stuffs = list(/obj/item/clothing/under/color/grey)
+ trim = /datum/id_trim/job/visiting_civillian
+ job_datum = /datum/job/recovered_crew/civillian
+
+/datum/id_trim/job/visiting_civillian
+ assignment = JOB_LOSTCREW_CIVILLIAN
+ trim_state = "trim_assistant"
+ sechud_icon_state = SECHUD_ASSISTANT
+ minimal_access = list()
+ extra_access = list(
+ ACCESS_MAINT_TUNNELS,
+ ACCESS_SERVICE,
+ )
diff --git a/code/modules/lost_crew/character/_character.dm b/code/modules/lost_crew/character/_character.dm
new file mode 100644
index 0000000000000..518f10e7458f1
--- /dev/null
+++ b/code/modules/lost_crew/character/_character.dm
@@ -0,0 +1,52 @@
+/// Datum for controlling the base character, such as species, scarring, styles, augments etc
+/datum/corpse_character
+ /// Species type to spawn with
+ var/datum/species/species_type = /datum/species/human
+
+/datum/corpse_character/proc/apply_character(mob/living/carbon/human/fashionable_corpse, list/saved_objects, list/recovered_items, list/datum/callback/on_revive_and_player_occupancy)
+ fashionable_corpse.set_species(species_type)
+ fashionable_corpse.fully_replace_character_name(fashionable_corpse.real_name, fashionable_corpse.generate_random_mob_name())
+
+/// Not really all roundstart species, but plasmaman is a bit too flamboyant and felinids aren't interesting
+/datum/corpse_character/mostly_roundstart
+ var/list/possible_species = list(
+ /datum/species/human = 10,
+ /datum/species/lizard = 2,
+ /datum/species/ethereal = 1,
+ /datum/species/moth = 1,
+ )
+
+/datum/corpse_character/mostly_roundstart/apply_character(mob/living/carbon/human/fashionable_corpse, list/saved_objects, list/recovered_items, list/datum/callback/on_revive_and_player_occupancy)
+ species_type = pick_weight(possible_species)
+ ..()
+
+/datum/corpse_character/human
+ species_type = /datum/species/human
+
+/// used by the morgue trays to spawn bodies (obeying three different configs???????????????????? yes please daddy give me more config for benign features)
+/datum/corpse_character/morgue
+
+/datum/corpse_character/morgue/apply_character(mob/living/carbon/human/fashionable_corpse, list/saved_objects, list/recovered_items, list/datum/callback/on_revive_and_player_occupancy)
+ var/use_species = !(CONFIG_GET(flag/morgue_cadaver_disable_nonhumans))
+ var/species_probability = CONFIG_GET(number/morgue_cadaver_other_species_probability) * use_species
+ var/override_species = CONFIG_GET(string/morgue_cadaver_override_species)
+
+ if(override_species)
+ species_type = GLOB.species_list[override_species]
+
+ else if(prob(species_probability))
+ species_type = GLOB.species_list[pick(get_selectable_species())]
+
+ if(!species_type)
+ stack_trace("failed to spawn cadaver with species ID [species_type]") //if it's invalid they'll just be a human, so no need to worry too much aside from yelling at the server owner lol.
+ species_type = initial(species_type)
+
+ return ..()
+
+/datum/corpse_character/pod
+ species_type = /datum/species/pod
+
+/datum/corpse_character/pod/apply_character(mob/living/carbon/human/fashionable_corpse, list/saved_objects, list/recovered_items, list/datum/callback/on_revive_and_player_occupancy)
+ . = ..()
+
+ recovered_items += new /obj/item/plant_analyzer () //needed to properly healthscan them
diff --git a/code/modules/lost_crew/character/flavor.dm b/code/modules/lost_crew/character/flavor.dm
new file mode 100644
index 0000000000000..fdeb5503fa0ae
--- /dev/null
+++ b/code/modules/lost_crew/character/flavor.dm
@@ -0,0 +1,14 @@
+/// Apply some flavor to the character to make it seem more 'alive'
+/datum/corpse_flavor
+
+/datum/corpse_flavor/proc/apply_flavor(mob/living/carbon/human/working_dead, list/job_gear, list/datum/callback/on_revive_and_player_occupancy)
+
+/// Applies a quirk when selected
+/datum/corpse_flavor/quirk
+ var/datum/quirk/quirk
+
+/datum/corpse_flavor/quirk/apply_flavor(mob/living/carbon/human/working_dead, list/job_gear, list/datum/callback/on_revive_and_player_occupancy)
+ working_dead.add_quirk(quirk)
+
+/datum/corpse_flavor/quirk/prosthetic_limb
+ quirk = /datum/quirk/prosthetic_limb
diff --git a/code/modules/lost_crew/character/job_datums.dm b/code/modules/lost_crew/character/job_datums.dm
new file mode 100644
index 0000000000000..5b9ad43311fea
--- /dev/null
+++ b/code/modules/lost_crew/character/job_datums.dm
@@ -0,0 +1,33 @@
+/datum/job/recovered_crew
+ policy_override = "Recovered Crew"
+ faction = FACTION_STATION
+
+/datum/job/recovered_crew/doctor
+ title = JOB_LOSTCREW_MEDICAL
+ department_head = list(JOB_CHIEF_MEDICAL_OFFICER)
+ supervisors = SUPERVISOR_CMO
+
+/datum/job/recovered_crew/engineer
+ title = JOB_LOSTCREW_ENGINEER
+ department_head = list(JOB_CHIEF_ENGINEER)
+ supervisors = SUPERVISOR_CE
+
+/datum/job/recovered_crew/security
+ title = JOB_LOSTCREW_SECURITY
+ department_head = list(JOB_HEAD_OF_SECURITY)
+ supervisors = SUPERVISOR_HOS
+
+/datum/job/recovered_crew/cargo
+ title = JOB_LOSTCREW_CARGO
+ department_head = list(JOB_QUARTERMASTER)
+ supervisors = SUPERVISOR_QM
+
+/datum/job/recovered_crew/scientist
+ title = JOB_LOSTCREW_SCIENCE
+ department_head = list(JOB_RESEARCH_DIRECTOR)
+ supervisors = SUPERVISOR_RD
+
+/datum/job/recovered_crew/civillian
+ title = JOB_LOSTCREW_CIVILLIAN
+ department_head = list(JOB_HEAD_OF_PERSONNEL)
+ supervisors = SUPERVISOR_HOP
diff --git a/code/modules/lost_crew/damages/_damages.dm b/code/modules/lost_crew/damages/_damages.dm
new file mode 100644
index 0000000000000..6fdc2a8eee9a4
--- /dev/null
+++ b/code/modules/lost_crew/damages/_damages.dm
@@ -0,0 +1,142 @@
+// Unique damage types we can apply for blacklisting, so we dont remove all organs twice etc
+#define CORPSE_DAMAGE_ORGAN_DECAY "organ decay"
+#define CORPSE_DAMAGE_ORGAN_LOSS "organ loss"
+#define CORPSE_DAMAGE_LIMB_LOSS "limb loss"
+
+/// The main style controller for new dead bodies! Determines the character, lore, possible causes of death, decay and every other modifier!
+/datum/corpse_damage_class
+ /// Message sent to the recovered crew, constructed from the different death lores
+ var/list/death_lore = list()
+ /// Lore we give on revival, this is the first line
+ var/area_lore = "I was doing something"
+ /// Weight given to this class. Setting this is all that's needed for it to be rollable
+ var/weight
+ /// Different character archetypes we can spawn
+ var/list/possible_character_types
+ /// Assignments that can be given to the corpse
+ var/list/possible_character_assignments
+ /// Possible flavors that can be applied to the corpse
+ var/list/possible_flavor_types
+ /// Whatever killed us
+ var/list/possible_causes_of_death
+ /// Goddamn space vultures stealing my organs
+ var/list/post_mortem_effects
+ /// A random decay we apply. Defined here so we can vary it (i.e. a spaced body has less decay than one in a warm jungle)
+ var/list/decays = list(/datum/corpse_damage/post_mortem/organ_decay)
+ /// When healthscanned, this is the minimum time that shows
+ var/lore_death_time_min = 1 DAYS
+ /// When healthscanned, this is the maximum time that shows
+ var/lore_death_time_max = 5 YEARS
+
+/// Generate and apply a possible character (species etc)
+/datum/corpse_damage_class/proc/apply_character(mob/living/carbon/human/fashion_corpse, list/protected_objects, list/recovered_items, list/datum/callback/on_revive_and_player_occupancy, list/body_data)
+ var/datum/corpse_character/character = pick_weight(possible_character_types)
+ character = new character()
+ character.apply_character(fashion_corpse, protected_objects, recovered_items, on_revive_and_player_occupancy)
+
+ var/datum/corpse_assignment/assignment = pick_weight(possible_character_assignments)
+ if(ispath(assignment))
+ assignment = new assignment()
+ assignment.apply_assignment(fashion_corpse, protected_objects, on_revive_and_player_occupancy)
+ body_data += assignment.type
+
+ var/datum/corpse_flavor/flavor = pick_weight(possible_flavor_types)
+ if(ispath(flavor))
+ flavor = new flavor()
+ flavor?.apply_flavor(fashion_corpse, protected_objects, on_revive_and_player_occupancy)
+ body_data += flavor.type
+
+ death_lore += assignment?.job_lore
+
+ body_data += character.type
+
+/// Set up injuries
+/datum/corpse_damage_class/proc/apply_injuries(mob/living/carbon/human/victim, list/saved_objects, list/datum/callback/on_revive_and_player_occupancy, list/body_data)
+ var/bonus_roll = prob(80) //do an extra turn for cause of death or post mortum effect
+ var/bonus_roll_used = FALSE
+ var/list/used_damage_types = list()
+
+ var/datum/corpse_damage/cause_of_death/cause_of_death
+ for(var/i in 0 to 2)
+ cause_of_death = pick_damage_type(possible_causes_of_death, used_damage_types, bonus_roll_used)
+
+ if(!cause_of_death) //we ran out of causes of death (impressive!)
+ break
+
+ cause_of_death.apply_to_body(victim, rand(), saved_objects, on_revive_and_player_occupancy)
+ body_data += cause_of_death.type
+
+ if(cause_of_death.no_bonus_roll || !bonus_roll || prob(70)) //70% chance to do the bonus roll, otherwise pass the bonus to post mortem
+ break
+
+ bonus_roll = FALSE
+ bonus_roll_used = TRUE
+
+ for(var/i in 0 to 2)
+ var/datum/corpse_damage/post_mortem = pick_damage_type(post_mortem_effects, used_damage_types)
+ if(post_mortem)
+ post_mortem.apply_to_body(victim, rand(), saved_objects, on_revive_and_player_occupancy)
+ body_data += post_mortem.type
+
+ if(!bonus_roll)
+ break
+
+ bonus_roll = FALSE
+
+ var/datum/corpse_damage/decay = pick_damage_type(decays, used_damage_types)
+ decay?.apply_to_body(victim, rand(), saved_objects, on_revive_and_player_occupancy)
+ body_data += decay.type
+
+ // Simulate bloodloss by dragging/moving
+ victim.blood_volume = max(victim.blood_volume - victim.bleedDragAmount() * rand(20, 100), 0)
+ set_death_date(victim)
+
+ death_lore += area_lore + " " + cause_of_death.cause_of_death
+
+/// Wrapped pickweight so we can have a bit more controle over how we pick our rules
+/datum/corpse_damage_class/proc/pick_damage_type(list/damages, list/used_damage_types, bonus_roll_used)
+ var/list/possible_damages = list()
+
+ for(var/datum/corpse_damage/damage as anything in damages)
+ if(ispath(damage) && initial(damage.damage_type) && (initial(damage.damage_type) in used_damage_types) || bonus_roll_used && initial(damage.no_bonus_roll))
+ continue
+ possible_damages[damage] = damages[damage]
+
+ var/datum/corpse_damage/chosen = pick_weight(possible_damages)
+ if(!ispath(chosen)) //can also be null for some variants
+ return null
+
+ chosen = new chosen()
+
+ if(chosen.damage_type)
+ used_damage_types += chosen.damage_type
+ return chosen
+
+/// Soulfully give a date of death for health analyzers
+/datum/corpse_damage_class/proc/set_death_date(mob/living/carbon/body)
+ var/died_how_long_ago = rand(lore_death_time_min, lore_death_time_max)
+ body.timeofdeath = world.time - died_how_long_ago
+
+ var/death_real_time = world.realtime - died_how_long_ago
+ var/current_date = time2text(death_real_time, "DD Month")
+ var/current_year = text2num(time2text(death_real_time, "YYYY")) + STATION_YEAR_OFFSET
+ body.station_timestamp_timeofdeath = "[current_date] [current_year]"
+
+/// Main corpse damage type that's used to apply damages to a body
+/datum/corpse_damage
+ /// When given, automatically blacklist corpse_damages with the same damage_type flag to avoid stuff like being delimbed twice (dragon ate me AND I got space vultures???)
+ var/damage_type
+ /// if TRUE this can only be the only cause of death, and not multiple at once
+ var/no_bonus_roll = FALSE
+
+/// Tear IT UPPP!!! Apply any damages to the body that we need to
+/datum/corpse_damage/proc/apply_to_body(mob/living/carbon/human/body, severity, list/storage)
+ return
+
+/// This is the reason we died
+/datum/corpse_damage/cause_of_death
+ /// I was in x, [when I ....]
+ var/cause_of_death = "when I tripped and died."
+
+/// Some post mortem damages from space vultures
+/datum/corpse_damage/post_mortem
diff --git a/code/modules/lost_crew/damages/accident.dm b/code/modules/lost_crew/damages/accident.dm
new file mode 100644
index 0000000000000..da5f4d0b0a09d
--- /dev/null
+++ b/code/modules/lost_crew/damages/accident.dm
@@ -0,0 +1,36 @@
+/datum/corpse_damage/cause_of_death/plasmafire
+ cause_of_death = "when I got caught in a plasmafire!"
+ /// The max tox damage we deal
+ var/tox_damage_max = 40
+ /// Guaranteed burn damage
+ var/burn_damage_base = 100
+ /// Burn damage that fluctuates with severity
+ var/burn_damage_max = 100
+
+/datum/corpse_damage/cause_of_death/plasmafire/apply_to_body(mob/living/carbon/human/body, severity, list/storage, list/datum/callback/on_revive_and_player_occupancy)
+ body.apply_damage(burn_damage_base + burn_damage_max * severity, BURN, wound_bonus = 100 * severity, spread_damage = TRUE)
+ body.apply_damage(tox_damage_max * severity, TOX)
+
+/datum/corpse_damage/cause_of_death/explosion
+ cause_of_death = "when I noticed a bomb!"
+
+ /// The explosion severity
+ var/severity = EXPLODE_HEAVY
+ /// The maximum amount of explosions we can proc
+ var/explosion_count_max = 4
+
+/datum/corpse_damage/cause_of_death/explosion/apply_to_body(mob/living/carbon/human/body, severity, list/storage, list/datum/callback/on_revive_and_player_occupancy)
+ for(var/i in 1 to max(round(explosion_count_max * severity), 1))
+ body.ex_act(EXPLODE_HEAVY)
+
+/datum/corpse_damage/cause_of_death/spaced
+ cause_of_death = "when I got spaced!"
+ /// Guaranteed brute and burn damage
+ var/base_damage = 90
+ /// Damage influenced by the severity
+ var/damage_max = 100
+
+/datum/corpse_damage/cause_of_death/spaced/apply_to_body(mob/living/carbon/human/body, severity, list/storage, list/datum/callback/on_revive_and_player_occupancy)
+ body.apply_damage(base_damage + damage_max * (severity * rand(80, 120) * 0.01), BURN, spread_damage = TRUE)
+ body.apply_damage(base_damage + damage_max * (severity * rand(80, 120) * 0.01), BRUTE, spread_damage = TRUE)
+ body.set_coretemperature(TCMB)
diff --git a/code/modules/lost_crew/damages/decay.dm b/code/modules/lost_crew/damages/decay.dm
new file mode 100644
index 0000000000000..55674894474e5
--- /dev/null
+++ b/code/modules/lost_crew/damages/decay.dm
@@ -0,0 +1,23 @@
+/// We simulate decay on bodies. This is always used, but severity can differ (though tending to the more severe)
+/datum/corpse_damage/post_mortem/organ_decay
+ damage_type = CORPSE_DAMAGE_ORGAN_DECAY
+ /// The max amount of decay we can apply to organs, scaled by severity
+ var/max_decay_time = 40 MINUTES
+
+/datum/corpse_damage/post_mortem/organ_decay/apply_to_body(mob/living/carbon/human/body, severity, list/sorage, list/datum/callback/on_revive_and_player_occupancy)
+ if(!body.organs)
+ return FALSE
+
+ // * 0.5 because life ticks happen about every 2 seconds (we really need a way to get the current life tickspeed)
+ var/decay_ticks = max_decay_time * severity * 0.5
+
+ for(var/obj/item/organ/internal in body.organs)
+ internal.apply_organ_damage(decay_ticks * internal.decay_factor)
+
+ return TRUE
+
+/datum/corpse_damage/post_mortem/organ_decay/light
+ max_decay_time = 15 MINUTES
+
+/datum/corpse_damage/post_mortem/organ_decay/heavy
+ max_decay_time = 48 HOURS
diff --git a/code/modules/lost_crew/damages/melee.dm b/code/modules/lost_crew/damages/melee.dm
new file mode 100644
index 0000000000000..4896930772ae5
--- /dev/null
+++ b/code/modules/lost_crew/damages/melee.dm
@@ -0,0 +1,45 @@
+/// Simulates a melee attack with a specified weapon
+/datum/corpse_damage/cause_of_death/melee_weapon
+ /// The weapon with which we hit
+ var/obj/item/weapon
+ /// The minimal amount of hits
+ var/min_hits = 5
+ /// The maximum amount of hits
+ var/max_hits = 15
+
+/datum/corpse_damage/cause_of_death/melee_weapon/apply_to_body(mob/living/carbon/human/body, severity, list/storage, list/datum/callback/on_revive_and_player_occupancy)
+ weapon = get_weapon(body)
+
+ var/hits = ((max_hits - min_hits) * severity + min_hits)
+ for(var/i in 1 to hits)
+ weapon.attack(body, body) //needs an attacker, no reason it cant be the body as well
+ body.zone_selected = pick(GLOB.all_body_zones)
+
+/datum/corpse_damage/cause_of_death/melee_weapon/proc/get_weapon(mob/living/carbon/human/body)
+ return new weapon(null)
+
+/datum/corpse_damage/cause_of_death/melee_weapon/esword
+ weapon = /obj/item/melee/energy/sword
+ cause_of_death = "when I was attacked by a filthy traitor!"
+
+/datum/corpse_damage/cause_of_death/melee_weapon/esword/get_weapon(mob/living/carbon/human/body)
+ . = ..()
+
+ var/obj/item/melee/energy/sword/esword = .
+
+ esword.attack_self() //need to activate it
+
+/datum/corpse_damage/cause_of_death/melee_weapon/changeling
+ weapon = /obj/item/melee/arm_blade
+ cause_of_death = "when I was attacked by a terrifying changeling!"
+
+/datum/corpse_damage/cause_of_death/melee_weapon/toolbox
+ cause_of_death = "when some worthless assistant toolboxed me!"
+ weapon = /obj/item/storage/toolbox
+
+/datum/corpse_damage/cause_of_death/melee_weapon/heretic
+ cause_of_death = "when a flipping heretic attacked me!"
+
+/datum/corpse_damage/cause_of_death/melee_weapon/heretic/get_weapon(mob/living/carbon/human/body)
+ var/obj/item/melee/sickly_blade/blade = pick(subtypesof(/obj/item/melee/sickly_blade)) //pick a random blade, can be a bunch of fun stuff
+ return new blade (null)
diff --git a/code/modules/lost_crew/damages/poisoned.dm b/code/modules/lost_crew/damages/poisoned.dm
new file mode 100644
index 0000000000000..d00a9f73e1710
--- /dev/null
+++ b/code/modules/lost_crew/damages/poisoned.dm
@@ -0,0 +1,22 @@
+/// Simulates being killed by poison
+/datum/corpse_damage/cause_of_death/poison
+ /// The reagent used to kill
+ var/datum/reagent/poison
+
+ /// The minimum reagents added to the body
+ var/min_reagents = 30
+ /// The maximum reagents added to the body
+ var/max_reagents = 50
+ /// the amount of metabolisations to simulate per reagent added
+ var/metabolisations_per_unit = 1
+
+/datum/corpse_damage/cause_of_death/poison/apply_to_body(mob/living/carbon/human/body, severity, list/storage)
+ var/reagents_to_add = round(min_reagents + (max_reagents - min_reagents) * severity)
+
+ body.reagents.add_reagent(poison, reagents_to_add)
+ // we can just abuse deltatime to instantly simulate a long exposure
+ body.reagents.metabolize(body, 2 * metabolisations_per_unit * reagents_to_add, liverless = FALSE, dead = FALSE)
+
+/datum/corpse_damage/cause_of_death/poison/venom
+ cause_of_death = "when I got bit by a spider!"
+ poison = /datum/reagent/toxin/venom
diff --git a/code/modules/lost_crew/damages/post_mortem.dm b/code/modules/lost_crew/damages/post_mortem.dm
new file mode 100644
index 0000000000000..5eeaabc3302c8
--- /dev/null
+++ b/code/modules/lost_crew/damages/post_mortem.dm
@@ -0,0 +1,49 @@
+/// Damn space vultures man! At least they dont go for the brain
+/datum/corpse_damage/post_mortem/organ_loss
+ damage_type = CORPSE_DAMAGE_ORGAN_LOSS
+
+ /// Chance that the organ is stored and delivered with the body
+ var/organ_save_chance = 20
+ /// Minimum organs we can lose
+ var/min_organs = 2
+ /// Maximum organs we can lose
+ var/max_organs = 8
+
+/datum/corpse_damage/post_mortem/organ_loss/apply_to_body(mob/living/carbon/human/body, severity, list/saved_movables, list/datum/callback/on_revive_and_player_occupancy)
+ var/organs_to_take = round(min_organs + (max_organs - min_organs) * severity)
+ var/list/organs_we_can_take = body.organs - body.get_organ_slot(ORGAN_SLOT_BRAIN)
+
+ if (!length(organs_we_can_take))
+ return
+ for(var/i in 1 to organs_to_take)
+ var/obj/organ = pick(organs_we_can_take)
+ if(prob(organ_save_chance) && saved_movables) //if lucky, we can save the organ and have it be delivered with the body
+ organ.moveToNullspace()
+ saved_movables += organ
+ else
+ qdel(organ)
+
+/// Damn space vultures man! At least they dont go for the chest or head, or they do but we don't get to see those bodies :O
+/datum/corpse_damage/post_mortem/limb_loss
+ damage_type = CORPSE_DAMAGE_LIMB_LOSS
+
+ /// Chance that the limb is stored and delivered with the body
+ var/limb_save_chance = 20
+ /// Min limbs we can lose
+ var/min_limbs = 1
+ /// Max limbs we can lose
+ var/max_limbs = 4
+
+/datum/corpse_damage/post_mortem/limb_loss/apply_to_body(mob/living/carbon/human/body, severity, list/saved_movables, list/datum/callback/on_revive_and_player_occupancy)
+ var/limbs_to_take = round(min_limbs + (max_limbs - min_limbs) * severity)
+ var/list/limbs_we_can_take = body.bodyparts - body.get_bodypart(BODY_ZONE_HEAD) - body.get_bodypart(BODY_ZONE_CHEST)
+
+ if(!limbs_we_can_take.len)
+ return
+ for(var/i in 1 to limbs_to_take)
+ var/obj/limb = pick(limbs_we_can_take)
+ if(prob(limb_save_chance) && saved_movables)
+ limb.moveToNullspace()
+ saved_movables += limb
+ else
+ qdel(limb)
diff --git a/code/modules/lost_crew/damages/projectile.dm b/code/modules/lost_crew/damages/projectile.dm
new file mode 100644
index 0000000000000..121304ac9b5c7
--- /dev/null
+++ b/code/modules/lost_crew/damages/projectile.dm
@@ -0,0 +1,25 @@
+/// Simulates being shot by a projectile
+/datum/corpse_damage/cause_of_death/projectile
+ /// The projectile to simulate shooting
+ var/obj/projectile/projectile
+ /// The minimal projectile hits
+ var/min_hits = 6
+ /// The maximum projectile hits
+ var/max_hits = 12
+
+/datum/corpse_damage/cause_of_death/projectile/apply_to_body(mob/living/carbon/human/body, severity, list/storage)
+ projectile = new projectile()
+
+ var/hits = ((max_hits - min_hits) * severity + min_hits)
+
+ for(var/i in 1 to hits)
+ body.bullet_act(projectile, def_zone = pick(GLOB.all_body_zones), piercing_hit = TRUE)
+
+/datum/corpse_damage/cause_of_death/projectile/laser
+ projectile = /obj/projectile/beam/laser
+ cause_of_death = "when I got shot with lasers!"
+
+/datum/corpse_damage/cause_of_death/projectile/bullet
+ projectile = /obj/projectile/bullet/c45
+ cause_of_death = "when I got shot with bullets!"
+
diff --git a/code/modules/lost_crew/lost_crew_manager.dm b/code/modules/lost_crew/lost_crew_manager.dm
new file mode 100644
index 0000000000000..a89302627318b
--- /dev/null
+++ b/code/modules/lost_crew/lost_crew_manager.dm
@@ -0,0 +1,137 @@
+/// Manager for the lost crew bodies, for spawning and granting rewards
+GLOBAL_DATUM_INIT(lost_crew_manager, /datum/lost_crew_manager, new)
+
+/// Handles procs and timers for the lost crew bodies
+/datum/lost_crew_manager
+ /// How many credits we reward the medical budget on a succesful revive
+ var/credits_on_succes = /datum/supply_pack/medical/lost_crew::cost + CARGO_CRATE_VALUE * 2
+ /// How long after succesful revival we check to see if theyre still alive, and give rewards
+ var/succes_check_time = 3 MINUTES
+ /// How much the revived crew start with on their cards
+ var/starting_funds = 100
+
+/**
+ * Creates a body with random background and injuries
+ *
+ * Arguments:
+ * * revivable - Whether or not we can be revived to grand a ghost controle
+ * * container - Humans really dont like not having a loc, so please either give the container where you want to spawn it or a turf
+ * * forced_class - To force a specific damage class for some specific lore reason
+ * * recovered_items - Items recovered, such as some organs, dropped directly with the body
+ * * protected_items - Items that can only be recovered by the revived player
+ * * body_data - Debug data we can use to get a readout of what has been done
+ */
+/datum/lost_crew_manager/proc/create_lost_crew(revivable = TRUE, datum/corpse_damage_class/forced_class, list/recovered_items, list/protected_items, list/body_data = list())
+ var/mob/living/carbon/human/new_body = new()
+ new_body.death()
+
+ var/static/list/scenarios = list()
+ if(!scenarios.len)
+ var/list/types = subtypesof(/datum/corpse_damage_class)
+ for(var/datum/corpse_damage_class/scenario as anything in types)
+ scenarios[scenario] = initial(scenario.weight)
+
+ var/list/datum/callback/on_revive_and_player_occupancy = list()
+
+ var/datum/corpse_damage_class/scenario = forced_class || pick_weight(scenarios)
+ scenario = new scenario ()
+
+ scenario.apply_character(new_body, protected_items, recovered_items, on_revive_and_player_occupancy, body_data)
+ scenario.apply_injuries(new_body, recovered_items, on_revive_and_player_occupancy, body_data)
+ scenario.death_lore += "I should get a formalized assignment!"
+
+ . = new_body
+ // so bodies can also be used for runes, morgue, etc
+ if(!revivable)
+ return
+
+ //it's not necessary since we dont spawn the body until we open the bodybag, but why not be nice for once
+ new_body.reagents.add_reagent(/datum/reagent/toxin/formaldehyde, 5)
+
+ if(!recovered_items)
+ return
+
+ var/obj/item/paper/paper = new()
+ recovered_items += paper
+
+ if(!HAS_TRAIT(new_body, TRAIT_HUSK))
+ paper.name = "DO NOT REMOVE BRAIN"
+ paper.add_raw_text("Body swapping is not covered by medical insurance for unhusked bodies. Chemical brain explosives have been administered to enforce stipend.")
+ var/obj/item/organ/brain/boombrain = new_body.get_organ_by_type(/obj/item/organ/brain)
+ //I swear to fuck I will explode you. you're not clever
+ //everyone thought of this, but I am the fool for having any faith
+ //in people actually wanting to play the job in an interesting manner
+ //instead of just taking the easiest way out and learning nothing
+ //(no one abused it yet but I am already getting pinged by people who think they've broken the system when really I just expected better of them)
+ boombrain.AddElement(/datum/element/dangerous_organ_removal)
+ else
+ paper.name = "BODYSWAPPING PERMITTED"
+ paper.add_raw_text("Body swapping is covered by medical insurance in case of husking and a lack of skill in the practictioner.")
+
+ var/obj/item/organ/brain/hersens = new_body.get_organ_by_type(/obj/item/organ/brain)
+ hersens.AddComponent(
+ /datum/component/ghostrole_on_revive, \
+ /* refuse_revival_if_failed = */ TRUE, \
+ /*on_revival = */ CALLBACK(src, PROC_REF(on_succesful_revive), hersens, scenario.death_lore, on_revive_and_player_occupancy) \
+ )
+
+/// Set a timer for awarding succes and drop some awesome deathlore
+/datum/lost_crew_manager/proc/on_succesful_revive(obj/item/organ/brain/brain, list/death_lore, list/datum/callback/on_revive_and_player_occupancy)
+ var/mob/living/carbon/human/owner = brain.owner
+
+ owner.mind.add_antag_datum(/datum/antagonist/recovered_crew) //for tracking mostly
+
+ var/datum/bank_account/bank_account = new(owner.real_name, owner.mind.assigned_role, owner.dna.species.payday_modifier)
+ bank_account.adjust_money(starting_funds, "[starting_funds]cr given to [owner.name] as starting fund.")
+ owner.account_id = bank_account.account_id
+ bank_account.replaceable = FALSE
+
+ owner.add_mob_memory(/datum/memory/key/account, remembered_id = owner.account_id)
+
+ death_lore += "My account number was [owner.account_id]."
+
+ brain.RemoveElement(/datum/element/dangerous_organ_removal)
+
+ // Drop the sick ass death lore and give them an indicator of who they were and what they can do
+ for(var/i in 1 to death_lore.len)
+ addtimer(CALLBACK(src, GLOBAL_PROC_REF(to_chat), owner, span_boldnotice(death_lore[i])), 10 SECONDS + 2 SECONDS * i)
+
+ addtimer(CALLBACK(src, PROC_REF(award_succes), owner.mind, death_lore), succes_check_time)
+
+ // Run any callbacks our characters or damages may have placed for some effects for when the player is revived
+ for(var/datum/callback/callback as anything in on_revive_and_player_occupancy)
+ callback.Invoke()
+
+/// Give medbay a happy announcement and put some money into their budget
+/datum/lost_crew_manager/proc/award_succes(datum/mind/revived_mind, list/death_lore)
+ var/obj/item/radio/headset/radio = new /obj/item/radio/headset/silicon/ai(revived_mind.current) //radio cant be in nullspace or brit shakes
+ radio.set_frequency(FREQ_MEDICAL)
+ radio.name = "Medical Announcer"
+
+ // i am incredibly disappointed in you
+ if(revived_mind.current.stat == DEAD)
+ radio.talk_into(radio, "Sensors indicate lifesigns of [revived_mind.name] have seized. Please inform their family of your failure.", RADIO_CHANNEL_MEDICAL)
+ return
+
+ // You are a credit to society
+ radio.talk_into(radio, "Sensors indicate continued survival of [revived_mind.name]. Well done, [credits_on_succes]cr has been transferred to the medical budget.", RADIO_CHANNEL_MEDICAL)
+
+ var/datum/bank_account/medical_budget = SSeconomy.get_dep_account(ACCOUNT_MED)
+ medical_budget.adjust_money(credits_on_succes)
+ qdel(radio)
+
+/// A box for recovered items that can only be opened by the new crewmember
+/obj/item/storage/lockbox/mind
+ name = "mind lockbox"
+ desc = "A locked box, openable only by one mind."
+
+ /// The mind needed to unlock the box
+ var/datum/mind/mind
+
+/obj/item/storage/lockbox/mind/attack_self(mob/user, modifiers)
+ . = ..()
+
+ if(user.mind == mind)
+ atom_storage.locked = STORAGE_NOT_LOCKED
+ balloon_alert(user, atom_storage.locked ? "locked" : "unlocked")
+ update_appearance()
diff --git a/code/modules/lost_crew/recovered_crew.dm b/code/modules/lost_crew/recovered_crew.dm
new file mode 100644
index 0000000000000..65c6a3715fb67
--- /dev/null
+++ b/code/modules/lost_crew/recovered_crew.dm
@@ -0,0 +1,9 @@
+/// Revived crew ready to serve once more! Only here for tracking/admin reasons, otherwise hidden
+/datum/antagonist/recovered_crew
+ name = "\improper Recovered Crew"
+ show_in_antagpanel = TRUE
+ job_rank = ROLE_RECOVERED_CREW
+ show_name_in_check_antagonists = TRUE
+ show_to_ghosts = FALSE
+ silent = TRUE
+ block_midrounds = FALSE
diff --git a/code/modules/lost_crew/scenarios.dm b/code/modules/lost_crew/scenarios.dm
new file mode 100644
index 0000000000000..148d1f8d232f9
--- /dev/null
+++ b/code/modules/lost_crew/scenarios.dm
@@ -0,0 +1,58 @@
+/// Default scenario, with normal species, assignments and damages etc
+/datum/corpse_damage_class/station
+ area_lore = "I was working in a space station"
+ weight = 15
+ possible_character_types = list(/datum/corpse_character/mostly_roundstart = 1)
+ possible_character_assignments = list(
+ /datum/corpse_assignment/engineer = 1,
+ /datum/corpse_assignment/medical = 1,
+ /datum/corpse_assignment/security = 1,
+ /datum/corpse_assignment/science = 1,
+ /datum/corpse_assignment/cargo = 1,
+ /datum/corpse_assignment/civillian = 1,
+ )
+ possible_flavor_types = list(
+ /datum/corpse_flavor/quirk/prosthetic_limb = 1,
+ null = 9,
+ )
+
+ possible_causes_of_death = list(
+ /datum/corpse_damage/cause_of_death/melee_weapon/esword = 1,
+ /datum/corpse_damage/cause_of_death/melee_weapon/changeling = 1,
+ /datum/corpse_damage/cause_of_death/melee_weapon/toolbox = 1,
+ /datum/corpse_damage/cause_of_death/melee_weapon/heretic = 1,
+ /datum/corpse_damage/cause_of_death/explosion = 1,
+ /datum/corpse_damage/cause_of_death/plasmafire = 1,
+ /datum/corpse_damage/cause_of_death/projectile/bullet = 1,
+ /datum/corpse_damage/cause_of_death/projectile/laser = 1,
+ /datum/corpse_damage/cause_of_death/poison/venom = 1,
+ )
+
+ post_mortem_effects = list(
+ /datum/corpse_damage/post_mortem/limb_loss = 5,
+ /datum/corpse_damage/post_mortem/organ_loss = 5,
+ )
+
+ decays = list(
+ /datum/corpse_damage/post_mortem/organ_decay = 5,
+ /datum/corpse_damage/post_mortem/organ_decay/light = 1,
+ /datum/corpse_damage/post_mortem/organ_decay/heavy = 1,
+ )
+
+/// Less decay, spread burn and brute damage
+/datum/corpse_damage_class/station/spaced
+ weight = 2
+ possible_causes_of_death = list(/datum/corpse_damage/cause_of_death/spaced = 1)
+ decays = list(/datum/corpse_damage/post_mortem/organ_decay/light = 1)
+
+/// Human morgue body
+/datum/corpse_damage_class/station/morgue
+ weight = 0
+ possible_character_types = list(/datum/corpse_character/morgue = 1)
+ possible_character_assignments = list()
+ possible_flavor_types = list()
+
+/// Non-roundstart species
+/datum/corpse_damage_class/station/exotic_species
+ possible_character_types = list(/datum/corpse_character/pod = 1)
+ weight = 1
diff --git a/code/modules/manufactorio/machines/crafter.dm b/code/modules/manufactorio/machines/crafter.dm
index 302202838e53c..4b3f2dba1c4b9 100644
--- a/code/modules/manufactorio/machines/crafter.dm
+++ b/code/modules/manufactorio/machines/crafter.dm
@@ -1,7 +1,8 @@
/obj/machinery/power/manufacturing/crafter
name = "manufacturing assembling machine"
- desc = "Assembles (crafts) the set recipe until it runs out of resources. Inputs irrelevant to the recipe are ignored, and it may only hold exactly what the recipe needs."
+ desc = "Assembles (crafts) the set recipe until it runs out of resources. Only resources on it will be used."
icon_state = "crafter"
+ density = FALSE
circuit = /obj/item/circuitboard/machine/manucrafter
/// power used per process() spent crafting
var/power_cost = 5 KILO WATTS
@@ -40,37 +41,11 @@
. += "[amount > 1 ? ("[amount]" + " of") : "a"] [initial(ingredient.name)]"
-/obj/machinery/power/manufacturing/crafter/update_overlays()
- . = ..()
- . += generate_io_overlays(dir, COLOR_ORANGE)
- for(var/target_dir in GLOB.cardinals - dir)
- . += generate_io_overlays(target_dir, COLOR_MODERATE_BLUE)
-
-/obj/machinery/power/manufacturing/crafter/proc/valid_for_recipe(obj/item/checking)
- . = FALSE
- for(var/requirement_path in recipe.reqs)
- if(!ispath(checking.type, requirement_path) || recipe.blacklist.Find(checking.type))
- continue
- var/amount = recipe.reqs[requirement_path]
- if(count_path(requirement_path) >= amount)
- continue
- return TRUE
-
-/obj/machinery/power/manufacturing/crafter/proc/count_path(path)
- . = 0
- for(var/atom/content as anything in contents - circuit)
- if(!ispath(path, content.type))
- continue
- .++
-
/obj/machinery/power/manufacturing/crafter/receive_resource(obj/receiving, atom/from, receive_dir)
- if(isnull(recipe) || !isitem(receiving) || surplus() < power_cost)
- return MANUFACTURING_FAIL
- if(receive_dir == dir || !valid_for_recipe(receiving))
- return MANUFACTURING_FAIL
- if(isstack(receiving) && count_path(receiving.type) && !may_merge_in_contents_and_do_so(receiving))
+ var/turf/machine_turf = get_turf(src)
+ if(length(machine_turf.contents) >= MANUFACTURING_TURF_LAG_LIMIT)
return MANUFACTURING_FAIL_FULL
- receiving.Move(src, get_dir(receiving, src))
+ receiving.Move(machine_turf, receive_dir)
START_PROCESSING(SSmanufacturing, src)
return MANUFACTURING_SUCCESS
@@ -87,9 +62,6 @@
var/result = tgui_input_list(usr, "Recipe", "Select Recipe", (cooking ? GLOB.cooking_recipes : GLOB.crafting_recipes) - unavailable)
if(isnull(result) || result == recipe || !user.can_perform_action(src))
return ITEM_INTERACT_FAILURE
- var/dump_target = get_step(src, get_dir(src, user))
- for(var/atom/movable/thing as anything in contents - circuit)
- thing.Move(dump_target)
recipe = result
balloon_alert(user, "set")
return ITEM_INTERACT_SUCCESS
diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm b/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm
index c49b5c1399625..172c0e2f9e5cb 100644
--- a/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm
+++ b/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm
@@ -29,13 +29,13 @@
/obj/structure/closet/crate/secure/freezer/commsagent/PopulateContents()
. = ..() //Contains a variety of less exotic tongues (And tongue accessories) for the comms agent to mess with.
- new /obj/item/organ/internal/tongue(src)
- new /obj/item/organ/internal/tongue/lizard(src)
- new /obj/item/organ/internal/tongue/fly(src)
- new /obj/item/organ/internal/tongue/zombie(src)
- new /obj/item/organ/internal/tongue/bone(src)
- new /obj/item/organ/internal/tongue/robot(src) //DANGER! CRYSTAL HYPERSTRUCTURE-
- new /obj/item/organ/internal/tongue/ethereal(src)
+ new /obj/item/organ/tongue(src)
+ new /obj/item/organ/tongue/lizard(src)
+ new /obj/item/organ/tongue/fly(src)
+ new /obj/item/organ/tongue/zombie(src)
+ new /obj/item/organ/tongue/bone(src)
+ new /obj/item/organ/tongue/robot(src) //DANGER! CRYSTAL HYPERSTRUCTURE-
+ new /obj/item/organ/tongue/ethereal(src)
new /obj/item/autosurgeon/syndicate/commsagent(src)
new /obj/item/book/granter/sign_language(src)
new /obj/item/clothing/gloves/radio(src)
diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm
index 7fda1df5951f0..6baaf8e566070 100644
--- a/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm
+++ b/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm
@@ -57,7 +57,7 @@
qdel(sight_blocker)
return ..()
-/obj/structure/necropolis_gate/singularity_pull()
+/obj/structure/necropolis_gate/singularity_pull(atom/singularity, current_size)
return 0
/obj/structure/necropolis_gate/CanAllowThrough(atom/movable/mover, border_dir)
@@ -88,7 +88,7 @@
opacity = TRUE
anchored = TRUE
-/obj/structure/opacity_blocker/singularity_pull()
+/obj/structure/opacity_blocker/singularity_pull(atom/singularity, current_size)
return FALSE
//ATTACK HAND IGNORING PARENT RETURN VALUE
@@ -242,7 +242,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate)
AddComponent(/datum/component/seethrough, SEE_THROUGH_MAP_DEFAULT_TWO_TALL)
-/obj/structure/necropolis_arch/singularity_pull()
+/obj/structure/necropolis_arch/singularity_pull(atom/singularity, current_size)
return 0
//stone tiles for boss arenas
@@ -266,7 +266,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate)
give_turf_traits = string_list(list(TRAIT_LAVA_STOPPED, TRAIT_CHASM_STOPPED, TRAIT_IMMERSE_STOPPED))
AddElement(/datum/element/give_turf_traits, give_turf_traits)
-/obj/structure/stone_tile/singularity_pull()
+/obj/structure/stone_tile/singularity_pull(atom/singularity, current_size)
return
/obj/structure/stone_tile/block
diff --git a/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm b/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm
index 8be91920719c1..9a5d3a3db869e 100644
--- a/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm
+++ b/code/modules/mapfluff/ruins/spaceruin_code/TheDerelict.dm
@@ -162,12 +162,12 @@
use_power = NO_POWER_USE
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
id_tag = "derelictvault"
+ has_access_panel = FALSE
-///Overrides screwdriver attack to prevent all deconstruction and hacking.
-/obj/machinery/door/airlock/vault/derelict/attackby(obj/item/C, mob/user, params)
- if(C.tool_behaviour == TOOL_SCREWDRIVER)
- return
- ..()
+///Overrides screwdriver act to prevent all deconstruction and hacking. Override for extra tuff fluff
+/obj/machinery/door/airlock/vault/derelict/screwdriver_act(mob/living/user, obj/item/tool)
+ to_chat(user, span_danger("The robust make of [src] makes it impossible to access the panel in any way!"))
+ return ITEM_INTERACT_SUCCESS
/obj/structure/fluff/oldturret
name = "broken turret"
diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hauntedtradingpost.dm b/code/modules/mapfluff/ruins/spaceruin_code/hauntedtradingpost.dm
index 04404dc630872..39458ac942964 100644
--- a/code/modules/mapfluff/ruins/spaceruin_code/hauntedtradingpost.dm
+++ b/code/modules/mapfluff/ruins/spaceruin_code/hauntedtradingpost.dm
@@ -224,7 +224,7 @@
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
icon = 'icons/effects/effects.dmi'
icon_state = "empdisable"
- //trap wont damage mobs in its faction
+ //trap won't damage mobs in its faction. set this to null to make it attack everyone
faction = list(ROLE_SYNDICATE)
invisibility = INVISIBILITY_ABSTRACT
plane = ABOVE_GAME_PLANE
@@ -269,35 +269,29 @@
if(donk_ai_slave)
SSqueuelinks.add_to_queue(src, SELFDESTRUCT_QUEUE)
-/obj/effect/overloader_trap/proc/check_faction(mob/target)
- for(var/faction1 in faction)
- if(faction1 in target.faction)
- return TRUE
- return FALSE
-
-/obj/effect/overloader_trap/HasProximity(mob/living)
+/obj/effect/overloader_trap/HasProximity(mob/living/target as mob)
if(!locate(host_machine) in loc) //muh machine's gone, delete myself because im disarmed
qdel(src)
return
+ if(!isliving(target))
+ return
if(!COOLDOWN_FINISHED(src, trigger_cooldown)) //do nothing if we're on cooldown
return
if(uses_remaining == 0) //deletes trap if it triggers when it has no uses left. should only happen if var edited but lets just be safe
qdel(src)
return
- if (!isliving(living)) //ensure the guy triggering us is alive
- return
- if (living.stat && check_faction(living)) //and make sure it ain't someone on our team
+ if (target.stat) //ensure the guy triggering us is alive
return
- COOLDOWN_START(src, trigger_cooldown, 4 SECONDS)
- trap_alerted()
+ if (!faction_check_atom(target)) //and make sure it ain't someone on our team
+ COOLDOWN_START(src, trigger_cooldown, 4 SECONDS)
+ trap_alerted()
/obj/effect/overloader_trap/proc/trap_alerted()
- if(host_machine in loc)
+ if(host_machine in loc) //if someone breaks or moves the machine before the trap goes off, this should fail to do anything
visible_message(span_boldwarning("Sparks fly from [host_machine] as it shakes vigorously!"))
do_sparks(number = 3, source = host_machine)
host_machine.Shake(2, 1, trigger_delay)
addtimer(CALLBACK(src, PROC_REF(trap_effect)), trigger_delay)
- //if someone breaks or moves the machine before the trap goes off, this should fail to do anything
/obj/effect/overloader_trap/proc/trap_effect()
for(var/mob/living/living_mob in range(shock_range, src))
diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm
index 0e77140422525..157cfbb9e16b6 100644
--- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm
+++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm
@@ -589,9 +589,9 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999))
suit = /obj/item/clothing/suit/toggle/labcoat
id_trim = /datum/id_trim/away/hilbert
-/datum/outfit/doctorhilbert/pre_equip(mob/living/carbon/human/hilbert, visualsOnly)
+/datum/outfit/doctorhilbert/pre_equip(mob/living/carbon/human/hilbert, visuals_only)
. = ..()
- if(!visualsOnly)
+ if(!visuals_only)
hilbert.gender = MALE
hilbert.update_body()
@@ -708,6 +708,9 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999))
/obj/machinery/porta_turret/syndicate/teleport
name = "displacement turret"
desc = "A ballistic machine gun auto-turret that fires bluespace bullets."
- lethal_projectile = /obj/projectile/magic/teleport
- stun_projectile = /obj/projectile/magic/teleport
+ lethal_projectile = /obj/projectile/magic/teleport/bluespace
+ stun_projectile = /obj/projectile/magic/teleport/bluespace
faction = list(FACTION_TURRET)
+
+/obj/projectile/magic/teleport/bluespace
+ antimagic_flags = NONE
diff --git a/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm b/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm
index a91d033f1ee7b..d40d9178f3a85 100644
--- a/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm
+++ b/code/modules/mapfluff/ruins/spaceruin_code/meateor.dm
@@ -73,27 +73,27 @@
var/stored_organ
/// Types of organ we can spawn
var/static/list/allowed_organs = list(
- /obj/item/organ/internal/heart/gland/egg = 7,
- /obj/item/organ/internal/heart/gland/plasma = 7,
- /obj/item/organ/internal/alien/plasmavessel = 5,
- /obj/item/organ/internal/heart/gland/chem = 5,
- /obj/item/organ/internal/heart/gland/mindshock = 5,
- /obj/item/organ/internal/heart/gland/spiderman = 5,
- /obj/item/organ/internal/heart/gland/transform = 5,
- /obj/item/organ/internal/heart/gland/slime = 4,
- /obj/item/organ/internal/heart/gland/trauma = 4,
- /obj/item/organ/internal/heart/carp = 3,
- /obj/item/organ/internal/heart/rat = 3,
- /obj/item/organ/internal/heart/gland/electric = 3,
- /obj/item/organ/internal/monster_core/brimdust_sac = 3,
- /obj/item/organ/internal/monster_core/regenerative_core = 3,
- /obj/item/organ/internal/monster_core/rush_gland = 3,
- /obj/item/organ/internal/tongue/carp = 3,
- /obj/item/organ/internal/alien/acid = 2,
- /obj/item/organ/internal/alien/resinspinner = 2,
- /obj/item/organ/internal/eyes/night_vision/goliath = 2,
- /obj/item/organ/internal/eyes/night_vision/rat = 2,
- /obj/item/organ/internal/heart/gland/ventcrawling = 1,
+ /obj/item/organ/heart/gland/egg = 7,
+ /obj/item/organ/heart/gland/plasma = 7,
+ /obj/item/organ/alien/plasmavessel = 5,
+ /obj/item/organ/heart/gland/chem = 5,
+ /obj/item/organ/heart/gland/mindshock = 5,
+ /obj/item/organ/heart/gland/spiderman = 5,
+ /obj/item/organ/heart/gland/transform = 5,
+ /obj/item/organ/heart/gland/slime = 4,
+ /obj/item/organ/heart/gland/trauma = 4,
+ /obj/item/organ/heart/carp = 3,
+ /obj/item/organ/heart/rat = 3,
+ /obj/item/organ/heart/gland/electric = 3,
+ /obj/item/organ/monster_core/brimdust_sac = 3,
+ /obj/item/organ/monster_core/regenerative_core = 3,
+ /obj/item/organ/monster_core/rush_gland = 3,
+ /obj/item/organ/tongue/carp = 3,
+ /obj/item/organ/alien/acid = 2,
+ /obj/item/organ/alien/resinspinner = 2,
+ /obj/item/organ/eyes/night_vision/goliath = 2,
+ /obj/item/organ/eyes/night_vision/rat = 2,
+ /obj/item/organ/heart/gland/ventcrawling = 1,
)
/obj/structure/meateor_fluff/flesh_pod/Initialize(mapload)
diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm
index 55b802cc26c1d..e5f53c2b02dd5 100644
--- a/code/modules/mapping/mapping_helpers.dm
+++ b/code/modules/mapping/mapping_helpers.dm
@@ -874,11 +874,8 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_atoms_ontop)
var/admin_spawned
///number of bodies to spawn
var/bodycount = 3
- /// These species IDs will be barred from spawning if morgue_cadaver_disable_nonhumans is disabled (In the future, we can also dehardcode this)
- var/list/blacklisted_from_rng_placement = list(
- SPECIES_ETHEREAL, // they revive on death which is bad juju
- SPECIES_HUMAN, // already have a 50% chance of being selected
- )
+ /// Corpse type we spawn thats always human
+ var/datum/corpse_damage_class/morgue_body_class = /datum/corpse_damage_class/station/morgue
/obj/effect/mapping_helpers/dead_body_placer/Initialize(mapload)
. = ..()
@@ -906,57 +903,16 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_atoms_ontop)
var/reuse_trays = (numtrays < bodycount) //are we going to spawn more trays than bodies?
- var/use_species = !(CONFIG_GET(flag/morgue_cadaver_disable_nonhumans))
- var/species_probability = CONFIG_GET(number/morgue_cadaver_other_species_probability)
- var/override_species = CONFIG_GET(string/morgue_cadaver_override_species)
- var/list/usable_races
- if(use_species)
- var/list/temp_list = get_selectable_species()
- usable_races = temp_list.Copy()
- LAZYREMOVE(usable_races, blacklisted_from_rng_placement)
- if(!LAZYLEN(usable_races))
- notice("morgue_cadaver_disable_nonhumans. There are no valid roundstart nonhuman races enabled. Defaulting to humans only!")
- if(override_species)
- warning("morgue_cadaver_override_species BEING OVERRIDEN since morgue_cadaver_disable_nonhumans is disabled.")
- else if(override_species)
- LAZYADD(usable_races, override_species)
-
- var/guaranteed_human_spawned = FALSE
for (var/i in 1 to bodycount)
var/obj/structure/bodycontainer/morgue/morgue_tray = reuse_trays ? pick(trays) : pick_n_take(trays)
var/obj/structure/closet/body_bag/body_bag = new(morgue_tray.loc)
- var/mob/living/carbon/human/new_human = new(morgue_tray.loc)
-
- var/species_to_pick
-
- if(guaranteed_human_spawned && use_species)
- if(LAZYLEN(usable_races))
- if(!isnum(species_probability))
- species_probability = 50
- stack_trace("WARNING: morgue_cadaver_other_species_probability CONFIG SET TO 0% WHEN SPAWNING. DEFAULTING TO [species_probability]%.")
- if(prob(species_probability))
- species_to_pick = pick(usable_races)
- var/datum/species/new_human_species = GLOB.species_list[species_to_pick]
- if(new_human_species)
- new_human.set_species(new_human_species)
- new_human.fully_replace_character_name(new_human.real_name, new_human.generate_random_mob_name())
- else
- stack_trace("failed to spawn cadaver with species ID [species_to_pick]") //if it's invalid they'll just be a human, so no need to worry too much aside from yelling at the server owner lol.
- else
- guaranteed_human_spawned = TRUE
+ var/mob/living/carbon/human/new_human = GLOB.lost_crew_manager.create_lost_crew(revivable = FALSE, forced_class = morgue_body_class)
body_bag.insert(new_human, TRUE)
body_bag.close()
- body_bag.handle_tag("[new_human.real_name][species_to_pick ? " - [capitalize(species_to_pick)]" : " - Human"]")
+ body_bag.handle_tag("[new_human.real_name][new_human.dna?.species ? " - [new_human.dna.species.name]" : " - Human"]")
body_bag.forceMove(morgue_tray)
- new_human.death() //here lies the mans, rip in pepperoni.
- for (var/obj/item/organ/internal/part in new_human.organs) //randomly remove organs from each body, set those we keep to be in stasis
- if (prob(40))
- qdel(part)
- else
- part.organ_flags |= ORGAN_FROZEN
-
morgue_tray.update_appearance()
qdel(src)
diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm
index 4328ff3411008..bca2ace626062 100644
--- a/code/modules/mapping/reader.dm
+++ b/code/modules/mapping/reader.dm
@@ -130,9 +130,6 @@
newfriend.turf_blacklist = turf_blacklist?.Copy()
return newfriend
-//text trimming (both directions) helper macro
-#define TRIM_TEXT(text) (trim_reduced(text))
-
/**
* Helper and recommened way to load a map file
* - dmm_file: The path to the map file
@@ -842,7 +839,7 @@ GLOBAL_LIST_EMPTY(map_model_default)
if(member_string[length(member_string)] == "}")
variables_start = findtext(member_string, "{")
- var/path_text = TRIM_TEXT(copytext(member_string, 1, variables_start))
+ var/path_text = trimtext(copytext(member_string, 1, variables_start))
var/atom_def = text2path(path_text) //path definition, e.g /obj/foo/bar
if(!ispath(atom_def, /atom)) // Skip the item if the path does not exist. Fix your crap, mappers!
@@ -1014,7 +1011,7 @@ GLOBAL_LIST_EMPTY(map_model_default)
// check if this is a simple variable (as in list(var1, var2)) or an associative one (as in list(var1="foo",var2=7))
var/equal_position = findtext(text,"=",old_position, position)
- var/trim_left = TRIM_TEXT(copytext(text,old_position,(equal_position ? equal_position : position)))
+ var/trim_left = trimtext(copytext(text,old_position,(equal_position ? equal_position : position)))
var/left_constant = parse_constant(trim_left)
if(position)
old_position = position + length(text[position])
@@ -1024,7 +1021,7 @@ GLOBAL_LIST_EMPTY(map_model_default)
if(equal_position && !isnum(left_constant))
// Associative var, so do the association.
// Note that numbers cannot be keys - the RHS is dropped if so.
- var/trim_right = TRIM_TEXT(copytext(text, equal_position + length(text[equal_position]), position))
+ var/trim_right = trimtext(copytext(text, equal_position + length(text[equal_position]), position))
var/right_constant = parse_constant(trim_right)
.[left_constant] = right_constant
else // simple var
@@ -1081,5 +1078,4 @@ GLOBAL_LIST_EMPTY(map_model_default)
#undef MAP_DMM
#undef MAP_TGM
#undef MAP_UNKNOWN
-#undef TRIM_TEXT
#undef MAPLOADING_CHECK_TICK
diff --git a/code/modules/mapping/space_management/zlevel_manager.dm b/code/modules/mapping/space_management/zlevel_manager.dm
index b7664f09ff2d8..61f252edf2b17 100644
--- a/code/modules/mapping/space_management/zlevel_manager.dm
+++ b/code/modules/mapping/space_management/zlevel_manager.dm
@@ -37,7 +37,9 @@
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_NEW_Z, S)
return S
-/datum/controller/subsystem/mapping/proc/get_level(z)
- if (z_list && z >= 1 && z <= z_list.len)
+/// Returns the /datum/space_level associated with the given z level.
+/datum/controller/subsystem/mapping/proc/get_level(z) as /datum/space_level
+ RETURN_TYPE(/datum/space_level)
+ if(ISINRANGE(z, 1, length(z_list)))
return z_list[z]
CRASH("Unmanaged z-level [z]! maxz = [world.maxz], z_list.len = [z_list ? z_list.len : "null"]")
diff --git a/code/modules/meteors/meteor_types.dm b/code/modules/meteors/meteor_types.dm
index 36fdad25d842e..ba135081532da 100644
--- a/code/modules/meteors/meteor_types.dm
+++ b/code/modules/meteors/meteor_types.dm
@@ -379,7 +379,7 @@
hits = 2
heavy = TRUE
meteorsound = 'sound/effects/blob/blobattack.ogg'
- meteordrop = list(/obj/item/food/meat/slab/human, /obj/item/food/meat/slab/human/mutant, /obj/item/organ/internal/heart, /obj/item/organ/internal/lungs, /obj/item/organ/internal/tongue, /obj/item/organ/internal/appendix/)
+ meteordrop = list(/obj/item/food/meat/slab/human, /obj/item/food/meat/slab/human/mutant, /obj/item/organ/heart, /obj/item/organ/lungs, /obj/item/organ/tongue, /obj/item/organ/appendix/)
var/meteorgibs = /obj/effect/gibspawner/generic
threat = 2
signature = "culinary material"
@@ -391,7 +391,7 @@
meteordrop += pick(subtypesof(path))
for(var/path in meteordrop)
- if(path == /obj/item/organ/internal/tongue)
+ if(path == /obj/item/organ/tongue)
meteordrop -= path
meteordrop += pick(typesof(path))
return ..()
@@ -412,12 +412,12 @@
//Meaty Ore Xeno edition
/obj/effect/meteor/meaty/xeno
color = "#5EFF00"
- meteordrop = list(/obj/item/food/meat/slab/xeno, /obj/item/organ/internal/tongue/alien)
+ meteordrop = list(/obj/item/food/meat/slab/xeno, /obj/item/organ/tongue/alien)
meteorgibs = /obj/effect/gibspawner/xeno
signature = "exotic culinary material"
/obj/effect/meteor/meaty/xeno/Initialize(mapload)
- meteordrop += subtypesof(/obj/item/organ/internal/alien)
+ meteordrop += subtypesof(/obj/item/organ/alien)
return ..()
/obj/effect/meteor/meaty/xeno/ram_turf(turf/T)
diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm
index 315ddc5811004..1a83ad0f30330 100644
--- a/code/modules/mining/equipment/kinetic_crusher.dm
+++ b/code/modules/mining/equipment/kinetic_crusher.dm
@@ -122,10 +122,9 @@
new /obj/effect/temp_visual/kinetic_blast(get_turf(target))
var/backstabbed = FALSE
var/combined_damage = detonation_damage
- var/backstab_dir = get_dir(user, target)
var/def_check = target.getarmor(type = BOMB)
// Backstab bonus
- if((user.dir & backstab_dir) && (target.dir & backstab_dir) || boosted_mark)
+ if(check_behind(user, target) || boosted_mark)
backstabbed = TRUE
combined_damage += backstab_bonus
playsound(user, 'sound/items/weapons/kinetic_accel.ogg', 100, TRUE) //Seriously who spelled it wrong
@@ -524,6 +523,8 @@
pkc.projectile_icon = retool_projectile_icon
if(iscarbon(pkc.loc))
var/mob/living/carbon/holder = pkc.loc
+ holder.update_worn_back()
+ holder.update_suit_storage()
holder.update_held_items()
pkc.update_appearance()
@@ -533,6 +534,8 @@
pkc.projectile_icon = initial(pkc.projectile_icon)
if(iscarbon(pkc.loc))
var/mob/living/carbon/holder = pkc.loc
+ holder.update_worn_back()
+ holder.update_suit_storage()
holder.update_held_items()
pkc.update_appearance()
..()
diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm
index 85cb66ae8676c..06f8ec1828dd1 100644
--- a/code/modules/mining/equipment/mining_tools.dm
+++ b/code/modules/mining/equipment/mining_tools.dm
@@ -163,6 +163,13 @@
throwforce = 7
w_class = WEIGHT_CLASS_SMALL
+/obj/item/shovel/spade/cyborg
+ name = "cyborg spade"
+ icon = 'icons/obj/items_cyborg.dmi'
+ icon_state = "sili_shovel"
+ toolspeed = 0.6
+ worn_icon_state = null
+
/obj/item/shovel/serrated
name = "serrated bone shovel"
desc = "A wicked tool that cleaves through dirt just as easily as it does flesh. The design was styled after ancient lavaland tribal designs. \
diff --git a/code/modules/mining/equipment/monster_organs/brimdust_sac.dm b/code/modules/mining/equipment/monster_organs/brimdust_sac.dm
index a77e526a9d1f7..d58ecf4da425d 100644
--- a/code/modules/mining/equipment/monster_organs/brimdust_sac.dm
+++ b/code/modules/mining/equipment/monster_organs/brimdust_sac.dm
@@ -11,7 +11,7 @@
* If implanted, you can shake off a cloud of brimdust to give this buff to people around you.area
* It will also automatically grant you one stack every 30 seconds if you are on lavaland.
*/
-/obj/item/organ/internal/monster_core/brimdust_sac
+/obj/item/organ/monster_core/brimdust_sac
name = "brimdust sac"
desc = "A strange organ from a brimdemon. You can shake it out to coat yourself in explosive powder."
icon_state = "brim_sac"
@@ -24,16 +24,16 @@
/// You will gain a stack of the buff every x seconds
COOLDOWN_DECLARE(brimdust_auto_apply_cooldown)
-/obj/item/organ/internal/monster_core/brimdust_sac/Initialize(mapload)
+/obj/item/organ/monster_core/brimdust_sac/Initialize(mapload)
. = ..()
AddComponent(/datum/component/explodable, light_impact_range = 1)
-/obj/item/organ/internal/monster_core/brimdust_sac/apply_to(mob/living/target, mob/user)
+/obj/item/organ/monster_core/brimdust_sac/apply_to(mob/living/target, mob/user)
target.apply_status_effect(user_status, BRIMDUST_STACKS_ON_USE)
qdel(src)
// Every x seconds, if on lavaland, add one stack
-/obj/item/organ/internal/monster_core/brimdust_sac/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/monster_core/brimdust_sac/on_life(seconds_per_tick, times_fired)
. = ..()
if(!COOLDOWN_FINISHED(src, brimdust_auto_apply_cooldown))
return
@@ -43,7 +43,7 @@
owner.apply_status_effect(user_status, BRIMDUST_STACKS_ON_LIFE)
/// Make a cloud which applies brimdust to everyone nearby
-/obj/item/organ/internal/monster_core/brimdust_sac/on_triggered_internal()
+/obj/item/organ/monster_core/brimdust_sac/on_triggered_internal()
var/turf/origin_turf = get_turf(owner)
do_smoke(range = 2, holder = owner, location = origin_turf, smoke_type = /obj/effect/particle_effect/fluid/smoke/bad/brimdust)
diff --git a/code/modules/mining/equipment/monster_organs/monster_organ.dm b/code/modules/mining/equipment/monster_organs/monster_organ.dm
index cf6131fa92258..b6bd54a361eb5 100644
--- a/code/modules/mining/equipment/monster_organs/monster_organ.dm
+++ b/code/modules/mining/equipment/monster_organs/monster_organ.dm
@@ -11,7 +11,7 @@
/obj/item/mining_stabilizer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
if(!isorgan(interacting_with))
return NONE
- var/obj/item/organ/internal/monster_core/target_core = interacting_with
+ var/obj/item/organ/monster_core/target_core = interacting_with
if (!istype(target_core))
balloon_alert(user, "invalid target!")
return ITEM_INTERACT_BLOCKING
@@ -29,7 +29,7 @@
* Generalised behaviour is that they will decay and become useless unless provided with serum.
* These should usually do something both when used in-hand, or when implanted into someone.
*/
-/obj/item/organ/internal/monster_core
+/obj/item/organ/monster_core
name = "monster core"
desc = "All that remains of a monster. This abstract item should not spawn. \
It will rapidly decay into uselessness. but don't worry because it's already useless."
@@ -58,15 +58,32 @@
/// Status effect applied by this organ
var/datum/status_effect/user_status
-/obj/item/organ/internal/monster_core/Initialize(mapload)
+/obj/item/organ/monster_core/Initialize(mapload)
. = ..()
decay_timer = addtimer(CALLBACK(src, PROC_REF(go_inert)), time_to_decay, TIMER_STOPPABLE)
-/obj/item/organ/internal/monster_core/Destroy(force)
+/obj/item/organ/monster_core/examine(mob/user)
+ . = ..()
+ if(!decay_timer)
+ return
+ var/estimated_time_left = round(timeleft(decay_timer), 1 MINUTES)
+ switch(estimated_time_left)
+ if(4 MINUTES)
+ . += span_notice("It's fresh and still pulsating with the last vestiges of life.")
+ if(3 MINUTES)
+ . += span_notice("It still looks pretty fresh.")
+ if(2 MINUTES)
+ . += span_notice("It's not as fresh as could be.")
+ if(1 MINUTES)
+ . += span_notice("Signs of decay are starting to set in. It might not be good for much longer.")
+ if(0 SECONDS to 1 MINUTES)
+ . += span_warning("Signs of decay have set in, but it still looks alive. It's probably about to become unusable really quickly.")
+
+/obj/item/organ/monster_core/Destroy(force)
deltimer(decay_timer)
return ..()
-/obj/item/organ/internal/monster_core/mob_insert(mob/living/carbon/target_carbon, special = FALSE, movement_flags)
+/obj/item/organ/monster_core/mob_insert(mob/living/carbon/target_carbon, special = FALSE, movement_flags)
. = ..()
if (inert)
@@ -79,7 +96,7 @@
target_carbon.visible_message(span_notice("[src] stabilizes as it's inserted."))
return TRUE
-/obj/item/organ/internal/monster_core/mob_remove(mob/living/carbon/target_carbon, special, movement_flags)
+/obj/item/organ/monster_core/mob_remove(mob/living/carbon/target_carbon, special, movement_flags)
if (!inert && !special)
owner.visible_message(span_notice("[src] rapidly decays as it's removed."))
go_inert()
@@ -90,7 +107,7 @@
* Returns true if successful.
* * Implanted - If true, organ has just been inserted into someone.
*/
-/obj/item/organ/internal/monster_core/proc/preserve(implanted = FALSE)
+/obj/item/organ/monster_core/proc/preserve(implanted = FALSE)
if (inert)
return FALSE
deltimer(decay_timer)
@@ -101,7 +118,7 @@
/**
* Decays the organ, it is now useless.
*/
-/obj/item/organ/internal/monster_core/proc/go_inert()
+/obj/item/organ/monster_core/proc/go_inert()
if (inert)
return FALSE
inert = TRUE
@@ -111,7 +128,7 @@
update_appearance()
return TRUE
-/obj/item/organ/internal/monster_core/update_desc()
+/obj/item/organ/monster_core/update_desc()
if (inert)
desc = desc_inert ? desc_inert : initial(desc)
return ..()
@@ -121,7 +138,7 @@
desc = initial(desc)
return ..()
-/obj/item/organ/internal/monster_core/update_icon_state()
+/obj/item/organ/monster_core/update_icon_state()
if (inert)
icon_state = icon_state_inert ? icon_state_inert : initial(icon_state)
return ..()
@@ -131,14 +148,14 @@
icon_state = initial(icon_state)
return ..()
-/obj/item/organ/internal/monster_core/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
+/obj/item/organ/monster_core/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
if(!isliving(interacting_with))
return NONE
try_apply(interacting_with, user)
return ITEM_INTERACT_SUCCESS
-/obj/item/organ/internal/monster_core/attack_self(mob/user)
+/obj/item/organ/monster_core/attack_self(mob/user)
if (!user.can_perform_action(src, FORBID_TELEKINESIS_REACH|ALLOW_RESTING))
return
try_apply(user, user)
@@ -150,7 +167,7 @@
* * target - Person you are applying this to.
* * user - Person who is doing the applying.
*/
-/obj/item/organ/internal/monster_core/proc/try_apply(atom/target, mob/user)
+/obj/item/organ/monster_core/proc/try_apply(atom/target, mob/user)
if (!isliving(target))
balloon_alert(user, "invalid target!")
return
@@ -170,7 +187,7 @@
* * target - Person you are applying this to.
* * user - Person who is doing the applying.
*/
-/obj/item/organ/internal/monster_core/proc/apply_to(mob/living/target, mob/user)
+/obj/item/organ/monster_core/proc/apply_to(mob/living/target, mob/user)
if (user_status)
target.apply_status_effect(user_status)
qdel(src)
@@ -179,7 +196,7 @@
* Utility proc to find the associated monster organ action and trigger it.
* Call this instead of on_triggered_internal() if the action needs to trigger automatically, or the cooldown won't happen.
*/
-/obj/item/organ/internal/monster_core/proc/trigger_organ_action(trigger_flags)
+/obj/item/organ/monster_core/proc/trigger_organ_action(trigger_flags)
var/datum/action/cooldown/monster_core_action/action = locate() in actions
action?.Trigger(trigger_flags = trigger_flags)
@@ -187,7 +204,7 @@
* Called when activated while implanted inside someone.
* This could be via clicking the associated action button or through the above method.
*/
-/obj/item/organ/internal/monster_core/proc/on_triggered_internal()
+/obj/item/organ/monster_core/proc/on_triggered_internal()
SHOULD_CALL_PARENT(FALSE)
CRASH("Someone forgot to make their organ do something when you implant it.")
@@ -204,7 +221,7 @@
. = ..()
if (!target)
return
- var/obj/item/organ/internal/monster_core/organ = target
+ var/obj/item/organ/monster_core/organ = target
if (!istype(organ))
return
organ.on_triggered_internal()
diff --git a/code/modules/mining/equipment/monster_organs/regenerative_core.dm b/code/modules/mining/equipment/monster_organs/regenerative_core.dm
index 98758d5a369ce..e601ac89f8c59 100644
--- a/code/modules/mining/equipment/monster_organs/regenerative_core.dm
+++ b/code/modules/mining/equipment/monster_organs/regenerative_core.dm
@@ -2,7 +2,7 @@
* On use in hand, heals you over time and removes injury movement debuffs. Also makes you a bit sad.
* On use when implanted, fully heals. Automatically fully heals if you would enter crit.
*/
-/obj/item/organ/internal/monster_core/regenerative_core
+/obj/item/organ/monster_core/regenerative_core
name = "regenerative core"
desc = "All that remains of a hivelord. It can be used to help keep your body going, but it will rapidly decay into uselessness."
desc_preserved = "All that remains of a hivelord. It is preserved, allowing you to use it to heal completely without danger of decay."
@@ -12,30 +12,30 @@
icon_state = "hivelord_core"
icon_state_inert = "hivelord_core_decayed"
-/obj/item/organ/internal/monster_core/regenerative_core/preserve(implanted = FALSE)
+/obj/item/organ/monster_core/regenerative_core/preserve(implanted = FALSE)
if (implanted)
SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "implanted"))
else
SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "stabilizer"))
return ..()
-/obj/item/organ/internal/monster_core/regenerative_core/go_inert()
+/obj/item/organ/monster_core/regenerative_core/go_inert()
. = .. ()
if (!.)
return
SSblackbox.record_feedback("nested tally", "hivelord_core", 1, list("[type]", "inert"))
-/obj/item/organ/internal/monster_core/regenerative_core/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/monster_core/regenerative_core/on_life(seconds_per_tick, times_fired)
. = ..()
if (owner.health <= owner.crit_threshold)
trigger_organ_action(TRIGGER_FORCE_AVAILABLE)
-/obj/item/organ/internal/monster_core/regenerative_core/on_triggered_internal()
+/obj/item/organ/monster_core/regenerative_core/on_triggered_internal()
owner.revive(HEAL_ALL)
qdel(src)
/// Log applications and apply moodlet.
-/obj/item/organ/internal/monster_core/regenerative_core/apply_to(mob/living/target, mob/user)
+/obj/item/organ/monster_core/regenerative_core/apply_to(mob/living/target, mob/user)
target.add_mood_event(MOOD_CATEGORY_LEGION_CORE, /datum/mood_event/healsbadman)
if (target != user)
target.visible_message(span_notice("[user] forces [target] to apply [src]... Black tendrils entangle and reinforce [target.p_them()]!"))
@@ -46,7 +46,7 @@
return ..()
/// Different graphics/desc for the lavaland legion
-/obj/item/organ/internal/monster_core/regenerative_core/legion
+/obj/item/organ/monster_core/regenerative_core/legion
desc = "A strange rock that crackles with power. It can be used to heal completely, but it will rapidly decay into uselessness."
desc_preserved = "The core has been stabilized, allowing you to use it to heal completely without danger of decay."
desc_inert = "The core has decayed, and is completely useless."
diff --git a/code/modules/mining/equipment/monster_organs/rush_gland.dm b/code/modules/mining/equipment/monster_organs/rush_gland.dm
index f9cfa1b88f1c3..cf901269e904c 100644
--- a/code/modules/mining/equipment/monster_organs/rush_gland.dm
+++ b/code/modules/mining/equipment/monster_organs/rush_gland.dm
@@ -5,7 +5,7 @@
* On use in hand, makes you run really fast for 5 seconds and ignore injury movement decrease.
* On use when implanted, run for longer and ignore all negative movement. Automatically triggers if health is low (to escape).
*/
-/obj/item/organ/internal/monster_core/rush_gland
+/obj/item/organ/monster_core/rush_gland
name = "rush gland"
icon_state = "lobster_gland"
icon_state_preserved = "lobster_gland_stable"
@@ -16,23 +16,23 @@
user_status = /datum/status_effect/lobster_rush
actions_types = list(/datum/action/cooldown/monster_core_action/adrenal_boost)
-/obj/item/organ/internal/monster_core/rush_gland/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/monster_core/rush_gland/on_life(seconds_per_tick, times_fired)
. = ..()
if (owner.health <= HEALTH_DANGER_ZONE)
trigger_organ_action()
-/obj/item/organ/internal/monster_core/rush_gland/on_mob_insert(mob/living/carbon/organ_owner)
+/obj/item/organ/monster_core/rush_gland/on_mob_insert(mob/living/carbon/organ_owner)
. = ..()
RegisterSignal(organ_owner, COMSIG_GOLIATH_TENTACLED_GRABBED, PROC_REF(trigger_organ_action_on_sig))
-/obj/item/organ/internal/monster_core/rush_gland/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/monster_core/rush_gland/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
UnregisterSignal(organ_owner, COMSIG_GOLIATH_TENTACLED_GRABBED)
-/obj/item/organ/internal/monster_core/rush_gland/on_triggered_internal()
+/obj/item/organ/monster_core/rush_gland/on_triggered_internal()
owner.apply_status_effect(/datum/status_effect/lobster_rush/extended)
-/obj/item/organ/internal/monster_core/rush_gland/proc/trigger_organ_action_on_sig(datum/source)
+/obj/item/organ/monster_core/rush_gland/proc/trigger_organ_action_on_sig(datum/source)
SIGNAL_HANDLER
INVOKE_ASYNC(src, PROC_REF(trigger_organ_action))
diff --git a/code/modules/mining/equipment/resonator.dm b/code/modules/mining/equipment/resonator.dm
index 5019e023d3184..511ed0bb0bf09 100644
--- a/code/modules/mining/equipment/resonator.dm
+++ b/code/modules/mining/equipment/resonator.dm
@@ -11,6 +11,7 @@
w_class = WEIGHT_CLASS_NORMAL
force = 15
throwforce = 10
+ slot_flags = ITEM_SLOT_BELT
/// the mode of the resonator; has three modes: auto (1), manual (2), and matrix (3)
var/mode = RESONATOR_MODE_AUTO
diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm
index 1ef2f778bc54b..7092c8c0f7616 100644
--- a/code/modules/mining/fulton.dm
+++ b/code/modules/mining/fulton.dm
@@ -243,7 +243,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons)
/obj/effect/extraction_holder/singularity_act()
return
-/obj/effect/extraction_holder/singularity_pull()
+/obj/effect/extraction_holder/singularity_pull(atom/singularity, current_size)
return
/obj/item/extraction_pack/syndicate
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 3a1e88d5af13b..58b7b437d7c54 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -27,7 +27,7 @@
if(2)
new /obj/item/soulstone/anybody/mining(src)
if(3)
- new /obj/item/organ/internal/cyberimp/arm/shard/katana(src)
+ new /obj/item/organ/cyberimp/arm/shard/katana(src)
if(4)
new /obj/item/clothing/glasses/godeye(src)
if(5)
@@ -48,7 +48,7 @@
if(8)
new /obj/item/rod_of_asclepius(src)
if(9)
- new /obj/item/organ/internal/heart/cursed/wizard(src)
+ new /obj/item/organ/heart/cursed/wizard(src)
if(10)
new /obj/item/ship_in_a_bottle(src)
if(11)
@@ -154,7 +154,7 @@
var/list/choices = subtypesof(/obj/machinery/anomalous_crystal)
var/random_crystal = pick(choices)
new random_crystal(src)
- new /obj/item/organ/internal/vocal_cords/colossus(src)
+ new /obj/item/organ/vocal_cords/colossus(src)
/obj/structure/closet/crate/necropolis/colossus/crusher
name = "angelic colossus chest"
diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm
index 7acc0299f1018..fe338b35ccb93 100644
--- a/code/modules/mining/lavaland/tendril_loot.dm
+++ b/code/modules/mining/lavaland/tendril_loot.dm
@@ -453,7 +453,7 @@
// but regardless block all relayed moves, because no, you cannot move in the void.
return
-/obj/effect/immortality_talisman/singularity_pull()
+/obj/effect/immortality_talisman/singularity_pull(atom/singularity, current_size)
return
/obj/effect/immortality_talisman/void
@@ -552,7 +552,7 @@
to_chat(exposed_human, span_userdanger("A terrible pain travels down your back as your wings change shape!"))
else
to_chat(exposed_human, span_userdanger("A terrible pain travels down your back as wings burst out!"))
- var/obj/item/organ/external/wings/functional/wings = get_wing_choice(exposed_human, chest)
+ var/obj/item/organ/wings/functional/wings = get_wing_choice(exposed_human, chest)
wings = new wings()
wings.Insert(exposed_human)
playsound(exposed_human.loc, 'sound/items/poster/poster_ripped.ogg', 50, TRUE, -1)
@@ -565,7 +565,7 @@
return wing_types[1]
var/list/radial_wings = list()
var/list/name2type = list()
- for(var/obj/item/organ/external/wings/functional/possible_type as anything in wing_types)
+ for(var/obj/item/organ/wings/functional/possible_type as anything in wing_types)
var/datum/sprite_accessory/accessory = initial(possible_type.sprite_accessory_override) //get the type
accessory = SSaccessories.wings_list[initial(accessory.name)] //get the singleton instance
var/image/img = image(icon = accessory.icon, icon_state = "m_wingsopen_[accessory.icon_state]_BEHIND") //Process the HUD elements
@@ -927,7 +927,7 @@
name = "Scan Target"
desc = "Contact may or may not be close."
-/obj/item/organ/internal/cyberimp/arm/shard
+/obj/item/organ/cyberimp/arm/shard
name = "dark spoon shard"
desc = "An eerie metal shard surrounded by dark energies...of soup drinking. You probably don't think you should have been able to find this."
icon = 'icons/obj/mining_zones/artefacts.dmi'
@@ -937,7 +937,7 @@
extend_sound = 'sound/items/unsheath.ogg'
retract_sound = 'sound/items/sheath.ogg'
-/obj/item/organ/internal/cyberimp/arm/shard/attack_self(mob/user, modifiers)
+/obj/item/organ/cyberimp/arm/shard/attack_self(mob/user, modifiers)
. = ..()
to_chat(user, span_userdanger("The mass goes up your arm and goes inside it!"))
playsound(user, 'sound/effects/magic/demon_consume.ogg', 50, TRUE)
@@ -947,15 +947,15 @@
user.temporarilyRemoveItemFromInventory(src, TRUE)
Insert(user)
-/obj/item/organ/internal/cyberimp/arm/shard/screwdriver_act(mob/living/user, obj/item/screwtool)
+/obj/item/organ/cyberimp/arm/shard/screwdriver_act(mob/living/user, obj/item/screwtool)
return
-/obj/item/organ/internal/cyberimp/arm/shard/katana
+/obj/item/organ/cyberimp/arm/shard/katana
name = "dark shard"
desc = "An eerie metal shard surrounded by dark energies."
items_to_create = list(/obj/item/cursed_katana)
-/obj/item/organ/internal/cyberimp/arm/shard/katana/Retract()
+/obj/item/organ/cyberimp/arm/shard/katana/Retract()
var/obj/item/cursed_katana/katana = active_item
if(!katana || katana.shattered)
return FALSE
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index aaf127bf8b594..798ec58cd1e73 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -13,7 +13,7 @@
. = ..()
set_light(set_luminosity, set_cap)
-/obj/effect/light_emitter/singularity_pull()
+/obj/effect/light_emitter/singularity_pull(atom/singularity, current_size)
return
/obj/effect/light_emitter/singularity_act()
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 5567162d8bd78..74be453b2b1d1 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -263,20 +263,20 @@ Transfer_mind is there to check if mob is being deleted/not going to have a body
Works together with spawning an observer, noted above.
*/
-/mob/proc/ghostize(can_reenter_corpse = TRUE)
+/mob/proc/ghostize(can_reenter_corpse = TRUE, admin_ghost = FALSE)
if(!key)
return
if(key[1] == "@") // Skip aghosts.
return
- if(HAS_TRAIT(src, TRAIT_CORPSELOCKED))
+ if(HAS_TRAIT(src, TRAIT_CORPSELOCKED) && !admin_ghost)
if(can_reenter_corpse) //If you can re-enter the corpse you can't leave when corpselocked
return
if(ishuman(usr)) //following code only applies to those capable of having an ethereal heart, ie humans
var/mob/living/carbon/human/crystal_fella = usr
var/our_heart = crystal_fella.get_organ_slot(ORGAN_SLOT_HEART)
- if(istype(our_heart, /obj/item/organ/internal/heart/ethereal)) //so you got the heart?
- var/obj/item/organ/internal/heart/ethereal/ethereal_heart = our_heart
+ if(istype(our_heart, /obj/item/organ/heart/ethereal)) //so you got the heart?
+ var/obj/item/organ/heart/ethereal/ethereal_heart = our_heart
ethereal_heart.stop_crystalization_process(crystal_fella) //stops the crystallization process
stop_sound_channel(CHANNEL_HEARTBEAT) //Stop heartbeat sounds because You Are A Ghost Now
diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm
index c812905d58fec..28b5575108d29 100644
--- a/code/modules/mob/emote.dm
+++ b/code/modules/mob/emote.dm
@@ -150,10 +150,19 @@
message = "jumps!"
// Allows ghosts to jump
mob_type_ignore_stat_typecache = list(/mob/dead/observer)
+ affected_by_pitch = FALSE
/datum/emote/jump/run_emote(mob/user, params, type_override, intentional)
. = ..()
+ jump_animation(user)
+
+ if(!isliving(user))
+ return
+ for(var/obj/item/storage/box/squeeze_box in get_turf(user))
+ squeeze_box.flatten_box()
+
+/datum/emote/jump/proc/jump_animation(mob/user)
var/original_transform = user.transform
animate(user, transform = user.transform.Translate(0, 4), time = 0.1 SECONDS, flags = ANIMATION_PARALLEL)
animate(transform = original_transform, time = 0.1 SECONDS)
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 708d8bbdd0702..ee173795c1321 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -103,6 +103,13 @@
return I
return FALSE
+// List version of above proc
+// Returns ret_item, which is either the succesfully located item or null
+/mob/proc/is_holding_item_of_types(list/typepaths)
+ for(var/typepath in typepaths)
+ var/ret_item = is_holding_item_of_type(typepath)
+ return ret_item
+
//Checks if we're holding a tool that has given quality
//Returns the tool that has the best version of this quality
/mob/proc/is_holding_tool_quality(quality)
@@ -152,7 +159,7 @@
return FALSE
return !held_items[hand_index]
-/mob/proc/put_in_hand(obj/item/I, hand_index, forced = FALSE, ignore_anim = TRUE)
+/mob/proc/put_in_hand(obj/item/I, hand_index, forced = FALSE, ignore_anim = TRUE, visuals_only = FALSE)
if(hand_index == null || !held_items.len || (!forced && !can_put_in_hand(I, hand_index)))
return FALSE
@@ -165,7 +172,7 @@
SET_PLANE_EXPLICIT(I, ABOVE_HUD_PLANE, src)
if(I.pulledby)
I.pulledby.stop_pulling()
- if(!I.on_equipped(src, ITEM_SLOT_HANDS))
+ if(!I.on_equipped(src, ITEM_SLOT_HANDS, initial = visuals_only))
return FALSE
update_held_items()
I.pixel_x = I.base_pixel_x
@@ -176,12 +183,12 @@
return hand_index
//Puts the item into the first available left hand if possible and calls all necessary triggers/updates. returns 1 on success.
-/mob/proc/put_in_l_hand(obj/item/I)
- return put_in_hand(I, get_empty_held_index_for_side(LEFT_HANDS))
+/mob/proc/put_in_l_hand(obj/item/I, visuals_only = FALSE)
+ return put_in_hand(I, get_empty_held_index_for_side(LEFT_HANDS), visuals_only = visuals_only)
//Puts the item into the first available right hand if possible and calls all necessary triggers/updates. returns 1 on success.
-/mob/proc/put_in_r_hand(obj/item/I)
- return put_in_hand(I, get_empty_held_index_for_side(RIGHT_HANDS))
+/mob/proc/put_in_r_hand(obj/item/I, visuals_only = FALSE)
+ return put_in_hand(I, get_empty_held_index_for_side(RIGHT_HANDS), visuals_only = visuals_only)
/mob/proc/put_in_hand_check(obj/item/I)
return FALSE //nonliving mobs don't have hands
@@ -193,19 +200,19 @@
return FALSE
//Puts the item into our active hand if possible. returns TRUE on success.
-/mob/proc/put_in_active_hand(obj/item/I, forced = FALSE, ignore_animation = TRUE)
- return put_in_hand(I, active_hand_index, forced, ignore_animation)
+/mob/proc/put_in_active_hand(obj/item/I, forced = FALSE, ignore_animation = TRUE, visuals_only = FALSE)
+ return put_in_hand(I, active_hand_index, forced, ignore_animation, visuals_only)
//Puts the item into our inactive hand if possible, returns TRUE on success
-/mob/proc/put_in_inactive_hand(obj/item/I, forced = FALSE)
- return put_in_hand(I, get_inactive_hand_index(), forced)
+/mob/proc/put_in_inactive_hand(obj/item/I, forced = FALSE, visuals_only = FALSE)
+ return put_in_hand(I, get_inactive_hand_index(), forced, visuals_only = visuals_only)
//Puts the item our active hand if possible. Failing that it tries other hands. Returns TRUE on success.
//If both fail it drops it on the floor (or nearby tables if germ sensitive) and returns FALSE.
//This is probably the main one you need to know :)
-/mob/proc/put_in_hands(obj/item/I, del_on_fail = FALSE, merge_stacks = TRUE, forced = FALSE, ignore_animation = TRUE)
+/mob/proc/put_in_hands(obj/item/I, del_on_fail = FALSE, merge_stacks = TRUE, forced = FALSE, ignore_animation = TRUE, visuals_only = FALSE)
if(QDELETED(I))
return FALSE
@@ -229,14 +236,14 @@
to_chat(usr, span_notice("Your [inactive_stack.name] stack now contains [inactive_stack.get_amount()] [inactive_stack.singular_name]\s."))
return TRUE
- if(put_in_active_hand(I, forced, ignore_animation))
+ if(put_in_active_hand(I, forced, ignore_animation, visuals_only))
return TRUE
var/hand = get_empty_held_index_for_side(LEFT_HANDS)
if(!hand)
hand = get_empty_held_index_for_side(RIGHT_HANDS)
if(hand)
- if(put_in_hand(I, hand, forced, ignore_animation))
+ if(put_in_hand(I, hand, forced, ignore_animation, visuals_only))
return TRUE
if(del_on_fail)
qdel(I)
@@ -348,10 +355,10 @@
. = doUnEquip(I, force, newloc, FALSE, silent = silent)
I.do_drop_animation(src)
-//visibly unequips I but it is NOT MOVED AND REMAINS IN SRC
+//visibly unequips I but it is NOT MOVED AND REMAINS IN SRC, newloc is for signal handling checks only which hints where you want to move the object after removal
//item MUST BE FORCEMOVE'D OR QDEL'D
-/mob/proc/temporarilyRemoveItemFromInventory(obj/item/I, force = FALSE, idrop = TRUE)
- return doUnEquip(I, force, null, TRUE, idrop, silent = TRUE)
+/mob/proc/temporarilyRemoveItemFromInventory(obj/item/I, force = FALSE, idrop = TRUE, atom/newloc = src)
+ return doUnEquip(I, force, newloc, TRUE, idrop, silent = TRUE)
//DO NOT CALL THIS PROC
//use one of the above 3 helper procs
diff --git a/code/modules/mob/living/basic/alien/_alien.dm b/code/modules/mob/living/basic/alien/_alien.dm
index 99b615fbf6089..59aca1021d42e 100644
--- a/code/modules/mob/living/basic/alien/_alien.dm
+++ b/code/modules/mob/living/basic/alien/_alien.dm
@@ -74,6 +74,9 @@
visible_message(span_alertalien("[src] plants some alien weeds!"))
new /obj/structure/alien/weeds/node(loc)
+/mob/living/basic/alien/create_splatter(splatter_dir)
+ new /obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter(get_turf(src), splatter_dir)
+
///Lays an egg on the turf the mob is currently standing on.
/mob/living/basic/alien/proc/lay_alien_egg()
if(!isturf(loc) || isspaceturf(loc))
diff --git a/code/modules/mob/living/basic/blob_minions/blob_spore.dm b/code/modules/mob/living/basic/blob_minions/blob_spore.dm
index 6946d30a631ec..9c7b8001e06fe 100644
--- a/code/modules/mob/living/basic/blob_minions/blob_spore.dm
+++ b/code/modules/mob/living/basic/blob_minions/blob_spore.dm
@@ -56,6 +56,7 @@
/mob/living/basic/blob_minion/spore/proc/zombify(mob/living/carbon/human/target)
visible_message(span_warning("The corpse of [target.name] suddenly rises!"))
var/mob/living/basic/blob_minion/zombie/blombie = change_mob_type(zombie_type, loc, new_name = initial(zombie_type.name))
+ blombie.faction |= faction //inherit the spore's faction in case it was spawned with a different one (eg gold core)
blombie.set_name()
if (istype(blombie)) // In case of badmin
blombie.consume_corpse(target)
diff --git a/code/modules/mob/living/basic/bots/bot_ai.dm b/code/modules/mob/living/basic/bots/bot_ai.dm
index fd89168ddf4f1..d777614d7433e 100644
--- a/code/modules/mob/living/basic/bots/bot_ai.dm
+++ b/code/modules/mob/living/basic/bots/bot_ai.dm
@@ -72,7 +72,7 @@
/datum/ai_controller/basic_controller/bot/get_able_to_run()
var/mob/living/basic/bot/bot_pawn = pawn
if(!(bot_pawn.bot_mode_flags & BOT_MODE_ON))
- return FALSE
+ return AI_UNABLE_TO_RUN
return ..()
/datum/ai_controller/basic_controller/bot/get_access()
diff --git a/code/modules/mob/living/basic/bots/dedbot.dm b/code/modules/mob/living/basic/bots/dedbot.dm
index 0dd5bff9a7c66..1b077af343f0c 100644
--- a/code/modules/mob/living/basic/bots/dedbot.dm
+++ b/code/modules/mob/living/basic/bots/dedbot.dm
@@ -39,10 +39,13 @@
var/exenteration_cooldown_duration = 0.5 SECONDS
//aoe slash ability
var/datum/action/cooldown/mob_cooldown/bot/exenterate
+ var/list/remains = list(/obj/effect/gibspawner/robot)
/mob/living/basic/bot/dedbot/Initialize(mapload)
. = ..()
- AddElement(/datum/element/death_drops, /obj/effect/gibspawner/robot)
+ if(length(remains))
+ remains = string_list(remains)
+ AddElement(/datum/element/death_drops, remains)
var/static/list/innate_actions = list(
SPIN_SLASH_ABILITY_TYPEPATH = BB_DEDBOT_SLASH,
)
diff --git a/code/modules/mob/living/basic/bots/honkbots/honkbot.dm b/code/modules/mob/living/basic/bots/honkbots/honkbot.dm
index 1fa30063dd581..13caade7c9416 100644
--- a/code/modules/mob/living/basic/bots/honkbots/honkbot.dm
+++ b/code/modules/mob/living/basic/bots/honkbots/honkbot.dm
@@ -83,7 +83,7 @@
if(HAS_TRAIT(current_target, TRAIT_DEAF))
return
- var/obj/item/organ/internal/ears/target_ears = current_target.get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/target_ears = current_target.get_organ_slot(ORGAN_SLOT_EARS)
target_ears?.adjustEarDamage(0, 5)
/mob/living/basic/bot/honkbot/ui_data(mob/user)
diff --git a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm
index 67273c49d7eb3..e62172fced1d4 100644
--- a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm
+++ b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm
@@ -222,6 +222,13 @@
///travel towards beacon behavior
travel_behavior = /datum/ai_behavior/travel_towards/beacon/medbot
+/datum/ai_planning_subtree/find_patrol_beacon/medbot/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
+ var/mob/living/basic/bot/medbot/bot_pawn = controller.pawn
+ if(bot_pawn.medical_mode_flags & MEDBOT_STATIONARY_MODE)
+ return
+ return ..()
+
+
/datum/ai_behavior/travel_towards/beacon/medbot
new_movement_type = /datum/ai_movement/jps/bot/medbot/travel_to_beacon
diff --git a/code/modules/mob/living/basic/clown/clown.dm b/code/modules/mob/living/basic/clown/clown.dm
index 3fd2328458293..ebc15182c2f23 100644
--- a/code/modules/mob/living/basic/clown/clown.dm
+++ b/code/modules/mob/living/basic/clown/clown.dm
@@ -478,7 +478,6 @@
button_icon = 'icons/mob/actions/actions_animal.dmi'
button_icon_state = "regurgitate"
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED
- melee_cooldown_time = 0 SECONDS
click_to_activate = TRUE
/datum/action/cooldown/regurgitate/set_click_ability(mob/on_who)
diff --git a/code/modules/mob/living/basic/drone/drone_tools.dm b/code/modules/mob/living/basic/drone/drone_tools.dm
index b55b438362a9d..8408738bf6a3d 100644
--- a/code/modules/mob/living/basic/drone/drone_tools.dm
+++ b/code/modules/mob/living/basic/drone/drone_tools.dm
@@ -26,7 +26,7 @@
builtintools += new /obj/item/soap/drone(src)
for(var/obj/item/tool as anything in builtintools)
- tool.AddComponent(/datum/component/holderloving, src, TRUE)
+ tool.AddComponent(/datum/component/holderloving, src)
/obj/item/crowbar/drone
name = "built-in crowbar"
diff --git a/code/modules/mob/living/basic/farm_animals/bee/_bee.dm b/code/modules/mob/living/basic/farm_animals/bee/_bee.dm
index 2eae87310591e..e9dd79fd5ef06 100644
--- a/code/modules/mob/living/basic/farm_animals/bee/_bee.dm
+++ b/code/modules/mob/living/basic/farm_animals/bee/_bee.dm
@@ -70,6 +70,7 @@
AddComponent(/datum/component/swarming)
AddComponent(/datum/component/obeys_commands, pet_commands)
AddElement(/datum/element/swabable, CELL_LINE_TABLE_QUEEN_BEE, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5)
+ AddElement(/datum/element/basic_allergenic_attack, allergen = BUGS, allergen_chance = 33, histamine_add = 5)
/mob/living/basic/bee/mob_pickup(mob/living/picker)
if(flags_1 & HOLOGRAM_1)
diff --git a/code/modules/mob/living/basic/farm_animals/cow/_cow.dm b/code/modules/mob/living/basic/farm_animals/cow/_cow.dm
index 5c771e72bad15..c26530b5f32aa 100644
--- a/code/modules/mob/living/basic/farm_animals/cow/_cow.dm
+++ b/code/modules/mob/living/basic/farm_animals/cow/_cow.dm
@@ -79,7 +79,6 @@
AddElement(/datum/element/basic_eating, food_types = food_types)
/mob/living/basic/cow/tamed(mob/living/tamer, atom/food)
- buckle_lying = 0
visible_message("[src] [tame_message] as it seems to bond with [tamer].", "You [self_tame_message], recognizing [tamer] as your new pal.")
AddElement(/datum/element/ridable, /datum/component/riding/creature/cow)
diff --git a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm
index b536cb3aebfe6..363243a283388 100644
--- a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm
+++ b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm
@@ -146,7 +146,7 @@
obj_damage = 15
ai_controller = /datum/ai_controller/basic_controller/gorilla/lesser
butcher_results = list(/obj/item/food/meat/slab/gorilla = 2)
- current_size = 0.75
+ initial_size = 0.75
/// Cargo's wonderful mascot, the tranquil box-carrying ape
/mob/living/basic/gorilla/cargorilla
@@ -175,7 +175,7 @@
obj_damage = 25
speed = 0.1
paralyze_chance = 0
- current_size = 0.9
+ initial_size = 0.9
/mob/living/basic/gorilla/genetics/Initialize(mapload)
. = ..()
diff --git a/code/modules/mob/living/basic/farm_animals/pig.dm b/code/modules/mob/living/basic/farm_animals/pig.dm
index c3cfc57ac0522..412104617a5b6 100644
--- a/code/modules/mob/living/basic/farm_animals/pig.dm
+++ b/code/modules/mob/living/basic/farm_animals/pig.dm
@@ -51,8 +51,6 @@
AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/grown/carrot), tame_chance = 25, bonus_tame_chance = 15)
/mob/living/basic/pig/tamed(mob/living/tamer, atom/food)
- can_buckle = TRUE
- buckle_lying = 0
AddElement(/datum/element/ridable, /datum/component/riding/creature/pig)
visible_message(span_notice("[src] snorts respectfully."))
diff --git a/code/modules/mob/living/basic/farm_animals/pony.dm b/code/modules/mob/living/basic/farm_animals/pony.dm
index a39fd328f1116..b73dac3945161 100644
--- a/code/modules/mob/living/basic/farm_animals/pony.dm
+++ b/code/modules/mob/living/basic/farm_animals/pony.dm
@@ -56,8 +56,6 @@
AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/grown/apple), tame_chance = 25, bonus_tame_chance = 15, unique = unique_tamer)
/mob/living/basic/pony/tamed(mob/living/tamer, atom/food)
- can_buckle = TRUE
- buckle_lying = 0
playsound(src, 'sound/mobs/non-humanoids/pony/snort.ogg', 50)
AddElement(/datum/element/ridable, /datum/component/riding/creature/pony)
visible_message(span_notice("[src] snorts happily."))
diff --git a/code/modules/mob/living/basic/guardian/guardian_types/explosive.dm b/code/modules/mob/living/basic/guardian/guardian_types/explosive.dm
index 82c69149f6ed3..b3c0684571d54 100644
--- a/code/modules/mob/living/basic/guardian/guardian_types/explosive.dm
+++ b/code/modules/mob/living/basic/guardian/guardian_types/explosive.dm
@@ -35,7 +35,6 @@
button_icon = 'icons/mob/actions/actions_spells.dmi'
button_icon_state = "smoke"
cooldown_time = 20 SECONDS
- melee_cooldown_time = 0 SECONDS
background_icon = 'icons/hud/guardian.dmi'
background_icon_state = "base"
/// After this amount of time passses, bomb deactivates.
diff --git a/code/modules/mob/living/basic/guardian/guardian_types/gaseous.dm b/code/modules/mob/living/basic/guardian/guardian_types/gaseous.dm
index b43b8e64ea4af..bc6415c1a5312 100644
--- a/code/modules/mob/living/basic/guardian/guardian_types/gaseous.dm
+++ b/code/modules/mob/living/basic/guardian/guardian_types/gaseous.dm
@@ -81,7 +81,6 @@
button_icon = 'icons/mob/actions/actions_spells.dmi'
button_icon_state = "smoke"
cooldown_time = 0 SECONDS // We're here for the interface not the cooldown
- melee_cooldown_time = 0 SECONDS
click_to_activate = FALSE
/// Gas being expelled.
var/active_gas = null
diff --git a/code/modules/mob/living/basic/heretic/maid_in_the_mirror.dm b/code/modules/mob/living/basic/heretic/maid_in_the_mirror.dm
index b83c4f253f362..6f8c2e5c96f07 100644
--- a/code/modules/mob/living/basic/heretic/maid_in_the_mirror.dm
+++ b/code/modules/mob/living/basic/heretic/maid_in_the_mirror.dm
@@ -28,7 +28,7 @@
var/static/list/loot = list(
/obj/effect/decal/cleanable/ash,
/obj/item/clothing/suit/armor/vest,
- /obj/item/organ/internal/lungs,
+ /obj/item/organ/lungs,
/obj/item/shard,
)
AddElement(/datum/element/death_drops, loot)
diff --git a/code/modules/mob/living/basic/heretic/raw_prophet.dm b/code/modules/mob/living/basic/heretic/raw_prophet.dm
index f4ed7229a005e..1d0d0f93f203b 100644
--- a/code/modules/mob/living/basic/heretic/raw_prophet.dm
+++ b/code/modules/mob/living/basic/heretic/raw_prophet.dm
@@ -25,7 +25,7 @@
/mob/living/basic/heretic_summon/raw_prophet/Initialize(mapload)
. = ..()
AddElement(/datum/element/wheel)
- var/static/list/body_parts = list(/obj/effect/gibspawner/human, /obj/item/bodypart/arm/left, /obj/item/organ/internal/eyes)
+ var/static/list/body_parts = list(/obj/effect/gibspawner/human, /obj/item/bodypart/arm/left, /obj/item/organ/eyes)
AddElement(/datum/element/death_drops, body_parts)
AddComponent(/datum/component/focused_attacker)
var/on_link_message = "You feel something new enter your sphere of mind... \
diff --git a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_abilities.dm b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_abilities.dm
index af17fc0cb01aa..350106d707fdb 100644
--- a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_abilities.dm
+++ b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_abilities.dm
@@ -14,7 +14,6 @@
button_icon = 'icons/obj/ore.dmi'
button_icon_state = "bluespace_crystal"
cooldown_time = 3 SECONDS
- melee_cooldown_time = 0 SECONDS
///time delay before teleport
var/time_delay = 0.5 SECONDS
@@ -38,7 +37,6 @@
button_icon_state = "ice_cube"
cooldown_time = 2 SECONDS
click_to_activate = FALSE
- melee_cooldown_time = 0 SECONDS
///perimeter we will spawn the iced floors on
var/radius = 1
///intervals we will spawn the ice floors in
diff --git a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_abilities.dm b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_abilities.dm
index 026106516fb67..d4a05bf227ede 100644
--- a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_abilities.dm
+++ b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_abilities.dm
@@ -5,7 +5,6 @@
button_icon = 'icons/effects/magic.dmi'
button_icon_state = "fireball"
cooldown_time = 3 SECONDS
- melee_cooldown_time = 0 SECONDS
fire_range = 4
fire_damage = 10
@@ -26,7 +25,6 @@
button_icon = 'icons/effects/fire.dmi'
button_icon_state = "1"
cooldown_time = 4 SECONDS
- melee_cooldown_time = 0 SECONDS
click_to_activate = FALSE
fire_range = 6
diff --git a/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm b/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm
index d753c42c51ec8..153b74fbbbce5 100644
--- a/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm
+++ b/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm
@@ -10,7 +10,6 @@
projectile_type = /obj/projectile/leaper
projectile_sound = 'sound/effects/snap.ogg'
shared_cooldown = NONE
- melee_cooldown_time = 0 SECONDS
// bubble ability objects and effects
/obj/projectile/leaper
@@ -119,7 +118,6 @@
cooldown_time = 10 SECONDS
click_to_activate = FALSE
shared_cooldown = NONE
- melee_cooldown_time = 0 SECONDS
/// how many droplets we will fire
var/volley_count = 8
/// time between each droplet launched
@@ -197,7 +195,6 @@
background_icon_state = "bg_revenant"
overlay_icon_state = "bg_revenant_border"
shared_cooldown = NONE
- melee_cooldown_time = 0 SECONDS
/datum/action/cooldown/mob_cooldown/belly_flop/Activate(atom/target)
var/turf/target_turf = get_turf(target)
diff --git a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm
index 2d2b69d119abf..7fe69e23da018 100644
--- a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm
+++ b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm
@@ -43,7 +43,6 @@
button_icon_state = "default"
desc = "Secrete a slippery acid!"
cooldown_time = 15 SECONDS
- melee_cooldown_time = 0 SECONDS
click_to_activate = FALSE
/datum/action/cooldown/mob_cooldown/secrete_acid/Activate(atom/target_atom)
diff --git a/code/modules/mob/living/basic/jungle/seedling/seedling.dm b/code/modules/mob/living/basic/jungle/seedling/seedling.dm
index 3af0675a7f864..0df19c5c27d31 100644
--- a/code/modules/mob/living/basic/jungle/seedling/seedling.dm
+++ b/code/modules/mob/living/basic/jungle/seedling/seedling.dm
@@ -230,7 +230,6 @@
default_projectile_spread = 10
shot_count = 10
shot_delay = 0.2 SECONDS
- melee_cooldown_time = 0 SECONDS
shared_cooldown = NONE
///how long we must charge up before firing off
var/charge_up_timer = 3 SECONDS
diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm
index 81dc34002eedb..e314fe152caf6 100644
--- a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm
+++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon.dm
@@ -31,7 +31,7 @@
butcher_results = list(
/obj/item/food/meat/slab = 2,
/obj/effect/decal/cleanable/brimdust = 1,
- /obj/item/organ/internal/monster_core/brimdust_sac = 1,
+ /obj/item/organ/monster_core/brimdust_sac = 1,
)
/// How we get blasting
var/datum/action/cooldown/mob_cooldown/brimbeam/beam
diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm
index 7d6b1dc6e404a..76feb1f4bd4a7 100644
--- a/code/modules/mob/living/basic/lavaland/goliath/goliath.dm
+++ b/code/modules/mob/living/basic/lavaland/goliath/goliath.dm
@@ -118,7 +118,6 @@
/mob/living/basic/mining/goliath/proc/make_rideable()
saddled = TRUE
- buckle_lying = 0
add_overlay("goliath_saddled")
AddElement(/datum/element/ridable, /datum/component/riding/creature/goliath)
diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm
index e447255c867aa..5bfbbb1051a7f 100644
--- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm
+++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm
@@ -137,7 +137,7 @@
can_breed = FALSE
gender = NEUTER
ai_controller = /datum/ai_controller/basic_controller/gutlunch/gutlunch_baby
- current_size = 0.6
+ initial_size = 0.6
///list of stats we inherited
var/datum/gutlunch_inherited_stats/inherited_stats
diff --git a/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm b/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm
index f76479dc1312d..286e7539624fb 100644
--- a/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm
+++ b/code/modules/mob/living/basic/lavaland/hivelord/hivelord.dm
@@ -29,7 +29,7 @@
/mob/living/basic/mining/hivelord/Initialize(mapload)
. = ..()
- var/static/list/death_loot = list(/obj/item/organ/internal/monster_core/regenerative_core)
+ var/static/list/death_loot = list(/obj/item/organ/monster_core/regenerative_core)
AddElement(/datum/element/relay_attackers)
AddElement(/datum/element/death_drops, death_loot)
AddComponent(/datum/component/clickbox, icon_state = "hivelord", max_scale = INFINITY, dead_state = "hivelord_dead") // They writhe so much.
diff --git a/code/modules/mob/living/basic/lavaland/legion/legion.dm b/code/modules/mob/living/basic/lavaland/legion/legion.dm
index 76d3f51947e63..007d8b6bfa666 100644
--- a/code/modules/mob/living/basic/lavaland/legion/legion.dm
+++ b/code/modules/mob/living/basic/lavaland/legion/legion.dm
@@ -50,7 +50,7 @@
/// Create what we want to drop on death, in proc form so we can always return a static list
/mob/living/basic/mining/legion/proc/get_loot_list()
- var/static/list/death_loot = list(/obj/item/organ/internal/monster_core/regenerative_core/legion)
+ var/static/list/death_loot = list(/obj/item/organ/monster_core/regenerative_core/legion)
return death_loot
/mob/living/basic/mining/legion/Exited(atom/movable/gone, direction)
@@ -88,7 +88,7 @@
if (prob(75))
return
// Congratulations you have won a special prize: cancer
- var/obj/item/organ/internal/legion_tumour/cancer = new()
+ var/obj/item/organ/legion_tumour/cancer = new()
cancer.Insert(consumed, special = TRUE, movement_flags = DELETE_IF_REPLACED)
/// A Legion which only drops skeletons instead of corpses which might have fun loot, so it cannot be farmed
@@ -167,5 +167,5 @@
/// Create what we want to drop on death, in proc form so we can always return a static list
/mob/living/basic/mining/legion/large/get_loot_list()
- var/static/list/death_loot = list(/obj/item/organ/internal/monster_core/regenerative_core/legion = 3, /obj/effect/mob_spawn/corpse/human/legioninfested = 4)
+ var/static/list/death_loot = list(/obj/item/organ/monster_core/regenerative_core/legion = 3, /obj/effect/mob_spawn/corpse/human/legioninfested = 4)
return death_loot
diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm b/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm
index d4503230e482f..984080907c2a8 100644
--- a/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm
+++ b/code/modules/mob/living/basic/lavaland/legion/legion_tumour.dm
@@ -1,5 +1,5 @@
/// Left behind when a legion infects you, for medical enrichment
-/obj/item/organ/internal/legion_tumour
+/obj/item/organ/legion_tumour
name = "legion tumour"
desc = "A mass of pulsing flesh and dark tendrils, containing the power to regenerate flesh at a terrible cost."
failing_desc = "pulses and writhes with horrible life, reaching towards you with its tendrils!"
@@ -27,22 +27,22 @@
'sound/mobs/non-humanoids/hiss/lowHiss4.ogg',
)
-/obj/item/organ/internal/legion_tumour/Initialize(mapload)
+/obj/item/organ/legion_tumour/Initialize(mapload)
. = ..()
animate_pulse()
-/obj/item/organ/internal/legion_tumour/apply_organ_damage(damage_amount, maximum, required_organ_flag)
+/obj/item/organ/legion_tumour/apply_organ_damage(damage_amount, maximum, required_organ_flag)
var/was_failing = organ_flags & ORGAN_FAILING
. = ..()
if (was_failing != (organ_flags & ORGAN_FAILING))
animate_pulse()
-/obj/item/organ/internal/legion_tumour/set_organ_damage(damage_amount, required_organ_flag)
+/obj/item/organ/legion_tumour/set_organ_damage(damage_amount, required_organ_flag)
. = ..()
animate_pulse()
/// Do a heartbeat animation depending on if we're failing or not
-/obj/item/organ/internal/legion_tumour/proc/animate_pulse()
+/obj/item/organ/legion_tumour/proc/animate_pulse()
animate(src, transform = matrix()) // Stop any current animation
var/speed_divider = organ_flags & ORGAN_FAILING ? 2 : 1
@@ -51,23 +51,23 @@
animate(transform = matrix(), time = 0.5 SECONDS / speed_divider, easing = SINE_EASING | EASE_IN)
animate(transform = matrix(), time = 2 SECONDS / speed_divider)
-/obj/item/organ/internal/legion_tumour/Remove(mob/living/carbon/egg_owner, special, movement_flags)
+/obj/item/organ/legion_tumour/Remove(mob/living/carbon/egg_owner, special, movement_flags)
. = ..()
stage = 0
elapsed_time = 0
-/obj/item/organ/internal/legion_tumour/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/legion_tumour/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
. = ..()
owner.log_message("has received [src] which will eventually turn them into a Legion.", LOG_VICTIM)
-/obj/item/organ/internal/legion_tumour/attack(mob/living/target, mob/living/user, params)
+/obj/item/organ/legion_tumour/attack(mob/living/target, mob/living/user, params)
if (try_apply(target, user))
qdel(src)
return
return ..()
/// Smear it on someone like a regen core, why not. Make sure they're alive though.
-/obj/item/organ/internal/legion_tumour/proc/try_apply(mob/living/target, mob/user)
+/obj/item/organ/legion_tumour/proc/try_apply(mob/living/target, mob/user)
if(!user.Adjacent(target) || !isliving(target))
return FALSE
@@ -90,7 +90,7 @@
skull.melee_attack(target)
return TRUE
-/obj/item/organ/internal/legion_tumour/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/legion_tumour/on_life(seconds_per_tick, times_fired)
. = ..()
if (QDELETED(src) || QDELETED(owner))
return
@@ -146,7 +146,7 @@
to_chat(owner, span_bolddanger("Something is moving under your skin!"))
/// Consume our host
-/obj/item/organ/internal/legion_tumour/proc/infest()
+/obj/item/organ/legion_tumour/proc/infest()
if (QDELETED(src) || QDELETED(owner))
return
owner.log_message("has been turned into a Legion by their tumour.", LOG_VICTIM)
@@ -155,7 +155,7 @@
new_legion.consume(owner)
qdel(src)
-/obj/item/organ/internal/legion_tumour/on_find(mob/living/finder)
+/obj/item/organ/legion_tumour/on_find(mob/living/finder)
. = ..()
to_chat(finder, span_warning("There's an enormous tumour in [owner]'s [zone]!"))
if(stage < 4)
diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm
index 625dc4af90726..d8288360bd1a2 100644
--- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm
+++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm
@@ -22,7 +22,7 @@
butcher_results = list(
/obj/item/food/meat/slab/rawcrab = 2,
/obj/item/stack/sheet/bone = 2,
- /obj/item/organ/internal/monster_core/rush_gland = 1,
+ /obj/item/organ/monster_core/rush_gland = 1,
)
crusher_loot = /obj/item/crusher_trophy/lobster_claw
ai_controller = /datum/ai_controller/basic_controller/lobstrosity
@@ -55,6 +55,8 @@
charge = new charge_type(src)
charge.Grant(src)
ai_controller.set_blackboard_key(BB_TARGETED_ACTION, charge)
+ var/static/list/fishable_turfs = typecacheof(list(/turf/open/lava))
+ ai_controller.set_blackboard_key(BB_FISHABLE_LIST, fishable_turfs)
/mob/living/basic/mining/lobstrosity/Destroy()
QDEL_NULL(charge)
@@ -144,7 +146,7 @@
butcher_results = list(
/obj/item/food/meat/slab/rawcrab = 1,
/obj/item/stack/sheet/bone = 1,
- /obj/item/organ/internal/monster_core/rush_gland = 1,
+ /obj/item/organ/monster_core/rush_gland = 1,
)
crusher_loot = null
ai_controller = /datum/ai_controller/basic_controller/lobstrosity/juvenile
diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm
index de6ca4a0cc1b4..647aeac9474ec 100644
--- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm
+++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm
@@ -14,6 +14,8 @@
BB_LOBSTROSITY_FINGER_LUST = 0,
BB_LOBSTROSITY_NAIVE_HUNTER = FALSE,
BB_BASIC_MOB_FLEE_DISTANCE = 8,
+ BB_EAT_FOOD_COOLDOWN = 3 MINUTES,
+ BB_ONLY_FISH_WHILE_HUNGRY = TRUE,
BB_TARGET_PRIORITY_TRAIT = TRAIT_SCARY_FISHERMAN,
BB_OWNER_SELF_HARM_RESPONSES = SHRIMP_HARM_RESPONSES,
)
@@ -31,7 +33,7 @@
/datum/ai_planning_subtree/attack_obstacle_in_path,
/datum/ai_planning_subtree/basic_melee_attack_subtree/lobster,
/datum/ai_planning_subtree/find_food,
- /datum/ai_planning_subtree/find_and_hunt_target/lobster_fishing,
+ /datum/ai_planning_subtree/fish/fish_from_turfs,
/datum/ai_planning_subtree/find_fingers,
)
@@ -65,7 +67,7 @@
/datum/ai_planning_subtree/attack_obstacle_in_path,
/datum/ai_planning_subtree/basic_melee_attack_subtree/lobster,
/datum/ai_planning_subtree/find_food,
- /datum/ai_planning_subtree/find_and_hunt_target/lobster_fishing,
+ /datum/ai_planning_subtree/fish/fish_from_turfs,
/datum/ai_planning_subtree/find_fingers,
)
@@ -81,7 +83,7 @@
/datum/ai_planning_subtree/attack_obstacle_in_path,
/datum/ai_planning_subtree/basic_melee_attack_subtree/lobster,
/datum/ai_planning_subtree/find_food,
- /datum/ai_planning_subtree/find_and_hunt_target/lobster_fishing,
+ /datum/ai_planning_subtree/fish/fish_from_turfs,
/datum/ai_planning_subtree/find_fingers,
)
@@ -97,15 +99,10 @@
/datum/ai_planning_subtree/attack_obstacle_in_path,
/datum/ai_planning_subtree/basic_melee_attack_subtree/lobster,
/datum/ai_planning_subtree/find_food,
- /datum/ai_planning_subtree/find_and_hunt_target/lobster_fishing,
+ /datum/ai_planning_subtree/fish/fish_from_turfs,
/datum/ai_planning_subtree/find_fingers,
)
-/datum/ai_planning_subtree/find_and_hunt_target/lobster_fishing
- target_key = BB_FISHING_TARGET
- hunt_targets = list(/turf/open/lava)
- hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off
-
/datum/ai_planning_subtree/basic_melee_attack_subtree/lobster
melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/lobster
diff --git a/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm b/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm
index 90d7cb0d5b42d..69aa5026a934e 100644
--- a/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm
+++ b/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm
@@ -29,7 +29,6 @@
desc = "Leap towards the enemy!"
cooldown_time = 7 SECONDS
shared_cooldown = NONE
- melee_cooldown_time = 0 SECONDS
///telegraph time before jumping
var/wind_up_time = 2 SECONDS
///intervals between each of our attacks
@@ -92,7 +91,6 @@
desc = "Soar high in the air!"
cooldown_time = 14 SECONDS
shared_cooldown = NONE
- melee_cooldown_time = 0 SECONDS
click_to_activate = FALSE
/datum/action/cooldown/mob_cooldown/mook_ability/mook_jump/Activate(atom/target)
diff --git a/code/modules/mob/living/basic/lavaland/watcher/watcher_gaze.dm b/code/modules/mob/living/basic/lavaland/watcher/watcher_gaze.dm
index 940803299524b..7d0ad8f191ad1 100644
--- a/code/modules/mob/living/basic/lavaland/watcher/watcher_gaze.dm
+++ b/code/modules/mob/living/basic/lavaland/watcher/watcher_gaze.dm
@@ -11,7 +11,6 @@
cooldown_time = 20 SECONDS
click_to_activate = FALSE
shared_cooldown = NONE
- melee_cooldown_time = 0 SECONDS
/// At what range do we check for vision?
var/effect_radius = 7
/// How long does it take to play our various animation stages
diff --git a/code/modules/mob/living/basic/minebots/minebot_abilities.dm b/code/modules/mob/living/basic/minebots/minebot_abilities.dm
index a421c5d81f48c..bc778a7bfe799 100644
--- a/code/modules/mob/living/basic/minebots/minebot_abilities.dm
+++ b/code/modules/mob/living/basic/minebots/minebot_abilities.dm
@@ -58,7 +58,6 @@
desc = "Launch a missile towards the target!"
cooldown_time = 10 SECONDS
shared_cooldown = NONE
- melee_cooldown_time = 0 SECONDS
///how long before we launch said missile
var/wind_up_timer = 1 SECONDS
@@ -100,7 +99,6 @@
overlay_icon_state = "bg_default_border"
cooldown_time = 10 SECONDS
shared_cooldown = NONE
- melee_cooldown_time = 0 SECONDS
click_to_activate = FALSE
/datum/action/cooldown/mob_cooldown/drop_landmine/IsAvailable(feedback = TRUE)
diff --git a/code/modules/mob/living/basic/pets/cat/cat.dm b/code/modules/mob/living/basic/pets/cat/cat.dm
index 3c2ab3f7c9f9b..3075aa6bcb72b 100644
--- a/code/modules/mob/living/basic/pets/cat/cat.dm
+++ b/code/modules/mob/living/basic/pets/cat/cat.dm
@@ -12,8 +12,8 @@
unsuitable_atmos_damage = 0.5
butcher_results = list(
/obj/item/food/meat/slab = 1,
- /obj/item/organ/internal/ears/cat = 1,
- /obj/item/organ/external/tail/cat = 1,
+ /obj/item/organ/ears/cat = 1,
+ /obj/item/organ/tail/cat = 1,
/obj/item/stack/sheet/animalhide/cat = 1
)
response_help_continuous = "pets"
@@ -181,8 +181,8 @@
can_interact_with_stove = TRUE
butcher_results = list(
/obj/item/food/meat/slab = 2,
- /obj/item/organ/internal/ears/cat = 1,
- /obj/item/organ/external/tail/cat = 1,
+ /obj/item/organ/ears/cat = 1,
+ /obj/item/organ/tail/cat = 1,
/obj/item/food/breadslice/plain = 1
)
collar_icon_state = null
diff --git a/code/modules/mob/living/basic/pets/cat/keeki.dm b/code/modules/mob/living/basic/pets/cat/keeki.dm
index 4c18d22b02a73..7314f9b49068a 100644
--- a/code/modules/mob/living/basic/pets/cat/keeki.dm
+++ b/code/modules/mob/living/basic/pets/cat/keeki.dm
@@ -8,8 +8,8 @@
maxHealth = 50
gender = FEMALE
butcher_results = list(
- /obj/item/organ/internal/brain = 1,
- /obj/item/organ/internal/heart = 1,
+ /obj/item/organ/brain = 1,
+ /obj/item/organ/heart = 1,
/obj/item/food/cakeslice/birthday = 3,
/obj/item/food/meat/slab = 2
)
@@ -40,7 +40,7 @@
/mob/living/basic/pet/cat/cak/CheckParts(list/parts)
. = ..()
- var/obj/item/organ/internal/brain/candidate = locate(/obj/item/organ/internal/brain) in contents
+ var/obj/item/organ/brain/candidate = locate(/obj/item/organ/brain) in contents
if(isnull(candidate?.brainmob?.mind))
return
var/datum/mind/candidate_mind = candidate.brainmob.mind
diff --git a/code/modules/mob/living/basic/pets/dog/dog_subtypes.dm b/code/modules/mob/living/basic/pets/dog/dog_subtypes.dm
index 9ac8e10d8f4f9..c5fac5f966e48 100644
--- a/code/modules/mob/living/basic/pets/dog/dog_subtypes.dm
+++ b/code/modules/mob/living/basic/pets/dog/dog_subtypes.dm
@@ -91,7 +91,7 @@
maxHealth = 50
gender = NEUTER
damage_coeff = list(BRUTE = 3, BURN = 3, TOX = 1, STAMINA = 0, OXY = 1)
- butcher_results = list(/obj/item/organ/internal/brain = 1, /obj/item/organ/internal/heart = 1, /obj/item/food/breadslice/plain = 3, \
+ butcher_results = list(/obj/item/organ/brain = 1, /obj/item/organ/heart = 1, /obj/item/food/breadslice/plain = 3, \
/obj/item/food/meat/slab = 2)
response_harm_continuous = "takes a bite out of"
response_harm_simple = "take a bite out of"
@@ -101,7 +101,7 @@
/mob/living/basic/pet/dog/breaddog/CheckParts(list/parts)
. = ..()
- var/obj/item/organ/internal/brain/candidate = locate(/obj/item/organ/internal/brain) in contents
+ var/obj/item/organ/brain/candidate = locate(/obj/item/organ/brain) in contents
if(!candidate || !candidate.brainmob || !candidate.brainmob.mind)
return
candidate.brainmob.mind.transfer_to(src)
diff --git a/code/modules/mob/living/basic/pets/penguin.dm b/code/modules/mob/living/basic/pets/penguin/penguin.dm
similarity index 70%
rename from code/modules/mob/living/basic/pets/penguin.dm
rename to code/modules/mob/living/basic/pets/penguin/penguin.dm
index c1afe10187c75..0df0dfedcb29c 100644
--- a/code/modules/mob/living/basic/pets/penguin.dm
+++ b/code/modules/mob/living/basic/pets/penguin/penguin.dm
@@ -35,6 +35,14 @@
AddElement(/datum/element/ai_flee_while_injured)
AddElement(/datum/element/pet_bonus, "honk")
AddElementTrait(TRAIT_WADDLING, INNATE_TRAIT, /datum/element/waddling)
+ ADD_TRAIT(src, TRAIT_MOB_CAN_DIG, INNATE_TRAIT)
+
+ var/static/list/fishable_objects = typecacheof(list(/turf/open/misc/ice))
+ ai_controller.set_blackboard_key(BB_FISHABLE_LIST, fishable_objects)
+ var/static/list/delicious_food = list(/obj/item/fish)
+ AddElement(/datum/element/basic_eating, heal_amt = 10, food_types = delicious_food)
+ ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(delicious_food))
+
if(!can_lay_eggs)
return
AddComponent(\
@@ -93,38 +101,6 @@
carried_egg = null
cut_overlay("penguin_egg_overlay")
-/datum/ai_controller/basic_controller/penguin
- blackboard = list(
- BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
- )
-
- ai_traits = STOP_MOVING_WHEN_PULLED
- ai_movement = /datum/ai_movement/basic_avoidance
- idle_behavior = /datum/idle_behavior/idle_random_walk
-
- planning_subtrees = list(
- /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee,
- /datum/ai_planning_subtree/flee_target,
- /datum/ai_planning_subtree/find_and_hunt_target/penguin_egg,
- /datum/ai_planning_subtree/random_speech/penguin,
- )
-
-/datum/ai_planning_subtree/find_and_hunt_target/penguin_egg
- target_key = BB_LOW_PRIORITY_HUNTING_TARGET
- hunting_behavior = /datum/ai_behavior/hunt_target/penguin_egg
- finding_behavior = /datum/ai_behavior/find_hunt_target/penguin_egg
- hunt_targets = list(/obj/item/food/egg/penguin_egg)
- hunt_range = 7
-
-/datum/ai_behavior/find_hunt_target/penguin_egg/valid_dinner(mob/living/source, atom/dinner, radius)
- return can_see(source, dinner, radius) && !(dinner in source.contents)
-/datum/ai_behavior/hunt_target/penguin_egg
- hunt_cooldown = 15 SECONDS
- always_reset_target = TRUE
-
-/datum/ai_behavior/hunt_target/penguin_egg/target_caught(mob/living/basic/hunter, obj/item/food/egg/target)
- hunter.UnarmedAttack(target, TRUE)
-
/mob/living/basic/pet/penguin/emperor
name = "emperor penguin"
real_name = "penguin"
@@ -157,13 +133,12 @@
density = FALSE
pass_flags = PASSMOB
mob_size = MOB_SIZE_SMALL
- butcher_results = list(/obj/item/organ/internal/ears/penguin = 1, /obj/item/food/meat/slab/penguin = 1)
+ butcher_results = list(/obj/item/organ/ears/penguin = 1, /obj/item/food/meat/slab/penguin = 1)
ai_controller = /datum/ai_controller/basic_controller/penguin/baby
can_lay_eggs = FALSE
///will it grow up?
var/can_grow_up = TRUE
-
/mob/living/basic/pet/penguin/baby/Initialize(mapload)
. = ..()
if(!can_grow_up)
@@ -187,23 +162,6 @@
/mob/living/basic/pet/penguin/baby/proc/ready_to_grow()
return (stat == CONSCIOUS)
-/datum/ai_controller/basic_controller/penguin/baby
- blackboard = list(
- BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
- BB_FIND_MOM_TYPES = list(/mob/living/basic/pet/penguin),
- BB_IGNORE_MOM_TYPES = list(/mob/living/basic/pet/penguin/baby),
- )
-
- ai_traits = STOP_MOVING_WHEN_PULLED
- ai_movement = /datum/ai_movement/basic_avoidance
- idle_behavior = /datum/idle_behavior/idle_random_walk
-
- planning_subtrees = list(
- /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee,
- /datum/ai_planning_subtree/flee_target,
- /datum/ai_planning_subtree/look_for_adult,
- )
-
/mob/living/basic/pet/penguin/baby/permanent
can_grow_up = FALSE
diff --git a/code/modules/mob/living/basic/pets/penguin/penguin_ai.dm b/code/modules/mob/living/basic/pets/penguin/penguin_ai.dm
new file mode 100644
index 0000000000000..90d12e8794179
--- /dev/null
+++ b/code/modules/mob/living/basic/pets/penguin/penguin_ai.dm
@@ -0,0 +1,79 @@
+
+/datum/ai_controller/basic_controller/penguin
+ blackboard = list(
+ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
+ BB_ONLY_FISH_WHILE_HUNGRY = TRUE,
+ )
+
+ ai_traits = STOP_MOVING_WHEN_PULLED
+ ai_movement = /datum/ai_movement/basic_avoidance
+ idle_behavior = /datum/idle_behavior/idle_random_walk
+
+ planning_subtrees = list(
+ /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee,
+ /datum/ai_planning_subtree/flee_target,
+ /datum/ai_planning_subtree/find_food,
+ /datum/ai_planning_subtree/fish/drilled_ice,
+ /datum/ai_planning_subtree/find_and_hunt_target/drill_ice,
+ /datum/ai_planning_subtree/find_and_hunt_target/penguin_egg,
+ /datum/ai_planning_subtree/random_speech/penguin,
+ )
+
+///subtree to find baby eggs!
+/datum/ai_planning_subtree/find_and_hunt_target/penguin_egg
+ target_key = BB_LOW_PRIORITY_HUNTING_TARGET
+ hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target
+ finding_behavior = /datum/ai_behavior/find_hunt_target/penguin_egg
+ hunt_targets = list(/obj/item/food/egg/penguin_egg)
+ hunt_range = 7
+
+/datum/ai_behavior/find_hunt_target/penguin_egg/valid_dinner(mob/living/source, atom/dinner, radius)
+ return can_see(source, dinner, radius) && !(dinner in source.contents)
+
+///subtree to find diggable ice we can fish from!
+/datum/ai_planning_subtree/find_and_hunt_target/drill_ice
+ target_key = BB_DRILLABLE_ICE
+ hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target
+ finding_behavior = /datum/ai_behavior/find_hunt_target/search_turf_types/drillable_ice
+ hunt_targets = list(/turf/open/misc/ice)
+ hunt_range = 7
+
+/datum/ai_behavior/find_hunt_target/search_turf_types/drillable_ice
+
+/datum/ai_behavior/find_hunt_target/search_turf_types/drillable_ice/valid_dinner(mob/living/source, turf/open/misc/ice/ice, radius)
+ return ice.can_make_hole && can_see(source, ice, radius)
+
+/datum/ai_planning_subtree/find_and_hunt_target/drill_ice/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
+ if(controller.blackboard_key_exists(BB_FISHING_TARGET))
+ return
+ return ..()
+
+/datum/ai_planning_subtree/fish/drilled_ice
+ find_fishable_behavior = /datum/ai_behavior/find_and_set/in_list/drilled_ice
+
+/datum/ai_behavior/find_and_set/in_list/drilled_ice/search_tactic(datum/ai_controller/controller, locate_paths, search_range)
+ for(var/atom/possible_ice as anything in RANGE_TURFS(search_range, controller.pawn))
+ if(!istype(possible_ice, /turf/open/misc/ice))
+ continue
+ if(HAS_TRAIT(possible_ice, TRAIT_FISHING_SPOT))
+ return possible_ice
+ return null
+
+///ai controller for the baby penguin
+/datum/ai_controller/basic_controller/penguin/baby
+ blackboard = list(
+ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
+ BB_FIND_MOM_TYPES = list(/mob/living/basic/pet/penguin),
+ BB_IGNORE_MOM_TYPES = list(/mob/living/basic/pet/penguin/baby),
+ )
+
+ ai_traits = STOP_MOVING_WHEN_PULLED
+ ai_movement = /datum/ai_movement/basic_avoidance
+ idle_behavior = /datum/idle_behavior/idle_random_walk
+
+ planning_subtrees = list(
+ /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee,
+ /datum/ai_planning_subtree/flee_target,
+ /datum/ai_planning_subtree/find_food,
+ /datum/ai_planning_subtree/look_for_adult,
+ )
diff --git a/code/modules/mob/living/basic/pets/pet_designer.dm b/code/modules/mob/living/basic/pets/pet_designer.dm
index a0cc7ca4018d9..988fee6603817 100644
--- a/code/modules/mob/living/basic/pets/pet_designer.dm
+++ b/code/modules/mob/living/basic/pets/pet_designer.dm
@@ -163,6 +163,9 @@ GLOBAL_LIST_INIT(pet_options, list(
var/list/trick_moves = params["selected_trick_moves"]
if(length(trick_moves))
+ for (var/trick_move in trick_moves)
+ if (!length(GLOB.emote_list[LOWER_TEXT(trick_move)]))
+ trick_moves -= trick_move
pet_trick_moves = trick_moves
var/selected_color = params["selected_carrier"]
diff --git a/code/modules/mob/living/basic/ruin_defender/mad_piano.dm b/code/modules/mob/living/basic/ruin_defender/mad_piano.dm
index d5563564f0e29..6ffa90c3912e4 100644
--- a/code/modules/mob/living/basic/ruin_defender/mad_piano.dm
+++ b/code/modules/mob/living/basic/ruin_defender/mad_piano.dm
@@ -34,11 +34,13 @@
COOLDOWN_DECLARE(tantrum_time)
//length of aggro state
var/tantrum_time_duration = 3.5 SECONDS
+ var/list/remains = list(/obj/effect/gibspawner/robot)
/mob/living/basic/mad_piano/Initialize(mapload)
. = ..()
- var/static/list/death_loot = list(/obj/effect/gibspawner/robot)
- AddElement(/datum/element/death_drops, death_loot)
+ if(length(remains))
+ remains = string_list(remains)
+ AddElement(/datum/element/death_drops, remains)
var/static/list/connections = list(COMSIG_ATOM_ENTERED = PROC_REF(aggro_tantrum))
AddComponent(/datum/component/connect_range, tracked = src, connections = connections, range = 1, works_in_containers = FALSE)
AddElementTrait(TRAIT_WADDLING, INNATE_TRAIT, /datum/element/waddling)
diff --git a/code/modules/mob/living/basic/space_fauna/ant.dm b/code/modules/mob/living/basic/space_fauna/ant.dm
index 3ae46b7f53947..60b91c5dcc215 100644
--- a/code/modules/mob/living/basic/space_fauna/ant.dm
+++ b/code/modules/mob/living/basic/space_fauna/ant.dm
@@ -52,6 +52,7 @@
AddElement(/datum/element/pet_bonus, "clack")
AddElement(/datum/element/ai_retaliate)
AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW)
+ AddElement(/datum/element/basic_allergenic_attack, allergen = BUGS, allergen_chance = 20, histamine_add = 5)
/datum/ai_controller/basic_controller/ant
blackboard = list(
diff --git a/code/modules/mob/living/basic/space_fauna/bear/_bear.dm b/code/modules/mob/living/basic/space_fauna/bear/_bear.dm
index 9b60f7f815998..e6d77586e4b1b 100644
--- a/code/modules/mob/living/basic/space_fauna/bear/_bear.dm
+++ b/code/modules/mob/living/basic/space_fauna/bear/_bear.dm
@@ -53,8 +53,6 @@
return FALSE
AddElement(/datum/element/ridable, /datum/component/riding/creature/bear)
- can_buckle = TRUE
- buckle_lying = 0
/mob/living/basic/bear/update_icons()
..()
@@ -134,7 +132,7 @@
response_harm_simple = "take a bite out of"
attacked_sound = 'sound/items/eatfood.ogg'
death_message = "loses its false life and collapses!"
- butcher_results = list(/obj/item/food/butter = 6, /obj/item/food/meat/slab = 3, /obj/item/organ/internal/brain = 1, /obj/item/organ/internal/heart = 1)
+ butcher_results = list(/obj/item/food/butter = 6, /obj/item/food/meat/slab = 3, /obj/item/organ/brain = 1, /obj/item/organ/heart = 1)
attack_sound = 'sound/items/weapons/slap.ogg'
attack_vis_effect = ATTACK_EFFECT_DISARM
attack_verb_simple = "slap"
@@ -162,7 +160,7 @@
/mob/living/basic/bear/butter/CheckParts(list/parts) //Borrowed code from Cak, allows the brain used to actually control the bear.
. = ..()
- var/obj/item/organ/internal/brain/candidate = locate(/obj/item/organ/internal/brain) in contents
+ var/obj/item/organ/brain/candidate = locate(/obj/item/organ/brain) in contents
if(!candidate || !candidate.brainmob || !candidate.brainmob.mind)
return
var/datum/mind/candidate_mind = candidate.brainmob.mind
diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp.dm b/code/modules/mob/living/basic/space_fauna/carp/carp.dm
index a315e253ecebc..b16a00a6906b1 100644
--- a/code/modules/mob/living/basic/space_fauna/carp/carp.dm
+++ b/code/modules/mob/living/basic/space_fauna/carp/carp.dm
@@ -133,7 +133,6 @@
/// Called when another mob has forged a bond of friendship with this one, passed the taming mob as 'tamer'
/mob/living/basic/carp/tamed(mob/living/tamer, atom/food, feedback = TRUE)
- buckle_lying = 0
AddElement(/datum/element/ridable, ridable_data)
AddComponent(/datum/component/obeys_commands, tamed_commands)
if (!feedback)
diff --git a/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm b/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm
index 246b025d559dc..926ce374fafe1 100644
--- a/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm
+++ b/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm
@@ -51,7 +51,7 @@
return
var/mob/living/carbon/human/attacked = target
- var/obj/item/organ/external/tail/cat/tail = attacked.get_organ_by_type(/obj/item/organ/external/tail/cat)
+ var/obj/item/organ/tail/cat/tail = attacked.get_organ_by_type(/obj/item/organ/tail/cat)
if(QDELETED(tail))
return
diff --git a/code/modules/mob/living/basic/space_fauna/changeling/headslug.dm b/code/modules/mob/living/basic/space_fauna/changeling/headslug.dm
index d7aa8903398a6..f2585aecd6276 100644
--- a/code/modules/mob/living/basic/space_fauna/changeling/headslug.dm
+++ b/code/modules/mob/living/basic/space_fauna/changeling/headslug.dm
@@ -74,7 +74,7 @@
/// Simply infects the target corpse with our changeling eggs. This shouldn't fail, because all checks should have been done in check_and_implant()
/// Just to be super-duper safe to the player, we do return TRUE if all goes well and read that value in check_and_implant() to be nice to the player.
/mob/living/basic/headslug/proc/infect(mob/living/carbon/victim)
- var/obj/item/organ/internal/body_egg/changeling_egg/egg = new(victim)
+ var/obj/item/organ/body_egg/changeling_egg/egg = new(victim)
egg.origin = mind
diff --git a/code/modules/mob/living/basic/space_fauna/demon/demon_items.dm b/code/modules/mob/living/basic/space_fauna/demon/demon_items.dm
index 811186d43ad9a..fdc92d06f661f 100644
--- a/code/modules/mob/living/basic/space_fauna/demon/demon_items.dm
+++ b/code/modules/mob/living/basic/space_fauna/demon/demon_items.dm
@@ -1,16 +1,16 @@
/// The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl
-/obj/item/organ/internal/heart/demon
+/obj/item/organ/heart/demon
name = "demon heart"
desc = "Still it beats furiously, emanating an aura of utter hate."
icon = 'icons/obj/medical/organs/organs.dmi'
icon_state = "demon_heart-on"
decay_factor = 0
-/obj/item/organ/internal/heart/demon/Initialize(mapload)
+/obj/item/organ/heart/demon/Initialize(mapload)
AddElement(/datum/element/update_icon_blocker)
return ..()
-/obj/item/organ/internal/heart/demon/attack(mob/target_mob, mob/living/carbon/user, obj/target)
+/obj/item/organ/heart/demon/attack(mob/target_mob, mob/living/carbon/user, obj/target)
if(target_mob != user)
return ..()
@@ -33,18 +33,18 @@
user.temporarilyRemoveItemFromInventory(src, TRUE)
src.Insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E
-/obj/item/organ/internal/heart/demon/on_mob_insert(mob/living/carbon/heart_owner)
+/obj/item/organ/heart/demon/on_mob_insert(mob/living/carbon/heart_owner)
. = ..()
// Gives a non-eat-people crawl to the new owner
var/datum/action/cooldown/spell/jaunt/bloodcrawl/crawl = new(heart_owner)
crawl.Grant(heart_owner)
-/obj/item/organ/internal/heart/demon/on_mob_remove(mob/living/carbon/heart_owner, special = FALSE)
+/obj/item/organ/heart/demon/on_mob_remove(mob/living/carbon/heart_owner, special = FALSE)
. = ..()
var/datum/action/cooldown/spell/jaunt/bloodcrawl/crawl = locate() in heart_owner.actions
qdel(crawl)
-/obj/item/organ/internal/heart/demon/Stop()
+/obj/item/organ/heart/demon/Stop()
return FALSE // Always beating.
/obj/effect/decal/cleanable/blood/innards
diff --git a/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm b/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm
index a8073fa8329f7..add0ba237f86b 100644
--- a/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm
+++ b/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm
@@ -45,7 +45,7 @@
var/static/list/droppable_loot = list(
/obj/effect/decal/cleanable/blood,
/obj/effect/decal/cleanable/blood/innards,
- /obj/item/organ/internal/heart/demon,
+ /obj/item/organ/heart/demon,
)
return droppable_loot
diff --git a/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm b/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm
index e735067b3ed8d..9c56ec044c75f 100644
--- a/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm
+++ b/code/modules/mob/living/basic/space_fauna/eyeball/_eyeball.dm
@@ -100,13 +100,13 @@
if(!ishuman(target))
return TRUE
var/mob/living/carbon/human_target = target
- var/obj/item/organ/internal/eyes/eyes = human_target.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = human_target.get_organ_slot(ORGAN_SLOT_EYES)
if(isnull(eyes) || eyes.damage < 10)
return TRUE
heal_eye_damage(human_target, eyes)
return FALSE
-/mob/living/basic/eyeball/proc/heal_eye_damage(mob/living/target, obj/item/organ/internal/eyes/eyes)
+/mob/living/basic/eyeball/proc/heal_eye_damage(mob/living/target, obj/item/organ/eyes/eyes)
if(!COOLDOWN_FINISHED(src, eye_healing))
return
to_chat(target, span_warning("[src] seems to be healing your [eyes.zone]!"))
diff --git a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm
index 5051f8153714d..27f637d3a879a 100644
--- a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm
+++ b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm
@@ -7,7 +7,7 @@
if(!eye_damage_threshold)
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
for(var/mob/living/carbon/blind in oview(9, living_pawn))
- var/obj/item/organ/internal/eyes/eyes = blind.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = blind.get_organ_slot(ORGAN_SLOT_EYES)
if(isnull(eyes))
continue
if(eyes.damage < eye_damage_threshold)
@@ -36,7 +36,7 @@
if(QDELETED(target))
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
- var/obj/item/organ/internal/eyes/eyes = target.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = target.get_organ_slot(ORGAN_SLOT_EYES)
var/datum/callback/callback = CALLBACK(living_pawn, TYPE_PROC_REF(/mob/living/basic/eyeball, heal_eye_damage), target, eyes)
callback.Invoke()
diff --git a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm
index 17b260d03ed72..f71594ea0ec1e 100644
--- a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm
+++ b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm
@@ -34,7 +34,7 @@
var/eye_damage_threshold = owner.ai_controller.blackboard[BB_EYE_DAMAGE_THRESHOLD]
if(!eye_damage_threshold)
return TRUE
- var/obj/item/organ/internal/eyes/eyes = human_target.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = human_target.get_organ_slot(ORGAN_SLOT_EYES)
if(eyes.damage > eye_damage_threshold) //we dont attack people with bad vision
return FALSE
diff --git a/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm b/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm
index e7f5ad852cc31..292f85e476466 100644
--- a/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm
+++ b/code/modules/mob/living/basic/space_fauna/netherworld/creature.dm
@@ -105,10 +105,11 @@
/mob/living/basic/creature/tiggles
name = "Miss Tiggles"
+ gold_core_spawnable = NO_SPAWN
/mob/living/basic/creature/hatchling
name = "hatchling"
health = 25
maxHealth = 25
health_scaling = FALSE
- current_size = 0.85
+ initial_size = 0.85
diff --git a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm
index feb6ebb7c3b66..f7997e589695d 100644
--- a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm
+++ b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm
@@ -8,7 +8,6 @@
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED
click_to_activate = FALSE
cooldown_time = 6 SECONDS
- melee_cooldown_time = 0 SECONDS
button_icon = 'icons/mob/actions/actions_animal.dmi'
background_icon_state = "bg_clock"
overlay_icon_state = "bg_clock_border"
@@ -57,7 +56,6 @@
background_icon_state = "bg_clock"
overlay_icon_state = "bg_clock_border"
cooldown_time = 8 SECONDS
- melee_cooldown_time = 0 SECONDS
shared_cooldown = NONE
/// How close does something need to be for us to recruit it?
var/range = 5
diff --git a/code/modules/mob/living/basic/space_fauna/space_dragon/dragon_breath.dm b/code/modules/mob/living/basic/space_fauna/space_dragon/dragon_breath.dm
index 5be5038b3a416..0093b76c826bd 100644
--- a/code/modules/mob/living/basic/space_fauna/space_dragon/dragon_breath.dm
+++ b/code/modules/mob/living/basic/space_fauna/space_dragon/dragon_breath.dm
@@ -6,7 +6,6 @@
fire_range = 20
fire_temperature = 700 // Even hotter than a megafauna for some reason
shared_cooldown = NONE
- melee_cooldown_time = 0 SECONDS
/datum/action/cooldown/mob_cooldown/fire_breath/carp/on_burn_mob(mob/living/barbecued, mob/living/source)
if (!source.faction_check_atom(barbecued))
diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider.dm b/code/modules/mob/living/basic/space_fauna/spider/spider.dm
index 195b814983301..d71f6791a9c9a 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/spider.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/spider.dm
@@ -69,6 +69,7 @@
AddElement(/datum/element/prevent_attacking_of_types, GLOB.typecache_general_bad_hostile_attack_targets, "this tastes awful!")
AddElement(/datum/element/cliff_walking)
AddComponent(/datum/component/health_scaling_effects, min_health_slowdown = 1.5)
+ AddElement(/datum/element/basic_allergenic_attack, allergen = BUGS, allergen_chance = 20, histamine_add = 5)
if(poison_per_bite)
AddElement(/datum/element/venomous, poison_type, poison_per_bite, injection_flags = bite_injection_flags)
diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/wrap.dm b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/wrap.dm
index 088905a5ae2f3..5ea10c5532d02 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/wrap.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/wrap.dm
@@ -74,6 +74,8 @@
return TRUE
/datum/action/cooldown/mob_cooldown/wrap/proc/cocoon(atom/movable/to_wrap)
+ if(isliving(to_wrap))
+ to_chat(to_wrap, span_userdanger("[owner] begins to secrete a sticky substance around you."))
owner.visible_message(
span_notice("[owner] begins to secrete a sticky substance around [to_wrap]."),
span_notice("You begin wrapping [to_wrap] into a cocoon."),
diff --git a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm
index a25b3c52ad8fc..1281cb06f5756 100644
--- a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm
+++ b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm
@@ -11,7 +11,6 @@
background_icon_state = "bg_fugu"
overlay_icon_state = "bg_fugu_border"
cooldown_time = 16 SECONDS
- melee_cooldown_time = 0 SECONDS
/datum/action/cooldown/fugu_expand/IsAvailable(feedback)
. = ..()
diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm
index 7ae89e8d0ae1d..592d187ebbf0b 100644
--- a/code/modules/mob/living/brain/MMI.dm
+++ b/code/modules/mob/living/brain/MMI.dm
@@ -10,7 +10,7 @@
var/mob/living/brain/brainmob = null //The current occupant.
var/mob/living/silicon/robot = null //Appears unused.
var/obj/vehicle/sealed/mecha = null //This does not appear to be used outside of reference in mecha.dm.
- var/obj/item/organ/internal/brain/brain = null //The actual brain
+ var/obj/item/organ/brain/brain = null //The actual brain
var/datum/ai_laws/laws = new()
var/force_replace_ai_name = FALSE
var/overrides_aicore_laws = FALSE // Whether the laws on the MMI, if any, override possible pre-existing laws loaded on the AI core.
@@ -35,7 +35,7 @@
if(!brain)
icon_state = "[base_icon_state]_off"
return ..()
- icon_state = "[base_icon_state]_brain[istype(brain, /obj/item/organ/internal/brain/alien) ? "_alien" : null]"
+ icon_state = "[base_icon_state]_brain[istype(brain, /obj/item/organ/brain/alien) ? "_alien" : null]"
return ..()
/obj/item/mmi/update_overlays()
@@ -51,8 +51,8 @@
/obj/item/mmi/attackby(obj/item/O, mob/user, params)
user.changeNext_move(CLICK_CD_MELEE)
- if(istype(O, /obj/item/organ/internal/brain)) //Time to stick a brain in it --NEO
- var/obj/item/organ/internal/brain/newbrain = O
+ if(istype(O, /obj/item/organ/brain)) //Time to stick a brain in it --NEO
+ var/obj/item/organ/brain/newbrain = O
if(brain)
to_chat(user, span_warning("There's already a brain in the MMI!"))
return
@@ -99,7 +99,7 @@
name = "[initial(name)]: [brainmob.real_name]"
update_appearance()
- if(istype(brain, /obj/item/organ/internal/brain/alien))
+ if(istype(brain, /obj/item/organ/brain/alien))
braintype = "Xenoborg" //HISS....Beep.
else
braintype = "Cyborg"
@@ -121,7 +121,7 @@
* Arguments:
* * new_brain - Brain to be force-inserted into the MMI. Any calling code should handle proper removal of the brain from the mob, as this proc only forceMoves.
*/
-/obj/item/mmi/proc/force_brain_into(obj/item/organ/internal/brain/new_brain)
+/obj/item/mmi/proc/force_brain_into(obj/item/organ/brain/new_brain)
if(isnull(new_brain))
stack_trace("Proc called with null brain.")
return FALSE
@@ -160,7 +160,7 @@
name = "[initial(name)]: [brainmob.real_name]"
update_appearance()
- if(istype(brain, /obj/item/organ/internal/brain/alien))
+ if(istype(brain, /obj/item/organ/brain/alien))
braintype = "Xenoborg"
else
braintype = "Cyborg"
@@ -209,7 +209,7 @@
if(ishuman(L))
var/mob/living/carbon/human/H = L
- var/obj/item/organ/internal/brain/newbrain = H.get_organ_by_type(/obj/item/organ/internal/brain)
+ var/obj/item/organ/brain/newbrain = H.get_organ_by_type(/obj/item/organ/brain)
newbrain.Remove(H, special = TRUE, movement_flags = NO_ID_TRANSFER)
newbrain.forceMove(src)
brain = newbrain
@@ -220,7 +220,7 @@
name = "[initial(name)]: [brainmob.real_name]"
update_appearance()
- if(istype(brain, /obj/item/organ/internal/brain/alien))
+ if(istype(brain, /obj/item/organ/brain/alien))
braintype = "Xenoborg" //HISS....Beep.
else
braintype = "Cyborg"
diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm
index 17f5be02a91cf..ccce0269e54ea 100644
--- a/code/modules/mob/living/brain/brain.dm
+++ b/code/modules/mob/living/brain/brain.dm
@@ -11,7 +11,7 @@
create_dna(src)
stored_dna.initialize_dna(random_blood_type())
if(isturf(loc)) //not spawned in an MMI or brain organ (most likely adminspawned)
- var/obj/item/organ/internal/brain/OB = new(loc) //we create a new brain organ for it.
+ var/obj/item/organ/brain/OB = new(loc) //we create a new brain organ for it.
OB.brainmob = src
forceMove(OB)
if(!container?.mecha && (!container || container.immobilize)) //Unless inside a mecha, brains are rather helpless.
@@ -19,7 +19,7 @@
ADD_TRAIT(src, TRAIT_SILICON_EMOTES_ALLOWED, INNATE_TRAIT)
/mob/living/brain/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents)
- var/obj/item/organ/internal/brain/brain_loc = loc
+ var/obj/item/organ/brain/brain_loc = loc
if(brain_loc && isnull(new_turf) && brain_loc.owner) //we're actively being put inside a new body.
return ..(old_turf, get_turf(brain_loc.owner), same_z_layer, notify_contents)
return ..()
@@ -79,10 +79,10 @@
/mob/living/brain/forceMove(atom/destination)
if(container)
return container.forceMove(destination)
- else if (istype(loc, /obj/item/organ/internal/brain))
- var/obj/item/organ/internal/brain/B = loc
+ else if (istype(loc, /obj/item/organ/brain))
+ var/obj/item/organ/brain/B = loc
B.forceMove(destination)
- else if (istype(destination, /obj/item/organ/internal/brain))
+ else if (istype(destination, /obj/item/organ/brain))
doMove(destination)
else if (istype(destination, /obj/item/mmi))
doMove(destination)
@@ -102,8 +102,8 @@
/mob/living/brain/proc/get_traumas()
. = list()
- if(istype(loc, /obj/item/organ/internal/brain))
- var/obj/item/organ/internal/brain/B = loc
+ if(istype(loc, /obj/item/organ/brain))
+ var/obj/item/organ/brain/B = loc
. = B.traumas
/mob/living/brain/get_policy_keywords()
diff --git a/code/modules/mob/living/brain/brain_cybernetic.dm b/code/modules/mob/living/brain/brain_cybernetic.dm
index d87b6d902837c..c88db6dc1a1a4 100644
--- a/code/modules/mob/living/brain/brain_cybernetic.dm
+++ b/code/modules/mob/living/brain/brain_cybernetic.dm
@@ -1,11 +1,11 @@
-/obj/item/organ/internal/brain/cybernetic
+/obj/item/organ/brain/cybernetic
name = "cybernetic brain"
desc = "A mechanical brain found inside of androids. Not to be confused with a positronic brain."
icon_state = "brain-c"
organ_flags = ORGAN_ROBOTIC | ORGAN_VITAL
failing_desc = "seems to be broken, and will not work without repairs."
-/obj/item/organ/internal/brain/cybernetic/brain_damage_examine()
+/obj/item/organ/brain/cybernetic/brain_damage_examine()
if(suicided)
return span_info("Its circuitry is smoking slightly. They must not have been able to handle the stress of it all.")
if(brainmob && (decoy_override || brainmob.client || brainmob.get_ghost()))
@@ -18,7 +18,7 @@
else
return span_info("This one is completely devoid of life.")
-/obj/item/organ/internal/brain/cybernetic/check_for_repair(obj/item/item, mob/user)
+/obj/item/organ/brain/cybernetic/check_for_repair(obj/item/item, mob/user)
if (item.tool_behaviour == TOOL_MULTITOOL) //attempt to repair the brain
if (brainmob?.health <= HEALTH_THRESHOLD_DEAD) //if the brain is fucked anyway, do nothing
to_chat(user, span_warning("[src] is far too damaged, there's nothing else we can do for it!"))
@@ -48,7 +48,7 @@
return TRUE
return FALSE
-/obj/item/organ/internal/brain/cybernetic/emp_act(severity)
+/obj/item/organ/brain/cybernetic/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm
index e1e445331347f..39ec361ac9db5 100644
--- a/code/modules/mob/living/brain/brain_item.dm
+++ b/code/modules/mob/living/brain/brain_item.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/brain
+/obj/item/organ/brain
name = "brain"
desc = "A piece of juicy meat found in a person's head."
icon_state = "brain"
@@ -45,12 +45,12 @@
/// We got smooth from being washed
var/smooth_brain = FALSE
-/obj/item/organ/internal/brain/Initialize(mapload)
+/obj/item/organ/brain/Initialize(mapload)
. = ..()
// Brain size logic
transform = transform.Scale(brain_size)
-/obj/item/organ/internal/brain/examine()
+/obj/item/organ/brain/examine()
. = ..()
if (smooth_brain)
. += span_notice("All the pesky wrinkles are gone. Now it just needs a good drying...")
@@ -59,7 +59,7 @@
if(brain_size > 1)
. += span_notice("It is bigger than average...")
-/obj/item/organ/internal/brain/mob_insert(mob/living/carbon/brain_owner, special = FALSE, movement_flags)
+/obj/item/organ/brain/mob_insert(mob/living/carbon/brain_owner, special = FALSE, movement_flags)
. = ..()
if(!.)
return
@@ -115,7 +115,7 @@
if(!special && !(brain_owner.living_flags & STOP_OVERLAY_UPDATE_BODY_PARTS))
brain_owner.update_body_parts()
-/obj/item/organ/internal/brain/mob_remove(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/brain/mob_remove(mob/living/carbon/organ_owner, special, movement_flags)
// Delete skillchips first as parent proc sets owner to null, and skillchips need to know the brain's owner.
if(!QDELETED(organ_owner) && length(skillchips))
if(!special)
@@ -139,11 +139,11 @@
organ_owner.update_body_parts()
organ_owner.clear_mood_event("brain_damage")
-/obj/item/organ/internal/brain/update_icon_state()
+/obj/item/organ/brain/update_icon_state()
icon_state = "[initial(icon_state)][smooth_brain ? "-smooth_brain" : ""]"
return ..()
-/obj/item/organ/internal/brain/proc/transfer_identity(mob/living/L)
+/obj/item/organ/brain/proc/transfer_identity(mob/living/L)
name = "[L.name]'s [initial(name)]"
if(brainmob)
if(!decoy_override)
@@ -175,7 +175,7 @@
L.mind.transfer_to(brainmob)
to_chat(brainmob, span_notice("You feel slightly disoriented. That's normal when you're just a brain."))
-/obj/item/organ/internal/brain/attackby(obj/item/item, mob/user, params)
+/obj/item/organ/brain/attackby(obj/item/item, mob/user, params)
user.changeNext_move(CLICK_CD_MELEE)
if(istype(item, /obj/item/borg/apparatus/organ_storage))
@@ -217,7 +217,7 @@
visible_message(span_danger("[user] hits [src] with [item]!"))
to_chat(user, span_danger("You hit [src] with [item]!"))
-/obj/item/organ/internal/brain/proc/check_for_repair(obj/item/item, mob/user)
+/obj/item/organ/brain/proc/check_for_repair(obj/item/item, mob/user)
if(damage && item.is_drainable() && item.reagents.has_reagent(/datum/reagent/medicine/mannitol) && (organ_flags & ORGAN_ORGANIC)) //attempt to heal the brain
if(brainmob?.health <= HEALTH_THRESHOLD_DEAD) //if the brain is fucked anyway, do nothing
to_chat(user, span_warning("[src] is far too damaged, there's nothing else we can do for it!"))
@@ -236,7 +236,7 @@
return TRUE
return FALSE
-/obj/item/organ/internal/brain/examine(mob/user)
+/obj/item/organ/brain/examine(mob/user)
. = ..()
if(length(skillchips))
. += span_info("It has a skillchip embedded in it.")
@@ -247,7 +247,7 @@
. += span_notice("It is bigger than average...")
/// Needed so subtypes can override examine text while still calling parent
-/obj/item/organ/internal/brain/proc/brain_damage_examine()
+/obj/item/organ/brain/proc/brain_damage_examine()
if(suicided)
return span_info("It's started turning slightly grey. They must not have been able to handle the stress of it all.")
if(brainmob && (decoy_override || brainmob.client || brainmob.get_ghost()))
@@ -260,7 +260,7 @@
else
return span_info("This one is completely devoid of life.")
-/obj/item/organ/internal/brain/get_status_appendix(advanced, add_tooltips)
+/obj/item/organ/brain/get_status_appendix(advanced, add_tooltips)
var/list/trauma_text
for(var/datum/brain_trauma/trauma as anything in traumas)
var/trauma_desc = ""
@@ -280,7 +280,7 @@
if(LAZYLEN(trauma_text))
return "Mental trauma: [english_list(trauma_text, and_text = ", and ")]."
-/obj/item/organ/internal/brain/attack(mob/living/carbon/C, mob/user)
+/obj/item/organ/brain/attack(mob/living/carbon/C, mob/user)
if(!istype(C))
return ..()
@@ -289,7 +289,7 @@
if(user.zone_selected != BODY_ZONE_HEAD)
return ..()
- var/target_has_brain = C.get_organ_by_type(/obj/item/organ/internal/brain)
+ var/target_has_brain = C.get_organ_by_type(/obj/item/organ/brain)
if(!target_has_brain && C.is_eyes_covered())
to_chat(user, span_warning("You're going to need to remove [C.p_their()] head cover first!"))
@@ -317,7 +317,7 @@
else
..()
-/obj/item/organ/internal/brain/Destroy() //copypasted from MMIs.
+/obj/item/organ/brain/Destroy() //copypasted from MMIs.
QDEL_NULL(brainmob)
QDEL_LIST(traumas)
@@ -325,13 +325,13 @@
owner?.mind?.set_current(null) //You aren't allowed to return to brains that don't exist
return ..()
-/obj/item/organ/internal/brain/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/brain/on_life(seconds_per_tick, times_fired)
if(damage >= BRAIN_DAMAGE_DEATH) //rip
to_chat(owner, span_userdanger("The last spark of life in your brain fizzles out..."))
owner.investigate_log("has been killed by brain damage.", INVESTIGATE_DEATHS)
owner.death()
-/obj/item/organ/internal/brain/check_damage_thresholds(mob/M)
+/obj/item/organ/brain/check_damage_thresholds(mob/M)
. = ..()
//if we're not more injured than before, return without gambling for a trauma
if(damage <= prev_damage)
@@ -364,9 +364,9 @@
else
return brain_message
-/obj/item/organ/internal/brain/before_organ_replacement(obj/item/organ/replacement)
+/obj/item/organ/brain/before_organ_replacement(obj/item/organ/replacement)
. = ..()
- var/obj/item/organ/internal/brain/replacement_brain = replacement
+ var/obj/item/organ/brain/replacement_brain = replacement
if(!istype(replacement_brain))
return
@@ -403,7 +403,7 @@
remove_trauma_from_traumas(trauma)
replacement_brain.add_trauma_to_traumas(trauma)
-/obj/item/organ/internal/brain/machine_wash(obj/machinery/washing_machine/brainwasher)
+/obj/item/organ/brain/machine_wash(obj/machinery/washing_machine/brainwasher)
. = ..()
if (can_smoothen_out && !smooth_brain)
smooth_brain = TRUE
@@ -415,19 +415,19 @@
else
set_organ_damage(BRAIN_DAMAGE_DEATH)
-/obj/item/organ/internal/brain/zombie
+/obj/item/organ/brain/zombie
name = "zombie brain"
desc = "This glob of green mass can't have much intelligence inside it."
icon_state = "brain-x"
organ_traits = list(TRAIT_CAN_STRIP, TRAIT_PRIMITIVE)
-/obj/item/organ/internal/brain/alien
+/obj/item/organ/brain/alien
name = "alien brain"
desc = "We barely understand the brains of terrestial animals. Who knows what we may find in the brain of such an advanced species?"
icon_state = "brain-x"
organ_traits = list(TRAIT_CAN_STRIP)
-/obj/item/organ/internal/brain/primitive //No like books and stompy metal men
+/obj/item/organ/brain/primitive //No like books and stompy metal men
name = "primitive brain"
desc = "This juicy piece of meat has a clearly underdeveloped frontal lobe."
organ_traits = list(
@@ -440,7 +440,7 @@
TRAIT_BEAST_EMPATHY, // know the way of beast, calm with food
)
-/obj/item/organ/internal/brain/golem
+/obj/item/organ/brain/golem
name = "crystalline matrix"
desc = "This collection of sparkling gems somehow allows a golem to think."
icon_state = "adamantine_resonator"
@@ -449,32 +449,32 @@
organ_flags = ORGAN_MINERAL
organ_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_LITERATE, TRAIT_CAN_STRIP, TRAIT_ROCK_METAMORPHIC)
-/obj/item/organ/internal/brain/lustrous
+/obj/item/organ/brain/lustrous
name = "lustrous brain"
desc = "This is your brain on bluespace dust. Not even once."
icon_state = "random_fly_4"
can_smoothen_out = FALSE
organ_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_LITERATE, TRAIT_CAN_STRIP)
-/obj/item/organ/internal/brain/lustrous/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/brain/lustrous/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
organ_owner.cure_trauma_type(/datum/brain_trauma/special/bluespace_prophet, TRAUMA_RESILIENCE_ABSOLUTE)
organ_owner.RemoveElement(/datum/element/tenacious)
-/obj/item/organ/internal/brain/lustrous/on_mob_insert(mob/living/carbon/organ_owner, special)
+/obj/item/organ/brain/lustrous/on_mob_insert(mob/living/carbon/organ_owner, special)
. = ..()
organ_owner.gain_trauma(/datum/brain_trauma/special/bluespace_prophet, TRAUMA_RESILIENCE_ABSOLUTE)
organ_owner.AddElement(/datum/element/tenacious)
-/obj/item/organ/internal/brain/felinid //A bit smaller than average
+/obj/item/organ/brain/felinid //A bit smaller than average
brain_size = 0.8
-/obj/item/organ/internal/brain/lizard //A bit smaller than average
+/obj/item/organ/brain/lizard //A bit smaller than average
name = "lizard brain"
desc = "This juicy piece of meat has a oversized brain stem and cerebellum, with not much of a limbic system to speak of at all. You would expect it's owner to be pretty cold blooded."
// organ_traits = list(TRAIT_TACKLING_TAILED_DEFENDER) // DOPPLER EDIT REMOVAL
-/obj/item/organ/internal/brain/abductor
+/obj/item/organ/brain/abductor
name = "grey brain"
desc = "A piece of juicy meat found in an ayy lmao's head."
icon_state = "brain-x"
@@ -483,20 +483,20 @@
////////////////////////////////////TRAUMAS////////////////////////////////////////
-/obj/item/organ/internal/brain/proc/has_trauma_type(brain_trauma_type = /datum/brain_trauma, resilience = TRAUMA_RESILIENCE_ABSOLUTE)
+/obj/item/organ/brain/proc/has_trauma_type(brain_trauma_type = /datum/brain_trauma, resilience = TRAUMA_RESILIENCE_ABSOLUTE)
for(var/X in traumas)
var/datum/brain_trauma/BT = X
if(istype(BT, brain_trauma_type) && (BT.resilience <= resilience))
return BT
-/obj/item/organ/internal/brain/proc/get_traumas_type(brain_trauma_type = /datum/brain_trauma, resilience = TRAUMA_RESILIENCE_ABSOLUTE)
+/obj/item/organ/brain/proc/get_traumas_type(brain_trauma_type = /datum/brain_trauma, resilience = TRAUMA_RESILIENCE_ABSOLUTE)
. = list()
for(var/X in traumas)
var/datum/brain_trauma/BT = X
if(istype(BT, brain_trauma_type) && (BT.resilience <= resilience))
. += BT
-/obj/item/organ/internal/brain/proc/can_gain_trauma(datum/brain_trauma/trauma, resilience, natural_gain = FALSE)
+/obj/item/organ/brain/proc/can_gain_trauma(datum/brain_trauma/trauma, resilience, natural_gain = FALSE)
if(!ispath(trauma))
trauma = trauma.type
if(!initial(trauma.can_gain))
@@ -532,19 +532,19 @@
return TRUE
//Proc to use when directly adding a trauma to the brain, so extra args can be given
-/obj/item/organ/internal/brain/proc/gain_trauma(datum/brain_trauma/trauma, resilience, ...)
+/obj/item/organ/brain/proc/gain_trauma(datum/brain_trauma/trauma, resilience, ...)
var/list/arguments = list()
if(args.len > 2)
arguments = args.Copy(3)
. = brain_gain_trauma(trauma, resilience, arguments)
-/obj/item/organ/internal/brain/vv_edit_var(var_name, var_value)
+/obj/item/organ/brain/vv_edit_var(var_name, var_value)
. = ..()
if(var_name == NAMEOF(src, smooth_brain))
update_appearance()
//Direct trauma gaining proc. Necessary to assign a trauma to its brain. Avoid using directly.
-/obj/item/organ/internal/brain/proc/brain_gain_trauma(datum/brain_trauma/trauma, resilience, list/arguments)
+/obj/item/organ/brain/proc/brain_gain_trauma(datum/brain_trauma/trauma, resilience, list/arguments)
if(!can_gain_trauma(trauma, resilience))
return FALSE
@@ -574,18 +574,18 @@
/// Adds the passed trauma instance to our list of traumas and links it to our brain.
/// DOES NOT handle setting up the trauma, that's done by [proc/brain_gain_trauma]!
-/obj/item/organ/internal/brain/proc/add_trauma_to_traumas(datum/brain_trauma/trauma)
+/obj/item/organ/brain/proc/add_trauma_to_traumas(datum/brain_trauma/trauma)
trauma.brain = src
traumas += trauma
/// Removes the passed trauma instance to our list of traumas and links it to our brain
/// DOES NOT handle removing the trauma's effects, that's done by [/datum/brain_trauma/Destroy()]!
-/obj/item/organ/internal/brain/proc/remove_trauma_from_traumas(datum/brain_trauma/trauma)
+/obj/item/organ/brain/proc/remove_trauma_from_traumas(datum/brain_trauma/trauma)
trauma.brain = null
traumas -= trauma
//Add a random trauma of a certain subtype
-/obj/item/organ/internal/brain/proc/gain_trauma_type(brain_trauma_type = /datum/brain_trauma, resilience, natural_gain = FALSE)
+/obj/item/organ/brain/proc/gain_trauma_type(brain_trauma_type = /datum/brain_trauma, resilience, natural_gain = FALSE)
var/list/datum/brain_trauma/possible_traumas = list()
for(var/T in subtypesof(brain_trauma_type))
var/datum/brain_trauma/BT = T
@@ -599,12 +599,12 @@
return gain_trauma(trauma_type, resilience)
//Cure a random trauma of a certain resilience level
-/obj/item/organ/internal/brain/proc/cure_trauma_type(brain_trauma_type = /datum/brain_trauma, resilience = TRAUMA_RESILIENCE_BASIC)
+/obj/item/organ/brain/proc/cure_trauma_type(brain_trauma_type = /datum/brain_trauma, resilience = TRAUMA_RESILIENCE_BASIC)
var/list/traumas = get_traumas_type(brain_trauma_type, resilience)
if(LAZYLEN(traumas))
qdel(pick(traumas))
-/obj/item/organ/internal/brain/proc/cure_all_traumas(resilience = TRAUMA_RESILIENCE_BASIC)
+/obj/item/organ/brain/proc/cure_all_traumas(resilience = TRAUMA_RESILIENCE_BASIC)
var/amount_cured = 0
var/list/traumas = get_traumas_type(resilience = resilience)
for(var/X in traumas)
@@ -612,7 +612,7 @@
amount_cured++
return amount_cured
-/obj/item/organ/internal/brain/apply_organ_damage(damage_amount, maximum = maxHealth, required_organ_flag = NONE)
+/obj/item/organ/brain/apply_organ_damage(damage_amount, maximum = maxHealth, required_organ_flag = NONE)
. = ..()
if(!owner)
return FALSE
@@ -622,7 +622,7 @@
owner.clear_mood_event("brain_damage")
/// This proc lets the mob's brain decide what bodypart to attack with in an unarmed strike.
-/obj/item/organ/internal/brain/proc/get_attacking_limb(mob/living/carbon/human/target)
+/obj/item/organ/brain/proc/get_attacking_limb(mob/living/carbon/human/target)
var/obj/item/bodypart/arm/active_hand = owner.get_active_hand()
if(target.body_position == LYING_DOWN && owner.usable_legs)
var/obj/item/bodypart/found_bodypart = owner.get_bodypart((active_hand.held_index % 2) ? BODY_ZONE_L_LEG : BODY_ZONE_R_LEG)
@@ -630,8 +630,8 @@
return active_hand
/// Brains REALLY like ghosting people. we need special tricks to avoid that, namely removing the old brain with no_id_transfer
-/obj/item/organ/internal/brain/replace_into(mob/living/carbon/new_owner)
- var/obj/item/organ/internal/brain/old_brain = new_owner.get_organ_slot(ORGAN_SLOT_BRAIN)
+/obj/item/organ/brain/replace_into(mob/living/carbon/new_owner)
+ var/obj/item/organ/brain/old_brain = new_owner.get_organ_slot(ORGAN_SLOT_BRAIN)
old_brain.Remove(new_owner, special = TRUE, movement_flags = NO_ID_TRANSFER)
qdel(old_brain)
return Insert(new_owner, special = TRUE, movement_flags = NO_ID_TRANSFER | DELETE_IF_REPLACED)
diff --git a/code/modules/mob/living/brain/death.dm b/code/modules/mob/living/brain/death.dm
index 60487aa0c3599..8166e9f844600 100644
--- a/code/modules/mob/living/brain/death.dm
+++ b/code/modules/mob/living/brain/death.dm
@@ -15,6 +15,6 @@
if(container)
qdel(container)//Gets rid of the MMI if there is one
if(loc)
- if(istype(loc, /obj/item/organ/internal/brain))
+ if(istype(loc, /obj/item/organ/brain))
qdel(loc)//Gets rid of the brain item
..()
diff --git a/code/modules/mob/living/brain/life.dm b/code/modules/mob/living/brain/life.dm
index 7ffe49951ec26..5b016db7fba61 100644
--- a/code/modules/mob/living/brain/life.dm
+++ b/code/modules/mob/living/brain/life.dm
@@ -20,10 +20,10 @@
return
if(stat != DEAD)
death()
- var/obj/item/organ/internal/brain/BR
+ var/obj/item/organ/brain/BR
if(container?.brain)
BR = container.brain
- else if(istype(loc, /obj/item/organ/internal/brain))
+ else if(istype(loc, /obj/item/organ/brain))
BR = loc
if(BR)
BR.set_organ_damage(BRAIN_DAMAGE_DEATH) //beaten to a pulp
diff --git a/code/modules/mob/living/brain/skillchip.dm b/code/modules/mob/living/brain/skillchip.dm
index 2c066c7e73570..4bab004c685dc 100644
--- a/code/modules/mob/living/brain/skillchip.dm
+++ b/code/modules/mob/living/brain/skillchip.dm
@@ -6,7 +6,7 @@
* Arguments:
* * skillchip - The skillchip you'd like to remove.
*/
-/obj/item/organ/internal/brain/proc/remove_skillchip(obj/item/skillchip/skillchip, silent = FALSE)
+/obj/item/organ/brain/proc/remove_skillchip(obj/item/skillchip/skillchip, silent = FALSE)
// Check this skillchip is in the brain.
if(!(skillchip in skillchips))
stack_trace("Attempted to remove skillchip [skillchip] that wasn't in [src] skillchip list.")
@@ -27,7 +27,7 @@
* * skillchip - The skillchip you'd like to implant.
* * force - Whether or not to force the skillchip to be implanted, ignoring any checks.
*/
-/obj/item/organ/internal/brain/proc/implant_skillchip(obj/item/skillchip/skillchip, force = FALSE)
+/obj/item/organ/brain/proc/implant_skillchip(obj/item/skillchip/skillchip, force = FALSE)
// If we're not forcing the implant, so let's do some checks.
if(!force)
// Slot capacity check!
@@ -50,7 +50,7 @@
* Arguments:
* * not_removable - Special override, whether or not to force cloned chips to be non-removable, i.e. to delete on removal.
*/
-/obj/item/organ/internal/brain/proc/clone_skillchip_list(not_removable = FALSE)
+/obj/item/organ/brain/proc/clone_skillchip_list(not_removable = FALSE)
var/list/skillchip_metadata = list()
// Remove and call on_removal proc if successful.
for(var/chip in skillchips)
@@ -76,7 +76,7 @@
* Arguments:
* * silent - Whether to give the user a chat notification with the removal flavour text.
*/
-/obj/item/organ/internal/brain/proc/destroy_all_skillchips(silent = TRUE)
+/obj/item/organ/brain/proc/destroy_all_skillchips(silent = TRUE)
if(!QDELETED(owner))
for(var/chip in skillchips)
var/obj/item/skillchip/skillchip = chip
@@ -86,7 +86,7 @@
/**
* Returns the total maximum skillchip complexity supported by this brain.
*/
-/obj/item/organ/internal/brain/proc/get_max_skillchip_complexity()
+/obj/item/organ/brain/proc/get_max_skillchip_complexity()
if(!QDELETED(owner))
return max_skillchip_complexity + owner.skillchip_complexity_modifier
@@ -95,7 +95,7 @@
/**
* Returns the total current skillchip complexity used in this brain.
*/
-/obj/item/organ/internal/brain/proc/get_used_skillchip_complexity()
+/obj/item/organ/brain/proc/get_used_skillchip_complexity()
var/complexity_tally = 0
for(var/chip in skillchips)
@@ -111,13 +111,13 @@
/**
* Returns the total maximum skillchip slot capacity supported by this brain.
*/
-/obj/item/organ/internal/brain/proc/get_max_skillchip_slots()
+/obj/item/organ/brain/proc/get_max_skillchip_slots()
return max_skillchip_slots
/**
* Returns the total current skillchip slot capacity used in this brain.
*/
-/obj/item/organ/internal/brain/proc/get_used_skillchip_slots()
+/obj/item/organ/brain/proc/get_used_skillchip_slots()
var/slot_tally = 0
for(var/chip in skillchips)
@@ -130,7 +130,7 @@
/**
* Deactivates all chips currently in the brain.
*/
-/obj/item/organ/internal/brain/proc/activate_skillchip_failsafe(silent = TRUE)
+/obj/item/organ/brain/proc/activate_skillchip_failsafe(silent = TRUE)
if(QDELETED(owner))
return
@@ -154,7 +154,7 @@
to_chat(owner, span_warning("Unusual brain biology detected during regeneration. Failsafe procedure engaged. [chip_tally] skillchips have been deactivated."))
/// Disables or re-enables any extra skillchips after skillchip limit changes.
-/obj/item/organ/internal/brain/proc/update_skillchips()
+/obj/item/organ/brain/proc/update_skillchips()
var/limit = get_max_skillchip_complexity()
var/dt = limit - get_used_skillchip_complexity()
diff --git a/code/modules/mob/living/carbon/alien/adult/adult.dm b/code/modules/mob/living/carbon/alien/adult/adult.dm
index c53491e0ce782..d2c41e61a12fb 100644
--- a/code/modules/mob/living/carbon/alien/adult/adult.dm
+++ b/code/modules/mob/living/carbon/alien/adult/adult.dm
@@ -37,7 +37,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list(
AddElement(/datum/element/strippable, GLOB.strippable_alien_humanoid_items)
/mob/living/carbon/alien/adult/create_internal_organs()
- organs += new /obj/item/organ/internal/stomach/alien()
+ organs += new /obj/item/organ/stomach/alien()
return ..()
/mob/living/carbon/alien/adult/cuff_resist(obj/item/I)
@@ -127,7 +127,7 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list(
if(!can_consume(lucky_winner))
return TRUE
- var/obj/item/organ/internal/stomach/alien/melting_pot = get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/alien/melting_pot = get_organ_slot(ORGAN_SLOT_STOMACH)
if(!istype(melting_pot))
visible_message(span_clown("[src] can't seem to consume [lucky_winner]!"), \
span_alien("You feel a pain in your... chest? You can't get [lucky_winner] down."))
diff --git a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm
index 0b760c0f2e7b9..bfdcd1a5fd2ea 100644
--- a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm
+++ b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm
@@ -14,7 +14,6 @@ Doesn't work on other aliens/AI.*/
button_icon = 'icons/mob/actions/actions_xeno.dmi'
button_icon_state = "spell_default"
check_flags = AB_CHECK_IMMOBILE | AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
- melee_cooldown_time = 0 SECONDS
/// How much plasma this action uses.
var/plasma_cost = 0
@@ -367,7 +366,7 @@ Doesn't work on other aliens/AI.*/
if(!iscarbon(owner))
return
var/mob/living/carbon/alien/adult/alieninated_owner = owner
- var/obj/item/organ/internal/stomach/alien/melting_pot = alieninated_owner.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/alien/melting_pot = alieninated_owner.get_organ_slot(ORGAN_SLOT_STOMACH)
if(!melting_pot)
owner.visible_message(span_clown("[src] gags, and spits up a bit of purple liquid. Ewwww."), \
span_alien("You feel a pain in your... chest? There's nothing there there's nothing there no no n-"))
@@ -384,14 +383,14 @@ Doesn't work on other aliens/AI.*/
/// Gets the plasma level of this carbon's plasma vessel, or -1 if they don't have one
/mob/living/carbon/proc/getPlasma()
- var/obj/item/organ/internal/alien/plasmavessel/vessel = get_organ_by_type(/obj/item/organ/internal/alien/plasmavessel)
+ var/obj/item/organ/alien/plasmavessel/vessel = get_organ_by_type(/obj/item/organ/alien/plasmavessel)
if(!vessel)
return -1
return vessel.stored_plasma
/// Adjusts the plasma level of the carbon's plasma vessel if they have one
/mob/living/carbon/proc/adjustPlasma(amount)
- var/obj/item/organ/internal/alien/plasmavessel/vessel = get_organ_by_type(/obj/item/organ/internal/alien/plasmavessel)
+ var/obj/item/organ/alien/plasmavessel/vessel = get_organ_by_type(/obj/item/organ/alien/plasmavessel)
if(!vessel)
return FALSE
vessel.stored_plasma = max(vessel.stored_plasma + amount,0)
diff --git a/code/modules/mob/living/carbon/alien/adult/caste/drone.dm b/code/modules/mob/living/carbon/alien/adult/caste/drone.dm
index ff208baabd229..c238f1013ab29 100644
--- a/code/modules/mob/living/carbon/alien/adult/caste/drone.dm
+++ b/code/modules/mob/living/carbon/alien/adult/caste/drone.dm
@@ -10,9 +10,9 @@
return ..()
/mob/living/carbon/alien/adult/drone/create_internal_organs()
- organs += new /obj/item/organ/internal/alien/plasmavessel/large
- organs += new /obj/item/organ/internal/alien/resinspinner
- organs += new /obj/item/organ/internal/alien/acid
+ organs += new /obj/item/organ/alien/plasmavessel/large
+ organs += new /obj/item/organ/alien/resinspinner
+ organs += new /obj/item/organ/alien/acid
return ..()
/datum/action/cooldown/alien/evolve_to_praetorian
@@ -33,7 +33,7 @@
return FALSE
var/mob/living/carbon/alien/adult/royal/evolver = owner
- var/obj/item/organ/internal/alien/hivenode/node = evolver.get_organ_by_type(/obj/item/organ/internal/alien/hivenode)
+ var/obj/item/organ/alien/hivenode/node = evolver.get_organ_by_type(/obj/item/organ/alien/hivenode)
// Players are Murphy's Law. We may not expect
// there to ever be a living xeno with no hivenode,
// but they _WILL_ make it happen.
diff --git a/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm b/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm
index 51d9a3bce1b7a..3bfbe7961648a 100644
--- a/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm
+++ b/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm
@@ -10,7 +10,7 @@
var/pounce_speed = 2
/mob/living/carbon/alien/adult/hunter/create_internal_organs()
- organs += new /obj/item/organ/internal/alien/plasmavessel/small
+ organs += new /obj/item/organ/alien/plasmavessel/small
..()
//Hunter verbs
diff --git a/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm b/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm
index 8fa142a38f05f..473cdfafec21d 100644
--- a/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm
+++ b/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm
@@ -19,10 +19,10 @@
return ..()
/mob/living/carbon/alien/adult/royal/praetorian/create_internal_organs()
- organs += new /obj/item/organ/internal/alien/plasmavessel/large
- organs += new /obj/item/organ/internal/alien/resinspinner
- organs += new /obj/item/organ/internal/alien/acid
- organs += new /obj/item/organ/internal/alien/neurotoxin
+ organs += new /obj/item/organ/alien/plasmavessel/large
+ organs += new /obj/item/organ/alien/resinspinner
+ organs += new /obj/item/organ/alien/acid
+ organs += new /obj/item/organ/alien/neurotoxin
return ..()
/datum/action/cooldown/alien/evolve_to_queen
@@ -43,7 +43,7 @@
return FALSE
var/mob/living/carbon/alien/adult/royal/evolver = owner
- var/obj/item/organ/internal/alien/hivenode/node = evolver.get_organ_by_type(/obj/item/organ/internal/alien/hivenode)
+ var/obj/item/organ/alien/hivenode/node = evolver.get_organ_by_type(/obj/item/organ/alien/hivenode)
if(!node || node.recent_queen_death)
return FALSE
diff --git a/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm
index bef621905f442..2560522c405f9 100644
--- a/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm
+++ b/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm
@@ -11,7 +11,7 @@
return ..()
/mob/living/carbon/alien/adult/sentinel/create_internal_organs()
- organs += new /obj/item/organ/internal/alien/plasmavessel
- organs += new /obj/item/organ/internal/alien/acid
- organs += new /obj/item/organ/internal/alien/neurotoxin
+ organs += new /obj/item/organ/alien/plasmavessel
+ organs += new /obj/item/organ/alien/acid
+ organs += new /obj/item/organ/alien/neurotoxin
..()
diff --git a/code/modules/mob/living/carbon/alien/adult/death.dm b/code/modules/mob/living/carbon/alien/adult/death.dm
index ce99343ea2c9a..d71d466089cad 100644
--- a/code/modules/mob/living/carbon/alien/adult/death.dm
+++ b/code/modules/mob/living/carbon/alien/adult/death.dm
@@ -15,7 +15,7 @@
for(var/mob/living/carbon/C in GLOB.alive_mob_list)
if(C == src) //Make sure not to proc it on ourselves.
continue
- var/obj/item/organ/internal/alien/hivenode/node = C.get_organ_by_type(/obj/item/organ/internal/alien/hivenode)
+ var/obj/item/organ/alien/hivenode/node = C.get_organ_by_type(/obj/item/organ/alien/hivenode)
if(istype(node)) // just in case someone would ever add a diffirent node to hivenode slot
node.queen_death()
diff --git a/code/modules/mob/living/carbon/alien/adult/queen.dm b/code/modules/mob/living/carbon/alien/adult/queen.dm
index a925b4c5460ea..8cbd55719774c 100644
--- a/code/modules/mob/living/carbon/alien/adult/queen.dm
+++ b/code/modules/mob/living/carbon/alien/adult/queen.dm
@@ -65,11 +65,11 @@
return ..()
/mob/living/carbon/alien/adult/royal/queen/create_internal_organs()
- organs += new /obj/item/organ/internal/alien/plasmavessel/large/queen
- organs += new /obj/item/organ/internal/alien/resinspinner
- organs += new /obj/item/organ/internal/alien/acid
- organs += new /obj/item/organ/internal/alien/neurotoxin
- organs += new /obj/item/organ/internal/alien/eggsac
+ organs += new /obj/item/organ/alien/plasmavessel/large/queen
+ organs += new /obj/item/organ/alien/resinspinner
+ organs += new /obj/item/organ/alien/acid
+ organs += new /obj/item/organ/alien/neurotoxin
+ organs += new /obj/item/organ/alien/eggsac
return ..()
//Queen verbs
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index dcf00435fba91..663001c2cc7b0 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -53,12 +53,12 @@
CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_has_trait), src, TRAIT_ADVANCEDTOOLUSER))
/mob/living/carbon/alien/create_internal_organs()
- organs += new /obj/item/organ/internal/brain/alien
- organs += new /obj/item/organ/internal/alien/hivenode
- organs += new /obj/item/organ/internal/tongue/alien
- organs += new /obj/item/organ/internal/eyes/alien
- organs += new /obj/item/organ/internal/liver/alien
- organs += new /obj/item/organ/internal/ears
+ organs += new /obj/item/organ/brain/alien
+ organs += new /obj/item/organ/alien/hivenode
+ organs += new /obj/item/organ/tongue/alien
+ organs += new /obj/item/organ/eyes/alien
+ organs += new /obj/item/organ/liver/alien
+ organs += new /obj/item/organ/ears
..()
/mob/living/carbon/alien/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) // beepsky won't hunt aliums
@@ -100,7 +100,7 @@ Des: Gives the client of the alien an image on each infected mob.
for (var/i in GLOB.mob_living_list)
var/mob/living/L = i
if(HAS_TRAIT(L, TRAIT_XENO_HOST))
- var/obj/item/organ/internal/body_egg/alien_embryo/A = L.get_organ_by_type(/obj/item/organ/internal/body_egg/alien_embryo)
+ var/obj/item/organ/body_egg/alien_embryo/A = L.get_organ_by_type(/obj/item/organ/body_egg/alien_embryo)
if(A)
var/I = image('icons/mob/nonhuman-player/alien.dmi', loc = L, icon_state = "infected[A.stage]")
client.images += I
@@ -145,8 +145,8 @@ Des: Removes all infected images from the alien.
mind.name = new_xeno.real_name
mind.transfer_to(new_xeno)
- var/obj/item/organ/internal/stomach/alien/melting_pot = get_organ_slot(ORGAN_SLOT_STOMACH)
- var/obj/item/organ/internal/stomach/alien/frying_pan = new_xeno.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/alien/melting_pot = get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/alien/frying_pan = new_xeno.get_organ_slot(ORGAN_SLOT_STOMACH)
if(istype(melting_pot) && istype(frying_pan))
for (var/atom/movable/poor_sod as anything in melting_pot.stomach_contents)
frying_pan.consume_thing(poor_sod)
diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm
index 0217a99fa04be..4aeed5c2b9def 100644
--- a/code/modules/mob/living/carbon/alien/alien_defense.dm
+++ b/code/modules/mob/living/carbon/alien/alien_defense.dm
@@ -66,12 +66,15 @@ In all, this is a lot like the monkey code. /N
var/obj/item/bodypart/affecting = get_bodypart(get_random_valid_zone(user.zone_selected))
apply_damage(rand(1, 3), BRUTE, affecting)
+/mob/living/carbon/alien/create_splatter(splatter_dir)
+ new /obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter(get_turf(src), splatter_dir)
+
/mob/living/carbon/alien/ex_act(severity, target, origin)
. = ..()
if(!. || QDELETED(src))
return FALSE
- var/obj/item/organ/internal/ears/ears = get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = get_organ_slot(ORGAN_SLOT_EARS)
switch (severity)
if (EXPLODE_DEVASTATE)
gib(DROP_ALL_REMAINS)
diff --git a/code/modules/mob/living/carbon/alien/alien_say.dm b/code/modules/mob/living/carbon/alien/alien_say.dm
index 4cfdc265abfaf..29f55300d9114 100644
--- a/code/modules/mob/living/carbon/alien/alien_say.dm
+++ b/code/modules/mob/living/carbon/alien/alien_say.dm
@@ -20,6 +20,6 @@
..(message, shown_name, TRUE)
/mob/living/carbon/hivecheck()
- var/obj/item/organ/internal/alien/hivenode/N = get_organ_by_type(/obj/item/organ/internal/alien/hivenode)
+ var/obj/item/organ/alien/hivenode/N = get_organ_by_type(/obj/item/organ/alien/hivenode)
if(N && !N.recent_queen_death) //Mob has alien hive node and is not under the dead queen special effect.
return TRUE
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index f4159813ed9bc..39915a0384d5d 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -40,7 +40,7 @@
return ..()
/mob/living/carbon/alien/larva/create_internal_organs()
- organs += new /obj/item/organ/internal/alien/plasmavessel/small/tiny
+ organs += new /obj/item/organ/alien/plasmavessel/small/tiny
..()
//This needs to be fixed
diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm
index 52f7b8dfc4789..a8de80b705827 100644
--- a/code/modules/mob/living/carbon/alien/larva/life.dm
+++ b/code/modules/mob/living/carbon/alien/larva/life.dm
@@ -14,7 +14,7 @@
if(HAS_TRAIT(src, TRAIT_GODMODE))
return
if(stat != DEAD)
- if(health <= -maxHealth || !get_organ_by_type(/obj/item/organ/internal/brain))
+ if(health <= -maxHealth || !get_organ_by_type(/obj/item/organ/brain))
death()
return
if((HAS_TRAIT(src, TRAIT_KNOCKEDOUT)))
diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm
index ac9fd81cf976b..7db1bb103cc94 100644
--- a/code/modules/mob/living/carbon/alien/organs.dm
+++ b/code/modules/mob/living/carbon/alien/organs.dm
@@ -1,14 +1,14 @@
-/obj/item/organ/internal/alien
+/obj/item/organ/alien
icon_state = "acid"
- food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/toxin/acid = 10)
+ food_reagents = list(/datum/reagent/consumable/nutriment/organ_tissue = 5, /datum/reagent/toxin/acid = 10)
-/obj/item/organ/internal/alien/plasmavessel
+/obj/item/organ/alien/plasmavessel
name = "plasma vessel"
icon_state = "plasma"
w_class = WEIGHT_CLASS_NORMAL
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_XENO_PLASMAVESSEL
- food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/toxin/plasma = 10)
+ food_reagents = list(/datum/reagent/consumable/nutriment/organ_tissue = 5, /datum/reagent/toxin/plasma = 10)
actions_types = list(
/datum/action/cooldown/alien/make_structure/plant_weeds,
/datum/action/cooldown/alien/transfer,
@@ -23,7 +23,7 @@
/// The rate this organ regenerates plasma at per second.
var/plasma_rate = 5
-/obj/item/organ/internal/alien/plasmavessel/large
+/obj/item/organ/alien/plasmavessel/large
name = "large plasma vessel"
icon_state = "plasma_large"
w_class = WEIGHT_CLASS_BULKY
@@ -31,10 +31,10 @@
max_plasma = 500
plasma_rate = 7.5
-/obj/item/organ/internal/alien/plasmavessel/large/queen
+/obj/item/organ/alien/plasmavessel/large/queen
plasma_rate = 10
-/obj/item/organ/internal/alien/plasmavessel/small
+/obj/item/organ/alien/plasmavessel/small
name = "small plasma vessel"
icon_state = "plasma_small"
w_class = WEIGHT_CLASS_SMALL
@@ -42,14 +42,14 @@
max_plasma = 150
plasma_rate = 2.5
-/obj/item/organ/internal/alien/plasmavessel/small/tiny
+/obj/item/organ/alien/plasmavessel/small/tiny
name = "tiny plasma vessel"
icon_state = "plasma_tiny"
w_class = WEIGHT_CLASS_TINY
max_plasma = 100
actions_types = list(/datum/action/cooldown/alien/transfer)
-/obj/item/organ/internal/alien/plasmavessel/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/alien/plasmavessel/on_life(seconds_per_tick, times_fired)
var/delta_time = DELTA_WORLD_TIME(SSmobs)
//Instantly healing to max health in a single tick would be silly. If it takes 8 seconds to fire, then something's fucked.
var/delta_time_capped = min(delta_time, 8)
@@ -68,27 +68,27 @@
else
owner.adjustPlasma(0.1 * plasma_rate * delta_time)
-/obj/item/organ/internal/alien/plasmavessel/on_mob_insert(mob/living/carbon/organ_owner)
+/obj/item/organ/alien/plasmavessel/on_mob_insert(mob/living/carbon/organ_owner)
. = ..()
if(isalien(organ_owner))
var/mob/living/carbon/alien/target_alien = organ_owner
target_alien.updatePlasmaDisplay()
RegisterSignal(organ_owner, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item))
-/obj/item/organ/internal/alien/plasmavessel/on_mob_remove(mob/living/carbon/organ_owner)
+/obj/item/organ/alien/plasmavessel/on_mob_remove(mob/living/carbon/organ_owner)
. = ..()
if(isalien(organ_owner))
var/mob/living/carbon/alien/organ_owner_alien = organ_owner
organ_owner_alien.updatePlasmaDisplay()
UnregisterSignal(organ_owner, COMSIG_MOB_GET_STATUS_TAB_ITEMS)
-/obj/item/organ/internal/alien/plasmavessel/proc/get_status_tab_item(mob/living/carbon/source, list/items)
+/obj/item/organ/alien/plasmavessel/proc/get_status_tab_item(mob/living/carbon/source, list/items)
SIGNAL_HANDLER
items += "Plasma Stored: [stored_plasma]/[max_plasma]"
#define QUEEN_DEATH_DEBUFF_DURATION 2400
-/obj/item/organ/internal/alien/hivenode
+/obj/item/organ/alien/hivenode
name = "hive node"
icon_state = "hivenode"
zone = BODY_ZONE_HEAD
@@ -99,17 +99,17 @@
/// Indicates if the queen died recently, aliens are heavily weakened while this is active.
var/recent_queen_death = FALSE
-/obj/item/organ/internal/alien/hivenode/on_mob_insert(mob/living/carbon/organ_owner)
+/obj/item/organ/alien/hivenode/on_mob_insert(mob/living/carbon/organ_owner)
. = ..()
organ_owner.faction |= ROLE_ALIEN
-/obj/item/organ/internal/alien/hivenode/on_mob_remove(mob/living/carbon/organ_owner, special = FALSE)
+/obj/item/organ/alien/hivenode/on_mob_remove(mob/living/carbon/organ_owner, special = FALSE)
if(organ_owner)
organ_owner.faction -= ROLE_ALIEN
return ..()
//When the alien queen dies, all aliens suffer a penalty as punishment for failing to protect her.
-/obj/item/organ/internal/alien/hivenode/proc/queen_death()
+/obj/item/organ/alien/hivenode/proc/queen_death()
if(!owner || owner.stat == DEAD)
return
if(isalien(owner)) //Different effects for aliens than humans
@@ -132,7 +132,7 @@
addtimer(CALLBACK(src, PROC_REF(clear_queen_death)), QUEEN_DEATH_DEBUFF_DURATION)
-/obj/item/organ/internal/alien/hivenode/proc/clear_queen_death()
+/obj/item/organ/alien/hivenode/proc/clear_queen_death()
if(QDELETED(src)) //In case the node is deleted
return
recent_queen_death = FALSE
@@ -143,7 +143,7 @@
#undef QUEEN_DEATH_DEBUFF_DURATION
-/obj/item/organ/internal/alien/resinspinner
+/obj/item/organ/alien/resinspinner
name = "resin spinner"
icon_state = "spinner-x"
zone = BODY_ZONE_PRECISE_MOUTH
@@ -151,7 +151,7 @@
actions_types = list(/datum/action/cooldown/alien/make_structure/resin)
-/obj/item/organ/internal/alien/acid
+/obj/item/organ/alien/acid
name = "acid gland"
icon_state = "acid"
zone = BODY_ZONE_PRECISE_MOUTH
@@ -159,7 +159,7 @@
actions_types = list(/datum/action/cooldown/alien/acid/corrosion)
-/obj/item/organ/internal/alien/neurotoxin
+/obj/item/organ/alien/neurotoxin
name = "neurotoxin gland"
icon_state = "neurotox"
zone = BODY_ZONE_PRECISE_MOUTH
@@ -167,7 +167,7 @@
actions_types = list(/datum/action/cooldown/alien/acid/neurotoxin)
-/obj/item/organ/internal/alien/eggsac
+/obj/item/organ/alien/eggsac
name = "egg sac"
icon_state = "eggsac"
zone = BODY_ZONE_PRECISE_GROIN
@@ -176,18 +176,18 @@
actions_types = list(/datum/action/cooldown/alien/make_structure/lay_egg)
/// The stomach that lets aliens eat people/things
-/obj/item/organ/internal/stomach/alien
+/obj/item/organ/stomach/alien
name = "alien stomach"
icon_state = "stomach-x"
w_class = WEIGHT_CLASS_BULKY
actions_types = list(/datum/action/cooldown/alien/regurgitate)
var/list/atom/movable/stomach_contents = list()
-/obj/item/organ/internal/stomach/alien/Destroy()
+/obj/item/organ/stomach/alien/Destroy()
QDEL_LIST(stomach_contents)
return ..()
-/obj/item/organ/internal/stomach/alien/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/stomach/alien/on_life(seconds_per_tick, times_fired)
. = ..()
if(!owner || SSmobs.times_fired % 3 != 0)
return
@@ -198,7 +198,7 @@
continue
thing.acid_act(75, 10)
-/obj/item/organ/internal/stomach/alien/proc/consume_thing(atom/movable/thing)
+/obj/item/organ/stomach/alien/proc/consume_thing(atom/movable/thing)
RegisterSignal(thing, COMSIG_MOVABLE_MOVED, PROC_REF(content_moved))
RegisterSignal(thing, COMSIG_QDELETING, PROC_REF(content_deleted))
if(isliving(thing))
@@ -206,30 +206,30 @@
stomach_contents += thing
thing.forceMove(owner || src) // We assert that if we have no owner, we will not be nullspaced
-/obj/item/organ/internal/stomach/alien/proc/content_died(atom/movable/source)
+/obj/item/organ/stomach/alien/proc/content_died(atom/movable/source)
SIGNAL_HANDLER
qdel(source)
-/obj/item/organ/internal/stomach/alien/proc/content_deleted(atom/movable/source)
+/obj/item/organ/stomach/alien/proc/content_deleted(atom/movable/source)
SIGNAL_HANDLER
stomach_contents -= source
-/obj/item/organ/internal/stomach/alien/proc/content_moved(atom/movable/source)
+/obj/item/organ/stomach/alien/proc/content_moved(atom/movable/source)
SIGNAL_HANDLER
if(source.loc == src || source.loc == owner) // not in us? out da list then
return
stomach_contents -= source
UnregisterSignal(source, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_DEATH, COMSIG_QDELETING))
-/obj/item/organ/internal/stomach/alien/mob_insert(mob/living/carbon/stomach_owner, special, movement_flags)
+/obj/item/organ/stomach/alien/mob_insert(mob/living/carbon/stomach_owner, special, movement_flags)
RegisterSignal(stomach_owner, COMSIG_ATOM_RELAYMOVE, PROC_REF(something_moved))
return ..()
-/obj/item/organ/internal/stomach/alien/mob_remove(mob/living/carbon/stomach_owner, special, movement_flags)
+/obj/item/organ/stomach/alien/mob_remove(mob/living/carbon/stomach_owner, special, movement_flags)
UnregisterSignal(stomach_owner, COMSIG_ATOM_RELAYMOVE)
return ..()
-/obj/item/organ/internal/stomach/alien/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change)
+/obj/item/organ/stomach/alien/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change)
. = ..()
if(loc == null && owner)
for(var/atom/movable/thing as anything in contents)
@@ -238,12 +238,12 @@
for(var/atom/movable/thing as anything in contents)
thing.forceMove(src)
-/obj/item/organ/internal/stomach/alien/proc/something_moved(mob/living/source, mob/living/user, direction)
+/obj/item/organ/stomach/alien/proc/something_moved(mob/living/source, mob/living/user, direction)
SIGNAL_HANDLER
relaymove(user, direction)
return COMSIG_BLOCK_RELAYMOVE
-/obj/item/organ/internal/stomach/alien/relaymove(mob/living/user, direction)
+/obj/item/organ/stomach/alien/relaymove(mob/living/user, direction)
if(!(user in src.stomach_contents))
return
if(!prob(40))
@@ -327,7 +327,7 @@
owner.gib(DROP_ALL_REMAINS)
qdel(src)
-/obj/item/organ/internal/stomach/alien/proc/eject_stomach(list/turf/targets, spit_range, content_speed, particle_delay, particle_count=4)
+/obj/item/organ/stomach/alien/proc/eject_stomach(list/turf/targets, spit_range, content_speed, particle_delay, particle_count=4)
var/atom/spit_as = owner || src
// Throw out the stuff in our stomach
for(var/atom/movable/thing as anything in stomach_contents)
diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
index f4b0fffb7a085..b70139cee0531 100644
--- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
+++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
@@ -1,10 +1,10 @@
// This is to replace the previous datum/disease/alien_embryo for slightly improved handling and maintainability
// It functions almost identically (see code/datums/diseases/alien_embryo.dm)
-/obj/item/organ/internal/body_egg/alien_embryo
+/obj/item/organ/body_egg/alien_embryo
name = "alien embryo"
icon = 'icons/mob/nonhuman-player/alien.dmi'
icon_state = "larva0_dead"
- food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/toxin/acid = 10)
+ food_reagents = list(/datum/reagent/consumable/nutriment/organ_tissue = 5, /datum/reagent/toxin/acid = 10)
///What stage of growth the embryo is at. Developed embryos give the host symptoms suggesting that an embryo is inside them.
var/stage = 0
/// Are we bursting out of the poor sucker who's the xeno mom?
@@ -12,11 +12,11 @@
/// How long does it take to advance one stage? Growth time * 5 = how long till we make a Larva!
var/growth_time = 60 SECONDS
-/obj/item/organ/internal/body_egg/alien_embryo/Initialize(mapload)
+/obj/item/organ/body_egg/alien_embryo/Initialize(mapload)
. = ..()
advance_embryo_stage()
-/obj/item/organ/internal/body_egg/alien_embryo/on_find(mob/living/finder)
+/obj/item/organ/body_egg/alien_embryo/on_find(mob/living/finder)
..()
if(stage < 5)
to_chat(finder, span_notice("It's small and weak, barely the size of a foetus."))
@@ -25,7 +25,7 @@
if(prob(10))
attempt_grow(gib_on_success = FALSE)
-/obj/item/organ/internal/body_egg/alien_embryo/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/body_egg/alien_embryo/on_life(seconds_per_tick, times_fired)
. = ..()
if(QDELETED(src) || QDELETED(owner))
return
@@ -58,7 +58,7 @@
owner.adjustToxLoss(5 * seconds_per_tick) // Why is this [TOX]?
/// Controls Xenomorph Embryo growth. If embryo is fully grown (or overgrown), stop the proc. If not, increase the stage by one and if it's not fully grown (stage 6), add a timer to do this proc again after however long the growth time variable is.
-/obj/item/organ/internal/body_egg/alien_embryo/proc/advance_embryo_stage()
+/obj/item/organ/body_egg/alien_embryo/proc/advance_embryo_stage()
if(stage >= 6)
return
stage++
@@ -73,7 +73,7 @@
addtimer(CALLBACK(src, PROC_REF(advance_embryo_stage)), growth_time*slowdown)
-/obj/item/organ/internal/body_egg/alien_embryo/egg_process()
+/obj/item/organ/body_egg/alien_embryo/egg_process()
if(stage == 6 && prob(50))
for(var/datum/surgery/operations as anything in owner.surgeries)
if(operations.location != BODY_ZONE_CHEST)
@@ -85,7 +85,7 @@
attempt_grow()
/// Attempt to burst an alien outside of the host, getting a ghost to play as the xeno.
-/obj/item/organ/internal/body_egg/alien_embryo/proc/attempt_grow(gib_on_success = TRUE)
+/obj/item/organ/body_egg/alien_embryo/proc/attempt_grow(gib_on_success = TRUE)
if(QDELETED(owner) || bursting)
return
@@ -104,7 +104,7 @@
on_poll_concluded(gib_on_success, chosen_one)
/// Poll has concluded with a suitor
-/obj/item/organ/internal/body_egg/alien_embryo/proc/on_poll_concluded(gib_on_success, mob/dead/observer/ghost)
+/obj/item/organ/body_egg/alien_embryo/proc/on_poll_concluded(gib_on_success, mob/dead/observer/ghost)
if(QDELETED(owner))
return
@@ -150,7 +150,7 @@
Proc: AddInfectionImages(C)
Des: Adds the infection image to all aliens for this embryo
----------------------------------------*/
-/obj/item/organ/internal/body_egg/alien_embryo/AddInfectionImages()
+/obj/item/organ/body_egg/alien_embryo/AddInfectionImages()
for(var/mob/living/carbon/alien/alien in GLOB.player_list)
var/I = image('icons/mob/nonhuman-player/alien.dmi', loc = owner, icon_state = "infected[stage]")
alien.client?.images += I
@@ -159,7 +159,7 @@ Des: Adds the infection image to all aliens for this embryo
Proc: RemoveInfectionImage(C)
Des: Removes all images from the mob infected by this embryo
----------------------------------------*/
-/obj/item/organ/internal/body_egg/alien_embryo/RemoveInfectionImages()
+/obj/item/organ/body_egg/alien_embryo/RemoveInfectionImages()
for(var/mob/living/carbon/alien/alien in GLOB.player_list)
for(var/image/I in alien.client?.images)
var/searchfor = "infected"
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index 597769f11f271..532fa10727ecd 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -213,8 +213,8 @@
worn_icon_state = "[base_icon_state]_impregnated"
var/obj/item/bodypart/chest/LC = target.get_bodypart(BODY_ZONE_CHEST)
- if((!LC || IS_ORGANIC_LIMB(LC)) && !target.get_organ_by_type(/obj/item/organ/internal/body_egg/alien_embryo))
- new /obj/item/organ/internal/body_egg/alien_embryo(target)
+ if((!LC || IS_ORGANIC_LIMB(LC)) && !target.get_organ_by_type(/obj/item/organ/body_egg/alien_embryo))
+ new /obj/item/organ/body_egg/alien_embryo(target)
target.log_message("was impregnated by a facehugger", LOG_GAME)
target.log_message("was impregnated by a facehugger", LOG_VICTIM, log_globally = FALSE)
if(target.stat != DEAD && istype(target.buckled, /obj/structure/bed/nest)) //Handles toggling the nest sustenance status effect if the user was already buckled to a nest.
@@ -257,7 +257,7 @@
AddComponent(/datum/component/knockoff, knockoff_chance = 40, target_zones = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST), slots_knockoffable = slot_flags)
/obj/item/clothing/mask/facehugger/allow_attack_hand_drop(mob/living/carbon/human/user)
- if(!real || sterile || user.get_organ_by_type(/obj/item/organ/internal/body_egg/alien_embryo))
+ if(!real || sterile || user.get_organ_by_type(/obj/item/organ/body_egg/alien_embryo))
return ..()
if(istype(user) && ishuman(loc) && stat != DEAD)
if(user == loc && user.get_item_by_slot(slot_flags) == src)
@@ -269,7 +269,7 @@
var/mob/living/carbon/human/wearer = loc
if(!istype(wearer) || user != wearer)
return
- if(!real || sterile || user.get_organ_by_type(/obj/item/organ/internal/body_egg/alien_embryo))
+ if(!real || sterile || user.get_organ_by_type(/obj/item/organ/body_egg/alien_embryo))
return ..()
if(wearer.get_item_by_slot(slot_flags) == src && stat != DEAD)
to_chat(user, span_userdanger("[src] is latched on too tight! Get help or wait for it to let go!"))
@@ -281,7 +281,7 @@
return FALSE
if(M.stat == DEAD)
return FALSE
- if(M.get_organ_by_type(/obj/item/organ/internal/alien/hivenode))
+ if(M.get_organ_by_type(/obj/item/organ/alien/hivenode))
return FALSE
var/mob/living/carbon/C = M
if(ishuman(C) && !(C.dna.species.no_equip_flags & ITEM_SLOT_MASK))
@@ -316,6 +316,7 @@
sterile = TRUE
tint = 3 //Makes it feel more authentic when it latches on
slowdown = 0
+ integrity_failure = 0
/obj/item/clothing/mask/facehugger/toy/Die()
return
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index a684621f3189b..cb5fd186bfef7 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -202,7 +202,7 @@
log_message("has thrown [thrown_thing] [power_throw_text]", LOG_ATTACK)
var/extra_throw_range = HAS_TRAIT(src, TRAIT_THROWINGARM) ? 2 : 0
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
if(istype(potential_spine))
extra_throw_range += potential_spine.added_throw_range
@@ -244,7 +244,7 @@
/mob/living/carbon/on_fall()
. = ..()
- loc.handle_fall(src)//it's loc so it doesn't call the mob's handle_fall which does nothing
+ loc?.handle_fall(src)//it's loc so it doesn't call the mob's handle_fall which does nothing
/mob/living/carbon/resist_buckle()
if(!HAS_TRAIT(src, TRAIT_RESTRAINED))
@@ -596,7 +596,7 @@
lighting_cutoff = initial(lighting_cutoff)
lighting_color_cutoffs = list(lighting_cutoff_red, lighting_cutoff_green, lighting_cutoff_blue)
- var/obj/item/organ/internal/eyes/eyes = get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = get_organ_slot(ORGAN_SLOT_EYES)
if(eyes)
set_invis_see(eyes.see_invisible)
new_sight |= eyes.sight_flags
@@ -652,7 +652,7 @@
for(var/obj/item/clothing/worn_item in get_equipped_items())
tint += worn_item.tint
- var/obj/item/organ/internal/eyes/eyes = get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = get_organ_slot(ORGAN_SLOT_EYES)
if(eyes)
tint += eyes.tint
@@ -953,7 +953,7 @@
return ..()
/mob/living/carbon/can_be_revived()
- if(!get_organ_by_type(/obj/item/organ/internal/brain) && (!IS_CHANGELING(src)) || HAS_TRAIT(src, TRAIT_HUSK))
+ if(!get_organ_by_type(/obj/item/organ/brain) && (!IS_CHANGELING(src)) || HAS_TRAIT(src, TRAIT_HUSK))
return FALSE
return ..()
@@ -972,7 +972,7 @@
// Only check for a heart if they actually need a heart. Who would've thunk
if (needs_heart())
- var/obj/item/organ/internal/heart = get_organ_by_type(/obj/item/organ/internal/heart)
+ var/obj/item/organ/heart = get_organ_by_type(/obj/item/organ/heart)
if (!heart)
return DEFIB_FAIL_NO_HEART
@@ -980,7 +980,7 @@
if (heart.organ_flags & ORGAN_FAILING)
return DEFIB_FAIL_FAILING_HEART
- var/obj/item/organ/internal/brain/current_brain = get_organ_by_type(/obj/item/organ/internal/brain)
+ var/obj/item/organ/brain/current_brain = get_organ_by_type(/obj/item/organ/brain)
if (QDELETED(current_brain))
return DEFIB_FAIL_NO_BRAIN
@@ -1091,7 +1091,7 @@
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/bodypart, update = TRUE, multiplicative_slowdown = final_modification)
/mob/living/carbon/proc/create_internal_organs()
- for(var/obj/item/organ/internal/internal_organ in organs)
+ for(var/obj/item/organ/internal_organ in organs)
internal_organ.Insert(src)
/proc/cmp_organ_slot_asc(slot_a, slot_b)
@@ -1344,7 +1344,7 @@
/mob/living/carbon/proc/adjust_skillchip_complexity_modifier(delta)
skillchip_complexity_modifier += delta
- var/obj/item/organ/internal/brain/brain = get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/brain = get_organ_slot(ORGAN_SLOT_BRAIN)
if(!brain)
return
@@ -1467,7 +1467,7 @@
/// Accepts an optional timeout after which we remove the tail wagging
/// Returns true if successful, false otherwise
/mob/living/carbon/proc/wag_tail(timeout = INFINITY)
- var/obj/item/organ/external/tail/wagged = get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ var/obj/item/organ/tail/wagged = get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
if(!wagged)
return FALSE
return wagged.start_wag(src, timeout)
@@ -1475,7 +1475,7 @@
/// Helper to cleanly stop all tail wagging
/// Returns true if successful, false otherwise
/mob/living/carbon/proc/unwag_tail() // can't unwag a tail
- var/obj/item/organ/external/tail/unwagged = get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ var/obj/item/organ/tail/unwagged = get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
if(!unwagged)
return FALSE
return unwagged.stop_wag(src)
diff --git a/code/modules/mob/living/carbon/carbon_context.dm b/code/modules/mob/living/carbon/carbon_context.dm
index 59d3a6db71a47..b376ea3e113fe 100644
--- a/code/modules/mob/living/carbon/carbon_context.dm
+++ b/code/modules/mob/living/carbon/carbon_context.dm
@@ -25,7 +25,7 @@
if (body_position == STANDING_UP)
if(check_zone(user.zone_selected) == BODY_ZONE_HEAD && get_bodypart(BODY_ZONE_HEAD))
context[SCREENTIP_CONTEXT_LMB] = "Headpat"
- else if(user.zone_selected == BODY_ZONE_PRECISE_GROIN && !isnull(get_organ_by_type(/obj/item/organ/external/tail)))
+ else if(user.zone_selected == BODY_ZONE_PRECISE_GROIN && !isnull(get_organ_by_type(/obj/item/organ/tail)))
context[SCREENTIP_CONTEXT_LMB] = "Pull tail"
else
context[SCREENTIP_CONTEXT_LMB] = "Hug"
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index d9274ee83df33..bb9db5dcff9a5 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -4,7 +4,7 @@
. = ..()
if(is_blind() && !is_blind_from(list(UNCONSCIOUS_TRAIT, HYPNOCHAIR_TRAIT)))
return INFINITY //For all my homies that can not see in the world
- var/obj/item/organ/internal/eyes/eyes = get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = get_organ_slot(ORGAN_SLOT_EYES)
if(eyes)
. += eyes.flash_protect
else
@@ -20,7 +20,7 @@
. = ..()
if(HAS_TRAIT(src, TRAIT_DEAF))
return INFINITY //For all my homies that can not hear in the world
- var/obj/item/organ/internal/ears/E = get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/E = get_organ_slot(ORGAN_SLOT_EARS)
if(!E)
return INFINITY
else
@@ -45,7 +45,7 @@
return null
/mob/living/carbon/is_pepper_proof(check_flags = ALL)
- var/obj/item/organ/internal/eyes/eyes = get_organ_by_type(/obj/item/organ/internal/eyes)
+ var/obj/item/organ/eyes/eyes = get_organ_by_type(/obj/item/organ/eyes)
if(eyes && eyes.pepperspray_protect)
return eyes
if((check_flags & ITEM_SLOT_HEAD) && head && (head.flags_cover & PEPPERPROOF))
@@ -313,12 +313,12 @@
to_chat(helper, span_warning("[src] looks visibly upset as you pat [p_them()] on the head."))
//DOPPLER EDIT ADDITION BEGIN - Excitable quirk! 🐶
if(HAS_TRAIT(src, TRAIT_EXCITABLE))
- var/obj/item/organ/external/tail/src_tail = get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ var/obj/item/organ/tail/src_tail = get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
if(src_tail && !(src_tail.wag_flags & WAG_WAGGING))
emote("wag")
//DOPPLER EDIT ADDITION END
- else if ((helper.zone_selected == BODY_ZONE_PRECISE_GROIN) && !isnull(src.get_organ_by_type(/obj/item/organ/external/tail)))
+ else if ((helper.zone_selected == BODY_ZONE_PRECISE_GROIN) && !isnull(src.get_organ_by_type(/obj/item/organ/tail)))
helper.visible_message(span_notice("[helper] pulls on [src]'s tail!"), \
null, span_hear("You hear a soft patter."), DEFAULT_MESSAGE_RANGE, list(helper, src))
to_chat(helper, span_notice("You pull on [src]'s tail!"))
@@ -433,7 +433,7 @@
/mob/living/carbon/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/flash, length = 25)
- var/obj/item/organ/internal/eyes/eyes = get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = get_organ_slot(ORGAN_SLOT_EYES)
if(!eyes) //can't flash what can't see!
return
@@ -484,7 +484,7 @@
SEND_SIGNAL(src, COMSIG_CARBON_SOUNDBANG, reflist)
intensity = reflist[1]
var/ear_safety = get_ear_protection()
- var/obj/item/organ/internal/ears/ears = get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = get_organ_slot(ORGAN_SLOT_EARS)
var/effect_amount = intensity - ear_safety
if(effect_amount > 0)
if(stun_pwr)
@@ -526,7 +526,7 @@
/mob/living/carbon/can_hear()
. = FALSE
- var/obj/item/organ/internal/ears/ears = get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = get_organ_slot(ORGAN_SLOT_EARS)
if(ears && !HAS_TRAIT(src, TRAIT_DEAF))
. = TRUE
if(health <= hardcrit_threshold && !HAS_TRAIT(src, TRAIT_NOHARDCRIT))
@@ -701,7 +701,7 @@
body_parts -= part
GLOB.bioscrambler_valid_parts = body_parts
- var/list/organs = subtypesof(/obj/item/organ/internal) + subtypesof(/obj/item/organ/external)
+ var/list/organs = subtypesof(/obj/item/organ) + subtypesof(/obj/item/organ)
for(var/obj/item/organ/organ_type as anything in organs)
if(!is_type_in_typecache(organ_type, GLOB.bioscrambler_organs_blacklist) && !(initial(organ_type.organ_flags) & ORGAN_ROBOTIC))
continue
diff --git a/code/modules/mob/living/carbon/carbon_say.dm b/code/modules/mob/living/carbon/carbon_say.dm
index 3e4c29fa0e837..e1dc3d279921f 100644
--- a/code/modules/mob/living/carbon/carbon_say.dm
+++ b/code/modules/mob/living/carbon/carbon_say.dm
@@ -7,7 +7,7 @@
return ..()
/mob/living/carbon/could_speak_language(datum/language/language_path)
- var/obj/item/organ/internal/tongue/spoken_with = get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/spoken_with = get_organ_slot(ORGAN_SLOT_TONGUE)
if(spoken_with)
// the tower of babel needs to bypass the tongue language restrictions without giving omnitongue
return HAS_MIND_TRAIT(src, TRAIT_TOWER_OF_BABEL) || spoken_with.could_speak_language(language_path)
diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm
index 5d9c50cd3db0e..abf88d91733de 100644
--- a/code/modules/mob/living/carbon/carbon_update_icons.dm
+++ b/code/modules/mob/living/carbon/carbon_update_icons.dm
@@ -585,6 +585,8 @@
if(gradient_styles?[GRADIENT_HAIR_KEY])
. += "-[gradient_styles[GRADIENT_HAIR_KEY]]"
. += "-[gradient_colors[GRADIENT_HAIR_KEY]]"
+ if(LAZYLEN(hair_masks))
+ . += "-[jointext(hair_masks, "-")]"
return .
diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm
index abf7cdaabdd99..bb34100877375 100644
--- a/code/modules/mob/living/carbon/death.dm
+++ b/code/modules/mob/living/carbon/death.dm
@@ -34,7 +34,7 @@
var/atom/Tsec = drop_location()
for(var/obj/item/organ/organ as anything in organs)
- if((drop_bitflags & DROP_BRAIN) && istype(organ, /obj/item/organ/internal/brain))
+ if((drop_bitflags & DROP_BRAIN) && istype(organ, /obj/item/organ/brain))
if((drop_bitflags & DROP_BODYPARTS) && (check_zone(organ.zone) != BODY_ZONE_CHEST)) // chests can't drop
continue // the head will drop, so the brain should stay inside
@@ -43,7 +43,7 @@
organ.throw_at(get_edge_target_turf(src, pick(GLOB.alldirs)), rand(1,3), 5)
continue
- if((drop_bitflags & DROP_ORGANS) && !istype(organ, /obj/item/organ/internal/brain))
+ if((drop_bitflags & DROP_ORGANS) && !istype(organ, /obj/item/organ/brain))
if((drop_bitflags & DROP_BODYPARTS) && (check_zone(organ.zone) != BODY_ZONE_CHEST))
continue // only chest & groin organs will be ejected
@@ -65,7 +65,7 @@
/mob/living/carbon/set_suicide(suicide_state) //you thought that box trick was pretty clever, didn't you? well now hardmode is on, boyo.
. = ..()
- var/obj/item/organ/internal/brain/userbrain = get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/userbrain = get_organ_slot(ORGAN_SLOT_BRAIN)
if(userbrain)
userbrain.suicided = suicide_state
diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm
index 257601977f555..a7d5b3b4e3850 100644
--- a/code/modules/mob/living/carbon/emote.dm
+++ b/code/modules/mob/living/carbon/emote.dm
@@ -23,6 +23,7 @@
hands_use_check = TRUE
emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE
vary = TRUE
+ affected_by_pitch = FALSE
/datum/emote/living/carbon/clap/get_sound(mob/living/user)
if(!user.get_bodypart(BODY_ZONE_L_ARM) || !user.get_bodypart(BODY_ZONE_R_ARM))
@@ -175,6 +176,7 @@
message_param = "snaps their fingers at %t."
emote_type = EMOTE_AUDIBLE | EMOTE_VISIBLE
hands_use_check = TRUE
+ affected_by_pitch = FALSE
/datum/emote/living/carbon/snap/get_sound(mob/living/user)
if(ishuman(user))
diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm
index c06e8d268d86d..1852d669dfdc7 100644
--- a/code/modules/mob/living/carbon/examine.dm
+++ b/code/modules/mob/living/carbon/examine.dm
@@ -60,7 +60,7 @@
if (length(status_examines))
. += status_examines
- if(get_bodypart(BODY_ZONE_HEAD) && !get_organ_by_type(/obj/item/organ/internal/brain))
+ if(get_bodypart(BODY_ZONE_HEAD) && !get_organ_by_type(/obj/item/organ/brain))
. += span_deadsay("It appears that [t_his] brain is missing...")
var/list/missing = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
@@ -176,7 +176,7 @@
var/bleed_text = ""
if(appears_dead)
bleed_text += ""
- bleed_text += "Blood is visible in [t_his] open"
+ bleed_text += "Blood is visible in [t_his] open "
else
bleed_text += ""
bleed_text += "[t_He] [t_is] bleeding from [t_his] "
@@ -230,8 +230,11 @@
. += "[t_He] [t_is] shivering."
if(HAS_TRAIT(src, TRAIT_EVIL))
. += "[t_His] eyes radiate with a unfeeling, cold detachment. There is nothing but darkness within [t_his] soul."
- living_user.add_mood_event("encountered_evil", /datum/mood_event/encountered_evil)
- living_user.set_jitter_if_lower(15 SECONDS)
+ if(living_user.mind?.holy_role >= HOLY_ROLE_PRIEST)
+ . += span_warning("PERFECT FOR SMITING!!")
+ else
+ living_user.add_mood_event("encountered_evil", /datum/mood_event/encountered_evil)
+ living_user.set_jitter_if_lower(15 SECONDS)
if(HAS_TRAIT(user, TRAIT_SPIRITUAL) && mind?.holy_role)
. += "[t_He] [t_has] a holy aura about [t_him]."
@@ -245,9 +248,12 @@
if(CONSCIOUS)
if(HAS_TRAIT(src, TRAIT_DUMB))
. += "[t_He] [t_has] a stupid expression on [t_his] face."
- if(get_organ_by_type(/obj/item/organ/internal/brain) && isnull(ai_controller))
+ var/obj/item/organ/brain/brain = get_organ_by_type(/obj/item/organ/brain)
+ if(brain && isnull(ai_controller))
var/npc_message = ""
- if(!key)
+ if(HAS_TRAIT(brain, TRAIT_GHOSTROLE_ON_REVIVE))
+ npc_message = "Soul is pending..."
+ else if(!key)
npc_message = "[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely."
else if(!client)
npc_message ="[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon."
@@ -278,7 +284,7 @@
. += span_warning("This body has been reduced to a grotesque husk.")
if(HAS_MIND_TRAIT(user, TRAIT_MORBID))
if(HAS_TRAIT(src, TRAIT_DISSECTED))
- . += span_notice("[user.p_They()] appear[user.p_s()] to have been dissected. Useless for examination... for now.")
+ . += span_notice("[t_He] appear[p_s()] to have been dissected. Useless for examination... for now.")
if(HAS_TRAIT(src, TRAIT_SURGICALLY_ANALYZED))
. += span_notice("A skilled hand has mapped this one's internal intricacies. It will be far easier to perform future experimentations upon [user.p_them()]. Exquisite.")
if(HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FITNESS))
@@ -323,10 +329,15 @@
var/t_his = p_their()
var/t_is = p_are()
//This checks to see if the body is revivable
- if(get_organ_by_type(/obj/item/organ/internal/brain) && (client || HAS_TRAIT(src, TRAIT_MIND_TEMPORARILY_GONE) || (ghost?.can_reenter_corpse && ghost?.client)))
+ var/obj/item/organ/brain = get_organ_by_type(/obj/item/organ/brain)
+ if(brain && HAS_TRAIT(brain, TRAIT_GHOSTROLE_ON_REVIVE))
+ return span_deadsay("[t_He] [t_is] limp and unresponsive; but [t_his] soul might yet come back...")
+ var/client_like = client || HAS_TRAIT(src, TRAIT_MIND_TEMPORARILY_GONE)
+ var/valid_ghost = ghost?.can_reenter_corpse && ghost?.client
+ var/valid_soul = brain || !HAS_TRAIT(src, TRAIT_FAKE_SOULLESS)
+ if((brain && client_like) || (valid_ghost && valid_soul))
return span_deadsay("[t_He] [t_is] limp and unresponsive; there are no signs of life...")
- else
- return span_deadsay("[t_He] [t_is] limp and unresponsive; there are no signs of life and [t_his] soul has departed...")
+ return span_deadsay("[t_He] [t_is] limp and unresponsive; there are no signs of life and [t_his] soul has departed...")
/// Returns a list of "damtype" => damage description based off of which bodypart description is most common
/mob/living/carbon/proc/get_majority_bodypart_damage_desc()
@@ -517,7 +528,7 @@
. = list()
var/list/cybers = list()
- for(var/obj/item/organ/internal/cyberimp/cyberimp in organs)
+ for(var/obj/item/organ/cyberimp/cyberimp in organs)
if(IS_ROBOTIC_ORGAN(cyberimp) && !(cyberimp.organ_flags & ORGAN_HIDDEN))
cybers += cyberimp.examine_title(user)
if(length(cybers))
diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm
index 7bd77bf5736f0..687703022937f 100644
--- a/code/modules/mob/living/carbon/human/_species.dm
+++ b/code/modules/mob/living/carbon/human/_species.dm
@@ -1,3 +1,4 @@
+/// List of roundstart races' their species_id's
GLOBAL_LIST_EMPTY(roundstart_races)
///List of all roundstart languages by path except common
GLOBAL_LIST_EMPTY(uncommon_roundstart_languages)
@@ -72,23 +73,23 @@ GLOBAL_LIST_EMPTY(features_by_species)
///Internal organs that are unique to this race, like a tail or other cosmetic organs. list(typepath of organ 1, typepath of organ 2 = "Round").
var/list/mutant_organs = list()
///Replaces default brain with a different organ
- var/obj/item/organ/internal/brain/mutantbrain = /obj/item/organ/internal/brain
+ var/obj/item/organ/brain/mutantbrain = /obj/item/organ/brain
///Replaces default heart with a different organ
- var/obj/item/organ/internal/heart/mutantheart = /obj/item/organ/internal/heart
+ var/obj/item/organ/heart/mutantheart = /obj/item/organ/heart
///Replaces default lungs with a different organ
- var/obj/item/organ/internal/lungs/mutantlungs = /obj/item/organ/internal/lungs
+ var/obj/item/organ/lungs/mutantlungs = /obj/item/organ/lungs
///Replaces default eyes with a different organ
- var/obj/item/organ/internal/eyes/mutanteyes = /obj/item/organ/internal/eyes
+ var/obj/item/organ/eyes/mutanteyes = /obj/item/organ/eyes
///Replaces default ears with a different organ
- var/obj/item/organ/internal/ears/mutantears = /obj/item/organ/internal/ears
+ var/obj/item/organ/ears/mutantears = /obj/item/organ/ears
///Replaces default tongue with a different organ
- var/obj/item/organ/internal/tongue/mutanttongue = /obj/item/organ/internal/tongue
+ var/obj/item/organ/tongue/mutanttongue = /obj/item/organ/tongue
///Replaces default liver with a different organ
- var/obj/item/organ/internal/liver/mutantliver = /obj/item/organ/internal/liver
+ var/obj/item/organ/liver/mutantliver = /obj/item/organ/liver
///Replaces default stomach with a different organ
- var/obj/item/organ/internal/stomach/mutantstomach = /obj/item/organ/internal/stomach
+ var/obj/item/organ/stomach/mutantstomach = /obj/item/organ/stomach
///Replaces default appendix with a different organ.
- var/obj/item/organ/internal/appendix/mutantappendix = /obj/item/organ/internal/appendix
+ var/obj/item/organ/appendix/mutantappendix = /obj/item/organ/appendix
/// Store body marking defines. See mobs.dm for bitflags
var/list/body_markings = list()
@@ -192,7 +193,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
return ..()
-/// Gets a list of all species available to choose in roundstart.
+/// Gets a list of all species id's available to choose in roundstart.
/proc/get_selectable_species()
RETURN_TYPE(/list)
@@ -322,7 +323,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
if(remove_existing)
health_pct = (existing_organ.maxHealth - existing_organ.damage) / existing_organ.maxHealth
if(slot == ORGAN_SLOT_BRAIN)
- var/obj/item/organ/internal/brain/existing_brain = existing_organ
+ var/obj/item/organ/brain/existing_brain = existing_organ
existing_brain.before_organ_replacement(new_organ)
existing_brain.Remove(organ_holder, special = TRUE, movement_flags = NO_ID_TRANSFER)
else
@@ -488,7 +489,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
var/obj/item/bodypart/head/noggin = species_human.get_bodypart(BODY_ZONE_HEAD)
if(noggin?.head_flags & HEAD_EYESPRITES)
// eyes (missing eye sprites get handled by the head itself, but sadly we have to do this stupid shit here, for now)
- var/obj/item/organ/internal/eyes/eye_organ = species_human.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eye_organ = species_human.get_organ_slot(ORGAN_SLOT_EYES)
if(eye_organ)
eye_organ.refresh(call_update = FALSE)
standing += eye_organ.generate_body_overlay(species_human)
@@ -682,7 +683,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
if(ITEM_SLOT_EYES)
if(!H.get_bodypart(BODY_ZONE_HEAD))
return FALSE
- var/obj/item/organ/internal/eyes/eyes = H.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = H.get_organ_slot(ORGAN_SLOT_EYES)
if(eyes?.no_glasses)
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
@@ -869,7 +870,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
to_chat(user, span_warning("You don't want to harm [target]!"))
return FALSE
- var/obj/item/organ/internal/brain/brain = user.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/brain = user.get_organ_slot(ORGAN_SLOT_BRAIN)
var/obj/item/bodypart/attacking_bodypart
if(brain)
attacking_bodypart = brain.get_attacking_limb(target)
@@ -1394,7 +1395,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
/datum/species/proc/spec_stun(mob/living/carbon/human/H,amount)
if((H.movement_type & FLYING) && !H.buckled)
- var/obj/item/organ/external/wings/functional/wings = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
+ var/obj/item/organ/wings/functional/wings = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
if(wings)
wings.toggle_flight(H)
wings.fly_slip(H)
@@ -1563,7 +1564,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
return null
var/static/list/food_flags = FOOD_FLAGS
- var/obj/item/organ/internal/tongue/fake_tongue = mutanttongue
+ var/obj/item/organ/tongue/fake_tongue = mutanttongue
return list(
"liked_food" = bitfield_to_list(initial(fake_tongue.liked_foodtypes), food_flags),
@@ -1886,7 +1887,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
var/list/to_add = list()
var/alcohol_tolerance = initial(mutantliver.alcohol_tolerance)
- var/obj/item/organ/internal/liver/base_liver = /obj/item/organ/internal/liver
+ var/obj/item/organ/liver/base_liver = /obj/item/organ/liver
var/tolerance_difference = alcohol_tolerance - initial(base_liver.alcohol_tolerance)
if (tolerance_difference != 0)
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index f2e0edd7e15f3..b561ed8ef4692 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -31,7 +31,7 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift)
if(stat == DEAD)
return
stop_sound_channel(CHANNEL_HEARTBEAT)
- var/obj/item/organ/internal/heart/human_heart = get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/human_heart = get_organ_slot(ORGAN_SLOT_HEART)
human_heart?.beat = BEAT_NONE
human_heart?.Stop()
@@ -57,7 +57,7 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift)
readout += "
[round(reagent.volume, 0.001)] units of [reagent.name]"
readout += "
Stomach:"
- var/obj/item/organ/internal/stomach/belly = get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/belly = get_organ_slot(ORGAN_SLOT_STOMACH)
for(var/datum/reagent/bile in belly?.reagents?.reagent_list)
if(!belly.food_reagents[bile.type])
readout += "
[round(bile.volume, 0.001)] units of [bile.name]"
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 3d03d4ffc6689..cae75ae990c55 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -119,7 +119,7 @@
/datum/emote/living/carbon/human/wag/run_emote(mob/user, params, type_override, intentional)
. = ..()
- var/obj/item/organ/external/tail/oranges_accessory = user.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ var/obj/item/organ/tail/oranges_accessory = user.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
//I am so sorry my son
//We bypass helpers here cause we already have the tail
if(oranges_accessory.wag_flags & WAG_WAGGING) //We verified the tail exists in can_run_emote()
@@ -129,14 +129,14 @@
/datum/emote/living/carbon/human/wag/select_message_type(mob/user, intentional)
. = ..()
- var/obj/item/organ/external/tail/oranges_accessory = user.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ var/obj/item/organ/tail/oranges_accessory = user.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
if(oranges_accessory.wag_flags & WAG_WAGGING)
. = "stops wagging " + message
else
. = "wags " + message
/datum/emote/living/carbon/human/wag/can_run_emote(mob/user, status_check, intentional, params)
- var/obj/item/organ/external/tail/tail = user.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ var/obj/item/organ/tail/tail = user.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
if(tail?.wag_flags & WAG_ABLE)
return ..()
return FALSE
@@ -148,7 +148,7 @@
/datum/emote/living/carbon/human/wing/run_emote(mob/user, params, type_override, intentional)
. = ..()
- var/obj/item/organ/external/wings/functional/wings = user.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
+ var/obj/item/organ/wings/functional/wings = user.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
if(isnull(wings))
CRASH("[type] ran on a mob that has no wings!")
if(wings.wings_open)
@@ -157,12 +157,12 @@
wings.open_wings()
/datum/emote/living/carbon/human/wing/select_message_type(mob/user, intentional)
- var/obj/item/organ/external/wings/functional/wings = user.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
+ var/obj/item/organ/wings/functional/wings = user.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
var/emote_verb = wings.wings_open ? "closes" : "opens"
return "[emote_verb] [message]"
/datum/emote/living/carbon/human/wing/can_run_emote(mob/user, status_check = TRUE, intentional, params)
- if(!istype(user.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS), /obj/item/organ/external/wings/functional))
+ if(!istype(user.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS), /obj/item/organ/wings/functional))
return FALSE
return ..()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 9fcb4083f30f6..9cd25b4460417 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -488,13 +488,13 @@
underwear = "Nude"
update_body(is_creating = TRUE)
-/mob/living/carbon/human/singularity_pull(S, current_size)
+/mob/living/carbon/human/singularity_pull(atom/singularity, current_size)
..()
if(current_size >= STAGE_THREE)
for(var/obj/item/hand in held_items)
if(prob(current_size * 5) && hand.w_class >= ((11-current_size)/2) && dropItemToGround(hand))
step_towards(hand, src)
- to_chat(src, span_warning("\The [S] pulls \the [hand] from your grip!"))
+ to_chat(src, span_warning("\The [singularity] pulls \the [hand] from your grip!"))
#define CPR_PANIC_SPEED (0.8 SECONDS)
@@ -527,7 +527,7 @@
to_chat(src, span_warning("you can't breathe!"))
return FALSE
- var/obj/item/organ/internal/lungs/human_lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/human_lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
if(isnull(human_lungs))
balloon_alert(src, "you don't have lungs!")
return FALSE
@@ -882,7 +882,7 @@
if(result != "Yes")
return
- var/obj/item/organ/internal/brain/target_brain = get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/target_brain = get_organ_slot(ORGAN_SLOT_BRAIN)
if(isnull(target_brain))
to_chat(usr, "This mob has no brain to insert into an MMI.")
@@ -943,7 +943,7 @@
// can remove up to 2 seconds at legendary
carrydelay -= fitness_level * (1/3) SECONDS
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
if(istype(potential_spine))
carrydelay *= potential_spine.athletics_boost_multiplier
@@ -1053,7 +1053,7 @@
add_traits(list(TRAIT_NO_DNA_SCRAMBLE, TRAIT_BADDNA, TRAIT_BORN_MONKEY), SPECIES_TRAIT)
-/mob/living/carbon/human/proc/is_atmos_sealed(additional_flags = null, check_hands = FALSE, ignore_chest_pressureprot = FALSE)
+/mob/living/carbon/human/proc/is_atmos_sealed(additional_flags = null, check_hands = FALSE, alt_flags = FALSE)
var/chest_covered = FALSE
var/head_covered = FALSE
var/hands_covered = FALSE
@@ -1061,11 +1061,11 @@
// We don't really have space-proof gloves, so even if we're checking them we ignore the flags
if ((equipped.body_parts_covered & HANDS) && num_hands >= default_num_hands)
hands_covered = TRUE
- if (!isnull(additional_flags) && !(equipped.clothing_flags & additional_flags))
+ if (!alt_flags && !isnull(additional_flags) && !(equipped.clothing_flags & additional_flags))
continue
- if ((ignore_chest_pressureprot || (equipped.clothing_flags & STOPSPRESSUREDAMAGE)) && (equipped.body_parts_covered & CHEST))
+ if ((equipped.clothing_flags & (STOPSPRESSUREDAMAGE | (alt_flags ? additional_flags : NONE))) && (equipped.body_parts_covered & CHEST))
chest_covered = TRUE
- if ((equipped.clothing_flags & STOPSPRESSUREDAMAGE) && (equipped.body_parts_covered & HEAD))
+ if ((equipped.clothing_flags & (STOPSPRESSUREDAMAGE | (alt_flags ? additional_flags : NONE))) && (equipped.body_parts_covered & HEAD))
head_covered = TRUE
if (!chest_covered)
return FALSE
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 68e6640bdeb10..13700dd5aad29 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -99,9 +99,8 @@
if(worn_thing in held_items)
continue
// Things that are supposed to be held, being worn = cannot block
- else
- if(!(worn_thing in held_items))
- continue
+ else if(!(worn_thing in held_items))
+ continue
var/final_block_chance = worn_thing.block_chance - (clamp((armour_penetration - worn_thing.armour_penetration) / 2, 0, 100)) + block_chance_modifier
if(worn_thing.hit_reaction(src, hit_by, attack_text, final_block_chance, damage, attack_type, damage_type))
@@ -285,7 +284,7 @@
//200 max knockdown for EXPLODE_HEAVY
//160 max knockdown for EXPLODE_LIGHT
- var/obj/item/organ/internal/ears/ears = get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = get_organ_slot(ORGAN_SLOT_EARS)
switch (severity)
if (EXPLODE_DEVASTATE)
if(bomb_armor < EXPLODE_GIB_THRESHOLD) //gibs the mob if their bomb armor is lower than EXPLODE_GIB_THRESHOLD
@@ -394,7 +393,7 @@
//Note we both check that the user is in cardiac arrest and can actually heartattack
//If they can't, they're missing their heart and this would runtime
if(undergoing_cardiac_arrest() && can_heartattack() && (shock_damage * siemens_coeff >= 1) && prob(25))
- var/obj/item/organ/internal/heart/heart = get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/heart = get_organ_slot(ORGAN_SLOT_HEART)
if(heart.Restart() && stat == CONSCIOUS)
to_chat(src, span_notice("You feel your heart beating again!"))
if (!(flags & SHOCK_NO_HUMAN_ANIM))
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 92faf0b1cdf38..dacef60394e84 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -5,7 +5,7 @@
icon = 'icons/mob/human/human.dmi'
icon_state = "human_basic"
appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE
- hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPSEC_FIRST_HUD,IMPSEC_SECOND_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,FAN_HUD,SEC_IMPLANT_HUD) // DOPPLER EDIT, old code: hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPSEC_FIRST_HUD,IMPSEC_SECOND_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,FAN_HUD)
+ hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPSEC_FIRST_HUD,IMPSEC_SECOND_HUD,ANTAG_HUD,GLAND_HUD,FAN_HUD,SEC_IMPLANT_HUD) // DOPPLER EDIT, old code: hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPSEC_FIRST_HUD,IMPSEC_SECOND_HUD,ANTAG_HUD,GLAND_HUD,FAN_HUD)
hud_type = /datum/hud/human
pressure_resistance = 25
can_buckle = TRUE
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index 45e9df715cd0b..278c72ed535cf 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -137,7 +137,7 @@
. += "[dna.species.type]"
/mob/living/carbon/human/proc/get_eye_scars()
- var/obj/item/organ/internal/eyes/eyes = get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = get_organ_slot(ORGAN_SLOT_EYES)
if (!isnull(eyes))
return eyes.scarring
diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm
index 8edeeb8088403..2908ae52364a3 100644
--- a/code/modules/mob/living/carbon/human/human_say.dm
+++ b/code/modules/mob/living/carbon/human/human_say.dm
@@ -22,7 +22,7 @@
return ..()
/mob/living/carbon/human/get_default_say_verb()
- var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE)
if(isnull(tongue))
if(HAS_TRAIT(src, TRAIT_SIGN_LANG))
return "signs"
diff --git a/code/modules/mob/living/carbon/human/human_suicide.dm b/code/modules/mob/living/carbon/human/human_suicide.dm
index 318cba1587d4a..e6b4bbac8e073 100644
--- a/code/modules/mob/living/carbon/human/human_suicide.dm
+++ b/code/modules/mob/living/carbon/human/human_suicide.dm
@@ -22,7 +22,7 @@
if(combat_mode)
send_applicable_messages(HUMAN_COMBAT_MODE_SUICIDE_MESSAGE)
else
- var/obj/item/organ/internal/brain/userbrain = get_organ_by_type(/obj/item/organ/internal/brain)
+ var/obj/item/organ/brain/userbrain = get_organ_by_type(/obj/item/organ/brain)
if(userbrain?.damage >= 75)
send_applicable_messages(HUMAN_BRAIN_DAMAGE_SUICIDE_MESSAGE)
else
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index eef20329ef890..02f627459cb93 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -335,7 +335,7 @@
/mob/living/carbon/human/toggle_externals(obj/item/tank)
return toggle_internals(tank, TRUE)
-/mob/living/carbon/human/proc/equipOutfit(outfit, visualsOnly = FALSE)
+/mob/living/carbon/human/proc/equipOutfit(outfit, visuals_only = FALSE)
var/datum/outfit/O = null
if(ispath(outfit))
@@ -347,11 +347,11 @@
if(!O)
return 0
- return O.equip(src, visualsOnly)
+ return O.equip(src, visuals_only)
///A version of equipOutfit that overrides passed in outfits with their entry on the species' outfit override registry
-/mob/living/carbon/human/proc/equip_species_outfit(outfit, visualsOnly = FALSE)
+/mob/living/carbon/human/proc/equip_species_outfit(outfit, visuals_only = FALSE)
var/datum/outfit/outfit_to_equip
var/override_outfit_path = dna?.species.outfit_override_registry[outfit]
@@ -363,7 +363,7 @@
if(isnull(outfit_to_equip))
return FALSE
- return outfit_to_equip.equip(src, visualsOnly)
+ return outfit_to_equip.equip(src, visuals_only)
//delete all equipment without dropping anything
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 6bdbf8322f26e..6befcb5c9fe69 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -52,15 +52,21 @@
/mob/living/carbon/human/calculate_affecting_pressure(pressure)
- var/chest_covered = FALSE
- var/head_covered = FALSE
+ var/chest_covered = !get_bodypart(BODY_ZONE_CHEST)
+ var/head_covered = !get_bodypart(BODY_ZONE_HEAD)
+ var/hands_covered = !get_bodypart(BODY_ZONE_L_ARM) && !get_bodypart(BODY_ZONE_R_ARM)
+ var/feet_covered = !get_bodypart(BODY_ZONE_L_LEG) && !get_bodypart(BODY_ZONE_R_LEG)
for(var/obj/item/clothing/equipped in get_equipped_items())
- if((equipped.body_parts_covered & CHEST) && (equipped.clothing_flags & STOPSPRESSUREDAMAGE))
+ if(!chest_covered && (equipped.body_parts_covered & CHEST) && (equipped.clothing_flags & STOPSPRESSUREDAMAGE))
chest_covered = TRUE
- if((equipped.body_parts_covered & HEAD) && (equipped.clothing_flags & STOPSPRESSUREDAMAGE))
+ if(!head_covered && (equipped.body_parts_covered & HEAD) && (equipped.clothing_flags & STOPSPRESSUREDAMAGE))
head_covered = TRUE
+ if(!hands_covered && (equipped.body_parts_covered & HANDS|ARMS) && (equipped.clothing_flags & STOPSPRESSUREDAMAGE))
+ hands_covered = TRUE
+ if(!feet_covered && (equipped.body_parts_covered & FEET|LEGS) && (equipped.clothing_flags & STOPSPRESSUREDAMAGE))
+ feet_covered = TRUE
- if(chest_covered && head_covered)
+ if(chest_covered && head_covered && hands_covered && feet_covered)
return ONE_ATMOSPHERE
if(ismovable(loc))
/// If we're in a space with 0.5 content pressure protection, it averages the values, for example.
@@ -73,7 +79,7 @@
return ..()
/mob/living/carbon/human/check_breath(datum/gas_mixture/breath)
- var/obj/item/organ/internal/lungs/human_lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/human_lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
if(human_lungs)
return human_lungs.check_breath(breath, src)
diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm
index 04df6a7058884..db332b0efde8c 100644
--- a/code/modules/mob/living/carbon/human/species_types/abductors.dm
+++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm
@@ -12,11 +12,11 @@
TRAIT_NO_UNDERWEAR,
TRAIT_VIRUSIMMUNE,
)
- mutanttongue = /obj/item/organ/internal/tongue/abductor
+ mutanttongue = /obj/item/organ/tongue/abductor
mutantstomach = null
mutantheart = null
mutantlungs = null
- mutantbrain = /obj/item/organ/internal/brain/abductor
+ mutantbrain = /obj/item/organ/brain/abductor
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
bodypart_overrides = list(
diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm
index 86f745bb8be61..2974155515d13 100644
--- a/code/modules/mob/living/carbon/human/species_types/android.dm
+++ b/code/modules/mob/living/carbon/human/species_types/android.dm
@@ -26,15 +26,15 @@
inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
meat = null
- mutantbrain = /obj/item/organ/internal/brain/cybernetic
- mutanttongue = /obj/item/organ/internal/tongue/robot
+ mutantbrain = /obj/item/organ/brain/cybernetic
+ mutanttongue = /obj/item/organ/tongue/robot
mutantstomach = null
mutantappendix = null
mutantheart = null
mutantliver = null
mutantlungs = null
- mutanteyes = /obj/item/organ/internal/eyes/robotic
- mutantears = /obj/item/organ/internal/ears/cybernetic
+ mutanteyes = /obj/item/organ/eyes/robotic
+ mutantears = /obj/item/organ/ears/cybernetic
species_language_holder = /datum/language_holder/synthetic
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm
index d4dea2abfcc6a..1dcc922b13f48 100644
--- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm
+++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm
@@ -19,10 +19,10 @@
BODY_ZONE_CHEST = /obj/item/bodypart/chest,
)
inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
- mutantbrain = /obj/item/organ/internal/brain/dullahan
- mutanteyes = /obj/item/organ/internal/eyes/dullahan
- mutanttongue = /obj/item/organ/internal/tongue/dullahan
- mutantears = /obj/item/organ/internal/ears/dullahan
+ mutantbrain = /obj/item/organ/brain/dullahan
+ mutanteyes = /obj/item/organ/eyes/dullahan
+ mutanttongue = /obj/item/organ/tongue/dullahan
+ mutantears = /obj/item/organ/ears/dullahan
mutantstomach = null
mutantlungs = null
skinned_type = /obj/item/stack/sheet/animalhide/human
@@ -51,7 +51,7 @@
human.put_in_hands(head)
// We want to give the head some boring old eyes just so it doesn't look too jank on the head sprite.
- var/obj/item/organ/internal/eyes/eyes = new /obj/item/organ/internal/eyes(head)
+ var/obj/item/organ/eyes/eyes = new /obj/item/organ/eyes(head)
eyes.eye_color_left = human.eye_color_left
eyes.eye_color_right = human.eye_color_right
eyes.bodypart_insert(my_head)
@@ -95,7 +95,7 @@
human.reset_perspective(human)
/datum/species/dullahan/proc/update_vision_perspective(mob/living/carbon/human/human)
- var/obj/item/organ/internal/eyes/eyes = human.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = human.get_organ_slot(ORGAN_SLOT_EYES)
if(eyes)
human.update_tint()
if(eyes.tint)
@@ -106,7 +106,7 @@
prevent_perspective_change = TRUE
/datum/species/dullahan/on_owner_login(mob/living/carbon/human/owner)
- var/obj/item/organ/internal/eyes/eyes = owner.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = owner.get_organ_slot(ORGAN_SLOT_EYES)
if(owner_first_client_connection_handled)
if(!eyes.tint)
owner.reset_perspective(my_head, TRUE)
@@ -164,15 +164,15 @@
return to_add
-/obj/item/organ/internal/brain/dullahan
+/obj/item/organ/brain/dullahan
decoy_override = TRUE
organ_flags = ORGAN_ORGANIC //not vital
-/obj/item/organ/internal/tongue/dullahan
+/obj/item/organ/tongue/dullahan
zone = "abstract"
modifies_speech = TRUE
-/obj/item/organ/internal/tongue/dullahan/handle_speech(datum/source, list/speech_args)
+/obj/item/organ/tongue/dullahan/handle_speech(datum/source, list/speech_args)
if(ishuman(owner))
var/mob/living/carbon/human/human = owner
if(isdullahan(human))
@@ -182,10 +182,10 @@
head.say(speech_args[SPEECH_MESSAGE], spans = speech_args[SPEECH_SPANS], sanitize = FALSE, language = speech_args[SPEECH_LANGUAGE], message_range = speech_args[SPEECH_RANGE])
speech_args[SPEECH_MESSAGE] = ""
-/obj/item/organ/internal/ears/dullahan
+/obj/item/organ/ears/dullahan
zone = "abstract"
-/obj/item/organ/internal/eyes/dullahan
+/obj/item/organ/eyes/dullahan
name = "head vision"
desc = "An abstraction."
actions_types = list(/datum/action/item_action/organ_action/dullahan)
@@ -198,7 +198,7 @@
/datum/action/item_action/organ_action/dullahan/Trigger(trigger_flags)
. = ..()
- var/obj/item/organ/internal/eyes/dullahan/dullahan_eyes = target
+ var/obj/item/organ/eyes/dullahan/dullahan_eyes = target
dullahan_eyes.tint = dullahan_eyes.tint ? NONE : INFINITY
if(ishuman(owner))
@@ -247,7 +247,7 @@
return // It's so over
detached_head.real_name = wearer.real_name
detached_head.name = wearer.real_name
- var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in detached_head
+ var/obj/item/organ/brain/brain = locate(/obj/item/organ/brain) in detached_head
brain.name = "[wearer.name]'s brain"
/obj/item/dullahan_relay/proc/examinate_check(mob/user, atom/source)
diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm
index a7e88cf7b526c..1f1d7d3af478d 100644
--- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm
+++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm
@@ -2,10 +2,10 @@
name = "\improper Ethereal"
id = SPECIES_ETHEREAL
meat = /obj/item/food/meat/slab/human/mutant/ethereal
- mutantlungs = /obj/item/organ/internal/lungs/ethereal
- mutantstomach = /obj/item/organ/internal/stomach/ethereal
- mutanttongue = /obj/item/organ/internal/tongue/ethereal
- mutantheart = /obj/item/organ/internal/heart/ethereal
+ mutantlungs = /obj/item/organ/lungs/ethereal
+ mutantstomach = /obj/item/organ/stomach/ethereal
+ mutanttongue = /obj/item/organ/tongue/ethereal
+ mutantheart = /obj/item/organ/heart/ethereal
exotic_blood = /datum/reagent/consumable/liquidelectricity //Liquid Electricity. fuck you think of something better gamer
exotic_bloodtype = "LE"
siemens_coeff = 0.5 //They thrive on energy
@@ -60,7 +60,7 @@
ethereal_light = new_ethereal.mob_light(light_type = /obj/effect/dummy/lighting_obj/moblight/species)
refresh_light_color(new_ethereal)
- var/obj/item/organ/internal/heart/ethereal/ethereal_heart = new_ethereal.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/ethereal/ethereal_heart = new_ethereal.get_organ_slot(ORGAN_SLOT_HEART)
ethereal_heart.ethereal_color = default_color
for(var/obj/item/bodypart/limb as anything in new_ethereal.bodyparts)
@@ -241,8 +241,8 @@
name = "Lustrous"
id = SPECIES_ETHEREAL_LUSTROUS
examine_limb_id = SPECIES_ETHEREAL
- mutantbrain = /obj/item/organ/internal/brain/lustrous
- changesource_flags = MIRROR_BADMIN | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN
+ mutantbrain = /obj/item/organ/brain/lustrous
+ changesource_flags = MIRROR_BADMIN | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | ERT_SPAWN
inherent_traits = list(
TRAIT_MUTANT_COLORS,
TRAIT_FIXED_MUTANT_COLORS,
diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm
index 11fecb60bfcc4..0f151f5f8f5fd 100644
--- a/code/modules/mob/living/carbon/human/species_types/felinid.dm
+++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm
@@ -3,11 +3,11 @@
name = "Felinid"
id = SPECIES_FELINE
examine_limb_id = SPECIES_HUMAN
- mutantbrain = /obj/item/organ/internal/brain/felinid
- mutanttongue = /obj/item/organ/internal/tongue/cat
- mutantears = /obj/item/organ/internal/ears/cat
+ mutantbrain = /obj/item/organ/brain/felinid
+ mutanttongue = /obj/item/organ/tongue/cat
+ mutantears = /obj/item/organ/ears/cat
mutant_organs = list(
- /obj/item/organ/external/tail/cat = "Cat",
+ /obj/item/organ/tail/cat = "Cat",
)
inherent_traits = list(
TRAIT_CATLIKE_GRACE,
@@ -41,9 +41,9 @@
if(target_human.dna.features["ears"] == "None")
target_human.dna.features["ears"] = "Cat"
if(target_human.dna.features["ears"] == "None")
- mutantears = /obj/item/organ/internal/ears
+ mutantears = /obj/item/organ/ears
else
- var/obj/item/organ/internal/ears/cat/ears = new(FALSE, target_human.dna.features["ears"])
+ var/obj/item/organ/ears/cat/ears = new(FALSE, target_human.dna.features["ears"])
ears.Insert(target_human, movement_flags = DELETE_IF_REPLACED)
return ..()
@@ -101,8 +101,8 @@
/datum/species/human/felinid/get_sigh_sound(mob/living/carbon/human/felinid)
if(felinid.physique == FEMALE)
- return 'sound/mobs/humanoids/human/sigh/female_sigh.ogg'
- return 'sound/mobs/humanoids/human/sigh/male_sigh.ogg'
+ return SFX_FEMALE_SIGH
+ return SFX_MALE_SIGH
/datum/species/human/felinid/get_sniff_sound(mob/living/carbon/human/felinid)
if(felinid.physique == FEMALE)
@@ -128,7 +128,7 @@
/proc/purrbation_toggle(mob/living/carbon/human/target_human, silent = FALSE)
if(!ishuman(target_human))
return
- if(!istype(target_human.get_organ_slot(ORGAN_SLOT_EARS), /obj/item/organ/internal/ears/cat))
+ if(!istype(target_human.get_organ_slot(ORGAN_SLOT_EARS), /obj/item/organ/ears/cat))
purrbation_apply(target_human, silent = silent)
. = TRUE
else
@@ -144,7 +144,7 @@
cat_species.original_felinid = FALSE
else
// This removes the spines if they exist
- var/obj/item/organ/external/spines/current_spines = soon_to_be_felinid.get_organ_slot(ORGAN_SLOT_EXTERNAL_SPINES)
+ var/obj/item/organ/spines/current_spines = soon_to_be_felinid.get_organ_slot(ORGAN_SLOT_EXTERNAL_SPINES)
if(current_spines)
current_spines.Remove(soon_to_be_felinid, special = TRUE)
qdel(current_spines)
@@ -153,10 +153,10 @@
// Humans get converted directly to felinids, and the key is handled in on_species_gain.
// Now when we get mob.dna.features[feature_key], it returns None, which is why the tail is invisible.
// stored_feature_id is only set once (the first time an organ is inserted), so this should be safe.
- var/obj/item/organ/internal/ears/cat/kitty_ears = new
+ var/obj/item/organ/ears/cat/kitty_ears = new
kitty_ears.Insert(soon_to_be_felinid, special = TRUE, movement_flags = DELETE_IF_REPLACED)
- if(should_visual_organ_apply_to(/obj/item/organ/external/tail/cat, soon_to_be_felinid)) //only give them a tail if they actually have sprites for it / are a compatible subspecies.
- var/obj/item/organ/external/tail/cat/kitty_tail = new
+ if(should_visual_organ_apply_to(/obj/item/organ/tail/cat, soon_to_be_felinid)) //only give them a tail if they actually have sprites for it / are a compatible subspecies.
+ var/obj/item/organ/tail/cat/kitty_tail = new
kitty_tail.Insert(soon_to_be_felinid, special = TRUE, movement_flags = DELETE_IF_REPLACED)
if(!silent)
@@ -173,24 +173,24 @@
var/datum/species/target_species = purrbated_human.dna.species
// From the previous check we know they're not a felinid, therefore removing cat ears and tail is safe
- var/obj/item/organ/external/tail/old_tail = purrbated_human.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
- if(istype(old_tail, /obj/item/organ/external/tail/cat))
+ var/obj/item/organ/tail/old_tail = purrbated_human.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ if(istype(old_tail, /obj/item/organ/tail/cat))
old_tail.Remove(purrbated_human, special = TRUE)
qdel(old_tail)
// Locate does not work on assoc lists, so we do it by hand
for(var/external_organ in target_species.mutant_organs)
if(!should_visual_organ_apply_to(external_organ, purrbated_human))
continue
- if(ispath(external_organ, /obj/item/organ/external/tail))
- var/obj/item/organ/external/tail/new_tail = new external_organ()
+ if(ispath(external_organ, /obj/item/organ/tail))
+ var/obj/item/organ/tail/new_tail = new external_organ()
new_tail.Insert(purrbated_human, special = TRUE, movement_flags = DELETE_IF_REPLACED)
// Don't forget the spines we removed earlier
- else if(ispath(external_organ, /obj/item/organ/external/spines))
- var/obj/item/organ/external/spines/new_spines = new external_organ()
+ else if(ispath(external_organ, /obj/item/organ/spines))
+ var/obj/item/organ/spines/new_spines = new external_organ()
new_spines.Insert(purrbated_human, special = TRUE, movement_flags = DELETE_IF_REPLACED)
- var/obj/item/organ/internal/ears/old_ears = purrbated_human.get_organ_slot(ORGAN_SLOT_EARS)
- if(istype(old_ears, /obj/item/organ/internal/ears/cat))
+ var/obj/item/organ/ears/old_ears = purrbated_human.get_organ_slot(ORGAN_SLOT_EARS)
+ if(istype(old_ears, /obj/item/organ/ears/cat))
var/obj/item/organ/new_ears = new target_species.mutantears()
new_ears.Insert(purrbated_human, special = TRUE, movement_flags = DELETE_IF_REPLACED)
if(!silent)
@@ -200,7 +200,7 @@
human_for_preview.set_haircolor("#ffcccc", update = FALSE) // pink
human_for_preview.set_hairstyle("Hime Cut", update = TRUE)
- var/obj/item/organ/internal/ears/cat/cat_ears = human_for_preview.get_organ_by_type(/obj/item/organ/internal/ears/cat)
+ var/obj/item/organ/ears/cat/cat_ears = human_for_preview.get_organ_by_type(/obj/item/organ/ears/cat)
if (cat_ears)
cat_ears.color = human_for_preview.hair_color
human_for_preview.update_body()
diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
index 0f2072b777353..11548c7b12952 100644
--- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
@@ -4,18 +4,18 @@
id = SPECIES_FLYPERSON
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
meat = /obj/item/food/meat/slab/human/mutant/fly
- mutanteyes = /obj/item/organ/internal/eyes/fly
+ mutanteyes = /obj/item/organ/eyes/fly
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
species_language_holder = /datum/language_holder/fly
payday_modifier = 1.0
- mutanttongue = /obj/item/organ/internal/tongue/fly
- mutantheart = /obj/item/organ/internal/heart/fly
- mutantlungs = /obj/item/organ/internal/lungs/fly
- mutantliver = /obj/item/organ/internal/liver/fly
- mutantstomach = /obj/item/organ/internal/stomach/fly
- mutantappendix = /obj/item/organ/internal/appendix/fly
- mutant_organs = list(/obj/item/organ/internal/fly, /obj/item/organ/internal/fly/groin)
+ mutanttongue = /obj/item/organ/tongue/fly
+ mutantheart = /obj/item/organ/heart/fly
+ mutantlungs = /obj/item/organ/lungs/fly
+ mutantliver = /obj/item/organ/liver/fly
+ mutantstomach = /obj/item/organ/stomach/fly
+ mutantappendix = /obj/item/organ/appendix/fly
+ mutant_organs = list(/obj/item/organ/fly, /obj/item/organ/fly/groin)
bodypart_overrides = list(
BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/fly,
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index 13471b2872b98..e610f05bb54ea 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -18,7 +18,6 @@
TRAIT_RADIMMUNE,
TRAIT_SNOWSTORM_IMMUNE, // Shared with plasma river... but I guess if you can survive a plasma river a blizzard isn't a big deal
TRAIT_UNHUSKABLE,
- TRAIT_BOULDER_BREAKER,
)
mutantheart = null
mutantlungs = null
@@ -35,13 +34,13 @@
bodytemp_heat_damage_limit = BODYTEMP_HEAT_LAVALAND_SAFE
bodytemp_cold_damage_limit = BODYTEMP_COLD_ICEBOX_SAFE
- mutant_organs = list(/obj/item/organ/internal/adamantine_resonator)
- mutanteyes = /obj/item/organ/internal/eyes/golem
- mutantbrain = /obj/item/organ/internal/brain/golem
- mutanttongue = /obj/item/organ/internal/tongue/golem
- mutantstomach = /obj/item/organ/internal/stomach/golem
- mutantliver = /obj/item/organ/internal/liver/golem
- mutantappendix = /obj/item/organ/internal/appendix/golem
+ mutant_organs = list(/obj/item/organ/adamantine_resonator)
+ mutanteyes = /obj/item/organ/eyes/golem
+ mutantbrain = /obj/item/organ/brain/golem
+ mutanttongue = /obj/item/organ/tongue/golem
+ mutantstomach = /obj/item/organ/stomach/golem
+ mutantliver = /obj/item/organ/liver/golem
+ mutantappendix = /obj/item/organ/appendix/golem
bodypart_overrides = list(
BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem,
BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem,
diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm
index 92f9110d03f1a..68dab15d1b7c9 100644
--- a/code/modules/mob/living/carbon/human/species_types/humans.dm
+++ b/code/modules/mob/living/carbon/human/species_types/humans.dm
@@ -80,8 +80,8 @@
/datum/species/human/get_sigh_sound(mob/living/carbon/human/human)
if(human.physique == FEMALE)
- return 'sound/mobs/humanoids/human/sigh/female_sigh.ogg'
- return 'sound/mobs/humanoids/human/sigh/male_sigh.ogg'
+ return SFX_FEMALE_SIGH
+ return SFX_MALE_SIGH
/datum/species/human/get_sniff_sound(mob/living/carbon/human/human)
if(human.physique == FEMALE)
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 3b1f8fe4037fe..d866e9c8105dd 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -17,9 +17,9 @@
TRAIT_TOXINLOVER,
TRAIT_NOBLOOD,
)
- mutanttongue = /obj/item/organ/internal/tongue/jelly
- mutantlungs = /obj/item/organ/internal/lungs/slime
- mutanteyes = /obj/item/organ/internal/eyes/jelly
+ mutanttongue = /obj/item/organ/tongue/jelly
+ mutantlungs = /obj/item/organ/lungs/slime
+ mutanteyes = /obj/item/organ/eyes/jelly
mutantheart = null
meat = /obj/item/food/meat/slab/human/mutant/slime
exotic_blood = /datum/reagent/toxin/slimejelly
@@ -178,7 +178,7 @@
plural_form = "Slimepeople"
id = SPECIES_SLIMEPERSON
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
- mutanteyes = /obj/item/organ/internal/eyes
+ mutanteyes = /obj/item/organ/eyes
var/datum/action/innate/split_body/slime_split
var/list/mob/living/carbon/bodies
var/datum/action/innate/swap_body/swap_body
@@ -488,7 +488,7 @@
BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/jelly/luminescent,
BODY_ZONE_CHEST = /obj/item/bodypart/chest/jelly/luminescent,
)
- mutanteyes = /obj/item/organ/internal/eyes
+ mutanteyes = /obj/item/organ/eyes
/// How strong is our glow
var/glow_intensity = LUMINESCENT_DEFAULT_GLOW
/// Internal dummy used to glow (very cool)
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index de24a90071c5e..bf22c032b0589 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -9,13 +9,13 @@
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE
body_markings = list(/datum/bodypart_overlay/simple/body_marking/lizard = "None")
mutant_organs = list(
- /obj/item/organ/external/horns = "None",
- /obj/item/organ/external/frills = "None",
- /obj/item/organ/external/snout = "Round",
- /obj/item/organ/external/spines = "None",
- /obj/item/organ/external/tail/lizard = "Smooth",
+ /obj/item/organ/horns = "None",
+ /obj/item/organ/frills = "None",
+ /obj/item/organ/snout = "Round",
+ /obj/item/organ/spines = "None",
+ /obj/item/organ/tail/lizard = "Smooth",
)
- mutanttongue = /obj/item/organ/internal/tongue/lizard
+ mutanttongue = /obj/item/organ/tongue/lizard
coldmod = 1.5
heatmod = 0.67
payday_modifier = 1.0
@@ -101,8 +101,8 @@
/datum/species/lizard/get_sigh_sound(mob/living/carbon/human/lizard)
if(lizard.physique == FEMALE)
- return 'sound/mobs/humanoids/human/sigh/female_sigh.ogg'
- return 'sound/mobs/humanoids/human/sigh/male_sigh.ogg'
+ return SFX_FEMALE_SIGH
+ return SFX_MALE_SIGH
/datum/species/lizard/get_sniff_sound(mob/living/carbon/human/lizard)
if(lizard.physique == FEMALE)
@@ -165,8 +165,8 @@ Lizard subspecies: ASHWALKERS
name = "Ash Walker"
id = SPECIES_LIZARD_ASH
examine_limb_id = SPECIES_LIZARD
- mutantlungs = /obj/item/organ/internal/lungs/lavaland
- mutantbrain = /obj/item/organ/internal/brain/primitive
+ mutantlungs = /obj/item/organ/lungs/lavaland
+ mutantbrain = /obj/item/organ/brain/primitive
inherent_traits = list(
TRAIT_MUTANT_COLORS,
TRAIT_VIRUSIMMUNE,
@@ -207,8 +207,8 @@ Lizard subspecies: SILVER SCALED
mutantlungs = null
damage_modifier = 10 //very light silvery scales soften blows
species_language_holder = /datum/language_holder/lizard/silver
- mutanttongue = /obj/item/organ/internal/tongue/lizard/silver
- changesource_flags = MIRROR_BADMIN | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN
+ mutanttongue = /obj/item/organ/tongue/lizard/silver
+ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN
examine_limb_id = SPECIES_LIZARD
///stored mutcolor for when we turn back off of a silverscale.
var/old_mutcolor
diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm
index 1ca2979d3d6fc..a1f98250e7456 100644
--- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm
+++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm
@@ -4,10 +4,10 @@
name = "\improper Monkey"
id = SPECIES_MONKEY
mutant_organs = list(
- /obj/item/organ/external/tail/monkey = "Monkey",
+ /obj/item/organ/tail/monkey = "Monkey",
)
- mutanttongue = /obj/item/organ/internal/tongue/monkey
- mutantbrain = /obj/item/organ/internal/brain/primate
+ mutanttongue = /obj/item/organ/tongue/monkey
+ mutantbrain = /obj/item/organ/brain/primate
skinned_type = /obj/item/stack/sheet/animalhide/monkey
meat = /obj/item/food/meat/slab/monkey
knife_butcher_results = list(/obj/item/food/meat/slab/monkey = 5, /obj/item/stack/sheet/animalhide/monkey = 1)
@@ -124,7 +124,7 @@
return to_add
-/obj/item/organ/internal/brain/primate //Ook Ook
+/obj/item/organ/brain/primate //Ook Ook
name = "Primate Brain"
desc = "This wad of meat is small, but has enlaged occipital lobes for spotting bananas."
organ_traits = list(TRAIT_CAN_STRIP, TRAIT_PRIMITIVE, TRAIT_GUN_NATURAL) // No literacy or advanced tool usage.
@@ -144,7 +144,7 @@
if(!.)
return
- var/obj/item/organ/internal/brain/primate/monkey_brain = target
+ var/obj/item/organ/brain/primate/monkey_brain = target
if(monkey_brain.tripping)
monkey_brain.tripping = FALSE
background_icon_state = "bg_default"
@@ -155,21 +155,21 @@
to_chat(monkey_brain.owner, span_notice("You will now stumble while while colliding with people who are in combat mode."))
build_all_button_icons()
-/obj/item/organ/internal/brain/primate/on_mob_insert(mob/living/carbon/primate)
+/obj/item/organ/brain/primate/on_mob_insert(mob/living/carbon/primate)
. = ..()
RegisterSignal(primate, COMSIG_LIVING_MOB_BUMPED, PROC_REF(on_mob_bump))
-/obj/item/organ/internal/brain/primate/on_mob_remove(mob/living/carbon/primate)
+/obj/item/organ/brain/primate/on_mob_remove(mob/living/carbon/primate)
. = ..()
UnregisterSignal(primate, COMSIG_LIVING_MOB_BUMPED)
-/obj/item/organ/internal/brain/primate/proc/on_mob_bump(mob/source, mob/living/crossing_mob)
+/obj/item/organ/brain/primate/proc/on_mob_bump(mob/source, mob/living/crossing_mob)
SIGNAL_HANDLER
if(!tripping || !crossing_mob.combat_mode)
return
crossing_mob.knockOver(owner)
-/obj/item/organ/internal/brain/primate/get_attacking_limb(mob/living/carbon/human/target)
+/obj/item/organ/brain/primate/get_attacking_limb(mob/living/carbon/human/target)
if(!HAS_TRAIT(owner, TRAIT_ADVANCEDTOOLUSER))
return owner.get_bodypart(BODY_ZONE_HEAD)
return ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
index 1ae9c959c3c6e..e95990148fc9f 100644
--- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
@@ -4,10 +4,10 @@
id = SPECIES_MOTH
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
body_markings = list(/datum/bodypart_overlay/simple/body_marking/moth = "None")
- mutant_organs = list(/obj/item/organ/external/wings/moth = "Plain", /obj/item/organ/external/antennae = "Plain")
+ mutant_organs = list(/obj/item/organ/wings/moth = "Plain", /obj/item/organ/antennae = "Plain")
meat = /obj/item/food/meat/slab/human/mutant/moth
- mutanttongue = /obj/item/organ/internal/tongue/moth
- mutanteyes = /obj/item/organ/internal/eyes/moth
+ mutanttongue = /obj/item/organ/tongue/moth
+ mutanteyes = /obj/item/organ/eyes/moth
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT
species_cookie = /obj/item/food/muffin/moffin
species_language_holder = /datum/language_holder/moth
@@ -90,8 +90,8 @@
/datum/species/moth/get_sigh_sound(mob/living/carbon/human/moth)
if(moth.physique == FEMALE)
- return 'sound/mobs/humanoids/human/sigh/female_sigh.ogg'
- return 'sound/mobs/humanoids/human/sigh/male_sigh.ogg'
+ return SFX_FEMALE_SIGH
+ return SFX_MALE_SIGH
/datum/species/moth/get_sniff_sound(mob/living/carbon/human/moth)
if(moth.physique == FEMALE)
diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
index 1e2b73616d91c..4e53fe462087a 100644
--- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
@@ -6,7 +6,7 @@
fixed_mut_color = "#DBBF92"
- mutant_organs = list(/obj/item/organ/external/mushroom_cap = "Round")
+ mutant_organs = list(/obj/item/organ/mushroom_cap = "Round")
inherent_traits = list(
TRAIT_MUTANT_COLORS,
@@ -20,8 +20,8 @@
heatmod = 1.5
- mutanttongue = /obj/item/organ/internal/tongue/mush
- mutanteyes = /obj/item/organ/internal/eyes/night_vision/mushroom
+ mutanttongue = /obj/item/organ/tongue/mush
+ mutanteyes = /obj/item/organ/eyes/night_vision/mushroom
mutantlungs = null
species_language_holder = /datum/language_holder/mushroom
@@ -61,7 +61,7 @@
return "#FF4B19" //cap color, spot color uses eye color
/// A mushpersons mushroom cap organ
-/obj/item/organ/external/mushroom_cap
+/obj/item/organ/mushroom_cap
name = "mushroom cap"
desc = "These are yummie, no cap."
@@ -77,10 +77,13 @@
bodypart_overlay = /datum/bodypart_overlay/mutant/mushroom_cap
+ organ_flags = parent_type::organ_flags | ORGAN_EXTERNAL
+
/// Bodypart overlay for the mushroom cap organ
/datum/bodypart_overlay/mutant/mushroom_cap
layers = EXTERNAL_ADJACENT
feature_key = "caps"
+ dyable = TRUE
/datum/bodypart_overlay/mutant/mushroom_cap/get_global_feature_list()
return SSaccessories.caps_list
@@ -90,3 +93,7 @@
return FALSE
return TRUE
+
+/datum/bodypart_overlay/mutant/mushroom_cap/override_color(obj/item/bodypart/bodypart_owner)
+ //The mushroom cap is red by default (can still be dyed)
+ return "#FF4B19"
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
index c8a8faaa4827c..b27759e594faa 100644
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
@@ -18,10 +18,10 @@
inherent_biotypes = MOB_HUMANOID|MOB_MINERAL
inherent_respiration_type = RESPIRATION_PLASMA
- mutantlungs = /obj/item/organ/internal/lungs/plasmaman
- mutanttongue = /obj/item/organ/internal/tongue/bone/plasmaman
- mutantliver = /obj/item/organ/internal/liver/bone/plasmaman
- mutantstomach = /obj/item/organ/internal/stomach/bone/plasmaman
+ mutantlungs = /obj/item/organ/lungs/plasmaman
+ mutanttongue = /obj/item/organ/tongue/bone/plasmaman
+ mutantliver = /obj/item/organ/liver/bone/plasmaman
+ mutantstomach = /obj/item/organ/stomach/bone/plasmaman
mutantappendix = null
mutantheart = null
heatmod = 1.5
diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
index e5e735b31e44f..87ea18af437fc 100644
--- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
@@ -8,7 +8,7 @@
TRAIT_PLANT_SAFE,
)
mutant_organs = list(
- /obj/item/organ/external/pod_hair = "None",
+ /obj/item/organ/pod_hair = "None",
)
inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT
inherent_factions = list(FACTION_PLANTS, FACTION_VINES)
@@ -19,7 +19,7 @@
exotic_blood = /datum/reagent/water
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
species_language_holder = /datum/language_holder/plant
- mutanttongue = /obj/item/organ/internal/tongue/pod
+ mutanttongue = /obj/item/organ/tongue/pod
bodypart_overrides = list(
BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/pod,
BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/pod,
diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
index 7f1173841effd..8a8c16c182a84 100644
--- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
@@ -16,8 +16,8 @@
inherent_factions = list(FACTION_FAITHLESS)
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC
- mutantbrain = /obj/item/organ/internal/brain/shadow
- mutanteyes = /obj/item/organ/internal/eyes/shadow
+ mutantbrain = /obj/item/organ/brain/shadow
+ mutanteyes = /obj/item/organ/eyes/shadow
mutantheart = null
mutantlungs = null
@@ -89,7 +89,7 @@
return to_add
-/obj/item/organ/internal/eyes/shadow
+/obj/item/organ/eyes/shadow
name = "burning red eyes"
desc = "Even without their shadowy owner, looking at these eyes gives you a sense of dread."
icon = 'icons/obj/medical/organs/shadow_organs.dmi'
@@ -98,14 +98,14 @@
flash_protect = FLASH_PROTECTION_SENSITIVE
/// the key to some of their powers
-/obj/item/organ/internal/brain/shadow
+/obj/item/organ/brain/shadow
name = "shadowling tumor"
desc = "Something that was once a brain, before being remolded by a shadowling. It has adapted to the dark, irreversibly."
icon = 'icons/obj/medical/organs/shadow_organs.dmi'
/// What status effect do we gain while in darkness?
var/applied_status = /datum/status_effect/shadow_regeneration
-/obj/item/organ/internal/brain/shadow/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/brain/shadow/on_life(seconds_per_tick, times_fired)
. = ..()
var/turf/owner_turf = owner.loc
if(!isturf(owner_turf))
diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
index 4718645b56346..da8c1dadd0b22 100644
--- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm
+++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
@@ -24,14 +24,14 @@
TRAIT_XENO_IMMUNE,
)
inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
- mutanttongue = /obj/item/organ/internal/tongue/bone
- mutantstomach = /obj/item/organ/internal/stomach/bone
+ mutanttongue = /obj/item/organ/tongue/bone
+ mutantstomach = /obj/item/organ/stomach/bone
mutantappendix = null
mutantheart = null
- mutantliver = /obj/item/organ/internal/liver/bone
+ mutantliver = /obj/item/organ/liver/bone
mutantlungs = null
//They can technically be in an ERT
- changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN
+ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | ERT_SPAWN
species_cookie = /obj/item/reagent_containers/condiment/milk
species_language_holder = /datum/language_holder/skeleton
diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm
index 20e24de355f38..e54a41033a330 100644
--- a/code/modules/mob/living/carbon/human/species_types/snail.dm
+++ b/code/modules/mob/living/carbon/human/species_types/snail.dm
@@ -13,8 +13,8 @@
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP
sexes = FALSE //snails are hermaphrodites
- mutanteyes = /obj/item/organ/internal/eyes/snail
- mutanttongue = /obj/item/organ/internal/tongue/snail
+ mutanteyes = /obj/item/organ/eyes/snail
+ mutanttongue = /obj/item/organ/tongue/snail
exotic_blood = /datum/reagent/lube
bodypart_overrides = list(
@@ -113,6 +113,9 @@
armor_type = /datum/armor/backpack_snail
max_integrity = 200
resistance_flags = FIRE_PROOF | ACID_PROOF
+ drop_sound = null
+ pickup_sound = null
+ equip_sound = null
/datum/armor/backpack_snail
melee = 40
diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm
index d3dfb81352004..d0b052a888865 100644
--- a/code/modules/mob/living/carbon/human/species_types/vampire.dm
+++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm
@@ -17,11 +17,11 @@
TRAIT_NO_MIRROR_REFLECTION,
)
inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
- changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN
+ changesource_flags = MIRROR_BADMIN | MIRROR_PRIDE | WABBAJACK | ERT_SPAWN
exotic_bloodtype = "U"
blood_deficiency_drain_rate = BLOOD_DEFICIENCY_MODIFIER // vampires already passively lose blood, so this just makes them lose it slightly more quickly when they have blood deficiency.
- mutantheart = /obj/item/organ/internal/heart/vampire
- mutanttongue = /obj/item/organ/internal/tongue/vampire
+ mutantheart = /obj/item/organ/heart/vampire
+ mutanttongue = /obj/item/organ/tongue/vampire
mutantstomach = null
mutantlungs = null
skinned_type = /obj/item/stack/sheet/animalhide/human
@@ -147,7 +147,7 @@
return to_add
-/obj/item/organ/internal/tongue/vampire
+/obj/item/organ/tongue/vampire
name = "vampire tongue"
actions_types = list(/datum/action/item_action/organ_action/vampire)
color = COLOR_CRAYON_BLACK
@@ -161,7 +161,7 @@
. = ..()
if(iscarbon(owner))
var/mob/living/carbon/H = owner
- var/obj/item/organ/internal/tongue/vampire/V = target
+ var/obj/item/organ/tongue/vampire/V = target
if(!COOLDOWN_FINISHED(V, drain_cooldown))
to_chat(H, span_warning("You just drained blood, wait a few seconds!"))
return
@@ -197,19 +197,19 @@
if(!victim.blood_volume)
to_chat(H, span_notice("You finish off [victim]'s blood supply."))
-/obj/item/organ/internal/heart/vampire
+/obj/item/organ/heart/vampire
name = "vampire heart"
color = COLOR_CRAYON_BLACK
-/obj/item/organ/internal/heart/vampire/on_mob_insert(mob/living/carbon/receiver)
+/obj/item/organ/heart/vampire/on_mob_insert(mob/living/carbon/receiver)
. = ..()
RegisterSignal(receiver, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item))
-/obj/item/organ/internal/heart/vampire/on_mob_remove(mob/living/carbon/heartless)
+/obj/item/organ/heart/vampire/on_mob_remove(mob/living/carbon/heartless)
. = ..()
UnregisterSignal(heartless, COMSIG_MOB_GET_STATUS_TAB_ITEMS)
-/obj/item/organ/internal/heart/vampire/proc/get_status_tab_item(mob/living/carbon/source, list/items)
+/obj/item/organ/heart/vampire/proc/get_status_tab_item(mob/living/carbon/source, list/items)
SIGNAL_HANDLER
items += "Blood Level: [source.blood_volume]/[BLOOD_VOLUME_MAXIMUM]"
diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm
index da7cf8f6be336..77d2765ba98b3 100644
--- a/code/modules/mob/living/carbon/human/species_types/zombies.dm
+++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm
@@ -4,7 +4,7 @@
id = SPECIES_ZOMBIE
sexes = FALSE
meat = /obj/item/food/meat/slab/human/mutant/zombie
- mutanttongue = /obj/item/organ/internal/tongue/zombie
+ mutanttongue = /obj/item/organ/tongue/zombie
inherent_traits = list(
// SHARED WITH ALL ZOMBIES
TRAIT_EASILY_WOUNDED,
@@ -32,7 +32,7 @@
mutantliver = null
mutantlungs = null
inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
- changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | ERT_SPAWN
+ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN
bodytemp_normal = T0C // They have no natural body heat, the environment regulates body temp
bodytemp_heat_damage_limit = FIRE_MINIMUM_TEMPERATURE_TO_EXIST // Take damage at fire temp
bodytemp_cold_damage_limit = MINIMUM_TEMPERATURE_TO_MOVE // take damage below minimum movement temp
@@ -95,9 +95,9 @@
id = SPECIES_ZOMBIE_INFECTIOUS
examine_limb_id = SPECIES_ZOMBIE
damage_modifier = 20 // 120 damage to KO a zombie, which kills it
- mutanteyes = /obj/item/organ/internal/eyes/zombie
- mutantbrain = /obj/item/organ/internal/brain/zombie
- mutanttongue = /obj/item/organ/internal/tongue/zombie
+ mutanteyes = /obj/item/organ/eyes/zombie
+ mutantbrain = /obj/item/organ/brain/zombie
+ mutanttongue = /obj/item/organ/tongue/zombie
changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN
inherent_traits = list(
@@ -139,7 +139,7 @@
// Deal with the source of this zombie corruption
// Infection organ needs to be handled separately from mutant_organs
// because it persists through species transitions
- var/obj/item/organ/internal/zombie_infection/infection = new_zombie.get_organ_slot(ORGAN_SLOT_ZOMBIE)
+ var/obj/item/organ/zombie_infection/infection = new_zombie.get_organ_slot(ORGAN_SLOT_ZOMBIE)
if(isnull(infection))
infection = new()
infection.Insert(new_zombie)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index db6ad1a80e3fd..93d6f9ce2e19f 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -41,8 +41,8 @@
// Start of a breath chain, calls [carbon/proc/breathe()]
/mob/living/carbon/handle_breathing(seconds_per_tick, times_fired)
var/next_breath = 4
- var/obj/item/organ/internal/lungs/L = get_organ_slot(ORGAN_SLOT_LUNGS)
- var/obj/item/organ/internal/heart/H = get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/lungs/L = get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/heart/H = get_organ_slot(ORGAN_SLOT_HEART)
if(L)
if(L.damage > L.high_threshold)
next_breath--
@@ -63,7 +63,7 @@
// Second link in a breath chain, calls [carbon/proc/check_breath()]
/mob/living/carbon/proc/breathe(seconds_per_tick, times_fired)
- var/obj/item/organ/internal/lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
var/is_on_internals = FALSE
if(SEND_SIGNAL(src, COMSIG_CARBON_ATTEMPT_BREATHE, seconds_per_tick, times_fired) & COMSIG_CARBON_BLOCK_BREATH)
@@ -169,7 +169,7 @@
/// Indicates if there are moles of gas in the breath.
var/has_moles = breath.total_moles() != 0
- var/obj/item/organ/internal/lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
// Indicates if lungs can breathe without gas.
var/can_breathe_vacuum = FALSE
if(lungs)
@@ -464,7 +464,7 @@
if(stat == DEAD)
if(reagents && (reagents.has_reagent(/datum/reagent/toxin/formaldehyde, 1) || reagents.has_reagent(/datum/reagent/cryostylane))) // No organ decay if the body contains formaldehyde.
return
- for(var/obj/item/organ/internal/organ in organs)
+ for(var/obj/item/organ/organ in organs)
// On-death is where organ decay is handled
if(organ?.owner) // organ + owner can be null due to reagent metabolization causing organ shuffling
organ.on_death(seconds_per_tick, times_fired)
@@ -477,7 +477,7 @@
for(var/slot in organs_slot)
// We don't use get_organ_slot here because we know we have the organ we want, since we're iterating the list containing em already
// This code is hot enough that it's just not worth the time
- var/obj/item/organ/internal/organ = organs_slot[slot]
+ var/obj/item/organ/organ = organs_slot[slot]
if(organ?.owner) // This exist mostly because reagent metabolization can cause organ reshuffling
organ.on_life(seconds_per_tick, times_fired)
@@ -689,7 +689,7 @@
/mob/living/carbon/get_fullness()
var/fullness = nutrition
- var/obj/item/organ/internal/stomach/belly = get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/belly = get_organ_slot(ORGAN_SLOT_STOMACH)
if(!belly) //nothing to see here if we do not have a stomach
return fullness
@@ -707,7 +707,7 @@
. = ..()
if(.)
return
- var/obj/item/organ/internal/stomach/belly = get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/belly = get_organ_slot(ORGAN_SLOT_STOMACH)
if(!belly)
return FALSE
return belly.reagents.has_reagent(reagent, amount, needs_metabolizing)
@@ -722,7 +722,7 @@
if(isnull(has_dna()))
return
- var/obj/item/organ/internal/liver/liver = get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = get_organ_slot(ORGAN_SLOT_LIVER)
if(liver)
return
@@ -736,7 +736,7 @@
adjustOrganLoss(pick(ORGAN_SLOT_HEART, ORGAN_SLOT_LUNGS, ORGAN_SLOT_STOMACH, ORGAN_SLOT_EYES, ORGAN_SLOT_EARS), 0.5* seconds_per_tick)
/mob/living/carbon/proc/undergoing_liver_failure()
- var/obj/item/organ/internal/liver/liver = get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = get_organ_slot(ORGAN_SLOT_LIVER)
if(liver?.organ_flags & ORGAN_FAILING)
return TRUE
@@ -756,7 +756,7 @@
/mob/living/carbon/proc/can_heartattack()
if(!needs_heart())
return FALSE
- var/obj/item/organ/internal/heart/heart = get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/heart = get_organ_slot(ORGAN_SLOT_HEART)
if(!heart || IS_ROBOTIC_ORGAN(heart))
return FALSE
return TRUE
@@ -776,7 +776,7 @@
* related situations (i.e not just cardiac arrest)
*/
/mob/living/carbon/proc/undergoing_cardiac_arrest()
- var/obj/item/organ/internal/heart/heart = get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/heart = get_organ_slot(ORGAN_SLOT_HEART)
if(istype(heart) && heart.is_beating())
return FALSE
else if(!needs_heart())
@@ -794,7 +794,7 @@
if(status && !can_heartattack())
return FALSE
- var/obj/item/organ/internal/heart/heart = get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/heart = get_organ_slot(ORGAN_SLOT_HEART)
if(!istype(heart))
return FALSE
diff --git a/code/modules/mob/living/carbon/skillchip.dm b/code/modules/mob/living/carbon/skillchip.dm
index 19009f21892a1..062ec616a5142 100644
--- a/code/modules/mob/living/carbon/skillchip.dm
+++ b/code/modules/mob/living/carbon/skillchip.dm
@@ -9,7 +9,7 @@
*/
/mob/living/carbon/proc/implant_skillchip(obj/item/skillchip/skillchip, force = FALSE)
// Grab the brain.
- var/obj/item/organ/internal/brain/brain = get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/brain = get_organ_slot(ORGAN_SLOT_BRAIN)
// Check for the brain. No brain = no implant.
if(QDELETED(brain))
@@ -37,7 +37,7 @@
*/
/mob/living/carbon/proc/remove_skillchip(obj/item/skillchip/skillchip, silent = FALSE)
// Check the target's brain, making sure the target exists and has a brain.
- var/obj/item/organ/internal/brain/brain = get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/brain = get_organ_slot(ORGAN_SLOT_BRAIN)
if(QDELETED(brain))
return FALSE
@@ -59,7 +59,7 @@
*/
/mob/living/carbon/proc/clone_skillchip_list(not_removable = FALSE)
// Check the target's brain, making sure the target exists and has a brain.
- var/obj/item/organ/internal/brain/brain = get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/brain = get_organ_slot(ORGAN_SLOT_BRAIN)
if(QDELETED(brain))
return list()
@@ -70,7 +70,7 @@
*/
/mob/living/carbon/proc/destroy_all_skillchips(silent = FALSE)
// Check the target's brain, making sure the target exists and has a brain.
- var/obj/item/organ/internal/brain/brain = get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/brain = get_organ_slot(ORGAN_SLOT_BRAIN)
if(QDELETED(brain))
return FALSE
diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm
index b1ca17337115e..a7f4652533440 100644
--- a/code/modules/mob/living/carbon/status_procs.dm
+++ b/code/modules/mob/living/carbon/status_procs.dm
@@ -16,17 +16,17 @@
/mob/living/carbon/proc/get_traumas()
. = list()
- var/obj/item/organ/internal/brain/B = get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/B = get_organ_slot(ORGAN_SLOT_BRAIN)
if(B)
. = B.traumas
/mob/living/carbon/proc/has_trauma_type(brain_trauma_type, resilience)
- var/obj/item/organ/internal/brain/B = get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/B = get_organ_slot(ORGAN_SLOT_BRAIN)
if(B)
. = B.has_trauma_type(brain_trauma_type, resilience)
/mob/living/carbon/proc/gain_trauma(datum/brain_trauma/trauma, resilience, ...)
- var/obj/item/organ/internal/brain/B = get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/B = get_organ_slot(ORGAN_SLOT_BRAIN)
if(B)
var/list/arguments = list()
if(args.len > 2)
@@ -34,16 +34,16 @@
. = B.brain_gain_trauma(trauma, resilience, arguments)
/mob/living/carbon/proc/gain_trauma_type(brain_trauma_type = /datum/brain_trauma, resilience)
- var/obj/item/organ/internal/brain/B = get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/B = get_organ_slot(ORGAN_SLOT_BRAIN)
if(B)
. = B.gain_trauma_type(brain_trauma_type, resilience)
/mob/living/carbon/proc/cure_trauma_type(brain_trauma_type = /datum/brain_trauma, resilience)
- var/obj/item/organ/internal/brain/B = get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/B = get_organ_slot(ORGAN_SLOT_BRAIN)
if(B)
. = B.cure_trauma_type(brain_trauma_type, resilience)
/mob/living/carbon/proc/cure_all_traumas(resilience)
- var/obj/item/organ/internal/brain/B = get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/B = get_organ_slot(ORGAN_SLOT_BRAIN)
if(B)
. = B.cure_all_traumas(resilience)
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index a6078afc9d521..5666ac00560be 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -308,7 +308,7 @@
if(HAS_TRAIT(src, TRAIT_GODMODE))
return FALSE
if (required_respiration_type)
- var/obj/item/organ/internal/lungs/affected_lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/affected_lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
if(isnull(affected_lungs))
if(!(mob_respiration_type & required_respiration_type)) // if the mob has no lungs, use mob_respiration_type
return FALSE
@@ -335,7 +335,7 @@
if(HAS_TRAIT(src, TRAIT_GODMODE))
return FALSE
- var/obj/item/organ/internal/lungs/affected_lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/affected_lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
if(isnull(affected_lungs))
if(!(mob_respiration_type & required_respiration_type))
return FALSE
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index 1d1f9644411f9..395b1d71792ad 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -143,7 +143,7 @@
if(ishuman(user))
var/mob/living/carbon/human/human_user = user
var/open = FALSE
- var/obj/item/organ/external/wings/functional/wings = human_user.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
+ var/obj/item/organ/wings/functional/wings = human_user.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
// open/close functional wings
if(istype(wings))
@@ -152,7 +152,7 @@
wings.close_wings()
else
wings.open_wings()
- addtimer(CALLBACK(wings, open ? TYPE_PROC_REF(/obj/item/organ/external/wings/functional, open_wings) : TYPE_PROC_REF(/obj/item/organ/external/wings/functional, close_wings)), wing_time)
+ addtimer(CALLBACK(wings, open ? TYPE_PROC_REF(/obj/item/organ/wings/functional, open_wings) : TYPE_PROC_REF(/obj/item/organ/wings/functional, close_wings)), wing_time)
// play a flapping noise if the wing has this implemented
wings.make_flap_sound(human_user)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 77d1b3cb05c93..f9af2da38230d 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1,7 +1,7 @@
/mob/living/Initialize(mapload)
. = ..()
- if(current_size != RESIZE_DEFAULT_SIZE)
- update_transform(current_size)
+ if(initial_size != RESIZE_DEFAULT_SIZE)
+ update_transform(initial_size)
AddElement(/datum/element/movetype_handler)
register_init_signals()
if(unique_name)
@@ -44,6 +44,7 @@
QDEL_LIST(imaginary_group)
QDEL_LAZYLIST(diseases)
QDEL_LIST(surgeries)
+ QDEL_LIST(quirks)
return ..()
/mob/living/onZImpact(turf/impacted_turf, levels, impact_flags = NONE)
@@ -65,14 +66,14 @@
// multiplier for the damage taken from falling
var/damage_softening_multiplier = 1
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
if(istype(potential_spine))
damage_softening_multiplier *= potential_spine.athletics_boost_multiplier
// If you are incapped, you probably can't brace yourself
var/can_help_themselves = !INCAPACITATED_IGNORING(src, INCAPABLE_RESTRAINTS)
if(levels <= 1 && can_help_themselves)
- var/obj/item/organ/external/wings/gliders = get_organ_by_type(/obj/item/organ/external/wings)
+ var/obj/item/organ/wings/gliders = get_organ_by_type(/obj/item/organ/wings)
if(HAS_TRAIT(src, TRAIT_FREERUNNING) || gliders?.can_soften_fall()) // the power of parkour or wings allows falling short distances unscathed
var/graceful_landing = HAS_TRAIT(src, TRAIT_CATLIKE_GRACE)
@@ -697,7 +698,7 @@
var/get_up_time = 1 SECONDS
- var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
+ var/obj/item/organ/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
if(istype(potential_spine))
get_up_time *= potential_spine.athletics_boost_multiplier
@@ -1282,14 +1283,14 @@
animate(src, transform = flipped_matrix, pixel_y = pixel_y-4, time = 0.5 SECONDS, easing = EASE_OUT)
base_pixel_y -= 4
-/mob/living/singularity_pull(S, current_size)
+/mob/living/singularity_pull(atom/singularity, current_size)
..()
if(move_resist == INFINITY)
return
if(current_size >= STAGE_SIX) //your puny magboots/wings/whatever will not save you against supermatter singularity
- throw_at(S, 14, 3, src, TRUE)
+ throw_at(singularity, 14, 3, src, TRUE)
else if(!src.mob_negates_gravity())
- step_towards(src,S)
+ step_towards(src, singularity)
/mob/living/proc/get_temperature(datum/gas_mixture/environment)
var/loc_temp = environment ? environment.temperature : T0C
@@ -1473,6 +1474,7 @@
var/static/list/possible_results = list(
WABBAJACK_MONKEY,
+ WABBAJACK_CLOWN,
WABBAJACK_ROBOT,
WABBAJACK_SLIME,
WABBAJACK_XENO,
@@ -1487,10 +1489,25 @@
if(WABBAJACK_MONKEY)
new_mob = new /mob/living/carbon/human/species/monkey(loc)
+ if(WABBAJACK_CLOWN)
+ var/picked_clown = pick(typesof(/mob/living/basic/clown))
+ new_mob = new picked_clown(loc)
+
if(WABBAJACK_ROBOT)
var/static/list/robot_options = list(
/mob/living/silicon/robot = 200,
/mob/living/basic/drone/polymorphed = 200,
+ /mob/living/basic/bot/dedbot = 25,
+ /mob/living/basic/bot/cleanbot = 25,
+ /mob/living/basic/bot/firebot = 25,
+ /mob/living/basic/bot/honkbot = 25,
+ /mob/living/basic/bot/hygienebot = 25,
+ /mob/living/basic/bot/medbot/mysterious = 12,
+ /mob/living/basic/bot/medbot = 13,
+ /mob/living/basic/bot/vibebot = 25,
+ /mob/living/basic/hivebot/strong = 50,
+ /mob/living/basic/hivebot/mechanic = 50,
+ /mob/living/basic/netguardian = 1,
/mob/living/silicon/robot/model/syndicate = 1,
/mob/living/silicon/robot/model/syndicate/medical = 1,
/mob/living/silicon/robot/model/syndicate/saboteur = 1,
@@ -1519,56 +1536,128 @@
picked_xeno_type = pick(
/mob/living/carbon/alien/adult/hunter,
/mob/living/carbon/alien/adult/sentinel,
+ /mob/living/basic/alien/maid,
)
else
picked_xeno_type = pick(
/mob/living/carbon/alien/adult/hunter,
/mob/living/basic/alien/sentinel,
+ /mob/living/basic/alien/maid,
)
new_mob = new picked_xeno_type(loc)
if(WABBAJACK_ANIMAL)
var/picked_animal = pick(
+ /mob/living/basic/ant,
+ /mob/living/basic/axolotl,
/mob/living/basic/bat,
/mob/living/basic/bear,
+ /mob/living/basic/bear/butter,
+ /mob/living/basic/bear/snow,
+ /mob/living/basic/bear/russian,
/mob/living/basic/blob_minion/blobbernaut,
+ /mob/living/basic/blob_minion/spore,
/mob/living/basic/butterfly,
/mob/living/basic/carp,
+ /mob/living/basic/carp/mega,
/mob/living/basic/carp/magic,
/mob/living/basic/carp/magic/chaos,
/mob/living/basic/chick,
+ /mob/living/basic/chick/permanent,
/mob/living/basic/chicken,
/mob/living/basic/cow,
+ /mob/living/basic/cow/moonicorn,
/mob/living/basic/crab,
+ /mob/living/basic/crab/evil,
+ /mob/living/basic/crab/kreb,
+ /mob/living/basic/crab/evil/kreb,
+ /mob/living/basic/flesh_spider,
+ /mob/living/basic/frog, // finally we can turn people into the most iconic polymorph form.
+ /mob/living/basic/deer,
+ /mob/living/basic/eyeball,
/mob/living/basic/goat,
/mob/living/basic/gorilla,
+ /mob/living/basic/gorilla/lesser,
/mob/living/basic/headslug,
/mob/living/basic/killer_tomato,
/mob/living/basic/lizard,
+ /mob/living/basic/lizard/space,
+ /mob/living/basic/lightgeist,
+ /mob/living/basic/migo,
+ /mob/living/basic/migo/hatsune,
+ /mob/living/basic/mining/basilisk,
+ /mob/living/basic/mining/brimdemon,
+ /mob/living/basic/mining/goldgrub,
+ /mob/living/basic/mining/goldgrub/baby,
/mob/living/basic/mining/goliath,
+ /mob/living/basic/mining/goliath/ancient/immortal,
+ /mob/living/basic/mining/gutlunch/warrior,
+ /mob/living/basic/mining/mook,
+ /mob/living/basic/mining/mook/worker,
+ /mob/living/basic/mining/mook/worker/bard,
+ /mob/living/basic/mining/mook/worker/tribal_chief,
+ /mob/living/basic/mining/legion/monkey,
+ /mob/living/basic/mining/legion/monkey/snow,
+ /mob/living/basic/mining/lobstrosity,
+ /mob/living/basic/mining/lobstrosity/lava,
+ /mob/living/basic/mining/ice_demon,
+ /mob/living/basic/mining/ice_whelp,
/mob/living/basic/mining/watcher,
+ /mob/living/basic/mining/watcher/icewing,
+ /mob/living/basic/mining/watcher/magmawing,
+ /mob/living/basic/mining/wolf,
/mob/living/basic/morph,
+ /mob/living/basic/mothroach,
+ /mob/living/basic/mothroach/bar,
/mob/living/basic/mouse,
/mob/living/basic/mushroom,
/mob/living/basic/parrot,
/mob/living/basic/pet/cat,
/mob/living/basic/pet/cat/cak,
/mob/living/basic/pet/dog/breaddog,
+ /mob/living/basic/pet/dog/bullterrier,
/mob/living/basic/pet/dog/corgi,
+ /mob/living/basic/pet/dog/corgi/exoticcorgi,
+ /mob/living/basic/pet/dog/corgi/narsie,
/mob/living/basic/pet/dog/pug,
+ /mob/living/basic/pet/gondola,
/mob/living/basic/pet/fox,
- /mob/living/basic/spider/giant,
- /mob/living/basic/spider/giant/hunter,
+ /mob/living/basic/pet/penguin,
+ /mob/living/basic/pet/penguin/baby,
+ /mob/living/basic/pet/penguin/baby/permanent,
+ /mob/living/basic/pet/penguin/emperor,
+ /mob/living/basic/pet/penguin/emperor/shamebrero,
+ /mob/living/basic/pony,
+ /mob/living/basic/pony/syndicate,
+ /mob/living/basic/rabbit,
+ /mob/living/basic/rabbit/easter,
+ /mob/living/basic/rabbit/easter/space,
+ /mob/living/basic/regal_rat,
+ /mob/living/basic/seedling,
+ /mob/living/basic/seedling/meanie,
+ /mob/living/basic/sheep,
+ /mob/living/basic/snake,
+ /mob/living/basic/snake/banded,
+ /mob/living/basic/snake/banded/harmless,
+ /mob/living/basic/spider/giant/tangle, // curated for the most 'interesting' ones
+ /mob/living/basic/spider/giant/breacher,
+ /mob/living/basic/spider/giant/tank,
+ /mob/living/basic/spider/giant/ambush,
+ /mob/living/basic/spider/maintenance,
/mob/living/basic/statue,
+ /mob/living/basic/statue/frosty,
+ /mob/living/basic/statue/mannequin/suspicious,
/mob/living/basic/stickman,
/mob/living/basic/stickman/dog,
+ /mob/living/basic/stickman/ranged,
+ /mob/living/basic/living_limb_flesh,
/mob/living/simple_animal/hostile/megafauna/dragon/lesser,
)
new_mob = new picked_animal(loc)
if(WABBAJACK_HUMAN)
var/mob/living/carbon/human/new_human = new(loc)
- // 50% chance that we'll also randomice race
+ // 50% chance that we'll also randomize race
if(prob(50))
var/list/chooseable_races = list()
for(var/datum/species/species_type as anything in subtypesof(/datum/species))
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 1caa124fc67de..43f361ca443d5 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -91,44 +91,85 @@
/mob/living/proc/is_ears_covered()
return null
-/mob/living/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE)
+/mob/living/bullet_act(obj/projectile/proj, def_zone, piercing_hit = FALSE)
. = ..()
- if(. != BULLET_ACT_HIT)
+ if (. != BULLET_ACT_HIT)
return .
- if(!hitting_projectile.is_hostile_projectile())
- return BULLET_ACT_HIT
- // we need a second, silent armor check to actually know how much to reduce damage taken, as opposed to
- // on [/atom/proc/bullet_act] where it's just to pass it to the projectile's on_hit().
- var/armor_check = check_projectile_armor(def_zone, hitting_projectile, is_silent = TRUE)
+ var/blocked = check_projectile_armor(def_zone, proj, is_silent = TRUE)
+ if(blocked >= 100)
+ if(proj.is_hostile_projectile())
+ apply_projectile_effects(proj, def_zone, blocked)
+ return .
+
+ var/hit_limb_zone = check_hit_limb_zone_name(def_zone)
+ var/organ_hit_text = ""
+ if (hit_limb_zone)
+ organ_hit_text = "in \the [parse_zone_with_bodypart(hit_limb_zone)]"
+
+ switch (proj.suppressed)
+ if (SUPPRESSED_QUIET)
+ to_chat(src, span_userdanger("You're shot by \a [proj] [organ_hit_text]!"))
+ if (SUPPRESSED_NONE)
+ visible_message(span_danger("[src] is hit by \a [proj] [organ_hit_text]!"), \
+ span_userdanger("You're hit by \a [proj] [organ_hit_text]!"), null, COMBAT_MESSAGE_RANGE)
+ if(is_blind())
+ to_chat(src, span_userdanger("You feel something hit you [organ_hit_text]!"))
+
+ if(proj.is_hostile_projectile())
+ apply_projectile_effects(proj, def_zone, blocked)
+/mob/living/proc/apply_projectile_effects(obj/projectile/proj, def_zone, armor_check)
apply_damage(
- damage = hitting_projectile.damage,
- damagetype = hitting_projectile.damage_type,
+ damage = proj.damage,
+ damagetype = proj.damage_type,
def_zone = def_zone,
blocked = min(ARMOR_MAX_BLOCK, armor_check), //cap damage reduction at 90%
- wound_bonus = hitting_projectile.wound_bonus,
- bare_wound_bonus = hitting_projectile.bare_wound_bonus,
- sharpness = hitting_projectile.sharpness,
- attack_direction = get_dir(hitting_projectile.starting, src),
+ wound_bonus = proj.wound_bonus,
+ bare_wound_bonus = proj.bare_wound_bonus,
+ sharpness = proj.sharpness,
+ attack_direction = get_dir(proj.starting, src),
)
+
apply_effects(
- stun = hitting_projectile.stun,
- knockdown = hitting_projectile.knockdown,
- unconscious = hitting_projectile.unconscious,
- slur = (mob_biotypes & MOB_ROBOTIC) ? 0 SECONDS : hitting_projectile.slur, // Don't want your cyborgs to slur from being ebow'd
- stutter = (mob_biotypes & MOB_ROBOTIC) ? 0 SECONDS : hitting_projectile.stutter, // Don't want your cyborgs to stutter from being tazed
- eyeblur = hitting_projectile.eyeblur,
- drowsy = hitting_projectile.drowsy,
+ stun = proj.stun,
+ knockdown = proj.knockdown,
+ unconscious = proj.unconscious,
+ slur = (mob_biotypes & MOB_ROBOTIC) ? 0 SECONDS : proj.slur, // Don't want your cyborgs to slur from being ebow'd
+ stutter = (mob_biotypes & MOB_ROBOTIC) ? 0 SECONDS : proj.stutter, // Don't want your cyborgs to stutter from being tazed
+ eyeblur = proj.eyeblur,
+ drowsy = proj.drowsy,
blocked = armor_check,
- stamina = hitting_projectile.stamina,
- jitter = (mob_biotypes & MOB_ROBOTIC) ? 0 SECONDS : hitting_projectile.jitter, // Cyborgs can jitter but not from being shot
- paralyze = hitting_projectile.paralyze,
- immobilize = hitting_projectile.immobilize,
+ stamina = proj.stamina,
+ jitter = (mob_biotypes & MOB_ROBOTIC) ? 0 SECONDS : proj.jitter, // Cyborgs can jitter but not from being shot
+ paralyze = proj.paralyze,
+ immobilize = proj.immobilize,
)
- if(hitting_projectile.dismemberment)
- check_projectile_dismemberment(hitting_projectile, def_zone)
- return BULLET_ACT_HIT
+
+ if(proj.dismemberment)
+ check_projectile_dismemberment(proj, def_zone)
+
+ if (proj.damage && armor_check < 100)
+ create_projectile_hit_effects(proj, def_zone, armor_check)
+
+/mob/living/proc/create_projectile_hit_effects(obj/projectile/proj, def_zone, blocked)
+ if (proj.damage_type != BRUTE)
+ return
+
+ var/obj/item/bodypart/hit_bodypart = get_bodypart(check_hit_limb_zone_name(def_zone))
+ if (blood_volume && (isnull(hit_bodypart) || hit_bodypart.can_bleed()))
+ create_splatter(angle2dir(proj.angle))
+ if(prob(33))
+ add_splatter_floor(get_turf(src))
+ // return DOPPLER EDIT REMOVAL
+
+ if (hit_bodypart?.biological_state & (BIO_METAL|BIO_WIRED))
+ var/random_damage_mult = RANDOM_DECIMAL(0.85, 1.15) // SOMETIMES you can get more or less sparks
+ var/damage_dealt = ((proj.damage / (1 - (blocked / 100))) * random_damage_mult)
+
+ var/spark_amount = round((damage_dealt / PROJECTILE_DAMAGE_PER_ROBOTIC_SPARK))
+ if (spark_amount > 0)
+ do_sparks(spark_amount, FALSE, src)
/mob/living/check_projectile_armor(def_zone, obj/projectile/impacting_projectile, is_silent)
return run_armor_check(def_zone, impacting_projectile.armor_flag, "","",impacting_projectile.armour_penetration, "", is_silent, impacting_projectile.weak_against_armour)
@@ -211,6 +252,9 @@
hitpush = FALSE
return ..()
+/mob/living/proc/create_splatter(splatter_dir)
+ new /obj/effect/temp_visual/dir_setting/bloodsplatter(get_turf(src), splatter_dir)
+
///The core of catching thrown items, which non-carbons cannot without the help of items or abilities yet, as they've no throw mode.
/mob/living/proc/try_catch_item(obj/item/item, skip_throw_mode_check = FALSE, try_offhand = FALSE)
if(!can_catch_item(skip_throw_mode_check, try_offhand) || !isitem(item) || HAS_TRAIT(item, TRAIT_UNCATCHABLE) || !isturf(item.loc))
@@ -623,7 +667,7 @@
/** Handles exposing a mob to reagents.
*
- * If the methods include INGEST the mob tastes the reagents.
+ * If the methods include INGEST or INHALE, the mob tastes the reagents.
* If the methods include VAPOR it incorporates permiability protection.
*/
/mob/living/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE)
@@ -631,8 +675,8 @@
if(. & COMPONENT_NO_EXPOSE_REAGENTS)
return
- if(methods & INGEST)
- taste(source)
+ if(methods & (INGEST | INHALE))
+ taste_list(reagents)
var/touch_protection = (methods & VAPOR) ? getarmor(null, BIO) * 0.01 : 0
SEND_SIGNAL(source, COMSIG_REAGENTS_EXPOSE_MOB, src, reagents, methods, volume_modifier, show_message, touch_protection)
@@ -643,7 +687,7 @@
/// Simplified ricochet angle calculation for mobs (also the base version doesn't work on mobs)
/mob/living/handle_ricochet(obj/projectile/ricocheting_projectile)
var/face_angle = get_angle_raw(ricocheting_projectile.x, ricocheting_projectile.pixel_x, ricocheting_projectile.pixel_y, ricocheting_projectile.p_y, x, y, pixel_x, pixel_y)
- var/new_angle_s = SIMPLIFY_DEGREES(face_angle + GET_ANGLE_OF_INCIDENCE(face_angle, (ricocheting_projectile.Angle + 180)))
+ var/new_angle_s = SIMPLIFY_DEGREES(face_angle + GET_ANGLE_OF_INCIDENCE(face_angle, (ricocheting_projectile.angle + 180)))
ricocheting_projectile.set_angle(new_angle_s)
return TRUE
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 6ec18d0d5392c..a0061cb618f41 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -6,8 +6,11 @@
interaction_flags_click = ALLOW_RESTING
interaction_flags_mouse_drop = ALLOW_RESTING
- ///Tracks the current size of the mob in relation to its original size. Use update_transform(resize) to change it.
+ ///Tracks the scale of the mob transformation matrix in relation to its identity. Use update_transform(resize) to change it.
var/current_size = RESIZE_DEFAULT_SIZE
+ ///How the mob transformation matrix is scaled on init.
+ var/initial_size = RESIZE_DEFAULT_SIZE
+
var/lastattacker = null
var/lastattackerckey = null
diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm
index f308861e0bf09..c525f74b2cb61 100644
--- a/code/modules/mob/living/living_say.dm
+++ b/code/modules/mob/living/living_say.dm
@@ -321,7 +321,8 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list(
if(deaf_message)
deaf_type = MSG_VISUAL
message = deaf_message
- return show_message(message, MSG_VISUAL, deaf_message, deaf_type, avoid_highlight)
+ show_message(message, MSG_VISUAL, deaf_message, deaf_type, avoid_highlight)
+ return FALSE
// we need to send this signal before compose_message() is used since other signals need to modify
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 3550b16829cdb..e41a07d52cd11 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -120,7 +120,7 @@
create_eye()
- if(target_ai.mind)
+ if(target_ai.mind && target_ai.mind.active)
target_ai.mind.transfer_to(src)
if(mind.special_role)
to_chat(src, span_userdanger("You have been installed as an AI! "))
@@ -456,7 +456,7 @@
if(hack_software)
new/obj/item/malf_upgrade(get_turf(src))
the_mmi = mmi_type
- the_mmi.brain = new /obj/item/organ/internal/brain(the_mmi)
+ the_mmi.brain = new /obj/item/organ/brain(the_mmi)
the_mmi.brain.organ_flags |= ORGAN_FROZEN
the_mmi.brain.name = "[real_name]'s brain"
the_mmi.name = "[initial(the_mmi.name)]: [real_name]"
diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm
index e55dcdb58aa3f..28745a204ccd0 100644
--- a/code/modules/mob/living/silicon/ai/ai_say.dm
+++ b/code/modules/mob/living/silicon/ai/ai_say.dm
@@ -148,7 +148,7 @@
var/turf/player_turf = get_turf(player_mob)
if(is_valid_z_level(ai_turf, player_turf))
players += player_mob
- minor_announce(capitalize(message), "[name] announces:", players = players, should_play_sound = FALSE)
+ minor_announce(capitalize(message), "[name] announces:", players = players, should_play_sound = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(does_target_have_vox_off)))
for(var/word in words)
play_vox_word(word, ai_turf, null)
@@ -168,7 +168,7 @@
if(!only_listener)
// Play voice for all mobs in the z level
for(var/mob/player_mob as anything in GLOB.player_list)
- if(!player_mob.can_hear() || !(safe_read_pref(player_mob.client, /datum/preference/numeric/sound_announcements))) //DOPPLER EDIT CHANGE - Original: if(!player_mob.can_hear() || !(safe_read_pref(player_mob.client, /datum/preference/toggle/sound_announcements)))
+ if(!player_mob.can_hear() || !(safe_read_pref(player_mob.client, /datum/preference/toggle/sound_ai_vox)))
continue
var/turf/player_turf = get_turf(player_mob)
@@ -181,5 +181,8 @@
return TRUE
return FALSE
+/proc/does_target_have_vox_off(mob/target)
+ return !safe_read_pref(target.client, /datum/preference/toggle/sound_ai_vox)
+
#undef VOX_DELAY
#endif
diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm
index 2f29fdd7bc6d1..4570f93e0e98e 100644
--- a/code/modules/mob/living/silicon/ai/freelook/eye.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm
@@ -45,7 +45,7 @@
QDEL_LIST(old_images)
return
- if(!length(hud.hud_users))
+ if(!length(hud.hud_users_all_z_levels))
return //no one is watching, do not bother updating anything
hud.remove_atom_from_hud(src)
@@ -64,14 +64,15 @@
var/list/new_images = list()
var/list/turfs = get_visible_turfs()
- for(var/T in turfs)
- var/image/I = (old_images.len > new_images.len) ? old_images[new_images.len + 1] : image(null, T)
- I.loc = T
- I.vis_contents += hud_obj
- new_images += I
+ for(var/turf/seen_turf as anything in turfs)
+ var/image/img = (old_images.len > new_images.len) ? old_images[new_images.len + 1] : image(loc = seen_turf, layer = ABOVE_ALL_MOB_LAYER)
+ img.vis_contents += hud_obj
+ SET_PLANE(img, GAME_PLANE, seen_turf)
+ new_images += img
for(var/i in (new_images.len + 1) to old_images.len)
qdel(old_images[i])
- hud_list[AI_DETECT_HUD] = new_images
+
+ active_hud_list[AI_DETECT_HUD] = new_images
hud.add_atom_to_hud(src)
/mob/camera/ai_eye/proc/get_visible_turfs()
@@ -253,3 +254,6 @@
alpha = 100
layer = ABOVE_ALL_MOB_LAYER
plane = ABOVE_GAME_PLANE
+
+/obj/effect/overlay/ai_detect_hud/camera_unseen
+ icon = 'icons/effects/cameravis.dmi'
diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm
index a28718c8c8348..50fe16dd43523 100644
--- a/code/modules/mob/living/silicon/robot/inventory.dm
+++ b/code/modules/mob/living/silicon/robot/inventory.dm
@@ -52,7 +52,8 @@
*/
/mob/living/silicon/robot/proc/equip_module_to_slot(obj/item/item_module, module_num)
var/storage_was_closed = FALSE //Just to be consistant and all
- if(!shown_robot_modules) //Tools may be invisible if the collection is hidden
+ //spawning a clientless borg won't init its hud, much like with all mobs, so don't bother showing what's not there
+ if(hud_used && !shown_robot_modules) //Tools may be invisible if the collection is hidden
hud_used.toggle_show_robot_modules()
storage_was_closed = TRUE
switch(module_num)
@@ -75,7 +76,7 @@
observer_screen_update(item_module, TRUE)
- if(storage_was_closed)
+ if(hud_used && storage_was_closed)
hud_used.toggle_show_robot_modules()
item_module.on_equipped(src, ITEM_SLOT_HANDS)
return TRUE
@@ -128,7 +129,7 @@
item_module.forceMove(model) //Return item to configuration so it appears in its contents, so it can be taken out again.
observer_screen_update(item_module, FALSE)
- hud_used.update_robot_modules_display()
+ hud_used?.update_robot_modules_display()
return TRUE
/**
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index e53fa80dfdd8c..d88573510d3d1 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -66,7 +66,7 @@
//MMI stuff. Held togheter by magic. ~Miauw
if(!mmi?.brainmob)
mmi = new (src)
- mmi.brain = new /obj/item/organ/internal/brain(mmi)
+ mmi.brain = new /obj/item/organ/brain(mmi)
mmi.brain.organ_flags |= ORGAN_FROZEN
mmi.brain.name = "[real_name]'s brain"
mmi.name = "[initial(mmi.name)]: [real_name]"
diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm
index 77764f5ea44d0..b3c2684d470b3 100644
--- a/code/modules/mob/living/silicon/robot/robot_model.dm
+++ b/code/modules/mob/living/silicon/robot/robot_model.dm
@@ -397,7 +397,7 @@
/obj/item/stack/sheet/glass,
/obj/item/borg/apparatus/sheet_manipulator,
/obj/item/stack/rods/cyborg,
- /obj/item/stack/tile/iron/base/cyborg,
+ /obj/item/construction/rtd/borg,
/obj/item/stack/cable_coil,
)
radio_channels = list(RADIO_CHANNEL_ENGINEERING)
@@ -415,7 +415,7 @@
/obj/item/assembly/flash/cyborg,
/obj/item/screwdriver/cyborg,
/obj/item/crowbar/cyborg,
- /obj/item/stack/tile/iron/base/cyborg,
+ /obj/item/stack/tile/iron/base/cyborg, // haha jani will have old tiles >:D
/obj/item/soap/nanotrasen/cyborg,
/obj/item/storage/bag/trash/cyborg,
/obj/item/melee/flyswatter,
@@ -839,6 +839,7 @@
"Kent" = list(SKIN_ICON_STATE = "kent", SKIN_LIGHT_KEY = "medical", SKIN_HAT_OFFSET = list("north" = list(0, 3), "south" = list(0, 3), "east" = list(-1, 3), "west" = list(1, 3))),
"Tophat" = list(SKIN_ICON_STATE = "tophat", SKIN_LIGHT_KEY = NONE, SKIN_HAT_OFFSET = INFINITY),
"Waitress" = list(SKIN_ICON_STATE = "service_f"),
+ "Gardener" = list(SKIN_ICON_STATE = "gardener", SKIN_HAT_OFFSET = INFINITY),
)
/obj/item/robot_model/service/respawn_consumable(mob/living/silicon/robot/cyborg, coeff = 1)
@@ -919,7 +920,7 @@
/obj/item/stack/sheet/glass,
/obj/item/borg/apparatus/sheet_manipulator,
/obj/item/stack/rods/cyborg,
- /obj/item/stack/tile/iron/base/cyborg,
+ /obj/item/construction/rtd/borg,
/obj/item/dest_tagger/borg,
/obj/item/stack/cable_coil,
/obj/item/pinpointer/syndicate_cyborg,
diff --git a/code/modules/mob/living/simple_animal/bot/bot_announcement.dm b/code/modules/mob/living/simple_animal/bot/bot_announcement.dm
index 061e6375088af..5d63fbdee2b35 100644
--- a/code/modules/mob/living/simple_animal/bot/bot_announcement.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot_announcement.dm
@@ -8,7 +8,6 @@
button_icon_state = "intercom"
cooldown_time = 5 SECONDS
shared_cooldown = MOB_SHARED_COOLDOWN_BOT_ANNOUNCMENT
- melee_cooldown_time = 0 SECONDS
/// List of strings to sound effects corresponding to automated messages we can play
var/list/automated_announcements
/// Maximum amount of buttons this can have
@@ -173,7 +172,6 @@
/datum/action/cooldown/bot_announcement_shortcut
desc = "Play a prerecorded message for the benefit of those around you."
shared_cooldown = MOB_SHARED_COOLDOWN_BOT_ANNOUNCMENT
- melee_cooldown_time = 0 SECONDS
background_icon_state = "bg_tech_blue"
overlay_icon_state = "bg_tech_blue_border"
button_icon = 'icons/obj/machines/wallmounts.dmi'
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
index c7171b3c5556a..f1e3461271359 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
@@ -153,7 +153,7 @@ Difficulty: Hard
*/
/mob/living/simple_animal/hostile/megafauna/bubblegum/attackby(obj/item/W, mob/user, params)
. = ..()
- if(istype(W, /obj/item/organ/internal/tongue))
+ if(istype(W, /obj/item/organ/tongue))
user.client?.give_award(/datum/award/achievement/jobs/frenching, user)
/mob/living/simple_animal/hostile/megafauna/bubblegum/proc/try_bloodattack()
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index 253fe799bfd2c..0d8c1d86bdd40 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -275,11 +275,11 @@ GLOBAL_LIST_INIT(animatable_blacklist, typecacheof(list(
Pewgun.chambered.forceMove(loc) //rip revolver immersions, blame shotgun snowflake procs
Pewgun.chambered = null
if(Pewgun.magazine && Pewgun.magazine.stored_ammo.len)
- Pewgun.chambered = Pewgun.magazine.get_round(0)
+ Pewgun.chambered = Pewgun.magazine.get_round()
Pewgun.chambered.forceMove(Pewgun)
Pewgun.update_appearance()
else if(Pewgun.magazine && Pewgun.magazine.stored_ammo.len) //only true for pumpguns i think
- Pewgun.chambered = Pewgun.magazine.get_round(0)
+ Pewgun.chambered = Pewgun.magazine.get_round()
Pewgun.chambered.forceMove(Pewgun)
visible_message(span_danger("The [src] cocks itself!"))
else
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
index b40a793f0fc74..1cf118d587675 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
@@ -274,8 +274,8 @@ While using this makes the system rely on OnFire, it still gives options for tim
/obj/structure/elite_tumor/item_interaction(mob/living/user, obj/item/attacking_item, list/modifiers)
. = NONE
- if(istype(attacking_item, /obj/item/organ/internal/monster_core/regenerative_core) && activity == TUMOR_INACTIVE && !boosted)
- var/obj/item/organ/internal/monster_core/regenerative_core/core = attacking_item
+ if(istype(attacking_item, /obj/item/organ/monster_core/regenerative_core) && activity == TUMOR_INACTIVE && !boosted)
+ var/obj/item/organ/monster_core/regenerative_core/core = attacking_item
visible_message(span_boldwarning("As [user] drops the core into [src], [src] appears to swell."))
icon_state = "advanced_tumor"
boosted = TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
index e3cccde2bc6d6..6e673aa9be5e7 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
@@ -133,12 +133,26 @@
for(var/i in 1 to 2)
if(children_list.len >= 8)
return
- var/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/newchild = new /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child(loc)
- newchild.GiveTarget(target)
- newchild.faction = faction.Copy()
- visible_message(span_boldwarning("[newchild] appears below [src]!"))
- newchild.mother = src
- children_list += newchild
+ var/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/new_child = new /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child(loc)
+ new_child.GiveTarget(target)
+ new_child.faction = faction.Copy()
+ visible_message(span_boldwarning("[new_child] appears below [src]!"))
+ register_child(new_child)
+
+/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/register_child(atom/child)
+ children_list += child
+ RegisterSignals(child, list(COMSIG_QDELETING, COMSIG_LIVING_DEATH), PROC_REF(remove_child))
+
+/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/remove_child(atom/source)
+ SIGNAL_HANDLER
+
+ children_list -= source
+ UnregisterSignal(source, list(
+ COMSIG_QDELETING,
+ COMSIG_LIVING_DEATH,
+ ))
+
+
/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/rage()
ranged_cooldown = world.time + 100
@@ -191,7 +205,6 @@
guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/goliath_hide = 1)
death_message = "falls to the ground."
status_flags = CANPUSH
- var/mob/living/simple_animal/hostile/asteroid/elite/broodmother/mother = null
/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/Initialize(mapload)
. = ..()
@@ -208,8 +221,6 @@
/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/death()
. = ..()
- if(mother != null)
- mother.children_list -= src
visible_message(span_warning("[src] explodes!"))
explosion(src, flame_range = 3, adminlog = FALSE)
gib(DROP_ALL_REMAINS)
diff --git a/code/modules/mob/living/simple_animal/hostile/vatbeast.dm b/code/modules/mob/living/simple_animal/hostile/vatbeast.dm
index d77649562430c..8eab28a52e6a5 100644
--- a/code/modules/mob/living/simple_animal/hostile/vatbeast.dm
+++ b/code/modules/mob/living/simple_animal/hostile/vatbeast.dm
@@ -52,7 +52,6 @@
button_icon_state = "tentacle_slap"
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED
cooldown_time = 12 SECONDS
- melee_cooldown_time = 0 SECONDS
click_to_activate = TRUE
ranged_mousepointer = 'icons/effects/mouse_pointers/supplypod_target.dmi'
diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm
index 7bf067c7a120a..e89522b6360b5 100644
--- a/code/modules/mob/living/status_procs.dm
+++ b/code/modules/mob/living/status_procs.dm
@@ -421,19 +421,6 @@
S = apply_status_effect(/datum/status_effect/incapacitating/sleeping, amount)
return S
-///Allows us to set a permanent sleep on a player (use with caution and remember to unset it with SetSleeping() after the effect is over)
-/mob/living/proc/PermaSleeping()
- if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_SLEEP, -1) & COMPONENT_NO_STUN)
- return
- if(HAS_TRAIT(src, TRAIT_GODMODE))
- return
- var/datum/status_effect/incapacitating/sleeping/S = IsSleeping()
- if(S)
- S.duration = -1
- else
- S = apply_status_effect(/datum/status_effect/incapacitating/sleeping, -1)
- return S
-
///////////////////////// CLEAR STATUS /////////////////////////
/mob/living/proc/adjust_status_effects_on_shake_up()
diff --git a/code/modules/mob/living/taste.dm b/code/modules/mob/living/taste.dm
index 28dbbc078c5af..5da5781b2edb6 100644
--- a/code/modules/mob/living/taste.dm
+++ b/code/modules/mob/living/taste.dm
@@ -14,7 +14,7 @@
return DEFAULT_TASTE_SENSITIVITY
/mob/living/carbon/get_taste_sensitivity()
- var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE)
if(istype(tongue))
. = tongue.taste_sensitivity
else
@@ -22,28 +22,65 @@
. = DEFAULT_TASTE_SENSITIVITY
/**
- * Non destructively tastes a reagent container
+ * Non-destructively tastes a reagent container
* and gives feedback to the user.
+ * Arguments:
+ * * datum/reagents/from - Reagent holder to taste from.
**/
-/mob/living/proc/taste(datum/reagents/from)
- if(HAS_TRAIT(src, TRAIT_AGEUSIA))
+/mob/living/proc/taste_container(datum/reagents/from)
+ if(check_tasting_blocks())
+ return
+
+ var/taste_sensitivity = get_taste_sensitivity()
+ var/text_output = from.generate_taste_message(src, taste_sensitivity)
+ send_taste_message(text_output)
+
+/**
+ * Non-destructively tastes a reagent list
+ * and gives feedback to the user.
+ * Arguments:
+ * * list/from - List of reagents to taste from.
+ **/
+/mob/living/proc/taste_list(list/from)
+ if(check_tasting_blocks())
return
- if(last_taste_time + 50 < world.time)
- var/taste_sensitivity = get_taste_sensitivity()
- var/text_output = from.generate_taste_message(src, taste_sensitivity)
- // We dont want to spam the same message over and over again at the
- // person. Give it a bit of a buffer.
- if(get_timed_status_effect_duration(/datum/status_effect/hallucination) > 100 SECONDS && prob(25))
- text_output = pick("spiders","dreams","nightmares","the future","the past","victory",\
+ var/taste_sensitivity = get_taste_sensitivity()
+ var/text_output = generate_reagents_taste_message(from, src, taste_sensitivity)
+ send_taste_message(text_output)
+
+/**
+ * Check for anything blocking/overriding our tasting.
+ * Returns TRUE on a block, FALSE if not.
+ **/
+/mob/living/proc/check_tasting_blocks()
+ if(HAS_TRAIT(src, TRAIT_AGEUSIA))
+ return TRUE
+ if(last_taste_time + 50 >= world.time)
+ return TRUE
+
+ // Sometimes, try send a replacement message if we're hallucinating
+ if(get_timed_status_effect_duration(/datum/status_effect/hallucination) > 100 SECONDS && prob(25))
+ var/text_output = pick("spiders","dreams","nightmares","the future","the past","victory",\
"defeat","pain","bliss","revenge","poison","time","space","death","life","truth","lies","justice","memory",\
"regrets","your soul","suffering","music","noise","blood","hunger","the american way")
- if(text_output != last_taste_text || last_taste_time + 100 < world.time)
- to_chat(src, span_notice("You can taste [text_output]."))
- // "something indescribable" -> too many tastes, not enough flavor.
+ send_taste_message(text_output)
+ return TRUE
- last_taste_time = world.time
- last_taste_text = text_output
+ return FALSE
+
+/**
+ * Attempt to send a taste message using given tastes text.
+ **/
+/mob/living/proc/send_taste_message(tastes_text)
+ if(tastes_text == last_taste_text && last_taste_time + 100 >= world.time)
+ return
+
+ to_chat(src, span_notice("You can taste [tastes_text]."))
+ // "something indescribable" -> too many tastes, not enough flavor.
+
+ last_taste_time = world.time
+ last_taste_text = tastes_text
/**
* Gets food flags that this mob likes
@@ -57,7 +94,7 @@
// Handled in here since the brain trauma can't modify taste directly (/datum/brain_trauma/severe/flesh_desire)
if(HAS_TRAIT(src, TRAIT_FLESH_DESIRE))
return GORE | MEAT
- var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE)
. = tongue.liked_foodtypes
if(HAS_TRAIT(src, TRAIT_VEGETARIAN))
. &= ~MEAT
@@ -73,7 +110,7 @@
/mob/living/carbon/get_disliked_foodtypes()
if(HAS_TRAIT(src, TRAIT_AGEUSIA))
return NONE
- var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE)
. = tongue.disliked_foodtypes
if(HAS_TRAIT(src, TRAIT_VEGETARIAN))
. |= MEAT
@@ -86,7 +123,7 @@
return TOXIC
/mob/living/carbon/get_toxic_foodtypes()
- var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE)
if(!tongue)
return ..()
if(HAS_TRAIT(src, TRAIT_FLESH_DESIRE))
@@ -101,6 +138,28 @@
var/datum/quirk/item_quirk/food_allergic/allergy = get_quirk(/datum/quirk/item_quirk/food_allergic)
return allergy?.target_foodtypes || NONE
+/**
+ * Checks if the mob has an allergic reaction to the given food type.
+ * If so, the mob will contract anaphylaxis.
+ *
+ * * to_foodtype: The food type to check for an allergic reaction to.
+ * * chance: The chance of an allergic reaction occurring. Default is 100 (guaranteed).
+ * * histamine_add: The amount of histamine to add to the mob if they are already experiencing an allergic reaction.
+ *
+ * Returns TRUE if the mob had an allergic reaction, FALSE otherwise.
+ */
+/mob/living/proc/check_allergic_reaction(to_foodtype = NONE, chance = 100, histamine_add = 0)
+ if(!(get_allergic_foodtypes() & to_foodtype))
+ return FALSE
+ if(!prob(chance))
+ return FALSE
+ if(ForceContractDisease(new /datum/disease/anaphylaxis(), make_copy = FALSE, del_on_fail = TRUE))
+ to_chat(src, span_warning("You feel your throat start to itch."))
+ add_mood_event("allergic_food", /datum/mood_event/allergic_food)
+ else if(histamine_add)
+ reagents.add_reagent(/datum/reagent/toxin/histamine, histamine_add)
+ return TRUE
+
/**
* Gets the food reaction a mob would normally have from the given food item,
* assuming that no check_liked callback was used in the edible component.
@@ -118,7 +177,7 @@
return food_taste_reaction
/mob/living/carbon/get_food_taste_reaction(obj/item/food, foodtypes)
- var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE)
// No tongue, no tastin'
if(!tongue?.sense_of_taste || HAS_TRAIT(src, TRAIT_AGEUSIA))
// i hate that i have to do this, but we want to ensure toxic food is still BAD
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 5cea81ad14225..de63a1e63c486 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -555,7 +555,7 @@
var/list/result = examinify.examine_more(src)
if(!length(result))
result += span_notice("You examine [examinify] closer, but find nothing of interest...")
- result_combined = jointext(result, "
")
+ result_combined = examine_block(jointext(result, "
"))
else
client.recent_examines[ref_to_atom] = world.time // set to when we last normal examine'd them
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index 1c8d6ad09fc75..f79a1c10cc689 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -293,6 +293,10 @@
to_chat(src, span_info("You push off of [backup] to propel yourself."))
return TRUE
+/// We handle lattices via backups
+/mob/handle_spacemove_grabbing()
+ return
+
/**
* Finds a target near a mob that is viable for pushing off when moving.
* Takes the intended movement direction as input, alongside if the context is checking if we're allowed to continue drifting
@@ -325,7 +329,7 @@
continue
var/pass_allowed = rebound.CanPass(src, get_dir(rebound, src))
- if(!rebound.density && pass_allowed)
+ if(!rebound.density && pass_allowed && !istype(rebound, /obj/structure/lattice))
continue
//Sometime this tick, this pushed off something. Doesn't count as a valid pushoff target
if(rebound.last_pushoff == world.time)
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 45e54a8475ca8..a90a3fedc2489 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -153,7 +153,7 @@
if(mind) //TODO //TODO WHAT
if(!transfer_after)
mind.active = FALSE
- mind.transfer_to(new_borg)
+ mind.transfer_to(new_borg, TRUE)
else if(transfer_after)
new_borg.key = key
diff --git a/code/modules/mob_spawn/corpses/mining_corpses.dm b/code/modules/mob_spawn/corpses/mining_corpses.dm
index 972bb5c3fa589..e9a4a9b05044d 100644
--- a/code/modules/mob_spawn/corpses/mining_corpses.dm
+++ b/code/modules/mob_spawn/corpses/mining_corpses.dm
@@ -26,7 +26,7 @@
/obj/effect/mob_spawn/corpse/human/legioninfested/special(mob/living/carbon/human/spawned_human)
. = ..()
- var/obj/item/organ/internal/legion_tumour/cancer = new()
+ var/obj/item/organ/legion_tumour/cancer = new()
cancer.Insert(spawned_human, special = TRUE, movement_flags = DELETE_IF_REPLACED)
/// Returns the outfit worn by our corpse
@@ -135,9 +135,9 @@
mask = /obj/item/clothing/mask/gas/explorer
shoes = /obj/item/clothing/shoes/workboots/mining
-/datum/outfit/consumed_miner/pre_equip(mob/living/carbon/human/miner, visualsOnly = FALSE)
+/datum/outfit/consumed_miner/pre_equip(mob/living/carbon/human/miner, visuals_only = FALSE)
var/regular_uniform = FALSE
- if(visualsOnly)
+ if(visuals_only)
regular_uniform = TRUE //assume human
else
var/new_species_type = pick_weight(list(
@@ -195,8 +195,8 @@
name = "Legion-Consumed Ashwalker"
uniform = /obj/item/clothing/under/costume/gladiator/ash_walker
-/datum/outfit/consumed_ashwalker/pre_equip(mob/living/carbon/human/ashwalker, visualsOnly = FALSE)
- if(!visualsOnly)
+/datum/outfit/consumed_ashwalker/pre_equip(mob/living/carbon/human/ashwalker, visuals_only = FALSE)
+ if(!visuals_only)
ashwalker.set_species(/datum/species/lizard/ashwalker)
if(prob(95))
head = /obj/item/clothing/head/helmet/gladiator
@@ -234,8 +234,8 @@
///drops a pie cannon on post_equip. i'm so done with this stupid outfit trying to put shit that doesn't fit in the backpack!
var/drop_a_pie_cannon = FALSE
-/datum/outfit/consumed_clown/pre_equip(mob/living/carbon/human/clown, visualsOnly = FALSE)
- if(!visualsOnly)
+/datum/outfit/consumed_clown/pre_equip(mob/living/carbon/human/clown, visuals_only = FALSE)
+ if(!visuals_only)
clown.fully_replace_character_name(clown.name, pick(GLOB.clown_names))
if(prob(70))
var/backpack_loot = pick(list(
@@ -260,7 +260,7 @@
if(prob(10))
r_pocket = /obj/item/implanter/sad_trombone
-/datum/outfit/consumed_clown/post_equip(mob/living/carbon/human/clown, visualsOnly)
+/datum/outfit/consumed_clown/post_equip(mob/living/carbon/human/clown, visuals_only)
. = ..()
if(drop_a_pie_cannon)
new /obj/item/pneumatic_cannon/pie(get_turf(clown))
@@ -269,8 +269,8 @@
name = "Legion-Consumed Golem"
//Oops! All randomized!
-/datum/outfit/consumed_golem/pre_equip(mob/living/carbon/human/golem, visualsOnly = FALSE)
- if(!visualsOnly)
+/datum/outfit/consumed_golem/pre_equip(mob/living/carbon/human/golem, visuals_only = FALSE)
+ if(!visuals_only)
golem.set_species(/datum/species/golem)
if(prob(30))
glasses = pick_weight(list(
@@ -281,7 +281,7 @@
/obj/item/clothing/glasses/welding = 2,
/obj/item/clothing/glasses/night = 1,
))
- if(prob(10) && !visualsOnly) //visualsonly = not a golem = can't put things in the belt slot without a jumpsuit
+ if(prob(10) && !visuals_only) //visuals_only = not a golem = can't put things in the belt slot without a jumpsuit
belt = pick(list(
/obj/item/crowbar/power,
/obj/item/screwdriver/power,
@@ -299,7 +299,7 @@
shoes = /obj/item/clothing/shoes/winterboots
mask = /obj/item/clothing/mask/breath
-/datum/outfit/consumed_ice_settler/pre_equip(mob/living/carbon/human/ice_settler, visualsOnly = FALSE)
+/datum/outfit/consumed_ice_settler/pre_equip(mob/living/carbon/human/ice_settler, visuals_only = FALSE)
if(prob(40))
r_pocket = pick_weight(list(
/obj/item/coin/silver = 5,
@@ -333,8 +333,8 @@
shoes = /obj/item/clothing/shoes/laceup
r_pocket = /obj/item/tank/internals/emergency_oxygen
-/datum/outfit/consumed_dame/pre_equip(mob/living/carbon/human/dame, visualsOnly = FALSE)
- if(!visualsOnly)
+/datum/outfit/consumed_dame/pre_equip(mob/living/carbon/human/dame, visuals_only = FALSE)
+ if(!visuals_only)
dame.gender = FEMALE
dame.physique = FEMALE
dame.update_body()
@@ -356,8 +356,8 @@
accessory = /obj/item/clothing/accessory/medal/plasma/nobel_science
-/datum/outfit/consumed_shadowperson/pre_equip(mob/living/carbon/human/shadowperson, visualsOnly = FALSE)
- if(visualsOnly)
+/datum/outfit/consumed_shadowperson/pre_equip(mob/living/carbon/human/shadowperson, visuals_only = FALSE)
+ if(visuals_only)
return
shadowperson.set_species(/datum/species/shadow)
@@ -381,8 +381,8 @@
suit = /obj/item/clothing/suit/hooded/cultrobes/eldritch
head = /obj/item/clothing/head/hooded/cult_hoodie/eldritch
-/datum/outfit/consumed_heremoth/pre_equip(mob/living/carbon/human/moth, visualsOnly = FALSE)
- if(!visualsOnly)
+/datum/outfit/consumed_heremoth/pre_equip(mob/living/carbon/human/moth, visuals_only = FALSE)
+ if(!visuals_only)
moth.set_species(/datum/species/moth)
if(prob(70))
glasses = /obj/item/clothing/glasses/blindfold
diff --git a/code/modules/mob_spawn/ghost_roles/golem_roles.dm b/code/modules/mob_spawn/ghost_roles/golem_roles.dm
index 5fc643bffa622..af7cde7320d0c 100644
--- a/code/modules/mob_spawn/ghost_roles/golem_roles.dm
+++ b/code/modules/mob_spawn/ghost_roles/golem_roles.dm
@@ -78,7 +78,7 @@
if(!ishuman(new_spawn))
return
var/mob/living/carbon/human/new_golem = new_spawn
- var/obj/item/organ/internal/vocal_cords/adamantine/free_golem_radio = new()
+ var/obj/item/organ/vocal_cords/adamantine/free_golem_radio = new()
free_golem_radio.Insert(new_golem)
// Subtype which follows orders
diff --git a/code/modules/mob_spawn/ghost_roles/mining_roles.dm b/code/modules/mob_spawn/ghost_roles/mining_roles.dm
index 12b5c6deb2f2f..3edfbb3416ac7 100644
--- a/code/modules/mob_spawn/ghost_roles/mining_roles.dm
+++ b/code/modules/mob_spawn/ghost_roles/mining_roles.dm
@@ -99,9 +99,9 @@
l_pocket = /obj/item/food/pizzaslice/dank
r_pocket = /obj/item/storage/wallet/random
-/datum/outfit/beachbum/post_equip(mob/living/carbon/human/bum, visualsOnly = FALSE)
+/datum/outfit/beachbum/post_equip(mob/living/carbon/human/bum, visuals_only = FALSE)
. = ..()
- if(visualsOnly)
+ if(visuals_only)
return
bum.dna.add_mutation(/datum/mutation/human/stoner)
@@ -131,7 +131,7 @@
glasses = /obj/item/clothing/glasses/sunglasses/reagent
shoes = /obj/item/clothing/shoes/sneakers/black
-/datum/outfit/spacebartender/post_equip(mob/living/carbon/human/bartender, visualsOnly = FALSE)
+/datum/outfit/spacebartender/post_equip(mob/living/carbon/human/bartender, visuals_only = FALSE)
. = ..()
var/obj/item/card/id/id_card = bartender.wear_id
if(bartender.age < AGE_MINOR)
@@ -312,7 +312,7 @@
implants = list(/obj/item/implant/weapons_auth)
-/datum/outfit/lavaland_syndicate/post_equip(mob/living/carbon/human/syndicate, visualsOnly = FALSE)
+/datum/outfit/lavaland_syndicate/post_equip(mob/living/carbon/human/syndicate, visuals_only = FALSE)
syndicate.faction |= ROLE_SYNDICATE
/datum/outfit/lavaland_syndicate/comms
diff --git a/code/modules/mod/mod_activation.dm b/code/modules/mod/mod_activation.dm
index 7da28c17a3a46..ed19d0a4f6a2d 100644
--- a/code/modules/mod/mod_activation.dm
+++ b/code/modules/mod/mod_activation.dm
@@ -20,13 +20,14 @@
var/obj/item/part = locate(part_reference) in get_parts()
if(!istype(part) || user.incapacitated)
return
- if(active || activating)
- balloon_alert(user, "deactivate the suit first!")
+ if(activating)
+ balloon_alert(user, "currently [active ? "unsealing" : "sealing"]!")
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
return
var/parts_to_check = parts - part
if(part.loc == src)
- deploy(user, part)
+ if(!deploy(user, part) || (active && !delayed_seal_part(part)))
+ return
SEND_SIGNAL(src, COMSIG_MOD_DEPLOYED, user)
for(var/obj/item/checking_part as anything in parts_to_check)
if(checking_part.loc != src)
@@ -34,7 +35,8 @@
choose_deploy(user)
break
else
- retract(user, part)
+ if((active && !delayed_seal_part(part, silent = TRUE)) || !retract(user, part))
+ return
SEND_SIGNAL(src, COMSIG_MOD_RETRACTED, user)
for(var/obj/item/checking_part as anything in parts_to_check)
if(checking_part.loc == src)
@@ -44,25 +46,31 @@
/// Quickly deploys all parts (or retracts if all are on the wearer)
/obj/item/mod/control/proc/quick_deploy(mob/user)
- if(active || activating)
- balloon_alert(user, "deactivate the suit first!")
+ if(activating)
+ balloon_alert(user, "currently [active ? "unsealing" : "sealing"]!")
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
return FALSE
- var/deploy = TRUE
+ var/deploy = FALSE
for(var/obj/item/part as anything in get_parts())
- if(part.loc == src)
+ if(part.loc != src)
continue
- deploy = FALSE
+ deploy = TRUE
break
- for(var/obj/item/part as anything in get_parts())
- if(deploy && part.loc == src)
- deploy(null, part)
- else if(!deploy && part.loc != src)
- retract(null, part)
wearer.visible_message(span_notice("[wearer]'s [src] [deploy ? "deploys" : "retracts"] its parts with a mechanical hiss."),
span_notice("[src] [deploy ? "deploys" : "retracts"] its parts with a mechanical hiss."),
span_hear("You hear a mechanical hiss."))
playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ for(var/obj/item/part as anything in get_parts())
+ if(deploy && part.loc == src)
+ if(!deploy(null, part))
+ continue
+ if(active && !delayed_seal_part(part))
+ retract(null, part)
+ return
+ else if(!deploy && part.loc != src)
+ if(active && !delayed_seal_part(part))
+ return
+ retract(null, part)
if(deploy)
SEND_SIGNAL(src, COMSIG_MOD_DEPLOYED, user)
else
@@ -88,6 +96,7 @@
RegisterSignal(part, COMSIG_ATOM_EXITED, PROC_REF(on_overslot_exit))
if(wearer.equip_to_slot_if_possible(part, part.slot_flags, qdel_on_fail = FALSE, disable_warning = TRUE))
ADD_TRAIT(part, TRAIT_NODROP, MOD_TRAIT)
+ wearer.update_clothing(slot_flags)
if(!user)
return TRUE
wearer.visible_message(span_notice("[wearer]'s [part.name] deploy[part.p_s()] with a mechanical hiss."),
@@ -97,6 +106,10 @@
SEND_SIGNAL(src, COMSIG_MOD_PART_DEPLOYED, user, part)
return TRUE
else
+ if(part_datum.overslotting)
+ var/obj/item/overslot = part_datum.overslotting
+ if(!wearer.equip_to_slot_if_possible(overslot, overslot.slot_flags, qdel_on_fail = FALSE, disable_warning = TRUE))
+ wearer.dropItemToGround(overslot, force = TRUE, silent = TRUE)
if(!user)
return FALSE
balloon_alert(user, "bodypart clothed!")
@@ -111,21 +124,22 @@
return FALSE
balloon_alert(user, "[part.name] already retracted!")
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
+ return FALSE
REMOVE_TRAIT(part, TRAIT_NODROP, MOD_TRAIT)
wearer.transferItemToLoc(part, src, force = TRUE)
if(part_datum.overslotting)
- UnregisterSignal(part, COMSIG_ATOM_EXITED)
var/obj/item/overslot = part_datum.overslotting
if(!QDELING(wearer) && !wearer.equip_to_slot_if_possible(overslot, overslot.slot_flags, qdel_on_fail = FALSE, disable_warning = TRUE))
wearer.dropItemToGround(overslot, force = TRUE, silent = TRUE)
- part_datum.overslotting = null
+ wearer.update_clothing(slot_flags)
SEND_SIGNAL(src, COMSIG_MOD_PART_RETRACTED, user, part)
if(!user)
- return
+ return TRUE
wearer.visible_message(span_notice("[wearer]'s [part.name] retract[part.p_s()] back into [src] with a mechanical hiss."),
span_notice("[part] retract[part.p_s()] back into [src] with a mechanical hiss."),
span_hear("You hear a mechanical hiss."))
playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ return TRUE
/// Starts the activation sequence, where parts of the suit activate one by one until the whole suit is on.
/obj/item/mod/control/proc/toggle_activate(mob/user, force_deactivate = FALSE)
@@ -137,11 +151,6 @@
if(!force_deactivate && (SEND_SIGNAL(src, COMSIG_MOD_ACTIVATE, user) & MOD_CANCEL_ACTIVATE))
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
return FALSE
- for(var/obj/item/part as anything in get_parts())
- if(!force_deactivate && part.loc == src)
- balloon_alert(user, "deploy all parts first!")
- playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
- return FALSE
if(locked && !active && !allowed(user) && !force_deactivate)
balloon_alert(user, "access insufficient!")
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
@@ -165,28 +174,69 @@
module.deactivate(display_message = FALSE)
activating = TRUE
mod_link.end_call()
+ var/original_active_status = active
to_chat(wearer, span_notice("MODsuit [active ? "shutting down" : "starting up"]."))
- for(var/obj/item/part as anything in get_parts())
- var/datum/mod_part/part_datum = get_part_datum(part)
- if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(get_wearer)), hidden = TRUE))
- to_chat(wearer, span_notice("[part] [active ? part_datum.unsealed_message : part_datum.sealed_message]."))
- playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
- seal_part(part, is_sealed = !active)
- if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(get_wearer)), hidden = TRUE))
- to_chat(wearer, span_notice("Systems [active ? "shut down. Parts unsealed. Goodbye" : "started up. Parts sealed. Welcome"], [wearer]."))
- if(ai_assistant)
- to_chat(ai_assistant, span_notice("SYSTEMS [active ? "DEACTIVATED. GOODBYE" : "ACTIVATED. WELCOME"]: \"[ai_assistant]\""))
- finish_activation(is_on = !active)
- if(active)
+ //deploy the control unit
+ if(original_active_status)
+ if(delayed_activation())
+ playsound(src, 'sound/machines/synth/synth_no.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000)
+ to_chat(wearer, span_notice("Control unit offline. Module capability removed."))
+ else
+ activating = FALSE
+ return
+
+ var/list/sealed_parts = list()
+
+ for(var/obj/item/part as anything in get_parts()) //seals/unseals all deployed parts
+ if(part.loc == src)
+ continue
+ if(!delayed_seal_part(part)) //shit something broke, revert it all
+ activating = FALSE
+ for(var/obj/item/sealed_part as anything in sealed_parts)
+ seal_part(sealed_part, is_sealed = !get_part_datum(sealed_part).sealed)
+ if(original_active_status)
+ control_activation(is_on = TRUE)
+ to_chat(wearer, span_notice("Critical error in sealing systems. Reverting process."))
+ playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
+ return
+ sealed_parts += part
+
+ if(!original_active_status)
+ if(delayed_activation())
playsound(src, 'sound/machines/synth/synth_yes.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000)
if(!malfunctioning)
wearer.playsound_local(get_turf(src), 'sound/vehicles/mecha/nominal.ogg', 50)
else
- playsound(src, 'sound/machines/synth/synth_no.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000)
+ activating = FALSE
+ for(var/obj/item/sealed_part as anything in sealed_parts)
+ seal_part(sealed_part, is_sealed = !get_part_datum(sealed_part).sealed)
+ to_chat(wearer, span_notice("Critical error in sealing systems. Reverting process."))
+ playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
+ return
+
+ to_chat(wearer, span_notice("Systems [active ? "started up. Parts sealed. Welcome" : "shut down. Parts unsealed. Goodbye"], [wearer]."))
+ if(ai_assistant)
+ to_chat(ai_assistant, span_notice("SYSTEMS [active ? "ACTIVATED. WELCOME" : "DEACTIVATED. GOODBYE"]: \"[ai_assistant]\""))
activating = FALSE
SEND_SIGNAL(src, COMSIG_MOD_TOGGLED, user)
return TRUE
+/obj/item/mod/control/proc/delayed_seal_part(obj/item/clothing/part, silent = FALSE)
+ . = FALSE
+ var/datum/mod_part/part_datum = get_part_datum(part)
+ if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(get_wearer)), hidden = TRUE))
+ if(!silent)
+ to_chat(wearer, span_notice("[part] [!part_datum.sealed ? part_datum.sealed_message : part_datum.unsealed_message]."))
+ playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ seal_part(part, is_sealed = !part_datum.sealed)
+ return TRUE
+
+/obj/item/mod/control/proc/delayed_activation()
+ . = FALSE
+ if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(get_wearer)), hidden = TRUE))
+ control_activation(is_on = !active)
+ return TRUE
+
///Seals or unseals the given part.
/obj/item/mod/control/proc/seal_part(obj/item/clothing/part, is_sealed)
var/datum/mod_part/part_datum = get_part_datum(part)
@@ -207,37 +257,60 @@
part.heat_protection = NONE
part.cold_protection = NONE
part.alternate_worn_layer = part_datum.unsealed_layer
- wearer.update_clothing(part.slot_flags)
+ generate_suit_mask()
+ wearer.update_clothing(part.slot_flags | slot_flags)
wearer.update_obscured_slots(part.visor_flags_inv)
if((part.clothing_flags & (MASKINTERNALS|HEADINTERNALS)) && wearer.invalid_internals())
wearer.cutoff_internals()
+ if(!active)
+ return
+ if(is_sealed)
+ for(var/obj/item/mod/module/module as anything in modules)
+ if(module.part_activated || !module.has_required_parts(mod_parts, need_active = TRUE))
+ continue
+ module.on_part_activation()
+ module.part_activated = TRUE
+ else
+ for(var/obj/item/mod/module/module as anything in modules)
+ if(!module.part_activated || module.has_required_parts(mod_parts, need_active = TRUE))
+ continue
+ module.on_part_deactivation()
+ module.part_activated = FALSE
+ if(!module.active || (module.allow_flags & MODULE_ALLOW_INACTIVE))
+ continue
+ module.deactivate(display_message = FALSE)
/// Finishes the suit's activation
-/obj/item/mod/control/proc/finish_activation(is_on)
+/obj/item/mod/control/proc/control_activation(is_on)
var/datum/mod_part/part_datum = get_part_datum(src)
part_datum.sealed = is_on
active = is_on
if(active)
for(var/obj/item/mod/module/module as anything in modules)
- module.on_suit_activation()
+ if(module.part_activated || !module.has_required_parts(mod_parts, need_active = TRUE))
+ continue
+ module.on_part_activation()
+ module.part_activated = TRUE
else
for(var/obj/item/mod/module/module as anything in modules)
- module.on_suit_deactivation()
+ if(!module.part_activated || module.has_required_parts(mod_parts, need_active = TRUE))
+ continue
+ module.on_part_deactivation()
+ module.part_activated = FALSE
update_speed()
- update_appearance(UPDATE_ICON_STATE)
update_charge_alert()
+ update_appearance(UPDATE_ICON_STATE)
+ generate_suit_mask()
wearer.update_clothing(slot_flags)
/// Quickly deploys all the suit parts and if successful, seals them and turns on the suit. Intended mostly for outfits.
/obj/item/mod/control/proc/quick_activation()
- var/seal = TRUE
for(var/obj/item/part as anything in get_parts())
- if(!deploy(null, part))
- seal = FALSE
- if(!seal)
- return
+ deploy(null, part)
for(var/obj/item/part as anything in get_parts())
+ if(part.loc == src)
+ continue
seal_part(part, is_sealed = TRUE)
- finish_activation(is_on = TRUE)
+ control_activation(is_on = TRUE)
#undef MOD_ACTIVATION_STEP_FLAGS
diff --git a/code/modules/mod/mod_clothes.dm b/code/modules/mod/mod_clothes.dm
index 1c8ca8e5416c7..29377c66c6da4 100644
--- a/code/modules/mod/mod_clothes.dm
+++ b/code/modules/mod/mod_clothes.dm
@@ -29,6 +29,7 @@
heat_protection = CHEST|GROIN
cold_protection = CHEST|GROIN
item_flags = IMMUTABLE_SLOW
+ drop_sound = null
/obj/item/clothing/gloves/mod
name = "MOD gauntlets"
@@ -42,6 +43,8 @@
heat_protection = HANDS|ARMS
cold_protection = HANDS|ARMS
item_flags = IMMUTABLE_SLOW
+ equip_sound = null
+ drop_sound = null
/obj/item/clothing/shoes/mod
name = "MOD boots"
@@ -56,3 +59,4 @@
cold_protection = FEET|LEGS
item_flags = IGNORE_DIGITIGRADE | IMMUTABLE_SLOW
can_be_tied = FALSE
+ equip_sound = null
diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm
index df2096ae367a4..0f521e40691f4 100644
--- a/code/modules/mod/mod_control.dm
+++ b/code/modules/mod/mod_control.dm
@@ -219,6 +219,10 @@
/obj/item/mod/control/allow_attack_hand_drop(mob/user)
if(user != wearer)
return ..()
+ if(active)
+ balloon_alert(wearer, "deactivate the suit first!")
+ playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE)
+ return
for(var/obj/item/part as anything in get_parts())
if(part.loc != src)
balloon_alert(user, "retract parts first!")
@@ -228,6 +232,10 @@
/obj/item/mod/control/mouse_drop_dragged(atom/over_object, mob/user)
if(user != wearer || !istype(over_object, /atom/movable/screen/inventory/hand))
return
+ if(active)
+ balloon_alert(wearer, "deactivate the suit first!")
+ playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE)
+ return
for(var/obj/item/part as anything in get_parts())
if(part.loc != src)
balloon_alert(wearer, "retract parts first!")
@@ -467,6 +475,30 @@
wearer.update_spacesuit_hud_icon("0")
wearer = null
+/obj/item/mod/control/proc/get_sealed_slots(list/parts)
+ var/covered_slots = NONE
+ for(var/obj/item/part as anything in parts)
+ if(!get_part_datum(part).sealed)
+ parts -= part
+ continue
+ covered_slots |= part.slot_flags
+ return covered_slots
+
+/obj/item/mod/control/proc/generate_suit_mask()
+ var/list/parts = get_parts(all = TRUE)
+ var/covered_slots = get_sealed_slots(parts)
+ if(GLOB.mod_masks[skin])
+ if(GLOB.mod_masks[skin]["[covered_slots]"])
+ return GLOB.mod_masks[skin]["[covered_slots]"]
+ else
+ GLOB.mod_masks[skin] = list()
+ var/icon/slot_mask = icon('icons/blanks/32x32.dmi', "nothing")
+ for(var/obj/item/part as anything in parts)
+ slot_mask.Blend(icon(part.worn_icon, part.icon_state), ICON_OVERLAY)
+ slot_mask.Blend("#fff", ICON_ADD)
+ GLOB.mod_masks[skin]["[covered_slots]"] = slot_mask
+ return GLOB.mod_masks[skin]["[covered_slots]"]
+
/obj/item/mod/control/proc/clean_up()
if(QDELING(src))
unset_wearer()
@@ -481,7 +513,7 @@
for(var/obj/item/part as anything in get_parts())
retract(null, part)
if(active)
- finish_activation(is_on = FALSE)
+ control_activation(is_on = FALSE)
mod_link?.end_call()
var/mob/old_wearer = wearer
unset_wearer()
@@ -575,8 +607,9 @@
new_module.on_install()
if(wearer)
new_module.on_equip()
- if(active)
- new_module.on_suit_activation()
+ if(active && new_module.has_required_parts(mod_parts, need_active = TRUE))
+ new_module.on_part_activation()
+ new_module.part_activated = TRUE
if(user)
balloon_alert(user, "[new_module] added")
playsound(src, 'sound/machines/click.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE)
@@ -587,7 +620,7 @@
if(wearer)
old_module.on_unequip()
if(active)
- old_module.on_suit_deactivation(deleting = deleting)
+ old_module.on_part_deactivation(deleting = deleting)
if(old_module.active)
old_module.deactivate(display_message = !deleting, deleting = deleting)
old_module.UnregisterSignal(src, COMSIG_ITEM_GET_WORN_OVERLAYS)
@@ -646,7 +679,7 @@
/obj/item/mod/control/proc/update_speed()
for(var/obj/item/part as anything in get_parts(all = TRUE))
- part.slowdown = (active ? slowdown_active : slowdown_inactive) / length(mod_parts)
+ part.slowdown = (get_part_datum(part).sealed ? slowdown_active : slowdown_inactive) / length(mod_parts)
wearer?.update_equipment_speed_mods()
/obj/item/mod/control/proc/power_off()
@@ -673,14 +706,15 @@
uninstall(part)
return
if(part in get_parts())
+ var/datum/mod_part/part_datum = get_part_datum(part)
+ if(part_datum.sealed)
+ seal_part(part, is_sealed = FALSE)
if(isnull(part.loc))
return
if(!wearer)
part.forceMove(src)
return
retract(wearer, part)
- if(active)
- INVOKE_ASYNC(src, PROC_REF(toggle_activate), wearer, TRUE)
/obj/item/mod/control/proc/on_part_destruction(obj/item/part, damage_flag)
SIGNAL_HANDLER
@@ -703,6 +737,7 @@
var/datum/mod_part/part_datum = get_part_datum(part)
if(overslot != part_datum.overslotting)
return
+ UnregisterSignal(part, COMSIG_ATOM_EXITED)
part_datum.overslotting = null
/obj/item/mod/control/proc/on_potion(atom/movable/source, obj/item/slimepotion/speed/speed_potion, mob/living/user)
diff --git a/code/modules/mod/mod_core.dm b/code/modules/mod/mod_core.dm
index 791c5347722b6..79a8eff5e290a 100644
--- a/code/modules/mod/mod_core.dm
+++ b/code/modules/mod/mod_core.dm
@@ -265,27 +265,27 @@
var/charge_modifier = 0.1
/obj/item/mod/core/ethereal/charge_source()
- var/obj/item/organ/internal/stomach/ethereal/ethereal_stomach = mod.wearer.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/ethereal/ethereal_stomach = mod.wearer.get_organ_slot(ORGAN_SLOT_STOMACH)
if(!istype(ethereal_stomach))
return
return ethereal_stomach
/obj/item/mod/core/ethereal/charge_amount()
- var/obj/item/organ/internal/stomach/ethereal/charge_source = charge_source()
+ var/obj/item/organ/stomach/ethereal/charge_source = charge_source()
return charge_source?.cell.charge() || ETHEREAL_CHARGE_NONE
/obj/item/mod/core/ethereal/max_charge_amount()
return ETHEREAL_CHARGE_FULL
/obj/item/mod/core/ethereal/add_charge(amount)
- var/obj/item/organ/internal/stomach/ethereal/charge_source = charge_source()
+ var/obj/item/organ/stomach/ethereal/charge_source = charge_source()
if(!charge_source)
return FALSE
charge_source.adjust_charge(amount*charge_modifier)
return TRUE
/obj/item/mod/core/ethereal/subtract_charge(amount)
- var/obj/item/organ/internal/stomach/ethereal/charge_source = charge_source()
+ var/obj/item/organ/stomach/ethereal/charge_source = charge_source()
if(!charge_source)
return FALSE
return -charge_source.adjust_charge(-amount*charge_modifier)
diff --git a/code/modules/mod/modules/_module.dm b/code/modules/mod/modules/_module.dm
index 551145b5e6d3a..28a588609a783 100644
--- a/code/modules/mod/modules/_module.dm
+++ b/code/modules/mod/modules/_module.dm
@@ -39,12 +39,18 @@
var/cooldown_time = 0
/// The mouse button needed to use this module
var/used_signal
+ /// Are all parts needed active- have we ran on_part_activation
+ var/part_activated = FALSE
+ /// Do we need the parts to be extended to run process
+ var/part_process = TRUE
/// List of REF()s mobs we are pinned to, linked with their action buttons
var/list/pinned_to = list()
/// flags that let the module ability be used in odd circumstances
var/allow_flags = NONE
/// A list of slots required in the suit to work. Formatted like list(x|y, z, ...) where either x or y are required and z is required.
var/list/required_slots = list()
+ /// If TRUE worn overlay will be masked with the suit, preventing any bits from poking out of its controur
+ var/mask_worn_overlay = FALSE
/// Timer for the cooldown
COOLDOWN_DECLARE(cooldown_timer)
@@ -77,14 +83,14 @@
. += span_notice("Complexity level: [complexity]")
/// Looks through the MODsuit's parts to see if it has the parts required to support this module
-/obj/item/mod/module/proc/has_required_parts(list/parts, need_extended = FALSE)
+/obj/item/mod/module/proc/has_required_parts(list/parts, need_active = FALSE)
if(!length(required_slots))
return TRUE
var/total_slot_flags = NONE
for(var/part_slot in parts)
- if(need_extended)
+ if(need_active)
var/datum/mod_part/part_datum = parts[part_slot]
- if(part_datum.part_item.loc == mod)
+ if(!part_datum.sealed)
continue
total_slot_flags |= text2num(part_slot)
var/list/needed_slots = required_slots.Copy()
@@ -108,6 +114,16 @@
if(mod.wearer)
balloon_alert(mod.wearer, "not active!")
return
+ if(!has_required_parts(mod.mod_parts, need_active = TRUE))
+ if(mod.wearer)
+ balloon_alert(mod.wearer, "required parts inactive!")
+ var/list/slot_strings = list()
+ for(var/slot in required_slots)
+ var/list/slot_list = parse_slot_flags(slot)
+ slot_strings += (length(slot_list) == 1 ? "" : "one of ") + english_list(slot_list, and_text = " or ")
+ to_chat(mod.wearer, span_warning("[src] requires these slots to be deployed: [english_list(slot_strings)]"))
+ playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
+ return
if(module_type != MODULE_USABLE)
if(active)
deactivate()
@@ -157,7 +173,6 @@
balloon_alert(mod.wearer, "[src] activated, [used_button]-click to use")
active = TRUE
mod.wearer.update_clothing(mod.slot_flags)
- start_cooldown()
SEND_SIGNAL(src, COMSIG_MODULE_ACTIVATED)
on_activation()
return TRUE
@@ -219,6 +234,8 @@
/// Called on the MODsuit's process
/obj/item/mod/module/proc/on_process(seconds_per_tick)
+ if(part_process && !part_activated)
+ return FALSE
if(active)
if(!drain_power(active_power_cost * seconds_per_tick))
deactivate()
@@ -253,11 +270,11 @@
return
/// Called when the MODsuit is activated
-/obj/item/mod/module/proc/on_suit_activation()
+/obj/item/mod/module/proc/on_part_activation()
return
/// Called when the MODsuit is deactivated
-/obj/item/mod/module/proc/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/proc/on_part_deactivation(deleting = FALSE)
return
/// Called when the MODsuit is equipped
@@ -325,21 +342,46 @@
/// Generates an icon to be used for the suit's worn overlays
/obj/item/mod/module/proc/generate_worn_overlay(mutable_appearance/standing)
. = list()
- if(!mod.active)
+ if(!mod.active || !has_required_parts(mod.mod_parts, need_active = TRUE))
return
- var/used_overlay
- if(overlay_state_use && !COOLDOWN_FINISHED(src, cooldown_timer))
- used_overlay = overlay_state_use
- else if(overlay_state_active && active)
- used_overlay = overlay_state_active
- else if(overlay_state_inactive)
- used_overlay = overlay_state_inactive
- else
+ var/used_overlay = get_current_overlay_state()
+ if (!used_overlay)
return
- var/mutable_appearance/module_icon = mutable_appearance(overlay_icon_file, used_overlay, layer = standing.layer + 0.1)
+ var/mutable_appearance/module_icon
+ if(mask_worn_overlay)
+ module_icon = mutable_appearance(get_module_icon_cache(used_overlay), layer = standing.layer + 0.1)
+ else
+ module_icon = mutable_appearance(overlay_icon_file, used_overlay, layer = standing.layer + 0.1)
if(!use_mod_colors)
module_icon.appearance_flags |= RESET_COLOR
+
. += module_icon
+ SEND_SIGNAL(src, COMSIG_MODULE_GENERATE_WORN_OVERLAY, ., standing)
+
+/obj/item/mod/module/proc/get_current_overlay_state()
+ if(overlay_state_use && !COOLDOWN_FINISHED(src, cooldown_timer))
+ return overlay_state_use
+ if(overlay_state_active && active)
+ return overlay_state_active
+ if(overlay_state_inactive)
+ return overlay_state_inactive
+ return null
+
+/obj/item/mod/module/proc/get_module_icon_cache(used_overlay)
+ var/covered_slots = mod.get_sealed_slots(mod.get_parts(all = TRUE))
+ if (GLOB.mod_module_overlays[mod.skin])
+ if (GLOB.mod_module_overlays[mod.skin]["[covered_slots]"])
+ if (GLOB.mod_module_overlays[mod.skin]["[covered_slots]"][used_overlay])
+ return GLOB.mod_module_overlays[mod.skin]["[covered_slots]"][used_overlay]
+ else
+ GLOB.mod_module_overlays[mod.skin]["[covered_slots]"] = list()
+ else
+ GLOB.mod_module_overlays[mod.skin] = list()
+ GLOB.mod_module_overlays[mod.skin]["[covered_slots]"] = list()
+ var/icon/mod_mask = icon(mod.generate_suit_mask())
+ mod_mask.Blend(icon(overlay_icon_file, used_overlay), ICON_MULTIPLY)
+ GLOB.mod_module_overlays[mod.skin]["[covered_slots]"][used_overlay] = mod_mask
+ return GLOB.mod_module_overlays[mod.skin]["[covered_slots]"][used_overlay]
/// Updates the signal used by active modules to be activated
/obj/item/mod/module/proc/update_signal(value)
diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm
index 8fa2670c76091..0401dbfdbe969 100644
--- a/code/modules/mod/modules/modules_antag.dm
+++ b/code/modules/mod/modules/modules_antag.dm
@@ -12,10 +12,10 @@
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3
removable = FALSE
incompatible_modules = list(/obj/item/mod/module/armor_booster, /obj/item/mod/module/welding, /obj/item/mod/module/headprotector)
- cooldown_time = 0.5 SECONDS
overlay_state_inactive = "module_armorbooster_off"
overlay_state_active = "module_armorbooster_on"
use_mod_colors = TRUE
+ mask_worn_overlay = TRUE
/// Whether or not this module removes pressure protection.
var/remove_pressure_protection = TRUE
/// Speed added to the control unit.
@@ -36,12 +36,12 @@
laser = 15
energy = 15
-/obj/item/mod/module/armor_booster/on_suit_activation()
+/obj/item/mod/module/armor_booster/on_part_activation()
var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES)
if(istype(head_cover))
head_cover.flash_protect = FLASH_PROTECTION_WELDER
-/obj/item/mod/module/armor_booster/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/armor_booster/on_part_deactivation(deleting = FALSE)
if(deleting)
return
var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES)
@@ -52,36 +52,38 @@
playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
balloon_alert(mod.wearer, "armor boosted, EVA lost")
actual_speed_added = max(0, min(mod.slowdown_active, speed_added))
- mod.slowdown -= actual_speed_added
- mod.wearer.update_equipment_speed_mods()
var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES)
if(istype(head_cover))
ADD_TRAIT(mod.wearer, TRAIT_HEAD_INJURY_BLOCKED, MOD_TRAIT)
+ var/list/mod_parts = mod.get_parts(all = TRUE)
for(var/obj/item/part as anything in mod.get_parts(all = TRUE))
part.set_armor(part.get_armor().add_other_armor(armor_mod))
+ part.slowdown -= speed_added / length(mod_parts)
if(!remove_pressure_protection || !isclothing(part))
continue
var/obj/item/clothing/clothing_part = part
if(clothing_part.clothing_flags & STOPSPRESSUREDAMAGE)
clothing_part.clothing_flags &= ~STOPSPRESSUREDAMAGE
spaceproofed[clothing_part] = TRUE
+ mod.wearer.update_equipment_speed_mods()
/obj/item/mod/module/armor_booster/on_deactivation(display_message = TRUE, deleting = FALSE)
if(!deleting)
playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
balloon_alert(mod.wearer, "armor retracts, EVA ready")
- mod.slowdown += actual_speed_added
- mod.wearer.update_equipment_speed_mods()
var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES)
if(istype(head_cover))
REMOVE_TRAIT(mod.wearer, TRAIT_HEAD_INJURY_BLOCKED, MOD_TRAIT)
+ var/list/mod_parts = mod.get_parts(all = TRUE)
for(var/obj/item/part as anything in mod.get_parts(all = TRUE))
part.set_armor(part.get_armor().subtract_other_armor(armor_mod))
+ part.slowdown += speed_added / length(mod_parts)
if(!remove_pressure_protection || !isclothing(part))
continue
var/obj/item/clothing/clothing_part = part
if(spaceproofed[clothing_part])
clothing_part.clothing_flags |= STOPSPRESSUREDAMAGE
+ mod.wearer.update_equipment_speed_mods()
spaceproofed = list()
/obj/item/mod/module/armor_booster/generate_worn_overlay(mutable_appearance/standing)
@@ -125,12 +127,12 @@
. = ..()
charges = max_charges
-/obj/item/mod/module/energy_shield/on_suit_activation()
+/obj/item/mod/module/energy_shield/on_part_activation()
mod.AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_start_delay, charge_increment_delay = charge_increment_delay, \
charge_recovery = charge_recovery, lose_multiple_charges = lose_multiple_charges, recharge_path = recharge_path, starting_charges = charges, shield_icon_file = shield_icon_file, shield_icon = shield_icon)
RegisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(shield_reaction))
-/obj/item/mod/module/energy_shield/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/energy_shield/on_part_deactivation(deleting = FALSE)
var/datum/component/shielded/shield = mod.GetComponent(/datum/component/shielded)
charges = shield.current_charges
qdel(shield)
@@ -181,10 +183,10 @@
incompatible_modules = list(/obj/item/mod/module/anti_magic)
required_slots = list(ITEM_SLOT_BACK)
-/obj/item/mod/module/anti_magic/on_suit_activation()
+/obj/item/mod/module/anti_magic/on_part_activation()
mod.wearer.add_traits(list(TRAIT_ANTIMAGIC, TRAIT_HOLY), MOD_TRAIT)
-/obj/item/mod/module/anti_magic/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/anti_magic/on_part_deactivation(deleting = FALSE)
mod.wearer.remove_traits(list(TRAIT_ANTIMAGIC, TRAIT_HOLY), MOD_TRAIT)
/obj/item/mod/module/anti_magic/wizard
@@ -196,10 +198,10 @@
icon_state = "magic_neutralizer"
required_slots = list()
-/obj/item/mod/module/anti_magic/wizard/on_suit_activation()
+/obj/item/mod/module/anti_magic/wizard/on_part_activation()
mod.wearer.add_traits(list(TRAIT_ANTIMAGIC, TRAIT_ANTIMAGIC_NO_SELFBLOCK), MOD_TRAIT)
-/obj/item/mod/module/anti_magic/wizard/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/anti_magic/wizard/on_part_deactivation(deleting = FALSE)
mod.wearer.remove_traits(list(TRAIT_ANTIMAGIC, TRAIT_ANTIMAGIC_NO_SELFBLOCK), MOD_TRAIT)
///Insignia - Gives you a skin specific stripe.
@@ -213,6 +215,7 @@
removable = FALSE
incompatible_modules = list(/obj/item/mod/module/insignia)
overlay_state_inactive = "module_insignia"
+ mask_worn_overlay = TRUE
/obj/item/mod/module/insignia/generate_worn_overlay(mutable_appearance/standing)
overlay_state_inactive = "[initial(overlay_state_inactive)]-[mod.skin]"
@@ -258,14 +261,15 @@
incompatible_modules = list(/obj/item/mod/module/noslip)
required_slots = list(ITEM_SLOT_FEET)
-/obj/item/mod/module/noslip/on_suit_activation()
+/obj/item/mod/module/noslip/on_part_activation()
ADD_TRAIT(mod.wearer, TRAIT_NO_SLIP_WATER, MOD_TRAIT)
-/obj/item/mod/module/noslip/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/noslip/on_part_deactivation(deleting = FALSE)
REMOVE_TRAIT(mod.wearer, TRAIT_NO_SLIP_WATER, MOD_TRAIT)
//Bite of 87 Springlock - Equips faster, disguised as DNA lock.
/obj/item/mod/module/springlock/bite_of_87
+ step_change = 0.1
/obj/item/mod/module/springlock/bite_of_87/Initialize(mapload)
. = ..()
@@ -276,13 +280,7 @@
complexity = initial(the_dna_lock_behind_the_slaughter.complexity)
use_energy_cost = initial(the_dna_lock_behind_the_slaughter.use_energy_cost)
-/obj/item/mod/module/springlock/bite_of_87/on_install()
- mod.activation_step_time *= 0.1
-
-/obj/item/mod/module/springlock/bite_of_87/on_uninstall(deleting = FALSE)
- mod.activation_step_time *= 10
-
-/obj/item/mod/module/springlock/bite_of_87/on_suit_activation()
+/obj/item/mod/module/springlock/bite_of_87/on_part_activation()
..()
if(check_holidays(APRIL_FOOLS) || prob(1))
mod.set_mod_color("#b17f00")
@@ -488,11 +486,11 @@
required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT)
var/datum/proximity_monitor/advanced/demoraliser/demoralizer
-/obj/item/mod/module/demoralizer/on_suit_activation()
+/obj/item/mod/module/demoralizer/on_part_activation()
var/datum/demoralise_moods/module/mood_category = new()
demoralizer = new(mod.wearer, 7, TRUE, mood_category)
-/obj/item/mod/module/demoralizer/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/demoralizer/on_part_deactivation(deleting = FALSE)
QDEL_NULL(demoralizer)
/obj/item/mod/module/infiltrator
@@ -515,19 +513,19 @@
/obj/item/mod/module/infiltrator/on_uninstall(deleting = FALSE)
mod.item_flags &= ~EXAMINE_SKIP
-/obj/item/mod/module/infiltrator/on_suit_activation()
+/obj/item/mod/module/infiltrator/on_part_activation()
mod.wearer.add_traits(traits_to_add, MOD_TRAIT)
RegisterSignal(mod.wearer, COMSIG_TRY_MODIFY_SPEECH, PROC_REF(on_speech_modification))
- var/obj/item/organ/internal/tongue/user_tongue = mod.wearer.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/user_tongue = mod.wearer.get_organ_slot(ORGAN_SLOT_TONGUE)
user_tongue.temp_say_mod = "states"
var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD)
if(istype(head_cover))
head_cover.flash_protect = FLASH_PROTECTION_WELDER_HYPER_SENSITIVE
-/obj/item/mod/module/infiltrator/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/infiltrator/on_part_deactivation(deleting = FALSE)
mod.wearer.remove_traits(traits_to_add, MOD_TRAIT)
UnregisterSignal(mod.wearer, COMSIG_TRY_MODIFY_SPEECH)
- var/obj/item/organ/internal/tongue/user_tongue = mod.wearer.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/user_tongue = mod.wearer.get_organ_slot(ORGAN_SLOT_TONGUE)
user_tongue.temp_say_mod = initial(user_tongue.temp_say_mod)
if(deleting)
return
@@ -587,7 +585,16 @@
if(disrupted.on_saboteur(src, 1 MINUTES))
mod.add_charge(DEFAULT_CHARGE_DRAIN * 250)
-/obj/item/mod/module/stealth/wraith/on_suit_activation()
+/obj/item/mod/module/stealth/wraith/on_part_activation()
+ start_stealth()
+
+/obj/item/mod/module/stealth/wraith/on_part_deactivation(deleting)
+ if(bumpoff)
+ UnregisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP)
+ UnregisterSignal(mod.wearer, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_MOB_ITEM_ATTACK, COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_BULLET_ACT, COMSIG_ATOM_HITBY, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACK_PAW, COMSIG_CARBON_CUFF_ATTEMPTED))
+ animate(mod.wearer, alpha = 255, time = 1.5 SECONDS)
+
+/obj/item/mod/module/stealth/wraith/proc/start_stealth()
if(bumpoff)
RegisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP, PROC_REF(unstealth))
RegisterSignal(mod.wearer, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_unarmed_attack))
@@ -596,16 +603,10 @@
animate(mod.wearer, alpha = stealth_alpha, time = 1.5 SECONDS)
drain_power(use_energy_cost)
-/obj/item/mod/module/stealth/wraith/on_suit_deactivation(deleting)
- if(bumpoff)
- UnregisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP)
- UnregisterSignal(mod.wearer, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_MOB_ITEM_ATTACK, COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_BULLET_ACT, COMSIG_ATOM_HITBY, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACK_PAW, COMSIG_CARBON_CUFF_ATTEMPTED))
- animate(mod.wearer, alpha = 255, time = 1.5 SECONDS)
-
/obj/item/mod/module/stealth/wraith/unstealth(datum/source)
. = ..()
if(mod.active)
- addtimer(CALLBACK(src, PROC_REF(on_suit_activation)), 5 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(start_stealth)), 5 SECONDS)
/obj/item/mod/module/stealth/wraith/examine_more(mob/user)
. = ..()
diff --git a/code/modules/mod/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm
index 9ddb0f9351c82..aea9a415cf4e4 100644
--- a/code/modules/mod/modules/modules_engineering.dm
+++ b/code/modules/mod/modules/modules_engineering.dm
@@ -12,13 +12,13 @@
overlay_state_inactive = "module_welding"
required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK)
-/obj/item/mod/module/welding/on_suit_activation()
+/obj/item/mod/module/welding/on_part_activation()
var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES)
if(istype(head_cover))
//this is a screen that displays an image, so flash sensitives can use this to protect against flashes.
head_cover.flash_protect = FLASH_PROTECTION_WELDER_HYPER_SENSITIVE
-/obj/item/mod/module/welding/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/welding/on_part_deactivation(deleting = FALSE)
if(deleting)
return
var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) || mod.get_part_from_slot(ITEM_SLOT_MASK) || mod.get_part_from_slot(ITEM_SLOT_EYES)
@@ -36,7 +36,6 @@
complexity = 1
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.5
incompatible_modules = list(/obj/item/mod/module/t_ray)
- cooldown_time = 0.5 SECONDS
required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK)
/// T-ray scan range.
var/range = 4
@@ -56,7 +55,6 @@
complexity = 2
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.5
incompatible_modules = list(/obj/item/mod/module/magboot, /obj/item/mod/module/atrocinator)
- cooldown_time = 0.5 SECONDS
required_slots = list(ITEM_SLOT_FEET)
/// Slowdown added onto the suit.
var/slowdown_active = 0.5
@@ -244,13 +242,13 @@
target.AddComponent(/datum/component/tether, src, 7, "tether")
/datum/embed_data/tether_projectile
- embed_chance=65 // spiky
- fall_chance=2
- ignore_throwspeed_threshold=TRUE
- pain_stam_pct=0.4
- pain_mult=3
- jostle_pain_mult=2
- rip_time=1 SECONDS
+ embed_chance = 65 //spiky
+ fall_chance = 2
+ ignore_throwspeed_threshold = TRUE
+ pain_stam_pct = 0.4
+ pain_mult = 3
+ jostle_pain_mult = 2
+ rip_time = 1 SECONDS
///Radiation Protection - Protects the user from radiation, gives them a geiger counter and rad info in the panel.
/obj/item/mod/module/rad_protection
@@ -263,17 +261,18 @@
idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.3
incompatible_modules = list(/obj/item/mod/module/rad_protection)
tgui_id = "rad_counter"
+ required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING|ITEM_SLOT_ICLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET)
/// Radiation threat level being perceived.
var/perceived_threat_level
-/obj/item/mod/module/rad_protection/on_suit_activation()
+/obj/item/mod/module/rad_protection/on_part_activation()
AddComponent(/datum/component/geiger_sound)
ADD_TRAIT(mod.wearer, TRAIT_BYPASS_EARLY_IRRADIATED_CHECK, MOD_TRAIT)
RegisterSignal(mod.wearer, COMSIG_IN_RANGE_OF_IRRADIATION, PROC_REF(on_pre_potential_irradiation))
for(var/obj/item/part in mod.get_parts(all = TRUE))
ADD_TRAIT(part, TRAIT_RADIATION_PROTECTED_CLOTHING, MOD_TRAIT)
-/obj/item/mod/module/rad_protection/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/rad_protection/on_part_deactivation(deleting = FALSE)
qdel(GetComponent(/datum/component/geiger_sound))
REMOVE_TRAIT(mod.wearer, TRAIT_BYPASS_EARLY_IRRADIATED_CHECK, MOD_TRAIT)
UnregisterSignal(mod.wearer, COMSIG_IN_RANGE_OF_IRRADIATION)
@@ -309,10 +308,10 @@
cooldown_time = 11 SECONDS
required_slots = list(ITEM_SLOT_GLOVES)
-/obj/item/mod/module/constructor/on_suit_activation()
+/obj/item/mod/module/constructor/on_part_activation()
ADD_TRAIT(mod.wearer, TRAIT_QUICK_BUILD, MOD_TRAIT)
-/obj/item/mod/module/constructor/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/constructor/on_part_deactivation(deleting = FALSE)
REMOVE_TRAIT(mod.wearer, TRAIT_QUICK_BUILD, MOD_TRAIT)
/obj/item/mod/module/constructor/on_use()
@@ -332,10 +331,10 @@
incompatible_modules = list(/obj/item/mod/module/armor_booster, /obj/item/mod/module/infiltrator)
required_slots = list(ITEM_SLOT_HEAD)
-/obj/item/mod/module/headprotector/on_suit_activation()
+/obj/item/mod/module/headprotector/on_part_activation()
ADD_TRAIT(mod.wearer, TRAIT_HEAD_INJURY_BLOCKED, MOD_TRAIT)
-/obj/item/mod/module/headprotector/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/headprotector/on_part_deactivation(deleting = FALSE)
REMOVE_TRAIT(mod.wearer, TRAIT_HEAD_INJURY_BLOCKED, MOD_TRAIT)
///Mister - Sprays water over an area.
diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm
index 485b66941d434..14fc328aed7f0 100644
--- a/code/modules/mod/modules/modules_general.dm
+++ b/code/modules/mod/modules/modules_general.dm
@@ -104,7 +104,6 @@
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.5
use_energy_cost = DEFAULT_CHARGE_DRAIN
incompatible_modules = list(/obj/item/mod/module/jetpack)
- cooldown_time = 0.5 SECONDS
overlay_state_inactive = "module_jetpack"
overlay_state_active = "module_jetpack_on"
required_slots = list(ITEM_SLOT_BACK)
@@ -297,10 +296,10 @@
if("display_dna")
display_dna = text2num(value)
-/obj/item/mod/module/status_readout/on_suit_activation()
+/obj/item/mod/module/status_readout/on_part_activation()
RegisterSignal(mod.wearer, COMSIG_LIVING_DEATH, PROC_REF(death_sound))
-/obj/item/mod/module/status_readout/on_suit_deactivation(deleting)
+/obj/item/mod/module/status_readout/on_part_deactivation(deleting)
UnregisterSignal(mod.wearer, COMSIG_LIVING_DEATH)
/obj/item/mod/module/status_readout/proc/death_sound(mob/living/carbon/human/wearer)
@@ -387,10 +386,10 @@
including augmentations. However, it will take from the suit's power to do so."
complexity = 2
-/obj/item/mod/module/emp_shield/advanced/on_suit_activation()
+/obj/item/mod/module/emp_shield/advanced/on_part_activation()
mod.wearer.AddElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS)
-/obj/item/mod/module/emp_shield/advanced/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/emp_shield/advanced/on_part_deactivation(deleting = FALSE)
mod.wearer.RemoveElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS)
///Flashlight - Gives the suit a customizable flashlight.
@@ -404,7 +403,6 @@
complexity = 1
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3
incompatible_modules = list(/obj/item/mod/module/flashlight)
- cooldown_time = 0.5 SECONDS
overlay_state_inactive = "module_light"
light_system = OVERLAY_LIGHT_DIRECTIONAL
light_color = COLOR_WHITE
@@ -524,10 +522,10 @@
incompatible_modules = list(/obj/item/mod/module/longfall)
required_slots = list(ITEM_SLOT_FEET)
-/obj/item/mod/module/longfall/on_suit_activation()
+/obj/item/mod/module/longfall/on_part_activation()
RegisterSignal(mod.wearer, COMSIG_LIVING_Z_IMPACT, PROC_REF(z_impact_react))
-/obj/item/mod/module/longfall/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/longfall/on_part_deactivation(deleting = FALSE)
UnregisterSignal(mod.wearer, COMSIG_LIVING_Z_IMPACT)
/obj/item/mod/module/longfall/proc/z_impact_react(datum/source, levels, turf/fell_on)
@@ -560,7 +558,6 @@
complexity = 1
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3
incompatible_modules = list(/obj/item/mod/module/thermal_regulator)
- cooldown_time = 0.5 SECONDS
required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT)
/// The temperature we are regulating to.
var/temperature_setting = BODYTEMP_NORMAL
@@ -694,87 +691,23 @@
required_slots = list(ITEM_SLOT_HEAD)
/*Intentionally left inheriting 0 complexity and removable = TRUE;
even though it comes inbuilt into the Magnate/Corporate MODS and spawns in maints, I like the idea of stealing them*/
- /// Currently "stored" hat. No armor or function will be inherited, only the icon and cover flags.
- var/obj/item/clothing/head/attached_hat
/// Original cover flags for the MOD helmet, before a hat is placed
var/former_flags
var/former_visor_flags
-/obj/item/mod/module/hat_stabilizer/on_suit_activation()
+/obj/item/mod/module/hat_stabilizer/on_part_activation()
var/obj/item/clothing/helmet = mod.get_part_from_slot(ITEM_SLOT_HEAD)
if(!istype(helmet))
return
- RegisterSignal(helmet, COMSIG_ATOM_EXAMINE, PROC_REF(add_examine))
- RegisterSignal(helmet, COMSIG_ATOM_ATTACKBY, PROC_REF(place_hat))
- RegisterSignal(helmet, COMSIG_ATOM_ATTACK_HAND_SECONDARY, PROC_REF(remove_hat))
+ helmet.AddComponent(/datum/component/hat_stabilizer)
-/obj/item/mod/module/hat_stabilizer/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/hat_stabilizer/on_part_deactivation(deleting = FALSE)
if(deleting)
return
- if(attached_hat) //knock off the helmet if its on their head. Or, technically, auto-rightclick it for them; that way it saves us code, AND gives them the bubble
- remove_hat(src, mod.wearer)
var/obj/item/clothing/helmet = mod.get_part_from_slot(ITEM_SLOT_HEAD)
if(!istype(helmet))
return
- UnregisterSignal(helmet, COMSIG_ATOM_EXAMINE)
- UnregisterSignal(helmet, COMSIG_ATOM_ATTACKBY)
- UnregisterSignal(helmet, COMSIG_ATOM_ATTACK_HAND_SECONDARY)
-
-/obj/item/mod/module/hat_stabilizer/proc/add_examine(datum/source, mob/user, list/base_examine)
- SIGNAL_HANDLER
- if(attached_hat)
- base_examine += span_notice("There's \a [attached_hat] placed on the helmet. Right-click to remove it.")
- else
- base_examine += span_notice("There's nothing placed on the helmet. Yet.")
-
-/obj/item/mod/module/hat_stabilizer/proc/place_hat(datum/source, obj/item/hitting_item, mob/user)
- SIGNAL_HANDLER
- if(!istype(hitting_item, /obj/item/clothing/head))
- return
- var/obj/item/clothing/hat = hitting_item
- if(!mod.active)
- balloon_alert(user, "suit must be active!")
- return
- if(attached_hat)
- balloon_alert(user, "hat already attached!")
- return
- if(hat.clothing_flags & STACKABLE_HELMET_EXEMPT)
- balloon_alert(user, "invalid hat!")
- return
- if(mod.wearer.transferItemToLoc(hitting_item, src, force = FALSE, silent = TRUE))
- attached_hat = hat
- var/obj/item/clothing/helmet = mod.get_part_from_slot(ITEM_SLOT_HEAD)
- if(istype(helmet))
- helmet.attach_clothing_traits(attached_hat.clothing_traits)
- former_flags = helmet.flags_cover
- former_visor_flags = helmet.visor_flags_cover
- helmet.flags_cover |= attached_hat.flags_cover
- helmet.visor_flags_cover |= attached_hat.visor_flags_cover
- balloon_alert(user, "hat attached, right-click to remove")
- mod.wearer.update_clothing(mod.slot_flags)
-
-/obj/item/mod/module/hat_stabilizer/generate_worn_overlay()
- . = ..()
- if(attached_hat)
- . += attached_hat.build_worn_icon(default_layer = ABOVE_BODY_FRONT_HEAD_LAYER-0.1, default_icon_file = 'icons/mob/clothing/head/default.dmi')
-
-/obj/item/mod/module/hat_stabilizer/proc/remove_hat(datum/source, mob/user)
- SIGNAL_HANDLER
- . = SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
- if(!attached_hat)
- return
- attached_hat.forceMove(drop_location())
- if(user.put_in_active_hand(attached_hat))
- balloon_alert(user, "hat removed")
- else
- balloon_alert_to_viewers("the hat falls to the floor!")
- var/obj/item/clothing/helmet = mod.get_part_from_slot(ITEM_SLOT_HEAD)
- if(istype(helmet))
- helmet.detach_clothing_traits(attached_hat)
- helmet.flags_cover = former_flags
- helmet.visor_flags_cover = former_visor_flags
- attached_hat = null
- mod.wearer.update_clothing(mod.slot_flags)
+ qdel(helmet.GetComponent(/datum/component/hat_stabilizer))
/obj/item/mod/module/hat_stabilizer/syndicate
name = "MOD elite hat stabilizer module"
@@ -797,10 +730,10 @@
incompatible_modules = list(/obj/item/mod/module/signlang_radio)
required_slots = list(ITEM_SLOT_GLOVES)
-/obj/item/mod/module/signlang_radio/on_suit_activation()
+/obj/item/mod/module/signlang_radio/on_part_activation()
ADD_TRAIT(mod.wearer, TRAIT_CAN_SIGN_ON_COMMS, MOD_TRAIT)
-/obj/item/mod/module/signlang_radio/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/signlang_radio/on_part_deactivation(deleting = FALSE)
REMOVE_TRAIT(mod.wearer, TRAIT_CAN_SIGN_ON_COMMS, MOD_TRAIT)
///A module that recharges the suit by an itsy tiny bit whenever the user takes a step. Originally called "magneto module" but the videogame reference sounds cooler.
@@ -813,14 +746,14 @@
required_slots = list(ITEM_SLOT_FEET)
var/power_per_step = DEFAULT_CHARGE_DRAIN * 0.3
-/obj/item/mod/module/joint_torsion/on_suit_activation()
+/obj/item/mod/module/joint_torsion/on_part_activation()
if(!(mod.wearer.movement_type & (FLOATING|FLYING)))
RegisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved))
/// This way we don't even bother to call on_moved() while flying/floating
RegisterSignal(mod.wearer, COMSIG_MOVETYPE_FLAG_ENABLED, PROC_REF(on_movetype_flag_enabled))
RegisterSignal(mod.wearer, COMSIG_MOVETYPE_FLAG_DISABLED, PROC_REF(on_movetype_flag_disabled))
-/obj/item/mod/module/joint_torsion/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/joint_torsion/on_part_deactivation(deleting = FALSE)
UnregisterSignal(mod.wearer, list(COMSIG_MOVABLE_MOVED, COMSIG_MOVETYPE_FLAG_ENABLED, COMSIG_MOVETYPE_FLAG_DISABLED))
/obj/item/mod/module/joint_torsion/proc/on_movetype_flag_enabled(datum/source, flag, old_state)
@@ -1046,7 +979,7 @@
qdel(gloves.GetComponent(/datum/component/profound_fisher))
return ..()
-/obj/item/mod/module/fishing_glove/on_suit_activation()
+/obj/item/mod/module/fishing_glove/on_part_activation()
var/obj/item/gloves = mod.get_part_from_slot(ITEM_SLOT_GLOVES)
if(!gloves)
return
@@ -1054,7 +987,7 @@
if(equipped)
gloves.AddComponent(/datum/component/profound_fisher, equipped)
-/obj/item/mod/module/fishing_glove/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/fishing_glove/on_part_deactivation(deleting = FALSE)
var/obj/item/gloves = mod.get_part_from_slot(ITEM_SLOT_GLOVES)
if(gloves && !deleting)
qdel(gloves.GetComponent(/datum/component/adjust_fishing_difficulty))
@@ -1069,12 +1002,12 @@
incompatible_modules = list(/obj/item/mod/module/shock_absorber)
required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT)
-/obj/item/mod/module/shock_absorber/on_suit_activation()
+/obj/item/mod/module/shock_absorber/on_part_activation()
. = ..()
ADD_TRAIT(mod.wearer, TRAIT_BATON_RESISTANCE, REF(src))
RegisterSignal(mod.wearer, COMSIG_MOB_BATONED, PROC_REF(mob_batoned))
-/obj/item/mod/module/shock_absorber/on_suit_deactivation(deleting)
+/obj/item/mod/module/shock_absorber/on_part_deactivation(deleting)
. = ..()
REMOVE_TRAIT(mod.wearer, TRAIT_BATON_RESISTANCE, REF(src))
UnregisterSignal(mod.wearer, COMSIG_MOB_BATONED)
diff --git a/code/modules/mod/modules/modules_maint.dm b/code/modules/mod/modules/modules_maint.dm
index d2f1ceaef74d3..f6b978d05352f 100644
--- a/code/modules/mod/modules/modules_maint.dm
+++ b/code/modules/mod/modules/modules_maint.dm
@@ -14,18 +14,19 @@
var/static/list/gas_connections = list(
COMSIG_TURF_EXPOSE = PROC_REF(on_wearer_exposed_gas),
)
+ var/step_change = 0.5
/obj/item/mod/module/springlock/on_install()
- mod.activation_step_time *= 0.5
+ mod.activation_step_time *= step_change
/obj/item/mod/module/springlock/on_uninstall(deleting = FALSE)
- mod.activation_step_time *= 2
+ mod.activation_step_time /= step_change
-/obj/item/mod/module/springlock/on_suit_activation()
+/obj/item/mod/module/springlock/on_part_activation()
RegisterSignal(mod.wearer, COMSIG_ATOM_EXPOSE_REAGENTS, PROC_REF(on_wearer_exposed))
AddComponent(/datum/component/connect_loc_behalf, mod.wearer, gas_connections)
-/obj/item/mod/module/springlock/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/springlock/on_part_deactivation(deleting = FALSE)
UnregisterSignal(mod.wearer, COMSIG_ATOM_EXPOSE_REAGENTS)
qdel(GetComponent(/datum/component/connect_loc_behalf))
@@ -282,7 +283,6 @@
complexity = 2
active_power_cost = DEFAULT_CHARGE_DRAIN
incompatible_modules = list(/obj/item/mod/module/atrocinator, /obj/item/mod/module/magboot, /obj/item/mod/module/anomaly_locked/antigrav)
- cooldown_time = 0.5 SECONDS
overlay_state_inactive = "module_atrocinator"
required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT)
/// How many steps the user has taken since turning the suit on, used for footsteps.
diff --git a/code/modules/mod/modules/modules_medical.dm b/code/modules/mod/modules/modules_medical.dm
index a0cf2408860d0..154717cbcc11c 100644
--- a/code/modules/mod/modules/modules_medical.dm
+++ b/code/modules/mod/modules/modules_medical.dm
@@ -75,12 +75,12 @@
required_slots = list(ITEM_SLOT_GLOVES)
var/quick_carry_trait = TRAIT_QUICK_CARRY
-/obj/item/mod/module/quick_carry/on_suit_activation()
+/obj/item/mod/module/quick_carry/on_part_activation()
. = ..()
ADD_TRAIT(mod.wearer, TRAIT_FASTMED, MOD_TRAIT)
ADD_TRAIT(mod.wearer, quick_carry_trait, MOD_TRAIT)
-/obj/item/mod/module/quick_carry/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/quick_carry/on_part_deactivation(deleting = FALSE)
. = ..()
REMOVE_TRAIT(mod.wearer, TRAIT_FASTMED, MOD_TRAIT)
REMOVE_TRAIT(mod.wearer, quick_carry_trait, MOD_TRAIT)
@@ -370,7 +370,7 @@
playsound(src, 'sound/items/zip/zip.ogg', 25, TRUE)
balloon_alert(mod.wearer, "clothing mended")
-/obj/item/mod/module/thread_ripper/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/thread_ripper/on_part_deactivation(deleting = FALSE)
if(!length(ripped_clothing))
return
for(var/obj/item/clothing as anything in ripped_clothing)
diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm
index bce377c71e935..c4e8962c4476d 100644
--- a/code/modules/mod/modules/modules_ninja.dm
+++ b/code/modules/mod/modules/modules_ninja.dm
@@ -13,7 +13,7 @@
use_energy_cost = DEFAULT_CHARGE_DRAIN * 10
incompatible_modules = list(/obj/item/mod/module/stealth)
cooldown_time = 5 SECONDS
- required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT)
+ required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING|ITEM_SLOT_ICLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET)
/// Whether or not the cloak turns off on bumping.
var/bumpoff = TRUE
/// The alpha applied when the cloak is on.
@@ -92,11 +92,11 @@
overlay_state_inactive = null
required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK)
-/obj/item/mod/module/welding/camera_vision/on_suit_activation()
+/obj/item/mod/module/welding/camera_vision/on_part_activation()
. = ..()
RegisterSignal(mod.wearer, COMSIG_LIVING_CAN_TRACK, PROC_REF(can_track))
-/obj/item/mod/module/welding/camera_vision/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/welding/camera_vision/on_part_deactivation(deleting = FALSE)
. = ..()
UnregisterSignal(mod.wearer, COMSIG_LIVING_CAN_TRACK)
@@ -131,10 +131,10 @@
/// How many times the module has been used to force open doors.
var/door_hack_counter = 0
-/obj/item/mod/module/hacker/on_suit_activation()
+/obj/item/mod/module/hacker/on_part_activation()
RegisterSignal(mod.wearer, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(hack))
-/obj/item/mod/module/hacker/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/hacker/on_part_deactivation(deleting = FALSE)
UnregisterSignal(mod.wearer, COMSIG_LIVING_UNARMED_ATTACK)
/obj/item/mod/module/hacker/proc/hack(mob/living/carbon/human/source, atom/target, proximity, modifiers)
@@ -172,10 +172,10 @@
/// The accepted typepath we can link to.
var/accepted_type = /obj/item/energy_katana
-/obj/item/mod/module/weapon_recall/on_suit_activation()
+/obj/item/mod/module/weapon_recall/on_part_activation()
mod.wearer.add_traits(list(TRAIT_NOGUNS, TRAIT_TOSS_GUN_HARD), MOD_TRAIT)
-/obj/item/mod/module/weapon_recall/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/weapon_recall/on_part_deactivation(deleting = FALSE)
mod.wearer.remove_traits(list(TRAIT_NOGUNS, TRAIT_TOSS_GUN_HARD), MOD_TRAIT)
/obj/item/mod/module/weapon_recall/on_use()
@@ -312,7 +312,7 @@
/// List of all energy nets this module made.
var/list/energy_nets = list()
-/obj/item/mod/module/energy_net/on_suit_deactivation(deleting)
+/obj/item/mod/module/energy_net/on_part_deactivation(deleting)
for(var/obj/structure/energy_net/net as anything in energy_nets)
net.atom_destruction(ENERGY)
diff --git a/code/modules/mod/modules/modules_science.dm b/code/modules/mod/modules/modules_science.dm
index 9f2c54b8effc3..6062be680688e 100644
--- a/code/modules/mod/modules/modules_science.dm
+++ b/code/modules/mod/modules/modules_science.dm
@@ -11,7 +11,6 @@
complexity = 1
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.2
incompatible_modules = list(/obj/item/mod/module/reagent_scanner)
- cooldown_time = 0.5 SECONDS
required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK)
/obj/item/mod/module/reagent_scanner/on_activation()
@@ -53,7 +52,6 @@
complexity = 3
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.7
incompatible_modules = list(/obj/item/mod/module/anomaly_locked, /obj/item/mod/module/atrocinator)
- cooldown_time = 0.5 SECONDS
accepted_anomalies = list(/obj/item/assembly/signaler/anomaly/grav)
required_slots = list(ITEM_SLOT_BACK|ITEM_SLOT_BELT)
diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm
index 8edcaff7715f0..c25dd75275574 100644
--- a/code/modules/mod/modules/modules_security.dm
+++ b/code/modules/mod/modules/modules_security.dm
@@ -36,10 +36,10 @@
return
suit.allowed -= (guns_typecache - already_allowed_guns)
-/obj/item/mod/module/magnetic_harness/on_suit_activation()
+/obj/item/mod/module/magnetic_harness/on_part_activation()
RegisterSignal(mod.wearer, COMSIG_MOB_UNEQUIPPED_ITEM, PROC_REF(check_dropped_item))
-/obj/item/mod/module/magnetic_harness/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/magnetic_harness/on_part_deactivation(deleting = FALSE)
UnregisterSignal(mod.wearer, COMSIG_MOB_UNEQUIPPED_ITEM)
/obj/item/mod/module/magnetic_harness/proc/check_dropped_item(datum/source, obj/item/dropped_item, force, new_location)
@@ -74,10 +74,10 @@
overlay_state_use = "module_pepper_used"
required_slots = list(ITEM_SLOT_OCLOTHING)
-/obj/item/mod/module/pepper_shoulders/on_suit_activation()
+/obj/item/mod/module/pepper_shoulders/on_part_activation()
RegisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(on_check_block))
-/obj/item/mod/module/pepper_shoulders/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/pepper_shoulders/on_part_deactivation(deleting = FALSE)
UnregisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK)
/obj/item/mod/module/pepper_shoulders/on_use()
@@ -157,7 +157,6 @@
complexity = 1
use_energy_cost = DEFAULT_CHARGE_DRAIN * 0.5
incompatible_modules = list(/obj/item/mod/module/megaphone)
- cooldown_time = 0.5 SECONDS
required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK)
/// List of spans we add to the speaker.
var/list/voicespan = list(SPAN_COMMAND)
@@ -387,10 +386,10 @@
for(var/i in 1 to radar_slices)
sorted_creatures += list(list())
-/obj/item/mod/module/active_sonar/on_suit_activation()
+/obj/item/mod/module/active_sonar/on_part_activation()
RegisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED, PROC_REF(sort_all_creatures))
-/obj/item/mod/module/active_sonar/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/active_sonar/on_part_deactivation(deleting = FALSE)
UnregisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED)
/// Detects all living creatures within world.view, and returns the amount.
@@ -547,10 +546,10 @@
if(!.)
set_shooting_mode(SHOOTING_ASSISTANT_OFF)
-/obj/item/mod/module/shooting_assistant/on_suit_activation()
+/obj/item/mod/module/shooting_assistant/on_part_activation()
apply_mode_effects()
-/obj/item/mod/module/shooting_assistant/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/shooting_assistant/on_part_deactivation(deleting = FALSE)
remove_mode_effects()
/obj/item/mod/module/shooting_assistant/proc/stormtrooper_fired_gun(mob/user, obj/item/gun/gun_fired, target, params, zone_override, list/bonus_spread_values)
@@ -582,10 +581,10 @@
incompatible_modules = list(/obj/item/mod/module/shove_blocker)
required_slots = list(ITEM_SLOT_OCLOTHING)
-/obj/item/mod/module/shove_blocker/on_suit_activation()
+/obj/item/mod/module/shove_blocker/on_part_activation()
mod.wearer.add_traits(list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED, TRAIT_NO_STAGGER, TRAIT_NO_THROW_HITPUSH), MOD_TRAIT)
-/obj/item/mod/module/shove_blocker/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/shove_blocker/on_part_deactivation(deleting = FALSE)
mod.wearer.remove_traits(list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED, TRAIT_NO_STAGGER, TRAIT_NO_THROW_HITPUSH), MOD_TRAIT)
/obj/item/mod/module/shove_blocker/locked
@@ -601,10 +600,10 @@
complexity = 0
required_slots = list(ITEM_SLOT_GLOVES)
-/obj/item/mod/module/quick_cuff/on_suit_activation()
+/obj/item/mod/module/quick_cuff/on_part_activation()
. = ..()
ADD_TRAIT(mod.wearer, TRAIT_FAST_CUFFING, MOD_TRAIT)
-/obj/item/mod/module/quick_cuff/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/quick_cuff/on_part_deactivation(deleting = FALSE)
. = ..()
REMOVE_TRAIT(mod.wearer, TRAIT_FAST_CUFFING, MOD_TRAIT)
diff --git a/code/modules/mod/modules/modules_service.dm b/code/modules/mod/modules/modules_service.dm
index 4d2650585b1c0..79d2d3779e0ff 100644
--- a/code/modules/mod/modules/modules_service.dm
+++ b/code/modules/mod/modules/modules_service.dm
@@ -36,7 +36,7 @@
complexity = 1
use_energy_cost = DEFAULT_CHARGE_DRAIN * 5
incompatible_modules = list(/obj/item/mod/module/microwave_beam, /obj/item/mod/module/organizer)
- cooldown_time = 10 SECONDS
+ cooldown_time = 4 SECONDS
required_slots = list(ITEM_SLOT_GLOVES)
/obj/item/mod/module/microwave_beam/on_select_use(atom/target)
@@ -76,7 +76,7 @@
incompatible_modules = list(/obj/item/mod/module/waddle)
required_slots = list(ITEM_SLOT_FEET)
-/obj/item/mod/module/waddle/on_suit_activation()
+/obj/item/mod/module/waddle/on_part_activation()
var/obj/item/shoes = mod.get_part_from_slot(ITEM_SLOT_FEET)
if(shoes)
shoes.AddComponent(/datum/component/squeak, list('sound/effects/footstep/clownstep1.ogg'=1,'sound/effects/footstep/clownstep2.ogg'=1), 50, falloff_exponent = 20) //die off quick please
@@ -84,7 +84,7 @@
if(is_clown_job(mod.wearer.mind?.assigned_role))
mod.wearer.add_mood_event("clownshoes", /datum/mood_event/clownshoes)
-/obj/item/mod/module/waddle/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/waddle/on_part_deactivation(deleting = FALSE)
var/obj/item/shoes = mod.get_part_from_slot(ITEM_SLOT_FEET)
if(shoes && !deleting)
qdel(shoes.GetComponent(/datum/component/squeak))
diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm
index 1ce0a2f316d49..8be66e0b3e38c 100644
--- a/code/modules/mod/modules/modules_supply.dm
+++ b/code/modules/mod/modules/modules_supply.dm
@@ -80,7 +80,7 @@
else
balloon_alert(mod.wearer, "invalid target!")
-/obj/item/mod/module/clamp/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/clamp/on_part_deactivation(deleting = FALSE)
if(deleting)
return
for(var/atom/movable/crate as anything in stored_crates)
@@ -275,10 +275,10 @@
. = ..()
disposal_tag = pick(GLOB.TAGGERLOCATIONS)
-/obj/item/mod/module/disposal_connector/on_suit_activation()
+/obj/item/mod/module/disposal_connector/on_part_activation()
RegisterSignal(mod.wearer, COMSIG_MOVABLE_DISPOSING, PROC_REF(disposal_handling))
-/obj/item/mod/module/disposal_connector/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/disposal_connector/on_part_deactivation(deleting = FALSE)
UnregisterSignal(mod.wearer, COMSIG_MOVABLE_DISPOSING)
/obj/item/mod/module/disposal_connector/get_configuration()
@@ -361,7 +361,7 @@
incompatible_modules = list(/obj/item/mod/module/ash_accretion)
overlay_state_inactive = "module_ash"
use_mod_colors = TRUE
- required_slots = list(ITEM_SLOT_OCLOTHING|ITEM_SLOT_ICLOTHING)
+ required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING|ITEM_SLOT_ICLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET)
/// How many tiles we can travel to max out the armor.
var/max_traveled_tiles = 10
/// How many tiles we traveled through.
@@ -406,11 +406,11 @@
/turf/open/water,
))
-/obj/item/mod/module/ash_accretion/on_suit_activation()
+/obj/item/mod/module/ash_accretion/on_part_activation()
mod.wearer.add_traits(list(TRAIT_ASHSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE), MOD_TRAIT)
RegisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED, PROC_REF(on_move))
-/obj/item/mod/module/ash_accretion/on_suit_deactivation(deleting = FALSE)
+/obj/item/mod/module/ash_accretion/on_part_deactivation(deleting = FALSE)
mod.wearer.remove_traits(list(TRAIT_ASHSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE), MOD_TRAIT)
UnregisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED)
if(!traveled_tiles)
@@ -471,7 +471,7 @@
use_energy_cost = DEFAULT_CHARGE_DRAIN * 3
incompatible_modules = list(/obj/item/mod/module/sphere_transform)
cooldown_time = 1.25 SECONDS
- required_slots = list(ITEM_SLOT_OCLOTHING|ITEM_SLOT_ICLOTHING, ITEM_SLOT_HEAD|ITEM_SLOT_MASK)
+ required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING|ITEM_SLOT_ICLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET)
/// Time it takes us to complete the animation.
var/animate_time = 0.25 SECONDS
/// List of traits to add/remove from our subject as needed.
diff --git a/code/modules/mod/modules/modules_timeline.dm b/code/modules/mod/modules/modules_timeline.dm
index 522ddf57501d1..c14825bf3c70d 100644
--- a/code/modules/mod/modules/modules_timeline.dm
+++ b/code/modules/mod/modules/modules_timeline.dm
@@ -421,7 +421,7 @@
/obj/structure/chrono_field/singularity_act()
return
-/obj/structure/chrono_field/singularity_pull()
+/obj/structure/chrono_field/singularity_pull(atom/singularity, current_size)
return
/obj/structure/chrono_field/ex_act()
diff --git a/code/modules/mod/modules/modules_visor.dm b/code/modules/mod/modules/modules_visor.dm
index 6a1d61ea7ef0d..d4b6154f88620 100644
--- a/code/modules/mod/modules/modules_visor.dm
+++ b/code/modules/mod/modules/modules_visor.dm
@@ -8,7 +8,6 @@
complexity = 1
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3
incompatible_modules = list(/obj/item/mod/module/visor)
- cooldown_time = 0.5 SECONDS
required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_EYES|ITEM_SLOT_MASK)
/// The traits given by the visor.
var/list/visor_traits = list()
diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm
index 8eeaa7bfbd3d9..4923479d71def 100644
--- a/code/modules/modular_computers/computers/item/computer.dm
+++ b/code/modules/modular_computers/computers/item/computer.dm
@@ -555,7 +555,7 @@
playsound(src, sound, 50, TRUE)
physical.loc.visible_message(span_notice("[icon2html(physical, viewers(physical.loc))] \The [src] displays a [caller.filedesc] notification: [alerttext]"))
-/obj/item/modular_computer/proc/ring(ringtone) // bring bring
+/obj/item/modular_computer/proc/ring(ringtone, list/balloon_alertees) // bring bring
if(!use_energy())
return
if(HAS_TRAIT(SSstation, STATION_TRAIT_PDA_GLITCHED))
@@ -565,7 +565,10 @@
), 50, TRUE)
else
playsound(src, 'sound/machines/beep/twobeep_high.ogg', 50, TRUE)
- audible_message("*[ringtone]*")
+ ringtone = "*[ringtone]*"
+ audible_message(ringtone)
+ for(var/mob/living/alertee in balloon_alertees)
+ alertee.balloon_alert(alertee, ringtone)
/obj/item/modular_computer/proc/send_sound()
playsound(src, 'sound/machines/terminal/terminal_success.ogg', 15, TRUE)
diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm
index d21a3e2047559..1fea772b85e58 100644
--- a/code/modules/modular_computers/computers/item/pda.dm
+++ b/code/modules/modular_computers/computers/item/pda.dm
@@ -79,10 +79,6 @@
if(inserted_pai)
. += mutable_appearance(initial(icon), "pai_inserted")
-/obj/item/modular_computer/pda/attack_ai(mob/user)
- to_chat(user, span_notice("It doesn't feel right to snoop around like that..."))
- return // we don't want ais or cyborgs using a private role tablet
-
/obj/item/modular_computer/pda/interact(mob/user)
. = ..()
if(HAS_TRAIT(src, TRAIT_PDA_MESSAGE_MENU_RIGGED))
@@ -332,7 +328,6 @@
starting_programs = list(
/datum/computer_file/program/filemanager,
/datum/computer_file/program/robotact,
- /datum/computer_file/program/borg_monitor,
/datum/computer_file/program/atmosscan,
/datum/computer_file/program/crew_manifest,
)
diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm
index 48cbc57d7455f..2d81fb6c3b5cb 100644
--- a/code/modules/modular_computers/computers/machinery/modular_computer.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm
@@ -186,7 +186,7 @@
// "Stun" weapons can cause minor damage to components (short-circuits?)
// "Burn" damage is equally strong against internal components and exterior casing
// "Brute" damage mostly damages the casing.
-/obj/machinery/modular_computer/bullet_act(obj/projectile/Proj)
- return cpu?.bullet_act(Proj) || ..()
+/obj/machinery/modular_computer/bullet_act(obj/projectile/proj)
+ return cpu?.bullet_act(proj) || ..()
#undef CPU_INTERACTABLE
diff --git a/code/modules/modular_computers/file_system/programs/borg_monitor.dm b/code/modules/modular_computers/file_system/programs/borg_monitor.dm
index 90213963e3e64..0f9197272059f 100644
--- a/code/modules/modular_computers/file_system/programs/borg_monitor.dm
+++ b/code/modules/modular_computers/file_system/programs/borg_monitor.dm
@@ -161,7 +161,9 @@
if(computer.obj_flags & EMAGGED)
return "STDERR:UNDF"
return FALSE
- return ID.registered_name
+ . = "[ID.registered_name]"
+ if(ID.assignment)
+ . = "[.], [ID.assignment]"
/datum/computer_file/program/borg_monitor/syndicate
filename = "roboverlord"
diff --git a/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm
index 532f6128c1e29..e38a47ac8627f 100644
--- a/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm
+++ b/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm
@@ -63,6 +63,8 @@
if("PRG_speak")
if(!channel || isnull(active_channel))
return
+ if(src in channel.muted_clients) // Make sure we aren't muted
+ return
var/message = reject_bad_chattext(params["message"], MESSAGE_SIZE)
if(!message)
return
diff --git a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm
index bec3ca91a079e..bcb79a2813e87 100644
--- a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm
+++ b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm
@@ -337,6 +337,7 @@
static_data["can_spam"] = spam_mode
static_data["is_silicon"] = issilicon(user)
+ static_data["remote_silicon"] = (isAI(user) || iscyborg(user)) && !istype(computer, /obj/item/modular_computer/pda/silicon) //Silicon is accessing a PDA on the ground, not their internal one. Avoiding pAIs in this check.
static_data["alert_able"] = alert_able
return static_data
@@ -718,7 +719,7 @@
SEND_SIGNAL(computer, COMSIG_COMPUTER_RECEIVED_MESSAGE, sender_title, inbound_message, photo_message)
if (alert_able && (!alert_silenced || is_rigged))
- computer.ring(ringtone)
+ computer.ring(ringtone, receievers)
SStgui.update_uis(computer)
update_pictures_for_all()
diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm
index 3fbc7843f1883..a26d9bd3d512a 100644
--- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm
+++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm
@@ -65,6 +65,10 @@
downloaded_file = PRG.clone()
+ // If the filesize is 0 (or somehow lower), we instantly download to avoid invalid number issues with stepwise download.
+ if(downloaded_file.size <= 0)
+ complete_file_download()
+
/datum/computer_file/program/ntnetdownload/proc/abort_file_download()
if(!downloaded_file)
return
@@ -89,8 +93,9 @@
return
if(download_completion >= downloaded_file.size)
complete_file_download()
+ return
// Download speed according to connectivity state. NTNet server is assumed to be on unlimited speed so we're limited by our local connectivity
- var/download_netspeed
+ var/download_netspeed = 0
// Speed defines are found in misc.dm
switch(ntnet_status)
if(NTNET_LOW_SIGNAL)
@@ -99,10 +104,13 @@
download_netspeed = NTNETSPEED_HIGHSIGNAL
if(NTNET_ETHERNET_SIGNAL)
download_netspeed = NTNETSPEED_ETHERNET
- if(download_netspeed)
- if(HAS_TRAIT(computer, TRAIT_MODPC_HALVED_DOWNLOAD_SPEED))
- download_netspeed *= 0.5
- download_completion += download_netspeed
+ if(download_netspeed <= 0)
+ return
+ if(HAS_TRAIT(computer, TRAIT_MODPC_HALVED_DOWNLOAD_SPEED))
+ download_netspeed *= 0.5
+ // We don't complete it here so we stay on 100% for a cycle
+ // We do cap out our completion to avoid UI issues
+ download_completion = min(download_completion + download_netspeed, downloaded_file.size)
/datum/computer_file/program/ntnetdownload/ui_act(action, params, datum/tgui/ui, datum/ui_state/state)
. = ..()
diff --git a/code/modules/modular_computers/file_system/programs/robotact.dm b/code/modules/modular_computers/file_system/programs/robotact.dm
index c213790b80a80..927e09c044a16 100644
--- a/code/modules/modular_computers/file_system/programs/robotact.dm
+++ b/code/modules/modular_computers/file_system/programs/robotact.dm
@@ -23,6 +23,20 @@
program_open_overlay = "command-syndicate"
return TRUE
return FALSE
+/**
+ * Checks if we should see a specific cyborg on our "network". Arguments are our borg, and another borg
+ *
+ * Intended to allow borgs with the same AI to see eachother, syndicate borgs (scrambledcodes) with no AI to see eachother
+ * and not-syndicate borgs with no AI to see no one. Syndicate borgs connected to an AI will no longer see other syndicate
+ * borgs except ones also slaved to the same AI.
+ */
+/datum/computer_file/program/robotact/proc/evaluate_borg(mob/living/silicon/robot/this_borg, mob/living/silicon/robot/other_borg)
+ if(this_borg.connected_ai != other_borg.connected_ai)
+ return FALSE
+ if(this_borg.scrambledcodes && other_borg.scrambledcodes)
+ return TRUE
+ if(this_borg.connected_ai)
+ return TRUE
/datum/computer_file/program/robotact/ui_data(mob/user)
var/list/data = list()
@@ -34,9 +48,11 @@
var/mob/living/silicon/robot/cyborg = tablet.silicon_owner
- data["name"] = cyborg.name
+ data["borgName"] = cyborg.name
data["designation"] = cyborg.model
- data["masterAI"] = cyborg.connected_ai //Master AI
+ data["masterAI"] = cyborg.connected_ai
+ data["MasterAI_connected"] = !!cyborg.connected_ai //Need a bool for this on the other side
+ data["masterAI_online"] = (cyborg.connected_ai?.stat == CONSCIOUS)
var/charge = 0
var/maxcharge = 1
@@ -56,6 +72,34 @@
data["thrustersStatus"] = "[cyborg.ionpulse_on?"ACTIVE":"DISABLED"]" //Feedback for thruster status
data["selfDestructAble"] = (cyborg.emagged || istype(cyborg, /mob/living/silicon/robot/model/syndicate))
+ data["cyborg_groups"] = list()
+ if(data["masterAI_online"] || (!data["MasterAI_connected"] && cyborg.scrambledcodes)) //If a borg isn't connected, we can just skip this all
+ var/list/borggroup = list() //temporary list for holding groups of borgs
+ for(var/mob/living/silicon/robot/other_borg in GLOB.silicon_mobs)
+ if(!evaluate_borg(cyborg,other_borg))
+ continue
+
+ var/shell = FALSE
+ if(other_borg.shell && !other_borg.ckey)
+ shell = TRUE
+
+ var/list/cyborg_data = list(
+ "otherBorgName" = other_borg.name,
+ "integ" = round((other_borg.health + 100) / 2), //mob heath is -100 to 100, we want to scale that to 0 - 100
+ "locked_down" = other_borg.lockcharge,
+ "status" = other_borg.stat,
+ "shell_discon" = shell,
+ "charge" = other_borg.cell ? round(other_borg.cell.percent()) : null,
+ "module" = other_borg.model ? "[other_borg.model.name]" : "None",
+ "ref" = REF(other_borg)
+ )
+ borggroup += list(cyborg_data)
+ if(length(borggroup) == 4) //grouping borgs in packs of four, since I can't do it later in js
+ data["cyborg_groups"] += list(borggroup)
+ borggroup = list()
+ if(length(borggroup)) //and any remainders
+ data["cyborg_groups"] += list(borggroup)
+
//Cover, TRUE for locked
data["cover"] = "[cyborg.locked? "LOCKED":"UNLOCKED"]"
//Ability to move. FAULT if lockdown wire is cut, DISABLED if borg locked, ENABLED otherwise
diff --git a/code/modules/modular_computers/file_system/programs/virtual_pet.dm b/code/modules/modular_computers/file_system/programs/virtual_pet.dm
index eacdb1323b368..746824f8d8bf7 100644
--- a/code/modules/modular_computers/file_system/programs/virtual_pet.dm
+++ b/code/modules/modular_computers/file_system/programs/virtual_pet.dm
@@ -559,6 +559,9 @@ GLOBAL_LIST_EMPTY(virtual_pets_list)
return TRUE
if(!isnull(trick_name))
pet.ai_controller.set_blackboard_key(BB_TRICK_NAME, trick_name)
+ for (var/trick_move in trick_sequence)
+ if (!length(GLOB.emote_list[LOWER_TEXT(trick_move)]))
+ trick_sequence -= trick_move
pet.ai_controller.override_blackboard_key(BB_TRICK_SEQUENCE, trick_sequence)
playsound(computer.loc, 'sound/mobs/non-humanoids/orbie/orbie_trick_learned.ogg', 50)
diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm
index 1d913f4a236b0..41c285d46a5d8 100644
--- a/code/modules/paperwork/paperplane.dm
+++ b/code/modules/paperwork/paperplane.dm
@@ -49,7 +49,7 @@
return ..()
/obj/item/paperplane/suicide_act(mob/living/user)
- var/obj/item/organ/internal/eyes/eyes = user.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = user.get_organ_slot(ORGAN_SLOT_EYES)
user.Stun(20 SECONDS)
user.visible_message(span_suicide("[user] jams [src] in [user.p_their()] nose. It looks like [user.p_theyre()] trying to commit suicide!"))
user.adjust_eye_blur(12 SECONDS)
@@ -98,7 +98,7 @@
if(. || !ishuman(hit_atom)) //if the plane is caught or it hits a nonhuman
return
var/mob/living/carbon/human/hit_human = hit_atom
- var/obj/item/organ/internal/eyes/eyes = hit_human.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = hit_human.get_organ_slot(ORGAN_SLOT_EYES)
if(!prob(hit_probability))
return
if(hit_human.is_eyes_covered())
diff --git a/code/modules/point/point.dm b/code/modules/point/point.dm
index ae7d9f78cb91a..683710bf128e4 100644
--- a/code/modules/point/point.dm
+++ b/code/modules/point/point.dm
@@ -114,8 +114,14 @@
/// possibly delayed verb that finishes the pointing process starting in [/mob/verb/pointed()].
/// either called immediately or in the tick after pointed() was called, as per the [DEFAULT_QUEUE_OR_CALL_VERB()] macro
/mob/proc/_pointed(atom/pointing_at)
- if(client && !(pointing_at in view(client.view, src)))
- return FALSE
+ if(client) //Clientless mobs can just go ahead and point
+ if(ismovable(pointing_at))
+ var/atom/movable/pointed_movable = pointing_at
+ if(pointed_movable.flags_1 & IS_ONTOP_1)
+ pointing_at = pointed_movable.loc
+
+ if(!(pointing_at in view(client.view, src)))
+ return FALSE
point_at(pointing_at, TRUE)
diff --git a/code/modules/power/apc/apc_attack.dm b/code/modules/power/apc/apc_attack.dm
index a40af34fc2a85..c156d8bb07003 100644
--- a/code/modules/power/apc/apc_attack.dm
+++ b/code/modules/power/apc/apc_attack.dm
@@ -1,8 +1,8 @@
// Ethereals:
/// How long it takes an ethereal to drain or charge APCs. Also used as a spam limiter.
-#define ETHEREAL_APC_DRAIN_TIME (7.5 SECONDS)
+#define ETHEREAL_APC_DRAIN_TIME (3 SECONDS)
/// How much power ethereals gain/drain from APCs.
-#define ETHEREAL_APC_POWER_GAIN (0.2 * STANDARD_BATTERY_CHARGE)
+#define ETHEREAL_APC_POWER_GAIN (10 * STANDARD_CELL_CHARGE)
/obj/machinery/power/apc/attack_hand_secondary(mob/user, list/modifiers)
. = ..()
@@ -13,7 +13,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/apc_interactor = user
- var/obj/item/organ/internal/stomach/ethereal/maybe_ethereal_stomach = apc_interactor.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/ethereal/maybe_ethereal_stomach = apc_interactor.get_organ_slot(ORGAN_SLOT_STOMACH)
if(!istype(maybe_ethereal_stomach))
togglelock(user)
else
@@ -27,14 +27,14 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/ethereal = user
- var/obj/item/organ/internal/stomach/maybe_stomach = ethereal.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/maybe_stomach = ethereal.get_organ_slot(ORGAN_SLOT_STOMACH)
// how long we wanna wait before we show the balloon alert. don't want it to be very long in case the ethereal wants to opt-out of doing that action, just long enough to where it doesn't collide with previously queued balloon alerts.
var/alert_timer_duration = 0.75 SECONDS
- if(!istype(maybe_stomach, /obj/item/organ/internal/stomach/ethereal))
+ if(!istype(maybe_stomach, /obj/item/organ/stomach/ethereal))
return
var/charge_limit = ETHEREAL_CHARGE_DANGEROUS - ETHEREAL_APC_POWER_GAIN
- var/obj/item/organ/internal/stomach/ethereal/stomach = maybe_stomach
+ var/obj/item/organ/stomach/ethereal/stomach = maybe_stomach
var/obj/item/stock_parts/power_store/stomach_cell = stomach.cell
if(!((stomach?.drain_time < world.time) && LAZYACCESS(modifiers, RIGHT_CLICK)))
return
diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm
index 7b9bcd4f22388..cc8d566c5c9da 100644
--- a/code/modules/power/apc/apc_main.dm
+++ b/code/modules/power/apc/apc_main.dm
@@ -425,15 +425,21 @@
playsound(src, 'sound/machines/terminal/terminal_alert.ogg', 50, FALSE)
update_appearance()
-/obj/machinery/power/apc/proc/disconnect_remote_access()
+/**
+ * Disconnects anyone using this APC via an APC control console and locks the interface.
+ * arguments:
+ * mute - whether the APC should announce the disconnection locally
+ */
+/obj/machinery/power/apc/proc/disconnect_remote_access(mute = FALSE)
// nothing to disconnect from
if(isnull(remote_control_user))
return
locked = TRUE
- say("Remote access canceled. Interface locked.")
to_chat(remote_control_user, span_danger("[icon2html(src, remote_control_user)] Disconnected from [src]."))
- playsound(src, 'sound/machines/terminal/terminal_off.ogg', 25, FALSE)
- playsound(src, 'sound/machines/terminal/terminal_alert.ogg', 50, FALSE)
+ if(!mute)
+ say("Remote access canceled. Interface locked.")
+ playsound(src, 'sound/machines/terminal/terminal_off.ogg', 25, FALSE)
+ playsound(src, 'sound/machines/terminal/terminal_alert.ogg', 50, FALSE)
update_appearance()
remote_control_user = null
diff --git a/code/modules/power/apc/apc_tool_act.dm b/code/modules/power/apc/apc_tool_act.dm
index 9d7c008c6165c..3ff5a89f4aa05 100644
--- a/code/modules/power/apc/apc_tool_act.dm
+++ b/code/modules/power/apc/apc_tool_act.dm
@@ -379,11 +379,11 @@
if((machine_stat & BROKEN) || opened == APC_COVER_REMOVED)
new /obj/item/stack/sheet/iron(loc)
user.visible_message(span_notice("[user.name] cuts [src] apart with [welder]."))
- balloon_alert(user, "disassembled the broken frame")
+ user.balloon_alert(user, "disassembled the broken frame")
else
new /obj/item/wallframe/apc(loc)
user.visible_message(span_notice("[user.name] cuts [src] from the wall with [welder]."))
- balloon_alert(user, "cut the frame from the wall")
+ user.balloon_alert(user, "cut the frame from the wall")
qdel(src)
return TRUE
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index fdfab1fed8462..a4cab5f991055 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -221,7 +221,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(
else
return FALSE
-/obj/structure/cable/singularity_pull(S, current_size)
+/obj/structure/cable/singularity_pull(atom/singularity, current_size)
..()
if(current_size >= STAGE_FIVE)
deconstruct()
diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm
index 487b26dd31459..3657bb84db83a 100644
--- a/code/modules/power/lighting/light.dm
+++ b/code/modules/power/lighting/light.dm
@@ -548,9 +548,9 @@
var/protected = FALSE
if(istype(user))
- var/obj/item/organ/internal/stomach/maybe_stomach = user.get_organ_slot(ORGAN_SLOT_STOMACH)
- if(istype(maybe_stomach, /obj/item/organ/internal/stomach/ethereal))
- var/obj/item/organ/internal/stomach/ethereal/stomach = maybe_stomach
+ var/obj/item/organ/stomach/maybe_stomach = user.get_organ_slot(ORGAN_SLOT_STOMACH)
+ if(istype(maybe_stomach, /obj/item/organ/stomach/ethereal))
+ var/obj/item/organ/stomach/ethereal/stomach = maybe_stomach
if(stomach.drain_time > world.time)
return
to_chat(user, span_notice("You start channeling some power through the [fitting] into your body."))
diff --git a/code/modules/power/pipecleaners.dm b/code/modules/power/pipecleaners.dm
index 4700004904796..a042c3c8cd657 100644
--- a/code/modules/power/pipecleaners.dm
+++ b/code/modules/power/pipecleaners.dm
@@ -154,7 +154,7 @@ By design, d1 is the smallest direction and d2 is the highest
/obj/structure/pipe_cleaner/attackby(obj/item/W, mob/user, params)
handlecable(W, user, params)
-/obj/structure/pipe_cleaner/singularity_pull(S, current_size)
+/obj/structure/pipe_cleaner/singularity_pull(atom/singularity, current_size)
..()
if(current_size >= STAGE_FIVE)
deconstruct()
diff --git a/code/modules/power/power_store.dm b/code/modules/power/power_store.dm
index 1be39dfbaa031..8756f052781df 100644
--- a/code/modules/power/power_store.dm
+++ b/code/modules/power/power_store.dm
@@ -290,12 +290,12 @@
/obj/item/stock_parts/power_store/attack_self(mob/user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
- var/obj/item/organ/internal/stomach/maybe_stomach = H.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/maybe_stomach = H.get_organ_slot(ORGAN_SLOT_STOMACH)
- if(istype(maybe_stomach, /obj/item/organ/internal/stomach/ethereal))
+ if(istype(maybe_stomach, /obj/item/organ/stomach/ethereal))
var/charge_limit = ETHEREAL_CHARGE_DANGEROUS - CELL_POWER_GAIN
- var/obj/item/organ/internal/stomach/ethereal/stomach = maybe_stomach
+ var/obj/item/organ/stomach/ethereal/stomach = maybe_stomach
var/obj/item/stock_parts/power_store/stomach_cell = stomach.cell
if((stomach.drain_time > world.time) || !stomach)
return
diff --git a/code/modules/power/supermatter/supermatter_delamination/cascade_delam_objects.dm b/code/modules/power/supermatter/supermatter_delamination/cascade_delam_objects.dm
index c07ec7bbe89f7..3cb6c8fd82c3e 100644
--- a/code/modules/power/supermatter/supermatter_delamination/cascade_delam_objects.dm
+++ b/code/modules/power/supermatter/supermatter_delamination/cascade_delam_objects.dm
@@ -95,7 +95,7 @@
var/mob/living/carbon/jedi = user
to_chat(jedi, span_userdanger("That was a really dense idea."))
jedi.ghostize()
- var/obj/item/organ/internal/brain/rip_u = locate(/obj/item/organ/internal/brain) in jedi.organs
+ var/obj/item/organ/brain/rip_u = locate(/obj/item/organ/brain) in jedi.organs
if(rip_u)
rip_u.Remove(jedi)
qdel(rip_u)
diff --git a/code/modules/power/supermatter/supermatter_hit_procs.dm b/code/modules/power/supermatter/supermatter_hit_procs.dm
index 57c86303a0ad6..167ee7988b138 100644
--- a/code/modules/power/supermatter/supermatter_hit_procs.dm
+++ b/code/modules/power/supermatter/supermatter_hit_procs.dm
@@ -59,7 +59,7 @@
to_chat(jedi, span_userdanger("That was a really dense idea."))
jedi.investigate_log("had [jedi.p_their()] brain dusted by touching [src] with telekinesis.", INVESTIGATE_DEATHS)
jedi.ghostize()
- var/obj/item/organ/internal/brain/rip_u = locate(/obj/item/organ/internal/brain) in jedi.organs
+ var/obj/item/organ/brain/rip_u = locate(/obj/item/organ/brain) in jedi.organs
if(rip_u)
rip_u.Remove(jedi)
qdel(rip_u)
@@ -84,6 +84,10 @@
to_chat(user, span_warning("You fail to extract a sliver from \The [src]! \the [scalpel] isn't sharp enough anymore."))
return
+ if(istype(item, /obj/item/hemostat/supermatter))
+ to_chat(user, span_warning("You poke [src] with [item]'s hyper-noblium tips. Nothing happens."))
+ return
+
if(istype(item, /obj/item/destabilizing_crystal))
var/obj/item/destabilizing_crystal/destabilizing_crystal = item
diff --git a/code/modules/power/supermatter/supermatter_variants.dm b/code/modules/power/supermatter/supermatter_variants.dm
index ebc21b2b5b09f..df01fe483f9b6 100644
--- a/code/modules/power/supermatter/supermatter_variants.dm
+++ b/code/modules/power/supermatter/supermatter_variants.dm
@@ -60,3 +60,27 @@
icon_state = "light"
pixel_x = -176
pixel_y = -176
+
+/// Normal sm but small (sm sword recipe element) (wiz only) and adamantine pedestal for it
+/obj/machinery/power/supermatter_crystal/small
+ name = "strangely small supermatter crystal"
+ desc = "A strangely translucent and iridescent crystal on an adamantine pedestal. It looks like it should be a bit bigger..."
+ base_icon_state = "sm_small"
+ icon_state = "sm_small"
+ moveable = TRUE
+ anchored = FALSE
+
+/obj/machinery/power/supermatter_crystal/small/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/gps, "Adamantium Signal")
+ priority_announce("Anomalous crystal detected onboard. Location is marked on every GPS device.", "Nanotrasen Anomaly Department Announcement")
+
+/obj/item/adamantine_pedestal
+ name = "adamantine pedestal"
+ desc = "An adamantine pedestal. It looks like it should have something small but massive on top."
+ icon = 'icons/obj/machines/engine/supermatter.dmi'
+ icon_state = "pedestal"
+ w_class = WEIGHT_CLASS_HUGE
+ throw_speed = 1
+ throw_range = 1
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index 5437ee0afd93c..2e2931c835c0d 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -163,7 +163,7 @@
return
var/mob/living/carbon/jedi = user
to_chat(jedi, span_userdanger("That was a shockingly dumb idea."))
- var/obj/item/organ/internal/brain/rip_u = locate(/obj/item/organ/internal/brain) in jedi.organs
+ var/obj/item/organ/brain/rip_u = locate(/obj/item/organ/brain) in jedi.organs
jedi.ghostize(jedi)
if(rip_u)
qdel(rip_u)
diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm
index d6fa14771dc7d..cc48d7acc6615 100644
--- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm
+++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm
@@ -49,7 +49,10 @@
update_icon_state()
/obj/item/ammo_box/Destroy(force)
- QDEL_LIST(stored_ammo)
+ for (var/obj/item/ammo_casing/casing as anything in stored_ammo)
+ if (!ispath(casing))
+ qdel(casing)
+ stored_ammo = null
return ..()
/obj/item/ammo_box/Exited(atom/movable/gone, direction)
@@ -71,13 +74,22 @@
readout += "Up to [span_warning("[max_ammo] [caliber] [casing_phrasing]s")] can be found within this magazine. \
\nAccidentally discharging any of these projectiles may void your insurance contract."
- var/obj/item/ammo_casing/mag_ammo = get_round(TRUE)
+ var/obj/item/ammo_casing/mag_ammo = get_and_shuffle_round()
if(istype(mag_ammo))
readout += "\n[mag_ammo.add_notes_ammo()]"
return readout.Join("\n")
+///list of every bullet in the box
+///forces all bullets to lazyload
+/obj/item/ammo_box/proc/ammo_list()
+ for (var/i in 1 to length(stored_ammo))
+ if (ispath(stored_ammo[i]))
+ var/casing_type = stored_ammo[i]
+ stored_ammo[i] = new casing_type(src)
+ return stored_ammo.Copy()
+
/**
* top_off is used to refill the magazine to max, in case you want to increase the size of a magazine with VV then refill it at once
*
@@ -95,68 +107,84 @@
return
for(var/i in max(1, stored_ammo.len + 1) to max_ammo)
- stored_ammo += new round_check(src)
+ stored_ammo += starting ? round_check : new round_check(src)
update_appearance()
-///gets a round from the magazine, if keep is TRUE the round will be moved to the bottom of the list.
-/obj/item/ammo_box/proc/get_round(keep = FALSE)
+///gets a round from the magazine
+/obj/item/ammo_box/proc/get_round()
var/ammo_len = length(stored_ammo)
if (!ammo_len)
return null
var/casing = stored_ammo[ammo_len]
- if (keep)
- stored_ammo -= casing
- stored_ammo.Insert(1,casing)
+ if (ispath(casing))
+ casing = new casing(src)
+ stored_ammo[ammo_len] = casing
+ return casing
+
+/// Gets a round from the magazine and puts it back at the bottom of the ammo list
+/obj/item/ammo_box/proc/get_and_shuffle_round()
+ var/casing = get_round()
+ if (!casing)
+ return null
+ stored_ammo -= casing
+ stored_ammo.Insert(1, casing)
return casing
///puts a round into the magazine
-/obj/item/ammo_box/proc/give_round(obj/item/ammo_casing/R, replace_spent = 0)
+/obj/item/ammo_box/proc/give_round(obj/item/ammo_casing/new_round, replace_spent = 0)
// Boxes don't have a caliber type, magazines do. Not sure if it's intended or not, but if we fail to find a caliber, then we fall back to ammo_type.
- if(!R || !(caliber ? (caliber == R.caliber) : (ammo_type == R.type)))
+ if(!new_round || !(caliber ? (caliber == new_round.caliber) : (ammo_type == new_round.type)))
return FALSE
if (stored_ammo.len < max_ammo)
- stored_ammo += R
- R.forceMove(src)
+ stored_ammo += new_round
+ new_round.forceMove(src)
return TRUE
+ if(!replace_spent)
+ return FALSE
+
//for accessibles magazines (e.g internal ones) when full, start replacing spent ammo
- else if(replace_spent)
- for(var/obj/item/ammo_casing/AC in stored_ammo)
- if(!AC.loaded_projectile)//found a spent ammo
- stored_ammo -= AC
- AC.forceMove(get_turf(src.loc))
-
- stored_ammo += R
- R.forceMove(src)
- return TRUE
+ for(var/obj/item/ammo_casing/casing as anything in stored_ammo)
+ if(ispath(casing) || casing.loaded_projectile)
+ continue
+ //found a spent ammo
+ stored_ammo -= casing
+ casing.forceMove(get_turf(src))
+
+ stored_ammo += new_round
+ new_round.forceMove(src)
+ return TRUE
return FALSE
///Whether or not the box can be loaded, used in overrides
/obj/item/ammo_box/proc/can_load(mob/user)
return TRUE
-/obj/item/ammo_box/attackby(obj/item/A, mob/user, params, silent = FALSE, replace_spent = 0)
+/obj/item/ammo_box/attackby(obj/item/tool, mob/user, params, silent = FALSE, replace_spent = 0)
var/num_loaded = 0
if(!can_load(user))
return
- if(istype(A, /obj/item/ammo_box))
- var/obj/item/ammo_box/AM = A
- for(var/obj/item/ammo_casing/AC in AM.stored_ammo)
- var/did_load = give_round(AC, replace_spent)
+
+ if(istype(tool, /obj/item/ammo_box))
+ var/obj/item/ammo_box/other_box = tool
+ for(var/obj/item/ammo_casing/casing in other_box.ammo_list())
+ var/did_load = give_round(casing, replace_spent)
if(did_load)
- AM.stored_ammo -= AC
+ other_box.stored_ammo -= casing
num_loaded++
if(!did_load || !multiload)
break
+
if(num_loaded)
- AM.update_appearance()
- if(isammocasing(A))
- var/obj/item/ammo_casing/AC = A
- if(give_round(AC, replace_spent))
- user.transferItemToLoc(AC, src, TRUE)
+ other_box.update_appearance()
+
+ if(isammocasing(tool))
+ var/obj/item/ammo_casing/casing = tool
+ if(give_round(casing, replace_spent))
+ user.transferItemToLoc(casing, src, TRUE)
num_loaded++
- AC.update_appearance()
+ casing.update_appearance()
if(num_loaded)
if(!silent)
@@ -225,18 +253,15 @@
///Count of number of bullets in the magazine
/obj/item/ammo_box/magazine/proc/ammo_count(countempties = TRUE)
var/boolets = 0
- for(var/obj/item/ammo_casing/bullet in stored_ammo)
- if(bullet && (bullet.loaded_projectile || countempties))
+ for(var/obj/item/ammo_casing/bullet as anything in stored_ammo)
+ if(ispath(bullet) || bullet && (bullet.loaded_projectile || countempties))
boolets++
return boolets
-///list of every bullet in the magazine
-/obj/item/ammo_box/magazine/proc/ammo_list()
- return stored_ammo.Copy()
-
///drops the entire contents of the magazine on the floor
/obj/item/ammo_box/magazine/proc/empty_magazine()
- var/turf_mag = get_turf(src)
- for(var/obj/item/ammo in stored_ammo)
- ammo.forceMove(turf_mag)
- stored_ammo -= ammo
+ var/turf/turf_mag = get_turf(src)
+ var/obj/item/ammo_casing/casing = get_round()
+ while (casing)
+ casing.forceMove(turf_mag)
+ casing = get_round()
diff --git a/code/modules/projectiles/boxes_magazines/external/toy.dm b/code/modules/projectiles/boxes_magazines/external/toy.dm
index a153c25107aa8..4f666e119b84d 100644
--- a/code/modules/projectiles/boxes_magazines/external/toy.dm
+++ b/code/modules/projectiles/boxes_magazines/external/toy.dm
@@ -47,7 +47,7 @@
if(round_number == i) //only count odd numbers.
continue
var/obj/item/ammo_casing/foam_dart/boolet = stored_ammo[i]
- . += "c20r45-foam-[boolet.tip_color]-[round_number]"
+ . += "c20r45-foam-[boolet::tip_color]-[round_number]"
/obj/item/ammo_box/magazine/toy/smgm45/riot
diff --git a/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm b/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm
index c60ec087c5108..28df0262352d1 100644
--- a/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm
+++ b/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm
@@ -15,7 +15,14 @@
/obj/item/ammo_box/magazine/internal/cylinder/get_round()
rotate()
- return stored_ammo[1]
+ var/casing = stored_ammo[1]
+ if (ispath(casing))
+ casing = new casing(src)
+ stored_ammo[1] = casing
+ return casing
+
+/obj/item/ammo_box/magazine/internal/cylinder/get_and_shuffle_round()
+ return get_round()
/obj/item/ammo_box/magazine/internal/cylinder/proc/rotate()
var/b = stored_ammo[1]
@@ -27,7 +34,7 @@
rotate()
/obj/item/ammo_box/magazine/internal/cylinder/ammo_list()
- var/list/no_nulls_ammo = stored_ammo.Copy()
+ var/list/no_nulls_ammo = ..()
list_clear_nulls(no_nulls_ammo)
return no_nulls_ammo
@@ -37,14 +44,15 @@
for(var/i in 1 to stored_ammo.len)
var/obj/item/ammo_casing/bullet = stored_ammo[i]
- if(!bullet || !bullet.loaded_projectile) // found a spent ammo
- stored_ammo[i] = R
- R.forceMove(src)
-
- if(bullet)
- bullet.forceMove(drop_location())
- return TRUE
+ if (istype(bullet) && bullet.loaded_projectile)
+ continue
+ // found a spent ammo
+ stored_ammo[i] = R
+ R.forceMove(src)
+ if(bullet)
+ bullet.forceMove(drop_location())
+ return TRUE
return FALSE
/obj/item/ammo_box/magazine/internal/cylinder/top_off(load_type, starting=FALSE)
diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm
index 2222140c805a2..45c1e9c65ea09 100644
--- a/code/modules/projectiles/guns/ballistic.dm
+++ b/code/modules/projectiles/guns/ballistic.dm
@@ -311,7 +311,7 @@
if (chambered || !magazine)
return
if (magazine.ammo_count())
- chambered = magazine.get_round((bolt_type == BOLT_TYPE_OPEN && !bolt_locked) || bolt_type == BOLT_TYPE_NO_BOLT)
+ chambered = (bolt_type == BOLT_TYPE_OPEN && !bolt_locked) || bolt_type == BOLT_TYPE_NO_BOLT ? magazine.get_and_shuffle_round() : magazine.get_round()
if (bolt_type != BOLT_TYPE_OPEN && !(internal_magazine && bolt_type == BOLT_TYPE_NO_BOLT))
chambered.forceMove(src)
else
@@ -464,7 +464,7 @@
return TRUE
/obj/item/gun/ballistic/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
- var/could_it_misfire = (can_misfire && chambered.can_misfire != FALSE) || chambered.can_misfire
+ var/could_it_misfire = chambered && chambered.can_misfire
if(target != user && chambered.loaded_projectile && could_it_misfire && prob(misfire_probability) && blow_up(user))
to_chat(user, span_userdanger("[src] misfires!"))
return
@@ -547,13 +547,13 @@
return
if(bolt_type == BOLT_TYPE_NO_BOLT)
var/num_unloaded = 0
- for(var/obj/item/ammo_casing/CB as anything in get_ammo_list(FALSE))
- CB.forceMove(drop_location())
- CB.bounce_away(FALSE, NONE)
+ for(var/obj/item/ammo_casing/casing as anything in get_ammo_list(FALSE))
+ casing.forceMove(drop_location())
+ casing.bounce_away(FALSE, NONE)
num_unloaded++
var/turf/T = get_turf(drop_location())
if(T && is_station_level(T.z))
- SSblackbox.record_feedback("tally", "station_mess_created", 1, CB.name)
+ SSblackbox.record_feedback("tally", "station_mess_created", 1, casing.name)
if (num_unloaded)
balloon_alert(user, "[num_unloaded] [cartridge_wording]\s unloaded")
playsound(user, eject_sound, eject_sound_volume, eject_sound_vary)
@@ -612,7 +612,7 @@
#define BRAINS_BLOWN_THROW_SPEED 1
/obj/item/gun/ballistic/suicide_act(mob/living/user)
- var/obj/item/organ/internal/brain/B = user.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/B = user.get_organ_slot(ORGAN_SLOT_BRAIN)
if (B && chambered && chambered.loaded_projectile && can_trigger_gun(user) && chambered.loaded_projectile.damage > 0)
user.visible_message(span_suicide("[user] is putting the barrel of [src] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide!"))
sleep(2.5 SECONDS)
diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm
index 03c7f51b936be..6f31a2fa6ca44 100644
--- a/code/modules/projectiles/guns/ballistic/launchers.dm
+++ b/code/modules/projectiles/guns/ballistic/launchers.dm
@@ -93,7 +93,7 @@
. = ..()
if(!.)
return
- magazine.get_round(FALSE) //Hack to clear the mag after it's fired
+ magazine.get_round() //Hack to clear the mag after it's fired
/obj/item/gun/ballistic/rocketlauncher/attack_self_tk(mob/user)
return //too difficult to remove the rocket with TK
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index 1817e7374832d..bb589bc011a14 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -26,10 +26,13 @@
CRASH("revolver tried to chamber a round without a magazine!")
if(chambered)
UnregisterSignal(chambered, COMSIG_MOVABLE_MOVED)
- if(spin_cylinder)
- chambered = magazine.get_round(TRUE)
+ if (spin_cylinder)
+ chambered = magazine.get_round()
else
chambered = magazine.stored_ammo[1]
+ if (ispath(chambered))
+ chambered = new chambered(src)
+ magazine.stored_ammo[1] = chambered
if(chambered)
RegisterSignal(chambered, COMSIG_MOVABLE_MOVED, PROC_REF(clear_chambered))
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 80616a88cfa7c..0b03f41293142 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -68,6 +68,8 @@
var/projectile_piercing = NONE
/// number of times we've pierced something. Incremented BEFORE bullet_act and on_hit proc!
var/pierces = 0
+ /// how many times this projectile can pierce something before deleting
+ var/max_pierces = 0
/// If objects are below this layer, we pass through them
var/hit_threshhold = PROJECTILE_HIT_THRESHHOLD_LAYER
@@ -86,7 +88,7 @@
var/pixel_speed_multiplier = 1
/// The current angle of the projectile. Initially null, so if the arg is missing from [/fire()], we can calculate it from firer and target as fallback.
- var/Angle
+ var/angle
var/original_angle = 0 //Angle at firing
var/nondirectional_sprite = FALSE //Set TRUE to prevent projectiles from having their sprites rotated based on firing angle
var/spread = 0 //amount (in degrees) of projectile spread
@@ -112,7 +114,7 @@
/// Can our ricochet autoaim hit our firer?
var/ricochet_shoots_firer = TRUE
- ///If the object being hit can pass ths damage on to something else, it should not do it for this bullet
+ ///If the object being hit can pass the damage on to something else, it should not do it for this bullet
var/force_hit = FALSE
//Hitscan
@@ -283,16 +285,17 @@
// maybe we care what the projectile thinks! See about combining these via args some time when it's not 5AM
var/hit_limb_zone
if(isliving(target))
- var/mob/living/L = target
- hit_limb_zone = L.check_hit_limb_zone_name(def_zone)
+ var/mob/living/victim = target
+ hit_limb_zone = victim.check_hit_limb_zone_name(def_zone)
+
if(fired_from)
- SEND_SIGNAL(fired_from, COMSIG_PROJECTILE_ON_HIT, firer, target, Angle, hit_limb_zone, blocked)
- SEND_SIGNAL(src, COMSIG_PROJECTILE_SELF_ON_HIT, firer, target, Angle, hit_limb_zone, blocked)
+ SEND_SIGNAL(fired_from, COMSIG_PROJECTILE_ON_HIT, firer, target, angle, hit_limb_zone, blocked)
+ SEND_SIGNAL(src, COMSIG_PROJECTILE_SELF_ON_HIT, firer, target, angle, hit_limb_zone, blocked)
if(QDELETED(src)) // in case one of the above signals deleted the projectile for whatever reason
return BULLET_ACT_BLOCK
- var/turf/target_turf = get_turf(target)
+ var/turf/target_turf = get_turf(target)
var/hitx
var/hity
if(target == original)
@@ -303,10 +306,7 @@
hity = target.pixel_y + rand(-8, 8)
if(isturf(target) && hitsound_wall)
- var/volume = clamp(vol_by_damage() + 20, 0, 100)
- if(suppressed)
- volume = 5
- playsound(loc, hitsound_wall, volume, TRUE, -1)
+ playsound(src, hitsound_wall, clamp(vol_by_damage() + (suppressed ? 0 : 20), 0, 100), TRUE, -1)
if(damage > 0 && (damage_type == BRUTE || damage_type == BURN) && iswallturf(target_turf) && prob(75))
var/turf/closed/wall/target_wall = target_turf
@@ -314,62 +314,20 @@
new impact_effect_type(target_wall, hitx, hity)
target_wall.add_dent(WALL_DENT_SHOT, hitx, hity)
-
return BULLET_ACT_HIT
- if(!isliving(target))
+ if (hitsound)
+ playsound(src, hitsound, vol_by_damage(), TRUE, -1)
+
+ if (!isliving(target))
if(impact_effect_type && !hitscan)
new impact_effect_type(target_turf, hitx, hity)
-
return BULLET_ACT_HIT
- var/mob/living/living_target = target
-
- if(blocked != 100) // not completely blocked
- var/obj/item/bodypart/hit_bodypart = living_target.get_bodypart(hit_limb_zone)
- if (damage && damage_type == BRUTE)
- if (living_target.blood_volume && (isnull(hit_bodypart) || hit_bodypart.can_bleed()))
- var/splatter_dir = dir
- if(starting)
- splatter_dir = get_dir(starting, target_turf)
- // DOPPLER ADDITION START
- if(hasblueblood(living_target))
- new /obj/effect/temp_visual/dir_setting/bloodsplatter/blue(target_turf, splatter_dir)
- if(hasgreenblood(living_target))
- new /obj/effect/temp_visual/dir_setting/bloodsplatter/green(target_turf, splatter_dir)
- if(!hasblueblood(living_target) && !hasgreenblood(living_target))
- new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_turf, splatter_dir)
- // DOPPLER ADDITION END
- if(prob(33))
- living_target.add_splatter_floor(target_turf)
- if (hit_bodypart?.biological_state & (BIO_ROBOTIC)) // DOPPLER EDIT - old code: else if (hit_bodypart?.biological_state & (BIO_METAL|BIO_WIRED))
- var/random_damage_mult = RANDOM_DECIMAL(0.85, 1.15) // SOMETIMES you can get more or less sparks
- var/damage_dealt = ((damage / (1 - (blocked / 100))) * random_damage_mult)
-
- var/spark_amount = round((damage_dealt / PROJECTILE_DAMAGE_PER_ROBOTIC_SPARK))
- if (spark_amount > 0)
- do_sparks(spark_amount, FALSE, living_target)
-
- else if(impact_effect_type && !hitscan)
- new impact_effect_type(target_turf, hitx, hity)
-
- var/organ_hit_text = ""
- if(hit_limb_zone)
- organ_hit_text = " in \the [living_target.parse_zone_with_bodypart(hit_limb_zone)]"
- if(suppressed == SUPPRESSED_VERY)
- playsound(loc, hitsound, 5, TRUE, -1)
- else if(suppressed)
- playsound(loc, hitsound, 5, TRUE, -1)
- to_chat(living_target, span_userdanger("You're shot by \a [src][organ_hit_text]!"))
- else
- if(hitsound)
- var/volume = vol_by_damage()
- playsound(src, hitsound, volume, TRUE, -1)
- living_target.visible_message(span_danger("[living_target] is hit by \a [src][organ_hit_text]!"), \
- span_userdanger("You're hit by \a [src][organ_hit_text]!"), null, COMBAT_MESSAGE_RANGE)
- if(living_target.is_blind())
- to_chat(living_target, span_userdanger("You feel something hit you[organ_hit_text]!"))
+ if((blocked >= 100 || (damage && damage_type != BRUTE)) && impact_effect_type && !hitscan)
+ new impact_effect_type(target_turf, hitx, hity)
+ var/mob/living/living_target = target
var/reagent_note
if(reagents?.reagent_list)
reagent_note = "REAGENTS: [pretty_string_from_reagent_list(reagents.reagent_list)]"
@@ -380,7 +338,6 @@
if(isvehicle(firer))
var/obj/vehicle/firing_vehicle = firer
-
var/list/logging_mobs = firing_vehicle.return_controllers_with_flag(VEHICLE_CONTROL_EQUIPMENT)
if(!LAZYLEN(logging_mobs))
logging_mobs = firing_vehicle.return_drivers()
@@ -388,17 +345,20 @@
for(var/mob/logged_mob as anything in logging_mobs)
log_combat(logged_mob, living_target, "shot", src, "from inside [firing_vehicle][logging_mobs.len > 1 ? " with multiple occupants" : null][reagent_note ? " and contained [reagent_note]" : null]")
return BULLET_ACT_HIT
+
if(!do_not_log)
living_target.log_message("has been shot by [firer] with [src][reagent_note ? " containing [reagent_note]" : null]", LOG_ATTACK, color="orange")
return BULLET_ACT_HIT
/obj/projectile/proc/vol_by_damage()
- if(src.damage)
- return clamp((src.damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then CLAMP the value between 30 and 100
- else
+ if (suppressed)
+ return 5
+ if(!damage)
return 50 //if the projectile doesn't do damage, play its hitsound at 50% volume
+ return clamp(damage * 0.67, 30, 100)// Multiply projectile damage by 0.67, then CLAMP the value between 30 and 1
-/obj/projectile/proc/on_ricochet(atom/A)
+/obj/projectile/proc/on_ricochet(atom/target)
+ ricochets++
if(!ricochet_auto_aim_angle || !ricochet_auto_aim_range)
return
@@ -406,27 +366,28 @@
var/best_angle = ricochet_auto_aim_angle
if(firer && HAS_TRAIT(firer, TRAIT_NICE_SHOT))
best_angle += NICE_SHOT_RICOCHET_BONUS
- for(var/mob/living/L in range(ricochet_auto_aim_range, src.loc))
- if(L.stat == DEAD || !is_in_sight(src, L) || (!ricochet_shoots_firer && L == firer))
+ for(var/mob/living/potential_target in range(ricochet_auto_aim_range, loc))
+ if(potential_target.stat == DEAD || !is_in_sight(src, potential_target) || (!ricochet_shoots_firer && potential_target == firer))
continue
- var/our_angle = abs(closer_angle_difference(Angle, get_angle(src.loc, L.loc)))
+ var/our_angle = abs(closer_angle_difference(angle, get_angle(loc, potential_target.loc)))
if(our_angle < best_angle)
best_angle = our_angle
- unlucky_sob = L
+ unlucky_sob = potential_target
if(unlucky_sob)
set_angle(get_angle(src, unlucky_sob.loc))
+ original = unlucky_sob
/obj/projectile/proc/store_hitscan_collision(datum/point/point_cache)
beam_segments[beam_index] = point_cache
beam_index = point_cache
beam_segments[beam_index] = null
-/obj/projectile/Bump(atom/A)
- SEND_SIGNAL(src, COMSIG_MOVABLE_BUMP, A)
- if(!can_hit_target(A, A == original, TRUE, TRUE))
+/obj/projectile/Bump(atom/bumped_atom)
+ SEND_SIGNAL(src, COMSIG_MOVABLE_BUMP, bumped_atom)
+ if(!can_hit_target(bumped_atom, bumped_atom == original, TRUE, TRUE))
return
- Impact(A)
+ impact(bumped_atom)
/**
* Called when the projectile hits something
@@ -439,89 +400,82 @@
* Furthermore, this proc shouldn't check can_hit_target - this should only be called if can hit target is already checked.
* Also, we select_target to find what to process_hit first.
*/
-/obj/projectile/proc/Impact(atom/A)
- if(!trajectory)
- qdel(src)
- return FALSE
- if(impacted[A.weak_reference]) // NEVER doublehit
- return FALSE
- var/datum/point/point_cache = trajectory.copy_to()
- var/turf/T = get_turf(A)
- if(ricochets < ricochets_max && check_ricochet_flag(A) && check_ricochet(A))
- ricochets++
- if(A.handle_ricochet(src))
- on_ricochet(A)
- impacted = list() // Shoot a x-ray laser at a pair of mirrors I dare you
- ignore_source_check = TRUE // Firer is no longer immune
- decayedRange = max(0, decayedRange - reflect_range_decrease)
- ricochet_chance *= ricochet_decay_chance
- damage *= ricochet_decay_damage
- stamina *= ricochet_decay_damage
- range = decayedRange
- if(hitscan)
- store_hitscan_collision(point_cache)
- return TRUE
-
- var/distance = get_dist(T, starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations.
- def_zone = ran_zone(def_zone, clamp(accurate_range - (accuracy_falloff * distance), 5, 100)) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use.
+/obj/projectile/proc/impact(atom/target)
+ if(impacted[target.weak_reference]) // never doublehit, otherwise someone may end up running into a projectile from the back
+ return
- return process_hit(T, select_target(T, A, A), A) // SELECT TARGET FIRST!
+ if(ricochets < ricochets_max && check_ricochet_flag(target) && check_ricochet(target) && target.handle_ricochet(src))
+ on_ricochet(target)
+ impacted = list() // Shoot a x-ray laser at a pair of mirrors I dare you
+ ignore_source_check = TRUE // Firer is no longer immune
+ decayedRange = max(0, decayedRange - reflect_range_decrease)
+ ricochet_chance *= ricochet_decay_chance
+ damage *= ricochet_decay_damage
+ stamina *= ricochet_decay_damage
+ range = decayedRange
+ if(hitscan && trajectory)
+ store_hitscan_collision(trajectory.copy_to())
+ return
-/**
- * The primary workhorse proc of projectile impacts.
- * This is a RECURSIVE call - process_hit is called on the first selected target, and then repeatedly called if the projectile still hasn't been deleted.
- *
- * Order of operations:
- * 1. Checks if we are deleted, or if we're somehow trying to hit a null, in which case, bail out
- * 2. Adds the thing we're hitting to impacted so we can make sure we don't doublehit
- * 3. Checks piercing - stores this.
- * Afterwards:
- * Hit and delete, hit without deleting and pass through, pass through without hitting, or delete without hitting depending on result
- * If we're going through without hitting, find something else to hit if possible and recurse, set unstoppable movement to true
- * If we're deleting without hitting, delete and return
- * Otherwise, send signal of COMSIG_PROJECTILE_PREHIT to target
- * Then, hit, deleting ourselves if necessary.
- * @params
- * T - Turf we're on/supposedly hitting
- * target - target we're hitting
- * bumped - target we originally bumped. it's here to ensure that if something blocks our projectile by means of Cross() failure, we hit it
- * even if it is not dense.
- * hit_something - only should be set by recursive calling by this proc - tracks if we hit something already
- *
- * Returns if we hit something.
+ var/turf/target_turf = get_turf(target)
+ // Lower accurancy/longer range tradeoff. 7 is a balanced number to use.
+ def_zone = ran_zone(def_zone, clamp(accurate_range - (accuracy_falloff * get_dist(target_turf, starting)), 5, 100))
+ process_hit_loop(select_target(target_turf, target))
+
+/*
+ * Main projectile hit loop code
+ * As long as there are valid targets on the hit target's tile, we will loop through all the ones that we have not hit
+ * (and thus invalidated) and try to hit them until either no targets remain or we've been deleted.
*/
-/obj/projectile/proc/process_hit(turf/T, atom/target, atom/bumped, hit_something = FALSE)
- // 1.
- if(QDELETED(src) || !T || !target)
- return
- // 2.
- impacted[WEAKREF(target)] = TRUE //hash lookup > in for performance in hit-checking
- // 3.
- var/mode = prehit_pierce(target)
- if(mode == PROJECTILE_DELETE_WITHOUT_HITTING)
- qdel(src)
- return hit_something
- else if(mode == PROJECTILE_PIERCE_PHASE)
- if(!(movement_type & PHASING))
- temporary_unstoppable_movement = TRUE
- movement_type |= PHASING
- return process_hit(T, select_target(T, target, bumped), bumped, hit_something) // try to hit something else
- // at this point we are going to hit the thing
- // in which case send signal to it
- if ((SEND_SIGNAL(target, COMSIG_PROJECTILE_PREHIT, args, src) & PROJECTILE_INTERRUPT_HIT) || (SEND_SIGNAL(src, COMSIG_PROJECTILE_SELF_PREHIT, args) & PROJECTILE_INTERRUPT_HIT))
- qdel(src)
- return BULLET_ACT_BLOCK
- if(mode == PROJECTILE_PIERCE_HIT)
- ++pierces
- hit_something = TRUE
- var/result = target.bullet_act(src, def_zone, mode == PROJECTILE_PIERCE_HIT)
- if((result == BULLET_ACT_FORCE_PIERCE) || (mode == PROJECTILE_PIERCE_HIT))
+/obj/projectile/proc/process_hit_loop(atom/target)
+ SHOULD_NOT_SLEEP(TRUE)
+ SHOULD_NOT_OVERRIDE(TRUE)
+
+ var/turf/target_turf = get_turf(target)
+ while (target && !QDELETED(src))
+ // Doublehitting can be an issue with slow projectiles or when the server is chugging
+ impacted[WEAKREF(target)] = TRUE
+ var/mode = prehit_pierce(target)
+ if(mode == PROJECTILE_DELETE_WITHOUT_HITTING)
+ qdel(src)
+ return
+
+ // If we've phasing through a target, first set ourselves as phasing and then try to locate a new one
+ if(mode == PROJECTILE_PIERCE_PHASE)
+ if(!(movement_type & PHASING))
+ temporary_unstoppable_movement = TRUE
+ movement_type |= PHASING
+ target = select_target(target_turf, target)
+ continue
+
+ if (SEND_SIGNAL(target, COMSIG_PROJECTILE_PREHIT, args, src) & PROJECTILE_INTERRUPT_HIT)
+ qdel(src)
+ return
+
+ if (SEND_SIGNAL(src, COMSIG_PROJECTILE_SELF_PREHIT, args) & PROJECTILE_INTERRUPT_HIT)
+ qdel(src)
+ return
+
+ if(mode == PROJECTILE_PIERCE_HIT)
+ pierces += 1
+
+ // Targets should handle their impact logic on our own and if they decide that we hit them, they call our on_hit
+ var/result = target.bullet_act(src, def_zone, mode == PROJECTILE_PIERCE_HIT)
+ if (result != BULLET_ACT_FORCE_PIERCE && max_pierces && pierces >= max_pierces)
+ qdel(src)
+ return
+
+ // If we're not piercing or phasing, delete ourselves
+ if (result != BULLET_ACT_FORCE_PIERCE && mode != PROJECTILE_PIERCE_HIT && mode != PROJECTILE_PIERCE_PHASE)
+ qdel(src)
+ return
+
+ // We've piercing though this one, go look for a new target
if(!(movement_type & PHASING))
temporary_unstoppable_movement = TRUE
movement_type |= PHASING
- return process_hit(T, select_target(T, target, bumped), bumped, TRUE)
- qdel(src)
- return hit_something
+
+ target = select_target(target_turf, target)
/**
* Selects a target to hit from a turf
@@ -543,7 +497,7 @@
* 5. Turf
* 6. Nothing
*/
-/obj/projectile/proc/select_target(turf/our_turf, atom/target, atom/bumped)
+/obj/projectile/proc/select_target(turf/our_turf, atom/bumped)
// 1. special bumped border object check
if((bumped?.flags_1 & ON_BORDER_1) && can_hit_target(bumped, original == bumped, TRUE, TRUE))
return bumped
@@ -558,9 +512,9 @@
if(length(considering))
return pick(considering)
// 4. objs and other dense things
- for(var/i in our_turf)
- if(can_hit_target(i, i == original, TRUE, i == bumped))
- considering += i
+ for(var/atom/potential_target as anything in our_turf)
+ if(can_hit_target(potential_target, potential_target == original, TRUE, potential_target == bumped))
+ considering += potential_target
if(length(considering))
return pick(considering)
// 5. turf
@@ -585,9 +539,12 @@
living_target.block_projectile_effects()
return FALSE
if(!ignore_source_check && firer)
- var/mob/M = firer
- if((target == firer) || ((target == firer.loc) && ismecha(firer.loc)) || (target in firer.buckled_mobs) || (istype(M) && (M.buckled == target)))
+ if(target == firer || (target == firer.loc && ismecha(firer.loc)) || (target in firer.buckled_mobs))
return FALSE
+ if(ismob(firer))
+ var/mob/firer_mob = firer
+ if (firer_mob.buckled == target)
+ return FALSE
if(ignored_factions?.len && ismob(target) && !direct_target)
var/mob/target_mob = target
if(faction_check(target_mob.faction, ignored_factions))
@@ -624,16 +581,16 @@
/**
* Scan if we should hit something and hit it if we need to
- * The difference between this and handling in Impact is
- * In this we strictly check if we need to Impact() something in specific
+ * The difference between this and handling in impact is
+ * In this we strictly check if we need to impact() something in specific
* If we do, we do
- * We don't even check if it got hit already - Impact() does that
+ * We don't even check if it got hit already - impact() does that
* In impact there's more code for selecting WHAT to hit
* So this proc is more of checking if we should hit something at all BY having an atom cross us.
*/
-/obj/projectile/proc/scan_crossed_hit(atom/movable/A)
- if(can_hit_target(A, direct_target = (A == original)))
- Impact(A)
+/obj/projectile/proc/scan_crossed_hit(atom/movable/crossed_atom)
+ if(can_hit_target(crossed_atom, direct_target = (crossed_atom == original)))
+ impact(crossed_atom)
/**
* Scans if we should hit something on the turf we just moved to if we haven't already
@@ -647,21 +604,22 @@
// and hope projectiles get refactored again in the future to have a less stupid impact detection system
// that hopefully won't also involve a ton of overhead
if(can_hit_target(original, TRUE, FALSE))
- Impact(original) // try to hit thing clicked on
+ impact(original) // try to hit thing clicked on
+ return
// else, try to hit mobs
- else // because if we impacted original and pierced we'll already have select target'd and hit everything else we should be hitting
- for(var/mob/M in loc) // so I guess we're STILL doing a for loop of mobs because living movement would otherwise have snowflake code for projectile CanPass
- // so the snowflake vs performance is pretty arguable here
- if(can_hit_target(M, M == original, TRUE))
- Impact(M)
- break
+ // because if we impacted original and pierced we'll already have select target'd and hit everything else we should be hitting
+ for(var/mob/potential_target in loc) // so I guess we're STILL doing a for loop of mobs because living movement would otherwise have snowflake code for projectile CanPass
+ // so the snowflake vs performance is pretty arguable here
+ if(can_hit_target(potential_target, potential_target == original, TRUE))
+ impact(potential_target)
+ break
/**
* Projectile crossed: When something enters a projectile's tile, make sure the projectile hits it if it should be hitting it.
*/
-/obj/projectile/proc/on_entered(datum/source, atom/movable/AM)
+/obj/projectile/proc/on_entered(datum/source, atom/movable/entered_atom)
SIGNAL_HANDLER
- scan_crossed_hit(AM)
+ scan_crossed_hit(entered_atom)
/**
* Projectile can pass through
@@ -694,41 +652,41 @@
* NOT meant to be a pure proc, since this replaces prehit() which was used to do things.
* Return PROJECTILE_DELETE_WITHOUT_HITTING to delete projectile without hitting at all!
*/
-/obj/projectile/proc/prehit_pierce(atom/A)
- if((projectile_phasing & A.pass_flags_self) && (phasing_ignore_direct_target || original != A))
+/obj/projectile/proc/prehit_pierce(atom/target)
+ if((projectile_phasing & target.pass_flags_self) && (phasing_ignore_direct_target || original != target))
return PROJECTILE_PIERCE_PHASE
- if(projectile_piercing & A.pass_flags_self)
+ if(projectile_piercing & target.pass_flags_self)
return PROJECTILE_PIERCE_HIT
- if(ismovable(A))
- var/atom/movable/AM = A
- if(AM.throwing)
+ if(ismovable(target))
+ var/atom/movable/movable_target = target
+ if(movable_target.throwing)
return (projectile_phasing & LETPASSTHROW) ? PROJECTILE_PIERCE_PHASE : ((projectile_piercing & LETPASSTHROW)? PROJECTILE_PIERCE_HIT : PROJECTILE_PIERCE_NONE)
return PROJECTILE_PIERCE_NONE
-/obj/projectile/proc/check_ricochet(atom/A)
- var/chance = ricochet_chance * A.receive_ricochet_chance_mod
+/obj/projectile/proc/check_ricochet(atom/target)
+ var/chance = ricochet_chance * target.receive_ricochet_chance_mod
if(firer && HAS_TRAIT(firer, TRAIT_NICE_SHOT))
chance += NICE_SHOT_RICOCHET_BONUS
if(ricochets < min_ricochets || prob(chance))
return TRUE
return FALSE
-/obj/projectile/proc/check_ricochet_flag(atom/A)
- if((armor_flag in list(ENERGY, LASER)) && (A.flags_ricochet & RICOCHET_SHINY))
+/obj/projectile/proc/check_ricochet_flag(atom/target)
+ if((armor_flag in list(ENERGY, LASER)) && (target.flags_ricochet & RICOCHET_SHINY))
return TRUE
- if((armor_flag in list(BOMB, BULLET)) && (A.flags_ricochet & RICOCHET_HARD))
+ if((armor_flag in list(BOMB, BULLET)) && (target.flags_ricochet & RICOCHET_HARD))
return TRUE
return FALSE
/obj/projectile/proc/return_predicted_turf_after_moves(moves, forced_angle) //I say predicted because there's no telling that the projectile won't change direction/location in flight.
- if(!trajectory && isnull(forced_angle) && isnull(Angle))
+ if(!trajectory && isnull(forced_angle) && isnull(angle))
return FALSE
var/datum/point/vector/current = trajectory
if(!current)
var/turf/T = get_turf(src)
- current = new(T.x, T.y, T.z, pixel_x, pixel_y, isnull(forced_angle)? Angle : forced_angle, SSprojectiles.global_pixel_speed)
+ current = new(T.x, T.y, T.z, pixel_x, pixel_y, isnull(forced_angle)? angle : forced_angle, SSprojectiles.global_pixel_speed)
var/datum/point/vector/v = current.return_vector_after_increments(moves * SSprojectiles.global_iterations_per_move)
return v.return_turf()
@@ -763,23 +721,27 @@
for(var/i in 1 to required_moves)
pixel_move(pixel_speed_multiplier, FALSE)
-/obj/projectile/proc/fire(angle, atom/direct_target)
+/obj/projectile/proc/fire(fire_angle, atom/direct_target)
LAZYINITLIST(impacted)
if(fired_from)
SEND_SIGNAL(fired_from, COMSIG_PROJECTILE_BEFORE_FIRE, src, original)
if(firer)
+ RegisterSignal(firer, COMSIG_QDELETING, PROC_REF(firer_deleted))
SEND_SIGNAL(firer, COMSIG_PROJECTILE_FIRER_BEFORE_FIRE, src, fired_from, original)
+ if (original)
+ if (firer != original)
+ RegisterSignal(original, COMSIG_QDELETING, PROC_REF(original_deleted))
if(!log_override && firer && original && !do_not_log)
log_combat(firer, original, "fired at", src, "from [get_area_name(src, TRUE)]")
//note: mecha projectile logging is handled in /obj/item/mecha_parts/mecha_equipment/weapon/action(). try to keep these messages roughly the sameish just for consistency's sake.
if(direct_target && (get_dist(direct_target, get_turf(src)) <= 1)) // point blank shots
- process_hit(get_turf(direct_target), direct_target)
+ process_hit_loop(direct_target)
if(QDELETED(src))
return
var/turf/starting = get_turf(src)
- if(isnum(angle))
- set_angle(angle)
- else if(isnull(Angle)) //Try to resolve through offsets if there's no angle set.
+ if(isnum(fire_angle))
+ set_angle(fire_angle)
+ else if(isnull(angle)) //Try to resolve through offsets if there's no angle set.
if(isnull(xo) || isnull(yo))
stack_trace("WARNING: Projectile [type] deleted due to being unable to resolve a target after angle was null!")
qdel(src)
@@ -787,15 +749,15 @@
var/turf/target = locate(clamp(starting + xo, 1, world.maxx), clamp(starting + yo, 1, world.maxy), starting.z)
set_angle(get_angle(src, target))
if(spread)
- set_angle(Angle + (rand() - 0.5) * spread)
- original_angle = Angle
+ set_angle(angle + (rand() - 0.5) * spread)
+ original_angle = angle
trajectory_ignore_forcemove = TRUE
forceMove(starting)
trajectory_ignore_forcemove = FALSE
- trajectory = new(starting.x, starting.y, starting.z, pixel_x, pixel_y, Angle, SSprojectiles.global_pixel_speed)
+ trajectory = new(starting.x, starting.y, starting.z, pixel_x, pixel_y, angle, SSprojectiles.global_pixel_speed)
last_projectile_move = world.time
fired = TRUE
- play_fov_effect(starting, 6, "gunfire", dir = NORTH, angle = Angle)
+ play_fov_effect(starting, 6, "gunfire", dir = NORTH, angle = angle)
SEND_SIGNAL(src, COMSIG_PROJECTILE_FIRE)
if(hitscan)
process_hitscan()
@@ -807,8 +769,8 @@
/obj/projectile/proc/set_angle(new_angle) //wrapper for overrides.
if(!nondirectional_sprite)
- transform = transform.TurnTo(Angle, new_angle)
- Angle = new_angle
+ transform = transform.TurnTo(angle, new_angle)
+ angle = new_angle
if(trajectory)
trajectory.set_angle(new_angle)
if(fired && hitscan && isloc(loc) && (loc != last_angle_set_hitscan_store))
@@ -818,11 +780,22 @@
store_hitscan_collision(point_cache)
return TRUE
+/obj/projectile/proc/firer_deleted(datum/source)
+ SIGNAL_HANDLER
+ // Shooting yourself point-blank
+ if (firer == original)
+ original = null
+ firer = null
+
+/obj/projectile/proc/original_deleted(datum/source)
+ SIGNAL_HANDLER
+ original = null
+
/// Same as set_angle, but the reflection continues from the center of the object that reflects it instead of the side
/obj/projectile/proc/set_angle_centered(new_angle)
if(!nondirectional_sprite)
- transform = transform.TurnTo(Angle, new_angle)
- Angle = new_angle
+ transform = transform.TurnTo(angle, new_angle)
+ angle = new_angle
if(trajectory)
trajectory.set_angle(new_angle)
@@ -836,8 +809,6 @@
store_hitscan_collision(point_cache)
return TRUE
-
-
/obj/projectile/forceMove(atom/target)
if(!isloc(target) || !isloc(loc) || !z)
return ..()
@@ -858,12 +829,14 @@
after_z_change(old, target)
/obj/projectile/proc/after_z_change(atom/olcloc, atom/newloc)
+ return
/obj/projectile/proc/before_z_change(atom/oldloc, atom/newloc)
+ return
/obj/projectile/vv_edit_var(var_name, var_value)
switch(var_name)
- if(NAMEOF(src, Angle))
+ if(NAMEOF(src, angle))
set_angle(var_value)
return TRUE
else
@@ -883,7 +856,7 @@
/obj/projectile/proc/process_hitscan()
var/safety = range * 10
- record_hitscan_start(RETURN_POINT_VECTOR_INCREMENT(src, Angle, MUZZLE_EFFECT_PIXEL_INCREMENT, 1))
+ record_hitscan_start(RETURN_POINT_VECTOR_INCREMENT(src, angle, MUZZLE_EFFECT_PIXEL_INCREMENT, 1))
while(loc && !QDELETED(src))
if(paused)
stoplag(1)
@@ -910,23 +883,23 @@
if(QDELETED(src))
return
trajectory.increment(trajectory_multiplier)
- var/turf/T = trajectory.return_turf()
- if(!istype(T))
+ var/turf/cur_turf = trajectory.return_turf()
+ if(!istype(cur_turf))
// step back to the last valid turf before we Destroy
trajectory.increment(-trajectory_multiplier)
qdel(src)
return
- if (T == loc)
+ if (cur_turf == loc)
continue
- if (T.z == loc.z)
- step_towards(src, T)
+ if (cur_turf.z == loc.z)
+ step_towards(src, cur_turf)
hitscan_last = loc
SEND_SIGNAL(src, COMSIG_PROJECTILE_PIXEL_STEP)
continue
var/old = loc
- before_z_change(loc, T)
+ before_z_change(loc, cur_turf)
trajectory_ignore_forcemove = TRUE
- forceMove(T)
+ forceMove(cur_turf)
trajectory_ignore_forcemove = FALSE
after_z_change(old, loc)
if(!hitscanning)
@@ -946,17 +919,17 @@
/obj/projectile/proc/process_homing() //may need speeding up in the future performance wise.
if(!homing_target)
return FALSE
- var/datum/point/PT = RETURN_PRECISE_POINT(homing_target)
- PT.x += clamp(homing_offset_x, 1, world.maxx)
- PT.y += clamp(homing_offset_y, 1, world.maxy)
- var/angle = closer_angle_difference(Angle, angle_between_points(RETURN_PRECISE_POINT(src), PT))
- set_angle(Angle + clamp(angle, -homing_turn_speed, homing_turn_speed))
-
-/obj/projectile/proc/set_homing_target(atom/A)
- if(!A || (!isturf(A) && !isturf(A.loc)))
+ var/datum/point/new_point = RETURN_PRECISE_POINT(homing_target)
+ new_point.x += clamp(homing_offset_x, 1, world.maxx)
+ new_point.y += clamp(homing_offset_y, 1, world.maxy)
+ var/new_angle = closer_angle_difference(angle, angle_between_points(RETURN_PRECISE_POINT(src), new_point))
+ set_angle(angle + clamp(new_angle, -homing_turn_speed, homing_turn_speed))
+
+/obj/projectile/proc/set_homing_target(atom/target)
+ if(!target || (!isturf(target) && !isturf(target.loc)))
return FALSE
homing = TRUE
- homing_target = A
+ homing_target = target
homing_offset_x = rand(homing_inaccuracy_min, homing_inaccuracy_max)
homing_offset_y = rand(homing_inaccuracy_min, homing_inaccuracy_max)
if(prob(50))
@@ -1068,6 +1041,8 @@
finalize_hitscan_and_generate_tracers()
STOP_PROCESSING(SSprojectiles, src)
cleanup_beam_segments()
+ firer = null
+ original = null
if(trajectory)
QDEL_NULL(trajectory)
return ..()
@@ -1088,12 +1063,12 @@
return
if(tracer_type)
var/tempref = REF(src)
- for(var/datum/point/p in beam_segments)
- generate_tracer_between_points(p, beam_segments[p], tracer_type, color, duration, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity, tempref)
+ for(var/datum/point/beam_point in beam_segments)
+ generate_tracer_between_points(beam_point, beam_segments[beam_point], tracer_type, color, duration, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity, tempref)
if(muzzle_type && duration > 0)
- var/datum/point/p = beam_segments[1]
+ var/datum/point/beam_point = beam_segments[1]
var/atom/movable/thing = new muzzle_type
- p.move_atom_to_src(thing)
+ beam_point.move_atom_to_src(thing)
var/matrix/matrix = new
matrix.Turn(original_angle)
thing.transform = matrix
@@ -1101,11 +1076,11 @@
thing.set_light(muzzle_flash_range, muzzle_flash_intensity, muzzle_flash_color_override? muzzle_flash_color_override : color)
QDEL_IN(thing, duration)
if(impacting && impact_type && duration > 0)
- var/datum/point/p = beam_segments[beam_segments[beam_segments.len]]
+ var/datum/point/beam_point = beam_segments[beam_segments[beam_segments.len]]
var/atom/movable/thing = new impact_type
- p.move_atom_to_src(thing)
+ beam_point.move_atom_to_src(thing)
var/matrix/matrix = new
- matrix.Turn(Angle)
+ matrix.Turn(angle)
thing.transform = matrix
thing.color = color
thing.set_light(impact_light_range, impact_light_intensity, impact_light_color_override? impact_light_color_override : color)
@@ -1151,7 +1126,7 @@
firer = hit_atom
yo = new_y - current_tile.y
xo = new_x - current_tile.x
- var/new_angle_s = Angle + rand(120,240)
+ var/new_angle_s = angle + rand(120,240)
while(new_angle_s > 180) // Translate to regular projectile degrees
new_angle_s -= 360
set_angle(new_angle_s)
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index d36b66eac7ffe..355221eab8620 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -197,7 +197,7 @@
wound_bonus = -40
bare_wound_bonus = 70
-/obj/projectile/beam/emitter/singularity_pull()
+/obj/projectile/beam/emitter/singularity_pull(atom/singularity, current_size)
return //don't want the emitters to miss
/obj/projectile/beam/emitter/hitscan
diff --git a/code/modules/projectiles/projectile/bullets/_incendiary.dm b/code/modules/projectiles/projectile/bullets/_incendiary.dm
index e151afa294d50..2e526adb05311 100644
--- a/code/modules/projectiles/projectile/bullets/_incendiary.dm
+++ b/code/modules/projectiles/projectile/bullets/_incendiary.dm
@@ -69,7 +69,7 @@
var/turf/current_turf = get_turf(src)
if(!current_turf)
return
- var/turf/throw_at_turf = get_turf_in_angle(Angle, current_turf, 7)
+ var/turf/throw_at_turf = get_turf_in_angle(angle, current_turf, 7)
var/thrown_items = 0
for(var/iter in current_turf.contents)
diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm
index 2a80c366f0346..4caec924625e1 100644
--- a/code/modules/projectiles/projectile/bullets/rifle.dm
+++ b/code/modules/projectiles/projectile/bullets/rifle.dm
@@ -144,6 +144,7 @@
speed = 0.6
projectile_piercing = PASSMOB|PASSVEHICLE
projectile_phasing = ~(PASSMOB|PASSVEHICLE)
+ max_pierces = 3
phasing_ignore_direct_target = TRUE
dismemberment = 0 //goes through clean.
damage_type = BRUTE
@@ -155,7 +156,7 @@
embed_falloff_tile = -3
accurate_range = 205 //15 tiles before falloff starts to kick in
-/obj/projectile/bullet/rebar/hydrogen/Impact(atom/A)
+/obj/projectile/bullet/rebar/hydrogen/impact(atom/A)
. = ..()
def_zone = ran_zone(def_zone, clamp(205-(7*get_dist(get_turf(A), starting)), 5, 100))
@@ -167,11 +168,6 @@
return BULLET_ACT_FORCE_PIERCE
return ..()
-/obj/projectile/bullet/rebar/hydrogen/process_hit(turf/T, atom/target, atom/bumped, hit_something)
- . = ..()
- if(pierces >= 3)
- qdel(src)
-
/obj/projectile/bullet/rebar/healium
name = "healium bolt"
icon_state = "rebar_healium"
diff --git a/code/modules/projectiles/projectile/bullets/special.dm b/code/modules/projectiles/projectile/bullets/special.dm
index 34f6c1e07187c..c1299b3bed0f0 100644
--- a/code/modules/projectiles/projectile/bullets/special.dm
+++ b/code/modules/projectiles/projectile/bullets/special.dm
@@ -73,7 +73,7 @@
return ..()
coin_check.check_splitshot(firer, src)
- Impact(coin_check)
+ impact(coin_check)
/// Marksman Coin
/obj/projectile/bullet/coin
diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm
index ae05a9eb85d7e..db3805c6ba87e 100644
--- a/code/modules/projectiles/projectile/energy/net_snare.dm
+++ b/code/modules/projectiles/projectile/energy/net_snare.dm
@@ -52,7 +52,7 @@
/obj/effect/nettingportal/singularity_act()
return
-/obj/effect/nettingportal/singularity_pull()
+/obj/effect/nettingportal/singularity_pull(atom/singularity, current_size)
return
/obj/item/dragnet_beacon
diff --git a/code/modules/projectiles/projectile/energy/thermal.dm b/code/modules/projectiles/projectile/energy/thermal.dm
index 7b1319e117a9e..dbe78c70f5a2b 100644
--- a/code/modules/projectiles/projectile/energy/thermal.dm
+++ b/code/modules/projectiles/projectile/energy/thermal.dm
@@ -15,6 +15,9 @@
if(!ishuman(target))
return
+ if(HAS_TRAIT(target, TRAIT_RESISTCOLD))
+ return
+
var/mob/living/carbon/cold_target = target
var/how_cold_is_target = cold_target.bodytemperature
var/danger_zone = cold_target.dna.species.bodytemp_cold_damage_limit - 150
@@ -40,6 +43,9 @@
if(!ishuman(target))
return
+ if(HAS_TRAIT(target, TRAIT_RESISTHEAT))
+ return
+
var/mob/living/carbon/hot_target = target
var/how_hot_is_target = hot_target.bodytemperature
var/danger_zone = hot_target.dna.species.bodytemp_heat_damage_limit + 300
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 44404c15f14a6..5c050bdebb6c2 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -287,7 +287,7 @@
/obj/projectile/magic/flying/on_hit(mob/living/target, blocked = 0, pierce_hit)
. = ..()
if(isliving(target))
- var/atom/throw_target = get_edge_target_turf(target, angle2dir(Angle))
+ var/atom/throw_target = get_edge_target_turf(target, angle2dir(angle))
target.throw_at(throw_target, 200, 4)
/obj/projectile/magic/bounty
@@ -376,13 +376,9 @@
return
if(chosen_one)
to_chat(target, span_boldnotice("You have been noticed by a ghost and it has possessed you!"))
- var/oldkey = target.key
- target.ghostize(FALSE)
+ var/mob/dead/observer/ghosted_target = target.ghostize(FALSE)
target.key = chosen_one.key
- trauma.friend.key = oldkey
- trauma.friend.reset_perspective(null)
- trauma.friend.Show()
- trauma.friend_initialized = TRUE
+ trauma.add_friend(ghosted_target)
else
to_chat(target, span_notice("Your mind has managed to go unnoticed in the spirit world."))
qdel(trauma)
diff --git a/code/modules/reagents/chemistry/holder/holder.dm b/code/modules/reagents/chemistry/holder/holder.dm
index 593bc6d471092..4315ea63bd90a 100644
--- a/code/modules/reagents/chemistry/holder/holder.dm
+++ b/code/modules/reagents/chemistry/holder/holder.dm
@@ -257,15 +257,15 @@
if(!include_subtypes)
break
- //inform others about our reagents being removed
- for(var/datum/reagent/removed_reagent as anything in removed_reagents)
- SEND_SIGNAL(src, COMSIG_REAGENTS_REM_REAGENT, removed_reagent, removed_reagents[removed_reagent])
-
//update the holder & handle reactions
update_total()
if(!safety)
handle_reactions()
+ //inform others about our reagents being removed
+ for(var/datum/reagent/removed_reagent as anything in removed_reagents)
+ SEND_SIGNAL(src, COMSIG_REAGENTS_REM_REAGENT, removed_reagent, removed_reagents[removed_reagent])
+
return round(total_removed_amount, CHEMICAL_VOLUME_ROUNDING)
/**
@@ -430,7 +430,7 @@
else
if(!ignore_stomach && (methods & INGEST) && iscarbon(target))
var/mob/living/carbon/eater = target
- var/obj/item/organ/internal/stomach/belly = eater.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/belly = eater.get_organ_slot(ORGAN_SLOT_STOMACH)
if(!belly)
var/expel_amount = round(amount, CHEMICAL_QUANTISATION_LEVEL)
if(expel_amount > 0 )
@@ -779,7 +779,7 @@
*
* Arguments
* - Atom/target: What mob/turf/object is being exposed to reagents? This is your reaction target.
- * - Methods: What reaction type is the reagent itself going to call on the reaction target? Types are TOUCH, INGEST, VAPOR, PATCH, and INJECT.
+ * - Methods: What reaction type is the reagent itself going to call on the reaction target? Types are TOUCH, INGEST, VAPOR, PATCH, INJECT and INHALE.
* - Volume_modifier: What is the reagent volume multiplied by when exposed? Note that this is called on the volume of EVERY reagent in the base body, so factor in your Maximum_Volume if necessary!
* - Show_message: Whether to display anything to mobs when they are exposed.
* - list/datum/reagent/r_to_expose: list of reagents to expose. if null will expose the reagents present in this holder instead
diff --git a/code/modules/reagents/chemistry/holder/mob_life.dm b/code/modules/reagents/chemistry/holder/mob_life.dm
index 785b6261307db..fe20064fe9db7 100644
--- a/code/modules/reagents/chemistry/holder/mob_life.dm
+++ b/code/modules/reagents/chemistry/holder/mob_life.dm
@@ -19,8 +19,8 @@
expose_temperature(owner.bodytemperature, 0.25)
var/need_mob_update = FALSE
- var/obj/item/organ/internal/stomach/belly = owner.get_organ_slot(ORGAN_SLOT_STOMACH)
- var/obj/item/organ/internal/liver/liver = owner.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/stomach/belly = owner.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/liver/liver = owner.get_organ_slot(ORGAN_SLOT_LIVER)
var/liver_tolerance = 0
var/liver_damage = 0
var/provide_pain_message
diff --git a/code/modules/reagents/chemistry/holder/properties.dm b/code/modules/reagents/chemistry/holder/properties.dm
index b949866a6d447..a68404c9fc7a4 100644
--- a/code/modules/reagents/chemistry/holder/properties.dm
+++ b/code/modules/reagents/chemistry/holder/properties.dm
@@ -161,35 +161,4 @@
* * minimum_percent - the lower the minimum percent, the more sensitive the message is.
*/
/datum/reagents/proc/generate_taste_message(mob/living/taster, minimum_percent)
- var/list/out = list()
- var/list/tastes = list() //descriptor = strength
- if(minimum_percent <= 100)
- for(var/datum/reagent/reagent as anything in reagent_list)
- if(!reagent.taste_mult)
- continue
-
- var/list/taste_data = reagent.get_taste_description(taster)
- for(var/taste in taste_data)
- if(taste in tastes)
- tastes[taste] += taste_data[taste] * reagent.volume * reagent.taste_mult
- else
- tastes[taste] = taste_data[taste] * reagent.volume * reagent.taste_mult
- //deal with percentages
- // TODO it would be great if we could sort these from strong to weak
- var/total_taste = counterlist_sum(tastes)
- if(total_taste > 0)
- for(var/taste_desc in tastes)
- var/percent = tastes[taste_desc]/total_taste * 100
- if(percent < minimum_percent)
- continue
- var/intensity_desc = "a hint of"
- if(percent > minimum_percent * 2 || percent == 100)
- intensity_desc = ""
- else if(percent > minimum_percent * 3)
- intensity_desc = "the strong flavor of"
- if(intensity_desc != "")
- out += "[intensity_desc] [taste_desc]"
- else
- out += "[taste_desc]"
-
- return english_list(out, "something indescribable")
+ return generate_reagents_taste_message(reagent_list, taster, minimum_percent)
diff --git a/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm b/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm
index e43d32c661bd9..2e6a916f98473 100644
--- a/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm
@@ -214,13 +214,13 @@
var/result = 0
for(var/datum/reagent/reagent as anything in beaker1?.reagents.reagent_list)
var/datum/reagent/target = reagent
- if(!istype(reagent, /datum/reagent/inverse) && (reagent.inverse_chem_val > reagent.purity && reagent.inverse_chem))
+ if(reagent.inverse_chem && reagent.inverse_chem_val > reagent.purity)
target = GLOB.chemical_reagents_list[reagent.inverse_chem]
if(!result)
result = target.mass
else
- result = smallest ? min(result, reagent.mass) : max(result, reagent.mass)
+ result = smallest ? min(result, target.mass) : max(result, target.mass)
return smallest ? FLOOR(result, 50) : CEILING(result, 50)
/*
@@ -258,17 +258,21 @@
return
for(var/datum/reagent/reagent as anything in beaker1.reagents.reagent_list)
- //we don't deal chems that are so impure that they are about to become inverted
- if(reagent.inverse_chem_val > reagent.purity && reagent.inverse_chem)
- continue
+ var/datum/reagent/target = reagent
+ var/inverse = FALSE
+
+ //inverted chems are dealt with diffrently
+ if(reagent.inverse_chem && reagent.inverse_chem_val > reagent.purity)
+ target = GLOB.chemical_reagents_list[reagent.inverse_chem]
+ inverse = TRUE
//out of our selected range
- if(reagent.mass < lower_mass_range || reagent.mass > upper_mass_range)
+ if(target.mass < lower_mass_range || target.mass > upper_mass_range)
continue
//already at max purity
- if((initial(reagent.purity) - reagent.purity) <= 0)
+ if(!inverse && (initial(reagent.purity) - reagent.purity) <= 0)
continue
///Roughly 10 - 30s?
- delay_time += (((reagent.mass * reagent.volume) + (reagent.mass * reagent.get_inverse_purity() * 0.1)) * 0.0035) + 10
+ delay_time += (((target.mass * reagent.volume) + (target.mass * reagent.get_inverse_purity() * 0.1)) * 0.0035) + 10
delay_time *= cms_coefficient
@@ -295,7 +299,7 @@
beaker1Data["maxVolume"] = beaker_1_reagents.maximum_volume
var/list/beakerContents = list()
for(var/datum/reagent/reagent as anything in beaker_1_reagents.reagent_list)
- var/log = ""
+ var/log = "Ready"
var/datum/reagent/target = reagent
var/purity = target.purity
var/is_inverse = FALSE
@@ -303,14 +307,11 @@
if(reagent.inverse_chem_val > reagent.purity && reagent.inverse_chem)
purity = target.get_inverse_purity()
target = GLOB.chemical_reagents_list[reagent.inverse_chem]
- log = "Too impure to use" //we don't bother about impure chems
is_inverse = TRUE
else
var/initial_purity = initial(reagent.purity)
if((initial_purity - reagent.purity) <= 0) //already at max purity
log = "Cannot purify above [round(initial_purity * 100)]%"
- else
- log = "Ready"
beakerContents += list(list(
"name" = target.name,
@@ -453,19 +454,31 @@
progress_time = 0
log.Cut()
+ var/datum/reagents/input_reagents = beaker1.reagents
+ var/datum/reagents/output_reagents = beaker2.reagents
for(var/datum/reagent/reagent as anything in beaker1.reagents.reagent_list)
- //we don't deal chems that are so impure that they are about to become inverted
- if(reagent.inverse_chem_val > reagent.purity && reagent.inverse_chem)
+ var/product_vol = reagent.volume
+
+ //purify inverted chems to their inverted purity
+ if(reagent.inverse_chem && reagent.inverse_chem_val > reagent.purity)
+ var/datum/reagent/inverse_reagent = GLOB.chemical_reagents_list[reagent.inverse_chem]
+ if(inverse_reagent.mass < lower_mass_range || inverse_reagent.mass > upper_mass_range)
+ continue
+ input_reagents.remove_reagent(reagent.type, product_vol)
+ output_reagents.add_reagent(reagent.inverse_chem, product_vol, reagtemp = input_reagents.chem_temp, added_purity = reagent.get_inverse_purity(), added_ph = reagent.ph)
+ log[reagent.type] = "Purified to [reagent.get_inverse_purity() * 100]%"
continue
+
//out of our selected range
if(reagent.mass < lower_mass_range || reagent.mass > upper_mass_range)
continue
+
//already at max purity
var/delta_purity = initial(reagent.purity) - reagent.purity
if(delta_purity <= 0)
continue
+
//add the purified reagent. More impure reagents will yield smaller amounts
- var/product_vol = reagent.volume
beaker1.reagents.remove_reagent(reagent.type, product_vol)
beaker2.reagents.add_reagent(reagent.type, product_vol * (1 - delta_purity), reagtemp = beaker1.reagents.chem_temp, added_purity = initial(reagent.purity), added_ph = reagent.ph)
log[reagent.type] = "Purified to [initial(reagent.purity) * 100]%"
diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm
index 87c509bd0a1ed..4ed21b0e29871 100644
--- a/code/modules/reagents/chemistry/reagents.dm
+++ b/code/modules/reagents/chemistry/reagents.dm
@@ -279,7 +279,7 @@ Primarily used in reagents/reaction_agents
*/
/datum/reagent/proc/get_inverse_purity(purity)
if(!inverse_chem || !inverse_chem_val)
- return
+ return 0
if(!purity)
purity = src.purity
return min(1-inverse_chem_val + purity + 0.01, 1) //Gives inverse reactions a 1% purity threshold for being 100% pure to appease players with OCD.
diff --git a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
index 36081a7aba79f..1f0df3ca51a89 100644
--- a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
@@ -158,7 +158,7 @@
return UPDATE_MOB_HEALTH
/datum/reagent/medicine/c2/probital/on_transfer(atom/A, methods=INGEST, trans_volume)
- if(!(methods & INGEST) || (!iscarbon(A) && !istype(A, /obj/item/organ/internal/stomach)) )
+ if(!(methods & INGEST) || (!iscarbon(A) && !istype(A, /obj/item/organ/stomach)) )
return
A.reagents.remove_reagent(/datum/reagent/medicine/c2/probital, trans_volume * 0.05)
@@ -422,7 +422,7 @@
var/mob/living/carbon/C = A
if(trans_volume >= 0.4) //prevents cheesing with ultralow doses.
C.adjustToxLoss((-3 * min(2, trans_volume) * REM) * normalise_creation_purity(), required_biotype = affected_biotype) //This is to promote iv pole use for that chemotherapy feel.
- var/obj/item/organ/internal/liver/L = C.organs_slot[ORGAN_SLOT_LIVER]
+ var/obj/item/organ/liver/L = C.organs_slot[ORGAN_SLOT_LIVER]
if(!L || L.organ_flags & ORGAN_FAILING)
return
conversion_amount = (trans_volume * (min(100 -C.get_organ_loss(ORGAN_SLOT_LIVER), 80) / 100)*normalise_creation_purity()) //the more damaged the liver the worse we metabolize.
diff --git a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
index fa869cb267a57..58bacc57bcfd3 100644
--- a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
@@ -75,7 +75,7 @@
// Volume, power, and server alcohol rate effect how quickly one gets drunk
drinker.adjust_drunk_effect(sqrt(volume) * booze_power * ALCOHOL_RATE * REM * seconds_per_tick)
if(boozepwr > 0)
- var/obj/item/organ/internal/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
var/heavy_drinker_multiplier = (HAS_TRAIT(drinker, TRAIT_HEAVY_DRINKER) ? 0.5 : 1)
if (istype(liver))
if(liver.apply_organ_damage(((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * liver.alcohol_tolerance * heavy_drinker_multiplier * seconds_per_tick, 0))/150)))
@@ -97,19 +97,14 @@
/datum/reagent/consumable/ethanol/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume)//Splashing people with ethanol isn't quite as good as fuel.
. = ..()
- if(!(methods & (TOUCH|VAPOR|PATCH)))
- return
-
- exposed_mob.adjust_fire_stacks(reac_volume / 15)
-
- if(!iscarbon(exposed_mob))
- return
-
- var/mob/living/carbon/exposed_carbon = exposed_mob
- var/power_multiplier = boozepwr / 65 // Weak alcohol has less sterilizing power
+ if(methods & INGEST)
+ exposed_mob.check_allergic_reaction(ALCOHOL, chance = reac_volume * 5, histamine_add = min(10, reac_volume))
- for(var/datum/surgery/surgery as anything in exposed_carbon.surgeries)
- surgery.speed_modifier = max(0.1 * power_multiplier, surgery.speed_modifier)
+ if(methods & (TOUCH|VAPOR|PATCH))
+ exposed_mob.adjust_fire_stacks(reac_volume / 15)
+ var/power_multiplier = boozepwr / 65 // Weak alcohol has less sterilizing power
+ for(var/datum/surgery/surgery as anything in exposed_mob.surgeries)
+ surgery.speed_modifier = max(0.1 * power_multiplier, surgery.speed_modifier)
/datum/reagent/consumable/ethanol/beer
name = "Beer"
@@ -260,7 +255,7 @@
to_chat(drinker, span_notice("[pick("You have a really bad headache.", "Your eyes hurt.", "You find it hard to stay still.", "You feel your heart practically beating out of your chest.")]"))
if(SPT_PROB(2.5, seconds_per_tick) && iscarbon(drinker))
- var/obj/item/organ/internal/eyes/eyes = drinker.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = drinker.get_organ_slot(ORGAN_SLOT_EYES)
if(eyes && IS_ORGANIC_ORGAN(eyes)) // doesn't affect robotic eyes
if(drinker.is_blind())
eyes.Remove(drinker)
@@ -667,7 +662,7 @@
/datum/reagent/consumable/ethanol/screwdrivercocktail/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired)
. = ..()
- var/obj/item/organ/internal/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
if(HAS_TRAIT(liver, TRAIT_ENGINEER_METABOLISM))
ADD_TRAIT(drinker, TRAIT_HALT_RADIATION_EFFECTS, "[type]")
if (HAS_TRAIT(drinker, TRAIT_IRRADIATED))
@@ -785,7 +780,7 @@
if(HAS_TRAIT(drinker, TRAIT_ALCOHOL_TOLERANCE))
metabolization_rate = 0.8
// if you don't have a liver, or your liver isn't an officer's liver
- var/obj/item/organ/internal/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
if(!liver || !HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM))
beepsky_hallucination = new()
drinker.gain_trauma(beepsky_hallucination, TRAUMA_RESILIENCE_ABSOLUTE)
@@ -793,7 +788,7 @@
/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired)
. = ..()
drinker.set_jitter_if_lower(4 SECONDS)
- var/obj/item/organ/internal/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
// if you have a liver and that liver is an officer's liver
if(liver && HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM))
if(drinker.adjustStaminaLoss(-10 * REM * seconds_per_tick, updating_stamina = FALSE, required_biotype = affected_biotype))
@@ -810,7 +805,7 @@
/datum/reagent/consumable/ethanol/beepsky_smash/overdose_start(mob/living/carbon/drinker)
. = ..()
- var/obj/item/organ/internal/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
// if you don't have a liver, or your liver isn't an officer's liver
if(!liver || !HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM))
drinker.gain_trauma(/datum/brain_trauma/mild/phobia/security, TRAUMA_RESILIENCE_BASIC)
@@ -1301,7 +1296,7 @@
/datum/reagent/consumable/ethanol/bananahonk/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired)
. = ..()
- var/obj/item/organ/internal/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
if((liver && HAS_TRAIT(liver, TRAIT_COMEDY_METABOLISM)) || is_simian(drinker))
if(drinker.heal_bodypart_damage(brute = 1 * REM * seconds_per_tick, burn = 1 * REM * seconds_per_tick, updating_health = FALSE))
return UPDATE_MOB_HEALTH
@@ -1611,7 +1606,7 @@
/datum/reagent/consumable/ethanol/quadruple_sec/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired)
. = ..()
//Securidrink in line with the Screwdriver for engineers or Nothing for mimes
- var/obj/item/organ/internal/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM))
if(drinker.heal_bodypart_damage(brute = 1 * REM * seconds_per_tick, burn = 1 * REM * seconds_per_tick, updating_health = FALSE))
return UPDATE_MOB_HEALTH
@@ -1628,7 +1623,7 @@
/datum/reagent/consumable/ethanol/quintuple_sec/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired)
. = ..()
//Securidrink in line with the Screwdriver for engineers or Nothing for mimes but STRONG..
- var/obj/item/organ/internal/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM))
var/need_mob_update
need_mob_update = drinker.heal_bodypart_damage(2 * REM * seconds_per_tick, 2 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype)
@@ -2658,9 +2653,9 @@
return
var/mob/living/carbon/exposed_carbon = exposed_mob
- var/obj/item/organ/internal/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH)
if(istype(stomach))
- stomach.adjust_charge(reac_volume * 0.003 * ETHEREAL_CHARGE_NORMAL)
+ stomach.adjust_charge(reac_volume * 0.02 * ETHEREAL_CHARGE_NORMAL)
/datum/reagent/consumable/ethanol/telepole
name = "Telepole"
@@ -2678,9 +2673,9 @@
return
var/mob/living/carbon/exposed_carbon = exposed_mob
- var/obj/item/organ/internal/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH)
if(istype(stomach))
- stomach.adjust_charge(reac_volume * 0.002 * ETHEREAL_CHARGE_NORMAL)
+ stomach.adjust_charge(reac_volume * 0.05 * ETHEREAL_CHARGE_NORMAL)
/datum/reagent/consumable/ethanol/pod_tesla
name = "Pod Tesla"
@@ -2705,9 +2700,9 @@
return
var/mob/living/carbon/exposed_carbon = exposed_mob
- var/obj/item/organ/internal/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH)
if(istype(stomach))
- stomach.adjust_charge(reac_volume * 0.005 * ETHEREAL_CHARGE_NORMAL)
+ stomach.adjust_charge(reac_volume * 0.1 * ETHEREAL_CHARGE_NORMAL)
// Welcome to the Blue Room Bar and Grill, home to Mars' finest cocktails
/datum/reagent/consumable/ethanol/rice_beer
diff --git a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm
index f081830f74d91..85ba5e6c36370 100644
--- a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm
@@ -113,7 +113,7 @@
/datum/reagent/consumable/banana/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
- var/obj/item/organ/internal/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
if((liver && HAS_TRAIT(liver, TRAIT_COMEDY_METABOLISM)) || is_simian(affected_mob))
if(affected_mob.heal_bodypart_damage(brute = 1 * REM * seconds_per_tick, burn = 1 * REM * seconds_per_tick, updating_health = FALSE))
return UPDATE_MOB_HEALTH
@@ -181,7 +181,7 @@
/datum/reagent/consumable/pickle/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
- var/obj/item/organ/internal/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
if((liver && HAS_TRAIT(liver, TRAIT_CORONER_METABOLISM)))
if(affected_mob.adjustToxLoss(-1 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype))
return UPDATE_MOB_HEALTH
@@ -226,6 +226,12 @@
holder.remove_reagent(/datum/reagent/consumable/capsaicin, seconds_per_tick)
return ..() || .
+/datum/reagent/milk/used_on_fish(obj/item/fish/fish)
+ if(HAS_TRAIT(fish, TRAIT_FISH_MADE_OF_BONE))
+ fish.adjust_health(fish.health + initial(fish.health) * max(fish.get_hunger() * 0.5, 0.12))
+ fish.sate_hunger()
+ return TRUE
+
/datum/reagent/consumable/soymilk
name = "Soy Milk"
description = "An opaque white liquid made from soybeans."
@@ -470,7 +476,7 @@
affected_mob.AddComponent(/datum/component/irradiated)
/datum/reagent/consumable/rootbeer
- name = "root beer"
+ name = "Root Beer"
description = "A delightfully bubbly root beer, filled with so much sugar that it can actually speed up the user's trigger finger."
color = "#181008" // rgb: 24, 16, 8
quality = DRINK_VERYGOOD
@@ -513,7 +519,7 @@
/datum/reagent/consumable/grey_bull/on_mob_metabolize(mob/living/carbon/affected_atom)
. = ..()
- var/obj/item/organ/internal/liver/liver = affected_atom.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = affected_atom.get_organ_slot(ORGAN_SLOT_LIVER)
if(HAS_TRAIT(liver, TRAIT_MAINTENANCE_METABOLISM))
affected_atom.add_mood_event("maintenance_fun", /datum/mood_event/maintenance_high)
metabolization_rate *= 0.8
@@ -777,7 +783,7 @@
need_mob_update += affected_mob.adjustToxLoss(-0.5 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)
need_mob_update += affected_mob.adjustOxyLoss(-0.5 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type)
if(affected_mob.nutrition && (affected_mob.nutrition - 2 > 0))
- var/obj/item/organ/internal/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
if(!(HAS_TRAIT(liver, TRAIT_MEDICAL_METABOLISM)))
// Drains the nutrition of the holder. Not medical doctors though, since it's the Doctor's Delight!
affected_mob.adjust_nutrition(-2 * REM * seconds_per_tick)
@@ -1291,6 +1297,6 @@
return
var/mob/living/carbon/exposed_carbon = exposed_mob
- var/obj/item/organ/internal/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH)
if(istype(stomach))
- stomach.adjust_charge(reac_volume * 0.003 * ETHEREAL_CHARGE_NORMAL)
+ stomach.adjust_charge(reac_volume * 0.02 * ETHEREAL_CHARGE_NORMAL)
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index 904d09db7334b..61836a49163e0 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -333,7 +333,7 @@
/datum/reagent/drug/pumpup/on_mob_metabolize(mob/living/carbon/affected_mob)
. = ..()
- var/obj/item/organ/internal/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_MAINTENANCE_METABOLISM))
affected_mob.add_mood_event("maintenance_fun", /datum/mood_event/maintenance_high)
metabolization_rate *= 0.8
@@ -380,7 +380,7 @@
return
var/mob/living/carbon/carbon_mob = affected_mob
- var/obj/item/organ/internal/liver/liver = carbon_mob.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = carbon_mob.get_organ_slot(ORGAN_SLOT_LIVER)
if(HAS_TRAIT(liver, TRAIT_MAINTENANCE_METABOLISM))
carbon_mob.add_mood_event("maintenance_fun", /datum/mood_event/maintenance_high)
metabolization_rate *= 0.8
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 0ecaab5d48695..b33153e9480ff 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -70,6 +70,9 @@
color = "#664330" // rgb: 102, 67, 48
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
+ /// Whether this reagent should get the tastes of food it's in applied onto it
+ var/carry_food_tastes = TRUE
+
var/brute_heal = 1
var/burn_heal = 0
@@ -121,11 +124,14 @@
data = taste_amounts
/datum/reagent/consumable/nutriment/get_taste_description(mob/living/taster)
- return data
+ if(length(data))
+ return data
+ return ..()
/datum/reagent/consumable/nutriment/vitamin
name = "Vitamin"
description = "All the best vitamins, minerals, and carbohydrates the body needs in pure form."
+ taste_description = "bitterness"
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
brute_heal = 1
@@ -140,6 +146,7 @@
/datum/reagent/consumable/nutriment/protein
name = "Protein"
description = "A natural polyamide made up of amino acids. An essential constituent of mosts known forms of life."
+ taste_description = "chalk"
brute_heal = 0.8 //Rewards the player for eating a balanced diet.
nutriment_factor = 9 //45% as calorie dense as oil.
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
@@ -212,6 +219,7 @@
color = "#EADD6B" //RGB: 234, 221, 107 (based off of canola oil)
taste_mult = 0.8
taste_description = "oil"
+ carry_food_tastes = FALSE
nutriment_factor = 7 //Not very healthy on its own
metabolization_rate = 10 * REAGENTS_METABOLISM
penetrates_skin = NONE
@@ -239,9 +247,15 @@
taste_description = "rich earthy pungent"
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
+/datum/reagent/consumable/nutriment/organ_tissue/stomach_lining
+ name = "Stomach Lining"
+ description = "Natural tissue that keeps your stomach safe."
+ carry_food_tastes = FALSE // Don't want stomachs to leech the flavours of what they eat
+
/datum/reagent/consumable/nutriment/cloth_fibers
name = "Cloth Fibers"
description = "It's not actually a form of nutriment but it does keep Mothpeople going for a short while..."
+ taste_description = "cloth"
nutriment_factor = 30
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
brute_heal = 0
@@ -266,6 +280,7 @@
/datum/reagent/consumable/nutriment/mineral
name = "Mineral Slurry"
description = "Minerals pounded into a paste, nutritious only if you too are made of rocks."
+ taste_description = "minerals"
color = COLOR_WEBSAFE_DARK_GRAY
chemical_flags = NONE
brute_heal = 0
@@ -306,6 +321,11 @@
. = ..()
affected_mob.adjust_drowsiness_up_to((5 SECONDS * REM * seconds_per_tick), 60 SECONDS)
+/datum/reagent/consumable/sugar/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume)
+ . = ..()
+ if(methods & INGEST)
+ exposed_mob.check_allergic_reaction(SUGAR, chance = reac_volume * 10, histamine_add = min(10, reac_volume * 2))
+
/datum/reagent/consumable/virus_food
name = "Virus Food"
description = "A mixture of water and milk. Virus cells can use this mixture to reproduce."
@@ -421,7 +441,7 @@
return
var/mob/living/carbon/victim = exposed_mob
- if(methods & (TOUCH|VAPOR))
+ if(methods & (TOUCH|VAPOR|INHALE))
//check for protection
//actually handle the pepperspray effects
if (!victim.is_pepper_proof()) // you need both eye and mouth protection
@@ -542,7 +562,7 @@
affected_mob.Paralyze(10)
affected_mob.set_jitter_if_lower(20 SECONDS)
else
- var/obj/item/organ/internal/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_CULINARY_METABOLISM))
if(SPT_PROB(10, seconds_per_tick)) //stays in the system much longer than sprinkles/banana juice, so heals slower to partially compensate
if(affected_mob.heal_bodypart_damage(brute = 1 * REM * seconds_per_tick, burn = 1 * REM * seconds_per_tick, updating_health = FALSE))
@@ -561,7 +581,7 @@
return
var/mob/living/carbon/victim = exposed_mob
- if(methods & (TOUCH | VAPOR))
+ if(methods & (TOUCH | VAPOR | INHALE))
var/tear_proof = victim.is_eyes_covered()
if (!tear_proof)
to_chat(exposed_mob, span_warning("Your eyes sting!"))
@@ -577,7 +597,7 @@
/datum/reagent/consumable/sprinkles/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
- var/obj/item/organ/internal/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM))
if(affected_mob.heal_bodypart_damage(brute = 1 * REM * seconds_per_tick, burn = 1 * REM * seconds_per_tick, updating_health = FALSE))
return UPDATE_MOB_HEALTH
@@ -947,11 +967,11 @@
/datum/reagent/consumable/liquidelectricity/enriched/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume) //can't be on life because of the way blood works.
. = ..()
- if(!(methods & (INGEST|INJECT|PATCH)) || !iscarbon(exposed_mob))
+ if(!(methods & (INGEST|INJECT|PATCH|INHALE)) || !iscarbon(exposed_mob))
return
var/mob/living/carbon/exposed_carbon = exposed_mob
- var/obj/item/organ/internal/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/ethereal/stomach = exposed_carbon.get_organ_slot(ORGAN_SLOT_STOMACH)
if(istype(stomach))
stomach.adjust_charge(reac_volume * 0.03 * ETHEREAL_CHARGE_NORMAL)
@@ -1012,6 +1032,11 @@
reagent_state = SOLID
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
+/datum/reagent/consumable/caramel/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume)
+ . = ..()
+ if(methods & INGEST)
+ exposed_mob.check_allergic_reaction(SUGAR, chance = reac_volume * 10, histamine_add = min(10, reac_volume * 2))
+
/datum/reagent/consumable/char
name = "Char"
description = "Essence of the grill. Has strange properties when overdosed."
diff --git a/code/modules/reagents/chemistry/reagents/impure_reagents.dm b/code/modules/reagents/chemistry/reagents/impure_reagents.dm
index 20cd80d9c5b0e..b9c0ee0522dfa 100644
--- a/code/modules/reagents/chemistry/reagents/impure_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/impure_reagents.dm
@@ -16,7 +16,7 @@
/datum/reagent/impurity/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
- var/obj/item/organ/internal/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
var/need_mob_update
if(liver)//Though, lets be safe
diff --git a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm
index 3fd9188e8d4f0..b8a2250722534 100644
--- a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm
@@ -141,21 +141,21 @@ Basically, we fill the time between now and 2s from now with hands based off the
return
RegisterSignal(consumer, COMSIG_CARBON_GAIN_ORGAN, PROC_REF(on_gained_organ))
RegisterSignal(consumer, COMSIG_CARBON_LOSE_ORGAN, PROC_REF(on_removed_organ))
- var/obj/item/organ/internal/liver/this_liver = consumer.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/this_liver = consumer.get_organ_slot(ORGAN_SLOT_LIVER)
this_liver.alcohol_tolerance *= 2
/datum/reagent/inverse/libitoil/proc/on_gained_organ(mob/prev_owner, obj/item/organ/organ)
SIGNAL_HANDLER
- if(!istype(organ, /obj/item/organ/internal/liver))
+ if(!istype(organ, /obj/item/organ/liver))
return
- var/obj/item/organ/internal/liver/this_liver = organ
+ var/obj/item/organ/liver/this_liver = organ
this_liver.alcohol_tolerance *= 2
/datum/reagent/inverse/libitoil/proc/on_removed_organ(mob/prev_owner, obj/item/organ/organ)
SIGNAL_HANDLER
- if(!istype(organ, /obj/item/organ/internal/liver))
+ if(!istype(organ, /obj/item/organ/liver))
return
- var/obj/item/organ/internal/liver/this_liver = organ
+ var/obj/item/organ/liver/this_liver = organ
this_liver.alcohol_tolerance /= 2
/datum/reagent/inverse/libitoil/on_mob_delete(mob/living/affected_mob)
@@ -163,7 +163,7 @@ Basically, we fill the time between now and 2s from now with hands based off the
var/mob/living/carbon/consumer = affected_mob
UnregisterSignal(consumer, COMSIG_CARBON_LOSE_ORGAN)
UnregisterSignal(consumer, COMSIG_CARBON_GAIN_ORGAN)
- var/obj/item/organ/internal/liver/this_liver = consumer.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/this_liver = consumer.get_organ_slot(ORGAN_SLOT_LIVER)
if(!this_liver)
return
this_liver.alcohol_tolerance /= 2
@@ -213,35 +213,6 @@ Basically, we fill the time between now and 2s from now with hands based off the
. = ..()
affected_mob.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/lenturi)
-//failed
-/datum/reagent/inverse/ichiyuri
- name = "Ichiyuri"
- description = "Prolonged exposure to this chemical can cause an overwhelming urge to itch oneself."
- reagent_state = LIQUID
- color = "#C8A5DC"
- ph = 1.7
- addiction_types = list(/datum/addiction/medicine = 2.5)
- tox_damage = 0.1
- ///Probability of scratch - increases as a function of time
- var/resetting_probability = 0
- ///Prevents message spam
- var/spammer = 0
-
-//Just the removed itching mechanism - omage to its origins.
-/datum/reagent/inverse/ichiyuri/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
- . = ..()
- if(prob(resetting_probability) && !(HAS_TRAIT(affected_mob, TRAIT_RESTRAINED) || affected_mob.incapacitated))
- . = TRUE
- if(spammer < world.time)
- to_chat(affected_mob,span_warning("You can't help but itch yourself."))
- spammer = world.time + (10 SECONDS)
- var/scab = rand(1,7)
- if(affected_mob.adjustBruteLoss(scab*REM, updating_health = FALSE))
- . = UPDATE_MOB_HEALTH
- affected_mob.bleed(scab)
- resetting_probability = 0
- resetting_probability += (5*((current_cycle-1)/10) * seconds_per_tick) // 10 iterations = >51% to itch
-
//Aiuri
//inverse
/datum/reagent/inverse/aiuri
@@ -366,19 +337,19 @@ Basically, we fill the time between now and 2s from now with hands based off the
. = ..()
RegisterSignal(affected_mob, COMSIG_CARBON_GAIN_ORGAN, PROC_REF(on_gained_organ))
RegisterSignal(affected_mob, COMSIG_CARBON_LOSE_ORGAN, PROC_REF(on_removed_organ))
- var/obj/item/organ/internal/lungs/lungs = affected_mob.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/lungs = affected_mob.get_organ_slot(ORGAN_SLOT_LUNGS)
if(!lungs)
return
apply_lung_levels(lungs)
/datum/reagent/inverse/healing/convermol/proc/on_gained_organ(mob/prev_owner, obj/item/organ/organ)
SIGNAL_HANDLER
- if(!istype(organ, /obj/item/organ/internal/lungs))
+ if(!istype(organ, /obj/item/organ/lungs))
return
- var/obj/item/organ/internal/lungs/lungs = organ
+ var/obj/item/organ/lungs/lungs = organ
apply_lung_levels(lungs)
-/datum/reagent/inverse/healing/convermol/proc/apply_lung_levels(obj/item/organ/internal/lungs/lungs)
+/datum/reagent/inverse/healing/convermol/proc/apply_lung_levels(obj/item/organ/lungs/lungs)
cached_heat_level_1 = lungs.heat_level_1_threshold
cached_heat_level_2 = lungs.heat_level_2_threshold
cached_heat_level_3 = lungs.heat_level_3_threshold
@@ -396,12 +367,12 @@ Basically, we fill the time between now and 2s from now with hands based off the
/datum/reagent/inverse/healing/convermol/proc/on_removed_organ(mob/prev_owner, obj/item/organ/organ)
SIGNAL_HANDLER
- if(!istype(organ, /obj/item/organ/internal/lungs))
+ if(!istype(organ, /obj/item/organ/lungs))
return
- var/obj/item/organ/internal/lungs/lungs = organ
+ var/obj/item/organ/lungs/lungs = organ
restore_lung_levels(lungs)
-/datum/reagent/inverse/healing/convermol/proc/restore_lung_levels(obj/item/organ/internal/lungs/lungs)
+/datum/reagent/inverse/healing/convermol/proc/restore_lung_levels(obj/item/organ/lungs/lungs)
lungs.heat_level_1_threshold = cached_heat_level_1
lungs.heat_level_2_threshold = cached_heat_level_2
lungs.heat_level_3_threshold = cached_heat_level_3
@@ -413,7 +384,7 @@ Basically, we fill the time between now and 2s from now with hands based off the
. = ..()
UnregisterSignal(affected_mob, COMSIG_CARBON_LOSE_ORGAN)
UnregisterSignal(affected_mob, COMSIG_CARBON_GAIN_ORGAN)
- var/obj/item/organ/internal/lungs/lungs = affected_mob.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/lungs = affected_mob.get_organ_slot(ORGAN_SLOT_LUNGS)
if(!lungs)
return
restore_lung_levels(lungs)
@@ -523,7 +494,7 @@ Basically, we fill the time between now and 2s from now with hands based off the
/datum/reagent/inverse/penthrite/on_mob_dead(mob/living/carbon/affected_mob, seconds_per_tick)
. = ..()
- var/obj/item/organ/internal/heart/heart = affected_mob.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/heart = affected_mob.get_organ_slot(ORGAN_SLOT_HEART)
if(!heart || heart.organ_flags & ORGAN_FAILING)
return
metabolization_rate = 0.2 * REM
@@ -557,7 +528,7 @@ Basically, we fill the time between now and 2s from now with hands based off the
affected_mob.add_movespeed_modifier(/datum/movespeed_modifier/reagent/nooartrium)
if(affected_mob.health < HEALTH_THRESHOLD_FULLCRIT)
affected_mob.add_actionspeed_modifier(/datum/actionspeed_modifier/nooartrium)
- var/obj/item/organ/internal/heart/heart = affected_mob.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/heart = affected_mob.get_organ_slot(ORGAN_SLOT_HEART)
if(!heart || heart.organ_flags & ORGAN_FAILING)
remove_buffs(affected_mob)
if(need_mob_update)
@@ -566,7 +537,7 @@ Basically, we fill the time between now and 2s from now with hands based off the
/datum/reagent/inverse/penthrite/on_mob_delete(mob/living/carbon/affected_mob)
. = ..()
remove_buffs(affected_mob)
- var/obj/item/organ/internal/heart/heart = affected_mob.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/heart = affected_mob.get_organ_slot(ORGAN_SLOT_HEART)
if(affected_mob.health < -500 || heart.organ_flags & ORGAN_FAILING)//Honestly commendable if you get -500
explosion(affected_mob, light_impact_range = 1, explosion_cause = src)
qdel(heart)
@@ -576,7 +547,7 @@ Basically, we fill the time between now and 2s from now with hands based off the
. = ..()
if(!back_from_the_dead)
return ..()
- var/obj/item/organ/internal/heart/heart = affected_mob.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/heart = affected_mob.get_organ_slot(ORGAN_SLOT_HEART)
if(!heart) //No heart? No life!
REMOVE_TRAIT(affected_mob, TRAIT_NODEATH, type)
affected_mob.stat = DEAD
@@ -661,7 +632,7 @@ Basically, we fill the time between now and 2s from now with hands based off the
/datum/brain_trauma/special/honorbound, // Designed to be chaplain exclusive
)
traumalist -= forbiddentraumas
- var/obj/item/organ/internal/brain/brain = affected_mob.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/brain = affected_mob.get_organ_slot(ORGAN_SLOT_BRAIN)
traumalist = shuffle(traumalist)
for(var/trauma in traumalist)
if(brain.brain_gain_trauma(trauma, TRAUMA_RESILIENCE_MAGIC))
@@ -693,7 +664,7 @@ Basically, we fill the time between now and 2s from now with hands based off the
if(!iscarbon(affected_mob))
return
var/mob/living/carbon/carbon_mob = affected_mob
- var/obj/item/organ/internal/heart/affected_heart = carbon_mob.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/affected_heart = carbon_mob.get_organ_slot(ORGAN_SLOT_HEART)
if(isnull(affected_heart))
return
carbon_mob.AddComponent(/datum/component/manual_heart)
diff --git a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_toxin_reagents.dm
index 0872fa6658815..4e904dcf684d3 100644
--- a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_toxin_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_toxin_reagents.dm
@@ -29,7 +29,7 @@
/datum/reagent/impurity/methanol/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
- var/obj/item/organ/internal/eyes/eyes = affected_mob.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = affected_mob.get_organ_slot(ORGAN_SLOT_EYES)
if(eyes?.apply_organ_damage(0.5 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags))
return UPDATE_MOB_HEALTH
@@ -59,7 +59,7 @@
/datum/reagent/impurity/rosenol/on_mob_life(mob/living/carbon/owner, seconds_per_tick)
. = ..()
- var/obj/item/organ/internal/tongue/tongue = owner.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = owner.get_organ_slot(ORGAN_SLOT_TONGUE)
if(!tongue)
return
if(SPT_PROB(4.0, seconds_per_tick))
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index 64626883b3c47..d6fef868831d7 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -355,7 +355,7 @@
if(!iscarbon(exposed_mob) || (exposed_mob.stat == DEAD))
return
- if(methods & (INGEST|VAPOR|INJECT))
+ if(methods & (INGEST|VAPOR|INJECT|INHALE))
exposed_mob.adjust_nutrition(-5)
if(show_message)
to_chat(exposed_mob, span_warning("Your stomach feels empty and cramps!"))
@@ -559,7 +559,7 @@
var/need_mob_update
need_mob_update = affected_mob.adjustOxyLoss(-3 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type)
if(affected_mob.losebreath >= 4)
- var/obj/item/organ/internal/lungs/affected_lungs = affected_mob.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/affected_lungs = affected_mob.get_organ_slot(ORGAN_SLOT_LUNGS)
var/our_respiration_type = affected_lungs ? affected_lungs.respiration_type : affected_mob.mob_respiration_type // use lungs' respiration type or mob_respiration_type if no lungs
if(our_respiration_type & affected_respiration_type)
affected_mob.losebreath -= 2 * REM * seconds_per_tick
@@ -698,33 +698,33 @@
return
RegisterSignal(affected_mob, COMSIG_CARBON_GAIN_ORGAN, PROC_REF(on_gained_organ))
RegisterSignal(affected_mob, COMSIG_CARBON_LOSE_ORGAN, PROC_REF(on_removed_organ))
- var/obj/item/organ/internal/eyes/eyes = affected_mob.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = affected_mob.get_organ_slot(ORGAN_SLOT_EYES)
if(!eyes)
return
improve_eyesight(affected_mob, eyes)
-/datum/reagent/medicine/oculine/proc/improve_eyesight(mob/living/carbon/affected_mob, obj/item/organ/internal/eyes/eyes)
+/datum/reagent/medicine/oculine/proc/improve_eyesight(mob/living/carbon/affected_mob, obj/item/organ/eyes/eyes)
delta_light = creation_purity*10
eyes.lighting_cutoff += delta_light
affected_mob.update_sight()
-/datum/reagent/medicine/oculine/proc/restore_eyesight(mob/living/carbon/affected_mob, obj/item/organ/internal/eyes/eyes)
+/datum/reagent/medicine/oculine/proc/restore_eyesight(mob/living/carbon/affected_mob, obj/item/organ/eyes/eyes)
eyes.lighting_cutoff -= delta_light
affected_mob.update_sight()
/datum/reagent/medicine/oculine/proc/on_gained_organ(mob/affected_mob, obj/item/organ/organ)
SIGNAL_HANDLER
- if(!istype(organ, /obj/item/organ/internal/eyes))
+ if(!istype(organ, /obj/item/organ/eyes))
return
- var/obj/item/organ/internal/eyes/affected_eyes = organ
+ var/obj/item/organ/eyes/affected_eyes = organ
improve_eyesight(affected_mob, affected_eyes)
/datum/reagent/medicine/oculine/proc/on_removed_organ(mob/prev_affected_mob, obj/item/organ/organ)
SIGNAL_HANDLER
- if(!istype(organ, /obj/item/organ/internal/eyes))
+ if(!istype(organ, /obj/item/organ/eyes))
return
- var/obj/item/organ/internal/eyes/eyes = organ
+ var/obj/item/organ/eyes/eyes = organ
restore_eyesight(prev_affected_mob, eyes)
/datum/reagent/medicine/oculine/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
@@ -732,7 +732,7 @@
var/normalized_purity = normalise_creation_purity()
affected_mob.adjust_temp_blindness(-4 SECONDS * REM * seconds_per_tick * normalized_purity)
affected_mob.adjust_eye_blur(-4 SECONDS * REM * seconds_per_tick * normalized_purity)
- var/obj/item/organ/internal/eyes/eyes = affected_mob.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = affected_mob.get_organ_slot(ORGAN_SLOT_EYES)
if(eyes)
// Healing eye damage will cure nearsightedness and blindness from ... eye damage
if(eyes.apply_organ_damage(-2 * REM * seconds_per_tick * normalise_creation_purity(), required_organ_flag = affected_organ_flags))
@@ -749,7 +749,7 @@
/datum/reagent/medicine/oculine/on_mob_delete(mob/living/affected_mob)
. = ..()
- var/obj/item/organ/internal/eyes/eyes = affected_mob.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = affected_mob.get_organ_slot(ORGAN_SLOT_EYES)
if(!eyes)
return
restore_eyesight(affected_mob, eyes)
@@ -772,21 +772,13 @@
/datum/reagent/medicine/inacusiate/on_mob_add(mob/living/affected_mob, amount)
. = ..()
if(creation_purity >= 1)
- RegisterSignal(affected_mob, COMSIG_MOVABLE_HEAR, PROC_REF(owner_hear))
-
-//Lets us hear whispers from far away!
-/datum/reagent/medicine/inacusiate/proc/owner_hear(datum/source, message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, list/message_mods = list())
- SIGNAL_HANDLER
- if(!isliving(holder.my_atom))
- return
- var/mob/living/affected_mob = holder.my_atom
- var/atom/movable/composer = holder.my_atom
- if(message_mods[WHISPER_MODE])
- message = composer.compose_message(affected_mob, message_language, message, null, spans, message_mods)
+ ADD_TRAIT(affected_mob, TRAIT_GOOD_HEARING, type)
+ if(affected_mob.can_hear())
+ to_chat(affected_mob, span_nicegreen("You can feel your hearing drastically improve!"))
/datum/reagent/medicine/inacusiate/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
- var/obj/item/organ/internal/ears/ears = affected_mob.get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = affected_mob.get_organ_slot(ORGAN_SLOT_EARS)
if(!ears)
return
ears.adjustEarDamage(-4 * REM * seconds_per_tick * normalise_creation_purity(), -4 * REM * seconds_per_tick * normalise_creation_purity())
@@ -794,7 +786,9 @@
/datum/reagent/medicine/inacusiate/on_mob_delete(mob/living/affected_mob)
. = ..()
- UnregisterSignal(affected_mob, COMSIG_MOVABLE_HEAR)
+ REMOVE_TRAIT(affected_mob, TRAIT_GOOD_HEARING, type)
+ if(affected_mob.can_hear())
+ to_chat(affected_mob, span_notice("Your hearing returns to its normal acuity."))
/datum/reagent/medicine/atropine
name = "Atropine"
@@ -819,7 +813,7 @@
need_mob_update += affected_mob.adjustOxyLoss(-5 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type)
if(need_mob_update)
. = UPDATE_MOB_HEALTH
- var/obj/item/organ/internal/lungs/affected_lungs = affected_mob.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/affected_lungs = affected_mob.get_organ_slot(ORGAN_SLOT_LUNGS)
var/our_respiration_type = affected_lungs ? affected_lungs.respiration_type : affected_mob.mob_respiration_type
if(our_respiration_type & affected_respiration_type)
affected_mob.losebreath = 0
@@ -859,7 +853,7 @@
need_mob_update += affected_mob.adjustFireLoss(-0.5 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype)
need_mob_update += affected_mob.adjustOxyLoss(-0.5 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type)
if(affected_mob.losebreath >= 4)
- var/obj/item/organ/internal/lungs/affected_lungs = affected_mob.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/affected_lungs = affected_mob.get_organ_slot(ORGAN_SLOT_LUNGS)
var/our_respiration_type = affected_lungs ? affected_lungs.respiration_type : affected_mob.mob_respiration_type
if(our_respiration_type & affected_respiration_type)
affected_mob.losebreath -= 2 * REM * seconds_per_tick
@@ -886,7 +880,7 @@
var/need_mob_update
need_mob_update = affected_mob.adjustStaminaLoss(2.5 * REM * seconds_per_tick, updating_stamina = FALSE)
need_mob_update += affected_mob.adjustToxLoss(1 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)
- var/obj/item/organ/internal/lungs/affected_lungs = affected_mob.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/affected_lungs = affected_mob.get_organ_slot(ORGAN_SLOT_LUNGS)
var/our_respiration_type = affected_lungs ? affected_lungs.respiration_type : affected_mob.mob_respiration_type
if(our_respiration_type & affected_respiration_type)
affected_mob.losebreath++
@@ -954,7 +948,7 @@
exposed_mob.visible_message(span_warning("[exposed_mob]'s body does not react..."))
return
- if(iscarbon(exposed_mob) && !(methods & INGEST)) //simplemobs can still be splashed
+ if(iscarbon(exposed_mob) && !(methods & (INGEST|INHALE))) //simplemobs can still be splashed
return ..()
if(HAS_TRAIT(exposed_mob, TRAIT_HUSK))
@@ -1705,10 +1699,10 @@
affected_mob.adjustOxyLoss(rand(3, 4) * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type)
if(prob(50))
- var/obj/item/organ/internal/lungs/our_lungs = affected_mob.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/our_lungs = affected_mob.get_organ_slot(ORGAN_SLOT_LUNGS)
our_lungs.apply_organ_damage(1 * REM * seconds_per_tick)
else
- var/obj/item/organ/internal/heart/our_heart = affected_mob.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/our_heart = affected_mob.get_organ_slot(ORGAN_SLOT_HEART)
our_heart.apply_organ_damage(1 * REM * seconds_per_tick)
return UPDATE_MOB_HEALTH
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 14a592aa685f4..e434161b03d70 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -42,7 +42,7 @@
continue
exposed_mob.ForceContractDisease(strain)
- else if((methods & VAPOR) && (strain.spread_flags & DISEASE_SPREAD_CONTACT_FLUIDS))
+ else if((methods & (VAPOR|INHALE)) && (strain.spread_flags & DISEASE_SPREAD_CONTACT_FLUIDS))
if(!strain.has_required_infectious_organ(exposed_mob, ORGAN_SLOT_LUNGS))
continue
@@ -51,7 +51,7 @@
exposed_mob.ContactContractDisease(strain)
if(data && data["resistances"])
- if(methods & (INGEST|INJECT)) //have to inject or ingest it. no curefoam/cheap curesprays
+ if(methods & (INGEST|INJECT|INHALE)) //have to inject, inhale or ingest it. no curefoam/cheap curesprays
for(var/stuff in exposed_mob.diseases)
var/datum/disease/infection = stuff
if(infection.GetDiseaseID() in data["resistances"])
@@ -1313,7 +1313,7 @@
/datum/reagent/fuel/on_mob_life(mob/living/carbon/victim, seconds_per_tick, times_fired)
. = ..()
- var/obj/item/organ/internal/liver/liver = victim.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = victim.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_HUMAN_AI_METABOLISM))
return
if(victim.adjustToxLoss(0.5 * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype))
@@ -1449,10 +1449,10 @@
/datum/reagent/cyborg_mutation_nanomachines/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message = TRUE, touch_protection = 0)
. = ..()
- var/obj/item/organ/internal/liver/liver = exposed_mob.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = exposed_mob.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_HUMAN_AI_METABOLISM))
return
- if((methods & (PATCH|INGEST|INJECT)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection))))
+ if((methods & (PATCH|INGEST|INJECT|INHALE)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection))))
exposed_mob.ForceContractDisease(new /datum/disease/transformation/robot(), FALSE, TRUE)
/datum/reagent/xenomicrobes
@@ -1464,7 +1464,7 @@
/datum/reagent/xenomicrobes/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message = TRUE, touch_protection = 0)
. = ..()
- if((methods & (PATCH|INGEST|INJECT)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection))))
+ if((methods & (PATCH|INGEST|INJECT|INHALE)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection))))
exposed_mob.ForceContractDisease(new /datum/disease/transformation/xeno(), FALSE, TRUE)
/datum/reagent/fungalspores
@@ -1477,7 +1477,7 @@
/datum/reagent/fungalspores/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message = TRUE, touch_protection = 0)
. = ..()
- if((methods & (PATCH|INGEST|INJECT)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection))))
+ if((methods & (PATCH|INGEST|INJECT|INHALE)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection))))
exposed_mob.ForceContractDisease(new /datum/disease/tuberculosis(), FALSE, TRUE)
/datum/reagent/snail
@@ -1490,7 +1490,7 @@
/datum/reagent/snail/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message = TRUE, touch_protection = 0)
. = ..()
- if((methods & (PATCH|INGEST|INJECT)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection))))
+ if((methods & (PATCH|INGEST|INJECT|INHALE)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection))))
exposed_mob.ForceContractDisease(new /datum/disease/gastrolosis(), FALSE, TRUE)
/datum/reagent/fluorosurfactant//foam precursor
@@ -1586,10 +1586,13 @@
/datum/reagent/nitrous_oxide/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume)
. = ..()
- if(methods & VAPOR)
+ if(methods & (VAPOR|INHALE))
// apply 2 seconds of drowsiness per unit applied, with a min duration of 4 seconds
var/drowsiness_to_apply = max(round(reac_volume, 1) * 2 SECONDS, 4 SECONDS)
exposed_mob.adjust_drowsiness(drowsiness_to_apply)
+ if(methods & INHALE)
+ exposed_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.25 * reac_volume, required_organ_flag = affected_organ_flags)
+ exposed_mob.adjust_hallucinations(10 SECONDS * reac_volume)
/datum/reagent/nitrous_oxide/on_mob_metabolize(mob/living/affected_mob)
. = ..()
@@ -1945,7 +1948,7 @@
/datum/reagent/carpet/royal/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
- var/obj/item/organ/internal/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver)
// Heads of staff and the captain have a "royal metabolism"
if(HAS_TRAIT(liver, TRAIT_ROYAL_METABOLISM))
@@ -2117,7 +2120,7 @@
name = "Acetone Oxide"
description = "Enslaved oxygen"
reagent_state = LIQUID
- color = "#C8A5DC"
+ color = "#966199cb"
taste_description = "acid"
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
@@ -2164,7 +2167,7 @@
description = "Thoroughly sample the rainbow."
reagent_state = LIQUID
var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700")
- color = "#C8A5DC"
+ color = COLOR_GRAY
taste_description = "rainbows"
var/can_colour_mobs = TRUE
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
@@ -2200,7 +2203,7 @@
description = "Has a high chance of making you look like a mad scientist."
reagent_state = LIQUID
var/list/potential_colors = list("#00aadd","#aa00ff","#ff7733","#dd1144","#dd1144","#00bb55","#00aadd","#ff7733","#ffcc22","#008844","#0055ee","#dd2222","#ffaa00") // fucking hair code
- color = "#C8A5DC"
+ color = COLOR_GRAY
taste_description = "sourness"
penetrates_skin = NONE
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
@@ -2436,7 +2439,7 @@
. = ..()
// Silently add the zombie infection organ to be activated upon death
if(!exposed_mob.get_organ_slot(ORGAN_SLOT_ZOMBIE))
- var/obj/item/organ/internal/zombie_infection/nodamage/ZI = new()
+ var/obj/item/organ/zombie_infection/nodamage/ZI = new()
ZI.Insert(exposed_mob)
/datum/reagent/magillitis
@@ -2612,7 +2615,7 @@
/datum/reagent/gondola_mutation_toxin/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message = TRUE, touch_protection = 0)
. = ..()
- if((methods & (PATCH|INGEST|INJECT)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection))))
+ if((methods & (PATCH|INGEST|INJECT|INHALE)) || ((methods & VAPOR) && prob(min(reac_volume,100)*(1 - touch_protection))))
exposed_mob.ForceContractDisease(new gondola_disease, FALSE, TRUE)
@@ -2931,8 +2934,10 @@
/datum/reagent/ants/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume)
. = ..()
- if(!iscarbon(exposed_mob) || (methods & (INGEST|INJECT)))
+ if(!iscarbon(exposed_mob))
return
+ if(methods & INGEST)
+ exposed_mob.check_allergic_reaction(BUGS, chance = reac_volume * 10, histamine_add = min(10, reac_volume))
if(methods & (PATCH|TOUCH|VAPOR))
amount_left = round(reac_volume,0.1)
exposed_mob.apply_status_effect(status_effect, amount_left)
diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
index 39b477a51a572..a5d8fdaae18c2 100644
--- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
@@ -54,7 +54,7 @@
. = ..()
if(!exposed_mob.can_mutate())
return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
- if(((methods & VAPOR) && prob(min(33, reac_volume))) || (methods & (INGEST|PATCH|INJECT)))
+ if(((methods & VAPOR) && prob(min(33, reac_volume))) || (methods & (INGEST|PATCH|INJECT|INHALE)))
exposed_mob.random_mutate_unique_identity()
exposed_mob.random_mutate_unique_features()
if(prob(98))
@@ -258,7 +258,7 @@
/datum/reagent/toxin/zombiepowder/on_mob_metabolize(mob/living/holder_mob)
. = ..()
holder_mob.adjustOxyLoss(0.5*REM, FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type)
- if((data?["method"] & INGEST) && holder_mob.stat != DEAD)
+ if((data?["method"] & (INGEST|INHALE)) && holder_mob.stat != DEAD)
holder_mob.fakedeath(type)
/datum/reagent/toxin/zombiepowder/on_mob_end_metabolize(mob/living/affected_mob)
@@ -268,10 +268,10 @@
/datum/reagent/toxin/zombiepowder/on_transfer(atom/target_atom, methods, trans_volume)
. = ..()
var/datum/reagent/zombiepowder = target_atom.reagents.has_reagent(/datum/reagent/toxin/zombiepowder)
- if(!zombiepowder || !(methods & INGEST))
+ if(!zombiepowder || !(methods & (INGEST|INHALE)))
return
LAZYINITLIST(zombiepowder.data)
- zombiepowder.data["method"] |= INGEST
+ zombiepowder.data["method"] |= (INGEST|INHALE)
/datum/reagent/toxin/zombiepowder/on_mob_life(mob/living/affected_mob, seconds_per_tick, times_fired)
. = ..()
@@ -655,7 +655,7 @@
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
/datum/reagent/toxin/formaldehyde/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
- var/obj/item/organ/internal/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_CORONER_METABOLISM)) //mmmm, the forbidden pickle juice
if(affected_mob.adjustToxLoss(-1 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) //it counteracts its own toxin damage.
return UPDATE_MOB_HEALTH
@@ -1085,11 +1085,11 @@
. = ..()
if(!istype(exposed_carbon))
return
- var/obj/item/organ/internal/liver/liver = exposed_carbon.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = exposed_carbon.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_HUMAN_AI_METABOLISM))
return
reac_volume = round(reac_volume,0.1)
- if(methods & INGEST)
+ if(methods & (INGEST|INHALE))
exposed_carbon.adjustBruteLoss(min(6*toxpwr, reac_volume * toxpwr), required_bodytype = affected_bodytype)
return
if(methods & INJECT)
@@ -1230,6 +1230,11 @@
to_chat(affected_mob, span_warning("A phantom limb hurts!"))
affected_mob.say("Why are we still here, just to suffer?", forced = /datum/reagent/toxin/bonehurtingjuice)
+/datum/reagent/toxin/bonehurtingjuice/used_on_fish(obj/item/fish/fish)
+ if(HAS_TRAIT(fish, TRAIT_FISH_MADE_OF_BONE))
+ fish.adjust_health(fish.health - 30)
+ return TRUE
+
/datum/reagent/toxin/bungotoxin
name = "Bungotoxin"
description = "A horrible cardiotoxin that protects the humble bungo pit."
@@ -1336,7 +1341,7 @@
if(SPT_PROB(20, seconds_per_tick))
affected_mob.set_jitter_if_lower(rand(2 SECONDS, 3 SECONDS) * REM * seconds_per_tick)
if(SPT_PROB(5, seconds_per_tick))
- var/obj/item/organ/internal/tongue/tongue = affected_mob.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = affected_mob.get_organ_slot(ORGAN_SLOT_TONGUE)
if(tongue)
to_chat(affected_mob, span_warning("Your [tongue.name] feels numb..."))
affected_mob.set_slurring_if_lower(5 SECONDS * REM * seconds_per_tick)
diff --git a/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm b/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm
index 8c093888028e9..b34461f99b449 100644
--- a/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm
+++ b/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm
@@ -43,7 +43,7 @@
//This looks rediculous, but expose is usually called from the donor reagents datum - we want to edit the post exposure version present in the mob.
var/mob/living/carbon/carby = living_mob
//But because carbon mobs have stomachs we have to search in there because we're ingested
- var/obj/item/organ/internal/stomach/stomach = carby.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/stomach = carby.get_organ_slot(ORGAN_SLOT_STOMACH)
var/datum/reagent/eigenstate/eigen
if(stomach)
eigen = stomach.reagents.has_reagent(/datum/reagent/eigenstate)
diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm
index 4670aebdd6e0a..8816ec87dfb60 100644
--- a/code/modules/reagents/chemistry/recipes.dm
+++ b/code/modules/reagents/chemistry/recipes.dm
@@ -314,8 +314,8 @@
// Not quite the same if the reaction is in their stomach; they'll throw up
// from any explosion, but it'll only make them puke up everything in their
// stomach
- else if (istype(holder.my_atom, /obj/item/organ/internal/stomach))
- var/obj/item/organ/internal/stomach/indigestion = holder.my_atom
+ else if (istype(holder.my_atom, /obj/item/organ/stomach))
+ var/obj/item/organ/stomach/indigestion = holder.my_atom
if(power < 1)
return
indigestion.owner?.vomit(MOB_VOMIT_MESSAGE | MOB_VOMIT_FORCE, lost_nutrition = 150, distance = 5, purge_ratio = 1)
diff --git a/code/modules/reagents/chemistry/taste.dm b/code/modules/reagents/chemistry/taste.dm
new file mode 100644
index 0000000000000..06cee0bba2dea
--- /dev/null
+++ b/code/modules/reagents/chemistry/taste.dm
@@ -0,0 +1,77 @@
+
+#define TEXT_NO_TASTE "something indescribable"
+
+//================================TASTE===================================================
+/**
+ * Returns what this reagents in our given list taste like
+ *
+ * Arguments:
+ * * list/reagent_list - List of reagents to taste.
+ * * mob/living/taster - Who is doing the tasting. Some mobs can pick up specific flavours.
+ * * minimum_percent - The lower the minimum percent, the more sensitive the message is.
+ * * weight_modifier - Value to multiply each reagent's taste weight with.
+ */
+/proc/generate_reagents_taste_message(list/reagent_list, mob/living/taster, minimum_percent)
+ // We can't taste anything
+ if(minimum_percent > 100)
+ return TEXT_NO_TASTE
+
+ // Associative list of our tastes, descriptor - strength
+ var/list/tastes = list()
+ // Total of our taste strengths so far
+ var/total_taste = 0
+
+ for(var/datum/reagent/reagent as anything in reagent_list)
+ if(!reagent.taste_mult)
+ continue
+
+ var/list/taste_data = reagent.get_taste_description(taster)
+ for(var/taste in taste_data)
+ var/taste_strength = taste_data[taste] * reagent.volume * reagent.taste_mult
+ if(taste in tastes)
+ tastes[taste] += taste_strength
+ else
+ tastes[taste] = taste_strength
+ total_taste += taste_strength
+
+ // None of our reagents had any flavour
+ if(total_taste <= 0)
+ return TEXT_NO_TASTE
+
+ // If we have exactly one taste, don't bother with relative strengths
+ if(length(tastes) == 1)
+ return tastes[1]
+
+ // Sort tastes descending by strength, so strong flavours come first
+ sortTim(tastes, cmp = GLOBAL_PROC_REF(cmp_numeric_dsc), associative = TRUE)
+
+ // Lazylists for different taste strength categories, no need to initialize if we don't have such flavors
+ var/list/strong
+ var/list/mild
+ var/list/hint
+
+ for(var/taste_desc in tastes)
+ var/percent = tastes[taste_desc]/total_taste * 100
+ if(percent < minimum_percent)
+ continue
+
+ if(percent <= minimum_percent * 2)
+ LAZYADD(hint, taste_desc)
+ else if(percent > minimum_percent * 4)
+ LAZYADD(strong, taste_desc)
+ else
+ LAZYADD(mild, taste_desc)
+
+ var/list/out = list()
+
+ if(LAZYLEN(strong))
+ out += "the strong flavor of [english_list(strong, TEXT_NO_TASTE)]"
+ if(LAZYLEN(mild))
+ // Prefix "some " if there are strong flavors to avoid seeming like a strong flavor
+ out += "[LAZYLEN(strong) ? "some " : ""][english_list(mild, TEXT_NO_TASTE)]"
+ if(LAZYLEN(hint))
+ out += "a hint of [english_list(hint, TEXT_NO_TASTE)]"
+
+ return english_list(out, TEXT_NO_TASTE)
+
+#undef TEXT_NO_TASTE
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 77e1ef3903992..2320eca9160da 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -72,7 +72,7 @@
. += span_notice("Left-click or right-click in-hand to view its transfer amount.")
if(isliving(user) && HAS_TRAIT(user, TRAIT_REMOTE_TASTING))
var/mob/living/living_user = user
- living_user.taste(reagents)
+ living_user.taste_container(reagents)
/obj/item/reagent_containers/create_reagents(max_vol, flags)
. = ..()
@@ -301,5 +301,5 @@
/obj/item/reagent_containers/equipped(mob/user, slot, initial = FALSE)
. = ..()
- if((slot & ITEM_SLOT_HANDS) && reagent_container_liquid_sound && reagents.total_volume > 0)
+ if(!initial && (slot & ITEM_SLOT_HANDS) && reagent_container_liquid_sound && reagents.total_volume > 0)
playsound(src, reagent_container_liquid_sound, LIQUID_SLOSHING_SOUND_VOLUME, vary = TRUE, ignore_walls = FALSE)
diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm
index 90ddd0d4b380d..a3373e245eefd 100644
--- a/code/modules/reagents/reagent_containers/cups/_cup.dm
+++ b/code/modules/reagents/reagent_containers/cups/_cup.dm
@@ -19,6 +19,10 @@
var/gulp_size = 5
///Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it.
var/isGlass = FALSE
+ ///What kind of chem transfer method does this cup use. Defaults to INGEST
+ var/reagent_consumption_method = INGEST
+ ///What sound does our consumption play on consuming from the container?
+ var/consumption_sound = 'sound/items/drink.ogg'
/obj/item/reagent_containers/cup/examine(mob/user)
. = ..()
@@ -87,9 +91,9 @@
SEND_SIGNAL(src, COMSIG_GLASS_DRANK, target_mob, user)
SEND_SIGNAL(target_mob, COMSIG_GLASS_DRANK, src, user) // DOPPLER EDIT ADDITION - Hemophages can't casually drink what's not going to regenerate their blood
var/fraction = min(gulp_size/reagents.total_volume, 1)
- reagents.trans_to(target_mob, gulp_size, transferred_by = user, methods = INGEST)
+ reagents.trans_to(target_mob, gulp_size, transferred_by = user, methods = reagent_consumption_method)
checkLiked(fraction, target_mob)
- playsound(target_mob.loc,'sound/items/drink.ogg', rand(10,50), TRUE)
+ playsound(target_mob.loc, consumption_sound, rand(10,50), TRUE)
if(!iscarbon(target_mob))
return
var/mob/living/carbon/carbon_drinker = target_mob
diff --git a/code/modules/reagents/reagent_containers/cups/drinks.dm b/code/modules/reagents/reagent_containers/cups/drinks.dm
index a5b64b61d06eb..241dfd7c6f89f 100644
--- a/code/modules/reagents/reagent_containers/cups/drinks.dm
+++ b/code/modules/reagents/reagent_containers/cups/drinks.dm
@@ -268,11 +268,12 @@
cap_lost = TRUE
else
to_chat(user, span_notice("You remove the cap from [src]."))
- playsound(loc, 'sound/effects/can/can_open1.ogg', 50, TRUE)
+ playsound(loc, 'sound/items/handling/reagent_containers/plastic_bottle/bottle_cap_open.ogg', 50, TRUE)
else
cap_on = TRUE
spillable = FALSE
to_chat(user, span_notice("You put the cap on [src]."))
+ playsound(loc, 'sound/items/handling/reagent_containers/plastic_bottle/bottle_cap_close.ogg', 50, TRUE)
update_appearance()
return CLICK_ACTION_SUCCESS
diff --git a/code/modules/reagents/reagent_containers/cups/glassbottle.dm b/code/modules/reagents/reagent_containers/cups/glassbottle.dm
index 67741748461c7..5712d383f0b57 100644
--- a/code/modules/reagents/reagent_containers/cups/glassbottle.dm
+++ b/code/modules/reagents/reagent_containers/cups/glassbottle.dm
@@ -4,18 +4,6 @@
//Functionally identical to regular drinks. The only difference is that the default bottle size is 100. - Darem
//Bottles now knockdown and break when smashed on people's heads. - Giacom
-/// Initializes GLOB.alcohol_containers, only containers that actually have reagents are added to the list.
-/proc/init_alcohol_containers()
- var/list/containers = subtypesof(/obj/item/reagent_containers/cup/glass/bottle)
- for(var/typepath in containers)
- containers -= typepath
- var/obj/item/reagent_containers/cup/glass/bottle/instance = new typepath
- if(!length(instance.list_reagents))
- qdel(instance)
- continue
- containers[typepath] = instance
- return containers
-
/obj/item/reagent_containers/cup/glass/bottle
name = "glass bottle"
desc = "This blank bottle is unyieldingly anonymous, offering no clues to its contents."
@@ -705,7 +693,7 @@
return
//The bonus to success chance that the user gets for being a command role
- var/obj/item/organ/internal/liver/liver = user.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = user.get_organ_slot(ORGAN_SLOT_LIVER)
var/command_bonus = (!isnull(liver) && HAS_TRAIT(liver, TRAIT_ROYAL_METABOLISM)) ? 20 : 0
//The bonus to success chance that the user gets for having a sabrage skillchip installed/otherwise having the trait through other means
diff --git a/code/modules/reagents/reagent_containers/cups/soda.dm b/code/modules/reagents/reagent_containers/cups/soda.dm
index 7772a64f60e3d..a23e9c323545b 100644
--- a/code/modules/reagents/reagent_containers/cups/soda.dm
+++ b/code/modules/reagents/reagent_containers/cups/soda.dm
@@ -118,7 +118,7 @@
if(iter_mob != target)
iter_mob.add_mood_event("observed_soda_spill", /datum/mood_event/observed_soda_spill, target, src)
- playsound(src, 'sound/effects/can/can_pop.ogg', 80, TRUE)
+ playsound(src, 'sound/items/can/can_pop.ogg', 80, TRUE)
if(!hide_message)
visible_message(span_danger("[src] spills over, fizzing its contents all over [target]!"))
spillable = TRUE
@@ -151,7 +151,7 @@
/obj/item/reagent_containers/cup/soda_cans/attack_self_secondary(mob/user)
if(!is_drainable())
- playsound(src, 'sound/effects/can/can_shake.ogg', 50, TRUE)
+ playsound(src, 'sound/items/can/can_shake.ogg', 50, TRUE)
user.visible_message(span_danger("[user] shakes [src]!"), span_danger("You shake up [src]!"), vision_distance=2)
fizziness += SODA_FIZZINESS_SHAKE
return
diff --git a/code/modules/reagents/withdrawal/generic_addictions.dm b/code/modules/reagents/withdrawal/generic_addictions.dm
index aaa983b9e9616..8462b700a161c 100644
--- a/code/modules/reagents/withdrawal/generic_addictions.dm
+++ b/code/modules/reagents/withdrawal/generic_addictions.dm
@@ -111,7 +111,7 @@
to_chat(affected_human, span_warning("Your chin itches."))
affected_human.set_facial_hairstyle("Beard (Full)", update = TRUE)
//Only like gross food
- var/obj/item/organ/internal/tongue/tongue = affected_carbon.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = affected_carbon.get_organ_slot(ORGAN_SLOT_TONGUE)
if(!tongue)
return
tongue.liked_foodtypes = GROSS
@@ -124,7 +124,7 @@
return
to_chat(affected_carbon, span_warning("You feel yourself adapt to the darkness."))
var/mob/living/carbon/human/affected_human = affected_carbon
- var/obj/item/organ/internal/eyes/empowered_eyes = affected_human.get_organ_by_type(/obj/item/organ/internal/eyes)
+ var/obj/item/organ/eyes/empowered_eyes = affected_human.get_organ_by_type(/obj/item/organ/eyes)
if(empowered_eyes)
ADD_TRAIT(affected_human, TRAIT_NIGHT_VISION, "maint_drug_addiction")
empowered_eyes?.refresh()
@@ -146,7 +146,7 @@
. = ..()
affected_carbon.remove_status_effect(/datum/status_effect/grouped/screwy_hud/fake_healthy, type)
//restore tongue's tastes
- var/obj/item/organ/internal/tongue/tongue = affected_carbon.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = affected_carbon.get_organ_slot(ORGAN_SLOT_TONGUE)
if(tongue)
tongue.liked_foodtypes = initial(tongue.liked_foodtypes)
tongue.disliked_foodtypes = initial(tongue.disliked_foodtypes)
@@ -155,7 +155,7 @@
return
var/mob/living/carbon/human/affected_human = affected_carbon
REMOVE_TRAIT(affected_human, TRAIT_NIGHT_VISION, "maint_drug_addiction")
- var/obj/item/organ/internal/eyes/eyes = affected_human.get_organ_by_type(/obj/item/organ/internal/eyes)
+ var/obj/item/organ/eyes/eyes = affected_human.get_organ_by_type(/obj/item/organ/eyes)
eyes?.refresh()
///Makes you a hypochondriac - I'd like to call it hypochondria, but "I could use some hypochondria" doesn't work
@@ -195,7 +195,7 @@
if(!HAS_TRAIT(affected_carbon, TRAIT_RESISTCOLD))
possibilities += /datum/hallucination/fake_alert/cold
- var/obj/item/organ/internal/lungs/lungs = affected_carbon.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/lungs = affected_carbon.get_organ_slot(ORGAN_SLOT_LUNGS)
if(lungs)
if(lungs.safe_oxygen_min)
possibilities += /datum/hallucination/fake_alert/need_oxygen
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index 1d1354e865dbc..e23bfc8d0a330 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -96,7 +96,7 @@
stored = null
deconstruct(FALSE)
-/obj/machinery/disposal/singularity_pull(S, current_size)
+/obj/machinery/disposal/singularity_pull(atom/singularity, current_size)
..()
if(current_size >= STAGE_FIVE)
deconstruct()
diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm
index b08323e66e4aa..ace39e55c8a53 100644
--- a/code/modules/recycling/disposal/pipe.dm
+++ b/code/modules/recycling/disposal/pipe.dm
@@ -189,7 +189,7 @@
pipe.setDir(dir)
spew_forth()
-/obj/structure/disposalpipe/singularity_pull(S, current_size)
+/obj/structure/disposalpipe/singularity_pull(atom/singularity, current_size)
..()
if(current_size >= STAGE_FIVE)
deconstruct()
diff --git a/code/modules/religion/burdened/burdened_trauma.dm b/code/modules/religion/burdened/burdened_trauma.dm
index 51e763dbcb570..ebdfcda656505 100644
--- a/code/modules/religion/burdened/burdened_trauma.dm
+++ b/code/modules/religion/burdened/burdened_trauma.dm
@@ -153,8 +153,8 @@
if(!(organ.slot in critical_slots))
return FALSE
- else if(istype(organ, /obj/item/organ/internal/eyes))
- var/obj/item/organ/internal/eyes/eyes = organ
+ else if(istype(organ, /obj/item/organ/eyes))
+ var/obj/item/organ/eyes/eyes = organ
if(eyes.tint < TINT_BLIND) //unless you were already blinded by them (flashlight eyes), this is adding burden!
return TRUE
return FALSE
diff --git a/code/modules/religion/burdened/psyker.dm b/code/modules/religion/burdened/psyker.dm
index f111d04f93013..77cfcdaac2494 100644
--- a/code/modules/religion/burdened/psyker.dm
+++ b/code/modules/religion/burdened/psyker.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/brain/psyker
+/obj/item/organ/brain/psyker
name = "psyker brain"
desc = "This brain is blue, split into two hemispheres, and has immense psychic powers. What kind of monstrosity would use that?"
icon_state = "brain-psyker"
@@ -10,17 +10,17 @@
organ_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_LITERATE, TRAIT_CAN_STRIP, TRAIT_ANTIMAGIC_NO_SELFBLOCK)
w_class = WEIGHT_CLASS_NORMAL
-/obj/item/organ/internal/brain/psyker/on_mob_insert(mob/living/carbon/inserted_into)
+/obj/item/organ/brain/psyker/on_mob_insert(mob/living/carbon/inserted_into)
. = ..()
inserted_into.AddComponent(/datum/component/echolocation, blocking_trait = TRAIT_DUMB, echo_group = "psyker", echo_icon = "psyker", color_path = /datum/client_colour/psyker)
inserted_into.AddComponent(/datum/component/anti_magic, antimagic_flags = MAGIC_RESISTANCE_MIND)
-/obj/item/organ/internal/brain/psyker/on_mob_remove(mob/living/carbon/removed_from)
+/obj/item/organ/brain/psyker/on_mob_remove(mob/living/carbon/removed_from)
. = ..()
qdel(removed_from.GetComponent(/datum/component/echolocation))
qdel(removed_from.GetComponent(/datum/component/anti_magic))
-/obj/item/organ/internal/brain/psyker/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/brain/psyker/on_life(seconds_per_tick, times_fired)
. = ..()
var/obj/item/bodypart/head/psyker/psyker_head = owner.get_bodypart(zone)
if(istype(psyker_head))
@@ -72,15 +72,15 @@
/// Proc with no side effects that turns someone into a psyker. returns FALSE if it could not psykerize.
/mob/living/carbon/human/proc/psykerize()
var/obj/item/bodypart/head/old_head = get_bodypart(BODY_ZONE_HEAD)
- var/obj/item/organ/internal/brain/old_brain = get_organ_slot(ORGAN_SLOT_BRAIN)
- var/obj/item/organ/internal/old_eyes = get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/brain/old_brain = get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/old_eyes = get_organ_slot(ORGAN_SLOT_EYES)
if(stat == DEAD || !old_head || !old_brain)
return FALSE
var/obj/item/bodypart/head/psyker/psyker_head = new()
if(!psyker_head.replace_limb(src, special = TRUE))
return FALSE
qdel(old_head)
- var/obj/item/organ/internal/brain/psyker/psyker_brain = new()
+ var/obj/item/organ/brain/psyker/psyker_brain = new()
old_brain.before_organ_replacement(psyker_brain)
old_brain.Remove(src, special = TRUE, movement_flags = NO_ID_TRANSFER)
qdel(old_brain)
diff --git a/code/modules/religion/religion_sects.dm b/code/modules/religion/religion_sects.dm
index b1c055ec9bddb..58209cac74ae5 100644
--- a/code/modules/religion/religion_sects.dm
+++ b/code/modules/religion/religion_sects.dm
@@ -169,7 +169,7 @@
//first we determine if we can charge them
var/did_we_charge = FALSE
- var/obj/item/organ/internal/stomach/ethereal/eth_stomach = blessed.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/ethereal/eth_stomach = blessed.get_organ_slot(ORGAN_SLOT_STOMACH)
if(istype(eth_stomach))
eth_stomach.adjust_charge(0.06 * STANDARD_CELL_CHARGE)
did_we_charge = TRUE
diff --git a/code/modules/religion/rites.dm b/code/modules/religion/rites.dm
index b54c4e09b2951..cd0fabba84974 100644
--- a/code/modules/religion/rites.dm
+++ b/code/modules/religion/rites.dm
@@ -132,31 +132,31 @@
list(
// Arms
list(
- /obj/item/organ/internal/cyberimp/arm/combat = 1,
- /obj/item/organ/internal/cyberimp/arm/surgery = 1000000,
- /obj/item/organ/internal/cyberimp/arm/toolset = 1500000,
+ /obj/item/organ/cyberimp/arm/combat = 1,
+ /obj/item/organ/cyberimp/arm/surgery = 1000000,
+ /obj/item/organ/cyberimp/arm/toolset = 1500000,
) = 15,
// Eyes
list(
- /obj/item/organ/internal/cyberimp/eyes/hud/diagnostic = 1,
- /obj/item/organ/internal/cyberimp/eyes/hud/medical = 1,
- /obj/item/organ/internal/eyes/robotic/glow = 1,
- /obj/item/organ/internal/eyes/robotic/shield = 2,
+ /obj/item/organ/cyberimp/eyes/hud/diagnostic = 1,
+ /obj/item/organ/cyberimp/eyes/hud/medical = 1,
+ /obj/item/organ/eyes/robotic/glow = 1,
+ /obj/item/organ/eyes/robotic/shield = 2,
) = 15,
// Chest
list(
- /obj/item/organ/internal/cyberimp/chest/reviver = 1,
- /obj/item/organ/internal/cyberimp/chest/thrusters = 2,
+ /obj/item/organ/cyberimp/chest/reviver = 1,
+ /obj/item/organ/cyberimp/chest/thrusters = 2,
) = 9,
// Brain / Head
list(
- /obj/item/organ/internal/cyberimp/brain/anti_drop = 50,
- /obj/item/organ/internal/cyberimp/brain/connector = 50,
- /obj/item/organ/internal/cyberimp/brain/anti_stun = 10,
+ /obj/item/organ/cyberimp/brain/anti_drop = 50,
+ /obj/item/organ/cyberimp/brain/connector = 50,
+ /obj/item/organ/cyberimp/brain/anti_stun = 10,
) = 10,
// Misc
list(
- /obj/item/organ/internal/cyberimp/mouth/breathing_tube = 1,
+ /obj/item/organ/cyberimp/mouth/breathing_tube = 1,
) = 5,
)
)
@@ -264,7 +264,7 @@
if(!HAS_TRAIT_FROM(user, TRAIT_HOPELESSLY_ADDICTED, "maint_adaptation"))
to_chat(user, span_warning("You need to adapt to maintenance first."))
return FALSE
- var/obj/item/organ/internal/eyes/night_vision/maintenance_adapted/adapted = user.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/night_vision/maintenance_adapted/adapted = user.get_organ_slot(ORGAN_SLOT_EYES)
if(adapted && istype(adapted))
to_chat(user, span_warning("Your eyes are already adapted!"))
return FALSE
@@ -272,12 +272,12 @@
/datum/religion_rites/adapted_eyes/invoke_effect(mob/living/carbon/human/user, atom/movable/religious_tool)
..()
- var/obj/item/organ/internal/eyes/oldeyes = user.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/oldeyes = user.get_organ_slot(ORGAN_SLOT_EYES)
to_chat(user, span_warning("You feel your eyes adapt to the darkness!"))
if(oldeyes)
oldeyes.Remove(user, special = TRUE)
qdel(oldeyes)//eh
- var/obj/item/organ/internal/eyes/night_vision/maintenance_adapted/neweyes = new
+ var/obj/item/organ/eyes/night_vision/maintenance_adapted/neweyes = new
neweyes.Insert(user, special = TRUE)
/datum/religion_rites/adapted_food
diff --git a/code/modules/research/designs/autolathe/service_designs.dm b/code/modules/research/designs/autolathe/service_designs.dm
index 29523bf5820b9..21fda49fc1bdc 100644
--- a/code/modules/research/designs/autolathe/service_designs.dm
+++ b/code/modules/research/designs/autolathe/service_designs.dm
@@ -531,7 +531,7 @@
name = "Fishing Rod"
id = "fishing_rod"
build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE
- materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 2)
+ materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 2, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2)
build_path = /obj/item/fishing_rod
category = list(
RND_CATEGORY_INITIAL,
@@ -539,6 +539,17 @@
)
departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE
+/datum/design/fishing_rod_material
+ name = "Material Fishing Rod"
+ id = "fishing_rod_material"
+ build_type = AUTOLATHE
+ materials = list(MAT_CATEGORY_ITEM_MATERIAL = SMALL_MATERIAL_AMOUNT * 4)
+ build_path = /obj/item/fishing_rod/material
+ category = list(
+ RND_CATEGORY_INITIAL,
+ RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_SERVICE,
+ )
+
/datum/design/fish_case
name = "Stasis Fish Case"
id = "fish_case"
diff --git a/code/modules/research/designs/limbgrower_designs.dm b/code/modules/research/designs/limbgrower_designs.dm
index ef8c762acd7f4..53309d39c7dfd 100644
--- a/code/modules/research/designs/limbgrower_designs.dm
+++ b/code/modules/research/designs/limbgrower_designs.dm
@@ -41,7 +41,7 @@
id = "heart"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 30)
- build_path = /obj/item/organ/internal/heart
+ build_path = /obj/item/organ/heart
category = list(SPECIES_HUMAN, RND_CATEGORY_INITIAL)
/datum/design/lungs
@@ -49,7 +49,7 @@
id = "lungs"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 20)
- build_path = /obj/item/organ/internal/lungs
+ build_path = /obj/item/organ/lungs
category = list(SPECIES_HUMAN, RND_CATEGORY_INITIAL)
/datum/design/liver
@@ -57,7 +57,7 @@
id = "liver"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 20)
- build_path = /obj/item/organ/internal/liver
+ build_path = /obj/item/organ/liver
category = list(SPECIES_HUMAN, RND_CATEGORY_INITIAL)
/datum/design/stomach
@@ -65,7 +65,7 @@
id = "stomach"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 15)
- build_path = /obj/item/organ/internal/stomach
+ build_path = /obj/item/organ/stomach
category = list(SPECIES_HUMAN, RND_CATEGORY_INITIAL)
/datum/design/appendix
@@ -73,7 +73,7 @@
id = "appendix"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 5) //why would you need this
- build_path = /obj/item/organ/internal/appendix
+ build_path = /obj/item/organ/appendix
category = list(SPECIES_HUMAN, RND_CATEGORY_INITIAL)
/datum/design/eyes
@@ -81,7 +81,7 @@
id = "eyes"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10)
- build_path = /obj/item/organ/internal/eyes
+ build_path = /obj/item/organ/eyes
category = list(SPECIES_HUMAN, RND_CATEGORY_INITIAL)
/datum/design/ears
@@ -89,7 +89,7 @@
id = "ears"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10)
- build_path = /obj/item/organ/internal/ears
+ build_path = /obj/item/organ/ears
category = list(SPECIES_HUMAN, RND_CATEGORY_INITIAL)
/datum/design/tongue
@@ -97,7 +97,7 @@
id = "tongue"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10)
- build_path = /obj/item/organ/internal/tongue
+ build_path = /obj/item/organ/tongue
category = list(SPECIES_HUMAN, RND_CATEGORY_INITIAL)
// Grows a fake lizard tail - not usable in lizard wine and other similar recipes.
@@ -106,7 +106,7 @@
id = "liztail"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 20)
- build_path = /obj/item/organ/external/tail/lizard/fake
+ build_path = /obj/item/organ/tail/lizard/fake
category = list(SPECIES_LIZARD)
/datum/design/lizard_tongue
@@ -114,7 +114,7 @@
id = "liztongue"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 20)
- build_path = /obj/item/organ/internal/tongue/lizard
+ build_path = /obj/item/organ/tongue/lizard
category = list(SPECIES_LIZARD)
/datum/design/monkey_tail
@@ -122,7 +122,7 @@
id = "monkeytail"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 20)
- build_path = /obj/item/organ/external/tail/monkey
+ build_path = /obj/item/organ/tail/monkey
category = list(RND_CATEGORY_LIMBS_OTHER, RND_CATEGORY_INITIAL)
/datum/design/cat_tail
@@ -130,7 +130,7 @@
id = "cattail"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 20)
- build_path = /obj/item/organ/external/tail/cat
+ build_path = /obj/item/organ/tail/cat
category = list(SPECIES_HUMAN)
/datum/design/cat_ears
@@ -138,7 +138,7 @@
id = "catears"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10)
- build_path = /obj/item/organ/internal/ears/cat
+ build_path = /obj/item/organ/ears/cat
category = list(SPECIES_HUMAN)
/datum/design/plasmaman_lungs
@@ -146,7 +146,7 @@
id = "plasmamanlungs"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/toxin/plasma = 20)
- build_path = /obj/item/organ/internal/lungs/plasmaman
+ build_path = /obj/item/organ/lungs/plasmaman
category = list(SPECIES_PLASMAMAN)
/datum/design/plasmaman_tongue
@@ -154,7 +154,7 @@
id = "plasmamantongue"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/toxin/plasma = 20)
- build_path = /obj/item/organ/internal/tongue/bone/plasmaman
+ build_path = /obj/item/organ/tongue/bone/plasmaman
category = list(SPECIES_PLASMAMAN)
/datum/design/plasmaman_liver
@@ -162,7 +162,7 @@
id = "plasmamanliver"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/toxin/plasma = 20)
- build_path = /obj/item/organ/internal/liver/bone/plasmaman
+ build_path = /obj/item/organ/liver/bone/plasmaman
category = list(SPECIES_PLASMAMAN)
/datum/design/plasmaman_stomach
@@ -170,7 +170,7 @@
id = "plasmamanstomach"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/toxin/plasma = 20)
- build_path = /obj/item/organ/internal/stomach/bone/plasmaman
+ build_path = /obj/item/organ/stomach/bone/plasmaman
category = list(SPECIES_PLASMAMAN)
/datum/design/ethereal_stomach
@@ -178,7 +178,7 @@
id = "etherealstomach"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/consumable/liquidelectricity/enriched = 20)
- build_path = /obj/item/organ/internal/stomach/ethereal
+ build_path = /obj/item/organ/stomach/ethereal
category = list(SPECIES_ETHEREAL)
/datum/design/ethereal_tongue
@@ -186,7 +186,7 @@
id = "etherealtongue"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/consumable/liquidelectricity/enriched = 20)
- build_path = /obj/item/organ/internal/tongue/ethereal
+ build_path = /obj/item/organ/tongue/ethereal
category = list(SPECIES_ETHEREAL)
/datum/design/ethereal_lungs
@@ -194,7 +194,7 @@
id = "ethereallungs"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/consumable/liquidelectricity/enriched = 20)
- build_path = /obj/item/organ/internal/lungs/ethereal
+ build_path = /obj/item/organ/lungs/ethereal
category = list(SPECIES_ETHEREAL)
// Intentionally not growable by normal means - for balance conerns.
@@ -203,7 +203,7 @@
id = "etherealheart"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/consumable/liquidelectricity/enriched = 20)
- build_path = /obj/item/organ/internal/heart/ethereal
+ build_path = /obj/item/organ/heart/ethereal
category = list(SPECIES_ETHEREAL)
/datum/design/armblade
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index 3139b365d0502..14a36843e3297 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -1651,6 +1651,21 @@
RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_SERVICE
)
+/datum/design/borg_upgrade_botany
+ name = "Botany Tools"
+ id = "borg_upgrade_botany"
+ build_type = MECHFAB
+ build_path = /obj/item/borg/upgrade/botany_upgrade
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT*13,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT*2 // approx. all mats that u wasting on those tools on lathe
+ )
+ construction_time = 4 SECONDS
+ category = list(
+ RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_SERVICE
+ )
+
+
/datum/design/borg_upgrade_drink_apparatus
name = "Drink Apparatus"
id = "borg_upgrade_drink_apparatus"
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index c34411fff61cb..d55c1a6f24373 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -392,7 +392,7 @@
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
construction_time = 3.5 SECONDS
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*2.5)
- build_path = /obj/item/organ/internal/cyberimp/mouth/breathing_tube
+ build_path = /obj/item/organ/cyberimp/mouth/breathing_tube
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_HEALTH
)
@@ -409,7 +409,7 @@
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
)
construction_time = 2 SECONDS
- build_path = /obj/item/organ/internal/cyberimp/arm/surgery
+ build_path = /obj/item/organ/cyberimp/arm/surgery
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY
)
@@ -426,7 +426,7 @@
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
)
construction_time = 2 SECONDS
- build_path = /obj/item/organ/internal/cyberimp/arm/toolset
+ build_path = /obj/item/organ/cyberimp/arm/toolset
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY
)
@@ -444,7 +444,7 @@
/datum/material/silver =SMALL_MATERIAL_AMOUNT*5,
/datum/material/gold =SMALL_MATERIAL_AMOUNT*5,
)
- build_path = /obj/item/organ/internal/cyberimp/eyes/hud/medical
+ build_path = /obj/item/organ/cyberimp/eyes/hud/medical
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY
)
@@ -462,7 +462,7 @@
/datum/material/silver = SMALL_MATERIAL_AMOUNT*7.5,
/datum/material/gold = SMALL_MATERIAL_AMOUNT*7.5,
)
- build_path = /obj/item/organ/internal/cyberimp/eyes/hud/security
+ build_path = /obj/item/organ/cyberimp/eyes/hud/security
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY
)
@@ -480,7 +480,7 @@
/datum/material/silver = SMALL_MATERIAL_AMOUNT*6,
/datum/material/gold = SMALL_MATERIAL_AMOUNT*6,
)
- build_path = /obj/item/organ/internal/cyberimp/eyes/hud/diagnostic
+ build_path = /obj/item/organ/cyberimp/eyes/hud/diagnostic
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY
)
@@ -502,7 +502,7 @@
/datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT,
)
- build_path = /obj/item/organ/internal/eyes/robotic/xray
+ build_path = /obj/item/organ/eyes/robotic/xray
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_COMBAT
)
@@ -511,7 +511,7 @@
/datum/design/cyberimp_xray/moth
name = "Moth X-ray Eyes"
id = "ci-xray-moth"
- build_path = /obj/item/organ/internal/eyes/robotic/xray/moth
+ build_path = /obj/item/organ/eyes/robotic/xray/moth
/datum/design/cyberimp_thermals
name = "Thermal Eyes"
@@ -527,7 +527,7 @@
/datum/material/plasma =HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/diamond =SHEET_MATERIAL_AMOUNT,
)
- build_path = /obj/item/organ/internal/eyes/robotic/thermals
+ build_path = /obj/item/organ/eyes/robotic/thermals
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_COMBAT
)
@@ -536,7 +536,7 @@
/datum/design/cyberimp_thermals/moth
name = "Moth Thermal Eyes"
id = "ci-thermals-moth"
- build_path = /obj/item/organ/internal/eyes/robotic/thermals/moth
+ build_path = /obj/item/organ/eyes/robotic/thermals/moth
/datum/design/cyberimp_antidrop
name = "Anti-Drop Implant"
@@ -550,7 +550,7 @@
/datum/material/silver = SMALL_MATERIAL_AMOUNT*4,
/datum/material/gold = SMALL_MATERIAL_AMOUNT*4,
)
- build_path = /obj/item/organ/internal/cyberimp/brain/anti_drop
+ build_path = /obj/item/organ/cyberimp/brain/anti_drop
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT
)
@@ -568,7 +568,7 @@
/datum/material/silver =SMALL_MATERIAL_AMOUNT*5,
/datum/material/gold =HALF_SHEET_MATERIAL_AMOUNT,
)
- build_path = /obj/item/organ/internal/cyberimp/brain/anti_stun
+ build_path = /obj/item/organ/cyberimp/brain/anti_stun
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT
)
@@ -586,7 +586,7 @@
/datum/material/gold=SMALL_MATERIAL_AMOUNT*3,
/datum/material/diamond =SMALL_MATERIAL_AMOUNT*5,
)
- build_path = /obj/item/organ/internal/cyberimp/chest/spine
+ build_path = /obj/item/organ/cyberimp/chest/spine
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_HEALTH
)
@@ -603,7 +603,7 @@
/datum/material/glass = SMALL_MATERIAL_AMOUNT*6,
/datum/material/titanium = SMALL_MATERIAL_AMOUNT*3,
)
- build_path = /obj/item/organ/internal/cyberimp/brain/connector
+ build_path = /obj/item/organ/cyberimp/brain/connector
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_MISC
)
@@ -620,7 +620,7 @@
/datum/material/glass =SMALL_MATERIAL_AMOUNT*5,
/datum/material/gold =SMALL_MATERIAL_AMOUNT*5,
)
- build_path = /obj/item/organ/internal/cyberimp/chest/nutriment
+ build_path = /obj/item/organ/cyberimp/chest/nutriment
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_HEALTH
)
@@ -638,7 +638,7 @@
/datum/material/gold =SMALL_MATERIAL_AMOUNT*5,
/datum/material/uranium = SMALL_MATERIAL_AMOUNT*7.5,
)
- build_path = /obj/item/organ/internal/cyberimp/chest/nutriment/plus
+ build_path = /obj/item/organ/cyberimp/chest/nutriment/plus
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_HEALTH
)
@@ -656,7 +656,7 @@
/datum/material/gold =SMALL_MATERIAL_AMOUNT * 3,
/datum/material/uranium =SMALL_MATERIAL_AMOUNT*5,
)
- build_path = /obj/item/organ/internal/cyberimp/chest/reviver
+ build_path = /obj/item/organ/cyberimp/chest/reviver
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_HEALTH
)
@@ -674,7 +674,7 @@
/datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/diamond =HALF_SHEET_MATERIAL_AMOUNT,
)
- build_path = /obj/item/organ/internal/cyberimp/chest/thrusters
+ build_path = /obj/item/organ/cyberimp/chest/thrusters
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY
)
@@ -789,7 +789,7 @@
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
construction_time = 4 SECONDS
materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5)
- build_path = /obj/item/organ/internal/liver/cybernetic
+ build_path = /obj/item/organ/liver/cybernetic
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
)
@@ -800,7 +800,7 @@
desc = "A cybernetic liver."
id = "cybernetic_liver_tier2"
materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5)
- build_path = /obj/item/organ/internal/liver/cybernetic/tier2
+ build_path = /obj/item/organ/liver/cybernetic/tier2
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_2
)
@@ -812,7 +812,7 @@
id = "cybernetic_liver_tier3"
construction_time = 5 SECONDS
materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver=SMALL_MATERIAL_AMOUNT*5)
- build_path = /obj/item/organ/internal/liver/cybernetic/tier3
+ build_path = /obj/item/organ/liver/cybernetic/tier3
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_3
)
@@ -825,7 +825,7 @@
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
construction_time = 4 SECONDS
materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5)
- build_path = /obj/item/organ/internal/heart/cybernetic
+ build_path = /obj/item/organ/heart/cybernetic
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
)
@@ -836,7 +836,7 @@
desc = "A cybernetic heart."
id = "cybernetic_heart_tier2"
materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5)
- build_path = /obj/item/organ/internal/heart/cybernetic/tier2
+ build_path = /obj/item/organ/heart/cybernetic/tier2
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_2
)
@@ -848,7 +848,7 @@
id = "cybernetic_heart_tier3"
construction_time = 5 SECONDS
materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver=SMALL_MATERIAL_AMOUNT*5)
- build_path = /obj/item/organ/internal/heart/cybernetic/tier3
+ build_path = /obj/item/organ/heart/cybernetic/tier3
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_3
)
@@ -865,7 +865,7 @@
/datum/material/titanium = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/diamond = SHEET_MATERIAL_AMOUNT,
)
- build_path = /obj/item/organ/internal/heart/cybernetic/anomalock
+ build_path = /obj/item/organ/heart/cybernetic/anomalock
category = list(
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
)
@@ -878,7 +878,7 @@
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
construction_time = 4 SECONDS
materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5)
- build_path = /obj/item/organ/internal/lungs/cybernetic
+ build_path = /obj/item/organ/lungs/cybernetic
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
)
@@ -889,7 +889,7 @@
desc = "A pair of cybernetic lungs."
id = "cybernetic_lungs_tier2"
materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5)
- build_path = /obj/item/organ/internal/lungs/cybernetic/tier2
+ build_path = /obj/item/organ/lungs/cybernetic/tier2
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_2
)
@@ -901,7 +901,7 @@
id = "cybernetic_lungs_tier3"
construction_time = 5 SECONDS
materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5)
- build_path = /obj/item/organ/internal/lungs/cybernetic/tier3
+ build_path = /obj/item/organ/lungs/cybernetic/tier3
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_3
)
@@ -914,7 +914,7 @@
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
construction_time = 4 SECONDS
materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5)
- build_path = /obj/item/organ/internal/stomach/cybernetic
+ build_path = /obj/item/organ/stomach/cybernetic
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
)
@@ -925,7 +925,7 @@
desc = "A cybernetic stomach."
id = "cybernetic_stomach_tier2"
materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5)
- build_path = /obj/item/organ/internal/stomach/cybernetic/tier2
+ build_path = /obj/item/organ/stomach/cybernetic/tier2
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_2
)
@@ -937,7 +937,7 @@
id = "cybernetic_stomach_tier3"
construction_time = 5 SECONDS
materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5)
- build_path = /obj/item/organ/internal/stomach/cybernetic/tier3
+ build_path = /obj/item/organ/stomach/cybernetic/tier3
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_3
)
@@ -950,7 +950,7 @@
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
construction_time = 3 SECONDS
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*4)
- build_path = /obj/item/organ/internal/ears/cybernetic
+ build_path = /obj/item/organ/ears/cybernetic
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
)
@@ -967,7 +967,7 @@
/datum/material/glass = SMALL_MATERIAL_AMOUNT*5,
/datum/material/silver = SMALL_MATERIAL_AMOUNT*5,
)
- build_path = /obj/item/organ/internal/ears/cybernetic/upgraded
+ build_path = /obj/item/organ/ears/cybernetic/upgraded
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_2
)
@@ -984,7 +984,7 @@
/datum/material/glass = SMALL_MATERIAL_AMOUNT*5,
/datum/material/silver = SMALL_MATERIAL_AMOUNT*5,
)
- build_path = /obj/item/organ/internal/ears/cybernetic/whisper
+ build_path = /obj/item/organ/ears/cybernetic/whisper
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_3
)
@@ -1001,7 +1001,7 @@
/datum/material/glass = SMALL_MATERIAL_AMOUNT*5,
/datum/material/silver = SMALL_MATERIAL_AMOUNT*5,
)
- build_path = /obj/item/organ/internal/ears/cybernetic/xray
+ build_path = /obj/item/organ/ears/cybernetic/xray
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_3
)
@@ -1014,7 +1014,7 @@
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
construction_time = 3 SECONDS
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*4)
- build_path = /obj/item/organ/internal/eyes/robotic/basic
+ build_path = /obj/item/organ/eyes/robotic/basic
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
)
@@ -1023,13 +1023,13 @@
/datum/design/cybernetic_eyes/moth
name = "Basic Cybernetic Moth Eyes"
id = "cybernetic_eyes_moth"
- build_path = /obj/item/organ/internal/eyes/robotic/basic/moth
+ build_path = /obj/item/organ/eyes/robotic/basic/moth
/datum/design/cybernetic_eyes/improved
name = "Cybernetic Eyes"
desc = "A pair of cybernetic eyes."
id = "cybernetic_eyes_improved"
- build_path = /obj/item/organ/internal/eyes/robotic
+ build_path = /obj/item/organ/eyes/robotic
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_2
)
@@ -1038,7 +1038,7 @@
/datum/design/cybernetic_eyes/improved/moth
name = "Cybernetic Moth Eyes"
id = "cybernetic_eyes_improved_moth"
- build_path = /obj/item/organ/internal/eyes/robotic/moth
+ build_path = /obj/item/organ/eyes/robotic/moth
/datum/design/cyberimp_welding
name = "Welding Shield Eyes"
@@ -1047,7 +1047,7 @@
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
construction_time = 4 SECONDS
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*4)
- build_path = /obj/item/organ/internal/eyes/robotic/shield
+ build_path = /obj/item/organ/eyes/robotic/shield
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_3
)
@@ -1056,7 +1056,7 @@
/datum/design/cyberimp_welding/moth
name = "Welding Shield Moth Eyes"
id = "ci-welding-moth"
- build_path = /obj/item/organ/internal/eyes/robotic/shield/moth
+ build_path = /obj/item/organ/eyes/robotic/shield/moth
/datum/design/cyberimp_gloweyes
name = "Luminescent Eyes"
@@ -1065,7 +1065,7 @@
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
construction_time = 4 SECONDS
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT)
- build_path = /obj/item/organ/internal/eyes/robotic/glow
+ build_path = /obj/item/organ/eyes/robotic/glow
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_3
)
@@ -1074,7 +1074,7 @@
/datum/design/cyberimp_gloweyes/moth
name = "Luminescent Moth Eyes"
id = "ci-gloweyes-moth"
- build_path = /obj/item/organ/internal/eyes/robotic/glow/moth
+ build_path = /obj/item/organ/eyes/robotic/glow/moth
/////////////////////
///Surgery Designs///
diff --git a/code/modules/research/designs/wiremod_designs.dm b/code/modules/research/designs/wiremod_designs.dm
index e848356359dac..418dec186e922 100644
--- a/code/modules/research/designs/wiremod_designs.dm
+++ b/code/modules/research/designs/wiremod_designs.dm
@@ -347,6 +347,16 @@
id = "comp_ntnet_send"
build_path = /obj/item/circuit_component/ntnet_send
+/datum/design/component/nfc_send
+ name = "NFC Transmitter"
+ id = "comp_nfc_send"
+ build_path = /obj/item/circuit_component/nfc_send
+
+/datum/design/component/nfc_receive
+ name = "NFC Receiver"
+ id = "comp_nfc_receive"
+ build_path = /obj/item/circuit_component/nfc_receive
+
/datum/design/component/list_literal/ntnet_send
name = "NTNet Transmitter List Literal"
id = "comp_ntnet_send_list_literal"
diff --git a/code/modules/research/techweb/nodes/circuit_nodes.dm b/code/modules/research/techweb/nodes/circuit_nodes.dm
index e654abbf4dffb..554e9997c0457 100644
--- a/code/modules/research/techweb/nodes/circuit_nodes.dm
+++ b/code/modules/research/techweb/nodes/circuit_nodes.dm
@@ -59,6 +59,8 @@
"comp_ntnet_receive",
"comp_ntnet_send",
"comp_ntnet_send_list_literal",
+ "comp_nfc_send",
+ "comp_nfc_receive",
"comp_pinpointer",
"comp_pressuresensor",
"comp_radio",
diff --git a/code/modules/research/techweb/nodes/cyborg_nodes.dm b/code/modules/research/techweb/nodes/cyborg_nodes.dm
index 768967822bb4b..13725f62a4335 100644
--- a/code/modules/research/techweb/nodes/cyborg_nodes.dm
+++ b/code/modules/research/techweb/nodes/cyborg_nodes.dm
@@ -66,6 +66,7 @@
"borg_upgrade_service_apparatus",
"borg_upgrade_drink_apparatus",
"borg_upgrade_service_cookbook",
+ "borg_upgrade_botany",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
announce_channels = list(RADIO_CHANNEL_SCIENCE)
diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm
index 6cf8d2745ce6c..a2c5698fbb192 100644
--- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm
+++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm
@@ -75,7 +75,11 @@ Regenerative extracts:
var/obj/structure/closet/C = new /obj/structure/closet(target.loc)
C.name = "slimy closet"
C.desc = "Looking closer, it seems to be made of a sort of solid, opaque, metal-like goo."
- target.forceMove(C)
+ if(target.mob_size > C.max_mob_size) //Prevents capturing megafauna or other large mobs in the closets
+ C.bust_open()
+ C.visible_message(span_warning("[target] is too big, and immediately breaks \the [C.name] open!"))
+ else //This can't be allowed to actually happen to the too-big mobs or it breaks some actions
+ target.forceMove(C)
/obj/item/slimecross/regenerative/yellow
colour = SLIME_TYPE_YELLOW
@@ -151,6 +155,8 @@ Regenerative extracts:
old_location.visible_message(span_warning("[target] disappears in a shower of sparks!"))
to_chat(target, span_danger("The milky goo teleports you somewhere it remembers!"))
+ if(HAS_TRAIT(target, TRAIT_NO_TELEPORT))
+ old_location.visible_message(span_warning("[target] sparks briefly, but is prevented from teleporting!"))
/obj/item/slimecross/regenerative/bluespace/Initialize(mapload)
. = ..()
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index 1fc21eac65fae..594163d153bcc 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -898,13 +898,16 @@
icon = 'icons/obj/medical/chemical.dmi'
icon_state = "potyellow"
-/obj/item/slimepotion/speed/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
+/obj/item/slimepotion/speed/interact_with_atom(obj/interacting_with, mob/living/user, list/modifiers)
. = ..()
if(. & ITEM_INTERACT_ANY_BLOCKER)
return .
if(!isobj(interacting_with))
to_chat(user, span_warning("The potion can only be used on objects!"))
return ITEM_INTERACT_BLOCKING
+ if(HAS_TRAIT(interacting_with, TRAIT_SPEED_POTIONED))
+ to_chat(user, span_warning("[interacting_with] can't be made any faster!"))
+ return ITEM_INTERACT_BLOCKING
if(SEND_SIGNAL(interacting_with, COMSIG_SPEED_POTION_APPLIED, src, user) & SPEED_POTION_STOP)
return ITEM_INTERACT_SUCCESS
if(isitem(interacting_with))
@@ -912,13 +915,15 @@
if(apply_to.slowdown <= 0 || (apply_to.item_flags & IMMUTABLE_SLOW))
if(interacting_with.atom_storage)
return NONE // lets us put the potion in the bag
- to_chat(user, span_warning("The [apply_to] can't be made any faster!"))
+ to_chat(user, span_warning("[apply_to] can't be made any faster!"))
return ITEM_INTERACT_BLOCKING
apply_to.slowdown = 0
to_chat(user, span_notice("You slather the red gunk over the [interacting_with], making it faster."))
interacting_with.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
interacting_with.add_atom_colour(COLOR_RED, FIXED_COLOUR_PRIORITY)
+ interacting_with.drag_slowdown = 0
+ ADD_TRAIT(interacting_with, TRAIT_SPEED_POTIONED, SLIME_POTION_TRAIT)
qdel(src)
return ITEM_INTERACT_SUCCESS
diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm
index 88272f6727659..3eec11d0b40f4 100644
--- a/code/modules/shuttle/navigation_computer.dm
+++ b/code/modules/shuttle/navigation_computer.dm
@@ -59,6 +59,20 @@
else
QDEL_NULL(my_port)
+/obj/machinery/computer/camera_advanced/shuttle_docker/vv_edit_var(vname, vval)
+ . = ..()
+ if(vname in list(NAMEOF(src, view_range), NAMEOF(src, x_offset), NAMEOF(src, y_offset), NAMEOF(src, see_hidden)))
+ refresh_eye()
+
+/// Destroys the eyeobj of this console, safely refreshing it if the console is currently being used.
+/obj/machinery/computer/camera_advanced/shuttle_docker/proc/refresh_eye()
+ var/mob/living/user = current_user
+ if(user)
+ remove_eye_control(user)
+ QDEL_NULL(eyeobj)
+ if(user)
+ attack_hand(user)
+
/// "Initializes" any default port ids we have, done so add_jumpable_port can be a proper setter
/obj/machinery/computer/camera_advanced/shuttle_docker/proc/set_init_ports()
var/list/init_ports = jump_to_ports.Copy()
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index bf6e81a955760..b853d949d464c 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -73,7 +73,7 @@
/obj/docking_port/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0)
return
-/obj/docking_port/singularity_pull()
+/obj/docking_port/singularity_pull(atom/singularity, current_size)
return
/obj/docking_port/singularity_act()
diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm
index 40e0ac897fa13..483af18cda11d 100644
--- a/code/modules/spells/spell.dm
+++ b/code/modules/spells/spell.dm
@@ -50,7 +50,6 @@
active_overlay_icon_state = "bg_spell_border_active_red"
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_PHASED
panel = "Spells"
- melee_cooldown_time = 0 SECONDS
/// The sound played on cast.
var/sound = null
diff --git a/code/modules/spells/spell_types/conjure/the_traps.dm b/code/modules/spells/spell_types/conjure/the_traps.dm
index e9717a1325329..bd25d163a56e1 100644
--- a/code/modules/spells/spell_types/conjure/the_traps.dm
+++ b/code/modules/spells/spell_types/conjure/the_traps.dm
@@ -18,6 +18,7 @@
)
summon_lifespan = 5 MINUTES
summon_amount = 5
+ summon_respects_density = TRUE
/// The amount of charges the traps spawn with.
var/trap_charges = 1
diff --git a/code/modules/spells/spell_types/self/lichdom.dm b/code/modules/spells/spell_types/self/lichdom.dm
index 19ad55d9eee45..8aa86d63a1b48 100644
--- a/code/modules/spells/spell_types/self/lichdom.dm
+++ b/code/modules/spells/spell_types/self/lichdom.dm
@@ -62,7 +62,7 @@
if(iscarbon(cast_on))
var/mob/living/carbon/carbon_cast_on = cast_on
- var/obj/item/organ/internal/brain/lich_brain = carbon_cast_on.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/lich_brain = carbon_cast_on.get_organ_slot(ORGAN_SLOT_BRAIN)
if(lich_brain) // This prevents MMIs being used to stop lich revives
lich_brain.organ_flags &= ~ORGAN_VITAL
lich_brain.decoy_override = TRUE
diff --git a/code/modules/spells/spell_types/self/spacetime_distortion.dm b/code/modules/spells/spell_types/self/spacetime_distortion.dm
index 976d83e8a30a8..80cb605cb472f 100644
--- a/code/modules/spells/spell_types/self/spacetime_distortion.dm
+++ b/code/modules/spells/spell_types/self/spacetime_distortion.dm
@@ -115,7 +115,7 @@
/obj/effect/cross_action/singularity_act()
return
-/obj/effect/cross_action/singularity_pull()
+/obj/effect/cross_action/singularity_pull(atom/singularity, current_size)
return
/obj/effect/cross_action/spacetime_dist/Initialize(mapload, flags = MAGIC_RESISTANCE)
diff --git a/code/modules/station_goals/vault_mutation.dm b/code/modules/station_goals/vault_mutation.dm
index c5a77c62775ba..80e539472b343 100644
--- a/code/modules/station_goals/vault_mutation.dm
+++ b/code/modules/station_goals/vault_mutation.dm
@@ -109,7 +109,7 @@
/datum/mutation/human/plasmocile/on_acquiring(mob/living/carbon/human/acquirer)
. = ..()
- var/obj/item/organ/internal/lungs/improved_lungs = acquirer.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/improved_lungs = acquirer.get_organ_slot(ORGAN_SLOT_LUNGS)
ADD_TRAIT(owner, TRAIT_VIRUSIMMUNE, GENETIC_MUTATION)
if(improved_lungs)
apply_buff(improved_lungs)
@@ -118,7 +118,7 @@
/datum/mutation/human/plasmocile/on_losing(mob/living/carbon/human/owner)
. = ..()
- var/obj/item/organ/internal/lungs/improved_lungs = owner.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/improved_lungs = owner.get_organ_slot(ORGAN_SLOT_LUNGS)
REMOVE_TRAIT(owner, TRAIT_VIRUSIMMUNE, GENETIC_MUTATION)
UnregisterSignal(owner, COMSIG_CARBON_LOSE_ORGAN)
UnregisterSignal(owner, COMSIG_CARBON_GAIN_ORGAN)
@@ -128,20 +128,20 @@
/datum/mutation/human/plasmocile/proc/remove_modification(mob/source, obj/item/organ/old_organ)
SIGNAL_HANDLER
- if(istype(old_organ, /obj/item/organ/internal/lungs))
+ if(istype(old_organ, /obj/item/organ/lungs))
remove_buff(old_organ)
/datum/mutation/human/plasmocile/proc/reapply_modification(mob/source, obj/item/organ/new_organ)
SIGNAL_HANDLER
- if(istype(new_organ, /obj/item/organ/internal/lungs))
+ if(istype(new_organ, /obj/item/organ/lungs))
apply_buff(new_organ)
-/datum/mutation/human/plasmocile/proc/apply_buff(obj/item/organ/internal/lungs/our_lungs)
+/datum/mutation/human/plasmocile/proc/apply_buff(obj/item/organ/lungs/our_lungs)
our_lungs.plas_breath_dam_min *= 0
our_lungs.plas_breath_dam_max *= 0
-/datum/mutation/human/plasmocile/proc/remove_buff(obj/item/organ/internal/lungs/our_lungs)
+/datum/mutation/human/plasmocile/proc/remove_buff(obj/item/organ/lungs/our_lungs)
our_lungs.plas_breath_dam_min = initial(our_lungs.plas_breath_dam_min)
our_lungs.plas_breath_dam_max = initial(our_lungs.plas_breath_dam_max)
diff --git a/code/modules/surgery/advanced/bioware/cortex_folding.dm b/code/modules/surgery/advanced/bioware/cortex_folding.dm
index 2e20f0906acdd..cd7d55f664c47 100644
--- a/code/modules/surgery/advanced/bioware/cortex_folding.dm
+++ b/code/modules/surgery/advanced/bioware/cortex_folding.dm
@@ -30,7 +30,7 @@
)
/datum/surgery/advanced/bioware/cortex_folding/can_start(mob/user, mob/living/carbon/target)
- var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
if(!target_brain)
return FALSE
return ..()
diff --git a/code/modules/surgery/advanced/bioware/cortex_imprint.dm b/code/modules/surgery/advanced/bioware/cortex_imprint.dm
index 27a75a261674d..4f65f305df36a 100644
--- a/code/modules/surgery/advanced/bioware/cortex_imprint.dm
+++ b/code/modules/surgery/advanced/bioware/cortex_imprint.dm
@@ -31,7 +31,7 @@
)
/datum/surgery/advanced/bioware/cortex_imprint/can_start(mob/user, mob/living/carbon/target)
- var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
if(!target_brain)
return FALSE
return ..()
diff --git a/code/modules/surgery/advanced/brainwashing.dm b/code/modules/surgery/advanced/brainwashing.dm
index 402a9aa73e19f..fe2af113f4d12 100644
--- a/code/modules/surgery/advanced/brainwashing.dm
+++ b/code/modules/surgery/advanced/brainwashing.dm
@@ -35,7 +35,7 @@
/datum/surgery/advanced/brainwashing/can_start(mob/user, mob/living/carbon/target)
if(!..())
return FALSE
- var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
if(!target_brain)
return FALSE
return TRUE
diff --git a/code/modules/surgery/advanced/lobotomy.dm b/code/modules/surgery/advanced/lobotomy.dm
index 5c528acae52fc..cd433d559819a 100644
--- a/code/modules/surgery/advanced/lobotomy.dm
+++ b/code/modules/surgery/advanced/lobotomy.dm
@@ -28,7 +28,7 @@
. = ..()
if(!.)
return FALSE
- var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
if(!target_brain)
return FALSE
return TRUE
@@ -102,7 +102,7 @@
return ..()
/datum/surgery_step/lobotomize/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
- var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
if(target_brain)
display_results(
user,
diff --git a/code/modules/surgery/advanced/necrotic_revival.dm b/code/modules/surgery/advanced/necrotic_revival.dm
index 63350139e07bd..a4512e9378e42 100644
--- a/code/modules/surgery/advanced/necrotic_revival.dm
+++ b/code/modules/surgery/advanced/necrotic_revival.dm
@@ -13,7 +13,7 @@
/datum/surgery/advanced/necrotic_revival/can_start(mob/user, mob/living/carbon/target)
. = ..()
- var/obj/item/organ/internal/zombie_infection/z_infection = target.get_organ_slot(ORGAN_SLOT_ZOMBIE)
+ var/obj/item/organ/zombie_infection/z_infection = target.get_organ_slot(ORGAN_SLOT_ZOMBIE)
if(z_infection)
return FALSE
@@ -46,6 +46,6 @@
)
display_pain(target, "Your head goes totally numb for a moment, the pain is overwhelming!")
if(!target.get_organ_slot(ORGAN_SLOT_ZOMBIE))
- var/obj/item/organ/internal/zombie_infection/z_infection = new()
+ var/obj/item/organ/zombie_infection/z_infection = new()
z_infection.Insert(target)
return ..()
diff --git a/code/modules/surgery/advanced/pacification.dm b/code/modules/surgery/advanced/pacification.dm
index 6c2d990cb9624..899bd6a436ce8 100644
--- a/code/modules/surgery/advanced/pacification.dm
+++ b/code/modules/surgery/advanced/pacification.dm
@@ -26,7 +26,7 @@
/datum/surgery/advanced/pacify/can_start(mob/user, mob/living/carbon/target)
. = ..()
- var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
if(!target_brain)
return FALSE
diff --git a/code/modules/surgery/advanced/wingreconstruction.dm b/code/modules/surgery/advanced/wingreconstruction.dm
index 21e34efc2d76d..a3931dd4e5e96 100644
--- a/code/modules/surgery/advanced/wingreconstruction.dm
+++ b/code/modules/surgery/advanced/wingreconstruction.dm
@@ -12,8 +12,8 @@
/datum/surgery/advanced/wing_reconstruction/can_start(mob/user, mob/living/carbon/target)
if(!istype(target))
return FALSE
- var/obj/item/organ/external/wings/moth/wings = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
- if(!istype(wings, /obj/item/organ/external/wings/moth))
+ var/obj/item/organ/wings/moth/wings = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
+ if(!istype(wings, /obj/item/organ/wings/moth))
return FALSE
return ..() && wings?.burnt
@@ -48,11 +48,11 @@
span_notice("[user] completes the surgery on [target]'s wings."),
)
display_pain(target, "You can feel your wings again!")
- var/obj/item/organ/external/wings/moth/wings = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
- if(istype(wings, /obj/item/organ/external/wings/moth)) //make sure we only heal moth wings.
+ var/obj/item/organ/wings/moth/wings = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
+ if(istype(wings, /obj/item/organ/wings/moth)) //make sure we only heal moth wings.
wings.heal_wings(user, ALL)
- var/obj/item/organ/external/antennae/antennae = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_ANTENNAE) //i mean we might aswell heal their antennae too
+ var/obj/item/organ/antennae/antennae = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_ANTENNAE) //i mean we might aswell heal their antennae too
antennae?.heal_antennae(user, ALL)
human_target.update_body_parts()
diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm
index 5d22b77c87d78..df574e8b3be9e 100644
--- a/code/modules/surgery/bodyparts/_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/_bodyparts.dm
@@ -251,6 +251,8 @@
owner = null
+ QDEL_LAZYLIST(scars)
+
for(var/atom/movable/movable in contents)
qdel(movable)
diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm
index fd62d0292f35f..f4724db3b6968 100644
--- a/code/modules/surgery/bodyparts/dismemberment.dm
+++ b/code/modules/surgery/bodyparts/dismemberment.dm
@@ -70,7 +70,8 @@
if(org_zone != BODY_ZONE_CHEST)
continue
organ.Remove(chest_owner)
- organ.forceMove(chest_owner.loc)
+ if(chest_owner.loc)
+ organ.forceMove(chest_owner.loc)
. += organ
if(cavity_item)
@@ -192,14 +193,13 @@
/obj/item/bodypart/arm/drop_limb(special, dismembered, move_to_floor = TRUE)
var/mob/living/carbon/arm_owner = owner
-
if(special || !arm_owner)
return ..()
-
if(arm_owner.hand_bodyparts[held_index] == src)
// We only want to do this if the limb being removed is the active hand part.
// This catches situations where limbs are "hot-swapped" such as augmentations and roundstart prosthetics.
arm_owner.dropItemToGround(arm_owner.get_item_for_held_index(held_index), 1)
+ . = ..()
if(arm_owner.handcuffed)
arm_owner.handcuffed.forceMove(drop_location())
arm_owner.handcuffed.dropped(arm_owner)
@@ -208,21 +208,22 @@
if(arm_owner.hud_used)
var/atom/movable/screen/inventory/hand/associated_hand = arm_owner.hud_used.hand_slots["[held_index]"]
associated_hand?.update_appearance()
- . = ..()
if(arm_owner.num_hands == 0)
- arm_owner.dropItemToGround(arm_owner.gloves, TRUE)
+ arm_owner.dropItemToGround(arm_owner.gloves, force = TRUE)
arm_owner.update_worn_gloves() //to remove the bloody hands overlay
/obj/item/bodypart/leg/drop_limb(special, dismembered, move_to_floor = TRUE)
- if(owner && !special)
- if(owner.legcuffed)
- owner.legcuffed.forceMove(owner.drop_location()) //At this point bodypart is still in nullspace
- owner.legcuffed.dropped(owner)
- owner.legcuffed = null
- owner.update_worn_legcuffs()
- if(owner.shoes)
- owner.dropItemToGround(owner.shoes, TRUE)
- return ..()
+ var/mob/living/carbon/leg_owner = owner
+ . = ..()
+ if(special || !leg_owner)
+ return
+ if(leg_owner.legcuffed)
+ leg_owner.legcuffed.forceMove(drop_location())
+ leg_owner.legcuffed.dropped(leg_owner)
+ leg_owner.legcuffed = null
+ leg_owner.update_worn_legcuffs()
+ if(leg_owner.shoes)
+ leg_owner.dropItemToGround(leg_owner.shoes, force = TRUE)
/obj/item/bodypart/head/drop_limb(special, dismembered, move_to_floor = TRUE)
if(!special)
diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm
index cce8935f80349..0f1a5203ea5bf 100644
--- a/code/modules/surgery/bodyparts/head.dm
+++ b/code/modules/surgery/bodyparts/head.dm
@@ -43,6 +43,8 @@
var/hair_alpha = 255
/// Is the hair currently hidden by something?
var/hair_hidden = FALSE
+ /// Lazy initialized hashset of all hair masks that should be applied
+ var/list/hair_masks
///Facial hair style
var/facial_hairstyle = "Shaved"
@@ -111,7 +113,7 @@
/obj/item/bodypart/head/examine(mob/user)
. = ..()
if(show_organs_on_examine && IS_ORGANIC_LIMB(src))
- var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in src
+ var/obj/item/organ/brain/brain = locate(/obj/item/organ/brain) in src
if(!brain)
. += span_info("The brain has been removed from [src].")
else if(brain.suicided || (brain.brainmob && HAS_TRAIT(brain.brainmob, TRAIT_SUICIDED)))
@@ -128,13 +130,13 @@
else
. += span_info("It's completely lifeless.")
- if(!(locate(/obj/item/organ/internal/eyes) in src))
+ if(!(locate(/obj/item/organ/eyes) in src))
. += span_info("[real_name]'s eyes have been removed.")
- if(!(locate(/obj/item/organ/internal/ears) in src))
+ if(!(locate(/obj/item/organ/ears) in src))
. += span_info("[real_name]'s ears have been removed.")
- if(!(locate(/obj/item/organ/internal/tongue) in src))
+ if(!(locate(/obj/item/organ/tongue) in src))
. += span_info("[real_name]'s tongue has been removed.")
/obj/item/bodypart/head/can_dismember(obj/item/item)
@@ -149,7 +151,7 @@
/obj/item/bodypart/head/drop_organs(mob/user, violent_removal)
if(user)
user.visible_message(span_warning("[user] saws [src] open and pulls out a brain!"), span_notice("You saw [src] open and pull out a brain."))
- var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in src
+ var/obj/item/organ/brain/brain = locate(/obj/item/organ/brain) in src
if(brain && violent_removal && prob(90)) //ghetto surgery can damage the brain.
to_chat(user, span_warning("[brain] was damaged in the process!"))
brain.set_organ_damage(brain.maxHealth)
@@ -174,7 +176,7 @@
. += get_hair_and_lips_icon(dropped)
// We need to get the eyes if we are dropped (ugh)
if(dropped)
- var/obj/item/organ/internal/eyes/eyes = locate(/obj/item/organ/internal/eyes) in src
+ var/obj/item/organ/eyes/eyes = locate(/obj/item/organ/eyes) in src
// This is a bit of copy/paste code from eyes.dm:generate_body_overlay
if(eyes?.eye_icon_state && (head_flags & HEAD_EYESPRITES))
var/image/eye_left = image('icons/mob/human/human_face.dmi', "[eyes.eye_icon_state]_l", -BODY_LAYER, SOUTH)
diff --git a/code/modules/surgery/bodyparts/head_hair_and_lips.dm b/code/modules/surgery/bodyparts/head_hair_and_lips.dm
index 7f81a615f3555..3dcd42d61c9fb 100644
--- a/code/modules/surgery/bodyparts/head_hair_and_lips.dm
+++ b/code/modules/surgery/bodyparts/head_hair_and_lips.dm
@@ -8,12 +8,15 @@
//HIDDEN CHECKS START
hair_hidden = FALSE
facial_hair_hidden = FALSE
+ LAZYNULL(hair_masks)
if(human_head_owner)
for(var/obj/item/worn_item in human_head_owner.get_equipped_items())
if(worn_item.flags_inv & HIDEHAIR)
hair_hidden = TRUE
if(worn_item.flags_inv & HIDEFACIALHAIR)
facial_hair_hidden = TRUE
+ if(worn_item.hair_mask)
+ LAZYSET(hair_masks, worn_item.hair_mask, TRUE)
//invisibility and husk stuff
if(HAS_TRAIT(human_head_owner, TRAIT_INVISIBLE_MAN) || HAS_TRAIT(human_head_owner, TRAIT_HUSK))
hair_hidden = TRUE
@@ -34,12 +37,12 @@
else
show_eyeless = FALSE
else
- if(!hair_hidden && !(locate(/obj/item/organ/internal/brain) in src))
+ if(!hair_hidden && !(locate(/obj/item/organ/brain) in src))
show_debrained = TRUE
else
show_debrained = FALSE
- if(!(locate(/obj/item/organ/internal/eyes) in src))
+ if(!(locate(/obj/item/organ/eyes) in src))
show_eyeless = TRUE
else
show_eyeless = FALSE
@@ -99,15 +102,24 @@
var/facial_hair_gradient_style = gradient_styles[GRADIENT_FACIAL_HAIR_KEY]
if(facial_hair_gradient_style != "None")
var/facial_hair_gradient_color = gradient_colors[GRADIENT_FACIAL_HAIR_KEY]
- var/image/facial_hair_gradient_overlay = get_gradient_overlay(sprite_accessory.icon, sprite_accessory.icon_state, -HAIR_LAYER, SSaccessories.facial_hair_gradients_list[facial_hair_gradient_style], facial_hair_gradient_color, image_dir)
+ var/image/facial_hair_gradient_overlay = get_gradient_overlay(icon(sprite_accessory.icon, sprite_accessory.icon_state), -HAIR_LAYER, SSaccessories.facial_hair_gradients_list[facial_hair_gradient_style], facial_hair_gradient_color, image_dir)
. += facial_hair_gradient_overlay
var/image/hair_overlay
if(!(show_debrained && (head_flags & HEAD_DEBRAIN)) && !hair_hidden && hairstyle && (head_flags & HEAD_HAIR))
var/datum/sprite_accessory/hair/hair_sprite_accessory = SSaccessories.hairstyles_list[hairstyle]
if(hair_sprite_accessory)
+ var/icon/base_icon
+ if(LAZYLEN(hair_masks))
+ base_icon = icon(hair_sprite_accessory.icon, hair_sprite_accessory.icon_state)
+ for(var/mask in hair_masks)
+ var/icon/blend_with = icon('icons/mob/human/hair_masks.dmi', mask)
+ blend_with.Shift(SOUTH, hair_sprite_accessory.y_offset)
+ base_icon.Blend(blend_with, ICON_ADD)
+ else
+ base_icon = icon(hair_sprite_accessory.icon, hair_sprite_accessory.icon_state)
//Overlay
- hair_overlay = image(hair_sprite_accessory.icon, hair_sprite_accessory.icon_state, -HAIR_LAYER, image_dir)
+ hair_overlay = image(base_icon, layer=-HAIR_LAYER, dir=image_dir)
hair_overlay.alpha = hair_alpha
hair_overlay.pixel_y = hair_sprite_accessory.y_offset
//Emissive blocker
@@ -120,7 +132,7 @@
var/hair_gradient_style = gradient_styles[GRADIENT_HAIR_KEY]
if(hair_gradient_style != "None")
var/hair_gradient_color = gradient_colors[GRADIENT_HAIR_KEY]
- var/image/hair_gradient_overlay = get_gradient_overlay(hair_sprite_accessory.icon, hair_sprite_accessory.icon_state, -HAIR_LAYER, SSaccessories.hair_gradients_list[hair_gradient_style], hair_gradient_color, image_dir)
+ var/image/hair_gradient_overlay = get_gradient_overlay(base_icon, -HAIR_LAYER, SSaccessories.hair_gradients_list[hair_gradient_style], hair_gradient_color, image_dir)
hair_gradient_overlay.pixel_y = hair_sprite_accessory.y_offset
. += hair_gradient_overlay
@@ -184,12 +196,12 @@
return eyeless_overlay
/// Returns an appropriate hair/facial hair gradient overlay
-/obj/item/bodypart/head/proc/get_gradient_overlay(file, icon, layer, datum/sprite_accessory/gradient, grad_color, image_dir)
+/obj/item/bodypart/head/proc/get_gradient_overlay(icon/base_icon, layer, datum/sprite_accessory/gradient, grad_color, image_dir)
RETURN_TYPE(/mutable_appearance)
var/mutable_appearance/gradient_overlay = mutable_appearance(layer = layer)
var/icon/temp = icon(gradient.icon, gradient.icon_state, image_dir)
- var/icon/temp_hair = icon(file, icon, image_dir)
+ var/icon/temp_hair = icon(base_icon, dir=image_dir)
temp.Blend(temp_hair, ICON_ADD)
gradient_overlay.icon = temp
gradient_overlay.color = grad_color
diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm
index c94bd0db701f4..25f66f40af9a8 100644
--- a/code/modules/surgery/bodyparts/parts.dm
+++ b/code/modules/surgery/bodyparts/parts.dm
@@ -35,7 +35,7 @@
/// Offset to apply to equipment worn on the neck
var/datum/worn_feature_offset/worn_neck_offset
/// Which functional (i.e. flightpotion) wing types (if any) does this bodypart support? If count is >1 a radial menu is used to choose between all icons in list
- var/list/wing_types = list(/obj/item/organ/external/wings/functional/angel)
+ var/list/wing_types = list(/obj/item/organ/wings/functional/angel)
/obj/item/bodypart/chest/forced_removal(dismembered, special, move_to_floor)
var/mob/living/carbon/old_owner = owner
@@ -74,7 +74,7 @@
if(!ishuman(owner))
return null
var/mob/living/carbon/human/human_owner = owner
- var/obj/item/organ/external/tail/tail = human_owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ var/obj/item/organ/tail/tail = human_owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
if(tail)
return tail.get_butt_sprite()
diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm
index 738b3ce97ac3b..d9e25302ad7c1 100644
--- a/code/modules/surgery/bodyparts/robot_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm
@@ -212,7 +212,7 @@
robotic_emp_paralyze_damage_percent_threshold = 0.6
- wing_types = list(/obj/item/organ/external/wings/functional/robotic)
+ wing_types = list(/obj/item/organ/wings/functional/robotic)
var/wired = FALSE
var/obj/item/stock_parts/power_store/cell = null
diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm
index c5cc96c31377f..4d67622818f1b 100644
--- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm
@@ -10,7 +10,7 @@
icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi'
limb_id = SPECIES_LIZARD
is_dimorphic = TRUE
- wing_types = list(/obj/item/organ/external/wings/functional/dragon)
+ wing_types = list(/obj/item/organ/wings/functional/dragon)
/obj/item/bodypart/chest/lizard/get_butt_sprite()
return icon('icons/mob/butts.dmi', BUTT_SPRITE_LIZARD)
diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm
index 3e0561154389e..d5d44b1f1f1b8 100644
--- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm
@@ -96,7 +96,7 @@
is_dimorphic = TRUE
dmg_overlay_type = null
burn_modifier = 0.5 // = 1/2x generic burn damage
- wing_types = list(/obj/item/organ/external/wings/functional/slime)
+ wing_types = list(/obj/item/organ/wings/functional/slime)
/obj/item/bodypart/chest/jelly/get_butt_sprite()
return icon('icons/mob/butts.dmi', BUTT_SPRITE_SLIME)
@@ -260,7 +260,7 @@
limb_id = SPECIES_FLYPERSON
is_dimorphic = TRUE
should_draw_greyscale = FALSE
- wing_types = list(/obj/item/organ/external/wings/functional/fly)
+ wing_types = list(/obj/item/organ/wings/functional/fly)
bodypart_traits = list(TRAIT_TACKLING_FRAIL_ATTACKER)
/obj/item/bodypart/arm/left/fly
@@ -337,7 +337,7 @@
should_draw_greyscale = FALSE
dmg_overlay_type = null
bodypart_flags = BODYPART_UNHUSKABLE
- wing_types = list(/obj/item/organ/external/wings/functional/skeleton)
+ wing_types = list(/obj/item/organ/wings/functional/skeleton)
/obj/item/bodypart/arm/left/skeleton
biological_state = (BIO_BONE|BIO_JOINTED)
@@ -503,7 +503,7 @@
limb_id = SPECIES_GOLEM
should_draw_greyscale = FALSE
dmg_overlay_type = null
- bodypart_traits = list(TRAIT_CHUNKYFINGERS, TRAIT_FIST_MINING)
+ bodypart_traits = list(TRAIT_CHUNKYFINGERS, TRAIT_FIST_MINING, TRAIT_BOULDER_BREAKER)
unarmed_damage_low = 5
unarmed_damage_high = 14
unarmed_effectiveness = 20
@@ -537,7 +537,7 @@
limb_id = SPECIES_GOLEM
should_draw_greyscale = FALSE
dmg_overlay_type = null
- bodypart_traits = list(TRAIT_CHUNKYFINGERS, TRAIT_FIST_MINING)
+ bodypart_traits = list(TRAIT_CHUNKYFINGERS, TRAIT_FIST_MINING, TRAIT_BOULDER_BREAKER)
unarmed_damage_low = 5
unarmed_damage_high = 14
unarmed_effectiveness = 20
diff --git a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm
index 1a4d87e0c39cc..e1133643a3a62 100644
--- a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm
@@ -16,7 +16,7 @@
limb_id = SPECIES_MOTH
is_dimorphic = TRUE
should_draw_greyscale = FALSE
- wing_types = list(/obj/item/organ/external/wings/functional/moth/megamoth, /obj/item/organ/external/wings/functional/moth/mothra)
+ wing_types = list(/obj/item/organ/wings/functional/moth/megamoth, /obj/item/organ/wings/functional/moth/mothra)
// bodypart_traits = list(TRAIT_TACKLING_WINGED_ATTACKER) // DOPPLER EDIT REMOVAL
/obj/item/bodypart/chest/moth/get_butt_sprite()
diff --git a/code/modules/surgery/coronary_bypass.dm b/code/modules/surgery/coronary_bypass.dm
index c2cc3f551acd2..1c5012d7580b9 100644
--- a/code/modules/surgery/coronary_bypass.dm
+++ b/code/modules/surgery/coronary_bypass.dm
@@ -26,7 +26,7 @@
)
/datum/surgery/coronary_bypass/can_start(mob/user, mob/living/carbon/target)
- var/obj/item/organ/internal/heart/target_heart = target.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/target_heart = target.get_organ_slot(ORGAN_SLOT_HEART)
if(isnull(target_heart) || target_heart.damage < 60 || target_heart.operated)
return FALSE
return ..()
@@ -134,7 +134,7 @@
/datum/surgery_step/coronary_bypass/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
target.setOrganLoss(ORGAN_SLOT_HEART, 60)
- var/obj/item/organ/internal/heart/target_heart = target.get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/target_heart = target.get_organ_slot(ORGAN_SLOT_HEART)
if(target_heart) //slightly worrying if we lost our heart mid-operation, but that's life
target_heart.operated = TRUE
if(target_heart.organ_flags & ORGAN_EMP) //If our organ is failing due to an EMP, fix that
diff --git a/code/modules/surgery/ear_surgery.dm b/code/modules/surgery/ear_surgery.dm
index 4333b00913ba3..9e363e2ae9b23 100644
--- a/code/modules/surgery/ear_surgery.dm
+++ b/code/modules/surgery/ear_surgery.dm
@@ -36,7 +36,7 @@
display_pain(target, "You feel a dizzying pain in your head!")
/datum/surgery_step/fix_ears/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
- var/obj/item/organ/internal/ears/target_ears = target.get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/target_ears = target.get_organ_slot(ORGAN_SLOT_EARS)
display_results(
user,
target,
@@ -50,7 +50,7 @@
return ..()
/datum/surgery_step/fix_ears/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
- if(target.get_organ_by_type(/obj/item/organ/internal/brain))
+ if(target.get_organ_by_type(/obj/item/organ/brain))
display_results(
user,
target,
diff --git a/code/modules/surgery/eye_surgery.dm b/code/modules/surgery/eye_surgery.dm
index fb759baca8771..3a0f71400917b 100644
--- a/code/modules/surgery/eye_surgery.dm
+++ b/code/modules/surgery/eye_surgery.dm
@@ -34,7 +34,7 @@
display_pain(target, "You feel a stabbing pain in your eyes!")
/datum/surgery_step/fix_eyes/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
- var/obj/item/organ/internal/eyes/target_eyes = target.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/target_eyes = target.get_organ_slot(ORGAN_SLOT_EYES)
user.visible_message(span_notice("[user] successfully fixes [target]'s eyes!"), span_notice("You succeed in fixing [target]'s eyes."))
display_results(
user,
@@ -50,7 +50,7 @@
return ..()
/datum/surgery_step/fix_eyes/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
- if(target.get_organ_by_type(/obj/item/organ/internal/brain))
+ if(target.get_organ_by_type(/obj/item/organ/brain))
display_results(
user,
target,
diff --git a/code/modules/surgery/gastrectomy.dm b/code/modules/surgery/gastrectomy.dm
index b72e01d0ecf7d..d09933f303fed 100644
--- a/code/modules/surgery/gastrectomy.dm
+++ b/code/modules/surgery/gastrectomy.dm
@@ -27,7 +27,7 @@
)
/datum/surgery/gastrectomy/can_start(mob/user, mob/living/carbon/target)
- var/obj/item/organ/internal/stomach/target_stomach = target.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/target_stomach = target.get_organ_slot(ORGAN_SLOT_STOMACH)
if(isnull(target_stomach) || target_stomach.damage < 50 || target_stomach.operated)
return FALSE
return ..()
@@ -70,7 +70,7 @@
/datum/surgery_step/gastrectomy/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
var/mob/living/carbon/human/target_human = target
- var/obj/item/organ/internal/stomach/target_stomach = target.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/target_stomach = target.get_organ_slot(ORGAN_SLOT_STOMACH)
target_human.setOrganLoss(ORGAN_SLOT_STOMACH, 20) // Stomachs have a threshold for being able to even digest food, so I might tweak this number
if(target_stomach)
target_stomach.operated = TRUE
diff --git a/code/modules/surgery/hepatectomy.dm b/code/modules/surgery/hepatectomy.dm
index c0d94abb69a99..82921c3f2752e 100644
--- a/code/modules/surgery/hepatectomy.dm
+++ b/code/modules/surgery/hepatectomy.dm
@@ -26,7 +26,7 @@
)
/datum/surgery/hepatectomy/can_start(mob/user, mob/living/carbon/target)
- var/obj/item/organ/internal/liver/target_liver = target.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/target_liver = target.get_organ_slot(ORGAN_SLOT_LIVER)
if(isnull(target_liver) || target_liver.damage < 50 || target_liver.operated)
return FALSE
return ..()
@@ -69,7 +69,7 @@
/datum/surgery_step/hepatectomy/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
var/mob/living/carbon/human/human_target = target
- var/obj/item/organ/internal/liver/target_liver = target.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/target_liver = target.get_organ_slot(ORGAN_SLOT_LIVER)
human_target.setOrganLoss(ORGAN_SLOT_LIVER, 10) //not bad, not great
if(target_liver)
target_liver.operated = TRUE
diff --git a/code/modules/surgery/lobectomy.dm b/code/modules/surgery/lobectomy.dm
index 85a963953c68e..e0988c8376c87 100644
--- a/code/modules/surgery/lobectomy.dm
+++ b/code/modules/surgery/lobectomy.dm
@@ -24,7 +24,7 @@
)
/datum/surgery/lobectomy/can_start(mob/user, mob/living/carbon/target)
- var/obj/item/organ/internal/lungs/target_lungs = target.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/target_lungs = target.get_organ_slot(ORGAN_SLOT_LUNGS)
if(isnull(target_lungs) || target_lungs.damage < 60 || target_lungs.operated)
return FALSE
return ..()
@@ -67,7 +67,7 @@
/datum/surgery_step/lobectomy/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
if(ishuman(target))
var/mob/living/carbon/human/human_target = target
- var/obj/item/organ/internal/lungs/target_lungs = human_target.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/target_lungs = human_target.get_organ_slot(ORGAN_SLOT_LUNGS)
human_target.setOrganLoss(ORGAN_SLOT_LUNGS, 60)
if(target_lungs)
target_lungs.operated = TRUE
diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm
index 84edc783af7a9..a5f4a0505f6fd 100644
--- a/code/modules/surgery/organ_manipulation.dm
+++ b/code/modules/surgery/organ_manipulation.dm
@@ -305,7 +305,7 @@
///only operate on internal organs
/datum/surgery_step/manipulate_organs/internal/can_use_organ(mob/user, obj/item/organ/organ)
- return isinternalorgan(organ)
+ return !(organ.organ_flags & ORGAN_EXTERNAL)
///prosthetic surgery gives full effectiveness to crowbars (and hemostats)
/datum/surgery_step/manipulate_organs/internal/mechanic
@@ -319,7 +319,7 @@
///Only operate on external organs
/datum/surgery_step/manipulate_organs/external/can_use_organ(mob/user, obj/item/organ/organ)
- return isexternalorgan(organ)
+ return (organ.organ_flags & ORGAN_EXTERNAL)
///prosthetic surgery gives full effectiveness to crowbars (and hemostats)
/datum/surgery_step/manipulate_organs/external/mechanic
diff --git a/code/modules/surgery/organs/_organ.dm b/code/modules/surgery/organs/_organ.dm
index 6a5dabc112fd0..e2f05a9ed5610 100644
--- a/code/modules/surgery/organs/_organ.dm
+++ b/code/modules/surgery/organs/_organ.dm
@@ -46,6 +46,10 @@
/// Food reagents if the organ is edible
var/list/food_reagents = list(/datum/reagent/consumable/nutriment = 5)
+ /// Foodtypes if the organ is edible
+ var/foodtype_flags = RAW | MEAT | GORE
+ /// Overrides tastes if the organ is edible
+ var/food_tastes
/// The size of the reagent container if the organ is edible
var/reagent_vol = 10
@@ -74,8 +78,9 @@ INITIALIZE_IMMEDIATE(/obj/item/organ)
if(organ_flags & ORGAN_EDIBLE)
AddComponent(/datum/component/edible,\
initial_reagents = food_reagents,\
- foodtypes = RAW | MEAT | GORE,\
+ foodtypes = foodtype_flags,\
volume = reagent_vol,\
+ tastes = food_tastes,\
after_eat = CALLBACK(src, PROC_REF(OnEatFrom)))
if(bodypart_overlay)
@@ -244,20 +249,20 @@ INITIALIZE_IMMEDIATE(/obj/item/organ)
set_heartattack(FALSE)
// Ears have aditional vаr "deaf", need to update it too
- var/obj/item/organ/internal/ears/ears = get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = get_organ_slot(ORGAN_SLOT_EARS)
ears?.adjustEarDamage(0, -INFINITY) // full heal ears deafness
return
// Default organ fixing handling
// May result in kinda cursed stuff for mobs which don't need these organs
- var/obj/item/organ/internal/lungs/lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/lungs = get_organ_slot(ORGAN_SLOT_LUNGS)
if(!lungs)
lungs = new()
lungs.Insert(src)
lungs.set_organ_damage(0)
- var/obj/item/organ/internal/heart/heart = get_organ_slot(ORGAN_SLOT_HEART)
+ var/obj/item/organ/heart/heart = get_organ_slot(ORGAN_SLOT_HEART)
if(heart)
set_heartattack(FALSE)
else
@@ -265,19 +270,19 @@ INITIALIZE_IMMEDIATE(/obj/item/organ)
heart.Insert(src)
heart.set_organ_damage(0)
- var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE)
if(!tongue)
tongue = new()
tongue.Insert(src)
tongue.set_organ_damage(0)
- var/obj/item/organ/internal/eyes/eyes = get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = get_organ_slot(ORGAN_SLOT_EYES)
if(!eyes)
eyes = new()
eyes.Insert(src)
eyes.set_organ_damage(0)
- var/obj/item/organ/internal/ears/ears = get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = get_organ_slot(ORGAN_SLOT_EARS)
if(!ears)
ears = new()
ears.Insert(src)
diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm
index 59107666bfde5..296b40beea94a 100644
--- a/code/modules/surgery/organs/autosurgeon.dm
+++ b/code/modules/surgery/organs/autosurgeon.dm
@@ -140,7 +140,7 @@
name = "autosurgeon"
desc = "A single use autosurgeon that contains a medical heads-up display augment. A screwdriver can be used to remove it, but implants can't be placed back in."
uses = 1
- starting_organ = /obj/item/organ/internal/cyberimp/eyes/hud/medical
+ starting_organ = /obj/item/organ/cyberimp/eyes/hud/medical
/obj/item/autosurgeon/syndicate
@@ -156,28 +156,28 @@
/obj/item/autosurgeon/syndicate/laser_arm
desc = "A single use autosurgeon that contains a combat arms-up laser augment. A screwdriver can be used to remove it, but implants can't be placed back in."
uses = 1
- starting_organ = /obj/item/organ/internal/cyberimp/arm/gun/laser
+ starting_organ = /obj/item/organ/cyberimp/arm/gun/laser
/obj/item/autosurgeon/syndicate/thermal_eyes
- starting_organ = /obj/item/organ/internal/eyes/robotic/thermals
+ starting_organ = /obj/item/organ/eyes/robotic/thermals
/obj/item/autosurgeon/syndicate/thermal_eyes/single_use
uses = 1
/obj/item/autosurgeon/syndicate/xray_eyes
- starting_organ = /obj/item/organ/internal/eyes/robotic/xray
+ starting_organ = /obj/item/organ/eyes/robotic/xray
/obj/item/autosurgeon/syndicate/xray_eyes/single_use
uses = 1
/obj/item/autosurgeon/syndicate/anti_stun
- starting_organ = /obj/item/organ/internal/cyberimp/brain/anti_stun
+ starting_organ = /obj/item/organ/cyberimp/brain/anti_stun
/obj/item/autosurgeon/syndicate/anti_stun/single_use
uses = 1
/obj/item/autosurgeon/syndicate/reviver
- starting_organ = /obj/item/organ/internal/cyberimp/chest/reviver
+ starting_organ = /obj/item/organ/cyberimp/chest/reviver
/obj/item/autosurgeon/syndicate/reviver/single_use
uses = 1
@@ -185,14 +185,14 @@
/obj/item/autosurgeon/syndicate/commsagent
desc = "A device that automatically - painfully - inserts an implant. It seems someone's specially \
modified this one to only insert... tongues. Horrifying."
- starting_organ = /obj/item/organ/internal/tongue
+ starting_organ = /obj/item/organ/tongue
/obj/item/autosurgeon/syndicate/commsagent/Initialize(mapload)
. = ..()
- organ_whitelist += /obj/item/organ/internal/tongue
+ organ_whitelist += /obj/item/organ/tongue
/obj/item/autosurgeon/syndicate/emaggedsurgerytoolset
- starting_organ = /obj/item/organ/internal/cyberimp/arm/surgery/emagged
+ starting_organ = /obj/item/organ/cyberimp/arm/surgery/emagged
/obj/item/autosurgeon/syndicate/emaggedsurgerytoolset/single_use
uses = 1
@@ -200,4 +200,4 @@
/obj/item/autosurgeon/syndicate/contraband_sechud
desc = "Contains a contraband SecHUD implant, undetectable by health scanners."
uses = 1
- starting_organ = /obj/item/organ/internal/cyberimp/eyes/hud/security/syndicate
+ starting_organ = /obj/item/organ/cyberimp/eyes/hud/security/syndicate
diff --git a/code/modules/surgery/organs/external/_visual_organs.dm b/code/modules/surgery/organs/external/_visual_organs.dm
index 00bb03ca364ff..52ed3e031cb93 100644
--- a/code/modules/surgery/organs/external/_visual_organs.dm
+++ b/code/modules/surgery/organs/external/_visual_organs.dm
@@ -100,7 +100,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times
. += bodypart_overlay.get_overlay(external_layer, bodypart_owner)
///The horns of a lizard!
-/obj/item/organ/external/horns
+/obj/item/organ/horns
name = "horns"
desc = "Why do lizards even have horns? Well, this one obviously doesn't."
icon_state = "horns"
@@ -114,9 +114,12 @@ Unlike normal organs, we're actually inside a persons limbs at all times
bodypart_overlay = /datum/bodypart_overlay/mutant/horns
+ organ_flags = parent_type::organ_flags | ORGAN_EXTERNAL
+
/datum/bodypart_overlay/mutant/horns
layers = EXTERNAL_ADJACENT
feature_key = "horns"
+ dyable = TRUE
/datum/bodypart_overlay/mutant/horns/can_draw_on_bodypart(mob/living/carbon/human/human)
if((human.head?.flags_inv & HIDEHORNS) || (human.wear_mask?.flags_inv & HIDEHORNS)) // DOPPLER EDIT, old code: if((human.head?.flags_inv & HIDEHAIR) || (human.wear_mask?.flags_inv & HIDEHAIR))
@@ -128,7 +131,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times
return SSaccessories.horns_list
///The frills of a lizard (like weird fin ears)
-/obj/item/organ/external/frills
+/obj/item/organ/frills
name = "frills"
desc = "Ear-like external organs often seen on aquatic reptillians."
icon_state = "frills"
@@ -142,6 +145,8 @@ Unlike normal organs, we're actually inside a persons limbs at all times
bodypart_overlay = /datum/bodypart_overlay/mutant/frills
+ organ_flags = parent_type::organ_flags | ORGAN_EXTERNAL
+
/datum/bodypart_overlay/mutant/frills
layers = EXTERNAL_ADJACENT
feature_key = "frills"
@@ -155,8 +160,8 @@ Unlike normal organs, we're actually inside a persons limbs at all times
return SSaccessories.frills_list
///Guess what part of the lizard this is?
-/obj/item/organ/external/snout
- name = "snout" // DOPPLER EDIT, old code: name = "lizard snout"
+/obj/item/organ/snout
+ name = "lizard snout"
desc = "Take a closer look at that snout!"
icon_state = "snout"
@@ -171,6 +176,8 @@ Unlike normal organs, we're actually inside a persons limbs at all times
bodypart_overlay = /datum/bodypart_overlay/mutant/snout
+ organ_flags = parent_type::organ_flags | ORGAN_EXTERNAL
+
/datum/bodypart_overlay/mutant/snout
layers = EXTERNAL_ADJACENT
feature_key = "snout"
@@ -184,7 +191,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times
return SSaccessories.snouts_list
///A moth's antennae
-/obj/item/organ/external/antennae
+/obj/item/organ/antennae
name = "moth antennae"
desc = "A moths antennae. What is it telling them? What are they sensing?"
icon_state = "antennae"
@@ -199,24 +206,26 @@ Unlike normal organs, we're actually inside a persons limbs at all times
bodypart_overlay = /datum/bodypart_overlay/mutant/antennae
+ organ_flags = parent_type::organ_flags | ORGAN_EXTERNAL
+
///Are we burned?
var/burnt = FALSE
///Store our old datum here for if our antennae are healed
var/original_sprite_datum
-/obj/item/organ/external/antennae/mob_insert(mob/living/carbon/receiver, special, movement_flags)
+/obj/item/organ/antennae/mob_insert(mob/living/carbon/receiver, special, movement_flags)
. = ..()
RegisterSignal(receiver, COMSIG_HUMAN_BURNING, PROC_REF(try_burn_antennae))
RegisterSignal(receiver, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(heal_antennae))
-/obj/item/organ/external/antennae/mob_remove(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/antennae/mob_remove(mob/living/carbon/organ_owner, special, movement_flags)
. = ..()
UnregisterSignal(organ_owner, list(COMSIG_HUMAN_BURNING, COMSIG_LIVING_POST_FULLY_HEAL))
///check if our antennae can burn off ;_;
-/obj/item/organ/external/antennae/proc/try_burn_antennae(mob/living/carbon/human/human)
+/obj/item/organ/antennae/proc/try_burn_antennae(mob/living/carbon/human/human)
SIGNAL_HANDLER
if(!burnt && human.bodytemperature >= 800 && human.fire_stacks > 0) //do not go into the extremely hot light. you will not survive
@@ -226,13 +235,13 @@ Unlike normal organs, we're actually inside a persons limbs at all times
human.update_body_parts()
///Burn our antennae off ;_;
-/obj/item/organ/external/antennae/proc/burn_antennae()
+/obj/item/organ/antennae/proc/burn_antennae()
var/datum/bodypart_overlay/mutant/antennae/antennae = bodypart_overlay
antennae.burnt = TRUE
burnt = TRUE
///heal our antennae back up!!
-/obj/item/organ/external/antennae/proc/heal_antennae(datum/source, heal_flags)
+/obj/item/organ/antennae/proc/heal_antennae(datum/source, heal_flags)
SIGNAL_HANDLER
if(!burnt)
@@ -247,6 +256,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times
/datum/bodypart_overlay/mutant/antennae
layers = EXTERNAL_FRONT | EXTERNAL_BEHIND
feature_key = "moth_antennae"
+ dyable = TRUE
///Accessory datum of the burn sprite
var/datum/sprite_accessory/burn_datum = /datum/sprite_accessory/moth_antennae/burnt_off
///Are we burned? If so we draw differently
@@ -269,7 +279,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times
return FALSE
///The leafy hair of a podperson
-/obj/item/organ/external/pod_hair
+/obj/item/organ/pod_hair
name = "podperson hair"
desc = "Base for many-o-salads."
@@ -284,10 +294,13 @@ Unlike normal organs, we're actually inside a persons limbs at all times
bodypart_overlay = /datum/bodypart_overlay/mutant/pod_hair
+ organ_flags = parent_type::organ_flags | ORGAN_EXTERNAL
+
///Podperson bodypart overlay, with special coloring functionality to render the flowers in the inverse color
/datum/bodypart_overlay/mutant/pod_hair
layers = EXTERNAL_FRONT|EXTERNAL_ADJACENT
feature_key = "pod_hair"
+ dyable = TRUE
///This layer will be colored differently than the rest of the organ. So we can get differently colored flowers or something
var/color_swapped_layer = EXTERNAL_FRONT
@@ -301,8 +314,9 @@ Unlike normal organs, we're actually inside a persons limbs at all times
if(draw_layer != bitflag_to_layer(color_swapped_layer))
return ..()
- if(draw_color) // can someone explain to me why draw_color is allowed to EVER BE AN EMPTY STRING
- var/list/rgb_list = rgb2num(draw_color)
+ var/color_to_use = dye_color || draw_color
+ if(color_to_use) // can someone explain to me why draw_color is allowed to EVER BE AN EMPTY STRING
+ var/list/rgb_list = rgb2num(color_to_use)
overlay.color = rgb(color_inverse_base - rgb_list[1], color_inverse_base - rgb_list[2], color_inverse_base - rgb_list[3]) //inversa da color
else
overlay.color = null
diff --git a/code/modules/surgery/organs/external/spines.dm b/code/modules/surgery/organs/external/spines.dm
index 214c58df09923..23c29358a0dfc 100644
--- a/code/modules/surgery/organs/external/spines.dm
+++ b/code/modules/surgery/organs/external/spines.dm
@@ -1,5 +1,5 @@
///A lizards spines (those things on their back), but also including tail spines (gasp)
-/obj/item/organ/external/spines
+/obj/item/organ/spines
name = "lizard spines"
desc = "Not an actual spine, obviously."
icon_state = "spines"
@@ -14,15 +14,17 @@
bodypart_overlay = /datum/bodypart_overlay/mutant/spines
-/obj/item/organ/external/spines/mob_insert(mob/living/carbon/receiver, special, movement_flags)
+ organ_flags = parent_type::organ_flags | ORGAN_EXTERNAL
+
+/obj/item/organ/spines/mob_insert(mob/living/carbon/receiver, special, movement_flags)
// If we have a tail, attempt to add a tail spines overlay
- var/obj/item/organ/external/tail/our_tail = receiver.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ var/obj/item/organ/tail/our_tail = receiver.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
our_tail?.try_insert_tail_spines(our_tail.bodypart_owner)
return ..()
-/obj/item/organ/external/spines/mob_remove(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/spines/mob_remove(mob/living/carbon/organ_owner, special, movement_flags)
// If we have a tail, remove any tail spines overlay
- var/obj/item/organ/external/tail/our_tail = organ_owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ var/obj/item/organ/tail/our_tail = organ_owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
our_tail?.remove_tail_spines(our_tail.bodypart_owner)
return ..()
@@ -30,6 +32,7 @@
/datum/bodypart_overlay/mutant/spines
layers = EXTERNAL_ADJACENT|EXTERNAL_BEHIND
feature_key = "spines"
+ dyable = TRUE
/datum/bodypart_overlay/mutant/spines/get_global_feature_list()
return SSaccessories.spines_list
@@ -38,3 +41,8 @@
. = ..()
if(human.wear_suit && (human.wear_suit.flags_inv & HIDEJUMPSUIT))
return FALSE
+
+/datum/bodypart_overlay/mutant/spines/set_dye_color(new_color, obj/item/organ/tail/organ)
+ var/obj/item/organ/tail/tail = organ?.owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ tail?.tail_spines_overlay?.set_dye_color(new_color, organ)
+ return ..()
diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm
index 7f05612e9967b..8b77159308c2a 100644
--- a/code/modules/surgery/organs/external/tails.dm
+++ b/code/modules/surgery/organs/external/tails.dm
@@ -1,5 +1,5 @@
///Tail parent, it doesn't do very much.
-/obj/item/organ/external/tail
+/obj/item/organ/tail
name = "tail"
desc = "A severed tail. What did you cut this off of?"
icon_state = "severedtail"
@@ -14,6 +14,8 @@
// defaults to cat, but the parent type shouldn't be created regardless
bodypart_overlay = /datum/bodypart_overlay/mutant/tail/cat
+ organ_flags = parent_type::organ_flags | ORGAN_EXTERNAL
+
///Does this tail have a wagging sprite, and is it currently wagging?
var/wag_flags = NONE
///The original owner of this tail
@@ -21,7 +23,7 @@
///The overlay for tail spines, if any
var/datum/bodypart_overlay/mutant/tail_spines/tail_spines_overlay
-/obj/item/organ/external/tail/mob_insert(mob/living/carbon/receiver, special, movement_flags)
+/obj/item/organ/tail/mob_insert(mob/living/carbon/receiver, special, movement_flags)
. = ..()
if(.)
receiver.clear_mood_event("tail_lost")
@@ -40,7 +42,7 @@
else
receiver.add_mood_event("tail_regained", /datum/mood_event/tail_regained_wrong)
-/obj/item/organ/external/tail/on_bodypart_insert(obj/item/bodypart/bodypart)
+/obj/item/organ/tail/on_bodypart_insert(obj/item/bodypart/bodypart)
/// DOPPLER SHIFT ADDITION BEGIN
// damnit TG your own code fails CI for reasons unclear - TODO, stack trace this to eventually figure out how it's ending up with null owners
if(bodypart == null)
@@ -48,17 +50,17 @@
if(bodypart.owner == null)
return ..()
/// DOPPLER SHIFT ADDITION END
- var/obj/item/organ/external/spines/our_spines = bodypart.owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_SPINES)
+ var/obj/item/organ/spines/our_spines = bodypart.owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_SPINES)
if(our_spines)
try_insert_tail_spines(bodypart)
return ..()
-/obj/item/organ/external/tail/on_bodypart_remove(obj/item/bodypart/bodypart)
+/obj/item/organ/tail/on_bodypart_remove(obj/item/bodypart/bodypart)
remove_tail_spines(bodypart)
return ..()
/// If the owner has spines and an appropriate overlay exists, add a tail spines overlay.
-/obj/item/organ/external/tail/proc/try_insert_tail_spines(obj/item/bodypart/bodypart)
+/obj/item/organ/tail/proc/try_insert_tail_spines(obj/item/bodypart/bodypart)
// Don't insert another overlay if there already is one.
if(tail_spines_overlay)
return
@@ -77,13 +79,13 @@
bodypart.add_bodypart_overlay(tail_spines_overlay)
/// If we have a tail spines overlay, delete it
-/obj/item/organ/external/tail/proc/remove_tail_spines(obj/item/bodypart/bodypart)
+/obj/item/organ/tail/proc/remove_tail_spines(obj/item/bodypart/bodypart)
if(!tail_spines_overlay)
return
bodypart.remove_bodypart_overlay(tail_spines_overlay)
QDEL_NULL(tail_spines_overlay)
-/obj/item/organ/external/tail/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/tail/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
if(wag_flags & WAG_WAGGING)
@@ -98,7 +100,7 @@
///We need some special behaviour for accessories, wrapped here so we can easily add more interactions later
///Accepts an optional timeout after which we remove the tail wagging
///Returns false if the wag worked, true otherwise
-/obj/item/organ/external/tail/proc/start_wag(mob/living/carbon/organ_owner, stop_after = INFINITY)
+/obj/item/organ/tail/proc/start_wag(mob/living/carbon/organ_owner, stop_after = INFINITY)
if(wag_flags & WAG_WAGGING || !(wag_flags & WAG_ABLE)) // we are already wagging
return FALSE
if(organ_owner.stat == DEAD || organ_owner != owner) // no wagging when owner is dead or tail has been disembodied
@@ -116,13 +118,13 @@
RegisterSignal(organ_owner, COMSIG_LIVING_DEATH, PROC_REF(owner_died))
return TRUE
-/obj/item/organ/external/tail/proc/owner_died(mob/living/carbon/organ_owner) // Resisting the urge to replace owner with daddy
+/obj/item/organ/tail/proc/owner_died(mob/living/carbon/organ_owner) // Resisting the urge to replace owner with daddy
SIGNAL_HANDLER
stop_wag(organ_owner)
///We need some special behaviour for accessories, wrapped here so we can easily add more interactions later
///Returns false if the wag stopping worked, true otherwise
-/obj/item/organ/external/tail/proc/stop_wag(mob/living/carbon/organ_owner)
+/obj/item/organ/tail/proc/stop_wag(mob/living/carbon/organ_owner)
if(!(wag_flags & WAG_ABLE))
return FALSE
@@ -142,12 +144,13 @@
UnregisterSignal(organ_owner, COMSIG_LIVING_DEATH)
return succeeded
-/obj/item/organ/external/tail/proc/get_butt_sprite()
+/obj/item/organ/tail/proc/get_butt_sprite()
return null
///Tail parent type, with wagging functionality
/datum/bodypart_overlay/mutant/tail
layers = EXTERNAL_FRONT|EXTERNAL_BEHIND
+ dyable = TRUE
var/wagging = FALSE
/datum/bodypart_overlay/mutant/tail/get_base_icon_state()
@@ -158,7 +161,7 @@
return FALSE
return TRUE
-/obj/item/organ/external/tail/cat
+/obj/item/organ/tail/cat
name = "tail"
preference = "feature_human_tail"
@@ -166,7 +169,7 @@
wag_flags = WAG_ABLE
-/obj/item/organ/external/tail/cat/get_butt_sprite()
+/obj/item/organ/tail/cat/get_butt_sprite()
return icon('icons/mob/butts.dmi', BUTT_SPRITE_CAT)
///Cat tail bodypart overlay
@@ -177,7 +180,7 @@
/datum/bodypart_overlay/mutant/tail/cat/get_global_feature_list()
return SSaccessories.tails_list_felinid
-/obj/item/organ/external/tail/monkey
+/obj/item/organ/tail/monkey
name = "monkey tail"
preference = "feature_monkey_tail"
@@ -193,7 +196,7 @@
/datum/bodypart_overlay/mutant/tail/monkey/get_global_feature_list()
return SSaccessories.tails_list_monkey
-/obj/item/organ/external/tail/lizard
+/obj/item/organ/tail/lizard
name = "lizard tail"
desc = "A severed lizard tail. Somewhere, no doubt, a lizard hater is very pleased with themselves."
preference = "feature_lizard_tail"
@@ -210,7 +213,7 @@
/datum/bodypart_overlay/mutant/tail/lizard/get_global_feature_list()
return SSaccessories.tails_list_lizard
-/obj/item/organ/external/tail/lizard/fake
+/obj/item/organ/tail/lizard/fake
name = "fabricated lizard tail"
desc = "A fabricated severed lizard tail. This one's made of synthflesh. Probably not usable for lizard wine."
@@ -233,3 +236,6 @@
. = ..()
if(human.wear_suit && (human.wear_suit.flags_inv & HIDEJUMPSUIT))
return FALSE
+
+/datum/bodypart_overlay/mutant/tail_spines/set_dye_color(new_color, obj/item/organ/organ)
+ dye_color = new_color //no update_body_parts() call, tail/set_dye_color will do it.
diff --git a/code/modules/surgery/organs/external/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm
index 2b48337204a1a..63759761548d9 100644
--- a/code/modules/surgery/organs/external/wings/functional_wings.dm
+++ b/code/modules/surgery/organs/external/wings/functional_wings.dm
@@ -10,12 +10,12 @@
/datum/action/innate/flight/Activate()
var/mob/living/carbon/human/human = owner
- var/obj/item/organ/external/wings/functional/wings = human.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
+ var/obj/item/organ/wings/functional/wings = human.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
if(wings?.can_fly(human))
wings.toggle_flight(human)
///The true wings that you can use to fly and shit (you cant actually shit with them)
-/obj/item/organ/external/wings/functional
+/obj/item/organ/wings/functional
///The flight action object
var/datum/action/innate/flight/fly
@@ -29,29 +29,29 @@
// grind_results = list(/datum/reagent/flightpotion = 5)
food_reagents = list(/datum/reagent/flightpotion = 5)
-/obj/item/organ/external/wings/functional/Destroy()
+/obj/item/organ/wings/functional/Destroy()
QDEL_NULL(fly)
return ..()
-/obj/item/organ/external/wings/functional/mob_insert(mob/living/carbon/receiver, special, movement_flags)
+/obj/item/organ/wings/functional/mob_insert(mob/living/carbon/receiver, special, movement_flags)
. = ..()
if(QDELETED(fly))
fly = new
fly.Grant(receiver)
-/obj/item/organ/external/wings/functional/mob_remove(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/wings/functional/mob_remove(mob/living/carbon/organ_owner, special, movement_flags)
. = ..()
fly?.Remove(organ_owner)
if(wings_open)
toggle_flight(organ_owner)
-/obj/item/organ/external/wings/functional/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/wings/functional/on_life(seconds_per_tick, times_fired)
. = ..()
handle_flight(owner)
///Called on_life(). Handle flight code and check if we're still flying
-/obj/item/organ/external/wings/functional/proc/handle_flight(mob/living/carbon/human/human)
+/obj/item/organ/wings/functional/proc/handle_flight(mob/living/carbon/human/human)
if(!HAS_TRAIT_FROM(human, TRAIT_MOVE_FLOATING, SPECIES_FLIGHT_TRAIT))
return FALSE
if(!can_fly(human))
@@ -61,7 +61,7 @@
///Check if we're still eligible for flight (wings covered, atmosphere too thin, etc)
-/obj/item/organ/external/wings/functional/proc/can_fly(mob/living/carbon/human/human)
+/obj/item/organ/wings/functional/proc/can_fly(mob/living/carbon/human/human)
if(human.stat || human.body_position == LYING_DOWN || isnull(human.client))
return FALSE
//Jumpsuits have tail holes, so it makes sense they have wing holes too
@@ -79,7 +79,7 @@
return TRUE
///Slipping but in the air?
-/obj/item/organ/external/wings/functional/proc/fly_slip(mob/living/carbon/human/human)
+/obj/item/organ/wings/functional/proc/fly_slip(mob/living/carbon/human/human)
var/obj/buckled_obj
if(human.buckled)
buckled_obj = human.buckled
@@ -102,7 +102,7 @@
return TRUE
///UNSAFE PROC, should only be called through the Activate or other sources that check for CanFly
-/obj/item/organ/external/wings/functional/proc/toggle_flight(mob/living/carbon/human/human)
+/obj/item/organ/wings/functional/proc/toggle_flight(mob/living/carbon/human/human)
if(!HAS_TRAIT_FROM(human, TRAIT_MOVE_FLOATING, SPECIES_FLIGHT_TRAIT))
human.physiology.stun_mod *= 2
human.add_traits(list(TRAIT_NO_FLOATING_ANIM, TRAIT_MOVE_FLOATING, TRAIT_IGNORING_GRAVITY, TRAIT_NOGRAV_ALWAYS_DRIFT), SPECIES_FLIGHT_TRAIT)
@@ -129,7 +129,7 @@
close_wings()
human.refresh_gravity()
-/obj/item/organ/external/wings/functional/proc/on_client_move(mob/source, list/move_args)
+/obj/item/organ/wings/functional/proc/on_client_move(mob/source, list/move_args)
SIGNAL_HANDLER
if (!can_fly(source))
@@ -139,7 +139,7 @@
source.newtonian_move(dir2angle(source.client.intended_direction), instant = TRUE, drift_force = FUNCTIONAL_WING_FORCE, controlled_cap = max_drift_force)
source.setDir(source.client.intended_direction)
-/obj/item/organ/external/wings/functional/proc/on_pushoff(mob/source, movement_dir, continuous_move, atom/backup)
+/obj/item/organ/wings/functional/proc/on_pushoff(mob/source, movement_dir, continuous_move, atom/backup)
SIGNAL_HANDLER
if (get_dir(source, backup) == movement_dir || source.loc == backup.loc)
@@ -150,7 +150,7 @@
return COMPONENT_PREVENT_SPACEMOVE_HALT
-/obj/item/organ/external/wings/functional/process(seconds_per_tick)
+/obj/item/organ/wings/functional/process(seconds_per_tick)
if (!owner || !can_fly(owner) || isnull(owner.drift_handler))
return
@@ -158,14 +158,14 @@
owner.drift_handler.stabilize_drift(owner.client.intended_direction ? dir2angle(owner.client.intended_direction) : null, owner.client.intended_direction ? max_drift_force : 0, FUNCTIONAL_WING_STABILIZATION * (seconds_per_tick * 1 SECONDS))
///SPREAD OUR WINGS AND FLLLLLYYYYYY
-/obj/item/organ/external/wings/functional/proc/open_wings()
+/obj/item/organ/wings/functional/proc/open_wings()
var/datum/bodypart_overlay/mutant/wings/functional/overlay = bodypart_overlay
overlay.open_wings()
wings_open = TRUE
owner.update_body_parts()
///close our wings
-/obj/item/organ/external/wings/functional/proc/close_wings()
+/obj/item/organ/wings/functional/proc/close_wings()
var/datum/bodypart_overlay/mutant/wings/functional/overlay = bodypart_overlay
wings_open = FALSE
overlay.close_wings()
@@ -205,7 +205,7 @@
. += wings_open ? "open" : "closed"
///angel wings, which relate to humans. comes with holiness.
-/obj/item/organ/external/wings/functional/angel
+/obj/item/organ/wings/functional/angel
name = "angel wings"
desc = "Holier-than-thou attitude not included."
sprite_accessory_override = /datum/sprite_accessory/wings_open/angel
@@ -213,47 +213,47 @@
organ_traits = list(TRAIT_HOLY)
///dragon wings, which relate to lizards.
-/obj/item/organ/external/wings/functional/dragon
+/obj/item/organ/wings/functional/dragon
name = "dragon wings"
desc = "Hey, HEY- NOT lizard wings. Dragon wings. Mighty dragon wings."
sprite_accessory_override = /datum/sprite_accessory/wings/dragon
///robotic wings, which relate to androids.
-/obj/item/organ/external/wings/functional/robotic
+/obj/item/organ/wings/functional/robotic
name = "robotic wings"
desc = "Using microscopic hover-engines, or \"microwings,\" as they're known in the trade, these tiny devices are able to lift a few grams at a time. Gathering enough of them, and you can lift impressively large things."
organ_flags = ORGAN_ROBOTIC
sprite_accessory_override = /datum/sprite_accessory/wings/robotic
///skeletal wings, which relate to skeletal races.
-/obj/item/organ/external/wings/functional/skeleton
+/obj/item/organ/wings/functional/skeleton
name = "skeletal wings"
desc = "Powered by pure edgy-teenager-notebook-scribblings. Just kidding. But seriously, how do these keep you flying?!"
sprite_accessory_override = /datum/sprite_accessory/wings/skeleton
-/obj/item/organ/external/wings/functional/moth/make_flap_sound(mob/living/carbon/wing_owner)
+/obj/item/organ/wings/functional/moth/make_flap_sound(mob/living/carbon/wing_owner)
playsound(wing_owner, 'sound/mobs/humanoids/moth/moth_flutter.ogg', 50, TRUE)
///mothra wings, which relate to moths.
-/obj/item/organ/external/wings/functional/moth/mothra
+/obj/item/organ/wings/functional/moth/mothra
name = "mothra wings"
desc = "Fly like the mighty mothra of legend once did."
sprite_accessory_override = /datum/sprite_accessory/wings/mothra
///megamoth wings, which relate to moths as an alternate choice. they're both pretty cool.
-/obj/item/organ/external/wings/functional/moth/megamoth
+/obj/item/organ/wings/functional/moth/megamoth
name = "megamoth wings"
desc = "Don't get murderous."
sprite_accessory_override = /datum/sprite_accessory/wings/megamoth
///fly wings, which relate to flies.
-/obj/item/organ/external/wings/functional/fly
+/obj/item/organ/wings/functional/fly
name = "fly wings"
desc = "Fly as a fly."
sprite_accessory_override = /datum/sprite_accessory/wings/fly
///slime wings, which relate to slimes.
-/obj/item/organ/external/wings/functional/slime
+/obj/item/organ/wings/functional/slime
name = "slime wings"
desc = "How does something so squishy even fly?"
sprite_accessory_override = /datum/sprite_accessory/wings/slime
diff --git a/code/modules/surgery/organs/external/wings/moth_wings.dm b/code/modules/surgery/organs/external/wings/moth_wings.dm
index 266d777b4572c..2753c88f2c478 100644
--- a/code/modules/surgery/organs/external/wings/moth_wings.dm
+++ b/code/modules/surgery/organs/external/wings/moth_wings.dm
@@ -1,7 +1,7 @@
#define MOTH_WING_FORCE 1 NEWTONS
///Moth wings! They can flutter in low-grav and burn off in heat
-/obj/item/organ/external/wings/moth
+/obj/item/organ/wings/moth
name = "moth wings"
desc = "Spread your wings and FLOOOOAAAAAT!"
@@ -16,7 +16,7 @@
///Store our old datum here for if our burned wings are healed
var/original_sprite_datum
-/obj/item/organ/external/wings/moth/on_mob_insert(mob/living/carbon/receiver)
+/obj/item/organ/wings/moth/on_mob_insert(mob/living/carbon/receiver)
. = ..()
RegisterSignal(receiver, COMSIG_HUMAN_BURNING, PROC_REF(try_burn_wings))
RegisterSignal(receiver, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(heal_wings))
@@ -24,18 +24,18 @@
RegisterSignal(receiver, COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE, PROC_REF(on_pushoff))
START_PROCESSING(SSnewtonian_movement, src)
-/obj/item/organ/external/wings/moth/on_mob_remove(mob/living/carbon/organ_owner)
+/obj/item/organ/wings/moth/on_mob_remove(mob/living/carbon/organ_owner)
. = ..()
UnregisterSignal(organ_owner, list(COMSIG_HUMAN_BURNING, COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_MOB_CLIENT_MOVE_NOGRAV, COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE))
STOP_PROCESSING(SSnewtonian_movement, src)
-/obj/item/organ/external/wings/moth/make_flap_sound(mob/living/carbon/wing_owner)
+/obj/item/organ/wings/moth/make_flap_sound(mob/living/carbon/wing_owner)
playsound(wing_owner, 'sound/mobs/humanoids/moth/moth_flutter.ogg', 50, TRUE)
-/obj/item/organ/external/wings/moth/can_soften_fall()
+/obj/item/organ/wings/moth/can_soften_fall()
return !burnt
-/obj/item/organ/external/wings/moth/proc/allow_flight()
+/obj/item/organ/wings/moth/proc/allow_flight()
if(!owner || !owner.client)
return FALSE
if(!isturf(owner.loc))
@@ -59,14 +59,14 @@
return TRUE
return FALSE
-/obj/item/organ/external/wings/moth/process(seconds_per_tick)
+/obj/item/organ/wings/moth/process(seconds_per_tick)
if (!owner || !allow_flight() || isnull(owner.drift_handler))
return
var/max_drift_force = (DEFAULT_INERTIA_SPEED / owner.cached_multiplicative_slowdown - 1) / INERTIA_SPEED_COEF + 1
owner.drift_handler.stabilize_drift(owner.client.intended_direction ? dir2angle(owner.client.intended_direction) : null, owner.client.intended_direction ? max_drift_force : 0, MOTH_WING_FORCE * (seconds_per_tick * 1 SECONDS))
-/obj/item/organ/external/wings/moth/proc/on_client_move(mob/source, list/move_args)
+/obj/item/organ/wings/moth/proc/on_client_move(mob/source, list/move_args)
SIGNAL_HANDLER
if (!allow_flight())
@@ -76,7 +76,7 @@
source.newtonian_move(dir2angle(source.client.intended_direction), instant = TRUE, drift_force = MOTH_WING_FORCE, controlled_cap = max_drift_force)
source.setDir(source.client.intended_direction)
-/obj/item/organ/external/wings/moth/proc/on_pushoff(mob/source, movement_dir, continuous_move, atom/backup)
+/obj/item/organ/wings/moth/proc/on_pushoff(mob/source, movement_dir, continuous_move, atom/backup)
SIGNAL_HANDLER
if (get_dir(source, backup) == movement_dir || source.loc == backup.loc)
@@ -88,7 +88,7 @@
return COMPONENT_PREVENT_SPACEMOVE_HALT
///check if our wings can burn off ;_;
-/obj/item/organ/external/wings/moth/proc/try_burn_wings(mob/living/carbon/human/human)
+/obj/item/organ/wings/moth/proc/try_burn_wings(mob/living/carbon/human/human)
SIGNAL_HANDLER
if(!burnt && human.bodytemperature >= 800 && human.fire_stacks > 0) //do not go into the extremely hot light. you will not survive
@@ -99,13 +99,13 @@
human.update_body_parts()
///burn the wings off
-/obj/item/organ/external/wings/moth/proc/burn_wings()
+/obj/item/organ/wings/moth/proc/burn_wings()
var/datum/bodypart_overlay/mutant/wings/moth/wings = bodypart_overlay
wings.burnt = TRUE
burnt = TRUE
///heal our wings back up!!
-/obj/item/organ/external/wings/moth/proc/heal_wings(datum/source, heal_flags)
+/obj/item/organ/wings/moth/proc/heal_wings(datum/source, heal_flags)
SIGNAL_HANDLER
if(!burnt)
diff --git a/code/modules/surgery/organs/external/wings/wings.dm b/code/modules/surgery/organs/external/wings/wings.dm
index d12a57284f66c..67f31f6ec2e69 100644
--- a/code/modules/surgery/organs/external/wings/wings.dm
+++ b/code/modules/surgery/organs/external/wings/wings.dm
@@ -1,5 +1,5 @@
///Wing base type. doesn't really do anything
-/obj/item/organ/external/wings
+/obj/item/organ/wings
name = "wings"
desc = "Spread your wings and FLLLLLLLLYYYYY!"
@@ -10,12 +10,14 @@
use_mob_sprite_as_obj_sprite = TRUE
bodypart_overlay = /datum/bodypart_overlay/mutant/wings
+ organ_flags = parent_type::organ_flags | ORGAN_EXTERNAL
+
///Checks if the wings can soften short falls
-/obj/item/organ/external/wings/proc/can_soften_fall()
+/obj/item/organ/wings/proc/can_soften_fall()
return TRUE
///Implement as needed to play a sound effect on *flap emote
-/obj/item/organ/external/wings/proc/make_flap_sound(mob/living/carbon/wing_owner)
+/obj/item/organ/wings/proc/make_flap_sound(mob/living/carbon/wing_owner)
return
///Bodypart overlay of default wings. Does not have any wing functionality
diff --git a/code/modules/surgery/organs/helpers.dm b/code/modules/surgery/organs/helpers.dm
index 598d5146e58fa..bec23ed568920 100644
--- a/code/modules/surgery/organs/helpers.dm
+++ b/code/modules/surgery/organs/helpers.dm
@@ -5,6 +5,7 @@
* * typepath The typepath of the organ to get
*/
/mob/proc/get_organ_by_type(typepath)
+ RETURN_TYPE(/obj/item/organ)
return
/**
diff --git a/code/modules/surgery/organs/internal/_internal_organ.dm b/code/modules/surgery/organs/internal/_internal_organ.dm
index 8b7bd35493127..0527e6d79808f 100644
--- a/code/modules/surgery/organs/internal/_internal_organ.dm
+++ b/code/modules/surgery/organs/internal/_internal_organ.dm
@@ -1,11 +1,11 @@
-/obj/item/organ/internal
+/obj/item/organ
name = "organ"
-/obj/item/organ/internal/Initialize(mapload)
+/obj/item/organ/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
-/obj/item/organ/internal/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
. = ..()
// organs_slot must ALWAYS be ordered in the same way as organ_process_order
@@ -14,7 +14,7 @@
STOP_PROCESSING(SSobj, src)
-/obj/item/organ/internal/on_mob_remove(mob/living/carbon/organ_owner, special = FALSE)
+/obj/item/organ/on_mob_remove(mob/living/carbon/organ_owner, special = FALSE)
. = ..()
if((organ_flags & ORGAN_VITAL) && !special && !HAS_TRAIT(organ_owner, TRAIT_GODMODE))
@@ -24,10 +24,10 @@
START_PROCESSING(SSobj, src)
-/obj/item/organ/internal/process(seconds_per_tick, times_fired)
+/obj/item/organ/process(seconds_per_tick, times_fired)
on_death(seconds_per_tick, times_fired) //Kinda hate doing it like this, but I really don't want to call process directly.
-/obj/item/organ/internal/on_death(seconds_per_tick, times_fired) //runs decay when outside of a person
+/obj/item/organ/on_death(seconds_per_tick, times_fired) //runs decay when outside of a person
if(organ_flags & (ORGAN_ROBOTIC | ORGAN_FROZEN))
return
@@ -45,7 +45,7 @@
/// NOTE: THIS IS VERY HOT. Be careful what you put in here
/// To give you some scale, if there's 100 carbons in the game, they each have maybe 9 organs
/// So that's 900 calls to this proc every life process. Please don't be dumb
-/obj/item/organ/internal/on_life(seconds_per_tick, times_fired) //repair organ damage if the organ is not failing
+/obj/item/organ/on_life(seconds_per_tick, times_fired) //repair organ damage if the organ is not failing
if(organ_flags & ORGAN_FAILING)
handle_failing_organs(seconds_per_tick)
return
@@ -70,15 +70,15 @@
apply_organ_damage(-healing_amount * maxHealth * seconds_per_tick, damage) // pass curent damage incase we are over cap
///Used as callbacks by object pooling
-/obj/item/organ/internal/exit_wardrobe()
+/obj/item/organ/exit_wardrobe()
START_PROCESSING(SSobj, src)
//See above
-/obj/item/organ/internal/enter_wardrobe()
+/obj/item/organ/enter_wardrobe()
STOP_PROCESSING(SSobj, src)
///Organs don't die instantly, and neither should you when you get fucked up
-/obj/item/organ/internal/handle_failing_organs(seconds_per_tick)
+/obj/item/organ/handle_failing_organs(seconds_per_tick)
if(owner.stat == DEAD)
return
diff --git a/code/modules/surgery/organs/internal/appendix/_appendix.dm b/code/modules/surgery/organs/internal/appendix/_appendix.dm
index 420d4efc1185c..020d5186af9e6 100644
--- a/code/modules/surgery/organs/internal/appendix/_appendix.dm
+++ b/code/modules/surgery/organs/internal/appendix/_appendix.dm
@@ -2,14 +2,14 @@
#define APPENDICITIS_PROB 100 * (0.1 * (1 / 25) / 3600)
#define INFLAMATION_ADVANCEMENT_PROB 2
-/obj/item/organ/internal/appendix
+/obj/item/organ/appendix
name = "appendix"
icon_state = "appendix"
base_icon_state = "appendix"
zone = BODY_ZONE_PRECISE_GROIN
slot = ORGAN_SLOT_APPENDIX
- food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/toxin/bad_food = 5)
+ food_reagents = list(/datum/reagent/consumable/nutriment/organ_tissue = 5, /datum/reagent/toxin/bad_food = 5)
grind_results = list(/datum/reagent/toxin/bad_food = 5)
healing_factor = STANDARD_ORGAN_HEALING
decay_factor = STANDARD_ORGAN_DECAY
@@ -19,15 +19,15 @@
var/inflamation_stage = 0
-/obj/item/organ/internal/appendix/update_name()
+/obj/item/organ/appendix/update_name()
. = ..()
name = "[inflamation_stage ? "inflamed " : null][initial(name)]"
-/obj/item/organ/internal/appendix/update_icon_state()
+/obj/item/organ/appendix/update_icon_state()
icon_state = "[base_icon_state][inflamation_stage ? "inflamed" : ""]"
return ..()
-/obj/item/organ/internal/appendix/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/appendix/on_life(seconds_per_tick, times_fired)
. = ..()
if(!owner)
return
@@ -40,7 +40,7 @@
else if(SPT_PROB(APPENDICITIS_PROB, seconds_per_tick) && !HAS_TRAIT(owner, TRAIT_TEMPORARY_BODY))
become_inflamed()
-/obj/item/organ/internal/appendix/proc/become_inflamed()
+/obj/item/organ/appendix/proc/become_inflamed()
inflamation_stage = 1
update_appearance()
if(owner)
@@ -52,7 +52,7 @@
header = "Whoa, Sick!",
)
-/obj/item/organ/internal/appendix/proc/inflamation(seconds_per_tick)
+/obj/item/organ/appendix/proc/inflamation(seconds_per_tick)
var/mob/living/carbon/organ_owner = owner
if(inflamation_stage < 3 && SPT_PROB(INFLAMATION_ADVANCEMENT_PROB, seconds_per_tick))
inflamation_stage += 1
@@ -73,21 +73,21 @@
organ_owner.adjustOrganLoss(ORGAN_SLOT_APPENDIX, 15)
-/obj/item/organ/internal/appendix/get_availability(datum/species/owner_species, mob/living/owner_mob)
+/obj/item/organ/appendix/get_availability(datum/species/owner_species, mob/living/owner_mob)
return owner_species.mutantappendix
-/obj/item/organ/internal/appendix/on_mob_remove(mob/living/carbon/organ_owner)
+/obj/item/organ/appendix/on_mob_remove(mob/living/carbon/organ_owner)
. = ..()
REMOVE_TRAIT(organ_owner, TRAIT_DISEASELIKE_SEVERITY_MEDIUM, type)
organ_owner.med_hud_set_status()
-/obj/item/organ/internal/appendix/on_mob_insert(mob/living/carbon/organ_owner)
+/obj/item/organ/appendix/on_mob_insert(mob/living/carbon/organ_owner)
. = ..()
if(inflamation_stage)
ADD_TRAIT(organ_owner, TRAIT_DISEASELIKE_SEVERITY_MEDIUM, type)
organ_owner.med_hud_set_status()
-/obj/item/organ/internal/appendix/get_status_text(advanced, add_tooltips)
+/obj/item/organ/appendix/get_status_text(advanced, add_tooltips)
if(!(organ_flags & ORGAN_FAILING) && inflamation_stage)
return conditional_tooltip("Inflamed", "Remove surgically.", add_tooltips)
return ..()
diff --git a/code/modules/surgery/organs/internal/appendix/appendix_golem.dm b/code/modules/surgery/organs/internal/appendix/appendix_golem.dm
index 5510b4bf96796..08a53e28f8d9c 100644
--- a/code/modules/surgery/organs/internal/appendix/appendix_golem.dm
+++ b/code/modules/surgery/organs/internal/appendix/appendix_golem.dm
@@ -1,5 +1,5 @@
-/obj/item/organ/internal/appendix/golem
+/obj/item/organ/appendix/golem
name = "internal forge"
desc = "This expanded digestive chamber allows golems to smelt minerals, provided that they are immersed in lava."
icon_state = "ethereal_heart-off"
@@ -8,16 +8,16 @@
/// Action which performs smelting
var/datum/action/cooldown/internal_smelting/smelter
-/obj/item/organ/internal/appendix/golem/Initialize(mapload)
+/obj/item/organ/appendix/golem/Initialize(mapload)
. = ..()
smelter = new(src)
-/obj/item/organ/internal/appendix/golem/on_mob_insert(mob/living/carbon/organ_owner)
+/obj/item/organ/appendix/golem/on_mob_insert(mob/living/carbon/organ_owner)
. = ..()
RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(check_for_lava))
/// Give the action while in lava
-/obj/item/organ/internal/appendix/golem/proc/check_for_lava(mob/living/owner)
+/obj/item/organ/appendix/golem/proc/check_for_lava(mob/living/owner)
SIGNAL_HANDLER
if (!islava(owner.loc))
smelter.Remove(owner)
@@ -25,12 +25,12 @@
if (smelter.owner != owner)
smelter.Grant(owner)
-/obj/item/organ/internal/appendix/golem/on_mob_remove(mob/living/carbon/organ_owner)
+/obj/item/organ/appendix/golem/on_mob_remove(mob/living/carbon/organ_owner)
UnregisterSignal(organ_owner, COMSIG_MOVABLE_MOVED)
smelter?.Remove(organ_owner) // Might have been deleted by Destroy already
return ..()
-/obj/item/organ/internal/appendix/golem/Destroy()
+/obj/item/organ/appendix/golem/Destroy()
QDEL_NULL(smelter)
return ..()
diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm b/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm
index 0946d1441039c..a07b8caed6c9f 100644
--- a/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm
+++ b/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/cyberimp/arm
+/obj/item/organ/cyberimp/arm
name = "arm-mounted implant"
desc = "You shouldn't see this! Adminhelp and report this as an issue on github!"
zone = BODY_ZONE_R_ARM
@@ -22,7 +22,7 @@
/// Organ slot that the implant occupies for the left arm
var/left_arm_organ_slot = ORGAN_SLOT_LEFT_ARM_AUG
-/obj/item/organ/internal/cyberimp/arm/Initialize(mapload)
+/obj/item/organ/cyberimp/arm/Initialize(mapload)
. = ..()
if(ispath(active_item))
active_item = new active_item(src)
@@ -35,7 +35,7 @@
update_appearance()
SetSlotFromZone()
-/obj/item/organ/internal/cyberimp/arm/Destroy()
+/obj/item/organ/cyberimp/arm/Destroy()
hand = null
active_item = null
for(var/datum/weakref/ref in items_list)
@@ -49,7 +49,7 @@
/datum/action/item_action/organ_action/toggle/toolkit
desc = "You can also activate your empty hand or the tool in your hand to open the tools radial menu."
-/obj/item/organ/internal/cyberimp/arm/proc/SetSlotFromZone()
+/obj/item/organ/cyberimp/arm/proc/SetSlotFromZone()
switch(zone)
if(BODY_ZONE_L_ARM)
slot = left_arm_organ_slot
@@ -58,16 +58,16 @@
else
CRASH("Invalid zone for [type]")
-/obj/item/organ/internal/cyberimp/arm/update_icon()
+/obj/item/organ/cyberimp/arm/update_icon()
. = ..()
transform = (zone == BODY_ZONE_R_ARM) ? null : matrix(-1, 0, 0, 0, 1, 0)
-/obj/item/organ/internal/cyberimp/arm/examine(mob/user)
+/obj/item/organ/cyberimp/arm/examine(mob/user)
. = ..()
if(IS_ROBOTIC_ORGAN(src))
. += span_info("[src] is assembled in the [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm configuration. You can use a screwdriver to reassemble it.")
-/obj/item/organ/internal/cyberimp/arm/screwdriver_act(mob/living/user, obj/item/screwtool)
+/obj/item/organ/cyberimp/arm/screwdriver_act(mob/living/user, obj/item/screwtool)
. = ..()
if(.)
return TRUE
@@ -80,19 +80,19 @@
to_chat(user, span_notice("You modify [src] to be installed on the [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm."))
update_appearance()
-/obj/item/organ/internal/cyberimp/arm/on_mob_insert(mob/living/carbon/arm_owner)
+/obj/item/organ/cyberimp/arm/on_mob_insert(mob/living/carbon/arm_owner)
. = ..()
RegisterSignal(arm_owner, COMSIG_CARBON_POST_ATTACH_LIMB, PROC_REF(on_limb_attached))
RegisterSignal(arm_owner, COMSIG_KB_MOB_DROPITEM_DOWN, PROC_REF(dropkey)) //We're nodrop, but we'll watch for the drop hotkey anyway and then stow if possible.
on_limb_attached(arm_owner, arm_owner.hand_bodyparts[zone == BODY_ZONE_R_ARM ? RIGHT_HANDS : LEFT_HANDS])
-/obj/item/organ/internal/cyberimp/arm/on_mob_remove(mob/living/carbon/arm_owner)
+/obj/item/organ/cyberimp/arm/on_mob_remove(mob/living/carbon/arm_owner)
. = ..()
Retract()
UnregisterSignal(arm_owner, list(COMSIG_CARBON_POST_ATTACH_LIMB, COMSIG_KB_MOB_DROPITEM_DOWN))
on_limb_detached(hand)
-/obj/item/organ/internal/cyberimp/arm/proc/on_limb_attached(mob/living/carbon/source, obj/item/bodypart/limb)
+/obj/item/organ/cyberimp/arm/proc/on_limb_attached(mob/living/carbon/source, obj/item/bodypart/limb)
SIGNAL_HANDLER
if(!limb || QDELETED(limb) || limb.body_zone != zone)
return
@@ -102,18 +102,18 @@
RegisterSignal(limb, COMSIG_BODYPART_REMOVED, PROC_REF(on_limb_detached))
hand = limb
-/obj/item/organ/internal/cyberimp/arm/proc/on_limb_detached(obj/item/bodypart/source)
+/obj/item/organ/cyberimp/arm/proc/on_limb_detached(obj/item/bodypart/source)
SIGNAL_HANDLER
if(source != hand || QDELETED(hand))
return
UnregisterSignal(hand, list(COMSIG_ITEM_ATTACK_SELF, COMSIG_BODYPART_REMOVED))
hand = null
-/obj/item/organ/internal/cyberimp/arm/proc/on_item_attack_self()
+/obj/item/organ/cyberimp/arm/proc/on_item_attack_self()
SIGNAL_HANDLER
INVOKE_ASYNC(src, PROC_REF(ui_action_click))
-/obj/item/organ/internal/cyberimp/arm/emp_act(severity)
+/obj/item/organ/cyberimp/arm/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF || !IS_ROBOTIC_ORGAN(src))
return
@@ -129,7 +129,7 @@
* quick way to store implant items. In this case, we check to make sure the user has the correct arm
* selected, and that the item is actually owned by us, and then we'll hand off the rest to Retract()
**/
-/obj/item/organ/internal/cyberimp/arm/proc/dropkey(mob/living/carbon/host)
+/obj/item/organ/cyberimp/arm/proc/dropkey(mob/living/carbon/host)
SIGNAL_HANDLER
if(!host)
return //How did we even get here
@@ -138,7 +138,7 @@
if(Retract())
return COMSIG_KB_ACTIVATED
-/obj/item/organ/internal/cyberimp/arm/proc/Retract()
+/obj/item/organ/cyberimp/arm/proc/Retract()
if(!active_item || (active_item in src))
return FALSE
active_item.resistance_flags = active_item::resistance_flags
@@ -159,7 +159,7 @@
playsound(get_turf(owner), retract_sound, 50, TRUE)
return TRUE
-/obj/item/organ/internal/cyberimp/arm/proc/Extend(obj/item/augment)
+/obj/item/organ/cyberimp/arm/proc/Extend(obj/item/augment)
if(!(augment in src))
return
@@ -198,12 +198,12 @@
if(length(items_list) > 1)
RegisterSignals(active_item, list(COMSIG_ITEM_ATTACK_SELF, COMSIG_ITEM_ATTACK_SELF_SECONDARY), PROC_REF(swap_tools)) // secondary for welders
-/obj/item/organ/internal/cyberimp/arm/proc/swap_tools(active_item)
+/obj/item/organ/cyberimp/arm/proc/swap_tools(active_item)
SIGNAL_HANDLER
Retract(active_item)
INVOKE_ASYNC(src, PROC_REF(ui_action_click))
-/obj/item/organ/internal/cyberimp/arm/ui_action_click()
+/obj/item/organ/cyberimp/arm/ui_action_click()
if((organ_flags & ORGAN_FAILING) || (!active_item && !contents.len))
to_chat(owner, span_warning("The implant doesn't respond. It seems to be broken..."))
return
@@ -228,7 +228,7 @@
Retract()
-/obj/item/organ/internal/cyberimp/arm/gun/emp_act(severity)
+/obj/item/organ/cyberimp/arm/gun/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
@@ -243,25 +243,25 @@
organ_flags |= ORGAN_FAILING
-/obj/item/organ/internal/cyberimp/arm/gun/laser
+/obj/item/organ/cyberimp/arm/gun/laser
name = "arm-mounted laser implant"
desc = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arm and remains inside when not in use."
icon_state = "arm_laser"
items_to_create = list(/obj/item/gun/energy/laser/mounted/augment)
-/obj/item/organ/internal/cyberimp/arm/gun/laser/l
+/obj/item/organ/cyberimp/arm/gun/laser/l
zone = BODY_ZONE_L_ARM
-/obj/item/organ/internal/cyberimp/arm/gun/taser
+/obj/item/organ/cyberimp/arm/gun/taser
name = "arm-mounted taser implant"
desc = "A variant of the arm cannon implant that fires electrodes and disabler shots. The cannon emerges from the subject's arm and remains inside when not in use."
icon_state = "arm_taser"
items_to_create = list(/obj/item/gun/energy/e_gun/advtaser/mounted)
-/obj/item/organ/internal/cyberimp/arm/gun/taser/l
+/obj/item/organ/cyberimp/arm/gun/taser/l
zone = BODY_ZONE_L_ARM
-/obj/item/organ/internal/cyberimp/arm/toolset
+/obj/item/organ/cyberimp/arm/toolset
name = "integrated toolset implant"
desc = "A stripped-down version of the engineering cyborg toolset, designed to be installed on subject's arm. Contain advanced versions of every tool."
icon_state = "toolkit_engineering"
@@ -275,10 +275,10 @@
/obj/item/multitool/cyborg,
)
-/obj/item/organ/internal/cyberimp/arm/toolset/l
+/obj/item/organ/cyberimp/arm/toolset/l
zone = BODY_ZONE_L_ARM
-/obj/item/organ/internal/cyberimp/arm/toolset/emag_act(mob/user, obj/item/card/emag/emag_card)
+/obj/item/organ/cyberimp/arm/toolset/emag_act(mob/user, obj/item/card/emag/emag_card)
for(var/datum/weakref/created_item in items_list)
var/obj/potential_knife = created_item.resolve()
if(istype(/obj/item/knife/combat/cyborg, potential_knife))
@@ -288,23 +288,23 @@
items_list += WEAKREF(new /obj/item/knife/combat/cyborg(src))
return TRUE
-/obj/item/organ/internal/cyberimp/arm/esword
+/obj/item/organ/cyberimp/arm/esword
name = "arm-mounted energy blade"
desc = "An illegal and highly dangerous cybernetic implant that can project a deadly blade of concentrated energy."
items_to_create = list(/obj/item/melee/energy/blade/hardlight)
-/obj/item/organ/internal/cyberimp/arm/medibeam
+/obj/item/organ/cyberimp/arm/medibeam
name = "integrated medical beamgun"
desc = "A cybernetic implant that allows the user to project a healing beam from their hand."
items_to_create = list(/obj/item/gun/medbeam)
-/obj/item/organ/internal/cyberimp/arm/flash
+/obj/item/organ/cyberimp/arm/flash
name = "integrated high-intensity photon projector" //Why not
desc = "An integrated projector mounted onto a user's arm that is able to be used as a powerful flash."
items_to_create = list(/obj/item/assembly/flash/armimplant)
-/obj/item/organ/internal/cyberimp/arm/flash/Initialize(mapload)
+/obj/item/organ/cyberimp/arm/flash/Initialize(mapload)
. = ..()
for(var/datum/weakref/created_item in items_list)
var/obj/potential_flash = created_item.resolve()
@@ -313,22 +313,22 @@
var/obj/item/assembly/flash/armimplant/flash = potential_flash
flash.arm = WEAKREF(src)
-/obj/item/organ/internal/cyberimp/arm/flash/Extend()
+/obj/item/organ/cyberimp/arm/flash/Extend()
. = ..()
active_item.set_light_range(7)
active_item.set_light_on(TRUE)
-/obj/item/organ/internal/cyberimp/arm/flash/Retract()
+/obj/item/organ/cyberimp/arm/flash/Retract()
if(active_item)
active_item.set_light_on(FALSE)
return ..()
-/obj/item/organ/internal/cyberimp/arm/baton
+/obj/item/organ/cyberimp/arm/baton
name = "arm electrification implant"
desc = "An illegal combat implant that allows the user to administer disabling shocks from their arm."
items_to_create = list(/obj/item/borg/stun)
-/obj/item/organ/internal/cyberimp/arm/combat
+/obj/item/organ/cyberimp/arm/combat
name = "combat cybernetics implant"
desc = "A powerful cybernetic implant that contains combat modules built into the user's arm."
items_to_create = list(
@@ -338,7 +338,7 @@
/obj/item/assembly/flash/armimplant,
)
-/obj/item/organ/internal/cyberimp/arm/combat/Initialize(mapload)
+/obj/item/organ/cyberimp/arm/combat/Initialize(mapload)
. = ..()
for(var/datum/weakref/created_item in items_list)
var/obj/potential_flash = created_item.resolve()
@@ -347,7 +347,7 @@
var/obj/item/assembly/flash/armimplant/flash = potential_flash
flash.arm = WEAKREF(src)
-/obj/item/organ/internal/cyberimp/arm/surgery
+/obj/item/organ/cyberimp/arm/surgery
name = "surgical toolset implant"
desc = "A set of surgical tools hidden behind a concealed panel on the user's arm."
icon_state = "toolkit_surgical"
@@ -362,7 +362,7 @@
/obj/item/surgical_drapes,
)
-/obj/item/organ/internal/cyberimp/arm/surgery/emagged
+/obj/item/organ/cyberimp/arm/surgery/emagged
name = "hacked surgical toolset implant"
desc = "A set of surgical tools hidden behind a concealed panel on the user's arm. This one seems to have been tampered with."
items_to_create = list(
@@ -376,7 +376,7 @@
/obj/item/knife/combat/cyborg,
)
-/obj/item/organ/internal/cyberimp/arm/strongarm
+/obj/item/organ/cyberimp/arm/strongarm
name = "\proper Strong-Arm empowered musculature implant"
desc = "When implanted, this cybernetic implant will enhance the muscles of the arm to deliver more power-per-action."
icon_state = "muscle_implant"
@@ -409,19 +409,19 @@
///Tracks how soon we can perform another slam attack
COOLDOWN_DECLARE(slam_cooldown)
-/obj/item/organ/internal/cyberimp/arm/strongarm/l
+/obj/item/organ/cyberimp/arm/strongarm/l
zone = BODY_ZONE_L_ARM
-/obj/item/organ/internal/cyberimp/arm/strongarm/on_mob_insert(mob/living/carbon/arm_owner)
+/obj/item/organ/cyberimp/arm/strongarm/on_mob_insert(mob/living/carbon/arm_owner)
. = ..()
if(ishuman(arm_owner)) //Sorry, only humans
RegisterSignal(arm_owner, COMSIG_LIVING_EARLY_UNARMED_ATTACK, PROC_REF(on_attack_hand))
-/obj/item/organ/internal/cyberimp/arm/strongarm/on_mob_remove(mob/living/carbon/arm_owner)
+/obj/item/organ/cyberimp/arm/strongarm/on_mob_remove(mob/living/carbon/arm_owner)
. = ..()
UnregisterSignal(arm_owner, COMSIG_LIVING_EARLY_UNARMED_ATTACK)
-/obj/item/organ/internal/cyberimp/arm/strongarm/emp_act(severity)
+/obj/item/organ/cyberimp/arm/strongarm/emp_act(severity)
. = ..()
if((organ_flags & ORGAN_FAILING) || . & EMP_PROTECT_SELF)
return
@@ -429,11 +429,11 @@
organ_flags |= ORGAN_FAILING
addtimer(CALLBACK(src, PROC_REF(reboot)), 90 / severity)
-/obj/item/organ/internal/cyberimp/arm/strongarm/proc/reboot()
+/obj/item/organ/cyberimp/arm/strongarm/proc/reboot()
organ_flags &= ~ORGAN_FAILING
owner.balloon_alert(owner, "your arm stops spasming!")
-/obj/item/organ/internal/cyberimp/arm/strongarm/proc/on_attack_hand(mob/living/carbon/human/source, atom/target, proximity, modifiers)
+/obj/item/organ/cyberimp/arm/strongarm/proc/on_attack_hand(mob/living/carbon/human/source, atom/target, proximity, modifiers)
SIGNAL_HANDLER
if(source.get_active_hand() != hand || !proximity)
diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm b/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm
index c9cbfbe445bdf..eae996502e4ab 100644
--- a/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm
+++ b/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm
@@ -1,9 +1,9 @@
-/obj/item/organ/internal/cyberimp/chest
+/obj/item/organ/cyberimp/chest
name = "cybernetic torso implant"
desc = "Implants for the organs in your torso."
zone = BODY_ZONE_CHEST
-/obj/item/organ/internal/cyberimp/chest/nutriment
+/obj/item/organ/cyberimp/chest/nutriment
name = "nutriment pump implant"
desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are starving."
icon_state = "nutriment_implant"
@@ -12,7 +12,7 @@
var/poison_amount = 5
slot = ORGAN_SLOT_STOMACH_AID
-/obj/item/organ/internal/cyberimp/chest/nutriment/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/cyberimp/chest/nutriment/on_life(seconds_per_tick, times_fired)
if(synthesizing)
return
@@ -22,10 +22,10 @@
owner.adjust_nutrition(25 * seconds_per_tick)
addtimer(CALLBACK(src, PROC_REF(synth_cool)), 5 SECONDS)
-/obj/item/organ/internal/cyberimp/chest/nutriment/proc/synth_cool()
+/obj/item/organ/cyberimp/chest/nutriment/proc/synth_cool()
synthesizing = FALSE
-/obj/item/organ/internal/cyberimp/chest/nutriment/emp_act(severity)
+/obj/item/organ/cyberimp/chest/nutriment/emp_act(severity)
. = ..()
if(!owner || . & EMP_PROTECT_SELF)
return
@@ -33,14 +33,14 @@
to_chat(owner, span_warning("You feel like your insides are burning."))
-/obj/item/organ/internal/cyberimp/chest/nutriment/plus
+/obj/item/organ/cyberimp/chest/nutriment/plus
name = "nutriment pump implant PLUS"
desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are hungry."
icon_state = "adv_nutriment_implant"
hunger_threshold = NUTRITION_LEVEL_HUNGRY
poison_amount = 10
-/obj/item/organ/internal/cyberimp/chest/reviver
+/obj/item/organ/cyberimp/chest/reviver
name = "reviver implant"
desc = "This implant will attempt to revive and heal you if you lose consciousness. For the faint of heart!"
icon_state = "reviver_implant"
@@ -50,15 +50,15 @@
COOLDOWN_DECLARE(reviver_cooldown)
COOLDOWN_DECLARE(defib_cooldown)
-/obj/item/organ/internal/cyberimp/chest/reviver/on_death(seconds_per_tick, times_fired)
- if(isnull(owner)) // owner can be null, on_death() gets called by /obj/item/organ/internal/process() for decay
+/obj/item/organ/cyberimp/chest/reviver/on_death(seconds_per_tick, times_fired)
+ if(isnull(owner)) // owner can be null, on_death() gets called by /obj/item/organ/process() for decay
return
try_heal() // Allows implant to work even on dead people
-/obj/item/organ/internal/cyberimp/chest/reviver/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/cyberimp/chest/reviver/on_life(seconds_per_tick, times_fired)
try_heal()
-/obj/item/organ/internal/cyberimp/chest/reviver/proc/try_heal()
+/obj/item/organ/cyberimp/chest/reviver/proc/try_heal()
if(reviving)
if(owner.stat == CONSCIOUS)
COOLDOWN_START(src, reviver_cooldown, revive_cost)
@@ -78,7 +78,7 @@
COOLDOWN_START(src, defib_cooldown, 8 SECONDS) // 5 seconds after heal proc delay
-/obj/item/organ/internal/cyberimp/chest/reviver/proc/heal()
+/obj/item/organ/cyberimp/chest/reviver/proc/heal()
if(COOLDOWN_FINISHED(src, defib_cooldown))
revive_dead()
@@ -106,7 +106,7 @@
owner.visible_message(span_warning("[owner]'s body twitches a bit."), span_notice("You feel like something is patching your injured body."))
-/obj/item/organ/internal/cyberimp/chest/reviver/proc/revive_dead()
+/obj/item/organ/cyberimp/chest/reviver/proc/revive_dead()
if(!COOLDOWN_FINISHED(src, defib_cooldown) || owner.stat != DEAD || owner.can_defib() != DEFIB_POSSIBLE)
return
owner.notify_revival("You are being revived by [src]!")
@@ -126,7 +126,7 @@
log_game("[owner] been revived by [src]")
-/obj/item/organ/internal/cyberimp/chest/reviver/emp_act(severity)
+/obj/item/organ/cyberimp/chest/reviver/emp_act(severity)
. = ..()
if(!owner || . & EMP_PROTECT_SELF)
return
@@ -143,7 +143,7 @@
to_chat(human_owner, span_userdanger("You feel a horrible agony in your chest!"))
addtimer(CALLBACK(src, PROC_REF(undo_heart_attack)), 600 / severity)
-/obj/item/organ/internal/cyberimp/chest/reviver/proc/undo_heart_attack()
+/obj/item/organ/cyberimp/chest/reviver/proc/undo_heart_attack()
var/mob/living/carbon/human/human_owner = owner
if(!istype(human_owner))
return
@@ -152,7 +152,7 @@
to_chat(human_owner, span_notice("You feel your heart beating again!"))
-/obj/item/organ/internal/cyberimp/chest/thrusters
+/obj/item/organ/cyberimp/chest/thrusters
name = "implantable thrusters set"
desc = "An implantable set of thruster ports. They use the gas from environment or subject's internals for propulsion in zero-gravity areas. \
Unlike regular jetpacks, this device has no stabilization system."
@@ -164,7 +164,7 @@
w_class = WEIGHT_CLASS_NORMAL
var/on = FALSE
-/obj/item/organ/internal/cyberimp/chest/thrusters/Initialize(mapload)
+/obj/item/organ/cyberimp/chest/thrusters/Initialize(mapload)
. = ..()
AddComponent( \
/datum/component/jetpack, \
@@ -178,21 +178,21 @@
/datum/effect_system/trail_follow/ion, \
)
-/obj/item/organ/internal/cyberimp/chest/thrusters/Remove(mob/living/carbon/thruster_owner, special, movement_flags)
+/obj/item/organ/cyberimp/chest/thrusters/Remove(mob/living/carbon/thruster_owner, special, movement_flags)
if(on)
deactivate(silent = TRUE)
..()
-/obj/item/organ/internal/cyberimp/chest/thrusters/ui_action_click()
+/obj/item/organ/cyberimp/chest/thrusters/ui_action_click()
toggle()
-/obj/item/organ/internal/cyberimp/chest/thrusters/proc/toggle(silent = FALSE)
+/obj/item/organ/cyberimp/chest/thrusters/proc/toggle(silent = FALSE)
if(on)
deactivate()
else
activate()
-/obj/item/organ/internal/cyberimp/chest/thrusters/proc/activate(silent = FALSE)
+/obj/item/organ/cyberimp/chest/thrusters/proc/activate(silent = FALSE)
if(on)
return
if(organ_flags & ORGAN_FAILING)
@@ -208,7 +208,7 @@
to_chat(owner, span_notice("You turn your thrusters set on."))
update_appearance()
-/obj/item/organ/internal/cyberimp/chest/thrusters/proc/deactivate(silent = FALSE)
+/obj/item/organ/cyberimp/chest/thrusters/proc/deactivate(silent = FALSE)
if(!on)
return
SEND_SIGNAL(src, COMSIG_THRUSTER_DEACTIVATED, owner)
@@ -218,11 +218,11 @@
on = FALSE
update_appearance()
-/obj/item/organ/internal/cyberimp/chest/thrusters/update_icon_state()
+/obj/item/organ/cyberimp/chest/thrusters/update_icon_state()
icon_state = "[base_icon_state][on ? "-on" : null]"
return ..()
-/obj/item/organ/internal/cyberimp/chest/thrusters/proc/allow_thrust(num, use_fuel = TRUE)
+/obj/item/organ/cyberimp/chest/thrusters/proc/allow_thrust(num, use_fuel = TRUE)
if(!owner)
return FALSE
@@ -257,7 +257,7 @@
deactivate(silent = TRUE)
return FALSE
-/obj/item/organ/internal/cyberimp/chest/spine
+/obj/item/organ/cyberimp/chest/spine
name = "\improper Herculean gravitronic spinal implant"
desc = "This gravitronic spinal interface is able to improve the athletics of a user, allowing them greater physical ability. \
Contains a slot which can be upgraded with a gravity anomaly core, improving its performance."
@@ -274,21 +274,21 @@
/// The overlay for our implant to indicate that, yes, this person has an implant inserted.
var/mutable_appearance/stone_overlay
-/obj/item/organ/internal/cyberimp/chest/spine/emp_act(severity)
+/obj/item/organ/cyberimp/chest/spine/emp_act(severity)
. = ..()
if(!owner || . & EMP_PROTECT_SELF)
return
to_chat(owner, span_warning("You feel sheering pain as your body is crushed like a soda can!"))
owner.apply_damage(20/severity, BRUTE, def_zone = BODY_ZONE_CHEST)
-/obj/item/organ/internal/cyberimp/chest/spine/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/cyberimp/chest/spine/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
. = ..()
stone_overlay = mutable_appearance(icon = 'icons/effects/effects.dmi', icon_state = "stone")
organ_owner.add_overlay(stone_overlay)
if(core_applied)
organ_owner.AddElement(/datum/element/forced_gravity, 1)
-/obj/item/organ/internal/cyberimp/chest/spine/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/cyberimp/chest/spine/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
if(stone_overlay)
organ_owner.cut_overlay(stone_overlay)
@@ -296,7 +296,7 @@
if(core_applied)
organ_owner.RemoveElement(/datum/element/forced_gravity, 1)
-/obj/item/organ/internal/cyberimp/chest/spine/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/item/organ/cyberimp/chest/spine/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
. = ..()
if(core_applied)
user.balloon_alert(user, "core already installed!")
diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_eyes.dm b/code/modules/surgery/organs/internal/cyberimp/augments_eyes.dm
index aa67fe0c08de8..d720953a24ca5 100644
--- a/code/modules/surgery/organs/internal/cyberimp/augments_eyes.dm
+++ b/code/modules/surgery/organs/internal/cyberimp/augments_eyes.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/cyberimp/eyes
+/obj/item/organ/cyberimp/eyes
name = "cybernetic eye implant"
desc = "Implants for your eyes."
icon_state = "eye_implant"
@@ -7,7 +7,7 @@
w_class = WEIGHT_CLASS_TINY
// HUD implants
-/obj/item/organ/internal/cyberimp/eyes/hud
+/obj/item/organ/cyberimp/eyes/hud
name = "HUD implant"
desc = "These cybernetic eyes will display a HUD over everything you see. Maybe."
slot = ORGAN_SLOT_HUD
@@ -17,7 +17,7 @@
var/toggled_on = TRUE
-/obj/item/organ/internal/cyberimp/eyes/hud/proc/toggle_hud(mob/living/carbon/eye_owner)
+/obj/item/organ/cyberimp/eyes/hud/proc/toggle_hud(mob/living/carbon/eye_owner)
if(toggled_on)
toggled_on = FALSE
eye_owner.add_traits(HUD_traits, ORGAN_TRAIT)
@@ -27,36 +27,36 @@
eye_owner.remove_traits(HUD_traits, ORGAN_TRAIT)
balloon_alert(eye_owner, "hud enabled")
-/obj/item/organ/internal/cyberimp/eyes/hud/mob_insert(mob/living/carbon/eye_owner, special = FALSE, movement_flags)
+/obj/item/organ/cyberimp/eyes/hud/mob_insert(mob/living/carbon/eye_owner, special = FALSE, movement_flags)
. = ..()
eye_owner.add_traits(HUD_traits, ORGAN_TRAIT)
toggled_on = TRUE
-/obj/item/organ/internal/cyberimp/eyes/hud/mob_remove(mob/living/carbon/eye_owner, special, movement_flags)
+/obj/item/organ/cyberimp/eyes/hud/mob_remove(mob/living/carbon/eye_owner, special, movement_flags)
. = ..()
eye_owner.remove_traits(HUD_traits, ORGAN_TRAIT)
toggled_on = FALSE
-/obj/item/organ/internal/cyberimp/eyes/hud/medical
+/obj/item/organ/cyberimp/eyes/hud/medical
name = "medical HUD implant"
desc = "These cybernetic eye implants will display a medical HUD over everything you see."
icon_state = "eye_implant_medical"
HUD_traits = list(TRAIT_MEDICAL_HUD)
-/obj/item/organ/internal/cyberimp/eyes/hud/security
+/obj/item/organ/cyberimp/eyes/hud/security
name = "security HUD implant"
desc = "These cybernetic eye implants will display a security HUD over everything you see."
icon_state = "eye_implant_security"
HUD_traits = list(TRAIT_SECURITY_HUD)
-/obj/item/organ/internal/cyberimp/eyes/hud/diagnostic
+/obj/item/organ/cyberimp/eyes/hud/diagnostic
name = "diagnostic HUD implant"
desc = "These cybernetic eye implants will display a diagnostic HUD over everything you see."
icon_state = "eye_implant_diagnostic"
HUD_traits = list(TRAIT_DIAGNOSTIC_HUD, TRAIT_BOT_PATH_HUD)
-/obj/item/organ/internal/cyberimp/eyes/hud/security/syndicate
+/obj/item/organ/cyberimp/eyes/hud/security/syndicate
name = "contraband security HUD implant"
desc = "A Cybersun Industries brand Security HUD Implant. These illicit cybernetic eye implants will display a security HUD over everything you see."
icon_state = "eye_implant_syndicate"
diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm b/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm
index 334c8941f6b8f..42f0e5ac7b237 100644
--- a/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm
+++ b/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm
@@ -1,5 +1,5 @@
-/obj/item/organ/internal/cyberimp
+/obj/item/organ/cyberimp
name = "cybernetic implant"
desc = "A state-of-the-art implant that improves a baseline's functionality."
@@ -8,7 +8,7 @@
var/implant_color = COLOR_WHITE
var/implant_overlay
-/obj/item/organ/internal/cyberimp/New(mob/implanted_mob = null)
+/obj/item/organ/cyberimp/New(mob/implanted_mob = null)
if(iscarbon(implanted_mob))
src.Insert(implanted_mob)
if(implant_overlay)
@@ -19,13 +19,13 @@
//[[[[BRAIN]]]]
-/obj/item/organ/internal/cyberimp/brain
+/obj/item/organ/cyberimp/brain
name = "cybernetic brain implant"
desc = "Injectors of extra sub-routines for the brain."
zone = BODY_ZONE_HEAD
w_class = WEIGHT_CLASS_TINY
-/obj/item/organ/internal/cyberimp/brain/emp_act(severity)
+/obj/item/organ/cyberimp/brain/emp_act(severity)
. = ..()
if(!owner || . & EMP_PROTECT_SELF)
return
@@ -34,7 +34,7 @@
to_chat(owner, span_warning("Your body seizes up!"))
-/obj/item/organ/internal/cyberimp/brain/anti_drop
+/obj/item/organ/cyberimp/brain/anti_drop
name = "anti-drop implant"
desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle."
icon_state = "brain_implant_antidrop"
@@ -43,7 +43,7 @@
slot = ORGAN_SLOT_BRAIN_CEREBELLUM
actions_types = list(/datum/action/item_action/organ_action/toggle)
-/obj/item/organ/internal/cyberimp/brain/anti_drop/ui_action_click()
+/obj/item/organ/cyberimp/brain/anti_drop/ui_action_click()
active = !active
if(active)
var/list/hold_list = owner.get_empty_held_indexes()
@@ -63,7 +63,7 @@
to_chat(owner, span_notice("Your hands relax..."))
-/obj/item/organ/internal/cyberimp/brain/anti_drop/emp_act(severity)
+/obj/item/organ/cyberimp/brain/anti_drop/emp_act(severity)
. = ..()
if(!owner || . & EMP_PROTECT_SELF)
return
@@ -78,25 +78,25 @@
stored_items = list()
-/obj/item/organ/internal/cyberimp/brain/anti_drop/proc/release_items()
+/obj/item/organ/cyberimp/brain/anti_drop/proc/release_items()
for(var/obj/item/stored_item as anything in stored_items)
REMOVE_TRAIT(stored_item, TRAIT_NODROP, IMPLANT_TRAIT)
UnregisterSignal(stored_item, COMSIG_ITEM_DROPPED)
stored_items = list()
-/obj/item/organ/internal/cyberimp/brain/anti_drop/Remove(mob/living/carbon/implant_owner, special, movement_flags)
+/obj/item/organ/cyberimp/brain/anti_drop/Remove(mob/living/carbon/implant_owner, special, movement_flags)
if(active)
ui_action_click()
..()
-/obj/item/organ/internal/cyberimp/brain/anti_drop/proc/on_held_item_dropped(obj/item/source, mob/user)
+/obj/item/organ/cyberimp/brain/anti_drop/proc/on_held_item_dropped(obj/item/source, mob/user)
SIGNAL_HANDLER
REMOVE_TRAIT(source, TRAIT_NODROP, IMPLANT_TRAIT)
UnregisterSignal(source, COMSIG_ITEM_DROPPED)
stored_items -= source
-/obj/item/organ/internal/cyberimp/brain/anti_stun
+/obj/item/organ/cyberimp/brain/anti_stun
name = "CNS rebooter implant"
desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned."
icon_state = "brain_implant_rebooter"
@@ -114,28 +114,28 @@
var/stun_resistance_time = 6 SECONDS
COOLDOWN_DECLARE(implant_cooldown)
-/obj/item/organ/internal/cyberimp/brain/anti_stun/on_mob_remove(mob/living/carbon/implant_owner)
+/obj/item/organ/cyberimp/brain/anti_stun/on_mob_remove(mob/living/carbon/implant_owner)
. = ..()
UnregisterSignal(implant_owner, signalCache)
UnregisterSignal(implant_owner, COMSIG_LIVING_ENTER_STAMCRIT)
remove_stun_buffs(implant_owner)
-/obj/item/organ/internal/cyberimp/brain/anti_stun/on_mob_insert(mob/living/carbon/receiver)
+/obj/item/organ/cyberimp/brain/anti_stun/on_mob_insert(mob/living/carbon/receiver)
. = ..()
RegisterSignals(receiver, signalCache, PROC_REF(on_signal))
RegisterSignal(receiver, COMSIG_LIVING_ENTER_STAMCRIT, PROC_REF(on_stamcrit))
-/obj/item/organ/internal/cyberimp/brain/anti_stun/proc/on_signal(datum/source, amount)
+/obj/item/organ/cyberimp/brain/anti_stun/proc/on_signal(datum/source, amount)
SIGNAL_HANDLER
if(!(organ_flags & ORGAN_FAILING) && amount > 0)
addtimer(CALLBACK(src, PROC_REF(clear_stuns)), stun_cap_amount, TIMER_UNIQUE|TIMER_OVERRIDE)
-/obj/item/organ/internal/cyberimp/brain/anti_stun/proc/on_stamcrit(datum/source)
+/obj/item/organ/cyberimp/brain/anti_stun/proc/on_stamcrit(datum/source)
SIGNAL_HANDLER
if(!(organ_flags & ORGAN_FAILING))
addtimer(CALLBACK(src, PROC_REF(clear_stuns)), stun_cap_amount, TIMER_UNIQUE|TIMER_OVERRIDE)
-/obj/item/organ/internal/cyberimp/brain/anti_stun/proc/clear_stuns()
+/obj/item/organ/cyberimp/brain/anti_stun/proc/clear_stuns()
if(isnull(owner) || (organ_flags & ORGAN_FAILING) || !COOLDOWN_FINISHED(src, implant_cooldown))
return
@@ -156,37 +156,37 @@
COOLDOWN_START(src, implant_cooldown, 60 SECONDS)
addtimer(CALLBACK(src, PROC_REF(implant_ready)),60 SECONDS)
-/obj/item/organ/internal/cyberimp/brain/anti_stun/proc/implant_ready()
+/obj/item/organ/cyberimp/brain/anti_stun/proc/implant_ready()
if(owner)
to_chat(owner, span_purple("Your rebooter implant is ready."))
-/obj/item/organ/internal/cyberimp/brain/anti_stun/proc/give_stun_buffs(mob/living/give_to = owner)
+/obj/item/organ/cyberimp/brain/anti_stun/proc/give_stun_buffs(mob/living/give_to = owner)
give_to.add_traits(list(TRAIT_STUNIMMUNE, TRAIT_BATON_RESISTANCE), REF(src))
give_to.add_movespeed_mod_immunities(REF(src), /datum/movespeed_modifier/damage_slowdown)
-/obj/item/organ/internal/cyberimp/brain/anti_stun/proc/remove_stun_buffs(mob/living/remove_from = owner)
+/obj/item/organ/cyberimp/brain/anti_stun/proc/remove_stun_buffs(mob/living/remove_from = owner)
remove_from.remove_traits(list(TRAIT_STUNIMMUNE, TRAIT_BATON_RESISTANCE), REF(src))
remove_from.remove_movespeed_mod_immunities(REF(src), /datum/movespeed_modifier/damage_slowdown)
-/obj/item/organ/internal/cyberimp/brain/anti_stun/emp_act(severity)
+/obj/item/organ/cyberimp/brain/anti_stun/emp_act(severity)
. = ..()
if((organ_flags & ORGAN_FAILING) || . & EMP_PROTECT_SELF)
return
organ_flags |= ORGAN_FAILING
addtimer(CALLBACK(src, PROC_REF(reboot)), 90 / severity)
-/obj/item/organ/internal/cyberimp/brain/anti_stun/proc/reboot()
+/obj/item/organ/cyberimp/brain/anti_stun/proc/reboot()
organ_flags &= ~ORGAN_FAILING
implant_ready()
-/obj/item/organ/internal/cyberimp/brain/connector
+/obj/item/organ/cyberimp/brain/connector
name = "CNS skillchip connector implant"
desc = "This cybernetic adds a port to the back of your head, where you can remove or add skillchips at will."
icon_state = "brain_implant_connector"
slot = ORGAN_SLOT_BRAIN_CNS
actions_types = list(/datum/action/item_action/organ_action/use)
-/obj/item/organ/internal/cyberimp/brain/connector/ui_action_click()
+/obj/item/organ/cyberimp/brain/connector/ui_action_click()
to_chat(owner, span_warning("You start fiddling around with [src]..."))
playsound(owner, 'sound/items/taperecorder/tape_flip.ogg', 20, vary = TRUE) // asmr
@@ -208,12 +208,12 @@
else
to_chat(owner, span_warning("You try to insert [owner.get_active_held_item()] into [src], but it won't fit!")) // make it kill you if you shove a crayon inside or something
else // no inhand item, assume removal
- var/obj/item/organ/internal/brain/chippy_brain = owner.get_organ_by_type(/obj/item/organ/internal/brain)
+ var/obj/item/organ/brain/chippy_brain = owner.get_organ_by_type(/obj/item/organ/brain)
if(!chippy_brain)
CRASH("we using a brain implant wit no brain")
remove_skillchip(chippy_brain)
-/obj/item/organ/internal/cyberimp/brain/connector/proc/insert_skillchip(obj/item/skillchip/skillchip)
+/obj/item/organ/cyberimp/brain/connector/proc/insert_skillchip(obj/item/skillchip/skillchip)
var/fail_string = owner.implant_skillchip(skillchip, force = FALSE)
if(fail_string)
to_chat(owner, span_warning(fail_string))
@@ -229,7 +229,7 @@
// success!
playsound(owner, 'sound/machines/chime.ogg', 10, vary = TRUE)
-/obj/item/organ/internal/cyberimp/brain/connector/proc/remove_skillchip(obj/item/organ/internal/brain/chippy_brain)
+/obj/item/organ/cyberimp/brain/connector/proc/remove_skillchip(obj/item/organ/brain/chippy_brain)
var/obj/item/skillchip/skillchip = show_radial_menu(owner, owner, chippy_brain.skillchips)
if(skillchip)
owner.remove_skillchip(skillchip, silent = FALSE)
@@ -241,7 +241,7 @@
to_chat(owner, span_warning("Your brain is empty!")) // heh
-/obj/item/organ/internal/cyberimp/brain/connector/emp_act(severity)
+/obj/item/organ/cyberimp/brain/connector/emp_act(severity)
. = ..()
if((organ_flags & ORGAN_FAILING) || . & EMP_PROTECT_SELF)
return
@@ -253,7 +253,7 @@
// you either lose a chip or a bit of your brain
owner.visible_message(span_warning("Something falls to the ground from behind [owner]'s head."),\
span_boldwarning("You feel something fall off from behind your head."))
- var/obj/item/organ/internal/brain/chippy_brain = owner.get_organ_by_type(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/chippy_brain = owner.get_organ_by_type(ORGAN_SLOT_BRAIN)
var/obj/item/skillchip/skillchip = chippy_brain?.skillchips[1]
if(skillchip)
owner.remove_skillchip(skillchip, silent = TRUE)
@@ -263,7 +263,7 @@
remove_brain()
addtimer(CALLBACK(src, PROC_REF(reboot)), 90 / severity)
-/obj/item/organ/internal/cyberimp/brain/connector/proc/remove_brain(obj/item/organ/internal/brain/chippy_brain, severity = 1)
+/obj/item/organ/cyberimp/brain/connector/proc/remove_brain(obj/item/organ/brain/chippy_brain, severity = 1)
playsound(owner, 'sound/effects/meatslap.ogg', 25, TRUE)
if(!chippy_brain)
return
@@ -277,21 +277,21 @@
new /obj/effect/decal/cleanable/blood/gibs/up(get_turf(owner))
return FALSE
-/obj/item/organ/internal/cyberimp/brain/connector/proc/reboot()
+/obj/item/organ/cyberimp/brain/connector/proc/reboot()
organ_flags &= ~ORGAN_FAILING
//[[[[MOUTH]]]]
-/obj/item/organ/internal/cyberimp/mouth
+/obj/item/organ/cyberimp/mouth
zone = BODY_ZONE_PRECISE_MOUTH
-/obj/item/organ/internal/cyberimp/mouth/breathing_tube
+/obj/item/organ/cyberimp/mouth/breathing_tube
name = "breathing tube implant"
desc = "This simple implant adds an internals connector to your back, allowing you to use internals without a mask and protecting you from being choked."
icon_state = "implant_mask"
slot = ORGAN_SLOT_BREATHING_TUBE
w_class = WEIGHT_CLASS_TINY
-/obj/item/organ/internal/cyberimp/mouth/breathing_tube/emp_act(severity)
+/obj/item/organ/cyberimp/mouth/breathing_tube/emp_act(severity)
. = ..()
if(!owner || . & EMP_PROTECT_SELF)
return
diff --git a/code/modules/surgery/organs/internal/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm
index bbc45b093998c..f565fc3b42cd4 100644
--- a/code/modules/surgery/organs/internal/ears/_ears.dm
+++ b/code/modules/surgery/organs/internal/ears/_ears.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/ears
+/obj/item/organ/ears
name = "ears"
icon_state = "ears"
desc = "There are three parts to the ear. Inner, middle and outer. Only one of these parts should be normally visible."
@@ -26,7 +26,7 @@
/// Multiplier for both long term and short term ear damage
var/damage_multiplier = 1
-/obj/item/organ/internal/ears/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/ears/on_life(seconds_per_tick, times_fired)
// only inform when things got worse, needs to happen before we heal
if((damage > low_threshold && prev_damage < low_threshold) || (damage > high_threshold && prev_damage < high_threshold))
to_chat(owner, span_warning("The ringing in your ears grows louder, blocking out any external noises for a moment."))
@@ -44,20 +44,20 @@
adjustEarDamage(0, 4)
SEND_SOUND(owner, sound('sound/items/weapons/flash_ring.ogg'))
-/obj/item/organ/internal/ears/apply_organ_damage(damage_amount, maximum, required_organ_flag)
+/obj/item/organ/ears/apply_organ_damage(damage_amount, maximum, required_organ_flag)
. = ..()
update_temp_deafness()
-/obj/item/organ/internal/ears/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/ears/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
. = ..()
update_temp_deafness()
-/obj/item/organ/internal/ears/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/ears/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
UnregisterSignal(organ_owner, COMSIG_MOB_SAY)
REMOVE_TRAIT(organ_owner, TRAIT_DEAF, EAR_DAMAGE)
-/obj/item/organ/internal/ears/get_status_appendix(advanced, add_tooltips)
+/obj/item/organ/ears/get_status_appendix(advanced, add_tooltips)
if(owner.stat == DEAD || !HAS_TRAIT(owner, TRAIT_DEAF))
return
if(advanced)
@@ -69,7 +69,7 @@
return conditional_tooltip("Subject is [(organ_flags & ORGAN_FAILING) ? "permanently": "temporarily"] deaf from ear damage.", "Repair surgically, use medication such as [/datum/reagent/medicine/inacusiate::name], or protect ears with earmuffs.", add_tooltips)
return "Subject is deaf."
-/obj/item/organ/internal/ears/show_on_condensed_scans()
+/obj/item/organ/ears/show_on_condensed_scans()
// Always show if we have an appendix
return ..() || (owner.stat != DEAD && HAS_TRAIT(owner, TRAIT_DEAF))
@@ -79,7 +79,7 @@
* * ddmg: Handles normal organ damage
* * ddeaf: Handles temporary deafness, 1 ddeaf = 2 seconds of deafness, by default (with no multiplier)
*/
-/obj/item/organ/internal/ears/proc/adjustEarDamage(ddmg = 0, ddeaf = 0)
+/obj/item/organ/ears/proc/adjustEarDamage(ddmg = 0, ddeaf = 0)
if(HAS_TRAIT(owner, TRAIT_GODMODE))
update_temp_deafness()
return
@@ -93,7 +93,7 @@
update_temp_deafness()
/// Updates status of deafness
-/obj/item/organ/internal/ears/proc/update_temp_deafness()
+/obj/item/organ/ears/proc/update_temp_deafness()
// if we're failing we always have at least some deaf stacks (and thus deafness)
if(organ_flags & ORGAN_FAILING)
deaf = max(deaf, 1 * damage_multiplier)
@@ -113,7 +113,7 @@
UnregisterSignal(owner, COMSIG_MOB_SAY)
/// Being deafened by loud noises makes you shout
-/obj/item/organ/internal/ears/proc/adjust_speech(datum/source, list/speech_args)
+/obj/item/organ/ears/proc/adjust_speech(datum/source, list/speech_args)
SIGNAL_HANDLER
if(HAS_TRAIT_NOT_FROM(source, TRAIT_DEAF, EAR_DAMAGE))
@@ -141,11 +141,11 @@
speech_args[SPEECH_MESSAGE] = message
return COMPONENT_UPPERCASE_SPEECH
-/obj/item/organ/internal/ears/invincible
+/obj/item/organ/ears/invincible
damage_multiplier = 0
-/obj/item/organ/internal/ears/cat
+/obj/item/organ/ears/cat
name = "cat ears"
icon = 'icons/obj/clothing/head/costume.dmi'
worn_icon = 'icons/mob/clothing/head/costume.dmi'
@@ -164,6 +164,7 @@
layers = EXTERNAL_FRONT | EXTERNAL_BEHIND
color_source = ORGAN_COLOR_HAIR
feature_key = "ears"
+ dyable = TRUE
/// Layer upon which we add the inner ears overlay
var/inner_layer = EXTERNAL_FRONT
@@ -192,21 +193,21 @@
base_ears.overlays += inner_ears
return base_ears
-/obj/item/organ/internal/ears/penguin
+/obj/item/organ/ears/penguin
name = "penguin ears"
desc = "The source of a penguin's happy feet."
-/obj/item/organ/internal/ears/penguin/on_mob_insert(mob/living/carbon/human/ear_owner)
+/obj/item/organ/ears/penguin/on_mob_insert(mob/living/carbon/human/ear_owner)
. = ..()
to_chat(ear_owner, span_notice("You suddenly feel like you've lost your balance."))
ear_owner.AddElementTrait(TRAIT_WADDLING, ORGAN_TRAIT, /datum/element/waddling)
-/obj/item/organ/internal/ears/penguin/on_mob_remove(mob/living/carbon/human/ear_owner)
+/obj/item/organ/ears/penguin/on_mob_remove(mob/living/carbon/human/ear_owner)
. = ..()
to_chat(ear_owner, span_notice("Your sense of balance comes back to you."))
REMOVE_TRAIT(ear_owner, TRAIT_WADDLING, ORGAN_TRAIT)
-/obj/item/organ/internal/ears/cybernetic
+/obj/item/organ/ears/cybernetic
name = "basic cybernetic ears"
icon_state = "ears-c"
desc = "A basic cybernetic organ designed to mimic the operation of ears."
@@ -214,13 +215,13 @@
organ_flags = ORGAN_ROBOTIC
failing_desc = "seems to be broken."
-/obj/item/organ/internal/ears/cybernetic/upgraded
+/obj/item/organ/ears/cybernetic/upgraded
name = "cybernetic ears"
icon_state = "ears-c-u"
desc = "An advanced cybernetic ear, surpassing the performance of organic ears."
damage_multiplier = 0.5
-/obj/item/organ/internal/ears/cybernetic/whisper
+/obj/item/organ/ears/cybernetic/whisper
name = "whisper-sensitive cybernetic ears"
icon_state = "ears-c-u"
desc = "Allows the user to more easily hear whispers. The user becomes extra vulnerable to loud noises, however"
@@ -229,31 +230,31 @@
// The original idea was to use signals to do this not traits. Unfortunately, the star effect used for whispers applies before any relevant signals
// This seems like the least invasive solution
-/obj/item/organ/internal/ears/cybernetic/whisper/on_mob_insert(mob/living/carbon/ear_owner)
+/obj/item/organ/ears/cybernetic/whisper/on_mob_insert(mob/living/carbon/ear_owner)
. = ..()
ADD_TRAIT(ear_owner, TRAIT_GOOD_HEARING, ORGAN_TRAIT)
-/obj/item/organ/internal/ears/cybernetic/whisper/on_mob_remove(mob/living/carbon/ear_owner)
+/obj/item/organ/ears/cybernetic/whisper/on_mob_remove(mob/living/carbon/ear_owner)
. = ..()
REMOVE_TRAIT(ear_owner, TRAIT_GOOD_HEARING, ORGAN_TRAIT)
// "X-ray ears" that let you hear through walls
-/obj/item/organ/internal/ears/cybernetic/xray
+/obj/item/organ/ears/cybernetic/xray
name = "wall-penetrating cybernetic ears"
icon_state = "ears-c-u"
desc = "Throguh the power of modern engineering, allows the user to hear speech through walls. The user becomes extra vulnerable to loud noises, however"
// Same sensitivity as felinid ears
damage_multiplier = 2
-/obj/item/organ/internal/ears/cybernetic/xray/on_mob_insert(mob/living/carbon/ear_owner)
+/obj/item/organ/ears/cybernetic/xray/on_mob_insert(mob/living/carbon/ear_owner)
. = ..()
ADD_TRAIT(ear_owner, TRAIT_XRAY_HEARING, ORGAN_TRAIT)
-/obj/item/organ/internal/ears/cybernetic/xray/on_mob_remove(mob/living/carbon/ear_owner)
+/obj/item/organ/ears/cybernetic/xray/on_mob_remove(mob/living/carbon/ear_owner)
. = ..()
REMOVE_TRAIT(ear_owner, TRAIT_XRAY_HEARING, ORGAN_TRAIT)
-/obj/item/organ/internal/ears/cybernetic/emp_act(severity)
+/obj/item/organ/ears/cybernetic/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm
index c2c5a8382750b..1ddaf904a92a6 100644
--- a/code/modules/surgery/organs/internal/eyes/_eyes.dm
+++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/eyes
+/obj/item/organ/eyes
name = BODY_ZONE_PRECISE_EYES
icon_state = "eyes"
desc = "I see you!"
@@ -54,7 +54,7 @@
/// Scarring on this organ
var/scarring = NONE
-/obj/item/organ/internal/eyes/mob_insert(mob/living/carbon/receiver, special, movement_flags)
+/obj/item/organ/eyes/mob_insert(mob/living/carbon/receiver, special, movement_flags)
// If we don't do this before everything else, heterochromia will be reset leading to eye_color_right no longer being accurate
if(ishuman(receiver))
var/mob/living/carbon/human/human_recipient = receiver
@@ -70,7 +70,7 @@
/// Refreshes the visuals of the eyes
/// If call_update is TRUE, we also will call update_body
-/obj/item/organ/internal/eyes/proc/refresh(mob/living/carbon/eye_owner = owner, call_update = TRUE)
+/obj/item/organ/eyes/proc/refresh(mob/living/carbon/eye_owner = owner, call_update = TRUE)
owner.update_sight()
owner.update_tint()
@@ -99,7 +99,7 @@
if(call_update)
affected_human.update_body()
-/obj/item/organ/internal/eyes/mob_remove(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/eyes/mob_remove(mob/living/carbon/organ_owner, special, movement_flags)
. = ..()
if(ishuman(organ_owner))
@@ -127,7 +127,7 @@
organ_owner.update_sight()
UnregisterSignal(organ_owner, COMSIG_ATOM_BULLET_ACT)
-/obj/item/organ/internal/eyes/proc/on_bullet_act(datum/source, obj/projectile/proj, def_zone)
+/obj/item/organ/eyes/proc/on_bullet_act(datum/source, obj/projectile/proj, def_zone)
SIGNAL_HANDLER
// Once-a-dozen-rounds level of rare
@@ -154,7 +154,7 @@
#define OFFSET_Y 2
/// Similar to get_status_text, but appends the text after the damage report, for additional status info
-/obj/item/organ/internal/eyes/get_status_appendix(advanced, add_tooltips)
+/obj/item/organ/eyes/get_status_appendix(advanced, add_tooltips)
if(owner.stat == DEAD || HAS_TRAIT(owner, TRAIT_KNOCKEDOUT))
return
if(owner.is_blind())
@@ -183,13 +183,13 @@
return "Subject is nearsighted."
return ""
-/obj/item/organ/internal/eyes/show_on_condensed_scans()
+/obj/item/organ/eyes/show_on_condensed_scans()
// Always show if we have an appendix
return ..() || (owner.stat != DEAD && !HAS_TRAIT(owner, TRAIT_KNOCKEDOUT) && (owner.is_blind() || owner.is_nearsighted()))
/// This proc generates a list of overlays that the eye should be displayed using for the given parent
-/obj/item/organ/internal/eyes/proc/generate_body_overlay(mob/living/carbon/human/parent)
- if(!istype(parent) || parent.get_organ_by_type(/obj/item/organ/internal/eyes) != src)
+/obj/item/organ/eyes/proc/generate_body_overlay(mob/living/carbon/human/parent)
+ if(!istype(parent) || parent.get_organ_by_type(/obj/item/organ/eyes) != src)
CRASH("Generating a body overlay for [src] targeting an invalid parent '[parent]'.")
if(isnull(eye_icon_state))
@@ -244,14 +244,14 @@
return overlays
-/obj/item/organ/internal/eyes/update_overlays()
+/obj/item/organ/eyes/update_overlays()
. = ..()
if (scarring & RIGHT_EYE_SCAR)
. += mutable_appearance('icons/obj/medical/organs/organs.dmi', "eye_scar_right")
if (scarring & LEFT_EYE_SCAR)
. += mutable_appearance('icons/obj/medical/organs/organs.dmi', "eye_scar_left")
-/obj/item/organ/internal/eyes/proc/apply_scar(side)
+/obj/item/organ/eyes/proc/apply_scar(side)
if (scarring & side)
return
scarring |= side
@@ -259,7 +259,7 @@
update_appearance()
apply_scarring_effects()
-/obj/item/organ/internal/eyes/proc/apply_scarring_effects()
+/obj/item/organ/eyes/proc/apply_scarring_effects()
if (!owner)
return
var/datum/status_effect/grouped/nearsighted/nearsightedness = owner.is_nearsighted()
@@ -275,7 +275,7 @@
owner.become_blind(EYE_SCARRING_TRAIT)
owner.update_body()
-/obj/item/organ/internal/eyes/proc/fix_scar(side)
+/obj/item/organ/eyes/proc/fix_scar(side)
if (!(scarring & side))
return
scarring &= ~side
@@ -287,35 +287,35 @@
owner.cure_blind(EYE_SCARRING_TRAIT)
owner.update_body()
-/obj/item/organ/internal/eyes/on_mob_insert(mob/living/carbon/eye_owner)
+/obj/item/organ/eyes/on_mob_insert(mob/living/carbon/eye_owner)
. = ..()
if (scarring)
apply_scarring_effects()
-/obj/item/organ/internal/eyes/on_mob_remove(mob/living/carbon/eye_owner)
+/obj/item/organ/eyes/on_mob_remove(mob/living/carbon/eye_owner)
. = ..()
if (scarring)
- owner.cure_nearsighted(TRAIT_RIGHT_EYE_SCAR)
- owner.cure_nearsighted(TRAIT_LEFT_EYE_SCAR)
- owner.cure_blind(EYE_SCARRING_TRAIT)
+ eye_owner.cure_nearsighted(TRAIT_RIGHT_EYE_SCAR)
+ eye_owner.cure_nearsighted(TRAIT_LEFT_EYE_SCAR)
+ eye_owner.cure_blind(EYE_SCARRING_TRAIT)
#undef OFFSET_X
#undef OFFSET_Y
//Gotta reset the eye color, because that persists
-/obj/item/organ/internal/eyes/enter_wardrobe()
+/obj/item/organ/eyes/enter_wardrobe()
. = ..()
eye_color_left = initial(eye_color_left)
eye_color_right = initial(eye_color_right)
-/obj/item/organ/internal/eyes/apply_organ_damage(damage_amount, maximum = maxHealth, required_organ_flag)
+/obj/item/organ/eyes/apply_organ_damage(damage_amount, maximum = maxHealth, required_organ_flag)
. = ..()
if(!owner)
return FALSE
apply_damaged_eye_effects()
/// Applies effects to our owner based on how damaged our eyes are
-/obj/item/organ/internal/eyes/proc/apply_damaged_eye_effects()
+/obj/item/organ/eyes/proc/apply_damaged_eye_effects()
// we're in healthy threshold, either try to heal (if damaged) or do nothing
if(damage <= low_threshold)
if(damaged)
@@ -352,7 +352,7 @@
#define NIGHTVISION_LIGHT_MID 2
#define NIGHTVISION_LIGHT_HIG 3
-/obj/item/organ/internal/eyes/night_vision
+/obj/item/organ/eyes/night_vision
actions_types = list(/datum/action/item_action/organ_action/use)
// These lists are used as the color cutoff for the eye
@@ -362,16 +362,16 @@
var/list/high_light_cutoff
var/light_level = NIGHTVISION_LIGHT_OFF
-/obj/item/organ/internal/eyes/night_vision/Initialize(mapload)
+/obj/item/organ/eyes/night_vision/Initialize(mapload)
. = ..()
- if (PERFORM_ALL_TESTS(focus_only/nightvision_color_cutoffs) && type != /obj/item/organ/internal/eyes/night_vision)
+ if (PERFORM_ALL_TESTS(focus_only/nightvision_color_cutoffs) && type != /obj/item/organ/eyes/night_vision)
if(length(low_light_cutoff) != 3 || length(medium_light_cutoff) != 3 || length(high_light_cutoff) != 3)
stack_trace("[type] did not have fully filled out color cutoff lists")
if(low_light_cutoff)
color_cutoffs = low_light_cutoff.Copy()
light_level = NIGHTVISION_LIGHT_LOW
-/obj/item/organ/internal/eyes/night_vision/ui_action_click()
+/obj/item/organ/eyes/night_vision/ui_action_click()
sight_flags = initial(sight_flags)
switch(light_level)
if (NIGHTVISION_LIGHT_OFF)
@@ -393,25 +393,25 @@
#undef NIGHTVISION_LIGHT_MID
#undef NIGHTVISION_LIGHT_HIG
-/obj/item/organ/internal/eyes/night_vision/mushroom
+/obj/item/organ/eyes/night_vision/mushroom
name = "fung-eye"
desc = "While on the outside they look inert and dead, the eyes of mushroom people are actually very advanced."
low_light_cutoff = list(0, 15, 20)
medium_light_cutoff = list(0, 20, 35)
high_light_cutoff = list(0, 40, 50)
-/obj/item/organ/internal/eyes/zombie
+/obj/item/organ/eyes/zombie
name = "undead eyes"
desc = "Somewhat counterintuitively, these half-rotten eyes actually have superior vision to those of a living human."
color_cutoffs = list(25, 35, 5)
-/obj/item/organ/internal/eyes/alien
+/obj/item/organ/eyes/alien
name = "alien eyes"
desc = "It turned out they had them after all!"
sight_flags = SEE_MOBS
color_cutoffs = list(25, 5, 42)
-/obj/item/organ/internal/eyes/golem
+/obj/item/organ/eyes/golem
name = "resonating crystal"
icon_state = "adamantine_cords"
eye_icon_state = null
@@ -437,14 +437,14 @@
///Robotic
-/obj/item/organ/internal/eyes/robotic
+/obj/item/organ/eyes/robotic
name = "robotic eyes"
icon_state = "cybernetic_eyeballs"
desc = "Your vision is augmented."
organ_flags = ORGAN_ROBOTIC
failing_desc = "seems to be broken."
-/obj/item/organ/internal/eyes/robotic/emp_act(severity)
+/obj/item/organ/eyes/robotic/emp_act(severity)
. = ..()
if((. & EMP_PROTECT_SELF) || !owner)
return
@@ -453,14 +453,14 @@
to_chat(owner, span_warning("Static obfuscates your vision!"))
owner.flash_act(visual = 1)
-/obj/item/organ/internal/eyes/robotic/basic
+/obj/item/organ/eyes/robotic/basic
name = "basic robotic eyes"
desc = "A pair of basic cybernetic eyes that restore vision, but at some vulnerability to light."
eye_color_left = "5500ff"
eye_color_right = "5500ff"
flash_protect = FLASH_PROTECTION_SENSITIVE
-/obj/item/organ/internal/eyes/robotic/basic/emp_act(severity)
+/obj/item/organ/eyes/robotic/basic/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
@@ -470,22 +470,22 @@
do_sparks(2, TRUE, owner)
owner.emote("scream")
-/obj/item/organ/internal/eyes/robotic/xray
+/obj/item/organ/eyes/robotic/xray
name = "\improper X-ray eyes"
desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile."
eye_color_left = "000"
eye_color_right = "000"
sight_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS
-/obj/item/organ/internal/eyes/robotic/xray/on_mob_insert(mob/living/carbon/eye_owner)
+/obj/item/organ/eyes/robotic/xray/on_mob_insert(mob/living/carbon/eye_owner)
. = ..()
ADD_TRAIT(eye_owner, TRAIT_XRAY_VISION, ORGAN_TRAIT)
-/obj/item/organ/internal/eyes/robotic/xray/on_mob_remove(mob/living/carbon/eye_owner)
+/obj/item/organ/eyes/robotic/xray/on_mob_remove(mob/living/carbon/eye_owner)
. = ..()
REMOVE_TRAIT(eye_owner, TRAIT_XRAY_VISION, ORGAN_TRAIT)
-/obj/item/organ/internal/eyes/robotic/thermals
+/obj/item/organ/eyes/robotic/thermals
name = "thermal eyes"
desc = "These cybernetic eye implants will give you thermal vision. Vertical slit pupil included."
eye_color_left = "FC0"
@@ -495,7 +495,7 @@
sight_flags = SEE_MOBS
flash_protect = FLASH_PROTECTION_SENSITIVE
-/obj/item/organ/internal/eyes/robotic/flashlight
+/obj/item/organ/eyes/robotic/flashlight
name = "flashlight eyes"
desc = "It's two flashlights rigged together with some wire. Why would you put these in someone's head?"
eye_color_left ="fee5a3"
@@ -506,11 +506,11 @@
tint = INFINITY
var/obj/item/flashlight/eyelight/eye
-/obj/item/organ/internal/eyes/robotic/flashlight/Initialize(mapload)
+/obj/item/organ/eyes/robotic/flashlight/Initialize(mapload)
. = ..()
AddElement(/datum/element/empprotection, EMP_PROTECT_ALL)
-/obj/item/organ/internal/eyes/robotic/flashlight/on_mob_insert(mob/living/carbon/victim)
+/obj/item/organ/eyes/robotic/flashlight/on_mob_insert(mob/living/carbon/victim)
. = ..()
if(!eye)
eye = new /obj/item/flashlight/eyelight()
@@ -519,7 +519,7 @@
eye.update_brightness(victim)
victim.become_blind(FLASHLIGHT_EYES)
-/obj/item/organ/internal/eyes/robotic/flashlight/on_mob_remove(mob/living/carbon/victim)
+/obj/item/organ/eyes/robotic/flashlight/on_mob_remove(mob/living/carbon/victim)
. = ..()
eye.set_light_on(FALSE)
eye.update_brightness(victim)
@@ -527,12 +527,12 @@
victim.cure_blind(FLASHLIGHT_EYES)
// Welding shield implant
-/obj/item/organ/internal/eyes/robotic/shield
+/obj/item/organ/eyes/robotic/shield
name = "shielded robotic eyes"
desc = "These reactive micro-shields will protect you from welders and flashes without obscuring your vision."
flash_protect = FLASH_PROTECTION_WELDER
-/obj/item/organ/internal/eyes/robotic/shield/Initialize(mapload)
+/obj/item/organ/eyes/robotic/shield/Initialize(mapload)
. = ..()
AddElement(/datum/element/empprotection, EMP_PROTECT_ALL)
@@ -542,7 +542,7 @@
#define UPDATE_EYES_LEFT 1
#define UPDATE_EYES_RIGHT 2
-/obj/item/organ/internal/eyes/robotic/glow
+/obj/item/organ/eyes/robotic/glow
name = "High Luminosity Eyes"
desc = "Special glowing eyes, used by snowflakes who want to be special."
eye_color_left = "000"
@@ -561,43 +561,43 @@
/// The custom selected eye color for the right eye. Defaults to the mob's natural eye color
var/right_eye_color_string
-/obj/item/organ/internal/eyes/robotic/glow/Initialize(mapload)
+/obj/item/organ/eyes/robotic/glow/Initialize(mapload)
. = ..()
eye = new /obj/item/flashlight/eyelight/glow
-/obj/item/organ/internal/eyes/robotic/glow/Destroy()
+/obj/item/organ/eyes/robotic/glow/Destroy()
. = ..()
deactivate(close_ui = TRUE)
QDEL_NULL(eye)
-/obj/item/organ/internal/eyes/robotic/glow/emp_act(severity)
+/obj/item/organ/eyes/robotic/glow/emp_act(severity)
. = ..()
if(!eye.light_on || . & EMP_PROTECT_SELF)
return
deactivate(close_ui = TRUE)
/// Set the initial color of the eyes on insert to be the mob's previous eye color.
-/obj/item/organ/internal/eyes/robotic/glow/mob_insert(mob/living/carbon/eye_recipient, special = FALSE, movement_flags = DELETE_IF_REPLACED)
+/obj/item/organ/eyes/robotic/glow/mob_insert(mob/living/carbon/eye_recipient, special = FALSE, movement_flags = DELETE_IF_REPLACED)
. = ..()
left_eye_color_string = old_eye_color_left
right_eye_color_string = old_eye_color_right
update_mob_eye_color(eye_recipient)
-/obj/item/organ/internal/eyes/robotic/glow/on_mob_insert(mob/living/carbon/eye_recipient)
+/obj/item/organ/eyes/robotic/glow/on_mob_insert(mob/living/carbon/eye_recipient)
. = ..()
deactivate(close_ui = TRUE)
eye.forceMove(eye_recipient)
-/obj/item/organ/internal/eyes/robotic/glow/on_mob_remove(mob/living/carbon/eye_owner)
+/obj/item/organ/eyes/robotic/glow/on_mob_remove(mob/living/carbon/eye_owner)
deactivate(eye_owner, close_ui = TRUE)
if(!QDELETED(eye))
eye.forceMove(src)
return ..()
-/obj/item/organ/internal/eyes/robotic/glow/ui_state(mob/user)
+/obj/item/organ/eyes/robotic/glow/ui_state(mob/user)
return GLOB.default_state
-/obj/item/organ/internal/eyes/robotic/glow/ui_status(mob/user, datum/ui_state/state)
+/obj/item/organ/eyes/robotic/glow/ui_status(mob/user, datum/ui_state/state)
if(!QDELETED(owner))
if(owner == user)
return min(
@@ -607,14 +607,14 @@
else return UI_CLOSE
return ..()
-/obj/item/organ/internal/eyes/robotic/glow/ui_interact(mob/user, datum/tgui/ui)
+/obj/item/organ/eyes/robotic/glow/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "HighLuminosityEyesMenu")
ui.autoupdate = FALSE
ui.open()
-/obj/item/organ/internal/eyes/robotic/glow/ui_data(mob/user)
+/obj/item/organ/eyes/robotic/glow/ui_data(mob/user)
var/list/data = list()
data["eyeColor"] = list(
@@ -628,7 +628,7 @@
return data
-/obj/item/organ/internal/eyes/robotic/glow/ui_act(action, list/params, datum/tgui/ui)
+/obj/item/organ/eyes/robotic/glow/ui_act(action, list/params, datum/tgui/ui)
. = ..()
if(.)
return
@@ -662,7 +662,7 @@
toggle_eye_color_mode()
return TRUE
-/obj/item/organ/internal/eyes/robotic/glow/ui_action_click(mob/user, action)
+/obj/item/organ/eyes/robotic/glow/ui_action_click(mob/user, action)
if(istype(action, /datum/action/item_action/organ_action/toggle))
toggle_active()
else if(istype(action, /datum/action/item_action/organ_action/use))
@@ -673,7 +673,7 @@
*
* Turns on the attached flashlight object, updates the mob overlay to be added.
*/
-/obj/item/organ/internal/eyes/robotic/glow/proc/activate()
+/obj/item/organ/eyes/robotic/glow/proc/activate()
if(eye.light_range)
eye.set_light_on(TRUE)
else
@@ -688,7 +688,7 @@
* * mob/living/carbon/eye_owner - the mob who the eyes belong to
* * close_ui - whether or not to close the ui
*/
-/obj/item/organ/internal/eyes/robotic/glow/proc/deactivate(mob/living/carbon/eye_owner = owner, close_ui = FALSE)
+/obj/item/organ/eyes/robotic/glow/proc/deactivate(mob/living/carbon/eye_owner = owner, close_ui = FALSE)
if(close_ui)
SStgui.close_uis(src)
eye.set_light_on(FALSE)
@@ -701,7 +701,7 @@
* Arguments:
* * to_update - whether we are setting the color for the light beam itself, or the individual eyes
*/
-/obj/item/organ/internal/eyes/robotic/glow/proc/randomize_color(to_update = UPDATE_LIGHT)
+/obj/item/organ/eyes/robotic/glow/proc/randomize_color(to_update = UPDATE_LIGHT)
var/new_color = "#"
for(var/i in 1 to 3)
new_color += num2hex(rand(0, 255), 2)
@@ -715,7 +715,7 @@
* Arguments:
* * new_range - the new range to set
*/
-/obj/item/organ/internal/eyes/robotic/glow/proc/set_beam_range(new_range)
+/obj/item/organ/eyes/robotic/glow/proc/set_beam_range(new_range)
var/old_light_range = eye.light_range
if(old_light_range == 0 && new_range > 0 && eye.light_on) // turn bring back the light overlay if we were previously at 0 (aka emissive eyes only)
eye.light_on = FALSE // this is stupid, but this has to be FALSE for set_light_on() to work.
@@ -731,7 +731,7 @@
* * to_update - whether we are setting the color for the light beam itself, or the individual eyes
* * sanitize - whether the hex string should be sanitized
*/
-/obj/item/organ/internal/eyes/robotic/glow/proc/set_beam_color(newcolor, to_update = UPDATE_LIGHT, sanitize = FALSE)
+/obj/item/organ/eyes/robotic/glow/proc/set_beam_color(newcolor, to_update = UPDATE_LIGHT, sanitize = FALSE)
var/newcolor_string
if(sanitize)
newcolor_string = sanitize_hexcolor(newcolor)
@@ -751,7 +751,7 @@
/**
* Toggle the attached flashlight object on or off
*/
-/obj/item/organ/internal/eyes/robotic/glow/proc/toggle_active()
+/obj/item/organ/eyes/robotic/glow/proc/toggle_active()
if(eye.light_on)
deactivate()
else
@@ -762,7 +762,7 @@
*
* Toggles the eye color mode on or off and then calls an update on the mob's eye color
*/
-/obj/item/organ/internal/eyes/robotic/glow/proc/toggle_eye_color_mode()
+/obj/item/organ/eyes/robotic/glow/proc/toggle_eye_color_mode()
eye_color_mode = !eye_color_mode
update_mob_eye_color()
@@ -773,7 +773,7 @@
* Arguments:
* * mob/living/carbon/eye_owner - the mob to update the eye color appearance of
*/
-/obj/item/organ/internal/eyes/robotic/glow/proc/update_mob_eye_color(mob/living/carbon/eye_owner = owner)
+/obj/item/organ/eyes/robotic/glow/proc/update_mob_eye_color(mob/living/carbon/eye_owner = owner)
switch(eye_color_mode)
if(MATCH_LIGHT_COLOR)
eye_color_left = light_color_string
@@ -804,39 +804,39 @@
#undef UPDATE_EYES_LEFT
#undef UPDATE_EYES_RIGHT
-/obj/item/organ/internal/eyes/moth
+/obj/item/organ/eyes/moth
name = "moth eyes"
desc = "These eyes seem to have increased sensitivity to bright light, with no improvement to low light vision."
eye_icon_state = "motheyes"
icon_state = "eyeballs-moth"
flash_protect = FLASH_PROTECTION_SENSITIVE
-/obj/item/organ/internal/eyes/robotic/moth
+/obj/item/organ/eyes/robotic/moth
name = "robotic moth eyes"
eye_icon_state = "motheyes"
icon_state = "eyeballs-cybermoth"
desc = "Your vision is augmented. Much like actual moth eyes, very sensitive to bright lights."
flash_protect = FLASH_PROTECTION_SENSITIVE
-/obj/item/organ/internal/eyes/robotic/basic/moth
+/obj/item/organ/eyes/robotic/basic/moth
name = "basic robotic moth eyes"
eye_icon_state = "motheyes"
icon_state = "eyeballs-cybermoth"
flash_protect = FLASH_PROTECTION_SENSITIVE
-/obj/item/organ/internal/eyes/robotic/xray/moth
+/obj/item/organ/eyes/robotic/xray/moth
name = "robotic eyes"
eye_icon_state = "motheyes"
icon_state = "eyeballs-cybermoth"
desc = "These cybernetic imitation moth eyes will give you X-ray vision. Blinking is futile. Much like actual moth eyes, very sensitive to bright lights."
flash_protect = FLASH_PROTECTION_SENSITIVE
-/obj/item/organ/internal/eyes/robotic/shield/moth
+/obj/item/organ/eyes/robotic/shield/moth
name = "shielded robotic moth eyes"
eye_icon_state = "motheyes"
icon_state = "eyeballs-cybermoth"
-/obj/item/organ/internal/eyes/robotic/glow/moth
+/obj/item/organ/eyes/robotic/glow/moth
name = "High Luminosity Moth Eyes"
eye_icon_state = "motheyes"
base_eye_state = "eyes_mothglow"
@@ -844,25 +844,25 @@
desc = "Special glowing eyes, to be one with the lamp. Much like actual moth eyes, very sensitive to bright lights."
flash_protect = FLASH_PROTECTION_SENSITIVE
-/obj/item/organ/internal/eyes/robotic/thermals/moth //we inherit flash weakness from thermals
+/obj/item/organ/eyes/robotic/thermals/moth //we inherit flash weakness from thermals
name = "thermal moth eyes"
eye_icon_state = "motheyes"
icon_state = "eyeballs-cybermoth"
-/obj/item/organ/internal/eyes/snail
+/obj/item/organ/eyes/snail
name = "snail eyes"
desc = "These eyes seem to have a large range, but might be cumbersome with glasses."
eye_icon_state = "snail_eyes"
icon_state = "snail_eyeballs"
eyes_layer = ABOVE_BODY_FRONT_HEAD_LAYER // DOPPLER EDIT - Roundstart Snails
-/obj/item/organ/internal/eyes/jelly
+/obj/item/organ/eyes/jelly
name = "jelly eyes"
desc = "These eyes are made of a soft jelly. Unlike all other eyes, though, there are three of them."
eye_icon_state = "jelleyes"
icon_state = "eyeballs-jelly"
-/obj/item/organ/internal/eyes/night_vision/maintenance_adapted
+/obj/item/organ/eyes/night_vision/maintenance_adapted
name = "adapted eyes"
desc = "These red eyes look like two foggy marbles. They give off a particularly worrying glow in the dark."
flash_protect = FLASH_PROTECTION_HYPER_SENSITIVE
@@ -875,11 +875,11 @@
medium_light_cutoff = list(15, 20, 30)
high_light_cutoff = list(30, 35, 50)
-/obj/item/organ/internal/eyes/night_vision/maintenance_adapted/on_mob_insert(mob/living/carbon/eye_owner)
+/obj/item/organ/eyes/night_vision/maintenance_adapted/on_mob_insert(mob/living/carbon/eye_owner)
. = ..()
ADD_TRAIT(eye_owner, TRAIT_UNNATURAL_RED_GLOWY_EYES, ORGAN_TRAIT)
-/obj/item/organ/internal/eyes/night_vision/maintenance_adapted/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/eyes/night_vision/maintenance_adapted/on_life(seconds_per_tick, times_fired)
if(!owner.is_blind() && isturf(owner.loc) && owner.has_light_nearby(light_amount=0.5)) //we allow a little more than usual so we can produce light from the adapted eyes
to_chat(owner, span_danger("Your eyes! They burn in the light!"))
apply_organ_damage(10) //blind quickly
@@ -888,6 +888,6 @@
apply_organ_damage(-10) //heal quickly
. = ..()
-/obj/item/organ/internal/eyes/night_vision/maintenance_adapted/on_mob_remove(mob/living/carbon/unadapted, special = FALSE)
+/obj/item/organ/eyes/night_vision/maintenance_adapted/on_mob_remove(mob/living/carbon/unadapted, special = FALSE)
REMOVE_TRAIT(unadapted, TRAIT_UNNATURAL_RED_GLOWY_EYES, ORGAN_TRAIT)
return ..()
diff --git a/code/modules/surgery/organs/internal/heart/_heart.dm b/code/modules/surgery/organs/internal/heart/_heart.dm
index ce659792529bb..20ad378529ff3 100644
--- a/code/modules/surgery/organs/internal/heart/_heart.dm
+++ b/code/modules/surgery/organs/internal/heart/_heart.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart
+/obj/item/organ/heart
name = "heart"
desc = "I feel bad for the heartless bastard who lost this."
icon_state = "heart-on"
@@ -19,7 +19,7 @@
attack_verb_simple = list("beat", "thump")
// Love is stored in the heart.
- food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/love = 2.5)
+ food_reagents = list(/datum/reagent/consumable/nutriment/organ_tissue = 5, /datum/reagent/love = 2.5)
// Heart attack code is in code/modules/mob/living/carbon/human/life.dm
@@ -32,18 +32,18 @@
/// whether the heart's been operated on to fix some of its damages
var/operated = FALSE
-/obj/item/organ/internal/heart/update_icon_state()
+/obj/item/organ/heart/update_icon_state()
. = ..()
icon_state = "[base_icon_state]-[beating ? "on" : "off"]"
-/obj/item/organ/internal/heart/Remove(mob/living/carbon/heartless, special, movement_flags)
+/obj/item/organ/heart/Remove(mob/living/carbon/heartless, special, movement_flags)
. = ..()
if(!special)
addtimer(CALLBACK(src, PROC_REF(stop_if_unowned)), 12 SECONDS)
beat = BEAT_NONE
owner?.stop_sound_channel(CHANNEL_HEARTBEAT)
-/obj/item/organ/internal/heart/proc/stop_if_unowned()
+/obj/item/organ/heart/proc/stop_if_unowned()
if(QDELETED(src))
return
if(IS_ROBOTIC_ORGAN(src))
@@ -51,7 +51,7 @@
if(isnull(owner))
Stop()
-/obj/item/organ/internal/heart/attack_self(mob/user)
+/obj/item/organ/heart/attack_self(mob/user)
. = ..()
if(.)
return
@@ -65,7 +65,7 @@
addtimer(CALLBACK(src, PROC_REF(stop_if_unowned)), 8 SECONDS)
return TRUE
-/obj/item/organ/internal/heart/proc/Stop()
+/obj/item/organ/heart/proc/Stop()
if(!beating)
return FALSE
@@ -75,7 +75,7 @@
owner?.stop_sound_channel(CHANNEL_HEARTBEAT)
return TRUE
-/obj/item/organ/internal/heart/proc/Restart()
+/obj/item/organ/heart/proc/Restart()
if(beating)
return FALSE
@@ -83,25 +83,25 @@
update_appearance()
return TRUE
-/obj/item/organ/internal/heart/OnEatFrom(eater, feeder)
+/obj/item/organ/heart/OnEatFrom(eater, feeder)
. = ..()
Stop()
/// Checks if the heart is beating.
/// Can be overridden to add more conditions for more complex hearts.
-/obj/item/organ/internal/heart/proc/is_beating()
+/obj/item/organ/heart/proc/is_beating()
return beating
-/obj/item/organ/internal/heart/get_status_text(advanced, add_tooltips)
+/obj/item/organ/heart/get_status_text(advanced, add_tooltips)
if(!beating && !(organ_flags & ORGAN_FAILING) && owner.needs_heart() && owner.stat != DEAD)
return conditional_tooltip("Cardiac Arrest", "Apply defibrillation immediately. Similar electric shocks may work in emergencies.", add_tooltips)
return ..()
-/obj/item/organ/internal/heart/show_on_condensed_scans()
+/obj/item/organ/heart/show_on_condensed_scans()
// Always show if the guy needs a heart (so its status can be monitored)
return ..() || owner.needs_heart()
-/obj/item/organ/internal/heart/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/heart/on_life(seconds_per_tick, times_fired)
..()
// If the owner doesn't need a heart, we don't need to do anything with it.
@@ -135,10 +135,10 @@
owner.stop_sound_channel(CHANNEL_HEARTBEAT)
beat = BEAT_NONE
-/obj/item/organ/internal/heart/get_availability(datum/species/owner_species, mob/living/owner_mob)
+/obj/item/organ/heart/get_availability(datum/species/owner_species, mob/living/owner_mob)
return owner_species.mutantheart
-/obj/item/organ/internal/heart/cursed
+/obj/item/organ/heart/cursed
name = "cursed heart"
desc = "A heart that, when inserted, will force you to pump it manually."
icon_state = "cursedheart-off"
@@ -150,7 +150,7 @@
var/heal_burn = 0
var/heal_oxy = 0
-/obj/item/organ/internal/heart/cursed/attack(mob/living/carbon/human/accursed, mob/living/carbon/human/user, obj/target)
+/obj/item/organ/heart/cursed/attack(mob/living/carbon/human/accursed, mob/living/carbon/human/user, obj/target)
if(accursed == user && istype(accursed))
playsound(user,'sound/effects/singlebeat.ogg',40,TRUE)
user.temporarilyRemoveItemFromInventory(src, TRUE)
@@ -158,17 +158,17 @@
else
return ..()
-/obj/item/organ/internal/heart/cursed/on_mob_insert(mob/living/carbon/accursed)
+/obj/item/organ/heart/cursed/on_mob_insert(mob/living/carbon/accursed)
. = ..()
accursed.AddComponent(/datum/component/manual_heart, pump_delay = pump_delay, blood_loss = blood_loss, heal_brute = heal_brute, heal_burn = heal_burn, heal_oxy = heal_oxy)
-/obj/item/organ/internal/heart/cursed/on_mob_remove(mob/living/carbon/accursed, special = FALSE)
+/obj/item/organ/heart/cursed/on_mob_remove(mob/living/carbon/accursed, special = FALSE)
. = ..()
qdel(accursed.GetComponent(/datum/component/manual_heart))
-/obj/item/organ/internal/heart/cybernetic
+/obj/item/organ/heart/cybernetic
name = "basic cybernetic heart"
desc = "A basic electronic device designed to mimic the functions of an organic human heart."
icon_state = "heart-c-on"
@@ -192,7 +192,7 @@
/// Chance of permanent effects if emp-ed.
var/emp_vulnerability = 80
-/obj/item/organ/internal/heart/cybernetic/emp_act(severity)
+/obj/item/organ/heart/cybernetic/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
@@ -214,7 +214,7 @@
span_userdanger("You feel a terrible pain in your chest, as if your heart has stopped!"),
)
-/obj/item/organ/internal/heart/cybernetic/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/heart/cybernetic/on_life(seconds_per_tick, times_fired)
. = ..()
if(organ_flags & ORGAN_EMP)
@@ -238,7 +238,7 @@
if(bloodiest_wound)
bloodiest_wound.adjust_blood_flow(-1 * seconds_per_tick)
-/obj/item/organ/internal/heart/cybernetic/proc/stabilize_heart()
+/obj/item/organ/heart/cybernetic/proc/stabilize_heart()
ADD_TRAIT(owner, TRAIT_NOSOFTCRIT, ORGAN_TRAIT)
stabilization_available = FALSE
@@ -247,12 +247,12 @@
addtimer(VARSET_CALLBACK(src, stabilization_available, TRUE), 5 MINUTES, TIMER_DELETE_ME)
// Largely a sanity check
-/obj/item/organ/internal/heart/cybernetic/on_mob_remove(mob/living/carbon/heart_owner, special = FALSE)
+/obj/item/organ/heart/cybernetic/on_mob_remove(mob/living/carbon/heart_owner, special = FALSE)
. = ..()
if(HAS_TRAIT_FROM(heart_owner, TRAIT_NOSOFTCRIT, ORGAN_TRAIT))
REMOVE_TRAIT(heart_owner, TRAIT_NOSOFTCRIT, ORGAN_TRAIT)
-/obj/item/organ/internal/heart/cybernetic/tier2
+/obj/item/organ/heart/cybernetic/tier2
name = "cybernetic heart"
desc = "An electronic device designed to mimic the functions of an organic human heart. In case of lacerations or haemorrhaging, the heart rapidly begins self-replicating \
artificial blood. However, this can cause toxins to build up in the bloodstream to the imperfect replication process."
@@ -262,7 +262,7 @@
bleed_prevention = TRUE
emp_vulnerability = 40
-/obj/item/organ/internal/heart/cybernetic/tier3
+/obj/item/organ/heart/cybernetic/tier3
name = "upgraded cybernetic heart"
desc = "An electronic device designed to mimic the functions of an organic human heart. In case of physical trauma, the heart has temporary failsafes to maintain patient stability \
and mobility for a brief moment. In addition, the heart is able to safely self-replicate blood without risk of toxin buildup."
@@ -273,7 +273,7 @@
toxification_probability = 0
emp_vulnerability = 20
-/obj/item/organ/internal/heart/cybernetic/surplus
+/obj/item/organ/heart/cybernetic/surplus
name = "surplus prosthetic heart"
desc = "A fragile mockery of a human heart that resembles a water pump more than an actual heart. \
Offers no protection against EMPs."
@@ -283,18 +283,18 @@
emp_vulnerability = 100
//surplus organs are so awful that they explode when removed, unless failing
-/obj/item/organ/internal/heart/cybernetic/surplus/Initialize(mapload)
+/obj/item/organ/heart/cybernetic/surplus/Initialize(mapload)
. = ..()
- AddElement(/datum/element/dangerous_surgical_removal)
+ AddElement(/datum/element/dangerous_organ_removal, /*surgical = */ TRUE)
-/obj/item/organ/internal/heart/freedom
+/obj/item/organ/heart/freedom
name = "heart of freedom"
desc = "This heart pumps with the passion to give... something freedom."
organ_flags = ORGAN_ROBOTIC //the power of freedom prevents heart attacks
/// The cooldown until the next time this heart can give the host an adrenaline boost.
COOLDOWN_DECLARE(adrenaline_cooldown)
-/obj/item/organ/internal/heart/freedom/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/heart/freedom/on_life(seconds_per_tick, times_fired)
. = ..()
if(owner.health < 5 && COOLDOWN_FINISHED(src, adrenaline_cooldown))
COOLDOWN_START(src, adrenaline_cooldown, rand(25 SECONDS, 1 MINUTES))
diff --git a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm
index 31e9e64750c92..df60b8243ef72 100644
--- a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm
+++ b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm
@@ -3,7 +3,7 @@
*/
#define DOAFTER_IMPLANTING_HEART "implanting"
-/obj/item/organ/internal/heart/cybernetic/anomalock
+/obj/item/organ/heart/cybernetic/anomalock
name = "voltaic combat cyberheart"
desc = "A cutting-edge cyberheart, originally designed for Nanotrasen killsquad usage but later declassified for normal research. Voltaic technology allows the heart to keep the body upright in dire circumstances, alongside redirecting anomalous flux energy to fully shield the user from shocks and electro-magnetic pulses. Requires a refined Flux core as a power source."
icon_state = "anomalock_heart"
@@ -28,7 +28,7 @@
///If the core is removable once socketed.
var/core_removable = TRUE
-/obj/item/organ/internal/heart/cybernetic/anomalock/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/heart/cybernetic/anomalock/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
. = ..()
if(!core)
return
@@ -39,7 +39,7 @@
RegisterSignal(organ_owner, SIGNAL_ADDTRAIT(TRAIT_CRITICAL_CONDITION), PROC_REF(activate_survival))
RegisterSignal(organ_owner, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act))
-/obj/item/organ/internal/heart/cybernetic/anomalock/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/heart/cybernetic/anomalock/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
if(!core)
return
@@ -49,7 +49,7 @@
tesla_zap(source = organ_owner, zap_range = 20, power = 2.5e5, cutoff = 1e3)
qdel(src)
-/obj/item/organ/internal/heart/cybernetic/anomalock/attack(mob/living/target_mob, mob/living/user, params)
+/obj/item/organ/heart/cybernetic/anomalock/attack(mob/living/target_mob, mob/living/user, params)
if(target_mob != user || !istype(target_mob) || !core)
return ..()
@@ -66,11 +66,11 @@
user.emote("scream")
return TRUE
-/obj/item/organ/internal/heart/cybernetic/anomalock/proc/on_emp_act(severity)
+/obj/item/organ/heart/cybernetic/anomalock/proc/on_emp_act(severity)
SIGNAL_HANDLER
add_lightning_overlay(10 SECONDS)
-/obj/item/organ/internal/heart/cybernetic/anomalock/proc/add_lightning_overlay(time_to_last = 10 SECONDS)
+/obj/item/organ/heart/cybernetic/anomalock/proc/add_lightning_overlay(time_to_last = 10 SECONDS)
if(lightning_overlay)
lightning_timer = addtimer(CALLBACK(src, PROC_REF(clear_lightning_overlay)), time_to_last, (TIMER_UNIQUE|TIMER_OVERRIDE))
return
@@ -78,11 +78,11 @@
owner.add_overlay(lightning_overlay)
lightning_timer = addtimer(CALLBACK(src, PROC_REF(clear_lightning_overlay)), time_to_last, (TIMER_UNIQUE|TIMER_OVERRIDE))
-/obj/item/organ/internal/heart/cybernetic/anomalock/proc/clear_lightning_overlay()
+/obj/item/organ/heart/cybernetic/anomalock/proc/clear_lightning_overlay()
owner.cut_overlay(lightning_overlay)
lightning_overlay = null
-/obj/item/organ/internal/heart/cybernetic/anomalock/attack_self(mob/user, modifiers)
+/obj/item/organ/heart/cybernetic/anomalock/attack_self(mob/user, modifiers)
. = ..()
if(.)
return
@@ -90,7 +90,7 @@
if(core)
return attack(user, user, modifiers)
-/obj/item/organ/internal/heart/cybernetic/anomalock/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/heart/cybernetic/anomalock/on_life(seconds_per_tick, times_fired)
. = ..()
if(owner.blood_volume <= BLOOD_VOLUME_NORMAL)
owner.blood_volume += 5 * seconds_per_tick
@@ -98,7 +98,7 @@
activate_survival(owner)
///Does a few things to try to help you live whatever you may be going through
-/obj/item/organ/internal/heart/cybernetic/anomalock/proc/activate_survival(mob/living/carbon/organ_owner)
+/obj/item/organ/heart/cybernetic/anomalock/proc/activate_survival(mob/living/carbon/organ_owner)
if(!COOLDOWN_FINISHED(src, survival_cooldown))
return
@@ -108,15 +108,15 @@
addtimer(CALLBACK(src, PROC_REF(notify_cooldown), organ_owner), COOLDOWN_TIMELEFT(src, survival_cooldown))
///Alerts our owner that the organ is ready to do its thing again
-/obj/item/organ/internal/heart/cybernetic/anomalock/proc/notify_cooldown(mob/living/carbon/organ_owner)
+/obj/item/organ/heart/cybernetic/anomalock/proc/notify_cooldown(mob/living/carbon/organ_owner)
balloon_alert(organ_owner, "your heart strenghtens")
playsound(organ_owner, 'sound/items/eshield_recharge.ogg', 40)
///Returns the mob we are implanted in so that the electricity effect doesn't runtime
-/obj/item/organ/internal/heart/cybernetic/anomalock/proc/get_held_mob()
+/obj/item/organ/heart/cybernetic/anomalock/proc/get_held_mob()
return owner
-/obj/item/organ/internal/heart/cybernetic/anomalock/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+/obj/item/organ/heart/cybernetic/anomalock/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
if(!istype(tool, required_anomaly))
return NONE
if(core)
@@ -131,7 +131,7 @@
update_icon_state()
return ITEM_INTERACT_SUCCESS
-/obj/item/organ/internal/heart/cybernetic/anomalock/screwdriver_act(mob/living/user, obj/item/tool)
+/obj/item/organ/heart/cybernetic/anomalock/screwdriver_act(mob/living/user, obj/item/tool)
. = ..()
if(!core)
balloon_alert(user, "no core!")
@@ -151,11 +151,11 @@
remove_organ_trait(TRAIT_SHOCKIMMUNE)
update_icon_state()
-/obj/item/organ/internal/heart/cybernetic/anomalock/update_icon_state()
+/obj/item/organ/heart/cybernetic/anomalock/update_icon_state()
. = ..()
icon_state = initial(icon_state) + (core ? "-core" : "")
-/obj/item/organ/internal/heart/cybernetic/anomalock/prebuilt/Initialize(mapload)
+/obj/item/organ/heart/cybernetic/anomalock/prebuilt/Initialize(mapload)
. = ..()
core = new /obj/item/assembly/signaler/anomaly/flux(src)
update_icon_state()
diff --git a/code/modules/surgery/organs/internal/heart/heart_ethereal.dm b/code/modules/surgery/organs/internal/heart/heart_ethereal.dm
index 781df0dceb1f3..5c6602834cb07 100644
--- a/code/modules/surgery/organs/internal/heart/heart_ethereal.dm
+++ b/code/modules/surgery/organs/internal/heart/heart_ethereal.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/ethereal
+/obj/item/organ/heart/ethereal
name = "crystal core"
icon_state = "ethereal_heart-on"
base_icon_state = "ethereal_heart"
@@ -16,38 +16,38 @@
///Color of the heart, is set by the species on gain
var/ethereal_color = "#9c3030"
-/obj/item/organ/internal/heart/ethereal/Initialize(mapload)
+/obj/item/organ/heart/ethereal/Initialize(mapload)
. = ..()
add_atom_colour(ethereal_color, FIXED_COLOUR_PRIORITY)
update_appearance()
-/obj/item/organ/internal/heart/ethereal/mob_insert(mob/living/carbon/heart_owner, special = FALSE, movement_flags)
+/obj/item/organ/heart/ethereal/mob_insert(mob/living/carbon/heart_owner, special = FALSE, movement_flags)
. = ..()
RegisterSignal(heart_owner, COMSIG_MOB_STATCHANGE, PROC_REF(on_stat_change))
RegisterSignal(heart_owner, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(on_owner_fully_heal))
RegisterSignal(heart_owner, COMSIG_QDELETING, PROC_REF(owner_deleted))
-/obj/item/organ/internal/heart/ethereal/mob_remove(mob/living/carbon/heart_owner, special, movement_flags)
+/obj/item/organ/heart/ethereal/mob_remove(mob/living/carbon/heart_owner, special, movement_flags)
UnregisterSignal(heart_owner, list(COMSIG_MOB_STATCHANGE, COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_QDELETING))
REMOVE_TRAIT(heart_owner, TRAIT_CORPSELOCKED, SPECIES_TRAIT)
stop_crystalization_process(heart_owner)
QDEL_NULL(current_crystal)
return ..()
-/obj/item/organ/internal/heart/ethereal/update_overlays()
+/obj/item/organ/heart/ethereal/update_overlays()
. = ..()
var/mutable_appearance/shine = mutable_appearance(icon, icon_state = "[base_icon_state]_overlay-[beating ? "on" : "off"]")
shine.appearance_flags = RESET_COLOR //No color on this, just pure white
. += shine
-/obj/item/organ/internal/heart/ethereal/proc/on_owner_fully_heal(mob/living/carbon/healed, heal_flags)
+/obj/item/organ/heart/ethereal/proc/on_owner_fully_heal(mob/living/carbon/healed, heal_flags)
SIGNAL_HANDLER
QDEL_NULL(current_crystal) //Kicks out the ethereal
///Ran when examined while crystalizing, gives info about the amount of time left
-/obj/item/organ/internal/heart/ethereal/proc/on_examine(mob/living/carbon/human/examined_human, mob/user, list/examine_list)
+/obj/item/organ/heart/ethereal/proc/on_examine(mob/living/carbon/human/examined_human, mob/user, list/examine_list)
SIGNAL_HANDLER
if(!crystalize_timer_id)
@@ -62,7 +62,7 @@
examine_list += span_notice("Some crystals are coming out of [examined_human]. ")
///On stat changes, if the victim is no longer dead but they're crystalizing, cancel it, if they become dead, start the crystalizing process if possible
-/obj/item/organ/internal/heart/ethereal/proc/on_stat_change(mob/living/victim, new_stat)
+/obj/item/organ/heart/ethereal/proc/on_stat_change(mob/living/victim, new_stat)
SIGNAL_HANDLER
if(new_stat != DEAD)
@@ -92,7 +92,7 @@
RegisterSignal(victim, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_take_damage))
///Ran when disarmed, prevents the ethereal from reviving
-/obj/item/organ/internal/heart/ethereal/proc/reset_crystalizing(mob/living/defender, mob/living/attacker, zone, obj/item/weapon)
+/obj/item/organ/heart/ethereal/proc/reset_crystalizing(mob/living/defender, mob/living/attacker, zone, obj/item/weapon)
SIGNAL_HANDLER
defender.visible_message(
span_notice("The crystals on [defender] are gently broken off."),
@@ -102,7 +102,7 @@
crystalize_timer_id = addtimer(CALLBACK(src, PROC_REF(crystalize), defender), CRYSTALIZE_DISARM_WAIT_TIME, TIMER_STOPPABLE) //Lets us restart the timer on disarm
///Actually spawns the crystal which puts the ethereal in it.
-/obj/item/organ/internal/heart/ethereal/proc/crystalize(mob/living/ethereal)
+/obj/item/organ/heart/ethereal/proc/crystalize(mob/living/ethereal)
var/location = ethereal.loc
@@ -118,7 +118,7 @@
stop_crystalization_process(ethereal, TRUE)
///Stop the crystalization process, unregistering any signals and resetting any variables.
-/obj/item/organ/internal/heart/ethereal/proc/stop_crystalization_process(mob/living/ethereal, succesful = FALSE)
+/obj/item/organ/heart/ethereal/proc/stop_crystalization_process(mob/living/ethereal, succesful = FALSE)
UnregisterSignal(ethereal, COMSIG_LIVING_DISARM_HIT)
UnregisterSignal(ethereal, COMSIG_ATOM_EXAMINE)
UnregisterSignal(ethereal, COMSIG_MOB_APPLY_DAMAGE)
@@ -133,14 +133,14 @@
deltimer(crystalize_timer_id)
crystalize_timer_id = null
-/obj/item/organ/internal/heart/ethereal/proc/owner_deleted(datum/source)
+/obj/item/organ/heart/ethereal/proc/owner_deleted(datum/source)
SIGNAL_HANDLER
stop_crystalization_process(owner)
return
///Lets you stop the process with enough brute damage
-/obj/item/organ/internal/heart/ethereal/proc/on_take_damage(datum/source, damage, damagetype, def_zone, ...)
+/obj/item/organ/heart/ethereal/proc/on_take_damage(datum/source, damage, damagetype, def_zone, ...)
SIGNAL_HANDLER
if(damagetype != BRUTE)
return
@@ -170,7 +170,7 @@
density = TRUE
anchored = TRUE
///The organ this crystal belongs to
- var/obj/item/organ/internal/heart/ethereal/ethereal_heart
+ var/obj/item/organ/heart/ethereal/ethereal_heart
///Timer for the healing process. Stops if destroyed.
var/crystal_heal_timer
///Is the crystal still being built? True by default, gets changed after a timer.
@@ -179,7 +179,7 @@
/obj/structure/ethereal_crystal/relaymove()
return
-/obj/structure/ethereal_crystal/Initialize(mapload, obj/item/organ/internal/heart/ethereal/ethereal_heart)
+/obj/structure/ethereal_crystal/Initialize(mapload, obj/item/organ/heart/ethereal/ethereal_heart)
. = ..()
if(!ethereal_heart)
stack_trace("Our crystal has no related heart")
diff --git a/code/modules/surgery/organs/internal/liver/_liver.dm b/code/modules/surgery/organs/internal/liver/_liver.dm
index d71e368bdd0ff..866813d02aa13 100755
--- a/code/modules/surgery/organs/internal/liver/_liver.dm
+++ b/code/modules/surgery/organs/internal/liver/_liver.dm
@@ -2,7 +2,7 @@
#define LIVER_DEFAULT_TOX_RESISTANCE 1 //lower values lower how harmful toxins are to the liver
#define LIVER_FAILURE_STAGE_SECONDS 60 //amount of seconds before liver failure reaches a new stage
-/obj/item/organ/internal/liver
+/obj/item/organ/liver
name = "liver"
desc = "Pairing suggestion: chianti and fava beans."
icon_state = "liver"
@@ -15,7 +15,7 @@
healing_factor = STANDARD_ORGAN_HEALING
decay_factor = STANDARD_ORGAN_DECAY // smack in the middle of decay times
- food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/iron = 5)
+ food_reagents = list(/datum/reagent/consumable/nutriment/organ_tissue = 5, /datum/reagent/iron = 5)
grind_results = list(/datum/reagent/consumable/nutriment/peptides = 5)
/// Affects how much damage the liver takes from alcohol
@@ -27,7 +27,7 @@
var/filterToxins = TRUE //whether to filter toxins
var/operated = FALSE //whether the liver's been repaired with surgery and can be fixed again or not
-/obj/item/organ/internal/liver/Initialize(mapload)
+/obj/item/organ/liver/Initialize(mapload)
. = ..()
// If the liver handles foods like a clown, it honks like a bike horn
// Don't think about it too much.
@@ -43,7 +43,7 @@
* The removal of the component, if this liver loses that trait, is handled
* by the component itself.
*/
-/obj/item/organ/internal/liver/proc/on_add_comedy_metabolism()
+/obj/item/organ/liver/proc/on_add_comedy_metabolism()
SIGNAL_HANDLER
// Are clown "bike" horns made from the livers of ex-clowns?
@@ -54,18 +54,18 @@
*
* Basically just removes squeak component
*/
-/obj/item/organ/internal/liver/proc/on_remove_comedy_metabolism()
+/obj/item/organ/liver/proc/on_remove_comedy_metabolism()
SIGNAL_HANDLER
qdel(GetComponent(/datum/component/squeak))
/// Registers COMSIG_SPECIES_HANDLE_CHEMICAL from owner
-/obj/item/organ/internal/liver/on_mob_insert(mob/living/carbon/organ_owner, special)
+/obj/item/organ/liver/on_mob_insert(mob/living/carbon/organ_owner, special)
. = ..()
RegisterSignal(organ_owner, COMSIG_SPECIES_HANDLE_CHEMICAL, PROC_REF(handle_chemical))
/// Unregisters COMSIG_SPECIES_HANDLE_CHEMICAL from owner
-/obj/item/organ/internal/liver/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/liver/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
UnregisterSignal(organ_owner, COMSIG_SPECIES_HANDLE_CHEMICAL)
@@ -76,10 +76,10 @@
*
* NOTE: If you return COMSIG_MOB_STOP_REAGENT_CHECK, that reagent will not be removed like normal! You must handle it manually.
**/
-/obj/item/organ/internal/liver/proc/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired)
+/obj/item/organ/liver/proc/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired)
SIGNAL_HANDLER
-/obj/item/organ/internal/liver/examine(mob/user)
+/obj/item/organ/liver/examine(mob/user)
. = ..()
if(HAS_MIND_TRAIT(user, TRAIT_ENTRAILS_READER) || isobserver(user))
@@ -108,7 +108,7 @@
else if(HAS_TRAIT(src, TRAIT_PRETENDER_ROYAL_METABOLISM))
. += span_info("A diet of imitation caviar, and signs of insomnia, implies that this is the liver of someone who wants to be a head of staff.")
-/obj/item/organ/internal/liver/before_organ_replacement(obj/item/organ/replacement)
+/obj/item/organ/liver/before_organ_replacement(obj/item/organ/replacement)
. = ..()
if(!istype(replacement, type))
return
@@ -123,7 +123,7 @@
continue
ADD_TRAIT(replacement, readded_trait, JOB_TRAIT)
-/obj/item/organ/internal/liver/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/liver/on_life(seconds_per_tick, times_fired)
. = ..()
//If your liver is failing, then we use the liverless version of metabolize
if((organ_flags & ORGAN_FAILING) || HAS_TRAIT(owner, TRAIT_LIVERLESS_METABOLISM))
@@ -133,12 +133,12 @@
owner.reagents?.metabolize(owner, seconds_per_tick, times_fired, can_overdose = TRUE)
-/obj/item/organ/internal/liver/handle_failing_organs(seconds_per_tick)
+/obj/item/organ/liver/handle_failing_organs(seconds_per_tick)
if(HAS_TRAIT(owner, TRAIT_STABLELIVER) || HAS_TRAIT(owner, TRAIT_LIVERLESS_METABOLISM))
return
return ..()
-/obj/item/organ/internal/liver/organ_failure(seconds_per_tick)
+/obj/item/organ/liver/organ_failure(seconds_per_tick)
switch(failure_time/LIVER_FAILURE_STAGE_SECONDS)
if(1)
to_chat(owner, span_userdanger("You feel stabbing pain in your abdomen!"))
@@ -188,7 +188,7 @@
if(SPT_PROB(3, seconds_per_tick))
owner.emote("drool")
-/obj/item/organ/internal/liver/on_owner_examine(datum/source, mob/user, list/examine_list)
+/obj/item/organ/liver/on_owner_examine(datum/source, mob/user, list/examine_list)
if(!ishuman(owner) || !(organ_flags & ORGAN_FAILING))
return
@@ -203,18 +203,18 @@
if(4 * LIVER_FAILURE_STAGE_SECONDS to INFINITY)
examine_list += span_danger("[owner]'s eyes are completely yellow and swelling with pus. [owner.p_They()] [owner.p_do()]n't look like [owner.p_they()] will be alive for much longer.")
-/obj/item/organ/internal/liver/get_availability(datum/species/owner_species, mob/living/owner_mob)
+/obj/item/organ/liver/get_availability(datum/species/owner_species, mob/living/owner_mob)
return owner_species.mutantliver
// alien livers can ignore up to 15u of toxins, but they take x3 liver damage
-/obj/item/organ/internal/liver/alien
+/obj/item/organ/liver/alien
name = "alien liver" // doesnt matter for actual aliens because they dont take toxin damage
desc = "A liver that used to belong to a killer alien, who knows what it used to eat."
icon_state = "liver-x" // Same sprite as fly-person liver.
liver_resistance = 0.333 * LIVER_DEFAULT_TOX_RESISTANCE // -66%
toxTolerance = 15 // complete toxin immunity like xenos have would be too powerful
-/obj/item/organ/internal/liver/cybernetic
+/obj/item/organ/liver/cybernetic
name = "basic cybernetic liver"
desc = "A very basic device designed to mimic the functions of a human liver. Handles toxins slightly worse than an organic liver."
failing_desc = "seems to be broken."
@@ -225,7 +225,7 @@
liver_resistance = 0.9 * LIVER_DEFAULT_TOX_RESISTANCE // -10%
var/emp_vulnerability = 80 //Chance of permanent effects if emp-ed.
-/obj/item/organ/internal/liver/cybernetic/emp_act(severity)
+/obj/item/organ/liver/cybernetic/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
@@ -235,7 +235,7 @@
if(prob(emp_vulnerability/severity)) //Chance of permanent effects
organ_flags |= ORGAN_EMP //Starts organ faliure - gonna need replacing soon.
-/obj/item/organ/internal/liver/cybernetic/tier2
+/obj/item/organ/liver/cybernetic/tier2
name = "cybernetic liver"
desc = "An electronic device designed to mimic the functions of a human liver. Handles toxins slightly better than an organic liver."
icon_state = "liver-c-u"
@@ -244,7 +244,7 @@
liver_resistance = 1.2 * LIVER_DEFAULT_TOX_RESISTANCE // +20%
emp_vulnerability = 40
-/obj/item/organ/internal/liver/cybernetic/tier3
+/obj/item/organ/liver/cybernetic/tier3
name = "upgraded cybernetic liver"
desc = "An upgraded version of the cybernetic liver, designed to improve further upon organic livers. It is resistant to alcohol poisoning and is very robust at filtering toxins."
icon_state = "liver-c-u2"
@@ -254,7 +254,7 @@
liver_resistance = 1.5 * LIVER_DEFAULT_TOX_RESISTANCE // +50%
emp_vulnerability = 20
-/obj/item/organ/internal/liver/cybernetic/surplus
+/obj/item/organ/liver/cybernetic/surplus
name = "surplus prosthetic liver"
desc = "A very cheap prosthetic liver, mass produced for low-functioning alcoholics... It looks more like a water filter than \
an actual liver. \
@@ -268,9 +268,9 @@
emp_vulnerability = 100
//surplus organs are so awful that they explode when removed, unless failing
-/obj/item/organ/internal/liver/cybernetic/surplus/Initialize(mapload)
+/obj/item/organ/liver/cybernetic/surplus/Initialize(mapload)
. = ..()
- AddElement(/datum/element/dangerous_surgical_removal)
+ AddElement(/datum/element/dangerous_organ_removal, /*surgical = */ TRUE)
#undef LIVER_DEFAULT_TOX_TOLERANCE
#undef LIVER_DEFAULT_TOX_RESISTANCE
diff --git a/code/modules/surgery/organs/internal/liver/liver_golem.dm b/code/modules/surgery/organs/internal/liver/liver_golem.dm
index 1ab3eabcd9cc5..d9c3d4632cfec 100644
--- a/code/modules/surgery/organs/internal/liver/liver_golem.dm
+++ b/code/modules/surgery/organs/internal/liver/liver_golem.dm
@@ -3,16 +3,16 @@
* Basically only exists to remove the nutriment factor from consumables,
* so golems can only consume minerals even when injecting reagents.
*
- * Actually consuming golem food is handled by /obj/item/organ/internal/stomach/golem!
+ * Actually consuming golem food is handled by /obj/item/organ/stomach/golem!
**/
-/obj/item/organ/internal/liver/golem
+/obj/item/organ/liver/golem
name = "porous rock"
desc = "A spongy rock capable of absorbing chemicals."
icon_state = "liver-p"
organ_flags = ORGAN_MINERAL
color = COLOR_GOLEM_GRAY
-/obj/item/organ/internal/liver/golem/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired)
+/obj/item/organ/liver/golem/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired)
. = ..()
// parent returned COMSIG_MOB_STOP_REAGENT_CHECK or we are failing
if((. & COMSIG_MOB_STOP_REAGENT_CHECK) || (organ_flags & ORGAN_FAILING))
diff --git a/code/modules/surgery/organs/internal/liver/liver_plasmaman.dm b/code/modules/surgery/organs/internal/liver/liver_plasmaman.dm
index be21968d659b8..714916d183ea2 100644
--- a/code/modules/surgery/organs/internal/liver/liver_plasmaman.dm
+++ b/code/modules/surgery/organs/internal/liver/liver_plasmaman.dm
@@ -2,7 +2,7 @@
* Plasmaman liver
* Makes plasma and hot ice heal wounds, also makes gunpowder a hallucinogen.
**/
-/obj/item/organ/internal/liver/bone/plasmaman
+/obj/item/organ/liver/bone/plasmaman
name = "reagent processing crystal"
desc = "A large crystal that is somehow capable of metabolizing chemicals, these are found in plasmamen."
icon_state = "liver-p"
@@ -10,7 +10,7 @@
organ_traits = list(TRAIT_PLASMA_LOVER_METABOLISM)
milk_burn_healing = 0
-/obj/item/organ/internal/liver/bone/plasmaman/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired)
+/obj/item/organ/liver/bone/plasmaman/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired)
. = ..()
// parent returned COMSIG_MOB_STOP_REAGENT_CHECK or we are failing
if((. & COMSIG_MOB_STOP_REAGENT_CHECK) || (organ_flags & ORGAN_FAILING))
diff --git a/code/modules/surgery/organs/internal/liver/liver_skeleton.dm b/code/modules/surgery/organs/internal/liver/liver_skeleton.dm
index b57afd245f587..8ff1f0c3cf327 100644
--- a/code/modules/surgery/organs/internal/liver/liver_skeleton.dm
+++ b/code/modules/surgery/organs/internal/liver/liver_skeleton.dm
@@ -3,7 +3,7 @@
* Gives the owner liverless metabolism, makes them vulnerable to bone hurting juice and
* makes milk heal them through meme magic.
**/
-/obj/item/organ/internal/liver/bone
+/obj/item/organ/liver/bone
name = "mass of bones"
desc = "You have no idea what this strange ball of bones does."
icon_state = "liver-bone"
@@ -13,7 +13,7 @@
///Var for burn healing via milk
var/milk_burn_healing = 2.5
-/obj/item/organ/internal/liver/bone/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired)
+/obj/item/organ/liver/bone/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired)
. = ..()
// parent returned COMSIG_MOB_STOP_REAGENT_CHECK or we are failing
if((. & COMSIG_MOB_STOP_REAGENT_CHECK) || (organ_flags & ORGAN_FAILING))
diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm
index 02ec157932489..60332123a8c4e 100644
--- a/code/modules/surgery/organs/internal/lungs/_lungs.dm
+++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/lungs
+/obj/item/organ/lungs
name = "lungs"
icon_state = "lungs"
@@ -21,7 +21,7 @@
var/failed = FALSE
var/operated = FALSE //whether we can still have our damages fixed through surgery
- food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/medicine/salbutamol = 5)
+ food_reagents = list(/datum/reagent/consumable/nutriment/organ_tissue = 5, /datum/reagent/medicine/salbutamol = 5)
/// Our previous breath's partial pressures, in the form gas id -> partial pressure
var/list/last_partial_pressures = list()
@@ -108,7 +108,7 @@
var/crit_stabilizing_reagent = /datum/reagent/medicine/epinephrine
// assign the respiration_type
-/obj/item/organ/internal/lungs/Initialize(mapload)
+/obj/item/organ/lungs/Initialize(mapload)
. = ..()
breath_out = new(BREATH_VOLUME)
@@ -157,7 +157,7 @@
add_gas_reaction(/datum/gas/zauker, while_present = PROC_REF(too_much_zauker))
///Simply exists so that you don't keep any alerts from your previous lack of lungs.
-/obj/item/organ/internal/lungs/mob_insert(mob/living/carbon/receiver, special = FALSE, movement_flags)
+/obj/item/organ/lungs/mob_insert(mob/living/carbon/receiver, special = FALSE, movement_flags)
. = ..()
receiver.clear_alert(ALERT_NOT_ENOUGH_OXYGEN)
@@ -166,7 +166,7 @@
receiver.clear_alert(ALERT_NOT_ENOUGH_PLASMA)
receiver.clear_alert(ALERT_NOT_ENOUGH_N2O)
-/obj/item/organ/internal/lungs/mob_remove(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/lungs/mob_remove(mob/living/carbon/organ_owner, special, movement_flags)
. = ..()
// This is very "manual" I realize, but it's useful to ensure cleanup for gases we're removing happens
// Avoids stuck alerts and such
@@ -191,7 +191,7 @@
* while_present and always get the same arguments (mob/living/carbon/breather, datum/gas_mixture/breath, pp, old_pp)
* on_loss is almost exactly the same, except it doesn't pass in a current partial pressure, since one isn't avalible
*/
-/obj/item/organ/internal/lungs/proc/add_gas_reaction(gas_type, while_present = null, on_loss = null, always = null)
+/obj/item/organ/lungs/proc/add_gas_reaction(gas_type, while_present = null, on_loss = null, always = null)
if(always)
breathe_always[gas_type] = always
@@ -211,7 +211,7 @@
* Takes the gas to check for as an argument, alongside the gas to convert and the multiplier to use
* These act in the order of insertion, use that how you will
*/
-/obj/item/organ/internal/lungs/proc/add_gas_relationship(gas_type, convert_to, multiplier)
+/obj/item/organ/lungs/proc/add_gas_relationship(gas_type, convert_to, multiplier)
if(isnull(gas_type) || isnull(convert_to) || multiplier == 0)
return
@@ -222,7 +222,7 @@
treat_as += list(add)
/// Clears away a gas relationship. Takes the same args as the initial addition
-/obj/item/organ/internal/lungs/proc/remove_gas_relationship(gas_type, convert_to, multiplier)
+/obj/item/organ/lungs/proc/remove_gas_relationship(gas_type, convert_to, multiplier)
if(isnull(gas_type) || isnull(convert_to) || multiplier == 0)
return
@@ -237,7 +237,7 @@
return
/// Handles oxygen breathing. Always called by things that need o2, no matter what
-/obj/item/organ/internal/lungs/proc/breathe_oxygen(mob/living/carbon/breather, datum/gas_mixture/breath, o2_pp, old_o2_pp)
+/obj/item/organ/lungs/proc/breathe_oxygen(mob/living/carbon/breather, datum/gas_mixture/breath, o2_pp, old_o2_pp)
if(o2_pp < safe_oxygen_min && !HAS_TRAIT(src, TRAIT_SPACEBREATHING))
// Not safe to check the old pp because of can_breath_vacuum
breather.throw_alert(ALERT_NOT_ENOUGH_OXYGEN, /atom/movable/screen/alert/not_enough_oxy)
@@ -259,7 +259,7 @@
breather.adjustOxyLoss(-5)
/// Maximum Oxygen effects. "Too much O2!"
-/obj/item/organ/internal/lungs/proc/too_much_oxygen(mob/living/carbon/breather, datum/gas_mixture/breath, o2_pp, old_o2_pp)
+/obj/item/organ/lungs/proc/too_much_oxygen(mob/living/carbon/breather, datum/gas_mixture/breath, o2_pp, old_o2_pp)
// If too much Oxygen is poisonous.
if(o2_pp <= safe_oxygen_max)
if(old_o2_pp > safe_oxygen_max)
@@ -272,11 +272,11 @@
breather.throw_alert(ALERT_TOO_MUCH_OXYGEN, /atom/movable/screen/alert/too_much_oxy)
/// Handles NOT having too much o2. only relevant if safe_oxygen_max has a value
-/obj/item/organ/internal/lungs/proc/safe_oxygen(mob/living/carbon/breather, datum/gas_mixture/breath, old_o2_pp)
+/obj/item/organ/lungs/proc/safe_oxygen(mob/living/carbon/breather, datum/gas_mixture/breath, old_o2_pp)
breather.clear_alert(ALERT_TOO_MUCH_OXYGEN)
/// Behaves like Oxygen with 8X efficacy, but metabolizes into a reagent.
-/obj/item/organ/internal/lungs/proc/consume_pluoxium(mob/living/carbon/breather, datum/gas_mixture/breath, pluoxium_pp, old_pluoxium_pp)
+/obj/item/organ/lungs/proc/consume_pluoxium(mob/living/carbon/breather, datum/gas_mixture/breath, pluoxium_pp, old_pluoxium_pp)
breathe_gas_volume(breath, /datum/gas/pluoxium)
// Metabolize to reagent.
if(pluoxium_pp > gas_stimulation_min)
@@ -284,7 +284,7 @@
breather.reagents.add_reagent(/datum/reagent/pluoxium, max(0, 1 - existing))
/// If the lungs need Nitrogen to breathe properly, N2 is exchanged with CO2.
-/obj/item/organ/internal/lungs/proc/breathe_nitro(mob/living/carbon/breather, datum/gas_mixture/breath, nitro_pp, old_nitro_pp)
+/obj/item/organ/lungs/proc/breathe_nitro(mob/living/carbon/breather, datum/gas_mixture/breath, nitro_pp, old_nitro_pp)
if(nitro_pp < safe_nitro_min && !HAS_TRAIT(src, TRAIT_SPACEBREATHING))
// Suffocation side-effects.
// Not safe to check the old pp because of can_breath_vacuum
@@ -306,7 +306,7 @@
breather.adjustOxyLoss(-5)
/// Maximum CO2 effects. "Too much CO2!"
-/obj/item/organ/internal/lungs/proc/too_much_co2(mob/living/carbon/breather, datum/gas_mixture/breath, co2_pp, old_co2_pp)
+/obj/item/organ/lungs/proc/too_much_co2(mob/living/carbon/breather, datum/gas_mixture/breath, co2_pp, old_co2_pp)
if(co2_pp <= safe_co2_max)
if(old_co2_pp > safe_co2_max)
return BREATH_LOST
@@ -332,13 +332,13 @@
breather.apply_damage(8, co2_damage_type, spread_damage = TRUE)
/// Handles NOT having too much co2. only relevant if safe_co2_max has a value
-/obj/item/organ/internal/lungs/proc/safe_co2(mob/living/carbon/breather, datum/gas_mixture/breath, old_co2_pp)
+/obj/item/organ/lungs/proc/safe_co2(mob/living/carbon/breather, datum/gas_mixture/breath, old_co2_pp)
// Reset side-effects.
breather.co2overloadtime = 0
breather.clear_alert(ALERT_TOO_MUCH_CO2)
/// If the lungs need Plasma to breathe properly, Plasma is exchanged with CO2.
-/obj/item/organ/internal/lungs/proc/breathe_plasma(mob/living/carbon/breather, datum/gas_mixture/breath, plasma_pp, old_plasma_pp)
+/obj/item/organ/lungs/proc/breathe_plasma(mob/living/carbon/breather, datum/gas_mixture/breath, plasma_pp, old_plasma_pp)
// Suffocation side-effects.
if(plasma_pp < safe_plasma_min && !HAS_TRAIT(src, TRAIT_SPACEBREATHING))
// Could check old_plasma_pp but vacuum breathing hates me
@@ -360,7 +360,7 @@
breather.adjustOxyLoss(-5)
/// Maximum Plasma effects. "Too much Plasma!"
-/obj/item/organ/internal/lungs/proc/too_much_plasma(mob/living/carbon/breather, datum/gas_mixture/breath, plasma_pp, old_plasma_pp)
+/obj/item/organ/lungs/proc/too_much_plasma(mob/living/carbon/breather, datum/gas_mixture/breath, plasma_pp, old_plasma_pp)
if(plasma_pp <= safe_plasma_max)
if(old_plasma_pp > safe_plasma_max)
return BREATH_LOST
@@ -375,11 +375,11 @@
breather.apply_damage(clamp(ratio, plas_breath_dam_min, plas_breath_dam_max), plas_damage_type, spread_damage = TRUE)
/// Resets plasma side effects
-/obj/item/organ/internal/lungs/proc/safe_plasma(mob/living/carbon/breather, datum/gas_mixture/breath, old_plasma_pp)
+/obj/item/organ/lungs/proc/safe_plasma(mob/living/carbon/breather, datum/gas_mixture/breath, old_plasma_pp)
breather.clear_alert(ALERT_TOO_MUCH_PLASMA)
/// Too much funny gas, time to get brain damage
-/obj/item/organ/internal/lungs/proc/too_much_bz(mob/living/carbon/breather, datum/gas_mixture/breath, bz_pp, old_bz_pp)
+/obj/item/organ/lungs/proc/too_much_bz(mob/living/carbon/breather, datum/gas_mixture/breath, bz_pp, old_bz_pp)
if(bz_pp > BZ_trip_balls_min)
breather.adjust_hallucinations(20 SECONDS)
breather.reagents.add_reagent(/datum/reagent/bz_metabolites, 5)
@@ -387,7 +387,7 @@
breather.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150, ORGAN_ORGANIC)
/// Breathing in refridgerator coolent, shit's caustic
-/obj/item/organ/internal/lungs/proc/too_much_freon(mob/living/carbon/breather, datum/gas_mixture/breath, freon_pp, old_freon_pp)
+/obj/item/organ/lungs/proc/too_much_freon(mob/living/carbon/breather, datum/gas_mixture/breath, freon_pp, old_freon_pp)
// Inhale Freon. Exhale nothing.
breathe_gas_volume(breath, /datum/gas/freon)
if (freon_pp > gas_stimulation_min)
@@ -404,7 +404,7 @@
breather.adjustFireLoss(freon_pp / 4)
/// Breathing in halon, convert it to a reagent
-/obj/item/organ/internal/lungs/proc/too_much_halon(mob/living/carbon/breather, datum/gas_mixture/breath, halon_pp, old_halon_pp)
+/obj/item/organ/lungs/proc/too_much_halon(mob/living/carbon/breather, datum/gas_mixture/breath, halon_pp, old_halon_pp)
// Inhale Halon. Exhale nothing.
breathe_gas_volume(breath, /datum/gas/halon)
// Metabolize to reagent.
@@ -413,7 +413,7 @@
breather.reagents.add_reagent(/datum/reagent/halon, max(0, 1 - breather.reagents.get_reagent_amount(/datum/reagent/halon)))
/// Sleeping gas with healing properties.
-/obj/item/organ/internal/lungs/proc/consume_healium(mob/living/carbon/breather, datum/gas_mixture/breath, healium_pp, old_healium_pp)
+/obj/item/organ/lungs/proc/consume_healium(mob/living/carbon/breather, datum/gas_mixture/breath, healium_pp, old_healium_pp)
breathe_gas_volume(breath, /datum/gas/healium)
// Euphoria side-effect.
if(healium_pp > gas_stimulation_min)
@@ -431,11 +431,11 @@
breather.reagents.add_reagent(/datum/reagent/healium, max(0, 1 - breather.reagents.get_reagent_amount(/datum/reagent/healium)))
/// Lose healium side effects
-/obj/item/organ/internal/lungs/proc/lose_healium(mob/living/carbon/breather, datum/gas_mixture/breath, old_healium_pp)
+/obj/item/organ/lungs/proc/lose_healium(mob/living/carbon/breather, datum/gas_mixture/breath, old_healium_pp)
healium_euphoria = EUPHORIA_INACTIVE
/// Activates helium speech when partial pressure gets high enough
-/obj/item/organ/internal/lungs/proc/consume_helium(mob/living/carbon/breather, datum/gas_mixture/breath, helium_pp, old_helium_pp)
+/obj/item/organ/lungs/proc/consume_helium(mob/living/carbon/breather, datum/gas_mixture/breath, helium_pp, old_helium_pp)
breathe_gas_volume(breath, /datum/gas/helium)
if(helium_pp > helium_speech_min)
if(old_helium_pp <= helium_speech_min)
@@ -445,23 +445,23 @@
UnregisterSignal(breather, COMSIG_MOB_SAY)
/// Lose helium high pitched voice
-/obj/item/organ/internal/lungs/proc/lose_helium(mob/living/carbon/breather, datum/gas_mixture/breath, old_helium_pp)
+/obj/item/organ/lungs/proc/lose_helium(mob/living/carbon/breather, datum/gas_mixture/breath, old_helium_pp)
UnregisterSignal(breather, COMSIG_MOB_SAY)
/// React to speach while hopped up on the high pitched voice juice
-/obj/item/organ/internal/lungs/proc/handle_helium_speech(mob/living/carbon/breather, list/speech_args)
+/obj/item/organ/lungs/proc/handle_helium_speech(mob/living/carbon/breather, list/speech_args)
SIGNAL_HANDLER
speech_args[SPEECH_SPANS] |= SPAN_SMALL_VOICE
/// Gain hypernob effects if we have enough of the stuff
-/obj/item/organ/internal/lungs/proc/consume_hypernoblium(mob/living/carbon/breather, datum/gas_mixture/breath, hypernob_pp, old_hypernob_pp)
+/obj/item/organ/lungs/proc/consume_hypernoblium(mob/living/carbon/breather, datum/gas_mixture/breath, hypernob_pp, old_hypernob_pp)
breathe_gas_volume(breath, /datum/gas/hypernoblium)
if (hypernob_pp > gas_stimulation_min)
var/existing = breather.reagents.get_reagent_amount(/datum/reagent/hypernoblium)
breather.reagents.add_reagent(/datum/reagent/hypernoblium,max(0, 1 - existing))
/// Breathing in the stink gas
-/obj/item/organ/internal/lungs/proc/too_much_miasma(mob/living/carbon/breather, datum/gas_mixture/breath, miasma_pp, old_miasma_pp)
+/obj/item/organ/lungs/proc/too_much_miasma(mob/living/carbon/breather, datum/gas_mixture/breath, miasma_pp, old_miasma_pp)
// Inhale Miasma. Exhale nothing.
breathe_gas_volume(breath, /datum/gas/miasma)
// Miasma side effects
@@ -497,12 +497,12 @@
breather.adjust_disgust(0.1 * miasma_pp)
/// We're free from the stick, clear out its impacts
-/obj/item/organ/internal/lungs/proc/safe_miasma(mob/living/carbon/breather, datum/gas_mixture/breath, old_miasma_pp)
+/obj/item/organ/lungs/proc/safe_miasma(mob/living/carbon/breather, datum/gas_mixture/breath, old_miasma_pp)
// Clear out moods when immune to miasma, or if there's no miasma at all.
breather.clear_mood_event("smell")
/// Causes random euphoria and giggling. Large amounts knock you down
-/obj/item/organ/internal/lungs/proc/too_much_n2o(mob/living/carbon/breather, datum/gas_mixture/breath, n2o_pp, old_n2o_pp)
+/obj/item/organ/lungs/proc/too_much_n2o(mob/living/carbon/breather, datum/gas_mixture/breath, n2o_pp, old_n2o_pp)
if(n2o_pp < n2o_para_min)
// Small amount of N2O, small side-effects.
if(n2o_pp <= n2o_detect_min)
@@ -535,12 +535,12 @@
breather.Sleeping(min(breather.AmountSleeping() + 100, 200))
/// N2O side-effects. "Too much N2O!"
-/obj/item/organ/internal/lungs/proc/safe_n2o(mob/living/carbon/breather, datum/gas_mixture/breath, old_n2o_pp)
+/obj/item/organ/lungs/proc/safe_n2o(mob/living/carbon/breather, datum/gas_mixture/breath, old_n2o_pp)
n2o_euphoria = EUPHORIA_INACTIVE
breather.clear_alert(ALERT_TOO_MUCH_N2O)
// Breathe in nitrium. It's helpful, but has nasty side effects
-/obj/item/organ/internal/lungs/proc/too_much_nitrium(mob/living/carbon/breather, datum/gas_mixture/breath, nitrium_pp, old_nitrium_pp)
+/obj/item/organ/lungs/proc/too_much_nitrium(mob/living/carbon/breather, datum/gas_mixture/breath, nitrium_pp, old_nitrium_pp)
breathe_gas_volume(breath, /datum/gas/nitrium)
if(prob(20))
@@ -560,7 +560,7 @@
breather.reagents.add_reagent(/datum/reagent/nitrium_high_metabolization, max(0, 1 - existing))
/// Radioactive, green gas. Toxin damage, and a radiation chance
-/obj/item/organ/internal/lungs/proc/too_much_tritium(mob/living/carbon/breather, datum/gas_mixture/breath, trit_pp, old_trit_pp)
+/obj/item/organ/lungs/proc/too_much_tritium(mob/living/carbon/breather, datum/gas_mixture/breath, trit_pp, old_trit_pp)
var/gas_breathed = breathe_gas_volume(breath, /datum/gas/tritium)
var/moles_visible = GLOB.meta_gas_info[/datum/gas/tritium][META_GAS_MOLES_VISIBLE] * BREATH_PERCENTAGE
// Tritium side-effects.
@@ -575,7 +575,7 @@
breather.AddComponent(/datum/component/irradiated)
/// Really toxic stuff, very much trying to kill you
-/obj/item/organ/internal/lungs/proc/too_much_zauker(mob/living/carbon/breather, datum/gas_mixture/breath, zauker_pp, old_zauker_pp)
+/obj/item/organ/lungs/proc/too_much_zauker(mob/living/carbon/breather, datum/gas_mixture/breath, zauker_pp, old_zauker_pp)
breathe_gas_volume(breath, /datum/gas/zauker)
// Metabolize to reagent.
if(zauker_pp > gas_stimulation_min)
@@ -594,7 +594,7 @@
* * breath: A gas mixture to test, or null.
* * breather: A carbon mob that is using the lungs to breathe.
*/
-/obj/item/organ/internal/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/breather)
+/obj/item/organ/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/breather)
if(HAS_TRAIT(breather, TRAIT_GODMODE))
breather.failed_last_breath = FALSE
breather.clear_alert(ALERT_NOT_ENOUGH_OXYGEN)
@@ -714,7 +714,7 @@
/// Remove gas from breath. If output_gas is given, transfers the removed gas to the lung's gas_mixture.
/// Removes 100% of the given gas type unless given a volume argument.
/// Returns the amount of gas theoretically removed.
-/obj/item/organ/internal/lungs/proc/breathe_gas_volume(datum/gas_mixture/breath, remove_id, exchange_id = null, volume = INFINITY)
+/obj/item/organ/lungs/proc/breathe_gas_volume(datum/gas_mixture/breath, remove_id, exchange_id = null, volume = INFINITY)
var/list/breath_gases = breath.gases
volume = min(volume, breath_gases[remove_id][MOLES])
breath_gases[remove_id][MOLES] -= volume
@@ -725,7 +725,7 @@
/// Applies suffocation side-effects to a given Human, scaling based on ratio of required pressure VS "true" pressure.
/// If pressure is greater than 0, the return value will represent the amount of gas successfully breathed.
-/obj/item/organ/internal/lungs/proc/handle_suffocation(mob/living/carbon/human/suffocator = null, breath_pp = 0, safe_breath_min = 0, mole_count = 0)
+/obj/item/organ/lungs/proc/handle_suffocation(mob/living/carbon/human/suffocator = null, breath_pp = 0, safe_breath_min = 0, mole_count = 0)
. = 0
// Can't suffocate without a Human, or without minimum breath pressure.
if(!suffocator || !safe_breath_min)
@@ -755,7 +755,7 @@
suffocator.adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS)
-/obj/item/organ/internal/lungs/proc/handle_breath_temperature(datum/gas_mixture/breath, mob/living/carbon/human/breather) // called by human/life, handles temperatures
+/obj/item/organ/lungs/proc/handle_breath_temperature(datum/gas_mixture/breath, mob/living/carbon/human/breather) // called by human/life, handles temperatures
var/breath_temperature = breath.temperature
if(!HAS_TRAIT(breather, TRAIT_RESISTCOLD)) // COLD DAMAGE
@@ -804,7 +804,7 @@
breath.temperature = breather.bodytemperature
/// Creates a particle effect off the mouth of the passed mob.
-/obj/item/organ/internal/lungs/proc/emit_breath_particle(mob/living/carbon/human/breather, particle_type)
+/obj/item/organ/lungs/proc/emit_breath_particle(mob/living/carbon/human/breather, particle_type)
ASSERT(ispath(particle_type, /particles))
var/obj/effect/abstract/particle_holder/holder = new(breather, particle_type)
@@ -839,7 +839,7 @@
QDEL_IN(holder, breath_particle.lifespan)
-/obj/item/organ/internal/lungs/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/lungs/on_life(seconds_per_tick, times_fired)
. = ..()
if(failed && !(organ_flags & ORGAN_FAILING))
failed = FALSE
@@ -852,13 +852,13 @@
owner.visible_message(span_danger("[owner] grabs [owner.p_their()] throat, struggling for breath!"), span_userdanger("You suddenly feel like you can't breathe!"))
failed = TRUE
-/obj/item/organ/internal/lungs/get_availability(datum/species/owner_species, mob/living/owner_mob)
+/obj/item/organ/lungs/get_availability(datum/species/owner_species, mob/living/owner_mob)
return owner_species.mutantlungs
#define SMOKER_ORGAN_HEALTH (STANDARD_ORGAN_THRESHOLD * 0.75)
#define SMOKER_LUNG_HEALING (STANDARD_ORGAN_HEALING * 0.75)
-/obj/item/organ/internal/lungs/plasmaman
+/obj/item/organ/lungs/plasmaman
name = "plasma filter"
desc = "A spongy rib-shaped mass for filtering plasma from the air."
icon_state = "lungs-plasma"
@@ -868,7 +868,7 @@
safe_plasma_min = 4 //We breathe THIS!
safe_plasma_max = 0
-/obj/item/organ/internal/lungs/plasmaman/plasmaman_smoker
+/obj/item/organ/lungs/plasmaman/plasmaman_smoker
name = "smoker plasma filter"
desc = "A plasma filter that look discolored, a result from smoking a lot."
icon_state = "lungs_plasma_smoker"
@@ -876,19 +876,19 @@
maxHealth = SMOKER_ORGAN_HEALTH
healing_factor = SMOKER_LUNG_HEALING
-/obj/item/organ/internal/lungs/slime
+/obj/item/organ/lungs/slime
name = "vacuole"
desc = "A large organelle designed to store oxygen and other important gasses."
safe_plasma_max = 0 //We breathe this to gain POWER.
-/obj/item/organ/internal/lungs/slime/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/breather_slime)
+/obj/item/organ/lungs/slime/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/breather_slime)
. = ..()
if (breath?.gases[/datum/gas/plasma])
var/plasma_pp = breath.get_breath_partial_pressure(breath.gases[/datum/gas/plasma][MOLES])
breather_slime.blood_volume += (0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you.
-/obj/item/organ/internal/lungs/smoker_lungs
+/obj/item/organ/lungs/smoker_lungs
name = "smoker lungs"
desc = "A pair of lungs that look sickly, a result from smoking a lot."
icon_state = "lungs_smoker"
@@ -896,7 +896,7 @@
maxHealth = SMOKER_ORGAN_HEALTH
healing_factor = SMOKER_LUNG_HEALING
-/obj/item/organ/internal/lungs/cybernetic
+/obj/item/organ/lungs/cybernetic
name = "basic cybernetic lungs"
desc = "A basic cybernetic version of the lungs found in traditional humanoid entities."
failing_desc = "seems to be broken."
@@ -905,7 +905,7 @@
maxHealth = STANDARD_ORGAN_THRESHOLD * 0.5
var/emp_vulnerability = 80 //Chance of permanent effects if emp-ed.
-/obj/item/organ/internal/lungs/cybernetic/emp_act(severity)
+/obj/item/organ/lungs/cybernetic/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
@@ -915,7 +915,7 @@
if(prob(emp_vulnerability/severity)) //Chance of permanent effects
organ_flags |= ORGAN_EMP //Starts organ faliure - gonna need replacing soon.
-/obj/item/organ/internal/lungs/cybernetic/tier2
+/obj/item/organ/lungs/cybernetic/tier2
name = "cybernetic lungs"
desc = "A cybernetic version of the lungs found in traditional humanoid entities. Allows for greater intakes of oxygen than organic lungs, requiring slightly less pressure."
icon_state = "lungs-c-u"
@@ -923,7 +923,7 @@
safe_oxygen_min = 13
emp_vulnerability = 40
-/obj/item/organ/internal/lungs/cybernetic/tier3
+/obj/item/organ/lungs/cybernetic/tier3
name = "upgraded cybernetic lungs"
desc = "A more advanced version of the stock cybernetic lungs. Features the ability to filter out lower levels of plasma and carbon dioxide."
icon_state = "lungs-c-u2"
@@ -937,7 +937,7 @@
cold_level_2_threshold = 140
cold_level_3_threshold = 100
-/obj/item/organ/internal/lungs/cybernetic/surplus
+/obj/item/organ/lungs/cybernetic/surplus
name = "surplus prosthetic lungs"
desc = "Two fragile, inflatable sacks of air that only barely mimic the function of human lungs. \
Offer no protection against EMPs."
@@ -946,11 +946,11 @@
emp_vulnerability = 100
//surplus organs are so awful that they explode when removed, unless failing
-/obj/item/organ/internal/lungs/cybernetic/surplus/Initialize(mapload)
+/obj/item/organ/lungs/cybernetic/surplus/Initialize(mapload)
. = ..()
- AddElement(/datum/element/dangerous_surgical_removal)
+ AddElement(/datum/element/dangerous_organ_removal, /*surgical = */ TRUE)
-/obj/item/organ/internal/lungs/lavaland
+/obj/item/organ/lungs/lavaland
name = "blackened frilled lungs" // blackened from necropolis exposure
desc = "Exposure to the necropolis has mutated these lungs to breathe the air of Indecipheres, the lava-covered moon."
icon_state = "lungs-ashwalker"
@@ -959,7 +959,7 @@
// to 16 kPa. So it follows that ashwalkers, as humanoids, follow the same rules.
#define GAS_TOLERANCE 5
-/obj/item/organ/internal/lungs/lavaland/Initialize(mapload)
+/obj/item/organ/lungs/lavaland/Initialize(mapload)
var/datum/gas_mixture/immutable/planetary/mix = SSair.planetary[LAVALAND_DEFAULT_ATMOS]
if(!mix?.total_moles()) // this typically means we didn't load lavaland, like if we're using the LOWMEMORYMODE define
@@ -1010,7 +1010,7 @@
#undef GAS_TOLERANCE
-/obj/item/organ/internal/lungs/ethereal
+/obj/item/organ/lungs/ethereal
name = "aeration reticulum"
desc = "These exotic lungs seem crunchier than most."
icon_state = "lungs_ethereal"
@@ -1018,7 +1018,7 @@
heat_level_2_threshold = 473
heat_level_3_threshold = 1073
-/obj/item/organ/internal/lungs/ethereal/ethereal_smoker
+/obj/item/organ/lungs/ethereal/ethereal_smoker
name = "smoker aeration reticulum"
desc = "A pair of exotic lungs that look pale and sickly, a result from smoking a lot."
icon_state = "lungs_ethereal_smoker"
@@ -1026,12 +1026,12 @@
maxHealth = SMOKER_ORGAN_HEALTH
healing_factor = SMOKER_LUNG_HEALING
-/obj/item/organ/internal/lungs/ethereal/Initialize(mapload)
+/obj/item/organ/lungs/ethereal/Initialize(mapload)
. = ..()
add_gas_reaction(/datum/gas/water_vapor, while_present = PROC_REF(consume_water))
/// H2O electrolysis
-/obj/item/organ/internal/lungs/ethereal/proc/consume_water(mob/living/carbon/breather, datum/gas_mixture/breath, h2o_pp, old_h2o_pp)
+/obj/item/organ/lungs/ethereal/proc/consume_water(mob/living/carbon/breather, datum/gas_mixture/breath, h2o_pp, old_h2o_pp)
var/gas_breathed = breath.gases[/datum/gas/water_vapor][MOLES]
breath.gases[/datum/gas/water_vapor][MOLES] -= gas_breathed
breath_out.assert_gases(/datum/gas/oxygen, /datum/gas/hydrogen)
diff --git a/code/modules/surgery/organs/internal/stomach/_stomach.dm b/code/modules/surgery/organs/internal/stomach/_stomach.dm
index 7e7a864f0a04c..768f3483c030f 100644
--- a/code/modules/surgery/organs/internal/stomach/_stomach.dm
+++ b/code/modules/surgery/organs/internal/stomach/_stomach.dm
@@ -1,7 +1,7 @@
//The contant in the rate of reagent transfer on life ticks
#define STOMACH_METABOLISM_CONSTANT 0.25
-/obj/item/organ/internal/stomach
+/obj/item/organ/stomach
name = "stomach"
desc = "Onaka ga suite imasu."
icon_state = "stomach"
@@ -20,7 +20,7 @@
high_threshold_cleared = span_info("The pain in your stomach dies down for now, but food still seems unappealing.")
low_threshold_cleared = span_info("The last bouts of pain in your stomach have died out.")
- food_reagents = list(/datum/reagent/consumable/nutriment/organ_tissue = 5)
+ food_reagents = list(/datum/reagent/consumable/nutriment/organ_tissue/stomach_lining = 5)
//This is a reagent user and needs more then the 10u from edible component
reagent_vol = 1000
@@ -35,7 +35,7 @@
var/operated = FALSE //whether the stomach's been repaired with surgery and can be fixed again or not
-/obj/item/organ/internal/stomach/Initialize(mapload)
+/obj/item/organ/stomach/Initialize(mapload)
. = ..()
//None edible organs do not get a reagent holder by default
if(!reagents)
@@ -43,7 +43,7 @@
else
reagents.flags |= REAGENT_HOLDER_ALIVE
-/obj/item/organ/internal/stomach/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/stomach/on_life(seconds_per_tick, times_fired)
. = ..()
//Manage species digestion
@@ -119,7 +119,7 @@
body.vomit(VOMIT_CATEGORY_DEFAULT, lost_nutrition = damage)
to_chat(body, span_warning("Your stomach reels in pain as you're incapable of holding down all that food!"))
-/obj/item/organ/internal/stomach/proc/handle_hunger(mob/living/carbon/human/human, seconds_per_tick, times_fired)
+/obj/item/organ/stomach/proc/handle_hunger(mob/living/carbon/human/human, seconds_per_tick, times_fired)
if(HAS_TRAIT(human, TRAIT_NOHUNGER))
return //hunger is for BABIES
@@ -185,21 +185,21 @@
handle_hunger_slowdown(human)
///for when mood is disabled and hunger should handle slowdowns
-/obj/item/organ/internal/stomach/proc/handle_hunger_slowdown(mob/living/carbon/human/human)
+/obj/item/organ/stomach/proc/handle_hunger_slowdown(mob/living/carbon/human/human)
var/hungry = (500 - human.nutrition) / 5 //So overeat would be 100 and default level would be 80
if(hungry >= 70)
human.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/hunger, multiplicative_slowdown = (hungry / 50))
else
human.remove_movespeed_modifier(/datum/movespeed_modifier/hunger)
-/obj/item/organ/internal/stomach/get_availability(datum/species/owner_species, mob/living/owner_mob)
+/obj/item/organ/stomach/get_availability(datum/species/owner_species, mob/living/owner_mob)
return owner_species.mutantstomach
///This gets called after the owner takes a bite of food
-/obj/item/organ/internal/stomach/proc/after_eat(atom/edible)
+/obj/item/organ/stomach/proc/after_eat(atom/edible)
return
-/obj/item/organ/internal/stomach/proc/handle_disgust(mob/living/carbon/human/disgusted, seconds_per_tick, times_fired)
+/obj/item/organ/stomach/proc/handle_disgust(mob/living/carbon/human/disgusted, seconds_per_tick, times_fired)
var/old_disgust = disgusted.old_disgust
var/disgust = disgusted.disgust
@@ -246,11 +246,11 @@
disgusted.throw_alert(ALERT_DISGUST, /atom/movable/screen/alert/disgusted)
disgusted.add_mood_event("disgust", /datum/mood_event/disgusted)
-/obj/item/organ/internal/stomach/mob_insert(mob/living/carbon/receiver, special, movement_flags)
+/obj/item/organ/stomach/mob_insert(mob/living/carbon/receiver, special, movement_flags)
. = ..()
receiver.hud_used?.hunger?.update_appearance()
-/obj/item/organ/internal/stomach/mob_remove(mob/living/carbon/stomach_owner, special, movement_flags)
+/obj/item/organ/stomach/mob_remove(mob/living/carbon/stomach_owner, special, movement_flags)
if(ishuman(stomach_owner))
var/mob/living/carbon/human/human_owner = owner
human_owner.clear_alert(ALERT_DISGUST)
@@ -258,21 +258,21 @@
stomach_owner.hud_used?.hunger?.update_appearance()
return ..()
-/obj/item/organ/internal/stomach/bone
+/obj/item/organ/stomach/bone
name = "mass of bones"
desc = "You have no idea what this strange ball of bones does."
icon_state = "stomach-bone"
metabolism_efficiency = 0.025 //very bad
organ_traits = list(TRAIT_NOHUNGER)
-/obj/item/organ/internal/stomach/bone/plasmaman
+/obj/item/organ/stomach/bone/plasmaman
name = "digestive crystal"
desc = "A strange crystal that is responsible for metabolizing the unseen energy force that feeds plasmamen."
icon_state = "stomach-p"
metabolism_efficiency = 0.06
organ_traits = null
-/obj/item/organ/internal/stomach/cybernetic
+/obj/item/organ/stomach/cybernetic
name = "basic cybernetic stomach"
desc = "A basic device designed to mimic the functions of a human stomach"
failing_desc = "seems to be broken."
@@ -282,7 +282,7 @@
metabolism_efficiency = 0.035 // not as good at digestion
var/emp_vulnerability = 80 //Chance of permanent effects if emp-ed.
-/obj/item/organ/internal/stomach/cybernetic/emp_act(severity)
+/obj/item/organ/stomach/cybernetic/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
@@ -292,7 +292,7 @@
if(prob(emp_vulnerability/severity)) //Chance of permanent effects
organ_flags |= ORGAN_EMP //Starts organ faliure - gonna need replacing soon.
-/obj/item/organ/internal/stomach/cybernetic/tier2
+/obj/item/organ/stomach/cybernetic/tier2
name = "cybernetic stomach"
desc = "An electronic device designed to mimic the functions of a human stomach. Handles disgusting food a bit better."
icon_state = "stomach-c-u"
@@ -301,7 +301,7 @@
emp_vulnerability = 40
metabolism_efficiency = 0.07
-/obj/item/organ/internal/stomach/cybernetic/tier3
+/obj/item/organ/stomach/cybernetic/tier3
name = "upgraded cybernetic stomach"
desc = "An upgraded version of the cybernetic stomach, designed to improve further upon organic stomachs. Handles disgusting food very well."
icon_state = "stomach-c-u2"
@@ -310,7 +310,7 @@
emp_vulnerability = 20
metabolism_efficiency = 0.1
-/obj/item/organ/internal/stomach/cybernetic/surplus
+/obj/item/organ/stomach/cybernetic/surplus
name = "surplus prosthetic stomach"
desc = "A mechanical plastic oval that utilizes sulfuric acid instead of stomach acid. \
Very fragile, with painfully slow metabolism.\
@@ -321,8 +321,8 @@
metabolism_efficiency = 0.025
//surplus organs are so awful that they explode when removed, unless failing
-/obj/item/organ/internal/stomach/cybernetic/surplus/Initialize(mapload)
+/obj/item/organ/stomach/cybernetic/surplus/Initialize(mapload)
. = ..()
- AddElement(/datum/element/dangerous_surgical_removal)
+ AddElement(/datum/element/dangerous_organ_removal, /*surgical = */ TRUE)
#undef STOMACH_METABOLISM_CONSTANT
diff --git a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm
index d340edbecea64..80082cf47a595 100644
--- a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm
+++ b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/stomach/ethereal
+/obj/item/organ/stomach/ethereal
name = "biological battery"
icon_state = "stomach-p" //Welp. At least it's more unique in functionaliy.
desc = "A crystal-like organ that stores the electric charge of ethereals."
@@ -8,25 +8,25 @@
///used to keep ethereals from spam draining power sources
var/drain_time = 0
-/obj/item/organ/internal/stomach/ethereal/Initialize(mapload)
+/obj/item/organ/stomach/ethereal/Initialize(mapload)
. = ..()
cell = new /obj/item/stock_parts/power_store/cell/ethereal(src)
-/obj/item/organ/internal/stomach/ethereal/Destroy()
+/obj/item/organ/stomach/ethereal/Destroy()
QDEL_NULL(cell)
return ..()
-/obj/item/organ/internal/stomach/ethereal/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/stomach/ethereal/on_life(seconds_per_tick, times_fired)
. = ..()
adjust_charge(-ETHEREAL_DISCHARGE_RATE * seconds_per_tick)
handle_charge(owner, seconds_per_tick, times_fired)
-/obj/item/organ/internal/stomach/ethereal/on_mob_insert(mob/living/carbon/stomach_owner)
+/obj/item/organ/stomach/ethereal/on_mob_insert(mob/living/carbon/stomach_owner)
. = ..()
RegisterSignal(stomach_owner, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, PROC_REF(charge))
RegisterSignal(stomach_owner, COMSIG_LIVING_ELECTROCUTE_ACT, PROC_REF(on_electrocute))
-/obj/item/organ/internal/stomach/ethereal/on_mob_remove(mob/living/carbon/stomach_owner)
+/obj/item/organ/stomach/ethereal/on_mob_remove(mob/living/carbon/stomach_owner)
. = ..()
UnregisterSignal(stomach_owner, COMSIG_PROCESS_BORGCHARGER_OCCUPANT)
UnregisterSignal(stomach_owner, COMSIG_LIVING_ELECTROCUTE_ACT)
@@ -34,15 +34,15 @@
stomach_owner.clear_alert(ALERT_ETHEREAL_CHARGE)
stomach_owner.clear_alert(ALERT_ETHEREAL_OVERCHARGE)
-/obj/item/organ/internal/stomach/ethereal/handle_hunger_slowdown(mob/living/carbon/human/human)
+/obj/item/organ/stomach/ethereal/handle_hunger_slowdown(mob/living/carbon/human/human)
human.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/hunger, multiplicative_slowdown = (1.5 * (1 - cell.charge() / 100)))
-/obj/item/organ/internal/stomach/ethereal/proc/charge(datum/source, datum/callback/charge_cell, seconds_per_tick)
+/obj/item/organ/stomach/ethereal/proc/charge(datum/source, datum/callback/charge_cell, seconds_per_tick)
SIGNAL_HANDLER
charge_cell.Invoke(cell, seconds_per_tick / 3.5) // Ethereals don't have NT designed charging ports, so they charge slower.
-/obj/item/organ/internal/stomach/ethereal/proc/on_electrocute(datum/source, shock_damage, shock_source, siemens_coeff = 1, flags = NONE)
+/obj/item/organ/stomach/ethereal/proc/on_electrocute(datum/source, shock_damage, shock_source, siemens_coeff = 1, flags = NONE)
SIGNAL_HANDLER
if(flags & SHOCK_ILLUSION)
return
@@ -54,11 +54,11 @@
* - amount: The change of the energy, in joules.
* Returns: The amount of energy that actually got changed in joules.
**/
-/obj/item/organ/internal/stomach/ethereal/proc/adjust_charge(amount)
+/obj/item/organ/stomach/ethereal/proc/adjust_charge(amount)
var/amount_changed = clamp(amount, ETHEREAL_CHARGE_NONE - cell.charge(), ETHEREAL_CHARGE_DANGEROUS - cell.charge())
return cell.change(amount_changed)
-/obj/item/organ/internal/stomach/ethereal/proc/handle_charge(mob/living/carbon/carbon, seconds_per_tick, times_fired)
+/obj/item/organ/stomach/ethereal/proc/handle_charge(mob/living/carbon/carbon, seconds_per_tick, times_fired)
switch(cell.charge())
if(-INFINITY to ETHEREAL_CHARGE_NONE)
carbon.add_mood_event("charge", /datum/mood_event/decharged)
@@ -90,7 +90,7 @@
carbon.clear_alert(ALERT_ETHEREAL_CHARGE)
carbon.clear_alert(ALERT_ETHEREAL_OVERCHARGE)
-/obj/item/organ/internal/stomach/ethereal/proc/discharge_process(mob/living/carbon/carbon)
+/obj/item/organ/stomach/ethereal/proc/discharge_process(mob/living/carbon/carbon)
to_chat(carbon, span_warning("You begin to lose control over your charge!"))
carbon.visible_message(span_danger("[carbon] begins to spark violently!"))
diff --git a/code/modules/surgery/organs/internal/stomach/stomach_golem.dm b/code/modules/surgery/organs/internal/stomach/stomach_golem.dm
index 62af0f5d7ad2e..3921cdc64e59c 100644
--- a/code/modules/surgery/organs/internal/stomach/stomach_golem.dm
+++ b/code/modules/surgery/organs/internal/stomach/stomach_golem.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/stomach/golem
+/obj/item/organ/stomach/golem
name = "silicate grinder"
icon_state = "stomach-p"
desc = "A rocklike organ which grinds and processes nutrition from minerals."
@@ -11,18 +11,18 @@
/// How slow are you if you have absolutely nothing in the tank?
var/max_hunger_slowdown = 4
-/obj/item/organ/internal/stomach/golem/on_mob_insert(mob/living/carbon/organ_owner, special)
+/obj/item/organ/stomach/golem/on_mob_insert(mob/living/carbon/organ_owner, special)
. = ..()
RegisterSignal(owner, COMSIG_CARBON_ATTEMPT_EAT, PROC_REF(try_eating))
-/obj/item/organ/internal/stomach/golem/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/stomach/golem/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
UnregisterSignal(organ_owner, COMSIG_CARBON_ATTEMPT_EAT)
organ_owner.remove_movespeed_modifier(/datum/movespeed_modifier/golem_hunger)
organ_owner.remove_status_effect(/datum/status_effect/golem_statued)
/// Reject food, rocks only
-/obj/item/organ/internal/stomach/golem/proc/try_eating(mob/living/carbon/source, atom/eating)
+/obj/item/organ/stomach/golem/proc/try_eating(mob/living/carbon/source, atom/eating)
SIGNAL_HANDLER
if(istype(eating, /obj/item/food/golem_food))
return
@@ -30,7 +30,7 @@
return COMSIG_CARBON_BLOCK_EAT
/// Golem stomach cannot process nutriment except from minerals
-/obj/item/organ/internal/stomach/golem/on_life(delta_time, times_fired)
+/obj/item/organ/stomach/golem/on_life(delta_time, times_fired)
for(var/datum/reagent/consumable/food in reagents.reagent_list)
if (istype(food, /datum/reagent/consumable/nutriment/mineral))
continue
@@ -38,7 +38,7 @@
return ..()
/// Slow down based on how full you are
-/obj/item/organ/internal/stomach/golem/handle_hunger(mob/living/carbon/human/human, delta_time, times_fired)
+/obj/item/organ/stomach/golem/handle_hunger(mob/living/carbon/human/human, delta_time, times_fired)
// the effects are all negative, so just don't run them if you have the trait
. = ..()
if(HAS_TRAIT(human, TRAIT_NOHUNGER))
diff --git a/code/modules/surgery/organs/internal/tongue/_tongue.dm b/code/modules/surgery/organs/internal/tongue/_tongue.dm
index 74192b2d23c3d..7b5cecb34115a 100644
--- a/code/modules/surgery/organs/internal/tongue/_tongue.dm
+++ b/code/modules/surgery/organs/internal/tongue/_tongue.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/tongue
+/obj/item/organ/tongue
name = "tongue"
desc = "A fleshy muscle mostly used for lying."
icon_state = "tongue"
@@ -14,7 +14,7 @@
* Relates to a mob's ability to speak a language - a mob must be able to speak the language
* and have a tongue able to speak the language (or omnitongue) in order to actually speak said language
*
- * To modify this list for subtypes, see [/obj/item/organ/internal/tongue/proc/get_possible_languages]. Do not modify directly.
+ * To modify this list for subtypes, see [/obj/item/organ/tongue/proc/get_possible_languages]. Do not modify directly.
*/
VAR_PRIVATE/list/languages_possible
/**
@@ -44,7 +44,7 @@
/// Whether this tongue modifies speech via signal
var/modifies_speech = FALSE
-/obj/item/organ/internal/tongue/Initialize(mapload)
+/obj/item/organ/tongue/Initialize(mapload)
. = ..()
// Setup the possible languages list
// - get_possible_languages gives us a list of language paths
@@ -52,7 +52,7 @@
// this results in tongues with identical possible languages sharing a cached list instance
languages_possible = string_list(get_possible_languages())
-/obj/item/organ/internal/tongue/examine(mob/user)
+/obj/item/organ/tongue/examine(mob/user)
. = ..()
if(HAS_MIND_TRAIT(user, TRAIT_ENTRAILS_READER)|| isobserver(user))
if(liked_foodtypes)
@@ -71,7 +71,7 @@
* While a user may be theoretically capable of speaking a language, they cannot physically speak it
* UNLESS they have a tongue with that language possible, UNLESS UNLESS they have omnitongue enabled.
*/
-/obj/item/organ/internal/tongue/proc/get_possible_languages()
+/obj/item/organ/tongue/proc/get_possible_languages()
RETURN_TYPE(/list)
// This is the default list of languages most humans should be capable of speaking
return list(
@@ -91,20 +91,20 @@
/datum/language/nekomimetic,
)
-/obj/item/organ/internal/tongue/proc/handle_speech(datum/source, list/speech_args)
+/obj/item/organ/tongue/proc/handle_speech(datum/source, list/speech_args)
SIGNAL_HANDLER
if(should_modify_speech(source, speech_args))
modify_speech(source, speech_args)
-/obj/item/organ/internal/tongue/proc/should_modify_speech(datum/source, list/speech_args)
+/obj/item/organ/tongue/proc/should_modify_speech(datum/source, list/speech_args)
if(speech_args[SPEECH_LANGUAGE] in languages_native) // Speaking a native language?
return FALSE // Don't modify speech
if(HAS_TRAIT(source, TRAIT_SIGN_LANG)) // No modifiers for signers - I hate this but I simply cannot get these to combine into one statement
return FALSE // Don't modify speech
return TRUE
-/obj/item/organ/internal/tongue/proc/modify_speech(datum/source, list/speech_args)
+/obj/item/organ/tongue/proc/modify_speech(datum/source, list/speech_args)
return speech_args[SPEECH_MESSAGE]
/**
@@ -114,7 +114,7 @@
* Can be overriden by subtypes for more complex behavior.
* Does not get called if the owner has ageusia.
**/
-/obj/item/organ/internal/tongue/proc/get_food_taste_reaction(obj/item/food, foodtypes = NONE)
+/obj/item/organ/tongue/proc/get_food_taste_reaction(obj/item/food, foodtypes = NONE)
var/food_taste_reaction
if(foodtypes & toxic_foodtypes)
food_taste_reaction = FOOD_TOXIC
@@ -124,7 +124,7 @@
food_taste_reaction = FOOD_LIKED
return food_taste_reaction
-/obj/item/organ/internal/tongue/mob_insert(mob/living/carbon/receiver, special, movement_flags)
+/obj/item/organ/tongue/mob_insert(mob/living/carbon/receiver, special, movement_flags)
. = ..()
if(modifies_speech)
@@ -138,7 +138,7 @@
REMOVE_TRAIT(receiver, TRAIT_AGEUSIA, NO_TONGUE_TRAIT)
apply_tongue_effects()
-/obj/item/organ/internal/tongue/mob_remove(mob/living/carbon/organ_owner, special, movement_flags)
+/obj/item/organ/tongue/mob_remove(mob/living/carbon/organ_owner, special, movement_flags)
. = ..()
temp_say_mod = ""
@@ -149,14 +149,14 @@
ADD_TRAIT(organ_owner, TRAIT_AGEUSIA, NO_TONGUE_TRAIT)
organ_owner.voice_filter = initial(organ_owner.voice_filter)
-/obj/item/organ/internal/tongue/apply_organ_damage(damage_amount, maximum = maxHealth, required_organ_flag)
+/obj/item/organ/tongue/apply_organ_damage(damage_amount, maximum = maxHealth, required_organ_flag)
. = ..()
if(!owner)
return FALSE
apply_tongue_effects()
/// Applies effects to our owner based on how damaged our tongue is
-/obj/item/organ/internal/tongue/proc/apply_tongue_effects()
+/obj/item/organ/tongue/proc/apply_tongue_effects()
if(sense_of_taste)
//tongues can't taste food when they are failing
if(organ_flags & ORGAN_FAILING)
@@ -171,13 +171,13 @@
else
ADD_TRAIT(owner, TRAIT_SPEAKS_CLEARLY, SPEAKING_FROM_TONGUE)
-/obj/item/organ/internal/tongue/could_speak_language(datum/language/language_path)
+/obj/item/organ/tongue/could_speak_language(datum/language/language_path)
return (language_path in languages_possible)
-/obj/item/organ/internal/tongue/get_availability(datum/species/owner_species, mob/living/owner_mob)
+/obj/item/organ/tongue/get_availability(datum/species/owner_species, mob/living/owner_mob)
return owner_species.mutanttongue
-/obj/item/organ/internal/tongue/lizard
+/obj/item/organ/tongue/lizard
name = "forked tongue"
desc = "A thin and long muscle typically found in reptilian races, apparently moonlights as a nose."
icon_state = "tonguelizard"
@@ -197,11 +197,11 @@
new /regex(@"\bX([\-|r|R]|\b)", "g") = "ECKS$1",
)
-/obj/item/organ/internal/tongue/lizard/New(class, timer, datum/mutation/human/copymut)
+/obj/item/organ/tongue/lizard/New(class, timer, datum/mutation/human/copymut)
. = ..()
AddComponent(/datum/component/speechmod, replacements = speech_replacements, should_modify_speech = CALLBACK(src, PROC_REF(should_modify_speech)))
-/obj/item/organ/internal/tongue/lizard/silver
+/obj/item/organ/tongue/lizard/silver
name = "silver tongue"
desc = "A genetic branch of the high society Silver Scales that gives them their silverizing properties. To them, it is everything, and society traitors have their tongue forcibly revoked. Oddly enough, it itself is just blue."
icon_state = "silvertongue"
@@ -221,7 +221,7 @@
/datum/action/cooldown/turn_to_statue/New(Target)
. = ..()
- if(!istype(Target, /obj/item/organ/internal/tongue/lizard/silver))
+ if(!istype(Target, /obj/item/organ/tongue/lizard/silver))
stack_trace("Non-silverscale tongue initialized a turn to statue action.")
qdel(src)
return
@@ -239,7 +239,7 @@
if(!isliving(owner))
return FALSE
- var/obj/item/organ/internal/tongue/lizard/silver/tongue_target = target
+ var/obj/item/organ/tongue/lizard/silver/tongue_target = target
if(tongue_target.owner != owner)
return FALSE
@@ -350,7 +350,7 @@
bomb = 50
fire = 100
-/obj/item/organ/internal/tongue/abductor
+/obj/item/organ/tongue/abductor
name = "superlingual matrix"
desc = "A mysterious structure that allows for instant communication between users. Pretty impressive until you need to eat something."
icon_state = "tongueayylmao"
@@ -359,11 +359,11 @@
modifies_speech = TRUE
var/mothership
-/obj/item/organ/internal/tongue/abductor/attack_self(mob/living/carbon/human/tongue_holder)
+/obj/item/organ/tongue/abductor/attack_self(mob/living/carbon/human/tongue_holder)
if(!istype(tongue_holder))
return
- var/obj/item/organ/internal/tongue/abductor/tongue = tongue_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/abductor/tongue = tongue_holder.get_organ_slot(ORGAN_SLOT_TONGUE)
if(!istype(tongue))
return
@@ -375,7 +375,7 @@
to_chat(tongue_holder, span_notice("You attune [src] to your own channel."))
mothership = tongue.mothership
-/obj/item/organ/internal/tongue/abductor/examine(mob/examining_mob)
+/obj/item/organ/tongue/abductor/examine(mob/examining_mob)
. = ..()
if(HAS_MIND_TRAIT(examining_mob, TRAIT_ABDUCTOR_TRAINING) || isobserver(examining_mob))
. += span_notice("It can be attuned to a different channel by using it inhand.")
@@ -384,14 +384,14 @@
else
. += span_notice("It is attuned to [mothership].")
-/obj/item/organ/internal/tongue/abductor/modify_speech(datum/source, list/speech_args)
+/obj/item/organ/tongue/abductor/modify_speech(datum/source, list/speech_args)
//Hacks
var/message = speech_args[SPEECH_MESSAGE]
var/mob/living/carbon/human/user = source
var/rendered = span_abductor("[user.real_name]: [message]")
user.log_talk(message, LOG_SAY, tag=SPECIES_ABDUCTOR)
for(var/mob/living/carbon/human/living_mob in GLOB.alive_mob_list)
- var/obj/item/organ/internal/tongue/abductor/tongue = living_mob.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/abductor/tongue = living_mob.get_organ_slot(ORGAN_SLOT_TONGUE)
if(!istype(tongue))
continue
if(mothership == tongue.mothership)
@@ -403,7 +403,7 @@
speech_args[SPEECH_MESSAGE] = ""
-/obj/item/organ/internal/tongue/zombie
+/obj/item/organ/tongue/zombie
name = "rotting tongue"
desc = "Between the decay and the fact that it's just lying there you doubt a tongue has ever seemed less sexy."
icon_state = "tonguezombie"
@@ -416,14 +416,14 @@
// List of english words that translate to zombie phrases
GLOBAL_LIST_INIT(english_to_zombie, list())
-/obj/item/organ/internal/tongue/zombie/proc/add_word_to_translations(english_word, zombie_word)
+/obj/item/organ/tongue/zombie/proc/add_word_to_translations(english_word, zombie_word)
GLOB.english_to_zombie[english_word] = zombie_word
// zombies don't care about grammar (any tense or form is all translated to the same word)
GLOB.english_to_zombie[english_word + plural_s(english_word)] = zombie_word
GLOB.english_to_zombie[english_word + "ing"] = zombie_word
GLOB.english_to_zombie[english_word + "ed"] = zombie_word
-/obj/item/organ/internal/tongue/zombie/proc/load_zombie_translations()
+/obj/item/organ/tongue/zombie/proc/load_zombie_translations()
var/list/zombie_translation = strings("zombie_replacement.json", "zombie")
for(var/zombie_word in zombie_translation)
// since zombie words are a reverse list, we gotta do this backwards
@@ -432,7 +432,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
add_word_to_translations(english_word, zombie_word)
GLOB.english_to_zombie = sort_list(GLOB.english_to_zombie) // Alphabetizes the list (for debugging)
-/obj/item/organ/internal/tongue/zombie/modify_speech(datum/source, list/speech_args)
+/obj/item/organ/tongue/zombie/modify_speech(datum/source, list/speech_args)
var/message = speech_args[SPEECH_MESSAGE]
if(message[1] != "*")
// setup the global list for translation if it hasn't already been done
@@ -470,7 +470,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
message = capitalize(message)
speech_args[SPEECH_MESSAGE] = message
-/obj/item/organ/internal/tongue/alien
+/obj/item/organ/tongue/alien
name = "alien tongue"
desc = "According to leading xenobiologists the evolutionary benefit of having a second mouth in your mouth is \"that it looks badass\"."
icon_state = "tonguexeno"
@@ -479,7 +479,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
modifies_speech = TRUE // not really, they just hiss
voice_filter = @{"[0:a] asplit [out0][out2]; [out0] asetrate=%SAMPLE_RATE%*0.8,aresample=%SAMPLE_RATE%,atempo=1/0.8,aformat=channel_layouts=mono [p0]; [out2] asetrate=%SAMPLE_RATE%*1.2,aresample=%SAMPLE_RATE%,atempo=1/1.2,aformat=channel_layouts=mono[p2]; [p0][0][p2] amix=inputs=3"}
// Aliens can only speak alien and a few other languages.
-/obj/item/organ/internal/tongue/alien/get_possible_languages()
+/obj/item/organ/tongue/alien/get_possible_languages()
return list(
/datum/language/xenocommon,
/datum/language/common,
@@ -488,14 +488,14 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
/datum/language/monkey,
)
-/obj/item/organ/internal/tongue/alien/modify_speech(datum/source, list/speech_args)
+/obj/item/organ/tongue/alien/modify_speech(datum/source, list/speech_args)
var/datum/saymode/xeno/hivemind = speech_args[SPEECH_SAYMODE]
if(hivemind)
return
playsound(owner, SFX_HISS, 25, TRUE, TRUE)
-/obj/item/organ/internal/tongue/bone
+/obj/item/organ/tongue/bone
name = "bone \"tongue\""
desc = "Apparently skeletons alter the sounds they produce through oscillation of their teeth, hence their characteristic rattling."
icon_state = "tonguebone"
@@ -510,15 +510,15 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
var/phomeme_type = "sans"
var/list/phomeme_types = list("sans", "papyrus")
-/obj/item/organ/internal/tongue/bone/Initialize(mapload)
+/obj/item/organ/tongue/bone/Initialize(mapload)
. = ..()
phomeme_type = pick(phomeme_types)
// Bone tongues can speak all default + calcic
-/obj/item/organ/internal/tongue/bone/get_possible_languages()
+/obj/item/organ/tongue/bone/get_possible_languages()
return ..() + /datum/language/calcic
-/obj/item/organ/internal/tongue/bone/modify_speech(datum/source, list/speech_args)
+/obj/item/organ/tongue/bone/modify_speech(datum/source, list/speech_args)
if (chattering)
chatter(speech_args[SPEECH_MESSAGE], phomeme_type, source)
switch(phomeme_type)
@@ -527,7 +527,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
if("papyrus")
speech_args[SPEECH_SPANS] |= SPAN_PAPYRUS
-/obj/item/organ/internal/tongue/bone/plasmaman
+/obj/item/organ/tongue/bone/plasmaman
name = "plasma bone \"tongue\""
desc = "Like animated skeletons, Plasmamen vibrate their teeth in order to produce speech."
icon_state = "tongueplasma"
@@ -535,7 +535,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
liked_foodtypes = VEGETABLES
disliked_foodtypes = FRUIT | CLOTH
-/obj/item/organ/internal/tongue/robot
+/obj/item/organ/tongue/robot
name = "robotic voicebox"
desc = "A voice synthesizer that can interface with organic lifeforms."
failing_desc = "seems to be broken."
@@ -549,13 +549,13 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
organ_traits = list(TRAIT_SILICON_EMOTES_ALLOWED)
voice_filter = "alimiter=0.9,acompressor=threshold=0.2:ratio=20:attack=10:release=50:makeup=2,highpass=f=1000"
-/obj/item/organ/internal/tongue/robot/could_speak_language(datum/language/language_path)
+/obj/item/organ/tongue/robot/could_speak_language(datum/language/language_path)
return TRUE // THE MAGIC OF ELECTRONICS
-/obj/item/organ/internal/tongue/robot/modify_speech(datum/source, list/speech_args)
+/obj/item/organ/tongue/robot/modify_speech(datum/source, list/speech_args)
speech_args[SPEECH_SPANS] |= SPAN_ROBOT
-/obj/item/organ/internal/tongue/snail
+/obj/item/organ/tongue/snail
name = "radula"
desc = "A minutely toothed, chitious ribbon, which as a side effect, makes all snails talk IINNCCRREEDDIIBBLLYY SSLLOOWWLLYY."
color = "#96DB00" // TODO proper sprite, rather than recoloured pink tongue
@@ -565,7 +565,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
disliked_foodtypes = DAIRY | ORANGES | SUGAR //DOPPLER EDIT: Roundstart Snails - As it turns out, you can't give a snail processed sugar or citrus.
/* DOPPLER EDIT START - Roundstart Snails: Less annoying speech.
-/obj/item/organ/internal/tongue/snail/modify_speech(datum/source, list/speech_args)
+/obj/item/organ/tongue/snail/modify_speech(datum/source, list/speech_args)
var/new_message
var/message = speech_args[SPEECH_MESSAGE]
for(var/i in 1 to length(message))
@@ -576,7 +576,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
speech_args[SPEECH_MESSAGE] = new_message
*/ // DOPPLER EDIT END
-/obj/item/organ/internal/tongue/ethereal
+/obj/item/organ/tongue/ethereal
name = "electric discharger"
desc = "A sophisticated ethereal organ, capable of synthesising speech via electrical discharge."
icon_state = "electrotongue"
@@ -590,10 +590,10 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
voice_filter = @{"[0:a] asplit [out0][out2]; [out0] asetrate=%SAMPLE_RATE%*0.99,aresample=%SAMPLE_RATE%,volume=0.3 [p0]; [p0][out2] amix=inputs=2"}
// Ethereal tongues can speak all default + voltaic
-/obj/item/organ/internal/tongue/ethereal/get_possible_languages()
+/obj/item/organ/tongue/ethereal/get_possible_languages()
return ..() + /datum/language/voltaic
-/obj/item/organ/internal/tongue/cat
+/obj/item/organ/tongue/cat
name = "felinid tongue"
desc = "A fleshy muscle mostly used for meowing."
say_mod = "meows"
@@ -601,7 +601,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
disliked_foodtypes = GROSS | CLOTH | RAW
organ_traits = list(TRAIT_WOUND_LICKER, TRAIT_FISH_EATER)
-/obj/item/organ/internal/tongue/jelly
+/obj/item/organ/tongue/jelly
name = "jelly tongue"
desc = "Ah... That's not the sound I expected it to make. Sounds like a Space Autumn Bird."
say_mod = "chirps"
@@ -609,20 +609,20 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
disliked_foodtypes = GROSS
toxic_foodtypes = NONE
-/obj/item/organ/internal/tongue/jelly/get_food_taste_reaction(obj/item/food, foodtypes = NONE)
+/obj/item/organ/tongue/jelly/get_food_taste_reaction(obj/item/food, foodtypes = NONE)
// a silver slime created this? what a delicacy!
if(HAS_TRAIT(food, TRAIT_FOOD_SILVER))
return FOOD_LIKED
return ..()
-/obj/item/organ/internal/tongue/monkey
+/obj/item/organ/tongue/monkey
name = "primitive tongue"
desc = "For aggressively chimpering. And consuming bananas."
say_mod = "chimpers"
liked_foodtypes = MEAT | FRUIT | BUGS
disliked_foodtypes = CLOTH
-/obj/item/organ/internal/tongue/moth
+/obj/item/organ/tongue/moth
name = "moth tongue"
desc = "Moths don't have tongues. Someone get god on the phone, tell them I'm not happy."
say_mod = "flutters"
@@ -630,26 +630,26 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
disliked_foodtypes = FRUIT | GROSS | BUGS | GORE
toxic_foodtypes = MEAT | RAW | SEAFOOD
-/obj/item/organ/internal/tongue/zombie
+/obj/item/organ/tongue/zombie
name = "rotting tongue"
desc = "Makes you speak like you're at the dentist and you just absolutely refuse to spit because you forgot to mention you were allergic to space shellfish."
say_mod = "moans"
-/obj/item/organ/internal/tongue/mush
+/obj/item/organ/tongue/mush
name = "mush-tongue-room"
desc = "You poof with this. Got it?"
icon = 'icons/obj/service/hydroponics/seeds.dmi'
icon_state = "mycelium-angel"
say_mod = "poofs"
-/obj/item/organ/internal/tongue/pod
+/obj/item/organ/tongue/pod
name = "pod tongue"
desc = "A plant-like organ used for speaking and eating."
say_mod = "whistles"
liked_foodtypes = VEGETABLES | FRUIT | GRAIN
disliked_foodtypes = GORE | MEAT | DAIRY | SEAFOOD | BUGS
-/obj/item/organ/internal/tongue/golem
+/obj/item/organ/tongue/golem
name = "golem tongue"
desc = "This silicate plate doesn't seem particularly mobile, but golems use it to form sounds."
color = COLOR_WEBSAFE_DARK_GRAY
diff --git a/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm b/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm
index f6fed86a90d60..8dfee79693736 100644
--- a/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm
+++ b/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/vocal_cords //organs that are activated through speech with the :x/MODE_KEY_VOCALCORDS channel
+/obj/item/organ/vocal_cords //organs that are activated through speech with the :x/MODE_KEY_VOCALCORDS channel
name = "vocal cords"
icon_state = "appendix"
zone = BODY_ZONE_PRECISE_MOUTH
@@ -8,17 +8,17 @@
healing_factor = 0
var/list/spans = null
-/obj/item/organ/internal/vocal_cords/proc/can_speak_with() //if there is any limitation to speaking with these cords
+/obj/item/organ/vocal_cords/proc/can_speak_with() //if there is any limitation to speaking with these cords
return TRUE
-/obj/item/organ/internal/vocal_cords/proc/speak_with(message) //do what the organ does
+/obj/item/organ/vocal_cords/proc/speak_with(message) //do what the organ does
return
-/obj/item/organ/internal/vocal_cords/proc/handle_speech(message) //actually say the message
+/obj/item/organ/vocal_cords/proc/handle_speech(message) //actually say the message
owner.say(message, spans = spans, sanitize = FALSE)
//Colossus drop, forces the listeners to obey certain commands
-/obj/item/organ/internal/vocal_cords/colossus
+/obj/item/organ/vocal_cords/colossus
name = "divine vocal cords"
desc = "They carry the voice of an ancient god."
icon_state = "voice_of_god"
@@ -30,7 +30,7 @@
/datum/action/item_action/organ_action/colossus
name = "Voice of God"
- var/obj/item/organ/internal/vocal_cords/colossus/cords = null
+ var/obj/item/organ/vocal_cords/colossus/cords = null
/datum/action/item_action/organ_action/colossus/New()
..()
@@ -67,7 +67,7 @@
return
owner.say(".x[command]")
-/obj/item/organ/internal/vocal_cords/colossus/can_speak_with()
+/obj/item/organ/vocal_cords/colossus/can_speak_with()
if(!owner)
return FALSE
@@ -77,22 +77,22 @@
return owner.can_speak()
-/obj/item/organ/internal/vocal_cords/colossus/handle_speech(message)
+/obj/item/organ/vocal_cords/colossus/handle_speech(message)
playsound(get_turf(owner), 'sound/effects/magic/clockwork/invoke_general.ogg', 300, TRUE, 5)
return //voice of god speaks for us
-/obj/item/organ/internal/vocal_cords/colossus/speak_with(message)
+/obj/item/organ/vocal_cords/colossus/speak_with(message)
var/cooldown = voice_of_god(uppertext(message), owner, spans, base_multiplier)
next_command = world.time + (cooldown * cooldown_mod)
-/obj/item/organ/internal/adamantine_resonator
+/obj/item/organ/adamantine_resonator
name = "adamantine resonator"
desc = "Fragments of adamantine exist in all golems, stemming from their origins as purely magical constructs. These are used to \"hear\" messages from their leaders."
zone = BODY_ZONE_HEAD
slot = ORGAN_SLOT_ADAMANTINE_RESONATOR
icon_state = "adamantine_resonator"
-/obj/item/organ/internal/vocal_cords/adamantine
+/obj/item/organ/vocal_cords/adamantine
name = "adamantine vocal cords"
desc = "When adamantine resonates, it causes all nearby pieces of adamantine to resonate as well. Golems containing these formations use this to broadcast messages to nearby golems."
actions_types = list(/datum/action/item_action/organ_action/use/adamantine_vocal_cords)
@@ -108,7 +108,7 @@
return
owner.say(".x[message]")
-/obj/item/organ/internal/vocal_cords/adamantine/handle_speech(message)
+/obj/item/organ/vocal_cords/adamantine/handle_speech(message)
var/msg = span_resonate("[span_name("[owner.real_name]")] resonates, \"[message]\"")
for(var/player in GLOB.player_list)
if(iscarbon(player))
diff --git a/code/modules/surgery/revival.dm b/code/modules/surgery/revival.dm
index 76689032fb6a4..65c8116769d0f 100644
--- a/code/modules/surgery/revival.dm
+++ b/code/modules/surgery/revival.dm
@@ -147,7 +147,7 @@
surgery_flags = parent_type::surgery_flags | SURGERY_REQUIRE_LIMB
/datum/surgery/revival/carbon/is_valid_target(mob/living/carbon/patient)
- var/obj/item/organ/internal/brain/target_brain = patient.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/target_brain = patient.get_organ_slot(ORGAN_SLOT_BRAIN)
return !isnull(target_brain)
/datum/surgery_step/revive/carbon
diff --git a/code/modules/surgery/sleeper_protocol.dm b/code/modules/surgery/sleeper_protocol.dm
index 23b02aeda801d..fd697240eed1e 100644
--- a/code/modules/surgery/sleeper_protocol.dm
+++ b/code/modules/surgery/sleeper_protocol.dm
@@ -37,7 +37,7 @@
. = ..()
if(!.)
return FALSE
- var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN)
if(!target_brain)
return FALSE
return TRUE
diff --git a/code/modules/surgery/stomachpump.dm b/code/modules/surgery/stomachpump.dm
index 4880f9329646f..47f25074c3acd 100644
--- a/code/modules/surgery/stomachpump.dm
+++ b/code/modules/surgery/stomachpump.dm
@@ -23,7 +23,7 @@
)
/datum/surgery/stomach_pump/can_start(mob/user, mob/living/carbon/target)
- var/obj/item/organ/internal/stomach/target_stomach = target.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/target_stomach = target.get_organ_slot(ORGAN_SLOT_STOMACH)
if(HAS_TRAIT(target, TRAIT_HUSK))
return FALSE
if(!target_stomach)
diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm
index fc6480e923908..2f14388fd4958 100644
--- a/code/modules/surgery/tools.dm
+++ b/code/modules/surgery/tools.dm
@@ -316,7 +316,6 @@
attack_verb_continuous = list("slaps")
attack_verb_simple = list("slap")
interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_IGNORE_MOBILITY
- tool_behaviour = TOOL_DRAPES
/obj/item/surgical_drapes/Initialize(mapload)
. = ..()
@@ -536,7 +535,7 @@
return
var/candidate_name
- var/obj/item/organ/external/tail_snip_candidate
+ var/obj/item/organ/tail_snip_candidate
var/obj/item/bodypart/limb_snip_candidate
if(user.zone_selected == BODY_ZONE_PRECISE_GROIN)
diff --git a/code/modules/transport/tram/tram_structures.dm b/code/modules/transport/tram/tram_structures.dm
index bdea433a9c925..346cb5e680283 100644
--- a/code/modules/transport/tram/tram_structures.dm
+++ b/code/modules/transport/tram/tram_structures.dm
@@ -145,7 +145,7 @@
/obj/structure/tram/narsie_act()
add_atom_colour(NARSIE_WINDOW_COLOUR, FIXED_COLOUR_PRIORITY)
-/obj/structure/tram/singularity_pull(singulo, current_size)
+/obj/structure/tram/singularity_pull(atom/singularity, current_size)
..()
if(current_size >= STAGE_FIVE)
diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm
index 74378685fbbec..a9b04ccc8ccc0 100644
--- a/code/modules/unit_tests/_unit_tests.dm
+++ b/code/modules/unit_tests/_unit_tests.dm
@@ -160,6 +160,7 @@
#include "heretic_knowledge.dm"
#include "heretic_rituals.dm"
#include "high_five.dm"
+#include "holder_loving.dm"
#include "holidays.dm"
#include "hulk.dm"
#include "human_through_recycler.dm"
@@ -209,6 +210,7 @@
#include "novaflower_burn.dm"
#include "nuke_cinematic.dm"
#include "objectives.dm"
+#include "omnitools.dm"
#include "operating_table.dm"
#include "orderable_items.dm"
#include "organ_bodypart_shuffle.dm"
diff --git a/code/modules/unit_tests/blindness.dm b/code/modules/unit_tests/blindness.dm
index 88f5eece5758b..1d1093b7581a7 100644
--- a/code/modules/unit_tests/blindness.dm
+++ b/code/modules/unit_tests/blindness.dm
@@ -105,7 +105,7 @@
/datum/unit_test/eye_damage/Run()
var/mob/living/carbon/human/dummy = allocate(/mob/living/carbon/human/consistent)
- var/obj/item/organ/internal/eyes/eyes = dummy.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/eyes = dummy.get_organ_slot(ORGAN_SLOT_EYES)
TEST_ASSERT_NOTNULL(eyes, "Eye damage unit test spawned a dummy without eyes!")
// Test blindness due to eye damage
diff --git a/code/modules/unit_tests/closets.dm b/code/modules/unit_tests/closets.dm
index e1afb47f55397..0427f355ff4e7 100644
--- a/code/modules/unit_tests/closets.dm
+++ b/code/modules/unit_tests/closets.dm
@@ -6,6 +6,8 @@
var/list/all_closets = subtypesof(/obj/structure/closet)
//Supply pods. They are sent, crashed, opened and never closed again. They also cause exceptions in nullspace.
all_closets -= typesof(/obj/structure/closet/supplypod)
+ /// these bitches spawn specially crafted humans with gear and moving organs being shuffled around through the whole process
+ all_closets -= typesof(/obj/structure/closet/body_bag/lost_crew/with_body)
for(var/closet_type in all_closets)
var/obj/structure/closet/closet = allocate(closet_type)
diff --git a/code/modules/unit_tests/dismemberment.dm b/code/modules/unit_tests/dismemberment.dm
index d8ce43b960eda..06c8707af203d 100644
--- a/code/modules/unit_tests/dismemberment.dm
+++ b/code/modules/unit_tests/dismemberment.dm
@@ -14,7 +14,7 @@
// Abnormal situation: We're holding an undroppable item and get dismembered.
ADD_TRAIT(testing_item, TRAIT_NODROP, TRAIT_GENERIC)
- test_item(dummy, testing_item, status_text = "after applying TRAIT_NODROP to the testing item")
+ test_item(dummy, testing_item, status_text = " after applying TRAIT_NODROP to the testing item")
/datum/unit_test/dismemberment/proc/test_item(mob/living/carbon/human/dummy, obj/item/testing_item, status_text = "")
@@ -31,7 +31,7 @@
var/obj/item/held_item = dummy.get_item_for_held_index(dismembered_limb.held_index)
dismembered_limb.dismember()
- TEST_ASSERT(held_item in dummy.loc, "Dummy did not drop [held_item] when [dismembered_limb] was dismembered [status_text].")
+ TEST_ASSERT(held_item in dummy.loc, "Dummy did not drop [held_item] when [dismembered_limb] was dismembered[status_text].")
// Clean up after ourselves
qdel(dismembered_limb)
dummy.fully_heal(HEAL_ALL)
diff --git a/code/modules/unit_tests/fish_unit_tests.dm b/code/modules/unit_tests/fish_unit_tests.dm
index 8ed2b999e7ffb..e21b3fec4c041 100644
--- a/code/modules/unit_tests/fish_unit_tests.dm
+++ b/code/modules/unit_tests/fish_unit_tests.dm
@@ -455,7 +455,7 @@
TEST_ASSERT_EQUAL(fish.status, FISH_DEAD, "The fish is not dead, despite having sustained enough damage that it should. health: [fish.health]")
- var/obj/item/organ/internal/stomach/belly = gourmet.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/belly = gourmet.get_organ_slot(ORGAN_SLOT_STOMACH)
belly.reagents.clear_reagents()
fish.set_status(FISH_ALIVE)
diff --git a/code/modules/unit_tests/full_heal.dm b/code/modules/unit_tests/full_heal.dm
index f5d247d7a10e6..7449d2aeb4cc4 100644
--- a/code/modules/unit_tests/full_heal.dm
+++ b/code/modules/unit_tests/full_heal.dm
@@ -4,12 +4,12 @@
/datum/unit_test/full_heal_heals_organs/Run()
var/mob/living/carbon/human/dummy = allocate(/mob/living/carbon/human/consistent)
- for(var/obj/item/organ/internal/organ in dummy.organs)
+ for(var/obj/item/organ/organ in dummy.organs)
organ.apply_organ_damage(50)
dummy.fully_heal(HEAL_ORGANS)
- for(var/obj/item/organ/internal/organ in dummy.organs)
+ for(var/obj/item/organ/organ in dummy.organs)
if(organ.damage <= 0)
continue
TEST_FAIL("Organ [organ] did not get healed by fullyheal flag HEAL_ORGANS.")
@@ -22,7 +22,7 @@
var/list/we_started_with = list()
- for(var/obj/item/organ/internal/organ in dummy.organs)
+ for(var/obj/item/organ/organ in dummy.organs)
if(organ.organ_flags & ORGAN_VITAL) // leave this for now
continue
we_started_with += organ.type
diff --git a/code/modules/unit_tests/holder_loving.dm b/code/modules/unit_tests/holder_loving.dm
new file mode 100644
index 0000000000000..6799cb228daa6
--- /dev/null
+++ b/code/modules/unit_tests/holder_loving.dm
@@ -0,0 +1,31 @@
+/datum/unit_test/holder_loving
+
+/datum/unit_test/holder_loving/Run()
+ var/mob/living/carbon/human/consistent/person = allocate(/mob/living/carbon/human/consistent)
+ var/obj/item/storage/backpack/duffelbag/bag = allocate(/obj/item/storage/backpack/duffelbag)
+ var/obj/item/storage/backpack/duffelbag/testbag = allocate(/obj/item/storage/backpack/duffelbag)
+ var/obj/item/wrench/tool = allocate(/obj/item/wrench)
+
+ //put wrench in bag & equip bag on human
+ tool.AddComponent(/datum/component/holderloving, bag)
+ bag.atom_storage.attempt_insert(tool, person, messages = FALSE)
+ person.equip_to_slot_if_possible(bag, ITEM_SLOT_BACK)
+
+ //Test 1: Should be able to move wrench from bag to hand
+ person.putItemFromInventoryInHandIfPossible(tool, 1)
+ TEST_ASSERT_EQUAL(person.get_item_for_held_index(1), tool, "Holder loving component blocked equiping wrench from storage into hand!")
+
+ //Test 2: Should be able to swap the item between hands
+ person.swap_hand(2, silent = TRUE)
+ tool.attempt_pickup(person)
+ TEST_ASSERT_EQUAL(person.get_item_for_held_index(2), tool, "Holder loving component blocked swapping the wrench into the other hand!")
+
+ //Test 3: Upon dropping the item onto the ground it should move back into the bag
+ person.dropItemToGround(tool, silent = TRUE)
+ TEST_ASSERT_NOTNULL(locate(/obj/item/wrench) in bag, "Holder loving component did not move the wrench back into storage upon dropping!")
+
+ //Test 4: Should not be able to move the wrench into any other atom besides its holder
+ TEST_ASSERT(!person.transferItemToLoc(tool, testbag), "Holder loving component failed to block moving the wrench into another atom that isn't the holder!")
+
+ //Test 5: Should fail at the signal checks
+ TEST_ASSERT(!person.temporarilyRemoveItemFromInventory(tool, newloc = testbag), "Holder loving component failed to block temporarily removing wrench and moving it into another atom that isn't the holder!")
diff --git a/code/modules/unit_tests/ling_decap.dm b/code/modules/unit_tests/ling_decap.dm
index 4c8c7e4e03124..d6c8d244a8d18 100644
--- a/code/modules/unit_tests/ling_decap.dm
+++ b/code/modules/unit_tests/ling_decap.dm
@@ -9,12 +9,12 @@
var/obj/item/bodypart/head/noggin = ling.get_bodypart(BODY_ZONE_HEAD)
noggin.dismember()
TEST_ASSERT_NULL(ling.get_bodypart(BODY_ZONE_HEAD), "Changeling failed to be decapitated.")
- var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in noggin
+ var/obj/item/organ/brain/brain = locate(/obj/item/organ/brain) in noggin
TEST_ASSERT_NULL(brain.brainmob.mind, "Changeling's mind was moved to their brain after decapitation, but it should have remained in their body.")
- var/obj/item/organ/internal/brain/oldbrain = locate(/obj/item/organ/internal/brain) in noggin
+ var/obj/item/organ/brain/oldbrain = locate(/obj/item/organ/brain) in noggin
noggin.drop_organs()
- TEST_ASSERT_NULL(locate(/obj/item/organ/internal/brain) in noggin, "Changeling's head failed to drop its brain.")
+ TEST_ASSERT_NULL(locate(/obj/item/organ/brain) in noggin, "Changeling's head failed to drop its brain.")
TEST_ASSERT_NULL(oldbrain.brainmob.mind, "Changeling's mind was moved to their brain after decapitation and organ dropping, but it should have remained in their body.")
TEST_ASSERT_EQUAL(ling.stat, CONSCIOUS, "Changeling was not conscious after losing their head.")
@@ -34,10 +34,10 @@
var/obj/item/bodypart/head/noggin = normal_guy.get_bodypart(BODY_ZONE_HEAD)
noggin.dismember()
- var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in noggin
+ var/obj/item/organ/brain/brain = locate(/obj/item/organ/brain) in noggin
TEST_ASSERT_EQUAL(brain.brainmob.mind, my_guys_mind, "Dummy's mind was not moved to their brain after decapitation.")
- var/obj/item/organ/internal/brain/oldbrain = locate(/obj/item/organ/internal/brain) in noggin
+ var/obj/item/organ/brain/oldbrain = locate(/obj/item/organ/brain) in noggin
noggin.drop_organs()
TEST_ASSERT_EQUAL(oldbrain.brainmob.mind, my_guys_mind, "Dummy's mind was not moved to their brain after being removed from their head.")
diff --git a/code/modules/unit_tests/liver.dm b/code/modules/unit_tests/liver.dm
index 80c3ecf35b9a2..f2f5dcfd00f7a 100644
--- a/code/modules/unit_tests/liver.dm
+++ b/code/modules/unit_tests/liver.dm
@@ -12,7 +12,7 @@
var/datum/reagent/toxin/bonehurtingjuice/bonehurting = /datum/reagent/toxin/bonehurtingjuice
var/datum/reagent/consumable/milk/calcium = /datum/reagent/consumable/milk
- TEST_ASSERT(!isnull(mrbones.get_organ_by_type(/obj/item/organ/internal/liver/bone)), "Skeleton does not have a bone liver")
+ TEST_ASSERT(!isnull(mrbones.get_organ_by_type(/obj/item/organ/liver/bone)), "Skeleton does not have a bone liver")
TEST_ASSERT_EQUAL(mrbones.has_reagent(/datum/reagent/toxin/bonehurtingjuice), FALSE, "Skeleton somehow has bone hurting juice before drinking")
TEST_ASSERT_EQUAL(mrbones.has_reagent(/datum/reagent/consumable/milk), FALSE, "Skeleton somehow has milk before drinking")
@@ -67,7 +67,7 @@
// Testing plasma/hot ice healing on wounds
- TEST_ASSERT(!isnull(mrbones.get_organ_by_type(/obj/item/organ/internal/liver/bone/plasmaman)), "Plasmaman does not have a plasmaman bone liver")
+ TEST_ASSERT(!isnull(mrbones.get_organ_by_type(/obj/item/organ/liver/bone/plasmaman)), "Plasmaman does not have a plasmaman bone liver")
TEST_ASSERT_EQUAL(mrbones.has_reagent(plasma), FALSE, "Plasmaman somehow has plasma before drinking")
TEST_ASSERT_EQUAL(mrbones.has_reagent(hot_ice), FALSE, "Plasmaman somehow has hot ice before drinking")
diff --git a/code/modules/unit_tests/lungs.dm b/code/modules/unit_tests/lungs.dm
index 4f9b7ceb44296..c8338b6dec889 100644
--- a/code/modules/unit_tests/lungs.dm
+++ b/code/modules/unit_tests/lungs.dm
@@ -13,27 +13,27 @@
// 2500 Litres of O2/N2 gas mix, ideal for life.
var/datum/gas_mixture/test_mix = create_standard_mix()
var/mob/living/carbon/human/lab_rat = allocate(/mob/living/carbon/human/consistent)
- var/obj/item/organ/internal/lungs/test_lungs = allocate(/obj/item/organ/internal/lungs)
+ var/obj/item/organ/lungs/test_lungs = allocate(/obj/item/organ/lungs)
// Test one breath of O2/N2 mix.
lungs_test_check_breath("standard gas mixture", lab_rat, test_lungs, test_mix)
// Suffocation with an empty gas mix.
var/datum/gas_mixture/empty_test_mix = allocate(/datum/gas_mixture)
lab_rat = allocate(/mob/living/carbon/human/consistent)
- test_lungs = allocate(/obj/item/organ/internal/lungs)
+ test_lungs = allocate(/obj/item/organ/lungs)
// Test one breath of nothing. Suffocate due to the breath being empty.
lungs_test_check_breath("empty gas mixture", lab_rat, test_lungs, empty_test_mix, expect_failure = TRUE)
// Suffocation with null. This does indeed happen normally.
lab_rat = allocate(/mob/living/carbon/human/consistent)
- test_lungs = allocate(/obj/item/organ/internal/lungs)
+ test_lungs = allocate(/obj/item/organ/lungs)
// Test one breath of nothing. Suffocate due to the breath being null.
lungs_test_check_breath("null", lab_rat, test_lungs, null, expect_failure = TRUE)
// Suffocation with Nitrogen.
var/datum/gas_mixture/nitro_test_mix = create_nitrogen_mix()
lab_rat = allocate(/mob/living/carbon/human/consistent)
- test_lungs = allocate(/obj/item/organ/internal/lungs)
+ test_lungs = allocate(/obj/item/organ/lungs)
// Test one breath of Nitrogen. Suffocate due to the breath being 100% N2.
lungs_test_check_breath("pure Nitrogen", lab_rat, test_lungs, nitro_test_mix, expect_failure = TRUE)
@@ -44,14 +44,14 @@
// 2500 Litres of pure Plasma.
var/datum/gas_mixture/plasma_test_mix = create_plasma_mix()
var/mob/living/carbon/human/lab_rat = allocate(/mob/living/carbon/human/consistent)
- var/obj/item/organ/internal/lungs/plasmaman/test_lungs = allocate(/obj/item/organ/internal/lungs/plasmaman)
+ var/obj/item/organ/lungs/plasmaman/test_lungs = allocate(/obj/item/organ/lungs/plasmaman)
// Test one breath of Plasma on Plasmaman lungs.
lungs_test_check_breath("pure Plasma", lab_rat, test_lungs, plasma_test_mix)
// Tests suffocation with Nitrogen.
var/datum/gas_mixture/nitro_test_mix = create_nitrogen_mix()
lab_rat = allocate(/mob/living/carbon/human/consistent)
- test_lungs = allocate(/obj/item/organ/internal/lungs/plasmaman)
+ test_lungs = allocate(/obj/item/organ/lungs/plasmaman)
// Test one breath of Nitrogen on Plasmaman lungs.
lungs_test_check_breath("pure Nitrogen", lab_rat, test_lungs, nitro_test_mix, expect_failure = TRUE)
@@ -62,15 +62,15 @@
/datum/unit_test/lungs/lungs_sanity_ashwalker/Run()
// Gas mix resembling one cell of lavaland's atmosphere.
var/datum/gas_mixture/lavaland_test_mix = create_lavaland_mix()
- var/obj/item/organ/internal/lungs/lavaland/test_lungs = allocate(/obj/item/organ/internal/lungs/lavaland)
+ var/obj/item/organ/lungs/lavaland/test_lungs = allocate(/obj/item/organ/lungs/lavaland)
var/mob/living/carbon/human/lab_rat = allocate(/mob/living/carbon/human/consistent)
// Test one breath of Lavaland gas mix on Ashwalker lungs.
lungs_test_check_breath("Lavaland air mixture", lab_rat, test_lungs, lavaland_test_mix)
-/// Comprehensive unit test for [/obj/item/organ/internal/lungs/proc/check_breath()]
+/// Comprehensive unit test for [/obj/item/organ/lungs/proc/check_breath()]
/// If "expect_failure" is set to TRUE, the test ensures the given Human suffocated.
/// A "test_name" string is required to contextualize test logs. Describe the gas you're testing.
-/datum/unit_test/lungs/proc/lungs_test_check_breath(test_name, mob/living/carbon/human/lab_rat, obj/item/organ/internal/lungs/test_lungs, datum/gas_mixture/test_mix, expect_failure = FALSE)
+/datum/unit_test/lungs/proc/lungs_test_check_breath(test_name, mob/living/carbon/human/lab_rat, obj/item/organ/lungs/test_lungs, datum/gas_mixture/test_mix, expect_failure = FALSE)
// Setup a small volume of gas which represents one "breath" from test_mix.
var/datum/gas_mixture/test_breath
@@ -155,14 +155,14 @@
TEST_ASSERT(molar_cmp_equals(GET_MOLES(test_breath, /datum/gas/carbon_dioxide), expected_co2), TEST_CHECK_BREATH_MESSAGE(test_lungs, "should convert Plasma into an equivalent volume of CO2."))
/// Tests minimum gas alerts by comparing gas pressure.
-/datum/unit_test/lungs/proc/lungs_test_alert_min(mob/living/carbon/human/lab_rat, obj/item/organ/internal/lungs/test_lungs, alert_name, min_pressure, pressure)
+/datum/unit_test/lungs/proc/lungs_test_alert_min(mob/living/carbon/human/lab_rat, obj/item/organ/lungs/test_lungs, alert_name, min_pressure, pressure)
var/alert_thrown = lab_rat.has_alert(alert_name)
var/pressure_safe = (pressure >= min_pressure) || (min_pressure == 0)
TEST_ASSERT(!pressure_safe && alert_thrown || pressure_safe, TEST_ALERT_THROW_MESSAGE(test_lungs, alert_name))
TEST_ASSERT(pressure_safe && !alert_thrown || !pressure_safe, TEST_ALERT_INHIBIT_MESSAGE(test_lungs, alert_name))
/// Tests maximum gas alerts by comparing gas pressure.
-/datum/unit_test/lungs/proc/lungs_test_alert_max(mob/living/carbon/human/lab_rat, obj/item/organ/internal/lungs/test_lungs, alert_name, max_pressure, pressure)
+/datum/unit_test/lungs/proc/lungs_test_alert_max(mob/living/carbon/human/lab_rat, obj/item/organ/lungs/test_lungs, alert_name, max_pressure, pressure)
var/alert_thrown = lab_rat.has_alert(alert_name)
var/pressure_safe = (pressure <= max_pressure) || (max_pressure == 0)
TEST_ASSERT(!pressure_safe && alert_thrown || pressure_safe, TEST_ALERT_THROW_MESSAGE(test_lungs, alert_name))
diff --git a/code/modules/unit_tests/metabolizing.dm b/code/modules/unit_tests/metabolizing.dm
index 53250def309f7..53bd3277dc485 100644
--- a/code/modules/unit_tests/metabolizing.dm
+++ b/code/modules/unit_tests/metabolizing.dm
@@ -80,7 +80,7 @@
pill.attack(pill_user, pill_user)
// Set the metabolism efficiency to 1.0 so it transfers all reagents to the body in one go.
- var/obj/item/organ/internal/stomach/pill_belly = pill_user.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/pill_belly = pill_user.get_organ_slot(ORGAN_SLOT_STOMACH)
pill_belly.metabolism_efficiency = 1
pill_user.Life()
diff --git a/code/modules/unit_tests/omnitools.dm b/code/modules/unit_tests/omnitools.dm
new file mode 100644
index 0000000000000..700e0efd190cd
--- /dev/null
+++ b/code/modules/unit_tests/omnitools.dm
@@ -0,0 +1,64 @@
+/datum/unit_test/omnitools_engiboorg/Run()
+ var/mob/living/silicon/robot/borg = allocate(/mob/living/silicon/robot)
+
+ //transform to engiborg
+ borg.model.transform_to(/obj/item/robot_model/engineering, forced = TRUE)
+ var/obj/item/borg/cyborg_omnitool/engineering/engi_tool = null
+ for(var/obj/item/borg/tool as anything in borg.model.modules)
+ if(istype(tool, /obj/item/borg/cyborg_omnitool/engineering))
+ engi_tool = tool
+ break
+ borg.shown_robot_modules = TRUE //stops hud from updating which would runtime cause our mob does not have one
+ borg.equip_module_to_slot(engi_tool, 1)
+ borg.select_module(1)
+ var/obj/item/held_item = borg.get_active_held_item()
+
+ //Tests for omnitool wrench
+ engi_tool.reference = engi_tool.omni_toolkit[1]
+ engi_tool.tool_behaviour = initial(engi_tool.reference.tool_behaviour)
+ var/obj/machinery/cell_charger/charger = allocate(/obj/machinery/cell_charger)
+ //Test 1: charger must be anchored
+ held_item.melee_attack_chain(borg, charger)
+ TEST_ASSERT(!charger.anchored, "Cell charger was not anchored by borg omnitool wrench!")
+ //Test 2: charger must be unanchored
+ held_item.melee_attack_chain(borg, charger)
+ TEST_ASSERT(charger.anchored, "Cell charger was not unanchored by borg omnitool wrench!")
+
+ //Tests for omnitool wirecutter
+ engi_tool.reference = engi_tool.omni_toolkit[2]
+ engi_tool.tool_behaviour = initial(engi_tool.reference.tool_behaviour)
+ //Test 1: is holding wirecutters for wires
+ TEST_ASSERT(borg.is_holding_tool_quality(TOOL_WIRECUTTER), "Cannot find borg omnitool wirecutters in borgs hand!")
+ //Test 2: frame wires must be cut
+ var/obj/structure/frame/machine/test_frame = allocate(/obj/structure/frame/machine)
+ test_frame.state = FRAME_STATE_WIRED
+ held_item.melee_attack_chain(borg, test_frame)
+ TEST_ASSERT_EQUAL(test_frame.state, FRAME_STATE_EMPTY, "Machine frame's wires were not cut by the borg omnitool wirecutters!")
+
+ //Test for omnitool screwdriver
+ engi_tool.reference = engi_tool.omni_toolkit[3]
+ engi_tool.tool_behaviour = initial(engi_tool.reference.tool_behaviour)
+ //Test 1: dissemble frame
+ held_item.melee_attack_chain(borg, test_frame)
+ TEST_ASSERT(QDELETED(test_frame), "Machine frame was not deconstructed by borg omnitool screwdriver!")
+
+ //Test for borg omnitool crowbar
+ engi_tool.reference = engi_tool.omni_toolkit[4]
+ engi_tool.tool_behaviour = initial(engi_tool.reference.tool_behaviour)
+ var/obj/machinery/recharger/recharger = allocate(/obj/machinery/recharger)
+ recharger.panel_open = TRUE
+ //Test 1: should dissemble the charger
+ held_item.melee_attack_chain(borg, recharger)
+ TEST_ASSERT(QDELETED(recharger), "Recharger was not deconstructed by borg omnitool crowbar!")
+
+ //Test for borg omnitool multitool
+ engi_tool.reference = engi_tool.omni_toolkit[5]
+ engi_tool.tool_behaviour = initial(engi_tool.reference.tool_behaviour)
+ var/obj/machinery/ore_silo/silo = allocate(/obj/machinery/ore_silo)
+ //Test 1: should store silo in buffer
+ held_item.melee_attack_chain(borg, silo)
+ var/obj/item/multitool/tool = held_item.get_proxy_attacker_for(silo, borg)
+ TEST_ASSERT(istype(tool), "Borg failed to switch internal tool to multitool")
+ TEST_ASSERT(istype(tool.buffer, /obj/machinery/ore_silo), "Borg omnitool multitool failed to log ore silo!")
+
+ borg.unequip_module_from_slot(engi_tool, 1)
diff --git a/code/modules/unit_tests/organs.dm b/code/modules/unit_tests/organs.dm
index 1da3808ba3908..8f05a28405898 100644
--- a/code/modules/unit_tests/organs.dm
+++ b/code/modules/unit_tests/organs.dm
@@ -8,20 +8,20 @@
// List of organ typepaths which cause species change.
// Species change swaps out all the organs, making test_organ un-usable after insertion.
var/static/list/species_changing_organs = typecacheof(list(
- /obj/item/organ/internal/brain/shadow/nightmare,
+ /obj/item/organ/brain/shadow/nightmare,
))
// List of organ typepaths which are not test-able, such as certain class prototypes.
var/static/list/test_organ_blacklist = typecacheof(list(
- /obj/item/organ/internal,
- /obj/item/organ/external,
- /obj/item/organ/external/wings,
- /obj/item/organ/internal/cyberimp,
- /obj/item/organ/internal/cyberimp/brain,
- /obj/item/organ/internal/cyberimp/mouth,
- /obj/item/organ/internal/cyberimp/arm,
- /obj/item/organ/internal/cyberimp/chest,
- /obj/item/organ/internal/cyberimp/eyes,
- /obj/item/organ/internal/alien,
+ /obj/item/organ,
+ /obj/item/organ,
+ /obj/item/organ/wings,
+ /obj/item/organ/cyberimp,
+ /obj/item/organ/cyberimp/brain,
+ /obj/item/organ/cyberimp/mouth,
+ /obj/item/organ/cyberimp/arm,
+ /obj/item/organ/cyberimp/chest,
+ /obj/item/organ/cyberimp/eyes,
+ /obj/item/organ/alien,
))
/datum/unit_test/organ_sanity/Run()
@@ -85,10 +85,10 @@
/datum/unit_test/organ_damage/Run()
var/mob/living/carbon/human/dummy = allocate(/mob/living/carbon/human/consistent)
- for(var/obj/item/organ/internal/organ_to_test in dummy.organs)
+ for(var/obj/item/organ/organ_to_test in dummy.organs)
test_organ(dummy, organ_to_test)
-/datum/unit_test/organ_damage/proc/test_organ(mob/living/carbon/human/dummy, obj/item/organ/internal/test_organ)
+/datum/unit_test/organ_damage/proc/test_organ(mob/living/carbon/human/dummy, obj/item/organ/test_organ)
var/slot_to_use = test_organ.slot
// Tests [mob/living/proc/adjustOrganLoss]
diff --git a/code/modules/unit_tests/reagent_mob_expose.dm b/code/modules/unit_tests/reagent_mob_expose.dm
index 844b863c0374b..d6ed81292a97d 100644
--- a/code/modules/unit_tests/reagent_mob_expose.dm
+++ b/code/modules/unit_tests/reagent_mob_expose.dm
@@ -58,6 +58,13 @@
syringe.melee_attack_chain(human, human)
TEST_ASSERT_EQUAL(human.health, 80, "Human health did not update after injection from syringe")
+ // INHALE
+ TEST_ASSERT_NULL(human.has_status_effect(/datum/status_effect/hallucination), "Human is drowsy at the start of testing")
+ drink.reagents.clear_reagents()
+ drink.reagents.add_reagent(/datum/reagent/nitrous_oxide, 10)
+ drink.reagents.trans_to(human, 10, methods = INHALE)
+ TEST_ASSERT_NOTNULL(human.has_status_effect(/datum/status_effect/hallucination), "Human is not drowsy after exposure to vapors")
+
/datum/unit_test/reagent_mob_expose/Destroy()
SSmobs.ignite()
return ..()
diff --git a/code/modules/unit_tests/screenshot_high_luminosity_eyes.dm b/code/modules/unit_tests/screenshot_high_luminosity_eyes.dm
index 1e2c10c2f2952..85c557b18108a 100644
--- a/code/modules/unit_tests/screenshot_high_luminosity_eyes.dm
+++ b/code/modules/unit_tests/screenshot_high_luminosity_eyes.dm
@@ -4,7 +4,7 @@
/// Tests to make sure no punks have broken high luminosity eyes
/datum/unit_test/screenshot_high_luminosity_eyes
var/mob/living/carbon/human/test_subject
- var/obj/item/organ/internal/eyes/robotic/glow/test_eyes
+ var/obj/item/organ/eyes/robotic/glow/test_eyes
/datum/unit_test/screenshot_high_luminosity_eyes/Run()
// Create a mob with red and blue eyes. This is to test that high luminosity eyes properly default to the old eye color.
@@ -14,7 +14,7 @@
test_subject.eye_color_right = COLOR_BLUE
// Create our eyes, and insert them into the mob
- test_eyes = allocate(/obj/item/organ/internal/eyes/robotic/glow)
+ test_eyes = allocate(/obj/item/organ/eyes/robotic/glow)
test_eyes.Insert(test_subject)
// This should be 4, but just in case it ever changes in the future
diff --git a/code/modules/unit_tests/screenshot_humanoids.dm b/code/modules/unit_tests/screenshot_humanoids.dm
index 1b7e39f03bb14..6edaadb0e714d 100644
--- a/code/modules/unit_tests/screenshot_humanoids.dm
+++ b/code/modules/unit_tests/screenshot_humanoids.dm
@@ -23,7 +23,7 @@
moth.dna.features["moth_markings"] = "None"
moth.dna.features["moth_wings"] = "Firewatch"
moth.set_species(/datum/species/moth)
- moth.equipOutfit(/datum/outfit/job/cmo, visualsOnly = TRUE)
+ moth.equipOutfit(/datum/outfit/job/cmo, visuals_only = TRUE)
test_screenshot("[/datum/species/moth]", get_flat_icon_for_all_directions(moth))
testable_species -= /datum/species/moth
@@ -45,5 +45,5 @@
/datum/unit_test/screenshot_humanoids/proc/make_dummy(species, job_outfit)
var/mob/living/carbon/human/dummy/consistent/dummy = allocate(/mob/living/carbon/human/dummy/consistent)
dummy.set_species(species)
- dummy.equipOutfit(job_outfit, visualsOnly = TRUE)
+ dummy.equipOutfit(job_outfit, visuals_only = TRUE)
return dummy
diff --git a/code/modules/unit_tests/screenshot_saturnx.dm b/code/modules/unit_tests/screenshot_saturnx.dm
index 771ea278e3247..2183f0e66eadc 100644
--- a/code/modules/unit_tests/screenshot_saturnx.dm
+++ b/code/modules/unit_tests/screenshot_saturnx.dm
@@ -3,7 +3,7 @@
/datum/unit_test/screenshot_saturnx/Run()
var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human/dummy/consistent) //we don't use a dummy as they have no organs
- human.equipOutfit(/datum/outfit/job/assistant/consistent, visualsOnly = TRUE)
+ human.equipOutfit(/datum/outfit/job/assistant/consistent, visuals_only = TRUE)
var/datum/reagent/drug/saturnx/saturnx_reagent = new()
diff --git a/code/modules/unit_tests/species_change_organs.dm b/code/modules/unit_tests/species_change_organs.dm
index 41d55047f0346..96ade09bf626f 100644
--- a/code/modules/unit_tests/species_change_organs.dm
+++ b/code/modules/unit_tests/species_change_organs.dm
@@ -11,10 +11,10 @@
// Give a trauma
dummy.gain_trauma(/datum/brain_trauma/severe/blindness)
// Give a cyber heart
- var/obj/item/organ/internal/heart/cybernetic/cyber_heart = allocate(/obj/item/organ/internal/heart/cybernetic)
+ var/obj/item/organ/heart/cybernetic/cyber_heart = allocate(/obj/item/organ/heart/cybernetic)
cyber_heart.Insert(dummy, special = TRUE, movement_flags = DELETE_IF_REPLACED)
// Give one of their organs a bit of damage
- var/obj/item/organ/internal/appendix/existing_appendix = dummy.get_organ_slot(ORGAN_SLOT_APPENDIX)
+ var/obj/item/organ/appendix/existing_appendix = dummy.get_organ_slot(ORGAN_SLOT_APPENDIX)
existing_appendix.set_organ_damage(25)
// Changing species should
@@ -36,7 +36,7 @@
// Grab the lizard's appendix for comparison later
// They should've been given a new one, but our damage should also have transferred over
- var/obj/item/organ/internal/appendix/lizard_appendix = dummy.get_organ_slot(ORGAN_SLOT_APPENDIX)
+ var/obj/item/organ/appendix/lizard_appendix = dummy.get_organ_slot(ORGAN_SLOT_APPENDIX)
// They should have the trauma still
TEST_ASSERT(dummy.has_trauma_type(/datum/brain_trauma/severe/blindness), "Dummy, upon changing species, did not carry over their brain trauma!")
diff --git a/code/modules/unit_tests/stomach.dm b/code/modules/unit_tests/stomach.dm
index 782e74788a6ab..5d2b948e82b36 100644
--- a/code/modules/unit_tests/stomach.dm
+++ b/code/modules/unit_tests/stomach.dm
@@ -5,7 +5,7 @@
var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human/consistent)
var/obj/item/food/hotdog/debug/fooditem = allocate(/obj/item/food/hotdog/debug)
- var/obj/item/organ/internal/stomach/belly = human.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/belly = human.get_organ_slot(ORGAN_SLOT_STOMACH)
var/obj/item/reagent_containers/pill/pill = allocate(/obj/item/reagent_containers/pill)
var/datum/reagent/drug/methamphetamine/meth = /datum/reagent/drug/methamphetamine
diff --git a/code/modules/unit_tests/tail_wag.dm b/code/modules/unit_tests/tail_wag.dm
index cd82dfdfd50c9..595e31895210b 100644
--- a/code/modules/unit_tests/tail_wag.dm
+++ b/code/modules/unit_tests/tail_wag.dm
@@ -5,7 +5,7 @@
/datum/unit_test/tail_wag/Run()
var/mob/living/carbon/human/dummy = allocate(/mob/living/carbon/human/consistent)
- var/obj/item/organ/external/tail/cat/dummy_tail = allocate(/obj/item/organ/external/tail/cat)
+ var/obj/item/organ/tail/cat/dummy_tail = allocate(/obj/item/organ/tail/cat)
dummy_tail.Insert(dummy, special = TRUE, movement_flags = DELETE_IF_REPLACED)
// SANITY TEST
diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm
index b8b2b542f1881..a7af7b168e2cb 100644
--- a/code/modules/unit_tests/unit_test.dm
+++ b/code/modules/unit_tests/unit_test.dm
@@ -253,9 +253,8 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests())
/obj/merge_conflict_marker,
//briefcase launchpads erroring
/obj/machinery/launchpad/briefcase,
- //Both are abstract types meant to scream bloody murder if spawned in raw
- /obj/item/organ/external,
- /obj/item/organ/external/wings,
+ //Wings abstract path
+ /obj/item/organ/wings,
//Not meant to spawn without the machine wand
/obj/effect/bug_moving,
)
diff --git a/code/modules/uplink/uplink_items/stealthy_tools.dm b/code/modules/uplink/uplink_items/stealthy_tools.dm
index e3402ec3c728f..000364f27be47 100644
--- a/code/modules/uplink/uplink_items/stealthy_tools.dm
+++ b/code/modules/uplink/uplink_items/stealthy_tools.dm
@@ -19,8 +19,9 @@
/datum/uplink_item/stealthy_tools/ai_detector
name = "Artificial Intelligence Detector"
desc = "A functional multitool that turns red when it detects an artificial intelligence watching it, and can be \
- activated to get an rough estimate of the AI's presence. Knowing when \
- an artificial intelligence is watching you is useful for knowing when to maintain cover."
+ activated to display their exact viewing location. Knowing when \
+ an artificial intelligence is watching you is useful for knowing when to maintain cover, and finding nearby \
+ blind spots can help you identify escape routes."
item = /obj/item/multitool/ai_detect
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
cost = 1
diff --git a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
index bcf6d9a86ae81..e08020a545f62 100644
--- a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
+++ b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm
@@ -185,11 +185,7 @@
target.apply_damage(10, BRUTE, def_zone, blocked)
//blood splatters
- var/splatter_dir = get_dir(chassis, target)
- if(isalien(target))
- new /obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter(target.drop_location(), splatter_dir)
- else
- new /obj/effect/temp_visual/dir_setting/bloodsplatter(target.drop_location(), splatter_dir)
+ target.create_splatter(get_dir(chassis, target))
//organs go everywhere
if(target_part && blocked < 100 && prob(10 * drill_level))
diff --git a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm
index 287c9e3cf0e20..b29c5501a7959 100644
--- a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm
+++ b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm
@@ -211,7 +211,7 @@
to_chat(M, "HONK")
M.SetSleeping(0)
M.adjust_stutter(40 SECONDS)
- var/obj/item/organ/internal/ears/ears = M.get_organ_slot(ORGAN_SLOT_EARS)
+ var/obj/item/organ/ears/ears = M.get_organ_slot(ORGAN_SLOT_EARS)
if(ears)
ears.adjustEarDamage(0, 30)
M.Paralyze(60)
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index 04bac57cb5193..f6efe46680f03 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -241,7 +241,7 @@ GLOBAL_VAR_INIT(roaches_deployed, FALSE)
contraband = list(
/obj/item/clothing/under/costume/mech_suit = 2,
/obj/item/clothing/suit/hooded/techpriest = 2,
- /obj/item/organ/internal/tongue/robot = 2,
+ /obj/item/organ/tongue/robot = 2,
)
refill_canister = /obj/item/vending_refill/wardrobe/robo_wardrobe
extra_price = PAYCHECK_COMMAND * 1.2
diff --git a/code/modules/visuals/render_steps.dm b/code/modules/visuals/render_steps.dm
index e29436596c6e5..e9cfbf3b5562c 100644
--- a/code/modules/visuals/render_steps.dm
+++ b/code/modules/visuals/render_steps.dm
@@ -29,7 +29,7 @@
/atom/movable/render_step/singularity_act()
return
-/atom/movable/render_step/singularity_pull()
+/atom/movable/render_step/singularity_pull(atom/singularity, current_size)
return
/atom/movable/render_step/blob_act()
diff --git a/code/modules/wiremod/components/action/equpiment_action.dm b/code/modules/wiremod/components/action/equpiment_action.dm
index 641722c595b60..f313d1f487064 100644
--- a/code/modules/wiremod/components/action/equpiment_action.dm
+++ b/code/modules/wiremod/components/action/equpiment_action.dm
@@ -1,7 +1,7 @@
/obj/item/circuit_component/equipment_action
display_name = "Equipment Action"
desc = "Represents an action the user can take when using supported shells."
- required_shells = list(/obj/item/organ/internal/cyberimp/bci, /obj/item/mod/module/circuit)
+ required_shells = list(/obj/item/organ/cyberimp/bci, /obj/item/mod/module/circuit)
/// The icon of the button
var/datum/port/input/option/icon_options
diff --git a/code/modules/wiremod/components/atom/remotecam.dm b/code/modules/wiremod/components/atom/remotecam.dm
index d5a8506c5cf04..bbbab6043affc 100644
--- a/code/modules/wiremod/components/atom/remotecam.dm
+++ b/code/modules/wiremod/components/atom/remotecam.dm
@@ -281,7 +281,7 @@
desc = "Digitizes user's sight for surveillance-on-the-go. User must have fully functional eyes for digitizer to work. Camera range input is either 0 (near) or 1 (far). Network field is used for camera network."
category = "BCI"
camera_prefix = "BCI"
- required_shells = list(/obj/item/organ/internal/cyberimp/bci)
+ required_shells = list(/obj/item/organ/cyberimp/bci)
/// BCIs are organs, and thus the signal must be assigned ONLY when the shell has been installed in a mob - otherwise the camera will never update position
camera_signal_move_override = TRUE
@@ -314,13 +314,13 @@
/obj/item/circuit_component/remotecam/bci/register_shell(atom/movable/shell)
. = ..()
- if(!istype(shell_parent, /obj/item/organ/internal/cyberimp/bci))
+ if(!istype(shell_parent, /obj/item/organ/cyberimp/bci))
return
shell_camera = new /obj/machinery/camera (shell_parent)
init_camera()
RegisterSignal(shell_parent, COMSIG_ORGAN_IMPLANTED, PROC_REF(on_organ_implanted))
RegisterSignal(shell_parent, COMSIG_ORGAN_REMOVED, PROC_REF(on_organ_removed))
- var/obj/item/organ/internal/cyberimp/bci/bci = shell_parent
+ var/obj/item/organ/cyberimp/bci/bci = shell_parent
if(bci.owner) //If somehow the camera was added while shell is already installed inside a mob, assign signals
if(bciuser) //This should never happen... But if it does, unassign move signal from old mob
UnregisterSignal(bciuser, COMSIG_MOVABLE_MOVED, PROC_REF(update_camera_location))
@@ -388,7 +388,7 @@
if (current_camera_emp)
close_camera()
return
- var/obj/item/organ/internal/cyberimp/bci/bci = shell_parent
+ var/obj/item/organ/cyberimp/bci/bci = shell_parent
//If shell is not currently inside a head, or user is currently blind, or user is dead
if(!bci.owner || bci.owner.is_blind() || bci.owner.stat >= UNCONSCIOUS)
close_camera()
diff --git a/code/modules/wiremod/components/bci/hud/counter_overlay.dm b/code/modules/wiremod/components/bci/hud/counter_overlay.dm
index a0f83b6f72eff..aaf70826f4bb0 100644
--- a/code/modules/wiremod/components/bci/hud/counter_overlay.dm
+++ b/code/modules/wiremod/components/bci/hud/counter_overlay.dm
@@ -10,7 +10,7 @@
desc = "A component that shows an three digit counter. Requires a BCI shell."
category = "BCI"
- required_shells = list(/obj/item/organ/internal/cyberimp/bci)
+ required_shells = list(/obj/item/organ/cyberimp/bci)
var/datum/port/input/counter_number
@@ -19,7 +19,7 @@
var/datum/port/input/signal_update
- var/obj/item/organ/internal/cyberimp/bci/bci
+ var/obj/item/organ/cyberimp/bci/bci
var/list/numbers = list()
var/datum/weakref/counter_appearance
@@ -32,7 +32,7 @@
image_pixel_y = add_input_port("Y-Axis Shift", PORT_TYPE_NUMBER)
/obj/item/circuit_component/counter_overlay/register_shell(atom/movable/shell)
- if(istype(shell, /obj/item/organ/internal/cyberimp/bci))
+ if(istype(shell, /obj/item/organ/cyberimp/bci))
bci = shell
RegisterSignal(shell, COMSIG_ORGAN_REMOVED, PROC_REF(on_organ_removed))
diff --git a/code/modules/wiremod/components/bci/hud/object_overlay.dm b/code/modules/wiremod/components/bci/hud/object_overlay.dm
index 07e0f76761e55..4f09a4d9fab3b 100644
--- a/code/modules/wiremod/components/bci/hud/object_overlay.dm
+++ b/code/modules/wiremod/components/bci/hud/object_overlay.dm
@@ -12,7 +12,7 @@
desc = "Requires a BCI shell. A component that shows an overlay on top of an object."
category = "BCI"
- required_shells = list(/obj/item/organ/internal/cyberimp/bci)
+ required_shells = list(/obj/item/organ/cyberimp/bci)
var/datum/port/input/option/object_overlay_options
@@ -28,7 +28,7 @@
var/datum/port/input/signal_off
/// Reference to the BCI we're implanted inside
- var/obj/item/organ/internal/cyberimp/bci/bci
+ var/obj/item/organ/cyberimp/bci/bci
/// Assoc list of REF to the target atom to the overlay alt appearance it is using
var/list/active_overlays = list()
@@ -66,7 +66,7 @@
options_map = component_options
/obj/item/circuit_component/object_overlay/register_shell(atom/movable/shell)
- if(istype(shell, /obj/item/organ/internal/cyberimp/bci))
+ if(istype(shell, /obj/item/organ/cyberimp/bci))
bci = shell
RegisterSignal(shell, COMSIG_ORGAN_REMOVED, PROC_REF(on_organ_removed))
diff --git a/code/modules/wiremod/components/bci/hud/target_intercept.dm b/code/modules/wiremod/components/bci/hud/target_intercept.dm
index 2ee37e8ff4f3d..016f677f10e78 100644
--- a/code/modules/wiremod/components/bci/hud/target_intercept.dm
+++ b/code/modules/wiremod/components/bci/hud/target_intercept.dm
@@ -10,11 +10,11 @@
desc = "Requires a BCI shell. When activated, this component will allow user to target an object using their brain and will output the reference to said object."
category = "BCI"
- required_shells = list(/obj/item/organ/internal/cyberimp/bci)
+ required_shells = list(/obj/item/organ/cyberimp/bci)
var/datum/port/output/clicked_atom
- var/obj/item/organ/internal/cyberimp/bci/bci
+ var/obj/item/organ/cyberimp/bci/bci
var/intercept_cooldown = 1 SECONDS
/obj/item/circuit_component/target_intercept/populate_ports()
@@ -23,7 +23,7 @@
clicked_atom = add_output_port("Targeted Object", PORT_TYPE_ATOM)
/obj/item/circuit_component/target_intercept/register_shell(atom/movable/shell)
- if(istype(shell, /obj/item/organ/internal/cyberimp/bci))
+ if(istype(shell, /obj/item/organ/cyberimp/bci))
bci = shell
RegisterSignal(shell, COMSIG_ORGAN_REMOVED, PROC_REF(on_organ_removed))
diff --git a/code/modules/wiremod/components/bci/install_detector.dm b/code/modules/wiremod/components/bci/install_detector.dm
index 0d39e01214e67..123ff9d516294 100644
--- a/code/modules/wiremod/components/bci/install_detector.dm
+++ b/code/modules/wiremod/components/bci/install_detector.dm
@@ -10,13 +10,13 @@
desc = "A component that detects when a BCI is installed or removed from its user."
category = "BCI"
- required_shells = list(/obj/item/organ/internal/cyberimp/bci)
+ required_shells = list(/obj/item/organ/cyberimp/bci)
var/datum/port/output/implanted
var/datum/port/output/removed
var/datum/port/output/current_state
- var/obj/item/organ/internal/cyberimp/bci/bci
+ var/obj/item/organ/cyberimp/bci/bci
/obj/item/circuit_component/install_detector/populate_ports()
. = ..()
@@ -26,7 +26,7 @@
/obj/item/circuit_component/install_detector/register_shell(atom/movable/shell)
. = ..()
- if(istype(shell, /obj/item/organ/internal/cyberimp/bci))
+ if(istype(shell, /obj/item/organ/cyberimp/bci))
bci = shell
RegisterSignal(shell, COMSIG_ORGAN_IMPLANTED, PROC_REF(on_organ_implanted))
RegisterSignal(shell, COMSIG_ORGAN_REMOVED, PROC_REF(on_organ_removed))
diff --git a/code/modules/wiremod/components/bci/reagent_injector.dm b/code/modules/wiremod/components/bci/reagent_injector.dm
index ef9188d7bdc8b..73b685a39dbf8 100644
--- a/code/modules/wiremod/components/bci/reagent_injector.dm
+++ b/code/modules/wiremod/components/bci/reagent_injector.dm
@@ -11,12 +11,12 @@
category = "BCI"
circuit_flags = CIRCUIT_NO_DUPLICATES
- required_shells = list(/obj/item/organ/internal/cyberimp/bci)
+ required_shells = list(/obj/item/organ/cyberimp/bci)
var/datum/port/input/inject
var/datum/port/output/injected
- var/obj/item/organ/internal/cyberimp/bci/bci
+ var/obj/item/organ/cyberimp/bci/bci
/obj/item/circuit_component/reagent_injector/Initialize(mapload)
. = ..()
@@ -41,7 +41,7 @@
/obj/item/circuit_component/reagent_injector/register_shell(atom/movable/shell)
. = ..()
- if(istype(shell, /obj/item/organ/internal/cyberimp/bci))
+ if(istype(shell, /obj/item/organ/cyberimp/bci))
bci = shell
bci.create_reagents(15, OPENCONTAINER)
if(reagents.total_volume)
diff --git a/code/modules/wiremod/components/bci/thought_listener.dm b/code/modules/wiremod/components/bci/thought_listener.dm
index ed6226a4e491f..f76f53b6ba202 100644
--- a/code/modules/wiremod/components/bci/thought_listener.dm
+++ b/code/modules/wiremod/components/bci/thought_listener.dm
@@ -10,7 +10,7 @@
desc = "A component that allows the user to input a string using their mind. Requires a BCI shell."
category = "BCI"
- required_shells = list(/obj/item/organ/internal/cyberimp/bci)
+ required_shells = list(/obj/item/organ/cyberimp/bci)
var/datum/port/input/input_name
var/datum/port/input/input_desc
@@ -20,7 +20,7 @@
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL
- var/obj/item/organ/internal/cyberimp/bci/bci
+ var/obj/item/organ/cyberimp/bci/bci
var/ready = TRUE
/obj/item/circuit_component/thought_listener/populate_ports()
@@ -31,7 +31,7 @@
failure = add_output_port("On Failure", PORT_TYPE_SIGNAL)
/obj/item/circuit_component/thought_listener/register_shell(atom/movable/shell)
- if(istype(shell, /obj/item/organ/internal/cyberimp/bci))
+ if(istype(shell, /obj/item/organ/cyberimp/bci))
bci = shell
/obj/item/circuit_component/thought_listener/unregister_shell(atom/movable/shell)
diff --git a/code/modules/wiremod/components/bci/vox.dm b/code/modules/wiremod/components/bci/vox.dm
index 420140a7fdedb..8749d1b72b667 100644
--- a/code/modules/wiremod/components/bci/vox.dm
+++ b/code/modules/wiremod/components/bci/vox.dm
@@ -10,7 +10,7 @@
desc = "A component that plays a local VOX Announcement for the user. Requires a BCI shell."
category = "BCI"
- required_shells = list(/obj/item/organ/internal/cyberimp/bci)
+ required_shells = list(/obj/item/organ/cyberimp/bci)
var/datum/port/input/option/type_option
var/current_type
@@ -19,7 +19,7 @@
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL
- var/obj/item/organ/internal/cyberimp/bci/bci
+ var/obj/item/organ/cyberimp/bci/bci
/obj/item/circuit_component/vox/populate_options()
type_option = add_option_port("VOX Type", list(PORT_TYPE_LIST(PORT_TYPE_STRING), PORT_TYPE_STRING))
@@ -28,7 +28,7 @@
word_list = add_input_port("Word List", PORT_TYPE_LIST(PORT_TYPE_STRING))
/obj/item/circuit_component/vox/register_shell(atom/movable/shell)
- if(istype(shell, /obj/item/organ/internal/cyberimp/bci))
+ if(istype(shell, /obj/item/organ/cyberimp/bci))
bci = shell
/obj/item/circuit_component/vox/unregister_shell(atom/movable/shell)
diff --git a/code/modules/wiremod/components/utility/nfc_receive.dm b/code/modules/wiremod/components/utility/nfc_receive.dm
new file mode 100644
index 0000000000000..03e8d3ff2e480
--- /dev/null
+++ b/code/modules/wiremod/components/utility/nfc_receive.dm
@@ -0,0 +1,80 @@
+/**
+ * # NFC Receiver Component
+ *
+ * Sends a data package through NFC directly to a shell
+ * if we ever get more shells like BCI's that are nested, keep in mind this may not work correctly unless adjusted
+ */
+
+
+/obj/item/circuit_component/nfc_receive
+ display_name = "NFC Receiver"
+ desc = "Receives data packages through NFC. If Encryption Key is set then only signals with the same Encryption Key will be received."
+ category = "Utility"
+
+ circuit_flags = CIRCUIT_FLAG_OUTPUT_SIGNAL //trigger_output
+
+ /// The list type
+ var/datum/port/input/option/list_options
+
+ /// Data being received
+ var/datum/port/output/data_package
+
+ /// Encryption key
+ var/datum/port/input/enc_key
+
+/obj/item/circuit_component/nfc_receive/populate_options()
+ list_options = add_option_port("List Type", GLOB.wiremod_basic_types)
+
+/obj/item/circuit_component/nfc_receive/populate_ports()
+ data_package = add_output_port("Data Package", PORT_TYPE_LIST(PORT_TYPE_ANY))
+ enc_key = add_input_port("Encryption Key", PORT_TYPE_STRING)
+
+/obj/item/circuit_component/nfc_receive/register_shell(atom/movable/shell)
+ RegisterSignal(shell, COMSIG_CIRCUIT_NFC_DATA_SENT, PROC_REF(nfc_receive))
+ RegisterSignal(shell, COMSIG_ORGAN_IMPLANTED, PROC_REF(on_organ_implanted))
+ RegisterSignal(shell, COMSIG_ORGAN_REMOVED, PROC_REF(on_organ_removed))
+
+/obj/item/circuit_component/nfc_receive/unregister_shell(atom/movable/shell)
+ UnregisterSignal(shell, list(
+ COMSIG_CIRCUIT_NFC_DATA_SENT,
+ COMSIG_ORGAN_IMPLANTED,
+ COMSIG_ORGAN_REMOVED,
+ ))
+
+/obj/item/circuit_component/nfc_receive/proc/on_organ_implanted(datum/source, mob/living/carbon/owner)
+ SIGNAL_HANDLER
+
+ RegisterSignal(owner, COMSIG_CIRCUIT_NFC_DATA_SENT, PROC_REF(nfc_receive))
+
+/obj/item/circuit_component/nfc_receive/proc/on_organ_removed(datum/source, mob/living/carbon/owner)
+ SIGNAL_HANDLER
+
+ UnregisterSignal(owner, COMSIG_CIRCUIT_NFC_DATA_SENT)
+
+
+/obj/item/circuit_component/nfc_receive/pre_input_received(datum/port/input/port)
+ if(port == list_options)
+ var/new_datatype = list_options.value
+ data_package.set_datatype(PORT_TYPE_LIST(new_datatype))
+
+
+/obj/item/circuit_component/nfc_receive/proc/nfc_receive(obj/item/circuit_component/source,obj/sender, list/data)
+ SIGNAL_HANDLER
+
+ if(get_dist(sender,parent) >= 10)
+ return
+
+ if(data["enc_key"] != enc_key.value)
+ return
+
+ var/datum/weakref/ref = data["port"]
+ var/datum/port/input/port = ref?.resolve()
+ if(!port)
+ return
+
+ var/datum/circuit_datatype/datatype_handler = data_package.datatype_handler
+ if(!datatype_handler?.can_receive_from_datatype(port.datatype))
+ return
+
+ data_package.set_output(data["data"])
+ trigger_output.set_output(COMPONENT_SIGNAL)
diff --git a/code/modules/wiremod/components/utility/nfc_send.dm b/code/modules/wiremod/components/utility/nfc_send.dm
new file mode 100644
index 0000000000000..437e6a4b1986e
--- /dev/null
+++ b/code/modules/wiremod/components/utility/nfc_send.dm
@@ -0,0 +1,48 @@
+/**
+ * # NFC Transmitter Component
+ *
+ * Sends a data package through NFC
+ * Only the targeted shell will receive the message
+ */
+
+/obj/item/circuit_component/nfc_send
+ display_name = "NFC Transmitter"
+ desc = "Sends a data package through NTNet. If Encryption Key is set then transmitted data will be only picked up by receivers with the same Encryption Key."
+ category = "Utility"
+
+ circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL
+
+ /// The list type
+ var/datum/port/input/option/list_options
+
+ /// The targeted circuit
+ var/datum/port/input/target
+
+ /// Data being sent
+ var/datum/port/input/data_package
+
+ /// Encryption key
+ var/datum/port/input/enc_key
+
+/obj/item/circuit_component/nfc_send/populate_options()
+ list_options = add_option_port("List Type", GLOB.wiremod_basic_types)
+
+/obj/item/circuit_component/nfc_send/populate_ports()
+ data_package = add_input_port("Data Package", PORT_TYPE_LIST(PORT_TYPE_ANY))
+ enc_key = add_input_port("Encryption Key", PORT_TYPE_STRING)
+ target = add_input_port("Target", PORT_TYPE_ATOM)
+
+/obj/item/circuit_component/nfc_send/should_receive_input(datum/port/input/port)
+ . = ..()
+ if(!.)
+ return FALSE
+
+/obj/item/circuit_component/nfc_send/pre_input_received(datum/port/input/port)
+ if(port == list_options)
+ var/new_datatype = list_options.value
+ data_package.set_datatype(PORT_TYPE_LIST(new_datatype))
+
+/obj/item/circuit_component/nfc_send/input_received(datum/port/input/port)
+ if(isatom(target.value))
+ var/atom/target_enty = target.value
+ SEND_SIGNAL(target_enty, COMSIG_CIRCUIT_NFC_DATA_SENT, parent, list("data" = data_package.value, "enc_key" = enc_key.value, "port" = WEAKREF(data_package)))
diff --git a/code/modules/wiremod/components/utility/nfc_send_literal.dm b/code/modules/wiremod/components/utility/nfc_send_literal.dm
new file mode 100644
index 0000000000000..c56104ebeb0cb
--- /dev/null
+++ b/code/modules/wiremod/components/utility/nfc_send_literal.dm
@@ -0,0 +1,36 @@
+/**
+ * # NFC Transmitter List Literal Component
+ *
+ * Create a list literal and send a data package through NFC
+ *
+ * This file is based off of nfc_sendl.dm
+ * Any changes made to those files should be copied over with discretion
+ */
+/obj/item/circuit_component/list_literal/nfc_send
+ display_name = "NFC Transmitter List Literal"
+ desc = "Creates a list literal data package and sends it through NFC. If Encryption Key is set then transmitted data will be only picked up by receivers with the same Encryption Key."
+ category = "Utility"
+
+ /// Encryption key
+ var/datum/port/input/enc_key
+
+ /// The targeted circuit
+ var/datum/port/input/target
+
+/obj/item/circuit_component/list_literal/nfc_send/populate_ports()
+ . = ..()
+ enc_key = add_input_port("Encryption Key", PORT_TYPE_STRING)
+ target = add_input_port("Target", PORT_TYPE_ATOM)
+
+/obj/item/circuit_component/list_literal/nfc_send/should_receive_input(datum/port/input/port)
+ . = ..()
+ if(!.)
+ return FALSE
+ /// If the server is down, don't use power or attempt to send data
+ return find_functional_ntnet_relay()
+
+/obj/item/circuit_component/list_literal/nfc_send/input_received(datum/port/input/port)
+ . = ..()
+ if(isatom(target.value))
+ var/atom/target_enty = target.value
+ SEND_SIGNAL(target_enty, COMSIG_CIRCUIT_NFC_DATA_SENT, list("data" = list_output.value, "enc_key" = enc_key.value, "port" = WEAKREF(list_output)))
diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm
index e3ddf54135af8..29147aefa9458 100644
--- a/code/modules/wiremod/shell/brain_computer_interface.dm
+++ b/code/modules/wiremod/shell/brain_computer_interface.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/cyberimp/bci
+/obj/item/organ/cyberimp/bci
name = "brain-computer interface"
desc = "An implant that can be placed in a user's head to control circuits using their brain."
icon = 'icons/obj/science/circuits.dmi'
@@ -6,7 +6,7 @@
zone = BODY_ZONE_HEAD
w_class = WEIGHT_CLASS_TINY
-/obj/item/organ/internal/cyberimp/bci/Initialize(mapload)
+/obj/item/organ/cyberimp/bci/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_CIRCUIT_ACTION_COMPONENT_REGISTERED, PROC_REF(action_comp_registered))
@@ -19,7 +19,7 @@
new /obj/item/circuit_component/bci_core,
), SHELL_CAPACITY_SMALL, starting_circuit = circuit)
-/obj/item/organ/internal/cyberimp/bci/say(
+/obj/item/organ/cyberimp/bci/say(
message,
bubble_type,
list/spans = list(),
@@ -43,11 +43,11 @@
return ..()
-/obj/item/organ/internal/cyberimp/bci/proc/action_comp_registered(datum/source, obj/item/circuit_component/equipment_action/action_comp)
+/obj/item/organ/cyberimp/bci/proc/action_comp_registered(datum/source, obj/item/circuit_component/equipment_action/action_comp)
SIGNAL_HANDLER
LAZYADD(actions, new/datum/action/innate/bci_action(src, action_comp))
-/obj/item/organ/internal/cyberimp/bci/proc/action_comp_unregistered(datum/source, obj/item/circuit_component/equipment_action/action_comp)
+/obj/item/organ/cyberimp/bci/proc/action_comp_unregistered(datum/source, obj/item/circuit_component/equipment_action/action_comp)
SIGNAL_HANDLER
var/datum/action/innate/bci_action/action = action_comp.granted_to[REF(src)]
if(!istype(action))
@@ -61,10 +61,10 @@
check_flags = AB_CHECK_CONSCIOUS
button_icon_state = "bci_power"
- var/obj/item/organ/internal/cyberimp/bci/bci
+ var/obj/item/organ/cyberimp/bci/bci
var/obj/item/circuit_component/equipment_action/circuit_component
-/datum/action/innate/bci_action/New(obj/item/organ/internal/cyberimp/bci/_bci, obj/item/circuit_component/equipment_action/circuit_component)
+/datum/action/innate/bci_action/New(obj/item/organ/cyberimp/bci/_bci, obj/item/circuit_component/equipment_action/circuit_component)
..()
bci = _bci
circuit_component.granted_to[REF(_bci)] = src
@@ -95,7 +95,7 @@
var/datum/weakref/user
- var/obj/item/organ/internal/cyberimp/bci/bci
+ var/obj/item/organ/cyberimp/bci/bci
/obj/item/circuit_component/bci_core/populate_ports()
@@ -290,7 +290,7 @@
var/busy_icon_state
var/locked = FALSE
- var/obj/item/organ/internal/cyberimp/bci/bci_to_implant
+ var/obj/item/organ/cyberimp/bci/bci_to_implant
COOLDOWN_DECLARE(message_cooldown)
@@ -365,13 +365,13 @@
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
/obj/machinery/bci_implanter/attackby(obj/item/weapon, mob/user, params)
- var/obj/item/organ/internal/cyberimp/bci/new_bci = weapon
+ var/obj/item/organ/cyberimp/bci/new_bci = weapon
if (istype(new_bci))
if (!(locate(/obj/item/integrated_circuit) in new_bci))
balloon_alert(user, "bci has no circuit!")
return
- var/obj/item/organ/internal/cyberimp/bci/previous_bci_to_implant = bci_to_implant
+ var/obj/item/organ/cyberimp/bci/previous_bci_to_implant = bci_to_implant
user.transferItemToLoc(weapon, src)
bci_to_implant = weapon
@@ -428,7 +428,7 @@
playsound(loc, 'sound/machines/ping.ogg', 30, FALSE)
- var/obj/item/organ/internal/cyberimp/bci/bci_organ = carbon_occupant.get_organ_by_type(/obj/item/organ/internal/cyberimp/bci)
+ var/obj/item/organ/cyberimp/bci/bci_organ = carbon_occupant.get_organ_by_type(/obj/item/organ/cyberimp/bci)
if (bci_organ)
bci_organ.Remove(carbon_occupant)
@@ -460,7 +460,7 @@
var/mob/living/carbon/carbon_occupant = occupant
if (istype(occupant))
- var/obj/item/organ/internal/cyberimp/bci/bci_organ = carbon_occupant.get_organ_by_type(/obj/item/organ/internal/cyberimp/bci)
+ var/obj/item/organ/cyberimp/bci/bci_organ = carbon_occupant.get_organ_by_type(/obj/item/organ/cyberimp/bci)
if (isnull(bci_organ) && isnull(bci_to_implant))
say("No brain-computer interface inserted, and occupant does not have one. Insert a BCI to implant one.")
playsound(src, 'sound/machines/buzz/buzz-sigh.ogg', 30, TRUE)
diff --git a/code/modules/wiremod/shell/shell_items.dm b/code/modules/wiremod/shell/shell_items.dm
index bad787033f967..0db08ab7bb815 100644
--- a/code/modules/wiremod/shell/shell_items.dm
+++ b/code/modules/wiremod/shell/shell_items.dm
@@ -63,7 +63,7 @@
/obj/item/shell/bci
name = "brain-computer interface assembly"
icon_state = "bci-open"
- shell_to_spawn = /obj/item/organ/internal/cyberimp/bci
+ shell_to_spawn = /obj/item/organ/cyberimp/bci
w_class = WEIGHT_CLASS_TINY
/obj/item/shell/scanner_gate
diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm
index 894eeeeeb2183..db7257dc957a4 100644
--- a/code/modules/zombie/items.dm
+++ b/code/modules/zombie/items.dm
@@ -51,7 +51,7 @@
if(limb_armor > limb_damage)
return
- var/obj/item/organ/internal/zombie_infection/infection
+ var/obj/item/organ/zombie_infection/infection
infection = target.get_organ_slot(ORGAN_SLOT_ZOMBIE)
if(!infection)
infection = new()
diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm
index bd8646ccb780d..f6f21b7e1eed1 100644
--- a/code/modules/zombie/organs.dm
+++ b/code/modules/zombie/organs.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/zombie_infection
+/obj/item/organ/zombie_infection
name = "festering ooze"
desc = "A black web of pus and viscera."
zone = BODY_ZONE_HEAD
@@ -13,22 +13,22 @@
var/revive_time_max = 700
var/timer_id
-/obj/item/organ/internal/zombie_infection/Initialize(mapload)
+/obj/item/organ/zombie_infection/Initialize(mapload)
. = ..()
if(iscarbon(loc))
Insert(loc)
GLOB.zombie_infection_list += src
-/obj/item/organ/internal/zombie_infection/Destroy()
+/obj/item/organ/zombie_infection/Destroy()
GLOB.zombie_infection_list -= src
. = ..()
-/obj/item/organ/internal/zombie_infection/on_mob_insert(mob/living/carbon/M, special = FALSE, movement_flags)
+/obj/item/organ/zombie_infection/on_mob_insert(mob/living/carbon/M, special = FALSE, movement_flags)
. = ..()
START_PROCESSING(SSobj, src)
-/obj/item/organ/internal/zombie_infection/on_mob_remove(mob/living/carbon/M, special = FALSE)
+/obj/item/organ/zombie_infection/on_mob_remove(mob/living/carbon/M, special = FALSE)
. = ..()
STOP_PROCESSING(SSobj, src)
if(iszombie(M) && old_species && !special)
@@ -36,25 +36,25 @@
if(timer_id)
deltimer(timer_id)
-/obj/item/organ/internal/zombie_infection/on_mob_insert(mob/living/carbon/organ_owner, special)
+/obj/item/organ/zombie_infection/on_mob_insert(mob/living/carbon/organ_owner, special)
. = ..()
RegisterSignal(organ_owner, COMSIG_LIVING_DEATH, PROC_REF(organ_owner_died))
-/obj/item/organ/internal/zombie_infection/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/zombie_infection/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
UnregisterSignal(organ_owner, COMSIG_LIVING_DEATH)
-/obj/item/organ/internal/zombie_infection/proc/organ_owner_died(mob/living/carbon/source, gibbed)
+/obj/item/organ/zombie_infection/proc/organ_owner_died(mob/living/carbon/source, gibbed)
SIGNAL_HANDLER
if(iszombie(source))
qdel(src) // Congrats you somehow died so hard you stopped being a zombie
-/obj/item/organ/internal/zombie_infection/on_find(mob/living/finder)
+/obj/item/organ/zombie_infection/on_find(mob/living/finder)
to_chat(finder, span_warning("Inside the head is a disgusting black \
web of pus and viscera, bound tightly around the brain like some \
biological harness."))
-/obj/item/organ/internal/zombie_infection/process(seconds_per_tick, times_fired)
+/obj/item/organ/zombie_infection/process(seconds_per_tick, times_fired)
if(!owner)
return
if(!(src in owner.organs))
@@ -65,7 +65,7 @@
owner.adjustToxLoss(0.5 * seconds_per_tick)
if (SPT_PROB(5, seconds_per_tick))
to_chat(owner, span_danger("You feel sick..."))
- if(timer_id || HAS_TRAIT(owner, TRAIT_SUICIDED) || !owner.get_organ_by_type(/obj/item/organ/internal/brain))
+ if(timer_id || HAS_TRAIT(owner, TRAIT_SUICIDED) || !owner.get_organ_by_type(/obj/item/organ/brain))
return
if(owner.stat != DEAD && !converts_living)
return
@@ -77,7 +77,7 @@
var/flags = TIMER_STOPPABLE
timer_id = addtimer(CALLBACK(src, PROC_REF(zombify), owner), revive_time, flags)
-/obj/item/organ/internal/zombie_infection/proc/zombify(mob/living/carbon/target)
+/obj/item/organ/zombie_infection/proc/zombify(mob/living/carbon/target)
timer_id = null
if(!converts_living && owner.stat != DEAD)
@@ -99,5 +99,5 @@
target.do_jitter_animation(living_transformation_time)
target.Stun(living_transformation_time)
-/obj/item/organ/internal/zombie_infection/nodamage
+/obj/item/organ/zombie_infection/nodamage
causes_damage = FALSE
diff --git a/html/changelogs/AutoChangeLog-pr-87229.yml b/html/changelogs/AutoChangeLog-pr-87229.yml
new file mode 100644
index 0000000000000..11507048a6643
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-87229.yml
@@ -0,0 +1,5 @@
+author: "carpotoxin"
+delete-after: True
+changes:
+ - rscadd: " Adds flat boxes, which are simple cardboard boxes that can be hidden beneath tiles"
+ - code_imp: "Undertile element has a new variable which can tilt a tile if something is beneath it"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-87350.yml b/html/changelogs/AutoChangeLog-pr-87350.yml
new file mode 100644
index 0000000000000..8ace807cfd20a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-87350.yml
@@ -0,0 +1,6 @@
+author: "zxaber"
+delete-after: True
+changes:
+ - rscdel: "SiliConnect, a tool meant for Roboticists, is no longer included by default on borgs."
+ - rscadd: "RoboTact, the borg self-status app, now shows the status of other borgs synced to the same AI. Syndicate borgs can likewise see eachother's status, even without an AI."
+ - balance: "RoboTact also shows their synced AI's very basic status of functional or offline."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-87471.yml b/html/changelogs/AutoChangeLog-pr-87471.yml
new file mode 100644
index 0000000000000..53e5c03718449
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-87471.yml
@@ -0,0 +1,4 @@
+author: "carlarctg"
+delete-after: True
+changes:
+ - qol: "mining resonator clips to belt slot"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-87498.yml b/html/changelogs/AutoChangeLog-pr-87498.yml
new file mode 100644
index 0000000000000..3fc45d5cb4bed
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-87498.yml
@@ -0,0 +1,5 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixing transparency for materials, especially glass walls and their unwanted opacity."
+ - bugfix: "Custom material walls are no longer so dark."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-87529.yml b/html/changelogs/AutoChangeLog-pr-87529.yml
new file mode 100644
index 0000000000000..5e19d742365f8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-87529.yml
@@ -0,0 +1,4 @@
+author: "grungussuss"
+delete-after: True
+changes:
+ - sound: "the volume that ship ambience, ambience, radio noise and announcements play at can now be tweaked in preferences, check your preferences!"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-87671.yml b/html/changelogs/AutoChangeLog-pr-87671.yml
new file mode 100644
index 0000000000000..6a9770a9bed97
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-87671.yml
@@ -0,0 +1,4 @@
+author: "Jewelry-x"
+delete-after: True
+changes:
+ - bugfix: "fixed a rare runtime with lost crew having no organs"
\ No newline at end of file
diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml
index 8159b52dec0fb..98288b92f991f 100644
--- a/html/changelogs/archive/2024-10.yml
+++ b/html/changelogs/archive/2024-10.yml
@@ -558,3 +558,363 @@
- rscadd: Medical eyepatches have been added to loadout
timothymtorres:
- qol: Add screentips to envirosuit helmets
+2024-10-21:
+ 00-Steven:
+ - bugfix: Message upon examining an already dissected corpse now uses their pronouns
+ and not yours.
+ Absolucy:
+ - refactor: Refactored how some screen alerts, such as aura healing, show atom overlays.
+ - rscadd: PDA ringtones now show a balloon alert to the PDA holder.
+ Ben10Omintrix:
+ - balance: green raptors now refuse to mine mineral walls containing active gibtonite
+ GremlinSeeker:
+ - bugfix: fixed active turfs on two icemoon ruins.
+ Hatterhat:
+ - spellcheck: 'Chemical analysis now offers Root Beer the respect it deserves (read:
+ Root Beer is now capitalized like every other reagent).'
+ JackEnoff:
+ - map: Birdshot's Emitter Room should no longer be disconnected from the grid at
+ shiftstart.
+ Sealed101:
+ - spellcheck: fixed a typo in examining a bleeding wound on a corpse
+ - map: Wawastation xenobio now has two droppers
+ SmArtKar:
+ - rscadd: TTS pitch now affects emote sounds
+ - bugfix: Ghost polling/events no longer runtime or freak out when nobody signs
+ up for them
+ - bugfix: Tape recorders no longer deceptively claim to have wires or a wire panel
+ in order to lure in unsuspecting assistants
+ Y0SH1M4S73R:
+ - qol: All forms of jean shorts now count for eating the death sandwich right
+ carlarctg:
+ - config: Added a policy message and associated config i think to when a heretic
+ is soultrapped, allowing headmins to decide how they're allowed to act.
+ - rscadd: Haunted longswords can be, and start, binded. Binded swords are weaker
+ than usual, being basically just talking cultist longswords. You can, however,
+ unbind them, which will heavily buff their stats, unlock their powers, allow
+ you use of a heretic's path spell, and let them attempt to fling around and
+ cast spells. (it's a 4-tap on melee when bound, 3-tap if unbound)
+ - rscadd: Reduced its throwing damage, turning it from a 3-hit-crit to a 4-hit-crit.
+ - rscadd: void haunted swords have void prison instead of void chill
+ - code_imp: Added type_english_list() which recieves a list of types and returns
+ 'an x, a y, and a z' strings.
+ - code_imp: Golem boulder breaking trait moved from species to limbs
+ grungussuss and gpeckman:
+ - sound: the sound folder has been optimized to take up less space
+ necromanceranne:
+ - code_imp: Nullblades and proto-kinetic crushers use the new proc for checking
+ valid directions to backstab.
+ - rscadd: Mending touch now has additional effects based on whether or not the target
+ or user is evil, an undead or an empath. Don't use mending touch on evil people
+ or undead, or they might go up in flames. Though evil people can get back at
+ empaths specifically and heal udnead as normal.
+ - rscadd: Chaplains engulf people using mending touch's harmful reactions to diametrically
+ opposed entities especially well. Because of religious zeal, of course.
+ - rscadd: Empath chaplains ignore the fear consequences of examining an evil person.
+ They instead get additional information about what to do to these people if
+ the need arises.
+ the-orange-cow:
+ - bugfix: revs once again pass out upon deconversion
+2024-10-22:
+ 00-Steven:
+ - bugfix: Getting a fish tail, cat ears, or a cat tail as any of the slime species
+ no longer runtimes.
+ Ghommie:
+ - balance: Speed potions now cancel drag slowdown too.
+ - balance: Speed potions can be used on fish past 2000 units of weight.
+ - bugfix: You can now speed up cardboard boxes with speed potions.
+ Sealed101:
+ - bugfix: fixed bolt of possession incorrectly setting up the previous owner of
+ the victim's body, resulting in a fucked-up camera mob with no icon or movement
+ capability
+ SmArtKar:
+ - bugfix: Fixed a typo in ooze eating code
+ - rscadd: Jammers can now disable players' radio microphones via a new secondary
+ ability, both for handhelds and headsets
+ SuperDrish:
+ - bugfix: Condenser now simulates turf air after its activation
+ carlarctg:
+ - spellcheck: Grammar fixes for produce-based armaments
+ - spellcheck: bo staves are very punny
+2024-10-23:
+ 00-Steven:
+ - spellcheck: Fish fry tastes like "pan-seared vegetables" instead of "pan seared
+ vegtables".
+ - spellcheck: Fish liver is now "permeated" by the smell of "putrefied" fish, instead
+ of "parmated" and "putrified".
+ - spellcheck: Salmon fillet description is now capitalized.
+ - spellcheck: Carp sashimi mentions "surviving an attack" instead of "surviving
+ attack".
+ Hatterhat:
+ - qol: 'Nanotrasen employees have been given a quick primer on how specialized fauna
+ organs (brimdust sacs, rush glands, regenerative cores) look in varying states
+ of decay corresponding to lifespan (read: you can now examine monster organs
+ to get a vague idea of how long they have left before decaying and becoming
+ useless).'
+ Iamgoofball:
+ - spellcheck: Adjusts the No ERP poster description to be more subtle and reference
+ the lore.
+ Sealed101:
+ - spellcheck: fixed donk-rolls and meat pockets having illegal coderspeak in their
+ name
+2024-10-24:
+ 00-Steven:
+ - rscadd: Organs can now define their own tastes or food types.
+ - rscadd: Fish tails can now be filleted into quality ingredient fish tail fish
+ fillets, and have a fitting amount of food reagents on the whole.
+ - balance: Fish organs are now counted as seafood, and have specific tastes set.
+ Absolucy:
+ - bugfix: Fixed a potential rare source of strange behavior resulting from an admin
+ manually restarting the MC.
+ Absolucy, Kapu:
+ - bugfix: Fix overlay lighting (such as lanterns) messing up alert overlays, i.e
+ the rod of asclepius alert.
+ Ben10Omintrix:
+ - bugfix: fixes paraplegics appearing horizontal when riding animals
+ - bugfix: fixes ore vents being tapped despite their drones dying
+ DaCoolBoss:
+ - balance: '[Haunted Trading Post] Explosive trap in Employee''s Lounge is now less
+ sensitive.'
+ - balance: '[Haunted Trading Post] Shock traps will no longer be triggered by Syndicate
+ mobs.'
+ - bugfix: Dedbots now properly spawn post-death visual effects.
+ - bugfix: '[Lizard''s Gas (Lavaland)] Atmos outside the gas station has been tweaked,
+ for realism.'
+ - bugfix: '[MI13 Food Truck] Minor visual fixes.'
+ Ghommie:
+ - image: resprited fish tails from fish infusion.
+ Hoolny:
+ - bugfix: fixes material tiles having no inhand sprites
+ Jewelry-x:
+ - bugfix: fixed an exception with firing a flamethrower without a tank
+ Profakos:
+ - bugfix: ' Monkfish no longer flash rapidly, while inside an aquarium'
+ - bugfix: Benches no longer produce an Error overlay when buckled
+ Sealed101:
+ - bugfix: blob zombies inherit the blob spore's faction now, which means gold extract-spawned
+ passive blob spores won't make aggressive blob zombies
+ SmArtKar:
+ - rscdel: Removed big manipulator's use mode
+ - bugfix: Fixed invisible potted plants
+ - bugfix: Big manipulators can no longer pick up anchored, abstract or nodrop/dropdel
+ objects
+ - bugfix: Fixed embedded items not reacting to explosions
+ - refactor: Refactored hat stabilizers into a component shared with plasmaman helmets
+ - bugfix: Moving along lattices in space with a jetpack on no longer causes your
+ screen to jerk
+ zxaber:
+ - balance: Borgs and AIs can now access dropped PDAs. The Messenger app does not
+ work over a remote connection, however.
+2024-10-25:
+ Absolucy:
+ - rscadd: Added a separate preference for hearing vocal AI announcements (also known
+ as VOX), as opposed to lumping it into the "Enable announcement sounds" preference.
+ - refactor: Refactored some text helper procs to use BYOND's native text trimming
+ proc.
+ - admin: Added a _trimtext proc, for use with SDQL2 or Lua scripting.
+ Ben10Omintrix:
+ - rscadd: penguins will now fish from water holes
+ - bugfix: fixes ai controllers resetting their targets post do_afters
+ - bugfix: stationary medbots no longer search for patrol beacons
+ Cruix:
+ - rscadd: Hardhats now squish down excessively tall hairstyles while being worn.
+ DaCoolBoss:
+ - bugfix: Donk-Rolls no longer turn into Deluxe Donk Pockets when microwaved.
+ DaydreamIQ:
+ - map: Moved Birdshot's drone dispenser closer to robotics
+ Fikou:
+ - bugfix: bouncy castles no longer render under the gibs they spawn
+ - qol: suit storage units can hold backpacks in the modsuit slot
+ - bugfix: teleport turrets are no longer magical and will not be stopped by antimagic
+ JackEnoff:
+ - bugfix: MetaStation's Cargo Security Outpost is no longer free to access by anyone.
+ Profakos:
+ - rscadd: Adds a roboticist spraycan, and adds one of them to robotics on every
+ map
+ - qol: adds a screentip to spraycans that tells you that it can restyle robotic
+ limbs
+ - bugfix: fixes peg legs bringing up the augment restyle menu
+ - bugfix: if an outfit puts a reagent container in the preview dummy's hand, it
+ will not try to slosh
+ - code_imp: outfits putting items in your hand will respect the visual_only argument
+ Sealed101:
+ - bugfix: fixed akimbo firing automatic guns runtiming on the offhand gun when it's
+ empty, possibly causing dry fire clicks to not play
+ - bugfix: fixed nuclear devices not showing the overlays for deconstruction states
+ and lights for arming state properly
+ - qol: more examine feedback for nuclear devices (deconstruction/arming state)
+ SmArtKar:
+ - rscadd: You can now lean on windows the same way you can lean on walls
+ - bugfix: You no longer stop leaning on walls after clicking on anything
+ - bugfix: Rustle component no longer counts diagonal steps as two moves
+ - qol: Improved descriptions on size tooltips to explain where the item can be stored
+ - qol: Made scanner gate scanlines mouse transparent
+ - bugfix: Scanner gate scanlines no longer appear only after someone walks through
+ them and are disabled when the gate is unpowered
+ - sound: Removed MOD chestplate and glove equip/drop sounds
+ SyncIt21:
+ - refactor: cleaned up how drone holds their tools from the toolbox. report bugs
+ on github
+ carlarctg:
+ - bugfix: Silver extract food now transfers its slime trait to any processed slices
+ grungussuss:
+ - sound: 'reduced volume of: lightningbolt, lightningshock, lightning_chargeup sounds'
+ - qol: getting cocooned gives a better warning
+ - sound: ambience no longer gets cut off for ghosts
+ - sound: radio noise will no longer be heard in hard crit
+ - sound: AI controlled mobs will no longer make sounds that ignore walls
+ larentoun:
+ - rscadd: Evidence Bag is now considered a storage container with 1 slot. Allows
+ to use all features storage has, such as drag-and-drop the bag onto a table.
+ - rscadd: Using Evidence Bag in hand now drops the item on the ground instead of
+ putting it in your hands. Don't mess with the evidence!
+ - qol: Detective's scanner can now scan items on your person. You can now pick up
+ an evidence bag, open it like any other container, and scan the item inside
+ without removing it
+ mc-oofert:
+ - balance: you no longer need all parts deployed to activate a modsuit, you can
+ use them limbless
+ necromanceranne:
+ - bugfix: Nanite projectiles respect a targets immunity to any temperature effects
+ that the bullet might look for (cold immune targets against inferno bullets/heat
+ immune targets against cold bullets)
+ zxaber:
+ - rscadd: Borgs now get the job title of someone sending them a message through
+ SiliConnect.
+2024-10-26:
+ Ghommie:
+ - bugfix: Fixed a small botherance with special fish infusions. You no longer need
+ to infuse squids and pufferfish last to reap their special organs.
+ Melbert:
+ - rscadd: Drinking any ethanol (beer, wine, etc) will trigger alcohol allergies
+ - rscadd: Drinking ants will trigger Bug allergies
+ - rscadd: Getting stung by a bee, or bitten by a (giant) ant or (giant) spider,
+ will trigger bug allergies
+ - rscadd: Drinking plain sugar or caramel will trigger sugar allergies
+ - qol: Ethanol can speed up the surgeries of any mob type applied to, rather than
+ solely humans.
+ MelokGleb and KREKS:
+ - rscadd: very hard wiz-only sm sword craft
+ WebcomicArtist:
+ - bugfix: Un-breaks etherial apc charging and charge from ethereal wine.
+ carlarctg:
+ - bugfix: Hitting an SM with extraction tongs won't dust them anymore
+ grungussuss:
+ - bugfix: fixed plastic flaps losing atmos qualities when anchored
+ - sound: radio noise will no longer play on the common channel
+ necromanceranne:
+ - balance: Shock touch is now less-than-lethal, dealing a decent amount of stamina
+ damage at the cost of lethal damage. Lower cooldown. Power chromosome makes
+ it force a stagger rather than cause a chain lightning effect (this used to
+ do like only 5 damage so...)
+2024-10-27:
+ Absolucy:
+ - rscadd: GPSes now show the general direction of cross-linked z-levels.
+ CliffracerX:
+ - config: altered coded defaults for human authority, no impact on TG
+ Jewelry-x:
+ - admin: make sparks optional when sending a supply pod
+ KazooBard:
+ - balance: Knock path's grasp now stuns the previous mech occupant when ejecting
+ them and unlocks BOTH the ID and DNA lock, allowing the heretic to freely board
+ the vehicle.
+ SmArtKar:
+ - bugfix: Fixed hat stabilizer component not cancelling the attack chain
+ Time-Green, 00-Steven:
+ - rscadd: 'Adds Lost Crew as an orderable cargo package by medical! Fix and revive
+ them to bring new players back into the game and make some money for medical!
+
+ admin:'
+ Vekter:
+ - bugfix: Changed the color of entertainment radio to be darker
+ carlarctg:
+ - bugfix: spray-on insulated gloves are chunky once more. does not affect regular
+ ones
+ - rscadd: Modernizes polymorph types by adding mob types that never entered the
+ wabbajack list.
+ - balance: Updated a few species' changesource flags
+ grungussuss:
+ - qol: you can now turn off the volume on an entertainment monitor
+ - sound: fan loop sounds have been improved
+ grungussuss and redemptionarc:
+ - sound: sigh sounds have been improved
+ tontyGH:
+ - bugfix: pointing at stuff on-top of plates, griddles, stoves and ovens will point
+ at the plate and no longer just do nothing
+2024-10-28:
+ DATA-xPUNGED:
+ - bugfix: The parrot from the Corsair Cove will no longer be immediatelly shanked
+ by the pirates upon loading of the domain.
+ Pepsilawn:
+ - bugfix: You will now receive the advertised amount of credits for selling spacecash
+ bills through cargo
+ SmArtKar:
+ - bugfix: Fixed deathsquad commandos not getting their berets
+ - bugfix: Changelings no longer have a soul when examined if their brain is missing
+ - bugfix: MODules don't create visual overlays when their required part isn't deployed
+ Time-Green:
+ - bugfix: Randomly generated female bodies/humans no longer have a 50% to get a
+ male name
+ carlarctg:
+ - rscadd: adds big pointer to chipped quirk
+ grungussuss:
+ - bugfix: signers can sign past muzzles
+ - sound: bags now have handling and equip sounds
+ - sound: shoes have handling and equip sounds
+ - bugfix: it is now possible to succumb without speaking
+ necromanceranne:
+ - bugfix: Fixes a runtime when trying to remove someones scarred eyes. Now you can
+ remove them!
+2024-10-29:
+ Aliceee2ch:
+ - qol: replaced old engineer borg "tile stacker" on crippled RTD
+ Fikou:
+ - rscadd: The Bridge Assistant's no item wielding disability was replaced with a
+ duty-sworn axe protection brain trauma.
+ - balance: you need something spaceproof to cover your legs (or feet) and arms (or
+ hands) to be spaceproof, not only head and chest
+ - balance: magboots and atmos gloves now have pressure protection
+ Ghommie:
+ - bugfix: Throw impact sounds won't play if the item has been caught.
+ Jackal-boop:
+ - bugfix: fixes the toy larva hugger getting shredded
+ r3dj4ck0424:
+ - bugfix: certain office chairs are now properly labelled
+2024-10-30:
+ JackEnoff:
+ - spellcheck: spellchecks "maintainance glass airlock"
+ SmArtKar:
+ - bugfix: Fixed harddels caused by certain projectiles
+ - code_imp: Magazines now lazyload their contents in order to save on gun init times.
+ Please report any broken/non-functional guns!
+ - qol: Detailed examine descriptions are prettier now.
+ carlarctg:
+ - bugfix: The Traps won't spawn traps on walls anymore
+2024-10-31:
+ Ben10Omintrix:
+ - bugfix: penguins now correctly hunt for food
+ Ghommie:
+ - code_imp: Removed internal/external pathing from organs in favor of a bit flag.
+ Hopefully this shouldn't break anything about organs.
+ - bugfix: Fixed invisible fox ears.
+ - bugfix: Fixed mushpeople caps not being colored red by default.
+ - rscadd: You can now dye most tails, podpeople hair, mushpeople caps etc. with
+ a hair dye spray.
+ OrionTheFox:
+ - qol: added fail feedback to xenobio Regenerative Metal/Bluespace Extracts
+ - bugfix: fixed Regenerative Metal Extract not checking for mob size when moving
+ them into the spawned closet
+ Sealed101:
+ - bugfix: fixed APC control console found in CE office only accessing APCs on its
+ z-level
+ - bugfix: fixed restoring an emagged APC control console potentially leaving the
+ console in a forever state of restoring
+ SmArtKar:
+ - bugfix: Fixed green raptor corpses being able to mine rocks
+ larentoun:
+ - bugfix: 'Bitrunning: falling into chasms and other ways of destroying your virtual
+ body instead of killing it, WILL now return you to your body'
+ necromanceranne:
+ - code_imp: Introduces a INHALE method for reagent transfer. Cigarettes and smoke
+ reactions use this new method.
+ - balance: Nitrous oxide now brain damage if you inhale it. So don't do that.
diff --git a/html/changelogs/archive/2024-11.yml b/html/changelogs/archive/2024-11.yml
new file mode 100644
index 0000000000000..fe3fb543b0793
--- /dev/null
+++ b/html/changelogs/archive/2024-11.yml
@@ -0,0 +1,180 @@
+2024-11-01:
+ 00-Steven:
+ - bugfix: NTNRC "rename channel" button is now grayed out when unusable.
+ - bugfix: Genetics console "create advanced injector" button is now grayed out when
+ unusable.
+ Fikou:
+ - bugfix: fixes some issues with separate modsuit part activation
+ - bugfix: rad protection, miner and stealth modsuit modules require the full suit
+ out
+ - bugfix: armor booster now applies slowdown removal per part instead of to the
+ control unit
+ SmArtKar:
+ - bugfix: Fixed some guns runtiming when attempting to reload
+ - bugfix: Fixed HTML injections via pet tricks
+ TealSeer:
+ - bugfix: The gene recipes for cindikinesis and pyrokinesis should now work properly.
+ TheVekter:
+ - bugfix: Clarifies mayhem-in-a-bottle's effects and makes the text much, much more
+ obvious.
+ carlarctg:
+ - image: adds some placeholder and not sprites for various fish sources
+ - code_imp: added debug portal with all fish locations
+ - qol: Modsuit actions no longer go on cooldown when selected
+ - balance: microwave beam module is on a 4s cooldown not 10s
+2024-11-02:
+ 00-Steven:
+ - bugfix: NTNRC muting actually works again.
+ 13spacemen:
+ - bugfix: alert polls work past roundend
+ Aliceee2ch:
+ - bugfix: you can now place material iron tiles in space like regular iron tiles
+ - rscadd: Added new botany module in mechfabricator designs. Gives service cyborg
+ plant bag and plant analyzer.
+ - rscadd: Added cyborg botanical omni-tool.
+ - qol: 'Service apparatus (another existing module) can now hold: seeds, fish, grafts.'
+ - qol: Secondary beaker storage can now hold any beakers. It used to spawn with
+ one, but when you dropped it - you could no longer pick it back.
+ - image: New gardener skin for service cyborg.
+ Ben10Omintrix:
+ - bugfix: monkeys can now pick up and eat nearby food
+ Jewelry-x:
+ - code_imp: removed two one letter variables
+ - admin: clearing the pod bay will not remove the light emitters.
+ - admin: doing a latejoin injection no longer causes a midround one as well
+ Sealed101:
+ - bugfix: fixed pure inacusiate not giving you ungarbled whisper hearing at full
+ range
+ - qol: pure inacusiate will also provide chat messages when its boost is gained/lost
+ - bugfix: the Derelict vault doors are once again unhackable
+ - qol: the Derelict vault doors provide chat feedback when you try to hack them
+ so you can stop poking them with your tools
+ - bugfix: fixed Make Cyborg admin verb and player panel Make AI not putting the
+ ghosted player in control if they weren't an observer
+ - bugfix: sanity dropping below zero should now properly slowly recover back to
+ zero instead of dropping even further
+ SmArtKar:
+ - bugfix: Fixed pressure-proof clothing not preventing plasmamen self-combustion
+ SyncIt21:
+ - bugfix: HPLC can purify inverted chems.
+ carlarctg:
+ - qol: syndicate (and all) climbing hooks are small-sized
+ - code_imp: acetone oxide is blue!!!
+ - bugfix: Fixed being unable to aghost while corpselocked
+ - refactor: Actions will no longer by default apply a melee cooldown equal to action
+ cooldown.
+ - bugfix: Fixed various abilities causing melee jank, most noticeably venus man
+ eaters
+ mc-oofert:
+ - bugfix: fixes cyborg apc frame attachment
+2024-11-03:
+ 00-Steven:
+ - bugfix: NTNRC channel user list is sorted by status again. It goes operator>online>away>offline.
+ - qol: NTNRC channel user list is now alphabetically sorted under its status subcategories.
+ - refactor: Refactored tasting code. Please report any jank tasting behaviours.
+ - bugfix: You taste what you eat instead of the contents of your own stomach.
+ - bugfix: Other basic nutriment subtypes also carry food flavours, instead of outweighing
+ the food flavours with their lack of flavour.
+ - bugfix: Basic nutriment subtypes have a flavour they default to, in case of not
+ carrying any food flavours.
+ - bugfix: Oils taste like oil instead of tasting indescribable.
+ - bugfix: Clothing eaten by moths actually carries its flavours instead of tasting
+ indescribable.
+ - bugfix: Organs use organ tissue instead of nutriment.
+ - bugfix: You can actually taste organ tissue.
+ - qol: Mineral slurry tastes like minerals instead of tasting indescribable.
+ - bugfix: Tasted flavours can actually be "strong" in addition to mild or "a hint
+ of", as intended.
+ - qol: Flavours are only strong when their percentage of what you're tasting is
+ more than 4x taste sensitivity instead of 3x, for most default tongues being
+ 60% and lizards 40% of the drink.
+ - qol: Tasted flavours are sorted by strength, stronger flavours coming first.
+ - qol: Tasted flavours are grouped into "strong", "mild", and "hint" in the message,
+ replacing "You can taste a hint of bitterness, alcohol, a hint of sweetness,
+ and a hint of cola" with "You can taste alcohol and a hint of bitterness, sweetness,
+ and cola".
+ - bugfix: NT Software Hub no longer displays >100% completion on downloads sometimes.
+ - bugfix: NT Software Hub no longer displays NaN% or Infinite% completion on files
+ with a size of 0 sometimes.
+ Absolucy:
+ - bugfix: Moon heretic ascension now properly turns 20% of the crew into lunatics,
+ rather than ALL ELIGIBLE CREW.
+ Autisem:
+ - rscadd: A new cirucit component allows NFC communications
+ Melbert:
+ - rscadd: Eyecharts to Medbay
+ Sealed101:
+ - bugfix: fixed a runtime when spawning in a kiltborg
+ - bugfix: fixed spawned-in borgs with a pre-selected model not having their correct
+ model select icon
+ - image: KILTBORGS ONCE AGAIN HAVE THEIR OWN MODEL SELECT ICON!!!!!!!
+ - bugfix: fixed active turfs on The Derelict
+ SmArtKar:
+ - bugfix: Fixed Keykeeper's Burden being usable on centcom/away z levels
+ SyncIt21:
+ - code_imp: Improved code for RTD
+ - bugfix: HPLC computes lower & upper mass ranges & ETA for reagents correctly
+ - bugfix: gas analyzer won't scan the floor when placing it on a table
+ - bugfix: gas analyzer won't scan storage items when placing it inside them
+ Time-Green:
+ - bugfix: Fixes sec and command coms not working correctly
+ - rscadd: Added more causes of death to recovered crew
+ - rscadd: Added double death causes to recovered crew, and even meaner space vultures!
+ - rscadd: Adds a small chance to roll quirks on recovered crew
+ - rscadd: Adds a small chance to spawn as a podperson to recovered crew
+ - bugfix: Fixes a harddel caused by quirks never being cleared on delete
+ Vekter:
+ - bugfix: Fixed the maintenance area in the upstairs cargo bay of Wawastation not
+ being flagged as maintenance.
+ Xackii:
+ - qol: Purchased perks now shown in hud.
+ - bugfix: Perks purchased by a wizard now shown in roundend report.
+ Zytolg:
+ - map: Additional signage to help spacefolk navigate Birdshot Station
+ carlarctg:
+ - code_imp: Moved the reagent deletion signal below updating the total volume of
+ containers. If any bugs seem related please report them!
+ - bugfix: BVAK injectors have their middleground icon state once more
+ grungussuss:
+ - sound: emote pitch shifting has been fixed
+ - sound: bike horn sound volume has been reduced
+ - bugfix: drones can no longer speak pirate if they have a pirate hat on
+ - sound: radio noise will now vary in pitch
+ larentoun:
+ - refactor: Species detection on scanner gate has been updated from hardcoded list
+ to a variable. You can VarEdit using species' id
+ mc-oofert:
+ - bugfix: brings back the AI detector HUD that was silently removed by a PR 3 years
+ ago, use inhand to toggle hud or use RMB to see static temporarily
+ - qol: manufacturing assembling machines instead craft using the resources on top
+ of them, they are no longer block movement and have new sprites
+ r3dj4ck0424:
+ - bugfix: Retooled kinetic crushers now have proper sprites for when they're on
+ your back or in your suit storage.
+ tontyGH:
+ - bugfix: thermal insulation tags are correctly formatted if they're only cold or
+ hot insulated
+2024-11-04:
+ Ghommie:
+ - balance: Some fish should be ever so slightly less rare to get from non-specific
+ fish cases.
+ - bugfix: Armorfish should now taste like prawn.
+ - bugfix: You won't get wet while floating or flying on water. Otherwise, water
+ will keep you wet even if you stay still.
+ - rscadd: Autolathes can now print fishing rods of different materials, which can
+ increase or decrease fishing difficulty, casting range, and experience gained,
+ and can have other interesting effects.
+ SmArtKar:
+ - code_imp: Cleaned up projectile and projectile-adjacent code.
+ - bugfix: Fixed a couple of projectile runtimes and visuals/sound-related issues
+ SyncIt21:
+ - bugfix: some broken borg omni tools should work again
+ Time-Green:
+ - bugfix: Fixes voidwalker having an instant kidnap
+ grungussuss:
+ - sound: The lobby menu now click sounds.
+ junkgle01:
+ - image: resprited a few hairstyles
+ timothymtorres:
+ - bugfix: Glass floors can now be crowbarred.
+ - code_imp: Removed deprecated crowbar code for tiles
diff --git a/icons/area/areas_ruins.dmi b/icons/area/areas_ruins.dmi
index 2b25401250b20..7a559ee6cf6c5 100644
Binary files a/icons/area/areas_ruins.dmi and b/icons/area/areas_ruins.dmi differ
diff --git a/icons/hud/perks.dmi b/icons/hud/perks.dmi
new file mode 100644
index 0000000000000..1d40c2e2fb01b
Binary files /dev/null and b/icons/hud/perks.dmi differ
diff --git a/icons/hud/screen_cyborg.dmi b/icons/hud/screen_cyborg.dmi
index 2c737ea115f3a..d9ed854db1241 100644
Binary files a/icons/hud/screen_cyborg.dmi and b/icons/hud/screen_cyborg.dmi differ
diff --git a/icons/mob/actions/actions_cult.dmi b/icons/mob/actions/actions_cult.dmi
index 7725ae691b4c6..0ab54ffa2b169 100644
Binary files a/icons/mob/actions/actions_cult.dmi and b/icons/mob/actions/actions_cult.dmi differ
diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi
index 5bcaa41f5ed58..a67830ac5e917 100644
Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ
diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi
index 4a6cc7ac5c9dd..62cc25aaf33ad 100644
Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ
diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi
index 7410e2db20b37..01cf7b38913f5 100644
Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ
diff --git a/icons/mob/clothing/modsuit/mod_clothing.dmi b/icons/mob/clothing/modsuit/mod_clothing.dmi
index aa9b6feca11af..815983f7094e6 100644
Binary files a/icons/mob/clothing/modsuit/mod_clothing.dmi and b/icons/mob/clothing/modsuit/mod_clothing.dmi differ
diff --git a/icons/mob/clothing/modsuit/mod_modules.dmi b/icons/mob/clothing/modsuit/mod_modules.dmi
index 5c433defa0755..3c68a87d5491d 100644
Binary files a/icons/mob/clothing/modsuit/mod_modules.dmi and b/icons/mob/clothing/modsuit/mod_modules.dmi differ
diff --git a/icons/mob/huds/antag_hud.dmi b/icons/mob/huds/antag_hud.dmi
index 2a916d01d9553..bb85cdd0cce6e 100644
Binary files a/icons/mob/huds/antag_hud.dmi and b/icons/mob/huds/antag_hud.dmi differ
diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi
index 3739113f824ae..53dd33a4544f6 100644
Binary files a/icons/mob/huds/hud.dmi and b/icons/mob/huds/hud.dmi differ
diff --git a/icons/mob/human/fish_features.dmi b/icons/mob/human/fish_features.dmi
index 185b89d88fc1d..3a2906c68bb19 100644
Binary files a/icons/mob/human/fish_features.dmi and b/icons/mob/human/fish_features.dmi differ
diff --git a/icons/mob/human/hair_masks.dmi b/icons/mob/human/hair_masks.dmi
new file mode 100644
index 0000000000000..45ecb761d9a54
Binary files /dev/null and b/icons/mob/human/hair_masks.dmi differ
diff --git a/icons/mob/human/human_face.dmi b/icons/mob/human/human_face.dmi
index 99bdf00910c8c..97096506227fb 100644
Binary files a/icons/mob/human/human_face.dmi and b/icons/mob/human/human_face.dmi differ
diff --git a/icons/mob/human/species/misc/bodypart_overlay_simple.dmi b/icons/mob/human/species/misc/bodypart_overlay_simple.dmi
index 84dd6c4a39e2b..2076bd32be110 100644
Binary files a/icons/mob/human/species/misc/bodypart_overlay_simple.dmi and b/icons/mob/human/species/misc/bodypart_overlay_simple.dmi differ
diff --git a/icons/mob/nonhuman-player/cult.dmi b/icons/mob/nonhuman-player/cult.dmi
index 683ee9bd6fe32..76f93cd839725 100644
Binary files a/icons/mob/nonhuman-player/cult.dmi and b/icons/mob/nonhuman-player/cult.dmi differ
diff --git a/icons/mob/silicon/robots.dmi b/icons/mob/silicon/robots.dmi
index c2780ce26abea..33a6892a986f6 100644
Binary files a/icons/mob/silicon/robots.dmi and b/icons/mob/silicon/robots.dmi differ
diff --git a/icons/obj/aquarium/fish.dmi b/icons/obj/aquarium/fish.dmi
index deabb8c7a3681..5c6a3203dba45 100644
Binary files a/icons/obj/aquarium/fish.dmi and b/icons/obj/aquarium/fish.dmi differ
diff --git a/icons/obj/art/crayons.dmi b/icons/obj/art/crayons.dmi
index dd686329a1471..26f601f454a50 100644
Binary files a/icons/obj/art/crayons.dmi and b/icons/obj/art/crayons.dmi differ
diff --git a/icons/obj/fishing.dmi b/icons/obj/fishing.dmi
index dc0e65fac5898..d97384f1f7994 100644
Binary files a/icons/obj/fishing.dmi and b/icons/obj/fishing.dmi differ
diff --git a/icons/obj/items_cyborg.dmi b/icons/obj/items_cyborg.dmi
index 39624fce676b8..e3014997c048d 100644
Binary files a/icons/obj/items_cyborg.dmi and b/icons/obj/items_cyborg.dmi differ
diff --git a/icons/obj/machines/engine/supermatter.dmi b/icons/obj/machines/engine/supermatter.dmi
index 12b6aff39f638..0a68846715e4c 100644
Binary files a/icons/obj/machines/engine/supermatter.dmi and b/icons/obj/machines/engine/supermatter.dmi differ
diff --git a/icons/obj/machines/manufactorio.dmi b/icons/obj/machines/manufactorio.dmi
index 95bbd8fccb0eb..31abf6f6a20ee 100644
Binary files a/icons/obj/machines/manufactorio.dmi and b/icons/obj/machines/manufactorio.dmi differ
diff --git a/icons/obj/medical/bodybag.dmi b/icons/obj/medical/bodybag.dmi
index 7b7200efc10a0..0ac7fdc2115ef 100644
Binary files a/icons/obj/medical/bodybag.dmi and b/icons/obj/medical/bodybag.dmi differ
diff --git a/icons/obj/signs.dmi b/icons/obj/signs.dmi
index 050a609470421..4e0ce76cd8672 100644
Binary files a/icons/obj/signs.dmi and b/icons/obj/signs.dmi differ
diff --git a/icons/obj/storage/box.dmi b/icons/obj/storage/box.dmi
index 79f7eff2a678d..aeb337b5981aa 100644
Binary files a/icons/obj/storage/box.dmi and b/icons/obj/storage/box.dmi differ
diff --git a/icons/obj/weapons/sword.dmi b/icons/obj/weapons/sword.dmi
index 9464c7b474585..d6a1309731372 100644
Binary files a/icons/obj/weapons/sword.dmi and b/icons/obj/weapons/sword.dmi differ
diff --git a/icons/turf/walls/material_wall.dmi b/icons/turf/walls/material_wall.dmi
index 2bd844c0b1357..45b0c9729ab9b 100644
Binary files a/icons/turf/walls/material_wall.dmi and b/icons/turf/walls/material_wall.dmi differ
diff --git a/icons/turf/walls/material_wall.png b/icons/turf/walls/material_wall.png
index 1f636cb6db09d..e946f1b3c8bde 100644
Binary files a/icons/turf/walls/material_wall.png and b/icons/turf/walls/material_wall.png differ
diff --git a/modular_doppler/accessable_storage/accessable_storage.dm b/modular_doppler/accessable_storage/accessable_storage.dm
index e8840921cac40..a8ec638b2b541 100644
--- a/modular_doppler/accessable_storage/accessable_storage.dm
+++ b/modular_doppler/accessable_storage/accessable_storage.dm
@@ -95,6 +95,7 @@
var/obj/item/organ/visible_organ = parent
if(!length(visible_organ.contents))
return
- var/examine_text = span_notice("[user.p_Theyre()] holding [icon2html(visible_organ.contents[1], examined)] \a [visible_organ.contents[1].name] with [user.p_their()] [visible_organ.name].")
+ var/mob/living/carbon/human/organ_haver = user
+ var/examine_text = span_notice("[organ_haver.p_Theyre()] holding [icon2html(visible_organ.contents[1], examined)] \a [visible_organ.contents[1].name] with [organ_haver.p_their()] [visible_organ.name].")
examine_list += examine_text
diff --git a/modular_doppler/accessable_storage/strippable.dm b/modular_doppler/accessable_storage/strippable.dm
index 8dab1a7dc8730..4485484c8c355 100644
--- a/modular_doppler/accessable_storage/strippable.dm
+++ b/modular_doppler/accessable_storage/strippable.dm
@@ -7,7 +7,7 @@
if(!iscarbon(source))
return FALSE
var/mob/living/carbon/carbon_source = source
- var/obj/item/organ/external/tail/tail = carbon_source.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ var/obj/item/organ/tail/tail = carbon_source.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
if(!tail || !tail.atom_storage)
return FALSE
return TRUE
@@ -16,7 +16,7 @@
if(!iscarbon(source))
return null
var/mob/living/carbon/carbon_source = source
- var/obj/item/organ/external/tail/tail = carbon_source.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ var/obj/item/organ/tail/tail = carbon_source.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
if(tail && tail.atom_storage && length(tail.contents))
return tail.contents[1]
@@ -42,7 +42,7 @@
if(!iscarbon(source))
return FALSE
var/mob/living/carbon/carbon_source = source
- var/obj/item/organ/external/tail/tail = carbon_source.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ var/obj/item/organ/tail/tail = carbon_source.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
tail.atom_storage?.attempt_insert(equipping, user)
return finish_equip_mob(equipping, source, user)
diff --git a/modular_doppler/cryosleep/code/cryopod.dm b/modular_doppler/cryosleep/code/cryopod.dm
index 8c0f6d47169bb..0527294a78007 100644
--- a/modular_doppler/cryosleep/code/cryopod.dm
+++ b/modular_doppler/cryosleep/code/cryopod.dm
@@ -400,7 +400,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod, 32)
// Allows players to cryo others. Checks if they have been AFK for 30 minutes.
if(target.key && user != target)
- if (target.get_organ_by_type(/obj/item/organ/internal/brain) ) //Target the Brain
+ if (target.get_organ_by_type(/obj/item/organ/brain) ) //Target the Brain
if(!target.mind || target.ssd_indicator ) // Is the character empty / AI Controlled
if(target.lastclienttime + ssd_time >= world.time)
to_chat(user, span_notice("You can't put [target] into [src] for another [round(((ssd_time - (world.time - target.lastclienttime)) / (1 MINUTES)), 1)] minutes."))
diff --git a/modular_doppler/enterprise_resource_planning/code/breasts.dm b/modular_doppler/enterprise_resource_planning/code/breasts.dm
index e496158d7ba33..91cd2ccbf47bd 100644
--- a/modular_doppler/enterprise_resource_planning/code/breasts.dm
+++ b/modular_doppler/enterprise_resource_planning/code/breasts.dm
@@ -21,7 +21,7 @@
/// The boobage in question
-/obj/item/organ/external/nsfw/breasts
+/obj/item/organ/nsfw/breasts
name = "breasts"
desc = "Super-effective at deterring ice dragons."
icon_state = "breasts"
@@ -111,7 +111,7 @@
//to_chat(world, "Boobs are in the features list, adding [target.dna.features["breasts"]]")
if(target.dna.features["breasts"] != "Bare")
//to_chat(world, "Boob type valid, trying to insert [target.dna.features["breasts"]]")
- var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/nsfw/breasts)
+ var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/nsfw/breasts)
//to_chat(world, "Inserted boobage exists: [replacement]")
//replacement.build_from_dna(target.dna, "breasts") //TODO: do we need to add this
replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
diff --git a/modular_doppler/enterprise_resource_planning/code/erp_prefs.dm b/modular_doppler/enterprise_resource_planning/code/erp_prefs.dm
index fd6b0e0a2b272..3bab72b775746 100644
--- a/modular_doppler/enterprise_resource_planning/code/erp_prefs.dm
+++ b/modular_doppler/enterprise_resource_planning/code/erp_prefs.dm
@@ -20,7 +20,7 @@
/// === BASE ORGAN TYPE. HELPS WITH THE BULLSHITTERY ===
-/obj/item/organ/external/nsfw
+/obj/item/organ/nsfw
name = "nsfw organ"
desc = "If you see this, yell at Naaka. Shit's fucked."
icon = 'modular_doppler/enterprise_resource_planning/icons/organs.dmi'
@@ -74,14 +74,14 @@
return
var/list/part_list = list()
- for(var/obj/item/organ/external/nsfw/part in organs)
+ for(var/obj/item/organ/nsfw/part in organs)
part_list += part
if(!part_list.len) //There is nothing to expose
update_body()
return
- var/obj/item/organ/external/nsfw/picked_organ = tgui_input_list(src, "Choose which part to adjust", "Part Adjuster", part_list)
+ var/obj/item/organ/nsfw/picked_organ = tgui_input_list(src, "Choose which part to adjust", "Part Adjuster", part_list)
if(!picked_organ || !(picked_organ in organs))
update_body()
diff --git a/modular_doppler/hearthkin/primitive_genemod/code/objects.dm b/modular_doppler/hearthkin/primitive_genemod/code/objects.dm
index bf74c086cc3e7..b84fdca6077de 100644
--- a/modular_doppler/hearthkin/primitive_genemod/code/objects.dm
+++ b/modular_doppler/hearthkin/primitive_genemod/code/objects.dm
@@ -78,8 +78,8 @@
to_chat(user, span_warning("You have no idea how to use this freezing concoction."))
return
- if(istype(interacting_with, /obj/item/organ/internal/lungs))
- var/obj/item/organ/internal/lungs/target_lungs = interacting_with
+ if(istype(interacting_with, /obj/item/organ/lungs))
+ var/obj/item/organ/lungs/target_lungs = interacting_with
if(IS_ROBOTIC_ORGAN(target_lungs))
user.balloon_alert(user, "The lungs have to be organic!")
return
@@ -87,7 +87,7 @@
playsound(location, 'sound/effects/slosh.ogg', 25, TRUE)
user.visible_message(span_notice("[user] pours a strange blue liquid over the set of lungs. The flesh starts glistening in a strange cyan light, transforming before your very eyes!"),
span_notice("Recalling the instructions for the lung transfiguration ritual, you pour the liquid over the flesh of the organ. Soon, the lungs glow in a mute cyan light, before they turn dim and change form before your very eyes!"))
- var/obj/item/organ/internal/lungs/icebox_adapted/new_lungs = new(location)
+ var/obj/item/organ/lungs/icebox_adapted/new_lungs = new(location)
new_lungs.damage = target_lungs.damage
qdel(target_lungs)
qdel(src)
diff --git a/modular_doppler/hearthkin/primitive_genemod/code/organs.dm b/modular_doppler/hearthkin/primitive_genemod/code/organs.dm
index 67297ad4c73c1..15d7921fe9d39 100644
--- a/modular_doppler/hearthkin/primitive_genemod/code/organs.dm
+++ b/modular_doppler/hearthkin/primitive_genemod/code/organs.dm
@@ -2,13 +2,13 @@
// Lungs
-/obj/item/organ/internal/lungs/icebox_adapted
+/obj/item/organ/lungs/icebox_adapted
name = "hardy lungs"
desc = "Lungs adapted to frozen environments that would be otherwise inhospitable to most races. Feels cold."
icon_state = "hardylungs"
icon = 'modular_doppler/hearthkin/primitive_genemod/icons/organs.dmi'
-/obj/item/organ/internal/lungs/icebox_adapted/Initialize(mapload)
+/obj/item/organ/lungs/icebox_adapted/Initialize(mapload)
. = ..()
var/datum/gas_mixture/immutable/planetary/mix = SSair.planetary[ICEMOON_DEFAULT_ATMOS]
@@ -59,7 +59,7 @@
// Eyes
-/obj/item/organ/internal/eyes/low_light_adapted
+/obj/item/organ/eyes/low_light_adapted
color_cutoffs = list(30, 15, 15)
#undef GAS_TOLERANCE
diff --git a/modular_doppler/hearthkin/primitive_genemod/code/spawner.dm b/modular_doppler/hearthkin/primitive_genemod/code/spawner.dm
index 329469d585ccb..ad31c24bdd80c 100644
--- a/modular_doppler/hearthkin/primitive_genemod/code/spawner.dm
+++ b/modular_doppler/hearthkin/primitive_genemod/code/spawner.dm
@@ -134,7 +134,7 @@
return
if(target.key && target != user)
- if(!target.get_organ_by_type(/obj/item/organ/internal/brain) || (target.mind && !target.ssd_indicator))
+ if(!target.get_organ_by_type(/obj/item/organ/brain) || (target.mind && !target.ssd_indicator))
to_chat(user, span_danger("Awake kin cannot be put back to sleep against their will."))
return
diff --git a/modular_doppler/languages/code/language_datums.dm b/modular_doppler/languages/code/language_datums.dm
index ae969193d688b..bfe49a9b6a99f 100644
--- a/modular_doppler/languages/code/language_datums.dm
+++ b/modular_doppler/languages/code/language_datums.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/tongue/get_possible_languages()
+/obj/item/organ/tongue/get_possible_languages()
var/list/langs = ..()
langs += /datum/language/konjin
langs += /datum/language/gutter
diff --git a/modular_doppler/modular_antagonists/sapper_gang/sapper_event.dm b/modular_doppler/modular_antagonists/sapper_gang/sapper_event.dm
index 0ac103b4c55cb..eaf6e27753d52 100644
--- a/modular_doppler/modular_antagonists/sapper_gang/sapper_event.dm
+++ b/modular_doppler/modular_antagonists/sapper_gang/sapper_event.dm
@@ -66,7 +66,7 @@
name = "Space Sappers"
typepath = /datum/round_event/ghost_role/sappers
max_occurrences = 1
- min_players = 10
+ min_players = 15
earliest_start = 1 HOURS
dynamic_should_hijack = TRUE
category = EVENT_CATEGORY_INVASION
diff --git a/modular_doppler/modular_customization/accessories/code/aquatic_accessories/aquatic_tail.dm b/modular_doppler/modular_customization/accessories/code/aquatic_accessories/aquatic_tail.dm
index bf7f0187dd1f5..bc9c54c39115b 100644
--- a/modular_doppler/modular_customization/accessories/code/aquatic_accessories/aquatic_tail.dm
+++ b/modular_doppler/modular_customization/accessories/code/aquatic_accessories/aquatic_tail.dm
@@ -1,9 +1,30 @@
/datum/sprite_accessory/tails/fish
icon = 'modular_doppler/modular_customization/accessories/icons/aquatic/aquatic_tail.dmi'
+ color_src = FALSE
-/datum/sprite_accessory/tails/fish/shark_finless
- name = "Shark (Finless)"
- icon_state = "sharknofin"
+/datum/sprite_accessory/tails/fish/simple
+ name = "Simple"
+ icon_state = "simple"
+
+/datum/sprite_accessory/tails/fish/crescent
+ name = "Crescent"
+ icon_state = "crescent"
+
+/datum/sprite_accessory/tails/fish/long
+ name = "Long"
+ icon_state = "long"
+ center = TRUE
+ dimension_x = 38
+
+/datum/sprite_accessory/tails/fish/shark
+ name = "Shark"
+ icon_state = "shark"
+
+/datum/sprite_accessory/tails/fish/chonky
+ name = "Chonky"
+ icon_state = "chonky"
+ center = TRUE
+ dimension_x = 36
/datum/sprite_accessory/tails/fish/akula
name = "Azulean"
diff --git a/modular_doppler/modular_customization/accessories/icons/aquatic/aquatic_tail.dmi b/modular_doppler/modular_customization/accessories/icons/aquatic/aquatic_tail.dmi
index 6011a2f984330..d434e71561dd9 100644
Binary files a/modular_doppler/modular_customization/accessories/icons/aquatic/aquatic_tail.dmi and b/modular_doppler/modular_customization/accessories/icons/aquatic/aquatic_tail.dmi differ
diff --git a/modular_doppler/modular_customization/organs/external/fluff.dm b/modular_doppler/modular_customization/organs/external/fluff.dm
index 8a2eb8421ca9e..b5232ae06fcea 100644
--- a/modular_doppler/modular_customization/organs/external/fluff.dm
+++ b/modular_doppler/modular_customization/organs/external/fluff.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/external/fluff
+/obj/item/organ/fluff
name = "fluff"
desc = ""
icon_state = "severedtail"
diff --git a/modular_doppler/modular_customization/organs/external/tail.dm b/modular_doppler/modular_customization/organs/external/tail.dm
index ae9b6a13db3ef..7cef5550e7a6c 100644
--- a/modular_doppler/modular_customization/organs/external/tail.dm
+++ b/modular_doppler/modular_customization/organs/external/tail.dm
@@ -22,25 +22,25 @@
/// Monkey tail
// now waggable!
-/obj/item/organ/external/tail/monkey
+/obj/item/organ/tail/monkey
name = "monkey tail"
wag_flags = WAG_ABLE
-/obj/item/organ/external/tail/monkey/Initialize(mapload)
+/obj/item/organ/tail/monkey/Initialize(mapload)
. = ..()
create_storage(storage_type = /datum/storage/tail)
AddComponent(/datum/component/accessable_storage/organ)
/// Mouse tail
// Monkey and mouse tail get a (secret) additional inventory slot
-/obj/item/organ/external/tail/mouse
+/obj/item/organ/tail/mouse
name = "mouse tail"
preference = "feature_mouse_tail"
dna_block = null
wag_flags = WAG_ABLE
bodypart_overlay = /datum/bodypart_overlay/mutant/tail/mouse
-/obj/item/organ/external/tail/mouse/Initialize(mapload)
+/obj/item/organ/tail/mouse/Initialize(mapload)
. = ..()
create_storage(storage_type = /datum/storage/tail)
AddComponent(/datum/component/accessable_storage/organ)
@@ -53,7 +53,7 @@
/// Dog tail
// Buffs people if they're closeby while you're wagging it!
-/obj/item/organ/external/tail/dog
+/obj/item/organ/tail/dog
preference = "feature_dog_tail"
dna_block = null
wag_flags = WAG_ABLE
@@ -68,17 +68,17 @@
return SSaccessories.tails_list_dog
// Create the proximity monitor when we start wagging, thanks TG for this proc!
-/obj/item/organ/external/tail/dog/start_wag(mob/living/carbon/organ_owner, stop_after = INFINITY)
+/obj/item/organ/tail/dog/start_wag(mob/living/carbon/organ_owner, stop_after = INFINITY)
. = ..()
if(!mood_buff)
mood_buff = new(organ_owner, 3, TRUE)
-/obj/item/organ/external/tail/dog/stop_wag(mob/living/carbon/organ_owner)
+/obj/item/organ/tail/dog/stop_wag(mob/living/carbon/organ_owner)
. = ..()
if(mood_buff)
QDEL_NULL(mood_buff)
-/obj/item/organ/external/tail/dog/on_mob_remove(mob/living/carbon/organ_owner, special = FALSE, movement_flags)
+/obj/item/organ/tail/dog/on_mob_remove(mob/living/carbon/organ_owner, special = FALSE, movement_flags)
. = ..()
if(mood_buff)
QDEL_NULL(mood_buff)
@@ -93,7 +93,7 @@
/// Fox tail
//
-/obj/item/organ/external/tail/fox
+/obj/item/organ/tail/fox
preference = "feature_fox_tail"
dna_block = null
wag_flags = WAG_ABLE
@@ -107,7 +107,7 @@
/// Bunny tail
//
-/obj/item/organ/external/tail/bunny
+/obj/item/organ/tail/bunny
preference = "feature_bunny_tail"
dna_block = null
wag_flags = WAG_ABLE
@@ -121,7 +121,7 @@
/// Bird tail
//
-/obj/item/organ/external/tail/bird
+/obj/item/organ/tail/bird
preference = "feature_bird_tail"
dna_block = null
bodypart_overlay = /datum/bodypart_overlay/mutant/tail/bird
@@ -134,7 +134,7 @@
/// Bug tail
//
-/obj/item/organ/external/tail/bug
+/obj/item/organ/tail/bug
preference = "feature_bug_tail"
dna_block = null
bodypart_overlay = /datum/bodypart_overlay/mutant/tail/bug
@@ -147,7 +147,7 @@
/// Deer tail
//
-/obj/item/organ/external/tail/deer
+/obj/item/organ/tail/deer
preference = "feature_deer_tail"
dna_block = null
wag_flags = WAG_ABLE
@@ -161,13 +161,13 @@
/// Fish tail
//
-/obj/item/organ/external/tail/fish
+/obj/item/organ/tail/fish
preference = "feature_fish_tail"
organ_traits = list(TRAIT_TACKLING_TAILED_DEFENDER, TRAIT_FLOPPING)
/// Cybernetic tail
//
-/obj/item/organ/external/tail/cybernetic
+/obj/item/organ/tail/cybernetic
preference = "feature_synth_tail"
dna_block = null
organ_flags = ORGAN_ROBOTIC
@@ -182,7 +182,7 @@
/// Humanoid tail
//
-/obj/item/organ/external/tail/humanoid
+/obj/item/organ/tail/humanoid
preference = "feature_humanoid_tail"
dna_block = null
wag_flags = WAG_ABLE
@@ -197,7 +197,7 @@
/// Alien tail
//
-/obj/item/organ/external/tail/alien
+/obj/item/organ/tail/alien
preference = "feature_alien_tail"
dna_block = null
wag_flags = WAG_ABLE
diff --git a/modular_doppler/modular_customization/organs/external/wings.dm b/modular_doppler/modular_customization/organs/external/wings.dm
index 95e0c2df556aa..d4caf2baebf66 100644
--- a/modular_doppler/modular_customization/organs/external/wings.dm
+++ b/modular_doppler/modular_customization/organs/external/wings.dm
@@ -1,5 +1,5 @@
// Normal
-/obj/item/organ/external/wings/more
+/obj/item/organ/wings/more
bodypart_overlay = /datum/bodypart_overlay/mutant/wings/more
/datum/bodypart_overlay/mutant/wings/more/get_global_feature_list()
diff --git a/modular_doppler/modular_customization/organs/internal/ears.dm b/modular_doppler/modular_customization/organs/internal/ears.dm
index 02ecf76d2be38..f1db228313f93 100644
--- a/modular_doppler/modular_customization/organs/internal/ears.dm
+++ b/modular_doppler/modular_customization/organs/internal/ears.dm
@@ -1,6 +1,6 @@
/// Cat ears
//
-/obj/item/organ/internal/ears/cat
+/obj/item/organ/ears/cat
bodypart_overlay = /datum/bodypart_overlay/mutant/ears/cat_ears
/datum/bodypart_overlay/mutant/ears/cat_ears/get_global_feature_list()
@@ -8,7 +8,7 @@
/// Lizard ears
//
-/obj/item/organ/internal/ears/lizard
+/obj/item/organ/ears/lizard
bodypart_overlay = /datum/bodypart_overlay/mutant/ears/lizard_ears
/datum/bodypart_overlay/mutant/ears/lizard_ears/get_global_feature_list()
@@ -16,7 +16,7 @@
/// Fox ears
//
-/obj/item/organ/internal/ears/fox
+/obj/item/organ/ears/fox
preference = "feature_fox_ears"
bodypart_overlay = /datum/bodypart_overlay/mutant/ears/fox_ears
@@ -25,7 +25,7 @@
/// Dog ears
//
-/obj/item/organ/internal/ears/dog
+/obj/item/organ/ears/dog
preference = "feature_dog_ears"
bodypart_overlay = /datum/bodypart_overlay/mutant/ears/dog_ears
@@ -34,7 +34,7 @@
/// Bunny ears
//
-/obj/item/organ/internal/ears/bunny
+/obj/item/organ/ears/bunny
preference = "feature_bunny_ears"
bodypart_overlay = /datum/bodypart_overlay/mutant/ears/bunny_ears
@@ -43,7 +43,7 @@
/// Bird ears
//
-/obj/item/organ/internal/ears/bird
+/obj/item/organ/ears/bird
preference = "feature_bird_ears"
bodypart_overlay = /datum/bodypart_overlay/mutant/ears/bird_ears
@@ -52,7 +52,7 @@
/// Mouse ears
//
-/obj/item/organ/internal/ears/mouse
+/obj/item/organ/ears/mouse
preference = "feature_mouse_ears"
bodypart_overlay = /datum/bodypart_overlay/mutant/ears/mouse_ears
@@ -61,7 +61,7 @@
/// Monkey ears
//
-/obj/item/organ/internal/ears/monkey
+/obj/item/organ/ears/monkey
preference = "feature_monkey_ears"
bodypart_overlay = /datum/bodypart_overlay/mutant/ears/monkey_ears
@@ -70,7 +70,7 @@
/// Deer ears
//
-/obj/item/organ/internal/ears/deer
+/obj/item/organ/ears/deer
preference = "feature_deer_ears"
bodypart_overlay = /datum/bodypart_overlay/mutant/ears/deer_ears
@@ -79,7 +79,7 @@
/// Fish ears
//
-/obj/item/organ/internal/ears/fish
+/obj/item/organ/ears/fish
preference = "feature_fish_ears"
bodypart_overlay = /datum/bodypart_overlay/mutant/ears/fish_ears
@@ -88,7 +88,7 @@
/// Bug ears
//
-/obj/item/organ/internal/ears/bug
+/obj/item/organ/ears/bug
preference = "feature_bug_ears"
bodypart_overlay = /datum/bodypart_overlay/mutant/ears/bug_ears
organ_traits = list(TRAIT_ANTENNAE)
@@ -98,7 +98,7 @@
/// Humanoid ears
//
-/obj/item/organ/internal/ears/humanoid
+/obj/item/organ/ears/humanoid
preference = "feature_humanoid_ears"
bodypart_overlay = /datum/bodypart_overlay/mutant/ears/humanoid_ears
@@ -107,7 +107,7 @@
/// Cybernetic ears
//
-/obj/item/organ/internal/ears/cybernetic
+/obj/item/organ/ears/cybernetic
preference = "feature_synth_ears"
bodypart_overlay = /datum/bodypart_overlay/mutant/ears/cybernetic
@@ -116,7 +116,7 @@
/// Alien ears
//
-/obj/item/organ/internal/ears/alien
+/obj/item/organ/ears/alien
preference = "feature_alien_ears"
bodypart_overlay = /datum/bodypart_overlay/mutant/ears/alien_ears
diff --git a/modular_doppler/modular_customization/organs/internal/eyes.dm b/modular_doppler/modular_customization/organs/internal/eyes.dm
index a60cfa0f8a238..33efa88d15071 100644
--- a/modular_doppler/modular_customization/organs/internal/eyes.dm
+++ b/modular_doppler/modular_customization/organs/internal/eyes.dm
@@ -1,2 +1,2 @@
-/obj/item/organ/internal/eyes
+/obj/item/organ/eyes
var/eyes_layer = BODY_LAYER
diff --git a/modular_doppler/modular_customization/organs/internal/tongue.dm b/modular_doppler/modular_customization/organs/internal/tongue.dm
index 3344ce92bfcdd..afad4052e3fb0 100644
--- a/modular_doppler/modular_customization/organs/internal/tongue.dm
+++ b/modular_doppler/modular_customization/organs/internal/tongue.dm
@@ -1,6 +1,6 @@
/// Bug tongue
//
-/obj/item/organ/internal/tongue/bug
+/obj/item/organ/tongue/bug
name = "bug tongue"
desc = "A fleshy muscle mostly used for chittering."
icon = 'icons/obj/medical/organs/fly_organs.dmi'
@@ -8,14 +8,14 @@
/// Cat tongue
//
-/obj/item/organ/internal/tongue/cat/Insert(mob/living/carbon/signer, special = FALSE, movement_flags = DELETE_IF_REPLACED)
+/obj/item/organ/tongue/cat/Insert(mob/living/carbon/signer, special = FALSE, movement_flags = DELETE_IF_REPLACED)
. = ..()
signer.verb_ask = "mrrps"
signer.verb_exclaim = "mrrowls"
signer.verb_whisper = "purrs"
signer.verb_yell = "yowls"
-/obj/item/organ/internal/tongue/cat/Remove(mob/living/carbon/speaker, special = FALSE, movement_flags)
+/obj/item/organ/tongue/cat/Remove(mob/living/carbon/speaker, special = FALSE, movement_flags)
. = ..()
speaker.verb_ask = initial(verb_ask)
speaker.verb_exclaim = initial(verb_exclaim)
@@ -24,19 +24,19 @@
/// Dog tongue
//
-/obj/item/organ/internal/tongue/dog
+/obj/item/organ/tongue/dog
name = "dog tongue"
desc = "A fleshy muscle mostly used for barking."
say_mod = "woofs"
-/obj/item/organ/internal/tongue/dog/Insert(mob/living/carbon/signer, special = FALSE, movement_flags = DELETE_IF_REPLACED)
+/obj/item/organ/tongue/dog/Insert(mob/living/carbon/signer, special = FALSE, movement_flags = DELETE_IF_REPLACED)
. = ..()
signer.verb_ask = "arfs"
signer.verb_exclaim = "wans"
signer.verb_whisper = "whimpers"
signer.verb_yell = "barks"
-/obj/item/organ/internal/tongue/dog/Remove(mob/living/carbon/speaker, special = FALSE, movement_flags)
+/obj/item/organ/tongue/dog/Remove(mob/living/carbon/speaker, special = FALSE, movement_flags)
. = ..()
speaker.verb_ask = initial(verb_ask)
speaker.verb_exclaim = initial(verb_exclaim)
@@ -45,19 +45,19 @@
/// Bird tongue
//
-/obj/item/organ/internal/tongue/bird
+/obj/item/organ/tongue/bird
name = "bird tongue"
desc = "A fleshy muscle mostly used for chirping."
say_mod = "chirps"
-/obj/item/organ/internal/tongue/bird/Insert(mob/living/carbon/speaker, special = FALSE, movement_flags = DELETE_IF_REPLACED)
+/obj/item/organ/tongue/bird/Insert(mob/living/carbon/speaker, special = FALSE, movement_flags = DELETE_IF_REPLACED)
. = ..()
speaker.verb_ask = "peeps"
speaker.verb_exclaim = "squawks"
speaker.verb_whisper = "murmurs"
speaker.verb_yell = "shrieks"
-/obj/item/organ/internal/tongue/bird/Remove(mob/living/carbon/speaker, special = FALSE, movement_flags)
+/obj/item/organ/tongue/bird/Remove(mob/living/carbon/speaker, special = FALSE, movement_flags)
. = ..()
speaker.verb_ask = initial(verb_ask)
speaker.verb_exclaim = initial(verb_exclaim)
@@ -66,21 +66,21 @@
/// Mouse tongue
//
-/obj/item/organ/internal/tongue/mouse
+/obj/item/organ/tongue/mouse
name = "mouse tongue"
desc = "A fleshy muscle mostly used for squeaking."
say_mod = "squeaks"
/// Fish tongue
//
-/obj/item/organ/internal/tongue/fish
+/obj/item/organ/tongue/fish
name = "fish tongue"
desc = "A fleshy muscle mostly used for gnashing."
say_mod = "gnashes"
/// Frog tongue
//
-/obj/item/organ/internal/tongue/frog
+/obj/item/organ/tongue/frog
name = "frog tongue"
desc = "A fleshy muscle mostly used for ribbiting."
say_mod = "ribbits"
diff --git a/modular_doppler/modular_customization/preferences/antennae.dm b/modular_doppler/modular_customization/preferences/antennae.dm
index 29d596e3f6996..24604dbcc5145 100644
--- a/modular_doppler/modular_customization/preferences/antennae.dm
+++ b/modular_doppler/modular_customization/preferences/antennae.dm
@@ -2,7 +2,7 @@
. = ..()
if(target.dna.features["moth_antennae"] && !(type in GLOB.species_blacklist_no_mutant))
if(target.dna.features["moth_antennae"] != /datum/sprite_accessory/moth_antennae/none::name && target.dna.features["moth_antennae"] != /datum/sprite_accessory/blank::name)
- var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/antennae)
+ var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/antennae)
replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
return .
var/obj/item/organ/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_ANTENNAE)
diff --git a/modular_doppler/modular_customization/preferences/ears.dm b/modular_doppler/modular_customization/preferences/ears.dm
index 6a16d00b4a401..f99399821d72a 100644
--- a/modular_doppler/modular_customization/preferences/ears.dm
+++ b/modular_doppler/modular_customization/preferences/ears.dm
@@ -40,7 +40,7 @@
if(target.dna.ear_type == NO_VARIATION)
return .
else if(target.dna.features["ears"] != /datum/sprite_accessory/ears/none::name && target.dna.features["ears"] != /datum/sprite_accessory/blank::name)
- var/obj/item/organ/organ_path = text2path("/obj/item/organ/internal/ears/[target.dna.ear_type]")
+ var/obj/item/organ/organ_path = text2path("/obj/item/organ/ears/[target.dna.ear_type]")
var/obj/item/organ/replacement = SSwardrobe.provide_type(organ_path)
replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
return .
diff --git a/modular_doppler/modular_customization/preferences/fluff.dm b/modular_doppler/modular_customization/preferences/fluff.dm
index 709ef1b4fea28..ee58bbbb16245 100644
--- a/modular_doppler/modular_customization/preferences/fluff.dm
+++ b/modular_doppler/modular_customization/preferences/fluff.dm
@@ -9,7 +9,7 @@
. = ..()
if(target.dna.features["fluff"] && !(type in GLOB.species_blacklist_no_mutant))
if(target.dna.features["fluff"] != /datum/sprite_accessory/fluff/none::name && target.dna.features["fluff"] != /datum/sprite_accessory/blank::name)
- var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/fluff)
+ var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/fluff)
replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
return .
var/obj/item/organ/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_FLUFF)
diff --git a/modular_doppler/modular_customization/preferences/frills.dm b/modular_doppler/modular_customization/preferences/frills.dm
index 788d84ea09ab6..ee180912ce929 100644
--- a/modular_doppler/modular_customization/preferences/frills.dm
+++ b/modular_doppler/modular_customization/preferences/frills.dm
@@ -1,5 +1,5 @@
/// Frills fixing
-/obj/item/organ/external/frills
+/obj/item/organ/frills
name = "frills"
/datum/bodypart_overlay/mutant/frills
@@ -46,7 +46,7 @@
. = ..()
if(target.dna.features["frills"] && !(type in GLOB.species_blacklist_no_mutant))
if(target.dna.features["frills"] != /datum/sprite_accessory/frills/none::name && target.dna.features["frills"] != /datum/sprite_accessory/blank::name)
- var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/frills)
+ var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/frills)
replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
return .
var/obj/item/organ/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_FRILLS)
diff --git a/modular_doppler/modular_customization/preferences/horns.dm b/modular_doppler/modular_customization/preferences/horns.dm
index a47a60cd1fedc..7532e83c34ec8 100644
--- a/modular_doppler/modular_customization/preferences/horns.dm
+++ b/modular_doppler/modular_customization/preferences/horns.dm
@@ -1,5 +1,5 @@
/// Horns fixing
-/obj/item/organ/external/horns
+/obj/item/organ/horns
name = "horns"
/datum/bodypart_overlay/mutant/horns
@@ -64,7 +64,7 @@
. = ..()
if(target.dna.features["horns"] && !(type in GLOB.species_blacklist_no_mutant))
if(target.dna.features["horns"] != /datum/sprite_accessory/horns/none::name && target.dna.features["horns"] != /datum/sprite_accessory/blank::name)
- var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/horns)
+ var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/horns)
replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
return .
var/obj/item/organ/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_HORNS)
diff --git a/modular_doppler/modular_customization/preferences/snout.dm b/modular_doppler/modular_customization/preferences/snout.dm
index f40ca4532386c..fec299abcef85 100644
--- a/modular_doppler/modular_customization/preferences/snout.dm
+++ b/modular_doppler/modular_customization/preferences/snout.dm
@@ -2,7 +2,7 @@
. = ..()
if(target.dna.features["snout"] && !(type in GLOB.species_blacklist_no_mutant))
if(target.dna.features["snout"] != /datum/sprite_accessory/snouts/none::name && target.dna.features["snout"] != /datum/sprite_accessory/blank::name)
- var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/snout)
+ var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/snout)
replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
return .
var/obj/item/organ/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_SNOUT)
diff --git a/modular_doppler/modular_customization/preferences/tail.dm b/modular_doppler/modular_customization/preferences/tail.dm
index ec68c4f5634b7..cb2550b31044d 100644
--- a/modular_doppler/modular_customization/preferences/tail.dm
+++ b/modular_doppler/modular_customization/preferences/tail.dm
@@ -36,28 +36,28 @@
return
if(target.dna.features["tail_lizard"] != /datum/sprite_accessory/tails/lizard/none::name && !(type in GLOB.species_blacklist_no_mutant) && target.dna.features["tail_lizard"] != /datum/sprite_accessory/blank::name)
- var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/tail/lizard)
+ var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/tail/lizard)
replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
return .
else if(target.dna.features["tail_cat"] != /datum/sprite_accessory/tails/human/none::name && !(type in GLOB.species_blacklist_no_mutant) && target.dna.features["tail_cat"] != /datum/sprite_accessory/blank::name)
- var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/tail/cat)
+ var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/tail/cat)
replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
return .
else if(target.dna.features["tail_monkey"] != /datum/sprite_accessory/tails/monkey/none::name && !(type in GLOB.species_blacklist_no_mutant) && target.dna.features["tail_monkey"] != /datum/sprite_accessory/blank::name)
- var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/tail/monkey)
+ var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/tail/monkey)
replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
return .
else if(target.dna.features["fish_tail"] != /datum/sprite_accessory/tails/fish/none::name && !(type in GLOB.species_blacklist_no_mutant) && target.dna.features["fish_tail"] != /datum/sprite_accessory/blank::name)
- var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/tail/fish)
+ var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/tail/fish)
replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
return .
else if((target.dna.features["tail_other"] != /datum/sprite_accessory/tails/lizard/none::name && !(type in GLOB.species_blacklist_no_mutant) && target.dna.features["tail_other"] != /datum/sprite_accessory/blank::name) && (target.dna.tail_type != NO_VARIATION))
- var/obj/item/organ/organ_path = text2path("/obj/item/organ/external/tail/[target.dna.tail_type]")
+ var/obj/item/organ/organ_path = text2path("/obj/item/organ/tail/[target.dna.tail_type]")
var/obj/item/organ/replacement = SSwardrobe.provide_type(organ_path)
replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
return .
- var/obj/item/organ/external/tail/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
+ var/obj/item/organ/tail/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
if(istype(old_part))
old_part.Remove(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
old_part.moveToNullspace()
@@ -428,7 +428,8 @@
return /datum/sprite_accessory/tails/fish/none::name
/datum/preference/choiced/fish_tail/apply_to_human(mob/living/carbon/human/target, value)
- target.dna.features["fish_tail"] = value
+ if(target.dna.tail_type == FISH)
+ target.dna.features["fish_tail"] = value
/datum/preference/choiced/fish_tail/icon_for(value)
var/datum/sprite_accessory/chosen_tail = SSaccessories.tails_list_fish[value]
diff --git a/modular_doppler/modular_customization/preferences/wings.dm b/modular_doppler/modular_customization/preferences/wings.dm
index a8462d0b6ef06..3cbccc9150aa8 100644
--- a/modular_doppler/modular_customization/preferences/wings.dm
+++ b/modular_doppler/modular_customization/preferences/wings.dm
@@ -21,16 +21,16 @@
if(target.dna.wing_type == NO_VARIATION)
return .
if((target.dna.features["moth_wings"] != /datum/sprite_accessory/moth_wings/none::name && target.dna.features["moth_wings"] != /datum/sprite_accessory/blank::name))
- var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/wings/moth)
+ var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/wings/moth)
replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
return .
if(target.dna.features["wings"] && !(type in GLOB.species_blacklist_no_mutant))
if(target.dna.features["wings"] != /datum/sprite_accessory/wings_more/none::name && target.dna.features["wings"] != /datum/sprite_accessory/blank::name)
- var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/external/wings/more)
+ var/obj/item/organ/replacement = SSwardrobe.provide_type(/obj/item/organ/wings/more)
replacement.Insert(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
return .
- var/obj/item/organ/external/wings/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
+ var/obj/item/organ/wings/old_part = target.get_organ_slot(ORGAN_SLOT_EXTERNAL_WINGS)
if(istype(old_part))
old_part.Remove(target, special = TRUE, movement_flags = DELETE_IF_REPLACED)
old_part.moveToNullspace()
diff --git a/modular_doppler/modular_customization/tri_color/antennae.dm b/modular_doppler/modular_customization/tri_color/antennae.dm
index c2f8779aeea9f..449472280a9a1 100644
--- a/modular_doppler/modular_customization/tri_color/antennae.dm
+++ b/modular_doppler/modular_customization/tri_color/antennae.dm
@@ -4,7 +4,7 @@
savefile_key = "antennae_color"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES
- //relevant_external_organ = /obj/item/organ/external/wings
+ //relevant_external_organ = /obj/item/organ/wings
/datum/preference/tri_color/antennae_color/create_default_value()
return list(sanitize_hexcolor("[pick("7F", "FF")][pick("7F", "FF")][pick("7F", "FF")]"),
diff --git a/modular_doppler/modular_customization/tri_color/cap.dm b/modular_doppler/modular_customization/tri_color/cap.dm
index a96bdfa2ded0f..09a94a3176f02 100644
--- a/modular_doppler/modular_customization/tri_color/cap.dm
+++ b/modular_doppler/modular_customization/tri_color/cap.dm
@@ -10,7 +10,7 @@
savefile_key = "caps_color"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES
- //relevant_external_organ = /obj/item/organ/external/tail
+ //relevant_external_organ = /obj/item/organ/tail
/datum/preference/tri_color/caps_color/create_default_value()
return list(sanitize_hexcolor("[pick("7F", "FF")][pick("7F", "FF")][pick("7F", "FF")]"),
diff --git a/modular_doppler/modular_customization/tri_color/fluff.dm b/modular_doppler/modular_customization/tri_color/fluff.dm
index 0ffbe43b23cf3..b5bc8827bdf02 100644
--- a/modular_doppler/modular_customization/tri_color/fluff.dm
+++ b/modular_doppler/modular_customization/tri_color/fluff.dm
@@ -5,7 +5,7 @@
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES
// TODO: we need fluff organs & selection
- //relevant_external_organ = /obj/item/organ/external/fluff
+ //relevant_external_organ = /obj/item/organ/fluff
/datum/preference/tri_color/fluff_color/create_default_value()
return list(sanitize_hexcolor("[pick("7F", "FF")][pick("7F", "FF")][pick("7F", "FF")]"),
diff --git a/modular_doppler/modular_customization/tri_color/frills.dm b/modular_doppler/modular_customization/tri_color/frills.dm
index f75dc511a4288..b23a1b5ffe433 100644
--- a/modular_doppler/modular_customization/tri_color/frills.dm
+++ b/modular_doppler/modular_customization/tri_color/frills.dm
@@ -10,7 +10,7 @@
savefile_key = "frills_color"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES
- //relevant_external_organ = /obj/item/organ/external/frills
+ //relevant_external_organ = /obj/item/organ/frills
/datum/preference/tri_color/frills_color/create_default_value()
return list(sanitize_hexcolor("[pick("7F", "FF")][pick("7F", "FF")][pick("7F", "FF")]"),
diff --git a/modular_doppler/modular_customization/tri_color/horns.dm b/modular_doppler/modular_customization/tri_color/horns.dm
index a0da3b18b27e3..82d7deb1ac153 100644
--- a/modular_doppler/modular_customization/tri_color/horns.dm
+++ b/modular_doppler/modular_customization/tri_color/horns.dm
@@ -10,7 +10,7 @@
savefile_key = "horns_color"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES
- //relevant_external_organ = /obj/item/organ/external/horns
+ //relevant_external_organ = /obj/item/organ/horns
/datum/preference/tri_color/horns_color/create_default_value()
return list(sanitize_hexcolor("[pick("7F", "FF")][pick("7F", "FF")][pick("7F", "FF")]"),
diff --git a/modular_doppler/modular_customization/tri_color/snout.dm b/modular_doppler/modular_customization/tri_color/snout.dm
index c5fd400a2ffbe..01e5c7a759863 100644
--- a/modular_doppler/modular_customization/tri_color/snout.dm
+++ b/modular_doppler/modular_customization/tri_color/snout.dm
@@ -10,7 +10,7 @@
savefile_key = "snout_color"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES
- //relevant_external_organ = /obj/item/organ/external/snout
+ //relevant_external_organ = /obj/item/organ/snout
/datum/preference/tri_color/snout_color/create_default_value()
return list(sanitize_hexcolor("[pick("7F", "FF")][pick("7F", "FF")][pick("7F", "FF")]"),
diff --git a/modular_doppler/modular_customization/tri_color/spines.dm b/modular_doppler/modular_customization/tri_color/spines.dm
index ca5ac786b474f..9cae6d187c5e9 100644
--- a/modular_doppler/modular_customization/tri_color/spines.dm
+++ b/modular_doppler/modular_customization/tri_color/spines.dm
@@ -10,7 +10,7 @@
savefile_key = "spines_color"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES
- //relevant_external_organ = /obj/item/organ/external/spines
+ //relevant_external_organ = /obj/item/organ/spines
/datum/preference/tri_color/spines_color/create_default_value()
return list(sanitize_hexcolor("[pick("7F", "FF")][pick("7F", "FF")][pick("7F", "FF")]"),
diff --git a/modular_doppler/modular_customization/tri_color/tail.dm b/modular_doppler/modular_customization/tri_color/tail.dm
index 6344589031afc..cbb069c4ca812 100644
--- a/modular_doppler/modular_customization/tri_color/tail.dm
+++ b/modular_doppler/modular_customization/tri_color/tail.dm
@@ -77,7 +77,7 @@
savefile_key = "tail_color"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES
- //relevant_external_organ = /obj/item/organ/external/tail
+ //relevant_external_organ = /obj/item/organ/tail
/datum/preference/tri_color/tail_color/create_default_value()
return list(sanitize_hexcolor("[pick("7F", "FF")][pick("7F", "FF")][pick("7F", "FF")]"),
diff --git a/modular_doppler/modular_customization/tri_color/tri_color_prefs_bespoke.dm b/modular_doppler/modular_customization/tri_color/tri_color_prefs_bespoke.dm
index 8dc278d22c15f..0e9ff59ae044b 100644
--- a/modular_doppler/modular_customization/tri_color/tri_color_prefs_bespoke.dm
+++ b/modular_doppler/modular_customization/tri_color/tri_color_prefs_bespoke.dm
@@ -8,7 +8,7 @@
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES
// TODO: we need fluff organs & selection
- //relevant_external_organ = /obj/item/organ/external/fluff
+ //relevant_external_organ = /obj/item/organ/fluff
/datum/preference/tri_color/ipc_antenna_color/create_default_value()
return list(sanitize_hexcolor("[pick("7F", "FF")][pick("7F", "FF")][pick("7F", "FF")]"),
@@ -44,7 +44,7 @@
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES
// TODO: we need fluff organs & selection
- //relevant_external_organ = /obj/item/organ/external/fluff
+ //relevant_external_organ = /obj/item/organ/fluff
/datum/preference/tri_color/taur_color/create_default_value()
return list(sanitize_hexcolor("[pick("7F", "FF")][pick("7F", "FF")][pick("7F", "FF")]"),
@@ -80,7 +80,7 @@
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES
// TODO: we need fluff organs & selection
- //relevant_external_organ = /obj/item/organ/external/fluff
+ //relevant_external_organ = /obj/item/organ/fluff
/datum/preference/tri_color/xenodorsal_color/create_default_value()
return list(sanitize_hexcolor("[pick("7F", "FF")][pick("7F", "FF")][pick("7F", "FF")]"),
@@ -116,7 +116,7 @@
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES
// TODO: we need fluff organs & selection
- //relevant_external_organ = /obj/item/organ/external/fluff
+ //relevant_external_organ = /obj/item/organ/fluff
/datum/preference/tri_color/xenohead_color/create_default_value()
return list(sanitize_hexcolor("[pick("7F", "FF")][pick("7F", "FF")][pick("7F", "FF")]"),
diff --git a/modular_doppler/modular_customization/tri_color/wings.dm b/modular_doppler/modular_customization/tri_color/wings.dm
index c30f75c2edbd4..2c54435cf0407 100644
--- a/modular_doppler/modular_customization/tri_color/wings.dm
+++ b/modular_doppler/modular_customization/tri_color/wings.dm
@@ -16,7 +16,7 @@
savefile_key = "wings_color"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES
- //relevant_external_organ = /obj/item/organ/external/wings
+ //relevant_external_organ = /obj/item/organ/wings
/datum/preference/tri_color/wings_color/create_default_value()
return list(sanitize_hexcolor("[pick("7F", "FF")][pick("7F", "FF")][pick("7F", "FF")]"),
diff --git a/modular_doppler/modular_medical/medical_designs/medical_designs.dm b/modular_doppler/modular_medical/medical_designs/medical_designs.dm
index d5516d3a80462..524bb392708e5 100644
--- a/modular_doppler/modular_medical/medical_designs/medical_designs.dm
+++ b/modular_doppler/modular_medical/medical_designs/medical_designs.dm
@@ -23,7 +23,7 @@
/datum/material/plastic = SHEET_MATERIAL_AMOUNT,
)
construction_time = 20 SECONDS
- build_path = /obj/item/organ/internal/cyberimp/arm/botany
+ build_path = /obj/item/organ/cyberimp/arm/botany
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS,
)
@@ -40,7 +40,7 @@
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
)
construction_time = 20 SECONDS
- build_path = /obj/item/organ/internal/cyberimp/arm/janitor
+ build_path = /obj/item/organ/cyberimp/arm/janitor
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS,
)
@@ -57,7 +57,7 @@
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
)
construction_time = 20 SECONDS
- build_path = /obj/item/organ/internal/cyberimp/arm/mining_drill
+ build_path = /obj/item/organ/cyberimp/arm/mining_drill
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS,
)
@@ -74,7 +74,7 @@
/datum/material/diamond = SHEET_MATERIAL_AMOUNT,
)
construction_time = 30 SECONDS
- build_path = /obj/item/organ/internal/cyberimp/arm/mining_drill/diamond
+ build_path = /obj/item/organ/cyberimp/arm/mining_drill/diamond
category = list(
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MINING
)
@@ -97,7 +97,7 @@
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
)
construction_time = 20 SECONDS
- build_path = /obj/item/organ/internal/cyberimp/arm/razor_claws
+ build_path = /obj/item/organ/cyberimp/arm/razor_claws
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS,
)
diff --git a/modular_doppler/modular_medical/surgery/organs/internal/cyberimp.dm b/modular_doppler/modular_medical/surgery/organs/internal/cyberimp.dm
index eedf7f6b64a16..67dd334612759 100644
--- a/modular_doppler/modular_medical/surgery/organs/internal/cyberimp.dm
+++ b/modular_doppler/modular_medical/surgery/organs/internal/cyberimp.dm
@@ -1,7 +1,7 @@
-/obj/item/organ/internal/cyberimp/arm/surgery/l
+/obj/item/organ/cyberimp/arm/surgery/l
zone = BODY_ZONE_L_ARM
-/obj/item/organ/internal/cyberimp/arm/botany
+/obj/item/organ/cyberimp/arm/botany
name = "hydroponics toolset implant"
desc = "A rather simple arm implant containing tools used in gardening and botanical research."
icon_state = "toolkit_generic"
@@ -14,7 +14,7 @@
/obj/item/secateurs,
)
-/obj/item/organ/internal/cyberimp/arm/botany/l
+/obj/item/organ/cyberimp/arm/botany/l
zone = BODY_ZONE_L_ARM
/obj/item/implant_mounted_chainsaw
@@ -36,7 +36,7 @@
tool_behaviour = TOOL_SAW
toolspeed = 1
-/obj/item/organ/internal/cyberimp/arm/botany/emag_act()
+/obj/item/organ/cyberimp/arm/botany/emag_act()
if(obj_flags & EMAGGED)
return FALSE
for(var/datum/weakref/created_item in items_list)
@@ -45,7 +45,7 @@
obj_flags |= EMAGGED
return TRUE
-/obj/item/organ/internal/cyberimp/arm/janitor
+/obj/item/organ/cyberimp/arm/janitor
name = "sanitation toolset implant"
desc = "A set of janitorial tools on the user's arm."
actions_types = list(/datum/action/item_action/organ_action/toggle/toolkit)
@@ -57,10 +57,10 @@
/obj/item/wirebrush,
)
-/obj/item/organ/internal/cyberimp/arm/janitor/l
+/obj/item/organ/cyberimp/arm/janitor/l
zone = BODY_ZONE_L_ARM
-/obj/item/organ/internal/cyberimp/arm/janitor/emag_act()
+/obj/item/organ/cyberimp/arm/janitor/emag_act()
if(obj_flags & EMAGGED)
return FALSE
for(var/datum/weakref/created_item in items_list)
@@ -70,7 +70,7 @@
obj_flags |= EMAGGED
return TRUE
-/obj/item/organ/internal/cyberimp/arm/razor_claws
+/obj/item/organ/cyberimp/arm/razor_claws
name = "razor claws implant"
desc = "A set of hidden, retractable blades built into the fingertips; cyborg mercenary approved."
items_to_create = list(/obj/item/knife/razor_claws)
@@ -80,7 +80,7 @@
extend_sound = 'sound/items/unsheath.ogg'
retract_sound = 'sound/items/sheath.ogg'
-/obj/item/organ/internal/cyberimp/arm/razor_claws/l
+/obj/item/organ/cyberimp/arm/razor_claws/l
zone = BODY_ZONE_L_ARM
/datum/action/item_action/organ_action/toggle/razor_claws
@@ -170,7 +170,7 @@
contains = list(/obj/item/scratching_stone)
contraband = TRUE
-/obj/item/organ/internal/cyberimp/arm/mining_drill
+/obj/item/organ/cyberimp/arm/mining_drill
name = "\improper Dalba Masterworks 'Burrower' Integrated Drill"
desc = "Extending from a stabilization bracer built into the upper forearm, this implant allows for a steel mining drill to extend over the user's hand. Little by little, we advance a bit further with each turn. That's how a drill works!"
icon = 'modular_doppler/modular_medical/icons/implants.dmi'
@@ -181,7 +181,7 @@
/// The bodypart overlay datum we should apply to whatever mob we are put into's someone's arm
var/datum/bodypart_overlay/simple/steel_drill/drill_overlay
-/obj/item/organ/internal/cyberimp/arm/mining_drill/l
+/obj/item/organ/cyberimp/arm/mining_drill/l
zone = BODY_ZONE_L_ARM
/datum/bodypart_overlay/simple/steel_drill
@@ -194,7 +194,7 @@
/datum/bodypart_overlay/simple/steel_drill/right
icon_state = "steel_right"
-/obj/item/organ/internal/cyberimp/arm/mining_drill/on_bodypart_insert(obj/item/bodypart/limb, movement_flags)
+/obj/item/organ/cyberimp/arm/mining_drill/on_bodypart_insert(obj/item/bodypart/limb, movement_flags)
. = ..()
if(zone == BODY_ZONE_L_ARM)
drill_overlay = new /datum/bodypart_overlay/simple/steel_drill/left
@@ -203,7 +203,7 @@
limb.add_bodypart_overlay(drill_overlay)
owner?.update_body_parts()
-/obj/item/organ/internal/cyberimp/arm/mining_drill/on_mob_remove(mob/living/carbon/arm_owner)
+/obj/item/organ/cyberimp/arm/mining_drill/on_mob_remove(mob/living/carbon/arm_owner)
. = ..()
bodypart_owner?.remove_bodypart_overlay(drill_overlay)
arm_owner.update_body_parts()
@@ -247,7 +247,7 @@
playsound(user, 'modular_doppler/modular_sounds/sound/machines/whirr.ogg', 50, FALSE)
user.visible_message(span_warning("[user] spins [src]'s bit, accelerating for a moment to thousands of RPM."), span_notice("You spin [src]'s bit, accelerating for a moment to thousands of RPM."))
-/obj/item/organ/internal/cyberimp/arm/mining_drill/diamond
+/obj/item/organ/cyberimp/arm/mining_drill/diamond
name = "\improper Dalba Masterworks 'Tunneler' Diamond Integrated Drill"
desc = "Extending from a stabilization bracer built into the upper forearm, this implant allows for a masterwork diamond mining drill to extend over the user's hand. This drill will open a hole in the universe, and that hole will be a path for those behind us!"
icon_state = "diamond"
diff --git a/modular_doppler/modular_medical/surgery/revival.dm b/modular_doppler/modular_medical/surgery/revival.dm
index 0f4f0c93aec4d..4d6f92e66ace7 100644
--- a/modular_doppler/modular_medical/surgery/revival.dm
+++ b/modular_doppler/modular_medical/surgery/revival.dm
@@ -17,7 +17,7 @@
/datum/surgery/revival/carbon/mechanic/is_valid_target(mob/living/carbon/patient)
if (!(patient.mob_biotypes & (MOB_ROBOTIC|MOB_HUMANOID)))
return FALSE
- var/obj/item/organ/internal/brain/target_brain = patient.get_organ_slot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/brain/target_brain = patient.get_organ_slot(ORGAN_SLOT_BRAIN)
return !isnull(target_brain)
/datum/surgery_step/revive/carbon/mechanic
diff --git a/modular_doppler/modular_mobs/simple_animal/megafauna/wendigo.dm b/modular_doppler/modular_mobs/simple_animal/megafauna/wendigo.dm
new file mode 100644
index 0000000000000..4a54bdd2e1c04
--- /dev/null
+++ b/modular_doppler/modular_mobs/simple_animal/megafauna/wendigo.dm
@@ -0,0 +1,20 @@
+/mob/living/simple_animal/hostile/megafauna/wendigo
+ name = "Eikþyrnir"
+ desc = "This wicked creature's striking appearance has earned it the name Eikþyrnir among the Hearthkin, \
+ after a mythological stag that eats from Yggdrasil. They have come to associate it with death, and the passage \
+ to the afterlife."
+
+/obj/projectile/colossus/wendigo_shockwave
+ name = "Eikþyrnir shockwave"
+
+/obj/item/wendigo_blood
+ name = "bottle of Eikþyrnir's blood"
+
+/obj/item/crusher_trophy/wendigo_horn
+ name = "Eikþyrnir's horn"
+ desc = "A gnarled horn ripped from the skull of Eikþyrnir. Suitable as a trophy for a kinetic crusher."
+
+/obj/item/wendigo_skull
+ name = "Eikþyrnir's skull"
+ desc = "The skull of the great beast Eikþyrnir. The bare flesh of its face gives way to old edges of gnarled \
+ flesh."
diff --git a/modular_doppler/modular_quirks/breather/accessories.dm b/modular_doppler/modular_quirks/breather/accessories.dm
index b0f99d0875ff4..f8a6aae64c2d4 100644
--- a/modular_doppler/modular_quirks/breather/accessories.dm
+++ b/modular_doppler/modular_quirks/breather/accessories.dm
@@ -20,7 +20,8 @@
/obj/item/clothing/accessory/breathing/proc/on_examine(datum/source, mob/user, list/examine_list)
SIGNAL_HANDLER
- examine_list += "[user.p_Their()] [name] reads: 'I breathe [breath_type]'."
+ var/mob/living/carbon/human/accessory_wearer = user
+ examine_list += "[accessory_wearer.p_Their()] [name] reads: 'I breathe [breath_type]'."
// Accessory for Akula species, it makes them wet and happy! :)
@@ -29,8 +30,9 @@
desc = "An expensive device manufactured for the civilian work-force of the Azulean military power. \
Relying on an internal battery, the coil mechanism synthesizes a hydrogen oxygen mixture, \
which can then be used to moisturize the wearer's skin. \n\n\
- A label on its back warns about the potential dangers of electro-magnetic pulses. \
- ctrl-click in-hand to hide the device while worn."
+ A label on its back warns about the potential dangers of electro-magnetic pulses. \n\
+ ctrl-click in-hand to hide the device while worn. \n\
+ Can also be worn inside of a pocket."
icon_state = "wetmaker"
base_icon_state = "wetmaker"
icon = 'modular_doppler/modular_cosmetics/icons/obj/accessories/accessories.dmi'
@@ -61,22 +63,33 @@
update_icon() // update that mf
return CLICK_ACTION_SUCCESS
+/mob/living/carbon/human/emp_act(severity) // necessary to still emp when worn as accessory
+ . = ..()
+ var/obj/item/clothing/under/worn_uniform = w_uniform
+ if(w_uniform)
+ for(var/obj/item/clothing/accessory/vaporizer/vaporizer in worn_uniform.attached_accessories)
+ vaporizer.on_emp()
+ break
+
/obj/item/clothing/accessory/vaporizer/emp_act(severity)
. = ..()
- var/obj/item/clothing/under/attached_to = loc
- var/mob/living/carbon/human/wearer = attached_to.loc
- if(!istype(wearer) || !istype(attached_to))
- return
- var/turf/open/tile = get_turf(wearer)
+ var/turf/open/tile = get_turf(src)
+ var/list/victims = get_hearers_in_view(4, tile)
if(istype(tile))
tile.atmos_spawn_air("[GAS_WATER_VAPOR]=50;[TURF_TEMPERATURE(1000)]")
- wearer.balloon_alert(wearer, "overloaded!")
- wearer.visible_message("[wearer] [wearer.p_their()] [src] overloads, exploding in a cloud of hot steam!")
- wearer.set_jitter_if_lower(10 SECONDS)
- playsound(wearer, 'sound/effects/spray.ogg', 80)
- detach(attached_to) // safely remove wetsuit status effect
+ tile.balloon_alert_to_viewers("overloaded!")
+ tile.visible_message("[src] overloads, exploding in a cloud of hot steam!")
+ playsound(tile, 'sound/effects/spray.ogg', 80)
+ for(var/mob/living/collateral in victims)
+ collateral.set_jitter_if_lower(15 SECONDS)
+ collateral.set_eye_blur_if_lower(5 SECONDS)
qdel(src)
+/obj/item/clothing/accessory/vaporizer/proc/on_emp()
+ var/obj/item/clothing/under/attached_to = loc
+ detach(attached_to) // safely remove wetsuit status effect
+ emp_act(EMP_LIGHT)
+
/datum/design/vaporizer
name = "Hydro-Vaporizer"
id = "vaporizer"
diff --git a/modular_doppler/modular_quirks/breather/breather_quirk.dm b/modular_doppler/modular_quirks/breather/breather_quirk.dm
new file mode 100644
index 0000000000000..f2aed9c2b54a4
--- /dev/null
+++ b/modular_doppler/modular_quirks/breather/breather_quirk.dm
@@ -0,0 +1,11 @@
+/datum/quirk/item_quirk/breather
+ abstract_parent_type = /datum/quirk/item_quirk/breather
+ icon = FA_ICON_LUNGS_VIRUS
+ var/breath_type = "oxygen"
+
+/datum/quirk/item_quirk/breather/add_unique(client/client_source)
+ var/obj/item/organ/lungs/target_lungs = quirk_holder.get_organ_slot(ORGAN_SLOT_LUNGS)
+ if(!target_lungs)
+ to_chat(quirk_holder, span_warning("Your [name] quirk couldn't properly execute due to your species/body lacking a pair of lungs!"))
+ return FALSE
+ return TRUE
diff --git a/modular_doppler/modular_quirks/breather/nitrogen_breather/nitrogen_breather.dm b/modular_doppler/modular_quirks/breather/nitrogen_breather/nitrogen_breather.dm
index 1eb1eb4078314..9cdac3a182e80 100644
--- a/modular_doppler/modular_quirks/breather/nitrogen_breather/nitrogen_breather.dm
+++ b/modular_doppler/modular_quirks/breather/nitrogen_breather/nitrogen_breather.dm
@@ -1,8 +1,3 @@
-/datum/quirk/item_quirk/breather
- abstract_parent_type = /datum/quirk/item_quirk/breather
- icon = FA_ICON_LUNGS_VIRUS
- var/breath_type = "oxygen"
-
/datum/quirk/item_quirk/breather/nitrogen_breather
name = "Nitrogen Breather"
desc = "You breathe nitrogen, even if you might not normally breathe it. Oxygen is poisonous."
@@ -13,8 +8,12 @@
breath_type = "nitrogen"
/datum/quirk/item_quirk/breather/nitrogen_breather/add_unique(client/client_source)
- var/mob/living/carbon/human/target = quirk_holder
- var/obj/item/clothing/accessory/breathing/target_tag = new(get_turf(target))
+ . = ..()
+ if(!.)
+ return
+
+ var/obj/item/organ/lungs/target_lungs = quirk_holder.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/clothing/accessory/breathing/target_tag = new(get_turf(quirk_holder))
target_tag.breath_type = breath_type
give_item_to_holder(target_tag, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS))
@@ -27,10 +26,6 @@
LOCATION_HANDS = ITEM_SLOT_HANDS
)
)
- var/obj/item/organ/internal/lungs/target_lungs = target.get_organ_slot(ORGAN_SLOT_LUNGS)
- if(!target_lungs)
- to_chat(target, span_warning("Your [name] quirk couldn't properly execute due to your species/body lacking a pair of lungs!"))
- return
// set lung vars
target_lungs.safe_oxygen_min = 0 //Dont need oxygen
target_lungs.safe_oxygen_max = 2 //But it is quite toxic
diff --git a/modular_doppler/modular_quirks/breather/water_breather/water_breather.dm b/modular_doppler/modular_quirks/breather/water_breather/water_breather.dm
index 708e25746f435..2b035f45918b4 100644
--- a/modular_doppler/modular_quirks/breather/water_breather/water_breather.dm
+++ b/modular_doppler/modular_quirks/breather/water_breather/water_breather.dm
@@ -9,8 +9,12 @@
breath_type = "water"
/datum/quirk/item_quirk/breather/water_breather/add_unique(client/client_source)
- var/mob/living/carbon/human/target = quirk_holder
- var/obj/item/clothing/accessory/breathing/target_tag = new(get_turf(target))
+ . = ..()
+ if(!.)
+ return
+
+ var/obj/item/organ/lungs/target_lungs = quirk_holder.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/clothing/accessory/breathing/target_tag = new(get_turf(quirk_holder))
target_tag.breath_type = breath_type
give_item_to_holder(target_tag, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS))
@@ -23,13 +27,8 @@
LOCATION_BACKPACK = ITEM_SLOT_BACKPACK
), "Be sure to equip your vaporizer, or you may end up choking to death!"
)
- var/obj/item/organ/internal/lungs/target_lungs = target.get_organ_slot(ORGAN_SLOT_LUNGS)
- var/obj/item/bodypart/chest/target_chest = target.get_bodypart(BODY_ZONE_CHEST)
- if(!target_lungs || !target_chest)
- to_chat(target, span_warning("Your [name] quirk couldn't properly execute due to your species/body lacking a pair of lungs!"))
- return
// if your lungs already have this trait, no need to update
- if(target_lungs.type == /obj/item/organ/internal/lungs/fish)
+ if(target_lungs.type == /obj/item/organ/lungs/fish)
return
target_lungs.safe_oxygen_min = 0
// update lung procs
@@ -39,4 +38,7 @@
// flavor
target_lungs.AddElement(/datum/element/noticable_organ, "%PRONOUN_Theyve a set of gills on %PRONOUN_their neck.", BODY_ZONE_PRECISE_MOUTH)
target_lungs.AddComponent(/datum/component/bubble_icon_override, "fish", BUBBLE_ICON_PRIORITY_ORGAN)
- target_chest.add_bodypart_overlay(new /datum/bodypart_overlay/simple/gills)
+ // add the gills overlay
+ var/obj/item/bodypart/chest/target_chest = quirk_holder.get_bodypart(BODY_ZONE_CHEST)
+ if(target_chest) // just to be sure
+ target_chest.add_bodypart_overlay(new /datum/bodypart_overlay/simple/gills)
diff --git a/modular_doppler/modular_quirks/night_vision/night_vision.dm b/modular_doppler/modular_quirks/night_vision/night_vision.dm
index f57eefdfe0361..c55e14c2a8a2b 100644
--- a/modular_doppler/modular_quirks/night_vision/night_vision.dm
+++ b/modular_doppler/modular_quirks/night_vision/night_vision.dm
@@ -21,7 +21,7 @@
/datum/quirk/night_vision/proc/refresh_quirk_holder_eyes()
var/mob/living/carbon/human/human_quirk_holder = quirk_holder
- var/obj/item/organ/internal/eyes/eyes = human_quirk_holder.get_organ_by_type(/obj/item/organ/internal/eyes)
+ var/obj/item/organ/eyes/eyes = human_quirk_holder.get_organ_by_type(/obj/item/organ/eyes)
if(!eyes)
return
// We've either added or removed TRAIT_NIGHT_VISION before calling this proc. Just refresh the eyes.
@@ -50,7 +50,7 @@
var/mob/living/carbon/human/target = quirk_holder
// if we have more sensitive eyes, increase the power
- var/obj/item/organ/internal/eyes/target_eyes = target.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/target_eyes = target.get_organ_slot(ORGAN_SLOT_EYES)
if (!istype(target_eyes))
return
var/infravision_multiplier = max(0, (-(target_eyes.flash_protect) * DOPPLER_NIGHT_VISION_SENSITIVITY_MULT)) + 1
@@ -104,7 +104,7 @@
severity = 2
if ("Sensitive")
severity = 1
- var/obj/item/organ/internal/eyes/holder_eyes = quirk_holder.get_organ_slot(ORGAN_SLOT_EYES)
+ var/obj/item/organ/eyes/holder_eyes = quirk_holder.get_organ_slot(ORGAN_SLOT_EYES)
restore_eyes(holder_eyes) // add_unique() happens after add() so we need to jank reset this to ensure sensitivity is properly applied at roundstart
check_eyes(holder_eyes)
diff --git a/modular_doppler/modular_quirks/permitted_cybernetic/permitted_cybernetic.dm b/modular_doppler/modular_quirks/permitted_cybernetic/permitted_cybernetic.dm
index e9a15bf98d88c..7e594c13ff96c 100644
--- a/modular_doppler/modular_quirks/permitted_cybernetic/permitted_cybernetic.dm
+++ b/modular_doppler/modular_quirks/permitted_cybernetic/permitted_cybernetic.dm
@@ -1,10 +1,10 @@
GLOBAL_LIST_INIT(possible_quirk_implants, list(
- "Engineering Toolset" = /obj/item/organ/internal/cyberimp/arm/toolset,
- "Surgery Toolset" = /obj/item/organ/internal/cyberimp/arm/surgery,
- "Hydroponics Toolset" = /obj/item/organ/internal/cyberimp/arm/botany,
- "Sanitation Toolset" = /obj/item/organ/internal/cyberimp/arm/janitor,
- "Razorclaw Implant" = /obj/item/organ/internal/cyberimp/arm/razor_claws,
- "Excavator Implant" = /obj/item/organ/internal/cyberimp/arm/mining_drill,
+ "Engineering Toolset" = /obj/item/organ/cyberimp/arm/toolset,
+ "Surgery Toolset" = /obj/item/organ/cyberimp/arm/surgery,
+ "Hydroponics Toolset" = /obj/item/organ/cyberimp/arm/botany,
+ "Sanitation Toolset" = /obj/item/organ/cyberimp/arm/janitor,
+ "Razorclaw Implant" = /obj/item/organ/cyberimp/arm/razor_claws,
+ "Excavator Implant" = /obj/item/organ/cyberimp/arm/mining_drill,
))
/datum/quirk/permitted_cybernetic
@@ -35,7 +35,7 @@ GLOBAL_LIST_INIT(possible_quirk_implants, list(
to_chat(human_holder, span_warning("Due to your job, the [name] quirk has been disabled."))
return
- var/obj/item/organ/internal/cybernetic = new desired_implant()
+ var/obj/item/organ/cybernetic = new desired_implant()
cybernetic.Insert(human_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED)
medical_record_text = "Patient has a company approved [cybernetic.name] installed within their body."
diff --git a/modular_doppler/modular_species/_species.dm b/modular_doppler/modular_species/_species.dm
index 4badc76aec68d..084f8423a5af7 100644
--- a/modular_doppler/modular_species/_species.dm
+++ b/modular_doppler/modular_species/_species.dm
@@ -62,45 +62,45 @@
//// Add the organs!
// tongue
- var/obj/item/organ/tongue = text2path("/obj/item/organ/internal/tongue/[animal_trait]")
+ var/obj/item/organ/tongue = text2path("/obj/item/organ/tongue/[animal_trait]")
if(tongue) // text2path nulls if it can't find a matching subtype, so don't worry adding an organ for every single trait value
mutanttongue = tongue.type
// lungs
- var/obj/item/organ/lungs = text2path("/obj/item/organ/internal/lungs/[animal_trait]")
+ var/obj/item/organ/lungs = text2path("/obj/item/organ/lungs/[animal_trait]")
if(lungs)
mutantlungs = lungs.type
else // If you have an organ that is more specific, you can add it in this switch() list
switch(animal_trait)
if(FROG)
- mutantlungs = /obj/item/organ/internal/lungs/fish/amphibious
+ mutantlungs = /obj/item/organ/lungs/fish/amphibious
// liver
- var/obj/item/organ/liver = text2path("/obj/item/organ/internal/liver/[animal_trait]")
+ var/obj/item/organ/liver = text2path("/obj/item/organ/liver/[animal_trait]")
if(liver)
mutantliver = liver.type
else
switch(animal_trait)
if(BUG)
- mutantliver = /obj/item/organ/internal/liver/roach
+ mutantliver = /obj/item/organ/liver/roach
// stomach
- var/obj/item/organ/stomach = text2path("/obj/item/organ/internal/stomach/[animal_trait]")
+ var/obj/item/organ/stomach = text2path("/obj/item/organ/stomach/[animal_trait]")
if(stomach)
mutantstomach = stomach.type
else
switch(animal_trait)
if(BUG)
- mutantstomach = /obj/item/organ/internal/stomach/roach
+ mutantstomach = /obj/item/organ/stomach/roach
// appendix
- var/obj/item/organ/appendix = text2path("/obj/item/organ/internal/appendix/[animal_trait]")
+ var/obj/item/organ/appendix = text2path("/obj/item/organ/appendix/[animal_trait]")
if(appendix)
mutantappendix = appendix.type
else
switch(animal_trait)
if(BUG)
- mutantappendix = /obj/item/organ/internal/appendix/roach
+ mutantappendix = /obj/item/organ/appendix/roach
////
// Adding remaining traits, elements, components, and more from here on
diff --git a/modular_doppler/modular_species/code/bloodsplatter.dm b/modular_doppler/modular_species/code/bloodsplatter.dm
index f4b1f4611beda..10902427cb7c4 100644
--- a/modular_doppler/modular_species/code/bloodsplatter.dm
+++ b/modular_doppler/modular_species/code/bloodsplatter.dm
@@ -92,6 +92,15 @@
blood_state = BLOOD_STATE_NOT_BLOODY
beauty = -100
+//create_splatter overwrite
+/mob/living/create_splatter(splatter_dir)
+ if(hasblueblood(src))
+ new /obj/effect/temp_visual/dir_setting/bloodsplatter/blue(get_turf(src), splatter_dir)
+ else if(hasgreenblood(src))
+ new /obj/effect/temp_visual/dir_setting/bloodsplatter/green(get_turf(src), splatter_dir)
+ else
+ new /obj/effect/temp_visual/dir_setting/bloodsplatter(get_turf(src), splatter_dir)
+
//getTrail overwrite
/mob/living/carbon/human/getTrail()
if((hasgreenblood(src)))
diff --git a/modular_doppler/modular_species/species_types/android/android.dm b/modular_doppler/modular_species/species_types/android/android.dm
index 30752cc1dcc58..1cfd3a7168848 100644
--- a/modular_doppler/modular_species/species_types/android/android.dm
+++ b/modular_doppler/modular_species/species_types/android/android.dm
@@ -36,9 +36,9 @@
)
reagent_flags = PROCESS_SYNTHETIC
body_markings = list(/datum/bodypart_overlay/simple/body_marking/lizard = "None")
- mutantheart = /obj/item/organ/internal/heart/cybernetic/tier2
- mutantstomach = /obj/item/organ/internal/stomach/cybernetic/tier2
- mutantliver = /obj/item/organ/internal/liver/cybernetic/tier2
+ mutantheart = /obj/item/organ/heart/cybernetic/tier2
+ mutantstomach = /obj/item/organ/stomach/cybernetic/tier2
+ mutantliver = /obj/item/organ/liver/cybernetic/tier2
exotic_blood = /datum/reagent/synth_blood
exotic_bloodtype = "R*"
diff --git a/modular_doppler/modular_species/species_types/golem/golem.dm b/modular_doppler/modular_species/species_types/golem/golem.dm
index 3b8013d836c42..9e0a6f94791f1 100644
--- a/modular_doppler/modular_species/species_types/golem/golem.dm
+++ b/modular_doppler/modular_species/species_types/golem/golem.dm
@@ -63,7 +63,7 @@
/datum/crafting_recipe/golem_stomach
name = "Silicate Grinder"
- result = /obj/item/organ/internal/stomach/golem
+ result = /obj/item/organ/stomach/golem
time = 120
tool_behaviors = list(TOOL_MINING)
reqs = list(/obj/item/stack/stone = 10, /obj/item/stack/sheet/plasteel = 10)
@@ -71,7 +71,7 @@
/datum/crafting_recipe/golem_liver
name = "Porous Rock"
- result = /obj/item/organ/internal/liver/golem
+ result = /obj/item/organ/liver/golem
time = 120
tool_behaviors = list(TOOL_MINING)
reqs = list(/obj/item/stack/stone = 10)
@@ -79,7 +79,7 @@
/datum/crafting_recipe/golem_tongue
name = "Golem Tongue"
- result = /obj/item/organ/internal/tongue/golem
+ result = /obj/item/organ/tongue/golem
time = 120
tool_behaviors = list(TOOL_MINING)
reqs = list(/obj/item/stack/stone = 10)
@@ -87,7 +87,7 @@
/datum/crafting_recipe/golem_eyes
name = "Resonating Crystal"
- result = /obj/item/organ/internal/eyes/golem
+ result = /obj/item/organ/eyes/golem
time = 120
tool_behaviors = list(TOOL_MINING)
reqs = list(/obj/item/stack/stone = 10, /obj/item/stack/sheet/glass = 15)
@@ -95,7 +95,7 @@
/datum/crafting_recipe/golem_appendix
name = "Internal Forge"
- result = /obj/item/organ/internal/appendix/golem
+ result = /obj/item/organ/appendix/golem
time = 120
tool_behaviors = list(TOOL_MINING)
reqs = list(/obj/item/stack/stone = 10, /obj/item/stack/sheet/mineral/plasma = 15)
diff --git a/modular_doppler/modular_species/species_types/hemophage/_organ_corruption.dm b/modular_doppler/modular_species/species_types/hemophage/_organ_corruption.dm
index 4ada14828dd33..ef5b2a1acce64 100644
--- a/modular_doppler/modular_species/species_types/hemophage/_organ_corruption.dm
+++ b/modular_doppler/modular_species/species_types/hemophage/_organ_corruption.dm
@@ -12,7 +12,7 @@
/datum/component/organ_corruption
dupe_mode = COMPONENT_DUPE_UNIQUE
/// The type of organ affected by this specific type of organ corruption.
- var/corruptable_organ_type = /obj/item/organ/internal
+ var/corruptable_organ_type = /obj/item/organ
/// If this type of organ has a unique sprite for what its corrupted
/// version should look like, this will be the icon file it will be pulled
/// from.
@@ -77,7 +77,7 @@
* Arguments:
* * corruption_target - The organ that will get corrupted.
*/
-/datum/component/organ_corruption/proc/corrupt_organ(obj/item/organ/internal/corruption_target)
+/datum/component/organ_corruption/proc/corrupt_organ(obj/item/organ/corruption_target)
SHOULD_CALL_PARENT(TRUE)
if(!corruption_target)
return FALSE
diff --git a/modular_doppler/modular_species/species_types/hemophage/atrophied_lungs.dm b/modular_doppler/modular_species/species_types/hemophage/atrophied_lungs.dm
index f83b2caaec56b..c361c5d9957aa 100644
--- a/modular_doppler/modular_species/species_types/hemophage/atrophied_lungs.dm
+++ b/modular_doppler/modular_species/species_types/hemophage/atrophied_lungs.dm
@@ -1,4 +1,4 @@
/datum/component/organ_corruption/lungs
- corruptable_organ_type = /obj/item/organ/internal/lungs
+ corruptable_organ_type = /obj/item/organ/lungs
corrupted_prefix = "atrophied"
diff --git a/modular_doppler/modular_species/species_types/hemophage/corrupted_liver.dm b/modular_doppler/modular_species/species_types/hemophage/corrupted_liver.dm
index bf0ffd10f309f..a445f36d9e313 100644
--- a/modular_doppler/modular_species/species_types/hemophage/corrupted_liver.dm
+++ b/modular_doppler/modular_species/species_types/hemophage/corrupted_liver.dm
@@ -2,7 +2,7 @@
#define MINIMUM_BLOOD_REGENING_REAGENT_RATIO 0.75
/datum/component/organ_corruption/liver
- corruptable_organ_type = /obj/item/organ/internal/liver
+ corruptable_organ_type = /obj/item/organ/liver
corrupted_icon_state = "liver"
@@ -23,7 +23,7 @@
/datum/component/organ_corruption/liver/UnregisterFromParent()
. = ..()
- var/obj/item/organ/internal/liver/parent_liver = parent
+ var/obj/item/organ/liver/parent_liver = parent
if(parent_liver.owner)
UnregisterSignal(parent_liver.owner, COMSIG_GLASS_DRANK)
diff --git a/modular_doppler/modular_species/species_types/hemophage/corrupted_stomach.dm b/modular_doppler/modular_species/species_types/hemophage/corrupted_stomach.dm
index 3af433695a9af..7cd311e3322c4 100644
--- a/modular_doppler/modular_species/species_types/hemophage/corrupted_stomach.dm
+++ b/modular_doppler/modular_species/species_types/hemophage/corrupted_stomach.dm
@@ -1,9 +1,9 @@
/datum/component/organ_corruption/stomach
- corruptable_organ_type = /obj/item/organ/internal/stomach
+ corruptable_organ_type = /obj/item/organ/stomach
corrupted_icon_state = "stomach"
-/datum/component/organ_corruption/stomach/corrupt_organ(obj/item/organ/internal/corruption_target)
+/datum/component/organ_corruption/stomach/corrupt_organ(obj/item/organ/corruption_target)
. = ..()
if(!.)
@@ -18,7 +18,7 @@
UnregisterSignal(parent, COMSIG_STOMACH_AFTER_EAT)
-/datum/component/organ_corruption/stomach/proc/on_stomach_after_eat(obj/item/organ/internal/stomach/tummy, atom/edible)
+/datum/component/organ_corruption/stomach/proc/on_stomach_after_eat(obj/item/organ/stomach/tummy, atom/edible)
SIGNAL_HANDLER
if(!istype(edible, /obj/item/food))
@@ -29,7 +29,7 @@
if(BLOODY & eaten.foodtypes) // They're good if it's BLOODY food, they're less good if it isn't.
return
- var/obj/item/organ/internal/parent_organ = parent
+ var/obj/item/organ/parent_organ = parent
if(parent_organ.owner && HAS_TRAIT(parent_organ.owner, TRAIT_AGEUSIA)) // They don't taste anything, their body shouldn't react strongly to the taste of that stuff.
return
diff --git a/modular_doppler/modular_species/species_types/hemophage/corrupted_tongue.dm b/modular_doppler/modular_species/species_types/hemophage/corrupted_tongue.dm
index 8afea50c35d52..3ffbb0866580a 100644
--- a/modular_doppler/modular_species/species_types/hemophage/corrupted_tongue.dm
+++ b/modular_doppler/modular_species/species_types/hemophage/corrupted_tongue.dm
@@ -4,19 +4,19 @@
#define BLOOD_DRAIN_MULTIPLIER_CKEY 1.15
/datum/component/organ_corruption/tongue
- corruptable_organ_type = /obj/item/organ/internal/tongue
+ corruptable_organ_type = /obj/item/organ/tongue
corrupted_icon_state = "tongue"
/// The item action given to the tongue once it was corrupted.
var/tongue_action_type = /datum/action/cooldown/hemophage/drain_victim
-/datum/component/organ_corruption/tongue/corrupt_organ(obj/item/organ/internal/corruption_target)
+/datum/component/organ_corruption/tongue/corrupt_organ(obj/item/organ/corruption_target)
. = ..()
if(!.)
return
- var/obj/item/organ/internal/tongue/corrupted_tongue = corruption_target
+ var/obj/item/organ/tongue/corrupted_tongue = corruption_target
corrupted_tongue.liked_foodtypes = BLOODY
corrupted_tongue.disliked_foodtypes = NONE
@@ -126,7 +126,7 @@
// if you drained from a human with a client, congrats
var/drained_multiplier = (is_target_human_with_client ? BLOOD_DRAIN_MULTIPLIER_CKEY : 1)
- var/obj/item/organ/internal/stomach/hemophage/stomach_reference = hemophage.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/hemophage/stomach_reference = hemophage.get_organ_slot(ORGAN_SLOT_STOMACH)
if(isnull(stomach_reference))
victim.blood_volume = clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM)
diff --git a/modular_doppler/modular_species/species_types/hemophage/hemophage_actions.dm b/modular_doppler/modular_species/species_types/hemophage/hemophage_actions.dm
index 9feaeb41ca98b..6fe324cb21b11 100644
--- a/modular_doppler/modular_species/species_types/hemophage/hemophage_actions.dm
+++ b/modular_doppler/modular_species/species_types/hemophage/hemophage_actions.dm
@@ -26,7 +26,7 @@
if(!owner || !ishuman(owner) || !target)
return
- var/obj/item/organ/internal/heart/hemophage/tumor = target
+ var/obj/item/organ/heart/hemophage/tumor = target
if(!tumor || !istype(tumor)) // This shouldn't happen, but you can never be too careful.
return
diff --git a/modular_doppler/modular_species/species_types/hemophage/hemophage_organs.dm b/modular_doppler/modular_species/species_types/hemophage/hemophage_organs.dm
index 3811d6d4b24ed..0640078803aa9 100644
--- a/modular_doppler/modular_species/species_types/hemophage/hemophage_organs.dm
+++ b/modular_doppler/modular_species/species_types/hemophage/hemophage_organs.dm
@@ -7,19 +7,19 @@
#define ORGAN_CORRUPTION_INSTANT 0
-/obj/item/organ/internal/liver/hemophage
+/obj/item/organ/liver/hemophage
name = "liver" // Name change is handled by /datum/component/organ_corruption/corrupt_organ()
desc = GENERIC_CORRUPTED_ORGAN_DESC
icon = 'modular_doppler/modular_species/species_types/hemophage/icons/hemophage_organs.dmi'
organ_flags = ORGAN_EDIBLE | ORGAN_TUMOR_CORRUPTED
-/obj/item/organ/internal/liver/hemophage/Initialize(mapload)
+/obj/item/organ/liver/hemophage/Initialize(mapload)
. = ..()
AddComponent(/datum/component/organ_corruption/liver, time_to_corrupt = ORGAN_CORRUPTION_INSTANT)
-/obj/item/organ/internal/liver/hemophage/handle_chemical(mob/living/carbon/affected_mob, datum/reagent/chem, seconds_per_tick, times_fired)
+/obj/item/organ/liver/hemophage/handle_chemical(mob/living/carbon/affected_mob, datum/reagent/chem, seconds_per_tick, times_fired)
. = ..()
// parent returned COMSIG_MOB_STOP_REAGENT_CHECK or we are failing
@@ -67,21 +67,21 @@
return TRUE
-/obj/item/organ/internal/stomach/hemophage
+/obj/item/organ/stomach/hemophage
name = "stomach" // Name change is handled by /datum/component/organ_corruption/corrupt_organ()
desc = GENERIC_CORRUPTED_ORGAN_DESC
icon = 'modular_doppler/modular_species/species_types/hemophage/icons/hemophage_organs.dmi'
organ_flags = ORGAN_EDIBLE | ORGAN_TUMOR_CORRUPTED
-/obj/item/organ/internal/stomach/hemophage/Initialize(mapload)
+/obj/item/organ/stomach/hemophage/Initialize(mapload)
. = ..()
AddComponent(/datum/component/organ_corruption/stomach, time_to_corrupt = ORGAN_CORRUPTION_INSTANT)
// I didn't feel like moving this behavior onto the component, it was just too annoying to do.
-/obj/item/organ/internal/stomach/hemophage/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/stomach/hemophage/on_life(seconds_per_tick, times_fired)
var/datum/reagent/blood/blood = reagents.has_reagent(/datum/reagent/blood)
if(blood)
blood.metabolization_rate = BLOOD_METABOLIZATION_RATE
@@ -93,7 +93,7 @@
return ..()
-/obj/item/organ/internal/tongue/hemophage
+/obj/item/organ/tongue/hemophage
name = "tongue" // Name change is handled by /datum/component/organ_corruption/corrupt_organ()
desc = GENERIC_CORRUPTED_ORGAN_DESC
icon = 'modular_doppler/modular_species/species_types/hemophage/icons/hemophage_organs.dmi'
@@ -102,7 +102,7 @@
disliked_foodtypes = NONE
-/obj/item/organ/internal/tongue/hemophage/Initialize(mapload)
+/obj/item/organ/tongue/hemophage/Initialize(mapload)
. = ..()
AddComponent(/datum/component/organ_corruption/tongue, time_to_corrupt = ORGAN_CORRUPTION_INSTANT)
diff --git a/modular_doppler/modular_species/species_types/hemophage/hemophage_species.dm b/modular_doppler/modular_species/species_types/hemophage/hemophage_species.dm
index f9e3cec230215..14372f9e7ef75 100644
--- a/modular_doppler/modular_species/species_types/hemophage/hemophage_species.dm
+++ b/modular_doppler/modular_species/species_types/hemophage/hemophage_species.dm
@@ -17,10 +17,10 @@
)
inherent_biotypes = MOB_HUMANOID | MOB_ORGANIC
exotic_bloodtype = "U"
- mutantheart = /obj/item/organ/internal/heart/hemophage
- mutantliver = /obj/item/organ/internal/liver/hemophage
- mutantstomach = /obj/item/organ/internal/stomach/hemophage
- mutanttongue = /obj/item/organ/internal/tongue/hemophage
+ mutantheart = /obj/item/organ/heart/hemophage
+ mutantliver = /obj/item/organ/liver/hemophage
+ mutantstomach = /obj/item/organ/stomach/hemophage
+ mutanttongue = /obj/item/organ/tongue/hemophage
mutantlungs = null
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT
examine_limb_id = SPECIES_HUMAN
diff --git a/modular_doppler/modular_species/species_types/hemophage/hemophage_status_effects.dm b/modular_doppler/modular_species/species_types/hemophage/hemophage_status_effects.dm
index 5d46ecf0dd2ef..2895c172c9fb0 100644
--- a/modular_doppler/modular_species/species_types/hemophage/hemophage_status_effects.dm
+++ b/modular_doppler/modular_species/species_types/hemophage/hemophage_status_effects.dm
@@ -21,7 +21,7 @@
if(!owner || !ishuman(owner))
return FALSE
- var/obj/item/organ/internal/heart/hemophage/tumor_heart = owner.get_organ_by_type(/obj/item/organ/internal/heart/hemophage)
+ var/obj/item/organ/heart/hemophage/tumor_heart = owner.get_organ_by_type(/obj/item/organ/heart/hemophage)
if(!tumor_heart)
return FALSE
@@ -36,7 +36,7 @@
if(!owner || !ishuman(owner))
return
- var/obj/item/organ/internal/heart/hemophage/tumor_heart = owner.get_organ_by_type(/obj/item/organ/internal/heart/hemophage)
+ var/obj/item/organ/heart/hemophage/tumor_heart = owner.get_organ_by_type(/obj/item/organ/heart/hemophage)
if(!tumor_heart)
return
@@ -72,7 +72,7 @@
if(!linked_alert)
return
- var/obj/item/organ/internal/heart/hemophage/tumor_heart = owner.get_organ_by_type(/obj/item/organ/internal/heart/hemophage)
+ var/obj/item/organ/heart/hemophage/tumor_heart = owner.get_organ_by_type(/obj/item/organ/heart/hemophage)
if(tumor_heart)
var/old_layer = tumor_heart.layer
var/old_plane = tumor_heart.plane
diff --git a/modular_doppler/modular_species/species_types/hemophage/hemophage_tumor.dm b/modular_doppler/modular_species/species_types/hemophage/hemophage_tumor.dm
index b8b4861353019..c516a8ba7d58b 100644
--- a/modular_doppler/modular_species/species_types/hemophage/hemophage_tumor.dm
+++ b/modular_doppler/modular_species/species_types/hemophage/hemophage_tumor.dm
@@ -15,7 +15,7 @@
#define TRAIT_TUMOR "tumor"
-/obj/item/organ/internal/heart/hemophage
+/obj/item/organ/heart/hemophage
name = "pulsating tumor"
icon = 'modular_doppler/modular_species/species_types/hemophage/icons/hemophage_organs.dmi'
icon_state = "tumor-on"
@@ -29,7 +29,7 @@
/// hud element to display our blood level
var/atom/movable/screen/hemophage/blood/blood_tracker
-/obj/item/organ/internal/heart/hemophage/Insert(mob/living/carbon/tumorful, special, movement_flags)
+/obj/item/organ/heart/hemophage/Insert(mob/living/carbon/tumorful, special, movement_flags)
. = ..()
if(!. || !owner)
return
@@ -38,7 +38,7 @@
tumorful.AddElement(/datum/element/tumor_corruption)
RegisterSignal(tumorful, COMSIG_MOB_GET_STATUS_TAB_ITEMS, PROC_REF(get_status_tab_item))
-/obj/item/organ/internal/heart/hemophage/Remove(mob/living/carbon/tumorless, special = FALSE, movement_flags)
+/obj/item/organ/heart/hemophage/Remove(mob/living/carbon/tumorless, special = FALSE, movement_flags)
. = ..()
SEND_SIGNAL(tumorless, COMSIG_PULSATING_TUMOR_REMOVED, tumorless)
@@ -63,7 +63,7 @@
hud_used.infodisplay -= blood_tracker
QDEL_NULL(blood_tracker)
-/obj/item/organ/internal/heart/hemophage/on_life(seconds_per_tick, times_fired)
+/obj/item/organ/heart/hemophage/on_life(seconds_per_tick, times_fired)
. = ..()
// A Hemophage's tumor will be able to be operated on multiple times, so
@@ -100,7 +100,7 @@
/// Simple helper proc that toggles the dormant state of the tumor, which also switches its appearance to reflect said change.
-/obj/item/organ/internal/heart/hemophage/proc/toggle_dormant_state()
+/obj/item/organ/heart/hemophage/proc/toggle_dormant_state()
is_dormant = !is_dormant
base_icon_state = is_dormant ? "[base_icon_state]-dormant" : initial(base_icon_state)
@@ -121,12 +121,12 @@
/// Simple helper proc that returns whether or not the given hemophage is in a closet subtype (but not in any bodybag subtype).
-/obj/item/organ/internal/heart/hemophage/proc/in_closet(mob/living/carbon/human/hemophage)
+/obj/item/organ/heart/hemophage/proc/in_closet(mob/living/carbon/human/hemophage)
return istype(hemophage.loc, /obj/structure/closet) && !istype(hemophage.loc, /obj/structure/closet/body_bag)
/// Simple helper proc that returns whether or not the given hemophage is in total darkness.
-/obj/item/organ/internal/heart/hemophage/proc/in_total_darkness(mob/living/carbon/human/hemophage)
+/obj/item/organ/heart/hemophage/proc/in_total_darkness(mob/living/carbon/human/hemophage)
var/turf/current_turf = get_turf(hemophage)
if(!istype(current_turf))
return FALSE
@@ -135,7 +135,7 @@
/// Whether or not we should be applying the healing status effect for the owner.
-/obj/item/organ/internal/heart/hemophage/proc/can_heal_owner_damage()
+/obj/item/organ/heart/hemophage/proc/can_heal_owner_damage()
// We handle the least expensive checks first.
if(owner.health >= owner.maxHealth || is_dormant || owner.blood_volume <= MINIMUM_VOLUME_FOR_REGEN || (!in_closet(owner) && !in_total_darkness(owner)))
return FALSE
@@ -146,7 +146,7 @@
/// Simple helper to toggle the hemophage's vulnerability (or lack thereof) based on the status of their tumor.
/// This proc contains no check whatsoever, to avoid redundancy of null checks and such.
/// That being said, it shouldn't be used by anything but the tumor, if you have to call it outside of that, you probably have gone wrong somewhere.
-/obj/item/organ/internal/heart/hemophage/proc/toggle_dormant_tumor_vulnerabilities(mob/living/carbon/human/hemophage)
+/obj/item/organ/heart/hemophage/proc/toggle_dormant_tumor_vulnerabilities(mob/living/carbon/human/hemophage)
var/datum/physiology/hemophage_physiology = hemophage.physiology
var/damage_multiplier = is_dormant ? DORMANT_DAMAGE_MULTIPLIER : 1 / DORMANT_DAMAGE_MULTIPLIER
@@ -156,7 +156,7 @@
hemophage_physiology.stamina_mod *= damage_multiplier / 2 // Doing half here so that they don't instantly hit stam-crit when hit like only once.
-/obj/item/organ/internal/heart/hemophage/proc/get_status_tab_item(mob/living/source, list/items)
+/obj/item/organ/heart/hemophage/proc/get_status_tab_item(mob/living/source, list/items)
SIGNAL_HANDLER
items += "Current blood level: [owner.blood_volume]/[BLOOD_VOLUME_MAXIMUM]"
diff --git a/modular_doppler/modular_species/species_types/hemophage/tumor_corruption.dm b/modular_doppler/modular_species/species_types/hemophage/tumor_corruption.dm
index df18d12b264c5..03743af54aa33 100644
--- a/modular_doppler/modular_species/species_types/hemophage/tumor_corruption.dm
+++ b/modular_doppler/modular_species/species_types/hemophage/tumor_corruption.dm
@@ -27,19 +27,19 @@
* Handles corrupting already-existing organs upon having the tumor be inserted in the mob.
*/
/datum/element/tumor_corruption/proc/handle_organ_corruption_on_existing_organs(mob/living/carbon/organ_enjoyer)
- var/obj/item/organ/internal/liver/liver = organ_enjoyer.get_organ_slot(ORGAN_SLOT_LIVER)
+ var/obj/item/organ/liver/liver = organ_enjoyer.get_organ_slot(ORGAN_SLOT_LIVER)
if(liver && !(liver.organ_flags & ORGAN_TUMOR_CORRUPTED))
liver.AddComponent(/datum/component/organ_corruption/liver)
- var/obj/item/organ/internal/lungs/lungs = organ_enjoyer.get_organ_slot(ORGAN_SLOT_LUNGS)
+ var/obj/item/organ/lungs/lungs = organ_enjoyer.get_organ_slot(ORGAN_SLOT_LUNGS)
if(lungs && !(lungs.organ_flags & ORGAN_TUMOR_CORRUPTED))
lungs.AddComponent(/datum/component/organ_corruption/lungs)
- var/obj/item/organ/internal/stomach/stomach = organ_enjoyer.get_organ_slot(ORGAN_SLOT_STOMACH)
+ var/obj/item/organ/stomach/stomach = organ_enjoyer.get_organ_slot(ORGAN_SLOT_STOMACH)
if(stomach && !(stomach.organ_flags & ORGAN_TUMOR_CORRUPTED))
stomach.AddComponent(/datum/component/organ_corruption/stomach)
- var/obj/item/organ/internal/tongue/tongue = organ_enjoyer.get_organ_slot(ORGAN_SLOT_TONGUE)
+ var/obj/item/organ/tongue/tongue = organ_enjoyer.get_organ_slot(ORGAN_SLOT_TONGUE)
if(tongue && !(tongue.organ_flags & ORGAN_TUMOR_CORRUPTED))
tongue.AddComponent(/datum/component/organ_corruption/tongue)
diff --git a/modular_doppler/modular_species/species_types/insectoid/insectoid.dm b/modular_doppler/modular_species/species_types/insectoid/insectoid.dm
index c9265ed005610..facce3b022165 100644
--- a/modular_doppler/modular_species/species_types/insectoid/insectoid.dm
+++ b/modular_doppler/modular_species/species_types/insectoid/insectoid.dm
@@ -31,10 +31,10 @@
BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/digitigrade/insectoid,
BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/digitigrade/insectoid,
)
- mutanttongue = /obj/item/organ/internal/tongue/bug
- mutantstomach = /obj/item/organ/internal/stomach/roach
- mutantliver = /obj/item/organ/internal/liver/roach
- mutantappendix = /obj/item/organ/internal/appendix/roach
+ mutanttongue = /obj/item/organ/tongue/bug
+ mutantstomach = /obj/item/organ/stomach/roach
+ mutantliver = /obj/item/organ/liver/roach
+ mutantappendix = /obj/item/organ/appendix/roach
/datum/outfit/insect_preview
name = "Insectoid (Species Preview)"
diff --git a/modular_doppler/modular_species/species_types/primitive_genemod/primitive_genemod.dm b/modular_doppler/modular_species/species_types/primitive_genemod/primitive_genemod.dm
index 947f77a4809a9..f3b10cde97952 100644
--- a/modular_doppler/modular_species/species_types/primitive_genemod/primitive_genemod.dm
+++ b/modular_doppler/modular_species/species_types/primitive_genemod/primitive_genemod.dm
@@ -15,8 +15,8 @@
id = SPECIES_GENEMOD_PRIMITIVE
preview_outfit = /datum/outfit/genemod_primitive_preview
- mutantlungs = /obj/item/organ/internal/lungs/icebox_adapted
- mutanteyes = /obj/item/organ/internal/eyes/low_light_adapted
+ mutantlungs = /obj/item/organ/lungs/icebox_adapted
+ mutanteyes = /obj/item/organ/eyes/low_light_adapted
species_language_holder = /datum/language_holder/primitive_genemod
language_prefs_whitelist = list(/datum/language/primitive_genemod)
diff --git a/modular_doppler/modular_species/species_types/ramatae/ramatan.dm b/modular_doppler/modular_species/species_types/ramatae/ramatan.dm
index 9646efb35ca3c..dcb34aa44538a 100644
--- a/modular_doppler/modular_species/species_types/ramatae/ramatan.dm
+++ b/modular_doppler/modular_species/species_types/ramatae/ramatan.dm
@@ -28,13 +28,13 @@
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID
body_markings = list(/datum/bodypart_overlay/simple/body_marking/lizard = "None")
mutant_organs = list(
- /obj/item/organ/internal/ears = "Ramatan",
- /obj/item/organ/external/frills = "None",
- /obj/item/organ/external/snout = "Ramatan",
- /obj/item/organ/external/tail/alien = "Ramatan",
+ /obj/item/organ/ears = "Ramatan",
+ /obj/item/organ/frills = "None",
+ /obj/item/organ/snout = "Ramatan",
+ /obj/item/organ/tail/alien = "Ramatan",
)
payday_modifier = 1.0
- mutanttongue = /obj/item/organ/internal/tongue/ramatan
+ mutanttongue = /obj/item/organ/tongue/ramatan
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
death_sound = 'modular_doppler/modular_species/species_types/ramatae/sounds/scugdeath.ogg'
species_language_holder = /datum/language_holder/ramatan
@@ -154,8 +154,8 @@
/datum/species/ramatan/get_sigh_sound(mob/living/carbon/human/ramatan)
if(ramatan.physique == FEMALE)
- return 'sound/mobs/humanoids/human/sigh/female_sigh.ogg'
- return 'sound/mobs/humanoids/human/sigh/male_sigh.ogg'
+ return SFX_FEMALE_SIGH
+ return SFX_MALE_SIGH
/datum/species/ramatan/get_sniff_sound(mob/living/carbon/human/ramatan)
if(ramatan.physique == FEMALE)
diff --git a/modular_doppler/modular_species/species_types/ramatae/ramatan_organs.dm b/modular_doppler/modular_species/species_types/ramatae/ramatan_organs.dm
index b477dcc9ec58c..60a3b444d1951 100644
--- a/modular_doppler/modular_species/species_types/ramatae/ramatan_organs.dm
+++ b/modular_doppler/modular_species/species_types/ramatae/ramatan_organs.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/tongue/ramatan
+/obj/item/organ/tongue/ramatan
name = "ramatan tongue"
desc = "A long tongue found in Ramatae; generally rarely used for speech."
liked_foodtypes = RAW | MEAT | SEAFOOD | BUGS | FRUIT
diff --git a/modular_doppler/modular_species/species_types/snails/modular_snail.dm b/modular_doppler/modular_species/species_types/snails/modular_snail.dm
index 31b7048f25a92..6382911bf3e3c 100644
--- a/modular_doppler/modular_species/species_types/snails/modular_snail.dm
+++ b/modular_doppler/modular_species/species_types/snails/modular_snail.dm
@@ -2,8 +2,8 @@
/datum/species/snail
preview_outfit = /datum/outfit/snail_preview
- mutantliver = /obj/item/organ/internal/liver/snail //This is just a better liver to deal with toxins, it's a thematic thing.
- mutantheart = /obj/item/organ/internal/heart/snail //This gives them the shell buff where they take less damage from behind, and their heart's more durable.
+ mutantliver = /obj/item/organ/liver/snail //This is just a better liver to deal with toxins, it's a thematic thing.
+ mutantheart = /obj/item/organ/heart/snail //This gives them the shell buff where they take less damage from behind, and their heart's more durable.
exotic_blood = /datum/reagent/bug_blood
exotic_bloodtype = "I*"
diff --git a/modular_doppler/modular_species/species_types/snails/organs/snail_heart.dm b/modular_doppler/modular_species/species_types/snails/organs/snail_heart.dm
index 1883a738d6a0c..41b994e6040be 100644
--- a/modular_doppler/modular_species/species_types/snails/organs/snail_heart.dm
+++ b/modular_doppler/modular_species/species_types/snails/organs/snail_heart.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/heart/snail
+/obj/item/organ/heart/snail
name = "twin gastropod hearts"
desc = "A primary heart normally nestled inside a gastropod's shell, and another in the owner's actual chest; necessary to maintain ample bloodflow through essentially two torsos."
icon = 'modular_doppler/modular_species/species_types/snails/icons/organs/snail_heart.dmi'
@@ -9,7 +9,7 @@
COOLDOWN_DECLARE(shell_effect_cd)
-/obj/item/organ/internal/heart/snail/on_mob_insert(mob/living/carbon/organ_owner, special)
+/obj/item/organ/heart/snail/on_mob_insert(mob/living/carbon/organ_owner, special)
. = ..()
if(!ishuman(organ_owner))
return
@@ -22,7 +22,7 @@
RegisterSignal(human_owner, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, PROC_REF(modify_damage))
RegisterSignal(human_owner, COMSIG_MOB_AFTER_APPLY_DAMAGE, PROC_REF(do_block_effect))
-/obj/item/organ/internal/heart/snail/on_mob_remove(mob/living/carbon/organ_owner, special)
+/obj/item/organ/heart/snail/on_mob_remove(mob/living/carbon/organ_owner, special)
. = ..()
if(!ishuman(organ_owner) || QDELETED(organ_owner))
return
@@ -36,7 +36,7 @@
*
* Adds a 0.5 modifier to attacks from the back, code borrowed (wholesale) from the roach heart.
*/
-/obj/item/organ/internal/heart/snail/proc/modify_damage(mob/living/carbon/human/source, list/damage_mods, damage_amount, damagetype, def_zone, sharpness, attack_direction, obj/item/attacking_item)
+/obj/item/organ/heart/snail/proc/modify_damage(mob/living/carbon/human/source, list/damage_mods, damage_amount, damagetype, def_zone, sharpness, attack_direction, obj/item/attacking_item)
SIGNAL_HANDLER
if(!is_blocking(source, damage_amount, damagetype, attack_direction))
@@ -49,7 +49,7 @@
*
* Does a special effect if we blocked damage with our shell.
*/
-/obj/item/organ/internal/heart/snail/proc/do_block_effect(mob/living/carbon/human/source, damage_dealt, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, obj/item/attacking_item)
+/obj/item/organ/heart/snail/proc/do_block_effect(mob/living/carbon/human/source, damage_dealt, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, obj/item/attacking_item)
SIGNAL_HANDLER
if(!is_blocking(source, damage_dealt, damagetype, attack_direction))
@@ -62,7 +62,7 @@
COOLDOWN_START(src, shell_effect_cd, 3 SECONDS) // Cooldown resets EVERY time we get hit
/// Checks if the passed mob is in a valid state to be blocking damage with the snail shell
-/obj/item/organ/internal/heart/snail/proc/is_blocking(mob/living/carbon/human/blocker, damage_amount, damagetype, attack_direction)
+/obj/item/organ/heart/snail/proc/is_blocking(mob/living/carbon/human/blocker, damage_amount, damagetype, attack_direction)
if(damage_amount < 5 || damagetype != BRUTE || !attack_direction)
return
if(!ishuman(blocker) || blocker.stat >= UNCONSCIOUS)
diff --git a/modular_doppler/modular_species/species_types/snails/organs/snail_liver.dm b/modular_doppler/modular_species/species_types/snails/organs/snail_liver.dm
index 392b2a999c6e8..4557c323c4c63 100644
--- a/modular_doppler/modular_species/species_types/snails/organs/snail_liver.dm
+++ b/modular_doppler/modular_species/species_types/snails/organs/snail_liver.dm
@@ -1,4 +1,4 @@
-/obj/item/organ/internal/liver/snail
+/obj/item/organ/liver/snail
name = "gastropod liver"
icon = 'modular_doppler/modular_species/species_types/snails/icons/organs/snail_liver.dmi'
icon_state = "liver-snail"
diff --git a/modular_doppler/research/designs/limbgrower_designs.dm b/modular_doppler/research/designs/limbgrower_designs.dm
index 224265fd68a0b..45d5fd3e2f47e 100644
--- a/modular_doppler/research/designs/limbgrower_designs.dm
+++ b/modular_doppler/research/designs/limbgrower_designs.dm
@@ -21,7 +21,7 @@
/datum/design/tongue/ramatan
name = "Ramatan Tongue"
id = "ramatantongue"
- build_path = /obj/item/organ/internal/tongue/ramatan
+ build_path = /obj/item/organ/tongue/ramatan
category = list(
SPECIES_RAMATAN,
RND_CATEGORY_INITIAL,
@@ -30,7 +30,7 @@
/datum/design/tongue/snail
name = "Snail Tongue"
id = "snailtongue"
- build_path = /obj/item/organ/internal/tongue/snail
+ build_path = /obj/item/organ/tongue/snail
category = list(
SPECIES_SNAIL,
RND_CATEGORY_INITIAL,
@@ -39,7 +39,7 @@
/datum/design/liver/snail
name = "Snail Liver"
id = "snailliver"
- build_path = /obj/item/organ/internal/liver/snail
+ build_path = /obj/item/organ/liver/snail
category = list(
SPECIES_SNAIL,
RND_CATEGORY_INITIAL,
@@ -48,7 +48,7 @@
/datum/design/heart/snail
name = "Snail Heart"
id = "snailheart"
- build_path = /obj/item/organ/internal/heart/snail
+ build_path = /obj/item/organ/heart/snail
category = list(
SPECIES_SNAIL,
RND_CATEGORY_INITIAL,
@@ -57,7 +57,7 @@
/datum/design/ears/cat
name = "Cat Ears, Variety"
id = "catearsvariety"
- build_path = /obj/item/organ/internal/ears/cat
+ build_path = /obj/item/organ/ears/cat
category = list(
SPECIES_HUMAN,
RND_CATEGORY_INITIAL,
@@ -66,7 +66,7 @@
/datum/design/ears/lizard
name = "Lizard Ears"
id = "lizardears"
- build_path = /obj/item/organ/internal/ears/lizard
+ build_path = /obj/item/organ/ears/lizard
category = list(
SPECIES_HUMAN,
RND_CATEGORY_INITIAL,
@@ -75,7 +75,7 @@
/datum/design/ears/fox
name = "Fox Ears"
id = "foxears"
- build_path = /obj/item/organ/internal/ears/fox
+ build_path = /obj/item/organ/ears/fox
category = list(
SPECIES_HUMAN,
RND_CATEGORY_INITIAL,
@@ -84,7 +84,7 @@
/datum/design/ears/dog
name = "Dog Ears"
id = "dogears"
- build_path = /obj/item/organ/internal/ears/dog
+ build_path = /obj/item/organ/ears/dog
category = list(
SPECIES_HUMAN,
RND_CATEGORY_INITIAL,
@@ -93,7 +93,7 @@
/datum/design/ears/bunny
name = "Bunny Ears"
id = "bunnyears"
- build_path = /obj/item/organ/internal/ears/bunny
+ build_path = /obj/item/organ/ears/bunny
category = list(
SPECIES_HUMAN,
RND_CATEGORY_INITIAL,
@@ -102,7 +102,7 @@
/datum/design/ears/bird
name = "Bird Ears"
id = "birdears"
- build_path = /obj/item/organ/internal/ears/bird
+ build_path = /obj/item/organ/ears/bird
category = list(
SPECIES_HUMAN,
RND_CATEGORY_INITIAL,
@@ -111,7 +111,7 @@
/datum/design/ears/mouse
name = "Mouse Ears"
id = "mouseears"
- build_path = /obj/item/organ/internal/ears/mouse
+ build_path = /obj/item/organ/ears/mouse
category = list(
SPECIES_HUMAN,
RND_CATEGORY_INITIAL,
@@ -120,7 +120,7 @@
/datum/design/ears/monkey
name = "Monkey Ears"
id = "monkeyears"
- build_path = /obj/item/organ/internal/ears/monkey
+ build_path = /obj/item/organ/ears/monkey
category = list(
SPECIES_HUMAN,
RND_CATEGORY_INITIAL,
@@ -129,7 +129,7 @@
/datum/design/ears/deer
name = "Deer Ears"
id = "deerears"
- build_path = /obj/item/organ/internal/ears/deer
+ build_path = /obj/item/organ/ears/deer
category = list(
SPECIES_HUMAN,
RND_CATEGORY_INITIAL,
@@ -138,7 +138,7 @@
/datum/design/ears/fish
name = "Fish Ears"
id = "fishears"
- build_path = /obj/item/organ/internal/ears/fish
+ build_path = /obj/item/organ/ears/fish
category = list(
SPECIES_HUMAN,
RND_CATEGORY_INITIAL,
@@ -147,7 +147,7 @@
/datum/design/ears/bug
name = "Bug Ears"
id = "bugears"
- build_path = /obj/item/organ/internal/ears/bug
+ build_path = /obj/item/organ/ears/bug
category = list(
SPECIES_HUMAN,
RND_CATEGORY_INITIAL,
@@ -156,7 +156,7 @@
/datum/design/ears/humanoid
name = "Humanoid Ears"
id = "humanoidears"
- build_path = /obj/item/organ/internal/ears/humanoid
+ build_path = /obj/item/organ/ears/humanoid
category = list(
SPECIES_HUMAN,
RND_CATEGORY_INITIAL,
@@ -166,7 +166,7 @@
name = "Mouse Tail"
id = "mousetail"
build_type = LIMBGROWER
- build_path = /obj/item/organ/external/tail/mouse
+ build_path = /obj/item/organ/tail/mouse
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 25)
category = list(
RND_CATEGORY_LIMBS_OTHER,
@@ -176,7 +176,7 @@
/datum/design/tail/dog
name = "Dog Tail"
id = "dogtail"
- build_path = /obj/item/organ/external/tail/dog
+ build_path = /obj/item/organ/tail/dog
category = list(
RND_CATEGORY_LIMBS_OTHER,
RND_CATEGORY_INITIAL,
@@ -185,7 +185,7 @@
/datum/design/tail/fox
name = "Fox Tail"
id = "foxtail"
- build_path = /obj/item/organ/external/tail/fox
+ build_path = /obj/item/organ/tail/fox
category = list(
RND_CATEGORY_LIMBS_OTHER,
RND_CATEGORY_INITIAL,
@@ -194,7 +194,7 @@
/datum/design/tail/bunny
name = "Bunny Tail"
id = "bunnytail"
- build_path = /obj/item/organ/external/tail/bunny
+ build_path = /obj/item/organ/tail/bunny
category = list(
RND_CATEGORY_LIMBS_OTHER,
RND_CATEGORY_INITIAL,
@@ -203,7 +203,7 @@
/datum/design/tail/bird
name = "Bird Tail"
id = "birdtail"
- build_path = /obj/item/organ/external/tail/bird
+ build_path = /obj/item/organ/tail/bird
category = list(
RND_CATEGORY_LIMBS_OTHER,
RND_CATEGORY_INITIAL,
@@ -212,7 +212,7 @@
/datum/design/tail/bug
name = "Bug Tail"
id = "bugtail"
- build_path = /obj/item/organ/external/tail/bug
+ build_path = /obj/item/organ/tail/bug
category = list(
RND_CATEGORY_LIMBS_OTHER,
RND_CATEGORY_INITIAL,
@@ -221,7 +221,7 @@
/datum/design/tail/deer
name = "Deer Tail"
id = "deertail"
- build_path = /obj/item/organ/external/tail/deer
+ build_path = /obj/item/organ/tail/deer
category = list(
RND_CATEGORY_LIMBS_OTHER,
RND_CATEGORY_INITIAL,
@@ -230,7 +230,7 @@
/datum/design/tail/fish
name = "Fish Tail"
id = "fishtail"
- build_path = /obj/item/organ/external/tail/fish
+ build_path = /obj/item/organ/tail/fish
category = list(
RND_CATEGORY_LIMBS_OTHER,
RND_CATEGORY_INITIAL,
@@ -239,7 +239,7 @@
/datum/design/tail/humanoid
name = "Humanoid Tail"
id = "humanoidtail"
- build_path = /obj/item/organ/external/tail/humanoid
+ build_path = /obj/item/organ/tail/humanoid
category = list(
RND_CATEGORY_LIMBS_OTHER,
RND_CATEGORY_INITIAL,
diff --git a/modular_doppler/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm b/modular_doppler/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm
index afed67fefe23b..05ec434613be1 100644
--- a/modular_doppler/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm
+++ b/modular_doppler/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm
@@ -3,7 +3,7 @@ GLOBAL_LIST_INIT(tier1_reward, list(
/obj/item/stack/sheet/sinew = 1,
/obj/item/stack/sheet/animalhide/goliath_hide = 1,
/obj/item/stack/sheet/bone = 1,
- /obj/item/organ/internal/monster_core/regenerative_core/legion = 1,
+ /obj/item/organ/monster_core/regenerative_core/legion = 1,
))
GLOBAL_LIST_INIT(tier2_reward, list(
@@ -78,7 +78,7 @@ GLOBAL_LIST_INIT(animal_reward, list(
/obj/item/stack/sheet/sinew = 1,
/obj/item/stack/sheet/animalhide/goliath_hide = 1,
/obj/item/stack/sheet/bone = 1,
- /obj/item/organ/internal/monster_core/regenerative_core/legion = 1,
+ /obj/item/organ/monster_core/regenerative_core/legion = 1,
))
GLOBAL_LIST_INIT(alien_reward, list(
diff --git a/sound/ambience/aurora_caelus/aurora_caelus.ogg b/sound/ambience/aurora_caelus/aurora_caelus.ogg
index 908cd4d396196..7feaaaf7e2b94 100644
Binary files a/sound/ambience/aurora_caelus/aurora_caelus.ogg and b/sound/ambience/aurora_caelus/aurora_caelus.ogg differ
diff --git a/sound/ambience/aurora_caelus/aurora_caelus_short.ogg b/sound/ambience/aurora_caelus/aurora_caelus_short.ogg
index f6d1acaa2fe96..a86063c8d537a 100644
Binary files a/sound/ambience/aurora_caelus/aurora_caelus_short.ogg and b/sound/ambience/aurora_caelus/aurora_caelus_short.ogg differ
diff --git a/sound/ambience/beach/seag1.ogg b/sound/ambience/beach/seag1.ogg
index 8b26eeefc4d82..a03f4dd86a29d 100644
Binary files a/sound/ambience/beach/seag1.ogg and b/sound/ambience/beach/seag1.ogg differ
diff --git a/sound/ambience/beach/seag2.ogg b/sound/ambience/beach/seag2.ogg
index b0c714b77b98b..69a3f39d9f700 100644
Binary files a/sound/ambience/beach/seag2.ogg and b/sound/ambience/beach/seag2.ogg differ
diff --git a/sound/ambience/beach/seag3.ogg b/sound/ambience/beach/seag3.ogg
index 6385e87e1d962..598f629b72b1d 100644
Binary files a/sound/ambience/beach/seag3.ogg and b/sound/ambience/beach/seag3.ogg differ
diff --git a/sound/ambience/beach/shore.ogg b/sound/ambience/beach/shore.ogg
index d3edf179616aa..602105c4740fd 100644
Binary files a/sound/ambience/beach/shore.ogg and b/sound/ambience/beach/shore.ogg differ
diff --git a/sound/ambience/earth_rumble/earth_rumble.ogg b/sound/ambience/earth_rumble/earth_rumble.ogg
index df1241d6896af..b6d28c61143f7 100644
Binary files a/sound/ambience/earth_rumble/earth_rumble.ogg and b/sound/ambience/earth_rumble/earth_rumble.ogg differ
diff --git a/sound/ambience/earth_rumble/earth_rumble_distant1.ogg b/sound/ambience/earth_rumble/earth_rumble_distant1.ogg
index c6f37b27f3c28..25535d89e3136 100644
Binary files a/sound/ambience/earth_rumble/earth_rumble_distant1.ogg and b/sound/ambience/earth_rumble/earth_rumble_distant1.ogg differ
diff --git a/sound/ambience/earth_rumble/earth_rumble_distant2.ogg b/sound/ambience/earth_rumble/earth_rumble_distant2.ogg
index 1a0777d8c7cd1..e5caf1d06fbf6 100644
Binary files a/sound/ambience/earth_rumble/earth_rumble_distant2.ogg and b/sound/ambience/earth_rumble/earth_rumble_distant2.ogg differ
diff --git a/sound/ambience/earth_rumble/earth_rumble_distant3.ogg b/sound/ambience/earth_rumble/earth_rumble_distant3.ogg
index aad0d0645a33b..ca4e8b6d99787 100644
Binary files a/sound/ambience/earth_rumble/earth_rumble_distant3.ogg and b/sound/ambience/earth_rumble/earth_rumble_distant3.ogg differ
diff --git a/sound/ambience/earth_rumble/earth_rumble_distant4.ogg b/sound/ambience/earth_rumble/earth_rumble_distant4.ogg
index 23b4ae86c452e..0ecbe06b0b7a3 100644
Binary files a/sound/ambience/earth_rumble/earth_rumble_distant4.ogg and b/sound/ambience/earth_rumble/earth_rumble_distant4.ogg differ
diff --git a/sound/ambience/engineering/ambiatmos.ogg b/sound/ambience/engineering/ambiatmos.ogg
index c832c677d5e46..e617819e9c3ab 100644
Binary files a/sound/ambience/engineering/ambiatmos.ogg and b/sound/ambience/engineering/ambiatmos.ogg differ
diff --git a/sound/ambience/engineering/ambiatmos2.ogg b/sound/ambience/engineering/ambiatmos2.ogg
index 9651049c25b0c..30374740552f6 100644
Binary files a/sound/ambience/engineering/ambiatmos2.ogg and b/sound/ambience/engineering/ambiatmos2.ogg differ
diff --git a/sound/ambience/engineering/ambisin1.ogg b/sound/ambience/engineering/ambisin1.ogg
index a31c7b226e924..db6c34db1c45e 100644
Binary files a/sound/ambience/engineering/ambisin1.ogg and b/sound/ambience/engineering/ambisin1.ogg differ
diff --git a/sound/ambience/engineering/ambisin2.ogg b/sound/ambience/engineering/ambisin2.ogg
index fbac9a73e925b..5d983ab880981 100644
Binary files a/sound/ambience/engineering/ambisin2.ogg and b/sound/ambience/engineering/ambisin2.ogg differ
diff --git a/sound/ambience/engineering/ambisin3.ogg b/sound/ambience/engineering/ambisin3.ogg
index c71d1ae2936dc..f568cbd482be1 100644
Binary files a/sound/ambience/engineering/ambisin3.ogg and b/sound/ambience/engineering/ambisin3.ogg differ
diff --git a/sound/ambience/engineering/ambisin4.ogg b/sound/ambience/engineering/ambisin4.ogg
index 76be2ef85c600..93f660586a280 100644
Binary files a/sound/ambience/engineering/ambisin4.ogg and b/sound/ambience/engineering/ambisin4.ogg differ
diff --git a/sound/ambience/engineering/ambitech.ogg b/sound/ambience/engineering/ambitech.ogg
index 5f21514e5c40a..96a5c4c080552 100644
Binary files a/sound/ambience/engineering/ambitech.ogg and b/sound/ambience/engineering/ambitech.ogg differ
diff --git a/sound/ambience/engineering/ambitech2.ogg b/sound/ambience/engineering/ambitech2.ogg
index bd6428bff3e8e..b3042f15ffaba 100644
Binary files a/sound/ambience/engineering/ambitech2.ogg and b/sound/ambience/engineering/ambitech2.ogg differ
diff --git a/sound/ambience/engineering/ambitech3.ogg b/sound/ambience/engineering/ambitech3.ogg
index effd23b13265c..c71c3bbf3d082 100644
Binary files a/sound/ambience/engineering/ambitech3.ogg and b/sound/ambience/engineering/ambitech3.ogg differ
diff --git a/sound/ambience/general/ambigen1.ogg b/sound/ambience/general/ambigen1.ogg
index 500f0a0bbf6a1..48a27965f0689 100644
Binary files a/sound/ambience/general/ambigen1.ogg and b/sound/ambience/general/ambigen1.ogg differ
diff --git a/sound/ambience/general/ambigen10.ogg b/sound/ambience/general/ambigen10.ogg
index 604a013a5e26e..4542e3dd43860 100644
Binary files a/sound/ambience/general/ambigen10.ogg and b/sound/ambience/general/ambigen10.ogg differ
diff --git a/sound/ambience/general/ambigen11.ogg b/sound/ambience/general/ambigen11.ogg
index 522aec4afe4bf..f914cf79f7d1a 100644
Binary files a/sound/ambience/general/ambigen11.ogg and b/sound/ambience/general/ambigen11.ogg differ
diff --git a/sound/ambience/general/ambigen12.ogg b/sound/ambience/general/ambigen12.ogg
index 2b82bc33348c4..e635700b4e619 100644
Binary files a/sound/ambience/general/ambigen12.ogg and b/sound/ambience/general/ambigen12.ogg differ
diff --git a/sound/ambience/general/ambigen13.ogg b/sound/ambience/general/ambigen13.ogg
index 30171814adbb0..59dd60188f367 100644
Binary files a/sound/ambience/general/ambigen13.ogg and b/sound/ambience/general/ambigen13.ogg differ
diff --git a/sound/ambience/general/ambigen14.ogg b/sound/ambience/general/ambigen14.ogg
index 63afd437a653a..0871b665fd82f 100644
Binary files a/sound/ambience/general/ambigen14.ogg and b/sound/ambience/general/ambigen14.ogg differ
diff --git a/sound/ambience/general/ambigen2.ogg b/sound/ambience/general/ambigen2.ogg
index 6e7372811d21b..bac84525eb32e 100644
Binary files a/sound/ambience/general/ambigen2.ogg and b/sound/ambience/general/ambigen2.ogg differ
diff --git a/sound/ambience/general/ambigen3.ogg b/sound/ambience/general/ambigen3.ogg
index bf7237cc70b8e..36155feefd134 100644
Binary files a/sound/ambience/general/ambigen3.ogg and b/sound/ambience/general/ambigen3.ogg differ
diff --git a/sound/ambience/general/ambigen4.ogg b/sound/ambience/general/ambigen4.ogg
index 90cc999b32d6b..99033919a3ed6 100644
Binary files a/sound/ambience/general/ambigen4.ogg and b/sound/ambience/general/ambigen4.ogg differ
diff --git a/sound/ambience/general/ambigen5.ogg b/sound/ambience/general/ambigen5.ogg
index ae366e1359dff..9cfe5a625fe9e 100644
Binary files a/sound/ambience/general/ambigen5.ogg and b/sound/ambience/general/ambigen5.ogg differ
diff --git a/sound/ambience/general/ambigen6.ogg b/sound/ambience/general/ambigen6.ogg
index be3cf1b7032c7..1557ad6fba70a 100644
Binary files a/sound/ambience/general/ambigen6.ogg and b/sound/ambience/general/ambigen6.ogg differ
diff --git a/sound/ambience/general/ambigen7.ogg b/sound/ambience/general/ambigen7.ogg
index 9562178a2be22..8311866ba91f1 100644
Binary files a/sound/ambience/general/ambigen7.ogg and b/sound/ambience/general/ambigen7.ogg differ
diff --git a/sound/ambience/general/ambigen8.ogg b/sound/ambience/general/ambigen8.ogg
index 4214afd9b8b88..fc6362594e79a 100644
Binary files a/sound/ambience/general/ambigen8.ogg and b/sound/ambience/general/ambigen8.ogg differ
diff --git a/sound/ambience/general/ambigen9.ogg b/sound/ambience/general/ambigen9.ogg
index 2a8177f274d2f..b51e0e36cf124 100644
Binary files a/sound/ambience/general/ambigen9.ogg and b/sound/ambience/general/ambigen9.ogg differ
diff --git a/sound/ambience/general/shipambience.ogg b/sound/ambience/general/shipambience.ogg
index 68a9182fa6672..4002371bd18d7 100644
Binary files a/sound/ambience/general/shipambience.ogg and b/sound/ambience/general/shipambience.ogg differ
diff --git a/sound/ambience/holy/ambicha1.ogg b/sound/ambience/holy/ambicha1.ogg
index 4055a831b577d..d2c86806c91c7 100644
Binary files a/sound/ambience/holy/ambicha1.ogg and b/sound/ambience/holy/ambicha1.ogg differ
diff --git a/sound/ambience/holy/ambicha2.ogg b/sound/ambience/holy/ambicha2.ogg
index c95f16af0849e..8a2d1b3c34d52 100644
Binary files a/sound/ambience/holy/ambicha2.ogg and b/sound/ambience/holy/ambicha2.ogg differ
diff --git a/sound/ambience/holy/ambicha3.ogg b/sound/ambience/holy/ambicha3.ogg
index 6297f7df1c49f..3dc88b66e880b 100644
Binary files a/sound/ambience/holy/ambicha3.ogg and b/sound/ambience/holy/ambicha3.ogg differ
diff --git a/sound/ambience/holy/ambicha4.ogg b/sound/ambience/holy/ambicha4.ogg
index 1139fa7797a9f..876a5150fdde7 100644
Binary files a/sound/ambience/holy/ambicha4.ogg and b/sound/ambience/holy/ambicha4.ogg differ
diff --git a/sound/ambience/holy/ambiholy.ogg b/sound/ambience/holy/ambiholy.ogg
index cd53dc2789c56..e07bf02d96daf 100644
Binary files a/sound/ambience/holy/ambiholy.ogg and b/sound/ambience/holy/ambiholy.ogg differ
diff --git a/sound/ambience/holy/ambiholy2.ogg b/sound/ambience/holy/ambiholy2.ogg
index 4532dd0a81526..d94b69401e9c6 100644
Binary files a/sound/ambience/holy/ambiholy2.ogg and b/sound/ambience/holy/ambiholy2.ogg differ
diff --git a/sound/ambience/holy/ambiholy3.ogg b/sound/ambience/holy/ambiholy3.ogg
index 93f7a897e1ce6..a4b6a09815367 100644
Binary files a/sound/ambience/holy/ambiholy3.ogg and b/sound/ambience/holy/ambiholy3.ogg differ
diff --git a/sound/ambience/icemoon/ambiicemelody1.ogg b/sound/ambience/icemoon/ambiicemelody1.ogg
index 1f491741e0391..c702081084eac 100644
Binary files a/sound/ambience/icemoon/ambiicemelody1.ogg and b/sound/ambience/icemoon/ambiicemelody1.ogg differ
diff --git a/sound/ambience/icemoon/ambiicemelody2.ogg b/sound/ambience/icemoon/ambiicemelody2.ogg
index ef1264690b5d9..d661a3c77172f 100644
Binary files a/sound/ambience/icemoon/ambiicemelody2.ogg and b/sound/ambience/icemoon/ambiicemelody2.ogg differ
diff --git a/sound/ambience/icemoon/ambiicemelody3.ogg b/sound/ambience/icemoon/ambiicemelody3.ogg
index c6e5b23e81547..c11dbca984e91 100644
Binary files a/sound/ambience/icemoon/ambiicemelody3.ogg and b/sound/ambience/icemoon/ambiicemelody3.ogg differ
diff --git a/sound/ambience/icemoon/ambiicemelody4.ogg b/sound/ambience/icemoon/ambiicemelody4.ogg
index d977bb412e09a..8d2913e501d7a 100644
Binary files a/sound/ambience/icemoon/ambiicemelody4.ogg and b/sound/ambience/icemoon/ambiicemelody4.ogg differ
diff --git a/sound/ambience/icemoon/ambiicesting1.ogg b/sound/ambience/icemoon/ambiicesting1.ogg
index 1af26c712ba93..641a4f6441a2b 100644
Binary files a/sound/ambience/icemoon/ambiicesting1.ogg and b/sound/ambience/icemoon/ambiicesting1.ogg differ
diff --git a/sound/ambience/icemoon/ambiicesting2.ogg b/sound/ambience/icemoon/ambiicesting2.ogg
index 63c10a5659b34..47dc4554390ac 100644
Binary files a/sound/ambience/icemoon/ambiicesting2.ogg and b/sound/ambience/icemoon/ambiicesting2.ogg differ
diff --git a/sound/ambience/icemoon/ambiicesting3.ogg b/sound/ambience/icemoon/ambiicesting3.ogg
index f8bd3703933ba..009a91f46ce0b 100644
Binary files a/sound/ambience/icemoon/ambiicesting3.ogg and b/sound/ambience/icemoon/ambiicesting3.ogg differ
diff --git a/sound/ambience/icemoon/ambiicesting4.ogg b/sound/ambience/icemoon/ambiicesting4.ogg
index 461547cea0786..aaa0bfb2d8024 100644
Binary files a/sound/ambience/icemoon/ambiicesting4.ogg and b/sound/ambience/icemoon/ambiicesting4.ogg differ
diff --git a/sound/ambience/icemoon/ambiicesting5.ogg b/sound/ambience/icemoon/ambiicesting5.ogg
index 7eab5ca9236a3..7be96befa4b4b 100644
Binary files a/sound/ambience/icemoon/ambiicesting5.ogg and b/sound/ambience/icemoon/ambiicesting5.ogg differ
diff --git a/sound/ambience/icemoon/ambiicetheme.ogg b/sound/ambience/icemoon/ambiicetheme.ogg
index ca011bb214660..0386b06098742 100644
Binary files a/sound/ambience/icemoon/ambiicetheme.ogg and b/sound/ambience/icemoon/ambiicetheme.ogg differ
diff --git a/sound/ambience/lavaland/ambicave.ogg b/sound/ambience/lavaland/ambicave.ogg
index dac8135f8e3fe..58cc470759bdf 100644
Binary files a/sound/ambience/lavaland/ambicave.ogg and b/sound/ambience/lavaland/ambicave.ogg differ
diff --git a/sound/ambience/lavaland/ambilava1.ogg b/sound/ambience/lavaland/ambilava1.ogg
index 50cd0b23d5e1f..f47f7015682c7 100644
Binary files a/sound/ambience/lavaland/ambilava1.ogg and b/sound/ambience/lavaland/ambilava1.ogg differ
diff --git a/sound/ambience/lavaland/ambilava2.ogg b/sound/ambience/lavaland/ambilava2.ogg
index 12e496670d038..ea778fddf6709 100644
Binary files a/sound/ambience/lavaland/ambilava2.ogg and b/sound/ambience/lavaland/ambilava2.ogg differ
diff --git a/sound/ambience/lavaland/ambilava3.ogg b/sound/ambience/lavaland/ambilava3.ogg
index 8913ad4a0ea4d..d0b426726192c 100644
Binary files a/sound/ambience/lavaland/ambilava3.ogg and b/sound/ambience/lavaland/ambilava3.ogg differ
diff --git a/sound/ambience/lavaland/magma.ogg b/sound/ambience/lavaland/magma.ogg
index e461801f9aead..d0b090d17620f 100644
Binary files a/sound/ambience/lavaland/magma.ogg and b/sound/ambience/lavaland/magma.ogg differ
diff --git a/sound/ambience/maintenance/ambimaint.ogg b/sound/ambience/maintenance/ambimaint.ogg
index 592850a75c71d..346662ac4c9a1 100644
Binary files a/sound/ambience/maintenance/ambimaint.ogg and b/sound/ambience/maintenance/ambimaint.ogg differ
diff --git a/sound/ambience/maintenance/ambimaint1.ogg b/sound/ambience/maintenance/ambimaint1.ogg
index 0c18c46af6824..b4ca9ffd12862 100644
Binary files a/sound/ambience/maintenance/ambimaint1.ogg and b/sound/ambience/maintenance/ambimaint1.ogg differ
diff --git a/sound/ambience/maintenance/ambimaint10.ogg b/sound/ambience/maintenance/ambimaint10.ogg
index 975aae32bff54..0aee156934138 100644
Binary files a/sound/ambience/maintenance/ambimaint10.ogg and b/sound/ambience/maintenance/ambimaint10.ogg differ
diff --git a/sound/ambience/maintenance/ambimaint11.ogg b/sound/ambience/maintenance/ambimaint11.ogg
index 2723c6008eb3b..8541e963ffd8a 100644
Binary files a/sound/ambience/maintenance/ambimaint11.ogg and b/sound/ambience/maintenance/ambimaint11.ogg differ
diff --git a/sound/ambience/maintenance/ambimaint12.ogg b/sound/ambience/maintenance/ambimaint12.ogg
index 2c873e0f5f996..baf0755e96cec 100644
Binary files a/sound/ambience/maintenance/ambimaint12.ogg and b/sound/ambience/maintenance/ambimaint12.ogg differ
diff --git a/sound/ambience/maintenance/ambimaint2.ogg b/sound/ambience/maintenance/ambimaint2.ogg
index 655d940cda923..fa172c61e7832 100644
Binary files a/sound/ambience/maintenance/ambimaint2.ogg and b/sound/ambience/maintenance/ambimaint2.ogg differ
diff --git a/sound/ambience/maintenance/ambimaint3.ogg b/sound/ambience/maintenance/ambimaint3.ogg
index 9891916010e3d..184239a5de8e7 100644
Binary files a/sound/ambience/maintenance/ambimaint3.ogg and b/sound/ambience/maintenance/ambimaint3.ogg differ
diff --git a/sound/ambience/maintenance/ambimaint4.ogg b/sound/ambience/maintenance/ambimaint4.ogg
index 1d01e2016caa3..402681a46de41 100644
Binary files a/sound/ambience/maintenance/ambimaint4.ogg and b/sound/ambience/maintenance/ambimaint4.ogg differ
diff --git a/sound/ambience/maintenance/ambimaint5.ogg b/sound/ambience/maintenance/ambimaint5.ogg
index 7a065ecbcb39c..5b7941f37f088 100644
Binary files a/sound/ambience/maintenance/ambimaint5.ogg and b/sound/ambience/maintenance/ambimaint5.ogg differ
diff --git a/sound/ambience/maintenance/ambimaint6.ogg b/sound/ambience/maintenance/ambimaint6.ogg
index b4ad4350f4977..f5b65d554c0db 100644
Binary files a/sound/ambience/maintenance/ambimaint6.ogg and b/sound/ambience/maintenance/ambimaint6.ogg differ
diff --git a/sound/ambience/maintenance/ambimaint7.ogg b/sound/ambience/maintenance/ambimaint7.ogg
index 9fa695102d821..029d659b6f871 100644
Binary files a/sound/ambience/maintenance/ambimaint7.ogg and b/sound/ambience/maintenance/ambimaint7.ogg differ
diff --git a/sound/ambience/maintenance/ambimaint8.ogg b/sound/ambience/maintenance/ambimaint8.ogg
index 582ec800cbc45..e761a6389f2dd 100644
Binary files a/sound/ambience/maintenance/ambimaint8.ogg and b/sound/ambience/maintenance/ambimaint8.ogg differ
diff --git a/sound/ambience/maintenance/ambimaint9.ogg b/sound/ambience/maintenance/ambimaint9.ogg
index c990f954e5f6a..c296d23e4569b 100644
Binary files a/sound/ambience/maintenance/ambimaint9.ogg and b/sound/ambience/maintenance/ambimaint9.ogg differ
diff --git a/sound/ambience/maintenance/maintambience.ogg b/sound/ambience/maintenance/maintambience.ogg
index 1ac3764b17656..268a58c79c53a 100644
Binary files a/sound/ambience/maintenance/maintambience.ogg and b/sound/ambience/maintenance/maintambience.ogg differ
diff --git a/sound/ambience/maintenance/source_corridor2.ogg b/sound/ambience/maintenance/source_corridor2.ogg
index 1fa9194f4cdd8..35cf63555f1c2 100644
Binary files a/sound/ambience/maintenance/source_corridor2.ogg and b/sound/ambience/maintenance/source_corridor2.ogg differ
diff --git a/sound/ambience/medical/ambimo1.ogg b/sound/ambience/medical/ambimo1.ogg
index da0d522ad2245..2dcadc68304d1 100644
Binary files a/sound/ambience/medical/ambimo1.ogg and b/sound/ambience/medical/ambimo1.ogg differ
diff --git a/sound/ambience/medical/ambimo2.ogg b/sound/ambience/medical/ambimo2.ogg
index bc77cd28c69ee..063c76e15643d 100644
Binary files a/sound/ambience/medical/ambimo2.ogg and b/sound/ambience/medical/ambimo2.ogg differ
diff --git a/sound/ambience/medical/ambinice.ogg b/sound/ambience/medical/ambinice.ogg
index 6ce351521bc6b..7c7e313349c3f 100644
Binary files a/sound/ambience/medical/ambinice.ogg and b/sound/ambience/medical/ambinice.ogg differ
diff --git a/sound/ambience/medical/ambiviro.ogg b/sound/ambience/medical/ambiviro.ogg
index 71b280f7e7110..a9525377dee25 100644
Binary files a/sound/ambience/medical/ambiviro.ogg and b/sound/ambience/medical/ambiviro.ogg differ
diff --git a/sound/ambience/medical/ambiviro1.ogg b/sound/ambience/medical/ambiviro1.ogg
index cf05bdc287a7e..435f821075ee9 100644
Binary files a/sound/ambience/medical/ambiviro1.ogg and b/sound/ambience/medical/ambiviro1.ogg differ
diff --git a/sound/ambience/medical/ambiviro2.ogg b/sound/ambience/medical/ambiviro2.ogg
index b6cc3a2479574..15c885677cdc1 100644
Binary files a/sound/ambience/medical/ambiviro2.ogg and b/sound/ambience/medical/ambiviro2.ogg differ
diff --git a/sound/ambience/misc/ambiatm1.ogg b/sound/ambience/misc/ambiatm1.ogg
index db8ceeebf9698..e03c07b4cc399 100644
Binary files a/sound/ambience/misc/ambiatm1.ogg and b/sound/ambience/misc/ambiatm1.ogg differ
diff --git a/sound/ambience/misc/ambidanger.ogg b/sound/ambience/misc/ambidanger.ogg
index 265b51f2c9baa..f02c69227105c 100644
Binary files a/sound/ambience/misc/ambidanger.ogg and b/sound/ambience/misc/ambidanger.ogg differ
diff --git a/sound/ambience/misc/ambidanger2.ogg b/sound/ambience/misc/ambidanger2.ogg
index 761c63a4809e7..73211101f8b20 100644
Binary files a/sound/ambience/misc/ambidanger2.ogg and b/sound/ambience/misc/ambidanger2.ogg differ
diff --git a/sound/ambience/misc/ambifailure.ogg b/sound/ambience/misc/ambifailure.ogg
index 4dcf451bca6c7..46cbb1493d31d 100644
Binary files a/sound/ambience/misc/ambifailure.ogg and b/sound/ambience/misc/ambifailure.ogg differ
diff --git a/sound/ambience/misc/ambimalf.ogg b/sound/ambience/misc/ambimalf.ogg
index e5b32dc1a7562..7e39a9d1e2366 100644
Binary files a/sound/ambience/misc/ambimalf.ogg and b/sound/ambience/misc/ambimalf.ogg differ
diff --git a/sound/ambience/misc/ambimystery.ogg b/sound/ambience/misc/ambimystery.ogg
index b6e65c0bf624b..672fcc38d89b0 100644
Binary files a/sound/ambience/misc/ambimystery.ogg and b/sound/ambience/misc/ambimystery.ogg differ
diff --git a/sound/ambience/misc/ambiodd.ogg b/sound/ambience/misc/ambiodd.ogg
index dde64a9858f94..1d1deb8d72d2f 100644
Binary files a/sound/ambience/misc/ambiodd.ogg and b/sound/ambience/misc/ambiodd.ogg differ
diff --git a/sound/ambience/misc/ambireebe1.ogg b/sound/ambience/misc/ambireebe1.ogg
index 77599fac5bf21..9a98b560de7cf 100644
Binary files a/sound/ambience/misc/ambireebe1.ogg and b/sound/ambience/misc/ambireebe1.ogg differ
diff --git a/sound/ambience/misc/ambireebe2.ogg b/sound/ambience/misc/ambireebe2.ogg
index 3bc051cf5a9ec..4e6127735ef9d 100644
Binary files a/sound/ambience/misc/ambireebe2.ogg and b/sound/ambience/misc/ambireebe2.ogg differ
diff --git a/sound/ambience/misc/ambireebe3.ogg b/sound/ambience/misc/ambireebe3.ogg
index 3ef1211897d31..dc87f8cd97def 100644
Binary files a/sound/ambience/misc/ambireebe3.ogg and b/sound/ambience/misc/ambireebe3.ogg differ
diff --git a/sound/ambience/misc/ambivapor1.ogg b/sound/ambience/misc/ambivapor1.ogg
index 6c43ff1ef0197..4ffc8cddbc3cb 100644
Binary files a/sound/ambience/misc/ambivapor1.ogg and b/sound/ambience/misc/ambivapor1.ogg differ
diff --git a/sound/ambience/misc/cavesound3.ogg b/sound/ambience/misc/cavesound3.ogg
index ca7f9cfe995be..4baa4cc7dbde7 100644
Binary files a/sound/ambience/misc/cavesound3.ogg and b/sound/ambience/misc/cavesound3.ogg differ
diff --git a/sound/ambience/misc/signal.ogg b/sound/ambience/misc/signal.ogg
index 83de659ba7aed..7685f75ed8a0f 100644
Binary files a/sound/ambience/misc/signal.ogg and b/sound/ambience/misc/signal.ogg differ
diff --git a/sound/ambience/misc/source_holehit3.ogg b/sound/ambience/misc/source_holehit3.ogg
index 79cf9c8b4a7a6..5885ebc6971ab 100644
Binary files a/sound/ambience/misc/source_holehit3.ogg and b/sound/ambience/misc/source_holehit3.ogg differ
diff --git a/sound/ambience/misc/ticking_clock.ogg b/sound/ambience/misc/ticking_clock.ogg
index 940fcf892db1b..ba66c783e83f4 100644
Binary files a/sound/ambience/misc/ticking_clock.ogg and b/sound/ambience/misc/ticking_clock.ogg differ
diff --git a/sound/ambience/ruin/ambimine.ogg b/sound/ambience/ruin/ambimine.ogg
index 6a7fbc391da56..c23c6cb5b7a2f 100644
Binary files a/sound/ambience/ruin/ambimine.ogg and b/sound/ambience/ruin/ambimine.ogg differ
diff --git a/sound/ambience/ruin/ambiruin.ogg b/sound/ambience/ruin/ambiruin.ogg
index ff4cef4a415d0..0aca2706335e5 100644
Binary files a/sound/ambience/ruin/ambiruin.ogg and b/sound/ambience/ruin/ambiruin.ogg differ
diff --git a/sound/ambience/ruin/ambiruin2.ogg b/sound/ambience/ruin/ambiruin2.ogg
index 2dc408e2b6990..df57166825fbf 100644
Binary files a/sound/ambience/ruin/ambiruin2.ogg and b/sound/ambience/ruin/ambiruin2.ogg differ
diff --git a/sound/ambience/ruin/ambiruin3.ogg b/sound/ambience/ruin/ambiruin3.ogg
index 7a97ff9c60c7e..5a6a572e80098 100644
Binary files a/sound/ambience/ruin/ambiruin3.ogg and b/sound/ambience/ruin/ambiruin3.ogg differ
diff --git a/sound/ambience/ruin/ambiruin4.ogg b/sound/ambience/ruin/ambiruin4.ogg
index ad56a915f9209..2082438fc3ceb 100644
Binary files a/sound/ambience/ruin/ambiruin4.ogg and b/sound/ambience/ruin/ambiruin4.ogg differ
diff --git a/sound/ambience/ruin/ambiruin5.ogg b/sound/ambience/ruin/ambiruin5.ogg
index 2073b5a277006..a5dcd70896032 100644
Binary files a/sound/ambience/ruin/ambiruin5.ogg and b/sound/ambience/ruin/ambiruin5.ogg differ
diff --git a/sound/ambience/ruin/ambiruin6.ogg b/sound/ambience/ruin/ambiruin6.ogg
index 4b6c79a72d56d..f5535090c4367 100644
Binary files a/sound/ambience/ruin/ambiruin6.ogg and b/sound/ambience/ruin/ambiruin6.ogg differ
diff --git a/sound/ambience/ruin/ambiruin7.ogg b/sound/ambience/ruin/ambiruin7.ogg
index ed88fcd52d4dd..5ef8c7c69b9b2 100644
Binary files a/sound/ambience/ruin/ambiruin7.ogg and b/sound/ambience/ruin/ambiruin7.ogg differ
diff --git a/sound/ambience/ruin/servicebell.ogg b/sound/ambience/ruin/servicebell.ogg
index f55c7d5a75918..aa667b16a9c38 100644
Binary files a/sound/ambience/ruin/servicebell.ogg and b/sound/ambience/ruin/servicebell.ogg differ
diff --git a/sound/ambience/security/ambidet1.ogg b/sound/ambience/security/ambidet1.ogg
index 2ffc3ba494c00..c896c0222b532 100644
Binary files a/sound/ambience/security/ambidet1.ogg and b/sound/ambience/security/ambidet1.ogg differ
diff --git a/sound/ambience/security/ambidet2.ogg b/sound/ambience/security/ambidet2.ogg
index 7d5aae34d0b0a..0edc29b5d33d7 100644
Binary files a/sound/ambience/security/ambidet2.ogg and b/sound/ambience/security/ambidet2.ogg differ
diff --git a/sound/ambience/space/ambispace.ogg b/sound/ambience/space/ambispace.ogg
index 6e23d0e3833b3..dbb5b3825d96d 100644
Binary files a/sound/ambience/space/ambispace.ogg and b/sound/ambience/space/ambispace.ogg differ
diff --git a/sound/ambience/space/ambispace2.ogg b/sound/ambience/space/ambispace2.ogg
index 44b4c62c36e84..e6ee93e83b02a 100644
Binary files a/sound/ambience/space/ambispace2.ogg and b/sound/ambience/space/ambispace2.ogg differ
diff --git a/sound/ambience/space/ambispace3.ogg b/sound/ambience/space/ambispace3.ogg
index 0aaedb8afe81e..15e712eb25c85 100644
Binary files a/sound/ambience/space/ambispace3.ogg and b/sound/ambience/space/ambispace3.ogg differ
diff --git a/sound/ambience/space/ambispace4.ogg b/sound/ambience/space/ambispace4.ogg
index b3824c66135fc..e29e442cd64f1 100644
Binary files a/sound/ambience/space/ambispace4.ogg and b/sound/ambience/space/ambispace4.ogg differ
diff --git a/sound/ambience/space/ambispace5.ogg b/sound/ambience/space/ambispace5.ogg
index df8dd5b87d19e..6ff253f90a026 100644
Binary files a/sound/ambience/space/ambispace5.ogg and b/sound/ambience/space/ambispace5.ogg differ
diff --git a/sound/ambience/space/ambispace6.ogg b/sound/ambience/space/ambispace6.ogg
index fe5e95ab3d01a..7bf7f6fa85b99 100644
Binary files a/sound/ambience/space/ambispace6.ogg and b/sound/ambience/space/ambispace6.ogg differ
diff --git a/sound/ambience/weather/ashstorm/inside/active_end.ogg b/sound/ambience/weather/ashstorm/inside/active_end.ogg
index 1097687059820..39985a949506b 100644
Binary files a/sound/ambience/weather/ashstorm/inside/active_end.ogg and b/sound/ambience/weather/ashstorm/inside/active_end.ogg differ
diff --git a/sound/ambience/weather/ashstorm/inside/active_mid1.ogg b/sound/ambience/weather/ashstorm/inside/active_mid1.ogg
index 1ac40cbdc58f4..1121837b8a358 100644
Binary files a/sound/ambience/weather/ashstorm/inside/active_mid1.ogg and b/sound/ambience/weather/ashstorm/inside/active_mid1.ogg differ
diff --git a/sound/ambience/weather/ashstorm/inside/active_mid2.ogg b/sound/ambience/weather/ashstorm/inside/active_mid2.ogg
index e274d296ccfe3..0e2875e55feeb 100644
Binary files a/sound/ambience/weather/ashstorm/inside/active_mid2.ogg and b/sound/ambience/weather/ashstorm/inside/active_mid2.ogg differ
diff --git a/sound/ambience/weather/ashstorm/inside/active_mid3.ogg b/sound/ambience/weather/ashstorm/inside/active_mid3.ogg
index 65a00bcbe8c92..2a4aa1d3821b1 100644
Binary files a/sound/ambience/weather/ashstorm/inside/active_mid3.ogg and b/sound/ambience/weather/ashstorm/inside/active_mid3.ogg differ
diff --git a/sound/ambience/weather/ashstorm/inside/active_start.ogg b/sound/ambience/weather/ashstorm/inside/active_start.ogg
index e147d04cafca1..b1542a119d19e 100644
Binary files a/sound/ambience/weather/ashstorm/inside/active_start.ogg and b/sound/ambience/weather/ashstorm/inside/active_start.ogg differ
diff --git a/sound/ambience/weather/ashstorm/inside/weak_end.ogg b/sound/ambience/weather/ashstorm/inside/weak_end.ogg
index cca41d49a9d78..41bdd630612c7 100644
Binary files a/sound/ambience/weather/ashstorm/inside/weak_end.ogg and b/sound/ambience/weather/ashstorm/inside/weak_end.ogg differ
diff --git a/sound/ambience/weather/ashstorm/inside/weak_mid1.ogg b/sound/ambience/weather/ashstorm/inside/weak_mid1.ogg
index e3bc15d888b36..afe0e59d0f76b 100644
Binary files a/sound/ambience/weather/ashstorm/inside/weak_mid1.ogg and b/sound/ambience/weather/ashstorm/inside/weak_mid1.ogg differ
diff --git a/sound/ambience/weather/ashstorm/inside/weak_mid2.ogg b/sound/ambience/weather/ashstorm/inside/weak_mid2.ogg
index f5584ba83b113..96e51a0db98fb 100644
Binary files a/sound/ambience/weather/ashstorm/inside/weak_mid2.ogg and b/sound/ambience/weather/ashstorm/inside/weak_mid2.ogg differ
diff --git a/sound/ambience/weather/ashstorm/inside/weak_mid3.ogg b/sound/ambience/weather/ashstorm/inside/weak_mid3.ogg
index ae6c6d1911e76..56a54fece9057 100644
Binary files a/sound/ambience/weather/ashstorm/inside/weak_mid3.ogg and b/sound/ambience/weather/ashstorm/inside/weak_mid3.ogg differ
diff --git a/sound/ambience/weather/ashstorm/inside/weak_start.ogg b/sound/ambience/weather/ashstorm/inside/weak_start.ogg
index d1788a241cb1b..b622931cfee64 100644
Binary files a/sound/ambience/weather/ashstorm/inside/weak_start.ogg and b/sound/ambience/weather/ashstorm/inside/weak_start.ogg differ
diff --git a/sound/ambience/weather/ashstorm/outside/active_end.ogg b/sound/ambience/weather/ashstorm/outside/active_end.ogg
index 3306201f86b86..119d8a41896b2 100644
Binary files a/sound/ambience/weather/ashstorm/outside/active_end.ogg and b/sound/ambience/weather/ashstorm/outside/active_end.ogg differ
diff --git a/sound/ambience/weather/ashstorm/outside/active_mid1.ogg b/sound/ambience/weather/ashstorm/outside/active_mid1.ogg
index bd2ff62f70db9..aa4818fa4653e 100644
Binary files a/sound/ambience/weather/ashstorm/outside/active_mid1.ogg and b/sound/ambience/weather/ashstorm/outside/active_mid1.ogg differ
diff --git a/sound/ambience/weather/ashstorm/outside/active_mid2.ogg b/sound/ambience/weather/ashstorm/outside/active_mid2.ogg
index 661562716bc6b..b610d35d92808 100644
Binary files a/sound/ambience/weather/ashstorm/outside/active_mid2.ogg and b/sound/ambience/weather/ashstorm/outside/active_mid2.ogg differ
diff --git a/sound/ambience/weather/ashstorm/outside/active_mid3.ogg b/sound/ambience/weather/ashstorm/outside/active_mid3.ogg
index 542420f50a5ab..17df126f9e3c7 100644
Binary files a/sound/ambience/weather/ashstorm/outside/active_mid3.ogg and b/sound/ambience/weather/ashstorm/outside/active_mid3.ogg differ
diff --git a/sound/ambience/weather/ashstorm/outside/active_start.ogg b/sound/ambience/weather/ashstorm/outside/active_start.ogg
index 4bd9717396e72..836bff6d9b27a 100644
Binary files a/sound/ambience/weather/ashstorm/outside/active_start.ogg and b/sound/ambience/weather/ashstorm/outside/active_start.ogg differ
diff --git a/sound/ambience/weather/ashstorm/outside/weak_end.ogg b/sound/ambience/weather/ashstorm/outside/weak_end.ogg
index 6fef7a1ed8bc6..d08af64646994 100644
Binary files a/sound/ambience/weather/ashstorm/outside/weak_end.ogg and b/sound/ambience/weather/ashstorm/outside/weak_end.ogg differ
diff --git a/sound/ambience/weather/ashstorm/outside/weak_mid1.ogg b/sound/ambience/weather/ashstorm/outside/weak_mid1.ogg
index 3d0e4f42604e7..515e0d08c2945 100644
Binary files a/sound/ambience/weather/ashstorm/outside/weak_mid1.ogg and b/sound/ambience/weather/ashstorm/outside/weak_mid1.ogg differ
diff --git a/sound/ambience/weather/ashstorm/outside/weak_mid2.ogg b/sound/ambience/weather/ashstorm/outside/weak_mid2.ogg
index 087aa765708c4..622be8eccd8cd 100644
Binary files a/sound/ambience/weather/ashstorm/outside/weak_mid2.ogg and b/sound/ambience/weather/ashstorm/outside/weak_mid2.ogg differ
diff --git a/sound/ambience/weather/ashstorm/outside/weak_mid3.ogg b/sound/ambience/weather/ashstorm/outside/weak_mid3.ogg
index 3891ad4382925..4111846ef6f1d 100644
Binary files a/sound/ambience/weather/ashstorm/outside/weak_mid3.ogg and b/sound/ambience/weather/ashstorm/outside/weak_mid3.ogg differ
diff --git a/sound/ambience/weather/ashstorm/outside/weak_start.ogg b/sound/ambience/weather/ashstorm/outside/weak_start.ogg
index 404b968909b79..2718e963d0571 100644
Binary files a/sound/ambience/weather/ashstorm/outside/weak_start.ogg and b/sound/ambience/weather/ashstorm/outside/weak_start.ogg differ
diff --git a/sound/announcer/ApproachingTG.ogg b/sound/announcer/ApproachingTG.ogg
index 3f8bc1c488010..20065af814276 100644
Binary files a/sound/announcer/ApproachingTG.ogg and b/sound/announcer/ApproachingTG.ogg differ
diff --git a/sound/announcer/alarm/airraid.ogg b/sound/announcer/alarm/airraid.ogg
index cc9913becdde9..0ab9f8a05c691 100644
Binary files a/sound/announcer/alarm/airraid.ogg and b/sound/announcer/alarm/airraid.ogg differ
diff --git a/sound/announcer/alarm/bloblarm.ogg b/sound/announcer/alarm/bloblarm.ogg
index 2c934e1bf185f..3137627536313 100644
Binary files a/sound/announcer/alarm/bloblarm.ogg and b/sound/announcer/alarm/bloblarm.ogg differ
diff --git a/sound/announcer/alarm/nuke_alarm.ogg b/sound/announcer/alarm/nuke_alarm.ogg
index 2aec35bd32281..278e9923c045e 100644
Binary files a/sound/announcer/alarm/nuke_alarm.ogg and b/sound/announcer/alarm/nuke_alarm.ogg differ
diff --git a/sound/announcer/announcement/announce.ogg b/sound/announcer/announcement/announce.ogg
index 0ee0f36d56f91..600a239d40cb8 100644
Binary files a/sound/announcer/announcement/announce.ogg and b/sound/announcer/announcement/announce.ogg differ
diff --git a/sound/announcer/announcement/announce_dig.ogg b/sound/announcer/announcement/announce_dig.ogg
index 2342d2eb505ef..683b2a49c361a 100644
Binary files a/sound/announcer/announcement/announce_dig.ogg and b/sound/announcer/announcement/announce_dig.ogg differ
diff --git a/sound/announcer/announcement/announce_syndi.ogg b/sound/announcer/announcement/announce_syndi.ogg
index 49c255bd0e9e9..1620d8cb6eb1c 100644
Binary files a/sound/announcer/announcement/announce_syndi.ogg and b/sound/announcer/announcement/announce_syndi.ogg differ
diff --git a/sound/announcer/default/aimalf.ogg b/sound/announcer/default/aimalf.ogg
index b7996916b4750..6ec4747ce36e6 100644
Binary files a/sound/announcer/default/aimalf.ogg and b/sound/announcer/default/aimalf.ogg differ
diff --git a/sound/announcer/default/aliens.ogg b/sound/announcer/default/aliens.ogg
index f7d1746247f6c..f0cab05ac0b03 100644
Binary files a/sound/announcer/default/aliens.ogg and b/sound/announcer/default/aliens.ogg differ
diff --git a/sound/announcer/default/animes.ogg b/sound/announcer/default/animes.ogg
index a46a207edc456..6d2bbcc7a9078 100644
Binary files a/sound/announcer/default/animes.ogg and b/sound/announcer/default/animes.ogg differ
diff --git a/sound/announcer/default/attention.ogg b/sound/announcer/default/attention.ogg
index 912be4425ebb3..6f837f6680237 100644
Binary files a/sound/announcer/default/attention.ogg and b/sound/announcer/default/attention.ogg differ
diff --git a/sound/announcer/default/commandreport.ogg b/sound/announcer/default/commandreport.ogg
index 82e4ca425de3a..65ca287c5710d 100644
Binary files a/sound/announcer/default/commandreport.ogg and b/sound/announcer/default/commandreport.ogg differ
diff --git a/sound/announcer/default/granomalies.ogg b/sound/announcer/default/granomalies.ogg
index 89b368d596a41..889fe344265e9 100644
Binary files a/sound/announcer/default/granomalies.ogg and b/sound/announcer/default/granomalies.ogg differ
diff --git a/sound/announcer/default/intercept.ogg b/sound/announcer/default/intercept.ogg
index 3569a07d40193..9c9cb94449617 100644
Binary files a/sound/announcer/default/intercept.ogg and b/sound/announcer/default/intercept.ogg differ
diff --git a/sound/announcer/default/ionstorm.ogg b/sound/announcer/default/ionstorm.ogg
index 9f39713de6e5a..2ade55b1d20dc 100644
Binary files a/sound/announcer/default/ionstorm.ogg and b/sound/announcer/default/ionstorm.ogg differ
diff --git a/sound/announcer/default/meteors.ogg b/sound/announcer/default/meteors.ogg
index 8f1c3aeacbbba..c66199dda8d04 100644
Binary files a/sound/announcer/default/meteors.ogg and b/sound/announcer/default/meteors.ogg differ
diff --git a/sound/announcer/default/outbreak5.ogg b/sound/announcer/default/outbreak5.ogg
index 39c79c920fd82..542a520420c2f 100644
Binary files a/sound/announcer/default/outbreak5.ogg and b/sound/announcer/default/outbreak5.ogg differ
diff --git a/sound/announcer/default/outbreak7.ogg b/sound/announcer/default/outbreak7.ogg
index f21d4fca443dc..24e7c2246492d 100644
Binary files a/sound/announcer/default/outbreak7.ogg and b/sound/announcer/default/outbreak7.ogg differ
diff --git a/sound/announcer/default/poweroff.ogg b/sound/announcer/default/poweroff.ogg
index 1c6377c9d8d53..f03431a0015be 100644
Binary files a/sound/announcer/default/poweroff.ogg and b/sound/announcer/default/poweroff.ogg differ
diff --git a/sound/announcer/default/poweron.ogg b/sound/announcer/default/poweron.ogg
index 9d18797d6eae8..4f34f223405fc 100644
Binary files a/sound/announcer/default/poweron.ogg and b/sound/announcer/default/poweron.ogg differ
diff --git a/sound/announcer/default/radiation.ogg b/sound/announcer/default/radiation.ogg
index ef395af310118..87e15a90de12a 100644
Binary files a/sound/announcer/default/radiation.ogg and b/sound/announcer/default/radiation.ogg differ
diff --git a/sound/announcer/default/shuttlecalled.ogg b/sound/announcer/default/shuttlecalled.ogg
index 716bf824654f5..c8dffc317f55b 100644
Binary files a/sound/announcer/default/shuttlecalled.ogg and b/sound/announcer/default/shuttlecalled.ogg differ
diff --git a/sound/announcer/default/shuttledock.ogg b/sound/announcer/default/shuttledock.ogg
index 0f70bebc75188..4fccd7ee3bf5e 100644
Binary files a/sound/announcer/default/shuttledock.ogg and b/sound/announcer/default/shuttledock.ogg differ
diff --git a/sound/announcer/default/shuttlerecalled.ogg b/sound/announcer/default/shuttlerecalled.ogg
index 5f6db404b87aa..b9c06bcf3bdbc 100644
Binary files a/sound/announcer/default/shuttlerecalled.ogg and b/sound/announcer/default/shuttlerecalled.ogg differ
diff --git a/sound/announcer/default/spanomalies.ogg b/sound/announcer/default/spanomalies.ogg
index 7680726f15336..9aff3b45c1249 100644
Binary files a/sound/announcer/default/spanomalies.ogg and b/sound/announcer/default/spanomalies.ogg differ
diff --git a/sound/announcer/default/welcome.ogg b/sound/announcer/default/welcome.ogg
index c7013dcbd5f7e..f4d5a4ece5bdd 100644
Binary files a/sound/announcer/default/welcome.ogg and b/sound/announcer/default/welcome.ogg differ
diff --git a/sound/announcer/intern/alerts/1.ogg b/sound/announcer/intern/alerts/1.ogg
index c4d182bc8c958..a1c6d4fb1e971 100644
Binary files a/sound/announcer/intern/alerts/1.ogg and b/sound/announcer/intern/alerts/1.ogg differ
diff --git a/sound/announcer/intern/alerts/10.ogg b/sound/announcer/intern/alerts/10.ogg
index 7380ccdeefdbb..4bb3ca0ec0634 100644
Binary files a/sound/announcer/intern/alerts/10.ogg and b/sound/announcer/intern/alerts/10.ogg differ
diff --git a/sound/announcer/intern/alerts/11.ogg b/sound/announcer/intern/alerts/11.ogg
index ca548dcc20a0c..5dcc91e1d1e27 100644
Binary files a/sound/announcer/intern/alerts/11.ogg and b/sound/announcer/intern/alerts/11.ogg differ
diff --git a/sound/announcer/intern/alerts/12.ogg b/sound/announcer/intern/alerts/12.ogg
index 8d71419798fc3..b493a072729fe 100644
Binary files a/sound/announcer/intern/alerts/12.ogg and b/sound/announcer/intern/alerts/12.ogg differ
diff --git a/sound/announcer/intern/alerts/13.ogg b/sound/announcer/intern/alerts/13.ogg
index 128c7aa424d1a..66574b842316e 100644
Binary files a/sound/announcer/intern/alerts/13.ogg and b/sound/announcer/intern/alerts/13.ogg differ
diff --git a/sound/announcer/intern/alerts/14.ogg b/sound/announcer/intern/alerts/14.ogg
index 81d54101be5ce..3ceb432df6712 100644
Binary files a/sound/announcer/intern/alerts/14.ogg and b/sound/announcer/intern/alerts/14.ogg differ
diff --git a/sound/announcer/intern/alerts/2.ogg b/sound/announcer/intern/alerts/2.ogg
index a2ef615d56c5f..5a43266eff46f 100644
Binary files a/sound/announcer/intern/alerts/2.ogg and b/sound/announcer/intern/alerts/2.ogg differ
diff --git a/sound/announcer/intern/alerts/3.ogg b/sound/announcer/intern/alerts/3.ogg
index 51613ff03679b..4f08725b5340b 100644
Binary files a/sound/announcer/intern/alerts/3.ogg and b/sound/announcer/intern/alerts/3.ogg differ
diff --git a/sound/announcer/intern/alerts/4.ogg b/sound/announcer/intern/alerts/4.ogg
index 874536ca72fd8..51b4aa33d4a83 100644
Binary files a/sound/announcer/intern/alerts/4.ogg and b/sound/announcer/intern/alerts/4.ogg differ
diff --git a/sound/announcer/intern/alerts/5.ogg b/sound/announcer/intern/alerts/5.ogg
index 0af0d28ce1890..92f5c993f0a82 100644
Binary files a/sound/announcer/intern/alerts/5.ogg and b/sound/announcer/intern/alerts/5.ogg differ
diff --git a/sound/announcer/intern/alerts/6.ogg b/sound/announcer/intern/alerts/6.ogg
index a65006a8c0138..9705f72b45315 100644
Binary files a/sound/announcer/intern/alerts/6.ogg and b/sound/announcer/intern/alerts/6.ogg differ
diff --git a/sound/announcer/intern/alerts/7.ogg b/sound/announcer/intern/alerts/7.ogg
index 4a1d3f013aea0..1c9a08a32db08 100644
Binary files a/sound/announcer/intern/alerts/7.ogg and b/sound/announcer/intern/alerts/7.ogg differ
diff --git a/sound/announcer/intern/alerts/8.ogg b/sound/announcer/intern/alerts/8.ogg
index 83ca80f4939b0..25e384044131e 100644
Binary files a/sound/announcer/intern/alerts/8.ogg and b/sound/announcer/intern/alerts/8.ogg differ
diff --git a/sound/announcer/intern/alerts/9.ogg b/sound/announcer/intern/alerts/9.ogg
index 3c0c45b25d04b..d5ead6a4c7a6e 100644
Binary files a/sound/announcer/intern/alerts/9.ogg and b/sound/announcer/intern/alerts/9.ogg differ
diff --git a/sound/announcer/intern/aliens.ogg b/sound/announcer/intern/aliens.ogg
index 9dd3c0769785d..85b2e29b55981 100644
Binary files a/sound/announcer/intern/aliens.ogg and b/sound/announcer/intern/aliens.ogg differ
diff --git a/sound/announcer/intern/animes.ogg b/sound/announcer/intern/animes.ogg
index 36102c3e60ec2..de5db01b25dc8 100644
Binary files a/sound/announcer/intern/animes.ogg and b/sound/announcer/intern/animes.ogg differ
diff --git a/sound/announcer/intern/commandreport/1.ogg b/sound/announcer/intern/commandreport/1.ogg
index e3108b13d1768..226240d708ad4 100644
Binary files a/sound/announcer/intern/commandreport/1.ogg and b/sound/announcer/intern/commandreport/1.ogg differ
diff --git a/sound/announcer/intern/commandreport/2.ogg b/sound/announcer/intern/commandreport/2.ogg
index cd67500426c2d..9d267e63623bb 100644
Binary files a/sound/announcer/intern/commandreport/2.ogg and b/sound/announcer/intern/commandreport/2.ogg differ
diff --git a/sound/announcer/intern/commandreport/3.ogg b/sound/announcer/intern/commandreport/3.ogg
index 94241c5ba52b4..90060e381679d 100644
Binary files a/sound/announcer/intern/commandreport/3.ogg and b/sound/announcer/intern/commandreport/3.ogg differ
diff --git a/sound/announcer/intern/granomalies.ogg b/sound/announcer/intern/granomalies.ogg
index 88944b63b2e64..97b7c89446605 100644
Binary files a/sound/announcer/intern/granomalies.ogg and b/sound/announcer/intern/granomalies.ogg differ
diff --git a/sound/announcer/intern/intercept.ogg b/sound/announcer/intern/intercept.ogg
index a87274abd975c..949197c1fd88d 100644
Binary files a/sound/announcer/intern/intercept.ogg and b/sound/announcer/intern/intercept.ogg differ
diff --git a/sound/announcer/intern/ionstorm.ogg b/sound/announcer/intern/ionstorm.ogg
index 9e7b5c6b23eb8..9be75b050f9c4 100644
Binary files a/sound/announcer/intern/ionstorm.ogg and b/sound/announcer/intern/ionstorm.ogg differ
diff --git a/sound/announcer/intern/meteors.ogg b/sound/announcer/intern/meteors.ogg
index c68c4bd8cc4cc..f79b7b84c53c5 100644
Binary files a/sound/announcer/intern/meteors.ogg and b/sound/announcer/intern/meteors.ogg differ
diff --git a/sound/announcer/intern/outbreak5.ogg b/sound/announcer/intern/outbreak5.ogg
index cf98b95fd7ba8..3361c8020fe81 100644
Binary files a/sound/announcer/intern/outbreak5.ogg and b/sound/announcer/intern/outbreak5.ogg differ
diff --git a/sound/announcer/intern/outbreak7.ogg b/sound/announcer/intern/outbreak7.ogg
index 297a1bbe8db6c..b4f1862f219dd 100644
Binary files a/sound/announcer/intern/outbreak7.ogg and b/sound/announcer/intern/outbreak7.ogg differ
diff --git a/sound/announcer/intern/poweroff.ogg b/sound/announcer/intern/poweroff.ogg
index 4b71053653f6e..9217bd4b5c091 100644
Binary files a/sound/announcer/intern/poweroff.ogg and b/sound/announcer/intern/poweroff.ogg differ
diff --git a/sound/announcer/intern/poweron.ogg b/sound/announcer/intern/poweron.ogg
index 509cd398e6eda..005922cb5809c 100644
Binary files a/sound/announcer/intern/poweron.ogg and b/sound/announcer/intern/poweron.ogg differ
diff --git a/sound/announcer/intern/radiation.ogg b/sound/announcer/intern/radiation.ogg
index 08db53ebfd24c..0d782bf214efb 100644
Binary files a/sound/announcer/intern/radiation.ogg and b/sound/announcer/intern/radiation.ogg differ
diff --git a/sound/announcer/intern/shuttlecalled.ogg b/sound/announcer/intern/shuttlecalled.ogg
index c903367cdffb5..5d41314c7c7c6 100644
Binary files a/sound/announcer/intern/shuttlecalled.ogg and b/sound/announcer/intern/shuttlecalled.ogg differ
diff --git a/sound/announcer/intern/shuttledock.ogg b/sound/announcer/intern/shuttledock.ogg
index 9f6ccd1a93785..63a2473a54728 100644
Binary files a/sound/announcer/intern/shuttledock.ogg and b/sound/announcer/intern/shuttledock.ogg differ
diff --git a/sound/announcer/intern/shuttlerecalled.ogg b/sound/announcer/intern/shuttlerecalled.ogg
index e259a79f35e40..3dd66d2910c4b 100644
Binary files a/sound/announcer/intern/shuttlerecalled.ogg and b/sound/announcer/intern/shuttlerecalled.ogg differ
diff --git a/sound/announcer/intern/spanomalies.ogg b/sound/announcer/intern/spanomalies.ogg
index 9bed8eae3aa08..0b07d77c0cd2e 100644
Binary files a/sound/announcer/intern/spanomalies.ogg and b/sound/announcer/intern/spanomalies.ogg differ
diff --git a/sound/announcer/intern/welcome/1.ogg b/sound/announcer/intern/welcome/1.ogg
index 758f1967e099a..d6115344bbf9f 100644
Binary files a/sound/announcer/intern/welcome/1.ogg and b/sound/announcer/intern/welcome/1.ogg differ
diff --git a/sound/announcer/intern/welcome/2.ogg b/sound/announcer/intern/welcome/2.ogg
index c2e72be510eda..830e4063c76c0 100644
Binary files a/sound/announcer/intern/welcome/2.ogg and b/sound/announcer/intern/welcome/2.ogg differ
diff --git a/sound/announcer/intern/welcome/3.ogg b/sound/announcer/intern/welcome/3.ogg
index 004f57371de1e..bba0aaf8f6bbb 100644
Binary files a/sound/announcer/intern/welcome/3.ogg and b/sound/announcer/intern/welcome/3.ogg differ
diff --git a/sound/announcer/intern/welcome/4.ogg b/sound/announcer/intern/welcome/4.ogg
index c4e1f7667cd09..bc7be975ebe0e 100644
Binary files a/sound/announcer/intern/welcome/4.ogg and b/sound/announcer/intern/welcome/4.ogg differ
diff --git a/sound/announcer/intern/welcome/5.ogg b/sound/announcer/intern/welcome/5.ogg
index 641b8208a4eb4..88a8a9e690f83 100644
Binary files a/sound/announcer/intern/welcome/5.ogg and b/sound/announcer/intern/welcome/5.ogg differ
diff --git a/sound/announcer/intern/welcome/6.ogg b/sound/announcer/intern/welcome/6.ogg
index b0fc38237f881..7ecbb5339cda7 100644
Binary files a/sound/announcer/intern/welcome/6.ogg and b/sound/announcer/intern/welcome/6.ogg differ
diff --git a/sound/announcer/medbot/aliens.ogg b/sound/announcer/medbot/aliens.ogg
index 57fa70c3caeca..340ca854d4d51 100644
Binary files a/sound/announcer/medbot/aliens.ogg and b/sound/announcer/medbot/aliens.ogg differ
diff --git a/sound/announcer/medbot/animes.ogg b/sound/announcer/medbot/animes.ogg
index 7615a744a66eb..9edc42982c803 100644
Binary files a/sound/announcer/medbot/animes.ogg and b/sound/announcer/medbot/animes.ogg differ
diff --git a/sound/announcer/medbot/attention.ogg b/sound/announcer/medbot/attention.ogg
index d4d5a27085270..5f670446bf55d 100644
Binary files a/sound/announcer/medbot/attention.ogg and b/sound/announcer/medbot/attention.ogg differ
diff --git a/sound/announcer/medbot/commandreport.ogg b/sound/announcer/medbot/commandreport.ogg
index 4e5c2e1d1ff29..5bf11e0ef364f 100644
Binary files a/sound/announcer/medbot/commandreport.ogg and b/sound/announcer/medbot/commandreport.ogg differ
diff --git a/sound/announcer/medbot/granomalies.ogg b/sound/announcer/medbot/granomalies.ogg
index 2713a3cb1942e..7493f657c6875 100644
Binary files a/sound/announcer/medbot/granomalies.ogg and b/sound/announcer/medbot/granomalies.ogg differ
diff --git a/sound/announcer/medbot/intercept.ogg b/sound/announcer/medbot/intercept.ogg
index c59d0455c1ca0..8324c92f0e20d 100644
Binary files a/sound/announcer/medbot/intercept.ogg and b/sound/announcer/medbot/intercept.ogg differ
diff --git a/sound/announcer/medbot/ionstorm.ogg b/sound/announcer/medbot/ionstorm.ogg
index 15aeac9f7ff91..f7973a82cd114 100644
Binary files a/sound/announcer/medbot/ionstorm.ogg and b/sound/announcer/medbot/ionstorm.ogg differ
diff --git a/sound/announcer/medbot/meteors.ogg b/sound/announcer/medbot/meteors.ogg
index 91208cae12230..be1603e505317 100644
Binary files a/sound/announcer/medbot/meteors.ogg and b/sound/announcer/medbot/meteors.ogg differ
diff --git a/sound/announcer/medbot/newAI.ogg b/sound/announcer/medbot/newAI.ogg
index c40b0990206c4..5db64145f2b1e 100644
Binary files a/sound/announcer/medbot/newAI.ogg and b/sound/announcer/medbot/newAI.ogg differ
diff --git a/sound/announcer/medbot/outbreak5.ogg b/sound/announcer/medbot/outbreak5.ogg
index 7118af4449242..51e16b18ffcb3 100644
Binary files a/sound/announcer/medbot/outbreak5.ogg and b/sound/announcer/medbot/outbreak5.ogg differ
diff --git a/sound/announcer/medbot/outbreak7.ogg b/sound/announcer/medbot/outbreak7.ogg
index 1fc542534dba5..f02d91d906d8a 100644
Binary files a/sound/announcer/medbot/outbreak7.ogg and b/sound/announcer/medbot/outbreak7.ogg differ
diff --git a/sound/announcer/medbot/poweroff.ogg b/sound/announcer/medbot/poweroff.ogg
index 875df350025e7..b296302bc6ce9 100644
Binary files a/sound/announcer/medbot/poweroff.ogg and b/sound/announcer/medbot/poweroff.ogg differ
diff --git a/sound/announcer/medbot/poweron.ogg b/sound/announcer/medbot/poweron.ogg
index 4b1605b1c74d8..9da6e4ce3d357 100644
Binary files a/sound/announcer/medbot/poweron.ogg and b/sound/announcer/medbot/poweron.ogg differ
diff --git a/sound/announcer/medbot/radiation.ogg b/sound/announcer/medbot/radiation.ogg
index 5c48830b5f2f9..62ed9330b70ed 100644
Binary files a/sound/announcer/medbot/radiation.ogg and b/sound/announcer/medbot/radiation.ogg differ
diff --git a/sound/announcer/medbot/shuttlecalled.ogg b/sound/announcer/medbot/shuttlecalled.ogg
index a775567abed6f..5b33ba9fc1d68 100644
Binary files a/sound/announcer/medbot/shuttlecalled.ogg and b/sound/announcer/medbot/shuttlecalled.ogg differ
diff --git a/sound/announcer/medbot/shuttledock.ogg b/sound/announcer/medbot/shuttledock.ogg
index 933928db067ab..d03fc52f9f8a2 100644
Binary files a/sound/announcer/medbot/shuttledock.ogg and b/sound/announcer/medbot/shuttledock.ogg differ
diff --git a/sound/announcer/medbot/shuttlerecalled.ogg b/sound/announcer/medbot/shuttlerecalled.ogg
index 53b622576d4bd..436d2b2cc6b80 100644
Binary files a/sound/announcer/medbot/shuttlerecalled.ogg and b/sound/announcer/medbot/shuttlerecalled.ogg differ
diff --git a/sound/announcer/medbot/spanomalies.ogg b/sound/announcer/medbot/spanomalies.ogg
index d710999e1e156..8263156e018c0 100644
Binary files a/sound/announcer/medbot/spanomalies.ogg and b/sound/announcer/medbot/spanomalies.ogg differ
diff --git a/sound/announcer/medbot/welcome.ogg b/sound/announcer/medbot/welcome.ogg
index f9a698fd08055..a48473153e15e 100644
Binary files a/sound/announcer/medbot/welcome.ogg and b/sound/announcer/medbot/welcome.ogg differ
diff --git a/sound/announcer/notice/notice1.ogg b/sound/announcer/notice/notice1.ogg
index da6454ce3cf78..0afffce2e979c 100644
Binary files a/sound/announcer/notice/notice1.ogg and b/sound/announcer/notice/notice1.ogg differ
diff --git a/sound/announcer/notice/notice2.ogg b/sound/announcer/notice/notice2.ogg
index 3489ca3e15b1a..a5d670ad3fcea 100644
Binary files a/sound/announcer/notice/notice2.ogg and b/sound/announcer/notice/notice2.ogg differ
diff --git a/sound/announcer/notice/notice3.ogg b/sound/announcer/notice/notice3.ogg
index e41a4361ca6c9..77ae19af552ca 100644
Binary files a/sound/announcer/notice/notice3.ogg and b/sound/announcer/notice/notice3.ogg differ
diff --git a/sound/announcer/vox_fem/,.ogg b/sound/announcer/vox_fem/,.ogg
index 62152d87b755c..aaa9a9e22b624 100644
Binary files a/sound/announcer/vox_fem/,.ogg and b/sound/announcer/vox_fem/,.ogg differ
diff --git a/sound/announcer/vox_fem/a.ogg b/sound/announcer/vox_fem/a.ogg
index 8acb94837a8be..3d8d2d25acd01 100644
Binary files a/sound/announcer/vox_fem/a.ogg and b/sound/announcer/vox_fem/a.ogg differ
diff --git a/sound/announcer/vox_fem/abduction.ogg b/sound/announcer/vox_fem/abduction.ogg
index aafe3c95c2a10..6e1baa9a367b2 100644
Binary files a/sound/announcer/vox_fem/abduction.ogg and b/sound/announcer/vox_fem/abduction.ogg differ
diff --git a/sound/announcer/vox_fem/abortions.ogg b/sound/announcer/vox_fem/abortions.ogg
index 615e4cd11b404..e8e18f6d0b51a 100644
Binary files a/sound/announcer/vox_fem/abortions.ogg and b/sound/announcer/vox_fem/abortions.ogg differ
diff --git a/sound/announcer/vox_fem/above.ogg b/sound/announcer/vox_fem/above.ogg
index c9a36368247b8..84f953ad6dbf6 100644
Binary files a/sound/announcer/vox_fem/above.ogg and b/sound/announcer/vox_fem/above.ogg differ
diff --git a/sound/announcer/vox_fem/absorb.ogg b/sound/announcer/vox_fem/absorb.ogg
index e05b4aa464570..ae57d68fcf483 100644
Binary files a/sound/announcer/vox_fem/absorb.ogg and b/sound/announcer/vox_fem/absorb.ogg differ
diff --git a/sound/announcer/vox_fem/absorbed.ogg b/sound/announcer/vox_fem/absorbed.ogg
index 726f1aa8c6ffb..26103a58ceb35 100644
Binary files a/sound/announcer/vox_fem/absorbed.ogg and b/sound/announcer/vox_fem/absorbed.ogg differ
diff --git a/sound/announcer/vox_fem/absorbing.ogg b/sound/announcer/vox_fem/absorbing.ogg
index 8b8c1f575c744..04ec05e38e4e7 100644
Binary files a/sound/announcer/vox_fem/absorbing.ogg and b/sound/announcer/vox_fem/absorbing.ogg differ
diff --git a/sound/announcer/vox_fem/abstain.ogg b/sound/announcer/vox_fem/abstain.ogg
index 66074764a1c43..782273caba82e 100644
Binary files a/sound/announcer/vox_fem/abstain.ogg and b/sound/announcer/vox_fem/abstain.ogg differ
diff --git a/sound/announcer/vox_fem/accelerating.ogg b/sound/announcer/vox_fem/accelerating.ogg
index bfe97d838812c..6f37a02f9c213 100644
Binary files a/sound/announcer/vox_fem/accelerating.ogg and b/sound/announcer/vox_fem/accelerating.ogg differ
diff --git a/sound/announcer/vox_fem/accelerator.ogg b/sound/announcer/vox_fem/accelerator.ogg
index bddacd65f6f59..96b109e0f9acb 100644
Binary files a/sound/announcer/vox_fem/accelerator.ogg and b/sound/announcer/vox_fem/accelerator.ogg differ
diff --git a/sound/announcer/vox_fem/accepted.ogg b/sound/announcer/vox_fem/accepted.ogg
index 97b5af22ccf17..7489566258afa 100644
Binary files a/sound/announcer/vox_fem/accepted.ogg and b/sound/announcer/vox_fem/accepted.ogg differ
diff --git a/sound/announcer/vox_fem/access.ogg b/sound/announcer/vox_fem/access.ogg
index f8da87fb29091..b52a74f5ea476 100644
Binary files a/sound/announcer/vox_fem/access.ogg and b/sound/announcer/vox_fem/access.ogg differ
diff --git a/sound/announcer/vox_fem/acknowledge.ogg b/sound/announcer/vox_fem/acknowledge.ogg
index cf75b2c1d4ba0..e7b1bb072f398 100644
Binary files a/sound/announcer/vox_fem/acknowledge.ogg and b/sound/announcer/vox_fem/acknowledge.ogg differ
diff --git a/sound/announcer/vox_fem/acknowledged.ogg b/sound/announcer/vox_fem/acknowledged.ogg
index 4cdeb50b0f0d6..0c602bb8f0012 100644
Binary files a/sound/announcer/vox_fem/acknowledged.ogg and b/sound/announcer/vox_fem/acknowledged.ogg differ
diff --git a/sound/announcer/vox_fem/acquired.ogg b/sound/announcer/vox_fem/acquired.ogg
index 805ab98c7fb0e..bab591000347e 100644
Binary files a/sound/announcer/vox_fem/acquired.ogg and b/sound/announcer/vox_fem/acquired.ogg differ
diff --git a/sound/announcer/vox_fem/acquisition.ogg b/sound/announcer/vox_fem/acquisition.ogg
index 45b75ba69d361..2a8e2d3590a94 100644
Binary files a/sound/announcer/vox_fem/acquisition.ogg and b/sound/announcer/vox_fem/acquisition.ogg differ
diff --git a/sound/announcer/vox_fem/across.ogg b/sound/announcer/vox_fem/across.ogg
index 975aa1f0371d8..31a67adfe9f1a 100644
Binary files a/sound/announcer/vox_fem/across.ogg and b/sound/announcer/vox_fem/across.ogg differ
diff --git a/sound/announcer/vox_fem/activate.ogg b/sound/announcer/vox_fem/activate.ogg
index cd3cf9c54aa85..b099ef6835b48 100644
Binary files a/sound/announcer/vox_fem/activate.ogg and b/sound/announcer/vox_fem/activate.ogg differ
diff --git a/sound/announcer/vox_fem/activated.ogg b/sound/announcer/vox_fem/activated.ogg
index 30a353375330e..55fe12b9bf68f 100644
Binary files a/sound/announcer/vox_fem/activated.ogg and b/sound/announcer/vox_fem/activated.ogg differ
diff --git a/sound/announcer/vox_fem/activating.ogg b/sound/announcer/vox_fem/activating.ogg
index 8082efb691143..e4bcfb3921530 100644
Binary files a/sound/announcer/vox_fem/activating.ogg and b/sound/announcer/vox_fem/activating.ogg differ
diff --git a/sound/announcer/vox_fem/activation.ogg b/sound/announcer/vox_fem/activation.ogg
index f06d33245df5b..bea8732110872 100644
Binary files a/sound/announcer/vox_fem/activation.ogg and b/sound/announcer/vox_fem/activation.ogg differ
diff --git a/sound/announcer/vox_fem/active.ogg b/sound/announcer/vox_fem/active.ogg
index 54d0c1eb45f5c..58bb2f9db2f78 100644
Binary files a/sound/announcer/vox_fem/active.ogg and b/sound/announcer/vox_fem/active.ogg differ
diff --git a/sound/announcer/vox_fem/activity.ogg b/sound/announcer/vox_fem/activity.ogg
index b7edde2e1a10e..44df0b70cbd04 100644
Binary files a/sound/announcer/vox_fem/activity.ogg and b/sound/announcer/vox_fem/activity.ogg differ
diff --git a/sound/announcer/vox_fem/adios.ogg b/sound/announcer/vox_fem/adios.ogg
index 44164d66208b3..b96769e4bc923 100644
Binary files a/sound/announcer/vox_fem/adios.ogg and b/sound/announcer/vox_fem/adios.ogg differ
diff --git a/sound/announcer/vox_fem/administration.ogg b/sound/announcer/vox_fem/administration.ogg
index 7744870a59a90..ba71eeb4c4516 100644
Binary files a/sound/announcer/vox_fem/administration.ogg and b/sound/announcer/vox_fem/administration.ogg differ
diff --git a/sound/announcer/vox_fem/advanced.ogg b/sound/announcer/vox_fem/advanced.ogg
index 96f076fc96cfe..e658536b6fd26 100644
Binary files a/sound/announcer/vox_fem/advanced.ogg and b/sound/announcer/vox_fem/advanced.ogg differ
diff --git a/sound/announcer/vox_fem/advised.ogg b/sound/announcer/vox_fem/advised.ogg
index 7c8d4f75153ce..939d4442816e0 100644
Binary files a/sound/announcer/vox_fem/advised.ogg and b/sound/announcer/vox_fem/advised.ogg differ
diff --git a/sound/announcer/vox_fem/affect.ogg b/sound/announcer/vox_fem/affect.ogg
index 4c9b7aaeaad67..109b0ede01adf 100644
Binary files a/sound/announcer/vox_fem/affect.ogg and b/sound/announcer/vox_fem/affect.ogg differ
diff --git a/sound/announcer/vox_fem/affected.ogg b/sound/announcer/vox_fem/affected.ogg
index c634e08f73421..583a2ea30c450 100644
Binary files a/sound/announcer/vox_fem/affected.ogg and b/sound/announcer/vox_fem/affected.ogg differ
diff --git a/sound/announcer/vox_fem/affecting.ogg b/sound/announcer/vox_fem/affecting.ogg
index 18f2e3c0c7a67..dd7ab06409dd3 100644
Binary files a/sound/announcer/vox_fem/affecting.ogg and b/sound/announcer/vox_fem/affecting.ogg differ
diff --git a/sound/announcer/vox_fem/aft.ogg b/sound/announcer/vox_fem/aft.ogg
index b9b3edcf9027e..30933e4bb127d 100644
Binary files a/sound/announcer/vox_fem/aft.ogg and b/sound/announcer/vox_fem/aft.ogg differ
diff --git a/sound/announcer/vox_fem/after.ogg b/sound/announcer/vox_fem/after.ogg
index a728cf4af45d6..c30c0becaf3ad 100644
Binary files a/sound/announcer/vox_fem/after.ogg and b/sound/announcer/vox_fem/after.ogg differ
diff --git a/sound/announcer/vox_fem/agent.ogg b/sound/announcer/vox_fem/agent.ogg
index 9b4f3dc21679d..588084506bf04 100644
Binary files a/sound/announcer/vox_fem/agent.ogg and b/sound/announcer/vox_fem/agent.ogg differ
diff --git a/sound/announcer/vox_fem/ai.ogg b/sound/announcer/vox_fem/ai.ogg
index 978455d0874d0..3d4976fd8c93b 100644
Binary files a/sound/announcer/vox_fem/ai.ogg and b/sound/announcer/vox_fem/ai.ogg differ
diff --git a/sound/announcer/vox_fem/air.ogg b/sound/announcer/vox_fem/air.ogg
index ac161097c8b68..15fd62a88c308 100644
Binary files a/sound/announcer/vox_fem/air.ogg and b/sound/announcer/vox_fem/air.ogg differ
diff --git a/sound/announcer/vox_fem/airlock.ogg b/sound/announcer/vox_fem/airlock.ogg
index 650b6c0e3d64f..9efb1e2c9c586 100644
Binary files a/sound/announcer/vox_fem/airlock.ogg and b/sound/announcer/vox_fem/airlock.ogg differ
diff --git a/sound/announcer/vox_fem/alarm.ogg b/sound/announcer/vox_fem/alarm.ogg
index 424e4aefc4784..576fed726e223 100644
Binary files a/sound/announcer/vox_fem/alarm.ogg and b/sound/announcer/vox_fem/alarm.ogg differ
diff --git a/sound/announcer/vox_fem/alarmed.ogg b/sound/announcer/vox_fem/alarmed.ogg
index a24b7caf99a29..1b12010aa3ba7 100644
Binary files a/sound/announcer/vox_fem/alarmed.ogg and b/sound/announcer/vox_fem/alarmed.ogg differ
diff --git a/sound/announcer/vox_fem/alarming.ogg b/sound/announcer/vox_fem/alarming.ogg
index 35d51efd921d5..46d83fb327d8d 100644
Binary files a/sound/announcer/vox_fem/alarming.ogg and b/sound/announcer/vox_fem/alarming.ogg differ
diff --git a/sound/announcer/vox_fem/alcohol.ogg b/sound/announcer/vox_fem/alcohol.ogg
index a304167a27f85..2069829aa3f0a 100644
Binary files a/sound/announcer/vox_fem/alcohol.ogg and b/sound/announcer/vox_fem/alcohol.ogg differ
diff --git a/sound/announcer/vox_fem/alert.ogg b/sound/announcer/vox_fem/alert.ogg
index dd0005f90d381..a95272f027eb5 100644
Binary files a/sound/announcer/vox_fem/alert.ogg and b/sound/announcer/vox_fem/alert.ogg differ
diff --git a/sound/announcer/vox_fem/alerted.ogg b/sound/announcer/vox_fem/alerted.ogg
index 2365c103108b1..cac9d0d69d158 100644
Binary files a/sound/announcer/vox_fem/alerted.ogg and b/sound/announcer/vox_fem/alerted.ogg differ
diff --git a/sound/announcer/vox_fem/alerting.ogg b/sound/announcer/vox_fem/alerting.ogg
index 444e484665e90..f6a99c5b3855b 100644
Binary files a/sound/announcer/vox_fem/alerting.ogg and b/sound/announcer/vox_fem/alerting.ogg differ
diff --git a/sound/announcer/vox_fem/alien.ogg b/sound/announcer/vox_fem/alien.ogg
index ceb29585b4728..4b3bc87316b64 100644
Binary files a/sound/announcer/vox_fem/alien.ogg and b/sound/announcer/vox_fem/alien.ogg differ
diff --git a/sound/announcer/vox_fem/align.ogg b/sound/announcer/vox_fem/align.ogg
index bcf4b6465a89d..4d6f5d570df91 100644
Binary files a/sound/announcer/vox_fem/align.ogg and b/sound/announcer/vox_fem/align.ogg differ
diff --git a/sound/announcer/vox_fem/aligned.ogg b/sound/announcer/vox_fem/aligned.ogg
index 4ffeba396a411..62d6c69eb5ce1 100644
Binary files a/sound/announcer/vox_fem/aligned.ogg and b/sound/announcer/vox_fem/aligned.ogg differ
diff --git a/sound/announcer/vox_fem/all.ogg b/sound/announcer/vox_fem/all.ogg
index 240899126db41..07982d96c4407 100644
Binary files a/sound/announcer/vox_fem/all.ogg and b/sound/announcer/vox_fem/all.ogg differ
diff --git a/sound/announcer/vox_fem/allow.ogg b/sound/announcer/vox_fem/allow.ogg
index ea0b8098fd75a..d162b5d34f846 100644
Binary files a/sound/announcer/vox_fem/allow.ogg and b/sound/announcer/vox_fem/allow.ogg differ
diff --git a/sound/announcer/vox_fem/alongside.ogg b/sound/announcer/vox_fem/alongside.ogg
index a96b9e7ba25d0..357b0905fbe28 100644
Binary files a/sound/announcer/vox_fem/alongside.ogg and b/sound/announcer/vox_fem/alongside.ogg differ
diff --git a/sound/announcer/vox_fem/alpha.ogg b/sound/announcer/vox_fem/alpha.ogg
index cb8419f130d82..13db6d71ff03a 100644
Binary files a/sound/announcer/vox_fem/alpha.ogg and b/sound/announcer/vox_fem/alpha.ogg differ
diff --git a/sound/announcer/vox_fem/also.ogg b/sound/announcer/vox_fem/also.ogg
index cd541f0ce7aaa..169d8c432ebd3 100644
Binary files a/sound/announcer/vox_fem/also.ogg and b/sound/announcer/vox_fem/also.ogg differ
diff --git a/sound/announcer/vox_fem/am.ogg b/sound/announcer/vox_fem/am.ogg
index 58152f19ecf49..dcef7f4dbc8b0 100644
Binary files a/sound/announcer/vox_fem/am.ogg and b/sound/announcer/vox_fem/am.ogg differ
diff --git a/sound/announcer/vox_fem/amigo.ogg b/sound/announcer/vox_fem/amigo.ogg
index 34001cb33d902..0b237c1f09ce0 100644
Binary files a/sound/announcer/vox_fem/amigo.ogg and b/sound/announcer/vox_fem/amigo.ogg differ
diff --git a/sound/announcer/vox_fem/ammunition.ogg b/sound/announcer/vox_fem/ammunition.ogg
index 67a1e32c02e48..3d17e0ec8bb41 100644
Binary files a/sound/announcer/vox_fem/ammunition.ogg and b/sound/announcer/vox_fem/ammunition.ogg differ
diff --git a/sound/announcer/vox_fem/amount.ogg b/sound/announcer/vox_fem/amount.ogg
index 19b59e8263cf8..ccee816658553 100644
Binary files a/sound/announcer/vox_fem/amount.ogg and b/sound/announcer/vox_fem/amount.ogg differ
diff --git a/sound/announcer/vox_fem/an.ogg b/sound/announcer/vox_fem/an.ogg
index 2b8f5d4888f1e..ebcd5e0672e3a 100644
Binary files a/sound/announcer/vox_fem/an.ogg and b/sound/announcer/vox_fem/an.ogg differ
diff --git a/sound/announcer/vox_fem/and.ogg b/sound/announcer/vox_fem/and.ogg
index cbf10ac90522a..e9468209181a1 100644
Binary files a/sound/announcer/vox_fem/and.ogg and b/sound/announcer/vox_fem/and.ogg differ
diff --git a/sound/announcer/vox_fem/animal.ogg b/sound/announcer/vox_fem/animal.ogg
index 570a4572f73b3..fb299a55008d1 100644
Binary files a/sound/announcer/vox_fem/animal.ogg and b/sound/announcer/vox_fem/animal.ogg differ
diff --git a/sound/announcer/vox_fem/annihilate.ogg b/sound/announcer/vox_fem/annihilate.ogg
index 375dfda691fd1..2ad7d0dd30276 100644
Binary files a/sound/announcer/vox_fem/annihilate.ogg and b/sound/announcer/vox_fem/annihilate.ogg differ
diff --git a/sound/announcer/vox_fem/annihilated.ogg b/sound/announcer/vox_fem/annihilated.ogg
index 823cc93dc6a6c..cc33a8950f971 100644
Binary files a/sound/announcer/vox_fem/annihilated.ogg and b/sound/announcer/vox_fem/annihilated.ogg differ
diff --git a/sound/announcer/vox_fem/annihilating.ogg b/sound/announcer/vox_fem/annihilating.ogg
index 95a507df8503f..6be7d701a17d1 100644
Binary files a/sound/announcer/vox_fem/annihilating.ogg and b/sound/announcer/vox_fem/annihilating.ogg differ
diff --git a/sound/announcer/vox_fem/annihilation.ogg b/sound/announcer/vox_fem/annihilation.ogg
index 6acb85503388c..8999140bc9ff9 100644
Binary files a/sound/announcer/vox_fem/annihilation.ogg and b/sound/announcer/vox_fem/annihilation.ogg differ
diff --git a/sound/announcer/vox_fem/announcement.ogg b/sound/announcer/vox_fem/announcement.ogg
index 579e333228cde..bb6d58928f96c 100644
Binary files a/sound/announcer/vox_fem/announcement.ogg and b/sound/announcer/vox_fem/announcement.ogg differ
diff --git a/sound/announcer/vox_fem/anomalous.ogg b/sound/announcer/vox_fem/anomalous.ogg
index 88cf095629d2e..1e4698f2496d3 100644
Binary files a/sound/announcer/vox_fem/anomalous.ogg and b/sound/announcer/vox_fem/anomalous.ogg differ
diff --git a/sound/announcer/vox_fem/answer.ogg b/sound/announcer/vox_fem/answer.ogg
index 533a1f7a8b533..114c86ae2838b 100644
Binary files a/sound/announcer/vox_fem/answer.ogg and b/sound/announcer/vox_fem/answer.ogg differ
diff --git a/sound/announcer/vox_fem/antenna.ogg b/sound/announcer/vox_fem/antenna.ogg
index da6d727da6e52..c6db98720ca42 100644
Binary files a/sound/announcer/vox_fem/antenna.ogg and b/sound/announcer/vox_fem/antenna.ogg differ
diff --git a/sound/announcer/vox_fem/anti-noblium.ogg b/sound/announcer/vox_fem/anti-noblium.ogg
index 70f89e82229a7..7020f518583fb 100644
Binary files a/sound/announcer/vox_fem/anti-noblium.ogg and b/sound/announcer/vox_fem/anti-noblium.ogg differ
diff --git a/sound/announcer/vox_fem/any.ogg b/sound/announcer/vox_fem/any.ogg
index 353f6f861983c..917660effab5a 100644
Binary files a/sound/announcer/vox_fem/any.ogg and b/sound/announcer/vox_fem/any.ogg differ
diff --git a/sound/announcer/vox_fem/apc.ogg b/sound/announcer/vox_fem/apc.ogg
index 38c7e8175d018..02dd85d21b9a4 100644
Binary files a/sound/announcer/vox_fem/apc.ogg and b/sound/announcer/vox_fem/apc.ogg differ
diff --git a/sound/announcer/vox_fem/apprehend.ogg b/sound/announcer/vox_fem/apprehend.ogg
index 22088088d4776..07979aa7d2320 100644
Binary files a/sound/announcer/vox_fem/apprehend.ogg and b/sound/announcer/vox_fem/apprehend.ogg differ
diff --git a/sound/announcer/vox_fem/approach.ogg b/sound/announcer/vox_fem/approach.ogg
index 195175a5bea0b..fcfb9956fae98 100644
Binary files a/sound/announcer/vox_fem/approach.ogg and b/sound/announcer/vox_fem/approach.ogg differ
diff --git a/sound/announcer/vox_fem/arc.ogg b/sound/announcer/vox_fem/arc.ogg
index 3ebed29740dd1..06d3ee5394645 100644
Binary files a/sound/announcer/vox_fem/arc.ogg and b/sound/announcer/vox_fem/arc.ogg differ
diff --git a/sound/announcer/vox_fem/arcs.ogg b/sound/announcer/vox_fem/arcs.ogg
index cb32908d5b84e..1720c6de216e5 100644
Binary files a/sound/announcer/vox_fem/arcs.ogg and b/sound/announcer/vox_fem/arcs.ogg differ
diff --git a/sound/announcer/vox_fem/are.ogg b/sound/announcer/vox_fem/are.ogg
index 9efe22b27c606..11d218f16382c 100644
Binary files a/sound/announcer/vox_fem/are.ogg and b/sound/announcer/vox_fem/are.ogg differ
diff --git a/sound/announcer/vox_fem/area.ogg b/sound/announcer/vox_fem/area.ogg
index 369782b006f18..47c24093edd8a 100644
Binary files a/sound/announcer/vox_fem/area.ogg and b/sound/announcer/vox_fem/area.ogg differ
diff --git a/sound/announcer/vox_fem/arm.ogg b/sound/announcer/vox_fem/arm.ogg
index 0aaa0840d5348..313979e5ba098 100644
Binary files a/sound/announcer/vox_fem/arm.ogg and b/sound/announcer/vox_fem/arm.ogg differ
diff --git a/sound/announcer/vox_fem/armed.ogg b/sound/announcer/vox_fem/armed.ogg
index caf544e3db446..d198e11fdc668 100644
Binary files a/sound/announcer/vox_fem/armed.ogg and b/sound/announcer/vox_fem/armed.ogg differ
diff --git a/sound/announcer/vox_fem/armor.ogg b/sound/announcer/vox_fem/armor.ogg
index 6fbdf476d72c7..692e07559c87a 100644
Binary files a/sound/announcer/vox_fem/armor.ogg and b/sound/announcer/vox_fem/armor.ogg differ
diff --git a/sound/announcer/vox_fem/armory.ogg b/sound/announcer/vox_fem/armory.ogg
index 9d445cf2da307..1885da10d5d30 100644
Binary files a/sound/announcer/vox_fem/armory.ogg and b/sound/announcer/vox_fem/armory.ogg differ
diff --git a/sound/announcer/vox_fem/around.ogg b/sound/announcer/vox_fem/around.ogg
index 76183f92cda08..a032417f6242e 100644
Binary files a/sound/announcer/vox_fem/around.ogg and b/sound/announcer/vox_fem/around.ogg differ
diff --git a/sound/announcer/vox_fem/array.ogg b/sound/announcer/vox_fem/array.ogg
index 5e976190a5034..052eaa944747c 100644
Binary files a/sound/announcer/vox_fem/array.ogg and b/sound/announcer/vox_fem/array.ogg differ
diff --git a/sound/announcer/vox_fem/arrest.ogg b/sound/announcer/vox_fem/arrest.ogg
index 843711c35aa2f..dd934bac65120 100644
Binary files a/sound/announcer/vox_fem/arrest.ogg and b/sound/announcer/vox_fem/arrest.ogg differ
diff --git a/sound/announcer/vox_fem/artillery.ogg b/sound/announcer/vox_fem/artillery.ogg
index ab072d72584c3..0fb626294d146 100644
Binary files a/sound/announcer/vox_fem/artillery.ogg and b/sound/announcer/vox_fem/artillery.ogg differ
diff --git a/sound/announcer/vox_fem/asimov.ogg b/sound/announcer/vox_fem/asimov.ogg
index c20264de2cf31..064d148b5c775 100644
Binary files a/sound/announcer/vox_fem/asimov.ogg and b/sound/announcer/vox_fem/asimov.ogg differ
diff --git a/sound/announcer/vox_fem/ask.ogg b/sound/announcer/vox_fem/ask.ogg
index c8d00b0039996..e36a221e3882e 100644
Binary files a/sound/announcer/vox_fem/ask.ogg and b/sound/announcer/vox_fem/ask.ogg differ
diff --git a/sound/announcer/vox_fem/ass.ogg b/sound/announcer/vox_fem/ass.ogg
index e85e315e1a1df..1f7505a830977 100644
Binary files a/sound/announcer/vox_fem/ass.ogg and b/sound/announcer/vox_fem/ass.ogg differ
diff --git a/sound/announcer/vox_fem/asshole.ogg b/sound/announcer/vox_fem/asshole.ogg
index a24442ba9d88d..c99efcece7369 100644
Binary files a/sound/announcer/vox_fem/asshole.ogg and b/sound/announcer/vox_fem/asshole.ogg differ
diff --git a/sound/announcer/vox_fem/assholes.ogg b/sound/announcer/vox_fem/assholes.ogg
index 5312d8f07f262..057c8514953bb 100644
Binary files a/sound/announcer/vox_fem/assholes.ogg and b/sound/announcer/vox_fem/assholes.ogg differ
diff --git a/sound/announcer/vox_fem/assistance.ogg b/sound/announcer/vox_fem/assistance.ogg
index 9f13867a64192..c9383c4bdefd7 100644
Binary files a/sound/announcer/vox_fem/assistance.ogg and b/sound/announcer/vox_fem/assistance.ogg differ
diff --git a/sound/announcer/vox_fem/assistant.ogg b/sound/announcer/vox_fem/assistant.ogg
index 7d4e901cf1c4e..27dd2167d729a 100644
Binary files a/sound/announcer/vox_fem/assistant.ogg and b/sound/announcer/vox_fem/assistant.ogg differ
diff --git a/sound/announcer/vox_fem/at.ogg b/sound/announcer/vox_fem/at.ogg
index 1517054a492f3..e82b8981e6cd8 100644
Binary files a/sound/announcer/vox_fem/at.ogg and b/sound/announcer/vox_fem/at.ogg differ
diff --git a/sound/announcer/vox_fem/ate.ogg b/sound/announcer/vox_fem/ate.ogg
index 8dcdd461d11c2..d38441a3312a3 100644
Binary files a/sound/announcer/vox_fem/ate.ogg and b/sound/announcer/vox_fem/ate.ogg differ
diff --git a/sound/announcer/vox_fem/atmosphere.ogg b/sound/announcer/vox_fem/atmosphere.ogg
index 6e0d541d38697..120d8182c497b 100644
Binary files a/sound/announcer/vox_fem/atmosphere.ogg and b/sound/announcer/vox_fem/atmosphere.ogg differ
diff --git a/sound/announcer/vox_fem/atmospheric.ogg b/sound/announcer/vox_fem/atmospheric.ogg
index d618ae9773cae..fabe3df5bed11 100644
Binary files a/sound/announcer/vox_fem/atmospheric.ogg and b/sound/announcer/vox_fem/atmospheric.ogg differ
diff --git a/sound/announcer/vox_fem/atmospherics.ogg b/sound/announcer/vox_fem/atmospherics.ogg
index bac1013b7473d..0fb9ef8b949df 100644
Binary files a/sound/announcer/vox_fem/atmospherics.ogg and b/sound/announcer/vox_fem/atmospherics.ogg differ
diff --git a/sound/announcer/vox_fem/atomic.ogg b/sound/announcer/vox_fem/atomic.ogg
index be6de2fad950b..eeace80b88ad5 100644
Binary files a/sound/announcer/vox_fem/atomic.ogg and b/sound/announcer/vox_fem/atomic.ogg differ
diff --git a/sound/announcer/vox_fem/attention.ogg b/sound/announcer/vox_fem/attention.ogg
index 00780e35a9a4e..b1b7feada8df9 100644
Binary files a/sound/announcer/vox_fem/attention.ogg and b/sound/announcer/vox_fem/attention.ogg differ
diff --git a/sound/announcer/vox_fem/authentication.ogg b/sound/announcer/vox_fem/authentication.ogg
index 031484edaf282..c43cea5af7cb0 100644
Binary files a/sound/announcer/vox_fem/authentication.ogg and b/sound/announcer/vox_fem/authentication.ogg differ
diff --git a/sound/announcer/vox_fem/authorize.ogg b/sound/announcer/vox_fem/authorize.ogg
index 4df4830b65aa7..9c8bc0091b6c8 100644
Binary files a/sound/announcer/vox_fem/authorize.ogg and b/sound/announcer/vox_fem/authorize.ogg differ
diff --git a/sound/announcer/vox_fem/authorized.ogg b/sound/announcer/vox_fem/authorized.ogg
index 6a989aeff63f6..a848992e15e89 100644
Binary files a/sound/announcer/vox_fem/authorized.ogg and b/sound/announcer/vox_fem/authorized.ogg differ
diff --git a/sound/announcer/vox_fem/automatic.ogg b/sound/announcer/vox_fem/automatic.ogg
index 5f87645f893be..78f99591fc3de 100644
Binary files a/sound/announcer/vox_fem/automatic.ogg and b/sound/announcer/vox_fem/automatic.ogg differ
diff --git a/sound/announcer/vox_fem/away.ogg b/sound/announcer/vox_fem/away.ogg
index e158d2cd80305..eee8322ece9f3 100644
Binary files a/sound/announcer/vox_fem/away.ogg and b/sound/announcer/vox_fem/away.ogg differ
diff --git a/sound/announcer/vox_fem/awful.ogg b/sound/announcer/vox_fem/awful.ogg
index 49768538acde6..e29ad46328a19 100644
Binary files a/sound/announcer/vox_fem/awful.ogg and b/sound/announcer/vox_fem/awful.ogg differ
diff --git a/sound/announcer/vox_fem/b.ogg b/sound/announcer/vox_fem/b.ogg
index f41d01e441393..ddb2cedd49c06 100644
Binary files a/sound/announcer/vox_fem/b.ogg and b/sound/announcer/vox_fem/b.ogg differ
diff --git a/sound/announcer/vox_fem/back.ogg b/sound/announcer/vox_fem/back.ogg
index 63cbfcde1b848..d5914269117fb 100644
Binary files a/sound/announcer/vox_fem/back.ogg and b/sound/announcer/vox_fem/back.ogg differ
diff --git a/sound/announcer/vox_fem/backman.ogg b/sound/announcer/vox_fem/backman.ogg
index 73690c48e7209..df99a03e284be 100644
Binary files a/sound/announcer/vox_fem/backman.ogg and b/sound/announcer/vox_fem/backman.ogg differ
diff --git a/sound/announcer/vox_fem/bad.ogg b/sound/announcer/vox_fem/bad.ogg
index ff05d65af20f4..57884c8feec7f 100644
Binary files a/sound/announcer/vox_fem/bad.ogg and b/sound/announcer/vox_fem/bad.ogg differ
diff --git a/sound/announcer/vox_fem/bag.ogg b/sound/announcer/vox_fem/bag.ogg
index 79a1d686f46ff..c40b975cb3127 100644
Binary files a/sound/announcer/vox_fem/bag.ogg and b/sound/announcer/vox_fem/bag.ogg differ
diff --git a/sound/announcer/vox_fem/bailey.ogg b/sound/announcer/vox_fem/bailey.ogg
index 95b6ef6b0b4d4..9ea810fed5288 100644
Binary files a/sound/announcer/vox_fem/bailey.ogg and b/sound/announcer/vox_fem/bailey.ogg differ
diff --git a/sound/announcer/vox_fem/bar.ogg b/sound/announcer/vox_fem/bar.ogg
index 69a21c9746016..96a96b3f9b4aa 100644
Binary files a/sound/announcer/vox_fem/bar.ogg and b/sound/announcer/vox_fem/bar.ogg differ
diff --git a/sound/announcer/vox_fem/barracks.ogg b/sound/announcer/vox_fem/barracks.ogg
index 0ff6cbb0f1953..f12b9fe24f3b7 100644
Binary files a/sound/announcer/vox_fem/barracks.ogg and b/sound/announcer/vox_fem/barracks.ogg differ
diff --git a/sound/announcer/vox_fem/bartender.ogg b/sound/announcer/vox_fem/bartender.ogg
index a9dfbbcafdc72..074d22ba2e39f 100644
Binary files a/sound/announcer/vox_fem/bartender.ogg and b/sound/announcer/vox_fem/bartender.ogg differ
diff --git a/sound/announcer/vox_fem/base.ogg b/sound/announcer/vox_fem/base.ogg
index 242432b822986..d7f0b2e889e86 100644
Binary files a/sound/announcer/vox_fem/base.ogg and b/sound/announcer/vox_fem/base.ogg differ
diff --git a/sound/announcer/vox_fem/bay.ogg b/sound/announcer/vox_fem/bay.ogg
index 8ac3e449e79f5..f2b1d5bd74e4c 100644
Binary files a/sound/announcer/vox_fem/bay.ogg and b/sound/announcer/vox_fem/bay.ogg differ
diff --git a/sound/announcer/vox_fem/be.ogg b/sound/announcer/vox_fem/be.ogg
index 5ae70289efa2f..d0ffe9d1f8ab7 100644
Binary files a/sound/announcer/vox_fem/be.ogg and b/sound/announcer/vox_fem/be.ogg differ
diff --git a/sound/announcer/vox_fem/beaker.ogg b/sound/announcer/vox_fem/beaker.ogg
index 6863afc5c79af..ee81f25794f6f 100644
Binary files a/sound/announcer/vox_fem/beaker.ogg and b/sound/announcer/vox_fem/beaker.ogg differ
diff --git a/sound/announcer/vox_fem/beam.ogg b/sound/announcer/vox_fem/beam.ogg
index b26df5ca45ddc..66df8619b1c0d 100644
Binary files a/sound/announcer/vox_fem/beam.ogg and b/sound/announcer/vox_fem/beam.ogg differ
diff --git a/sound/announcer/vox_fem/been.ogg b/sound/announcer/vox_fem/been.ogg
index 02a4fccfbc5b4..ce7e2a264cd02 100644
Binary files a/sound/announcer/vox_fem/been.ogg and b/sound/announcer/vox_fem/been.ogg differ
diff --git a/sound/announcer/vox_fem/beep.ogg b/sound/announcer/vox_fem/beep.ogg
index 38e825b80d833..9b702989645c9 100644
Binary files a/sound/announcer/vox_fem/beep.ogg and b/sound/announcer/vox_fem/beep.ogg differ
diff --git a/sound/announcer/vox_fem/before.ogg b/sound/announcer/vox_fem/before.ogg
index cfde021dfde6f..47f5deb69e365 100644
Binary files a/sound/announcer/vox_fem/before.ogg and b/sound/announcer/vox_fem/before.ogg differ
diff --git a/sound/announcer/vox_fem/began.ogg b/sound/announcer/vox_fem/began.ogg
index 548143aff53c5..a0245119eaa53 100644
Binary files a/sound/announcer/vox_fem/began.ogg and b/sound/announcer/vox_fem/began.ogg differ
diff --git a/sound/announcer/vox_fem/begin.ogg b/sound/announcer/vox_fem/begin.ogg
index 5c70cebbb0966..b20ea5c047d7e 100644
Binary files a/sound/announcer/vox_fem/begin.ogg and b/sound/announcer/vox_fem/begin.ogg differ
diff --git a/sound/announcer/vox_fem/begins.ogg b/sound/announcer/vox_fem/begins.ogg
index 5fedd2ef4b59b..6fffc4aa3568d 100644
Binary files a/sound/announcer/vox_fem/begins.ogg and b/sound/announcer/vox_fem/begins.ogg differ
diff --git a/sound/announcer/vox_fem/below.ogg b/sound/announcer/vox_fem/below.ogg
index 6425b7fd10a24..ff4270ab03ad6 100644
Binary files a/sound/announcer/vox_fem/below.ogg and b/sound/announcer/vox_fem/below.ogg differ
diff --git a/sound/announcer/vox_fem/beside.ogg b/sound/announcer/vox_fem/beside.ogg
index 3522726d46811..501fc5937ccf9 100644
Binary files a/sound/announcer/vox_fem/beside.ogg and b/sound/announcer/vox_fem/beside.ogg differ
diff --git a/sound/announcer/vox_fem/beware.ogg b/sound/announcer/vox_fem/beware.ogg
index 77808fe138f0b..361816ef10303 100644
Binary files a/sound/announcer/vox_fem/beware.ogg and b/sound/announcer/vox_fem/beware.ogg differ
diff --git a/sound/announcer/vox_fem/beyond.ogg b/sound/announcer/vox_fem/beyond.ogg
index c48b2dc8bf604..2f04a235f2b7c 100644
Binary files a/sound/announcer/vox_fem/beyond.ogg and b/sound/announcer/vox_fem/beyond.ogg differ
diff --git a/sound/announcer/vox_fem/big.ogg b/sound/announcer/vox_fem/big.ogg
index 662e3a54f7a1a..1e9eb51f5b606 100644
Binary files a/sound/announcer/vox_fem/big.ogg and b/sound/announcer/vox_fem/big.ogg differ
diff --git a/sound/announcer/vox_fem/billion.ogg b/sound/announcer/vox_fem/billion.ogg
index 126cc1d8049b7..84e4071dd271b 100644
Binary files a/sound/announcer/vox_fem/billion.ogg and b/sound/announcer/vox_fem/billion.ogg differ
diff --git a/sound/announcer/vox_fem/biohazard.ogg b/sound/announcer/vox_fem/biohazard.ogg
index c6db0331d8fd1..f19e32b39c8b8 100644
Binary files a/sound/announcer/vox_fem/biohazard.ogg and b/sound/announcer/vox_fem/biohazard.ogg differ
diff --git a/sound/announcer/vox_fem/biological.ogg b/sound/announcer/vox_fem/biological.ogg
index 8549b3ce21c74..0928c10594603 100644
Binary files a/sound/announcer/vox_fem/biological.ogg and b/sound/announcer/vox_fem/biological.ogg differ
diff --git a/sound/announcer/vox_fem/birdwell.ogg b/sound/announcer/vox_fem/birdwell.ogg
index f76d0957eb152..3731434809c8a 100644
Binary files a/sound/announcer/vox_fem/birdwell.ogg and b/sound/announcer/vox_fem/birdwell.ogg differ
diff --git a/sound/announcer/vox_fem/bitch.ogg b/sound/announcer/vox_fem/bitch.ogg
index 1cdac8de7fecb..40d2d747ac624 100644
Binary files a/sound/announcer/vox_fem/bitch.ogg and b/sound/announcer/vox_fem/bitch.ogg differ
diff --git a/sound/announcer/vox_fem/bitches.ogg b/sound/announcer/vox_fem/bitches.ogg
index c97a0df116800..d7768f1c6fe36 100644
Binary files a/sound/announcer/vox_fem/bitches.ogg and b/sound/announcer/vox_fem/bitches.ogg differ
diff --git a/sound/announcer/vox_fem/bitcoin.ogg b/sound/announcer/vox_fem/bitcoin.ogg
index 2407f6a2a6bc3..7c3df87948a4f 100644
Binary files a/sound/announcer/vox_fem/bitcoin.ogg and b/sound/announcer/vox_fem/bitcoin.ogg differ
diff --git a/sound/announcer/vox_fem/bitrun.ogg b/sound/announcer/vox_fem/bitrun.ogg
index 159cc01bfb401..1bbe993f303ec 100644
Binary files a/sound/announcer/vox_fem/bitrun.ogg and b/sound/announcer/vox_fem/bitrun.ogg differ
diff --git a/sound/announcer/vox_fem/bitrunner.ogg b/sound/announcer/vox_fem/bitrunner.ogg
index 32b2220ba67bc..ae8f9722d5fb8 100644
Binary files a/sound/announcer/vox_fem/bitrunner.ogg and b/sound/announcer/vox_fem/bitrunner.ogg differ
diff --git a/sound/announcer/vox_fem/bitrunning.ogg b/sound/announcer/vox_fem/bitrunning.ogg
index 106757e007733..544bf7540b3a4 100644
Binary files a/sound/announcer/vox_fem/bitrunning.ogg and b/sound/announcer/vox_fem/bitrunning.ogg differ
diff --git a/sound/announcer/vox_fem/black.ogg b/sound/announcer/vox_fem/black.ogg
index d4abc24167631..9449d67975581 100644
Binary files a/sound/announcer/vox_fem/black.ogg and b/sound/announcer/vox_fem/black.ogg differ
diff --git a/sound/announcer/vox_fem/blast.ogg b/sound/announcer/vox_fem/blast.ogg
index 79a0190433231..6e5fdb1bcc93c 100644
Binary files a/sound/announcer/vox_fem/blast.ogg and b/sound/announcer/vox_fem/blast.ogg differ
diff --git a/sound/announcer/vox_fem/bleed.ogg b/sound/announcer/vox_fem/bleed.ogg
index 541fedfb9e8e1..a6509bd442bff 100644
Binary files a/sound/announcer/vox_fem/bleed.ogg and b/sound/announcer/vox_fem/bleed.ogg differ
diff --git a/sound/announcer/vox_fem/blob.ogg b/sound/announcer/vox_fem/blob.ogg
index 9332313e3da83..de6392fd3d779 100644
Binary files a/sound/announcer/vox_fem/blob.ogg and b/sound/announcer/vox_fem/blob.ogg differ
diff --git a/sound/announcer/vox_fem/blocked.ogg b/sound/announcer/vox_fem/blocked.ogg
index 451898fed1749..7f985e2af5078 100644
Binary files a/sound/announcer/vox_fem/blocked.ogg and b/sound/announcer/vox_fem/blocked.ogg differ
diff --git a/sound/announcer/vox_fem/blood.ogg b/sound/announcer/vox_fem/blood.ogg
index 3d5132b48bbf6..7b98539402475 100644
Binary files a/sound/announcer/vox_fem/blood.ogg and b/sound/announcer/vox_fem/blood.ogg differ
diff --git a/sound/announcer/vox_fem/bloop.ogg b/sound/announcer/vox_fem/bloop.ogg
index e65d755560f53..ae03b7c9e76fa 100644
Binary files a/sound/announcer/vox_fem/bloop.ogg and b/sound/announcer/vox_fem/bloop.ogg differ
diff --git a/sound/announcer/vox_fem/blue.ogg b/sound/announcer/vox_fem/blue.ogg
index ed25ec85758de..77c571fd20d47 100644
Binary files a/sound/announcer/vox_fem/blue.ogg and b/sound/announcer/vox_fem/blue.ogg differ
diff --git a/sound/announcer/vox_fem/bluespace.ogg b/sound/announcer/vox_fem/bluespace.ogg
index eef607da7491c..0a59a0e38fee7 100644
Binary files a/sound/announcer/vox_fem/bluespace.ogg and b/sound/announcer/vox_fem/bluespace.ogg differ
diff --git a/sound/announcer/vox_fem/bomb.ogg b/sound/announcer/vox_fem/bomb.ogg
index c8e1981578397..621e7389fe974 100644
Binary files a/sound/announcer/vox_fem/bomb.ogg and b/sound/announcer/vox_fem/bomb.ogg differ
diff --git a/sound/announcer/vox_fem/bone.ogg b/sound/announcer/vox_fem/bone.ogg
index 432d8c91882e7..eb481e5344a6c 100644
Binary files a/sound/announcer/vox_fem/bone.ogg and b/sound/announcer/vox_fem/bone.ogg differ
diff --git a/sound/announcer/vox_fem/botanist.ogg b/sound/announcer/vox_fem/botanist.ogg
index edb7e3e4c4b38..1c59915cc6aaa 100644
Binary files a/sound/announcer/vox_fem/botanist.ogg and b/sound/announcer/vox_fem/botanist.ogg differ
diff --git a/sound/announcer/vox_fem/botany.ogg b/sound/announcer/vox_fem/botany.ogg
index 7aed8ec827074..f35b84ad966bc 100644
Binary files a/sound/announcer/vox_fem/botany.ogg and b/sound/announcer/vox_fem/botany.ogg differ
diff --git a/sound/announcer/vox_fem/bottle.ogg b/sound/announcer/vox_fem/bottle.ogg
index b5bd1f34e761b..c44dadbfea002 100644
Binary files a/sound/announcer/vox_fem/bottle.ogg and b/sound/announcer/vox_fem/bottle.ogg differ
diff --git a/sound/announcer/vox_fem/bottom.ogg b/sound/announcer/vox_fem/bottom.ogg
index 871f40d9065ed..0e77b2ef3c2c3 100644
Binary files a/sound/announcer/vox_fem/bottom.ogg and b/sound/announcer/vox_fem/bottom.ogg differ
diff --git a/sound/announcer/vox_fem/bravo.ogg b/sound/announcer/vox_fem/bravo.ogg
index c40d957223fff..c004094157c3f 100644
Binary files a/sound/announcer/vox_fem/bravo.ogg and b/sound/announcer/vox_fem/bravo.ogg differ
diff --git a/sound/announcer/vox_fem/breach.ogg b/sound/announcer/vox_fem/breach.ogg
index 4b7fe2033d76a..58f35a0c509ae 100644
Binary files a/sound/announcer/vox_fem/breach.ogg and b/sound/announcer/vox_fem/breach.ogg differ
diff --git a/sound/announcer/vox_fem/breached.ogg b/sound/announcer/vox_fem/breached.ogg
index 9202861bc6433..3a14d7c500095 100644
Binary files a/sound/announcer/vox_fem/breached.ogg and b/sound/announcer/vox_fem/breached.ogg differ
diff --git a/sound/announcer/vox_fem/break.ogg b/sound/announcer/vox_fem/break.ogg
index 1bf2f85c757f4..8dbc861e3050a 100644
Binary files a/sound/announcer/vox_fem/break.ogg and b/sound/announcer/vox_fem/break.ogg differ
diff --git a/sound/announcer/vox_fem/bridge.ogg b/sound/announcer/vox_fem/bridge.ogg
index 61a00d16104c9..b14455ab1b68c 100644
Binary files a/sound/announcer/vox_fem/bridge.ogg and b/sound/announcer/vox_fem/bridge.ogg differ
diff --git a/sound/announcer/vox_fem/brig.ogg b/sound/announcer/vox_fem/brig.ogg
index 6deacfa0b6ff0..bce381df819da 100644
Binary files a/sound/announcer/vox_fem/brig.ogg and b/sound/announcer/vox_fem/brig.ogg differ
diff --git a/sound/announcer/vox_fem/broke.ogg b/sound/announcer/vox_fem/broke.ogg
index a1a075d6769c9..de9eabece4b31 100644
Binary files a/sound/announcer/vox_fem/broke.ogg and b/sound/announcer/vox_fem/broke.ogg differ
diff --git a/sound/announcer/vox_fem/broken.ogg b/sound/announcer/vox_fem/broken.ogg
index 589dabc0a3924..e9aab139a96eb 100644
Binary files a/sound/announcer/vox_fem/broken.ogg and b/sound/announcer/vox_fem/broken.ogg differ
diff --git a/sound/announcer/vox_fem/bump.ogg b/sound/announcer/vox_fem/bump.ogg
index c6892a3412fa5..26101e1636868 100644
Binary files a/sound/announcer/vox_fem/bump.ogg and b/sound/announcer/vox_fem/bump.ogg differ
diff --git a/sound/announcer/vox_fem/bumped.ogg b/sound/announcer/vox_fem/bumped.ogg
index 6d111a8731d1a..6b535adb0fbe6 100644
Binary files a/sound/announcer/vox_fem/bumped.ogg and b/sound/announcer/vox_fem/bumped.ogg differ
diff --git a/sound/announcer/vox_fem/bumps.ogg b/sound/announcer/vox_fem/bumps.ogg
index a7fff16f04802..c309432ca0226 100644
Binary files a/sound/announcer/vox_fem/bumps.ogg and b/sound/announcer/vox_fem/bumps.ogg differ
diff --git a/sound/announcer/vox_fem/bust.ogg b/sound/announcer/vox_fem/bust.ogg
index f0944fd31f195..a9f49ebf53bf5 100644
Binary files a/sound/announcer/vox_fem/bust.ogg and b/sound/announcer/vox_fem/bust.ogg differ
diff --git a/sound/announcer/vox_fem/but.ogg b/sound/announcer/vox_fem/but.ogg
index fd02fd97de78e..e3fc026d639e9 100644
Binary files a/sound/announcer/vox_fem/but.ogg and b/sound/announcer/vox_fem/but.ogg differ
diff --git a/sound/announcer/vox_fem/button.ogg b/sound/announcer/vox_fem/button.ogg
index b85f48e7a463a..e1fe40f7c646a 100644
Binary files a/sound/announcer/vox_fem/button.ogg and b/sound/announcer/vox_fem/button.ogg differ
diff --git a/sound/announcer/vox_fem/bypass.ogg b/sound/announcer/vox_fem/bypass.ogg
index cf67642e9c9e5..f3e051edca708 100644
Binary files a/sound/announcer/vox_fem/bypass.ogg and b/sound/announcer/vox_fem/bypass.ogg differ
diff --git a/sound/announcer/vox_fem/c.ogg b/sound/announcer/vox_fem/c.ogg
index a65bb86b083eb..3b5ae3509a130 100644
Binary files a/sound/announcer/vox_fem/c.ogg and b/sound/announcer/vox_fem/c.ogg differ
diff --git a/sound/announcer/vox_fem/cable.ogg b/sound/announcer/vox_fem/cable.ogg
index 0e69ff8d7e49c..6243ead319cf3 100644
Binary files a/sound/announcer/vox_fem/cable.ogg and b/sound/announcer/vox_fem/cable.ogg differ
diff --git a/sound/announcer/vox_fem/call.ogg b/sound/announcer/vox_fem/call.ogg
index 4777387195e57..e3d495b3f1fdb 100644
Binary files a/sound/announcer/vox_fem/call.ogg and b/sound/announcer/vox_fem/call.ogg differ
diff --git a/sound/announcer/vox_fem/called.ogg b/sound/announcer/vox_fem/called.ogg
index b1a0a7336837a..2b3fa1c1653b7 100644
Binary files a/sound/announcer/vox_fem/called.ogg and b/sound/announcer/vox_fem/called.ogg differ
diff --git a/sound/announcer/vox_fem/can.ogg b/sound/announcer/vox_fem/can.ogg
index 0d77353ad99e1..5b1fa3f9c5770 100644
Binary files a/sound/announcer/vox_fem/can.ogg and b/sound/announcer/vox_fem/can.ogg differ
diff --git a/sound/announcer/vox_fem/canal.ogg b/sound/announcer/vox_fem/canal.ogg
index 52d3c8a604aad..4b8f35b28d2d6 100644
Binary files a/sound/announcer/vox_fem/canal.ogg and b/sound/announcer/vox_fem/canal.ogg differ
diff --git a/sound/announcer/vox_fem/canister.ogg b/sound/announcer/vox_fem/canister.ogg
index ea2d1789556c3..0d9229964a44c 100644
Binary files a/sound/announcer/vox_fem/canister.ogg and b/sound/announcer/vox_fem/canister.ogg differ
diff --git a/sound/announcer/vox_fem/cap.ogg b/sound/announcer/vox_fem/cap.ogg
index 482ba1d58f5fc..4ec351cb064ed 100644
Binary files a/sound/announcer/vox_fem/cap.ogg and b/sound/announcer/vox_fem/cap.ogg differ
diff --git a/sound/announcer/vox_fem/captain.ogg b/sound/announcer/vox_fem/captain.ogg
index 644bc0c8c6ba6..678a293aec09c 100644
Binary files a/sound/announcer/vox_fem/captain.ogg and b/sound/announcer/vox_fem/captain.ogg differ
diff --git a/sound/announcer/vox_fem/capture.ogg b/sound/announcer/vox_fem/capture.ogg
index 54bbcf06b63d2..38046f57d7d6f 100644
Binary files a/sound/announcer/vox_fem/capture.ogg and b/sound/announcer/vox_fem/capture.ogg differ
diff --git a/sound/announcer/vox_fem/carbon.ogg b/sound/announcer/vox_fem/carbon.ogg
index 219d2c6ec07c6..5115d0907b2cf 100644
Binary files a/sound/announcer/vox_fem/carbon.ogg and b/sound/announcer/vox_fem/carbon.ogg differ
diff --git a/sound/announcer/vox_fem/cargo.ogg b/sound/announcer/vox_fem/cargo.ogg
index 3dfa1530caa6c..a9593f3fa4f4f 100644
Binary files a/sound/announcer/vox_fem/cargo.ogg and b/sound/announcer/vox_fem/cargo.ogg differ
diff --git a/sound/announcer/vox_fem/cascade.ogg b/sound/announcer/vox_fem/cascade.ogg
index cc7e70ed00d25..5c03f91d06c08 100644
Binary files a/sound/announcer/vox_fem/cascade.ogg and b/sound/announcer/vox_fem/cascade.ogg differ
diff --git a/sound/announcer/vox_fem/cat.ogg b/sound/announcer/vox_fem/cat.ogg
index f9b9928f92686..c52cdd1458dc7 100644
Binary files a/sound/announcer/vox_fem/cat.ogg and b/sound/announcer/vox_fem/cat.ogg differ
diff --git a/sound/announcer/vox_fem/cause.ogg b/sound/announcer/vox_fem/cause.ogg
index 2294d0405d037..46afef7e495e8 100644
Binary files a/sound/announcer/vox_fem/cause.ogg and b/sound/announcer/vox_fem/cause.ogg differ
diff --git a/sound/announcer/vox_fem/caused.ogg b/sound/announcer/vox_fem/caused.ogg
index c91eecaa90db4..57ab2b970c88e 100644
Binary files a/sound/announcer/vox_fem/caused.ogg and b/sound/announcer/vox_fem/caused.ogg differ
diff --git a/sound/announcer/vox_fem/causes.ogg b/sound/announcer/vox_fem/causes.ogg
index 019430ccb4a07..33f8c3d934abb 100644
Binary files a/sound/announcer/vox_fem/causes.ogg and b/sound/announcer/vox_fem/causes.ogg differ
diff --git a/sound/announcer/vox_fem/causing.ogg b/sound/announcer/vox_fem/causing.ogg
index e41ab06c2b4ae..fba561dae435f 100644
Binary files a/sound/announcer/vox_fem/causing.ogg and b/sound/announcer/vox_fem/causing.ogg differ
diff --git a/sound/announcer/vox_fem/ce.ogg b/sound/announcer/vox_fem/ce.ogg
index dd3d06f2c2bf7..8a5e889823ee4 100644
Binary files a/sound/announcer/vox_fem/ce.ogg and b/sound/announcer/vox_fem/ce.ogg differ
diff --git a/sound/announcer/vox_fem/cease.ogg b/sound/announcer/vox_fem/cease.ogg
index 92f99b30a95c1..8fc4188accc78 100644
Binary files a/sound/announcer/vox_fem/cease.ogg and b/sound/announcer/vox_fem/cease.ogg differ
diff --git a/sound/announcer/vox_fem/ceiling.ogg b/sound/announcer/vox_fem/ceiling.ogg
index 2ad9dcea3c57b..b30b7613e1a21 100644
Binary files a/sound/announcer/vox_fem/ceiling.ogg and b/sound/announcer/vox_fem/ceiling.ogg differ
diff --git a/sound/announcer/vox_fem/celsius.ogg b/sound/announcer/vox_fem/celsius.ogg
index 4a033ee5135b0..1982011517cee 100644
Binary files a/sound/announcer/vox_fem/celsius.ogg and b/sound/announcer/vox_fem/celsius.ogg differ
diff --git a/sound/announcer/vox_fem/centcom.ogg b/sound/announcer/vox_fem/centcom.ogg
index 38fd4cdc770aa..2a2d87c691de0 100644
Binary files a/sound/announcer/vox_fem/centcom.ogg and b/sound/announcer/vox_fem/centcom.ogg differ
diff --git a/sound/announcer/vox_fem/center.ogg b/sound/announcer/vox_fem/center.ogg
index f47ae98a4fb6e..45fc680eb4827 100644
Binary files a/sound/announcer/vox_fem/center.ogg and b/sound/announcer/vox_fem/center.ogg differ
diff --git a/sound/announcer/vox_fem/centi.ogg b/sound/announcer/vox_fem/centi.ogg
index af1137f63ee85..1bcde6092af19 100644
Binary files a/sound/announcer/vox_fem/centi.ogg and b/sound/announcer/vox_fem/centi.ogg differ
diff --git a/sound/announcer/vox_fem/central.ogg b/sound/announcer/vox_fem/central.ogg
index 10f244f739b5c..1b7a77940a220 100644
Binary files a/sound/announcer/vox_fem/central.ogg and b/sound/announcer/vox_fem/central.ogg differ
diff --git a/sound/announcer/vox_fem/challenge.ogg b/sound/announcer/vox_fem/challenge.ogg
index 4dc806d1731e9..92f5bceb534cf 100644
Binary files a/sound/announcer/vox_fem/challenge.ogg and b/sound/announcer/vox_fem/challenge.ogg differ
diff --git a/sound/announcer/vox_fem/chamber.ogg b/sound/announcer/vox_fem/chamber.ogg
index 9f917eaef1334..cb8ba77d33aff 100644
Binary files a/sound/announcer/vox_fem/chamber.ogg and b/sound/announcer/vox_fem/chamber.ogg differ
diff --git a/sound/announcer/vox_fem/change.ogg b/sound/announcer/vox_fem/change.ogg
index 51e3f3c109651..ef689e6629b65 100644
Binary files a/sound/announcer/vox_fem/change.ogg and b/sound/announcer/vox_fem/change.ogg differ
diff --git a/sound/announcer/vox_fem/changed.ogg b/sound/announcer/vox_fem/changed.ogg
index f4c4defe6c9ea..853ee20c5784e 100644
Binary files a/sound/announcer/vox_fem/changed.ogg and b/sound/announcer/vox_fem/changed.ogg differ
diff --git a/sound/announcer/vox_fem/changeling.ogg b/sound/announcer/vox_fem/changeling.ogg
index 79244a0b788b4..61d0622b34013 100644
Binary files a/sound/announcer/vox_fem/changeling.ogg and b/sound/announcer/vox_fem/changeling.ogg differ
diff --git a/sound/announcer/vox_fem/chapel.ogg b/sound/announcer/vox_fem/chapel.ogg
index e5c3959c49da4..dba1c9009ef8c 100644
Binary files a/sound/announcer/vox_fem/chapel.ogg and b/sound/announcer/vox_fem/chapel.ogg differ
diff --git a/sound/announcer/vox_fem/chaplain.ogg b/sound/announcer/vox_fem/chaplain.ogg
index 9bca07f7e3350..ece501d5e5fe0 100644
Binary files a/sound/announcer/vox_fem/chaplain.ogg and b/sound/announcer/vox_fem/chaplain.ogg differ
diff --git a/sound/announcer/vox_fem/charge.ogg b/sound/announcer/vox_fem/charge.ogg
index b5adb81d83b57..42dfa66f39702 100644
Binary files a/sound/announcer/vox_fem/charge.ogg and b/sound/announcer/vox_fem/charge.ogg differ
diff --git a/sound/announcer/vox_fem/charlie.ogg b/sound/announcer/vox_fem/charlie.ogg
index 01e5f99df46b2..e34ee4d1e6c5e 100644
Binary files a/sound/announcer/vox_fem/charlie.ogg and b/sound/announcer/vox_fem/charlie.ogg differ
diff --git a/sound/announcer/vox_fem/check.ogg b/sound/announcer/vox_fem/check.ogg
index 1c6002b65caea..99f73a85dcece 100644
Binary files a/sound/announcer/vox_fem/check.ogg and b/sound/announcer/vox_fem/check.ogg differ
diff --git a/sound/announcer/vox_fem/checkpoint.ogg b/sound/announcer/vox_fem/checkpoint.ogg
index 3f7748a3da158..165c651421ea8 100644
Binary files a/sound/announcer/vox_fem/checkpoint.ogg and b/sound/announcer/vox_fem/checkpoint.ogg differ
diff --git a/sound/announcer/vox_fem/chemical.ogg b/sound/announcer/vox_fem/chemical.ogg
index 198cf4ea095c3..ebe9d10dec68d 100644
Binary files a/sound/announcer/vox_fem/chemical.ogg and b/sound/announcer/vox_fem/chemical.ogg differ
diff --git a/sound/announcer/vox_fem/chemist.ogg b/sound/announcer/vox_fem/chemist.ogg
index e17afefcb9289..4d8ea186effc3 100644
Binary files a/sound/announcer/vox_fem/chemist.ogg and b/sound/announcer/vox_fem/chemist.ogg differ
diff --git a/sound/announcer/vox_fem/chief.ogg b/sound/announcer/vox_fem/chief.ogg
index b7d0942021e41..244a39c9b0122 100644
Binary files a/sound/announcer/vox_fem/chief.ogg and b/sound/announcer/vox_fem/chief.ogg differ
diff --git a/sound/announcer/vox_fem/christ.ogg b/sound/announcer/vox_fem/christ.ogg
index 86242d8c031d0..135d6ba63128e 100644
Binary files a/sound/announcer/vox_fem/christ.ogg and b/sound/announcer/vox_fem/christ.ogg differ
diff --git a/sound/announcer/vox_fem/christmas.ogg b/sound/announcer/vox_fem/christmas.ogg
index c1bfc707b79a1..fd0ffee286a71 100644
Binary files a/sound/announcer/vox_fem/christmas.ogg and b/sound/announcer/vox_fem/christmas.ogg differ
diff --git a/sound/announcer/vox_fem/chuckle.ogg b/sound/announcer/vox_fem/chuckle.ogg
index 866611bef63d3..927e1c54031c6 100644
Binary files a/sound/announcer/vox_fem/chuckle.ogg and b/sound/announcer/vox_fem/chuckle.ogg differ
diff --git a/sound/announcer/vox_fem/circuit.ogg b/sound/announcer/vox_fem/circuit.ogg
index 349167735a4e6..a5b66e5060919 100644
Binary files a/sound/announcer/vox_fem/circuit.ogg and b/sound/announcer/vox_fem/circuit.ogg differ
diff --git a/sound/announcer/vox_fem/cleanup.ogg b/sound/announcer/vox_fem/cleanup.ogg
index ae2efcbbb9395..e3a2fa86a8496 100644
Binary files a/sound/announcer/vox_fem/cleanup.ogg and b/sound/announcer/vox_fem/cleanup.ogg differ
diff --git a/sound/announcer/vox_fem/clear.ogg b/sound/announcer/vox_fem/clear.ogg
index 98926f58f681c..076b24937e2bc 100644
Binary files a/sound/announcer/vox_fem/clear.ogg and b/sound/announcer/vox_fem/clear.ogg differ
diff --git a/sound/announcer/vox_fem/clearance.ogg b/sound/announcer/vox_fem/clearance.ogg
index 1ece107c76898..6ee4051ee7a42 100644
Binary files a/sound/announcer/vox_fem/clearance.ogg and b/sound/announcer/vox_fem/clearance.ogg differ
diff --git a/sound/announcer/vox_fem/clockwork.ogg b/sound/announcer/vox_fem/clockwork.ogg
index 5e04e5d078f72..0e1e66c926480 100644
Binary files a/sound/announcer/vox_fem/clockwork.ogg and b/sound/announcer/vox_fem/clockwork.ogg differ
diff --git a/sound/announcer/vox_fem/clog.ogg b/sound/announcer/vox_fem/clog.ogg
index 31e6bf604ec49..6336f0b33df8e 100644
Binary files a/sound/announcer/vox_fem/clog.ogg and b/sound/announcer/vox_fem/clog.ogg differ
diff --git a/sound/announcer/vox_fem/close.ogg b/sound/announcer/vox_fem/close.ogg
index 7ac5412aa44e8..10052a0fba252 100644
Binary files a/sound/announcer/vox_fem/close.ogg and b/sound/announcer/vox_fem/close.ogg differ
diff --git a/sound/announcer/vox_fem/closed.ogg b/sound/announcer/vox_fem/closed.ogg
index a20be2a50af51..68d47ffeb99a1 100644
Binary files a/sound/announcer/vox_fem/closed.ogg and b/sound/announcer/vox_fem/closed.ogg differ
diff --git a/sound/announcer/vox_fem/closing.ogg b/sound/announcer/vox_fem/closing.ogg
index 0d5d99667fde4..241f788d599ff 100644
Binary files a/sound/announcer/vox_fem/closing.ogg and b/sound/announcer/vox_fem/closing.ogg differ
diff --git a/sound/announcer/vox_fem/clothing.ogg b/sound/announcer/vox_fem/clothing.ogg
index 912a7532fe3a4..c1cc442076b01 100644
Binary files a/sound/announcer/vox_fem/clothing.ogg and b/sound/announcer/vox_fem/clothing.ogg differ
diff --git a/sound/announcer/vox_fem/clown.ogg b/sound/announcer/vox_fem/clown.ogg
index d823a01d00f76..500e4846552c1 100644
Binary files a/sound/announcer/vox_fem/clown.ogg and b/sound/announcer/vox_fem/clown.ogg differ
diff --git a/sound/announcer/vox_fem/clowning.ogg b/sound/announcer/vox_fem/clowning.ogg
index 1dfb779e5def9..146e07f78958b 100644
Binary files a/sound/announcer/vox_fem/clowning.ogg and b/sound/announcer/vox_fem/clowning.ogg differ
diff --git a/sound/announcer/vox_fem/cmo.ogg b/sound/announcer/vox_fem/cmo.ogg
index 2e469ffa48735..cf9f2b6600af1 100644
Binary files a/sound/announcer/vox_fem/cmo.ogg and b/sound/announcer/vox_fem/cmo.ogg differ
diff --git a/sound/announcer/vox_fem/code.ogg b/sound/announcer/vox_fem/code.ogg
index 2d36d7ff45a55..9ab9756af5089 100644
Binary files a/sound/announcer/vox_fem/code.ogg and b/sound/announcer/vox_fem/code.ogg differ
diff --git a/sound/announcer/vox_fem/coded.ogg b/sound/announcer/vox_fem/coded.ogg
index 01dad555a8f47..8b97b466635bc 100644
Binary files a/sound/announcer/vox_fem/coded.ogg and b/sound/announcer/vox_fem/coded.ogg differ
diff --git a/sound/announcer/vox_fem/coil.ogg b/sound/announcer/vox_fem/coil.ogg
index d9a76618eb4f5..9ddfd031b9116 100644
Binary files a/sound/announcer/vox_fem/coil.ogg and b/sound/announcer/vox_fem/coil.ogg differ
diff --git a/sound/announcer/vox_fem/coils.ogg b/sound/announcer/vox_fem/coils.ogg
index 12d0d54fd3e8f..fe89732a23698 100644
Binary files a/sound/announcer/vox_fem/coils.ogg and b/sound/announcer/vox_fem/coils.ogg differ
diff --git a/sound/announcer/vox_fem/cold.ogg b/sound/announcer/vox_fem/cold.ogg
index 0538fb512a85b..487dff194c889 100644
Binary files a/sound/announcer/vox_fem/cold.ogg and b/sound/announcer/vox_fem/cold.ogg differ
diff --git a/sound/announcer/vox_fem/collider.ogg b/sound/announcer/vox_fem/collider.ogg
index 0506ff94683da..9285cbe49decc 100644
Binary files a/sound/announcer/vox_fem/collider.ogg and b/sound/announcer/vox_fem/collider.ogg differ
diff --git a/sound/announcer/vox_fem/combat.ogg b/sound/announcer/vox_fem/combat.ogg
index 51a438ea95325..84fef7ff10656 100644
Binary files a/sound/announcer/vox_fem/combat.ogg and b/sound/announcer/vox_fem/combat.ogg differ
diff --git a/sound/announcer/vox_fem/combatant.ogg b/sound/announcer/vox_fem/combatant.ogg
index d82f5dddd0092..243c40516c461 100644
Binary files a/sound/announcer/vox_fem/combatant.ogg and b/sound/announcer/vox_fem/combatant.ogg differ
diff --git a/sound/announcer/vox_fem/come.ogg b/sound/announcer/vox_fem/come.ogg
index 7f61947ff6701..677df1a563448 100644
Binary files a/sound/announcer/vox_fem/come.ogg and b/sound/announcer/vox_fem/come.ogg differ
diff --git a/sound/announcer/vox_fem/command.ogg b/sound/announcer/vox_fem/command.ogg
index 66370be8a7eff..23518ff0a6c05 100644
Binary files a/sound/announcer/vox_fem/command.ogg and b/sound/announcer/vox_fem/command.ogg differ
diff --git a/sound/announcer/vox_fem/communication.ogg b/sound/announcer/vox_fem/communication.ogg
index efff5b2168d24..b76e099bd9afe 100644
Binary files a/sound/announcer/vox_fem/communication.ogg and b/sound/announcer/vox_fem/communication.ogg differ
diff --git a/sound/announcer/vox_fem/complete.ogg b/sound/announcer/vox_fem/complete.ogg
index 134d280d068ff..d49203cd6b2bb 100644
Binary files a/sound/announcer/vox_fem/complete.ogg and b/sound/announcer/vox_fem/complete.ogg differ
diff --git a/sound/announcer/vox_fem/completed.ogg b/sound/announcer/vox_fem/completed.ogg
index bdeca3b4fe34d..ed8b9e7d4a766 100644
Binary files a/sound/announcer/vox_fem/completed.ogg and b/sound/announcer/vox_fem/completed.ogg differ
diff --git a/sound/announcer/vox_fem/completion.ogg b/sound/announcer/vox_fem/completion.ogg
index c4d65fbdad0c7..4fdac9f92f4ff 100644
Binary files a/sound/announcer/vox_fem/completion.ogg and b/sound/announcer/vox_fem/completion.ogg differ
diff --git a/sound/announcer/vox_fem/complex.ogg b/sound/announcer/vox_fem/complex.ogg
index d1a817f90a1ed..30ca004ba5a4f 100644
Binary files a/sound/announcer/vox_fem/complex.ogg and b/sound/announcer/vox_fem/complex.ogg differ
diff --git a/sound/announcer/vox_fem/comply.ogg b/sound/announcer/vox_fem/comply.ogg
index aa0194054ab51..5faf0cf484572 100644
Binary files a/sound/announcer/vox_fem/comply.ogg and b/sound/announcer/vox_fem/comply.ogg differ
diff --git a/sound/announcer/vox_fem/computer.ogg b/sound/announcer/vox_fem/computer.ogg
index 563c739ec5038..5e6e27bf28336 100644
Binary files a/sound/announcer/vox_fem/computer.ogg and b/sound/announcer/vox_fem/computer.ogg differ
diff --git a/sound/announcer/vox_fem/condition.ogg b/sound/announcer/vox_fem/condition.ogg
index 6b70d88b39627..8e70cbcbae631 100644
Binary files a/sound/announcer/vox_fem/condition.ogg and b/sound/announcer/vox_fem/condition.ogg differ
diff --git a/sound/announcer/vox_fem/conditions.ogg b/sound/announcer/vox_fem/conditions.ogg
index 79e0a6bfe8f3a..a26418adc7dd2 100644
Binary files a/sound/announcer/vox_fem/conditions.ogg and b/sound/announcer/vox_fem/conditions.ogg differ
diff --git a/sound/announcer/vox_fem/condom.ogg b/sound/announcer/vox_fem/condom.ogg
index 9bc1d45997a5f..bba53354ccc05 100644
Binary files a/sound/announcer/vox_fem/condom.ogg and b/sound/announcer/vox_fem/condom.ogg differ
diff --git a/sound/announcer/vox_fem/configure.ogg b/sound/announcer/vox_fem/configure.ogg
index 753339e761e8a..190d1fa44c379 100644
Binary files a/sound/announcer/vox_fem/configure.ogg and b/sound/announcer/vox_fem/configure.ogg differ
diff --git a/sound/announcer/vox_fem/configured.ogg b/sound/announcer/vox_fem/configured.ogg
index 544ed189add4f..7da92779914f4 100644
Binary files a/sound/announcer/vox_fem/configured.ogg and b/sound/announcer/vox_fem/configured.ogg differ
diff --git a/sound/announcer/vox_fem/configuring.ogg b/sound/announcer/vox_fem/configuring.ogg
index eb81a1bb1df1c..c7e6700089c03 100644
Binary files a/sound/announcer/vox_fem/configuring.ogg and b/sound/announcer/vox_fem/configuring.ogg differ
diff --git a/sound/announcer/vox_fem/confirmed.ogg b/sound/announcer/vox_fem/confirmed.ogg
index 331c31e2187ae..d1c519898edaa 100644
Binary files a/sound/announcer/vox_fem/confirmed.ogg and b/sound/announcer/vox_fem/confirmed.ogg differ
diff --git a/sound/announcer/vox_fem/connor.ogg b/sound/announcer/vox_fem/connor.ogg
index a1721dd36fd72..7a0207ff5cdf3 100644
Binary files a/sound/announcer/vox_fem/connor.ogg and b/sound/announcer/vox_fem/connor.ogg differ
diff --git a/sound/announcer/vox_fem/console.ogg b/sound/announcer/vox_fem/console.ogg
index 2a9784e27773c..cdf181dba1f6f 100644
Binary files a/sound/announcer/vox_fem/console.ogg and b/sound/announcer/vox_fem/console.ogg differ
diff --git a/sound/announcer/vox_fem/console2.ogg b/sound/announcer/vox_fem/console2.ogg
index 36cab49dfbc9c..e62f38afa5566 100644
Binary files a/sound/announcer/vox_fem/console2.ogg and b/sound/announcer/vox_fem/console2.ogg differ
diff --git a/sound/announcer/vox_fem/construct.ogg b/sound/announcer/vox_fem/construct.ogg
index 71026f529204d..4c324e129172d 100644
Binary files a/sound/announcer/vox_fem/construct.ogg and b/sound/announcer/vox_fem/construct.ogg differ
diff --git a/sound/announcer/vox_fem/container.ogg b/sound/announcer/vox_fem/container.ogg
index 59fe11b5f48c7..09ab36063f84c 100644
Binary files a/sound/announcer/vox_fem/container.ogg and b/sound/announcer/vox_fem/container.ogg differ
diff --git a/sound/announcer/vox_fem/containment.ogg b/sound/announcer/vox_fem/containment.ogg
index be81333e8411e..7d3efe39857fb 100644
Binary files a/sound/announcer/vox_fem/containment.ogg and b/sound/announcer/vox_fem/containment.ogg differ
diff --git a/sound/announcer/vox_fem/contamination.ogg b/sound/announcer/vox_fem/contamination.ogg
index a6544716f165d..78f4544f5b841 100644
Binary files a/sound/announcer/vox_fem/contamination.ogg and b/sound/announcer/vox_fem/contamination.ogg differ
diff --git a/sound/announcer/vox_fem/contraband.ogg b/sound/announcer/vox_fem/contraband.ogg
index 8627917f066ea..c0b21fe1e7f90 100644
Binary files a/sound/announcer/vox_fem/contraband.ogg and b/sound/announcer/vox_fem/contraband.ogg differ
diff --git a/sound/announcer/vox_fem/control.ogg b/sound/announcer/vox_fem/control.ogg
index 23f13913a2aab..baa4d9e54655b 100644
Binary files a/sound/announcer/vox_fem/control.ogg and b/sound/announcer/vox_fem/control.ogg differ
diff --git a/sound/announcer/vox_fem/cook.ogg b/sound/announcer/vox_fem/cook.ogg
index 59e6bbbc06e8d..aa72073b642f9 100644
Binary files a/sound/announcer/vox_fem/cook.ogg and b/sound/announcer/vox_fem/cook.ogg differ
diff --git a/sound/announcer/vox_fem/cool.ogg b/sound/announcer/vox_fem/cool.ogg
index 0e8c39a92608c..caa7120822930 100644
Binary files a/sound/announcer/vox_fem/cool.ogg and b/sound/announcer/vox_fem/cool.ogg differ
diff --git a/sound/announcer/vox_fem/coolant.ogg b/sound/announcer/vox_fem/coolant.ogg
index b4969ee55d993..aa53a642edc1d 100644
Binary files a/sound/announcer/vox_fem/coolant.ogg and b/sound/announcer/vox_fem/coolant.ogg differ
diff --git a/sound/announcer/vox_fem/cooling.ogg b/sound/announcer/vox_fem/cooling.ogg
index eef866ca1b16b..a8535eaa4ca97 100644
Binary files a/sound/announcer/vox_fem/cooling.ogg and b/sound/announcer/vox_fem/cooling.ogg differ
diff --git a/sound/announcer/vox_fem/coomer.ogg b/sound/announcer/vox_fem/coomer.ogg
index fb40b8a1c044c..fca04685dd0df 100644
Binary files a/sound/announcer/vox_fem/coomer.ogg and b/sound/announcer/vox_fem/coomer.ogg differ
diff --git a/sound/announcer/vox_fem/core.ogg b/sound/announcer/vox_fem/core.ogg
index 8641800b9041c..4cbdd816d8d57 100644
Binary files a/sound/announcer/vox_fem/core.ogg and b/sound/announcer/vox_fem/core.ogg differ
diff --git a/sound/announcer/vox_fem/corgi.ogg b/sound/announcer/vox_fem/corgi.ogg
index d21b56d0ae193..4e5eddcb35c4d 100644
Binary files a/sound/announcer/vox_fem/corgi.ogg and b/sound/announcer/vox_fem/corgi.ogg differ
diff --git a/sound/announcer/vox_fem/corporation.ogg b/sound/announcer/vox_fem/corporation.ogg
index 31371bd8d6923..f0b136997df71 100644
Binary files a/sound/announcer/vox_fem/corporation.ogg and b/sound/announcer/vox_fem/corporation.ogg differ
diff --git a/sound/announcer/vox_fem/correct.ogg b/sound/announcer/vox_fem/correct.ogg
index cab75c9383104..505436882ae24 100644
Binary files a/sound/announcer/vox_fem/correct.ogg and b/sound/announcer/vox_fem/correct.ogg differ
diff --git a/sound/announcer/vox_fem/corridor.ogg b/sound/announcer/vox_fem/corridor.ogg
index ce8cd73c8abec..046cffe61d75f 100644
Binary files a/sound/announcer/vox_fem/corridor.ogg and b/sound/announcer/vox_fem/corridor.ogg differ
diff --git a/sound/announcer/vox_fem/corridors.ogg b/sound/announcer/vox_fem/corridors.ogg
index 9b2fa8879365c..80361608d1a91 100644
Binary files a/sound/announcer/vox_fem/corridors.ogg and b/sound/announcer/vox_fem/corridors.ogg differ
diff --git a/sound/announcer/vox_fem/could.ogg b/sound/announcer/vox_fem/could.ogg
index fdbd14f696c29..382b6a7938e3d 100644
Binary files a/sound/announcer/vox_fem/could.ogg and b/sound/announcer/vox_fem/could.ogg differ
diff --git a/sound/announcer/vox_fem/couldnt.ogg b/sound/announcer/vox_fem/couldnt.ogg
index 80550544ee497..0293059c912e3 100644
Binary files a/sound/announcer/vox_fem/couldnt.ogg and b/sound/announcer/vox_fem/couldnt.ogg differ
diff --git a/sound/announcer/vox_fem/countdown.ogg b/sound/announcer/vox_fem/countdown.ogg
index 93b0f64961575..307bfbaadde73 100644
Binary files a/sound/announcer/vox_fem/countdown.ogg and b/sound/announcer/vox_fem/countdown.ogg differ
diff --git a/sound/announcer/vox_fem/coward.ogg b/sound/announcer/vox_fem/coward.ogg
index 020c046e683ba..044298a566257 100644
Binary files a/sound/announcer/vox_fem/coward.ogg and b/sound/announcer/vox_fem/coward.ogg differ
diff --git a/sound/announcer/vox_fem/cowards.ogg b/sound/announcer/vox_fem/cowards.ogg
index 6c3ed83ae54c1..2d6cc9d4bed63 100644
Binary files a/sound/announcer/vox_fem/cowards.ogg and b/sound/announcer/vox_fem/cowards.ogg differ
diff --git a/sound/announcer/vox_fem/crate.ogg b/sound/announcer/vox_fem/crate.ogg
index 4d6fb5772a8dd..b1a7e54633e5c 100644
Binary files a/sound/announcer/vox_fem/crate.ogg and b/sound/announcer/vox_fem/crate.ogg differ
diff --git a/sound/announcer/vox_fem/create.ogg b/sound/announcer/vox_fem/create.ogg
index f4f1797202af2..0641c6d30de3d 100644
Binary files a/sound/announcer/vox_fem/create.ogg and b/sound/announcer/vox_fem/create.ogg differ
diff --git a/sound/announcer/vox_fem/created.ogg b/sound/announcer/vox_fem/created.ogg
index b5cb976af1302..d97b357edbb41 100644
Binary files a/sound/announcer/vox_fem/created.ogg and b/sound/announcer/vox_fem/created.ogg differ
diff --git a/sound/announcer/vox_fem/creating.ogg b/sound/announcer/vox_fem/creating.ogg
index ca2a92d5d7264..1b891c8cb2ae0 100644
Binary files a/sound/announcer/vox_fem/creating.ogg and b/sound/announcer/vox_fem/creating.ogg differ
diff --git a/sound/announcer/vox_fem/creature.ogg b/sound/announcer/vox_fem/creature.ogg
index 14aecf4312cfb..8a09d82fbe848 100644
Binary files a/sound/announcer/vox_fem/creature.ogg and b/sound/announcer/vox_fem/creature.ogg differ
diff --git a/sound/announcer/vox_fem/crew.ogg b/sound/announcer/vox_fem/crew.ogg
index f97e77af7817b..3b6465f422011 100644
Binary files a/sound/announcer/vox_fem/crew.ogg and b/sound/announcer/vox_fem/crew.ogg differ
diff --git a/sound/announcer/vox_fem/critical.ogg b/sound/announcer/vox_fem/critical.ogg
index 813df8a5159e5..67e934ddc1f2d 100644
Binary files a/sound/announcer/vox_fem/critical.ogg and b/sound/announcer/vox_fem/critical.ogg differ
diff --git a/sound/announcer/vox_fem/cross.ogg b/sound/announcer/vox_fem/cross.ogg
index a080b2e9217da..1713dfd8ec237 100644
Binary files a/sound/announcer/vox_fem/cross.ogg and b/sound/announcer/vox_fem/cross.ogg differ
diff --git a/sound/announcer/vox_fem/cryogenic.ogg b/sound/announcer/vox_fem/cryogenic.ogg
index c7ef8fe0d2fce..618ddee0472c1 100644
Binary files a/sound/announcer/vox_fem/cryogenic.ogg and b/sound/announcer/vox_fem/cryogenic.ogg differ
diff --git a/sound/announcer/vox_fem/crystal.ogg b/sound/announcer/vox_fem/crystal.ogg
index 3945bc141e75b..2679f9f6921d6 100644
Binary files a/sound/announcer/vox_fem/crystal.ogg and b/sound/announcer/vox_fem/crystal.ogg differ
diff --git a/sound/announcer/vox_fem/cult.ogg b/sound/announcer/vox_fem/cult.ogg
index f5d441ad9eb20..fd05fa0e5a29e 100644
Binary files a/sound/announcer/vox_fem/cult.ogg and b/sound/announcer/vox_fem/cult.ogg differ
diff --git a/sound/announcer/vox_fem/cultist.ogg b/sound/announcer/vox_fem/cultist.ogg
index f9f7fc967c0ad..70c7aee488a7d 100644
Binary files a/sound/announcer/vox_fem/cultist.ogg and b/sound/announcer/vox_fem/cultist.ogg differ
diff --git a/sound/announcer/vox_fem/cunt.ogg b/sound/announcer/vox_fem/cunt.ogg
index 1aafad77f805f..7974eb5aabdd6 100644
Binary files a/sound/announcer/vox_fem/cunt.ogg and b/sound/announcer/vox_fem/cunt.ogg differ
diff --git a/sound/announcer/vox_fem/curator.ogg b/sound/announcer/vox_fem/curator.ogg
index 032a83da2798b..9df174a0ba666 100644
Binary files a/sound/announcer/vox_fem/curator.ogg and b/sound/announcer/vox_fem/curator.ogg differ
diff --git a/sound/announcer/vox_fem/cyborg.ogg b/sound/announcer/vox_fem/cyborg.ogg
index a42d0a8c0d5fe..cebb5411cb2f3 100644
Binary files a/sound/announcer/vox_fem/cyborg.ogg and b/sound/announcer/vox_fem/cyborg.ogg differ
diff --git a/sound/announcer/vox_fem/cyborgs.ogg b/sound/announcer/vox_fem/cyborgs.ogg
index 9aa1705783520..9ab864eace465 100644
Binary files a/sound/announcer/vox_fem/cyborgs.ogg and b/sound/announcer/vox_fem/cyborgs.ogg differ
diff --git a/sound/announcer/vox_fem/d.ogg b/sound/announcer/vox_fem/d.ogg
index d708d41991c51..82656796f0f99 100644
Binary files a/sound/announcer/vox_fem/d.ogg and b/sound/announcer/vox_fem/d.ogg differ
diff --git a/sound/announcer/vox_fem/damage.ogg b/sound/announcer/vox_fem/damage.ogg
index c3eae6ab8d157..c176bfa74869f 100644
Binary files a/sound/announcer/vox_fem/damage.ogg and b/sound/announcer/vox_fem/damage.ogg differ
diff --git a/sound/announcer/vox_fem/damaged.ogg b/sound/announcer/vox_fem/damaged.ogg
index 321bf85b98d6c..29d0d6ac058d5 100644
Binary files a/sound/announcer/vox_fem/damaged.ogg and b/sound/announcer/vox_fem/damaged.ogg differ
diff --git a/sound/announcer/vox_fem/danger.ogg b/sound/announcer/vox_fem/danger.ogg
index 5fb815418c95a..ab76dc7f50527 100644
Binary files a/sound/announcer/vox_fem/danger.ogg and b/sound/announcer/vox_fem/danger.ogg differ
diff --git a/sound/announcer/vox_fem/dangerous.ogg b/sound/announcer/vox_fem/dangerous.ogg
index 4274bceac810d..b05ebc780dc99 100644
Binary files a/sound/announcer/vox_fem/dangerous.ogg and b/sound/announcer/vox_fem/dangerous.ogg differ
diff --git a/sound/announcer/vox_fem/day.ogg b/sound/announcer/vox_fem/day.ogg
index bcd49a608b2ee..9a576416701bd 100644
Binary files a/sound/announcer/vox_fem/day.ogg and b/sound/announcer/vox_fem/day.ogg differ
diff --git a/sound/announcer/vox_fem/deactivated.ogg b/sound/announcer/vox_fem/deactivated.ogg
index f799206ada35d..15c0d6454b0b6 100644
Binary files a/sound/announcer/vox_fem/deactivated.ogg and b/sound/announcer/vox_fem/deactivated.ogg differ
diff --git a/sound/announcer/vox_fem/dead.ogg b/sound/announcer/vox_fem/dead.ogg
index ba4ca54e0012e..08edd77727804 100644
Binary files a/sound/announcer/vox_fem/dead.ogg and b/sound/announcer/vox_fem/dead.ogg differ
diff --git a/sound/announcer/vox_fem/death.ogg b/sound/announcer/vox_fem/death.ogg
index 1a37fbd5ed61e..f7cddf61c8f4a 100644
Binary files a/sound/announcer/vox_fem/death.ogg and b/sound/announcer/vox_fem/death.ogg differ
diff --git a/sound/announcer/vox_fem/decompression.ogg b/sound/announcer/vox_fem/decompression.ogg
index 0add62768b67c..091f35676bf46 100644
Binary files a/sound/announcer/vox_fem/decompression.ogg and b/sound/announcer/vox_fem/decompression.ogg differ
diff --git a/sound/announcer/vox_fem/decontamination.ogg b/sound/announcer/vox_fem/decontamination.ogg
index 6398fea3c21be..a2d35850dff7d 100644
Binary files a/sound/announcer/vox_fem/decontamination.ogg and b/sound/announcer/vox_fem/decontamination.ogg differ
diff --git a/sound/announcer/vox_fem/deeoo.ogg b/sound/announcer/vox_fem/deeoo.ogg
index 2af141dfa10b0..4023e6a30626b 100644
Binary files a/sound/announcer/vox_fem/deeoo.ogg and b/sound/announcer/vox_fem/deeoo.ogg differ
diff --git a/sound/announcer/vox_fem/defense.ogg b/sound/announcer/vox_fem/defense.ogg
index 3c53261dd4998..1ba60f1691a06 100644
Binary files a/sound/announcer/vox_fem/defense.ogg and b/sound/announcer/vox_fem/defense.ogg differ
diff --git a/sound/announcer/vox_fem/degrees.ogg b/sound/announcer/vox_fem/degrees.ogg
index 845588a84ce9b..3679a4c5e943c 100644
Binary files a/sound/announcer/vox_fem/degrees.ogg and b/sound/announcer/vox_fem/degrees.ogg differ
diff --git a/sound/announcer/vox_fem/delaminating.ogg b/sound/announcer/vox_fem/delaminating.ogg
index 3c023387abf4a..f11b70e6a1681 100644
Binary files a/sound/announcer/vox_fem/delaminating.ogg and b/sound/announcer/vox_fem/delaminating.ogg differ
diff --git a/sound/announcer/vox_fem/delamination.ogg b/sound/announcer/vox_fem/delamination.ogg
index 993c06fd4eae7..624219c51f4f2 100644
Binary files a/sound/announcer/vox_fem/delamination.ogg and b/sound/announcer/vox_fem/delamination.ogg differ
diff --git a/sound/announcer/vox_fem/delta.ogg b/sound/announcer/vox_fem/delta.ogg
index 9e6e66b41afbf..1542d8a90c64e 100644
Binary files a/sound/announcer/vox_fem/delta.ogg and b/sound/announcer/vox_fem/delta.ogg differ
diff --git a/sound/announcer/vox_fem/demon.ogg b/sound/announcer/vox_fem/demon.ogg
index f6220c886d529..25a3ea730aa60 100644
Binary files a/sound/announcer/vox_fem/demon.ogg and b/sound/announcer/vox_fem/demon.ogg differ
diff --git a/sound/announcer/vox_fem/denied.ogg b/sound/announcer/vox_fem/denied.ogg
index e839c4174f15b..0a92d0328f643 100644
Binary files a/sound/announcer/vox_fem/denied.ogg and b/sound/announcer/vox_fem/denied.ogg differ
diff --git a/sound/announcer/vox_fem/deny.ogg b/sound/announcer/vox_fem/deny.ogg
index df6b5cb40fb63..5bcbfb312445b 100644
Binary files a/sound/announcer/vox_fem/deny.ogg and b/sound/announcer/vox_fem/deny.ogg differ
diff --git a/sound/announcer/vox_fem/departures.ogg b/sound/announcer/vox_fem/departures.ogg
index 22a4cb0490e49..2a7dfe9a13d4a 100644
Binary files a/sound/announcer/vox_fem/departures.ogg and b/sound/announcer/vox_fem/departures.ogg differ
diff --git a/sound/announcer/vox_fem/deploy.ogg b/sound/announcer/vox_fem/deploy.ogg
index 2af4fc6d5577d..fb9428ac83541 100644
Binary files a/sound/announcer/vox_fem/deploy.ogg and b/sound/announcer/vox_fem/deploy.ogg differ
diff --git a/sound/announcer/vox_fem/deployed.ogg b/sound/announcer/vox_fem/deployed.ogg
index 48db9e7e0d390..cc2e4649c6aa9 100644
Binary files a/sound/announcer/vox_fem/deployed.ogg and b/sound/announcer/vox_fem/deployed.ogg differ
diff --git a/sound/announcer/vox_fem/desire.ogg b/sound/announcer/vox_fem/desire.ogg
index bfb4d7f3d36ea..32b02ba9c0f8a 100644
Binary files a/sound/announcer/vox_fem/desire.ogg and b/sound/announcer/vox_fem/desire.ogg differ
diff --git a/sound/announcer/vox_fem/desist.ogg b/sound/announcer/vox_fem/desist.ogg
index 59f44f79f7026..d32f3b47efdae 100644
Binary files a/sound/announcer/vox_fem/desist.ogg and b/sound/announcer/vox_fem/desist.ogg differ
diff --git a/sound/announcer/vox_fem/destroy.ogg b/sound/announcer/vox_fem/destroy.ogg
index e71008be95e3d..903fc14cb0ac9 100644
Binary files a/sound/announcer/vox_fem/destroy.ogg and b/sound/announcer/vox_fem/destroy.ogg differ
diff --git a/sound/announcer/vox_fem/destroyed.ogg b/sound/announcer/vox_fem/destroyed.ogg
index e4e3627fa612f..098eb6a986ae9 100644
Binary files a/sound/announcer/vox_fem/destroyed.ogg and b/sound/announcer/vox_fem/destroyed.ogg differ
diff --git a/sound/announcer/vox_fem/destruction.ogg b/sound/announcer/vox_fem/destruction.ogg
index 8512afedf13c1..d938b1d44e7a4 100644
Binary files a/sound/announcer/vox_fem/destruction.ogg and b/sound/announcer/vox_fem/destruction.ogg differ
diff --git a/sound/announcer/vox_fem/detain.ogg b/sound/announcer/vox_fem/detain.ogg
index 353884e5aebbd..ab4776048b8e6 100644
Binary files a/sound/announcer/vox_fem/detain.ogg and b/sound/announcer/vox_fem/detain.ogg differ
diff --git a/sound/announcer/vox_fem/detect.ogg b/sound/announcer/vox_fem/detect.ogg
index e5ea9092f0af4..e4cef6e20b226 100644
Binary files a/sound/announcer/vox_fem/detect.ogg and b/sound/announcer/vox_fem/detect.ogg differ
diff --git a/sound/announcer/vox_fem/detected.ogg b/sound/announcer/vox_fem/detected.ogg
index b29f19c5bc5c0..5acbb07ecaeeb 100644
Binary files a/sound/announcer/vox_fem/detected.ogg and b/sound/announcer/vox_fem/detected.ogg differ
diff --git a/sound/announcer/vox_fem/detecting.ogg b/sound/announcer/vox_fem/detecting.ogg
index 1b849cd836ddb..9c4af077f88ac 100644
Binary files a/sound/announcer/vox_fem/detecting.ogg and b/sound/announcer/vox_fem/detecting.ogg differ
diff --git a/sound/announcer/vox_fem/detective.ogg b/sound/announcer/vox_fem/detective.ogg
index ca8dca481c86d..63ebc87a78bd7 100644
Binary files a/sound/announcer/vox_fem/detective.ogg and b/sound/announcer/vox_fem/detective.ogg differ
diff --git a/sound/announcer/vox_fem/detonation.ogg b/sound/announcer/vox_fem/detonation.ogg
index afe0027d5a1b2..2749eaa1a1039 100644
Binary files a/sound/announcer/vox_fem/detonation.ogg and b/sound/announcer/vox_fem/detonation.ogg differ
diff --git a/sound/announcer/vox_fem/device.ogg b/sound/announcer/vox_fem/device.ogg
index d44d322bdd215..355b974e3e1f1 100644
Binary files a/sound/announcer/vox_fem/device.ogg and b/sound/announcer/vox_fem/device.ogg differ
diff --git a/sound/announcer/vox_fem/devil.ogg b/sound/announcer/vox_fem/devil.ogg
index 8e1f2618ff105..4e0fea4ef0fc5 100644
Binary files a/sound/announcer/vox_fem/devil.ogg and b/sound/announcer/vox_fem/devil.ogg differ
diff --git a/sound/announcer/vox_fem/did.ogg b/sound/announcer/vox_fem/did.ogg
index d73d2c7e23f1f..9d7398408ef20 100644
Binary files a/sound/announcer/vox_fem/did.ogg and b/sound/announcer/vox_fem/did.ogg differ
diff --git a/sound/announcer/vox_fem/die.ogg b/sound/announcer/vox_fem/die.ogg
index 1d0e885825b4d..ed941aec6b455 100644
Binary files a/sound/announcer/vox_fem/die.ogg and b/sound/announcer/vox_fem/die.ogg differ
diff --git a/sound/announcer/vox_fem/died.ogg b/sound/announcer/vox_fem/died.ogg
index bf11460779fdd..c104589ca462f 100644
Binary files a/sound/announcer/vox_fem/died.ogg and b/sound/announcer/vox_fem/died.ogg differ
diff --git a/sound/announcer/vox_fem/different.ogg b/sound/announcer/vox_fem/different.ogg
index dfce0903818db..a62b989116f91 100644
Binary files a/sound/announcer/vox_fem/different.ogg and b/sound/announcer/vox_fem/different.ogg differ
diff --git a/sound/announcer/vox_fem/dimensional.ogg b/sound/announcer/vox_fem/dimensional.ogg
index 0779d44d311b2..bc59a5d137d60 100644
Binary files a/sound/announcer/vox_fem/dimensional.ogg and b/sound/announcer/vox_fem/dimensional.ogg differ
diff --git a/sound/announcer/vox_fem/dioxide.ogg b/sound/announcer/vox_fem/dioxide.ogg
index 31686aee67aad..a29ac5cd8ba0e 100644
Binary files a/sound/announcer/vox_fem/dioxide.ogg and b/sound/announcer/vox_fem/dioxide.ogg differ
diff --git a/sound/announcer/vox_fem/direct.ogg b/sound/announcer/vox_fem/direct.ogg
index f1268e34a0968..f4dedf9fccb03 100644
Binary files a/sound/announcer/vox_fem/direct.ogg and b/sound/announcer/vox_fem/direct.ogg differ
diff --git a/sound/announcer/vox_fem/director.ogg b/sound/announcer/vox_fem/director.ogg
index 26937c7835158..24db6d74b7b45 100644
Binary files a/sound/announcer/vox_fem/director.ogg and b/sound/announcer/vox_fem/director.ogg differ
diff --git a/sound/announcer/vox_fem/dirt.ogg b/sound/announcer/vox_fem/dirt.ogg
index 0c20d472b4253..f390f9d1e1339 100644
Binary files a/sound/announcer/vox_fem/dirt.ogg and b/sound/announcer/vox_fem/dirt.ogg differ
diff --git a/sound/announcer/vox_fem/disabled.ogg b/sound/announcer/vox_fem/disabled.ogg
index e9a53794c8499..18a812754c82e 100644
Binary files a/sound/announcer/vox_fem/disabled.ogg and b/sound/announcer/vox_fem/disabled.ogg differ
diff --git a/sound/announcer/vox_fem/disease.ogg b/sound/announcer/vox_fem/disease.ogg
index dd49df1236344..243a74dd1dd94 100644
Binary files a/sound/announcer/vox_fem/disease.ogg and b/sound/announcer/vox_fem/disease.ogg differ
diff --git a/sound/announcer/vox_fem/disengaged.ogg b/sound/announcer/vox_fem/disengaged.ogg
index beb57e639b3bb..c5923dfcb983a 100644
Binary files a/sound/announcer/vox_fem/disengaged.ogg and b/sound/announcer/vox_fem/disengaged.ogg differ
diff --git a/sound/announcer/vox_fem/dish.ogg b/sound/announcer/vox_fem/dish.ogg
index 61ace0be59a6e..900cd8e7e59ad 100644
Binary files a/sound/announcer/vox_fem/dish.ogg and b/sound/announcer/vox_fem/dish.ogg differ
diff --git a/sound/announcer/vox_fem/disk.ogg b/sound/announcer/vox_fem/disk.ogg
index 849487f4ef6b1..b16e4982d677e 100644
Binary files a/sound/announcer/vox_fem/disk.ogg and b/sound/announcer/vox_fem/disk.ogg differ
diff --git a/sound/announcer/vox_fem/disposal.ogg b/sound/announcer/vox_fem/disposal.ogg
index 5306720089bf4..26401b653842e 100644
Binary files a/sound/announcer/vox_fem/disposal.ogg and b/sound/announcer/vox_fem/disposal.ogg differ
diff --git a/sound/announcer/vox_fem/distance.ogg b/sound/announcer/vox_fem/distance.ogg
index fc66bc93f7d0e..030978899907e 100644
Binary files a/sound/announcer/vox_fem/distance.ogg and b/sound/announcer/vox_fem/distance.ogg differ
diff --git a/sound/announcer/vox_fem/distortion.ogg b/sound/announcer/vox_fem/distortion.ogg
index 8208ca347c011..2d5ddbb320557 100644
Binary files a/sound/announcer/vox_fem/distortion.ogg and b/sound/announcer/vox_fem/distortion.ogg differ
diff --git a/sound/announcer/vox_fem/do.ogg b/sound/announcer/vox_fem/do.ogg
index 0add3672c3d4b..88a7e629c494a 100644
Binary files a/sound/announcer/vox_fem/do.ogg and b/sound/announcer/vox_fem/do.ogg differ
diff --git a/sound/announcer/vox_fem/doctor.ogg b/sound/announcer/vox_fem/doctor.ogg
index e4ec144894755..483f2dad4f5a0 100644
Binary files a/sound/announcer/vox_fem/doctor.ogg and b/sound/announcer/vox_fem/doctor.ogg differ
diff --git a/sound/announcer/vox_fem/dog.ogg b/sound/announcer/vox_fem/dog.ogg
index 55a15810e5043..533c848b46506 100644
Binary files a/sound/announcer/vox_fem/dog.ogg and b/sound/announcer/vox_fem/dog.ogg differ
diff --git a/sound/announcer/vox_fem/dont.ogg b/sound/announcer/vox_fem/dont.ogg
index 20723c8687ca3..7156d6396ad1f 100644
Binary files a/sound/announcer/vox_fem/dont.ogg and b/sound/announcer/vox_fem/dont.ogg differ
diff --git a/sound/announcer/vox_fem/doomsday.ogg b/sound/announcer/vox_fem/doomsday.ogg
index c682fa23f8108..cd07686fab87c 100644
Binary files a/sound/announcer/vox_fem/doomsday.ogg and b/sound/announcer/vox_fem/doomsday.ogg differ
diff --git a/sound/announcer/vox_fem/doop.ogg b/sound/announcer/vox_fem/doop.ogg
index 34f653f12d697..24459a11ba4c4 100644
Binary files a/sound/announcer/vox_fem/doop.ogg and b/sound/announcer/vox_fem/doop.ogg differ
diff --git a/sound/announcer/vox_fem/door.ogg b/sound/announcer/vox_fem/door.ogg
index d6c9bdf0473a0..0f1ef2c6d7bad 100644
Binary files a/sound/announcer/vox_fem/door.ogg and b/sound/announcer/vox_fem/door.ogg differ
diff --git a/sound/announcer/vox_fem/dormitory.ogg b/sound/announcer/vox_fem/dormitory.ogg
index 89f7104d53868..618dd4e9c77e3 100644
Binary files a/sound/announcer/vox_fem/dormitory.ogg and b/sound/announcer/vox_fem/dormitory.ogg differ
diff --git a/sound/announcer/vox_fem/dot.ogg b/sound/announcer/vox_fem/dot.ogg
index bd8d47b6598de..25ade3f8a1388 100644
Binary files a/sound/announcer/vox_fem/dot.ogg and b/sound/announcer/vox_fem/dot.ogg differ
diff --git a/sound/announcer/vox_fem/double.ogg b/sound/announcer/vox_fem/double.ogg
index 3c3eb3157bc36..8991b67daac3c 100644
Binary files a/sound/announcer/vox_fem/double.ogg and b/sound/announcer/vox_fem/double.ogg differ
diff --git a/sound/announcer/vox_fem/down.ogg b/sound/announcer/vox_fem/down.ogg
index b34a0969595b4..e1ce7319abf31 100644
Binary files a/sound/announcer/vox_fem/down.ogg and b/sound/announcer/vox_fem/down.ogg differ
diff --git a/sound/announcer/vox_fem/dress.ogg b/sound/announcer/vox_fem/dress.ogg
index 84cc7fe79b99f..4e96225dcacdd 100644
Binary files a/sound/announcer/vox_fem/dress.ogg and b/sound/announcer/vox_fem/dress.ogg differ
diff --git a/sound/announcer/vox_fem/dressed.ogg b/sound/announcer/vox_fem/dressed.ogg
index 4a9ef3515a63f..cb3e652c6cd8d 100644
Binary files a/sound/announcer/vox_fem/dressed.ogg and b/sound/announcer/vox_fem/dressed.ogg differ
diff --git a/sound/announcer/vox_fem/dressing.ogg b/sound/announcer/vox_fem/dressing.ogg
index dded3edabb3b4..bc7285f2645f3 100644
Binary files a/sound/announcer/vox_fem/dressing.ogg and b/sound/announcer/vox_fem/dressing.ogg differ
diff --git a/sound/announcer/vox_fem/drone.ogg b/sound/announcer/vox_fem/drone.ogg
index d58a86ccea343..7a35f3c3dd0c4 100644
Binary files a/sound/announcer/vox_fem/drone.ogg and b/sound/announcer/vox_fem/drone.ogg differ
diff --git a/sound/announcer/vox_fem/dual.ogg b/sound/announcer/vox_fem/dual.ogg
index 539d7dcfdcbaa..4cc32eb95cd4b 100644
Binary files a/sound/announcer/vox_fem/dual.ogg and b/sound/announcer/vox_fem/dual.ogg differ
diff --git a/sound/announcer/vox_fem/duct.ogg b/sound/announcer/vox_fem/duct.ogg
index cae11fcc36993..e1153acfe8c37 100644
Binary files a/sound/announcer/vox_fem/duct.ogg and b/sound/announcer/vox_fem/duct.ogg differ
diff --git a/sound/announcer/vox_fem/e.ogg b/sound/announcer/vox_fem/e.ogg
index 23712e56cd409..3a10d1582094c 100644
Binary files a/sound/announcer/vox_fem/e.ogg and b/sound/announcer/vox_fem/e.ogg differ
diff --git a/sound/announcer/vox_fem/easily.ogg b/sound/announcer/vox_fem/easily.ogg
index cadf6f9291fbb..a2f056af74b15 100644
Binary files a/sound/announcer/vox_fem/easily.ogg and b/sound/announcer/vox_fem/easily.ogg differ
diff --git a/sound/announcer/vox_fem/east.ogg b/sound/announcer/vox_fem/east.ogg
index c3df2851d2bfb..4bf78b4db3868 100644
Binary files a/sound/announcer/vox_fem/east.ogg and b/sound/announcer/vox_fem/east.ogg differ
diff --git a/sound/announcer/vox_fem/eat.ogg b/sound/announcer/vox_fem/eat.ogg
index b33c5a3503459..5f9046fc76892 100644
Binary files a/sound/announcer/vox_fem/eat.ogg and b/sound/announcer/vox_fem/eat.ogg differ
diff --git a/sound/announcer/vox_fem/eaten.ogg b/sound/announcer/vox_fem/eaten.ogg
index 9005930d0f6ad..92899a609eb6f 100644
Binary files a/sound/announcer/vox_fem/eaten.ogg and b/sound/announcer/vox_fem/eaten.ogg differ
diff --git a/sound/announcer/vox_fem/echo.ogg b/sound/announcer/vox_fem/echo.ogg
index 0cf14ffbda7e5..57ed3120796dc 100644
Binary files a/sound/announcer/vox_fem/echo.ogg and b/sound/announcer/vox_fem/echo.ogg differ
diff --git a/sound/announcer/vox_fem/ed.ogg b/sound/announcer/vox_fem/ed.ogg
index 911901c2a0537..6cb8aafd9d4b4 100644
Binary files a/sound/announcer/vox_fem/ed.ogg and b/sound/announcer/vox_fem/ed.ogg differ
diff --git a/sound/announcer/vox_fem/education.ogg b/sound/announcer/vox_fem/education.ogg
index 9a7ed1d17d12c..ef3c3c6241316 100644
Binary files a/sound/announcer/vox_fem/education.ogg and b/sound/announcer/vox_fem/education.ogg differ
diff --git a/sound/announcer/vox_fem/effect.ogg b/sound/announcer/vox_fem/effect.ogg
index b17d6ec7e3497..c617df72064d7 100644
Binary files a/sound/announcer/vox_fem/effect.ogg and b/sound/announcer/vox_fem/effect.ogg differ
diff --git a/sound/announcer/vox_fem/effects.ogg b/sound/announcer/vox_fem/effects.ogg
index 59eb22c67fe4c..b5dede100a81b 100644
Binary files a/sound/announcer/vox_fem/effects.ogg and b/sound/announcer/vox_fem/effects.ogg differ
diff --git a/sound/announcer/vox_fem/egress.ogg b/sound/announcer/vox_fem/egress.ogg
index daab242620ed8..b8ca5ebb84967 100644
Binary files a/sound/announcer/vox_fem/egress.ogg and b/sound/announcer/vox_fem/egress.ogg differ
diff --git a/sound/announcer/vox_fem/eight.ogg b/sound/announcer/vox_fem/eight.ogg
index 11695053eedbf..118aab34447f3 100644
Binary files a/sound/announcer/vox_fem/eight.ogg and b/sound/announcer/vox_fem/eight.ogg differ
diff --git a/sound/announcer/vox_fem/eighteen.ogg b/sound/announcer/vox_fem/eighteen.ogg
index e5778706f31b8..a5f2a950cfdbc 100644
Binary files a/sound/announcer/vox_fem/eighteen.ogg and b/sound/announcer/vox_fem/eighteen.ogg differ
diff --git a/sound/announcer/vox_fem/eighty.ogg b/sound/announcer/vox_fem/eighty.ogg
index 2849238266f73..de6aa74b73870 100644
Binary files a/sound/announcer/vox_fem/eighty.ogg and b/sound/announcer/vox_fem/eighty.ogg differ
diff --git a/sound/announcer/vox_fem/electric.ogg b/sound/announcer/vox_fem/electric.ogg
index fa8b62db799c4..71719b042409c 100644
Binary files a/sound/announcer/vox_fem/electric.ogg and b/sound/announcer/vox_fem/electric.ogg differ
diff --git a/sound/announcer/vox_fem/electrical.ogg b/sound/announcer/vox_fem/electrical.ogg
index 08e40b2367c55..543d6322b5872 100644
Binary files a/sound/announcer/vox_fem/electrical.ogg and b/sound/announcer/vox_fem/electrical.ogg differ
diff --git a/sound/announcer/vox_fem/electromagnetic.ogg b/sound/announcer/vox_fem/electromagnetic.ogg
index 022f00cd14f66..d279eea1fa9fb 100644
Binary files a/sound/announcer/vox_fem/electromagnetic.ogg and b/sound/announcer/vox_fem/electromagnetic.ogg differ
diff --git a/sound/announcer/vox_fem/elevator.ogg b/sound/announcer/vox_fem/elevator.ogg
index 97e68b7662ca5..62bfaa29e7850 100644
Binary files a/sound/announcer/vox_fem/elevator.ogg and b/sound/announcer/vox_fem/elevator.ogg differ
diff --git a/sound/announcer/vox_fem/eleven.ogg b/sound/announcer/vox_fem/eleven.ogg
index 08c8c0e644d92..822a69915dfc2 100644
Binary files a/sound/announcer/vox_fem/eleven.ogg and b/sound/announcer/vox_fem/eleven.ogg differ
diff --git a/sound/announcer/vox_fem/eliminate.ogg b/sound/announcer/vox_fem/eliminate.ogg
index 11b9552292de3..1856761353143 100644
Binary files a/sound/announcer/vox_fem/eliminate.ogg and b/sound/announcer/vox_fem/eliminate.ogg differ
diff --git a/sound/announcer/vox_fem/emergency.ogg b/sound/announcer/vox_fem/emergency.ogg
index d89f2f342dbf4..c4a0e18ec589f 100644
Binary files a/sound/announcer/vox_fem/emergency.ogg and b/sound/announcer/vox_fem/emergency.ogg differ
diff --git a/sound/announcer/vox_fem/emitted.ogg b/sound/announcer/vox_fem/emitted.ogg
index d31b6307a3d1d..fcd663a4543fa 100644
Binary files a/sound/announcer/vox_fem/emitted.ogg and b/sound/announcer/vox_fem/emitted.ogg differ
diff --git a/sound/announcer/vox_fem/emitter.ogg b/sound/announcer/vox_fem/emitter.ogg
index 6662ece8be40c..9402e26d86649 100644
Binary files a/sound/announcer/vox_fem/emitter.ogg and b/sound/announcer/vox_fem/emitter.ogg differ
diff --git a/sound/announcer/vox_fem/emitting.ogg b/sound/announcer/vox_fem/emitting.ogg
index 377f792c08016..f580801be805a 100644
Binary files a/sound/announcer/vox_fem/emitting.ogg and b/sound/announcer/vox_fem/emitting.ogg differ
diff --git a/sound/announcer/vox_fem/enabled.ogg b/sound/announcer/vox_fem/enabled.ogg
index 7a377221d022b..28b349935148b 100644
Binary files a/sound/announcer/vox_fem/enabled.ogg and b/sound/announcer/vox_fem/enabled.ogg differ
diff --git a/sound/announcer/vox_fem/end.ogg b/sound/announcer/vox_fem/end.ogg
index 95b430e8b6434..7b79cc4542a73 100644
Binary files a/sound/announcer/vox_fem/end.ogg and b/sound/announcer/vox_fem/end.ogg differ
diff --git a/sound/announcer/vox_fem/ends.ogg b/sound/announcer/vox_fem/ends.ogg
index 34e06feb39ef7..ded313509d828 100644
Binary files a/sound/announcer/vox_fem/ends.ogg and b/sound/announcer/vox_fem/ends.ogg differ
diff --git a/sound/announcer/vox_fem/energy.ogg b/sound/announcer/vox_fem/energy.ogg
index 3887a11bd6f42..a905900b4babe 100644
Binary files a/sound/announcer/vox_fem/energy.ogg and b/sound/announcer/vox_fem/energy.ogg differ
diff --git a/sound/announcer/vox_fem/engage.ogg b/sound/announcer/vox_fem/engage.ogg
index 66f17507a0313..86147c0b53675 100644
Binary files a/sound/announcer/vox_fem/engage.ogg and b/sound/announcer/vox_fem/engage.ogg differ
diff --git a/sound/announcer/vox_fem/engaged.ogg b/sound/announcer/vox_fem/engaged.ogg
index 6f625ed812508..03fd62df57baf 100644
Binary files a/sound/announcer/vox_fem/engaged.ogg and b/sound/announcer/vox_fem/engaged.ogg differ
diff --git a/sound/announcer/vox_fem/engine.ogg b/sound/announcer/vox_fem/engine.ogg
index 267179cb7a568..82fa455cb66b2 100644
Binary files a/sound/announcer/vox_fem/engine.ogg and b/sound/announcer/vox_fem/engine.ogg differ
diff --git a/sound/announcer/vox_fem/engineer.ogg b/sound/announcer/vox_fem/engineer.ogg
index 5b1761013a4a6..4c792f6458283 100644
Binary files a/sound/announcer/vox_fem/engineer.ogg and b/sound/announcer/vox_fem/engineer.ogg differ
diff --git a/sound/announcer/vox_fem/engineering.ogg b/sound/announcer/vox_fem/engineering.ogg
index 821060a7b6dc1..4bdf4f2e5ab68 100644
Binary files a/sound/announcer/vox_fem/engineering.ogg and b/sound/announcer/vox_fem/engineering.ogg differ
diff --git a/sound/announcer/vox_fem/enormous.ogg b/sound/announcer/vox_fem/enormous.ogg
index 040b31b5d688a..2631b3d795994 100644
Binary files a/sound/announcer/vox_fem/enormous.ogg and b/sound/announcer/vox_fem/enormous.ogg differ
diff --git a/sound/announcer/vox_fem/enough.ogg b/sound/announcer/vox_fem/enough.ogg
index b7056903b955e..e40a704052d06 100644
Binary files a/sound/announcer/vox_fem/enough.ogg and b/sound/announcer/vox_fem/enough.ogg differ
diff --git a/sound/announcer/vox_fem/enter.ogg b/sound/announcer/vox_fem/enter.ogg
index 072d98b3442f6..080056dc25cab 100644
Binary files a/sound/announcer/vox_fem/enter.ogg and b/sound/announcer/vox_fem/enter.ogg differ
diff --git a/sound/announcer/vox_fem/entity.ogg b/sound/announcer/vox_fem/entity.ogg
index 40b2f1d803de1..44c549bcf0274 100644
Binary files a/sound/announcer/vox_fem/entity.ogg and b/sound/announcer/vox_fem/entity.ogg differ
diff --git a/sound/announcer/vox_fem/entry.ogg b/sound/announcer/vox_fem/entry.ogg
index bb42ea6cf9835..f8e9c9b38e609 100644
Binary files a/sound/announcer/vox_fem/entry.ogg and b/sound/announcer/vox_fem/entry.ogg differ
diff --git a/sound/announcer/vox_fem/environment.ogg b/sound/announcer/vox_fem/environment.ogg
index c2bfc9163fdf9..7db90618a1356 100644
Binary files a/sound/announcer/vox_fem/environment.ogg and b/sound/announcer/vox_fem/environment.ogg differ
diff --git a/sound/announcer/vox_fem/epic.ogg b/sound/announcer/vox_fem/epic.ogg
index 461c72652d2c0..fa8b15c3e32e6 100644
Binary files a/sound/announcer/vox_fem/epic.ogg and b/sound/announcer/vox_fem/epic.ogg differ
diff --git a/sound/announcer/vox_fem/equipment.ogg b/sound/announcer/vox_fem/equipment.ogg
index 224b7b232d500..361c830df8fc3 100644
Binary files a/sound/announcer/vox_fem/equipment.ogg and b/sound/announcer/vox_fem/equipment.ogg differ
diff --git a/sound/announcer/vox_fem/error.ogg b/sound/announcer/vox_fem/error.ogg
index 6dab23ef3b0c1..2026ef00995c0 100644
Binary files a/sound/announcer/vox_fem/error.ogg and b/sound/announcer/vox_fem/error.ogg differ
diff --git a/sound/announcer/vox_fem/escape.ogg b/sound/announcer/vox_fem/escape.ogg
index d1e8195d81619..d530c420dcaae 100644
Binary files a/sound/announcer/vox_fem/escape.ogg and b/sound/announcer/vox_fem/escape.ogg differ
diff --git a/sound/announcer/vox_fem/ethereal.ogg b/sound/announcer/vox_fem/ethereal.ogg
index ec27cdefb5ae2..37c87c3d9ad89 100644
Binary files a/sound/announcer/vox_fem/ethereal.ogg and b/sound/announcer/vox_fem/ethereal.ogg differ
diff --git a/sound/announcer/vox_fem/eva.ogg b/sound/announcer/vox_fem/eva.ogg
index 55deb8df427de..8cc84d2011aff 100644
Binary files a/sound/announcer/vox_fem/eva.ogg and b/sound/announcer/vox_fem/eva.ogg differ
diff --git a/sound/announcer/vox_fem/evacuate.ogg b/sound/announcer/vox_fem/evacuate.ogg
index a0d8b2105b38f..a64159c2f7e5f 100644
Binary files a/sound/announcer/vox_fem/evacuate.ogg and b/sound/announcer/vox_fem/evacuate.ogg differ
diff --git a/sound/announcer/vox_fem/even.ogg b/sound/announcer/vox_fem/even.ogg
index 75294ef40251a..f9bed07cd3075 100644
Binary files a/sound/announcer/vox_fem/even.ogg and b/sound/announcer/vox_fem/even.ogg differ
diff --git a/sound/announcer/vox_fem/ever.ogg b/sound/announcer/vox_fem/ever.ogg
index 54cf407148e61..d7ad38373d257 100644
Binary files a/sound/announcer/vox_fem/ever.ogg and b/sound/announcer/vox_fem/ever.ogg differ
diff --git a/sound/announcer/vox_fem/every.ogg b/sound/announcer/vox_fem/every.ogg
index 6468158bd7dca..df58e31f24e5f 100644
Binary files a/sound/announcer/vox_fem/every.ogg and b/sound/announcer/vox_fem/every.ogg differ
diff --git a/sound/announcer/vox_fem/everybody.ogg b/sound/announcer/vox_fem/everybody.ogg
index 8d8cc97489485..6fbcf42a7e6e4 100644
Binary files a/sound/announcer/vox_fem/everybody.ogg and b/sound/announcer/vox_fem/everybody.ogg differ
diff --git a/sound/announcer/vox_fem/everyone.ogg b/sound/announcer/vox_fem/everyone.ogg
index 19e137b9a0cb6..41c5b70fb15fe 100644
Binary files a/sound/announcer/vox_fem/everyone.ogg and b/sound/announcer/vox_fem/everyone.ogg differ
diff --git a/sound/announcer/vox_fem/exchange.ogg b/sound/announcer/vox_fem/exchange.ogg
index 9b2a5b2dbb2dc..7a8d235930953 100644
Binary files a/sound/announcer/vox_fem/exchange.ogg and b/sound/announcer/vox_fem/exchange.ogg differ
diff --git a/sound/announcer/vox_fem/execute.ogg b/sound/announcer/vox_fem/execute.ogg
index f77c035d9773c..6202857d0208c 100644
Binary files a/sound/announcer/vox_fem/execute.ogg and b/sound/announcer/vox_fem/execute.ogg differ
diff --git a/sound/announcer/vox_fem/exit.ogg b/sound/announcer/vox_fem/exit.ogg
index 38649506b5327..caa9d3d724e93 100644
Binary files a/sound/announcer/vox_fem/exit.ogg and b/sound/announcer/vox_fem/exit.ogg differ
diff --git a/sound/announcer/vox_fem/expect.ogg b/sound/announcer/vox_fem/expect.ogg
index 4489c61cf6d57..b7241c777bb84 100644
Binary files a/sound/announcer/vox_fem/expect.ogg and b/sound/announcer/vox_fem/expect.ogg differ
diff --git a/sound/announcer/vox_fem/experiment.ogg b/sound/announcer/vox_fem/experiment.ogg
index 6a0911111499a..1a1f8a0505d4c 100644
Binary files a/sound/announcer/vox_fem/experiment.ogg and b/sound/announcer/vox_fem/experiment.ogg differ
diff --git a/sound/announcer/vox_fem/experimental.ogg b/sound/announcer/vox_fem/experimental.ogg
index 689168a413294..bbe2d4f09a394 100644
Binary files a/sound/announcer/vox_fem/experimental.ogg and b/sound/announcer/vox_fem/experimental.ogg differ
diff --git a/sound/announcer/vox_fem/explode.ogg b/sound/announcer/vox_fem/explode.ogg
index 4ae77dcca31cf..85487d1cbd5f8 100644
Binary files a/sound/announcer/vox_fem/explode.ogg and b/sound/announcer/vox_fem/explode.ogg differ
diff --git a/sound/announcer/vox_fem/exploded.ogg b/sound/announcer/vox_fem/exploded.ogg
index 1534b362892c6..6ee3da68b1c55 100644
Binary files a/sound/announcer/vox_fem/exploded.ogg and b/sound/announcer/vox_fem/exploded.ogg differ
diff --git a/sound/announcer/vox_fem/exploding.ogg b/sound/announcer/vox_fem/exploding.ogg
index a6980e6b53b70..8c892e1539170 100644
Binary files a/sound/announcer/vox_fem/exploding.ogg and b/sound/announcer/vox_fem/exploding.ogg differ
diff --git a/sound/announcer/vox_fem/explosion.ogg b/sound/announcer/vox_fem/explosion.ogg
index 4e94d50cc0128..8c8771bf628f4 100644
Binary files a/sound/announcer/vox_fem/explosion.ogg and b/sound/announcer/vox_fem/explosion.ogg differ
diff --git a/sound/announcer/vox_fem/explosive.ogg b/sound/announcer/vox_fem/explosive.ogg
index a0113ee760bca..863bcdae72689 100644
Binary files a/sound/announcer/vox_fem/explosive.ogg and b/sound/announcer/vox_fem/explosive.ogg differ
diff --git a/sound/announcer/vox_fem/exposure.ogg b/sound/announcer/vox_fem/exposure.ogg
index 6f7bf4bea2a74..7d82338cfcf3d 100644
Binary files a/sound/announcer/vox_fem/exposure.ogg and b/sound/announcer/vox_fem/exposure.ogg differ
diff --git a/sound/announcer/vox_fem/exterminate.ogg b/sound/announcer/vox_fem/exterminate.ogg
index 6068cd0f88db0..886086899f65a 100644
Binary files a/sound/announcer/vox_fem/exterminate.ogg and b/sound/announcer/vox_fem/exterminate.ogg differ
diff --git a/sound/announcer/vox_fem/external.ogg b/sound/announcer/vox_fem/external.ogg
index d6f39b2651e0b..9064c1c0573fe 100644
Binary files a/sound/announcer/vox_fem/external.ogg and b/sound/announcer/vox_fem/external.ogg differ
diff --git a/sound/announcer/vox_fem/extinguish.ogg b/sound/announcer/vox_fem/extinguish.ogg
index b20db6dab69b2..ea178898aa997 100644
Binary files a/sound/announcer/vox_fem/extinguish.ogg and b/sound/announcer/vox_fem/extinguish.ogg differ
diff --git a/sound/announcer/vox_fem/extinguisher.ogg b/sound/announcer/vox_fem/extinguisher.ogg
index 21dd46ff0d8da..162d44d6fc9a8 100644
Binary files a/sound/announcer/vox_fem/extinguisher.ogg and b/sound/announcer/vox_fem/extinguisher.ogg differ
diff --git a/sound/announcer/vox_fem/extra.ogg b/sound/announcer/vox_fem/extra.ogg
index 0b5b16c6957b4..6c91575cb1780 100644
Binary files a/sound/announcer/vox_fem/extra.ogg and b/sound/announcer/vox_fem/extra.ogg differ
diff --git a/sound/announcer/vox_fem/extreme.ogg b/sound/announcer/vox_fem/extreme.ogg
index 21b4f4f1ff672..dd90c3e9e4b8c 100644
Binary files a/sound/announcer/vox_fem/extreme.ogg and b/sound/announcer/vox_fem/extreme.ogg differ
diff --git a/sound/announcer/vox_fem/f.ogg b/sound/announcer/vox_fem/f.ogg
index b6d85c14c7c0f..39c42aad1aa7a 100644
Binary files a/sound/announcer/vox_fem/f.ogg and b/sound/announcer/vox_fem/f.ogg differ
diff --git a/sound/announcer/vox_fem/facility.ogg b/sound/announcer/vox_fem/facility.ogg
index 3d9016157ab59..f76fca6598bb7 100644
Binary files a/sound/announcer/vox_fem/facility.ogg and b/sound/announcer/vox_fem/facility.ogg differ
diff --git a/sound/announcer/vox_fem/factory.ogg b/sound/announcer/vox_fem/factory.ogg
index 33cf90dc581bf..95775b300153c 100644
Binary files a/sound/announcer/vox_fem/factory.ogg and b/sound/announcer/vox_fem/factory.ogg differ
diff --git a/sound/announcer/vox_fem/fahrenheit.ogg b/sound/announcer/vox_fem/fahrenheit.ogg
index 6c3df93befaab..82057a551b46e 100644
Binary files a/sound/announcer/vox_fem/fahrenheit.ogg and b/sound/announcer/vox_fem/fahrenheit.ogg differ
diff --git a/sound/announcer/vox_fem/failed.ogg b/sound/announcer/vox_fem/failed.ogg
index d0dcfeb88f08b..63ab75a5b0f55 100644
Binary files a/sound/announcer/vox_fem/failed.ogg and b/sound/announcer/vox_fem/failed.ogg differ
diff --git a/sound/announcer/vox_fem/failure.ogg b/sound/announcer/vox_fem/failure.ogg
index 955e757888f29..a0ac0a5ddfd98 100644
Binary files a/sound/announcer/vox_fem/failure.ogg and b/sound/announcer/vox_fem/failure.ogg differ
diff --git a/sound/announcer/vox_fem/false.ogg b/sound/announcer/vox_fem/false.ogg
index 664215f948680..4403ed4c1ca3a 100644
Binary files a/sound/announcer/vox_fem/false.ogg and b/sound/announcer/vox_fem/false.ogg differ
diff --git a/sound/announcer/vox_fem/farthest.ogg b/sound/announcer/vox_fem/farthest.ogg
index e5c43372265d4..b6c7b23e651c8 100644
Binary files a/sound/announcer/vox_fem/farthest.ogg and b/sound/announcer/vox_fem/farthest.ogg differ
diff --git a/sound/announcer/vox_fem/fast.ogg b/sound/announcer/vox_fem/fast.ogg
index 802a6d165e45e..43d867e0b014e 100644
Binary files a/sound/announcer/vox_fem/fast.ogg and b/sound/announcer/vox_fem/fast.ogg differ
diff --git a/sound/announcer/vox_fem/fauna.ogg b/sound/announcer/vox_fem/fauna.ogg
index 14972097c1cde..a3e65495e75d0 100644
Binary files a/sound/announcer/vox_fem/fauna.ogg and b/sound/announcer/vox_fem/fauna.ogg differ
diff --git a/sound/announcer/vox_fem/feature.ogg b/sound/announcer/vox_fem/feature.ogg
index 59a3f68d456a6..8e5df3d7a5876 100644
Binary files a/sound/announcer/vox_fem/feature.ogg and b/sound/announcer/vox_fem/feature.ogg differ
diff --git a/sound/announcer/vox_fem/featured.ogg b/sound/announcer/vox_fem/featured.ogg
index e087b0d7cc668..21906ab88ad01 100644
Binary files a/sound/announcer/vox_fem/featured.ogg and b/sound/announcer/vox_fem/featured.ogg differ
diff --git a/sound/announcer/vox_fem/features.ogg b/sound/announcer/vox_fem/features.ogg
index 745992b760a7a..af72a39787b8e 100644
Binary files a/sound/announcer/vox_fem/features.ogg and b/sound/announcer/vox_fem/features.ogg differ
diff --git a/sound/announcer/vox_fem/featuring.ogg b/sound/announcer/vox_fem/featuring.ogg
index 72578f2bb19d6..c903eba404a40 100644
Binary files a/sound/announcer/vox_fem/featuring.ogg and b/sound/announcer/vox_fem/featuring.ogg differ
diff --git a/sound/announcer/vox_fem/feet.ogg b/sound/announcer/vox_fem/feet.ogg
index bdc3c783b2150..324e6efdea8ff 100644
Binary files a/sound/announcer/vox_fem/feet.ogg and b/sound/announcer/vox_fem/feet.ogg differ
diff --git a/sound/announcer/vox_fem/felinid.ogg b/sound/announcer/vox_fem/felinid.ogg
index b40747fb1178e..2cc991232ac42 100644
Binary files a/sound/announcer/vox_fem/felinid.ogg and b/sound/announcer/vox_fem/felinid.ogg differ
diff --git a/sound/announcer/vox_fem/few.ogg b/sound/announcer/vox_fem/few.ogg
index 5ba76619c0f4f..5ab6ada91bf2c 100644
Binary files a/sound/announcer/vox_fem/few.ogg and b/sound/announcer/vox_fem/few.ogg differ
diff --git a/sound/announcer/vox_fem/field.ogg b/sound/announcer/vox_fem/field.ogg
index 80c4e1f02e50e..4da0e5dc61423 100644
Binary files a/sound/announcer/vox_fem/field.ogg and b/sound/announcer/vox_fem/field.ogg differ
diff --git a/sound/announcer/vox_fem/fifteen.ogg b/sound/announcer/vox_fem/fifteen.ogg
index 8a77f21ab344a..91f74a4918502 100644
Binary files a/sound/announcer/vox_fem/fifteen.ogg and b/sound/announcer/vox_fem/fifteen.ogg differ
diff --git a/sound/announcer/vox_fem/fifth.ogg b/sound/announcer/vox_fem/fifth.ogg
index 536592e78bfe1..a243e53ddf203 100644
Binary files a/sound/announcer/vox_fem/fifth.ogg and b/sound/announcer/vox_fem/fifth.ogg differ
diff --git a/sound/announcer/vox_fem/fifty.ogg b/sound/announcer/vox_fem/fifty.ogg
index 25545b950c0b8..3583c7ca4d1b3 100644
Binary files a/sound/announcer/vox_fem/fifty.ogg and b/sound/announcer/vox_fem/fifty.ogg differ
diff --git a/sound/announcer/vox_fem/filter.ogg b/sound/announcer/vox_fem/filter.ogg
index 3b2ae95e37ff1..5c7ba1f5d0571 100644
Binary files a/sound/announcer/vox_fem/filter.ogg and b/sound/announcer/vox_fem/filter.ogg differ
diff --git a/sound/announcer/vox_fem/filters.ogg b/sound/announcer/vox_fem/filters.ogg
index 204b82da198eb..7f466e8cf1734 100644
Binary files a/sound/announcer/vox_fem/filters.ogg and b/sound/announcer/vox_fem/filters.ogg differ
diff --git a/sound/announcer/vox_fem/final.ogg b/sound/announcer/vox_fem/final.ogg
index 6dbc6507cc937..00e9667695768 100644
Binary files a/sound/announcer/vox_fem/final.ogg and b/sound/announcer/vox_fem/final.ogg differ
diff --git a/sound/announcer/vox_fem/fine.ogg b/sound/announcer/vox_fem/fine.ogg
index f791d94f2bbac..8e70e1bb076ea 100644
Binary files a/sound/announcer/vox_fem/fine.ogg and b/sound/announcer/vox_fem/fine.ogg differ
diff --git a/sound/announcer/vox_fem/fire.ogg b/sound/announcer/vox_fem/fire.ogg
index b432413223946..9e77aa80e6c95 100644
Binary files a/sound/announcer/vox_fem/fire.ogg and b/sound/announcer/vox_fem/fire.ogg differ
diff --git a/sound/announcer/vox_fem/first.ogg b/sound/announcer/vox_fem/first.ogg
index 2e5e035c5b9b9..672678b69a8db 100644
Binary files a/sound/announcer/vox_fem/first.ogg and b/sound/announcer/vox_fem/first.ogg differ
diff --git a/sound/announcer/vox_fem/five.ogg b/sound/announcer/vox_fem/five.ogg
index 4718bda670fed..7086d8bb00605 100644
Binary files a/sound/announcer/vox_fem/five.ogg and b/sound/announcer/vox_fem/five.ogg differ
diff --git a/sound/announcer/vox_fem/fix.ogg b/sound/announcer/vox_fem/fix.ogg
index ac318fcfeeef0..219001f3b91cb 100644
Binary files a/sound/announcer/vox_fem/fix.ogg and b/sound/announcer/vox_fem/fix.ogg differ
diff --git a/sound/announcer/vox_fem/flooding.ogg b/sound/announcer/vox_fem/flooding.ogg
index d9e14b652622a..f7f7c772471f2 100644
Binary files a/sound/announcer/vox_fem/flooding.ogg and b/sound/announcer/vox_fem/flooding.ogg differ
diff --git a/sound/announcer/vox_fem/floor.ogg b/sound/announcer/vox_fem/floor.ogg
index 68a86a3fbe05a..dae03f49fb961 100644
Binary files a/sound/announcer/vox_fem/floor.ogg and b/sound/announcer/vox_fem/floor.ogg differ
diff --git a/sound/announcer/vox_fem/flyman.ogg b/sound/announcer/vox_fem/flyman.ogg
index 5d8b9ce20af63..ef04267766a47 100644
Binary files a/sound/announcer/vox_fem/flyman.ogg and b/sound/announcer/vox_fem/flyman.ogg differ
diff --git a/sound/announcer/vox_fem/fool.ogg b/sound/announcer/vox_fem/fool.ogg
index 703d3b846a222..0cf850b39185f 100644
Binary files a/sound/announcer/vox_fem/fool.ogg and b/sound/announcer/vox_fem/fool.ogg differ
diff --git a/sound/announcer/vox_fem/foolish.ogg b/sound/announcer/vox_fem/foolish.ogg
index 214ed30f2c43c..077a370d356aa 100644
Binary files a/sound/announcer/vox_fem/foolish.ogg and b/sound/announcer/vox_fem/foolish.ogg differ
diff --git a/sound/announcer/vox_fem/for.ogg b/sound/announcer/vox_fem/for.ogg
index 097242e42ba55..6f3aaba62b3f6 100644
Binary files a/sound/announcer/vox_fem/for.ogg and b/sound/announcer/vox_fem/for.ogg differ
diff --git a/sound/announcer/vox_fem/forbidden.ogg b/sound/announcer/vox_fem/forbidden.ogg
index f87e9584ab5d2..9960519e9d200 100644
Binary files a/sound/announcer/vox_fem/forbidden.ogg and b/sound/announcer/vox_fem/forbidden.ogg differ
diff --git a/sound/announcer/vox_fem/force.ogg b/sound/announcer/vox_fem/force.ogg
index ff0c380a4d8d4..7dfd30c94795a 100644
Binary files a/sound/announcer/vox_fem/force.ogg and b/sound/announcer/vox_fem/force.ogg differ
diff --git a/sound/announcer/vox_fem/fore.ogg b/sound/announcer/vox_fem/fore.ogg
index 1257ff7b21264..44499d9462658 100644
Binary files a/sound/announcer/vox_fem/fore.ogg and b/sound/announcer/vox_fem/fore.ogg differ
diff --git a/sound/announcer/vox_fem/form.ogg b/sound/announcer/vox_fem/form.ogg
index 35a89f3435cfd..7984edea2317f 100644
Binary files a/sound/announcer/vox_fem/form.ogg and b/sound/announcer/vox_fem/form.ogg differ
diff --git a/sound/announcer/vox_fem/formed.ogg b/sound/announcer/vox_fem/formed.ogg
index abb791a9d6a5c..f0c76e400c9f9 100644
Binary files a/sound/announcer/vox_fem/formed.ogg and b/sound/announcer/vox_fem/formed.ogg differ
diff --git a/sound/announcer/vox_fem/forms.ogg b/sound/announcer/vox_fem/forms.ogg
index c3cd6bfd6c4f3..1383f7ef03d78 100644
Binary files a/sound/announcer/vox_fem/forms.ogg and b/sound/announcer/vox_fem/forms.ogg differ
diff --git a/sound/announcer/vox_fem/forty.ogg b/sound/announcer/vox_fem/forty.ogg
index 45bae51678a17..702b9b3e95c1e 100644
Binary files a/sound/announcer/vox_fem/forty.ogg and b/sound/announcer/vox_fem/forty.ogg differ
diff --git a/sound/announcer/vox_fem/found.ogg b/sound/announcer/vox_fem/found.ogg
index 6cde24b793bd4..730fc718a77d8 100644
Binary files a/sound/announcer/vox_fem/found.ogg and b/sound/announcer/vox_fem/found.ogg differ
diff --git a/sound/announcer/vox_fem/four.ogg b/sound/announcer/vox_fem/four.ogg
index 1d92ce099b75e..decc10eceeb20 100644
Binary files a/sound/announcer/vox_fem/four.ogg and b/sound/announcer/vox_fem/four.ogg differ
diff --git a/sound/announcer/vox_fem/fourteen.ogg b/sound/announcer/vox_fem/fourteen.ogg
index 5b8ada9684706..8a08ae2ab0da9 100644
Binary files a/sound/announcer/vox_fem/fourteen.ogg and b/sound/announcer/vox_fem/fourteen.ogg differ
diff --git a/sound/announcer/vox_fem/fourth.ogg b/sound/announcer/vox_fem/fourth.ogg
index 39d79cab3a934..d08f93bb6a003 100644
Binary files a/sound/announcer/vox_fem/fourth.ogg and b/sound/announcer/vox_fem/fourth.ogg differ
diff --git a/sound/announcer/vox_fem/fourty.ogg b/sound/announcer/vox_fem/fourty.ogg
index 988dd4919289a..0ab82d7fbdc02 100644
Binary files a/sound/announcer/vox_fem/fourty.ogg and b/sound/announcer/vox_fem/fourty.ogg differ
diff --git a/sound/announcer/vox_fem/foxtrot.ogg b/sound/announcer/vox_fem/foxtrot.ogg
index 737e87c8c7e33..de275cb5350df 100644
Binary files a/sound/announcer/vox_fem/foxtrot.ogg and b/sound/announcer/vox_fem/foxtrot.ogg differ
diff --git a/sound/announcer/vox_fem/free.ogg b/sound/announcer/vox_fem/free.ogg
index 2a897ee44acc6..ebfa5ada42a67 100644
Binary files a/sound/announcer/vox_fem/free.ogg and b/sound/announcer/vox_fem/free.ogg differ
diff --git a/sound/announcer/vox_fem/freeman.ogg b/sound/announcer/vox_fem/freeman.ogg
index 632ea4cc7ce61..fff3a5c5374d4 100644
Binary files a/sound/announcer/vox_fem/freeman.ogg and b/sound/announcer/vox_fem/freeman.ogg differ
diff --git a/sound/announcer/vox_fem/freeze.ogg b/sound/announcer/vox_fem/freeze.ogg
index fce7515b196d8..058b2a9644831 100644
Binary files a/sound/announcer/vox_fem/freeze.ogg and b/sound/announcer/vox_fem/freeze.ogg differ
diff --git a/sound/announcer/vox_fem/freezer.ogg b/sound/announcer/vox_fem/freezer.ogg
index a4ca890423153..8722103d7ffb7 100644
Binary files a/sound/announcer/vox_fem/freezer.ogg and b/sound/announcer/vox_fem/freezer.ogg differ
diff --git a/sound/announcer/vox_fem/freezing.ogg b/sound/announcer/vox_fem/freezing.ogg
index 95ae8c5005829..08d173e401858 100644
Binary files a/sound/announcer/vox_fem/freezing.ogg and b/sound/announcer/vox_fem/freezing.ogg differ
diff --git a/sound/announcer/vox_fem/freon.ogg b/sound/announcer/vox_fem/freon.ogg
index 82128fee24109..27040ea9ceb28 100644
Binary files a/sound/announcer/vox_fem/freon.ogg and b/sound/announcer/vox_fem/freon.ogg differ
diff --git a/sound/announcer/vox_fem/from.ogg b/sound/announcer/vox_fem/from.ogg
index f2087b873a476..bcc821f788c0c 100644
Binary files a/sound/announcer/vox_fem/from.ogg and b/sound/announcer/vox_fem/from.ogg differ
diff --git a/sound/announcer/vox_fem/front.ogg b/sound/announcer/vox_fem/front.ogg
index 92e2877f9bcf1..1ae8b413ff7a9 100644
Binary files a/sound/announcer/vox_fem/front.ogg and b/sound/announcer/vox_fem/front.ogg differ
diff --git a/sound/announcer/vox_fem/froze.ogg b/sound/announcer/vox_fem/froze.ogg
index 512cc6c8169c8..4241b395b95d0 100644
Binary files a/sound/announcer/vox_fem/froze.ogg and b/sound/announcer/vox_fem/froze.ogg differ
diff --git a/sound/announcer/vox_fem/frozen.ogg b/sound/announcer/vox_fem/frozen.ogg
index 2a21298cb4561..f334fc97cda4b 100644
Binary files a/sound/announcer/vox_fem/frozen.ogg and b/sound/announcer/vox_fem/frozen.ogg differ
diff --git a/sound/announcer/vox_fem/fuck.ogg b/sound/announcer/vox_fem/fuck.ogg
index 83b80edb39435..62e467d8ce41f 100644
Binary files a/sound/announcer/vox_fem/fuck.ogg and b/sound/announcer/vox_fem/fuck.ogg differ
diff --git a/sound/announcer/vox_fem/fucking.ogg b/sound/announcer/vox_fem/fucking.ogg
index de3f4db4e31b3..1a287828e0499 100644
Binary files a/sound/announcer/vox_fem/fucking.ogg and b/sound/announcer/vox_fem/fucking.ogg differ
diff --git a/sound/announcer/vox_fem/fucks.ogg b/sound/announcer/vox_fem/fucks.ogg
index 8b42d553afa1d..1a85e0c46a389 100644
Binary files a/sound/announcer/vox_fem/fucks.ogg and b/sound/announcer/vox_fem/fucks.ogg differ
diff --git a/sound/announcer/vox_fem/fuel.ogg b/sound/announcer/vox_fem/fuel.ogg
index a05fe4b858f9d..ee7055792ebe6 100644
Binary files a/sound/announcer/vox_fem/fuel.ogg and b/sound/announcer/vox_fem/fuel.ogg differ
diff --git a/sound/announcer/vox_fem/g.ogg b/sound/announcer/vox_fem/g.ogg
index b94600a58dea8..c737362c98d9f 100644
Binary files a/sound/announcer/vox_fem/g.ogg and b/sound/announcer/vox_fem/g.ogg differ
diff --git a/sound/announcer/vox_fem/gas.ogg b/sound/announcer/vox_fem/gas.ogg
index acf3608421ea7..5bcfdf668dfce 100644
Binary files a/sound/announcer/vox_fem/gas.ogg and b/sound/announcer/vox_fem/gas.ogg differ
diff --git a/sound/announcer/vox_fem/gases.ogg b/sound/announcer/vox_fem/gases.ogg
index 0605a2605566f..eafe5bf7b4079 100644
Binary files a/sound/announcer/vox_fem/gases.ogg and b/sound/announcer/vox_fem/gases.ogg differ
diff --git a/sound/announcer/vox_fem/gave.ogg b/sound/announcer/vox_fem/gave.ogg
index beb35f1f4215b..dd0fbc3595710 100644
Binary files a/sound/announcer/vox_fem/gave.ogg and b/sound/announcer/vox_fem/gave.ogg differ
diff --git a/sound/announcer/vox_fem/gear.ogg b/sound/announcer/vox_fem/gear.ogg
index 629667e5df418..7f3e4813ef0a5 100644
Binary files a/sound/announcer/vox_fem/gear.ogg and b/sound/announcer/vox_fem/gear.ogg differ
diff --git a/sound/announcer/vox_fem/geared.ogg b/sound/announcer/vox_fem/geared.ogg
index 7188c657589d4..69205cbf90850 100644
Binary files a/sound/announcer/vox_fem/geared.ogg and b/sound/announcer/vox_fem/geared.ogg differ
diff --git a/sound/announcer/vox_fem/gearing.ogg b/sound/announcer/vox_fem/gearing.ogg
index 9e27a7956943d..5c3e3162a3348 100644
Binary files a/sound/announcer/vox_fem/gearing.ogg and b/sound/announcer/vox_fem/gearing.ogg differ
diff --git a/sound/announcer/vox_fem/generate.ogg b/sound/announcer/vox_fem/generate.ogg
index ceb09ec3b4360..2d0e5c95b07a5 100644
Binary files a/sound/announcer/vox_fem/generate.ogg and b/sound/announcer/vox_fem/generate.ogg differ
diff --git a/sound/announcer/vox_fem/generated.ogg b/sound/announcer/vox_fem/generated.ogg
index 42a49e7d43e54..3bcbb555eaff2 100644
Binary files a/sound/announcer/vox_fem/generated.ogg and b/sound/announcer/vox_fem/generated.ogg differ
diff --git a/sound/announcer/vox_fem/generating.ogg b/sound/announcer/vox_fem/generating.ogg
index a90e62d9dd760..bf48a410d7460 100644
Binary files a/sound/announcer/vox_fem/generating.ogg and b/sound/announcer/vox_fem/generating.ogg differ
diff --git a/sound/announcer/vox_fem/generator.ogg b/sound/announcer/vox_fem/generator.ogg
index e1573884d873b..27b7dbd9da37b 100644
Binary files a/sound/announcer/vox_fem/generator.ogg and b/sound/announcer/vox_fem/generator.ogg differ
diff --git a/sound/announcer/vox_fem/geneticist.ogg b/sound/announcer/vox_fem/geneticist.ogg
index d74a5cc248b9c..0b6c3e610ff17 100644
Binary files a/sound/announcer/vox_fem/geneticist.ogg and b/sound/announcer/vox_fem/geneticist.ogg differ
diff --git a/sound/announcer/vox_fem/get.ogg b/sound/announcer/vox_fem/get.ogg
index aab39941194d2..2f9412ae21031 100644
Binary files a/sound/announcer/vox_fem/get.ogg and b/sound/announcer/vox_fem/get.ogg differ
diff --git a/sound/announcer/vox_fem/give.ogg b/sound/announcer/vox_fem/give.ogg
index 8144ba82cccea..6146744f59a33 100644
Binary files a/sound/announcer/vox_fem/give.ogg and b/sound/announcer/vox_fem/give.ogg differ
diff --git a/sound/announcer/vox_fem/given.ogg b/sound/announcer/vox_fem/given.ogg
index 63f86c4878f8a..6889065a77998 100644
Binary files a/sound/announcer/vox_fem/given.ogg and b/sound/announcer/vox_fem/given.ogg differ
diff --git a/sound/announcer/vox_fem/glory.ogg b/sound/announcer/vox_fem/glory.ogg
index 533be3c4b13a1..4c5936a07db7f 100644
Binary files a/sound/announcer/vox_fem/glory.ogg and b/sound/announcer/vox_fem/glory.ogg differ
diff --git a/sound/announcer/vox_fem/go.ogg b/sound/announcer/vox_fem/go.ogg
index a053330358c69..75ca0aef7f30d 100644
Binary files a/sound/announcer/vox_fem/go.ogg and b/sound/announcer/vox_fem/go.ogg differ
diff --git a/sound/announcer/vox_fem/god.ogg b/sound/announcer/vox_fem/god.ogg
index c13b29aa372f0..861e413cebc69 100644
Binary files a/sound/announcer/vox_fem/god.ogg and b/sound/announcer/vox_fem/god.ogg differ
diff --git a/sound/announcer/vox_fem/going.ogg b/sound/announcer/vox_fem/going.ogg
index 1084b3913252e..135689451a288 100644
Binary files a/sound/announcer/vox_fem/going.ogg and b/sound/announcer/vox_fem/going.ogg differ
diff --git a/sound/announcer/vox_fem/golem.ogg b/sound/announcer/vox_fem/golem.ogg
index 9ac3a8ca45516..a71b6ac72ee17 100644
Binary files a/sound/announcer/vox_fem/golem.ogg and b/sound/announcer/vox_fem/golem.ogg differ
diff --git a/sound/announcer/vox_fem/good.ogg b/sound/announcer/vox_fem/good.ogg
index 30df3b967f98d..3a8b8c5d9239c 100644
Binary files a/sound/announcer/vox_fem/good.ogg and b/sound/announcer/vox_fem/good.ogg differ
diff --git a/sound/announcer/vox_fem/goodbye.ogg b/sound/announcer/vox_fem/goodbye.ogg
index 2a16f6bc2a930..f5579002b34cd 100644
Binary files a/sound/announcer/vox_fem/goodbye.ogg and b/sound/announcer/vox_fem/goodbye.ogg differ
diff --git a/sound/announcer/vox_fem/gordon.ogg b/sound/announcer/vox_fem/gordon.ogg
index 8b5d9b82673cd..4a362cdb81a55 100644
Binary files a/sound/announcer/vox_fem/gordon.ogg and b/sound/announcer/vox_fem/gordon.ogg differ
diff --git a/sound/announcer/vox_fem/got.ogg b/sound/announcer/vox_fem/got.ogg
index c8e34f7590ade..0a6bf18d403ba 100644
Binary files a/sound/announcer/vox_fem/got.ogg and b/sound/announcer/vox_fem/got.ogg differ
diff --git a/sound/announcer/vox_fem/government.ogg b/sound/announcer/vox_fem/government.ogg
index a1cab06525162..c799dfa35f53d 100644
Binary files a/sound/announcer/vox_fem/government.ogg and b/sound/announcer/vox_fem/government.ogg differ
diff --git a/sound/announcer/vox_fem/granted.ogg b/sound/announcer/vox_fem/granted.ogg
index 457dddda10ae0..70f3f53348170 100644
Binary files a/sound/announcer/vox_fem/granted.ogg and b/sound/announcer/vox_fem/granted.ogg differ
diff --git a/sound/announcer/vox_fem/gravity.ogg b/sound/announcer/vox_fem/gravity.ogg
index ca23eee8bd92e..ae475231672df 100644
Binary files a/sound/announcer/vox_fem/gravity.ogg and b/sound/announcer/vox_fem/gravity.ogg differ
diff --git a/sound/announcer/vox_fem/gray.ogg b/sound/announcer/vox_fem/gray.ogg
index 6efbc31c1a1a2..04a83b9533db4 100644
Binary files a/sound/announcer/vox_fem/gray.ogg and b/sound/announcer/vox_fem/gray.ogg differ
diff --git a/sound/announcer/vox_fem/great.ogg b/sound/announcer/vox_fem/great.ogg
index 4cefc28f4d93c..f58a71cb4e5a0 100644
Binary files a/sound/announcer/vox_fem/great.ogg and b/sound/announcer/vox_fem/great.ogg differ
diff --git a/sound/announcer/vox_fem/green.ogg b/sound/announcer/vox_fem/green.ogg
index cb30e04b3fdb5..83260324b4d10 100644
Binary files a/sound/announcer/vox_fem/green.ogg and b/sound/announcer/vox_fem/green.ogg differ
diff --git a/sound/announcer/vox_fem/grenade.ogg b/sound/announcer/vox_fem/grenade.ogg
index dfa8f1c6709c1..7070c6f4897c3 100644
Binary files a/sound/announcer/vox_fem/grenade.ogg and b/sound/announcer/vox_fem/grenade.ogg differ
diff --git a/sound/announcer/vox_fem/guard.ogg b/sound/announcer/vox_fem/guard.ogg
index 223042652bf1e..628c1e0c03e64 100644
Binary files a/sound/announcer/vox_fem/guard.ogg and b/sound/announcer/vox_fem/guard.ogg differ
diff --git a/sound/announcer/vox_fem/gulf.ogg b/sound/announcer/vox_fem/gulf.ogg
index e4e750d228c18..5b7815246dd11 100644
Binary files a/sound/announcer/vox_fem/gulf.ogg and b/sound/announcer/vox_fem/gulf.ogg differ
diff --git a/sound/announcer/vox_fem/gun.ogg b/sound/announcer/vox_fem/gun.ogg
index af149660f0000..74c7207ba59b2 100644
Binary files a/sound/announcer/vox_fem/gun.ogg and b/sound/announcer/vox_fem/gun.ogg differ
diff --git a/sound/announcer/vox_fem/guthrie.ogg b/sound/announcer/vox_fem/guthrie.ogg
index 1696df1f63143..d2d0406d7a6f4 100644
Binary files a/sound/announcer/vox_fem/guthrie.ogg and b/sound/announcer/vox_fem/guthrie.ogg differ
diff --git a/sound/announcer/vox_fem/h.ogg b/sound/announcer/vox_fem/h.ogg
index 52ff09f7fbad9..385fce7217cfe 100644
Binary files a/sound/announcer/vox_fem/h.ogg and b/sound/announcer/vox_fem/h.ogg differ
diff --git a/sound/announcer/vox_fem/hacker.ogg b/sound/announcer/vox_fem/hacker.ogg
index b9394207a8987..d71e890c0f53d 100644
Binary files a/sound/announcer/vox_fem/hacker.ogg and b/sound/announcer/vox_fem/hacker.ogg differ
diff --git a/sound/announcer/vox_fem/hackers.ogg b/sound/announcer/vox_fem/hackers.ogg
index 52c892d9409b2..af3b3cb4c8e40 100644
Binary files a/sound/announcer/vox_fem/hackers.ogg and b/sound/announcer/vox_fem/hackers.ogg differ
diff --git a/sound/announcer/vox_fem/had.ogg b/sound/announcer/vox_fem/had.ogg
index c04a0fd2cbcf5..6937f46dea685 100644
Binary files a/sound/announcer/vox_fem/had.ogg and b/sound/announcer/vox_fem/had.ogg differ
diff --git a/sound/announcer/vox_fem/hall.ogg b/sound/announcer/vox_fem/hall.ogg
index 32bf2e20c0cbb..288ecb93bc6b8 100644
Binary files a/sound/announcer/vox_fem/hall.ogg and b/sound/announcer/vox_fem/hall.ogg differ
diff --git a/sound/announcer/vox_fem/hallway.ogg b/sound/announcer/vox_fem/hallway.ogg
index 7a3c9074fbe80..5ee9fe0622f74 100644
Binary files a/sound/announcer/vox_fem/hallway.ogg and b/sound/announcer/vox_fem/hallway.ogg differ
diff --git a/sound/announcer/vox_fem/halon.ogg b/sound/announcer/vox_fem/halon.ogg
index 0cab7dee9a5c9..6299cb8f6db74 100644
Binary files a/sound/announcer/vox_fem/halon.ogg and b/sound/announcer/vox_fem/halon.ogg differ
diff --git a/sound/announcer/vox_fem/handling.ogg b/sound/announcer/vox_fem/handling.ogg
index 783e7afa09270..1eba79c91ce3c 100644
Binary files a/sound/announcer/vox_fem/handling.ogg and b/sound/announcer/vox_fem/handling.ogg differ
diff --git a/sound/announcer/vox_fem/hangar.ogg b/sound/announcer/vox_fem/hangar.ogg
index 061b52b50a240..ffd216def0aed 100644
Binary files a/sound/announcer/vox_fem/hangar.ogg and b/sound/announcer/vox_fem/hangar.ogg differ
diff --git a/sound/announcer/vox_fem/hard.ogg b/sound/announcer/vox_fem/hard.ogg
index be1a80c3f091b..014e17de7c277 100644
Binary files a/sound/announcer/vox_fem/hard.ogg and b/sound/announcer/vox_fem/hard.ogg differ
diff --git a/sound/announcer/vox_fem/hardly.ogg b/sound/announcer/vox_fem/hardly.ogg
index bb4de217a1767..520a561330bf8 100644
Binary files a/sound/announcer/vox_fem/hardly.ogg and b/sound/announcer/vox_fem/hardly.ogg differ
diff --git a/sound/announcer/vox_fem/harm.ogg b/sound/announcer/vox_fem/harm.ogg
index 69cd1d97445ed..9dd156f35c1e2 100644
Binary files a/sound/announcer/vox_fem/harm.ogg and b/sound/announcer/vox_fem/harm.ogg differ
diff --git a/sound/announcer/vox_fem/harmful.ogg b/sound/announcer/vox_fem/harmful.ogg
index 0292ad1a6cd66..d2335af605cd0 100644
Binary files a/sound/announcer/vox_fem/harmful.ogg and b/sound/announcer/vox_fem/harmful.ogg differ
diff --git a/sound/announcer/vox_fem/harness.ogg b/sound/announcer/vox_fem/harness.ogg
index a81840955f4b7..d24a61f8dc4d6 100644
Binary files a/sound/announcer/vox_fem/harness.ogg and b/sound/announcer/vox_fem/harness.ogg differ
diff --git a/sound/announcer/vox_fem/harnessed.ogg b/sound/announcer/vox_fem/harnessed.ogg
index d1f259c7bdfd4..8bc051fdd2b7c 100644
Binary files a/sound/announcer/vox_fem/harnessed.ogg and b/sound/announcer/vox_fem/harnessed.ogg differ
diff --git a/sound/announcer/vox_fem/harnessing.ogg b/sound/announcer/vox_fem/harnessing.ogg
index 3dbdd03af886d..1849b83516e37 100644
Binary files a/sound/announcer/vox_fem/harnessing.ogg and b/sound/announcer/vox_fem/harnessing.ogg differ
diff --git a/sound/announcer/vox_fem/has.ogg b/sound/announcer/vox_fem/has.ogg
index 1012e621db360..5406ae9532da5 100644
Binary files a/sound/announcer/vox_fem/has.ogg and b/sound/announcer/vox_fem/has.ogg differ
diff --git a/sound/announcer/vox_fem/have.ogg b/sound/announcer/vox_fem/have.ogg
index 8e79a4298a95b..11a04e79caf65 100644
Binary files a/sound/announcer/vox_fem/have.ogg and b/sound/announcer/vox_fem/have.ogg differ
diff --git a/sound/announcer/vox_fem/hazard.ogg b/sound/announcer/vox_fem/hazard.ogg
index 4e1d7a6fba3f5..b715f42792cd9 100644
Binary files a/sound/announcer/vox_fem/hazard.ogg and b/sound/announcer/vox_fem/hazard.ogg differ
diff --git a/sound/announcer/vox_fem/he.ogg b/sound/announcer/vox_fem/he.ogg
index 4efc1788dfc04..1721f4d8fc400 100644
Binary files a/sound/announcer/vox_fem/he.ogg and b/sound/announcer/vox_fem/he.ogg differ
diff --git a/sound/announcer/vox_fem/head.ogg b/sound/announcer/vox_fem/head.ogg
index 793c30b1ec1c1..586ea7d329106 100644
Binary files a/sound/announcer/vox_fem/head.ogg and b/sound/announcer/vox_fem/head.ogg differ
diff --git a/sound/announcer/vox_fem/heal.ogg b/sound/announcer/vox_fem/heal.ogg
index f31b53c1cba5b..b2c87c2c1f743 100644
Binary files a/sound/announcer/vox_fem/heal.ogg and b/sound/announcer/vox_fem/heal.ogg differ
diff --git a/sound/announcer/vox_fem/healed.ogg b/sound/announcer/vox_fem/healed.ogg
index 80eea8068a5b7..7d05f3ead780b 100644
Binary files a/sound/announcer/vox_fem/healed.ogg and b/sound/announcer/vox_fem/healed.ogg differ
diff --git a/sound/announcer/vox_fem/healing.ogg b/sound/announcer/vox_fem/healing.ogg
index 6ebcc588294ff..ad1e62e4fef2f 100644
Binary files a/sound/announcer/vox_fem/healing.ogg and b/sound/announcer/vox_fem/healing.ogg differ
diff --git a/sound/announcer/vox_fem/healium.ogg b/sound/announcer/vox_fem/healium.ogg
index 79b4fd19de329..e56d8720ca611 100644
Binary files a/sound/announcer/vox_fem/healium.ogg and b/sound/announcer/vox_fem/healium.ogg differ
diff --git a/sound/announcer/vox_fem/health.ogg b/sound/announcer/vox_fem/health.ogg
index 0680e8bbce8fd..e5dbedd1955a2 100644
Binary files a/sound/announcer/vox_fem/health.ogg and b/sound/announcer/vox_fem/health.ogg differ
diff --git a/sound/announcer/vox_fem/heat.ogg b/sound/announcer/vox_fem/heat.ogg
index 8835b21b4b512..00d9edb49b573 100644
Binary files a/sound/announcer/vox_fem/heat.ogg and b/sound/announcer/vox_fem/heat.ogg differ
diff --git a/sound/announcer/vox_fem/heated.ogg b/sound/announcer/vox_fem/heated.ogg
index e3db67adee43b..f1df9a6abf3db 100644
Binary files a/sound/announcer/vox_fem/heated.ogg and b/sound/announcer/vox_fem/heated.ogg differ
diff --git a/sound/announcer/vox_fem/heating.ogg b/sound/announcer/vox_fem/heating.ogg
index 553b4d5576605..83d42500add35 100644
Binary files a/sound/announcer/vox_fem/heating.ogg and b/sound/announcer/vox_fem/heating.ogg differ
diff --git a/sound/announcer/vox_fem/helicopter.ogg b/sound/announcer/vox_fem/helicopter.ogg
index 9b262f6abb2ac..c8878cd065f21 100644
Binary files a/sound/announcer/vox_fem/helicopter.ogg and b/sound/announcer/vox_fem/helicopter.ogg differ
diff --git a/sound/announcer/vox_fem/helium.ogg b/sound/announcer/vox_fem/helium.ogg
index 285e669ff123e..34c22c36bb34b 100644
Binary files a/sound/announcer/vox_fem/helium.ogg and b/sound/announcer/vox_fem/helium.ogg differ
diff --git a/sound/announcer/vox_fem/hello.ogg b/sound/announcer/vox_fem/hello.ogg
index 43443199b99b3..670984bed0038 100644
Binary files a/sound/announcer/vox_fem/hello.ogg and b/sound/announcer/vox_fem/hello.ogg differ
diff --git a/sound/announcer/vox_fem/help.ogg b/sound/announcer/vox_fem/help.ogg
index e526e361599dc..3041bca7d1d13 100644
Binary files a/sound/announcer/vox_fem/help.ogg and b/sound/announcer/vox_fem/help.ogg differ
diff --git a/sound/announcer/vox_fem/her.ogg b/sound/announcer/vox_fem/her.ogg
index ea7788787545a..0e71b40b94118 100644
Binary files a/sound/announcer/vox_fem/her.ogg and b/sound/announcer/vox_fem/her.ogg differ
diff --git a/sound/announcer/vox_fem/here.ogg b/sound/announcer/vox_fem/here.ogg
index 07fcded6685ba..16c9a3dbcb5bd 100644
Binary files a/sound/announcer/vox_fem/here.ogg and b/sound/announcer/vox_fem/here.ogg differ
diff --git a/sound/announcer/vox_fem/heretic.ogg b/sound/announcer/vox_fem/heretic.ogg
index ef8a3b2bbbfcc..70514dfdd55df 100644
Binary files a/sound/announcer/vox_fem/heretic.ogg and b/sound/announcer/vox_fem/heretic.ogg differ
diff --git a/sound/announcer/vox_fem/hide.ogg b/sound/announcer/vox_fem/hide.ogg
index 9a910743918f2..b75719ae43d21 100644
Binary files a/sound/announcer/vox_fem/hide.ogg and b/sound/announcer/vox_fem/hide.ogg differ
diff --git a/sound/announcer/vox_fem/high.ogg b/sound/announcer/vox_fem/high.ogg
index acff09cb42889..e25a5bb8987a0 100644
Binary files a/sound/announcer/vox_fem/high.ogg and b/sound/announcer/vox_fem/high.ogg differ
diff --git a/sound/announcer/vox_fem/highest.ogg b/sound/announcer/vox_fem/highest.ogg
index 99a24ca7ff639..6edd6e1063f56 100644
Binary files a/sound/announcer/vox_fem/highest.ogg and b/sound/announcer/vox_fem/highest.ogg differ
diff --git a/sound/announcer/vox_fem/him.ogg b/sound/announcer/vox_fem/him.ogg
index fa5658df4a2c9..796ad89026929 100644
Binary files a/sound/announcer/vox_fem/him.ogg and b/sound/announcer/vox_fem/him.ogg differ
diff --git a/sound/announcer/vox_fem/hit.ogg b/sound/announcer/vox_fem/hit.ogg
index e48528770a31c..8c106366e476d 100644
Binary files a/sound/announcer/vox_fem/hit.ogg and b/sound/announcer/vox_fem/hit.ogg differ
diff --git a/sound/announcer/vox_fem/hole.ogg b/sound/announcer/vox_fem/hole.ogg
index 9bef172d53d1f..c2393729cb671 100644
Binary files a/sound/announcer/vox_fem/hole.ogg and b/sound/announcer/vox_fem/hole.ogg differ
diff --git a/sound/announcer/vox_fem/honk.ogg b/sound/announcer/vox_fem/honk.ogg
index ed000a256542c..2d947d2d6e727 100644
Binary files a/sound/announcer/vox_fem/honk.ogg and b/sound/announcer/vox_fem/honk.ogg differ
diff --git a/sound/announcer/vox_fem/hop.ogg b/sound/announcer/vox_fem/hop.ogg
index a09f3e525ac41..c652a79f82624 100644
Binary files a/sound/announcer/vox_fem/hop.ogg and b/sound/announcer/vox_fem/hop.ogg differ
diff --git a/sound/announcer/vox_fem/hos.ogg b/sound/announcer/vox_fem/hos.ogg
index 59dddae828e7a..cb49b765058e5 100644
Binary files a/sound/announcer/vox_fem/hos.ogg and b/sound/announcer/vox_fem/hos.ogg differ
diff --git a/sound/announcer/vox_fem/hostile.ogg b/sound/announcer/vox_fem/hostile.ogg
index cc7555ceb85d8..f7e7d5f361679 100644
Binary files a/sound/announcer/vox_fem/hostile.ogg and b/sound/announcer/vox_fem/hostile.ogg differ
diff --git a/sound/announcer/vox_fem/hot.ogg b/sound/announcer/vox_fem/hot.ogg
index 1eb650fae0d36..17580bed591ef 100644
Binary files a/sound/announcer/vox_fem/hot.ogg and b/sound/announcer/vox_fem/hot.ogg differ
diff --git a/sound/announcer/vox_fem/hotel.ogg b/sound/announcer/vox_fem/hotel.ogg
index 12b39a3bc0838..ef98557be112b 100644
Binary files a/sound/announcer/vox_fem/hotel.ogg and b/sound/announcer/vox_fem/hotel.ogg differ
diff --git a/sound/announcer/vox_fem/hour.ogg b/sound/announcer/vox_fem/hour.ogg
index b2ce9e7148950..0342d8520357e 100644
Binary files a/sound/announcer/vox_fem/hour.ogg and b/sound/announcer/vox_fem/hour.ogg differ
diff --git a/sound/announcer/vox_fem/hours.ogg b/sound/announcer/vox_fem/hours.ogg
index 9515bc858ccc9..9a2b2993bc3be 100644
Binary files a/sound/announcer/vox_fem/hours.ogg and b/sound/announcer/vox_fem/hours.ogg differ
diff --git a/sound/announcer/vox_fem/how.ogg b/sound/announcer/vox_fem/how.ogg
index 42d00c739fe6a..4fbc0e730746c 100644
Binary files a/sound/announcer/vox_fem/how.ogg and b/sound/announcer/vox_fem/how.ogg differ
diff --git a/sound/announcer/vox_fem/human.ogg b/sound/announcer/vox_fem/human.ogg
index 2bf56adb05f26..97a0bc4efab77 100644
Binary files a/sound/announcer/vox_fem/human.ogg and b/sound/announcer/vox_fem/human.ogg differ
diff --git a/sound/announcer/vox_fem/humanoid.ogg b/sound/announcer/vox_fem/humanoid.ogg
index 4d20646a5454b..3b87d6fd08dd2 100644
Binary files a/sound/announcer/vox_fem/humanoid.ogg and b/sound/announcer/vox_fem/humanoid.ogg differ
diff --git a/sound/announcer/vox_fem/humans.ogg b/sound/announcer/vox_fem/humans.ogg
index 717ceef104309..1dd1faabb0947 100644
Binary files a/sound/announcer/vox_fem/humans.ogg and b/sound/announcer/vox_fem/humans.ogg differ
diff --git a/sound/announcer/vox_fem/hundred.ogg b/sound/announcer/vox_fem/hundred.ogg
index 3dfe563ecae06..b44257fa6ab00 100644
Binary files a/sound/announcer/vox_fem/hundred.ogg and b/sound/announcer/vox_fem/hundred.ogg differ
diff --git a/sound/announcer/vox_fem/hunger.ogg b/sound/announcer/vox_fem/hunger.ogg
index e5e8be858a6ed..b779360b0ffbe 100644
Binary files a/sound/announcer/vox_fem/hunger.ogg and b/sound/announcer/vox_fem/hunger.ogg differ
diff --git a/sound/announcer/vox_fem/hurt.ogg b/sound/announcer/vox_fem/hurt.ogg
index ba3ac0e04c270..3fafde05afb26 100644
Binary files a/sound/announcer/vox_fem/hurt.ogg and b/sound/announcer/vox_fem/hurt.ogg differ
diff --git a/sound/announcer/vox_fem/hydro.ogg b/sound/announcer/vox_fem/hydro.ogg
index 37be6cfc110b1..7996edd336b6b 100644
Binary files a/sound/announcer/vox_fem/hydro.ogg and b/sound/announcer/vox_fem/hydro.ogg differ
diff --git a/sound/announcer/vox_fem/hydrogen.ogg b/sound/announcer/vox_fem/hydrogen.ogg
index 050a3bc028cc5..425e952342d44 100644
Binary files a/sound/announcer/vox_fem/hydrogen.ogg and b/sound/announcer/vox_fem/hydrogen.ogg differ
diff --git a/sound/announcer/vox_fem/hydroponics.ogg b/sound/announcer/vox_fem/hydroponics.ogg
index 465ccb1640a25..39df8b8b12282 100644
Binary files a/sound/announcer/vox_fem/hydroponics.ogg and b/sound/announcer/vox_fem/hydroponics.ogg differ
diff --git a/sound/announcer/vox_fem/hyper-noblium.ogg b/sound/announcer/vox_fem/hyper-noblium.ogg
index 4fda6b404689f..91f5632a391bd 100644
Binary files a/sound/announcer/vox_fem/hyper-noblium.ogg and b/sound/announcer/vox_fem/hyper-noblium.ogg differ
diff --git a/sound/announcer/vox_fem/i.ogg b/sound/announcer/vox_fem/i.ogg
index 5ad1e1084c2c7..43e9376ca926d 100644
Binary files a/sound/announcer/vox_fem/i.ogg and b/sound/announcer/vox_fem/i.ogg differ
diff --git a/sound/announcer/vox_fem/ian.ogg b/sound/announcer/vox_fem/ian.ogg
index 1025001b142d7..00a67f4b0cbd9 100644
Binary files a/sound/announcer/vox_fem/ian.ogg and b/sound/announcer/vox_fem/ian.ogg differ
diff --git a/sound/announcer/vox_fem/idiot.ogg b/sound/announcer/vox_fem/idiot.ogg
index 6e865a6b93d59..09981c517a073 100644
Binary files a/sound/announcer/vox_fem/idiot.ogg and b/sound/announcer/vox_fem/idiot.ogg differ
diff --git a/sound/announcer/vox_fem/if.ogg b/sound/announcer/vox_fem/if.ogg
index 4513597e8ea6b..ccbfcc4be8d8d 100644
Binary files a/sound/announcer/vox_fem/if.ogg and b/sound/announcer/vox_fem/if.ogg differ
diff --git a/sound/announcer/vox_fem/if2.ogg b/sound/announcer/vox_fem/if2.ogg
index de05d5e2f52ea..f2c7c2f5ceee4 100644
Binary files a/sound/announcer/vox_fem/if2.ogg and b/sound/announcer/vox_fem/if2.ogg differ
diff --git a/sound/announcer/vox_fem/illegal.ogg b/sound/announcer/vox_fem/illegal.ogg
index 59cf1fb10f333..f378ae60ac395 100644
Binary files a/sound/announcer/vox_fem/illegal.ogg and b/sound/announcer/vox_fem/illegal.ogg differ
diff --git a/sound/announcer/vox_fem/immediate.ogg b/sound/announcer/vox_fem/immediate.ogg
index 95dca25aea0fa..1db694f6ed9e2 100644
Binary files a/sound/announcer/vox_fem/immediate.ogg and b/sound/announcer/vox_fem/immediate.ogg differ
diff --git a/sound/announcer/vox_fem/immediately.ogg b/sound/announcer/vox_fem/immediately.ogg
index 82f12bd4d974b..12ec8c2f78c3e 100644
Binary files a/sound/announcer/vox_fem/immediately.ogg and b/sound/announcer/vox_fem/immediately.ogg differ
diff --git a/sound/announcer/vox_fem/immortal.ogg b/sound/announcer/vox_fem/immortal.ogg
index 06fa27c0b3e61..6dde2949ec35d 100644
Binary files a/sound/announcer/vox_fem/immortal.ogg and b/sound/announcer/vox_fem/immortal.ogg differ
diff --git a/sound/announcer/vox_fem/impossible.ogg b/sound/announcer/vox_fem/impossible.ogg
index a34c4898f973f..7b603ceb7acd7 100644
Binary files a/sound/announcer/vox_fem/impossible.ogg and b/sound/announcer/vox_fem/impossible.ogg differ
diff --git a/sound/announcer/vox_fem/in.ogg b/sound/announcer/vox_fem/in.ogg
index 72bcd0a6fb3b9..ce720993fe83e 100644
Binary files a/sound/announcer/vox_fem/in.ogg and b/sound/announcer/vox_fem/in.ogg differ
diff --git a/sound/announcer/vox_fem/inches.ogg b/sound/announcer/vox_fem/inches.ogg
index 3b81358ae0e39..0e4dc20a816f9 100644
Binary files a/sound/announcer/vox_fem/inches.ogg and b/sound/announcer/vox_fem/inches.ogg differ
diff --git a/sound/announcer/vox_fem/india.ogg b/sound/announcer/vox_fem/india.ogg
index ff2dfd9360a4d..f7c6efdd3b6e7 100644
Binary files a/sound/announcer/vox_fem/india.ogg and b/sound/announcer/vox_fem/india.ogg differ
diff --git a/sound/announcer/vox_fem/inert.ogg b/sound/announcer/vox_fem/inert.ogg
index 00826c23b2afa..288dc65bf0fa5 100644
Binary files a/sound/announcer/vox_fem/inert.ogg and b/sound/announcer/vox_fem/inert.ogg differ
diff --git a/sound/announcer/vox_fem/ing.ogg b/sound/announcer/vox_fem/ing.ogg
index 164223740779b..a594ec430670b 100644
Binary files a/sound/announcer/vox_fem/ing.ogg and b/sound/announcer/vox_fem/ing.ogg differ
diff --git a/sound/announcer/vox_fem/inoperative.ogg b/sound/announcer/vox_fem/inoperative.ogg
index 2a1d96a14f00d..9465842385846 100644
Binary files a/sound/announcer/vox_fem/inoperative.ogg and b/sound/announcer/vox_fem/inoperative.ogg differ
diff --git a/sound/announcer/vox_fem/inside.ogg b/sound/announcer/vox_fem/inside.ogg
index 1b94b170a152b..70067ab683a80 100644
Binary files a/sound/announcer/vox_fem/inside.ogg and b/sound/announcer/vox_fem/inside.ogg differ
diff --git a/sound/announcer/vox_fem/inspection.ogg b/sound/announcer/vox_fem/inspection.ogg
index 130b4b2f5d0e4..123b954a4b209 100644
Binary files a/sound/announcer/vox_fem/inspection.ogg and b/sound/announcer/vox_fem/inspection.ogg differ
diff --git a/sound/announcer/vox_fem/inspector.ogg b/sound/announcer/vox_fem/inspector.ogg
index db17e333b33a8..659b63ad2e5ed 100644
Binary files a/sound/announcer/vox_fem/inspector.ogg and b/sound/announcer/vox_fem/inspector.ogg differ
diff --git a/sound/announcer/vox_fem/interchange.ogg b/sound/announcer/vox_fem/interchange.ogg
index 1998831b3cafe..4726b4bc7465c 100644
Binary files a/sound/announcer/vox_fem/interchange.ogg and b/sound/announcer/vox_fem/interchange.ogg differ
diff --git a/sound/announcer/vox_fem/internal.ogg b/sound/announcer/vox_fem/internal.ogg
index 0cc275bd471c1..48e948fdc1082 100644
Binary files a/sound/announcer/vox_fem/internal.ogg and b/sound/announcer/vox_fem/internal.ogg differ
diff --git a/sound/announcer/vox_fem/internals.ogg b/sound/announcer/vox_fem/internals.ogg
index cc37b7f6cb0bc..ea96e4a9dd13a 100644
Binary files a/sound/announcer/vox_fem/internals.ogg and b/sound/announcer/vox_fem/internals.ogg differ
diff --git a/sound/announcer/vox_fem/intruder.ogg b/sound/announcer/vox_fem/intruder.ogg
index e53e34d056bf5..ec9c1962088f7 100644
Binary files a/sound/announcer/vox_fem/intruder.ogg and b/sound/announcer/vox_fem/intruder.ogg differ
diff --git a/sound/announcer/vox_fem/invalid.ogg b/sound/announcer/vox_fem/invalid.ogg
index 58fceb71b2535..0909adbdd386e 100644
Binary files a/sound/announcer/vox_fem/invalid.ogg and b/sound/announcer/vox_fem/invalid.ogg differ
diff --git a/sound/announcer/vox_fem/invalidate.ogg b/sound/announcer/vox_fem/invalidate.ogg
index 77259d6034f38..92d9503347d3b 100644
Binary files a/sound/announcer/vox_fem/invalidate.ogg and b/sound/announcer/vox_fem/invalidate.ogg differ
diff --git a/sound/announcer/vox_fem/invasion.ogg b/sound/announcer/vox_fem/invasion.ogg
index 628f8dd26c150..e14d4c467feae 100644
Binary files a/sound/announcer/vox_fem/invasion.ogg and b/sound/announcer/vox_fem/invasion.ogg differ
diff --git a/sound/announcer/vox_fem/irradiate.ogg b/sound/announcer/vox_fem/irradiate.ogg
index d14b296179828..4d7b86fe3c8ee 100644
Binary files a/sound/announcer/vox_fem/irradiate.ogg and b/sound/announcer/vox_fem/irradiate.ogg differ
diff --git a/sound/announcer/vox_fem/is.ogg b/sound/announcer/vox_fem/is.ogg
index de691f49ed4b0..39e774f18d4cb 100644
Binary files a/sound/announcer/vox_fem/is.ogg and b/sound/announcer/vox_fem/is.ogg differ
diff --git a/sound/announcer/vox_fem/it.ogg b/sound/announcer/vox_fem/it.ogg
index 96f9e1c3a7883..189d7292ee96f 100644
Binary files a/sound/announcer/vox_fem/it.ogg and b/sound/announcer/vox_fem/it.ogg differ
diff --git a/sound/announcer/vox_fem/its.ogg b/sound/announcer/vox_fem/its.ogg
index b5c2c22dd5720..fdf339a86e2bd 100644
Binary files a/sound/announcer/vox_fem/its.ogg and b/sound/announcer/vox_fem/its.ogg differ
diff --git a/sound/announcer/vox_fem/j.ogg b/sound/announcer/vox_fem/j.ogg
index f31196e2ba469..dd5086387b4d9 100644
Binary files a/sound/announcer/vox_fem/j.ogg and b/sound/announcer/vox_fem/j.ogg differ
diff --git a/sound/announcer/vox_fem/janitor.ogg b/sound/announcer/vox_fem/janitor.ogg
index 2d841e660fc90..637cd787836c6 100644
Binary files a/sound/announcer/vox_fem/janitor.ogg and b/sound/announcer/vox_fem/janitor.ogg differ
diff --git a/sound/announcer/vox_fem/jesus.ogg b/sound/announcer/vox_fem/jesus.ogg
index 9ec9500a62ce3..275256d206216 100644
Binary files a/sound/announcer/vox_fem/jesus.ogg and b/sound/announcer/vox_fem/jesus.ogg differ
diff --git a/sound/announcer/vox_fem/job.ogg b/sound/announcer/vox_fem/job.ogg
index 5b8186d0f7266..5184437c2c594 100644
Binary files a/sound/announcer/vox_fem/job.ogg and b/sound/announcer/vox_fem/job.ogg differ
diff --git a/sound/announcer/vox_fem/jobs.ogg b/sound/announcer/vox_fem/jobs.ogg
index 3fd3529e06c38..71c9680648f39 100644
Binary files a/sound/announcer/vox_fem/jobs.ogg and b/sound/announcer/vox_fem/jobs.ogg differ
diff --git a/sound/announcer/vox_fem/johnson.ogg b/sound/announcer/vox_fem/johnson.ogg
index 7a77bfecea69a..d6cc369a7483b 100644
Binary files a/sound/announcer/vox_fem/johnson.ogg and b/sound/announcer/vox_fem/johnson.ogg differ
diff --git a/sound/announcer/vox_fem/jolly.ogg b/sound/announcer/vox_fem/jolly.ogg
index 6989b7db318e2..bb3674fbfa9ab 100644
Binary files a/sound/announcer/vox_fem/jolly.ogg and b/sound/announcer/vox_fem/jolly.ogg differ
diff --git a/sound/announcer/vox_fem/juliet.ogg b/sound/announcer/vox_fem/juliet.ogg
index f5e25ca197434..caa1f25a0cba4 100644
Binary files a/sound/announcer/vox_fem/juliet.ogg and b/sound/announcer/vox_fem/juliet.ogg differ
diff --git a/sound/announcer/vox_fem/k.ogg b/sound/announcer/vox_fem/k.ogg
index da57e114df4ae..fb35a285f7272 100644
Binary files a/sound/announcer/vox_fem/k.ogg and b/sound/announcer/vox_fem/k.ogg differ
diff --git a/sound/announcer/vox_fem/kelvin.ogg b/sound/announcer/vox_fem/kelvin.ogg
index dd759e02214f6..93ab8ce23bd0e 100644
Binary files a/sound/announcer/vox_fem/kelvin.ogg and b/sound/announcer/vox_fem/kelvin.ogg differ
diff --git a/sound/announcer/vox_fem/key.ogg b/sound/announcer/vox_fem/key.ogg
index 65ab8c30e1af0..befe169a7fc83 100644
Binary files a/sound/announcer/vox_fem/key.ogg and b/sound/announcer/vox_fem/key.ogg differ
diff --git a/sound/announcer/vox_fem/kidnapped.ogg b/sound/announcer/vox_fem/kidnapped.ogg
index 68fb1f70b3bad..088fc6910b45e 100644
Binary files a/sound/announcer/vox_fem/kidnapped.ogg and b/sound/announcer/vox_fem/kidnapped.ogg differ
diff --git a/sound/announcer/vox_fem/kidnapping.ogg b/sound/announcer/vox_fem/kidnapping.ogg
index 15099206ae30d..9333ad9da2efe 100644
Binary files a/sound/announcer/vox_fem/kidnapping.ogg and b/sound/announcer/vox_fem/kidnapping.ogg differ
diff --git a/sound/announcer/vox_fem/kill.ogg b/sound/announcer/vox_fem/kill.ogg
index 330f5436ada5d..1494eeb4334be 100644
Binary files a/sound/announcer/vox_fem/kill.ogg and b/sound/announcer/vox_fem/kill.ogg differ
diff --git a/sound/announcer/vox_fem/killed.ogg b/sound/announcer/vox_fem/killed.ogg
index d7f6f3d0e9ca5..203cded949c40 100644
Binary files a/sound/announcer/vox_fem/killed.ogg and b/sound/announcer/vox_fem/killed.ogg differ
diff --git a/sound/announcer/vox_fem/killer.ogg b/sound/announcer/vox_fem/killer.ogg
index 2abe351ecf264..5cba171ab1241 100644
Binary files a/sound/announcer/vox_fem/killer.ogg and b/sound/announcer/vox_fem/killer.ogg differ
diff --git a/sound/announcer/vox_fem/kilo.ogg b/sound/announcer/vox_fem/kilo.ogg
index c328cf2078d11..4023c63a68d11 100644
Binary files a/sound/announcer/vox_fem/kilo.ogg and b/sound/announcer/vox_fem/kilo.ogg differ
diff --git a/sound/announcer/vox_fem/kit.ogg b/sound/announcer/vox_fem/kit.ogg
index 22ace9536794b..cffdc7a8dcdeb 100644
Binary files a/sound/announcer/vox_fem/kit.ogg and b/sound/announcer/vox_fem/kit.ogg differ
diff --git a/sound/announcer/vox_fem/kitchen.ogg b/sound/announcer/vox_fem/kitchen.ogg
index d1b54baf00342..c2daec63d3b1b 100644
Binary files a/sound/announcer/vox_fem/kitchen.ogg and b/sound/announcer/vox_fem/kitchen.ogg differ
diff --git a/sound/announcer/vox_fem/l.ogg b/sound/announcer/vox_fem/l.ogg
index a1be387ad24c9..8da3aa1688c04 100644
Binary files a/sound/announcer/vox_fem/l.ogg and b/sound/announcer/vox_fem/l.ogg differ
diff --git a/sound/announcer/vox_fem/lab.ogg b/sound/announcer/vox_fem/lab.ogg
index 6592f2bb19df1..6916bc75b61c2 100644
Binary files a/sound/announcer/vox_fem/lab.ogg and b/sound/announcer/vox_fem/lab.ogg differ
diff --git a/sound/announcer/vox_fem/lambda.ogg b/sound/announcer/vox_fem/lambda.ogg
index 14d5d9655b19a..c4e035674caf0 100644
Binary files a/sound/announcer/vox_fem/lambda.ogg and b/sound/announcer/vox_fem/lambda.ogg differ
diff --git a/sound/announcer/vox_fem/large.ogg b/sound/announcer/vox_fem/large.ogg
index 54892873434fa..3fdc12f8061c6 100644
Binary files a/sound/announcer/vox_fem/large.ogg and b/sound/announcer/vox_fem/large.ogg differ
diff --git a/sound/announcer/vox_fem/laser.ogg b/sound/announcer/vox_fem/laser.ogg
index 9912dafbe1db2..a7809e24111bc 100644
Binary files a/sound/announcer/vox_fem/laser.ogg and b/sound/announcer/vox_fem/laser.ogg differ
diff --git a/sound/announcer/vox_fem/last.ogg b/sound/announcer/vox_fem/last.ogg
index 2a00976beb88c..383d88237967c 100644
Binary files a/sound/announcer/vox_fem/last.ogg and b/sound/announcer/vox_fem/last.ogg differ
diff --git a/sound/announcer/vox_fem/launch.ogg b/sound/announcer/vox_fem/launch.ogg
index 151e60cd784cc..a1bd118ddb56a 100644
Binary files a/sound/announcer/vox_fem/launch.ogg and b/sound/announcer/vox_fem/launch.ogg differ
diff --git a/sound/announcer/vox_fem/lavaland.ogg b/sound/announcer/vox_fem/lavaland.ogg
index fd4196d3e2877..50628f28409ad 100644
Binary files a/sound/announcer/vox_fem/lavaland.ogg and b/sound/announcer/vox_fem/lavaland.ogg differ
diff --git a/sound/announcer/vox_fem/law.ogg b/sound/announcer/vox_fem/law.ogg
index 5d585b137af7d..38747ac2808b8 100644
Binary files a/sound/announcer/vox_fem/law.ogg and b/sound/announcer/vox_fem/law.ogg differ
diff --git a/sound/announcer/vox_fem/laws.ogg b/sound/announcer/vox_fem/laws.ogg
index 82e8efcd5492e..9c095bd94df02 100644
Binary files a/sound/announcer/vox_fem/laws.ogg and b/sound/announcer/vox_fem/laws.ogg differ
diff --git a/sound/announcer/vox_fem/lawyer.ogg b/sound/announcer/vox_fem/lawyer.ogg
index 344e94bf100b4..ea3f336278207 100644
Binary files a/sound/announcer/vox_fem/lawyer.ogg and b/sound/announcer/vox_fem/lawyer.ogg differ
diff --git a/sound/announcer/vox_fem/leak.ogg b/sound/announcer/vox_fem/leak.ogg
index 951fb62cc9e8f..a1d5f37072932 100644
Binary files a/sound/announcer/vox_fem/leak.ogg and b/sound/announcer/vox_fem/leak.ogg differ
diff --git a/sound/announcer/vox_fem/leave.ogg b/sound/announcer/vox_fem/leave.ogg
index b3c5de4d8643b..583931c480fe9 100644
Binary files a/sound/announcer/vox_fem/leave.ogg and b/sound/announcer/vox_fem/leave.ogg differ
diff --git a/sound/announcer/vox_fem/left.ogg b/sound/announcer/vox_fem/left.ogg
index 0a08b6d1de1a5..a7a17a9281a6a 100644
Binary files a/sound/announcer/vox_fem/left.ogg and b/sound/announcer/vox_fem/left.ogg differ
diff --git a/sound/announcer/vox_fem/legal.ogg b/sound/announcer/vox_fem/legal.ogg
index 624f0fba3f0df..f724c1e026f4d 100644
Binary files a/sound/announcer/vox_fem/legal.ogg and b/sound/announcer/vox_fem/legal.ogg differ
diff --git a/sound/announcer/vox_fem/level.ogg b/sound/announcer/vox_fem/level.ogg
index 49832c299e9b9..fe3a23614600d 100644
Binary files a/sound/announcer/vox_fem/level.ogg and b/sound/announcer/vox_fem/level.ogg differ
diff --git a/sound/announcer/vox_fem/lever.ogg b/sound/announcer/vox_fem/lever.ogg
index baebe1978f045..d6abeac8bd50c 100644
Binary files a/sound/announcer/vox_fem/lever.ogg and b/sound/announcer/vox_fem/lever.ogg differ
diff --git a/sound/announcer/vox_fem/library.ogg b/sound/announcer/vox_fem/library.ogg
index ad7496b11f560..5a8361dcfdb3b 100644
Binary files a/sound/announcer/vox_fem/library.ogg and b/sound/announcer/vox_fem/library.ogg differ
diff --git a/sound/announcer/vox_fem/lie.ogg b/sound/announcer/vox_fem/lie.ogg
index a3ff443f81dd8..c5e6e10a5a789 100644
Binary files a/sound/announcer/vox_fem/lie.ogg and b/sound/announcer/vox_fem/lie.ogg differ
diff --git a/sound/announcer/vox_fem/lieutenant.ogg b/sound/announcer/vox_fem/lieutenant.ogg
index 340e01bcb4243..7f13bc671caab 100644
Binary files a/sound/announcer/vox_fem/lieutenant.ogg and b/sound/announcer/vox_fem/lieutenant.ogg differ
diff --git a/sound/announcer/vox_fem/life.ogg b/sound/announcer/vox_fem/life.ogg
index 1ad4252d5081a..63dfc3557ceaa 100644
Binary files a/sound/announcer/vox_fem/life.ogg and b/sound/announcer/vox_fem/life.ogg differ
diff --git a/sound/announcer/vox_fem/lifeform.ogg b/sound/announcer/vox_fem/lifeform.ogg
index e142bf9abf5a5..0d4bd4109869d 100644
Binary files a/sound/announcer/vox_fem/lifeform.ogg and b/sound/announcer/vox_fem/lifeform.ogg differ
diff --git a/sound/announcer/vox_fem/light.ogg b/sound/announcer/vox_fem/light.ogg
index fa8df5da7f52f..e6939c835e4f9 100644
Binary files a/sound/announcer/vox_fem/light.ogg and b/sound/announcer/vox_fem/light.ogg differ
diff --git a/sound/announcer/vox_fem/lightbulb.ogg b/sound/announcer/vox_fem/lightbulb.ogg
index 9fbbe76fd5954..b799983ce1440 100644
Binary files a/sound/announcer/vox_fem/lightbulb.ogg and b/sound/announcer/vox_fem/lightbulb.ogg differ
diff --git a/sound/announcer/vox_fem/lima.ogg b/sound/announcer/vox_fem/lima.ogg
index 3efdd8e7f36c8..8c4799cc1d216 100644
Binary files a/sound/announcer/vox_fem/lima.ogg and b/sound/announcer/vox_fem/lima.ogg differ
diff --git a/sound/announcer/vox_fem/limit.ogg b/sound/announcer/vox_fem/limit.ogg
index d88bd43e01d91..4e965a4dcf705 100644
Binary files a/sound/announcer/vox_fem/limit.ogg and b/sound/announcer/vox_fem/limit.ogg differ
diff --git a/sound/announcer/vox_fem/limited.ogg b/sound/announcer/vox_fem/limited.ogg
index df3d3b3ebe4c1..bf9f689ae0c7b 100644
Binary files a/sound/announcer/vox_fem/limited.ogg and b/sound/announcer/vox_fem/limited.ogg differ
diff --git a/sound/announcer/vox_fem/liquid.ogg b/sound/announcer/vox_fem/liquid.ogg
index 4cc68591fb853..2fe3077664d17 100644
Binary files a/sound/announcer/vox_fem/liquid.ogg and b/sound/announcer/vox_fem/liquid.ogg differ
diff --git a/sound/announcer/vox_fem/list.ogg b/sound/announcer/vox_fem/list.ogg
index 1c3d643983307..3730304da42c8 100644
Binary files a/sound/announcer/vox_fem/list.ogg and b/sound/announcer/vox_fem/list.ogg differ
diff --git a/sound/announcer/vox_fem/live.ogg b/sound/announcer/vox_fem/live.ogg
index a4472110e6ae7..c66740048db7d 100644
Binary files a/sound/announcer/vox_fem/live.ogg and b/sound/announcer/vox_fem/live.ogg differ
diff --git a/sound/announcer/vox_fem/live2.ogg b/sound/announcer/vox_fem/live2.ogg
index 6f6ca716e9f9d..41ed4b1b0ac8d 100644
Binary files a/sound/announcer/vox_fem/live2.ogg and b/sound/announcer/vox_fem/live2.ogg differ
diff --git a/sound/announcer/vox_fem/lizard.ogg b/sound/announcer/vox_fem/lizard.ogg
index 8f14c52c324c1..409cabbf717ad 100644
Binary files a/sound/announcer/vox_fem/lizard.ogg and b/sound/announcer/vox_fem/lizard.ogg differ
diff --git a/sound/announcer/vox_fem/lizardperson.ogg b/sound/announcer/vox_fem/lizardperson.ogg
index c812f28b31a9b..512bd3b3c26f3 100644
Binary files a/sound/announcer/vox_fem/lizardperson.ogg and b/sound/announcer/vox_fem/lizardperson.ogg differ
diff --git a/sound/announcer/vox_fem/loading.ogg b/sound/announcer/vox_fem/loading.ogg
index ea91fccb1f745..a724a0c7a0394 100644
Binary files a/sound/announcer/vox_fem/loading.ogg and b/sound/announcer/vox_fem/loading.ogg differ
diff --git a/sound/announcer/vox_fem/locate.ogg b/sound/announcer/vox_fem/locate.ogg
index 99b998d2530b7..7f0818f19bafb 100644
Binary files a/sound/announcer/vox_fem/locate.ogg and b/sound/announcer/vox_fem/locate.ogg differ
diff --git a/sound/announcer/vox_fem/located.ogg b/sound/announcer/vox_fem/located.ogg
index 439f41904bae3..81ed5af773af4 100644
Binary files a/sound/announcer/vox_fem/located.ogg and b/sound/announcer/vox_fem/located.ogg differ
diff --git a/sound/announcer/vox_fem/location.ogg b/sound/announcer/vox_fem/location.ogg
index 2ba782b1915fd..932a1ca7e2801 100644
Binary files a/sound/announcer/vox_fem/location.ogg and b/sound/announcer/vox_fem/location.ogg differ
diff --git a/sound/announcer/vox_fem/lock.ogg b/sound/announcer/vox_fem/lock.ogg
index e5eb350d7017a..c20ebd3ce8475 100644
Binary files a/sound/announcer/vox_fem/lock.ogg and b/sound/announcer/vox_fem/lock.ogg differ
diff --git a/sound/announcer/vox_fem/locked.ogg b/sound/announcer/vox_fem/locked.ogg
index 796b43e466d21..668e13709ebc3 100644
Binary files a/sound/announcer/vox_fem/locked.ogg and b/sound/announcer/vox_fem/locked.ogg differ
diff --git a/sound/announcer/vox_fem/locker.ogg b/sound/announcer/vox_fem/locker.ogg
index f7fb6505221eb..8105235c4f278 100644
Binary files a/sound/announcer/vox_fem/locker.ogg and b/sound/announcer/vox_fem/locker.ogg differ
diff --git a/sound/announcer/vox_fem/lockout.ogg b/sound/announcer/vox_fem/lockout.ogg
index efbc376dada01..5e2267e88bba4 100644
Binary files a/sound/announcer/vox_fem/lockout.ogg and b/sound/announcer/vox_fem/lockout.ogg differ
diff --git a/sound/announcer/vox_fem/long.ogg b/sound/announcer/vox_fem/long.ogg
index 023ccb12ba86f..79be1cd9813a4 100644
Binary files a/sound/announcer/vox_fem/long.ogg and b/sound/announcer/vox_fem/long.ogg differ
diff --git a/sound/announcer/vox_fem/look.ogg b/sound/announcer/vox_fem/look.ogg
index e45323f2ceafe..bae68cd6a559a 100644
Binary files a/sound/announcer/vox_fem/look.ogg and b/sound/announcer/vox_fem/look.ogg differ
diff --git a/sound/announcer/vox_fem/loop.ogg b/sound/announcer/vox_fem/loop.ogg
index aba556ae3e83d..ff88e75a44e78 100644
Binary files a/sound/announcer/vox_fem/loop.ogg and b/sound/announcer/vox_fem/loop.ogg differ
diff --git a/sound/announcer/vox_fem/loose.ogg b/sound/announcer/vox_fem/loose.ogg
index 43afa09ba88f2..70eb3b7d15305 100644
Binary files a/sound/announcer/vox_fem/loose.ogg and b/sound/announcer/vox_fem/loose.ogg differ
diff --git a/sound/announcer/vox_fem/lot.ogg b/sound/announcer/vox_fem/lot.ogg
index 248ea20a898f6..36dc86b0cc803 100644
Binary files a/sound/announcer/vox_fem/lot.ogg and b/sound/announcer/vox_fem/lot.ogg differ
diff --git a/sound/announcer/vox_fem/lower.ogg b/sound/announcer/vox_fem/lower.ogg
index 658fe848734eb..5d9ead86f1e2f 100644
Binary files a/sound/announcer/vox_fem/lower.ogg and b/sound/announcer/vox_fem/lower.ogg differ
diff --git a/sound/announcer/vox_fem/lowest.ogg b/sound/announcer/vox_fem/lowest.ogg
index 3f20560fb962b..09a2b7e2383fa 100644
Binary files a/sound/announcer/vox_fem/lowest.ogg and b/sound/announcer/vox_fem/lowest.ogg differ
diff --git a/sound/announcer/vox_fem/lusty.ogg b/sound/announcer/vox_fem/lusty.ogg
index e7820d9a25b61..bcb4d36a5da34 100644
Binary files a/sound/announcer/vox_fem/lusty.ogg and b/sound/announcer/vox_fem/lusty.ogg differ
diff --git a/sound/announcer/vox_fem/m.ogg b/sound/announcer/vox_fem/m.ogg
index c7143b35a2e03..40d6ff77b0ead 100644
Binary files a/sound/announcer/vox_fem/m.ogg and b/sound/announcer/vox_fem/m.ogg differ
diff --git a/sound/announcer/vox_fem/machine.ogg b/sound/announcer/vox_fem/machine.ogg
index b40d1b4579efb..6d370db147dbb 100644
Binary files a/sound/announcer/vox_fem/machine.ogg and b/sound/announcer/vox_fem/machine.ogg differ
diff --git a/sound/announcer/vox_fem/made.ogg b/sound/announcer/vox_fem/made.ogg
index 3540661b5c1c9..a9dd8b28d320b 100644
Binary files a/sound/announcer/vox_fem/made.ogg and b/sound/announcer/vox_fem/made.ogg differ
diff --git a/sound/announcer/vox_fem/magic.ogg b/sound/announcer/vox_fem/magic.ogg
index 009ebeb660090..a55918df8cff0 100644
Binary files a/sound/announcer/vox_fem/magic.ogg and b/sound/announcer/vox_fem/magic.ogg differ
diff --git a/sound/announcer/vox_fem/magnetic.ogg b/sound/announcer/vox_fem/magnetic.ogg
index ef50cc422fec3..f309d85a7bab4 100644
Binary files a/sound/announcer/vox_fem/magnetic.ogg and b/sound/announcer/vox_fem/magnetic.ogg differ
diff --git a/sound/announcer/vox_fem/main.ogg b/sound/announcer/vox_fem/main.ogg
index 817192e69cd4c..ae32cb8c24e82 100644
Binary files a/sound/announcer/vox_fem/main.ogg and b/sound/announcer/vox_fem/main.ogg differ
diff --git a/sound/announcer/vox_fem/maintainer.ogg b/sound/announcer/vox_fem/maintainer.ogg
index 5a1438028fd03..f5e894cbb3da1 100644
Binary files a/sound/announcer/vox_fem/maintainer.ogg and b/sound/announcer/vox_fem/maintainer.ogg differ
diff --git a/sound/announcer/vox_fem/maintenance.ogg b/sound/announcer/vox_fem/maintenance.ogg
index 3159ff3a50b05..9654d39b09662 100644
Binary files a/sound/announcer/vox_fem/maintenance.ogg and b/sound/announcer/vox_fem/maintenance.ogg differ
diff --git a/sound/announcer/vox_fem/major.ogg b/sound/announcer/vox_fem/major.ogg
index f5de35ef31260..71dc408759783 100644
Binary files a/sound/announcer/vox_fem/major.ogg and b/sound/announcer/vox_fem/major.ogg differ
diff --git a/sound/announcer/vox_fem/making.ogg b/sound/announcer/vox_fem/making.ogg
index d2ee9ab93e3dd..3199f7d723748 100644
Binary files a/sound/announcer/vox_fem/making.ogg and b/sound/announcer/vox_fem/making.ogg differ
diff --git a/sound/announcer/vox_fem/malfunction.ogg b/sound/announcer/vox_fem/malfunction.ogg
index 90d9fc6ccc02b..67ddd8bb84e33 100644
Binary files a/sound/announcer/vox_fem/malfunction.ogg and b/sound/announcer/vox_fem/malfunction.ogg differ
diff --git a/sound/announcer/vox_fem/man.ogg b/sound/announcer/vox_fem/man.ogg
index 981630432ad3c..f3ac287fcfda7 100644
Binary files a/sound/announcer/vox_fem/man.ogg and b/sound/announcer/vox_fem/man.ogg differ
diff --git a/sound/announcer/vox_fem/many.ogg b/sound/announcer/vox_fem/many.ogg
index 33e82a15de0af..eb1d7884dc0d4 100644
Binary files a/sound/announcer/vox_fem/many.ogg and b/sound/announcer/vox_fem/many.ogg differ
diff --git a/sound/announcer/vox_fem/mass.ogg b/sound/announcer/vox_fem/mass.ogg
index 66718fcf84ae7..6760152b4a2c1 100644
Binary files a/sound/announcer/vox_fem/mass.ogg and b/sound/announcer/vox_fem/mass.ogg differ
diff --git a/sound/announcer/vox_fem/materials.ogg b/sound/announcer/vox_fem/materials.ogg
index a420e3aa78b4e..98037ac4ae847 100644
Binary files a/sound/announcer/vox_fem/materials.ogg and b/sound/announcer/vox_fem/materials.ogg differ
diff --git a/sound/announcer/vox_fem/maximum.ogg b/sound/announcer/vox_fem/maximum.ogg
index e9a2bc2ed6aef..ed173d6315861 100644
Binary files a/sound/announcer/vox_fem/maximum.ogg and b/sound/announcer/vox_fem/maximum.ogg differ
diff --git a/sound/announcer/vox_fem/may.ogg b/sound/announcer/vox_fem/may.ogg
index ef7a17dba48c1..fd8e214326943 100644
Binary files a/sound/announcer/vox_fem/may.ogg and b/sound/announcer/vox_fem/may.ogg differ
diff --git a/sound/announcer/vox_fem/me.ogg b/sound/announcer/vox_fem/me.ogg
index 39df2cd6f07bb..afd2da4ec72c8 100644
Binary files a/sound/announcer/vox_fem/me.ogg and b/sound/announcer/vox_fem/me.ogg differ
diff --git a/sound/announcer/vox_fem/mean.ogg b/sound/announcer/vox_fem/mean.ogg
index d53391b033fdb..6a7f56cee2883 100644
Binary files a/sound/announcer/vox_fem/mean.ogg and b/sound/announcer/vox_fem/mean.ogg differ
diff --git a/sound/announcer/vox_fem/means.ogg b/sound/announcer/vox_fem/means.ogg
index 068cb7bfd1a73..fdfa30b23dfba 100644
Binary files a/sound/announcer/vox_fem/means.ogg and b/sound/announcer/vox_fem/means.ogg differ
diff --git a/sound/announcer/vox_fem/meat.ogg b/sound/announcer/vox_fem/meat.ogg
index a022f1d6a078c..296abd747049e 100644
Binary files a/sound/announcer/vox_fem/meat.ogg and b/sound/announcer/vox_fem/meat.ogg differ
diff --git a/sound/announcer/vox_fem/medbay.ogg b/sound/announcer/vox_fem/medbay.ogg
index 3cbb471169978..ffab4f6b7f6b7 100644
Binary files a/sound/announcer/vox_fem/medbay.ogg and b/sound/announcer/vox_fem/medbay.ogg differ
diff --git a/sound/announcer/vox_fem/medical.ogg b/sound/announcer/vox_fem/medical.ogg
index d756042b8c466..5471c9e3f97c3 100644
Binary files a/sound/announcer/vox_fem/medical.ogg and b/sound/announcer/vox_fem/medical.ogg differ
diff --git a/sound/announcer/vox_fem/medium.ogg b/sound/announcer/vox_fem/medium.ogg
index 0bd964ffe35b9..155bff6705230 100644
Binary files a/sound/announcer/vox_fem/medium.ogg and b/sound/announcer/vox_fem/medium.ogg differ
diff --git a/sound/announcer/vox_fem/megafauna.ogg b/sound/announcer/vox_fem/megafauna.ogg
index 71b933de3dabf..4675766454433 100644
Binary files a/sound/announcer/vox_fem/megafauna.ogg and b/sound/announcer/vox_fem/megafauna.ogg differ
diff --git a/sound/announcer/vox_fem/men.ogg b/sound/announcer/vox_fem/men.ogg
index 8a99ebed9f48a..31f9466f3c68b 100644
Binary files a/sound/announcer/vox_fem/men.ogg and b/sound/announcer/vox_fem/men.ogg differ
diff --git a/sound/announcer/vox_fem/mercy.ogg b/sound/announcer/vox_fem/mercy.ogg
index 9bbe2ebd817ef..fa434e9e065ae 100644
Binary files a/sound/announcer/vox_fem/mercy.ogg and b/sound/announcer/vox_fem/mercy.ogg differ
diff --git a/sound/announcer/vox_fem/mesa.ogg b/sound/announcer/vox_fem/mesa.ogg
index 1406297857b98..f97349ef0b875 100644
Binary files a/sound/announcer/vox_fem/mesa.ogg and b/sound/announcer/vox_fem/mesa.ogg differ
diff --git a/sound/announcer/vox_fem/meson.ogg b/sound/announcer/vox_fem/meson.ogg
index 5bd85d3292003..4f468d2a85388 100644
Binary files a/sound/announcer/vox_fem/meson.ogg and b/sound/announcer/vox_fem/meson.ogg differ
diff --git a/sound/announcer/vox_fem/message.ogg b/sound/announcer/vox_fem/message.ogg
index 83d8b7c5bc8bd..2e949677ac2b7 100644
Binary files a/sound/announcer/vox_fem/message.ogg and b/sound/announcer/vox_fem/message.ogg differ
diff --git a/sound/announcer/vox_fem/meter.ogg b/sound/announcer/vox_fem/meter.ogg
index 0a32027b1fe96..456919676b222 100644
Binary files a/sound/announcer/vox_fem/meter.ogg and b/sound/announcer/vox_fem/meter.ogg differ
diff --git a/sound/announcer/vox_fem/method.ogg b/sound/announcer/vox_fem/method.ogg
index 4da8e60475f38..08e4bd892a01f 100644
Binary files a/sound/announcer/vox_fem/method.ogg and b/sound/announcer/vox_fem/method.ogg differ
diff --git a/sound/announcer/vox_fem/miasma.ogg b/sound/announcer/vox_fem/miasma.ogg
index 5956b203f87a1..8587365d37769 100644
Binary files a/sound/announcer/vox_fem/miasma.ogg and b/sound/announcer/vox_fem/miasma.ogg differ
diff --git a/sound/announcer/vox_fem/micro.ogg b/sound/announcer/vox_fem/micro.ogg
index 6aff060cb4a13..c4397f441a6bf 100644
Binary files a/sound/announcer/vox_fem/micro.ogg and b/sound/announcer/vox_fem/micro.ogg differ
diff --git a/sound/announcer/vox_fem/middle.ogg b/sound/announcer/vox_fem/middle.ogg
index 1343ecff46a24..93698fea5370c 100644
Binary files a/sound/announcer/vox_fem/middle.ogg and b/sound/announcer/vox_fem/middle.ogg differ
diff --git a/sound/announcer/vox_fem/mike.ogg b/sound/announcer/vox_fem/mike.ogg
index 663731e855355..4185bcaf7f996 100644
Binary files a/sound/announcer/vox_fem/mike.ogg and b/sound/announcer/vox_fem/mike.ogg differ
diff --git a/sound/announcer/vox_fem/miles.ogg b/sound/announcer/vox_fem/miles.ogg
index badfc77ee49c0..91b0659bed3e1 100644
Binary files a/sound/announcer/vox_fem/miles.ogg and b/sound/announcer/vox_fem/miles.ogg differ
diff --git a/sound/announcer/vox_fem/military.ogg b/sound/announcer/vox_fem/military.ogg
index 19726e27dd074..a78a9f93ccdee 100644
Binary files a/sound/announcer/vox_fem/military.ogg and b/sound/announcer/vox_fem/military.ogg differ
diff --git a/sound/announcer/vox_fem/milli.ogg b/sound/announcer/vox_fem/milli.ogg
index b26252f0823bc..8d1671acae77f 100644
Binary files a/sound/announcer/vox_fem/milli.ogg and b/sound/announcer/vox_fem/milli.ogg differ
diff --git a/sound/announcer/vox_fem/million.ogg b/sound/announcer/vox_fem/million.ogg
index f141a467d3e9d..af03d052980c2 100644
Binary files a/sound/announcer/vox_fem/million.ogg and b/sound/announcer/vox_fem/million.ogg differ
diff --git a/sound/announcer/vox_fem/mime.ogg b/sound/announcer/vox_fem/mime.ogg
index 4bc30a2942718..f2bac6133cc91 100644
Binary files a/sound/announcer/vox_fem/mime.ogg and b/sound/announcer/vox_fem/mime.ogg differ
diff --git a/sound/announcer/vox_fem/minefield.ogg b/sound/announcer/vox_fem/minefield.ogg
index 7b91ab833e6ea..5d9a8c3d48194 100644
Binary files a/sound/announcer/vox_fem/minefield.ogg and b/sound/announcer/vox_fem/minefield.ogg differ
diff --git a/sound/announcer/vox_fem/miner.ogg b/sound/announcer/vox_fem/miner.ogg
index d388d6ecad5b7..cdf3195b344ec 100644
Binary files a/sound/announcer/vox_fem/miner.ogg and b/sound/announcer/vox_fem/miner.ogg differ
diff --git a/sound/announcer/vox_fem/minimum.ogg b/sound/announcer/vox_fem/minimum.ogg
index f71d7a53ac839..aebb3e072d7d0 100644
Binary files a/sound/announcer/vox_fem/minimum.ogg and b/sound/announcer/vox_fem/minimum.ogg differ
diff --git a/sound/announcer/vox_fem/minor.ogg b/sound/announcer/vox_fem/minor.ogg
index 067f4a5d3df84..daffd52497bcd 100644
Binary files a/sound/announcer/vox_fem/minor.ogg and b/sound/announcer/vox_fem/minor.ogg differ
diff --git a/sound/announcer/vox_fem/minute.ogg b/sound/announcer/vox_fem/minute.ogg
index fe29d747120de..bb56f3f7b11a1 100644
Binary files a/sound/announcer/vox_fem/minute.ogg and b/sound/announcer/vox_fem/minute.ogg differ
diff --git a/sound/announcer/vox_fem/minutes.ogg b/sound/announcer/vox_fem/minutes.ogg
index 62f773f2471af..81ee73ca1a219 100644
Binary files a/sound/announcer/vox_fem/minutes.ogg and b/sound/announcer/vox_fem/minutes.ogg differ
diff --git a/sound/announcer/vox_fem/mister.ogg b/sound/announcer/vox_fem/mister.ogg
index 252b31645ffc0..551fba3fbc1af 100644
Binary files a/sound/announcer/vox_fem/mister.ogg and b/sound/announcer/vox_fem/mister.ogg differ
diff --git a/sound/announcer/vox_fem/mixture.ogg b/sound/announcer/vox_fem/mixture.ogg
index 63525110a7a70..9b232aa809a69 100644
Binary files a/sound/announcer/vox_fem/mixture.ogg and b/sound/announcer/vox_fem/mixture.ogg differ
diff --git a/sound/announcer/vox_fem/mode.ogg b/sound/announcer/vox_fem/mode.ogg
index 86651994da779..a3800199a429d 100644
Binary files a/sound/announcer/vox_fem/mode.ogg and b/sound/announcer/vox_fem/mode.ogg differ
diff --git a/sound/announcer/vox_fem/modification.ogg b/sound/announcer/vox_fem/modification.ogg
index d87fe090ca5da..2c1bc6ab503ee 100644
Binary files a/sound/announcer/vox_fem/modification.ogg and b/sound/announcer/vox_fem/modification.ogg differ
diff --git a/sound/announcer/vox_fem/money.ogg b/sound/announcer/vox_fem/money.ogg
index a4bdefb0bc7b8..533a8ce5541bd 100644
Binary files a/sound/announcer/vox_fem/money.ogg and b/sound/announcer/vox_fem/money.ogg differ
diff --git a/sound/announcer/vox_fem/monkey.ogg b/sound/announcer/vox_fem/monkey.ogg
index fc10ada116167..39c82c136b610 100644
Binary files a/sound/announcer/vox_fem/monkey.ogg and b/sound/announcer/vox_fem/monkey.ogg differ
diff --git a/sound/announcer/vox_fem/most.ogg b/sound/announcer/vox_fem/most.ogg
index 472837fced880..afaab6fc32bba 100644
Binary files a/sound/announcer/vox_fem/most.ogg and b/sound/announcer/vox_fem/most.ogg differ
diff --git a/sound/announcer/vox_fem/moth.ogg b/sound/announcer/vox_fem/moth.ogg
index a1fcfb1e90ada..d8de6af5f470c 100644
Binary files a/sound/announcer/vox_fem/moth.ogg and b/sound/announcer/vox_fem/moth.ogg differ
diff --git a/sound/announcer/vox_fem/mothperson.ogg b/sound/announcer/vox_fem/mothperson.ogg
index 52c0a645428de..12aac1eaed648 100644
Binary files a/sound/announcer/vox_fem/mothperson.ogg and b/sound/announcer/vox_fem/mothperson.ogg differ
diff --git a/sound/announcer/vox_fem/motor.ogg b/sound/announcer/vox_fem/motor.ogg
index d4ce7892b6522..6faddf8c104df 100644
Binary files a/sound/announcer/vox_fem/motor.ogg and b/sound/announcer/vox_fem/motor.ogg differ
diff --git a/sound/announcer/vox_fem/motorpool.ogg b/sound/announcer/vox_fem/motorpool.ogg
index cac2b6303bebb..70aa771254e83 100644
Binary files a/sound/announcer/vox_fem/motorpool.ogg and b/sound/announcer/vox_fem/motorpool.ogg differ
diff --git a/sound/announcer/vox_fem/move.ogg b/sound/announcer/vox_fem/move.ogg
index 367ae5f5ae4b4..23b275d198ab7 100644
Binary files a/sound/announcer/vox_fem/move.ogg and b/sound/announcer/vox_fem/move.ogg differ
diff --git a/sound/announcer/vox_fem/moved.ogg b/sound/announcer/vox_fem/moved.ogg
index e8eb17787ef4f..2eda2410969c1 100644
Binary files a/sound/announcer/vox_fem/moved.ogg and b/sound/announcer/vox_fem/moved.ogg differ
diff --git a/sound/announcer/vox_fem/moving.ogg b/sound/announcer/vox_fem/moving.ogg
index 258c38a711668..69a4b430d8f72 100644
Binary files a/sound/announcer/vox_fem/moving.ogg and b/sound/announcer/vox_fem/moving.ogg differ
diff --git a/sound/announcer/vox_fem/multitude.ogg b/sound/announcer/vox_fem/multitude.ogg
index c017a04428f61..4453b35a2914c 100644
Binary files a/sound/announcer/vox_fem/multitude.ogg and b/sound/announcer/vox_fem/multitude.ogg differ
diff --git a/sound/announcer/vox_fem/murder.ogg b/sound/announcer/vox_fem/murder.ogg
index 8f72bd27cc050..f0987fe184cbf 100644
Binary files a/sound/announcer/vox_fem/murder.ogg and b/sound/announcer/vox_fem/murder.ogg differ
diff --git a/sound/announcer/vox_fem/murderer.ogg b/sound/announcer/vox_fem/murderer.ogg
index 8dbab2157edf8..a6a2db727d9af 100644
Binary files a/sound/announcer/vox_fem/murderer.ogg and b/sound/announcer/vox_fem/murderer.ogg differ
diff --git a/sound/announcer/vox_fem/must.ogg b/sound/announcer/vox_fem/must.ogg
index 798a27a1759bb..818b7bb4344d8 100644
Binary files a/sound/announcer/vox_fem/must.ogg and b/sound/announcer/vox_fem/must.ogg differ
diff --git a/sound/announcer/vox_fem/my.ogg b/sound/announcer/vox_fem/my.ogg
index aed75cd1ff014..4ca0f498b2cc9 100644
Binary files a/sound/announcer/vox_fem/my.ogg and b/sound/announcer/vox_fem/my.ogg differ
diff --git a/sound/announcer/vox_fem/mythic.ogg b/sound/announcer/vox_fem/mythic.ogg
index 5f4eef1feda8a..8ba44a185c016 100644
Binary files a/sound/announcer/vox_fem/mythic.ogg and b/sound/announcer/vox_fem/mythic.ogg differ
diff --git a/sound/announcer/vox_fem/n.ogg b/sound/announcer/vox_fem/n.ogg
index e9732a92c3526..56609c0bfefd8 100644
Binary files a/sound/announcer/vox_fem/n.ogg and b/sound/announcer/vox_fem/n.ogg differ
diff --git a/sound/announcer/vox_fem/nanotrasen.ogg b/sound/announcer/vox_fem/nanotrasen.ogg
index 9210b5be843b6..4a3961cce255d 100644
Binary files a/sound/announcer/vox_fem/nanotrasen.ogg and b/sound/announcer/vox_fem/nanotrasen.ogg differ
diff --git a/sound/announcer/vox_fem/near.ogg b/sound/announcer/vox_fem/near.ogg
index 0c48f322133a8..8052da5b0d2e6 100644
Binary files a/sound/announcer/vox_fem/near.ogg and b/sound/announcer/vox_fem/near.ogg differ
diff --git a/sound/announcer/vox_fem/nearest.ogg b/sound/announcer/vox_fem/nearest.ogg
index fd03d3a6dcd64..a883ef66e421e 100644
Binary files a/sound/announcer/vox_fem/nearest.ogg and b/sound/announcer/vox_fem/nearest.ogg differ
diff --git a/sound/announcer/vox_fem/nearly.ogg b/sound/announcer/vox_fem/nearly.ogg
index 2b76f6323f834..a410b77bf95fe 100644
Binary files a/sound/announcer/vox_fem/nearly.ogg and b/sound/announcer/vox_fem/nearly.ogg differ
diff --git a/sound/announcer/vox_fem/need.ogg b/sound/announcer/vox_fem/need.ogg
index 428fc946588a8..6e8dec3d62939 100644
Binary files a/sound/announcer/vox_fem/need.ogg and b/sound/announcer/vox_fem/need.ogg differ
diff --git a/sound/announcer/vox_fem/never.ogg b/sound/announcer/vox_fem/never.ogg
index fc1135af2c892..ae290d16a595b 100644
Binary files a/sound/announcer/vox_fem/never.ogg and b/sound/announcer/vox_fem/never.ogg differ
diff --git a/sound/announcer/vox_fem/nice.ogg b/sound/announcer/vox_fem/nice.ogg
index 6db574a3e74cb..018cedce8a969 100644
Binary files a/sound/announcer/vox_fem/nice.ogg and b/sound/announcer/vox_fem/nice.ogg differ
diff --git a/sound/announcer/vox_fem/night.ogg b/sound/announcer/vox_fem/night.ogg
index e412daf5ed29a..c691ff0f4a2a3 100644
Binary files a/sound/announcer/vox_fem/night.ogg and b/sound/announcer/vox_fem/night.ogg differ
diff --git a/sound/announcer/vox_fem/nine.ogg b/sound/announcer/vox_fem/nine.ogg
index 86bc1811a0e6e..a3e38967bd692 100644
Binary files a/sound/announcer/vox_fem/nine.ogg and b/sound/announcer/vox_fem/nine.ogg differ
diff --git a/sound/announcer/vox_fem/nineteen.ogg b/sound/announcer/vox_fem/nineteen.ogg
index a35d66dc4bdc7..2cd74bc93e6e0 100644
Binary files a/sound/announcer/vox_fem/nineteen.ogg and b/sound/announcer/vox_fem/nineteen.ogg differ
diff --git a/sound/announcer/vox_fem/ninety.ogg b/sound/announcer/vox_fem/ninety.ogg
index d5f19581ce90c..dd6cbdb4d49a6 100644
Binary files a/sound/announcer/vox_fem/ninety.ogg and b/sound/announcer/vox_fem/ninety.ogg differ
diff --git a/sound/announcer/vox_fem/nitrogen.ogg b/sound/announcer/vox_fem/nitrogen.ogg
index 9cd5373449fb8..11cb30b1a1e2e 100644
Binary files a/sound/announcer/vox_fem/nitrogen.ogg and b/sound/announcer/vox_fem/nitrogen.ogg differ
diff --git a/sound/announcer/vox_fem/no.ogg b/sound/announcer/vox_fem/no.ogg
index cbbb77e74529b..eac0314eb1d50 100644
Binary files a/sound/announcer/vox_fem/no.ogg and b/sound/announcer/vox_fem/no.ogg differ
diff --git a/sound/announcer/vox_fem/nominal.ogg b/sound/announcer/vox_fem/nominal.ogg
index 5f6a491a8b473..df141a3c74396 100644
Binary files a/sound/announcer/vox_fem/nominal.ogg and b/sound/announcer/vox_fem/nominal.ogg differ
diff --git a/sound/announcer/vox_fem/none.ogg b/sound/announcer/vox_fem/none.ogg
index 6c16899ce9264..438590186ed87 100644
Binary files a/sound/announcer/vox_fem/none.ogg and b/sound/announcer/vox_fem/none.ogg differ
diff --git a/sound/announcer/vox_fem/normal.ogg b/sound/announcer/vox_fem/normal.ogg
index cf68ed5ec5e29..b395062767d1d 100644
Binary files a/sound/announcer/vox_fem/normal.ogg and b/sound/announcer/vox_fem/normal.ogg differ
diff --git a/sound/announcer/vox_fem/normally.ogg b/sound/announcer/vox_fem/normally.ogg
index 81d7c16d366d4..9db599ad97f19 100644
Binary files a/sound/announcer/vox_fem/normally.ogg and b/sound/announcer/vox_fem/normally.ogg differ
diff --git a/sound/announcer/vox_fem/north.ogg b/sound/announcer/vox_fem/north.ogg
index 3e942e32d4e02..c2aa286cfc044 100644
Binary files a/sound/announcer/vox_fem/north.ogg and b/sound/announcer/vox_fem/north.ogg differ
diff --git a/sound/announcer/vox_fem/northeast.ogg b/sound/announcer/vox_fem/northeast.ogg
index 4f4206c4e1859..48ceb5e5cbcd1 100644
Binary files a/sound/announcer/vox_fem/northeast.ogg and b/sound/announcer/vox_fem/northeast.ogg differ
diff --git a/sound/announcer/vox_fem/northwest.ogg b/sound/announcer/vox_fem/northwest.ogg
index 96110fc28147f..935d9e52fa504 100644
Binary files a/sound/announcer/vox_fem/northwest.ogg and b/sound/announcer/vox_fem/northwest.ogg differ
diff --git a/sound/announcer/vox_fem/not.ogg b/sound/announcer/vox_fem/not.ogg
index 3756ce70534a9..9824becd82a44 100644
Binary files a/sound/announcer/vox_fem/not.ogg and b/sound/announcer/vox_fem/not.ogg differ
diff --git a/sound/announcer/vox_fem/notably.ogg b/sound/announcer/vox_fem/notably.ogg
index d6f604390502f..2696d5736ac2a 100644
Binary files a/sound/announcer/vox_fem/notably.ogg and b/sound/announcer/vox_fem/notably.ogg differ
diff --git a/sound/announcer/vox_fem/november.ogg b/sound/announcer/vox_fem/november.ogg
index a3c0d621469bd..32472e076a258 100644
Binary files a/sound/announcer/vox_fem/november.ogg and b/sound/announcer/vox_fem/november.ogg differ
diff --git a/sound/announcer/vox_fem/now.ogg b/sound/announcer/vox_fem/now.ogg
index af4b24ea37848..6168c210783ef 100644
Binary files a/sound/announcer/vox_fem/now.ogg and b/sound/announcer/vox_fem/now.ogg differ
diff --git a/sound/announcer/vox_fem/nuclear.ogg b/sound/announcer/vox_fem/nuclear.ogg
index 8d10eba833d23..57eb4ba2df2f4 100644
Binary files a/sound/announcer/vox_fem/nuclear.ogg and b/sound/announcer/vox_fem/nuclear.ogg differ
diff --git a/sound/announcer/vox_fem/nuke.ogg b/sound/announcer/vox_fem/nuke.ogg
index 4098a13e90064..7741a51774857 100644
Binary files a/sound/announcer/vox_fem/nuke.ogg and b/sound/announcer/vox_fem/nuke.ogg differ
diff --git a/sound/announcer/vox_fem/number.ogg b/sound/announcer/vox_fem/number.ogg
index 153e098046982..881379f38372a 100644
Binary files a/sound/announcer/vox_fem/number.ogg and b/sound/announcer/vox_fem/number.ogg differ
diff --git a/sound/announcer/vox_fem/o.ogg b/sound/announcer/vox_fem/o.ogg
index ddebe0a10ec43..cc9b01ab53a7d 100644
Binary files a/sound/announcer/vox_fem/o.ogg and b/sound/announcer/vox_fem/o.ogg differ
diff --git a/sound/announcer/vox_fem/object.ogg b/sound/announcer/vox_fem/object.ogg
index 091c4b6b190e6..9188786faa654 100644
Binary files a/sound/announcer/vox_fem/object.ogg and b/sound/announcer/vox_fem/object.ogg differ
diff --git a/sound/announcer/vox_fem/objective.ogg b/sound/announcer/vox_fem/objective.ogg
index e7ce511f2896a..cebd8cd222bb0 100644
Binary files a/sound/announcer/vox_fem/objective.ogg and b/sound/announcer/vox_fem/objective.ogg differ
diff --git a/sound/announcer/vox_fem/obliterate.ogg b/sound/announcer/vox_fem/obliterate.ogg
index b13dcbc686d9a..8410440621755 100644
Binary files a/sound/announcer/vox_fem/obliterate.ogg and b/sound/announcer/vox_fem/obliterate.ogg differ
diff --git a/sound/announcer/vox_fem/obliterated.ogg b/sound/announcer/vox_fem/obliterated.ogg
index 884e4bcb97997..1b14604e7c194 100644
Binary files a/sound/announcer/vox_fem/obliterated.ogg and b/sound/announcer/vox_fem/obliterated.ogg differ
diff --git a/sound/announcer/vox_fem/obliterating.ogg b/sound/announcer/vox_fem/obliterating.ogg
index 034d3252cc3ba..d61f8c081b593 100644
Binary files a/sound/announcer/vox_fem/obliterating.ogg and b/sound/announcer/vox_fem/obliterating.ogg differ
diff --git a/sound/announcer/vox_fem/observation.ogg b/sound/announcer/vox_fem/observation.ogg
index d6e9967578ffb..2c213b0c70482 100644
Binary files a/sound/announcer/vox_fem/observation.ogg and b/sound/announcer/vox_fem/observation.ogg differ
diff --git a/sound/announcer/vox_fem/obtain.ogg b/sound/announcer/vox_fem/obtain.ogg
index 81d8186af88e2..1f75551bb69ab 100644
Binary files a/sound/announcer/vox_fem/obtain.ogg and b/sound/announcer/vox_fem/obtain.ogg differ
diff --git a/sound/announcer/vox_fem/of.ogg b/sound/announcer/vox_fem/of.ogg
index 6ac3bd3ad7ad2..6545bb8bd19fe 100644
Binary files a/sound/announcer/vox_fem/of.ogg and b/sound/announcer/vox_fem/of.ogg differ
diff --git a/sound/announcer/vox_fem/off.ogg b/sound/announcer/vox_fem/off.ogg
index c6215b810afe0..171961f4df47d 100644
Binary files a/sound/announcer/vox_fem/off.ogg and b/sound/announcer/vox_fem/off.ogg differ
diff --git a/sound/announcer/vox_fem/office.ogg b/sound/announcer/vox_fem/office.ogg
index cdde6cd1e33aa..e7d4c51bc85ce 100644
Binary files a/sound/announcer/vox_fem/office.ogg and b/sound/announcer/vox_fem/office.ogg differ
diff --git a/sound/announcer/vox_fem/officer.ogg b/sound/announcer/vox_fem/officer.ogg
index 9c4b7365b8ca8..de58b01d9a5b4 100644
Binary files a/sound/announcer/vox_fem/officer.ogg and b/sound/announcer/vox_fem/officer.ogg differ
diff --git a/sound/announcer/vox_fem/oh.ogg b/sound/announcer/vox_fem/oh.ogg
index f9072e9ff220c..5ef87a91dc23b 100644
Binary files a/sound/announcer/vox_fem/oh.ogg and b/sound/announcer/vox_fem/oh.ogg differ
diff --git a/sound/announcer/vox_fem/ok.ogg b/sound/announcer/vox_fem/ok.ogg
index d3d4ca9116b8b..cad6ee26fad4e 100644
Binary files a/sound/announcer/vox_fem/ok.ogg and b/sound/announcer/vox_fem/ok.ogg differ
diff --git a/sound/announcer/vox_fem/okay.ogg b/sound/announcer/vox_fem/okay.ogg
index 47d061fb060f9..31d76acc5ec47 100644
Binary files a/sound/announcer/vox_fem/okay.ogg and b/sound/announcer/vox_fem/okay.ogg differ
diff --git a/sound/announcer/vox_fem/on.ogg b/sound/announcer/vox_fem/on.ogg
index fb06bf2383496..39d5cc5029308 100644
Binary files a/sound/announcer/vox_fem/on.ogg and b/sound/announcer/vox_fem/on.ogg differ
diff --git a/sound/announcer/vox_fem/once.ogg b/sound/announcer/vox_fem/once.ogg
index d7e95b5f6bd4f..4dfde1e4bf209 100644
Binary files a/sound/announcer/vox_fem/once.ogg and b/sound/announcer/vox_fem/once.ogg differ
diff --git a/sound/announcer/vox_fem/one.ogg b/sound/announcer/vox_fem/one.ogg
index 0e6e48b9f3313..ac5085a35a23f 100644
Binary files a/sound/announcer/vox_fem/one.ogg and b/sound/announcer/vox_fem/one.ogg differ
diff --git a/sound/announcer/vox_fem/oof.ogg b/sound/announcer/vox_fem/oof.ogg
index 02455b91fe67b..13344a558030c 100644
Binary files a/sound/announcer/vox_fem/oof.ogg and b/sound/announcer/vox_fem/oof.ogg differ
diff --git a/sound/announcer/vox_fem/open.ogg b/sound/announcer/vox_fem/open.ogg
index 78fa9a56e09b7..666f0ffd9a210 100644
Binary files a/sound/announcer/vox_fem/open.ogg and b/sound/announcer/vox_fem/open.ogg differ
diff --git a/sound/announcer/vox_fem/opened.ogg b/sound/announcer/vox_fem/opened.ogg
index 6327c3991ae6d..89e56ab46cd5f 100644
Binary files a/sound/announcer/vox_fem/opened.ogg and b/sound/announcer/vox_fem/opened.ogg differ
diff --git a/sound/announcer/vox_fem/opening.ogg b/sound/announcer/vox_fem/opening.ogg
index d4371904cdefc..e85a9826d85e8 100644
Binary files a/sound/announcer/vox_fem/opening.ogg and b/sound/announcer/vox_fem/opening.ogg differ
diff --git a/sound/announcer/vox_fem/operating.ogg b/sound/announcer/vox_fem/operating.ogg
index 685d2b558bfd8..ee571ca7466b1 100644
Binary files a/sound/announcer/vox_fem/operating.ogg and b/sound/announcer/vox_fem/operating.ogg differ
diff --git a/sound/announcer/vox_fem/operations.ogg b/sound/announcer/vox_fem/operations.ogg
index 74b11c59c49c2..51cbdde86bb15 100644
Binary files a/sound/announcer/vox_fem/operations.ogg and b/sound/announcer/vox_fem/operations.ogg differ
diff --git a/sound/announcer/vox_fem/operative.ogg b/sound/announcer/vox_fem/operative.ogg
index f681b260048cc..be132a70cfa60 100644
Binary files a/sound/announcer/vox_fem/operative.ogg and b/sound/announcer/vox_fem/operative.ogg differ
diff --git a/sound/announcer/vox_fem/option.ogg b/sound/announcer/vox_fem/option.ogg
index dde1c8ee45861..e22f2c88c5d13 100644
Binary files a/sound/announcer/vox_fem/option.ogg and b/sound/announcer/vox_fem/option.ogg differ
diff --git a/sound/announcer/vox_fem/or.ogg b/sound/announcer/vox_fem/or.ogg
index ab4c192faafb7..3ac3682e5bac3 100644
Binary files a/sound/announcer/vox_fem/or.ogg and b/sound/announcer/vox_fem/or.ogg differ
diff --git a/sound/announcer/vox_fem/order.ogg b/sound/announcer/vox_fem/order.ogg
index d76f4fe29347d..0e6f53ad28c47 100644
Binary files a/sound/announcer/vox_fem/order.ogg and b/sound/announcer/vox_fem/order.ogg differ
diff --git a/sound/announcer/vox_fem/ordered.ogg b/sound/announcer/vox_fem/ordered.ogg
index a483e355544f8..6da2be5aa5c06 100644
Binary files a/sound/announcer/vox_fem/ordered.ogg and b/sound/announcer/vox_fem/ordered.ogg differ
diff --git a/sound/announcer/vox_fem/ordering.ogg b/sound/announcer/vox_fem/ordering.ogg
index e05a1534d3c5b..428c1368cbf24 100644
Binary files a/sound/announcer/vox_fem/ordering.ogg and b/sound/announcer/vox_fem/ordering.ogg differ
diff --git a/sound/announcer/vox_fem/organic.ogg b/sound/announcer/vox_fem/organic.ogg
index f11e917643c09..391146c50b6f3 100644
Binary files a/sound/announcer/vox_fem/organic.ogg and b/sound/announcer/vox_fem/organic.ogg differ
diff --git a/sound/announcer/vox_fem/oscar.ogg b/sound/announcer/vox_fem/oscar.ogg
index 50ae2404adcae..400ac11fd743e 100644
Binary files a/sound/announcer/vox_fem/oscar.ogg and b/sound/announcer/vox_fem/oscar.ogg differ
diff --git a/sound/announcer/vox_fem/out.ogg b/sound/announcer/vox_fem/out.ogg
index a46efe142fd01..ada6b83a245e5 100644
Binary files a/sound/announcer/vox_fem/out.ogg and b/sound/announcer/vox_fem/out.ogg differ
diff --git a/sound/announcer/vox_fem/output.ogg b/sound/announcer/vox_fem/output.ogg
index fc3e5312c4eaf..06f5c1cfc34f2 100644
Binary files a/sound/announcer/vox_fem/output.ogg and b/sound/announcer/vox_fem/output.ogg differ
diff --git a/sound/announcer/vox_fem/outside.ogg b/sound/announcer/vox_fem/outside.ogg
index 648aa00c7299e..e487c6e6803ce 100644
Binary files a/sound/announcer/vox_fem/outside.ogg and b/sound/announcer/vox_fem/outside.ogg differ
diff --git a/sound/announcer/vox_fem/over.ogg b/sound/announcer/vox_fem/over.ogg
index fc8c88926eeae..54792b49523fc 100644
Binary files a/sound/announcer/vox_fem/over.ogg and b/sound/announcer/vox_fem/over.ogg differ
diff --git a/sound/announcer/vox_fem/overload.ogg b/sound/announcer/vox_fem/overload.ogg
index 52807701ce6d3..b88826cd4a095 100644
Binary files a/sound/announcer/vox_fem/overload.ogg and b/sound/announcer/vox_fem/overload.ogg differ
diff --git a/sound/announcer/vox_fem/override.ogg b/sound/announcer/vox_fem/override.ogg
index 1060729fa7af6..3a961feb9629b 100644
Binary files a/sound/announcer/vox_fem/override.ogg and b/sound/announcer/vox_fem/override.ogg differ
diff --git a/sound/announcer/vox_fem/own.ogg b/sound/announcer/vox_fem/own.ogg
index e978ba4a8da1e..c250ea3143e0c 100644
Binary files a/sound/announcer/vox_fem/own.ogg and b/sound/announcer/vox_fem/own.ogg differ
diff --git a/sound/announcer/vox_fem/oxygen.ogg b/sound/announcer/vox_fem/oxygen.ogg
index d078491202204..110352a83d75b 100644
Binary files a/sound/announcer/vox_fem/oxygen.ogg and b/sound/announcer/vox_fem/oxygen.ogg differ
diff --git a/sound/announcer/vox_fem/p.ogg b/sound/announcer/vox_fem/p.ogg
index e6b0a26bc6c2b..7a1afa1592e4e 100644
Binary files a/sound/announcer/vox_fem/p.ogg and b/sound/announcer/vox_fem/p.ogg differ
diff --git a/sound/announcer/vox_fem/pacification.ogg b/sound/announcer/vox_fem/pacification.ogg
index 7ebe2105164b2..34aaa4031c6eb 100644
Binary files a/sound/announcer/vox_fem/pacification.ogg and b/sound/announcer/vox_fem/pacification.ogg differ
diff --git a/sound/announcer/vox_fem/pacify.ogg b/sound/announcer/vox_fem/pacify.ogg
index 396b4cf672fe5..33bec3f94409f 100644
Binary files a/sound/announcer/vox_fem/pacify.ogg and b/sound/announcer/vox_fem/pacify.ogg differ
diff --git a/sound/announcer/vox_fem/pain.ogg b/sound/announcer/vox_fem/pain.ogg
index b1bf8b6d7560f..8349cd7dd7348 100644
Binary files a/sound/announcer/vox_fem/pain.ogg and b/sound/announcer/vox_fem/pain.ogg differ
diff --git a/sound/announcer/vox_fem/pal.ogg b/sound/announcer/vox_fem/pal.ogg
index f36a05f8df25a..5dc86c0ae0425 100644
Binary files a/sound/announcer/vox_fem/pal.ogg and b/sound/announcer/vox_fem/pal.ogg differ
diff --git a/sound/announcer/vox_fem/panel.ogg b/sound/announcer/vox_fem/panel.ogg
index 3f108bb61ac99..b36e1fe592636 100644
Binary files a/sound/announcer/vox_fem/panel.ogg and b/sound/announcer/vox_fem/panel.ogg differ
diff --git a/sound/announcer/vox_fem/panting.ogg b/sound/announcer/vox_fem/panting.ogg
index 900d9d11b0cd7..1c0da453f84cc 100644
Binary files a/sound/announcer/vox_fem/panting.ogg and b/sound/announcer/vox_fem/panting.ogg differ
diff --git a/sound/announcer/vox_fem/pathetic.ogg b/sound/announcer/vox_fem/pathetic.ogg
index 6019ef98fdc83..a4729d1bda2f6 100644
Binary files a/sound/announcer/vox_fem/pathetic.ogg and b/sound/announcer/vox_fem/pathetic.ogg differ
diff --git a/sound/announcer/vox_fem/pda.ogg b/sound/announcer/vox_fem/pda.ogg
index 72407e2b0e324..b383e39a91865 100644
Binary files a/sound/announcer/vox_fem/pda.ogg and b/sound/announcer/vox_fem/pda.ogg differ
diff --git a/sound/announcer/vox_fem/percent.ogg b/sound/announcer/vox_fem/percent.ogg
index cf96077c625cf..10c36f0e0421e 100644
Binary files a/sound/announcer/vox_fem/percent.ogg and b/sound/announcer/vox_fem/percent.ogg differ
diff --git a/sound/announcer/vox_fem/perfect.ogg b/sound/announcer/vox_fem/perfect.ogg
index e61ab54fe17cc..bc7ce806d1727 100644
Binary files a/sound/announcer/vox_fem/perfect.ogg and b/sound/announcer/vox_fem/perfect.ogg differ
diff --git a/sound/announcer/vox_fem/perhaps.ogg b/sound/announcer/vox_fem/perhaps.ogg
index 191587d27a990..7f0856a17b0fc 100644
Binary files a/sound/announcer/vox_fem/perhaps.ogg and b/sound/announcer/vox_fem/perhaps.ogg differ
diff --git a/sound/announcer/vox_fem/perimeter.ogg b/sound/announcer/vox_fem/perimeter.ogg
index e83c6296f7d59..e3cf8ca9ef68a 100644
Binary files a/sound/announcer/vox_fem/perimeter.ogg and b/sound/announcer/vox_fem/perimeter.ogg differ
diff --git a/sound/announcer/vox_fem/permitted.ogg b/sound/announcer/vox_fem/permitted.ogg
index 57e4a0c586184..18ddd319bb612 100644
Binary files a/sound/announcer/vox_fem/permitted.ogg and b/sound/announcer/vox_fem/permitted.ogg differ
diff --git a/sound/announcer/vox_fem/personal.ogg b/sound/announcer/vox_fem/personal.ogg
index d60ca7b927b50..bed9f165b8bc8 100644
Binary files a/sound/announcer/vox_fem/personal.ogg and b/sound/announcer/vox_fem/personal.ogg differ
diff --git a/sound/announcer/vox_fem/personnel.ogg b/sound/announcer/vox_fem/personnel.ogg
index 3334451cf6f9a..4a4012838c374 100644
Binary files a/sound/announcer/vox_fem/personnel.ogg and b/sound/announcer/vox_fem/personnel.ogg differ
diff --git a/sound/announcer/vox_fem/pipe.ogg b/sound/announcer/vox_fem/pipe.ogg
index 39324ca9cf16a..8ea90af9c09b7 100644
Binary files a/sound/announcer/vox_fem/pipe.ogg and b/sound/announcer/vox_fem/pipe.ogg differ
diff --git a/sound/announcer/vox_fem/piping.ogg b/sound/announcer/vox_fem/piping.ogg
index ed5f54b5c2de4..b8a6278722309 100644
Binary files a/sound/announcer/vox_fem/piping.ogg and b/sound/announcer/vox_fem/piping.ogg differ
diff --git a/sound/announcer/vox_fem/piss.ogg b/sound/announcer/vox_fem/piss.ogg
index 7ec7aae9a4029..ba49656f23ae0 100644
Binary files a/sound/announcer/vox_fem/piss.ogg and b/sound/announcer/vox_fem/piss.ogg differ
diff --git a/sound/announcer/vox_fem/plant.ogg b/sound/announcer/vox_fem/plant.ogg
index 1e7316a325c5b..5612ca93dc8d4 100644
Binary files a/sound/announcer/vox_fem/plant.ogg and b/sound/announcer/vox_fem/plant.ogg differ
diff --git a/sound/announcer/vox_fem/plasma.ogg b/sound/announcer/vox_fem/plasma.ogg
index 39008f12370ea..6a5b2f7d7b92b 100644
Binary files a/sound/announcer/vox_fem/plasma.ogg and b/sound/announcer/vox_fem/plasma.ogg differ
diff --git a/sound/announcer/vox_fem/plasmaman.ogg b/sound/announcer/vox_fem/plasmaman.ogg
index 95a1289bfd938..de8f847f668fa 100644
Binary files a/sound/announcer/vox_fem/plasmaman.ogg and b/sound/announcer/vox_fem/plasmaman.ogg differ
diff --git a/sound/announcer/vox_fem/platform.ogg b/sound/announcer/vox_fem/platform.ogg
index d8cc5a4b9794f..c0a1830016357 100644
Binary files a/sound/announcer/vox_fem/platform.ogg and b/sound/announcer/vox_fem/platform.ogg differ
diff --git a/sound/announcer/vox_fem/plating.ogg b/sound/announcer/vox_fem/plating.ogg
index d0783ca5e351e..217bd04eac04d 100644
Binary files a/sound/announcer/vox_fem/plating.ogg and b/sound/announcer/vox_fem/plating.ogg differ
diff --git a/sound/announcer/vox_fem/plausible.ogg b/sound/announcer/vox_fem/plausible.ogg
index 339d83542bcdc..571e721958ecf 100644
Binary files a/sound/announcer/vox_fem/plausible.ogg and b/sound/announcer/vox_fem/plausible.ogg differ
diff --git a/sound/announcer/vox_fem/please.ogg b/sound/announcer/vox_fem/please.ogg
index f0fb0e9e51814..9f8b19316f0b5 100644
Binary files a/sound/announcer/vox_fem/please.ogg and b/sound/announcer/vox_fem/please.ogg differ
diff --git a/sound/announcer/vox_fem/pluoxium.ogg b/sound/announcer/vox_fem/pluoxium.ogg
index cb52c5ac29856..3999b573c2803 100644
Binary files a/sound/announcer/vox_fem/pluoxium.ogg and b/sound/announcer/vox_fem/pluoxium.ogg differ
diff --git a/sound/announcer/vox_fem/point.ogg b/sound/announcer/vox_fem/point.ogg
index e4970362f6003..89986c83797bb 100644
Binary files a/sound/announcer/vox_fem/point.ogg and b/sound/announcer/vox_fem/point.ogg differ
diff --git a/sound/announcer/vox_fem/port.ogg b/sound/announcer/vox_fem/port.ogg
index 9b645595d0ec4..928f73ffee3bd 100644
Binary files a/sound/announcer/vox_fem/port.ogg and b/sound/announcer/vox_fem/port.ogg differ
diff --git a/sound/announcer/vox_fem/portal.ogg b/sound/announcer/vox_fem/portal.ogg
index 744753f369b1d..f83ef712ce997 100644
Binary files a/sound/announcer/vox_fem/portal.ogg and b/sound/announcer/vox_fem/portal.ogg differ
diff --git a/sound/announcer/vox_fem/portion.ogg b/sound/announcer/vox_fem/portion.ogg
index 7f2f699da1900..07726340d9597 100644
Binary files a/sound/announcer/vox_fem/portion.ogg and b/sound/announcer/vox_fem/portion.ogg differ
diff --git a/sound/announcer/vox_fem/possible.ogg b/sound/announcer/vox_fem/possible.ogg
index 19449cdf563df..1bb40bbc91218 100644
Binary files a/sound/announcer/vox_fem/possible.ogg and b/sound/announcer/vox_fem/possible.ogg differ
diff --git a/sound/announcer/vox_fem/power.ogg b/sound/announcer/vox_fem/power.ogg
index c7a3f04d6c7c5..86cfff1cfb8d0 100644
Binary files a/sound/announcer/vox_fem/power.ogg and b/sound/announcer/vox_fem/power.ogg differ
diff --git a/sound/announcer/vox_fem/powered.ogg b/sound/announcer/vox_fem/powered.ogg
index d03eb08d5645e..f2002a8504eef 100644
Binary files a/sound/announcer/vox_fem/powered.ogg and b/sound/announcer/vox_fem/powered.ogg differ
diff --git a/sound/announcer/vox_fem/powering.ogg b/sound/announcer/vox_fem/powering.ogg
index 7c13b590846c2..cb9a499364bb8 100644
Binary files a/sound/announcer/vox_fem/powering.ogg and b/sound/announcer/vox_fem/powering.ogg differ
diff --git a/sound/announcer/vox_fem/premature.ogg b/sound/announcer/vox_fem/premature.ogg
index 19fb67b8f3b87..1f9d41a82f0a2 100644
Binary files a/sound/announcer/vox_fem/premature.ogg and b/sound/announcer/vox_fem/premature.ogg differ
diff --git a/sound/announcer/vox_fem/prematurely.ogg b/sound/announcer/vox_fem/prematurely.ogg
index b3422a535f6ae..b24bf0dae88ed 100644
Binary files a/sound/announcer/vox_fem/prematurely.ogg and b/sound/announcer/vox_fem/prematurely.ogg differ
diff --git a/sound/announcer/vox_fem/presence.ogg b/sound/announcer/vox_fem/presence.ogg
index 62ab4989de9a6..2ae528dbde97c 100644
Binary files a/sound/announcer/vox_fem/presence.ogg and b/sound/announcer/vox_fem/presence.ogg differ
diff --git a/sound/announcer/vox_fem/present.ogg b/sound/announcer/vox_fem/present.ogg
index 7e4bf2a650c7b..a42c382c18283 100644
Binary files a/sound/announcer/vox_fem/present.ogg and b/sound/announcer/vox_fem/present.ogg differ
diff --git a/sound/announcer/vox_fem/presents.ogg b/sound/announcer/vox_fem/presents.ogg
index 368c5b554f3da..acec5cab13462 100644
Binary files a/sound/announcer/vox_fem/presents.ogg and b/sound/announcer/vox_fem/presents.ogg differ
diff --git a/sound/announcer/vox_fem/press.ogg b/sound/announcer/vox_fem/press.ogg
index 681a2e80685f1..db661dd360f7e 100644
Binary files a/sound/announcer/vox_fem/press.ogg and b/sound/announcer/vox_fem/press.ogg differ
diff --git a/sound/announcer/vox_fem/pressure.ogg b/sound/announcer/vox_fem/pressure.ogg
index cab3b8c40a78d..190b4a838b653 100644
Binary files a/sound/announcer/vox_fem/pressure.ogg and b/sound/announcer/vox_fem/pressure.ogg differ
diff --git a/sound/announcer/vox_fem/primary.ogg b/sound/announcer/vox_fem/primary.ogg
index 92c7032016b7c..92855b8aefd45 100644
Binary files a/sound/announcer/vox_fem/primary.ogg and b/sound/announcer/vox_fem/primary.ogg differ
diff --git a/sound/announcer/vox_fem/priority.ogg b/sound/announcer/vox_fem/priority.ogg
index 5084584a44e12..6206bea124115 100644
Binary files a/sound/announcer/vox_fem/priority.ogg and b/sound/announcer/vox_fem/priority.ogg differ
diff --git a/sound/announcer/vox_fem/prison.ogg b/sound/announcer/vox_fem/prison.ogg
index 09522c8eb6d93..dfa2fe63681d2 100644
Binary files a/sound/announcer/vox_fem/prison.ogg and b/sound/announcer/vox_fem/prison.ogg differ
diff --git a/sound/announcer/vox_fem/prisoner.ogg b/sound/announcer/vox_fem/prisoner.ogg
index 7d034b73d7e4f..5232b7de42a0a 100644
Binary files a/sound/announcer/vox_fem/prisoner.ogg and b/sound/announcer/vox_fem/prisoner.ogg differ
diff --git a/sound/announcer/vox_fem/proceed.ogg b/sound/announcer/vox_fem/proceed.ogg
index 2ec29be05deb3..68b8d90a9a18f 100644
Binary files a/sound/announcer/vox_fem/proceed.ogg and b/sound/announcer/vox_fem/proceed.ogg differ
diff --git a/sound/announcer/vox_fem/processing.ogg b/sound/announcer/vox_fem/processing.ogg
index 188a4248aa034..2579b957afc2d 100644
Binary files a/sound/announcer/vox_fem/processing.ogg and b/sound/announcer/vox_fem/processing.ogg differ
diff --git a/sound/announcer/vox_fem/progress.ogg b/sound/announcer/vox_fem/progress.ogg
index 2a1b96ac35bc3..3a548554613f8 100644
Binary files a/sound/announcer/vox_fem/progress.ogg and b/sound/announcer/vox_fem/progress.ogg differ
diff --git a/sound/announcer/vox_fem/projectile.ogg b/sound/announcer/vox_fem/projectile.ogg
index ec6d297926ac9..3777bd0845d64 100644
Binary files a/sound/announcer/vox_fem/projectile.ogg and b/sound/announcer/vox_fem/projectile.ogg differ
diff --git a/sound/announcer/vox_fem/proper.ogg b/sound/announcer/vox_fem/proper.ogg
index 8f951cd67727c..dbcf1d5ee7f1e 100644
Binary files a/sound/announcer/vox_fem/proper.ogg and b/sound/announcer/vox_fem/proper.ogg differ
diff --git a/sound/announcer/vox_fem/propulsion.ogg b/sound/announcer/vox_fem/propulsion.ogg
index 2d7e61436953a..d6d7bbb8f5805 100644
Binary files a/sound/announcer/vox_fem/propulsion.ogg and b/sound/announcer/vox_fem/propulsion.ogg differ
diff --git a/sound/announcer/vox_fem/prosecute.ogg b/sound/announcer/vox_fem/prosecute.ogg
index 1d2a43b6a8d86..7a68370449e2f 100644
Binary files a/sound/announcer/vox_fem/prosecute.ogg and b/sound/announcer/vox_fem/prosecute.ogg differ
diff --git a/sound/announcer/vox_fem/protect.ogg b/sound/announcer/vox_fem/protect.ogg
index 512d7e30e27d1..11b6c61157a02 100644
Binary files a/sound/announcer/vox_fem/protect.ogg and b/sound/announcer/vox_fem/protect.ogg differ
diff --git a/sound/announcer/vox_fem/protected.ogg b/sound/announcer/vox_fem/protected.ogg
index 7f6c8c0f6efdc..f4f0f5628af37 100644
Binary files a/sound/announcer/vox_fem/protected.ogg and b/sound/announcer/vox_fem/protected.ogg differ
diff --git a/sound/announcer/vox_fem/protection.ogg b/sound/announcer/vox_fem/protection.ogg
index 90b6a508e2aa9..34dd6199eda82 100644
Binary files a/sound/announcer/vox_fem/protection.ogg and b/sound/announcer/vox_fem/protection.ogg differ
diff --git a/sound/announcer/vox_fem/protective.ogg b/sound/announcer/vox_fem/protective.ogg
index 127ad1078dc9e..864f1d5e3d0fe 100644
Binary files a/sound/announcer/vox_fem/protective.ogg and b/sound/announcer/vox_fem/protective.ogg differ
diff --git a/sound/announcer/vox_fem/proto-nitrate.ogg b/sound/announcer/vox_fem/proto-nitrate.ogg
index 13f3aed7b450e..36550b6fa9dd3 100644
Binary files a/sound/announcer/vox_fem/proto-nitrate.ogg and b/sound/announcer/vox_fem/proto-nitrate.ogg differ
diff --git a/sound/announcer/vox_fem/pull.ogg b/sound/announcer/vox_fem/pull.ogg
index 9ac8e2c399ad7..5eb2384070d92 100644
Binary files a/sound/announcer/vox_fem/pull.ogg and b/sound/announcer/vox_fem/pull.ogg differ
diff --git a/sound/announcer/vox_fem/pulled.ogg b/sound/announcer/vox_fem/pulled.ogg
index ef3388a25c9a7..d31f19552c2c3 100644
Binary files a/sound/announcer/vox_fem/pulled.ogg and b/sound/announcer/vox_fem/pulled.ogg differ
diff --git a/sound/announcer/vox_fem/pulling.ogg b/sound/announcer/vox_fem/pulling.ogg
index 5a2b5532e5acb..b878fc2ea68f8 100644
Binary files a/sound/announcer/vox_fem/pulling.ogg and b/sound/announcer/vox_fem/pulling.ogg differ
diff --git a/sound/announcer/vox_fem/pump.ogg b/sound/announcer/vox_fem/pump.ogg
index 07400cb2b8c26..c313e1769fb1a 100644
Binary files a/sound/announcer/vox_fem/pump.ogg and b/sound/announcer/vox_fem/pump.ogg differ
diff --git a/sound/announcer/vox_fem/pumps.ogg b/sound/announcer/vox_fem/pumps.ogg
index eba663d3963c4..35fbf7d708c9d 100644
Binary files a/sound/announcer/vox_fem/pumps.ogg and b/sound/announcer/vox_fem/pumps.ogg differ
diff --git a/sound/announcer/vox_fem/push.ogg b/sound/announcer/vox_fem/push.ogg
index 29a11eb368cbe..7931af9ddd06a 100644
Binary files a/sound/announcer/vox_fem/push.ogg and b/sound/announcer/vox_fem/push.ogg differ
diff --git a/sound/announcer/vox_fem/put.ogg b/sound/announcer/vox_fem/put.ogg
index ae4172b34fdfb..9ab965db8dcb3 100644
Binary files a/sound/announcer/vox_fem/put.ogg and b/sound/announcer/vox_fem/put.ogg differ
diff --git a/sound/announcer/vox_fem/q.ogg b/sound/announcer/vox_fem/q.ogg
index 312915feeefa0..1a65ae3050f7f 100644
Binary files a/sound/announcer/vox_fem/q.ogg and b/sound/announcer/vox_fem/q.ogg differ
diff --git a/sound/announcer/vox_fem/quantum.ogg b/sound/announcer/vox_fem/quantum.ogg
index e852399ceac0b..0b594075767ce 100644
Binary files a/sound/announcer/vox_fem/quantum.ogg and b/sound/announcer/vox_fem/quantum.ogg differ
diff --git a/sound/announcer/vox_fem/quarantine.ogg b/sound/announcer/vox_fem/quarantine.ogg
index b465c3c45504c..2ecd59a5c0e49 100644
Binary files a/sound/announcer/vox_fem/quarantine.ogg and b/sound/announcer/vox_fem/quarantine.ogg differ
diff --git a/sound/announcer/vox_fem/quartermaster.ogg b/sound/announcer/vox_fem/quartermaster.ogg
index 9059a07162144..c929b9376c291 100644
Binary files a/sound/announcer/vox_fem/quartermaster.ogg and b/sound/announcer/vox_fem/quartermaster.ogg differ
diff --git a/sound/announcer/vox_fem/quebec.ogg b/sound/announcer/vox_fem/quebec.ogg
index cfb41bd7a6eaf..2ef72f354e823 100644
Binary files a/sound/announcer/vox_fem/quebec.ogg and b/sound/announcer/vox_fem/quebec.ogg differ
diff --git a/sound/announcer/vox_fem/queen.ogg b/sound/announcer/vox_fem/queen.ogg
index b5dc2c2dc5ba0..6ec964776ddde 100644
Binary files a/sound/announcer/vox_fem/queen.ogg and b/sound/announcer/vox_fem/queen.ogg differ
diff --git a/sound/announcer/vox_fem/question.ogg b/sound/announcer/vox_fem/question.ogg
index b03bd961b7ca6..e68fcdbecb295 100644
Binary files a/sound/announcer/vox_fem/question.ogg and b/sound/announcer/vox_fem/question.ogg differ
diff --git a/sound/announcer/vox_fem/questionable.ogg b/sound/announcer/vox_fem/questionable.ogg
index 05ea4fc1e97e0..b4824289a251e 100644
Binary files a/sound/announcer/vox_fem/questionable.ogg and b/sound/announcer/vox_fem/questionable.ogg differ
diff --git a/sound/announcer/vox_fem/questioning.ogg b/sound/announcer/vox_fem/questioning.ogg
index 904fa083ce30c..f7234bfc42cee 100644
Binary files a/sound/announcer/vox_fem/questioning.ogg and b/sound/announcer/vox_fem/questioning.ogg differ
diff --git a/sound/announcer/vox_fem/quick.ogg b/sound/announcer/vox_fem/quick.ogg
index 1eb296fbbd4b7..7952268898755 100644
Binary files a/sound/announcer/vox_fem/quick.ogg and b/sound/announcer/vox_fem/quick.ogg differ
diff --git a/sound/announcer/vox_fem/quit.ogg b/sound/announcer/vox_fem/quit.ogg
index 625cdc0aba8c6..e78184454d55a 100644
Binary files a/sound/announcer/vox_fem/quit.ogg and b/sound/announcer/vox_fem/quit.ogg differ
diff --git a/sound/announcer/vox_fem/r.ogg b/sound/announcer/vox_fem/r.ogg
index 4b9e8b4cb556e..e71987536a071 100644
Binary files a/sound/announcer/vox_fem/r.ogg and b/sound/announcer/vox_fem/r.ogg differ
diff --git a/sound/announcer/vox_fem/radiation.ogg b/sound/announcer/vox_fem/radiation.ogg
index cab9e9b42993c..eb0975c2a8478 100644
Binary files a/sound/announcer/vox_fem/radiation.ogg and b/sound/announcer/vox_fem/radiation.ogg differ
diff --git a/sound/announcer/vox_fem/radioactive.ogg b/sound/announcer/vox_fem/radioactive.ogg
index 4ca8511d053c3..1a90149d385a0 100644
Binary files a/sound/announcer/vox_fem/radioactive.ogg and b/sound/announcer/vox_fem/radioactive.ogg differ
diff --git a/sound/announcer/vox_fem/rads.ogg b/sound/announcer/vox_fem/rads.ogg
index 3390c97229a0c..977ed939166b1 100644
Binary files a/sound/announcer/vox_fem/rads.ogg and b/sound/announcer/vox_fem/rads.ogg differ
diff --git a/sound/announcer/vox_fem/raider.ogg b/sound/announcer/vox_fem/raider.ogg
index b9fee4074d5ce..2cee2111c2e09 100644
Binary files a/sound/announcer/vox_fem/raider.ogg and b/sound/announcer/vox_fem/raider.ogg differ
diff --git a/sound/announcer/vox_fem/raiders.ogg b/sound/announcer/vox_fem/raiders.ogg
index 294555ebfc50c..75cfa88b6a119 100644
Binary files a/sound/announcer/vox_fem/raiders.ogg and b/sound/announcer/vox_fem/raiders.ogg differ
diff --git a/sound/announcer/vox_fem/rapid.ogg b/sound/announcer/vox_fem/rapid.ogg
index e31e40c1870b5..22d0360635ace 100644
Binary files a/sound/announcer/vox_fem/rapid.ogg and b/sound/announcer/vox_fem/rapid.ogg differ
diff --git a/sound/announcer/vox_fem/reach.ogg b/sound/announcer/vox_fem/reach.ogg
index fbff196cac01f..42fa8f585b37c 100644
Binary files a/sound/announcer/vox_fem/reach.ogg and b/sound/announcer/vox_fem/reach.ogg differ
diff --git a/sound/announcer/vox_fem/reached.ogg b/sound/announcer/vox_fem/reached.ogg
index 41be8956bb323..f137263ef76d7 100644
Binary files a/sound/announcer/vox_fem/reached.ogg and b/sound/announcer/vox_fem/reached.ogg differ
diff --git a/sound/announcer/vox_fem/reactor.ogg b/sound/announcer/vox_fem/reactor.ogg
index 68110fbb75f0b..cfc871e346fb8 100644
Binary files a/sound/announcer/vox_fem/reactor.ogg and b/sound/announcer/vox_fem/reactor.ogg differ
diff --git a/sound/announcer/vox_fem/red.ogg b/sound/announcer/vox_fem/red.ogg
index 8338c4b6f50b6..cb209023c5a04 100644
Binary files a/sound/announcer/vox_fem/red.ogg and b/sound/announcer/vox_fem/red.ogg differ
diff --git a/sound/announcer/vox_fem/relay.ogg b/sound/announcer/vox_fem/relay.ogg
index 34d440000c39f..3efc0c9438b1e 100644
Binary files a/sound/announcer/vox_fem/relay.ogg and b/sound/announcer/vox_fem/relay.ogg differ
diff --git a/sound/announcer/vox_fem/release.ogg b/sound/announcer/vox_fem/release.ogg
index 4a9350168483f..4480beb36fef0 100644
Binary files a/sound/announcer/vox_fem/release.ogg and b/sound/announcer/vox_fem/release.ogg differ
diff --git a/sound/announcer/vox_fem/released.ogg b/sound/announcer/vox_fem/released.ogg
index 70dff1f4a4c07..0ef08b496156f 100644
Binary files a/sound/announcer/vox_fem/released.ogg and b/sound/announcer/vox_fem/released.ogg differ
diff --git a/sound/announcer/vox_fem/releasing.ogg b/sound/announcer/vox_fem/releasing.ogg
index 3d2a5d0ed70bd..45d5d84429cdd 100644
Binary files a/sound/announcer/vox_fem/releasing.ogg and b/sound/announcer/vox_fem/releasing.ogg differ
diff --git a/sound/announcer/vox_fem/remaining.ogg b/sound/announcer/vox_fem/remaining.ogg
index 0d018750d7426..0437eb001d3da 100644
Binary files a/sound/announcer/vox_fem/remaining.ogg and b/sound/announcer/vox_fem/remaining.ogg differ
diff --git a/sound/announcer/vox_fem/removal.ogg b/sound/announcer/vox_fem/removal.ogg
index fb581b43c69cb..fcc299018c1d9 100644
Binary files a/sound/announcer/vox_fem/removal.ogg and b/sound/announcer/vox_fem/removal.ogg differ
diff --git a/sound/announcer/vox_fem/remove.ogg b/sound/announcer/vox_fem/remove.ogg
index e9b2cb3bc1204..06f52b0d99f35 100644
Binary files a/sound/announcer/vox_fem/remove.ogg and b/sound/announcer/vox_fem/remove.ogg differ
diff --git a/sound/announcer/vox_fem/removed.ogg b/sound/announcer/vox_fem/removed.ogg
index 2a7d78e9280b5..90eca02cc7dfe 100644
Binary files a/sound/announcer/vox_fem/removed.ogg and b/sound/announcer/vox_fem/removed.ogg differ
diff --git a/sound/announcer/vox_fem/removing.ogg b/sound/announcer/vox_fem/removing.ogg
index 638d20b0c354d..42ccdf22dbd1d 100644
Binary files a/sound/announcer/vox_fem/removing.ogg and b/sound/announcer/vox_fem/removing.ogg differ
diff --git a/sound/announcer/vox_fem/renegade.ogg b/sound/announcer/vox_fem/renegade.ogg
index cfae7f3b8e6c6..21d527ef7d46e 100644
Binary files a/sound/announcer/vox_fem/renegade.ogg and b/sound/announcer/vox_fem/renegade.ogg differ
diff --git a/sound/announcer/vox_fem/repair.ogg b/sound/announcer/vox_fem/repair.ogg
index 6829bee5ef3a3..aae8650e09d39 100644
Binary files a/sound/announcer/vox_fem/repair.ogg and b/sound/announcer/vox_fem/repair.ogg differ
diff --git a/sound/announcer/vox_fem/report.ogg b/sound/announcer/vox_fem/report.ogg
index 8cfe18bea23e5..afce11f4703bd 100644
Binary files a/sound/announcer/vox_fem/report.ogg and b/sound/announcer/vox_fem/report.ogg differ
diff --git a/sound/announcer/vox_fem/reports.ogg b/sound/announcer/vox_fem/reports.ogg
index 1f27a862a68e0..f26bee3ad63df 100644
Binary files a/sound/announcer/vox_fem/reports.ogg and b/sound/announcer/vox_fem/reports.ogg differ
diff --git a/sound/announcer/vox_fem/request.ogg b/sound/announcer/vox_fem/request.ogg
index 487b0f6772d67..36820f6c205b4 100644
Binary files a/sound/announcer/vox_fem/request.ogg and b/sound/announcer/vox_fem/request.ogg differ
diff --git a/sound/announcer/vox_fem/requested.ogg b/sound/announcer/vox_fem/requested.ogg
index d204bd91edcff..dbec4570ccec2 100644
Binary files a/sound/announcer/vox_fem/requested.ogg and b/sound/announcer/vox_fem/requested.ogg differ
diff --git a/sound/announcer/vox_fem/requesting.ogg b/sound/announcer/vox_fem/requesting.ogg
index bea1e652e4ba5..92ee4c65df248 100644
Binary files a/sound/announcer/vox_fem/requesting.ogg and b/sound/announcer/vox_fem/requesting.ogg differ
diff --git a/sound/announcer/vox_fem/require.ogg b/sound/announcer/vox_fem/require.ogg
index 0ada75c698701..8546958cbb9a3 100644
Binary files a/sound/announcer/vox_fem/require.ogg and b/sound/announcer/vox_fem/require.ogg differ
diff --git a/sound/announcer/vox_fem/required.ogg b/sound/announcer/vox_fem/required.ogg
index 554f2ab1203a3..9a894b9693647 100644
Binary files a/sound/announcer/vox_fem/required.ogg and b/sound/announcer/vox_fem/required.ogg differ
diff --git a/sound/announcer/vox_fem/research.ogg b/sound/announcer/vox_fem/research.ogg
index 77b4ae3d3edf3..3c6540d34467f 100644
Binary files a/sound/announcer/vox_fem/research.ogg and b/sound/announcer/vox_fem/research.ogg differ
diff --git a/sound/announcer/vox_fem/resevoir.ogg b/sound/announcer/vox_fem/resevoir.ogg
index b15a52ccb53ef..a9937e031ad71 100644
Binary files a/sound/announcer/vox_fem/resevoir.ogg and b/sound/announcer/vox_fem/resevoir.ogg differ
diff --git a/sound/announcer/vox_fem/resistance.ogg b/sound/announcer/vox_fem/resistance.ogg
index f64a043d89e04..1a4d0e7397422 100644
Binary files a/sound/announcer/vox_fem/resistance.ogg and b/sound/announcer/vox_fem/resistance.ogg differ
diff --git a/sound/announcer/vox_fem/resistant.ogg b/sound/announcer/vox_fem/resistant.ogg
index 4401519979172..cbd2f9ab6a6aa 100644
Binary files a/sound/announcer/vox_fem/resistant.ogg and b/sound/announcer/vox_fem/resistant.ogg differ
diff --git a/sound/announcer/vox_fem/resisting.ogg b/sound/announcer/vox_fem/resisting.ogg
index c3c23d267fd94..b2406e3450fbf 100644
Binary files a/sound/announcer/vox_fem/resisting.ogg and b/sound/announcer/vox_fem/resisting.ogg differ
diff --git a/sound/announcer/vox_fem/resonance.ogg b/sound/announcer/vox_fem/resonance.ogg
index 0d569574c8363..a4f57d6b6d9bb 100644
Binary files a/sound/announcer/vox_fem/resonance.ogg and b/sound/announcer/vox_fem/resonance.ogg differ
diff --git a/sound/announcer/vox_fem/rest.ogg b/sound/announcer/vox_fem/rest.ogg
index a1c0ac95de61c..cc488f68d4543 100644
Binary files a/sound/announcer/vox_fem/rest.ogg and b/sound/announcer/vox_fem/rest.ogg differ
diff --git a/sound/announcer/vox_fem/restoration.ogg b/sound/announcer/vox_fem/restoration.ogg
index b307653e5a066..4e7a0574c555d 100644
Binary files a/sound/announcer/vox_fem/restoration.ogg and b/sound/announcer/vox_fem/restoration.ogg differ
diff --git a/sound/announcer/vox_fem/revolution.ogg b/sound/announcer/vox_fem/revolution.ogg
index a72904df36503..74312c26056ff 100644
Binary files a/sound/announcer/vox_fem/revolution.ogg and b/sound/announcer/vox_fem/revolution.ogg differ
diff --git a/sound/announcer/vox_fem/revolutionary.ogg b/sound/announcer/vox_fem/revolutionary.ogg
index a893a64669a1b..cf9ea16ff4d28 100644
Binary files a/sound/announcer/vox_fem/revolutionary.ogg and b/sound/announcer/vox_fem/revolutionary.ogg differ
diff --git a/sound/announcer/vox_fem/right.ogg b/sound/announcer/vox_fem/right.ogg
index 09087c0a1fcad..c25b5c65b2f73 100644
Binary files a/sound/announcer/vox_fem/right.ogg and b/sound/announcer/vox_fem/right.ogg differ
diff --git a/sound/announcer/vox_fem/riot.ogg b/sound/announcer/vox_fem/riot.ogg
index b5beb3ec2fd60..700e304bad515 100644
Binary files a/sound/announcer/vox_fem/riot.ogg and b/sound/announcer/vox_fem/riot.ogg differ
diff --git a/sound/announcer/vox_fem/roboticist.ogg b/sound/announcer/vox_fem/roboticist.ogg
index c644557dc80b0..75d2294595a4d 100644
Binary files a/sound/announcer/vox_fem/roboticist.ogg and b/sound/announcer/vox_fem/roboticist.ogg differ
diff --git a/sound/announcer/vox_fem/rocket.ogg b/sound/announcer/vox_fem/rocket.ogg
index bc476fc6e0dcd..b6389d3807294 100644
Binary files a/sound/announcer/vox_fem/rocket.ogg and b/sound/announcer/vox_fem/rocket.ogg differ
diff --git a/sound/announcer/vox_fem/roger.ogg b/sound/announcer/vox_fem/roger.ogg
index 1665b78bbe5ae..0e438f10022ec 100644
Binary files a/sound/announcer/vox_fem/roger.ogg and b/sound/announcer/vox_fem/roger.ogg differ
diff --git a/sound/announcer/vox_fem/rogue.ogg b/sound/announcer/vox_fem/rogue.ogg
index 168fef8a1d85a..2826185b9f901 100644
Binary files a/sound/announcer/vox_fem/rogue.ogg and b/sound/announcer/vox_fem/rogue.ogg differ
diff --git a/sound/announcer/vox_fem/romeo.ogg b/sound/announcer/vox_fem/romeo.ogg
index 547e6823cbfe8..4d9c0735ad119 100644
Binary files a/sound/announcer/vox_fem/romeo.ogg and b/sound/announcer/vox_fem/romeo.ogg differ
diff --git a/sound/announcer/vox_fem/room.ogg b/sound/announcer/vox_fem/room.ogg
index a4c1ed95af019..5733478965abb 100644
Binary files a/sound/announcer/vox_fem/room.ogg and b/sound/announcer/vox_fem/room.ogg differ
diff --git a/sound/announcer/vox_fem/round.ogg b/sound/announcer/vox_fem/round.ogg
index 8e0a8e24d8685..ca52b48852fb7 100644
Binary files a/sound/announcer/vox_fem/round.ogg and b/sound/announcer/vox_fem/round.ogg differ
diff --git a/sound/announcer/vox_fem/run.ogg b/sound/announcer/vox_fem/run.ogg
index 799adfb8cbadf..e93bacd6c805d 100644
Binary files a/sound/announcer/vox_fem/run.ogg and b/sound/announcer/vox_fem/run.ogg differ
diff --git a/sound/announcer/vox_fem/rune.ogg b/sound/announcer/vox_fem/rune.ogg
index d29ccc801ad0b..a4ec39ea3932f 100644
Binary files a/sound/announcer/vox_fem/rune.ogg and b/sound/announcer/vox_fem/rune.ogg differ
diff --git a/sound/announcer/vox_fem/runtime.ogg b/sound/announcer/vox_fem/runtime.ogg
index 9776a7460d640..327c361431fb7 100644
Binary files a/sound/announcer/vox_fem/runtime.ogg and b/sound/announcer/vox_fem/runtime.ogg differ
diff --git a/sound/announcer/vox_fem/s.ogg b/sound/announcer/vox_fem/s.ogg
index 404fca01489aa..3b215aa1b8735 100644
Binary files a/sound/announcer/vox_fem/s.ogg and b/sound/announcer/vox_fem/s.ogg differ
diff --git a/sound/announcer/vox_fem/sabotage.ogg b/sound/announcer/vox_fem/sabotage.ogg
index 49d017564783f..02f5c07f144aa 100644
Binary files a/sound/announcer/vox_fem/sabotage.ogg and b/sound/announcer/vox_fem/sabotage.ogg differ
diff --git a/sound/announcer/vox_fem/sabotaged.ogg b/sound/announcer/vox_fem/sabotaged.ogg
index 9d883d12218c0..17688c3143e7f 100644
Binary files a/sound/announcer/vox_fem/sabotaged.ogg and b/sound/announcer/vox_fem/sabotaged.ogg differ
diff --git a/sound/announcer/vox_fem/sabotaging.ogg b/sound/announcer/vox_fem/sabotaging.ogg
index a8b5d6680c329..af338d2dba180 100644
Binary files a/sound/announcer/vox_fem/sabotaging.ogg and b/sound/announcer/vox_fem/sabotaging.ogg differ
diff --git a/sound/announcer/vox_fem/safe.ogg b/sound/announcer/vox_fem/safe.ogg
index ae4fc6b56a98c..a99ed77b9748f 100644
Binary files a/sound/announcer/vox_fem/safe.ogg and b/sound/announcer/vox_fem/safe.ogg differ
diff --git a/sound/announcer/vox_fem/safety.ogg b/sound/announcer/vox_fem/safety.ogg
index 79a824542b58b..117062e56aefd 100644
Binary files a/sound/announcer/vox_fem/safety.ogg and b/sound/announcer/vox_fem/safety.ogg differ
diff --git a/sound/announcer/vox_fem/sairhorn.ogg b/sound/announcer/vox_fem/sairhorn.ogg
index 1af456cbff813..864ea1ffcf99e 100644
Binary files a/sound/announcer/vox_fem/sairhorn.ogg and b/sound/announcer/vox_fem/sairhorn.ogg differ
diff --git a/sound/announcer/vox_fem/same.ogg b/sound/announcer/vox_fem/same.ogg
index 38adb22168bca..26c482f275847 100644
Binary files a/sound/announcer/vox_fem/same.ogg and b/sound/announcer/vox_fem/same.ogg differ
diff --git a/sound/announcer/vox_fem/sarah.ogg b/sound/announcer/vox_fem/sarah.ogg
index 689fafd050dcb..db38438319462 100644
Binary files a/sound/announcer/vox_fem/sarah.ogg and b/sound/announcer/vox_fem/sarah.ogg differ
diff --git a/sound/announcer/vox_fem/sargeant.ogg b/sound/announcer/vox_fem/sargeant.ogg
index 1c8bab79b2a96..60014019c87ce 100644
Binary files a/sound/announcer/vox_fem/sargeant.ogg and b/sound/announcer/vox_fem/sargeant.ogg differ
diff --git a/sound/announcer/vox_fem/satellite.ogg b/sound/announcer/vox_fem/satellite.ogg
index 427cadc8258c2..059688db48915 100644
Binary files a/sound/announcer/vox_fem/satellite.ogg and b/sound/announcer/vox_fem/satellite.ogg differ
diff --git a/sound/announcer/vox_fem/save.ogg b/sound/announcer/vox_fem/save.ogg
index 392e5e9c2e512..db4a6b1bd1035 100644
Binary files a/sound/announcer/vox_fem/save.ogg and b/sound/announcer/vox_fem/save.ogg differ
diff --git a/sound/announcer/vox_fem/saw.ogg b/sound/announcer/vox_fem/saw.ogg
index fa3c7b1994d11..61fae170435ef 100644
Binary files a/sound/announcer/vox_fem/saw.ogg and b/sound/announcer/vox_fem/saw.ogg differ
diff --git a/sound/announcer/vox_fem/scan.ogg b/sound/announcer/vox_fem/scan.ogg
index 36026e8f8c471..2f4eb201a0451 100644
Binary files a/sound/announcer/vox_fem/scan.ogg and b/sound/announcer/vox_fem/scan.ogg differ
diff --git a/sound/announcer/vox_fem/scanned.ogg b/sound/announcer/vox_fem/scanned.ogg
index bc9bb80ac4c9c..bdda27904e332 100644
Binary files a/sound/announcer/vox_fem/scanned.ogg and b/sound/announcer/vox_fem/scanned.ogg differ
diff --git a/sound/announcer/vox_fem/scanner.ogg b/sound/announcer/vox_fem/scanner.ogg
index 2098a81a34c8f..574196ab674d6 100644
Binary files a/sound/announcer/vox_fem/scanner.ogg and b/sound/announcer/vox_fem/scanner.ogg differ
diff --git a/sound/announcer/vox_fem/scanners.ogg b/sound/announcer/vox_fem/scanners.ogg
index 74bbdae300aa7..c9871673e8522 100644
Binary files a/sound/announcer/vox_fem/scanners.ogg and b/sound/announcer/vox_fem/scanners.ogg differ
diff --git a/sound/announcer/vox_fem/scanning.ogg b/sound/announcer/vox_fem/scanning.ogg
index 84701910e997f..059617e0bdb07 100644
Binary files a/sound/announcer/vox_fem/scanning.ogg and b/sound/announcer/vox_fem/scanning.ogg differ
diff --git a/sound/announcer/vox_fem/scensor.ogg b/sound/announcer/vox_fem/scensor.ogg
index f79af3fb5d712..6472a0fff02ab 100644
Binary files a/sound/announcer/vox_fem/scensor.ogg and b/sound/announcer/vox_fem/scensor.ogg differ
diff --git a/sound/announcer/vox_fem/science.ogg b/sound/announcer/vox_fem/science.ogg
index d092fab3aafdc..801c25c97aeda 100644
Binary files a/sound/announcer/vox_fem/science.ogg and b/sound/announcer/vox_fem/science.ogg differ
diff --git a/sound/announcer/vox_fem/scientist.ogg b/sound/announcer/vox_fem/scientist.ogg
index f59a5da98f1b1..ae8b39981defa 100644
Binary files a/sound/announcer/vox_fem/scientist.ogg and b/sound/announcer/vox_fem/scientist.ogg differ
diff --git a/sound/announcer/vox_fem/scream.ogg b/sound/announcer/vox_fem/scream.ogg
index 52616eaa8a8a4..a7e42f1b0c869 100644
Binary files a/sound/announcer/vox_fem/scream.ogg and b/sound/announcer/vox_fem/scream.ogg differ
diff --git a/sound/announcer/vox_fem/screen.ogg b/sound/announcer/vox_fem/screen.ogg
index ffe54256af979..993dafaf5ac5a 100644
Binary files a/sound/announcer/vox_fem/screen.ogg and b/sound/announcer/vox_fem/screen.ogg differ
diff --git a/sound/announcer/vox_fem/screw.ogg b/sound/announcer/vox_fem/screw.ogg
index ae9325f69a658..fc57634331f0a 100644
Binary files a/sound/announcer/vox_fem/screw.ogg and b/sound/announcer/vox_fem/screw.ogg differ
diff --git a/sound/announcer/vox_fem/search.ogg b/sound/announcer/vox_fem/search.ogg
index d19b53e1924df..76fa1c445f197 100644
Binary files a/sound/announcer/vox_fem/search.ogg and b/sound/announcer/vox_fem/search.ogg differ
diff --git a/sound/announcer/vox_fem/second.ogg b/sound/announcer/vox_fem/second.ogg
index 4e2988aa2b2fa..1296314802427 100644
Binary files a/sound/announcer/vox_fem/second.ogg and b/sound/announcer/vox_fem/second.ogg differ
diff --git a/sound/announcer/vox_fem/secondary.ogg b/sound/announcer/vox_fem/secondary.ogg
index 2a7f53a4dbe71..b729488718c2c 100644
Binary files a/sound/announcer/vox_fem/secondary.ogg and b/sound/announcer/vox_fem/secondary.ogg differ
diff --git a/sound/announcer/vox_fem/seconds.ogg b/sound/announcer/vox_fem/seconds.ogg
index 546a76de576fb..6f60ae43284e2 100644
Binary files a/sound/announcer/vox_fem/seconds.ogg and b/sound/announcer/vox_fem/seconds.ogg differ
diff --git a/sound/announcer/vox_fem/section.ogg b/sound/announcer/vox_fem/section.ogg
index b40b16949cf9a..526211d039d1c 100644
Binary files a/sound/announcer/vox_fem/section.ogg and b/sound/announcer/vox_fem/section.ogg differ
diff --git a/sound/announcer/vox_fem/sector.ogg b/sound/announcer/vox_fem/sector.ogg
index 0973b485cfbf3..216058aa932c8 100644
Binary files a/sound/announcer/vox_fem/sector.ogg and b/sound/announcer/vox_fem/sector.ogg differ
diff --git a/sound/announcer/vox_fem/secure.ogg b/sound/announcer/vox_fem/secure.ogg
index 88ff5f639cd19..aa408e1315baa 100644
Binary files a/sound/announcer/vox_fem/secure.ogg and b/sound/announcer/vox_fem/secure.ogg differ
diff --git a/sound/announcer/vox_fem/secured.ogg b/sound/announcer/vox_fem/secured.ogg
index f2bfcf17cb4a3..c5f653fdf5f8e 100644
Binary files a/sound/announcer/vox_fem/secured.ogg and b/sound/announcer/vox_fem/secured.ogg differ
diff --git a/sound/announcer/vox_fem/security.ogg b/sound/announcer/vox_fem/security.ogg
index 58ac63e69b43c..723da7957cae8 100644
Binary files a/sound/announcer/vox_fem/security.ogg and b/sound/announcer/vox_fem/security.ogg differ
diff --git a/sound/announcer/vox_fem/seen.ogg b/sound/announcer/vox_fem/seen.ogg
index 7ad89a173ab59..666405fd76561 100644
Binary files a/sound/announcer/vox_fem/seen.ogg and b/sound/announcer/vox_fem/seen.ogg differ
diff --git a/sound/announcer/vox_fem/select.ogg b/sound/announcer/vox_fem/select.ogg
index 0d9a2fed6d919..ba25b25ea0cad 100644
Binary files a/sound/announcer/vox_fem/select.ogg and b/sound/announcer/vox_fem/select.ogg differ
diff --git a/sound/announcer/vox_fem/selected.ogg b/sound/announcer/vox_fem/selected.ogg
index a1045477a8793..e4005b5945355 100644
Binary files a/sound/announcer/vox_fem/selected.ogg and b/sound/announcer/vox_fem/selected.ogg differ
diff --git a/sound/announcer/vox_fem/self.ogg b/sound/announcer/vox_fem/self.ogg
index ab1433ebf0751..730a2199e7d82 100644
Binary files a/sound/announcer/vox_fem/self.ogg and b/sound/announcer/vox_fem/self.ogg differ
diff --git a/sound/announcer/vox_fem/sensors.ogg b/sound/announcer/vox_fem/sensors.ogg
index 9bfa83f176a80..07034f410b764 100644
Binary files a/sound/announcer/vox_fem/sensors.ogg and b/sound/announcer/vox_fem/sensors.ogg differ
diff --git a/sound/announcer/vox_fem/server.ogg b/sound/announcer/vox_fem/server.ogg
index db5ef5e9ef6b1..5b4de37c81a18 100644
Binary files a/sound/announcer/vox_fem/server.ogg and b/sound/announcer/vox_fem/server.ogg differ
diff --git a/sound/announcer/vox_fem/service.ogg b/sound/announcer/vox_fem/service.ogg
index 4f78c06428a47..0aabc5e9a2899 100644
Binary files a/sound/announcer/vox_fem/service.ogg and b/sound/announcer/vox_fem/service.ogg differ
diff --git a/sound/announcer/vox_fem/set.ogg b/sound/announcer/vox_fem/set.ogg
index f2f8c19c27842..1fdd8c7b575e1 100644
Binary files a/sound/announcer/vox_fem/set.ogg and b/sound/announcer/vox_fem/set.ogg differ
diff --git a/sound/announcer/vox_fem/seven.ogg b/sound/announcer/vox_fem/seven.ogg
index 77f7b1b7d5e5d..796febfed76ed 100644
Binary files a/sound/announcer/vox_fem/seven.ogg and b/sound/announcer/vox_fem/seven.ogg differ
diff --git a/sound/announcer/vox_fem/seventeen.ogg b/sound/announcer/vox_fem/seventeen.ogg
index 863b8bf6e24a3..08d74afd6b6c9 100644
Binary files a/sound/announcer/vox_fem/seventeen.ogg and b/sound/announcer/vox_fem/seventeen.ogg differ
diff --git a/sound/announcer/vox_fem/seventy.ogg b/sound/announcer/vox_fem/seventy.ogg
index bad82c2fc2dc3..945b55110fffa 100644
Binary files a/sound/announcer/vox_fem/seventy.ogg and b/sound/announcer/vox_fem/seventy.ogg differ
diff --git a/sound/announcer/vox_fem/sever.ogg b/sound/announcer/vox_fem/sever.ogg
index 3bc2e2102f72e..f9e593bdfe4d0 100644
Binary files a/sound/announcer/vox_fem/sever.ogg and b/sound/announcer/vox_fem/sever.ogg differ
diff --git a/sound/announcer/vox_fem/severe.ogg b/sound/announcer/vox_fem/severe.ogg
index 070d36f5bc520..58e2618a6448e 100644
Binary files a/sound/announcer/vox_fem/severe.ogg and b/sound/announcer/vox_fem/severe.ogg differ
diff --git a/sound/announcer/vox_fem/severed.ogg b/sound/announcer/vox_fem/severed.ogg
index 4f6f7e47bf0a8..71536d14612e6 100644
Binary files a/sound/announcer/vox_fem/severed.ogg and b/sound/announcer/vox_fem/severed.ogg differ
diff --git a/sound/announcer/vox_fem/severing.ogg b/sound/announcer/vox_fem/severing.ogg
index 1ddad6209efb0..17b528c19c6f8 100644
Binary files a/sound/announcer/vox_fem/severing.ogg and b/sound/announcer/vox_fem/severing.ogg differ
diff --git a/sound/announcer/vox_fem/sewage.ogg b/sound/announcer/vox_fem/sewage.ogg
index f520a266b9004..7524cfe651b03 100644
Binary files a/sound/announcer/vox_fem/sewage.ogg and b/sound/announcer/vox_fem/sewage.ogg differ
diff --git a/sound/announcer/vox_fem/sewer.ogg b/sound/announcer/vox_fem/sewer.ogg
index a7a4814956a73..747c5de1a87e8 100644
Binary files a/sound/announcer/vox_fem/sewer.ogg and b/sound/announcer/vox_fem/sewer.ogg differ
diff --git a/sound/announcer/vox_fem/shaft.ogg b/sound/announcer/vox_fem/shaft.ogg
index b18870d84c71e..80e1d5e22cedd 100644
Binary files a/sound/announcer/vox_fem/shaft.ogg and b/sound/announcer/vox_fem/shaft.ogg differ
diff --git a/sound/announcer/vox_fem/shame.ogg b/sound/announcer/vox_fem/shame.ogg
index f90b1306da05f..378682c708853 100644
Binary files a/sound/announcer/vox_fem/shame.ogg and b/sound/announcer/vox_fem/shame.ogg differ
diff --git a/sound/announcer/vox_fem/shameful.ogg b/sound/announcer/vox_fem/shameful.ogg
index 526b70909f66b..0dbde15703e1a 100644
Binary files a/sound/announcer/vox_fem/shameful.ogg and b/sound/announcer/vox_fem/shameful.ogg differ
diff --git a/sound/announcer/vox_fem/shameless.ogg b/sound/announcer/vox_fem/shameless.ogg
index 804a92e29615f..bec0f10cd61a8 100644
Binary files a/sound/announcer/vox_fem/shameless.ogg and b/sound/announcer/vox_fem/shameless.ogg differ
diff --git a/sound/announcer/vox_fem/shard.ogg b/sound/announcer/vox_fem/shard.ogg
index 2a6b0c195804e..df7f13587a989 100644
Binary files a/sound/announcer/vox_fem/shard.ogg and b/sound/announcer/vox_fem/shard.ogg differ
diff --git a/sound/announcer/vox_fem/she.ogg b/sound/announcer/vox_fem/she.ogg
index dedf01c15dd6c..1256d8f6afd8d 100644
Binary files a/sound/announcer/vox_fem/she.ogg and b/sound/announcer/vox_fem/she.ogg differ
diff --git a/sound/announcer/vox_fem/shield.ogg b/sound/announcer/vox_fem/shield.ogg
index 47f1e1ec682c6..b380eb11d1d41 100644
Binary files a/sound/announcer/vox_fem/shield.ogg and b/sound/announcer/vox_fem/shield.ogg differ
diff --git a/sound/announcer/vox_fem/shift.ogg b/sound/announcer/vox_fem/shift.ogg
index 70e7d3ca6d17d..bd785b56585e1 100644
Binary files a/sound/announcer/vox_fem/shift.ogg and b/sound/announcer/vox_fem/shift.ogg differ
diff --git a/sound/announcer/vox_fem/shifts.ogg b/sound/announcer/vox_fem/shifts.ogg
index f2caa538efc61..65f0cd2f67334 100644
Binary files a/sound/announcer/vox_fem/shifts.ogg and b/sound/announcer/vox_fem/shifts.ogg differ
diff --git a/sound/announcer/vox_fem/shipment.ogg b/sound/announcer/vox_fem/shipment.ogg
index ec5b78f6155f8..70ea05d4d484e 100644
Binary files a/sound/announcer/vox_fem/shipment.ogg and b/sound/announcer/vox_fem/shipment.ogg differ
diff --git a/sound/announcer/vox_fem/shirt.ogg b/sound/announcer/vox_fem/shirt.ogg
index c746fc4ea59cb..fe0cc2438b920 100644
Binary files a/sound/announcer/vox_fem/shirt.ogg and b/sound/announcer/vox_fem/shirt.ogg differ
diff --git a/sound/announcer/vox_fem/shit.ogg b/sound/announcer/vox_fem/shit.ogg
index cb726c44b67dc..b91cac2dd3584 100644
Binary files a/sound/announcer/vox_fem/shit.ogg and b/sound/announcer/vox_fem/shit.ogg differ
diff --git a/sound/announcer/vox_fem/shitlord.ogg b/sound/announcer/vox_fem/shitlord.ogg
index 4093d18fa507d..747f227a0be1b 100644
Binary files a/sound/announcer/vox_fem/shitlord.ogg and b/sound/announcer/vox_fem/shitlord.ogg differ
diff --git a/sound/announcer/vox_fem/shits.ogg b/sound/announcer/vox_fem/shits.ogg
index b7d2586e5b4dc..cddde9d368283 100644
Binary files a/sound/announcer/vox_fem/shits.ogg and b/sound/announcer/vox_fem/shits.ogg differ
diff --git a/sound/announcer/vox_fem/shitting.ogg b/sound/announcer/vox_fem/shitting.ogg
index 7db29e5868c70..935545bf93386 100644
Binary files a/sound/announcer/vox_fem/shitting.ogg and b/sound/announcer/vox_fem/shitting.ogg differ
diff --git a/sound/announcer/vox_fem/shock.ogg b/sound/announcer/vox_fem/shock.ogg
index ae722b6b33768..af5b0f7a55b99 100644
Binary files a/sound/announcer/vox_fem/shock.ogg and b/sound/announcer/vox_fem/shock.ogg differ
diff --git a/sound/announcer/vox_fem/shonk.ogg b/sound/announcer/vox_fem/shonk.ogg
index 4e23c73df5887..0916378c0e87a 100644
Binary files a/sound/announcer/vox_fem/shonk.ogg and b/sound/announcer/vox_fem/shonk.ogg differ
diff --git a/sound/announcer/vox_fem/shoot.ogg b/sound/announcer/vox_fem/shoot.ogg
index b4d72c61dcbae..4678692089f36 100644
Binary files a/sound/announcer/vox_fem/shoot.ogg and b/sound/announcer/vox_fem/shoot.ogg differ
diff --git a/sound/announcer/vox_fem/shower.ogg b/sound/announcer/vox_fem/shower.ogg
index a10829d2f8b64..ffcf25ca9108a 100644
Binary files a/sound/announcer/vox_fem/shower.ogg and b/sound/announcer/vox_fem/shower.ogg differ
diff --git a/sound/announcer/vox_fem/shut.ogg b/sound/announcer/vox_fem/shut.ogg
index b0920b27f2e72..a8cbe9ca20056 100644
Binary files a/sound/announcer/vox_fem/shut.ogg and b/sound/announcer/vox_fem/shut.ogg differ
diff --git a/sound/announcer/vox_fem/shuttle.ogg b/sound/announcer/vox_fem/shuttle.ogg
index 903292aa2e08a..776bda12312ba 100644
Binary files a/sound/announcer/vox_fem/shuttle.ogg and b/sound/announcer/vox_fem/shuttle.ogg differ
diff --git a/sound/announcer/vox_fem/sick.ogg b/sound/announcer/vox_fem/sick.ogg
index 4bee521f75e9b..2442daaa7c49e 100644
Binary files a/sound/announcer/vox_fem/sick.ogg and b/sound/announcer/vox_fem/sick.ogg differ
diff --git a/sound/announcer/vox_fem/side.ogg b/sound/announcer/vox_fem/side.ogg
index d9bd817e940eb..f4a98382ef4ed 100644
Binary files a/sound/announcer/vox_fem/side.ogg and b/sound/announcer/vox_fem/side.ogg differ
diff --git a/sound/announcer/vox_fem/sides.ogg b/sound/announcer/vox_fem/sides.ogg
index cef8d153207bf..a7c9e3a35f513 100644
Binary files a/sound/announcer/vox_fem/sides.ogg and b/sound/announcer/vox_fem/sides.ogg differ
diff --git a/sound/announcer/vox_fem/sierra.ogg b/sound/announcer/vox_fem/sierra.ogg
index 2379c6866b4a6..1a348a1ba65ad 100644
Binary files a/sound/announcer/vox_fem/sierra.ogg and b/sound/announcer/vox_fem/sierra.ogg differ
diff --git a/sound/announcer/vox_fem/sight.ogg b/sound/announcer/vox_fem/sight.ogg
index c2224392a7eec..f838c5af46870 100644
Binary files a/sound/announcer/vox_fem/sight.ogg and b/sound/announcer/vox_fem/sight.ogg differ
diff --git a/sound/announcer/vox_fem/silicon.ogg b/sound/announcer/vox_fem/silicon.ogg
index bb2a45bb356bf..403c353fc39fb 100644
Binary files a/sound/announcer/vox_fem/silicon.ogg and b/sound/announcer/vox_fem/silicon.ogg differ
diff --git a/sound/announcer/vox_fem/silo.ogg b/sound/announcer/vox_fem/silo.ogg
index 81db10ca5f09f..1c622c6d010a0 100644
Binary files a/sound/announcer/vox_fem/silo.ogg and b/sound/announcer/vox_fem/silo.ogg differ
diff --git a/sound/announcer/vox_fem/single.ogg b/sound/announcer/vox_fem/single.ogg
index 1d5912ecc57ed..a09cbbcfa3859 100644
Binary files a/sound/announcer/vox_fem/single.ogg and b/sound/announcer/vox_fem/single.ogg differ
diff --git a/sound/announcer/vox_fem/singularity.ogg b/sound/announcer/vox_fem/singularity.ogg
index 09cb93e07761a..ed08e1f7b199c 100644
Binary files a/sound/announcer/vox_fem/singularity.ogg and b/sound/announcer/vox_fem/singularity.ogg differ
diff --git a/sound/announcer/vox_fem/siphon.ogg b/sound/announcer/vox_fem/siphon.ogg
index 789653f5cbb67..5062b1eace2ca 100644
Binary files a/sound/announcer/vox_fem/siphon.ogg and b/sound/announcer/vox_fem/siphon.ogg differ
diff --git a/sound/announcer/vox_fem/siphoning.ogg b/sound/announcer/vox_fem/siphoning.ogg
index 163f2ed4734b8..bed33cc4ae290 100644
Binary files a/sound/announcer/vox_fem/siphoning.ogg and b/sound/announcer/vox_fem/siphoning.ogg differ
diff --git a/sound/announcer/vox_fem/six.ogg b/sound/announcer/vox_fem/six.ogg
index 3ecce0bcb1208..5d5cd228f5e85 100644
Binary files a/sound/announcer/vox_fem/six.ogg and b/sound/announcer/vox_fem/six.ogg differ
diff --git a/sound/announcer/vox_fem/sixteen.ogg b/sound/announcer/vox_fem/sixteen.ogg
index 4edb7e6231e19..10b7a2abd641f 100644
Binary files a/sound/announcer/vox_fem/sixteen.ogg and b/sound/announcer/vox_fem/sixteen.ogg differ
diff --git a/sound/announcer/vox_fem/sixty.ogg b/sound/announcer/vox_fem/sixty.ogg
index a6a2f1f34bd65..788b150d9e77d 100644
Binary files a/sound/announcer/vox_fem/sixty.ogg and b/sound/announcer/vox_fem/sixty.ogg differ
diff --git a/sound/announcer/vox_fem/skeleton.ogg b/sound/announcer/vox_fem/skeleton.ogg
index f6d1b8504092d..56332a7d6f6bd 100644
Binary files a/sound/announcer/vox_fem/skeleton.ogg and b/sound/announcer/vox_fem/skeleton.ogg differ
diff --git a/sound/announcer/vox_fem/slaughter.ogg b/sound/announcer/vox_fem/slaughter.ogg
index 0bde97fcff3ff..4ebd8107c25e0 100644
Binary files a/sound/announcer/vox_fem/slaughter.ogg and b/sound/announcer/vox_fem/slaughter.ogg differ
diff --git a/sound/announcer/vox_fem/slime.ogg b/sound/announcer/vox_fem/slime.ogg
index 9f02e58e4362f..468cab0a6d936 100644
Binary files a/sound/announcer/vox_fem/slime.ogg and b/sound/announcer/vox_fem/slime.ogg differ
diff --git a/sound/announcer/vox_fem/slip.ogg b/sound/announcer/vox_fem/slip.ogg
index bc6a3f8930416..e47b364d6c0f6 100644
Binary files a/sound/announcer/vox_fem/slip.ogg and b/sound/announcer/vox_fem/slip.ogg differ
diff --git a/sound/announcer/vox_fem/slippery.ogg b/sound/announcer/vox_fem/slippery.ogg
index 72d7052003dca..19de8675a4c13 100644
Binary files a/sound/announcer/vox_fem/slippery.ogg and b/sound/announcer/vox_fem/slippery.ogg differ
diff --git a/sound/announcer/vox_fem/slow.ogg b/sound/announcer/vox_fem/slow.ogg
index b2087a3fc5c00..5fb4e45c0c9e1 100644
Binary files a/sound/announcer/vox_fem/slow.ogg and b/sound/announcer/vox_fem/slow.ogg differ
diff --git a/sound/announcer/vox_fem/sm.ogg b/sound/announcer/vox_fem/sm.ogg
index 7e4d6f51f1a58..0c25582aa7d3c 100644
Binary files a/sound/announcer/vox_fem/sm.ogg and b/sound/announcer/vox_fem/sm.ogg differ
diff --git a/sound/announcer/vox_fem/small.ogg b/sound/announcer/vox_fem/small.ogg
index 8a104996b8ec0..a1108f3246fa6 100644
Binary files a/sound/announcer/vox_fem/small.ogg and b/sound/announcer/vox_fem/small.ogg differ
diff --git a/sound/announcer/vox_fem/sockmuncher.ogg b/sound/announcer/vox_fem/sockmuncher.ogg
index 7c40fdc79e7b6..edb307af8b5ca 100644
Binary files a/sound/announcer/vox_fem/sockmuncher.ogg and b/sound/announcer/vox_fem/sockmuncher.ogg differ
diff --git a/sound/announcer/vox_fem/soft.ogg b/sound/announcer/vox_fem/soft.ogg
index ea9361ea8c980..d63b386728af0 100644
Binary files a/sound/announcer/vox_fem/soft.ogg and b/sound/announcer/vox_fem/soft.ogg differ
diff --git a/sound/announcer/vox_fem/solar.ogg b/sound/announcer/vox_fem/solar.ogg
index 98668c7be35eb..e9110032ef293 100644
Binary files a/sound/announcer/vox_fem/solar.ogg and b/sound/announcer/vox_fem/solar.ogg differ
diff --git a/sound/announcer/vox_fem/solars.ogg b/sound/announcer/vox_fem/solars.ogg
index d13080877c820..4643b7893772f 100644
Binary files a/sound/announcer/vox_fem/solars.ogg and b/sound/announcer/vox_fem/solars.ogg differ
diff --git a/sound/announcer/vox_fem/soldier.ogg b/sound/announcer/vox_fem/soldier.ogg
index 0e4fa1aed8951..43279ce963317 100644
Binary files a/sound/announcer/vox_fem/soldier.ogg and b/sound/announcer/vox_fem/soldier.ogg differ
diff --git a/sound/announcer/vox_fem/some.ogg b/sound/announcer/vox_fem/some.ogg
index a415dd82435d1..ad1274b8b3bec 100644
Binary files a/sound/announcer/vox_fem/some.ogg and b/sound/announcer/vox_fem/some.ogg differ
diff --git a/sound/announcer/vox_fem/someone.ogg b/sound/announcer/vox_fem/someone.ogg
index 875b1e0335804..4f711ab481aca 100644
Binary files a/sound/announcer/vox_fem/someone.ogg and b/sound/announcer/vox_fem/someone.ogg differ
diff --git a/sound/announcer/vox_fem/something.ogg b/sound/announcer/vox_fem/something.ogg
index 85c587ded4ad3..4321592b19224 100644
Binary files a/sound/announcer/vox_fem/something.ogg and b/sound/announcer/vox_fem/something.ogg differ
diff --git a/sound/announcer/vox_fem/son.ogg b/sound/announcer/vox_fem/son.ogg
index 9b91846f76fc9..f047b917b9f4b 100644
Binary files a/sound/announcer/vox_fem/son.ogg and b/sound/announcer/vox_fem/son.ogg differ
diff --git a/sound/announcer/vox_fem/sorry.ogg b/sound/announcer/vox_fem/sorry.ogg
index 400c13f1b22a0..af53761a6fafe 100644
Binary files a/sound/announcer/vox_fem/sorry.ogg and b/sound/announcer/vox_fem/sorry.ogg differ
diff --git a/sound/announcer/vox_fem/source.ogg b/sound/announcer/vox_fem/source.ogg
index 824dd3f0a8c1c..9a4b2902f8712 100644
Binary files a/sound/announcer/vox_fem/source.ogg and b/sound/announcer/vox_fem/source.ogg differ
diff --git a/sound/announcer/vox_fem/south.ogg b/sound/announcer/vox_fem/south.ogg
index ff512465960d8..61a709b576ca4 100644
Binary files a/sound/announcer/vox_fem/south.ogg and b/sound/announcer/vox_fem/south.ogg differ
diff --git a/sound/announcer/vox_fem/southeast.ogg b/sound/announcer/vox_fem/southeast.ogg
index bdf2c8026bfaa..a13fc7d1c0f8d 100644
Binary files a/sound/announcer/vox_fem/southeast.ogg and b/sound/announcer/vox_fem/southeast.ogg differ
diff --git a/sound/announcer/vox_fem/southwest.ogg b/sound/announcer/vox_fem/southwest.ogg
index a1ea2766bb500..e229ca52c2f26 100644
Binary files a/sound/announcer/vox_fem/southwest.ogg and b/sound/announcer/vox_fem/southwest.ogg differ
diff --git a/sound/announcer/vox_fem/space.ogg b/sound/announcer/vox_fem/space.ogg
index 23909673a3890..a003f268a5d02 100644
Binary files a/sound/announcer/vox_fem/space.ogg and b/sound/announcer/vox_fem/space.ogg differ
diff --git a/sound/announcer/vox_fem/special.ogg b/sound/announcer/vox_fem/special.ogg
index f0f219c13974b..7d6f153357a33 100644
Binary files a/sound/announcer/vox_fem/special.ogg and b/sound/announcer/vox_fem/special.ogg differ
diff --git a/sound/announcer/vox_fem/spew.ogg b/sound/announcer/vox_fem/spew.ogg
index b9d20048d2651..cf8ae660fc435 100644
Binary files a/sound/announcer/vox_fem/spew.ogg and b/sound/announcer/vox_fem/spew.ogg differ
diff --git a/sound/announcer/vox_fem/squad.ogg b/sound/announcer/vox_fem/squad.ogg
index 163dd570cb00d..4c5db37d0f5c9 100644
Binary files a/sound/announcer/vox_fem/squad.ogg and b/sound/announcer/vox_fem/squad.ogg differ
diff --git a/sound/announcer/vox_fem/square.ogg b/sound/announcer/vox_fem/square.ogg
index f75eee54a179e..6f0ac6189606f 100644
Binary files a/sound/announcer/vox_fem/square.ogg and b/sound/announcer/vox_fem/square.ogg differ
diff --git a/sound/announcer/vox_fem/ss13.ogg b/sound/announcer/vox_fem/ss13.ogg
index 6cd69f5415f93..18d9d68e175a0 100644
Binary files a/sound/announcer/vox_fem/ss13.ogg and b/sound/announcer/vox_fem/ss13.ogg differ
diff --git a/sound/announcer/vox_fem/stairway.ogg b/sound/announcer/vox_fem/stairway.ogg
index 8cf54e0584e9e..dcc631736ecfc 100644
Binary files a/sound/announcer/vox_fem/stairway.ogg and b/sound/announcer/vox_fem/stairway.ogg differ
diff --git a/sound/announcer/vox_fem/starboard.ogg b/sound/announcer/vox_fem/starboard.ogg
index d5b328a3b2ba9..d35a26769d67b 100644
Binary files a/sound/announcer/vox_fem/starboard.ogg and b/sound/announcer/vox_fem/starboard.ogg differ
diff --git a/sound/announcer/vox_fem/start.ogg b/sound/announcer/vox_fem/start.ogg
index b07dc5faf259b..0a14c16e0fb74 100644
Binary files a/sound/announcer/vox_fem/start.ogg and b/sound/announcer/vox_fem/start.ogg differ
diff --git a/sound/announcer/vox_fem/starts.ogg b/sound/announcer/vox_fem/starts.ogg
index fca5914927f2d..1ac7ca74269b1 100644
Binary files a/sound/announcer/vox_fem/starts.ogg and b/sound/announcer/vox_fem/starts.ogg differ
diff --git a/sound/announcer/vox_fem/station.ogg b/sound/announcer/vox_fem/station.ogg
index cddcb9bcd0c3b..4cde31e1a57d3 100644
Binary files a/sound/announcer/vox_fem/station.ogg and b/sound/announcer/vox_fem/station.ogg differ
diff --git a/sound/announcer/vox_fem/stations.ogg b/sound/announcer/vox_fem/stations.ogg
index c0a495263698c..68e7eaa5b4ccd 100644
Binary files a/sound/announcer/vox_fem/stations.ogg and b/sound/announcer/vox_fem/stations.ogg differ
diff --git a/sound/announcer/vox_fem/stationwide.ogg b/sound/announcer/vox_fem/stationwide.ogg
index b7b000b3b9f8c..2eb78bb664365 100644
Binary files a/sound/announcer/vox_fem/stationwide.ogg and b/sound/announcer/vox_fem/stationwide.ogg differ
diff --git a/sound/announcer/vox_fem/status.ogg b/sound/announcer/vox_fem/status.ogg
index 3eefa0ea91401..b155913991277 100644
Binary files a/sound/announcer/vox_fem/status.ogg and b/sound/announcer/vox_fem/status.ogg differ
diff --git a/sound/announcer/vox_fem/stay.ogg b/sound/announcer/vox_fem/stay.ogg
index 6ee63fcdedbfb..635ed81406dc7 100644
Binary files a/sound/announcer/vox_fem/stay.ogg and b/sound/announcer/vox_fem/stay.ogg differ
diff --git a/sound/announcer/vox_fem/sterile.ogg b/sound/announcer/vox_fem/sterile.ogg
index 3cac8c1a74b57..70c2bda2c45e9 100644
Binary files a/sound/announcer/vox_fem/sterile.ogg and b/sound/announcer/vox_fem/sterile.ogg differ
diff --git a/sound/announcer/vox_fem/sterilization.ogg b/sound/announcer/vox_fem/sterilization.ogg
index 203fc532ab168..cffff41854b1c 100644
Binary files a/sound/announcer/vox_fem/sterilization.ogg and b/sound/announcer/vox_fem/sterilization.ogg differ
diff --git a/sound/announcer/vox_fem/stop.ogg b/sound/announcer/vox_fem/stop.ogg
index dc8f4e1666968..5ff25312b1b3d 100644
Binary files a/sound/announcer/vox_fem/stop.ogg and b/sound/announcer/vox_fem/stop.ogg differ
diff --git a/sound/announcer/vox_fem/storage.ogg b/sound/announcer/vox_fem/storage.ogg
index 5a75b6ad708cf..80bbf58501c9b 100644
Binary files a/sound/announcer/vox_fem/storage.ogg and b/sound/announcer/vox_fem/storage.ogg differ
diff --git a/sound/announcer/vox_fem/strong.ogg b/sound/announcer/vox_fem/strong.ogg
index eeb71bdcfc4f2..89be94d44a2ba 100644
Binary files a/sound/announcer/vox_fem/strong.ogg and b/sound/announcer/vox_fem/strong.ogg differ
diff --git a/sound/announcer/vox_fem/stuck.ogg b/sound/announcer/vox_fem/stuck.ogg
index 31d93647a4873..1b5c126483c96 100644
Binary files a/sound/announcer/vox_fem/stuck.ogg and b/sound/announcer/vox_fem/stuck.ogg differ
diff --git a/sound/announcer/vox_fem/sub.ogg b/sound/announcer/vox_fem/sub.ogg
index 7105f5a69187a..0d107391d946b 100644
Binary files a/sound/announcer/vox_fem/sub.ogg and b/sound/announcer/vox_fem/sub.ogg differ
diff --git a/sound/announcer/vox_fem/subsurface.ogg b/sound/announcer/vox_fem/subsurface.ogg
index d363797642840..4216c6c05c761 100644
Binary files a/sound/announcer/vox_fem/subsurface.ogg and b/sound/announcer/vox_fem/subsurface.ogg differ
diff --git a/sound/announcer/vox_fem/such.ogg b/sound/announcer/vox_fem/such.ogg
index a85d0642e6ed1..433b64e95de11 100644
Binary files a/sound/announcer/vox_fem/such.ogg and b/sound/announcer/vox_fem/such.ogg differ
diff --git a/sound/announcer/vox_fem/sudden.ogg b/sound/announcer/vox_fem/sudden.ogg
index 8eeb44f4ad11c..f76dec907cd70 100644
Binary files a/sound/announcer/vox_fem/sudden.ogg and b/sound/announcer/vox_fem/sudden.ogg differ
diff --git a/sound/announcer/vox_fem/suffer.ogg b/sound/announcer/vox_fem/suffer.ogg
index e37727f4a48a3..93eb9d2080638 100644
Binary files a/sound/announcer/vox_fem/suffer.ogg and b/sound/announcer/vox_fem/suffer.ogg differ
diff --git a/sound/announcer/vox_fem/suit.ogg b/sound/announcer/vox_fem/suit.ogg
index e4b4a9be8eebe..c8798ad4a46dc 100644
Binary files a/sound/announcer/vox_fem/suit.ogg and b/sound/announcer/vox_fem/suit.ogg differ
diff --git a/sound/announcer/vox_fem/suited.ogg b/sound/announcer/vox_fem/suited.ogg
index 36b2b45c5275a..c7b1973858da7 100644
Binary files a/sound/announcer/vox_fem/suited.ogg and b/sound/announcer/vox_fem/suited.ogg differ
diff --git a/sound/announcer/vox_fem/super.ogg b/sound/announcer/vox_fem/super.ogg
index 6d110152fdc23..69af5798366b3 100644
Binary files a/sound/announcer/vox_fem/super.ogg and b/sound/announcer/vox_fem/super.ogg differ
diff --git a/sound/announcer/vox_fem/superconducting.ogg b/sound/announcer/vox_fem/superconducting.ogg
index 7b5c6a70336d7..c254aa99eee17 100644
Binary files a/sound/announcer/vox_fem/superconducting.ogg and b/sound/announcer/vox_fem/superconducting.ogg differ
diff --git a/sound/announcer/vox_fem/supercooled.ogg b/sound/announcer/vox_fem/supercooled.ogg
index b0736de6083fe..0994d7b0093a7 100644
Binary files a/sound/announcer/vox_fem/supercooled.ogg and b/sound/announcer/vox_fem/supercooled.ogg differ
diff --git a/sound/announcer/vox_fem/supermatter.ogg b/sound/announcer/vox_fem/supermatter.ogg
index 7aa405a662caf..199dccb0b055f 100644
Binary files a/sound/announcer/vox_fem/supermatter.ogg and b/sound/announcer/vox_fem/supermatter.ogg differ
diff --git a/sound/announcer/vox_fem/supply.ogg b/sound/announcer/vox_fem/supply.ogg
index 8f18d501d2bd4..7aaa94236746a 100644
Binary files a/sound/announcer/vox_fem/supply.ogg and b/sound/announcer/vox_fem/supply.ogg differ
diff --git a/sound/announcer/vox_fem/surface.ogg b/sound/announcer/vox_fem/surface.ogg
index e5ac17d86c3d3..930c19db7ebac 100644
Binary files a/sound/announcer/vox_fem/surface.ogg and b/sound/announcer/vox_fem/surface.ogg differ
diff --git a/sound/announcer/vox_fem/surrender.ogg b/sound/announcer/vox_fem/surrender.ogg
index 563d5bf3f876a..774c93d0e9146 100644
Binary files a/sound/announcer/vox_fem/surrender.ogg and b/sound/announcer/vox_fem/surrender.ogg differ
diff --git a/sound/announcer/vox_fem/surround.ogg b/sound/announcer/vox_fem/surround.ogg
index 514ba97e70c60..eeac4e94cb0d8 100644
Binary files a/sound/announcer/vox_fem/surround.ogg and b/sound/announcer/vox_fem/surround.ogg differ
diff --git a/sound/announcer/vox_fem/surrounded.ogg b/sound/announcer/vox_fem/surrounded.ogg
index d47c74b95cc96..476fd105b1f19 100644
Binary files a/sound/announcer/vox_fem/surrounded.ogg and b/sound/announcer/vox_fem/surrounded.ogg differ
diff --git a/sound/announcer/vox_fem/sweating.ogg b/sound/announcer/vox_fem/sweating.ogg
index 140e4673416a2..7b90e17148c78 100644
Binary files a/sound/announcer/vox_fem/sweating.ogg and b/sound/announcer/vox_fem/sweating.ogg differ
diff --git a/sound/announcer/vox_fem/swhitenoise.ogg b/sound/announcer/vox_fem/swhitenoise.ogg
index 4642bf92b00b0..ba9298889e7c9 100644
Binary files a/sound/announcer/vox_fem/swhitenoise.ogg and b/sound/announcer/vox_fem/swhitenoise.ogg differ
diff --git a/sound/announcer/vox_fem/switch.ogg b/sound/announcer/vox_fem/switch.ogg
index 4e3e058b1100a..781b66d3f8180 100644
Binary files a/sound/announcer/vox_fem/switch.ogg and b/sound/announcer/vox_fem/switch.ogg differ
diff --git a/sound/announcer/vox_fem/syndicate.ogg b/sound/announcer/vox_fem/syndicate.ogg
index ad6708e4d714a..fbfb2383a86d6 100644
Binary files a/sound/announcer/vox_fem/syndicate.ogg and b/sound/announcer/vox_fem/syndicate.ogg differ
diff --git a/sound/announcer/vox_fem/system.ogg b/sound/announcer/vox_fem/system.ogg
index 49293e2803b89..1049e112adb44 100644
Binary files a/sound/announcer/vox_fem/system.ogg and b/sound/announcer/vox_fem/system.ogg differ
diff --git a/sound/announcer/vox_fem/systems.ogg b/sound/announcer/vox_fem/systems.ogg
index 394f56ca183a6..a44fce75a28b3 100644
Binary files a/sound/announcer/vox_fem/systems.ogg and b/sound/announcer/vox_fem/systems.ogg differ
diff --git a/sound/announcer/vox_fem/t.ogg b/sound/announcer/vox_fem/t.ogg
index e6d81bf9781ba..ead3e7fcbdab8 100644
Binary files a/sound/announcer/vox_fem/t.ogg and b/sound/announcer/vox_fem/t.ogg differ
diff --git a/sound/announcer/vox_fem/table.ogg b/sound/announcer/vox_fem/table.ogg
index e8f84ec10b8af..f9338cd31a2ab 100644
Binary files a/sound/announcer/vox_fem/table.ogg and b/sound/announcer/vox_fem/table.ogg differ
diff --git a/sound/announcer/vox_fem/tactical.ogg b/sound/announcer/vox_fem/tactical.ogg
index cddffb42b56dd..d370669d64137 100644
Binary files a/sound/announcer/vox_fem/tactical.ogg and b/sound/announcer/vox_fem/tactical.ogg differ
diff --git a/sound/announcer/vox_fem/taildragger.ogg b/sound/announcer/vox_fem/taildragger.ogg
index e6211e368f79d..999973cbfdc95 100644
Binary files a/sound/announcer/vox_fem/taildragger.ogg and b/sound/announcer/vox_fem/taildragger.ogg differ
diff --git a/sound/announcer/vox_fem/take.ogg b/sound/announcer/vox_fem/take.ogg
index 2fbc7d2dbd8aa..d3dd4e5635c3d 100644
Binary files a/sound/announcer/vox_fem/take.ogg and b/sound/announcer/vox_fem/take.ogg differ
diff --git a/sound/announcer/vox_fem/talk.ogg b/sound/announcer/vox_fem/talk.ogg
index 639c05d6d8c3f..89350071856a5 100644
Binary files a/sound/announcer/vox_fem/talk.ogg and b/sound/announcer/vox_fem/talk.ogg differ
diff --git a/sound/announcer/vox_fem/tampered.ogg b/sound/announcer/vox_fem/tampered.ogg
index 1540d1fdb8606..aaafca64effd1 100644
Binary files a/sound/announcer/vox_fem/tampered.ogg and b/sound/announcer/vox_fem/tampered.ogg differ
diff --git a/sound/announcer/vox_fem/tango.ogg b/sound/announcer/vox_fem/tango.ogg
index 1901272c2d5fe..91cf4ceb9a125 100644
Binary files a/sound/announcer/vox_fem/tango.ogg and b/sound/announcer/vox_fem/tango.ogg differ
diff --git a/sound/announcer/vox_fem/tank.ogg b/sound/announcer/vox_fem/tank.ogg
index de601ee42bd6f..6a63ee2ef6e48 100644
Binary files a/sound/announcer/vox_fem/tank.ogg and b/sound/announcer/vox_fem/tank.ogg differ
diff --git a/sound/announcer/vox_fem/target.ogg b/sound/announcer/vox_fem/target.ogg
index cd25f973c7ba5..ca618e16660f9 100644
Binary files a/sound/announcer/vox_fem/target.ogg and b/sound/announcer/vox_fem/target.ogg differ
diff --git a/sound/announcer/vox_fem/team.ogg b/sound/announcer/vox_fem/team.ogg
index 0da37a0e7297c..bb1d9e59f7c0b 100644
Binary files a/sound/announcer/vox_fem/team.ogg and b/sound/announcer/vox_fem/team.ogg differ
diff --git a/sound/announcer/vox_fem/tech.ogg b/sound/announcer/vox_fem/tech.ogg
index 508f2b361381c..520bef9c7f1ac 100644
Binary files a/sound/announcer/vox_fem/tech.ogg and b/sound/announcer/vox_fem/tech.ogg differ
diff --git a/sound/announcer/vox_fem/technician.ogg b/sound/announcer/vox_fem/technician.ogg
index d2726c02bf3ab..10dfa32e4186e 100644
Binary files a/sound/announcer/vox_fem/technician.ogg and b/sound/announcer/vox_fem/technician.ogg differ
diff --git a/sound/announcer/vox_fem/technology.ogg b/sound/announcer/vox_fem/technology.ogg
index 6ffd2f21dbe27..577e05fc7db6a 100644
Binary files a/sound/announcer/vox_fem/technology.ogg and b/sound/announcer/vox_fem/technology.ogg differ
diff --git a/sound/announcer/vox_fem/teleporter.ogg b/sound/announcer/vox_fem/teleporter.ogg
index 8b237573af19c..70e9111e6eaf2 100644
Binary files a/sound/announcer/vox_fem/teleporter.ogg and b/sound/announcer/vox_fem/teleporter.ogg differ
diff --git a/sound/announcer/vox_fem/temperature.ogg b/sound/announcer/vox_fem/temperature.ogg
index f211ef728c0a5..4f61290e3c7c9 100644
Binary files a/sound/announcer/vox_fem/temperature.ogg and b/sound/announcer/vox_fem/temperature.ogg differ
diff --git a/sound/announcer/vox_fem/temporal.ogg b/sound/announcer/vox_fem/temporal.ogg
index 4d3476bfff52b..3a9037291f8a9 100644
Binary files a/sound/announcer/vox_fem/temporal.ogg and b/sound/announcer/vox_fem/temporal.ogg differ
diff --git a/sound/announcer/vox_fem/ten.ogg b/sound/announcer/vox_fem/ten.ogg
index 2bd4483bbfb21..dd23c34b6fe31 100644
Binary files a/sound/announcer/vox_fem/ten.ogg and b/sound/announcer/vox_fem/ten.ogg differ
diff --git a/sound/announcer/vox_fem/terminal.ogg b/sound/announcer/vox_fem/terminal.ogg
index 2f78cf1e14950..ef88471337cc2 100644
Binary files a/sound/announcer/vox_fem/terminal.ogg and b/sound/announcer/vox_fem/terminal.ogg differ
diff --git a/sound/announcer/vox_fem/terminate.ogg b/sound/announcer/vox_fem/terminate.ogg
index fa6d03a5f3566..c34dd67873941 100644
Binary files a/sound/announcer/vox_fem/terminate.ogg and b/sound/announcer/vox_fem/terminate.ogg differ
diff --git a/sound/announcer/vox_fem/terminated.ogg b/sound/announcer/vox_fem/terminated.ogg
index b816e39ec5705..ea984ae760f5e 100644
Binary files a/sound/announcer/vox_fem/terminated.ogg and b/sound/announcer/vox_fem/terminated.ogg differ
diff --git a/sound/announcer/vox_fem/termination.ogg b/sound/announcer/vox_fem/termination.ogg
index 745b150c6737c..a7ca32b080052 100644
Binary files a/sound/announcer/vox_fem/termination.ogg and b/sound/announcer/vox_fem/termination.ogg differ
diff --git a/sound/announcer/vox_fem/tesla.ogg b/sound/announcer/vox_fem/tesla.ogg
index 70cb9e4ca82b9..f847f757ed7c0 100644
Binary files a/sound/announcer/vox_fem/tesla.ogg and b/sound/announcer/vox_fem/tesla.ogg differ
diff --git a/sound/announcer/vox_fem/test.ogg b/sound/announcer/vox_fem/test.ogg
index ec0240b20c5e3..1a314c2c0bd6c 100644
Binary files a/sound/announcer/vox_fem/test.ogg and b/sound/announcer/vox_fem/test.ogg differ
diff --git a/sound/announcer/vox_fem/text.ogg b/sound/announcer/vox_fem/text.ogg
index b7f0ed2ab9cf2..e218d469eb29a 100644
Binary files a/sound/announcer/vox_fem/text.ogg and b/sound/announcer/vox_fem/text.ogg differ
diff --git a/sound/announcer/vox_fem/thank.ogg b/sound/announcer/vox_fem/thank.ogg
index 2eee00fba4c45..bea9ca8495b61 100644
Binary files a/sound/announcer/vox_fem/thank.ogg and b/sound/announcer/vox_fem/thank.ogg differ
diff --git a/sound/announcer/vox_fem/thanks.ogg b/sound/announcer/vox_fem/thanks.ogg
index d1fb4ffbaca2b..771ed33ad6431 100644
Binary files a/sound/announcer/vox_fem/thanks.ogg and b/sound/announcer/vox_fem/thanks.ogg differ
diff --git a/sound/announcer/vox_fem/that.ogg b/sound/announcer/vox_fem/that.ogg
index 65c08f139484e..5015e56a8727b 100644
Binary files a/sound/announcer/vox_fem/that.ogg and b/sound/announcer/vox_fem/that.ogg differ
diff --git a/sound/announcer/vox_fem/the.ogg b/sound/announcer/vox_fem/the.ogg
index 79629c2bc2719..a7aaf6d1a96a6 100644
Binary files a/sound/announcer/vox_fem/the.ogg and b/sound/announcer/vox_fem/the.ogg differ
diff --git a/sound/announcer/vox_fem/theater.ogg b/sound/announcer/vox_fem/theater.ogg
index 4cf901fbb76ca..4faa6c23b224d 100644
Binary files a/sound/announcer/vox_fem/theater.ogg and b/sound/announcer/vox_fem/theater.ogg differ
diff --git a/sound/announcer/vox_fem/them.ogg b/sound/announcer/vox_fem/them.ogg
index 8984ce9bb8f11..f871b353e908c 100644
Binary files a/sound/announcer/vox_fem/them.ogg and b/sound/announcer/vox_fem/them.ogg differ
diff --git a/sound/announcer/vox_fem/then.ogg b/sound/announcer/vox_fem/then.ogg
index f7bd169fe2555..27cb18c545d0b 100644
Binary files a/sound/announcer/vox_fem/then.ogg and b/sound/announcer/vox_fem/then.ogg differ
diff --git a/sound/announcer/vox_fem/there.ogg b/sound/announcer/vox_fem/there.ogg
index 05d665592e1c8..5f2213126f184 100644
Binary files a/sound/announcer/vox_fem/there.ogg and b/sound/announcer/vox_fem/there.ogg differ
diff --git a/sound/announcer/vox_fem/they.ogg b/sound/announcer/vox_fem/they.ogg
index f0bc1b424bb00..1221a62706af1 100644
Binary files a/sound/announcer/vox_fem/they.ogg and b/sound/announcer/vox_fem/they.ogg differ
diff --git a/sound/announcer/vox_fem/third.ogg b/sound/announcer/vox_fem/third.ogg
index 6cc5316a63a8d..a7d0cd8bab093 100644
Binary files a/sound/announcer/vox_fem/third.ogg and b/sound/announcer/vox_fem/third.ogg differ
diff --git a/sound/announcer/vox_fem/thirteen.ogg b/sound/announcer/vox_fem/thirteen.ogg
index 859b89ea1a758..f591b48b2c49c 100644
Binary files a/sound/announcer/vox_fem/thirteen.ogg and b/sound/announcer/vox_fem/thirteen.ogg differ
diff --git a/sound/announcer/vox_fem/thirty.ogg b/sound/announcer/vox_fem/thirty.ogg
index 3a977ba8c9721..eaa8cbbe4e36f 100644
Binary files a/sound/announcer/vox_fem/thirty.ogg and b/sound/announcer/vox_fem/thirty.ogg differ
diff --git a/sound/announcer/vox_fem/this.ogg b/sound/announcer/vox_fem/this.ogg
index 95bdb5b6fea35..e9df34ef0a41f 100644
Binary files a/sound/announcer/vox_fem/this.ogg and b/sound/announcer/vox_fem/this.ogg differ
diff --git a/sound/announcer/vox_fem/those.ogg b/sound/announcer/vox_fem/those.ogg
index 53b754d1887d2..a8f08eb9cf73f 100644
Binary files a/sound/announcer/vox_fem/those.ogg and b/sound/announcer/vox_fem/those.ogg differ
diff --git a/sound/announcer/vox_fem/thousand.ogg b/sound/announcer/vox_fem/thousand.ogg
index ad4cb3912dbe7..0b2a484366a8a 100644
Binary files a/sound/announcer/vox_fem/thousand.ogg and b/sound/announcer/vox_fem/thousand.ogg differ
diff --git a/sound/announcer/vox_fem/threat.ogg b/sound/announcer/vox_fem/threat.ogg
index 74b99e07a6799..46e92e3f7efb1 100644
Binary files a/sound/announcer/vox_fem/threat.ogg and b/sound/announcer/vox_fem/threat.ogg differ
diff --git a/sound/announcer/vox_fem/three.ogg b/sound/announcer/vox_fem/three.ogg
index 9efb9467541a7..4aa7d30f610ac 100644
Binary files a/sound/announcer/vox_fem/three.ogg and b/sound/announcer/vox_fem/three.ogg differ
diff --git a/sound/announcer/vox_fem/through.ogg b/sound/announcer/vox_fem/through.ogg
index 77adca3bb04f0..fe089bcadb8f5 100644
Binary files a/sound/announcer/vox_fem/through.ogg and b/sound/announcer/vox_fem/through.ogg differ
diff --git a/sound/announcer/vox_fem/tick.ogg b/sound/announcer/vox_fem/tick.ogg
index bb986534a5bbb..f50910d3d4924 100644
Binary files a/sound/announcer/vox_fem/tick.ogg and b/sound/announcer/vox_fem/tick.ogg differ
diff --git a/sound/announcer/vox_fem/tide.ogg b/sound/announcer/vox_fem/tide.ogg
index 27807fa63b1c8..84a76ad4300a9 100644
Binary files a/sound/announcer/vox_fem/tide.ogg and b/sound/announcer/vox_fem/tide.ogg differ
diff --git a/sound/announcer/vox_fem/tile.ogg b/sound/announcer/vox_fem/tile.ogg
index 2d794c26a1291..3dacced473900 100644
Binary files a/sound/announcer/vox_fem/tile.ogg and b/sound/announcer/vox_fem/tile.ogg differ
diff --git a/sound/announcer/vox_fem/time.ogg b/sound/announcer/vox_fem/time.ogg
index 26b061cc005ec..de645bd5b53d6 100644
Binary files a/sound/announcer/vox_fem/time.ogg and b/sound/announcer/vox_fem/time.ogg differ
diff --git a/sound/announcer/vox_fem/tiny.ogg b/sound/announcer/vox_fem/tiny.ogg
index 69c348cafea1b..2672c5aa17617 100644
Binary files a/sound/announcer/vox_fem/tiny.ogg and b/sound/announcer/vox_fem/tiny.ogg differ
diff --git a/sound/announcer/vox_fem/to.ogg b/sound/announcer/vox_fem/to.ogg
index cb8594d73cd12..0f7b95f46e168 100644
Binary files a/sound/announcer/vox_fem/to.ogg and b/sound/announcer/vox_fem/to.ogg differ
diff --git a/sound/announcer/vox_fem/top.ogg b/sound/announcer/vox_fem/top.ogg
index dea64d66f4a4b..8c1866b05d9f3 100644
Binary files a/sound/announcer/vox_fem/top.ogg and b/sound/announcer/vox_fem/top.ogg differ
diff --git a/sound/announcer/vox_fem/topside.ogg b/sound/announcer/vox_fem/topside.ogg
index dd542435a12aa..22848cafe1da8 100644
Binary files a/sound/announcer/vox_fem/topside.ogg and b/sound/announcer/vox_fem/topside.ogg differ
diff --git a/sound/announcer/vox_fem/touch.ogg b/sound/announcer/vox_fem/touch.ogg
index 1be63a0fb5894..3ffbc0ff5e41d 100644
Binary files a/sound/announcer/vox_fem/touch.ogg and b/sound/announcer/vox_fem/touch.ogg differ
diff --git a/sound/announcer/vox_fem/touched.ogg b/sound/announcer/vox_fem/touched.ogg
index e4cb940d71fc6..8dd01d5b07d65 100644
Binary files a/sound/announcer/vox_fem/touched.ogg and b/sound/announcer/vox_fem/touched.ogg differ
diff --git a/sound/announcer/vox_fem/touching.ogg b/sound/announcer/vox_fem/touching.ogg
index b1ef04d443a6a..a3a93170fb757 100644
Binary files a/sound/announcer/vox_fem/touching.ogg and b/sound/announcer/vox_fem/touching.ogg differ
diff --git a/sound/announcer/vox_fem/towards.ogg b/sound/announcer/vox_fem/towards.ogg
index ce9b4ff30a394..6e839795a5259 100644
Binary files a/sound/announcer/vox_fem/towards.ogg and b/sound/announcer/vox_fem/towards.ogg differ
diff --git a/sound/announcer/vox_fem/toxins.ogg b/sound/announcer/vox_fem/toxins.ogg
index 95f57ea70266b..fa4943426c46f 100644
Binary files a/sound/announcer/vox_fem/toxins.ogg and b/sound/announcer/vox_fem/toxins.ogg differ
diff --git a/sound/announcer/vox_fem/track.ogg b/sound/announcer/vox_fem/track.ogg
index 6110b0b439abd..56a8283805986 100644
Binary files a/sound/announcer/vox_fem/track.ogg and b/sound/announcer/vox_fem/track.ogg differ
diff --git a/sound/announcer/vox_fem/train.ogg b/sound/announcer/vox_fem/train.ogg
index cabdb2310ddd6..09d4a07b5e11c 100644
Binary files a/sound/announcer/vox_fem/train.ogg and b/sound/announcer/vox_fem/train.ogg differ
diff --git a/sound/announcer/vox_fem/traitor.ogg b/sound/announcer/vox_fem/traitor.ogg
index 133a632f446b1..3fa77b949fba7 100644
Binary files a/sound/announcer/vox_fem/traitor.ogg and b/sound/announcer/vox_fem/traitor.ogg differ
diff --git a/sound/announcer/vox_fem/transportation.ogg b/sound/announcer/vox_fem/transportation.ogg
index 739c35ff6a272..9d977ba2a92c1 100644
Binary files a/sound/announcer/vox_fem/transportation.ogg and b/sound/announcer/vox_fem/transportation.ogg differ
diff --git a/sound/announcer/vox_fem/trigger.ogg b/sound/announcer/vox_fem/trigger.ogg
index 22ed22d489039..6e306ec1f787b 100644
Binary files a/sound/announcer/vox_fem/trigger.ogg and b/sound/announcer/vox_fem/trigger.ogg differ
diff --git a/sound/announcer/vox_fem/triggered.ogg b/sound/announcer/vox_fem/triggered.ogg
index 7fe30ad804606..db8bea9488eb4 100644
Binary files a/sound/announcer/vox_fem/triggered.ogg and b/sound/announcer/vox_fem/triggered.ogg differ
diff --git a/sound/announcer/vox_fem/triggering.ogg b/sound/announcer/vox_fem/triggering.ogg
index 8cb4788155618..11f3d14f94877 100644
Binary files a/sound/announcer/vox_fem/triggering.ogg and b/sound/announcer/vox_fem/triggering.ogg differ
diff --git a/sound/announcer/vox_fem/triple.ogg b/sound/announcer/vox_fem/triple.ogg
index 6b6679258100a..879766aba0371 100644
Binary files a/sound/announcer/vox_fem/triple.ogg and b/sound/announcer/vox_fem/triple.ogg differ
diff --git a/sound/announcer/vox_fem/tritium.ogg b/sound/announcer/vox_fem/tritium.ogg
index 7e62eddb9c504..af5cf39510eee 100644
Binary files a/sound/announcer/vox_fem/tritium.ogg and b/sound/announcer/vox_fem/tritium.ogg differ
diff --git a/sound/announcer/vox_fem/truck.ogg b/sound/announcer/vox_fem/truck.ogg
index fb2f3a0eca4d7..ce5315c1da917 100644
Binary files a/sound/announcer/vox_fem/truck.ogg and b/sound/announcer/vox_fem/truck.ogg differ
diff --git a/sound/announcer/vox_fem/true.ogg b/sound/announcer/vox_fem/true.ogg
index b4c4373d4a9fc..a5691cef631d3 100644
Binary files a/sound/announcer/vox_fem/true.ogg and b/sound/announcer/vox_fem/true.ogg differ
diff --git a/sound/announcer/vox_fem/tunnel.ogg b/sound/announcer/vox_fem/tunnel.ogg
index cf5f8b6839398..43aad64855430 100644
Binary files a/sound/announcer/vox_fem/tunnel.ogg and b/sound/announcer/vox_fem/tunnel.ogg differ
diff --git a/sound/announcer/vox_fem/turn.ogg b/sound/announcer/vox_fem/turn.ogg
index d37277b56fbfe..f8473ae79e816 100644
Binary files a/sound/announcer/vox_fem/turn.ogg and b/sound/announcer/vox_fem/turn.ogg differ
diff --git a/sound/announcer/vox_fem/turned.ogg b/sound/announcer/vox_fem/turned.ogg
index 2d9c59edfac3f..2ace465b73759 100644
Binary files a/sound/announcer/vox_fem/turned.ogg and b/sound/announcer/vox_fem/turned.ogg differ
diff --git a/sound/announcer/vox_fem/turret.ogg b/sound/announcer/vox_fem/turret.ogg
index 9e59d9522c1ca..3248dd0107f91 100644
Binary files a/sound/announcer/vox_fem/turret.ogg and b/sound/announcer/vox_fem/turret.ogg differ
diff --git a/sound/announcer/vox_fem/twelve.ogg b/sound/announcer/vox_fem/twelve.ogg
index 2cbcf01143196..98cdc9fbfb54f 100644
Binary files a/sound/announcer/vox_fem/twelve.ogg and b/sound/announcer/vox_fem/twelve.ogg differ
diff --git a/sound/announcer/vox_fem/twenty.ogg b/sound/announcer/vox_fem/twenty.ogg
index da12231471fa8..92dc6e126eb10 100644
Binary files a/sound/announcer/vox_fem/twenty.ogg and b/sound/announcer/vox_fem/twenty.ogg differ
diff --git a/sound/announcer/vox_fem/two.ogg b/sound/announcer/vox_fem/two.ogg
index aaabc5c66ae4e..890f88efaf9c8 100644
Binary files a/sound/announcer/vox_fem/two.ogg and b/sound/announcer/vox_fem/two.ogg differ
diff --git a/sound/announcer/vox_fem/u.ogg b/sound/announcer/vox_fem/u.ogg
index 3948f2514ae12..67ee79210874a 100644
Binary files a/sound/announcer/vox_fem/u.ogg and b/sound/announcer/vox_fem/u.ogg differ
diff --git a/sound/announcer/vox_fem/ugh.ogg b/sound/announcer/vox_fem/ugh.ogg
index e010a96f8a954..e9937f10c09c2 100644
Binary files a/sound/announcer/vox_fem/ugh.ogg and b/sound/announcer/vox_fem/ugh.ogg differ
diff --git a/sound/announcer/vox_fem/ughh.ogg b/sound/announcer/vox_fem/ughh.ogg
index 5b0610ed0cbbf..05dc3bb4ec2a0 100644
Binary files a/sound/announcer/vox_fem/ughh.ogg and b/sound/announcer/vox_fem/ughh.ogg differ
diff --git a/sound/announcer/vox_fem/unable.ogg b/sound/announcer/vox_fem/unable.ogg
index 2c51bb8206657..3ac81ff2ac14a 100644
Binary files a/sound/announcer/vox_fem/unable.ogg and b/sound/announcer/vox_fem/unable.ogg differ
diff --git a/sound/announcer/vox_fem/unauthorized.ogg b/sound/announcer/vox_fem/unauthorized.ogg
index b52445c6c2980..c238a5f679611 100644
Binary files a/sound/announcer/vox_fem/unauthorized.ogg and b/sound/announcer/vox_fem/unauthorized.ogg differ
diff --git a/sound/announcer/vox_fem/under.ogg b/sound/announcer/vox_fem/under.ogg
index 8c453b81bb78a..f10d3fce94844 100644
Binary files a/sound/announcer/vox_fem/under.ogg and b/sound/announcer/vox_fem/under.ogg differ
diff --git a/sound/announcer/vox_fem/uniform.ogg b/sound/announcer/vox_fem/uniform.ogg
index bfe3a42c71442..64e799a8728f1 100644
Binary files a/sound/announcer/vox_fem/uniform.ogg and b/sound/announcer/vox_fem/uniform.ogg differ
diff --git a/sound/announcer/vox_fem/unique.ogg b/sound/announcer/vox_fem/unique.ogg
index cb773507fcbb9..ccd647b2c2a08 100644
Binary files a/sound/announcer/vox_fem/unique.ogg and b/sound/announcer/vox_fem/unique.ogg differ
diff --git a/sound/announcer/vox_fem/unknown.ogg b/sound/announcer/vox_fem/unknown.ogg
index f0eb85939b723..01490897a0e17 100644
Binary files a/sound/announcer/vox_fem/unknown.ogg and b/sound/announcer/vox_fem/unknown.ogg differ
diff --git a/sound/announcer/vox_fem/unlocked.ogg b/sound/announcer/vox_fem/unlocked.ogg
index 3f0f610f15525..8b6aa0dc3628f 100644
Binary files a/sound/announcer/vox_fem/unlocked.ogg and b/sound/announcer/vox_fem/unlocked.ogg differ
diff --git a/sound/announcer/vox_fem/unsafe.ogg b/sound/announcer/vox_fem/unsafe.ogg
index 22fa219f4c97e..99d69d75557c5 100644
Binary files a/sound/announcer/vox_fem/unsafe.ogg and b/sound/announcer/vox_fem/unsafe.ogg differ
diff --git a/sound/announcer/vox_fem/until.ogg b/sound/announcer/vox_fem/until.ogg
index d468f47f86c29..9c39101cd8127 100644
Binary files a/sound/announcer/vox_fem/until.ogg and b/sound/announcer/vox_fem/until.ogg differ
diff --git a/sound/announcer/vox_fem/unwrench.ogg b/sound/announcer/vox_fem/unwrench.ogg
index bd31681fe3171..b1084624ef197 100644
Binary files a/sound/announcer/vox_fem/unwrench.ogg and b/sound/announcer/vox_fem/unwrench.ogg differ
diff --git a/sound/announcer/vox_fem/unwrenching.ogg b/sound/announcer/vox_fem/unwrenching.ogg
index 6f4d8b7de7ef9..e2ed22d6cc225 100644
Binary files a/sound/announcer/vox_fem/unwrenching.ogg and b/sound/announcer/vox_fem/unwrenching.ogg differ
diff --git a/sound/announcer/vox_fem/up.ogg b/sound/announcer/vox_fem/up.ogg
index 6261bd7648f6d..afc8bdab3c5f7 100644
Binary files a/sound/announcer/vox_fem/up.ogg and b/sound/announcer/vox_fem/up.ogg differ
diff --git a/sound/announcer/vox_fem/update.ogg b/sound/announcer/vox_fem/update.ogg
index 190f2aed44d6f..5bafafba2cf62 100644
Binary files a/sound/announcer/vox_fem/update.ogg and b/sound/announcer/vox_fem/update.ogg differ
diff --git a/sound/announcer/vox_fem/updated.ogg b/sound/announcer/vox_fem/updated.ogg
index 46514d82e9265..1cb655b693575 100644
Binary files a/sound/announcer/vox_fem/updated.ogg and b/sound/announcer/vox_fem/updated.ogg differ
diff --git a/sound/announcer/vox_fem/updating.ogg b/sound/announcer/vox_fem/updating.ogg
index 208a611422bd0..d0055bfa53511 100644
Binary files a/sound/announcer/vox_fem/updating.ogg and b/sound/announcer/vox_fem/updating.ogg differ
diff --git a/sound/announcer/vox_fem/upload.ogg b/sound/announcer/vox_fem/upload.ogg
index 807aa7573d624..a14753e2ed76d 100644
Binary files a/sound/announcer/vox_fem/upload.ogg and b/sound/announcer/vox_fem/upload.ogg differ
diff --git a/sound/announcer/vox_fem/upper.ogg b/sound/announcer/vox_fem/upper.ogg
index 312b369ddaa98..de0aeb5a83f24 100644
Binary files a/sound/announcer/vox_fem/upper.ogg and b/sound/announcer/vox_fem/upper.ogg differ
diff --git a/sound/announcer/vox_fem/uranium.ogg b/sound/announcer/vox_fem/uranium.ogg
index cd940ca19e6af..3072594ad085f 100644
Binary files a/sound/announcer/vox_fem/uranium.ogg and b/sound/announcer/vox_fem/uranium.ogg differ
diff --git a/sound/announcer/vox_fem/us.ogg b/sound/announcer/vox_fem/us.ogg
index c14eca596922a..c270a75187c59 100644
Binary files a/sound/announcer/vox_fem/us.ogg and b/sound/announcer/vox_fem/us.ogg differ
diff --git a/sound/announcer/vox_fem/usa.ogg b/sound/announcer/vox_fem/usa.ogg
index 1177e3dee77f9..5cc2ac3870d5d 100644
Binary files a/sound/announcer/vox_fem/usa.ogg and b/sound/announcer/vox_fem/usa.ogg differ
diff --git a/sound/announcer/vox_fem/use.ogg b/sound/announcer/vox_fem/use.ogg
index 3bd41893f934b..537c6c0b2b7bd 100644
Binary files a/sound/announcer/vox_fem/use.ogg and b/sound/announcer/vox_fem/use.ogg differ
diff --git a/sound/announcer/vox_fem/used.ogg b/sound/announcer/vox_fem/used.ogg
index 801df8e4b62b2..c769fcfb03e5e 100644
Binary files a/sound/announcer/vox_fem/used.ogg and b/sound/announcer/vox_fem/used.ogg differ
diff --git a/sound/announcer/vox_fem/useful.ogg b/sound/announcer/vox_fem/useful.ogg
index dfd8e6952a594..cf15e7c1aa72d 100644
Binary files a/sound/announcer/vox_fem/useful.ogg and b/sound/announcer/vox_fem/useful.ogg differ
diff --git a/sound/announcer/vox_fem/useless.ogg b/sound/announcer/vox_fem/useless.ogg
index 5b9bb7aa2941c..d9b12e51ada30 100644
Binary files a/sound/announcer/vox_fem/useless.ogg and b/sound/announcer/vox_fem/useless.ogg differ
diff --git a/sound/announcer/vox_fem/user.ogg b/sound/announcer/vox_fem/user.ogg
index 79f60d30df40b..613ad9e01b539 100644
Binary files a/sound/announcer/vox_fem/user.ogg and b/sound/announcer/vox_fem/user.ogg differ
diff --git a/sound/announcer/vox_fem/v.ogg b/sound/announcer/vox_fem/v.ogg
index fc6c85112dd63..12f06fea0f66a 100644
Binary files a/sound/announcer/vox_fem/v.ogg and b/sound/announcer/vox_fem/v.ogg differ
diff --git a/sound/announcer/vox_fem/vacate.ogg b/sound/announcer/vox_fem/vacate.ogg
index bdf52a36b3572..9e21ac6c3f3a9 100644
Binary files a/sound/announcer/vox_fem/vacate.ogg and b/sound/announcer/vox_fem/vacate.ogg differ
diff --git a/sound/announcer/vox_fem/vacuum.ogg b/sound/announcer/vox_fem/vacuum.ogg
index 1e380ca9863eb..8cfca7a5b54ce 100644
Binary files a/sound/announcer/vox_fem/vacuum.ogg and b/sound/announcer/vox_fem/vacuum.ogg differ
diff --git a/sound/announcer/vox_fem/valid.ogg b/sound/announcer/vox_fem/valid.ogg
index befacfc5d510d..f3bffa1afd26c 100644
Binary files a/sound/announcer/vox_fem/valid.ogg and b/sound/announcer/vox_fem/valid.ogg differ
diff --git a/sound/announcer/vox_fem/validate.ogg b/sound/announcer/vox_fem/validate.ogg
index 1c17c6dd94215..9bd315d5afdde 100644
Binary files a/sound/announcer/vox_fem/validate.ogg and b/sound/announcer/vox_fem/validate.ogg differ
diff --git a/sound/announcer/vox_fem/vapor.ogg b/sound/announcer/vox_fem/vapor.ogg
index fb69407b2be39..4dbe6cf7ea867 100644
Binary files a/sound/announcer/vox_fem/vapor.ogg and b/sound/announcer/vox_fem/vapor.ogg differ
diff --git a/sound/announcer/vox_fem/vendor.ogg b/sound/announcer/vox_fem/vendor.ogg
index f6f96bc8a7539..f52738373245f 100644
Binary files a/sound/announcer/vox_fem/vendor.ogg and b/sound/announcer/vox_fem/vendor.ogg differ
diff --git a/sound/announcer/vox_fem/vent.ogg b/sound/announcer/vox_fem/vent.ogg
index 5e6103c1d3cf9..8ae5b79faf68c 100644
Binary files a/sound/announcer/vox_fem/vent.ogg and b/sound/announcer/vox_fem/vent.ogg differ
diff --git a/sound/announcer/vox_fem/ventilation.ogg b/sound/announcer/vox_fem/ventilation.ogg
index 62f625d3b6b16..4ee98700f7235 100644
Binary files a/sound/announcer/vox_fem/ventilation.ogg and b/sound/announcer/vox_fem/ventilation.ogg differ
diff --git a/sound/announcer/vox_fem/very.ogg b/sound/announcer/vox_fem/very.ogg
index 1bfaf00148280..2830c142e6c33 100644
Binary files a/sound/announcer/vox_fem/very.ogg and b/sound/announcer/vox_fem/very.ogg differ
diff --git a/sound/announcer/vox_fem/victor.ogg b/sound/announcer/vox_fem/victor.ogg
index 02e23afb72f13..ec127cb6ad16c 100644
Binary files a/sound/announcer/vox_fem/victor.ogg and b/sound/announcer/vox_fem/victor.ogg differ
diff --git a/sound/announcer/vox_fem/violated.ogg b/sound/announcer/vox_fem/violated.ogg
index 8ec6a900a41bc..487e415a222d5 100644
Binary files a/sound/announcer/vox_fem/violated.ogg and b/sound/announcer/vox_fem/violated.ogg differ
diff --git a/sound/announcer/vox_fem/violation.ogg b/sound/announcer/vox_fem/violation.ogg
index e74c8a0931216..50035b90678dc 100644
Binary files a/sound/announcer/vox_fem/violation.ogg and b/sound/announcer/vox_fem/violation.ogg differ
diff --git a/sound/announcer/vox_fem/virologist.ogg b/sound/announcer/vox_fem/virologist.ogg
index 1f9c42d7c689e..58c9c362dabb1 100644
Binary files a/sound/announcer/vox_fem/virologist.ogg and b/sound/announcer/vox_fem/virologist.ogg differ
diff --git a/sound/announcer/vox_fem/virology.ogg b/sound/announcer/vox_fem/virology.ogg
index 687f925ccb0d0..1f2ffb2b2879c 100644
Binary files a/sound/announcer/vox_fem/virology.ogg and b/sound/announcer/vox_fem/virology.ogg differ
diff --git a/sound/announcer/vox_fem/virus.ogg b/sound/announcer/vox_fem/virus.ogg
index 57772dae84385..da508c94c8065 100644
Binary files a/sound/announcer/vox_fem/virus.ogg and b/sound/announcer/vox_fem/virus.ogg differ
diff --git a/sound/announcer/vox_fem/vitals.ogg b/sound/announcer/vox_fem/vitals.ogg
index 021c6aad092fe..ae412c97e1b9f 100644
Binary files a/sound/announcer/vox_fem/vitals.ogg and b/sound/announcer/vox_fem/vitals.ogg differ
diff --git a/sound/announcer/vox_fem/voltage.ogg b/sound/announcer/vox_fem/voltage.ogg
index bafe38bd72ba8..5f3652a2a1c8c 100644
Binary files a/sound/announcer/vox_fem/voltage.ogg and b/sound/announcer/vox_fem/voltage.ogg differ
diff --git a/sound/announcer/vox_fem/vox.ogg b/sound/announcer/vox_fem/vox.ogg
index ba680bd29c5aa..512d1ba2e0ddb 100644
Binary files a/sound/announcer/vox_fem/vox.ogg and b/sound/announcer/vox_fem/vox.ogg differ
diff --git a/sound/announcer/vox_fem/vox_login.ogg b/sound/announcer/vox_fem/vox_login.ogg
index 4c349b5835a10..5a240fd494a71 100644
Binary files a/sound/announcer/vox_fem/vox_login.ogg and b/sound/announcer/vox_fem/vox_login.ogg differ
diff --git a/sound/announcer/vox_fem/voxtest.ogg b/sound/announcer/vox_fem/voxtest.ogg
index 6805e68893beb..5d60b7b0bc4e9 100644
Binary files a/sound/announcer/vox_fem/voxtest.ogg and b/sound/announcer/vox_fem/voxtest.ogg differ
diff --git a/sound/announcer/vox_fem/w.ogg b/sound/announcer/vox_fem/w.ogg
index 4e470c240b248..557b8fae7da88 100644
Binary files a/sound/announcer/vox_fem/w.ogg and b/sound/announcer/vox_fem/w.ogg differ
diff --git a/sound/announcer/vox_fem/walk.ogg b/sound/announcer/vox_fem/walk.ogg
index f36ea852b5f9e..5f6be86fdc7c5 100644
Binary files a/sound/announcer/vox_fem/walk.ogg and b/sound/announcer/vox_fem/walk.ogg differ
diff --git a/sound/announcer/vox_fem/wall.ogg b/sound/announcer/vox_fem/wall.ogg
index 594d8b8dcd2fd..ff6a302d53817 100644
Binary files a/sound/announcer/vox_fem/wall.ogg and b/sound/announcer/vox_fem/wall.ogg differ
diff --git a/sound/announcer/vox_fem/wanker.ogg b/sound/announcer/vox_fem/wanker.ogg
index 713189ff71389..37060ec7a17a0 100644
Binary files a/sound/announcer/vox_fem/wanker.ogg and b/sound/announcer/vox_fem/wanker.ogg differ
diff --git a/sound/announcer/vox_fem/want.ogg b/sound/announcer/vox_fem/want.ogg
index 93ad1ad111bcb..f74028afa8b37 100644
Binary files a/sound/announcer/vox_fem/want.ogg and b/sound/announcer/vox_fem/want.ogg differ
diff --git a/sound/announcer/vox_fem/wanted.ogg b/sound/announcer/vox_fem/wanted.ogg
index 0d21f8911c066..0d7403886aee3 100644
Binary files a/sound/announcer/vox_fem/wanted.ogg and b/sound/announcer/vox_fem/wanted.ogg differ
diff --git a/sound/announcer/vox_fem/warden.ogg b/sound/announcer/vox_fem/warden.ogg
index 231f67020e93f..4949b2e591b6e 100644
Binary files a/sound/announcer/vox_fem/warden.ogg and b/sound/announcer/vox_fem/warden.ogg differ
diff --git a/sound/announcer/vox_fem/warm.ogg b/sound/announcer/vox_fem/warm.ogg
index d010b18d59d59..f8acf0229a8a0 100644
Binary files a/sound/announcer/vox_fem/warm.ogg and b/sound/announcer/vox_fem/warm.ogg differ
diff --git a/sound/announcer/vox_fem/warn.ogg b/sound/announcer/vox_fem/warn.ogg
index e0a67bc8ddbdb..1901bd564101c 100644
Binary files a/sound/announcer/vox_fem/warn.ogg and b/sound/announcer/vox_fem/warn.ogg differ
diff --git a/sound/announcer/vox_fem/warning.ogg b/sound/announcer/vox_fem/warning.ogg
index 5ff8ddc98034e..0d331cf829831 100644
Binary files a/sound/announcer/vox_fem/warning.ogg and b/sound/announcer/vox_fem/warning.ogg differ
diff --git a/sound/announcer/vox_fem/was.ogg b/sound/announcer/vox_fem/was.ogg
index 3d092bece9fbf..f8abfc65737ba 100644
Binary files a/sound/announcer/vox_fem/was.ogg and b/sound/announcer/vox_fem/was.ogg differ
diff --git a/sound/announcer/vox_fem/waste.ogg b/sound/announcer/vox_fem/waste.ogg
index 9acb2bc87f2e6..a9f319866f32f 100644
Binary files a/sound/announcer/vox_fem/waste.ogg and b/sound/announcer/vox_fem/waste.ogg differ
diff --git a/sound/announcer/vox_fem/water.ogg b/sound/announcer/vox_fem/water.ogg
index 49791f4da47d3..86b220bac71b5 100644
Binary files a/sound/announcer/vox_fem/water.ogg and b/sound/announcer/vox_fem/water.ogg differ
diff --git a/sound/announcer/vox_fem/way.ogg b/sound/announcer/vox_fem/way.ogg
index fdc121629c9cf..d45c9d4358f74 100644
Binary files a/sound/announcer/vox_fem/way.ogg and b/sound/announcer/vox_fem/way.ogg differ
diff --git a/sound/announcer/vox_fem/ways.ogg b/sound/announcer/vox_fem/ways.ogg
index 8fa99a1c4b74e..649011e7e75a4 100644
Binary files a/sound/announcer/vox_fem/ways.ogg and b/sound/announcer/vox_fem/ways.ogg differ
diff --git a/sound/announcer/vox_fem/we.ogg b/sound/announcer/vox_fem/we.ogg
index c7fd6556a354e..1c4af6a44bf6e 100644
Binary files a/sound/announcer/vox_fem/we.ogg and b/sound/announcer/vox_fem/we.ogg differ
diff --git a/sound/announcer/vox_fem/weak.ogg b/sound/announcer/vox_fem/weak.ogg
index f4551000e64d7..800bdfd732448 100644
Binary files a/sound/announcer/vox_fem/weak.ogg and b/sound/announcer/vox_fem/weak.ogg differ
diff --git a/sound/announcer/vox_fem/weapon.ogg b/sound/announcer/vox_fem/weapon.ogg
index 82861665fda66..4fdbe290677ab 100644
Binary files a/sound/announcer/vox_fem/weapon.ogg and b/sound/announcer/vox_fem/weapon.ogg differ
diff --git a/sound/announcer/vox_fem/welcome.ogg b/sound/announcer/vox_fem/welcome.ogg
index 7da063318c9a5..f4a12224a273d 100644
Binary files a/sound/announcer/vox_fem/welcome.ogg and b/sound/announcer/vox_fem/welcome.ogg differ
diff --git a/sound/announcer/vox_fem/weld.ogg b/sound/announcer/vox_fem/weld.ogg
index 6273ba147a6d4..003b7d988ad68 100644
Binary files a/sound/announcer/vox_fem/weld.ogg and b/sound/announcer/vox_fem/weld.ogg differ
diff --git a/sound/announcer/vox_fem/west.ogg b/sound/announcer/vox_fem/west.ogg
index 7ed4832bfa7e5..bafe57fccb466 100644
Binary files a/sound/announcer/vox_fem/west.ogg and b/sound/announcer/vox_fem/west.ogg differ
diff --git a/sound/announcer/vox_fem/wew.ogg b/sound/announcer/vox_fem/wew.ogg
index 85e493bfd8941..8223b814bfe2a 100644
Binary files a/sound/announcer/vox_fem/wew.ogg and b/sound/announcer/vox_fem/wew.ogg differ
diff --git a/sound/announcer/vox_fem/what.ogg b/sound/announcer/vox_fem/what.ogg
index d8badc41237d1..f4a4dc59060ca 100644
Binary files a/sound/announcer/vox_fem/what.ogg and b/sound/announcer/vox_fem/what.ogg differ
diff --git a/sound/announcer/vox_fem/when.ogg b/sound/announcer/vox_fem/when.ogg
index 310d877facc12..79c1b96a9c339 100644
Binary files a/sound/announcer/vox_fem/when.ogg and b/sound/announcer/vox_fem/when.ogg differ
diff --git a/sound/announcer/vox_fem/where.ogg b/sound/announcer/vox_fem/where.ogg
index 5d432dc312377..34b3aff14b3e7 100644
Binary files a/sound/announcer/vox_fem/where.ogg and b/sound/announcer/vox_fem/where.ogg differ
diff --git a/sound/announcer/vox_fem/which.ogg b/sound/announcer/vox_fem/which.ogg
index ae1486f816afc..e2816bcd99e6a 100644
Binary files a/sound/announcer/vox_fem/which.ogg and b/sound/announcer/vox_fem/which.ogg differ
diff --git a/sound/announcer/vox_fem/while.ogg b/sound/announcer/vox_fem/while.ogg
index 0f696b6247ab1..820150df4be0b 100644
Binary files a/sound/announcer/vox_fem/while.ogg and b/sound/announcer/vox_fem/while.ogg differ
diff --git a/sound/announcer/vox_fem/whiskey.ogg b/sound/announcer/vox_fem/whiskey.ogg
index a82424ae475f8..3f50a5620ee68 100644
Binary files a/sound/announcer/vox_fem/whiskey.ogg and b/sound/announcer/vox_fem/whiskey.ogg differ
diff --git a/sound/announcer/vox_fem/white.ogg b/sound/announcer/vox_fem/white.ogg
index 681ff5a299ce5..7eae7b1633d67 100644
Binary files a/sound/announcer/vox_fem/white.ogg and b/sound/announcer/vox_fem/white.ogg differ
diff --git a/sound/announcer/vox_fem/why.ogg b/sound/announcer/vox_fem/why.ogg
index 4e8038503dd40..90851f36878f2 100644
Binary files a/sound/announcer/vox_fem/why.ogg and b/sound/announcer/vox_fem/why.ogg differ
diff --git a/sound/announcer/vox_fem/wilco.ogg b/sound/announcer/vox_fem/wilco.ogg
index f1a9fbcea8a6a..aff6bc1698a3c 100644
Binary files a/sound/announcer/vox_fem/wilco.ogg and b/sound/announcer/vox_fem/wilco.ogg differ
diff --git a/sound/announcer/vox_fem/will.ogg b/sound/announcer/vox_fem/will.ogg
index d5a9a1a48d097..54309f3110e00 100644
Binary files a/sound/announcer/vox_fem/will.ogg and b/sound/announcer/vox_fem/will.ogg differ
diff --git a/sound/announcer/vox_fem/wing.ogg b/sound/announcer/vox_fem/wing.ogg
index 87c23cf431a33..9222e2b7b0b67 100644
Binary files a/sound/announcer/vox_fem/wing.ogg and b/sound/announcer/vox_fem/wing.ogg differ
diff --git a/sound/announcer/vox_fem/wire.ogg b/sound/announcer/vox_fem/wire.ogg
index 52eacfdbac713..af870ce8b79e1 100644
Binary files a/sound/announcer/vox_fem/wire.ogg and b/sound/announcer/vox_fem/wire.ogg differ
diff --git a/sound/announcer/vox_fem/with.ogg b/sound/announcer/vox_fem/with.ogg
index 961166efba116..513c199c6a636 100644
Binary files a/sound/announcer/vox_fem/with.ogg and b/sound/announcer/vox_fem/with.ogg differ
diff --git a/sound/announcer/vox_fem/without.ogg b/sound/announcer/vox_fem/without.ogg
index d1645c46f51cc..68fd5fb5fb945 100644
Binary files a/sound/announcer/vox_fem/without.ogg and b/sound/announcer/vox_fem/without.ogg differ
diff --git a/sound/announcer/vox_fem/wizard.ogg b/sound/announcer/vox_fem/wizard.ogg
index 823e17304bbb9..28a5ffee737f6 100644
Binary files a/sound/announcer/vox_fem/wizard.ogg and b/sound/announcer/vox_fem/wizard.ogg differ
diff --git a/sound/announcer/vox_fem/wood.ogg b/sound/announcer/vox_fem/wood.ogg
index 2312a10c7c950..e53026b2e4450 100644
Binary files a/sound/announcer/vox_fem/wood.ogg and b/sound/announcer/vox_fem/wood.ogg differ
diff --git a/sound/announcer/vox_fem/woody.ogg b/sound/announcer/vox_fem/woody.ogg
index c617fff4ae47e..a2cbb7f77975f 100644
Binary files a/sound/announcer/vox_fem/woody.ogg and b/sound/announcer/vox_fem/woody.ogg differ
diff --git a/sound/announcer/vox_fem/woop.ogg b/sound/announcer/vox_fem/woop.ogg
index a5006b78c788f..c7ff76deade04 100644
Binary files a/sound/announcer/vox_fem/woop.ogg and b/sound/announcer/vox_fem/woop.ogg differ
diff --git a/sound/announcer/vox_fem/work.ogg b/sound/announcer/vox_fem/work.ogg
index 8ddb06ef1d522..a95aed5701697 100644
Binary files a/sound/announcer/vox_fem/work.ogg and b/sound/announcer/vox_fem/work.ogg differ
diff --git a/sound/announcer/vox_fem/worked.ogg b/sound/announcer/vox_fem/worked.ogg
index 7ea59ff0b2b97..a7ec83a528b79 100644
Binary files a/sound/announcer/vox_fem/worked.ogg and b/sound/announcer/vox_fem/worked.ogg differ
diff --git a/sound/announcer/vox_fem/working.ogg b/sound/announcer/vox_fem/working.ogg
index 8e49779ee5c5b..b541bb9be8d8f 100644
Binary files a/sound/announcer/vox_fem/working.ogg and b/sound/announcer/vox_fem/working.ogg differ
diff --git a/sound/announcer/vox_fem/works.ogg b/sound/announcer/vox_fem/works.ogg
index c35984171ab37..de24d54e75c32 100644
Binary files a/sound/announcer/vox_fem/works.ogg and b/sound/announcer/vox_fem/works.ogg differ
diff --git a/sound/announcer/vox_fem/would.ogg b/sound/announcer/vox_fem/would.ogg
index 2df534769afe8..d4a8ed1319ca9 100644
Binary files a/sound/announcer/vox_fem/would.ogg and b/sound/announcer/vox_fem/would.ogg differ
diff --git a/sound/announcer/vox_fem/wouldnt.ogg b/sound/announcer/vox_fem/wouldnt.ogg
index 0c3b01facee79..8aaab8c6ebe87 100644
Binary files a/sound/announcer/vox_fem/wouldnt.ogg and b/sound/announcer/vox_fem/wouldnt.ogg differ
diff --git a/sound/announcer/vox_fem/wow.ogg b/sound/announcer/vox_fem/wow.ogg
index b760c9a369d29..ab0963da1d07c 100644
Binary files a/sound/announcer/vox_fem/wow.ogg and b/sound/announcer/vox_fem/wow.ogg differ
diff --git a/sound/announcer/vox_fem/wrench.ogg b/sound/announcer/vox_fem/wrench.ogg
index 98cf94db09a5f..0ff4160176cb4 100644
Binary files a/sound/announcer/vox_fem/wrench.ogg and b/sound/announcer/vox_fem/wrench.ogg differ
diff --git a/sound/announcer/vox_fem/wrenching.ogg b/sound/announcer/vox_fem/wrenching.ogg
index b61b70fd363c6..f099636547e2f 100644
Binary files a/sound/announcer/vox_fem/wrenching.ogg and b/sound/announcer/vox_fem/wrenching.ogg differ
diff --git a/sound/announcer/vox_fem/x.ogg b/sound/announcer/vox_fem/x.ogg
index 030a364d4d76c..e6bfc8a56aa90 100644
Binary files a/sound/announcer/vox_fem/x.ogg and b/sound/announcer/vox_fem/x.ogg differ
diff --git a/sound/announcer/vox_fem/xeno.ogg b/sound/announcer/vox_fem/xeno.ogg
index 588890473e501..6defcc064d1c3 100644
Binary files a/sound/announcer/vox_fem/xeno.ogg and b/sound/announcer/vox_fem/xeno.ogg differ
diff --git a/sound/announcer/vox_fem/xenobiology.ogg b/sound/announcer/vox_fem/xenobiology.ogg
index 60e998580acf4..09a5f7deb68df 100644
Binary files a/sound/announcer/vox_fem/xenobiology.ogg and b/sound/announcer/vox_fem/xenobiology.ogg differ
diff --git a/sound/announcer/vox_fem/xenomorph.ogg b/sound/announcer/vox_fem/xenomorph.ogg
index 684a4ce5be060..0645431acd5b9 100644
Binary files a/sound/announcer/vox_fem/xenomorph.ogg and b/sound/announcer/vox_fem/xenomorph.ogg differ
diff --git a/sound/announcer/vox_fem/xenomorphs.ogg b/sound/announcer/vox_fem/xenomorphs.ogg
index c29132a9fd6a1..fa77d6b45e383 100644
Binary files a/sound/announcer/vox_fem/xenomorphs.ogg and b/sound/announcer/vox_fem/xenomorphs.ogg differ
diff --git a/sound/announcer/vox_fem/y.ogg b/sound/announcer/vox_fem/y.ogg
index de3178a943bfc..d5bf2b137745c 100644
Binary files a/sound/announcer/vox_fem/y.ogg and b/sound/announcer/vox_fem/y.ogg differ
diff --git a/sound/announcer/vox_fem/yankee.ogg b/sound/announcer/vox_fem/yankee.ogg
index 07e78d605949f..f5e91600bb80a 100644
Binary files a/sound/announcer/vox_fem/yankee.ogg and b/sound/announcer/vox_fem/yankee.ogg differ
diff --git a/sound/announcer/vox_fem/yards.ogg b/sound/announcer/vox_fem/yards.ogg
index b5008d6bfea12..a6a9df41320c1 100644
Binary files a/sound/announcer/vox_fem/yards.ogg and b/sound/announcer/vox_fem/yards.ogg differ
diff --git a/sound/announcer/vox_fem/year.ogg b/sound/announcer/vox_fem/year.ogg
index ad37e380840f5..e7f6a543be1d6 100644
Binary files a/sound/announcer/vox_fem/year.ogg and b/sound/announcer/vox_fem/year.ogg differ
diff --git a/sound/announcer/vox_fem/yellow.ogg b/sound/announcer/vox_fem/yellow.ogg
index 6611404edf34a..4fb9978c5e9ba 100644
Binary files a/sound/announcer/vox_fem/yellow.ogg and b/sound/announcer/vox_fem/yellow.ogg differ
diff --git a/sound/announcer/vox_fem/yes.ogg b/sound/announcer/vox_fem/yes.ogg
index 1223cac35f5ac..64bf8bcf0d7d4 100644
Binary files a/sound/announcer/vox_fem/yes.ogg and b/sound/announcer/vox_fem/yes.ogg differ
diff --git a/sound/announcer/vox_fem/you.ogg b/sound/announcer/vox_fem/you.ogg
index 54c717ac9c197..abe29541ebdaf 100644
Binary files a/sound/announcer/vox_fem/you.ogg and b/sound/announcer/vox_fem/you.ogg differ
diff --git a/sound/announcer/vox_fem/your.ogg b/sound/announcer/vox_fem/your.ogg
index 45f997c82c210..3b5b3127d9bca 100644
Binary files a/sound/announcer/vox_fem/your.ogg and b/sound/announcer/vox_fem/your.ogg differ
diff --git a/sound/announcer/vox_fem/yourself.ogg b/sound/announcer/vox_fem/yourself.ogg
index d0004f187e7df..88a20808d2a16 100644
Binary files a/sound/announcer/vox_fem/yourself.ogg and b/sound/announcer/vox_fem/yourself.ogg differ
diff --git a/sound/announcer/vox_fem/z.ogg b/sound/announcer/vox_fem/z.ogg
index 07d7ad0540680..88d0f8daa5856 100644
Binary files a/sound/announcer/vox_fem/z.ogg and b/sound/announcer/vox_fem/z.ogg differ
diff --git a/sound/announcer/vox_fem/zap.ogg b/sound/announcer/vox_fem/zap.ogg
index 233653de9131a..dce4bdfd3af83 100644
Binary files a/sound/announcer/vox_fem/zap.ogg and b/sound/announcer/vox_fem/zap.ogg differ
diff --git a/sound/announcer/vox_fem/zauker.ogg b/sound/announcer/vox_fem/zauker.ogg
index ed586c6c3f0f3..d961cce9054b7 100644
Binary files a/sound/announcer/vox_fem/zauker.ogg and b/sound/announcer/vox_fem/zauker.ogg differ
diff --git a/sound/announcer/vox_fem/zero.ogg b/sound/announcer/vox_fem/zero.ogg
index 08a4d8f68baf8..62bf606560c44 100644
Binary files a/sound/announcer/vox_fem/zero.ogg and b/sound/announcer/vox_fem/zero.ogg differ
diff --git a/sound/announcer/vox_fem/zombie.ogg b/sound/announcer/vox_fem/zombie.ogg
index fb1d76daaf641..bc19b7cfd41c3 100644
Binary files a/sound/announcer/vox_fem/zombie.ogg and b/sound/announcer/vox_fem/zombie.ogg differ
diff --git a/sound/announcer/vox_fem/zone.ogg b/sound/announcer/vox_fem/zone.ogg
index 1935032d66ea8..a33833a635967 100644
Binary files a/sound/announcer/vox_fem/zone.ogg and b/sound/announcer/vox_fem/zone.ogg differ
diff --git a/sound/announcer/vox_fem/zulu.ogg b/sound/announcer/vox_fem/zulu.ogg
index a2fffea656d47..a35eaa8ce02ba 100644
Binary files a/sound/announcer/vox_fem/zulu.ogg and b/sound/announcer/vox_fem/zulu.ogg differ
diff --git a/sound/effects/achievement/beeps_jingle.ogg b/sound/effects/achievement/beeps_jingle.ogg
index 0d4b647f88d53..13c58edbdfa35 100644
Binary files a/sound/effects/achievement/beeps_jingle.ogg and b/sound/effects/achievement/beeps_jingle.ogg differ
diff --git a/sound/effects/achievement/glockenspiel_ping.ogg b/sound/effects/achievement/glockenspiel_ping.ogg
index f25300071292d..47d7588d7dc76 100644
Binary files a/sound/effects/achievement/glockenspiel_ping.ogg and b/sound/effects/achievement/glockenspiel_ping.ogg differ
diff --git a/sound/effects/achievement/tada_fanfare.ogg b/sound/effects/achievement/tada_fanfare.ogg
index 055635e9decae..cca6d26c7f217 100644
Binary files a/sound/effects/achievement/tada_fanfare.ogg and b/sound/effects/achievement/tada_fanfare.ogg differ
diff --git a/sound/effects/adminhelp.ogg b/sound/effects/adminhelp.ogg
index 704c0fd6d20fa..71561366a3f4f 100644
Binary files a/sound/effects/adminhelp.ogg and b/sound/effects/adminhelp.ogg differ
diff --git a/sound/effects/alert.ogg b/sound/effects/alert.ogg
index e68847321e200..dc2ca76a8e5c3 100644
Binary files a/sound/effects/alert.ogg and b/sound/effects/alert.ogg differ
diff --git a/sound/effects/angryboat.ogg b/sound/effects/angryboat.ogg
index 0cf6d1723fc9b..ddd69b15f65dc 100644
Binary files a/sound/effects/angryboat.ogg and b/sound/effects/angryboat.ogg differ
diff --git a/sound/effects/arcade_jump.ogg b/sound/effects/arcade_jump.ogg
index 65f0cc448b564..3c4be684bbfc8 100644
Binary files a/sound/effects/arcade_jump.ogg and b/sound/effects/arcade_jump.ogg differ
diff --git a/sound/effects/bamf.ogg b/sound/effects/bamf.ogg
index 7ad6e0e7e73cf..8c8e2503e1cc3 100644
Binary files a/sound/effects/bamf.ogg and b/sound/effects/bamf.ogg differ
diff --git a/sound/effects/bang.ogg b/sound/effects/bang.ogg
index 656983f098083..1b1be67d7f829 100644
Binary files a/sound/effects/bang.ogg and b/sound/effects/bang.ogg differ
diff --git a/sound/effects/bigsplash.ogg b/sound/effects/bigsplash.ogg
index 772e8c5b260eb..4524ec1c252b5 100644
Binary files a/sound/effects/bigsplash.ogg and b/sound/effects/bigsplash.ogg differ
diff --git a/sound/effects/bin/bin_close.ogg b/sound/effects/bin/bin_close.ogg
index a50c7db5b6b26..d17a8148489c8 100644
Binary files a/sound/effects/bin/bin_close.ogg and b/sound/effects/bin/bin_close.ogg differ
diff --git a/sound/effects/bin/bin_open.ogg b/sound/effects/bin/bin_open.ogg
index 2f351aa18744e..41b8fc15f5c16 100644
Binary files a/sound/effects/bin/bin_open.ogg and b/sound/effects/bin/bin_open.ogg differ
diff --git a/sound/effects/blastdoor.ogg b/sound/effects/blastdoor.ogg
index 5d62c27130686..b2acb4701f9f2 100644
Binary files a/sound/effects/blastdoor.ogg and b/sound/effects/blastdoor.ogg differ
diff --git a/sound/effects/blob/attackblob.ogg b/sound/effects/blob/attackblob.ogg
index 87256b04468ea..7aed704892595 100644
Binary files a/sound/effects/blob/attackblob.ogg and b/sound/effects/blob/attackblob.ogg differ
diff --git a/sound/effects/blob/blobattack.ogg b/sound/effects/blob/blobattack.ogg
index c9fcfbee4489f..1f2def31d2fde 100644
Binary files a/sound/effects/blob/blobattack.ogg and b/sound/effects/blob/blobattack.ogg differ
diff --git a/sound/effects/bodyfall/bodyfall1.ogg b/sound/effects/bodyfall/bodyfall1.ogg
index 6a8eecefeecd4..dc23f2716d7c9 100644
Binary files a/sound/effects/bodyfall/bodyfall1.ogg and b/sound/effects/bodyfall/bodyfall1.ogg differ
diff --git a/sound/effects/bodyfall/bodyfall2.ogg b/sound/effects/bodyfall/bodyfall2.ogg
index b41bd746c53fb..54590dd4d0040 100644
Binary files a/sound/effects/bodyfall/bodyfall2.ogg and b/sound/effects/bodyfall/bodyfall2.ogg differ
diff --git a/sound/effects/bodyfall/bodyfall3.ogg b/sound/effects/bodyfall/bodyfall3.ogg
index ef2d5ca700633..82f46411823f8 100644
Binary files a/sound/effects/bodyfall/bodyfall3.ogg and b/sound/effects/bodyfall/bodyfall3.ogg differ
diff --git a/sound/effects/bodyfall/bodyfall4.ogg b/sound/effects/bodyfall/bodyfall4.ogg
index 8951e75b40b17..162fa5519fb8e 100644
Binary files a/sound/effects/bodyfall/bodyfall4.ogg and b/sound/effects/bodyfall/bodyfall4.ogg differ
diff --git a/sound/effects/boing.ogg b/sound/effects/boing.ogg
index 8328cc3392613..9db4b1034bf60 100644
Binary files a/sound/effects/boing.ogg and b/sound/effects/boing.ogg differ
diff --git a/sound/effects/bonk.ogg b/sound/effects/bonk.ogg
index 709078c1efb47..67816a9dba94c 100644
Binary files a/sound/effects/bonk.ogg and b/sound/effects/bonk.ogg differ
diff --git a/sound/effects/break_stone.ogg b/sound/effects/break_stone.ogg
index 64256cb8f90a3..1c371a8420586 100644
Binary files a/sound/effects/break_stone.ogg and b/sound/effects/break_stone.ogg differ
diff --git a/sound/effects/bubbles/bubbles.ogg b/sound/effects/bubbles/bubbles.ogg
index c028e8aa9825c..fd9d57eb56291 100644
Binary files a/sound/effects/bubbles/bubbles.ogg and b/sound/effects/bubbles/bubbles.ogg differ
diff --git a/sound/effects/bubbles/bubbles2.ogg b/sound/effects/bubbles/bubbles2.ogg
index 42cb0c021b41f..fad9b06bb0a34 100644
Binary files a/sound/effects/bubbles/bubbles2.ogg and b/sound/effects/bubbles/bubbles2.ogg differ
diff --git a/sound/effects/bush/crunchybushwhack1.ogg b/sound/effects/bush/crunchybushwhack1.ogg
index 3ed3ab0a5fa3a..44a6d2a63763a 100644
Binary files a/sound/effects/bush/crunchybushwhack1.ogg and b/sound/effects/bush/crunchybushwhack1.ogg differ
diff --git a/sound/effects/bush/crunchybushwhack2.ogg b/sound/effects/bush/crunchybushwhack2.ogg
index e406cc5274b87..72d8d431de272 100644
Binary files a/sound/effects/bush/crunchybushwhack2.ogg and b/sound/effects/bush/crunchybushwhack2.ogg differ
diff --git a/sound/effects/bush/crunchybushwhack3.ogg b/sound/effects/bush/crunchybushwhack3.ogg
index 6f3e982b5a866..3a50ef440b59e 100644
Binary files a/sound/effects/bush/crunchybushwhack3.ogg and b/sound/effects/bush/crunchybushwhack3.ogg differ
diff --git a/sound/effects/butcher.ogg b/sound/effects/butcher.ogg
index 2e4a0d2ddc719..488b7beb6a671 100644
Binary files a/sound/effects/butcher.ogg and b/sound/effects/butcher.ogg differ
diff --git a/sound/effects/can/can_open1.ogg b/sound/effects/can/can_open1.ogg
deleted file mode 100644
index 5da8d89ff066b..0000000000000
Binary files a/sound/effects/can/can_open1.ogg and /dev/null differ
diff --git a/sound/effects/can/can_open2.ogg b/sound/effects/can/can_open2.ogg
deleted file mode 100644
index 1cf6b1221b703..0000000000000
Binary files a/sound/effects/can/can_open2.ogg and /dev/null differ
diff --git a/sound/effects/can/can_open3.ogg b/sound/effects/can/can_open3.ogg
deleted file mode 100644
index ca29d0661c04b..0000000000000
Binary files a/sound/effects/can/can_open3.ogg and /dev/null differ
diff --git a/sound/effects/can/can_pop.ogg b/sound/effects/can/can_pop.ogg
deleted file mode 100644
index ba9d21bf50ea8..0000000000000
Binary files a/sound/effects/can/can_pop.ogg and /dev/null differ
diff --git a/sound/effects/can/can_shake.ogg b/sound/effects/can/can_shake.ogg
deleted file mode 100644
index 51d53c51ae8eb..0000000000000
Binary files a/sound/effects/can/can_shake.ogg and /dev/null differ
diff --git a/sound/effects/cartoon_sfx/cartoon_pop.ogg b/sound/effects/cartoon_sfx/cartoon_pop.ogg
index aca8c7ade4eae..bc5f9cebd906b 100644
Binary files a/sound/effects/cartoon_sfx/cartoon_pop.ogg and b/sound/effects/cartoon_sfx/cartoon_pop.ogg differ
diff --git a/sound/effects/cartoon_sfx/cartoon_splat.ogg b/sound/effects/cartoon_sfx/cartoon_splat.ogg
index c99c7f1b25fed..966810ebaf2a2 100644
Binary files a/sound/effects/cartoon_sfx/cartoon_splat.ogg and b/sound/effects/cartoon_sfx/cartoon_splat.ogg differ
diff --git a/sound/effects/cashregister.ogg b/sound/effects/cashregister.ogg
index fa1f29f1de2c5..8c5e2fdbd1107 100644
Binary files a/sound/effects/cashregister.ogg and b/sound/effects/cashregister.ogg differ
diff --git a/sound/effects/chemistry/ahaha.ogg b/sound/effects/chemistry/ahaha.ogg
index 0fedd32155ad7..dcea90a3c0df1 100644
Binary files a/sound/effects/chemistry/ahaha.ogg and b/sound/effects/chemistry/ahaha.ogg differ
diff --git a/sound/effects/chemistry/bluespace.ogg b/sound/effects/chemistry/bluespace.ogg
index 253e62702eaf6..004898c22f307 100644
Binary files a/sound/effects/chemistry/bluespace.ogg and b/sound/effects/chemistry/bluespace.ogg differ
diff --git a/sound/effects/chemistry/bufferadd.ogg b/sound/effects/chemistry/bufferadd.ogg
index 31bc4404252e6..7609477869b1d 100644
Binary files a/sound/effects/chemistry/bufferadd.ogg and b/sound/effects/chemistry/bufferadd.ogg differ
diff --git a/sound/effects/chemistry/catalyst.ogg b/sound/effects/chemistry/catalyst.ogg
index f26115bfc73ae..9e652257e48ea 100644
Binary files a/sound/effects/chemistry/catalyst.ogg and b/sound/effects/chemistry/catalyst.ogg differ
diff --git a/sound/effects/chemistry/heatdam.ogg b/sound/effects/chemistry/heatdam.ogg
index ab8492e9660a4..9287de8575aa6 100644
Binary files a/sound/effects/chemistry/heatdam.ogg and b/sound/effects/chemistry/heatdam.ogg differ
diff --git a/sound/effects/chemistry/saturnx_fade.ogg b/sound/effects/chemistry/saturnx_fade.ogg
index aada84c4da838..322bca4138334 100644
Binary files a/sound/effects/chemistry/saturnx_fade.ogg and b/sound/effects/chemistry/saturnx_fade.ogg differ
diff --git a/sound/effects/chemistry/shockwave_explosion.ogg b/sound/effects/chemistry/shockwave_explosion.ogg
index 1aee414278616..212c5466bf71d 100644
Binary files a/sound/effects/chemistry/shockwave_explosion.ogg and b/sound/effects/chemistry/shockwave_explosion.ogg differ
diff --git a/sound/effects/chipbagpop.ogg b/sound/effects/chipbagpop.ogg
index 9f975ab6d2474..90e358a50f07e 100644
Binary files a/sound/effects/chipbagpop.ogg and b/sound/effects/chipbagpop.ogg differ
diff --git a/sound/effects/clang.ogg b/sound/effects/clang.ogg
index 2302c20d1eaa9..13ad2b7e17e80 100644
Binary files a/sound/effects/clang.ogg and b/sound/effects/clang.ogg differ
diff --git a/sound/effects/clock_tick.ogg b/sound/effects/clock_tick.ogg
index 4d31c09cf2e8f..099b0b28abc02 100644
Binary files a/sound/effects/clock_tick.ogg and b/sound/effects/clock_tick.ogg differ
diff --git a/sound/effects/clockcult_gateway_disrupted.ogg b/sound/effects/clockcult_gateway_disrupted.ogg
index 7ab734dc6c85a..c46e429e4bb5e 100644
Binary files a/sound/effects/clockcult_gateway_disrupted.ogg and b/sound/effects/clockcult_gateway_disrupted.ogg differ
diff --git a/sound/effects/cloth_rip.ogg b/sound/effects/cloth_rip.ogg
index 6000881a7a1cc..d80f0a8174bb0 100644
Binary files a/sound/effects/cloth_rip.ogg and b/sound/effects/cloth_rip.ogg differ
diff --git a/sound/effects/coin2.ogg b/sound/effects/coin2.ogg
index e746bb4b5911b..40866ee1bf94f 100644
Binary files a/sound/effects/coin2.ogg and b/sound/effects/coin2.ogg differ
diff --git a/sound/effects/comfyfire.ogg b/sound/effects/comfyfire.ogg
index 148c9c2da1524..9845963d8d88e 100644
Binary files a/sound/effects/comfyfire.ogg and b/sound/effects/comfyfire.ogg differ
diff --git a/sound/effects/compressed_air/compressed_air1.ogg b/sound/effects/compressed_air/compressed_air1.ogg
index 5fb1ff0672015..95ff29fcb07ab 100644
Binary files a/sound/effects/compressed_air/compressed_air1.ogg and b/sound/effects/compressed_air/compressed_air1.ogg differ
diff --git a/sound/effects/compressed_air/compressed_air2.ogg b/sound/effects/compressed_air/compressed_air2.ogg
index d26816f28e183..b05f52ee48575 100644
Binary files a/sound/effects/compressed_air/compressed_air2.ogg and b/sound/effects/compressed_air/compressed_air2.ogg differ
diff --git a/sound/effects/compressed_air/tank_insert_clunky.ogg b/sound/effects/compressed_air/tank_insert_clunky.ogg
index 585961770afae..4f9e5f751caec 100644
Binary files a/sound/effects/compressed_air/tank_insert_clunky.ogg and b/sound/effects/compressed_air/tank_insert_clunky.ogg differ
diff --git a/sound/effects/compressed_air/tank_remove_thunk.ogg b/sound/effects/compressed_air/tank_remove_thunk.ogg
index db32055ce432c..01b76f1553146 100644
Binary files a/sound/effects/compressed_air/tank_remove_thunk.ogg and b/sound/effects/compressed_air/tank_remove_thunk.ogg differ
diff --git a/sound/effects/confirmdropoff.ogg b/sound/effects/confirmdropoff.ogg
index 835d931992180..9f84031b5b899 100644
Binary files a/sound/effects/confirmdropoff.ogg and b/sound/effects/confirmdropoff.ogg differ
diff --git a/sound/effects/constructform.ogg b/sound/effects/constructform.ogg
index ee34a3a4f3e6b..51783d2bb59d3 100644
Binary files a/sound/effects/constructform.ogg and b/sound/effects/constructform.ogg differ
diff --git a/sound/effects/creak/creak1.ogg b/sound/effects/creak/creak1.ogg
index 0cad4802ffa95..bf54d42a98277 100644
Binary files a/sound/effects/creak/creak1.ogg and b/sound/effects/creak/creak1.ogg differ
diff --git a/sound/effects/creak/creak2.ogg b/sound/effects/creak/creak2.ogg
index 707bf39e338ec..a6d45792a4e5b 100644
Binary files a/sound/effects/creak/creak2.ogg and b/sound/effects/creak/creak2.ogg differ
diff --git a/sound/effects/creak/creak3.ogg b/sound/effects/creak/creak3.ogg
index 88ff37a339ed5..737c4c5680563 100644
Binary files a/sound/effects/creak/creak3.ogg and b/sound/effects/creak/creak3.ogg differ
diff --git a/sound/effects/curse/curse1.ogg b/sound/effects/curse/curse1.ogg
index 6bc2c55f21774..155c23e3e85dc 100644
Binary files a/sound/effects/curse/curse1.ogg and b/sound/effects/curse/curse1.ogg differ
diff --git a/sound/effects/curse/curse2.ogg b/sound/effects/curse/curse2.ogg
index 52998d7bd3623..cdfc13e5ceb76 100644
Binary files a/sound/effects/curse/curse2.ogg and b/sound/effects/curse/curse2.ogg differ
diff --git a/sound/effects/curse/curse3.ogg b/sound/effects/curse/curse3.ogg
index cfa58c39fed3d..5ceb74b5c9164 100644
Binary files a/sound/effects/curse/curse3.ogg and b/sound/effects/curse/curse3.ogg differ
diff --git a/sound/effects/curse/curse4.ogg b/sound/effects/curse/curse4.ogg
index a5672ed7cc9a3..c720569bd2cfb 100644
Binary files a/sound/effects/curse/curse4.ogg and b/sound/effects/curse/curse4.ogg differ
diff --git a/sound/effects/curse/curse5.ogg b/sound/effects/curse/curse5.ogg
index 529d6f3606554..9a2e9db368a73 100644
Binary files a/sound/effects/curse/curse5.ogg and b/sound/effects/curse/curse5.ogg differ
diff --git a/sound/effects/curse/curse6.ogg b/sound/effects/curse/curse6.ogg
index 52e96143aa4e3..c05568f20c524 100644
Binary files a/sound/effects/curse/curse6.ogg and b/sound/effects/curse/curse6.ogg differ
diff --git a/sound/effects/curse/curseattack.ogg b/sound/effects/curse/curseattack.ogg
index 550ab3015611f..552a2a572a34f 100644
Binary files a/sound/effects/curse/curseattack.ogg and b/sound/effects/curse/curseattack.ogg differ
diff --git a/sound/effects/curtain.ogg b/sound/effects/curtain.ogg
index 2dabbf5862937..e72cb75f411d2 100644
Binary files a/sound/effects/curtain.ogg and b/sound/effects/curtain.ogg differ
diff --git a/sound/effects/desecration/desecration-01.ogg b/sound/effects/desecration/desecration-01.ogg
index 29bc568c57515..44072ec606804 100644
Binary files a/sound/effects/desecration/desecration-01.ogg and b/sound/effects/desecration/desecration-01.ogg differ
diff --git a/sound/effects/desecration/desecration-02.ogg b/sound/effects/desecration/desecration-02.ogg
index 761a73a7b9f82..3462470247f94 100644
Binary files a/sound/effects/desecration/desecration-02.ogg and b/sound/effects/desecration/desecration-02.ogg differ
diff --git a/sound/effects/desecration/desecration-03.ogg b/sound/effects/desecration/desecration-03.ogg
index 876de18de5075..237eac0b3773a 100644
Binary files a/sound/effects/desecration/desecration-03.ogg and b/sound/effects/desecration/desecration-03.ogg differ
diff --git a/sound/effects/dimensional_rend.ogg b/sound/effects/dimensional_rend.ogg
index 98bd3ef193f11..e01d7d690d23f 100644
Binary files a/sound/effects/dimensional_rend.ogg and b/sound/effects/dimensional_rend.ogg differ
diff --git a/sound/effects/dismember.ogg b/sound/effects/dismember.ogg
index f5015ad961584..e85351444967f 100644
Binary files a/sound/effects/dismember.ogg and b/sound/effects/dismember.ogg differ
diff --git a/sound/effects/doorcreaky.ogg b/sound/effects/doorcreaky.ogg
index d2e8d50b112f9..5347865266640 100644
Binary files a/sound/effects/doorcreaky.ogg and b/sound/effects/doorcreaky.ogg differ
diff --git a/sound/effects/emotes/assslap.ogg b/sound/effects/emotes/assslap.ogg
index 2a1bb0d7779f2..536e83779667f 100644
Binary files a/sound/effects/emotes/assslap.ogg and b/sound/effects/emotes/assslap.ogg differ
diff --git a/sound/effects/emotes/kiss.ogg b/sound/effects/emotes/kiss.ogg
index 699b13a8de84a..a31961ad3642f 100644
Binary files a/sound/effects/emotes/kiss.ogg and b/sound/effects/emotes/kiss.ogg differ
diff --git a/sound/effects/empulse.ogg b/sound/effects/empulse.ogg
index f0eab64643e70..fa7c066fbc7e7 100644
Binary files a/sound/effects/empulse.ogg and b/sound/effects/empulse.ogg differ
diff --git a/sound/effects/energyshieldbash.ogg b/sound/effects/energyshieldbash.ogg
index c8d5bee557222..52093b43febcc 100644
Binary files a/sound/effects/energyshieldbash.ogg and b/sound/effects/energyshieldbash.ogg differ
diff --git a/sound/effects/explosion/explosion1.ogg b/sound/effects/explosion/explosion1.ogg
index ee4bcaabf4d79..f06e5bb7b8498 100644
Binary files a/sound/effects/explosion/explosion1.ogg and b/sound/effects/explosion/explosion1.ogg differ
diff --git a/sound/effects/explosion/explosion2.ogg b/sound/effects/explosion/explosion2.ogg
index 92c8835bd8500..c46a04d507274 100644
Binary files a/sound/effects/explosion/explosion2.ogg and b/sound/effects/explosion/explosion2.ogg differ
diff --git a/sound/effects/explosion/explosion3.ogg b/sound/effects/explosion/explosion3.ogg
index 81422415d440c..aceddedd07499 100644
Binary files a/sound/effects/explosion/explosion3.ogg and b/sound/effects/explosion/explosion3.ogg differ
diff --git a/sound/effects/explosion/explosion_distant.ogg b/sound/effects/explosion/explosion_distant.ogg
index 795d450c89670..2df0bcbeb7b2d 100644
Binary files a/sound/effects/explosion/explosion_distant.ogg and b/sound/effects/explosion/explosion_distant.ogg differ
diff --git a/sound/effects/explosion/explosioncreak1.ogg b/sound/effects/explosion/explosioncreak1.ogg
index 474f5febb5cad..b2f1cea7a39f1 100644
Binary files a/sound/effects/explosion/explosioncreak1.ogg and b/sound/effects/explosion/explosioncreak1.ogg differ
diff --git a/sound/effects/explosion/explosioncreak2.ogg b/sound/effects/explosion/explosioncreak2.ogg
index 75d323eb06f8c..9f16b526f0cb4 100644
Binary files a/sound/effects/explosion/explosioncreak2.ogg and b/sound/effects/explosion/explosioncreak2.ogg differ
diff --git a/sound/effects/explosion/explosionfar.ogg b/sound/effects/explosion/explosionfar.ogg
index a2834885dde0b..455938fbc88bc 100644
Binary files a/sound/effects/explosion/explosionfar.ogg and b/sound/effects/explosion/explosionfar.ogg differ
diff --git a/sound/effects/extinguish.ogg b/sound/effects/extinguish.ogg
index 5c6676afbbd9d..05573f45e0448 100644
Binary files a/sound/effects/extinguish.ogg and b/sound/effects/extinguish.ogg differ
diff --git a/sound/effects/families_police.ogg b/sound/effects/families_police.ogg
index 38940f3f0a1e7..2adc910aea8be 100644
Binary files a/sound/effects/families_police.ogg and b/sound/effects/families_police.ogg differ
diff --git a/sound/effects/fish_splash.ogg b/sound/effects/fish_splash.ogg
index 4c5a68bab79ab..1cf5d1359a0bf 100644
Binary files a/sound/effects/fish_splash.ogg and b/sound/effects/fish_splash.ogg differ
diff --git a/sound/effects/flatline3.ogg b/sound/effects/flatline3.ogg
index 1430ee7429b84..893d228b35ee0 100644
Binary files a/sound/effects/flatline3.ogg and b/sound/effects/flatline3.ogg differ
diff --git a/sound/effects/footstep/asteroid1.ogg b/sound/effects/footstep/asteroid1.ogg
index 1cb215dc78245..3a8992b5ffc2d 100644
Binary files a/sound/effects/footstep/asteroid1.ogg and b/sound/effects/footstep/asteroid1.ogg differ
diff --git a/sound/effects/footstep/asteroid2.ogg b/sound/effects/footstep/asteroid2.ogg
index 331d0ef2417f2..617cdafa28dd1 100644
Binary files a/sound/effects/footstep/asteroid2.ogg and b/sound/effects/footstep/asteroid2.ogg differ
diff --git a/sound/effects/footstep/asteroid3.ogg b/sound/effects/footstep/asteroid3.ogg
index 90fbf251a0e38..8160c38f87fee 100644
Binary files a/sound/effects/footstep/asteroid3.ogg and b/sound/effects/footstep/asteroid3.ogg differ
diff --git a/sound/effects/footstep/asteroid4.ogg b/sound/effects/footstep/asteroid4.ogg
index 186ff17a43915..c654b4616424d 100644
Binary files a/sound/effects/footstep/asteroid4.ogg and b/sound/effects/footstep/asteroid4.ogg differ
diff --git a/sound/effects/footstep/asteroid5.ogg b/sound/effects/footstep/asteroid5.ogg
index 0ea4c962d0df3..7c36d372b9aca 100644
Binary files a/sound/effects/footstep/asteroid5.ogg and b/sound/effects/footstep/asteroid5.ogg differ
diff --git a/sound/effects/footstep/carpet1.ogg b/sound/effects/footstep/carpet1.ogg
index 2735a9bf3dce3..7ad9708013351 100644
Binary files a/sound/effects/footstep/carpet1.ogg and b/sound/effects/footstep/carpet1.ogg differ
diff --git a/sound/effects/footstep/carpet2.ogg b/sound/effects/footstep/carpet2.ogg
index 07e5f2320aad2..71fdbb36ad9cd 100644
Binary files a/sound/effects/footstep/carpet2.ogg and b/sound/effects/footstep/carpet2.ogg differ
diff --git a/sound/effects/footstep/carpet3.ogg b/sound/effects/footstep/carpet3.ogg
index edb0193f6e22b..df208596a79d6 100644
Binary files a/sound/effects/footstep/carpet3.ogg and b/sound/effects/footstep/carpet3.ogg differ
diff --git a/sound/effects/footstep/carpet4.ogg b/sound/effects/footstep/carpet4.ogg
index c9598e2b7367e..cf77b837d7fb9 100644
Binary files a/sound/effects/footstep/carpet4.ogg and b/sound/effects/footstep/carpet4.ogg differ
diff --git a/sound/effects/footstep/carpet5.ogg b/sound/effects/footstep/carpet5.ogg
index 076818323ae9e..a652bd7ed4181 100644
Binary files a/sound/effects/footstep/carpet5.ogg and b/sound/effects/footstep/carpet5.ogg differ
diff --git a/sound/effects/footstep/carpetbarefoot1.ogg b/sound/effects/footstep/carpetbarefoot1.ogg
index 81615d2970534..d66db03073941 100644
Binary files a/sound/effects/footstep/carpetbarefoot1.ogg and b/sound/effects/footstep/carpetbarefoot1.ogg differ
diff --git a/sound/effects/footstep/carpetbarefoot2.ogg b/sound/effects/footstep/carpetbarefoot2.ogg
index d1c7e1627ec2b..783ff831a3c64 100644
Binary files a/sound/effects/footstep/carpetbarefoot2.ogg and b/sound/effects/footstep/carpetbarefoot2.ogg differ
diff --git a/sound/effects/footstep/carpetbarefoot3.ogg b/sound/effects/footstep/carpetbarefoot3.ogg
index 13ecb3398b1da..2277444774a04 100644
Binary files a/sound/effects/footstep/carpetbarefoot3.ogg and b/sound/effects/footstep/carpetbarefoot3.ogg differ
diff --git a/sound/effects/footstep/carpetbarefoot4.ogg b/sound/effects/footstep/carpetbarefoot4.ogg
index 31850250becbf..7161913a671f0 100644
Binary files a/sound/effects/footstep/carpetbarefoot4.ogg and b/sound/effects/footstep/carpetbarefoot4.ogg differ
diff --git a/sound/effects/footstep/carpetbarefoot5.ogg b/sound/effects/footstep/carpetbarefoot5.ogg
index e9a44765b18ff..97969cefc952b 100644
Binary files a/sound/effects/footstep/carpetbarefoot5.ogg and b/sound/effects/footstep/carpetbarefoot5.ogg differ
diff --git a/sound/effects/footstep/catwalk1.ogg b/sound/effects/footstep/catwalk1.ogg
index 5d6ad7b4a00fb..759d13108a750 100644
Binary files a/sound/effects/footstep/catwalk1.ogg and b/sound/effects/footstep/catwalk1.ogg differ
diff --git a/sound/effects/footstep/catwalk2.ogg b/sound/effects/footstep/catwalk2.ogg
index 07a624dbe4907..fc1d997025ceb 100644
Binary files a/sound/effects/footstep/catwalk2.ogg and b/sound/effects/footstep/catwalk2.ogg differ
diff --git a/sound/effects/footstep/catwalk3.ogg b/sound/effects/footstep/catwalk3.ogg
index acff22e3864fa..596c75d47a205 100644
Binary files a/sound/effects/footstep/catwalk3.ogg and b/sound/effects/footstep/catwalk3.ogg differ
diff --git a/sound/effects/footstep/catwalk4.ogg b/sound/effects/footstep/catwalk4.ogg
index 7235a6b9febec..745deaf90685f 100644
Binary files a/sound/effects/footstep/catwalk4.ogg and b/sound/effects/footstep/catwalk4.ogg differ
diff --git a/sound/effects/footstep/catwalk5.ogg b/sound/effects/footstep/catwalk5.ogg
index c33f248acd6c4..c5c62f402c901 100644
Binary files a/sound/effects/footstep/catwalk5.ogg and b/sound/effects/footstep/catwalk5.ogg differ
diff --git a/sound/effects/footstep/clownstep1.ogg b/sound/effects/footstep/clownstep1.ogg
index 740fb5fd9f409..99aa5377a6863 100644
Binary files a/sound/effects/footstep/clownstep1.ogg and b/sound/effects/footstep/clownstep1.ogg differ
diff --git a/sound/effects/footstep/clownstep2.ogg b/sound/effects/footstep/clownstep2.ogg
index 5a5426b3fe4eb..14bd77fe53a3c 100644
Binary files a/sound/effects/footstep/clownstep2.ogg and b/sound/effects/footstep/clownstep2.ogg differ
diff --git a/sound/effects/footstep/crawl1.ogg b/sound/effects/footstep/crawl1.ogg
index 61a73a58d0cdb..39647f3c7003b 100644
Binary files a/sound/effects/footstep/crawl1.ogg and b/sound/effects/footstep/crawl1.ogg differ
diff --git a/sound/effects/footstep/floor1.ogg b/sound/effects/footstep/floor1.ogg
index 1e3e155839969..7dd380b5d4602 100644
Binary files a/sound/effects/footstep/floor1.ogg and b/sound/effects/footstep/floor1.ogg differ
diff --git a/sound/effects/footstep/floor2.ogg b/sound/effects/footstep/floor2.ogg
index cce5a25d82935..d47a8cec5c1df 100644
Binary files a/sound/effects/footstep/floor2.ogg and b/sound/effects/footstep/floor2.ogg differ
diff --git a/sound/effects/footstep/floor3.ogg b/sound/effects/footstep/floor3.ogg
index 16ab67f729cbc..a2f02ffff4833 100644
Binary files a/sound/effects/footstep/floor3.ogg and b/sound/effects/footstep/floor3.ogg differ
diff --git a/sound/effects/footstep/floor4.ogg b/sound/effects/footstep/floor4.ogg
index 9ef15430ff8c1..95ed8948fad4b 100644
Binary files a/sound/effects/footstep/floor4.ogg and b/sound/effects/footstep/floor4.ogg differ
diff --git a/sound/effects/footstep/floor5.ogg b/sound/effects/footstep/floor5.ogg
index 0f6a66057deb4..a57338834f606 100644
Binary files a/sound/effects/footstep/floor5.ogg and b/sound/effects/footstep/floor5.ogg differ
diff --git a/sound/effects/footstep/gib_step.ogg b/sound/effects/footstep/gib_step.ogg
index 6052933c0f314..d465109b421e0 100644
Binary files a/sound/effects/footstep/gib_step.ogg and b/sound/effects/footstep/gib_step.ogg differ
diff --git a/sound/effects/footstep/glass_step.ogg b/sound/effects/footstep/glass_step.ogg
index 2141a97c604c4..c12c8f5a7cc92 100644
Binary files a/sound/effects/footstep/glass_step.ogg and b/sound/effects/footstep/glass_step.ogg differ
diff --git a/sound/effects/footstep/grass1.ogg b/sound/effects/footstep/grass1.ogg
index 357547cd77a38..a9a599a234b13 100644
Binary files a/sound/effects/footstep/grass1.ogg and b/sound/effects/footstep/grass1.ogg differ
diff --git a/sound/effects/footstep/grass2.ogg b/sound/effects/footstep/grass2.ogg
index 75bf8657e8d92..872ad758a8cd2 100644
Binary files a/sound/effects/footstep/grass2.ogg and b/sound/effects/footstep/grass2.ogg differ
diff --git a/sound/effects/footstep/grass3.ogg b/sound/effects/footstep/grass3.ogg
index 04f82872b1d21..af61d68de8ebf 100644
Binary files a/sound/effects/footstep/grass3.ogg and b/sound/effects/footstep/grass3.ogg differ
diff --git a/sound/effects/footstep/grass4.ogg b/sound/effects/footstep/grass4.ogg
index 6d736f2fb2d11..b9c2e29cae1e0 100644
Binary files a/sound/effects/footstep/grass4.ogg and b/sound/effects/footstep/grass4.ogg differ
diff --git a/sound/effects/footstep/hardbarefoot1.ogg b/sound/effects/footstep/hardbarefoot1.ogg
index 2614872191782..8c6bf7df03a17 100644
Binary files a/sound/effects/footstep/hardbarefoot1.ogg and b/sound/effects/footstep/hardbarefoot1.ogg differ
diff --git a/sound/effects/footstep/hardbarefoot2.ogg b/sound/effects/footstep/hardbarefoot2.ogg
index 7d89d96105b92..8d16ac8ac7e12 100644
Binary files a/sound/effects/footstep/hardbarefoot2.ogg and b/sound/effects/footstep/hardbarefoot2.ogg differ
diff --git a/sound/effects/footstep/hardbarefoot3.ogg b/sound/effects/footstep/hardbarefoot3.ogg
index 639751fab0f0a..773bba40caf8f 100644
Binary files a/sound/effects/footstep/hardbarefoot3.ogg and b/sound/effects/footstep/hardbarefoot3.ogg differ
diff --git a/sound/effects/footstep/hardbarefoot4.ogg b/sound/effects/footstep/hardbarefoot4.ogg
index 9cf363a18cacc..db4d29827f7d1 100644
Binary files a/sound/effects/footstep/hardbarefoot4.ogg and b/sound/effects/footstep/hardbarefoot4.ogg differ
diff --git a/sound/effects/footstep/hardbarefoot5.ogg b/sound/effects/footstep/hardbarefoot5.ogg
index 72ebeca84d3db..966d988d24107 100644
Binary files a/sound/effects/footstep/hardbarefoot5.ogg and b/sound/effects/footstep/hardbarefoot5.ogg differ
diff --git a/sound/effects/footstep/hardclaw1.ogg b/sound/effects/footstep/hardclaw1.ogg
index 1d66eb4d49919..2056a0323edc1 100644
Binary files a/sound/effects/footstep/hardclaw1.ogg and b/sound/effects/footstep/hardclaw1.ogg differ
diff --git a/sound/effects/footstep/hardclaw2.ogg b/sound/effects/footstep/hardclaw2.ogg
index a6a7951d7782d..70fdaa6e450d7 100644
Binary files a/sound/effects/footstep/hardclaw2.ogg and b/sound/effects/footstep/hardclaw2.ogg differ
diff --git a/sound/effects/footstep/hardclaw3.ogg b/sound/effects/footstep/hardclaw3.ogg
index a2e5462199d17..930714688f15b 100644
Binary files a/sound/effects/footstep/hardclaw3.ogg and b/sound/effects/footstep/hardclaw3.ogg differ
diff --git a/sound/effects/footstep/hardclaw4.ogg b/sound/effects/footstep/hardclaw4.ogg
index bd845a8782a11..865380370e933 100644
Binary files a/sound/effects/footstep/hardclaw4.ogg and b/sound/effects/footstep/hardclaw4.ogg differ
diff --git a/sound/effects/footstep/heavy1.ogg b/sound/effects/footstep/heavy1.ogg
index bfc80a4270284..0be9d444953d0 100644
Binary files a/sound/effects/footstep/heavy1.ogg and b/sound/effects/footstep/heavy1.ogg differ
diff --git a/sound/effects/footstep/heavy2.ogg b/sound/effects/footstep/heavy2.ogg
index 514e3ac3e2461..513616b3ced2e 100644
Binary files a/sound/effects/footstep/heavy2.ogg and b/sound/effects/footstep/heavy2.ogg differ
diff --git a/sound/effects/footstep/lava1.ogg b/sound/effects/footstep/lava1.ogg
index e26dbaf8bda40..fb10e862d6232 100644
Binary files a/sound/effects/footstep/lava1.ogg and b/sound/effects/footstep/lava1.ogg differ
diff --git a/sound/effects/footstep/lava2.ogg b/sound/effects/footstep/lava2.ogg
index 90b73f840b26e..c38a1364ecc2c 100644
Binary files a/sound/effects/footstep/lava2.ogg and b/sound/effects/footstep/lava2.ogg differ
diff --git a/sound/effects/footstep/lava3.ogg b/sound/effects/footstep/lava3.ogg
index 343638151063d..79e9e422888dc 100644
Binary files a/sound/effects/footstep/lava3.ogg and b/sound/effects/footstep/lava3.ogg differ
diff --git a/sound/effects/footstep/meowstep1.ogg b/sound/effects/footstep/meowstep1.ogg
index 34e31269d25c8..5f3886a176c8d 100644
Binary files a/sound/effects/footstep/meowstep1.ogg and b/sound/effects/footstep/meowstep1.ogg differ
diff --git a/sound/effects/footstep/moffstep01.ogg b/sound/effects/footstep/moffstep01.ogg
index 6350cb057bf0b..f03b706d6be7b 100644
Binary files a/sound/effects/footstep/moffstep01.ogg and b/sound/effects/footstep/moffstep01.ogg differ
diff --git a/sound/effects/footstep/plating1.ogg b/sound/effects/footstep/plating1.ogg
index 0df770e66387c..714d96049ec09 100644
Binary files a/sound/effects/footstep/plating1.ogg and b/sound/effects/footstep/plating1.ogg differ
diff --git a/sound/effects/footstep/plating2.ogg b/sound/effects/footstep/plating2.ogg
index 314b9133d255e..f31bc4e4cdff1 100644
Binary files a/sound/effects/footstep/plating2.ogg and b/sound/effects/footstep/plating2.ogg differ
diff --git a/sound/effects/footstep/plating3.ogg b/sound/effects/footstep/plating3.ogg
index 5c571d77eb6b2..5aac7c0093e85 100644
Binary files a/sound/effects/footstep/plating3.ogg and b/sound/effects/footstep/plating3.ogg differ
diff --git a/sound/effects/footstep/plating4.ogg b/sound/effects/footstep/plating4.ogg
index 5953262764ba1..a932d2984f464 100644
Binary files a/sound/effects/footstep/plating4.ogg and b/sound/effects/footstep/plating4.ogg differ
diff --git a/sound/effects/footstep/plating5.ogg b/sound/effects/footstep/plating5.ogg
index 4676a637a6d20..36b42d71fdd50 100644
Binary files a/sound/effects/footstep/plating5.ogg and b/sound/effects/footstep/plating5.ogg differ
diff --git a/sound/effects/footstep/rustystep1.ogg b/sound/effects/footstep/rustystep1.ogg
index bf90d52779ca7..3f762cc92adb7 100644
Binary files a/sound/effects/footstep/rustystep1.ogg and b/sound/effects/footstep/rustystep1.ogg differ
diff --git a/sound/effects/footstep/slime1.ogg b/sound/effects/footstep/slime1.ogg
index a83b7646f1f13..8ef7f037973bc 100644
Binary files a/sound/effects/footstep/slime1.ogg and b/sound/effects/footstep/slime1.ogg differ
diff --git a/sound/effects/footstep/spurs1.ogg b/sound/effects/footstep/spurs1.ogg
index d2754587ca15e..63532f0d35c01 100644
Binary files a/sound/effects/footstep/spurs1.ogg and b/sound/effects/footstep/spurs1.ogg differ
diff --git a/sound/effects/footstep/spurs2.ogg b/sound/effects/footstep/spurs2.ogg
index e02725e9079bb..ba5c03e195487 100644
Binary files a/sound/effects/footstep/spurs2.ogg and b/sound/effects/footstep/spurs2.ogg differ
diff --git a/sound/effects/footstep/spurs3.ogg b/sound/effects/footstep/spurs3.ogg
index e79b90dc78d9f..a5dde4287f824 100644
Binary files a/sound/effects/footstep/spurs3.ogg and b/sound/effects/footstep/spurs3.ogg differ
diff --git a/sound/effects/footstep/water/water1.ogg b/sound/effects/footstep/water/water1.ogg
index 1fb82a70eccc9..84617dade8a16 100644
Binary files a/sound/effects/footstep/water/water1.ogg and b/sound/effects/footstep/water/water1.ogg differ
diff --git a/sound/effects/footstep/water/water2.ogg b/sound/effects/footstep/water/water2.ogg
index df9ba85a58e99..32fb1840bc719 100644
Binary files a/sound/effects/footstep/water/water2.ogg and b/sound/effects/footstep/water/water2.ogg differ
diff --git a/sound/effects/footstep/water/water3.ogg b/sound/effects/footstep/water/water3.ogg
index 605ae01db05c3..aab08f023210c 100644
Binary files a/sound/effects/footstep/water/water3.ogg and b/sound/effects/footstep/water/water3.ogg differ
diff --git a/sound/effects/footstep/water/water4.ogg b/sound/effects/footstep/water/water4.ogg
index 66f6f32966968..6e7aa23251cfa 100644
Binary files a/sound/effects/footstep/water/water4.ogg and b/sound/effects/footstep/water/water4.ogg differ
diff --git a/sound/effects/footstep/water1.ogg b/sound/effects/footstep/water1.ogg
index f22cbf28482b6..377d34ce2bee8 100644
Binary files a/sound/effects/footstep/water1.ogg and b/sound/effects/footstep/water1.ogg differ
diff --git a/sound/effects/footstep/water2.ogg b/sound/effects/footstep/water2.ogg
index e2a47650c63a4..c7f53afb56568 100644
Binary files a/sound/effects/footstep/water2.ogg and b/sound/effects/footstep/water2.ogg differ
diff --git a/sound/effects/footstep/water3.ogg b/sound/effects/footstep/water3.ogg
index 97ce152a5ce2e..bf175f66b82a0 100644
Binary files a/sound/effects/footstep/water3.ogg and b/sound/effects/footstep/water3.ogg differ
diff --git a/sound/effects/footstep/water4.ogg b/sound/effects/footstep/water4.ogg
index 5778a52560d55..d1ce684c3de05 100644
Binary files a/sound/effects/footstep/water4.ogg and b/sound/effects/footstep/water4.ogg differ
diff --git a/sound/effects/footstep/wood1.ogg b/sound/effects/footstep/wood1.ogg
index c76fc423fc243..78629b3117f08 100644
Binary files a/sound/effects/footstep/wood1.ogg and b/sound/effects/footstep/wood1.ogg differ
diff --git a/sound/effects/footstep/wood2.ogg b/sound/effects/footstep/wood2.ogg
index 71dc1aa9679a6..2d21ab0b22294 100644
Binary files a/sound/effects/footstep/wood2.ogg and b/sound/effects/footstep/wood2.ogg differ
diff --git a/sound/effects/footstep/wood3.ogg b/sound/effects/footstep/wood3.ogg
index bf86889006e9a..e6b9403ae15d6 100644
Binary files a/sound/effects/footstep/wood3.ogg and b/sound/effects/footstep/wood3.ogg differ
diff --git a/sound/effects/footstep/wood4.ogg b/sound/effects/footstep/wood4.ogg
index 44734425ce686..7e558cb7f53f1 100644
Binary files a/sound/effects/footstep/wood4.ogg and b/sound/effects/footstep/wood4.ogg differ
diff --git a/sound/effects/footstep/wood5.ogg b/sound/effects/footstep/wood5.ogg
index 5ad4fa81e77f9..835eed9ad2dbf 100644
Binary files a/sound/effects/footstep/wood5.ogg and b/sound/effects/footstep/wood5.ogg differ
diff --git a/sound/effects/footstep/woodbarefoot1.ogg b/sound/effects/footstep/woodbarefoot1.ogg
index bb66da770e36d..31fe7e1f4fa90 100644
Binary files a/sound/effects/footstep/woodbarefoot1.ogg and b/sound/effects/footstep/woodbarefoot1.ogg differ
diff --git a/sound/effects/footstep/woodbarefoot2.ogg b/sound/effects/footstep/woodbarefoot2.ogg
index 67397d868ee25..34e0f21129fb0 100644
Binary files a/sound/effects/footstep/woodbarefoot2.ogg and b/sound/effects/footstep/woodbarefoot2.ogg differ
diff --git a/sound/effects/footstep/woodbarefoot3.ogg b/sound/effects/footstep/woodbarefoot3.ogg
index 113a89003a65b..847a557fe8e71 100644
Binary files a/sound/effects/footstep/woodbarefoot3.ogg and b/sound/effects/footstep/woodbarefoot3.ogg differ
diff --git a/sound/effects/footstep/woodbarefoot4.ogg b/sound/effects/footstep/woodbarefoot4.ogg
index ccc2e82075b9a..61693346f76f6 100644
Binary files a/sound/effects/footstep/woodbarefoot4.ogg and b/sound/effects/footstep/woodbarefoot4.ogg differ
diff --git a/sound/effects/footstep/woodbarefoot5.ogg b/sound/effects/footstep/woodbarefoot5.ogg
index 6fbce27109eef..15c6834f0c2cc 100644
Binary files a/sound/effects/footstep/woodbarefoot5.ogg and b/sound/effects/footstep/woodbarefoot5.ogg differ
diff --git a/sound/effects/footstep/woodclaw1.ogg b/sound/effects/footstep/woodclaw1.ogg
index 181403b93f442..4df807adec501 100644
Binary files a/sound/effects/footstep/woodclaw1.ogg and b/sound/effects/footstep/woodclaw1.ogg differ
diff --git a/sound/effects/footstep/woodclaw2.ogg b/sound/effects/footstep/woodclaw2.ogg
index 29b04a95541aa..44b4995f87d56 100644
Binary files a/sound/effects/footstep/woodclaw2.ogg and b/sound/effects/footstep/woodclaw2.ogg differ
diff --git a/sound/effects/footstep/woodclaw3.ogg b/sound/effects/footstep/woodclaw3.ogg
index 9f4ac6d3340c1..b3c5f30c4af28 100644
Binary files a/sound/effects/footstep/woodclaw3.ogg and b/sound/effects/footstep/woodclaw3.ogg differ
diff --git a/sound/effects/fuse.ogg b/sound/effects/fuse.ogg
index 5b2f4eddc6189..4757588d5f4cc 100644
Binary files a/sound/effects/fuse.ogg and b/sound/effects/fuse.ogg differ
diff --git a/sound/effects/gas_hissing.ogg b/sound/effects/gas_hissing.ogg
index 58df62ef0842f..af81e8749fe8b 100644
Binary files a/sound/effects/gas_hissing.ogg and b/sound/effects/gas_hissing.ogg differ
diff --git a/sound/effects/genetics.ogg b/sound/effects/genetics.ogg
index 9b28be68b53a7..b2c1fd9c7ce52 100644
Binary files a/sound/effects/genetics.ogg and b/sound/effects/genetics.ogg differ
diff --git a/sound/effects/ghost.ogg b/sound/effects/ghost.ogg
index ce2b8e26e7e91..167806ed621e2 100644
Binary files a/sound/effects/ghost.ogg and b/sound/effects/ghost.ogg differ
diff --git a/sound/effects/ghost2.ogg b/sound/effects/ghost2.ogg
index aa3eb5c94ae8f..5ab32e9822aa8 100644
Binary files a/sound/effects/ghost2.ogg and b/sound/effects/ghost2.ogg differ
diff --git a/sound/effects/glass/glass_reverse.ogg b/sound/effects/glass/glass_reverse.ogg
index af1492d9b86b4..c544446e56f08 100644
Binary files a/sound/effects/glass/glass_reverse.ogg and b/sound/effects/glass/glass_reverse.ogg differ
diff --git a/sound/effects/glass/glassbash.ogg b/sound/effects/glass/glassbash.ogg
index 59931e6a73ca7..64393f273e86f 100644
Binary files a/sound/effects/glass/glassbash.ogg and b/sound/effects/glass/glassbash.ogg differ
diff --git a/sound/effects/glass/glassbr1.ogg b/sound/effects/glass/glassbr1.ogg
index 738be27067973..9575000c72114 100644
Binary files a/sound/effects/glass/glassbr1.ogg and b/sound/effects/glass/glassbr1.ogg differ
diff --git a/sound/effects/glass/glassbr2.ogg b/sound/effects/glass/glassbr2.ogg
index aa0ae71453edb..b4c96d31caca2 100644
Binary files a/sound/effects/glass/glassbr2.ogg and b/sound/effects/glass/glassbr2.ogg differ
diff --git a/sound/effects/glass/glassbr3.ogg b/sound/effects/glass/glassbr3.ogg
index 4b4f05586d9be..e7a71b74c335e 100644
Binary files a/sound/effects/glass/glassbr3.ogg and b/sound/effects/glass/glassbr3.ogg differ
diff --git a/sound/effects/glass/glasshit.ogg b/sound/effects/glass/glasshit.ogg
index 1a6e98715dd02..680bed8f1e98c 100644
Binary files a/sound/effects/glass/glasshit.ogg and b/sound/effects/glass/glasshit.ogg differ
diff --git a/sound/effects/glass/glassknock.ogg b/sound/effects/glass/glassknock.ogg
index 91da9de803ad9..1505946fe6fd7 100644
Binary files a/sound/effects/glass/glassknock.ogg and b/sound/effects/glass/glassknock.ogg differ
diff --git a/sound/effects/glug.ogg b/sound/effects/glug.ogg
index 268ff4557e8e6..60b59d6db783b 100644
Binary files a/sound/effects/glug.ogg and b/sound/effects/glug.ogg differ
diff --git a/sound/effects/gong.ogg b/sound/effects/gong.ogg
index 4d12f5d0d2df0..a82f7b2875025 100644
Binary files a/sound/effects/gong.ogg and b/sound/effects/gong.ogg differ
diff --git a/sound/effects/gravhit.ogg b/sound/effects/gravhit.ogg
index 524ddf733f5da..5656ce31d51d9 100644
Binary files a/sound/effects/gravhit.ogg and b/sound/effects/gravhit.ogg differ
diff --git a/sound/effects/grillehit.ogg b/sound/effects/grillehit.ogg
index 0dc6c33367f51..48375ea6c7df4 100644
Binary files a/sound/effects/grillehit.ogg and b/sound/effects/grillehit.ogg differ
diff --git a/sound/effects/hallucinations/behind_you1.ogg b/sound/effects/hallucinations/behind_you1.ogg
index d3ddef748059a..420d8f88a45f6 100644
Binary files a/sound/effects/hallucinations/behind_you1.ogg and b/sound/effects/hallucinations/behind_you1.ogg differ
diff --git a/sound/effects/hallucinations/behind_you2.ogg b/sound/effects/hallucinations/behind_you2.ogg
index 530a71698cb22..f7ad80b06036c 100644
Binary files a/sound/effects/hallucinations/behind_you2.ogg and b/sound/effects/hallucinations/behind_you2.ogg differ
diff --git a/sound/effects/hallucinations/far_noise.ogg b/sound/effects/hallucinations/far_noise.ogg
index 11d849a89f221..23edcbec5e17a 100644
Binary files a/sound/effects/hallucinations/far_noise.ogg and b/sound/effects/hallucinations/far_noise.ogg differ
diff --git a/sound/effects/hallucinations/growl1.ogg b/sound/effects/hallucinations/growl1.ogg
index 80aca01ce754c..46c1c618b8f47 100644
Binary files a/sound/effects/hallucinations/growl1.ogg and b/sound/effects/hallucinations/growl1.ogg differ
diff --git a/sound/effects/hallucinations/growl2.ogg b/sound/effects/hallucinations/growl2.ogg
index f10abf0fb26fa..62b5a0b69eb46 100644
Binary files a/sound/effects/hallucinations/growl2.ogg and b/sound/effects/hallucinations/growl2.ogg differ
diff --git a/sound/effects/hallucinations/growl3.ogg b/sound/effects/hallucinations/growl3.ogg
index 3f3799bc0f27b..d8e0cfb2abf93 100644
Binary files a/sound/effects/hallucinations/growl3.ogg and b/sound/effects/hallucinations/growl3.ogg differ
diff --git a/sound/effects/hallucinations/i_see_you1.ogg b/sound/effects/hallucinations/i_see_you1.ogg
index 66d5b65d5983d..a4ea6ae7abca3 100644
Binary files a/sound/effects/hallucinations/i_see_you1.ogg and b/sound/effects/hallucinations/i_see_you1.ogg differ
diff --git a/sound/effects/hallucinations/i_see_you2.ogg b/sound/effects/hallucinations/i_see_you2.ogg
index da908f2c4b4ae..c41bb48e2a654 100644
Binary files a/sound/effects/hallucinations/i_see_you2.ogg and b/sound/effects/hallucinations/i_see_you2.ogg differ
diff --git a/sound/effects/hallucinations/im_here1.ogg b/sound/effects/hallucinations/im_here1.ogg
index 7a671739b8965..ef80b5f2b1d5d 100644
Binary files a/sound/effects/hallucinations/im_here1.ogg and b/sound/effects/hallucinations/im_here1.ogg differ
diff --git a/sound/effects/hallucinations/im_here2.ogg b/sound/effects/hallucinations/im_here2.ogg
index 1e289d53f8723..04d402ff12b49 100644
Binary files a/sound/effects/hallucinations/im_here2.ogg and b/sound/effects/hallucinations/im_here2.ogg differ
diff --git a/sound/effects/hallucinations/look_up1.ogg b/sound/effects/hallucinations/look_up1.ogg
index 045d5d4a768f3..f34e2233c0bd2 100644
Binary files a/sound/effects/hallucinations/look_up1.ogg and b/sound/effects/hallucinations/look_up1.ogg differ
diff --git a/sound/effects/hallucinations/look_up2.ogg b/sound/effects/hallucinations/look_up2.ogg
index 1e6f14b21be4e..01ecf45cac2b3 100644
Binary files a/sound/effects/hallucinations/look_up2.ogg and b/sound/effects/hallucinations/look_up2.ogg differ
diff --git a/sound/effects/hallucinations/over_here1.ogg b/sound/effects/hallucinations/over_here1.ogg
index 90f557b005b7d..0e1f52d98b5b2 100644
Binary files a/sound/effects/hallucinations/over_here1.ogg and b/sound/effects/hallucinations/over_here1.ogg differ
diff --git a/sound/effects/hallucinations/over_here2.ogg b/sound/effects/hallucinations/over_here2.ogg
index 2719e204a271c..a7752a54d739a 100644
Binary files a/sound/effects/hallucinations/over_here2.ogg and b/sound/effects/hallucinations/over_here2.ogg differ
diff --git a/sound/effects/hallucinations/over_here3.ogg b/sound/effects/hallucinations/over_here3.ogg
index 1ef1a1d8340f6..7e0a0e7da921a 100644
Binary files a/sound/effects/hallucinations/over_here3.ogg and b/sound/effects/hallucinations/over_here3.ogg differ
diff --git a/sound/effects/hallucinations/radio_static.ogg b/sound/effects/hallucinations/radio_static.ogg
index 32794a91eb5b2..1fd83e41a6a66 100644
Binary files a/sound/effects/hallucinations/radio_static.ogg and b/sound/effects/hallucinations/radio_static.ogg differ
diff --git a/sound/effects/hallucinations/turn_around1.ogg b/sound/effects/hallucinations/turn_around1.ogg
index ce54f1944e4ae..9149598c7e665 100644
Binary files a/sound/effects/hallucinations/turn_around1.ogg and b/sound/effects/hallucinations/turn_around1.ogg differ
diff --git a/sound/effects/hallucinations/turn_around2.ogg b/sound/effects/hallucinations/turn_around2.ogg
index 2c3c49466d5a2..763f70b59f195 100644
Binary files a/sound/effects/hallucinations/turn_around2.ogg and b/sound/effects/hallucinations/turn_around2.ogg differ
diff --git a/sound/effects/hallucinations/veryfar_noise.ogg b/sound/effects/hallucinations/veryfar_noise.ogg
index b27ce5dce999d..9058771e12827 100644
Binary files a/sound/effects/hallucinations/veryfar_noise.ogg and b/sound/effects/hallucinations/veryfar_noise.ogg differ
diff --git a/sound/effects/hallucinations/wail.ogg b/sound/effects/hallucinations/wail.ogg
index 66318be3e94e2..f7a98d81bac62 100644
Binary files a/sound/effects/hallucinations/wail.ogg and b/sound/effects/hallucinations/wail.ogg differ
diff --git a/sound/effects/health/fastbeat.ogg b/sound/effects/health/fastbeat.ogg
index 29df92812b190..12a57305ec5ea 100644
Binary files a/sound/effects/health/fastbeat.ogg and b/sound/effects/health/fastbeat.ogg differ
diff --git a/sound/effects/health/slowbeat.ogg b/sound/effects/health/slowbeat.ogg
index a44b609eeb753..e0ec71022287a 100644
Binary files a/sound/effects/health/slowbeat.ogg and b/sound/effects/health/slowbeat.ogg differ
diff --git a/sound/effects/heart_beat.ogg b/sound/effects/heart_beat.ogg
index 6d99aa371c7f1..f3755c7d08cec 100644
Binary files a/sound/effects/heart_beat.ogg and b/sound/effects/heart_beat.ogg differ
diff --git a/sound/effects/his_grace/his_grace_ascend.ogg b/sound/effects/his_grace/his_grace_ascend.ogg
index 61866f2afc9fd..459663cf75d61 100644
Binary files a/sound/effects/his_grace/his_grace_ascend.ogg and b/sound/effects/his_grace/his_grace_ascend.ogg differ
diff --git a/sound/effects/his_grace/his_grace_awaken.ogg b/sound/effects/his_grace/his_grace_awaken.ogg
index 4c0e87e5ab77c..2fd1074b85ac0 100644
Binary files a/sound/effects/his_grace/his_grace_awaken.ogg and b/sound/effects/his_grace/his_grace_awaken.ogg differ
diff --git a/sound/effects/hit_kick.ogg b/sound/effects/hit_kick.ogg
index 5638e5d2d67de..7ecc7bb3beac6 100644
Binary files a/sound/effects/hit_kick.ogg and b/sound/effects/hit_kick.ogg differ
diff --git a/sound/effects/hit_on_shattered_glass.ogg b/sound/effects/hit_on_shattered_glass.ogg
index f0f21e277bd81..c5fc90c2c4ba2 100644
Binary files a/sound/effects/hit_on_shattered_glass.ogg and b/sound/effects/hit_on_shattered_glass.ogg differ
diff --git a/sound/effects/hit_punch.ogg b/sound/effects/hit_punch.ogg
index beed99926c6b3..e3590ae161fc3 100644
Binary files a/sound/effects/hit_punch.ogg and b/sound/effects/hit_punch.ogg differ
diff --git a/sound/effects/hygienebot_angry.ogg b/sound/effects/hygienebot_angry.ogg
index d184cc38e2143..249ef60ecffc6 100644
Binary files a/sound/effects/hygienebot_angry.ogg and b/sound/effects/hygienebot_angry.ogg differ
diff --git a/sound/effects/hygienebot_happy.ogg b/sound/effects/hygienebot_happy.ogg
index ca3b9159c3771..e66abcb197dae 100644
Binary files a/sound/effects/hygienebot_happy.ogg and b/sound/effects/hygienebot_happy.ogg differ
diff --git a/sound/effects/ice_shovel.ogg b/sound/effects/ice_shovel.ogg
index 71422d2f7569a..77e742241ed33 100644
Binary files a/sound/effects/ice_shovel.ogg and b/sound/effects/ice_shovel.ogg differ
diff --git a/sound/effects/jingle.ogg b/sound/effects/jingle.ogg
index da903910dfcf2..1420dd14a093a 100644
Binary files a/sound/effects/jingle.ogg and b/sound/effects/jingle.ogg differ
diff --git a/sound/effects/kaching.ogg b/sound/effects/kaching.ogg
index ea642a56a9b97..e8a557dd88d4e 100644
Binary files a/sound/effects/kaching.ogg and b/sound/effects/kaching.ogg differ
diff --git a/sound/effects/light_flicker.ogg b/sound/effects/light_flicker.ogg
index f279de02d1b8e..01f598cb8c8b4 100644
Binary files a/sound/effects/light_flicker.ogg and b/sound/effects/light_flicker.ogg differ
diff --git a/sound/effects/liquid_pour/liquid_pour1.ogg b/sound/effects/liquid_pour/liquid_pour1.ogg
index 71e57ad19f7ef..f84cff5f2e3d9 100644
Binary files a/sound/effects/liquid_pour/liquid_pour1.ogg and b/sound/effects/liquid_pour/liquid_pour1.ogg differ
diff --git a/sound/effects/liquid_pour/liquid_pour2.ogg b/sound/effects/liquid_pour/liquid_pour2.ogg
index 773b30e59e5c0..5fe890c79aa88 100644
Binary files a/sound/effects/liquid_pour/liquid_pour2.ogg and b/sound/effects/liquid_pour/liquid_pour2.ogg differ
diff --git a/sound/effects/liquid_pour/liquid_pour3.ogg b/sound/effects/liquid_pour/liquid_pour3.ogg
index 0548d7b14a4ed..2de59efcfe77c 100644
Binary files a/sound/effects/liquid_pour/liquid_pour3.ogg and b/sound/effects/liquid_pour/liquid_pour3.ogg differ
diff --git a/sound/effects/magic.ogg b/sound/effects/magic.ogg
index c107743d805dc..2ca766971add3 100644
Binary files a/sound/effects/magic.ogg and b/sound/effects/magic.ogg differ
diff --git a/sound/effects/magic/RATTLEMEBONES.ogg b/sound/effects/magic/RATTLEMEBONES.ogg
index d42cf51253395..3679610813932 100644
Binary files a/sound/effects/magic/RATTLEMEBONES.ogg and b/sound/effects/magic/RATTLEMEBONES.ogg differ
diff --git a/sound/effects/magic/RATTLEMEBONES2.ogg b/sound/effects/magic/RATTLEMEBONES2.ogg
index 7265a06aabc4c..ed7109eff2832 100644
Binary files a/sound/effects/magic/RATTLEMEBONES2.ogg and b/sound/effects/magic/RATTLEMEBONES2.ogg differ
diff --git a/sound/effects/magic/VoidDeflect01.ogg b/sound/effects/magic/VoidDeflect01.ogg
index 53b96d1ba8daa..6e74b341f9789 100644
Binary files a/sound/effects/magic/VoidDeflect01.ogg and b/sound/effects/magic/VoidDeflect01.ogg differ
diff --git a/sound/effects/magic/VoidDeflect02.ogg b/sound/effects/magic/VoidDeflect02.ogg
index feac14b57220a..e09837bbcc864 100644
Binary files a/sound/effects/magic/VoidDeflect02.ogg and b/sound/effects/magic/VoidDeflect02.ogg differ
diff --git a/sound/effects/magic/VoidDeflect03.ogg b/sound/effects/magic/VoidDeflect03.ogg
index 3f55c4bea73d6..d85b131f5b9eb 100644
Binary files a/sound/effects/magic/VoidDeflect03.ogg and b/sound/effects/magic/VoidDeflect03.ogg differ
diff --git a/sound/effects/magic/blind.ogg b/sound/effects/magic/blind.ogg
index 06efb11d285a7..a437392d83b02 100644
Binary files a/sound/effects/magic/blind.ogg and b/sound/effects/magic/blind.ogg differ
diff --git a/sound/effects/magic/blink.ogg b/sound/effects/magic/blink.ogg
index 80c29df1e10fd..ccdeb9dcb1b96 100644
Binary files a/sound/effects/magic/blink.ogg and b/sound/effects/magic/blink.ogg differ
diff --git a/sound/effects/magic/castsummon.ogg b/sound/effects/magic/castsummon.ogg
index e88bb073b3523..df16c68d9e5f0 100644
Binary files a/sound/effects/magic/castsummon.ogg and b/sound/effects/magic/castsummon.ogg differ
diff --git a/sound/effects/magic/charge.ogg b/sound/effects/magic/charge.ogg
index 5d95280b92d92..332ff801dd38a 100644
Binary files a/sound/effects/magic/charge.ogg and b/sound/effects/magic/charge.ogg differ
diff --git a/sound/effects/magic/clockwork/anima_fragment_attack.ogg b/sound/effects/magic/clockwork/anima_fragment_attack.ogg
index c2ffe3cdc4dd0..ce518be7a4ace 100644
Binary files a/sound/effects/magic/clockwork/anima_fragment_attack.ogg and b/sound/effects/magic/clockwork/anima_fragment_attack.ogg differ
diff --git a/sound/effects/magic/clockwork/anima_fragment_death.ogg b/sound/effects/magic/clockwork/anima_fragment_death.ogg
index d3dd88af10591..bdc664d5fe0a2 100644
Binary files a/sound/effects/magic/clockwork/anima_fragment_death.ogg and b/sound/effects/magic/clockwork/anima_fragment_death.ogg differ
diff --git a/sound/effects/magic/clockwork/ark_activation.ogg b/sound/effects/magic/clockwork/ark_activation.ogg
index 4627f06c727fa..9d47cf35d1161 100644
Binary files a/sound/effects/magic/clockwork/ark_activation.ogg and b/sound/effects/magic/clockwork/ark_activation.ogg differ
diff --git a/sound/effects/magic/clockwork/ark_activation_sequence.ogg b/sound/effects/magic/clockwork/ark_activation_sequence.ogg
index 65a43411f55de..e6ade8b56aae6 100644
Binary files a/sound/effects/magic/clockwork/ark_activation_sequence.ogg and b/sound/effects/magic/clockwork/ark_activation_sequence.ogg differ
diff --git a/sound/effects/magic/clockwork/fellowship_armory.ogg b/sound/effects/magic/clockwork/fellowship_armory.ogg
index bd7570de0857c..327ce235459d3 100644
Binary files a/sound/effects/magic/clockwork/fellowship_armory.ogg and b/sound/effects/magic/clockwork/fellowship_armory.ogg differ
diff --git a/sound/effects/magic/clockwork/invoke_general.ogg b/sound/effects/magic/clockwork/invoke_general.ogg
index 67ce044010025..b5d066de4261d 100644
Binary files a/sound/effects/magic/clockwork/invoke_general.ogg and b/sound/effects/magic/clockwork/invoke_general.ogg differ
diff --git a/sound/effects/magic/clockwork/narsie_attack.ogg b/sound/effects/magic/clockwork/narsie_attack.ogg
index 244b86a1a8c28..eccf282735fda 100644
Binary files a/sound/effects/magic/clockwork/narsie_attack.ogg and b/sound/effects/magic/clockwork/narsie_attack.ogg differ
diff --git a/sound/effects/magic/clockwork/ratvar_attack.ogg b/sound/effects/magic/clockwork/ratvar_attack.ogg
index e2ba46cfc0713..bf432bf62ca90 100644
Binary files a/sound/effects/magic/clockwork/ratvar_attack.ogg and b/sound/effects/magic/clockwork/ratvar_attack.ogg differ
diff --git a/sound/effects/magic/cosmic_energy.ogg b/sound/effects/magic/cosmic_energy.ogg
index 9bb70bd0707b3..c69a41198fca3 100644
Binary files a/sound/effects/magic/cosmic_energy.ogg and b/sound/effects/magic/cosmic_energy.ogg differ
diff --git a/sound/effects/magic/cosmic_expansion.ogg b/sound/effects/magic/cosmic_expansion.ogg
index a63c2a637070b..dbc868fa6c1cf 100644
Binary files a/sound/effects/magic/cosmic_expansion.ogg and b/sound/effects/magic/cosmic_expansion.ogg differ
diff --git a/sound/effects/magic/cowhead_curse.ogg b/sound/effects/magic/cowhead_curse.ogg
index 6453b9f20dda0..9a18f7d8064ed 100644
Binary files a/sound/effects/magic/cowhead_curse.ogg and b/sound/effects/magic/cowhead_curse.ogg differ
diff --git a/sound/effects/magic/curse.ogg b/sound/effects/magic/curse.ogg
index bda610416dea9..b6af218a6585a 100644
Binary files a/sound/effects/magic/curse.ogg and b/sound/effects/magic/curse.ogg differ
diff --git a/sound/effects/magic/demon_attack1.ogg b/sound/effects/magic/demon_attack1.ogg
index 18b646f136b92..a77ef633d631b 100644
Binary files a/sound/effects/magic/demon_attack1.ogg and b/sound/effects/magic/demon_attack1.ogg differ
diff --git a/sound/effects/magic/demon_consume.ogg b/sound/effects/magic/demon_consume.ogg
index 2f8b51a7da9bd..c4fbbcd9f2e5d 100644
Binary files a/sound/effects/magic/demon_consume.ogg and b/sound/effects/magic/demon_consume.ogg differ
diff --git a/sound/effects/magic/demon_dies.ogg b/sound/effects/magic/demon_dies.ogg
index c3ad866c6b323..d038a5870a8f9 100644
Binary files a/sound/effects/magic/demon_dies.ogg and b/sound/effects/magic/demon_dies.ogg differ
diff --git a/sound/effects/magic/disable_tech.ogg b/sound/effects/magic/disable_tech.ogg
index a42d279d0df32..da93b4e3b6298 100644
Binary files a/sound/effects/magic/disable_tech.ogg and b/sound/effects/magic/disable_tech.ogg differ
diff --git a/sound/effects/magic/disintegrate.ogg b/sound/effects/magic/disintegrate.ogg
index 568a1b43e4d61..6fe3690543fc8 100644
Binary files a/sound/effects/magic/disintegrate.ogg and b/sound/effects/magic/disintegrate.ogg differ
diff --git a/sound/effects/magic/enter_blood.ogg b/sound/effects/magic/enter_blood.ogg
index fb1666e48ca8e..67c5e62f0b06a 100644
Binary files a/sound/effects/magic/enter_blood.ogg and b/sound/effects/magic/enter_blood.ogg differ
diff --git a/sound/effects/magic/ethereal_enter.ogg b/sound/effects/magic/ethereal_enter.ogg
index bc7e08646bfe6..6c4a73cbda65d 100644
Binary files a/sound/effects/magic/ethereal_enter.ogg and b/sound/effects/magic/ethereal_enter.ogg differ
diff --git a/sound/effects/magic/ethereal_exit.ogg b/sound/effects/magic/ethereal_exit.ogg
index 43c5b6f35bf9e..0b2c72e8a4143 100644
Binary files a/sound/effects/magic/ethereal_exit.ogg and b/sound/effects/magic/ethereal_exit.ogg differ
diff --git a/sound/effects/magic/exit_blood.ogg b/sound/effects/magic/exit_blood.ogg
index b7f93dfd4734e..d276a847d9845 100644
Binary files a/sound/effects/magic/exit_blood.ogg and b/sound/effects/magic/exit_blood.ogg differ
diff --git a/sound/effects/magic/fireball.ogg b/sound/effects/magic/fireball.ogg
index e6dbad210b195..af6a011829eb4 100644
Binary files a/sound/effects/magic/fireball.ogg and b/sound/effects/magic/fireball.ogg differ
diff --git a/sound/effects/magic/fleshtostone.ogg b/sound/effects/magic/fleshtostone.ogg
index 70c30a496588b..84ffd395185be 100644
Binary files a/sound/effects/magic/fleshtostone.ogg and b/sound/effects/magic/fleshtostone.ogg differ
diff --git a/sound/effects/magic/forcewall.ogg b/sound/effects/magic/forcewall.ogg
index ea6224d769a24..4373541ea24f3 100644
Binary files a/sound/effects/magic/forcewall.ogg and b/sound/effects/magic/forcewall.ogg differ
diff --git a/sound/effects/magic/hereticknock.ogg b/sound/effects/magic/hereticknock.ogg
index 87ca57302a285..470212cf0159c 100644
Binary files a/sound/effects/magic/hereticknock.ogg and b/sound/effects/magic/hereticknock.ogg differ
diff --git a/sound/effects/magic/horsehead_curse.ogg b/sound/effects/magic/horsehead_curse.ogg
index ea1ca541e6a0a..094a518144b28 100644
Binary files a/sound/effects/magic/horsehead_curse.ogg and b/sound/effects/magic/horsehead_curse.ogg differ
diff --git a/sound/effects/magic/knock.ogg b/sound/effects/magic/knock.ogg
index 3c5d75ffcc259..5682950066b51 100644
Binary files a/sound/effects/magic/knock.ogg and b/sound/effects/magic/knock.ogg differ
diff --git a/sound/effects/magic/lightning_chargeup.ogg b/sound/effects/magic/lightning_chargeup.ogg
index 4889b6132481d..b273cc42c49aa 100644
Binary files a/sound/effects/magic/lightning_chargeup.ogg and b/sound/effects/magic/lightning_chargeup.ogg differ
diff --git a/sound/effects/magic/lightningbolt.ogg b/sound/effects/magic/lightningbolt.ogg
index df3145a08aec7..87d275ab9fecf 100644
Binary files a/sound/effects/magic/lightningbolt.ogg and b/sound/effects/magic/lightningbolt.ogg differ
diff --git a/sound/effects/magic/lightningshock.ogg b/sound/effects/magic/lightningshock.ogg
index 25853bec60721..a28b843185316 100644
Binary files a/sound/effects/magic/lightningshock.ogg and b/sound/effects/magic/lightningshock.ogg differ
diff --git a/sound/effects/magic/magic_block.ogg b/sound/effects/magic/magic_block.ogg
index 8e737f36fdab0..e9c4ffdca948d 100644
Binary files a/sound/effects/magic/magic_block.ogg and b/sound/effects/magic/magic_block.ogg differ
diff --git a/sound/effects/magic/magic_block_holy.ogg b/sound/effects/magic/magic_block_holy.ogg
index 7b494f923ab26..eb34f01a89607 100644
Binary files a/sound/effects/magic/magic_block_holy.ogg and b/sound/effects/magic/magic_block_holy.ogg differ
diff --git a/sound/effects/magic/magic_block_mind.ogg b/sound/effects/magic/magic_block_mind.ogg
index 7525dca3f2c32..3b824da3e4c4e 100644
Binary files a/sound/effects/magic/magic_block_mind.ogg and b/sound/effects/magic/magic_block_mind.ogg differ
diff --git a/sound/effects/magic/magic_missile.ogg b/sound/effects/magic/magic_missile.ogg
index dace7e711c009..25d1f0ee4ffcb 100644
Binary files a/sound/effects/magic/magic_missile.ogg and b/sound/effects/magic/magic_missile.ogg differ
diff --git a/sound/effects/magic/mandswap.ogg b/sound/effects/magic/mandswap.ogg
index 88d62c0459ba8..bc86014c1bc32 100644
Binary files a/sound/effects/magic/mandswap.ogg and b/sound/effects/magic/mandswap.ogg differ
diff --git a/sound/effects/magic/mm_hit.ogg b/sound/effects/magic/mm_hit.ogg
index 29a4e629c33a4..5f069f88ffbb0 100644
Binary files a/sound/effects/magic/mm_hit.ogg and b/sound/effects/magic/mm_hit.ogg differ
diff --git a/sound/effects/magic/mutate.ogg b/sound/effects/magic/mutate.ogg
index 85b674c9aee8e..ca6ac9635ae46 100644
Binary files a/sound/effects/magic/mutate.ogg and b/sound/effects/magic/mutate.ogg differ
diff --git a/sound/effects/magic/pantsaltar.ogg b/sound/effects/magic/pantsaltar.ogg
index 06d68a1233ee0..d1988aa7b5882 100644
Binary files a/sound/effects/magic/pantsaltar.ogg and b/sound/effects/magic/pantsaltar.ogg differ
diff --git a/sound/effects/magic/pighead_curse.ogg b/sound/effects/magic/pighead_curse.ogg
index 42d69c0fe8148..a033e17dfb23b 100644
Binary files a/sound/effects/magic/pighead_curse.ogg and b/sound/effects/magic/pighead_curse.ogg differ
diff --git a/sound/effects/magic/repulse.ogg b/sound/effects/magic/repulse.ogg
index fdba4f6e29d87..1adec44f3aca6 100644
Binary files a/sound/effects/magic/repulse.ogg and b/sound/effects/magic/repulse.ogg differ
diff --git a/sound/effects/magic/smoke.ogg b/sound/effects/magic/smoke.ogg
index 61d1ffe980c32..aa163203490a4 100644
Binary files a/sound/effects/magic/smoke.ogg and b/sound/effects/magic/smoke.ogg differ
diff --git a/sound/effects/magic/staff_animation.ogg b/sound/effects/magic/staff_animation.ogg
index 8d9e9e8a25e0a..123152648b9c7 100644
Binary files a/sound/effects/magic/staff_animation.ogg and b/sound/effects/magic/staff_animation.ogg differ
diff --git a/sound/effects/magic/staff_change.ogg b/sound/effects/magic/staff_change.ogg
index 60020364da2aa..cf3405bc6c110 100644
Binary files a/sound/effects/magic/staff_change.ogg and b/sound/effects/magic/staff_change.ogg differ
diff --git a/sound/effects/magic/staff_chaos.ogg b/sound/effects/magic/staff_chaos.ogg
index 03a2ee3cf57c7..f1ac4fd2d513b 100644
Binary files a/sound/effects/magic/staff_chaos.ogg and b/sound/effects/magic/staff_chaos.ogg differ
diff --git a/sound/effects/magic/staff_door.ogg b/sound/effects/magic/staff_door.ogg
index 1aa29545c34c3..bb18fafb7e161 100644
Binary files a/sound/effects/magic/staff_door.ogg and b/sound/effects/magic/staff_door.ogg differ
diff --git a/sound/effects/magic/staff_healing.ogg b/sound/effects/magic/staff_healing.ogg
index 1e1657aea1bf2..97222644e9a48 100644
Binary files a/sound/effects/magic/staff_healing.ogg and b/sound/effects/magic/staff_healing.ogg differ
diff --git a/sound/effects/magic/staff_shrink.ogg b/sound/effects/magic/staff_shrink.ogg
index f2268130fd81c..414a087ebebb8 100644
Binary files a/sound/effects/magic/staff_shrink.ogg and b/sound/effects/magic/staff_shrink.ogg differ
diff --git a/sound/effects/magic/summon_guns.ogg b/sound/effects/magic/summon_guns.ogg
index 2f87b903eb3ec..29b57d9c3dd5e 100644
Binary files a/sound/effects/magic/summon_guns.ogg and b/sound/effects/magic/summon_guns.ogg differ
diff --git a/sound/effects/magic/summon_karp.ogg b/sound/effects/magic/summon_karp.ogg
index d00ecf61f5a9c..a8ccc9679a8c3 100644
Binary files a/sound/effects/magic/summon_karp.ogg and b/sound/effects/magic/summon_karp.ogg differ
diff --git a/sound/effects/magic/summon_magic.ogg b/sound/effects/magic/summon_magic.ogg
index cd9097194a1ec..730ef7fa5f080 100644
Binary files a/sound/effects/magic/summon_magic.ogg and b/sound/effects/magic/summon_magic.ogg differ
diff --git a/sound/effects/magic/summonitems_generic.ogg b/sound/effects/magic/summonitems_generic.ogg
index b8ff9bc42e075..b0103966acbb4 100644
Binary files a/sound/effects/magic/summonitems_generic.ogg and b/sound/effects/magic/summonitems_generic.ogg differ
diff --git a/sound/effects/magic/swap.ogg b/sound/effects/magic/swap.ogg
index 42ea1bb04de12..de08a44bf559b 100644
Binary files a/sound/effects/magic/swap.ogg and b/sound/effects/magic/swap.ogg differ
diff --git a/sound/effects/magic/tail_swing.ogg b/sound/effects/magic/tail_swing.ogg
index 9f345166be8da..d8c7ded0ea9ae 100644
Binary files a/sound/effects/magic/tail_swing.ogg and b/sound/effects/magic/tail_swing.ogg differ
diff --git a/sound/effects/magic/teleport_app.ogg b/sound/effects/magic/teleport_app.ogg
index 9dc97c802b451..4f584ae16ff51 100644
Binary files a/sound/effects/magic/teleport_app.ogg and b/sound/effects/magic/teleport_app.ogg differ
diff --git a/sound/effects/magic/teleport_diss.ogg b/sound/effects/magic/teleport_diss.ogg
index 163ca45f393c8..bfab6607b6bbf 100644
Binary files a/sound/effects/magic/teleport_diss.ogg and b/sound/effects/magic/teleport_diss.ogg differ
diff --git a/sound/effects/magic/timeparadox2.ogg b/sound/effects/magic/timeparadox2.ogg
index 3e3df99f63ec1..8fd31b8fb4711 100644
Binary files a/sound/effects/magic/timeparadox2.ogg and b/sound/effects/magic/timeparadox2.ogg differ
diff --git a/sound/effects/magic/voidblink.ogg b/sound/effects/magic/voidblink.ogg
index 7415601b902d5..13913858cde37 100644
Binary files a/sound/effects/magic/voidblink.ogg and b/sound/effects/magic/voidblink.ogg differ
diff --git a/sound/effects/magic/wand_teleport.ogg b/sound/effects/magic/wand_teleport.ogg
index fa918d666e03f..10297721d7068 100644
Binary files a/sound/effects/magic/wand_teleport.ogg and b/sound/effects/magic/wand_teleport.ogg differ
diff --git a/sound/effects/magic/wandodeath.ogg b/sound/effects/magic/wandodeath.ogg
index f898478c2b173..b66ad3f2bed05 100644
Binary files a/sound/effects/magic/wandodeath.ogg and b/sound/effects/magic/wandodeath.ogg differ
diff --git a/sound/effects/magic/warpwhistle.ogg b/sound/effects/magic/warpwhistle.ogg
index f1867bcaec9f2..92735fb0598fd 100644
Binary files a/sound/effects/magic/warpwhistle.ogg and b/sound/effects/magic/warpwhistle.ogg differ
diff --git a/sound/effects/meatslap.ogg b/sound/effects/meatslap.ogg
index 3d8ea7df1ac45..f51442922e81c 100644
Binary files a/sound/effects/meatslap.ogg and b/sound/effects/meatslap.ogg differ
diff --git a/sound/effects/meow1.ogg b/sound/effects/meow1.ogg
index 462f246d55c46..351dd5b3a1097 100644
Binary files a/sound/effects/meow1.ogg and b/sound/effects/meow1.ogg differ
diff --git a/sound/effects/meteorimpact.ogg b/sound/effects/meteorimpact.ogg
index 9ed75f6c57eba..34c697fcec5c5 100644
Binary files a/sound/effects/meteorimpact.ogg and b/sound/effects/meteorimpact.ogg differ
diff --git a/sound/effects/moon_parade.ogg b/sound/effects/moon_parade.ogg
index 2b18ce3295270..6ec9e5544fb60 100644
Binary files a/sound/effects/moon_parade.ogg and b/sound/effects/moon_parade.ogg differ
diff --git a/sound/effects/moon_parade_soundloop.ogg b/sound/effects/moon_parade_soundloop.ogg
index c7879b6488cbd..cd5aa864cbff2 100644
Binary files a/sound/effects/moon_parade_soundloop.ogg and b/sound/effects/moon_parade_soundloop.ogg differ
diff --git a/sound/effects/muffspeech/muffspeech1.ogg b/sound/effects/muffspeech/muffspeech1.ogg
index b8b2f5f40b19d..32d1bcdfa565b 100644
Binary files a/sound/effects/muffspeech/muffspeech1.ogg and b/sound/effects/muffspeech/muffspeech1.ogg differ
diff --git a/sound/effects/muffspeech/muffspeech2.ogg b/sound/effects/muffspeech/muffspeech2.ogg
index 9ffecadf61e06..fd970728386a4 100644
Binary files a/sound/effects/muffspeech/muffspeech2.ogg and b/sound/effects/muffspeech/muffspeech2.ogg differ
diff --git a/sound/effects/muffspeech/muffspeech3.ogg b/sound/effects/muffspeech/muffspeech3.ogg
index dff0e567daccc..77f528dfa8a3a 100644
Binary files a/sound/effects/muffspeech/muffspeech3.ogg and b/sound/effects/muffspeech/muffspeech3.ogg differ
diff --git a/sound/effects/muffspeech/muffspeech4.ogg b/sound/effects/muffspeech/muffspeech4.ogg
index 4e46c7a707acc..3a0a4f9f93f0a 100644
Binary files a/sound/effects/muffspeech/muffspeech4.ogg and b/sound/effects/muffspeech/muffspeech4.ogg differ
diff --git a/sound/effects/muffspeech/muffspeech5.ogg b/sound/effects/muffspeech/muffspeech5.ogg
index ff1c9948c5621..988a85112ab9d 100644
Binary files a/sound/effects/muffspeech/muffspeech5.ogg and b/sound/effects/muffspeech/muffspeech5.ogg differ
diff --git a/sound/effects/muffspeech/muffspeech6.ogg b/sound/effects/muffspeech/muffspeech6.ogg
index 13b70731ac3e0..ae8c8d0cd3cfe 100644
Binary files a/sound/effects/muffspeech/muffspeech6.ogg and b/sound/effects/muffspeech/muffspeech6.ogg differ
diff --git a/sound/effects/muffspeech/muffspeech7.ogg b/sound/effects/muffspeech/muffspeech7.ogg
index ea566e6ef5872..6dedf975389fe 100644
Binary files a/sound/effects/muffspeech/muffspeech7.ogg and b/sound/effects/muffspeech/muffspeech7.ogg differ
diff --git a/sound/effects/muffspeech/muffspeech8.ogg b/sound/effects/muffspeech/muffspeech8.ogg
index ad51432d2da54..4bf1bb2bc787b 100644
Binary files a/sound/effects/muffspeech/muffspeech8.ogg and b/sound/effects/muffspeech/muffspeech8.ogg differ
diff --git a/sound/effects/muffspeech/muffspeech9.ogg b/sound/effects/muffspeech/muffspeech9.ogg
index 5d1be3b745f3e..914218bae5758 100644
Binary files a/sound/effects/muffspeech/muffspeech9.ogg and b/sound/effects/muffspeech/muffspeech9.ogg differ
diff --git a/sound/effects/mysterybox/mbox_end.ogg b/sound/effects/mysterybox/mbox_end.ogg
index 94d303f1f4db1..a93dee986537a 100644
Binary files a/sound/effects/mysterybox/mbox_end.ogg and b/sound/effects/mysterybox/mbox_end.ogg differ
diff --git a/sound/effects/mysterybox/mbox_full.ogg b/sound/effects/mysterybox/mbox_full.ogg
index e9f11b6a57e81..eca65bfd2a514 100644
Binary files a/sound/effects/mysterybox/mbox_full.ogg and b/sound/effects/mysterybox/mbox_full.ogg differ
diff --git a/sound/effects/nightmare_poof.ogg b/sound/effects/nightmare_poof.ogg
index e8b44685ba438..69def11daa90a 100644
Binary files a/sound/effects/nightmare_poof.ogg and b/sound/effects/nightmare_poof.ogg differ
diff --git a/sound/effects/nightmare_reappear.ogg b/sound/effects/nightmare_reappear.ogg
index 3dec20064602a..5e15c6fd303c9 100644
Binary files a/sound/effects/nightmare_reappear.ogg and b/sound/effects/nightmare_reappear.ogg differ
diff --git a/sound/effects/page_turn/pageturn1.ogg b/sound/effects/page_turn/pageturn1.ogg
index 1ccc977c23ff7..4195360848635 100644
Binary files a/sound/effects/page_turn/pageturn1.ogg and b/sound/effects/page_turn/pageturn1.ogg differ
diff --git a/sound/effects/page_turn/pageturn2.ogg b/sound/effects/page_turn/pageturn2.ogg
index 21f89782e5e67..8fbcefda89b8d 100644
Binary files a/sound/effects/page_turn/pageturn2.ogg and b/sound/effects/page_turn/pageturn2.ogg differ
diff --git a/sound/effects/page_turn/pageturn3.ogg b/sound/effects/page_turn/pageturn3.ogg
index 11a54eb555545..bbded0f082f5f 100644
Binary files a/sound/effects/page_turn/pageturn3.ogg and b/sound/effects/page_turn/pageturn3.ogg differ
diff --git a/sound/effects/pai_boot.ogg b/sound/effects/pai_boot.ogg
index 3d6783fe7034a..b7843dde32ab4 100644
Binary files a/sound/effects/pai_boot.ogg and b/sound/effects/pai_boot.ogg differ
diff --git a/sound/effects/parry.ogg b/sound/effects/parry.ogg
index 1834ee5b1f1e2..226f737fe1003 100644
Binary files a/sound/effects/parry.ogg and b/sound/effects/parry.ogg differ
diff --git a/sound/effects/phasein.ogg b/sound/effects/phasein.ogg
index 33318e9b12779..d433e0a782be1 100644
Binary files a/sound/effects/phasein.ogg and b/sound/effects/phasein.ogg differ
diff --git a/sound/effects/piano_hit.ogg b/sound/effects/piano_hit.ogg
index fbf74c155312e..6af8933450add 100644
Binary files a/sound/effects/piano_hit.ogg and b/sound/effects/piano_hit.ogg differ
diff --git a/sound/effects/pickaxe/picaxe1.ogg b/sound/effects/pickaxe/picaxe1.ogg
index 833f882a684a3..7c6fc814cc3d4 100644
Binary files a/sound/effects/pickaxe/picaxe1.ogg and b/sound/effects/pickaxe/picaxe1.ogg differ
diff --git a/sound/effects/pickaxe/picaxe2.ogg b/sound/effects/pickaxe/picaxe2.ogg
index e280748337d68..b61c1dcf92236 100644
Binary files a/sound/effects/pickaxe/picaxe2.ogg and b/sound/effects/pickaxe/picaxe2.ogg differ
diff --git a/sound/effects/pickaxe/picaxe3.ogg b/sound/effects/pickaxe/picaxe3.ogg
index fc2a88d1186ac..22df2e2710ff0 100644
Binary files a/sound/effects/pickaxe/picaxe3.ogg and b/sound/effects/pickaxe/picaxe3.ogg differ
diff --git a/sound/effects/ping_hit.ogg b/sound/effects/ping_hit.ogg
index 729bd7efa887b..600a2903d8323 100644
Binary files a/sound/effects/ping_hit.ogg and b/sound/effects/ping_hit.ogg differ
diff --git a/sound/effects/podwoosh.ogg b/sound/effects/podwoosh.ogg
index 6edcba627378a..c084846a4c63f 100644
Binary files a/sound/effects/podwoosh.ogg and b/sound/effects/podwoosh.ogg differ
diff --git a/sound/effects/pop.ogg b/sound/effects/pop.ogg
index cf0bc2da72bf9..3d74bf9876fcb 100644
Binary files a/sound/effects/pop.ogg and b/sound/effects/pop.ogg differ
diff --git a/sound/effects/pop_expl.ogg b/sound/effects/pop_expl.ogg
index 6e2cd93834cce..6e6bef6e0fe8f 100644
Binary files a/sound/effects/pop_expl.ogg and b/sound/effects/pop_expl.ogg differ
diff --git a/sound/effects/pope_entry.ogg b/sound/effects/pope_entry.ogg
index 54cf14fc4fc49..7e06a7a3da3fc 100644
Binary files a/sound/effects/pope_entry.ogg and b/sound/effects/pope_entry.ogg differ
diff --git a/sound/effects/portal/portal_close.ogg b/sound/effects/portal/portal_close.ogg
index b5910c460d54c..f9263bf9b20a3 100644
Binary files a/sound/effects/portal/portal_close.ogg and b/sound/effects/portal/portal_close.ogg differ
diff --git a/sound/effects/portal/portal_open_1.ogg b/sound/effects/portal/portal_open_1.ogg
index 02377a14e005e..10d289ebd42ef 100644
Binary files a/sound/effects/portal/portal_open_1.ogg and b/sound/effects/portal/portal_open_1.ogg differ
diff --git a/sound/effects/portal/portal_open_2.ogg b/sound/effects/portal/portal_open_2.ogg
index 06309d8016028..8ca97742e49f4 100644
Binary files a/sound/effects/portal/portal_open_2.ogg and b/sound/effects/portal/portal_open_2.ogg differ
diff --git a/sound/effects/portal/portal_open_3.ogg b/sound/effects/portal/portal_open_3.ogg
index b2d0e8a01b41f..13aea9119271a 100644
Binary files a/sound/effects/portal/portal_open_3.ogg and b/sound/effects/portal/portal_open_3.ogg differ
diff --git a/sound/effects/portal/portal_travel.ogg b/sound/effects/portal/portal_travel.ogg
index 2c1e306b34ab4..c8c4f056d38cb 100644
Binary files a/sound/effects/portal/portal_travel.ogg and b/sound/effects/portal/portal_travel.ogg differ
diff --git a/sound/effects/pray.ogg b/sound/effects/pray.ogg
index beadd3916f196..5d85a9423c6d8 100644
Binary files a/sound/effects/pray.ogg and b/sound/effects/pray.ogg differ
diff --git a/sound/effects/pray_chaplain.ogg b/sound/effects/pray_chaplain.ogg
index 1b543275311d6..2fe60feae2205 100644
Binary files a/sound/effects/pray_chaplain.ogg and b/sound/effects/pray_chaplain.ogg differ
diff --git a/sound/effects/pressureplate.ogg b/sound/effects/pressureplate.ogg
index aff7d198b5ae0..40c8a6962c5b3 100644
Binary files a/sound/effects/pressureplate.ogg and b/sound/effects/pressureplate.ogg differ
diff --git a/sound/effects/quack.ogg b/sound/effects/quack.ogg
index 16e0b2c83093c..2b7e1196ac63a 100644
Binary files a/sound/effects/quack.ogg and b/sound/effects/quack.ogg differ
diff --git a/sound/effects/refill.ogg b/sound/effects/refill.ogg
index 511658929bb7b..f0a74c6b05a04 100644
Binary files a/sound/effects/refill.ogg and b/sound/effects/refill.ogg differ
diff --git a/sound/effects/rock/rock_break.ogg b/sound/effects/rock/rock_break.ogg
index 09f6b1d5d33c4..1f11bf17f1750 100644
Binary files a/sound/effects/rock/rock_break.ogg and b/sound/effects/rock/rock_break.ogg differ
diff --git a/sound/effects/rock/rocktap1.ogg b/sound/effects/rock/rocktap1.ogg
index fe5b33ea5b675..645ad01cb5ec7 100644
Binary files a/sound/effects/rock/rocktap1.ogg and b/sound/effects/rock/rocktap1.ogg differ
diff --git a/sound/effects/rock/rocktap2.ogg b/sound/effects/rock/rocktap2.ogg
index 6339e5f69fa82..4ebe3572f01d1 100644
Binary files a/sound/effects/rock/rocktap2.ogg and b/sound/effects/rock/rocktap2.ogg differ
diff --git a/sound/effects/rock/rocktap3.ogg b/sound/effects/rock/rocktap3.ogg
index c830c16c38771..3489e91efbb6e 100644
Binary files a/sound/effects/rock/rocktap3.ogg and b/sound/effects/rock/rocktap3.ogg differ
diff --git a/sound/effects/roll.ogg b/sound/effects/roll.ogg
index 731c60b4edd43..97ae5221093fd 100644
Binary files a/sound/effects/roll.ogg and b/sound/effects/roll.ogg differ
diff --git a/sound/effects/rustle/rustle1.ogg b/sound/effects/rustle/rustle1.ogg
index 365fb5d85f309..deb3d6bada02b 100644
Binary files a/sound/effects/rustle/rustle1.ogg and b/sound/effects/rustle/rustle1.ogg differ
diff --git a/sound/effects/rustle/rustle2.ogg b/sound/effects/rustle/rustle2.ogg
index 031aeb8a8e17d..e92e874cb92c6 100644
Binary files a/sound/effects/rustle/rustle2.ogg and b/sound/effects/rustle/rustle2.ogg differ
diff --git a/sound/effects/rustle/rustle3.ogg b/sound/effects/rustle/rustle3.ogg
index 1bbdfb2500bf5..83338464ebd5c 100644
Binary files a/sound/effects/rustle/rustle3.ogg and b/sound/effects/rustle/rustle3.ogg differ
diff --git a/sound/effects/rustle/rustle4.ogg b/sound/effects/rustle/rustle4.ogg
index 1401fca0c72f9..c71ed78bd4ca4 100644
Binary files a/sound/effects/rustle/rustle4.ogg and b/sound/effects/rustle/rustle4.ogg differ
diff --git a/sound/effects/rustle/rustle5.ogg b/sound/effects/rustle/rustle5.ogg
index ac10981b80800..b50d79f37795d 100644
Binary files a/sound/effects/rustle/rustle5.ogg and b/sound/effects/rustle/rustle5.ogg differ
diff --git a/sound/effects/screech.ogg b/sound/effects/screech.ogg
index f4adab5e01fd9..4b96ff6c81093 100644
Binary files a/sound/effects/screech.ogg and b/sound/effects/screech.ogg differ
diff --git a/sound/effects/seedling_chargeup.ogg b/sound/effects/seedling_chargeup.ogg
index 155cc36c67bc6..c8078f1583ff3 100644
Binary files a/sound/effects/seedling_chargeup.ogg and b/sound/effects/seedling_chargeup.ogg differ
diff --git a/sound/effects/servostep.ogg b/sound/effects/servostep.ogg
index 757b4523da85d..e2a1ddb91bc57 100644
Binary files a/sound/effects/servostep.ogg and b/sound/effects/servostep.ogg differ
diff --git a/sound/effects/shieldbash.ogg b/sound/effects/shieldbash.ogg
index 8cf9efeadbd0d..389bcec1cb5f9 100644
Binary files a/sound/effects/shieldbash.ogg and b/sound/effects/shieldbash.ogg differ
diff --git a/sound/effects/shovel_dig.ogg b/sound/effects/shovel_dig.ogg
index 23f3353f00929..b2f689dc822e9 100644
Binary files a/sound/effects/shovel_dig.ogg and b/sound/effects/shovel_dig.ogg differ
diff --git a/sound/effects/singlebeat.ogg b/sound/effects/singlebeat.ogg
index 7ff820c5a5884..fbff25d90c116 100644
Binary files a/sound/effects/singlebeat.ogg and b/sound/effects/singlebeat.ogg differ
diff --git a/sound/effects/slosh.ogg b/sound/effects/slosh.ogg
index c414dbb0313ae..4384d10d21e27 100644
Binary files a/sound/effects/slosh.ogg and b/sound/effects/slosh.ogg differ
diff --git a/sound/effects/smoke.ogg b/sound/effects/smoke.ogg
index 49e1331fd1f40..548d2b3f2e19e 100644
Binary files a/sound/effects/smoke.ogg and b/sound/effects/smoke.ogg differ
diff --git a/sound/effects/snap.ogg b/sound/effects/snap.ogg
index d8804bc6e91a8..0f936d4355f5c 100644
Binary files a/sound/effects/snap.ogg and b/sound/effects/snap.ogg differ
diff --git a/sound/effects/soup_boil/soup_boil1.ogg b/sound/effects/soup_boil/soup_boil1.ogg
index 0c869bb94fbf6..f73f85d136d59 100644
Binary files a/sound/effects/soup_boil/soup_boil1.ogg and b/sound/effects/soup_boil/soup_boil1.ogg differ
diff --git a/sound/effects/soup_boil/soup_boil2.ogg b/sound/effects/soup_boil/soup_boil2.ogg
index 524d3b8c537e6..da88f061688ce 100644
Binary files a/sound/effects/soup_boil/soup_boil2.ogg and b/sound/effects/soup_boil/soup_boil2.ogg differ
diff --git a/sound/effects/soup_boil/soup_boil3.ogg b/sound/effects/soup_boil/soup_boil3.ogg
index 59a4c62ac40a5..d3f49862a35ea 100644
Binary files a/sound/effects/soup_boil/soup_boil3.ogg and b/sound/effects/soup_boil/soup_boil3.ogg differ
diff --git a/sound/effects/soup_boil/soup_boil4.ogg b/sound/effects/soup_boil/soup_boil4.ogg
index 4c18f4a353f48..aaf2990542efc 100644
Binary files a/sound/effects/soup_boil/soup_boil4.ogg and b/sound/effects/soup_boil/soup_boil4.ogg differ
diff --git a/sound/effects/soup_boil/soup_boil5.ogg b/sound/effects/soup_boil/soup_boil5.ogg
index a62bc985f4c56..2db279d7c12be 100644
Binary files a/sound/effects/soup_boil/soup_boil5.ogg and b/sound/effects/soup_boil/soup_boil5.ogg differ
diff --git a/sound/effects/soup_boil/soup_boil_end.ogg b/sound/effects/soup_boil/soup_boil_end.ogg
index 7931242a4cf28..dcf27aa2c1516 100644
Binary files a/sound/effects/soup_boil/soup_boil_end.ogg and b/sound/effects/soup_boil/soup_boil_end.ogg differ
diff --git a/sound/effects/space_wind.ogg b/sound/effects/space_wind.ogg
index 3709cdb055753..a73f85ac8c60e 100644
Binary files a/sound/effects/space_wind.ogg and b/sound/effects/space_wind.ogg differ
diff --git a/sound/effects/sparks/sparks1.ogg b/sound/effects/sparks/sparks1.ogg
index a45cadc0037e2..adcd895b2fa9f 100644
Binary files a/sound/effects/sparks/sparks1.ogg and b/sound/effects/sparks/sparks1.ogg differ
diff --git a/sound/effects/sparks/sparks2.ogg b/sound/effects/sparks/sparks2.ogg
index 9e2b0d26944f4..4cd65d5599a38 100644
Binary files a/sound/effects/sparks/sparks2.ogg and b/sound/effects/sparks/sparks2.ogg differ
diff --git a/sound/effects/sparks/sparks3.ogg b/sound/effects/sparks/sparks3.ogg
index 11bf8cd3400ed..1537a41c290c5 100644
Binary files a/sound/effects/sparks/sparks3.ogg and b/sound/effects/sparks/sparks3.ogg differ
diff --git a/sound/effects/sparks/sparks4.ogg b/sound/effects/sparks/sparks4.ogg
index 6081f9c330cdc..1603b5485c46e 100644
Binary files a/sound/effects/sparks/sparks4.ogg and b/sound/effects/sparks/sparks4.ogg differ
diff --git a/sound/effects/splash.ogg b/sound/effects/splash.ogg
index a02121ae02fb9..c137423b208db 100644
Binary files a/sound/effects/splash.ogg and b/sound/effects/splash.ogg differ
diff --git a/sound/effects/splat.ogg b/sound/effects/splat.ogg
index c7b60beaf1410..57e453f38d1eb 100644
Binary files a/sound/effects/splat.ogg and b/sound/effects/splat.ogg differ
diff --git a/sound/effects/spray.ogg b/sound/effects/spray.ogg
index d7796264c68d2..5d8d490f3f468 100644
Binary files a/sound/effects/spray.ogg and b/sound/effects/spray.ogg differ
diff --git a/sound/effects/spray2.ogg b/sound/effects/spray2.ogg
index d184d76bd00cb..ca97cd9fe06ea 100644
Binary files a/sound/effects/spray2.ogg and b/sound/effects/spray2.ogg differ
diff --git a/sound/effects/spray3.ogg b/sound/effects/spray3.ogg
index cf0502e744d29..979442e5a7041 100644
Binary files a/sound/effects/spray3.ogg and b/sound/effects/spray3.ogg differ
diff --git a/sound/effects/stall.ogg b/sound/effects/stall.ogg
index 8d152076767eb..6d850c4adf079 100644
Binary files a/sound/effects/stall.ogg and b/sound/effects/stall.ogg differ
diff --git a/sound/effects/stealthoff.ogg b/sound/effects/stealthoff.ogg
index d78706e9cdcb6..a227be22ff466 100644
Binary files a/sound/effects/stealthoff.ogg and b/sound/effects/stealthoff.ogg differ
diff --git a/sound/effects/stonedoor_openclose.ogg b/sound/effects/stonedoor_openclose.ogg
index baa5edf67247c..0f6d80c798928 100644
Binary files a/sound/effects/stonedoor_openclose.ogg and b/sound/effects/stonedoor_openclose.ogg differ
diff --git a/sound/effects/structure_stress/pop1.ogg b/sound/effects/structure_stress/pop1.ogg
index e5c3cc95f7bbb..ecc94e7c3ceff 100644
Binary files a/sound/effects/structure_stress/pop1.ogg and b/sound/effects/structure_stress/pop1.ogg differ
diff --git a/sound/effects/structure_stress/pop2.ogg b/sound/effects/structure_stress/pop2.ogg
index 2165a55e903b9..3ef94ea52bb1d 100644
Binary files a/sound/effects/structure_stress/pop2.ogg and b/sound/effects/structure_stress/pop2.ogg differ
diff --git a/sound/effects/structure_stress/pop3.ogg b/sound/effects/structure_stress/pop3.ogg
index e441ab1544181..aab1b7b25c6ca 100644
Binary files a/sound/effects/structure_stress/pop3.ogg and b/sound/effects/structure_stress/pop3.ogg differ
diff --git a/sound/effects/submerge.ogg b/sound/effects/submerge.ogg
index 8c50fba8e0a73..730bbd23cb7d3 100644
Binary files a/sound/effects/submerge.ogg and b/sound/effects/submerge.ogg differ
diff --git a/sound/effects/supermatter.ogg b/sound/effects/supermatter.ogg
index c6e87b61e6c60..0e9abf3ad8126 100644
Binary files a/sound/effects/supermatter.ogg and b/sound/effects/supermatter.ogg differ
diff --git a/sound/effects/tableheadsmash.ogg b/sound/effects/tableheadsmash.ogg
index 7f2a5f45a6a7d..1f11344d5687e 100644
Binary files a/sound/effects/tableheadsmash.ogg and b/sound/effects/tableheadsmash.ogg differ
diff --git a/sound/effects/tableslam.ogg b/sound/effects/tableslam.ogg
index 6d1ba5ce21548..c57d0e2e9bd18 100644
Binary files a/sound/effects/tableslam.ogg and b/sound/effects/tableslam.ogg differ
diff --git a/sound/effects/tank_treads.ogg b/sound/effects/tank_treads.ogg
index be4e0ff273bea..7bbaa68f675d4 100644
Binary files a/sound/effects/tank_treads.ogg and b/sound/effects/tank_treads.ogg differ
diff --git a/sound/effects/tendril_destroyed.ogg b/sound/effects/tendril_destroyed.ogg
index 210bd5225e263..7276985df9095 100644
Binary files a/sound/effects/tendril_destroyed.ogg and b/sound/effects/tendril_destroyed.ogg differ
diff --git a/sound/effects/treechop/treechop1.ogg b/sound/effects/treechop/treechop1.ogg
index 6e8dd0f6c409a..1288406890e86 100644
Binary files a/sound/effects/treechop/treechop1.ogg and b/sound/effects/treechop/treechop1.ogg differ
diff --git a/sound/effects/treechop/treechop2.ogg b/sound/effects/treechop/treechop2.ogg
index 6cbc09d324def..c133817ddbe38 100644
Binary files a/sound/effects/treechop/treechop2.ogg and b/sound/effects/treechop/treechop2.ogg differ
diff --git a/sound/effects/treechop/treechop3.ogg b/sound/effects/treechop/treechop3.ogg
index 60131052e77e5..eadd81a56286c 100644
Binary files a/sound/effects/treechop/treechop3.ogg and b/sound/effects/treechop/treechop3.ogg differ
diff --git a/sound/effects/valve_opening.ogg b/sound/effects/valve_opening.ogg
index 9e71912041467..6d34d2f38a7e4 100644
Binary files a/sound/effects/valve_opening.ogg and b/sound/effects/valve_opening.ogg differ
diff --git a/sound/effects/whirthunk.ogg b/sound/effects/whirthunk.ogg
index 2f49f39a8bfb6..bb6becbba8c20 100644
Binary files a/sound/effects/whirthunk.ogg and b/sound/effects/whirthunk.ogg differ
diff --git a/sound/effects/woodhit.ogg b/sound/effects/woodhit.ogg
index 04ff37f3c7af6..ba04538b4fa6e 100644
Binary files a/sound/effects/woodhit.ogg and b/sound/effects/woodhit.ogg differ
diff --git a/sound/effects/wounds/blood1.ogg b/sound/effects/wounds/blood1.ogg
index 88c76eb9e34f4..62aa1c744b9ff 100644
Binary files a/sound/effects/wounds/blood1.ogg and b/sound/effects/wounds/blood1.ogg differ
diff --git a/sound/effects/wounds/blood2.ogg b/sound/effects/wounds/blood2.ogg
index 0fb165108ab72..8c60eaefe1f68 100644
Binary files a/sound/effects/wounds/blood2.ogg and b/sound/effects/wounds/blood2.ogg differ
diff --git a/sound/effects/wounds/blood3.ogg b/sound/effects/wounds/blood3.ogg
index f6024a5ff6acd..1427cdfaca109 100644
Binary files a/sound/effects/wounds/blood3.ogg and b/sound/effects/wounds/blood3.ogg differ
diff --git a/sound/effects/wounds/crack1.ogg b/sound/effects/wounds/crack1.ogg
index aa3bf0ab014cc..f56c8f8d1641e 100644
Binary files a/sound/effects/wounds/crack1.ogg and b/sound/effects/wounds/crack1.ogg differ
diff --git a/sound/effects/wounds/crack2.ogg b/sound/effects/wounds/crack2.ogg
index cef226c98bd08..197685f14be91 100644
Binary files a/sound/effects/wounds/crack2.ogg and b/sound/effects/wounds/crack2.ogg differ
diff --git a/sound/effects/wounds/crackandbleed.ogg b/sound/effects/wounds/crackandbleed.ogg
index ea07f13d48208..4d8534c7a4795 100644
Binary files a/sound/effects/wounds/crackandbleed.ogg and b/sound/effects/wounds/crackandbleed.ogg differ
diff --git a/sound/effects/wounds/pierce1.ogg b/sound/effects/wounds/pierce1.ogg
index cd7b7c3961021..56e902307f0b4 100644
Binary files a/sound/effects/wounds/pierce1.ogg and b/sound/effects/wounds/pierce1.ogg differ
diff --git a/sound/effects/wounds/pierce2.ogg b/sound/effects/wounds/pierce2.ogg
index 4977cab299f27..627f7b0b50d18 100644
Binary files a/sound/effects/wounds/pierce2.ogg and b/sound/effects/wounds/pierce2.ogg differ
diff --git a/sound/effects/wounds/pierce3.ogg b/sound/effects/wounds/pierce3.ogg
index e81700b134867..6256adcac2bd5 100644
Binary files a/sound/effects/wounds/pierce3.ogg and b/sound/effects/wounds/pierce3.ogg differ
diff --git a/sound/effects/wounds/sizzle1.ogg b/sound/effects/wounds/sizzle1.ogg
index 4a3d2290181cf..8490fb2366ced 100644
Binary files a/sound/effects/wounds/sizzle1.ogg and b/sound/effects/wounds/sizzle1.ogg differ
diff --git a/sound/effects/wounds/sizzle2.ogg b/sound/effects/wounds/sizzle2.ogg
index 409206e58a099..95ddfd59c432a 100644
Binary files a/sound/effects/wounds/sizzle2.ogg and b/sound/effects/wounds/sizzle2.ogg differ
diff --git a/sound/effects/wounds/splatter.ogg b/sound/effects/wounds/splatter.ogg
index 1c678cfe1268a..747d68b39678d 100644
Binary files a/sound/effects/wounds/splatter.ogg and b/sound/effects/wounds/splatter.ogg differ
diff --git a/sound/effects/zzzt.ogg b/sound/effects/zzzt.ogg
index 028e78d9deccd..e1c2eab454169 100644
Binary files a/sound/effects/zzzt.ogg and b/sound/effects/zzzt.ogg differ
diff --git a/sound/items/airhorn/airhorn.ogg b/sound/items/airhorn/airhorn.ogg
index 10430cc2c6568..cd8902c86a23c 100644
Binary files a/sound/items/airhorn/airhorn.ogg and b/sound/items/airhorn/airhorn.ogg differ
diff --git a/sound/items/airhorn/airhorn2.ogg b/sound/items/airhorn/airhorn2.ogg
index 1b1ddcd0d10ff..3a87b872ef764 100644
Binary files a/sound/items/airhorn/airhorn2.ogg and b/sound/items/airhorn/airhorn2.ogg differ
diff --git a/sound/items/ampoule_snap.ogg b/sound/items/ampoule_snap.ogg
index eece6ff896ca3..20fcda42be9e4 100644
Binary files a/sound/items/ampoule_snap.ogg and b/sound/items/ampoule_snap.ogg differ
diff --git a/sound/items/balloon_pop.ogg b/sound/items/balloon_pop.ogg
index c492cb02233f1..4af3c4f7dca75 100644
Binary files a/sound/items/balloon_pop.ogg and b/sound/items/balloon_pop.ogg differ
diff --git a/sound/items/barcodebeep.ogg b/sound/items/barcodebeep.ogg
index e1939537fb92a..27119538005f9 100644
Binary files a/sound/items/barcodebeep.ogg and b/sound/items/barcodebeep.ogg differ
diff --git a/sound/items/baseballhit.ogg b/sound/items/baseballhit.ogg
index b5d67d8e0a721..2f6a8fd7ec809 100644
Binary files a/sound/items/baseballhit.ogg and b/sound/items/baseballhit.ogg differ
diff --git a/sound/items/basketball_bounce.ogg b/sound/items/basketball_bounce.ogg
index 11a064454318c..453411acf706c 100644
Binary files a/sound/items/basketball_bounce.ogg and b/sound/items/basketball_bounce.ogg differ
diff --git a/sound/items/baton/contractor_baton_unfolded_drop.ogg b/sound/items/baton/contractor_baton_unfolded_drop.ogg
index acebcd9d053c0..eeac78c6d3ae6 100644
Binary files a/sound/items/baton/contractor_baton_unfolded_drop.ogg and b/sound/items/baton/contractor_baton_unfolded_drop.ogg differ
diff --git a/sound/items/baton/contractor_baton_unfolded_pickup.ogg b/sound/items/baton/contractor_baton_unfolded_pickup.ogg
index 59ebc61163850..9e4f17b432cca 100644
Binary files a/sound/items/baton/contractor_baton_unfolded_pickup.ogg and b/sound/items/baton/contractor_baton_unfolded_pickup.ogg differ
diff --git a/sound/items/baton/stun_baton_active_drop.ogg b/sound/items/baton/stun_baton_active_drop.ogg
index a5e7cc8474948..21b5c2e69b8d4 100644
Binary files a/sound/items/baton/stun_baton_active_drop.ogg and b/sound/items/baton/stun_baton_active_drop.ogg differ
diff --git a/sound/items/baton/stun_baton_active_pickup.ogg b/sound/items/baton/stun_baton_active_pickup.ogg
index 3f4908c094556..5a8d9140b4d56 100644
Binary files a/sound/items/baton/stun_baton_active_pickup.ogg and b/sound/items/baton/stun_baton_active_pickup.ogg differ
diff --git a/sound/items/baton/stun_baton_inactive_drop.ogg b/sound/items/baton/stun_baton_inactive_drop.ogg
index 1d5d59e9012ba..2a1bcee878246 100644
Binary files a/sound/items/baton/stun_baton_inactive_drop.ogg and b/sound/items/baton/stun_baton_inactive_drop.ogg differ
diff --git a/sound/items/baton/stun_baton_inactive_pickup.ogg b/sound/items/baton/stun_baton_inactive_pickup.ogg
index 6b87e531fc43e..c7dbed6bdb5f3 100644
Binary files a/sound/items/baton/stun_baton_inactive_pickup.ogg and b/sound/items/baton/stun_baton_inactive_pickup.ogg differ
diff --git a/sound/items/baton/telescopic_baton_folded_drop.ogg b/sound/items/baton/telescopic_baton_folded_drop.ogg
index e61d11d0540ed..4f134c8186d95 100644
Binary files a/sound/items/baton/telescopic_baton_folded_drop.ogg and b/sound/items/baton/telescopic_baton_folded_drop.ogg differ
diff --git a/sound/items/baton/telescopic_baton_folded_pickup.ogg b/sound/items/baton/telescopic_baton_folded_pickup.ogg
index b0f126a76d683..bfd4d1a582842 100644
Binary files a/sound/items/baton/telescopic_baton_folded_pickup.ogg and b/sound/items/baton/telescopic_baton_folded_pickup.ogg differ
diff --git a/sound/items/baton/telescopic_baton_unfolded_drop.ogg b/sound/items/baton/telescopic_baton_unfolded_drop.ogg
index dc6a11a90aef2..1719fb8c92700 100644
Binary files a/sound/items/baton/telescopic_baton_unfolded_drop.ogg and b/sound/items/baton/telescopic_baton_unfolded_drop.ogg differ
diff --git a/sound/items/baton/telescopic_baton_unfolded_pickup.ogg b/sound/items/baton/telescopic_baton_unfolded_pickup.ogg
index 2a7eb3d27882b..e553af9495aa4 100644
Binary files a/sound/items/baton/telescopic_baton_unfolded_pickup.ogg and b/sound/items/baton/telescopic_baton_unfolded_pickup.ogg differ
diff --git a/sound/items/biddledeep.ogg b/sound/items/biddledeep.ogg
index f94b2b7fee1d0..651374afc1048 100644
Binary files a/sound/items/biddledeep.ogg and b/sound/items/biddledeep.ogg differ
diff --git a/sound/items/bikehorn.ogg b/sound/items/bikehorn.ogg
index 91b4585d43195..ec8487f46a750 100644
Binary files a/sound/items/bikehorn.ogg and b/sound/items/bikehorn.ogg differ
diff --git a/sound/items/box_cut.ogg b/sound/items/box_cut.ogg
index 32637b2a3dda5..d5e0d05006244 100644
Binary files a/sound/items/box_cut.ogg and b/sound/items/box_cut.ogg differ
diff --git a/sound/items/boxcutter_activate.ogg b/sound/items/boxcutter_activate.ogg
index 6700c6d03fde2..da6b8f7caeb4f 100644
Binary files a/sound/items/boxcutter_activate.ogg and b/sound/items/boxcutter_activate.ogg differ
diff --git a/sound/items/bubblewrap.ogg b/sound/items/bubblewrap.ogg
index 1595d817e7b7f..6f46eefc8256b 100644
Binary files a/sound/items/bubblewrap.ogg and b/sound/items/bubblewrap.ogg differ
diff --git a/sound/items/can/can_open1.ogg b/sound/items/can/can_open1.ogg
new file mode 100644
index 0000000000000..4c3ad7e115407
Binary files /dev/null and b/sound/items/can/can_open1.ogg differ
diff --git a/sound/items/can/can_open2.ogg b/sound/items/can/can_open2.ogg
new file mode 100644
index 0000000000000..b38beba4e6ed2
Binary files /dev/null and b/sound/items/can/can_open2.ogg differ
diff --git a/sound/items/can/can_open3.ogg b/sound/items/can/can_open3.ogg
new file mode 100644
index 0000000000000..d4371c1ce8e3d
Binary files /dev/null and b/sound/items/can/can_open3.ogg differ
diff --git a/sound/items/can/can_pop.ogg b/sound/items/can/can_pop.ogg
new file mode 100644
index 0000000000000..080a2099bf350
Binary files /dev/null and b/sound/items/can/can_pop.ogg differ
diff --git a/sound/items/can/can_shake.ogg b/sound/items/can/can_shake.ogg
new file mode 100644
index 0000000000000..c9b6bd595bbe0
Binary files /dev/null and b/sound/items/can/can_shake.ogg differ
diff --git a/sound/items/car_engine_start.ogg b/sound/items/car_engine_start.ogg
index 0898e76d02d90..5617736e8d8e6 100644
Binary files a/sound/items/car_engine_start.ogg and b/sound/items/car_engine_start.ogg differ
diff --git a/sound/items/cards/cardflip.ogg b/sound/items/cards/cardflip.ogg
index 88e909cdc1062..a086052079a76 100644
Binary files a/sound/items/cards/cardflip.ogg and b/sound/items/cards/cardflip.ogg differ
diff --git a/sound/items/cards/cardshuffle.ogg b/sound/items/cards/cardshuffle.ogg
index 3d59e5c97780d..ca3619792b9a8 100644
Binary files a/sound/items/cards/cardshuffle.ogg and b/sound/items/cards/cardshuffle.ogg differ
diff --git a/sound/items/carhorn.ogg b/sound/items/carhorn.ogg
index 53b6801103c2c..ff00e3946d715 100644
Binary files a/sound/items/carhorn.ogg and b/sound/items/carhorn.ogg differ
diff --git a/sound/items/ceramic_break.ogg b/sound/items/ceramic_break.ogg
index bb63341ce5f46..9ea3ce1783df4 100644
Binary files a/sound/items/ceramic_break.ogg and b/sound/items/ceramic_break.ogg differ
diff --git a/sound/items/champagne_pop.ogg b/sound/items/champagne_pop.ogg
index 41737839826af..57f0098d13899 100644
Binary files a/sound/items/champagne_pop.ogg and b/sound/items/champagne_pop.ogg differ
diff --git a/sound/items/click.ogg b/sound/items/click.ogg
index 366ed0f8cc155..b20bbf79bd87d 100644
Binary files a/sound/items/click.ogg and b/sound/items/click.ogg differ
diff --git a/sound/items/coinflip.ogg b/sound/items/coinflip.ogg
index ef7f849ef44b2..5900e476a2999 100644
Binary files a/sound/items/coinflip.ogg and b/sound/items/coinflip.ogg differ
diff --git a/sound/items/deconstruct.ogg b/sound/items/deconstruct.ogg
index 15453ecd1af79..af97b44a41762 100644
Binary files a/sound/items/deconstruct.ogg and b/sound/items/deconstruct.ogg differ
diff --git a/sound/items/dodgeball.ogg b/sound/items/dodgeball.ogg
index 878d923a8dfdd..827df1e55cfbd 100644
Binary files a/sound/items/dodgeball.ogg and b/sound/items/dodgeball.ogg differ
diff --git a/sound/items/drink.ogg b/sound/items/drink.ogg
index 9b41ae946ec59..d4fe302b0c02c 100644
Binary files a/sound/items/drink.ogg and b/sound/items/drink.ogg differ
diff --git a/sound/items/duct_tape/duct_tape_rip.ogg b/sound/items/duct_tape/duct_tape_rip.ogg
index bf1746ef7c940..e69de29bb2d1d 100644
Binary files a/sound/items/duct_tape/duct_tape_rip.ogg and b/sound/items/duct_tape/duct_tape_rip.ogg differ
diff --git a/sound/items/duct_tape/duct_tape_snap.ogg b/sound/items/duct_tape/duct_tape_snap.ogg
index 354061af12152..e69de29bb2d1d 100644
Binary files a/sound/items/duct_tape/duct_tape_snap.ogg and b/sound/items/duct_tape/duct_tape_snap.ogg differ
diff --git a/sound/items/dump_it.ogg b/sound/items/dump_it.ogg
index 33bdb49e69eab..f04ce27534498 100644
Binary files a/sound/items/dump_it.ogg and b/sound/items/dump_it.ogg differ
diff --git a/sound/items/eatfood.ogg b/sound/items/eatfood.ogg
index e1943d3fda9a5..d8ec151c95fcd 100644
Binary files a/sound/items/eatfood.ogg and b/sound/items/eatfood.ogg differ
diff --git a/sound/items/electronic_assembly_empty.ogg b/sound/items/electronic_assembly_empty.ogg
index 9144b414df432..21f76ebab2c98 100644
Binary files a/sound/items/electronic_assembly_empty.ogg and b/sound/items/electronic_assembly_empty.ogg differ
diff --git a/sound/items/electronic_assembly_emptying.ogg b/sound/items/electronic_assembly_emptying.ogg
index 70e47e7f83ac8..2001326cf9ae7 100644
Binary files a/sound/items/electronic_assembly_emptying.ogg and b/sound/items/electronic_assembly_emptying.ogg differ
diff --git a/sound/items/equip/attribution.txt b/sound/items/equip/attribution.txt
new file mode 100644
index 0000000000000..d0380ef39345b
--- /dev/null
+++ b/sound/items/equip/attribution.txt
@@ -0,0 +1,2 @@
+sneakers equip1 made by sadboysuss
+license: CC-BY-SA 3.0
diff --git a/sound/items/equip/backpack_equip.ogg b/sound/items/equip/backpack_equip.ogg
new file mode 100644
index 0000000000000..d04dfca2af272
Binary files /dev/null and b/sound/items/equip/backpack_equip.ogg differ
diff --git a/sound/items/equip/glove_equip.ogg b/sound/items/equip/glove_equip.ogg
index 33ab18a5e6e6a..3a8734de4763d 100644
Binary files a/sound/items/equip/glove_equip.ogg and b/sound/items/equip/glove_equip.ogg differ
diff --git a/sound/items/equip/jumpsuit_equip.ogg b/sound/items/equip/jumpsuit_equip.ogg
index bdcc2bb3a6523..8f125c384b605 100644
Binary files a/sound/items/equip/jumpsuit_equip.ogg and b/sound/items/equip/jumpsuit_equip.ogg differ
diff --git a/sound/items/equip/sneakers_equip1.ogg b/sound/items/equip/sneakers_equip1.ogg
new file mode 100644
index 0000000000000..a9ca5bed9a8ca
Binary files /dev/null and b/sound/items/equip/sneakers_equip1.ogg differ
diff --git a/sound/items/equip/toolbelt_equip.ogg b/sound/items/equip/toolbelt_equip.ogg
index 0ef67a3fd6c67..572d9a7e25a70 100644
Binary files a/sound/items/equip/toolbelt_equip.ogg and b/sound/items/equip/toolbelt_equip.ogg differ
diff --git a/sound/items/eshield_recharge.ogg b/sound/items/eshield_recharge.ogg
index 747ad4563e5c1..ab5b65e5aa7ea 100644
Binary files a/sound/items/eshield_recharge.ogg and b/sound/items/eshield_recharge.ogg differ
diff --git a/sound/items/foodcanopen.ogg b/sound/items/foodcanopen.ogg
index c565718499086..752279137851c 100644
Binary files a/sound/items/foodcanopen.ogg and b/sound/items/foodcanopen.ogg differ
diff --git a/sound/items/frog_statue_release.ogg b/sound/items/frog_statue_release.ogg
index de7d3547778a9..ab10919b703b7 100644
Binary files a/sound/items/frog_statue_release.ogg and b/sound/items/frog_statue_release.ogg differ
diff --git a/sound/items/fulton/fultext_deploy.ogg b/sound/items/fulton/fultext_deploy.ogg
index 2433b9e0fe3c6..d3ad86778633a 100644
Binary files a/sound/items/fulton/fultext_deploy.ogg and b/sound/items/fulton/fultext_deploy.ogg differ
diff --git a/sound/items/fulton/fultext_launch.ogg b/sound/items/fulton/fultext_launch.ogg
index 2c874419927fc..4b88540df0170 100644
Binary files a/sound/items/fulton/fultext_launch.ogg and b/sound/items/fulton/fultext_launch.ogg differ
diff --git a/sound/items/gavel.ogg b/sound/items/gavel.ogg
index 22a851e1f3352..8073d43638149 100644
Binary files a/sound/items/gavel.ogg and b/sound/items/gavel.ogg differ
diff --git a/sound/items/geiger/ext1.ogg b/sound/items/geiger/ext1.ogg
index ca1b44e4d8540..ccd5516b05be0 100644
Binary files a/sound/items/geiger/ext1.ogg and b/sound/items/geiger/ext1.ogg differ
diff --git a/sound/items/geiger/ext2.ogg b/sound/items/geiger/ext2.ogg
index c0c316245bad7..ab74060bd8346 100644
Binary files a/sound/items/geiger/ext2.ogg and b/sound/items/geiger/ext2.ogg differ
diff --git a/sound/items/geiger/ext3.ogg b/sound/items/geiger/ext3.ogg
index fc367d9466274..48926d71fdfd1 100644
Binary files a/sound/items/geiger/ext3.ogg and b/sound/items/geiger/ext3.ogg differ
diff --git a/sound/items/geiger/ext4.ogg b/sound/items/geiger/ext4.ogg
index d3b00ebaac655..a2851b4932eff 100644
Binary files a/sound/items/geiger/ext4.ogg and b/sound/items/geiger/ext4.ogg differ
diff --git a/sound/items/geiger/high1.ogg b/sound/items/geiger/high1.ogg
index 8725affdd4f01..c72afd6adfb82 100644
Binary files a/sound/items/geiger/high1.ogg and b/sound/items/geiger/high1.ogg differ
diff --git a/sound/items/geiger/high2.ogg b/sound/items/geiger/high2.ogg
index f1e3868898dad..75aa348d39ee5 100644
Binary files a/sound/items/geiger/high2.ogg and b/sound/items/geiger/high2.ogg differ
diff --git a/sound/items/geiger/high3.ogg b/sound/items/geiger/high3.ogg
index bdc5282a5c0ad..25163b89de354 100644
Binary files a/sound/items/geiger/high3.ogg and b/sound/items/geiger/high3.ogg differ
diff --git a/sound/items/geiger/high4.ogg b/sound/items/geiger/high4.ogg
index 8e185d6f78d96..bfa705d108a5a 100644
Binary files a/sound/items/geiger/high4.ogg and b/sound/items/geiger/high4.ogg differ
diff --git a/sound/items/geiger/low1.ogg b/sound/items/geiger/low1.ogg
index 9bdb8bd327581..1d97bd2cb3ca5 100644
Binary files a/sound/items/geiger/low1.ogg and b/sound/items/geiger/low1.ogg differ
diff --git a/sound/items/geiger/low2.ogg b/sound/items/geiger/low2.ogg
index ce4855f25fcec..afe3eaace58f6 100644
Binary files a/sound/items/geiger/low2.ogg and b/sound/items/geiger/low2.ogg differ
diff --git a/sound/items/geiger/low3.ogg b/sound/items/geiger/low3.ogg
index 70aaea064f512..fe6d7e6d3d3d0 100644
Binary files a/sound/items/geiger/low3.ogg and b/sound/items/geiger/low3.ogg differ
diff --git a/sound/items/geiger/low4.ogg b/sound/items/geiger/low4.ogg
index f36e3b7699d3f..7465b9146ee4b 100644
Binary files a/sound/items/geiger/low4.ogg and b/sound/items/geiger/low4.ogg differ
diff --git a/sound/items/geiger/med1.ogg b/sound/items/geiger/med1.ogg
index c062c4d2a8f88..d3bd0a137b48f 100644
Binary files a/sound/items/geiger/med1.ogg and b/sound/items/geiger/med1.ogg differ
diff --git a/sound/items/geiger/med2.ogg b/sound/items/geiger/med2.ogg
index 210119a287fde..cda52b5aa1757 100644
Binary files a/sound/items/geiger/med2.ogg and b/sound/items/geiger/med2.ogg differ
diff --git a/sound/items/geiger/med3.ogg b/sound/items/geiger/med3.ogg
index ed6f0f4d7f579..cf954e75aef64 100644
Binary files a/sound/items/geiger/med3.ogg and b/sound/items/geiger/med3.ogg differ
diff --git a/sound/items/geiger/med4.ogg b/sound/items/geiger/med4.ogg
index 70635a97a3a08..9590d64967aee 100644
Binary files a/sound/items/geiger/med4.ogg and b/sound/items/geiger/med4.ogg differ
diff --git a/sound/items/hammering_wood.ogg b/sound/items/hammering_wood.ogg
index 37ecf90ec440e..f669353c4ac7b 100644
Binary files a/sound/items/hammering_wood.ogg and b/sound/items/hammering_wood.ogg differ
diff --git a/sound/items/handcuff_finish.ogg b/sound/items/handcuff_finish.ogg
index 92096837835fe..80459eaa1288f 100644
Binary files a/sound/items/handcuff_finish.ogg and b/sound/items/handcuff_finish.ogg differ
diff --git a/sound/items/handling/ammobox_drop.ogg b/sound/items/handling/ammobox_drop.ogg
index 13fce70fe3de8..eac3817e6fe86 100644
Binary files a/sound/items/handling/ammobox_drop.ogg and b/sound/items/handling/ammobox_drop.ogg differ
diff --git a/sound/items/handling/ammobox_pickup.ogg b/sound/items/handling/ammobox_pickup.ogg
index 9532a7697b985..a22d772659807 100644
Binary files a/sound/items/handling/ammobox_pickup.ogg and b/sound/items/handling/ammobox_pickup.ogg differ
diff --git a/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle1.ogg b/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle1.ogg
index 0d5d521ad5b1b..3effc881d19c9 100644
Binary files a/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle1.ogg and b/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle1.ogg differ
diff --git a/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle2.ogg b/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle2.ogg
index dbbf25bbc3658..37f43242f16a9 100644
Binary files a/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle2.ogg and b/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle2.ogg differ
diff --git a/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle3.ogg b/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle3.ogg
index 074e1c61197b6..8d23a16042a50 100644
Binary files a/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle3.ogg and b/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle3.ogg differ
diff --git a/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle4.ogg b/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle4.ogg
index 6a105b85ac525..0bfda9525fe85 100644
Binary files a/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle4.ogg and b/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle4.ogg differ
diff --git a/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle5.ogg b/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle5.ogg
index b2069180364e1..e7e08c20a74dd 100644
Binary files a/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle5.ogg and b/sound/items/handling/armor_rustle/plate_armor/plate_armor_rustle5.ogg differ
diff --git a/sound/items/handling/armor_rustle/riot_armor/suitstep1.ogg b/sound/items/handling/armor_rustle/riot_armor/suitstep1.ogg
index fc5287d703a41..77d3f51ecb525 100644
Binary files a/sound/items/handling/armor_rustle/riot_armor/suitstep1.ogg and b/sound/items/handling/armor_rustle/riot_armor/suitstep1.ogg differ
diff --git a/sound/items/handling/armor_rustle/riot_armor/suitstep2.ogg b/sound/items/handling/armor_rustle/riot_armor/suitstep2.ogg
index b6700dd99171a..be6fd1a0beafb 100644
Binary files a/sound/items/handling/armor_rustle/riot_armor/suitstep2.ogg and b/sound/items/handling/armor_rustle/riot_armor/suitstep2.ogg differ
diff --git a/sound/items/handling/backpack/attribution.txt b/sound/items/handling/backpack/attribution.txt
new file mode 100644
index 0000000000000..15c1754e1c984
--- /dev/null
+++ b/sound/items/handling/backpack/attribution.txt
@@ -0,0 +1,2 @@
+backpack sounds made by sadboysuss
+license: CC-BY-SA 3.0
\ No newline at end of file
diff --git a/sound/items/handling/backpack/backpack_drop1.ogg b/sound/items/handling/backpack/backpack_drop1.ogg
new file mode 100644
index 0000000000000..96f90d46d0a11
Binary files /dev/null and b/sound/items/handling/backpack/backpack_drop1.ogg differ
diff --git a/sound/items/handling/backpack/backpack_pickup1.ogg b/sound/items/handling/backpack/backpack_pickup1.ogg
new file mode 100644
index 0000000000000..854f00767ba98
Binary files /dev/null and b/sound/items/handling/backpack/backpack_pickup1.ogg differ
diff --git a/sound/items/handling/beaker_pickup.ogg b/sound/items/handling/beaker_pickup.ogg
index c31bf6856dcaf..a58af35d224f8 100644
Binary files a/sound/items/handling/beaker_pickup.ogg and b/sound/items/handling/beaker_pickup.ogg differ
diff --git a/sound/items/handling/beaker_place.ogg b/sound/items/handling/beaker_place.ogg
index 14b3868d0673d..ff6b93d9a4ea0 100644
Binary files a/sound/items/handling/beaker_place.ogg and b/sound/items/handling/beaker_place.ogg differ
diff --git a/sound/items/handling/book_drop.ogg b/sound/items/handling/book_drop.ogg
index b492b665f598b..07ef1ce90b101 100644
Binary files a/sound/items/handling/book_drop.ogg and b/sound/items/handling/book_drop.ogg differ
diff --git a/sound/items/handling/book_pickup.ogg b/sound/items/handling/book_pickup.ogg
index 120a4e4721a88..64f54539367ba 100644
Binary files a/sound/items/handling/book_pickup.ogg and b/sound/items/handling/book_pickup.ogg differ
diff --git a/sound/items/handling/cardboard_box/cardboard_box_open.ogg b/sound/items/handling/cardboard_box/cardboard_box_open.ogg
index 1ad890d159a59..5a885ac687949 100644
Binary files a/sound/items/handling/cardboard_box/cardboard_box_open.ogg and b/sound/items/handling/cardboard_box/cardboard_box_open.ogg differ
diff --git a/sound/items/handling/cardboard_box/cardboard_box_rustle.ogg b/sound/items/handling/cardboard_box/cardboard_box_rustle.ogg
index 01dcc5567b721..3394c172e445b 100644
Binary files a/sound/items/handling/cardboard_box/cardboard_box_rustle.ogg and b/sound/items/handling/cardboard_box/cardboard_box_rustle.ogg differ
diff --git a/sound/items/handling/cardboard_box/cardboardbox_drop.ogg b/sound/items/handling/cardboard_box/cardboardbox_drop.ogg
index 7070ba1c34220..e7620c04e022d 100644
Binary files a/sound/items/handling/cardboard_box/cardboardbox_drop.ogg and b/sound/items/handling/cardboard_box/cardboardbox_drop.ogg differ
diff --git a/sound/items/handling/cardboard_box/cardboardbox_pickup.ogg b/sound/items/handling/cardboard_box/cardboardbox_pickup.ogg
index aa4e72129b0d2..45f83777c636a 100644
Binary files a/sound/items/handling/cardboard_box/cardboardbox_pickup.ogg and b/sound/items/handling/cardboard_box/cardboardbox_pickup.ogg differ
diff --git a/sound/items/handling/cloth_drop.ogg b/sound/items/handling/cloth_drop.ogg
index 5bf734caba0ff..f7b8c43c1a84e 100644
Binary files a/sound/items/handling/cloth_drop.ogg and b/sound/items/handling/cloth_drop.ogg differ
diff --git a/sound/items/handling/cloth_pickup.ogg b/sound/items/handling/cloth_pickup.ogg
index f46988887d1de..7e68983c2cae9 100644
Binary files a/sound/items/handling/cloth_pickup.ogg and b/sound/items/handling/cloth_pickup.ogg differ
diff --git a/sound/items/handling/component_drop.ogg b/sound/items/handling/component_drop.ogg
index 093fde7c90c6a..e920516f9dd2b 100644
Binary files a/sound/items/handling/component_drop.ogg and b/sound/items/handling/component_drop.ogg differ
diff --git a/sound/items/handling/component_pickup.ogg b/sound/items/handling/component_pickup.ogg
index cfaba1dd1933e..bc41bddd55a38 100644
Binary files a/sound/items/handling/component_pickup.ogg and b/sound/items/handling/component_pickup.ogg differ
diff --git a/sound/items/handling/disk_drop.ogg b/sound/items/handling/disk_drop.ogg
index 3174b88117faf..d0f126e5eea14 100644
Binary files a/sound/items/handling/disk_drop.ogg and b/sound/items/handling/disk_drop.ogg differ
diff --git a/sound/items/handling/disk_pickup.ogg b/sound/items/handling/disk_pickup.ogg
index 8f67406a5fb31..016a660f5f05c 100644
Binary files a/sound/items/handling/disk_pickup.ogg and b/sound/items/handling/disk_pickup.ogg differ
diff --git a/sound/items/handling/drinkglass_drop.ogg b/sound/items/handling/drinkglass_drop.ogg
index 43bb732db3d1b..79c0bdf5e17e7 100644
Binary files a/sound/items/handling/drinkglass_drop.ogg and b/sound/items/handling/drinkglass_drop.ogg differ
diff --git a/sound/items/handling/drinkglass_pickup.ogg b/sound/items/handling/drinkglass_pickup.ogg
index fcd1c7d3126e7..8c35c2a4885ed 100644
Binary files a/sound/items/handling/drinkglass_pickup.ogg and b/sound/items/handling/drinkglass_pickup.ogg differ
diff --git a/sound/items/handling/gas_tank/gas_tank_drop.ogg b/sound/items/handling/gas_tank/gas_tank_drop.ogg
index e102cb4fe8aad..4bdeecb7d6fd8 100644
Binary files a/sound/items/handling/gas_tank/gas_tank_drop.ogg and b/sound/items/handling/gas_tank/gas_tank_drop.ogg differ
diff --git a/sound/items/handling/gas_tank/gas_tank_pick_up.ogg b/sound/items/handling/gas_tank/gas_tank_pick_up.ogg
index 41c83645da609..f7b162af0e27d 100644
Binary files a/sound/items/handling/gas_tank/gas_tank_pick_up.ogg and b/sound/items/handling/gas_tank/gas_tank_pick_up.ogg differ
diff --git a/sound/items/handling/glove_drop.ogg b/sound/items/handling/glove_drop.ogg
index bfd490e94a8ae..4fd2948cfa94f 100644
Binary files a/sound/items/handling/glove_drop.ogg and b/sound/items/handling/glove_drop.ogg differ
diff --git a/sound/items/handling/glove_pick_up.ogg b/sound/items/handling/glove_pick_up.ogg
index 1fd7de9e6b968..daf60c2518ff3 100644
Binary files a/sound/items/handling/glove_pick_up.ogg and b/sound/items/handling/glove_pick_up.ogg differ
diff --git a/sound/items/handling/grenade/grenade_drop.ogg b/sound/items/handling/grenade/grenade_drop.ogg
index 04627811cd188..a8eb675ff3d4f 100644
Binary files a/sound/items/handling/grenade/grenade_drop.ogg and b/sound/items/handling/grenade/grenade_drop.ogg differ
diff --git a/sound/items/handling/grenade/grenade_pick_up.ogg b/sound/items/handling/grenade/grenade_pick_up.ogg
index d257659f76182..f01ff3bd2a7a3 100644
Binary files a/sound/items/handling/grenade/grenade_pick_up.ogg and b/sound/items/handling/grenade/grenade_pick_up.ogg differ
diff --git a/sound/items/handling/gun/ballistics/magazine/magazine_drop1.ogg b/sound/items/handling/gun/ballistics/magazine/magazine_drop1.ogg
index 024b0343cb27b..ffd1a5f9f3eca 100644
Binary files a/sound/items/handling/gun/ballistics/magazine/magazine_drop1.ogg and b/sound/items/handling/gun/ballistics/magazine/magazine_drop1.ogg differ
diff --git a/sound/items/handling/gun/ballistics/magazine/magazine_pickup1.ogg b/sound/items/handling/gun/ballistics/magazine/magazine_pickup1.ogg
index 077f44a029d13..1038b5a8c4747 100644
Binary files a/sound/items/handling/gun/ballistics/magazine/magazine_pickup1.ogg and b/sound/items/handling/gun/ballistics/magazine/magazine_pickup1.ogg differ
diff --git a/sound/items/handling/gun/ballistics/pistol/pistol_drop1.ogg b/sound/items/handling/gun/ballistics/pistol/pistol_drop1.ogg
index d0081424414ea..639dc3b4aaa41 100644
Binary files a/sound/items/handling/gun/ballistics/pistol/pistol_drop1.ogg and b/sound/items/handling/gun/ballistics/pistol/pistol_drop1.ogg differ
diff --git a/sound/items/handling/gun/ballistics/pistol/pistol_pickup1.ogg b/sound/items/handling/gun/ballistics/pistol/pistol_pickup1.ogg
index 28922b2c2c26a..4471adefa82c6 100644
Binary files a/sound/items/handling/gun/ballistics/pistol/pistol_pickup1.ogg and b/sound/items/handling/gun/ballistics/pistol/pistol_pickup1.ogg differ
diff --git a/sound/items/handling/gun/ballistics/rifle/rifle_drop1.ogg b/sound/items/handling/gun/ballistics/rifle/rifle_drop1.ogg
index eada3f9bf7692..fd2f277abe234 100644
Binary files a/sound/items/handling/gun/ballistics/rifle/rifle_drop1.ogg and b/sound/items/handling/gun/ballistics/rifle/rifle_drop1.ogg differ
diff --git a/sound/items/handling/gun/ballistics/rifle/rifle_pickup1.ogg b/sound/items/handling/gun/ballistics/rifle/rifle_pickup1.ogg
index 470c5e2309688..1f219775f0985 100644
Binary files a/sound/items/handling/gun/ballistics/rifle/rifle_pickup1.ogg and b/sound/items/handling/gun/ballistics/rifle/rifle_pickup1.ogg differ
diff --git a/sound/items/handling/gun/ballistics/shotgun/shotgun_drop1.ogg b/sound/items/handling/gun/ballistics/shotgun/shotgun_drop1.ogg
index 97d3a9e6fb946..30b3fa5063e05 100644
Binary files a/sound/items/handling/gun/ballistics/shotgun/shotgun_drop1.ogg and b/sound/items/handling/gun/ballistics/shotgun/shotgun_drop1.ogg differ
diff --git a/sound/items/handling/gun/ballistics/shotgun/shotgun_pickup1.ogg b/sound/items/handling/gun/ballistics/shotgun/shotgun_pickup1.ogg
index 76c3f8ce2317e..d12f1c9ba4366 100644
Binary files a/sound/items/handling/gun/ballistics/shotgun/shotgun_pickup1.ogg and b/sound/items/handling/gun/ballistics/shotgun/shotgun_pickup1.ogg differ
diff --git a/sound/items/handling/gun/ballistics/smg/smg_drop1.ogg b/sound/items/handling/gun/ballistics/smg/smg_drop1.ogg
index c0a39efbc2823..c9d05c150a880 100644
Binary files a/sound/items/handling/gun/ballistics/smg/smg_drop1.ogg and b/sound/items/handling/gun/ballistics/smg/smg_drop1.ogg differ
diff --git a/sound/items/handling/gun/ballistics/smg/smg_pickup1.ogg b/sound/items/handling/gun/ballistics/smg/smg_pickup1.ogg
index 1d732f893b1f3..de24a788919f5 100644
Binary files a/sound/items/handling/gun/ballistics/smg/smg_pickup1.ogg and b/sound/items/handling/gun/ballistics/smg/smg_pickup1.ogg differ
diff --git a/sound/items/handling/gun/gun_drop.ogg b/sound/items/handling/gun/gun_drop.ogg
index 21b83bc91d611..88f541c00324c 100644
Binary files a/sound/items/handling/gun/gun_drop.ogg and b/sound/items/handling/gun/gun_drop.ogg differ
diff --git a/sound/items/handling/gun/gun_pick_up.ogg b/sound/items/handling/gun/gun_pick_up.ogg
index 6bf6b45a16b26..df0ca683bcd62 100644
Binary files a/sound/items/handling/gun/gun_pick_up.ogg and b/sound/items/handling/gun/gun_pick_up.ogg differ
diff --git a/sound/items/handling/handcuffs/handcuffs_drop.ogg b/sound/items/handling/handcuffs/handcuffs_drop.ogg
index 85b7f172e4852..53d33d9206528 100644
Binary files a/sound/items/handling/handcuffs/handcuffs_drop.ogg and b/sound/items/handling/handcuffs/handcuffs_drop.ogg differ
diff --git a/sound/items/handling/handcuffs/handcuffs_pick_up.ogg b/sound/items/handling/handcuffs/handcuffs_pick_up.ogg
index d3fdc3450bd47..db9d7042580bb 100644
Binary files a/sound/items/handling/handcuffs/handcuffs_pick_up.ogg and b/sound/items/handling/handcuffs/handcuffs_pick_up.ogg differ
diff --git a/sound/items/handling/holster_open.ogg b/sound/items/handling/holster_open.ogg
index 984e7ad4fea38..d52fa552e2e30 100644
Binary files a/sound/items/handling/holster_open.ogg and b/sound/items/handling/holster_open.ogg differ
diff --git a/sound/items/handling/lead_pipe/lead_pipe_drop.ogg b/sound/items/handling/lead_pipe/lead_pipe_drop.ogg
index 63561fc2f950c..4587049c1c1bb 100644
Binary files a/sound/items/handling/lead_pipe/lead_pipe_drop.ogg and b/sound/items/handling/lead_pipe/lead_pipe_drop.ogg differ
diff --git a/sound/items/handling/lead_pipe/lead_pipe_pickup.ogg b/sound/items/handling/lead_pipe/lead_pipe_pickup.ogg
index 559138d66a53f..f9e47b47abac9 100644
Binary files a/sound/items/handling/lead_pipe/lead_pipe_pickup.ogg and b/sound/items/handling/lead_pipe/lead_pipe_pickup.ogg differ
diff --git a/sound/items/handling/matchbox_drop.ogg b/sound/items/handling/matchbox_drop.ogg
index 8e4e276c9e196..f680326c1169d 100644
Binary files a/sound/items/handling/matchbox_drop.ogg and b/sound/items/handling/matchbox_drop.ogg differ
diff --git a/sound/items/handling/matchbox_pickup.ogg b/sound/items/handling/matchbox_pickup.ogg
index 82c23410e114a..db2734e745f10 100644
Binary files a/sound/items/handling/matchbox_pickup.ogg and b/sound/items/handling/matchbox_pickup.ogg differ
diff --git a/sound/items/handling/materials/cardboard_drop.ogg b/sound/items/handling/materials/cardboard_drop.ogg
index c1082f2e37d7d..f0612e4c39b74 100644
Binary files a/sound/items/handling/materials/cardboard_drop.ogg and b/sound/items/handling/materials/cardboard_drop.ogg differ
diff --git a/sound/items/handling/materials/cardboard_pick_up.ogg b/sound/items/handling/materials/cardboard_pick_up.ogg
index a363c587b375b..f4532c4e62641 100644
Binary files a/sound/items/handling/materials/cardboard_pick_up.ogg and b/sound/items/handling/materials/cardboard_pick_up.ogg differ
diff --git a/sound/items/handling/materials/glass_drop.ogg b/sound/items/handling/materials/glass_drop.ogg
index 389034f4ebb98..f7df806e60e3f 100644
Binary files a/sound/items/handling/materials/glass_drop.ogg and b/sound/items/handling/materials/glass_drop.ogg differ
diff --git a/sound/items/handling/materials/glass_pick_up.ogg b/sound/items/handling/materials/glass_pick_up.ogg
index 4df3ec51cc817..53abd497dc793 100644
Binary files a/sound/items/handling/materials/glass_pick_up.ogg and b/sound/items/handling/materials/glass_pick_up.ogg differ
diff --git a/sound/items/handling/materials/iron_rod_pick_up.ogg b/sound/items/handling/materials/iron_rod_pick_up.ogg
index 51fab52a99dba..e81a3f3af1fda 100644
Binary files a/sound/items/handling/materials/iron_rod_pick_up.ogg and b/sound/items/handling/materials/iron_rod_pick_up.ogg differ
diff --git a/sound/items/handling/materials/metal_drop.ogg b/sound/items/handling/materials/metal_drop.ogg
index 46488dca29fd3..81fbdd0cc7d03 100644
Binary files a/sound/items/handling/materials/metal_drop.ogg and b/sound/items/handling/materials/metal_drop.ogg differ
diff --git a/sound/items/handling/materials/metal_pick_up.ogg b/sound/items/handling/materials/metal_pick_up.ogg
index 7a710bc0e577b..9cba563eae6b9 100644
Binary files a/sound/items/handling/materials/metal_pick_up.ogg and b/sound/items/handling/materials/metal_pick_up.ogg differ
diff --git a/sound/items/handling/materials/plastic_drop.ogg b/sound/items/handling/materials/plastic_drop.ogg
index 928ed7e85d7cc..d3948c0ac04fc 100644
Binary files a/sound/items/handling/materials/plastic_drop.ogg and b/sound/items/handling/materials/plastic_drop.ogg differ
diff --git a/sound/items/handling/materials/plastic_pick_up.ogg b/sound/items/handling/materials/plastic_pick_up.ogg
index 6c4c569a1c105..9b52b87145dfd 100644
Binary files a/sound/items/handling/materials/plastic_pick_up.ogg and b/sound/items/handling/materials/plastic_pick_up.ogg differ
diff --git a/sound/items/handling/materials/skin_drop.ogg b/sound/items/handling/materials/skin_drop.ogg
index effdd83392bee..72510fd00ef1c 100644
Binary files a/sound/items/handling/materials/skin_drop.ogg and b/sound/items/handling/materials/skin_drop.ogg differ
diff --git a/sound/items/handling/materials/skin_pick_up.ogg b/sound/items/handling/materials/skin_pick_up.ogg
index 9edf326cd9ef3..224e59f36e603 100644
Binary files a/sound/items/handling/materials/skin_pick_up.ogg and b/sound/items/handling/materials/skin_pick_up.ogg differ
diff --git a/sound/items/handling/materials/wood_drop.ogg b/sound/items/handling/materials/wood_drop.ogg
index c55e393cf7a32..58980df7d2684 100644
Binary files a/sound/items/handling/materials/wood_drop.ogg and b/sound/items/handling/materials/wood_drop.ogg differ
diff --git a/sound/items/handling/materials/wood_pick_up.ogg b/sound/items/handling/materials/wood_pick_up.ogg
index 77b774e433426..f469286380bfc 100644
Binary files a/sound/items/handling/materials/wood_pick_up.ogg and b/sound/items/handling/materials/wood_pick_up.ogg differ
diff --git a/sound/items/handling/medkit/medkit_drop.ogg b/sound/items/handling/medkit/medkit_drop.ogg
index 3acf1db1abc50..042eb7a5ab9fd 100644
Binary files a/sound/items/handling/medkit/medkit_drop.ogg and b/sound/items/handling/medkit/medkit_drop.ogg differ
diff --git a/sound/items/handling/medkit/medkit_open.ogg b/sound/items/handling/medkit/medkit_open.ogg
index 63307783d2f77..2f72740593294 100644
Binary files a/sound/items/handling/medkit/medkit_open.ogg and b/sound/items/handling/medkit/medkit_open.ogg differ
diff --git a/sound/items/handling/medkit/medkit_pick_up.ogg b/sound/items/handling/medkit/medkit_pick_up.ogg
index 90de3a19616ef..4b4de0e0a35eb 100644
Binary files a/sound/items/handling/medkit/medkit_pick_up.ogg and b/sound/items/handling/medkit/medkit_pick_up.ogg differ
diff --git a/sound/items/handling/medkit/medkit_rustle.ogg b/sound/items/handling/medkit/medkit_rustle.ogg
index 55ebc82b911d5..86d9b3a545f3c 100644
Binary files a/sound/items/handling/medkit/medkit_rustle.ogg and b/sound/items/handling/medkit/medkit_rustle.ogg differ
diff --git a/sound/items/handling/paper_drop.ogg b/sound/items/handling/paper_drop.ogg
index 27ce2b3d1a77f..2d9f83a07a061 100644
Binary files a/sound/items/handling/paper_drop.ogg and b/sound/items/handling/paper_drop.ogg differ
diff --git a/sound/items/handling/paper_pickup.ogg b/sound/items/handling/paper_pickup.ogg
index 55ae2b3d2db62..79c4743304ffc 100644
Binary files a/sound/items/handling/paper_pickup.ogg and b/sound/items/handling/paper_pickup.ogg differ
diff --git a/sound/items/handling/pepper_spray/pepper_spray_drop.ogg b/sound/items/handling/pepper_spray/pepper_spray_drop.ogg
index e071c65d3bce4..99c396e053008 100644
Binary files a/sound/items/handling/pepper_spray/pepper_spray_drop.ogg and b/sound/items/handling/pepper_spray/pepper_spray_drop.ogg differ
diff --git a/sound/items/handling/pepper_spray/pepper_spray_pick_up.ogg b/sound/items/handling/pepper_spray/pepper_spray_pick_up.ogg
index a474bbd91b3c7..90997e8db1dbc 100644
Binary files a/sound/items/handling/pepper_spray/pepper_spray_pick_up.ogg and b/sound/items/handling/pepper_spray/pepper_spray_pick_up.ogg differ
diff --git a/sound/items/handling/pill_bottle_open.ogg b/sound/items/handling/pill_bottle_open.ogg
index ab904e124d907..20797879dd013 100644
Binary files a/sound/items/handling/pill_bottle_open.ogg and b/sound/items/handling/pill_bottle_open.ogg differ
diff --git a/sound/items/handling/pill_bottle_pickup.ogg b/sound/items/handling/pill_bottle_pickup.ogg
index 1b4ee45e4fc0b..fa89e0a9cbaa4 100644
Binary files a/sound/items/handling/pill_bottle_pickup.ogg and b/sound/items/handling/pill_bottle_pickup.ogg differ
diff --git a/sound/items/handling/pill_bottle_place.ogg b/sound/items/handling/pill_bottle_place.ogg
index 299865935c8c0..c491cbc06aaf4 100644
Binary files a/sound/items/handling/pill_bottle_place.ogg and b/sound/items/handling/pill_bottle_place.ogg differ
diff --git a/sound/items/handling/reagent_containers/default/default_liquid_slosh1.ogg b/sound/items/handling/reagent_containers/default/default_liquid_slosh1.ogg
index 2177effd93077..22b2874c791ed 100644
Binary files a/sound/items/handling/reagent_containers/default/default_liquid_slosh1.ogg and b/sound/items/handling/reagent_containers/default/default_liquid_slosh1.ogg differ
diff --git a/sound/items/handling/reagent_containers/default/default_liquid_slosh2.ogg b/sound/items/handling/reagent_containers/default/default_liquid_slosh2.ogg
index a641635ff0c07..c5486b531c6fe 100644
Binary files a/sound/items/handling/reagent_containers/default/default_liquid_slosh2.ogg and b/sound/items/handling/reagent_containers/default/default_liquid_slosh2.ogg differ
diff --git a/sound/items/handling/reagent_containers/default/default_liquid_slosh3.ogg b/sound/items/handling/reagent_containers/default/default_liquid_slosh3.ogg
index 89eecf36337ad..2e6cbafb8c16f 100644
Binary files a/sound/items/handling/reagent_containers/default/default_liquid_slosh3.ogg and b/sound/items/handling/reagent_containers/default/default_liquid_slosh3.ogg differ
diff --git a/sound/items/handling/reagent_containers/default/default_liquid_slosh4.ogg b/sound/items/handling/reagent_containers/default/default_liquid_slosh4.ogg
index feb7c0d29702e..1145c23c129b5 100644
Binary files a/sound/items/handling/reagent_containers/default/default_liquid_slosh4.ogg and b/sound/items/handling/reagent_containers/default/default_liquid_slosh4.ogg differ
diff --git a/sound/items/handling/reagent_containers/default/default_liquid_slosh5.ogg b/sound/items/handling/reagent_containers/default/default_liquid_slosh5.ogg
index b2ba3ee73c99b..4ec9353b340d3 100644
Binary files a/sound/items/handling/reagent_containers/default/default_liquid_slosh5.ogg and b/sound/items/handling/reagent_containers/default/default_liquid_slosh5.ogg differ
diff --git a/sound/items/handling/reagent_containers/plastic_bottle/attribution.txt b/sound/items/handling/reagent_containers/plastic_bottle/attribution.txt
index dd3b21b412e39..719d3306d5ef2 100644
--- a/sound/items/handling/reagent_containers/plastic_bottle/attribution.txt
+++ b/sound/items/handling/reagent_containers/plastic_bottle/attribution.txt
@@ -1,2 +1,5 @@
plastic_bottle_liquid_slosh:
liquid in bottle shaking by mrrap4food -- https://freesound.org/s/470606/ -- License: Creative Commons 0
+
+bottle cap:
+made by sadboysuss: license: cc-by-sa
\ No newline at end of file
diff --git a/sound/items/handling/reagent_containers/plastic_bottle/bottle_cap_close.ogg b/sound/items/handling/reagent_containers/plastic_bottle/bottle_cap_close.ogg
new file mode 100644
index 0000000000000..cc07387f557ac
Binary files /dev/null and b/sound/items/handling/reagent_containers/plastic_bottle/bottle_cap_close.ogg differ
diff --git a/sound/items/handling/reagent_containers/plastic_bottle/bottle_cap_open.ogg b/sound/items/handling/reagent_containers/plastic_bottle/bottle_cap_open.ogg
new file mode 100644
index 0000000000000..fb376707f4984
Binary files /dev/null and b/sound/items/handling/reagent_containers/plastic_bottle/bottle_cap_open.ogg differ
diff --git a/sound/items/handling/reagent_containers/plastic_bottle/plastic_bottle_liquid_slosh1.ogg b/sound/items/handling/reagent_containers/plastic_bottle/plastic_bottle_liquid_slosh1.ogg
index 597a7b2fb5f8a..df5a6f6d161c3 100644
Binary files a/sound/items/handling/reagent_containers/plastic_bottle/plastic_bottle_liquid_slosh1.ogg and b/sound/items/handling/reagent_containers/plastic_bottle/plastic_bottle_liquid_slosh1.ogg differ
diff --git a/sound/items/handling/reagent_containers/plastic_bottle/plastic_bottle_liquid_slosh2.ogg b/sound/items/handling/reagent_containers/plastic_bottle/plastic_bottle_liquid_slosh2.ogg
index 4f8eb03293f34..d5260c7d527e1 100644
Binary files a/sound/items/handling/reagent_containers/plastic_bottle/plastic_bottle_liquid_slosh2.ogg and b/sound/items/handling/reagent_containers/plastic_bottle/plastic_bottle_liquid_slosh2.ogg differ
diff --git a/sound/items/handling/shield/plastic_shield_drop.ogg b/sound/items/handling/shield/plastic_shield_drop.ogg
index 4d07b48d481fb..a1600cf290ba9 100644
Binary files a/sound/items/handling/shield/plastic_shield_drop.ogg and b/sound/items/handling/shield/plastic_shield_drop.ogg differ
diff --git a/sound/items/handling/shield/plastic_shield_pick_up.ogg b/sound/items/handling/shield/plastic_shield_pick_up.ogg
index e18e9617b77de..692036aae7500 100644
Binary files a/sound/items/handling/shield/plastic_shield_pick_up.ogg and b/sound/items/handling/shield/plastic_shield_pick_up.ogg differ
diff --git a/sound/items/handling/shoes/attribution.txt b/sound/items/handling/shoes/attribution.txt
new file mode 100644
index 0000000000000..66bd3511fa71d
--- /dev/null
+++ b/sound/items/handling/shoes/attribution.txt
@@ -0,0 +1,2 @@
+sneakers pickup and drop made by sadboysuss
+license: CC-BY-SA 3.0
diff --git a/sound/items/handling/shoes/sneakers_drop1.ogg b/sound/items/handling/shoes/sneakers_drop1.ogg
new file mode 100644
index 0000000000000..4420e98448197
Binary files /dev/null and b/sound/items/handling/shoes/sneakers_drop1.ogg differ
diff --git a/sound/items/handling/shoes/sneakers_pickup1.ogg b/sound/items/handling/shoes/sneakers_pickup1.ogg
new file mode 100644
index 0000000000000..9670ec324e372
Binary files /dev/null and b/sound/items/handling/shoes/sneakers_pickup1.ogg differ
diff --git a/sound/items/handling/standard_stamp.ogg b/sound/items/handling/standard_stamp.ogg
index d31fdcbc228cc..0e1d5c55716ca 100644
Binary files a/sound/items/handling/standard_stamp.ogg and b/sound/items/handling/standard_stamp.ogg differ
diff --git a/sound/items/handling/surgery/cautery1.ogg b/sound/items/handling/surgery/cautery1.ogg
index ac15a58126660..e0241855e0b4f 100644
Binary files a/sound/items/handling/surgery/cautery1.ogg and b/sound/items/handling/surgery/cautery1.ogg differ
diff --git a/sound/items/handling/surgery/cautery2.ogg b/sound/items/handling/surgery/cautery2.ogg
index 334c98f6cde4d..99c88d993303b 100644
Binary files a/sound/items/handling/surgery/cautery2.ogg and b/sound/items/handling/surgery/cautery2.ogg differ
diff --git a/sound/items/handling/surgery/hemostat1.ogg b/sound/items/handling/surgery/hemostat1.ogg
index d68c82620d2ad..4fa5e5154b965 100644
Binary files a/sound/items/handling/surgery/hemostat1.ogg and b/sound/items/handling/surgery/hemostat1.ogg differ
diff --git a/sound/items/handling/surgery/organ1.ogg b/sound/items/handling/surgery/organ1.ogg
index d6cdd6271fe33..d3eaa5fa1ae48 100644
Binary files a/sound/items/handling/surgery/organ1.ogg and b/sound/items/handling/surgery/organ1.ogg differ
diff --git a/sound/items/handling/surgery/organ2.ogg b/sound/items/handling/surgery/organ2.ogg
index 9199c7d1a2db3..79394deb5499c 100644
Binary files a/sound/items/handling/surgery/organ2.ogg and b/sound/items/handling/surgery/organ2.ogg differ
diff --git a/sound/items/handling/surgery/retractor1.ogg b/sound/items/handling/surgery/retractor1.ogg
index de7c31199e3c0..9567723fe1f81 100644
Binary files a/sound/items/handling/surgery/retractor1.ogg and b/sound/items/handling/surgery/retractor1.ogg differ
diff --git a/sound/items/handling/surgery/retractor2.ogg b/sound/items/handling/surgery/retractor2.ogg
index 620fafe035d84..1653bc6ec27b2 100644
Binary files a/sound/items/handling/surgery/retractor2.ogg and b/sound/items/handling/surgery/retractor2.ogg differ
diff --git a/sound/items/handling/surgery/saw.ogg b/sound/items/handling/surgery/saw.ogg
index 8e7a47f0fa06c..36a2923bdd5aa 100644
Binary files a/sound/items/handling/surgery/saw.ogg and b/sound/items/handling/surgery/saw.ogg differ
diff --git a/sound/items/handling/surgery/scalpel1.ogg b/sound/items/handling/surgery/scalpel1.ogg
index 01b80ce06ffd7..e2decf90df6d1 100644
Binary files a/sound/items/handling/surgery/scalpel1.ogg and b/sound/items/handling/surgery/scalpel1.ogg differ
diff --git a/sound/items/handling/surgery/scalpel2.ogg b/sound/items/handling/surgery/scalpel2.ogg
index 497672239393c..932ee5ba24eba 100644
Binary files a/sound/items/handling/surgery/scalpel2.ogg and b/sound/items/handling/surgery/scalpel2.ogg differ
diff --git a/sound/items/handling/tape_drop.ogg b/sound/items/handling/tape_drop.ogg
index 5379a114a77bf..aa36c8f88fa99 100644
Binary files a/sound/items/handling/tape_drop.ogg and b/sound/items/handling/tape_drop.ogg differ
diff --git a/sound/items/handling/tape_pickup.ogg b/sound/items/handling/tape_pickup.ogg
index 77f74f19eea8d..5a540813e934c 100644
Binary files a/sound/items/handling/tape_pickup.ogg and b/sound/items/handling/tape_pickup.ogg differ
diff --git a/sound/items/handling/taperecorder_drop.ogg b/sound/items/handling/taperecorder_drop.ogg
index 6e3c151140eed..fc968151f8e7a 100644
Binary files a/sound/items/handling/taperecorder_drop.ogg and b/sound/items/handling/taperecorder_drop.ogg differ
diff --git a/sound/items/handling/taperecorder_pickup.ogg b/sound/items/handling/taperecorder_pickup.ogg
index 941640aefd1b2..753d31f88dbcb 100644
Binary files a/sound/items/handling/taperecorder_pickup.ogg and b/sound/items/handling/taperecorder_pickup.ogg differ
diff --git a/sound/items/handling/toolbelt_drop.ogg b/sound/items/handling/toolbelt_drop.ogg
index 2a3c4655c49f4..7def0845cc068 100644
Binary files a/sound/items/handling/toolbelt_drop.ogg and b/sound/items/handling/toolbelt_drop.ogg differ
diff --git a/sound/items/handling/toolbelt_pickup.ogg b/sound/items/handling/toolbelt_pickup.ogg
index 58e5d25979ab8..94ca37a107fc5 100644
Binary files a/sound/items/handling/toolbelt_pickup.ogg and b/sound/items/handling/toolbelt_pickup.ogg differ
diff --git a/sound/items/handling/toolbox/toolbox_drop.ogg b/sound/items/handling/toolbox/toolbox_drop.ogg
index abf5694627871..687a7127336e5 100644
Binary files a/sound/items/handling/toolbox/toolbox_drop.ogg and b/sound/items/handling/toolbox/toolbox_drop.ogg differ
diff --git a/sound/items/handling/toolbox/toolbox_open.ogg b/sound/items/handling/toolbox/toolbox_open.ogg
index 9dea5428d048a..fedfaa94ddb7a 100644
Binary files a/sound/items/handling/toolbox/toolbox_open.ogg and b/sound/items/handling/toolbox/toolbox_open.ogg differ
diff --git a/sound/items/handling/toolbox/toolbox_pickup.ogg b/sound/items/handling/toolbox/toolbox_pickup.ogg
index 01a4ab4b3fae2..e4fa6aed4cb29 100644
Binary files a/sound/items/handling/toolbox/toolbox_pickup.ogg and b/sound/items/handling/toolbox/toolbox_pickup.ogg differ
diff --git a/sound/items/handling/toolbox/toolbox_rustle.ogg b/sound/items/handling/toolbox/toolbox_rustle.ogg
index 939d003b18f5b..2f93ac6bf3dc7 100644
Binary files a/sound/items/handling/toolbox/toolbox_rustle.ogg and b/sound/items/handling/toolbox/toolbox_rustle.ogg differ
diff --git a/sound/items/handling/tools/crowbar_drop.ogg b/sound/items/handling/tools/crowbar_drop.ogg
index 77464110661fa..cb7bc59e11787 100644
Binary files a/sound/items/handling/tools/crowbar_drop.ogg and b/sound/items/handling/tools/crowbar_drop.ogg differ
diff --git a/sound/items/handling/tools/crowbar_pickup.ogg b/sound/items/handling/tools/crowbar_pickup.ogg
index 79b276f8451f1..e99a1a473c7b0 100644
Binary files a/sound/items/handling/tools/crowbar_pickup.ogg and b/sound/items/handling/tools/crowbar_pickup.ogg differ
diff --git a/sound/items/handling/tools/multitool_drop.ogg b/sound/items/handling/tools/multitool_drop.ogg
index 67e0a41042cbd..67f29cdd2a0a1 100644
Binary files a/sound/items/handling/tools/multitool_drop.ogg and b/sound/items/handling/tools/multitool_drop.ogg differ
diff --git a/sound/items/handling/tools/multitool_pickup.ogg b/sound/items/handling/tools/multitool_pickup.ogg
index cbd598ce896ca..b16bafd5b9a4d 100644
Binary files a/sound/items/handling/tools/multitool_pickup.ogg and b/sound/items/handling/tools/multitool_pickup.ogg differ
diff --git a/sound/items/handling/tools/rcd_drop.ogg b/sound/items/handling/tools/rcd_drop.ogg
index 276a014ae3123..96e827e4e0174 100644
Binary files a/sound/items/handling/tools/rcd_drop.ogg and b/sound/items/handling/tools/rcd_drop.ogg differ
diff --git a/sound/items/handling/tools/rcd_pickup.ogg b/sound/items/handling/tools/rcd_pickup.ogg
index bc7d103800bfa..68701f04dd971 100644
Binary files a/sound/items/handling/tools/rcd_pickup.ogg and b/sound/items/handling/tools/rcd_pickup.ogg differ
diff --git a/sound/items/handling/tools/rpd_drop.ogg b/sound/items/handling/tools/rpd_drop.ogg
index 8591719c918ea..e7de6cf18cf17 100644
Binary files a/sound/items/handling/tools/rpd_drop.ogg and b/sound/items/handling/tools/rpd_drop.ogg differ
diff --git a/sound/items/handling/tools/rpd_pickup.ogg b/sound/items/handling/tools/rpd_pickup.ogg
index ef6bf685d0073..5f8d34d140911 100644
Binary files a/sound/items/handling/tools/rpd_pickup.ogg and b/sound/items/handling/tools/rpd_pickup.ogg differ
diff --git a/sound/items/handling/tools/screwdriver_drop.ogg b/sound/items/handling/tools/screwdriver_drop.ogg
index d460fd0aedacc..439afd6833ea9 100644
Binary files a/sound/items/handling/tools/screwdriver_drop.ogg and b/sound/items/handling/tools/screwdriver_drop.ogg differ
diff --git a/sound/items/handling/tools/screwdriver_pickup.ogg b/sound/items/handling/tools/screwdriver_pickup.ogg
index 368f1bfd275fa..293cd5ef5f9ba 100644
Binary files a/sound/items/handling/tools/screwdriver_pickup.ogg and b/sound/items/handling/tools/screwdriver_pickup.ogg differ
diff --git a/sound/items/handling/tools/weldingtool_drop.ogg b/sound/items/handling/tools/weldingtool_drop.ogg
index 58b722ad7a78c..a6afc5964e057 100644
Binary files a/sound/items/handling/tools/weldingtool_drop.ogg and b/sound/items/handling/tools/weldingtool_drop.ogg differ
diff --git a/sound/items/handling/tools/weldingtool_pickup.ogg b/sound/items/handling/tools/weldingtool_pickup.ogg
index da78b06b84803..48af68e3d4c96 100644
Binary files a/sound/items/handling/tools/weldingtool_pickup.ogg and b/sound/items/handling/tools/weldingtool_pickup.ogg differ
diff --git a/sound/items/handling/tools/wirecutter_drop.ogg b/sound/items/handling/tools/wirecutter_drop.ogg
index e099870fc7d50..6f22204308949 100644
Binary files a/sound/items/handling/tools/wirecutter_drop.ogg and b/sound/items/handling/tools/wirecutter_drop.ogg differ
diff --git a/sound/items/handling/tools/wirecutter_pickup.ogg b/sound/items/handling/tools/wirecutter_pickup.ogg
index 078faaf43249e..7e7dd54de980c 100644
Binary files a/sound/items/handling/tools/wirecutter_pickup.ogg and b/sound/items/handling/tools/wirecutter_pickup.ogg differ
diff --git a/sound/items/handling/tools/wrench_drop.ogg b/sound/items/handling/tools/wrench_drop.ogg
index 86020bf822cb9..738dd1f7a77c3 100644
Binary files a/sound/items/handling/tools/wrench_drop.ogg and b/sound/items/handling/tools/wrench_drop.ogg differ
diff --git a/sound/items/handling/tools/wrench_pickup.ogg b/sound/items/handling/tools/wrench_pickup.ogg
index 860e0d70879a4..5ede535f3cdd0 100644
Binary files a/sound/items/handling/tools/wrench_pickup.ogg and b/sound/items/handling/tools/wrench_pickup.ogg differ
diff --git a/sound/items/haunted/ghostitemattack.ogg b/sound/items/haunted/ghostitemattack.ogg
index 52af7d77db065..417ec59a54d58 100644
Binary files a/sound/items/haunted/ghostitemattack.ogg and b/sound/items/haunted/ghostitemattack.ogg differ
diff --git a/sound/items/healthanalyzer.ogg b/sound/items/healthanalyzer.ogg
index 56fd762cdde7d..d44e41d02c423 100644
Binary files a/sound/items/healthanalyzer.ogg and b/sound/items/healthanalyzer.ogg differ
diff --git a/sound/items/house_edge_hit.ogg b/sound/items/house_edge_hit.ogg
index e85e15f4ee459..4da0e2a3b3f6d 100644
Binary files a/sound/items/house_edge_hit.ogg and b/sound/items/house_edge_hit.ogg differ
diff --git a/sound/items/hypospray.ogg b/sound/items/hypospray.ogg
index e5c7bd8f92b9b..69b1a1d459acd 100644
Binary files a/sound/items/hypospray.ogg and b/sound/items/hypospray.ogg differ
diff --git a/sound/items/intents/Disarm.ogg b/sound/items/intents/Disarm.ogg
index 8c7a664c41ad2..f1bfa6a5875e7 100644
Binary files a/sound/items/intents/Disarm.ogg and b/sound/items/intents/Disarm.ogg differ
diff --git a/sound/items/intents/Grab.ogg b/sound/items/intents/Grab.ogg
index e63d5ceae2080..e1d8facf2e9a9 100644
Binary files a/sound/items/intents/Grab.ogg and b/sound/items/intents/Grab.ogg differ
diff --git a/sound/items/intents/Harm.ogg b/sound/items/intents/Harm.ogg
index f424def2e5568..41476fca52da4 100644
Binary files a/sound/items/intents/Harm.ogg and b/sound/items/intents/Harm.ogg differ
diff --git a/sound/items/intents/Help.ogg b/sound/items/intents/Help.ogg
index c7606a2ddfe71..ca60245879138 100644
Binary files a/sound/items/intents/Help.ogg and b/sound/items/intents/Help.ogg differ
diff --git a/sound/items/internals/internals_off.ogg b/sound/items/internals/internals_off.ogg
index 7336ec41d6144..0ebb1a60fe1e5 100644
Binary files a/sound/items/internals/internals_off.ogg and b/sound/items/internals/internals_off.ogg differ
diff --git a/sound/items/internals/internals_on.ogg b/sound/items/internals/internals_on.ogg
index 2a08a916d2f0b..5e7622af8de62 100644
Binary files a/sound/items/internals/internals_on.ogg and b/sound/items/internals/internals_on.ogg differ
diff --git a/sound/items/knell/knell1.ogg b/sound/items/knell/knell1.ogg
index 3612ba651fcc1..bfe77336432b1 100644
Binary files a/sound/items/knell/knell1.ogg and b/sound/items/knell/knell1.ogg differ
diff --git a/sound/items/knell/knell2.ogg b/sound/items/knell/knell2.ogg
index 58a7531e3c23b..264517b239b49 100644
Binary files a/sound/items/knell/knell2.ogg and b/sound/items/knell/knell2.ogg differ
diff --git a/sound/items/knell/knell3.ogg b/sound/items/knell/knell3.ogg
index e5c4f3944d828..b40e90563a323 100644
Binary files a/sound/items/knell/knell3.ogg and b/sound/items/knell/knell3.ogg differ
diff --git a/sound/items/knell/knell4.ogg b/sound/items/knell/knell4.ogg
index cf30f2837bf3a..5dbbcd5220f80 100644
Binary files a/sound/items/knell/knell4.ogg and b/sound/items/knell/knell4.ogg differ
diff --git a/sound/items/lead_pipe_hit.ogg b/sound/items/lead_pipe_hit.ogg
index 51b4dbf60b146..8f421eeece4ed 100644
Binary files a/sound/items/lead_pipe_hit.ogg and b/sound/items/lead_pipe_hit.ogg differ
diff --git a/sound/items/lighter/cig_light.ogg b/sound/items/lighter/cig_light.ogg
index 48aef9c344a42..2dc1590d9598d 100644
Binary files a/sound/items/lighter/cig_light.ogg and b/sound/items/lighter/cig_light.ogg differ
diff --git a/sound/items/lighter/cig_snuff.ogg b/sound/items/lighter/cig_snuff.ogg
index 7f4cc6d3e2eb9..a67f2c710f5a6 100644
Binary files a/sound/items/lighter/cig_snuff.ogg and b/sound/items/lighter/cig_snuff.ogg differ
diff --git a/sound/items/lighter/lighter_off.ogg b/sound/items/lighter/lighter_off.ogg
index 8a2037e27d201..dd705c0f13b16 100644
Binary files a/sound/items/lighter/lighter_off.ogg and b/sound/items/lighter/lighter_off.ogg differ
diff --git a/sound/items/lighter/lighter_on.ogg b/sound/items/lighter/lighter_on.ogg
index 5294ee751fee9..fb1d0150009ec 100644
Binary files a/sound/items/lighter/lighter_on.ogg and b/sound/items/lighter/lighter_on.ogg differ
diff --git a/sound/items/lighter/zippo_off.ogg b/sound/items/lighter/zippo_off.ogg
index 8d51263dfd806..73a965aeb92c7 100644
Binary files a/sound/items/lighter/zippo_off.ogg and b/sound/items/lighter/zippo_off.ogg differ
diff --git a/sound/items/lighter/zippo_on.ogg b/sound/items/lighter/zippo_on.ogg
index bc7cef6ecbd91..2c4bc6f247ad9 100644
Binary files a/sound/items/lighter/zippo_on.ogg and b/sound/items/lighter/zippo_on.ogg differ
diff --git a/sound/items/match_strike.ogg b/sound/items/match_strike.ogg
index 8bf23316e1d38..71b2be35078be 100644
Binary files a/sound/items/match_strike.ogg and b/sound/items/match_strike.ogg differ
diff --git a/sound/items/megaphone.ogg b/sound/items/megaphone.ogg
index 31d7a8d1ad968..348f28a81cffe 100644
Binary files a/sound/items/megaphone.ogg and b/sound/items/megaphone.ogg differ
diff --git a/sound/items/modsuit/atrocinator_step.ogg b/sound/items/modsuit/atrocinator_step.ogg
index deda85ac354be..165a53f6c5d46 100644
Binary files a/sound/items/modsuit/atrocinator_step.ogg and b/sound/items/modsuit/atrocinator_step.ogg differ
diff --git a/sound/items/modsuit/ballin.ogg b/sound/items/modsuit/ballin.ogg
index a85a6bb9f0849..54de603243e15 100644
Binary files a/sound/items/modsuit/ballin.ogg and b/sound/items/modsuit/ballin.ogg differ
diff --git a/sound/items/modsuit/ballout.ogg b/sound/items/modsuit/ballout.ogg
index f911f1a6a61df..92ddf9b732429 100644
Binary files a/sound/items/modsuit/ballout.ogg and b/sound/items/modsuit/ballout.ogg differ
diff --git a/sound/items/modsuit/flamethrower.ogg b/sound/items/modsuit/flamethrower.ogg
index 447245d50b6e5..02f7e5cad1d1e 100644
Binary files a/sound/items/modsuit/flamethrower.ogg and b/sound/items/modsuit/flamethrower.ogg differ
diff --git a/sound/items/modsuit/inflate_bloon.ogg b/sound/items/modsuit/inflate_bloon.ogg
index 9b030d66ced74..1c87f3c644571 100644
Binary files a/sound/items/modsuit/inflate_bloon.ogg and b/sound/items/modsuit/inflate_bloon.ogg differ
diff --git a/sound/items/modsuit/loader_charge.ogg b/sound/items/modsuit/loader_charge.ogg
index 61d5531f72ed9..3bb6ed3a8a578 100644
Binary files a/sound/items/modsuit/loader_charge.ogg and b/sound/items/modsuit/loader_charge.ogg differ
diff --git a/sound/items/modsuit/loader_launch.ogg b/sound/items/modsuit/loader_launch.ogg
index 513118f3c682d..bec38927ee4d7 100644
Binary files a/sound/items/modsuit/loader_launch.ogg and b/sound/items/modsuit/loader_launch.ogg differ
diff --git a/sound/items/modsuit/magnetic_harness.ogg b/sound/items/modsuit/magnetic_harness.ogg
index 3d19fccc56988..aaa275106fa9b 100644
Binary files a/sound/items/modsuit/magnetic_harness.ogg and b/sound/items/modsuit/magnetic_harness.ogg differ
diff --git a/sound/items/modsuit/rewinder.ogg b/sound/items/modsuit/rewinder.ogg
index 2587562dc117c..d818bf26feca6 100644
Binary files a/sound/items/modsuit/rewinder.ogg and b/sound/items/modsuit/rewinder.ogg differ
diff --git a/sound/items/modsuit/springlock.ogg b/sound/items/modsuit/springlock.ogg
index 8d0013d263001..58775eb993f1f 100644
Binary files a/sound/items/modsuit/springlock.ogg and b/sound/items/modsuit/springlock.ogg differ
diff --git a/sound/items/modsuit/tem_shot.ogg b/sound/items/modsuit/tem_shot.ogg
index 50905b95f1128..ffb99bfff61f0 100644
Binary files a/sound/items/modsuit/tem_shot.ogg and b/sound/items/modsuit/tem_shot.ogg differ
diff --git a/sound/items/modsuit/time_anchor_set.ogg b/sound/items/modsuit/time_anchor_set.ogg
index 457f8e6dbaeed..3c93933ff88d0 100644
Binary files a/sound/items/modsuit/time_anchor_set.ogg and b/sound/items/modsuit/time_anchor_set.ogg differ
diff --git a/sound/items/night_vision_on.ogg b/sound/items/night_vision_on.ogg
index 13ca202669c4b..87e06e1a17017 100644
Binary files a/sound/items/night_vision_on.ogg and b/sound/items/night_vision_on.ogg differ
diff --git a/sound/items/nuke_toy_lowpower.ogg b/sound/items/nuke_toy_lowpower.ogg
index e976342d6f4d4..46f3f9265d6ea 100644
Binary files a/sound/items/nuke_toy_lowpower.ogg and b/sound/items/nuke_toy_lowpower.ogg differ
diff --git a/sound/items/paper_flip.ogg b/sound/items/paper_flip.ogg
index 9e6aca596756c..5a97511433bb6 100644
Binary files a/sound/items/paper_flip.ogg and b/sound/items/paper_flip.ogg differ
diff --git a/sound/items/party_horn.ogg b/sound/items/party_horn.ogg
index f965f4a7bb6e1..79cf49a25d2af 100644
Binary files a/sound/items/party_horn.ogg and b/sound/items/party_horn.ogg differ
diff --git a/sound/items/pen_click.ogg b/sound/items/pen_click.ogg
index a315d698da11e..34a4fb16bffd8 100644
Binary files a/sound/items/pen_click.ogg and b/sound/items/pen_click.ogg differ
diff --git a/sound/items/pillow/pillow_hit.ogg b/sound/items/pillow/pillow_hit.ogg
index 600068ce98c22..e60cdfb6f6fe4 100644
Binary files a/sound/items/pillow/pillow_hit.ogg and b/sound/items/pillow/pillow_hit.ogg differ
diff --git a/sound/items/pillow/pillow_hit2.ogg b/sound/items/pillow/pillow_hit2.ogg
index a7961166bd5fc..4c295e7269c7d 100644
Binary files a/sound/items/pillow/pillow_hit2.ogg and b/sound/items/pillow/pillow_hit2.ogg differ
diff --git a/sound/items/polaroid/polaroid1.ogg b/sound/items/polaroid/polaroid1.ogg
index d5a6d7d78ad9e..5574d99475c96 100644
Binary files a/sound/items/polaroid/polaroid1.ogg and b/sound/items/polaroid/polaroid1.ogg differ
diff --git a/sound/items/polaroid/polaroid2.ogg b/sound/items/polaroid/polaroid2.ogg
index 27f492a456c47..c043b4e1b5839 100644
Binary files a/sound/items/polaroid/polaroid2.ogg and b/sound/items/polaroid/polaroid2.ogg differ
diff --git a/sound/items/poster/poster_being_created.ogg b/sound/items/poster/poster_being_created.ogg
index 6f4e9bce684ef..e9d22ee77d05b 100644
Binary files a/sound/items/poster/poster_being_created.ogg and b/sound/items/poster/poster_being_created.ogg differ
diff --git a/sound/items/poster/poster_ripped.ogg b/sound/items/poster/poster_ripped.ogg
index 0bc90c9fb6cb2..f1bace4a3e2bf 100644
Binary files a/sound/items/poster/poster_ripped.ogg and b/sound/items/poster/poster_ripped.ogg differ
diff --git a/sound/items/pshoom/pshoom.ogg b/sound/items/pshoom/pshoom.ogg
index 5628842f53491..6f758241248b0 100644
Binary files a/sound/items/pshoom/pshoom.ogg and b/sound/items/pshoom/pshoom.ogg differ
diff --git a/sound/items/pshoom/pshoom_2.ogg b/sound/items/pshoom/pshoom_2.ogg
index 9b94a79858130..fbca6e6a8744a 100644
Binary files a/sound/items/pshoom/pshoom_2.ogg and b/sound/items/pshoom/pshoom_2.ogg differ
diff --git a/sound/items/radio/radio_important.ogg b/sound/items/radio/radio_important.ogg
index bb6f769d6129b..693140084182e 100644
Binary files a/sound/items/radio/radio_important.ogg and b/sound/items/radio/radio_important.ogg differ
diff --git a/sound/items/radio/radio_receive.ogg b/sound/items/radio/radio_receive.ogg
index 6b2ee1ba4ef08..37a0907c0277a 100644
Binary files a/sound/items/radio/radio_receive.ogg and b/sound/items/radio/radio_receive.ogg differ
diff --git a/sound/items/radio/radio_talk.ogg b/sound/items/radio/radio_talk.ogg
index 50d14c897a0ef..c35662fa79611 100644
Binary files a/sound/items/radio/radio_talk.ogg and b/sound/items/radio/radio_talk.ogg differ
diff --git a/sound/items/radiostatic.ogg b/sound/items/radiostatic.ogg
index 6b5fa00cc06c7..f110179e1571a 100644
Binary files a/sound/items/radiostatic.ogg and b/sound/items/radiostatic.ogg differ
diff --git a/sound/items/rattle/rattle1.ogg b/sound/items/rattle/rattle1.ogg
index 71c4110fafe46..61207df7cdc1f 100644
Binary files a/sound/items/rattle/rattle1.ogg and b/sound/items/rattle/rattle1.ogg differ
diff --git a/sound/items/rattle/rattle2.ogg b/sound/items/rattle/rattle2.ogg
index 30f0e2d85ea93..3dab3bc6e93e4 100644
Binary files a/sound/items/rattle/rattle2.ogg and b/sound/items/rattle/rattle2.ogg differ
diff --git a/sound/items/rattle/rattle3.ogg b/sound/items/rattle/rattle3.ogg
index ef1cfc6bf6b6f..172b41507f13c 100644
Binary files a/sound/items/rattle/rattle3.ogg and b/sound/items/rattle/rattle3.ogg differ
diff --git a/sound/items/rattling_keys.ogg b/sound/items/rattling_keys.ogg
index 06088b3a7561c..8a56c416502a7 100644
Binary files a/sound/items/rattling_keys.ogg and b/sound/items/rattling_keys.ogg differ
diff --git a/sound/items/rattling_keys_attack.ogg b/sound/items/rattling_keys_attack.ogg
index 65695d650bc78..db1909baa5e56 100644
Binary files a/sound/items/rattling_keys_attack.ogg and b/sound/items/rattling_keys_attack.ogg differ
diff --git a/sound/items/reel/reel1.ogg b/sound/items/reel/reel1.ogg
index 2e946f3d5de20..2a48c53ecad86 100644
Binary files a/sound/items/reel/reel1.ogg and b/sound/items/reel/reel1.ogg differ
diff --git a/sound/items/reel/reel2.ogg b/sound/items/reel/reel2.ogg
index 574ac3c89b01c..99ec59552afb1 100644
Binary files a/sound/items/reel/reel2.ogg and b/sound/items/reel/reel2.ogg differ
diff --git a/sound/items/reel/reel3.ogg b/sound/items/reel/reel3.ogg
index e1bec8e4b5506..73344434359be 100644
Binary files a/sound/items/reel/reel3.ogg and b/sound/items/reel/reel3.ogg differ
diff --git a/sound/items/reel/reel4.ogg b/sound/items/reel/reel4.ogg
index 64d69620cd85f..fd5cfa5750dba 100644
Binary files a/sound/items/reel/reel4.ogg and b/sound/items/reel/reel4.ogg differ
diff --git a/sound/items/reel/reel5.ogg b/sound/items/reel/reel5.ogg
index 66635bf28d0a8..d0d8559394622 100644
Binary files a/sound/items/reel/reel5.ogg and b/sound/items/reel/reel5.ogg differ
diff --git a/sound/items/robofafafoggy.ogg b/sound/items/robofafafoggy.ogg
index 16d8af77fc57f..55678e240a110 100644
Binary files a/sound/items/robofafafoggy.ogg and b/sound/items/robofafafoggy.ogg differ
diff --git a/sound/items/robofafafoggy2.ogg b/sound/items/robofafafoggy2.ogg
index 11bea909b6dfe..951772845ed5b 100644
Binary files a/sound/items/robofafafoggy2.ogg and b/sound/items/robofafafoggy2.ogg differ
diff --git a/sound/items/sec_hailer/sec_death.ogg b/sound/items/sec_hailer/sec_death.ogg
index 25f9b24c313f2..6b25fb4d3c20c 100644
Binary files a/sound/items/sec_hailer/sec_death.ogg and b/sound/items/sec_hailer/sec_death.ogg differ
diff --git a/sound/items/sheath.ogg b/sound/items/sheath.ogg
index 9e1d5cdc0097d..d9738802bc53b 100644
Binary files a/sound/items/sheath.ogg and b/sound/items/sheath.ogg differ
diff --git a/sound/items/sitcom_laugh/SitcomLaugh1.ogg b/sound/items/sitcom_laugh/SitcomLaugh1.ogg
index cb3fab584ede4..4e565ab5496eb 100644
Binary files a/sound/items/sitcom_laugh/SitcomLaugh1.ogg and b/sound/items/sitcom_laugh/SitcomLaugh1.ogg differ
diff --git a/sound/items/sitcom_laugh/SitcomLaugh2.ogg b/sound/items/sitcom_laugh/SitcomLaugh2.ogg
index 96e54700e4a50..f7e954cf5548f 100644
Binary files a/sound/items/sitcom_laugh/SitcomLaugh2.ogg and b/sound/items/sitcom_laugh/SitcomLaugh2.ogg differ
diff --git a/sound/items/sitcom_laugh/SitcomLaugh3.ogg b/sound/items/sitcom_laugh/SitcomLaugh3.ogg
index bf849d5b29b03..b61d3f6f0a442 100644
Binary files a/sound/items/sitcom_laugh/SitcomLaugh3.ogg and b/sound/items/sitcom_laugh/SitcomLaugh3.ogg differ
diff --git a/sound/items/stones/stone_drop1.ogg b/sound/items/stones/stone_drop1.ogg
index a645ff7eb689f..5589a33cf5cd7 100644
Binary files a/sound/items/stones/stone_drop1.ogg and b/sound/items/stones/stone_drop1.ogg differ
diff --git a/sound/items/stones/stone_drop2.ogg b/sound/items/stones/stone_drop2.ogg
index 3fd4415e29e69..4b50c6f936848 100644
Binary files a/sound/items/stones/stone_drop2.ogg and b/sound/items/stones/stone_drop2.ogg differ
diff --git a/sound/items/stones/stone_drop3.ogg b/sound/items/stones/stone_drop3.ogg
index 650dbf8749754..97add3fed99b7 100644
Binary files a/sound/items/stones/stone_drop3.ogg and b/sound/items/stones/stone_drop3.ogg differ
diff --git a/sound/items/stones/stone_pick_up1.ogg b/sound/items/stones/stone_pick_up1.ogg
index af89dc415abdd..3a07c1a044bb6 100644
Binary files a/sound/items/stones/stone_pick_up1.ogg and b/sound/items/stones/stone_pick_up1.ogg differ
diff --git a/sound/items/stones/stone_pick_up2.ogg b/sound/items/stones/stone_pick_up2.ogg
index 85b7f5a688150..dac4b5a9bf7de 100644
Binary files a/sound/items/stones/stone_pick_up2.ogg and b/sound/items/stones/stone_pick_up2.ogg differ
diff --git a/sound/items/style/combo_absolute1.ogg b/sound/items/style/combo_absolute1.ogg
index d82f318ac6af5..6b7241951a987 100644
Binary files a/sound/items/style/combo_absolute1.ogg and b/sound/items/style/combo_absolute1.ogg differ
diff --git a/sound/items/style/combo_absolute2.ogg b/sound/items/style/combo_absolute2.ogg
index 804902024b7ff..9be0d29d5449c 100644
Binary files a/sound/items/style/combo_absolute2.ogg and b/sound/items/style/combo_absolute2.ogg differ
diff --git a/sound/items/style/combo_absolute3.ogg b/sound/items/style/combo_absolute3.ogg
index 676d1d5864b18..c35a40a6e9b0c 100644
Binary files a/sound/items/style/combo_absolute3.ogg and b/sound/items/style/combo_absolute3.ogg differ
diff --git a/sound/items/style/combo_brutal1.ogg b/sound/items/style/combo_brutal1.ogg
index ba0b732dd6977..5c58cc248938b 100644
Binary files a/sound/items/style/combo_brutal1.ogg and b/sound/items/style/combo_brutal1.ogg differ
diff --git a/sound/items/style/combo_brutal2.ogg b/sound/items/style/combo_brutal2.ogg
index ce64cae15c999..8e359af288834 100644
Binary files a/sound/items/style/combo_brutal2.ogg and b/sound/items/style/combo_brutal2.ogg differ
diff --git a/sound/items/style/combo_brutal3.ogg b/sound/items/style/combo_brutal3.ogg
index 651e79acb769a..152572516d3ce 100644
Binary files a/sound/items/style/combo_brutal3.ogg and b/sound/items/style/combo_brutal3.ogg differ
diff --git a/sound/items/style/combo_cool1.ogg b/sound/items/style/combo_cool1.ogg
index 7afbe5a89f92d..2a69dcaa2f88b 100644
Binary files a/sound/items/style/combo_cool1.ogg and b/sound/items/style/combo_cool1.ogg differ
diff --git a/sound/items/style/combo_cool2.ogg b/sound/items/style/combo_cool2.ogg
index a9f3106fe2d2a..5e016d6080fd0 100644
Binary files a/sound/items/style/combo_cool2.ogg and b/sound/items/style/combo_cool2.ogg differ
diff --git a/sound/items/style/combo_cool3.ogg b/sound/items/style/combo_cool3.ogg
index c304be6dfffdc..a8a243ce0f41e 100644
Binary files a/sound/items/style/combo_cool3.ogg and b/sound/items/style/combo_cool3.ogg differ
diff --git a/sound/items/style/combo_dull1.ogg b/sound/items/style/combo_dull1.ogg
index 42b05cabc3ff0..fb0f88ccf581b 100644
Binary files a/sound/items/style/combo_dull1.ogg and b/sound/items/style/combo_dull1.ogg differ
diff --git a/sound/items/style/combo_dull2.ogg b/sound/items/style/combo_dull2.ogg
index 0e72e82d9f6c9..c3d65b5a1cfaf 100644
Binary files a/sound/items/style/combo_dull2.ogg and b/sound/items/style/combo_dull2.ogg differ
diff --git a/sound/items/style/combo_dull3.ogg b/sound/items/style/combo_dull3.ogg
index f4674d068d602..ea5b5e52381f8 100644
Binary files a/sound/items/style/combo_dull3.ogg and b/sound/items/style/combo_dull3.ogg differ
diff --git a/sound/items/style/combo_spaced1.ogg b/sound/items/style/combo_spaced1.ogg
index 62624fd6fddfe..3f4a0afd24988 100644
Binary files a/sound/items/style/combo_spaced1.ogg and b/sound/items/style/combo_spaced1.ogg differ
diff --git a/sound/items/style/combo_spaced2.ogg b/sound/items/style/combo_spaced2.ogg
index eccdb97be2c4e..7868ee945f40b 100644
Binary files a/sound/items/style/combo_spaced2.ogg and b/sound/items/style/combo_spaced2.ogg differ
diff --git a/sound/items/syringeproj.ogg b/sound/items/syringeproj.ogg
index 33e8288f5b80f..f1f628b5bd0b4 100644
Binary files a/sound/items/syringeproj.ogg and b/sound/items/syringeproj.ogg differ
diff --git a/sound/items/taperecorder/tape_flip.ogg b/sound/items/taperecorder/tape_flip.ogg
index fae3e07373c5b..f994f0fd29773 100644
Binary files a/sound/items/taperecorder/tape_flip.ogg and b/sound/items/taperecorder/tape_flip.ogg differ
diff --git a/sound/items/taperecorder/taperecorder_close.ogg b/sound/items/taperecorder/taperecorder_close.ogg
index ab9f521c5f9fc..4df4bd0c6c557 100644
Binary files a/sound/items/taperecorder/taperecorder_close.ogg and b/sound/items/taperecorder/taperecorder_close.ogg differ
diff --git a/sound/items/taperecorder/taperecorder_hiss_mid.ogg b/sound/items/taperecorder/taperecorder_hiss_mid.ogg
index 50ef4f2171b19..ad99b23103c95 100644
Binary files a/sound/items/taperecorder/taperecorder_hiss_mid.ogg and b/sound/items/taperecorder/taperecorder_hiss_mid.ogg differ
diff --git a/sound/items/taperecorder/taperecorder_hiss_start.ogg b/sound/items/taperecorder/taperecorder_hiss_start.ogg
index fa57041a72281..cf2b4463cf83f 100644
Binary files a/sound/items/taperecorder/taperecorder_hiss_start.ogg and b/sound/items/taperecorder/taperecorder_hiss_start.ogg differ
diff --git a/sound/items/taperecorder/taperecorder_open.ogg b/sound/items/taperecorder/taperecorder_open.ogg
index 7b7110fa58ba5..152d584f01ab4 100644
Binary files a/sound/items/taperecorder/taperecorder_open.ogg and b/sound/items/taperecorder/taperecorder_open.ogg differ
diff --git a/sound/items/taperecorder/taperecorder_play.ogg b/sound/items/taperecorder/taperecorder_play.ogg
index 1bf4d7a3bd63a..aacd590b52bab 100644
Binary files a/sound/items/taperecorder/taperecorder_play.ogg and b/sound/items/taperecorder/taperecorder_play.ogg differ
diff --git a/sound/items/taperecorder/taperecorder_print.ogg b/sound/items/taperecorder/taperecorder_print.ogg
index 7912d08dc9827..002f22c2c108c 100644
Binary files a/sound/items/taperecorder/taperecorder_print.ogg and b/sound/items/taperecorder/taperecorder_print.ogg differ
diff --git a/sound/items/taperecorder/taperecorder_stop.ogg b/sound/items/taperecorder/taperecorder_stop.ogg
index a3b0f659928f3..a5d6fc3920f33 100644
Binary files a/sound/items/taperecorder/taperecorder_stop.ogg and b/sound/items/taperecorder/taperecorder_stop.ogg differ
diff --git a/sound/items/timer.ogg b/sound/items/timer.ogg
index 0f1dd35324375..f9efb0a288a75 100644
Binary files a/sound/items/timer.ogg and b/sound/items/timer.ogg differ
diff --git a/sound/items/tools/change_drill.ogg b/sound/items/tools/change_drill.ogg
index f8928fc00f99d..39fc1ccaaa1dc 100644
Binary files a/sound/items/tools/change_drill.ogg and b/sound/items/tools/change_drill.ogg differ
diff --git a/sound/items/tools/change_jaws.ogg b/sound/items/tools/change_jaws.ogg
index 13960ccc3e3ce..7a32f0423da58 100644
Binary files a/sound/items/tools/change_jaws.ogg and b/sound/items/tools/change_jaws.ogg differ
diff --git a/sound/items/tools/crowbar.ogg b/sound/items/tools/crowbar.ogg
index 17b6e87bcaa00..db7ae516444c5 100644
Binary files a/sound/items/tools/crowbar.ogg and b/sound/items/tools/crowbar.ogg differ
diff --git a/sound/items/tools/crowbar_prying.ogg b/sound/items/tools/crowbar_prying.ogg
index 5876802616def..aca7d0e4e29ad 100644
Binary files a/sound/items/tools/crowbar_prying.ogg and b/sound/items/tools/crowbar_prying.ogg differ
diff --git a/sound/items/tools/drill_hit.ogg b/sound/items/tools/drill_hit.ogg
index 0f8fa631aa1a0..137d4c30d15d0 100644
Binary files a/sound/items/tools/drill_hit.ogg and b/sound/items/tools/drill_hit.ogg differ
diff --git a/sound/items/tools/drill_use.ogg b/sound/items/tools/drill_use.ogg
index 6c283b032922b..dcd87a371c220 100644
Binary files a/sound/items/tools/drill_use.ogg and b/sound/items/tools/drill_use.ogg differ
diff --git a/sound/items/tools/jaws_cut.ogg b/sound/items/tools/jaws_cut.ogg
index a0bfd8550299e..6088b11edff1c 100644
Binary files a/sound/items/tools/jaws_cut.ogg and b/sound/items/tools/jaws_cut.ogg differ
diff --git a/sound/items/tools/jaws_pry.ogg b/sound/items/tools/jaws_pry.ogg
index 05178bd466314..0f85da89d1249 100644
Binary files a/sound/items/tools/jaws_pry.ogg and b/sound/items/tools/jaws_pry.ogg differ
diff --git a/sound/items/tools/ratchet.ogg b/sound/items/tools/ratchet.ogg
index 9b6045b9dadfe..b262727f14477 100644
Binary files a/sound/items/tools/ratchet.ogg and b/sound/items/tools/ratchet.ogg differ
diff --git a/sound/items/tools/ratchet_fast.ogg b/sound/items/tools/ratchet_fast.ogg
index d7a55e259202e..da51585a4bae5 100644
Binary files a/sound/items/tools/ratchet_fast.ogg and b/sound/items/tools/ratchet_fast.ogg differ
diff --git a/sound/items/tools/ratchet_slow.ogg b/sound/items/tools/ratchet_slow.ogg
index d3a362b06c105..15ae88fc1787c 100644
Binary files a/sound/items/tools/ratchet_slow.ogg and b/sound/items/tools/ratchet_slow.ogg differ
diff --git a/sound/items/tools/rcdscan.ogg b/sound/items/tools/rcdscan.ogg
index ce2099c86b911..e980f3aa77609 100644
Binary files a/sound/items/tools/rcdscan.ogg and b/sound/items/tools/rcdscan.ogg differ
diff --git a/sound/items/tools/rped.ogg b/sound/items/tools/rped.ogg
index 93dca60d34112..d89d27e3fdab4 100644
Binary files a/sound/items/tools/rped.ogg and b/sound/items/tools/rped.ogg differ
diff --git a/sound/items/tools/screwdriver.ogg b/sound/items/tools/screwdriver.ogg
index a6fc5dc6b98f8..cf3104eb2860d 100644
Binary files a/sound/items/tools/screwdriver.ogg and b/sound/items/tools/screwdriver.ogg differ
diff --git a/sound/items/tools/screwdriver2.ogg b/sound/items/tools/screwdriver2.ogg
index 121a78932c659..f569a930b7288 100644
Binary files a/sound/items/tools/screwdriver2.ogg and b/sound/items/tools/screwdriver2.ogg differ
diff --git a/sound/items/tools/screwdriver_operating.ogg b/sound/items/tools/screwdriver_operating.ogg
index 9e0659e382674..87fceca041071 100644
Binary files a/sound/items/tools/screwdriver_operating.ogg and b/sound/items/tools/screwdriver_operating.ogg differ
diff --git a/sound/items/tools/tool_switch.ogg b/sound/items/tools/tool_switch.ogg
index b0cacda41623c..80bac8ccf8955 100644
Binary files a/sound/items/tools/tool_switch.ogg and b/sound/items/tools/tool_switch.ogg differ
diff --git a/sound/items/tools/welder.ogg b/sound/items/tools/welder.ogg
index b431ca3151ccd..3e3d4afec117d 100644
Binary files a/sound/items/tools/welder.ogg and b/sound/items/tools/welder.ogg differ
diff --git a/sound/items/tools/welder2.ogg b/sound/items/tools/welder2.ogg
index 2756fe3f6bfa0..38114a88f6a5e 100644
Binary files a/sound/items/tools/welder2.ogg and b/sound/items/tools/welder2.ogg differ
diff --git a/sound/items/tools/welderactivate.ogg b/sound/items/tools/welderactivate.ogg
index e01102a9ed532..03cbad52f23d0 100644
Binary files a/sound/items/tools/welderactivate.ogg and b/sound/items/tools/welderactivate.ogg differ
diff --git a/sound/items/tools/welderdeactivate.ogg b/sound/items/tools/welderdeactivate.ogg
index 22ac4f445cb85..9de9308c9320d 100644
Binary files a/sound/items/tools/welderdeactivate.ogg and b/sound/items/tools/welderdeactivate.ogg differ
diff --git a/sound/items/tools/wirecutter.ogg b/sound/items/tools/wirecutter.ogg
index b26af964492ef..e41e7d6af8e98 100644
Binary files a/sound/items/tools/wirecutter.ogg and b/sound/items/tools/wirecutter.ogg differ
diff --git a/sound/items/tools/wirecutter_cut.ogg b/sound/items/tools/wirecutter_cut.ogg
index 143ac2fd9cdc8..c118805411c63 100644
Binary files a/sound/items/tools/wirecutter_cut.ogg and b/sound/items/tools/wirecutter_cut.ogg differ
diff --git a/sound/items/toy_squeak/toysqueak1.ogg b/sound/items/toy_squeak/toysqueak1.ogg
index 57b962726c64c..c43419c98794a 100644
Binary files a/sound/items/toy_squeak/toysqueak1.ogg and b/sound/items/toy_squeak/toysqueak1.ogg differ
diff --git a/sound/items/toy_squeak/toysqueak2.ogg b/sound/items/toy_squeak/toysqueak2.ogg
index 05ca302a2384e..533a3dd01aa96 100644
Binary files a/sound/items/toy_squeak/toysqueak2.ogg and b/sound/items/toy_squeak/toysqueak2.ogg differ
diff --git a/sound/items/toy_squeak/toysqueak3.ogg b/sound/items/toy_squeak/toysqueak3.ogg
index 5dcdc70f011f4..a7f5cd8ca76b9 100644
Binary files a/sound/items/toy_squeak/toysqueak3.ogg and b/sound/items/toy_squeak/toysqueak3.ogg differ
diff --git a/sound/items/trayhit/trayhit1.ogg b/sound/items/trayhit/trayhit1.ogg
index a2b5532a542d5..9d1c88f5a2c4e 100644
Binary files a/sound/items/trayhit/trayhit1.ogg and b/sound/items/trayhit/trayhit1.ogg differ
diff --git a/sound/items/trayhit/trayhit2.ogg b/sound/items/trayhit/trayhit2.ogg
index 066e44bf0b6a2..ced74023631bb 100644
Binary files a/sound/items/trayhit/trayhit2.ogg and b/sound/items/trayhit/trayhit2.ogg differ
diff --git a/sound/items/unsheath.ogg b/sound/items/unsheath.ogg
index 09867f5966a15..24dcc4e8653fd 100644
Binary files a/sound/items/unsheath.ogg and b/sound/items/unsheath.ogg differ
diff --git a/sound/items/weapons/armbomb.ogg b/sound/items/weapons/armbomb.ogg
index 17b2059515ff9..793d4c80c17dc 100644
Binary files a/sound/items/weapons/armbomb.ogg and b/sound/items/weapons/armbomb.ogg differ
diff --git a/sound/items/weapons/autoguninsert.ogg b/sound/items/weapons/autoguninsert.ogg
index 3996219970f48..13fe418c4519b 100644
Binary files a/sound/items/weapons/autoguninsert.ogg and b/sound/items/weapons/autoguninsert.ogg differ
diff --git a/sound/items/weapons/banjoslap.ogg b/sound/items/weapons/banjoslap.ogg
index 06a86a535dd36..abbad011e01a5 100644
Binary files a/sound/items/weapons/banjoslap.ogg and b/sound/items/weapons/banjoslap.ogg differ
diff --git a/sound/items/weapons/barragespellhit.ogg b/sound/items/weapons/barragespellhit.ogg
index a5e859a2aac33..fb91ee936bfcc 100644
Binary files a/sound/items/weapons/barragespellhit.ogg and b/sound/items/weapons/barragespellhit.ogg differ
diff --git a/sound/items/weapons/batonextend.ogg b/sound/items/weapons/batonextend.ogg
index fa557f1acdf31..e471372cc8903 100644
Binary files a/sound/items/weapons/batonextend.ogg and b/sound/items/weapons/batonextend.ogg differ
diff --git a/sound/items/weapons/beam_sniper.ogg b/sound/items/weapons/beam_sniper.ogg
index f91831cddd172..7f94461ee735f 100644
Binary files a/sound/items/weapons/beam_sniper.ogg and b/sound/items/weapons/beam_sniper.ogg differ
diff --git a/sound/items/weapons/beesmoke.ogg b/sound/items/weapons/beesmoke.ogg
index 5e29f37a224e3..7149dca5127a7 100644
Binary files a/sound/items/weapons/beesmoke.ogg and b/sound/items/weapons/beesmoke.ogg differ
diff --git a/sound/items/weapons/bite.ogg b/sound/items/weapons/bite.ogg
index de79cbd49e8b7..dc95bbe8d5d90 100644
Binary files a/sound/items/weapons/bite.ogg and b/sound/items/weapons/bite.ogg differ
diff --git a/sound/items/weapons/blade1.ogg b/sound/items/weapons/blade1.ogg
index 583fbf19e8c21..3960909f31b83 100644
Binary files a/sound/items/weapons/blade1.ogg and b/sound/items/weapons/blade1.ogg differ
diff --git a/sound/items/weapons/bladeslice.ogg b/sound/items/weapons/bladeslice.ogg
index ab8154ab9bd14..50d733566a065 100644
Binary files a/sound/items/weapons/bladeslice.ogg and b/sound/items/weapons/bladeslice.ogg differ
diff --git a/sound/items/weapons/blastcannon.ogg b/sound/items/weapons/blastcannon.ogg
index b577106ad54d7..a7157ecc33382 100644
Binary files a/sound/items/weapons/blastcannon.ogg and b/sound/items/weapons/blastcannon.ogg differ
diff --git a/sound/items/weapons/blaster.ogg b/sound/items/weapons/blaster.ogg
index b625da3104d53..9d1e33b052095 100644
Binary files a/sound/items/weapons/blaster.ogg and b/sound/items/weapons/blaster.ogg differ
diff --git a/sound/items/weapons/block_blade.ogg b/sound/items/weapons/block_blade.ogg
index 7358b291b39bc..b10aef07e08a6 100644
Binary files a/sound/items/weapons/block_blade.ogg and b/sound/items/weapons/block_blade.ogg differ
diff --git a/sound/items/weapons/block_shield.ogg b/sound/items/weapons/block_shield.ogg
index 86b0bda6fd9f8..7b401b003e7f2 100644
Binary files a/sound/items/weapons/block_shield.ogg and b/sound/items/weapons/block_shield.ogg differ
diff --git a/sound/items/weapons/bolathrow.ogg b/sound/items/weapons/bolathrow.ogg
index 9a7b78fb67f9b..65c1288782adf 100644
Binary files a/sound/items/weapons/bolathrow.ogg and b/sound/items/weapons/bolathrow.ogg differ
diff --git a/sound/items/weapons/bulletflyby.ogg b/sound/items/weapons/bulletflyby.ogg
index 85ab0df0ebfb9..87c14fb800656 100644
Binary files a/sound/items/weapons/bulletflyby.ogg and b/sound/items/weapons/bulletflyby.ogg differ
diff --git a/sound/items/weapons/bulletflyby2.ogg b/sound/items/weapons/bulletflyby2.ogg
index e8dfe6044a908..d1a3d6b16519f 100644
Binary files a/sound/items/weapons/bulletflyby2.ogg and b/sound/items/weapons/bulletflyby2.ogg differ
diff --git a/sound/items/weapons/bulletflyby3.ogg b/sound/items/weapons/bulletflyby3.ogg
index cf482ecf53411..fa599460e9779 100644
Binary files a/sound/items/weapons/bulletflyby3.ogg and b/sound/items/weapons/bulletflyby3.ogg differ
diff --git a/sound/items/weapons/cablecuff.ogg b/sound/items/weapons/cablecuff.ogg
index 7762dd3b6892e..bfc928310f319 100644
Binary files a/sound/items/weapons/cablecuff.ogg and b/sound/items/weapons/cablecuff.ogg differ
diff --git a/sound/items/weapons/chainhit.ogg b/sound/items/weapons/chainhit.ogg
index 2a2c30dc78df8..10286abf0465d 100644
Binary files a/sound/items/weapons/chainhit.ogg and b/sound/items/weapons/chainhit.ogg differ
diff --git a/sound/items/weapons/chainsaw_loop.ogg b/sound/items/weapons/chainsaw_loop.ogg
index c3b1ee1e50cd7..5a4e371b0af8e 100644
Binary files a/sound/items/weapons/chainsaw_loop.ogg and b/sound/items/weapons/chainsaw_loop.ogg differ
diff --git a/sound/items/weapons/chainsaw_start.ogg b/sound/items/weapons/chainsaw_start.ogg
index 12bfa1f120444..6ae857b96d0b6 100644
Binary files a/sound/items/weapons/chainsaw_start.ogg and b/sound/items/weapons/chainsaw_start.ogg differ
diff --git a/sound/items/weapons/chainsaw_stop.ogg b/sound/items/weapons/chainsaw_stop.ogg
index f7baf3240d554..064385fe029a0 100644
Binary files a/sound/items/weapons/chainsaw_stop.ogg and b/sound/items/weapons/chainsaw_stop.ogg differ
diff --git a/sound/items/weapons/chainsawhit.ogg b/sound/items/weapons/chainsawhit.ogg
index 299e2c36f2c33..15e2eb2b07388 100644
Binary files a/sound/items/weapons/chainsawhit.ogg and b/sound/items/weapons/chainsawhit.ogg differ
diff --git a/sound/items/weapons/circsawhit.ogg b/sound/items/weapons/circsawhit.ogg
index 78639190dc8b3..67803b5a41b90 100644
Binary files a/sound/items/weapons/circsawhit.ogg and b/sound/items/weapons/circsawhit.ogg differ
diff --git a/sound/items/weapons/contractor_baton/contractorbatonhit.ogg b/sound/items/weapons/contractor_baton/contractorbatonhit.ogg
index 2377267cc71bf..50218bc925103 100644
Binary files a/sound/items/weapons/contractor_baton/contractorbatonhit.ogg and b/sound/items/weapons/contractor_baton/contractorbatonhit.ogg differ
diff --git a/sound/items/weapons/contractorbatonextend.ogg b/sound/items/weapons/contractorbatonextend.ogg
index c78281bf1f9e0..a7b17f6c7c085 100644
Binary files a/sound/items/weapons/contractorbatonextend.ogg and b/sound/items/weapons/contractorbatonextend.ogg differ
diff --git a/sound/items/weapons/cqchit1.ogg b/sound/items/weapons/cqchit1.ogg
index 2030dccca2c85..612ec0664f03b 100644
Binary files a/sound/items/weapons/cqchit1.ogg and b/sound/items/weapons/cqchit1.ogg differ
diff --git a/sound/items/weapons/cqchit2.ogg b/sound/items/weapons/cqchit2.ogg
index e2d14029cd11c..55365965bc148 100644
Binary files a/sound/items/weapons/cqchit2.ogg and b/sound/items/weapons/cqchit2.ogg differ
diff --git a/sound/items/weapons/draw_bow.ogg b/sound/items/weapons/draw_bow.ogg
index 8744764011da6..98da3111eceab 100644
Binary files a/sound/items/weapons/draw_bow.ogg and b/sound/items/weapons/draw_bow.ogg differ
diff --git a/sound/items/weapons/draw_bow2.ogg b/sound/items/weapons/draw_bow2.ogg
index 9fa5f7cf9fc62..e02cad0a53223 100644
Binary files a/sound/items/weapons/draw_bow2.ogg and b/sound/items/weapons/draw_bow2.ogg differ
diff --git a/sound/items/weapons/drill.ogg b/sound/items/weapons/drill.ogg
index 22473b5772a48..b37134a34c63b 100644
Binary files a/sound/items/weapons/drill.ogg and b/sound/items/weapons/drill.ogg differ
diff --git a/sound/items/weapons/effects/batreflect.ogg b/sound/items/weapons/effects/batreflect.ogg
index c1ded1bf364a6..e6d18b3ad8a59 100644
Binary files a/sound/items/weapons/effects/batreflect.ogg and b/sound/items/weapons/effects/batreflect.ogg differ
diff --git a/sound/items/weapons/effects/ric1.ogg b/sound/items/weapons/effects/ric1.ogg
index b7f7bd99ca5ad..4bc87ee1f502a 100644
Binary files a/sound/items/weapons/effects/ric1.ogg and b/sound/items/weapons/effects/ric1.ogg differ
diff --git a/sound/items/weapons/effects/ric2.ogg b/sound/items/weapons/effects/ric2.ogg
index dcd44b07329ee..cb9d11926c108 100644
Binary files a/sound/items/weapons/effects/ric2.ogg and b/sound/items/weapons/effects/ric2.ogg differ
diff --git a/sound/items/weapons/effects/ric3.ogg b/sound/items/weapons/effects/ric3.ogg
index c538a97e35a63..bd0eb0589f304 100644
Binary files a/sound/items/weapons/effects/ric3.ogg and b/sound/items/weapons/effects/ric3.ogg differ
diff --git a/sound/items/weapons/effects/ric4.ogg b/sound/items/weapons/effects/ric4.ogg
index ac872734beaa1..2655dd37ec638 100644
Binary files a/sound/items/weapons/effects/ric4.ogg and b/sound/items/weapons/effects/ric4.ogg differ
diff --git a/sound/items/weapons/effects/ric5.ogg b/sound/items/weapons/effects/ric5.ogg
index 2c946c457d6be..7a4e75eb1b577 100644
Binary files a/sound/items/weapons/effects/ric5.ogg and b/sound/items/weapons/effects/ric5.ogg differ
diff --git a/sound/items/weapons/effects/searwall.ogg b/sound/items/weapons/effects/searwall.ogg
index c9b5ac96b2e98..53fcb119500bc 100644
Binary files a/sound/items/weapons/effects/searwall.ogg and b/sound/items/weapons/effects/searwall.ogg differ
diff --git a/sound/items/weapons/egloves.ogg b/sound/items/weapons/egloves.ogg
index 3caee00eac8bd..0c279e561f806 100644
Binary files a/sound/items/weapons/egloves.ogg and b/sound/items/weapons/egloves.ogg differ
diff --git a/sound/items/weapons/emitter.ogg b/sound/items/weapons/emitter.ogg
index 46e0153dc9489..55d58216d4eb4 100644
Binary files a/sound/items/weapons/emitter.ogg and b/sound/items/weapons/emitter.ogg differ
diff --git a/sound/items/weapons/emitter2.ogg b/sound/items/weapons/emitter2.ogg
index 72b6a1c572549..3621eba4233ff 100644
Binary files a/sound/items/weapons/emitter2.ogg and b/sound/items/weapons/emitter2.ogg differ
diff --git a/sound/items/weapons/empty.ogg b/sound/items/weapons/empty.ogg
index 33bcaff8f83be..82817bce0443c 100644
Binary files a/sound/items/weapons/empty.ogg and b/sound/items/weapons/empty.ogg differ
diff --git a/sound/items/weapons/etherealhit.ogg b/sound/items/weapons/etherealhit.ogg
index 19da8709618c4..84c69f1688a86 100644
Binary files a/sound/items/weapons/etherealhit.ogg and b/sound/items/weapons/etherealhit.ogg differ
diff --git a/sound/items/weapons/etherealmiss.ogg b/sound/items/weapons/etherealmiss.ogg
index 8feb7cdc9129b..c6a11d1d8ec5f 100644
Binary files a/sound/items/weapons/etherealmiss.ogg and b/sound/items/weapons/etherealmiss.ogg differ
diff --git a/sound/items/weapons/flash.ogg b/sound/items/weapons/flash.ogg
index 66f5c064dd7f6..f73e989fb6b37 100644
Binary files a/sound/items/weapons/flash.ogg and b/sound/items/weapons/flash.ogg differ
diff --git a/sound/items/weapons/flash_ring.ogg b/sound/items/weapons/flash_ring.ogg
index 006141ac0bc76..ce99394950c71 100644
Binary files a/sound/items/weapons/flash_ring.ogg and b/sound/items/weapons/flash_ring.ogg differ
diff --git a/sound/items/weapons/flashbang.ogg b/sound/items/weapons/flashbang.ogg
index 68829e2f85504..66faf60950c05 100644
Binary files a/sound/items/weapons/flashbang.ogg and b/sound/items/weapons/flashbang.ogg differ
diff --git a/sound/items/weapons/fwoosh.ogg b/sound/items/weapons/fwoosh.ogg
index fa7e227b92d31..06afc18649066 100644
Binary files a/sound/items/weapons/fwoosh.ogg and b/sound/items/weapons/fwoosh.ogg differ
diff --git a/sound/items/weapons/genhit.ogg b/sound/items/weapons/genhit.ogg
index 7dd6e7bed0408..845b6508f8a04 100644
Binary files a/sound/items/weapons/genhit.ogg and b/sound/items/weapons/genhit.ogg differ
diff --git a/sound/items/weapons/genhit1.ogg b/sound/items/weapons/genhit1.ogg
index 65cd446c04a9d..84c8c9a08caad 100644
Binary files a/sound/items/weapons/genhit1.ogg and b/sound/items/weapons/genhit1.ogg differ
diff --git a/sound/items/weapons/genhit2.ogg b/sound/items/weapons/genhit2.ogg
index 1e06911e20f72..b82488820d63f 100644
Binary files a/sound/items/weapons/genhit2.ogg and b/sound/items/weapons/genhit2.ogg differ
diff --git a/sound/items/weapons/genhit3.ogg b/sound/items/weapons/genhit3.ogg
index dd514bd17988b..ed03454a4de26 100644
Binary files a/sound/items/weapons/genhit3.ogg and b/sound/items/weapons/genhit3.ogg differ
diff --git a/sound/items/weapons/guillotine.ogg b/sound/items/weapons/guillotine.ogg
index f2647b43e344f..bb097f89aa865 100644
Binary files a/sound/items/weapons/guillotine.ogg and b/sound/items/weapons/guillotine.ogg differ
diff --git a/sound/items/weapons/gun/bow/bow_draw.ogg b/sound/items/weapons/gun/bow/bow_draw.ogg
index c5ae4418b3b9d..7cd895566c0cc 100644
Binary files a/sound/items/weapons/gun/bow/bow_draw.ogg and b/sound/items/weapons/gun/bow/bow_draw.ogg differ
diff --git a/sound/items/weapons/gun/bow/bow_fire.ogg b/sound/items/weapons/gun/bow/bow_fire.ogg
index 94da0ea9f35de..3b20b2f68adaa 100644
Binary files a/sound/items/weapons/gun/bow/bow_fire.ogg and b/sound/items/weapons/gun/bow/bow_fire.ogg differ
diff --git a/sound/items/weapons/gun/general/ballistic_click.ogg b/sound/items/weapons/gun/general/ballistic_click.ogg
index 67175d851eddb..24a6712e46199 100644
Binary files a/sound/items/weapons/gun/general/ballistic_click.ogg and b/sound/items/weapons/gun/general/ballistic_click.ogg differ
diff --git a/sound/items/weapons/gun/general/bolt_drop.ogg b/sound/items/weapons/gun/general/bolt_drop.ogg
index 3d89f56866dc1..3a05c40267c55 100644
Binary files a/sound/items/weapons/gun/general/bolt_drop.ogg and b/sound/items/weapons/gun/general/bolt_drop.ogg differ
diff --git a/sound/items/weapons/gun/general/bolt_rack.ogg b/sound/items/weapons/gun/general/bolt_rack.ogg
index 1bfc9050e928d..f6638d26c89e0 100644
Binary files a/sound/items/weapons/gun/general/bolt_rack.ogg and b/sound/items/weapons/gun/general/bolt_rack.ogg differ
diff --git a/sound/items/weapons/gun/general/cannon.ogg b/sound/items/weapons/gun/general/cannon.ogg
index feb30293b6c2a..c24fede58af12 100644
Binary files a/sound/items/weapons/gun/general/cannon.ogg and b/sound/items/weapons/gun/general/cannon.ogg differ
diff --git a/sound/items/weapons/gun/general/chunkyrack.ogg b/sound/items/weapons/gun/general/chunkyrack.ogg
index 8e27b0b971319..0e65ae9cd342c 100644
Binary files a/sound/items/weapons/gun/general/chunkyrack.ogg and b/sound/items/weapons/gun/general/chunkyrack.ogg differ
diff --git a/sound/items/weapons/gun/general/dry_fire.ogg b/sound/items/weapons/gun/general/dry_fire.ogg
index 920b49ed08c4d..690cee3a37214 100644
Binary files a/sound/items/weapons/gun/general/dry_fire.ogg and b/sound/items/weapons/gun/general/dry_fire.ogg differ
diff --git a/sound/items/weapons/gun/general/empty_alarm.ogg b/sound/items/weapons/gun/general/empty_alarm.ogg
index 848a9e4986068..4b8d5ae8d160b 100644
Binary files a/sound/items/weapons/gun/general/empty_alarm.ogg and b/sound/items/weapons/gun/general/empty_alarm.ogg differ
diff --git a/sound/items/weapons/gun/general/grenade_launch.ogg b/sound/items/weapons/gun/general/grenade_launch.ogg
index 14c201cc4fcf3..c45b2c2e9df8b 100644
Binary files a/sound/items/weapons/gun/general/grenade_launch.ogg and b/sound/items/weapons/gun/general/grenade_launch.ogg differ
diff --git a/sound/items/weapons/gun/general/heavy_shot_suppressed.ogg b/sound/items/weapons/gun/general/heavy_shot_suppressed.ogg
index bbf631346764a..ec82b69e9ebbd 100644
Binary files a/sound/items/weapons/gun/general/heavy_shot_suppressed.ogg and b/sound/items/weapons/gun/general/heavy_shot_suppressed.ogg differ
diff --git a/sound/items/weapons/gun/general/mag_bullet_insert.ogg b/sound/items/weapons/gun/general/mag_bullet_insert.ogg
index 5f23474f597c8..5f5ef8872a7a7 100644
Binary files a/sound/items/weapons/gun/general/mag_bullet_insert.ogg and b/sound/items/weapons/gun/general/mag_bullet_insert.ogg differ
diff --git a/sound/items/weapons/gun/general/mag_bullet_remove.ogg b/sound/items/weapons/gun/general/mag_bullet_remove.ogg
index c070701052a2c..cd4d49c9dbefa 100644
Binary files a/sound/items/weapons/gun/general/mag_bullet_remove.ogg and b/sound/items/weapons/gun/general/mag_bullet_remove.ogg differ
diff --git a/sound/items/weapons/gun/general/magazine_insert_empty.ogg b/sound/items/weapons/gun/general/magazine_insert_empty.ogg
index ee90f7b607ba1..062ac155c011e 100644
Binary files a/sound/items/weapons/gun/general/magazine_insert_empty.ogg and b/sound/items/weapons/gun/general/magazine_insert_empty.ogg differ
diff --git a/sound/items/weapons/gun/general/magazine_insert_full.ogg b/sound/items/weapons/gun/general/magazine_insert_full.ogg
index 1deb39f86ecb0..300e3caf3d3a0 100644
Binary files a/sound/items/weapons/gun/general/magazine_insert_full.ogg and b/sound/items/weapons/gun/general/magazine_insert_full.ogg differ
diff --git a/sound/items/weapons/gun/general/magazine_remove_empty.ogg b/sound/items/weapons/gun/general/magazine_remove_empty.ogg
index 72d89eaa01513..494e33315483e 100644
Binary files a/sound/items/weapons/gun/general/magazine_remove_empty.ogg and b/sound/items/weapons/gun/general/magazine_remove_empty.ogg differ
diff --git a/sound/items/weapons/gun/general/magazine_remove_full.ogg b/sound/items/weapons/gun/general/magazine_remove_full.ogg
index b591d688bb211..14ff2f4dc82e8 100644
Binary files a/sound/items/weapons/gun/general/magazine_remove_full.ogg and b/sound/items/weapons/gun/general/magazine_remove_full.ogg differ
diff --git a/sound/items/weapons/gun/general/mountedgun.ogg b/sound/items/weapons/gun/general/mountedgun.ogg
index dfa11134eab34..0606ef2a622d9 100644
Binary files a/sound/items/weapons/gun/general/mountedgun.ogg and b/sound/items/weapons/gun/general/mountedgun.ogg differ
diff --git a/sound/items/weapons/gun/general/mountedgunend.ogg b/sound/items/weapons/gun/general/mountedgunend.ogg
index dfa11134eab34..61772fd24eaf1 100644
Binary files a/sound/items/weapons/gun/general/mountedgunend.ogg and b/sound/items/weapons/gun/general/mountedgunend.ogg differ
diff --git a/sound/items/weapons/gun/general/rocket_launch.ogg b/sound/items/weapons/gun/general/rocket_launch.ogg
index fe9d86a47fcbe..42055a7997d89 100644
Binary files a/sound/items/weapons/gun/general/rocket_launch.ogg and b/sound/items/weapons/gun/general/rocket_launch.ogg differ
diff --git a/sound/items/weapons/gun/general/slide_lock_1.ogg b/sound/items/weapons/gun/general/slide_lock_1.ogg
index 89ac40c7c4777..3fe4c16d8f0ad 100644
Binary files a/sound/items/weapons/gun/general/slide_lock_1.ogg and b/sound/items/weapons/gun/general/slide_lock_1.ogg differ
diff --git a/sound/items/weapons/gun/hmg/hmg.ogg b/sound/items/weapons/gun/hmg/hmg.ogg
index 44886d59aba28..9d724e4b1c8f6 100644
Binary files a/sound/items/weapons/gun/hmg/hmg.ogg and b/sound/items/weapons/gun/hmg/hmg.ogg differ
diff --git a/sound/items/weapons/gun/l6/l6_door.ogg b/sound/items/weapons/gun/l6/l6_door.ogg
index e5cde5c712074..badcc110a36a8 100644
Binary files a/sound/items/weapons/gun/l6/l6_door.ogg and b/sound/items/weapons/gun/l6/l6_door.ogg differ
diff --git a/sound/items/weapons/gun/l6/l6_rack.ogg b/sound/items/weapons/gun/l6/l6_rack.ogg
index 21c250136840a..9b7ad11c4a191 100644
Binary files a/sound/items/weapons/gun/l6/l6_rack.ogg and b/sound/items/weapons/gun/l6/l6_rack.ogg differ
diff --git a/sound/items/weapons/gun/l6/shot.ogg b/sound/items/weapons/gun/l6/shot.ogg
index e6c1a9abe9580..b5b1591f2ea77 100644
Binary files a/sound/items/weapons/gun/l6/shot.ogg and b/sound/items/weapons/gun/l6/shot.ogg differ
diff --git a/sound/items/weapons/gun/pistol/drop_small.ogg b/sound/items/weapons/gun/pistol/drop_small.ogg
index 4395c5bb5b552..467b911a5f348 100644
Binary files a/sound/items/weapons/gun/pistol/drop_small.ogg and b/sound/items/weapons/gun/pistol/drop_small.ogg differ
diff --git a/sound/items/weapons/gun/pistol/dry_fire.ogg b/sound/items/weapons/gun/pistol/dry_fire.ogg
index d74dc7ca09679..f223442851c8e 100644
Binary files a/sound/items/weapons/gun/pistol/dry_fire.ogg and b/sound/items/weapons/gun/pistol/dry_fire.ogg differ
diff --git a/sound/items/weapons/gun/pistol/lock_small.ogg b/sound/items/weapons/gun/pistol/lock_small.ogg
index fc89a8ba64353..9b966ad33230f 100644
Binary files a/sound/items/weapons/gun/pistol/lock_small.ogg and b/sound/items/weapons/gun/pistol/lock_small.ogg differ
diff --git a/sound/items/weapons/gun/pistol/mag_insert.ogg b/sound/items/weapons/gun/pistol/mag_insert.ogg
index 42a05ebc483f3..c9850d9f47a30 100644
Binary files a/sound/items/weapons/gun/pistol/mag_insert.ogg and b/sound/items/weapons/gun/pistol/mag_insert.ogg differ
diff --git a/sound/items/weapons/gun/pistol/mag_release.ogg b/sound/items/weapons/gun/pistol/mag_release.ogg
index cccbf5f9d914c..21e9383439b1a 100644
Binary files a/sound/items/weapons/gun/pistol/mag_release.ogg and b/sound/items/weapons/gun/pistol/mag_release.ogg differ
diff --git a/sound/items/weapons/gun/pistol/rack.ogg b/sound/items/weapons/gun/pistol/rack.ogg
index fd0408d8ff2ee..8f3c421593844 100644
Binary files a/sound/items/weapons/gun/pistol/rack.ogg and b/sound/items/weapons/gun/pistol/rack.ogg differ
diff --git a/sound/items/weapons/gun/pistol/rack_small.ogg b/sound/items/weapons/gun/pistol/rack_small.ogg
index f33db717db82a..b80e793455dbb 100644
Binary files a/sound/items/weapons/gun/pistol/rack_small.ogg and b/sound/items/weapons/gun/pistol/rack_small.ogg differ
diff --git a/sound/items/weapons/gun/pistol/shot.ogg b/sound/items/weapons/gun/pistol/shot.ogg
index fcf8ad62346b9..32d82c68ff86c 100644
Binary files a/sound/items/weapons/gun/pistol/shot.ogg and b/sound/items/weapons/gun/pistol/shot.ogg differ
diff --git a/sound/items/weapons/gun/pistol/shot_alt.ogg b/sound/items/weapons/gun/pistol/shot_alt.ogg
index 583c3f36034d3..e41a631ed4b4d 100644
Binary files a/sound/items/weapons/gun/pistol/shot_alt.ogg and b/sound/items/weapons/gun/pistol/shot_alt.ogg differ
diff --git a/sound/items/weapons/gun/pistol/shot_suppressed.ogg b/sound/items/weapons/gun/pistol/shot_suppressed.ogg
index aa12e8477c77c..7358c24d295e9 100644
Binary files a/sound/items/weapons/gun/pistol/shot_suppressed.ogg and b/sound/items/weapons/gun/pistol/shot_suppressed.ogg differ
diff --git a/sound/items/weapons/gun/pistol/slide_drop.ogg b/sound/items/weapons/gun/pistol/slide_drop.ogg
index 1ca0aac35d3d1..124273a2526fc 100644
Binary files a/sound/items/weapons/gun/pistol/slide_drop.ogg and b/sound/items/weapons/gun/pistol/slide_drop.ogg differ
diff --git a/sound/items/weapons/gun/pistol/slide_lock.ogg b/sound/items/weapons/gun/pistol/slide_lock.ogg
index 9fbc13f7c341b..cf9d096b8a7f2 100644
Binary files a/sound/items/weapons/gun/pistol/slide_lock.ogg and b/sound/items/weapons/gun/pistol/slide_lock.ogg differ
diff --git a/sound/items/weapons/gun/revolver/dry_fire.ogg b/sound/items/weapons/gun/revolver/dry_fire.ogg
index a24adfe7c0dae..dc19b09bbd322 100644
Binary files a/sound/items/weapons/gun/revolver/dry_fire.ogg and b/sound/items/weapons/gun/revolver/dry_fire.ogg differ
diff --git a/sound/items/weapons/gun/revolver/empty.ogg b/sound/items/weapons/gun/revolver/empty.ogg
index 81ddb1e2e0e2f..89bed3c40d34d 100644
Binary files a/sound/items/weapons/gun/revolver/empty.ogg and b/sound/items/weapons/gun/revolver/empty.ogg differ
diff --git a/sound/items/weapons/gun/revolver/load_bullet.ogg b/sound/items/weapons/gun/revolver/load_bullet.ogg
index 9978a35a72568..5882598956a19 100644
Binary files a/sound/items/weapons/gun/revolver/load_bullet.ogg and b/sound/items/weapons/gun/revolver/load_bullet.ogg differ
diff --git a/sound/items/weapons/gun/revolver/shot.ogg b/sound/items/weapons/gun/revolver/shot.ogg
index 6c574829732ec..5b91c711f02ce 100644
Binary files a/sound/items/weapons/gun/revolver/shot.ogg and b/sound/items/weapons/gun/revolver/shot.ogg differ
diff --git a/sound/items/weapons/gun/revolver/shot_alt.ogg b/sound/items/weapons/gun/revolver/shot_alt.ogg
index fcd3b99ff80c8..0c969a55961a4 100644
Binary files a/sound/items/weapons/gun/revolver/shot_alt.ogg and b/sound/items/weapons/gun/revolver/shot_alt.ogg differ
diff --git a/sound/items/weapons/gun/revolver/spin1.ogg b/sound/items/weapons/gun/revolver/spin1.ogg
index 5a27ba4c32ed8..5faf4f6f43151 100644
Binary files a/sound/items/weapons/gun/revolver/spin1.ogg and b/sound/items/weapons/gun/revolver/spin1.ogg differ
diff --git a/sound/items/weapons/gun/revolver/spin2.ogg b/sound/items/weapons/gun/revolver/spin2.ogg
index 90ea91048f28d..2785b1d5b9f1c 100644
Binary files a/sound/items/weapons/gun/revolver/spin2.ogg and b/sound/items/weapons/gun/revolver/spin2.ogg differ
diff --git a/sound/items/weapons/gun/revolver/spin3.ogg b/sound/items/weapons/gun/revolver/spin3.ogg
index cdab08fdfde3c..fd954f101a717 100644
Binary files a/sound/items/weapons/gun/revolver/spin3.ogg and b/sound/items/weapons/gun/revolver/spin3.ogg differ
diff --git a/sound/items/weapons/gun/rifle/bolt_in.ogg b/sound/items/weapons/gun/rifle/bolt_in.ogg
index 1e351fd092a94..6f34d3d3a44d6 100644
Binary files a/sound/items/weapons/gun/rifle/bolt_in.ogg and b/sound/items/weapons/gun/rifle/bolt_in.ogg differ
diff --git a/sound/items/weapons/gun/rifle/bolt_out.ogg b/sound/items/weapons/gun/rifle/bolt_out.ogg
index 03e11ee70fac6..70b4349308ea2 100644
Binary files a/sound/items/weapons/gun/rifle/bolt_out.ogg and b/sound/items/weapons/gun/rifle/bolt_out.ogg differ
diff --git a/sound/items/weapons/gun/rifle/shot.ogg b/sound/items/weapons/gun/rifle/shot.ogg
index acdb447ca8fdb..8c2110578457f 100644
Binary files a/sound/items/weapons/gun/rifle/shot.ogg and b/sound/items/weapons/gun/rifle/shot.ogg differ
diff --git a/sound/items/weapons/gun/rifle/shot_heavy.ogg b/sound/items/weapons/gun/rifle/shot_heavy.ogg
index f91b21ec4d801..7152184d71477 100644
Binary files a/sound/items/weapons/gun/rifle/shot_heavy.ogg and b/sound/items/weapons/gun/rifle/shot_heavy.ogg differ
diff --git a/sound/items/weapons/gun/shotgun/insert_shell.ogg b/sound/items/weapons/gun/shotgun/insert_shell.ogg
index 5b2c6cdc50033..823fa0b18109b 100644
Binary files a/sound/items/weapons/gun/shotgun/insert_shell.ogg and b/sound/items/weapons/gun/shotgun/insert_shell.ogg differ
diff --git a/sound/items/weapons/gun/shotgun/rack.ogg b/sound/items/weapons/gun/shotgun/rack.ogg
index c25a10ffa4946..da280bc66d27b 100644
Binary files a/sound/items/weapons/gun/shotgun/rack.ogg and b/sound/items/weapons/gun/shotgun/rack.ogg differ
diff --git a/sound/items/weapons/gun/shotgun/shot.ogg b/sound/items/weapons/gun/shotgun/shot.ogg
index e999bb9bb7f74..9ab9b5e281618 100644
Binary files a/sound/items/weapons/gun/shotgun/shot.ogg and b/sound/items/weapons/gun/shotgun/shot.ogg differ
diff --git a/sound/items/weapons/gun/shotgun/shot_alt.ogg b/sound/items/weapons/gun/shotgun/shot_alt.ogg
index 48bea46d5cb7d..d14af8b49adbd 100644
Binary files a/sound/items/weapons/gun/shotgun/shot_alt.ogg and b/sound/items/weapons/gun/shotgun/shot_alt.ogg differ
diff --git a/sound/items/weapons/gun/smartgun/smartgun_shoot_1.ogg b/sound/items/weapons/gun/smartgun/smartgun_shoot_1.ogg
index 5d567b7fca6c0..a2b316ba19e16 100644
Binary files a/sound/items/weapons/gun/smartgun/smartgun_shoot_1.ogg and b/sound/items/weapons/gun/smartgun/smartgun_shoot_1.ogg differ
diff --git a/sound/items/weapons/gun/smartgun/smartgun_shoot_2.ogg b/sound/items/weapons/gun/smartgun/smartgun_shoot_2.ogg
index 9891482865c66..ad54f9cf5e127 100644
Binary files a/sound/items/weapons/gun/smartgun/smartgun_shoot_2.ogg and b/sound/items/weapons/gun/smartgun/smartgun_shoot_2.ogg differ
diff --git a/sound/items/weapons/gun/smartgun/smartgun_shoot_3.ogg b/sound/items/weapons/gun/smartgun/smartgun_shoot_3.ogg
index 89eb9fcc989c4..0bb2dab5ace4d 100644
Binary files a/sound/items/weapons/gun/smartgun/smartgun_shoot_3.ogg and b/sound/items/weapons/gun/smartgun/smartgun_shoot_3.ogg differ
diff --git a/sound/items/weapons/gun/smg/shot.ogg b/sound/items/weapons/gun/smg/shot.ogg
index cb3c1a49b5689..105ec1326a4fc 100644
Binary files a/sound/items/weapons/gun/smg/shot.ogg and b/sound/items/weapons/gun/smg/shot.ogg differ
diff --git a/sound/items/weapons/gun/smg/shot_alt.ogg b/sound/items/weapons/gun/smg/shot_alt.ogg
index 3dabedba1a445..4b47c393554a2 100644
Binary files a/sound/items/weapons/gun/smg/shot_alt.ogg and b/sound/items/weapons/gun/smg/shot_alt.ogg differ
diff --git a/sound/items/weapons/gun/smg/shot_suppressed.ogg b/sound/items/weapons/gun/smg/shot_suppressed.ogg
index f7b3be370bfb8..75378b0d18dd4 100644
Binary files a/sound/items/weapons/gun/smg/shot_suppressed.ogg and b/sound/items/weapons/gun/smg/shot_suppressed.ogg differ
diff --git a/sound/items/weapons/gun/smg/smgrack.ogg b/sound/items/weapons/gun/smg/smgrack.ogg
index 95f5a5f9c8432..6c1d03d358969 100644
Binary files a/sound/items/weapons/gun/smg/smgrack.ogg and b/sound/items/weapons/gun/smg/smgrack.ogg differ
diff --git a/sound/items/weapons/gun/sniper/mag_insert.ogg b/sound/items/weapons/gun/sniper/mag_insert.ogg
index 53460ebf14dde..6f5771a5d0ee7 100644
Binary files a/sound/items/weapons/gun/sniper/mag_insert.ogg and b/sound/items/weapons/gun/sniper/mag_insert.ogg differ
diff --git a/sound/items/weapons/gun/sniper/rack.ogg b/sound/items/weapons/gun/sniper/rack.ogg
index 28c12325bc19e..30cd910c30c80 100644
Binary files a/sound/items/weapons/gun/sniper/rack.ogg and b/sound/items/weapons/gun/sniper/rack.ogg differ
diff --git a/sound/items/weapons/gun/sniper/shot.ogg b/sound/items/weapons/gun/sniper/shot.ogg
index 4c23868da15dd..6f95eeb284312 100644
Binary files a/sound/items/weapons/gun/sniper/shot.ogg and b/sound/items/weapons/gun/sniper/shot.ogg differ
diff --git a/sound/items/weapons/handcuffs.ogg b/sound/items/weapons/handcuffs.ogg
index 57af93278c7b1..1ef22fdc7c815 100644
Binary files a/sound/items/weapons/handcuffs.ogg and b/sound/items/weapons/handcuffs.ogg differ
diff --git a/sound/items/weapons/homerun.ogg b/sound/items/weapons/homerun.ogg
index 74e86bd130559..dac203143093b 100644
Binary files a/sound/items/weapons/homerun.ogg and b/sound/items/weapons/homerun.ogg differ
diff --git a/sound/items/weapons/ionrifle.ogg b/sound/items/weapons/ionrifle.ogg
index 7c1204554c3c9..6d272b4b40e80 100644
Binary files a/sound/items/weapons/ionrifle.ogg and b/sound/items/weapons/ionrifle.ogg differ
diff --git a/sound/items/weapons/jammed.ogg b/sound/items/weapons/jammed.ogg
index e67dab5bb7a56..56777833775e6 100644
Binary files a/sound/items/weapons/jammed.ogg and b/sound/items/weapons/jammed.ogg differ
diff --git a/sound/items/weapons/kinetic_accel.ogg b/sound/items/weapons/kinetic_accel.ogg
index a74c4d45961da..90582505e8c16 100644
Binary files a/sound/items/weapons/kinetic_accel.ogg and b/sound/items/weapons/kinetic_accel.ogg differ
diff --git a/sound/items/weapons/kinetic_reload.ogg b/sound/items/weapons/kinetic_reload.ogg
index 29a91d01b772b..e0d12bb6a5bef 100644
Binary files a/sound/items/weapons/kinetic_reload.ogg and b/sound/items/weapons/kinetic_reload.ogg differ
diff --git a/sound/items/weapons/laser.ogg b/sound/items/weapons/laser.ogg
index 2efa80fd3ae1f..5e4d31430975f 100644
Binary files a/sound/items/weapons/laser.ogg and b/sound/items/weapons/laser.ogg differ
diff --git a/sound/items/weapons/laser2.ogg b/sound/items/weapons/laser2.ogg
index 7fd3969b2adf3..3071549577197 100644
Binary files a/sound/items/weapons/laser2.ogg and b/sound/items/weapons/laser2.ogg differ
diff --git a/sound/items/weapons/laser3.ogg b/sound/items/weapons/laser3.ogg
index 4169df0af91a8..2c1e02c3ae2d2 100644
Binary files a/sound/items/weapons/laser3.ogg and b/sound/items/weapons/laser3.ogg differ
diff --git a/sound/items/weapons/laser_crank.ogg b/sound/items/weapons/laser_crank.ogg
index 5dc71f27c75b7..c6ddde65d6d18 100644
Binary files a/sound/items/weapons/laser_crank.ogg and b/sound/items/weapons/laser_crank.ogg differ
diff --git a/sound/items/weapons/lasercannonfire.ogg b/sound/items/weapons/lasercannonfire.ogg
index 87f7c25ec3e2d..2f5dce119d309 100644
Binary files a/sound/items/weapons/lasercannonfire.ogg and b/sound/items/weapons/lasercannonfire.ogg differ
diff --git a/sound/items/weapons/magin.ogg b/sound/items/weapons/magin.ogg
index 02d2d162c6a09..eb4983dcb4142 100644
Binary files a/sound/items/weapons/magin.ogg and b/sound/items/weapons/magin.ogg differ
diff --git a/sound/items/weapons/magout.ogg b/sound/items/weapons/magout.ogg
index a2cdbc4696db0..fd74bfe0325ae 100644
Binary files a/sound/items/weapons/magout.ogg and b/sound/items/weapons/magout.ogg differ
diff --git a/sound/items/weapons/marauder.ogg b/sound/items/weapons/marauder.ogg
index 5ef249f6ef5db..2dd5300a02c95 100644
Binary files a/sound/items/weapons/marauder.ogg and b/sound/items/weapons/marauder.ogg differ
diff --git a/sound/items/weapons/minebot_rocket.ogg b/sound/items/weapons/minebot_rocket.ogg
index f8749a15e1882..6dcf0c2a0252e 100644
Binary files a/sound/items/weapons/minebot_rocket.ogg and b/sound/items/weapons/minebot_rocket.ogg differ
diff --git a/sound/items/weapons/mortar_long_whistle.ogg b/sound/items/weapons/mortar_long_whistle.ogg
index 646d37d8ab628..d080b921111b1 100644
Binary files a/sound/items/weapons/mortar_long_whistle.ogg and b/sound/items/weapons/mortar_long_whistle.ogg differ
diff --git a/sound/items/weapons/mortar_whistle.ogg b/sound/items/weapons/mortar_whistle.ogg
index 2d7e19d85da06..12f50d01d5581 100644
Binary files a/sound/items/weapons/mortar_whistle.ogg and b/sound/items/weapons/mortar_whistle.ogg differ
diff --git a/sound/items/weapons/parry.ogg b/sound/items/weapons/parry.ogg
index f9d5638b85f78..50859ee8fabf6 100644
Binary files a/sound/items/weapons/parry.ogg and b/sound/items/weapons/parry.ogg differ
diff --git a/sound/items/weapons/pierce.ogg b/sound/items/weapons/pierce.ogg
index d214892632487..934a32a0d9faf 100644
Binary files a/sound/items/weapons/pierce.ogg and b/sound/items/weapons/pierce.ogg differ
diff --git a/sound/items/weapons/pierce_slow.ogg b/sound/items/weapons/pierce_slow.ogg
index 239020b8df5dc..5bd6a64363450 100644
Binary files a/sound/items/weapons/pierce_slow.ogg and b/sound/items/weapons/pierce_slow.ogg differ
diff --git a/sound/items/weapons/plasma_cutter.ogg b/sound/items/weapons/plasma_cutter.ogg
index 70fda591a1459..e9533d08dca1b 100644
Binary files a/sound/items/weapons/plasma_cutter.ogg and b/sound/items/weapons/plasma_cutter.ogg differ
diff --git a/sound/items/weapons/pulse.ogg b/sound/items/weapons/pulse.ogg
index b66037a14b267..ebd3f658b4065 100644
Binary files a/sound/items/weapons/pulse.ogg and b/sound/items/weapons/pulse.ogg differ
diff --git a/sound/items/weapons/pulse2.ogg b/sound/items/weapons/pulse2.ogg
index 37308f2d543db..df94f59349930 100644
Binary files a/sound/items/weapons/pulse2.ogg and b/sound/items/weapons/pulse2.ogg differ
diff --git a/sound/items/weapons/pulse3.ogg b/sound/items/weapons/pulse3.ogg
index 8f52287f2a26f..b0fbe3a6af7d5 100644
Binary files a/sound/items/weapons/pulse3.ogg and b/sound/items/weapons/pulse3.ogg differ
diff --git a/sound/items/weapons/punch1.ogg b/sound/items/weapons/punch1.ogg
index bf0f95fe20894..de697dc09d3a6 100644
Binary files a/sound/items/weapons/punch1.ogg and b/sound/items/weapons/punch1.ogg differ
diff --git a/sound/items/weapons/punch2.ogg b/sound/items/weapons/punch2.ogg
index 11a7dbffd7987..97eb9f113ced5 100644
Binary files a/sound/items/weapons/punch2.ogg and b/sound/items/weapons/punch2.ogg differ
diff --git a/sound/items/weapons/punch3.ogg b/sound/items/weapons/punch3.ogg
index 010b7a8ad3118..4d74743d81ad2 100644
Binary files a/sound/items/weapons/punch3.ogg and b/sound/items/weapons/punch3.ogg differ
diff --git a/sound/items/weapons/punch4.ogg b/sound/items/weapons/punch4.ogg
index 667ae685320b9..3227ef0437242 100644
Binary files a/sound/items/weapons/punch4.ogg and b/sound/items/weapons/punch4.ogg differ
diff --git a/sound/items/weapons/punchmiss.ogg b/sound/items/weapons/punchmiss.ogg
index 4f1e0e99b24d8..1054fa9c0fe69 100644
Binary files a/sound/items/weapons/punchmiss.ogg and b/sound/items/weapons/punchmiss.ogg differ
diff --git a/sound/items/weapons/rapierhit.ogg b/sound/items/weapons/rapierhit.ogg
index 401fcf9677c84..aadfd7cdcbd65 100644
Binary files a/sound/items/weapons/rapierhit.ogg and b/sound/items/weapons/rapierhit.ogg differ
diff --git a/sound/items/weapons/resonator_blast.ogg b/sound/items/weapons/resonator_blast.ogg
index c37c9e903deb8..5375d2046ebd5 100644
Binary files a/sound/items/weapons/resonator_blast.ogg and b/sound/items/weapons/resonator_blast.ogg differ
diff --git a/sound/items/weapons/resonator_fire.ogg b/sound/items/weapons/resonator_fire.ogg
index 1c686bc96ff97..8c1ca706ac889 100644
Binary files a/sound/items/weapons/resonator_fire.ogg and b/sound/items/weapons/resonator_fire.ogg differ
diff --git a/sound/items/weapons/ring.ogg b/sound/items/weapons/ring.ogg
index c134a0077ac9b..a5785a36e0130 100644
Binary files a/sound/items/weapons/ring.ogg and b/sound/items/weapons/ring.ogg differ
diff --git a/sound/items/weapons/saberoff.ogg b/sound/items/weapons/saberoff.ogg
index d805414bdc53a..2355148cc2ae9 100644
Binary files a/sound/items/weapons/saberoff.ogg and b/sound/items/weapons/saberoff.ogg differ
diff --git a/sound/items/weapons/saberon.ogg b/sound/items/weapons/saberon.ogg
index c5d2217edd939..ee2bcc4f8e8c4 100644
Binary files a/sound/items/weapons/saberon.ogg and b/sound/items/weapons/saberon.ogg differ
diff --git a/sound/items/weapons/scope.ogg b/sound/items/weapons/scope.ogg
index 37d70b6ff4c3d..3afc89c6cff98 100644
Binary files a/sound/items/weapons/scope.ogg and b/sound/items/weapons/scope.ogg differ
diff --git a/sound/items/weapons/sear.ogg b/sound/items/weapons/sear.ogg
index e0a9f8deff7e8..da4c20abaed00 100644
Binary files a/sound/items/weapons/sear.ogg and b/sound/items/weapons/sear.ogg differ
diff --git a/sound/items/weapons/sear_disabler.ogg b/sound/items/weapons/sear_disabler.ogg
index 134c8c0cb211a..a5b526e842987 100644
Binary files a/sound/items/weapons/sear_disabler.ogg and b/sound/items/weapons/sear_disabler.ogg differ
diff --git a/sound/items/weapons/shove.ogg b/sound/items/weapons/shove.ogg
index eb10eabed26a4..ac3df5a052453 100644
Binary files a/sound/items/weapons/shove.ogg and b/sound/items/weapons/shove.ogg differ
diff --git a/sound/items/weapons/shrink_hit.ogg b/sound/items/weapons/shrink_hit.ogg
index c39c2d52694cd..ecd906296df05 100644
Binary files a/sound/items/weapons/shrink_hit.ogg and b/sound/items/weapons/shrink_hit.ogg differ
diff --git a/sound/items/weapons/slam.ogg b/sound/items/weapons/slam.ogg
index c8a90c2e434e3..33e3f41ea46d1 100644
Binary files a/sound/items/weapons/slam.ogg and b/sound/items/weapons/slam.ogg differ
diff --git a/sound/items/weapons/slap.ogg b/sound/items/weapons/slap.ogg
index 99a9ec788c4c0..7321efd9874a0 100644
Binary files a/sound/items/weapons/slap.ogg and b/sound/items/weapons/slap.ogg differ
diff --git a/sound/items/weapons/slash.ogg b/sound/items/weapons/slash.ogg
index ad357891eb7d9..466a63da929d1 100644
Binary files a/sound/items/weapons/slash.ogg and b/sound/items/weapons/slash.ogg differ
diff --git a/sound/items/weapons/slashmiss.ogg b/sound/items/weapons/slashmiss.ogg
index 8aa19ea9ce3d7..2b9e98a4261f7 100644
Binary files a/sound/items/weapons/slashmiss.ogg and b/sound/items/weapons/slashmiss.ogg differ
diff --git a/sound/items/weapons/slice.ogg b/sound/items/weapons/slice.ogg
index 68cb8a761f365..330e34f43a650 100644
Binary files a/sound/items/weapons/slice.ogg and b/sound/items/weapons/slice.ogg differ
diff --git a/sound/items/weapons/smash.ogg b/sound/items/weapons/smash.ogg
index 0bcbfbfe2c1e2..6bc419a1b4065 100644
Binary files a/sound/items/weapons/smash.ogg and b/sound/items/weapons/smash.ogg differ
diff --git a/sound/items/weapons/solarflare.ogg b/sound/items/weapons/solarflare.ogg
index 48f6c5e892292..4bf74e778a6cd 100644
Binary files a/sound/items/weapons/solarflare.ogg and b/sound/items/weapons/solarflare.ogg differ
diff --git a/sound/items/weapons/sonic_jackhammer.ogg b/sound/items/weapons/sonic_jackhammer.ogg
index be22f36e3ebf3..2c59c7c601fc0 100644
Binary files a/sound/items/weapons/sonic_jackhammer.ogg and b/sound/items/weapons/sonic_jackhammer.ogg differ
diff --git a/sound/items/weapons/stringsmash.ogg b/sound/items/weapons/stringsmash.ogg
index 1c3e8971dcc72..a674cc57168f6 100644
Binary files a/sound/items/weapons/stringsmash.ogg and b/sound/items/weapons/stringsmash.ogg differ
diff --git a/sound/items/weapons/tap.ogg b/sound/items/weapons/tap.ogg
index 711cb0ac386e3..f20cc0b0fa077 100644
Binary files a/sound/items/weapons/tap.ogg and b/sound/items/weapons/tap.ogg differ
diff --git a/sound/items/weapons/taser.ogg b/sound/items/weapons/taser.ogg
index b0acc74262236..91b9668123432 100644
Binary files a/sound/items/weapons/taser.ogg and b/sound/items/weapons/taser.ogg differ
diff --git a/sound/items/weapons/taser2.ogg b/sound/items/weapons/taser2.ogg
index 9ab144d2e2af0..27bad577e0811 100644
Binary files a/sound/items/weapons/taser2.ogg and b/sound/items/weapons/taser2.ogg differ
diff --git a/sound/items/weapons/taser3.ogg b/sound/items/weapons/taser3.ogg
index bfe904c902a2f..4bc67cd11af82 100644
Binary files a/sound/items/weapons/taser3.ogg and b/sound/items/weapons/taser3.ogg differ
diff --git a/sound/items/weapons/taserhit.ogg b/sound/items/weapons/taserhit.ogg
index fb8facbfffc3e..fade761674520 100644
Binary files a/sound/items/weapons/taserhit.ogg and b/sound/items/weapons/taserhit.ogg differ
diff --git a/sound/items/weapons/thermalpistol.ogg b/sound/items/weapons/thermalpistol.ogg
index 947c1f7d9e542..afd7fb29d3d8e 100644
Binary files a/sound/items/weapons/thermalpistol.ogg and b/sound/items/weapons/thermalpistol.ogg differ
diff --git a/sound/items/weapons/throw.ogg b/sound/items/weapons/throw.ogg
index e9e282ae3b1b4..ff0954e5fce6f 100644
Binary files a/sound/items/weapons/throw.ogg and b/sound/items/weapons/throw.ogg differ
diff --git a/sound/items/weapons/throwhard.ogg b/sound/items/weapons/throwhard.ogg
index b628c534b88d6..f5995462262ec 100644
Binary files a/sound/items/weapons/throwhard.ogg and b/sound/items/weapons/throwhard.ogg differ
diff --git a/sound/items/weapons/throwsoft.ogg b/sound/items/weapons/throwsoft.ogg
index 6b6f4f9346e06..25fa4bc74fae8 100644
Binary files a/sound/items/weapons/throwsoft.ogg and b/sound/items/weapons/throwsoft.ogg differ
diff --git a/sound/items/weapons/throwtap.ogg b/sound/items/weapons/throwtap.ogg
index 76d746b0f57cf..40a2e446d1922 100644
Binary files a/sound/items/weapons/throwtap.ogg and b/sound/items/weapons/throwtap.ogg differ
diff --git a/sound/items/weapons/thudswoosh.ogg b/sound/items/weapons/thudswoosh.ogg
index 934ec6350f56a..52aa058ec4632 100644
Binary files a/sound/items/weapons/thudswoosh.ogg and b/sound/items/weapons/thudswoosh.ogg differ
diff --git a/sound/items/weapons/wave.ogg b/sound/items/weapons/wave.ogg
index b7bf7d260faa3..30e7220e9024d 100644
Binary files a/sound/items/weapons/wave.ogg and b/sound/items/weapons/wave.ogg differ
diff --git a/sound/items/weapons/whip.ogg b/sound/items/weapons/whip.ogg
index 3c9a4aff098f6..92ae71e6f3fe0 100644
Binary files a/sound/items/weapons/whip.ogg and b/sound/items/weapons/whip.ogg differ
diff --git a/sound/items/weapons/whipgrab.ogg b/sound/items/weapons/whipgrab.ogg
index 3b17632056caf..8cca6adcc7861 100644
Binary files a/sound/items/weapons/whipgrab.ogg and b/sound/items/weapons/whipgrab.ogg differ
diff --git a/sound/items/weapons/zapbang.ogg b/sound/items/weapons/zapbang.ogg
index 53d9f9e150b17..38c8be03ecce9 100644
Binary files a/sound/items/weapons/zapbang.ogg and b/sound/items/weapons/zapbang.ogg differ
diff --git a/sound/items/weapons/zipline_fire.ogg b/sound/items/weapons/zipline_fire.ogg
index 4ac133897b5d0..83aa26b90583e 100644
Binary files a/sound/items/weapons/zipline_fire.ogg and b/sound/items/weapons/zipline_fire.ogg differ
diff --git a/sound/items/weapons/zipline_hit.ogg b/sound/items/weapons/zipline_hit.ogg
index cf17cbc84d15b..cae09b50125f9 100644
Binary files a/sound/items/weapons/zipline_hit.ogg and b/sound/items/weapons/zipline_hit.ogg differ
diff --git a/sound/items/weapons/zipline_mid.ogg b/sound/items/weapons/zipline_mid.ogg
index 22148f1c594be..b9d3b013ff6d6 100644
Binary files a/sound/items/weapons/zipline_mid.ogg and b/sound/items/weapons/zipline_mid.ogg differ
diff --git a/sound/items/weeoo1.ogg b/sound/items/weeoo1.ogg
index d842696c78f8f..c55d2fee339bb 100644
Binary files a/sound/items/weeoo1.ogg and b/sound/items/weeoo1.ogg differ
diff --git a/sound/items/whistle/whistle.ogg b/sound/items/whistle/whistle.ogg
index 52d80a2c7164b..bf851ab6e2303 100644
Binary files a/sound/items/whistle/whistle.ogg and b/sound/items/whistle/whistle.ogg differ
diff --git a/sound/items/xbow_lock.ogg b/sound/items/xbow_lock.ogg
index d465a95ca056f..b9e53d8515cff 100644
Binary files a/sound/items/xbow_lock.ogg and b/sound/items/xbow_lock.ogg differ
diff --git a/sound/items/zip/un_zip.ogg b/sound/items/zip/un_zip.ogg
index 84d6bb4c95625..293b457ae4e2a 100644
Binary files a/sound/items/zip/un_zip.ogg and b/sound/items/zip/un_zip.ogg differ
diff --git a/sound/items/zip/zip.ogg b/sound/items/zip/zip.ogg
index d437d486ea460..77fdd382a8d1b 100644
Binary files a/sound/items/zip/zip.ogg and b/sound/items/zip/zip.ogg differ
diff --git a/sound/items/zip/zip_up.ogg b/sound/items/zip/zip_up.ogg
index 73d86da6e6f8b..9b8b1b094c6ad 100644
Binary files a/sound/items/zip/zip_up.ogg and b/sound/items/zip/zip_up.ogg differ
diff --git a/sound/machines/airlock/airlock.ogg b/sound/machines/airlock/airlock.ogg
index 55cafa974f3cf..05e90a3d4de68 100644
Binary files a/sound/machines/airlock/airlock.ogg and b/sound/machines/airlock/airlock.ogg differ
diff --git a/sound/machines/airlock/airlock_alien_prying.ogg b/sound/machines/airlock/airlock_alien_prying.ogg
index 14ee78e2dc703..af8804441b4f2 100644
Binary files a/sound/machines/airlock/airlock_alien_prying.ogg and b/sound/machines/airlock/airlock_alien_prying.ogg differ
diff --git a/sound/machines/airlock/airlockclose.ogg b/sound/machines/airlock/airlockclose.ogg
index 5da73f770e82a..c14805ad441fc 100644
Binary files a/sound/machines/airlock/airlockclose.ogg and b/sound/machines/airlock/airlockclose.ogg differ
diff --git a/sound/machines/airlock/airlockforced.ogg b/sound/machines/airlock/airlockforced.ogg
index 67544104bb32a..a8dee2370ad23 100644
Binary files a/sound/machines/airlock/airlockforced.ogg and b/sound/machines/airlock/airlockforced.ogg differ
diff --git a/sound/machines/airlock/airlockopen.ogg b/sound/machines/airlock/airlockopen.ogg
index 218ff97136450..7eb1a23a30d3b 100644
Binary files a/sound/machines/airlock/airlockopen.ogg and b/sound/machines/airlock/airlockopen.ogg differ
diff --git a/sound/machines/airlock/boltsdown.ogg b/sound/machines/airlock/boltsdown.ogg
index 61fde63e95193..20af27130962e 100644
Binary files a/sound/machines/airlock/boltsdown.ogg and b/sound/machines/airlock/boltsdown.ogg differ
diff --git a/sound/machines/airlock/boltsup.ogg b/sound/machines/airlock/boltsup.ogg
index 108ee74b17bdb..8277e4afaa84e 100644
Binary files a/sound/machines/airlock/boltsup.ogg and b/sound/machines/airlock/boltsup.ogg differ
diff --git a/sound/machines/airlock/doorclick.ogg b/sound/machines/airlock/doorclick.ogg
index 647b7855bd710..4a85ab13f3e3c 100644
Binary files a/sound/machines/airlock/doorclick.ogg and b/sound/machines/airlock/doorclick.ogg differ
diff --git a/sound/machines/arcade/boom.ogg b/sound/machines/arcade/boom.ogg
index 8adfb2bc430e6..b67037d13290e 100644
Binary files a/sound/machines/arcade/boom.ogg and b/sound/machines/arcade/boom.ogg differ
diff --git a/sound/machines/arcade/heal.ogg b/sound/machines/arcade/heal.ogg
index 26f47195c6507..e3abae3dda268 100644
Binary files a/sound/machines/arcade/heal.ogg and b/sound/machines/arcade/heal.ogg differ
diff --git a/sound/machines/arcade/hit.ogg b/sound/machines/arcade/hit.ogg
index 0bf18679a6538..0432f314f5d94 100644
Binary files a/sound/machines/arcade/hit.ogg and b/sound/machines/arcade/hit.ogg differ
diff --git a/sound/machines/arcade/lose.ogg b/sound/machines/arcade/lose.ogg
index dd2145737cd50..ebd49ccbfbe73 100644
Binary files a/sound/machines/arcade/lose.ogg and b/sound/machines/arcade/lose.ogg differ
diff --git a/sound/machines/arcade/mana.ogg b/sound/machines/arcade/mana.ogg
index 7f26ae53fe708..974ee511e1b90 100644
Binary files a/sound/machines/arcade/mana.ogg and b/sound/machines/arcade/mana.ogg differ
diff --git a/sound/machines/arcade/steal.ogg b/sound/machines/arcade/steal.ogg
index 9c7b3be2a5af6..482805d14c7ae 100644
Binary files a/sound/machines/arcade/steal.ogg and b/sound/machines/arcade/steal.ogg differ
diff --git a/sound/machines/arcade/win.ogg b/sound/machines/arcade/win.ogg
index 27fb9725f2090..fb68318e69dcf 100644
Binary files a/sound/machines/arcade/win.ogg and b/sound/machines/arcade/win.ogg differ
diff --git a/sound/machines/beep/beep.ogg b/sound/machines/beep/beep.ogg
index b00addfd297c9..324eba15f74e0 100644
Binary files a/sound/machines/beep/beep.ogg and b/sound/machines/beep/beep.ogg differ
diff --git a/sound/machines/beep/deniedbeep.ogg b/sound/machines/beep/deniedbeep.ogg
index 1dde573a98d4f..5eb66c15a01c8 100644
Binary files a/sound/machines/beep/deniedbeep.ogg and b/sound/machines/beep/deniedbeep.ogg differ
diff --git a/sound/machines/beep/triple_beep.ogg b/sound/machines/beep/triple_beep.ogg
index 891345e3a093b..f967e37b82ab3 100644
Binary files a/sound/machines/beep/triple_beep.ogg and b/sound/machines/beep/triple_beep.ogg differ
diff --git a/sound/machines/beep/twobeep.ogg b/sound/machines/beep/twobeep.ogg
index 26fc5a95a57bb..010ad13285b94 100644
Binary files a/sound/machines/beep/twobeep.ogg and b/sound/machines/beep/twobeep.ogg differ
diff --git a/sound/machines/beep/twobeep_high.ogg b/sound/machines/beep/twobeep_high.ogg
index b97b39a4f01bd..93b714b95de32 100644
Binary files a/sound/machines/beep/twobeep_high.ogg and b/sound/machines/beep/twobeep_high.ogg differ
diff --git a/sound/machines/beep/twobeep_voice1.ogg b/sound/machines/beep/twobeep_voice1.ogg
index 1dcaebf7f907b..5c10e9cc05869 100644
Binary files a/sound/machines/beep/twobeep_voice1.ogg and b/sound/machines/beep/twobeep_voice1.ogg differ
diff --git a/sound/machines/beep/twobeep_voice2.ogg b/sound/machines/beep/twobeep_voice2.ogg
index e8a6c3be58c2f..3db467eec8fb9 100644
Binary files a/sound/machines/beep/twobeep_voice2.ogg and b/sound/machines/beep/twobeep_voice2.ogg differ
diff --git a/sound/machines/blastdoor.ogg b/sound/machines/blastdoor.ogg
index e64deb132faf0..7da5bb3ef0713 100644
Binary files a/sound/machines/blastdoor.ogg and b/sound/machines/blastdoor.ogg differ
diff --git a/sound/machines/blender.ogg b/sound/machines/blender.ogg
index ae78bc25ba42d..dfb2f2cea7725 100644
Binary files a/sound/machines/blender.ogg and b/sound/machines/blender.ogg differ
diff --git a/sound/machines/buzz/buzz-sigh.ogg b/sound/machines/buzz/buzz-sigh.ogg
index 109c196e2c4fe..e20c0b5f35609 100644
Binary files a/sound/machines/buzz/buzz-sigh.ogg and b/sound/machines/buzz/buzz-sigh.ogg differ
diff --git a/sound/machines/buzz/buzz-two.ogg b/sound/machines/buzz/buzz-two.ogg
index 3f79e2a0e91d4..94ff82de45010 100644
Binary files a/sound/machines/buzz/buzz-two.ogg and b/sound/machines/buzz/buzz-two.ogg differ
diff --git a/sound/machines/card_slide.ogg b/sound/machines/card_slide.ogg
index f97ed15fbf00a..980c70b417af1 100644
Binary files a/sound/machines/card_slide.ogg and b/sound/machines/card_slide.ogg differ
diff --git a/sound/machines/cardboard_box.ogg b/sound/machines/cardboard_box.ogg
index c98e362890b9f..b75cc4dd1ab15 100644
Binary files a/sound/machines/cardboard_box.ogg and b/sound/machines/cardboard_box.ogg differ
diff --git a/sound/machines/chime.ogg b/sound/machines/chime.ogg
index f20eb11d11b78..fb7c72494bc4b 100644
Binary files a/sound/machines/chime.ogg and b/sound/machines/chime.ogg differ
diff --git a/sound/machines/click.ogg b/sound/machines/click.ogg
index 3b4914a487d37..0a0e1df21eb08 100644
Binary files a/sound/machines/click.ogg and b/sound/machines/click.ogg differ
diff --git a/sound/machines/clockcult/ark_deathrattle.ogg b/sound/machines/clockcult/ark_deathrattle.ogg
index 821b7cb33516f..65994ce8b89ba 100644
Binary files a/sound/machines/clockcult/ark_deathrattle.ogg and b/sound/machines/clockcult/ark_deathrattle.ogg differ
diff --git a/sound/machines/clockcult/brass_skewer.ogg b/sound/machines/clockcult/brass_skewer.ogg
index 6bdb352f330de..084dd423b1b27 100644
Binary files a/sound/machines/clockcult/brass_skewer.ogg and b/sound/machines/clockcult/brass_skewer.ogg differ
diff --git a/sound/machines/clockcult/integration_cog_install.ogg b/sound/machines/clockcult/integration_cog_install.ogg
index 5fb5a7ce41de2..c085d19e2bada 100644
Binary files a/sound/machines/clockcult/integration_cog_install.ogg and b/sound/machines/clockcult/integration_cog_install.ogg differ
diff --git a/sound/machines/clockcult/steam_whoosh.ogg b/sound/machines/clockcult/steam_whoosh.ogg
index 4b1004d9e051d..19885f9c541e6 100644
Binary files a/sound/machines/clockcult/steam_whoosh.ogg and b/sound/machines/clockcult/steam_whoosh.ogg differ
diff --git a/sound/machines/closet/closet_close.ogg b/sound/machines/closet/closet_close.ogg
index 124f5d85f5eec..acd798ec2857f 100644
Binary files a/sound/machines/closet/closet_close.ogg and b/sound/machines/closet/closet_close.ogg differ
diff --git a/sound/machines/closet/closet_open.ogg b/sound/machines/closet/closet_open.ogg
index 86cbcea0d01b5..bc1845d79c4a8 100644
Binary files a/sound/machines/closet/closet_open.ogg and b/sound/machines/closet/closet_open.ogg differ
diff --git a/sound/machines/closet/wooden_closet_close.ogg b/sound/machines/closet/wooden_closet_close.ogg
index b315c0d97c417..518469b0edec4 100644
Binary files a/sound/machines/closet/wooden_closet_close.ogg and b/sound/machines/closet/wooden_closet_close.ogg differ
diff --git a/sound/machines/closet/wooden_closet_open.ogg b/sound/machines/closet/wooden_closet_open.ogg
index 1a7bda40bb985..cc6044abdd2ec 100644
Binary files a/sound/machines/closet/wooden_closet_open.ogg and b/sound/machines/closet/wooden_closet_open.ogg differ
diff --git a/sound/machines/coffeemaker_brew.ogg b/sound/machines/coffeemaker_brew.ogg
index a8e25c09867a7..dde5e173e567d 100644
Binary files a/sound/machines/coffeemaker_brew.ogg and b/sound/machines/coffeemaker_brew.ogg differ
diff --git a/sound/machines/coindrop.ogg b/sound/machines/coindrop.ogg
index 67ade1a0abafc..dd79f980d3c21 100644
Binary files a/sound/machines/coindrop.ogg and b/sound/machines/coindrop.ogg differ
diff --git a/sound/machines/coindrop2.ogg b/sound/machines/coindrop2.ogg
index a4b6a32d37462..451b97079f501 100644
Binary files a/sound/machines/coindrop2.ogg and b/sound/machines/coindrop2.ogg differ
diff --git a/sound/machines/compiler/compiler-failure.ogg b/sound/machines/compiler/compiler-failure.ogg
index 682e333bcb4f6..7e4940bd5bccf 100644
Binary files a/sound/machines/compiler/compiler-failure.ogg and b/sound/machines/compiler/compiler-failure.ogg differ
diff --git a/sound/machines/compiler/compiler-stage1.ogg b/sound/machines/compiler/compiler-stage1.ogg
index 997268b2f5ba5..138c87bc43d1d 100644
Binary files a/sound/machines/compiler/compiler-stage1.ogg and b/sound/machines/compiler/compiler-stage1.ogg differ
diff --git a/sound/machines/compiler/compiler-stage2.ogg b/sound/machines/compiler/compiler-stage2.ogg
index 66e8e523485e6..092311ee45e9e 100644
Binary files a/sound/machines/compiler/compiler-stage2.ogg and b/sound/machines/compiler/compiler-stage2.ogg differ
diff --git a/sound/machines/computer/computer_end.ogg b/sound/machines/computer/computer_end.ogg
index cd3f770e0bd6e..90e341a623085 100644
Binary files a/sound/machines/computer/computer_end.ogg and b/sound/machines/computer/computer_end.ogg differ
diff --git a/sound/machines/computer/computer_mid1.ogg b/sound/machines/computer/computer_mid1.ogg
index d183bf5b7afc9..6602a750de414 100644
Binary files a/sound/machines/computer/computer_mid1.ogg and b/sound/machines/computer/computer_mid1.ogg differ
diff --git a/sound/machines/computer/computer_mid2.ogg b/sound/machines/computer/computer_mid2.ogg
index 15e53ded8093a..ef4ccf7b25148 100644
Binary files a/sound/machines/computer/computer_mid2.ogg and b/sound/machines/computer/computer_mid2.ogg differ
diff --git a/sound/machines/computer/computer_start.ogg b/sound/machines/computer/computer_start.ogg
index 80fa526bbb84d..fc45f0e6a7cad 100644
Binary files a/sound/machines/computer/computer_start.ogg and b/sound/machines/computer/computer_start.ogg differ
diff --git a/sound/machines/computer/keyboard_clicks_1.ogg b/sound/machines/computer/keyboard_clicks_1.ogg
index b33c6fd56a338..b10c7d66db0be 100644
Binary files a/sound/machines/computer/keyboard_clicks_1.ogg and b/sound/machines/computer/keyboard_clicks_1.ogg differ
diff --git a/sound/machines/computer/keyboard_clicks_2.ogg b/sound/machines/computer/keyboard_clicks_2.ogg
index 64d810753c3cb..c3fde367ad3af 100644
Binary files a/sound/machines/computer/keyboard_clicks_2.ogg and b/sound/machines/computer/keyboard_clicks_2.ogg differ
diff --git a/sound/machines/computer/keyboard_clicks_3.ogg b/sound/machines/computer/keyboard_clicks_3.ogg
index 0e1bb3696f103..53e741423289c 100644
Binary files a/sound/machines/computer/keyboard_clicks_3.ogg and b/sound/machines/computer/keyboard_clicks_3.ogg differ
diff --git a/sound/machines/computer/keyboard_clicks_4.ogg b/sound/machines/computer/keyboard_clicks_4.ogg
index b700393a9c38e..ec89e17130cab 100644
Binary files a/sound/machines/computer/keyboard_clicks_4.ogg and b/sound/machines/computer/keyboard_clicks_4.ogg differ
diff --git a/sound/machines/computer/keyboard_clicks_5.ogg b/sound/machines/computer/keyboard_clicks_5.ogg
index d54b211da0217..59cd267c06162 100644
Binary files a/sound/machines/computer/keyboard_clicks_5.ogg and b/sound/machines/computer/keyboard_clicks_5.ogg differ
diff --git a/sound/machines/computer/keyboard_clicks_6.ogg b/sound/machines/computer/keyboard_clicks_6.ogg
index 84ff3bb7f8003..f75f2853535f3 100644
Binary files a/sound/machines/computer/keyboard_clicks_6.ogg and b/sound/machines/computer/keyboard_clicks_6.ogg differ
diff --git a/sound/machines/computer/keyboard_clicks_7.ogg b/sound/machines/computer/keyboard_clicks_7.ogg
index 39204e360c9f7..4ff15900df92f 100644
Binary files a/sound/machines/computer/keyboard_clicks_7.ogg and b/sound/machines/computer/keyboard_clicks_7.ogg differ
diff --git a/sound/machines/copier.ogg b/sound/machines/copier.ogg
index 8f9f95e6e37ca..ea58da742147a 100644
Binary files a/sound/machines/copier.ogg and b/sound/machines/copier.ogg differ
diff --git a/sound/machines/crate/crate_close.ogg b/sound/machines/crate/crate_close.ogg
index 5371e97ea66e7..a17264469505e 100644
Binary files a/sound/machines/crate/crate_close.ogg and b/sound/machines/crate/crate_close.ogg differ
diff --git a/sound/machines/crate/crate_open.ogg b/sound/machines/crate/crate_open.ogg
index cd4c88161db8f..c66da247ff1ac 100644
Binary files a/sound/machines/crate/crate_open.ogg and b/sound/machines/crate/crate_open.ogg differ
diff --git a/sound/machines/creak.ogg b/sound/machines/creak.ogg
index edb9802b0888c..77feeed66d6ec 100644
Binary files a/sound/machines/creak.ogg and b/sound/machines/creak.ogg differ
diff --git a/sound/machines/cryo_warning.ogg b/sound/machines/cryo_warning.ogg
index 8d1bbc5883b7f..ce5c1f0defc94 100644
Binary files a/sound/machines/cryo_warning.ogg and b/sound/machines/cryo_warning.ogg differ
diff --git a/sound/machines/defib/defib_SaftyOn.ogg b/sound/machines/defib/defib_SaftyOn.ogg
index 25229b3a4e4d3..91fe4020c6985 100644
Binary files a/sound/machines/defib/defib_SaftyOn.ogg and b/sound/machines/defib/defib_SaftyOn.ogg differ
diff --git a/sound/machines/defib/defib_charge.ogg b/sound/machines/defib/defib_charge.ogg
index b94279675dd35..29285225cfc03 100644
Binary files a/sound/machines/defib/defib_charge.ogg and b/sound/machines/defib/defib_charge.ogg differ
diff --git a/sound/machines/defib/defib_failed.ogg b/sound/machines/defib/defib_failed.ogg
index 25e372f5d68d7..81dd04aaad09c 100644
Binary files a/sound/machines/defib/defib_failed.ogg and b/sound/machines/defib/defib_failed.ogg differ
diff --git a/sound/machines/defib/defib_ready.ogg b/sound/machines/defib/defib_ready.ogg
index d014e594c0667..152162efe5309 100644
Binary files a/sound/machines/defib/defib_ready.ogg and b/sound/machines/defib/defib_ready.ogg differ
diff --git a/sound/machines/defib/defib_saftyOff.ogg b/sound/machines/defib/defib_saftyOff.ogg
index 146d56f33fc9a..a3fd223f8ba3c 100644
Binary files a/sound/machines/defib/defib_saftyOff.ogg and b/sound/machines/defib/defib_saftyOff.ogg differ
diff --git a/sound/machines/defib/defib_success.ogg b/sound/machines/defib/defib_success.ogg
index 59b8a699f235b..2a96ffe0e8664 100644
Binary files a/sound/machines/defib/defib_success.ogg and b/sound/machines/defib/defib_success.ogg differ
diff --git a/sound/machines/defib/defib_zap.ogg b/sound/machines/defib/defib_zap.ogg
index 690345b614412..89e1ca91624ae 100644
Binary files a/sound/machines/defib/defib_zap.ogg and b/sound/machines/defib/defib_zap.ogg differ
diff --git a/sound/machines/destructive_scanner/ScanDangerous.ogg b/sound/machines/destructive_scanner/ScanDangerous.ogg
index 8f625a2b0f105..498ba14f869b7 100644
Binary files a/sound/machines/destructive_scanner/ScanDangerous.ogg and b/sound/machines/destructive_scanner/ScanDangerous.ogg differ
diff --git a/sound/machines/destructive_scanner/ScanSafe.ogg b/sound/machines/destructive_scanner/ScanSafe.ogg
index afc7c91f3ac7c..98f55345f803d 100644
Binary files a/sound/machines/destructive_scanner/ScanSafe.ogg and b/sound/machines/destructive_scanner/ScanSafe.ogg differ
diff --git a/sound/machines/destructive_scanner/TubeDown.ogg b/sound/machines/destructive_scanner/TubeDown.ogg
index 18690dd44220a..89aa6fcdbe1ad 100644
Binary files a/sound/machines/destructive_scanner/TubeDown.ogg and b/sound/machines/destructive_scanner/TubeDown.ogg differ
diff --git a/sound/machines/destructive_scanner/TubeUp.ogg b/sound/machines/destructive_scanner/TubeUp.ogg
index 411e2f1d279ff..12ea494e211f7 100644
Binary files a/sound/machines/destructive_scanner/TubeUp.ogg and b/sound/machines/destructive_scanner/TubeUp.ogg differ
diff --git a/sound/machines/ding.ogg b/sound/machines/ding.ogg
index 24bce5d8d71e6..0a580ab1a8f5f 100644
Binary files a/sound/machines/ding.ogg and b/sound/machines/ding.ogg differ
diff --git a/sound/machines/ding_short.ogg b/sound/machines/ding_short.ogg
index 79032ee2a9a7a..50987592b691b 100644
Binary files a/sound/machines/ding_short.ogg and b/sound/machines/ding_short.ogg differ
diff --git a/sound/machines/disposalflush.ogg b/sound/machines/disposalflush.ogg
index 023566b63a3c3..557d5e89dd088 100644
Binary files a/sound/machines/disposalflush.ogg and b/sound/machines/disposalflush.ogg differ
diff --git a/sound/machines/door/door_close.ogg b/sound/machines/door/door_close.ogg
index 31250f532acbc..945f47d3d25be 100644
Binary files a/sound/machines/door/door_close.ogg and b/sound/machines/door/door_close.ogg differ
diff --git a/sound/machines/door/door_locked.ogg b/sound/machines/door/door_locked.ogg
index 19a983e201fe0..81807127b0910 100644
Binary files a/sound/machines/door/door_locked.ogg and b/sound/machines/door/door_locked.ogg differ
diff --git a/sound/machines/door/door_open.ogg b/sound/machines/door/door_open.ogg
index 6f5b6f8eb51cd..13e39018020d2 100644
Binary files a/sound/machines/door/door_open.ogg and b/sound/machines/door/door_open.ogg differ
diff --git a/sound/machines/ectoscope_beep.ogg b/sound/machines/ectoscope_beep.ogg
index c95af9fcaf337..d8dfe6b22bf8a 100644
Binary files a/sound/machines/ectoscope_beep.ogg and b/sound/machines/ectoscope_beep.ogg differ
diff --git a/sound/machines/eject.ogg b/sound/machines/eject.ogg
index 0e20c14ba43bf..8871b734ef0ff 100644
Binary files a/sound/machines/eject.ogg and b/sound/machines/eject.ogg differ
diff --git a/sound/machines/engine_alert/engine_alert1.ogg b/sound/machines/engine_alert/engine_alert1.ogg
index 55a741f4794fe..bb27649beed52 100644
Binary files a/sound/machines/engine_alert/engine_alert1.ogg and b/sound/machines/engine_alert/engine_alert1.ogg differ
diff --git a/sound/machines/engine_alert/engine_alert2.ogg b/sound/machines/engine_alert/engine_alert2.ogg
index e9f2162613241..f5b0c924dc489 100644
Binary files a/sound/machines/engine_alert/engine_alert2.ogg and b/sound/machines/engine_alert/engine_alert2.ogg differ
diff --git a/sound/machines/engine_alert/engine_alert3.ogg b/sound/machines/engine_alert/engine_alert3.ogg
index 394bfed2a138d..7cc95f976d0b6 100644
Binary files a/sound/machines/engine_alert/engine_alert3.ogg and b/sound/machines/engine_alert/engine_alert3.ogg differ
diff --git a/sound/machines/fan/fan_break.ogg b/sound/machines/fan/fan_break.ogg
index ca0549333ad66..a122b3c8ea515 100644
Binary files a/sound/machines/fan/fan_break.ogg and b/sound/machines/fan/fan_break.ogg differ
diff --git a/sound/machines/fan/fan_loop.ogg b/sound/machines/fan/fan_loop.ogg
index 9c7820548f670..8588f1c9ab4ea 100644
Binary files a/sound/machines/fan/fan_loop.ogg and b/sound/machines/fan/fan_loop.ogg differ
diff --git a/sound/machines/fan/fan_start.ogg b/sound/machines/fan/fan_start.ogg
index a0d11c3e969aa..008c249f20b24 100644
Binary files a/sound/machines/fan/fan_start.ogg and b/sound/machines/fan/fan_start.ogg differ
diff --git a/sound/machines/fan/fan_stop.ogg b/sound/machines/fan/fan_stop.ogg
index 84d39c3ee5a85..beebbacb66646 100644
Binary files a/sound/machines/fan/fan_stop.ogg and b/sound/machines/fan/fan_stop.ogg differ
diff --git a/sound/machines/fire_alarm/FireAlarm1.ogg b/sound/machines/fire_alarm/FireAlarm1.ogg
index da7632ce8b6d4..7ffecac8d88c2 100644
Binary files a/sound/machines/fire_alarm/FireAlarm1.ogg and b/sound/machines/fire_alarm/FireAlarm1.ogg differ
diff --git a/sound/machines/fire_alarm/FireAlarm2.ogg b/sound/machines/fire_alarm/FireAlarm2.ogg
index e5b7f4b1e7385..387bc64996cee 100644
Binary files a/sound/machines/fire_alarm/FireAlarm2.ogg and b/sound/machines/fire_alarm/FireAlarm2.ogg differ
diff --git a/sound/machines/fire_alarm/FireAlarm3.ogg b/sound/machines/fire_alarm/FireAlarm3.ogg
index 8f1fd525949ed..caefb92a9c556 100644
Binary files a/sound/machines/fire_alarm/FireAlarm3.ogg and b/sound/machines/fire_alarm/FireAlarm3.ogg differ
diff --git a/sound/machines/fire_alarm/FireAlarm4.ogg b/sound/machines/fire_alarm/FireAlarm4.ogg
index ee5a6e6a59b9a..3ee3692800225 100644
Binary files a/sound/machines/fire_alarm/FireAlarm4.ogg and b/sound/machines/fire_alarm/FireAlarm4.ogg differ
diff --git a/sound/machines/fryer/deep_fryer_1.ogg b/sound/machines/fryer/deep_fryer_1.ogg
index 2c3dd719d92e9..24da719e6f9a8 100644
Binary files a/sound/machines/fryer/deep_fryer_1.ogg and b/sound/machines/fryer/deep_fryer_1.ogg differ
diff --git a/sound/machines/fryer/deep_fryer_2.ogg b/sound/machines/fryer/deep_fryer_2.ogg
index ced31e7e4be0d..6fa3a85eade22 100644
Binary files a/sound/machines/fryer/deep_fryer_2.ogg and b/sound/machines/fryer/deep_fryer_2.ogg differ
diff --git a/sound/machines/fryer/deep_fryer_emerge.ogg b/sound/machines/fryer/deep_fryer_emerge.ogg
index 5572802b36fb8..2a47c16d1e352 100644
Binary files a/sound/machines/fryer/deep_fryer_emerge.ogg and b/sound/machines/fryer/deep_fryer_emerge.ogg differ
diff --git a/sound/machines/fryer/deep_fryer_immerse.ogg b/sound/machines/fryer/deep_fryer_immerse.ogg
index 0acbb46788efd..a75f30e775053 100644
Binary files a/sound/machines/fryer/deep_fryer_immerse.ogg and b/sound/machines/fryer/deep_fryer_immerse.ogg differ
diff --git a/sound/machines/gateway/gateway_calibrated.ogg b/sound/machines/gateway/gateway_calibrated.ogg
index c88d0862c988d..0b949d294e6da 100644
Binary files a/sound/machines/gateway/gateway_calibrated.ogg and b/sound/machines/gateway/gateway_calibrated.ogg differ
diff --git a/sound/machines/gateway/gateway_calibrating.ogg b/sound/machines/gateway/gateway_calibrating.ogg
index 09ca63fbc10ff..7440912490be3 100644
Binary files a/sound/machines/gateway/gateway_calibrating.ogg and b/sound/machines/gateway/gateway_calibrating.ogg differ
diff --git a/sound/machines/gateway/gateway_close.ogg b/sound/machines/gateway/gateway_close.ogg
index 98e964aca130b..d6e4a45dc0502 100644
Binary files a/sound/machines/gateway/gateway_close.ogg and b/sound/machines/gateway/gateway_close.ogg differ
diff --git a/sound/machines/gateway/gateway_open.ogg b/sound/machines/gateway/gateway_open.ogg
index f6d11f7eedee2..80e073bfac02b 100644
Binary files a/sound/machines/gateway/gateway_open.ogg and b/sound/machines/gateway/gateway_open.ogg differ
diff --git a/sound/machines/gateway/gateway_travel.ogg b/sound/machines/gateway/gateway_travel.ogg
index bbaed502790f0..1b889b433e6a3 100644
Binary files a/sound/machines/gateway/gateway_travel.ogg and b/sound/machines/gateway/gateway_travel.ogg differ
diff --git a/sound/machines/generator/generator_end.ogg b/sound/machines/generator/generator_end.ogg
index c3a5f2e27f5c9..2b2c97ee744af 100644
Binary files a/sound/machines/generator/generator_end.ogg and b/sound/machines/generator/generator_end.ogg differ
diff --git a/sound/machines/generator/generator_mid1.ogg b/sound/machines/generator/generator_mid1.ogg
index 61be7098e02d4..332b5af9a0efa 100644
Binary files a/sound/machines/generator/generator_mid1.ogg and b/sound/machines/generator/generator_mid1.ogg differ
diff --git a/sound/machines/generator/generator_mid2.ogg b/sound/machines/generator/generator_mid2.ogg
index c2d801badc7eb..d71c7b2ae0afd 100644
Binary files a/sound/machines/generator/generator_mid2.ogg and b/sound/machines/generator/generator_mid2.ogg differ
diff --git a/sound/machines/generator/generator_mid3.ogg b/sound/machines/generator/generator_mid3.ogg
index 47f4aa66a1e95..7ee161824d024 100644
Binary files a/sound/machines/generator/generator_mid3.ogg and b/sound/machines/generator/generator_mid3.ogg differ
diff --git a/sound/machines/generator/generator_start.ogg b/sound/machines/generator/generator_start.ogg
index 384dd18aa1e78..a9087bd3a7a86 100644
Binary files a/sound/machines/generator/generator_start.ogg and b/sound/machines/generator/generator_start.ogg differ
diff --git a/sound/machines/gravgen/grav_gen_end.ogg b/sound/machines/gravgen/grav_gen_end.ogg
index a63305708d030..93ad284c6c01e 100644
Binary files a/sound/machines/gravgen/grav_gen_end.ogg and b/sound/machines/gravgen/grav_gen_end.ogg differ
diff --git a/sound/machines/gravgen/grav_gen_mid1.ogg b/sound/machines/gravgen/grav_gen_mid1.ogg
index e6e38c11d467b..b59e11db524a8 100644
Binary files a/sound/machines/gravgen/grav_gen_mid1.ogg and b/sound/machines/gravgen/grav_gen_mid1.ogg differ
diff --git a/sound/machines/gravgen/grav_gen_mid2.ogg b/sound/machines/gravgen/grav_gen_mid2.ogg
index cf112de1885b4..92d026f74af73 100644
Binary files a/sound/machines/gravgen/grav_gen_mid2.ogg and b/sound/machines/gravgen/grav_gen_mid2.ogg differ
diff --git a/sound/machines/gravgen/grav_gen_start.ogg b/sound/machines/gravgen/grav_gen_start.ogg
index 4a734e5517020..0ee8a6017d2f9 100644
Binary files a/sound/machines/gravgen/grav_gen_start.ogg and b/sound/machines/gravgen/grav_gen_start.ogg differ
diff --git a/sound/machines/grill/grillsizzle.ogg b/sound/machines/grill/grillsizzle.ogg
index 056ce45941c41..26e35e6146cf6 100644
Binary files a/sound/machines/grill/grillsizzle.ogg and b/sound/machines/grill/grillsizzle.ogg differ
diff --git a/sound/machines/high_tech_confirm.ogg b/sound/machines/high_tech_confirm.ogg
index 5ece09a4fe048..28948b5dda019 100644
Binary files a/sound/machines/high_tech_confirm.ogg and b/sound/machines/high_tech_confirm.ogg differ
diff --git a/sound/machines/hiss.ogg b/sound/machines/hiss.ogg
index 73ace2de31fcf..4ef344ffb3f53 100644
Binary files a/sound/machines/hiss.ogg and b/sound/machines/hiss.ogg differ
diff --git a/sound/machines/hypertorus/HFR_critical_explosion.ogg b/sound/machines/hypertorus/HFR_critical_explosion.ogg
index 5db3cd611f002..6e48e88c139d9 100644
Binary files a/sound/machines/hypertorus/HFR_critical_explosion.ogg and b/sound/machines/hypertorus/HFR_critical_explosion.ogg differ
diff --git a/sound/machines/hypertorus/loops/hypertorus_nominal.ogg b/sound/machines/hypertorus/loops/hypertorus_nominal.ogg
index ad18c2be91bb3..5fbee976915e8 100644
Binary files a/sound/machines/hypertorus/loops/hypertorus_nominal.ogg and b/sound/machines/hypertorus/loops/hypertorus_nominal.ogg differ
diff --git a/sound/machines/juicer.ogg b/sound/machines/juicer.ogg
index affd524b84a43..6f95198d3e6b0 100644
Binary files a/sound/machines/juicer.ogg and b/sound/machines/juicer.ogg differ
diff --git a/sound/machines/lathe/lathe_print.ogg b/sound/machines/lathe/lathe_print.ogg
index eace2da907558..83f286924b378 100644
Binary files a/sound/machines/lathe/lathe_print.ogg and b/sound/machines/lathe/lathe_print.ogg differ
diff --git a/sound/machines/lavaland/cursed_slot_machine.ogg b/sound/machines/lavaland/cursed_slot_machine.ogg
index 80911861bab34..a54666d338734 100644
Binary files a/sound/machines/lavaland/cursed_slot_machine.ogg and b/sound/machines/lavaland/cursed_slot_machine.ogg differ
diff --git a/sound/machines/lavaland/cursed_slot_machine_jackpot.ogg b/sound/machines/lavaland/cursed_slot_machine_jackpot.ogg
index 19a4c417a9697..ba4eb98455a67 100644
Binary files a/sound/machines/lavaland/cursed_slot_machine_jackpot.ogg and b/sound/machines/lavaland/cursed_slot_machine_jackpot.ogg differ
diff --git a/sound/machines/lever/lever_start.ogg b/sound/machines/lever/lever_start.ogg
index 4160f39026ac0..347562d438d52 100644
Binary files a/sound/machines/lever/lever_start.ogg and b/sound/machines/lever/lever_start.ogg differ
diff --git a/sound/machines/lever/lever_stop.ogg b/sound/machines/lever/lever_stop.ogg
index 22f8875019dd4..9f50ca2a6fd06 100644
Binary files a/sound/machines/lever/lever_stop.ogg and b/sound/machines/lever/lever_stop.ogg differ
diff --git a/sound/machines/locktoggle.ogg b/sound/machines/locktoggle.ogg
index 85e9eb4ffa88e..b6e0a42e81579 100644
Binary files a/sound/machines/locktoggle.ogg and b/sound/machines/locktoggle.ogg differ
diff --git a/sound/machines/machine_vend.ogg b/sound/machines/machine_vend.ogg
index 92867a1f3d3bd..b9504ac454fa7 100644
Binary files a/sound/machines/machine_vend.ogg and b/sound/machines/machine_vend.ogg differ
diff --git a/sound/machines/microwave/microwave-end.ogg b/sound/machines/microwave/microwave-end.ogg
index c3b143c1a11fc..87a617dfcad08 100644
Binary files a/sound/machines/microwave/microwave-end.ogg and b/sound/machines/microwave/microwave-end.ogg differ
diff --git a/sound/machines/microwave/microwave-mid1.ogg b/sound/machines/microwave/microwave-mid1.ogg
index db62e01d38024..64bea50d0cf73 100644
Binary files a/sound/machines/microwave/microwave-mid1.ogg and b/sound/machines/microwave/microwave-mid1.ogg differ
diff --git a/sound/machines/microwave/microwave-mid2.ogg b/sound/machines/microwave/microwave-mid2.ogg
index 666ae8f71d7d6..5c5b49d01099b 100644
Binary files a/sound/machines/microwave/microwave-mid2.ogg and b/sound/machines/microwave/microwave-mid2.ogg differ
diff --git a/sound/machines/microwave/microwave-start.ogg b/sound/machines/microwave/microwave-start.ogg
index 22ad7abbfea77..7e492ed9991b5 100644
Binary files a/sound/machines/microwave/microwave-start.ogg and b/sound/machines/microwave/microwave-start.ogg differ
diff --git a/sound/machines/mining/auto_teleport.ogg b/sound/machines/mining/auto_teleport.ogg
index a8fe669e8657c..e9a6be29dcb46 100644
Binary files a/sound/machines/mining/auto_teleport.ogg and b/sound/machines/mining/auto_teleport.ogg differ
diff --git a/sound/machines/mining/manual_teleport.ogg b/sound/machines/mining/manual_teleport.ogg
index b011ef91e65af..69a79291c5490 100644
Binary files a/sound/machines/mining/manual_teleport.ogg and b/sound/machines/mining/manual_teleport.ogg differ
diff --git a/sound/machines/mining/refinery.ogg b/sound/machines/mining/refinery.ogg
index fdae21f9a3010..d192891ef0e49 100644
Binary files a/sound/machines/mining/refinery.ogg and b/sound/machines/mining/refinery.ogg differ
diff --git a/sound/machines/mining/smelter.ogg b/sound/machines/mining/smelter.ogg
index b1d65f3bd2034..82a9dffea12fd 100644
Binary files a/sound/machines/mining/smelter.ogg and b/sound/machines/mining/smelter.ogg differ
diff --git a/sound/machines/mining/wooping_teleport.ogg b/sound/machines/mining/wooping_teleport.ogg
index edf5eb57b432e..acce95f81dbd8 100644
Binary files a/sound/machines/mining/wooping_teleport.ogg and b/sound/machines/mining/wooping_teleport.ogg differ
diff --git a/sound/machines/nuke/angry_beep.ogg b/sound/machines/nuke/angry_beep.ogg
index 547779de1beba..92a03692b3049 100644
Binary files a/sound/machines/nuke/angry_beep.ogg and b/sound/machines/nuke/angry_beep.ogg differ
diff --git a/sound/machines/nuke/confirm_beep.ogg b/sound/machines/nuke/confirm_beep.ogg
index 6b98ba8bd668e..0af0a57146bee 100644
Binary files a/sound/machines/nuke/confirm_beep.ogg and b/sound/machines/nuke/confirm_beep.ogg differ
diff --git a/sound/machines/nuke/general_beep.ogg b/sound/machines/nuke/general_beep.ogg
index c149eb300a0c1..d56b454ada308 100644
Binary files a/sound/machines/nuke/general_beep.ogg and b/sound/machines/nuke/general_beep.ogg differ
diff --git a/sound/machines/oven/oven_close.ogg b/sound/machines/oven/oven_close.ogg
index dfbbb30bcfa79..3788688fc9c4a 100644
Binary files a/sound/machines/oven/oven_close.ogg and b/sound/machines/oven/oven_close.ogg differ
diff --git a/sound/machines/oven/oven_loop_end.ogg b/sound/machines/oven/oven_loop_end.ogg
index d06c24776c2a4..8b2151954e747 100644
Binary files a/sound/machines/oven/oven_loop_end.ogg and b/sound/machines/oven/oven_loop_end.ogg differ
diff --git a/sound/machines/oven/oven_loop_mid.ogg b/sound/machines/oven/oven_loop_mid.ogg
index a85116fb33b74..9354476ce3e07 100644
Binary files a/sound/machines/oven/oven_loop_mid.ogg and b/sound/machines/oven/oven_loop_mid.ogg differ
diff --git a/sound/machines/oven/oven_loop_start.ogg b/sound/machines/oven/oven_loop_start.ogg
index db729b48b99a9..504bc557f19f2 100644
Binary files a/sound/machines/oven/oven_loop_start.ogg and b/sound/machines/oven/oven_loop_start.ogg differ
diff --git a/sound/machines/oven/oven_open.ogg b/sound/machines/oven/oven_open.ogg
index 97dd8f6235d55..1576afab94c48 100644
Binary files a/sound/machines/oven/oven_open.ogg and b/sound/machines/oven/oven_open.ogg differ
diff --git a/sound/machines/pda_button/pda_button1.ogg b/sound/machines/pda_button/pda_button1.ogg
index 79b458317acff..6f3816d3edfa5 100644
Binary files a/sound/machines/pda_button/pda_button1.ogg and b/sound/machines/pda_button/pda_button1.ogg differ
diff --git a/sound/machines/pda_button/pda_button2.ogg b/sound/machines/pda_button/pda_button2.ogg
index 9fceed1611fa0..4455de36bb452 100644
Binary files a/sound/machines/pda_button/pda_button2.ogg and b/sound/machines/pda_button/pda_button2.ogg differ
diff --git a/sound/machines/ping.ogg b/sound/machines/ping.ogg
index 3f8a27cfcd433..2684c1ae85a2d 100644
Binary files a/sound/machines/ping.ogg and b/sound/machines/ping.ogg differ
diff --git a/sound/machines/piston/piston_lower.ogg b/sound/machines/piston/piston_lower.ogg
index 38476b6ed8eed..da545b655243d 100644
Binary files a/sound/machines/piston/piston_lower.ogg and b/sound/machines/piston/piston_lower.ogg differ
diff --git a/sound/machines/piston/piston_raise.ogg b/sound/machines/piston/piston_raise.ogg
index 6e1a3df7c666f..b43df670d1728 100644
Binary files a/sound/machines/piston/piston_raise.ogg and b/sound/machines/piston/piston_raise.ogg differ
diff --git a/sound/machines/printer.ogg b/sound/machines/printer.ogg
index 6916a695bf573..007330fd9e900 100644
Binary files a/sound/machines/printer.ogg and b/sound/machines/printer.ogg differ
diff --git a/sound/machines/radar-ping.ogg b/sound/machines/radar-ping.ogg
index d6fd0000d1a5e..910df6ad4306c 100644
Binary files a/sound/machines/radar-ping.ogg and b/sound/machines/radar-ping.ogg differ
diff --git a/sound/machines/roulette/roulettejackpot.ogg b/sound/machines/roulette/roulettejackpot.ogg
index c9628504f997f..5d7caab30d2f5 100644
Binary files a/sound/machines/roulette/roulettejackpot.ogg and b/sound/machines/roulette/roulettejackpot.ogg differ
diff --git a/sound/machines/roulette/roulettewheel.ogg b/sound/machines/roulette/roulettewheel.ogg
index 58686d6b9452f..f0fe0053ac48e 100644
Binary files a/sound/machines/roulette/roulettewheel.ogg and b/sound/machines/roulette/roulettewheel.ogg differ
diff --git a/sound/machines/scanner/scanbuzz.ogg b/sound/machines/scanner/scanbuzz.ogg
index d3422bc8f4d76..83ac9222d27ca 100644
Binary files a/sound/machines/scanner/scanbuzz.ogg and b/sound/machines/scanner/scanbuzz.ogg differ
diff --git a/sound/machines/scanner/scanner.ogg b/sound/machines/scanner/scanner.ogg
index 9064e8ab4c331..9f2f806ba237e 100644
Binary files a/sound/machines/scanner/scanner.ogg and b/sound/machines/scanner/scanner.ogg differ
diff --git a/sound/machines/shower/shower_end.ogg b/sound/machines/shower/shower_end.ogg
index 666a00af9397c..d2b62096a87d5 100644
Binary files a/sound/machines/shower/shower_end.ogg and b/sound/machines/shower/shower_end.ogg differ
diff --git a/sound/machines/shower/shower_mid1.ogg b/sound/machines/shower/shower_mid1.ogg
index f69de07e6c44e..b1c48c6fbf56d 100644
Binary files a/sound/machines/shower/shower_mid1.ogg and b/sound/machines/shower/shower_mid1.ogg differ
diff --git a/sound/machines/shower/shower_mid2.ogg b/sound/machines/shower/shower_mid2.ogg
index e3d6112d0a358..b4942930c587c 100644
Binary files a/sound/machines/shower/shower_mid2.ogg and b/sound/machines/shower/shower_mid2.ogg differ
diff --git a/sound/machines/shower/shower_mid3.ogg b/sound/machines/shower/shower_mid3.ogg
index 2c3a286bd73eb..b6034d7e6a181 100644
Binary files a/sound/machines/shower/shower_mid3.ogg and b/sound/machines/shower/shower_mid3.ogg differ
diff --git a/sound/machines/shower/shower_start.ogg b/sound/machines/shower/shower_start.ogg
index a59559c567995..a576da81acafb 100644
Binary files a/sound/machines/shower/shower_start.ogg and b/sound/machines/shower/shower_start.ogg differ
diff --git a/sound/machines/shutter.ogg b/sound/machines/shutter.ogg
index 244a33c73b963..c53033ca19e7a 100644
Binary files a/sound/machines/shutter.ogg and b/sound/machines/shutter.ogg differ
diff --git a/sound/machines/slowclap.ogg b/sound/machines/slowclap.ogg
index 810bd2cd58517..a226492acd56d 100644
Binary files a/sound/machines/slowclap.ogg and b/sound/machines/slowclap.ogg differ
diff --git a/sound/machines/sm/accent/delam/1.ogg b/sound/machines/sm/accent/delam/1.ogg
index 75c79f89ab2af..78bbddad7196a 100644
Binary files a/sound/machines/sm/accent/delam/1.ogg and b/sound/machines/sm/accent/delam/1.ogg differ
diff --git a/sound/machines/sm/accent/delam/10.ogg b/sound/machines/sm/accent/delam/10.ogg
index c87b63b526b49..754694f4e6914 100644
Binary files a/sound/machines/sm/accent/delam/10.ogg and b/sound/machines/sm/accent/delam/10.ogg differ
diff --git a/sound/machines/sm/accent/delam/11.ogg b/sound/machines/sm/accent/delam/11.ogg
index c7f678245b1a2..f023e527b76c5 100644
Binary files a/sound/machines/sm/accent/delam/11.ogg and b/sound/machines/sm/accent/delam/11.ogg differ
diff --git a/sound/machines/sm/accent/delam/12.ogg b/sound/machines/sm/accent/delam/12.ogg
index a395942183088..f04493bb57b2f 100644
Binary files a/sound/machines/sm/accent/delam/12.ogg and b/sound/machines/sm/accent/delam/12.ogg differ
diff --git a/sound/machines/sm/accent/delam/13.ogg b/sound/machines/sm/accent/delam/13.ogg
index 934f17947de5d..dadbb8cc0d741 100644
Binary files a/sound/machines/sm/accent/delam/13.ogg and b/sound/machines/sm/accent/delam/13.ogg differ
diff --git a/sound/machines/sm/accent/delam/14.ogg b/sound/machines/sm/accent/delam/14.ogg
index 4175e5b94744f..27c0f71f94b65 100644
Binary files a/sound/machines/sm/accent/delam/14.ogg and b/sound/machines/sm/accent/delam/14.ogg differ
diff --git a/sound/machines/sm/accent/delam/15.ogg b/sound/machines/sm/accent/delam/15.ogg
index dcf73deb84c84..e615f22a4aed8 100644
Binary files a/sound/machines/sm/accent/delam/15.ogg and b/sound/machines/sm/accent/delam/15.ogg differ
diff --git a/sound/machines/sm/accent/delam/16.ogg b/sound/machines/sm/accent/delam/16.ogg
index 20bc19399be34..17923058688f1 100644
Binary files a/sound/machines/sm/accent/delam/16.ogg and b/sound/machines/sm/accent/delam/16.ogg differ
diff --git a/sound/machines/sm/accent/delam/17.ogg b/sound/machines/sm/accent/delam/17.ogg
index b517fb3d3db06..f414715b31874 100644
Binary files a/sound/machines/sm/accent/delam/17.ogg and b/sound/machines/sm/accent/delam/17.ogg differ
diff --git a/sound/machines/sm/accent/delam/18.ogg b/sound/machines/sm/accent/delam/18.ogg
index 4ef138d27a532..7a5581a2d2227 100644
Binary files a/sound/machines/sm/accent/delam/18.ogg and b/sound/machines/sm/accent/delam/18.ogg differ
diff --git a/sound/machines/sm/accent/delam/19.ogg b/sound/machines/sm/accent/delam/19.ogg
index f638a6971bb93..7b75a2bfea61d 100644
Binary files a/sound/machines/sm/accent/delam/19.ogg and b/sound/machines/sm/accent/delam/19.ogg differ
diff --git a/sound/machines/sm/accent/delam/2.ogg b/sound/machines/sm/accent/delam/2.ogg
index 5b480daa2e1ca..9eb136553623f 100644
Binary files a/sound/machines/sm/accent/delam/2.ogg and b/sound/machines/sm/accent/delam/2.ogg differ
diff --git a/sound/machines/sm/accent/delam/20.ogg b/sound/machines/sm/accent/delam/20.ogg
index 6072bc62276b7..47875c953e076 100644
Binary files a/sound/machines/sm/accent/delam/20.ogg and b/sound/machines/sm/accent/delam/20.ogg differ
diff --git a/sound/machines/sm/accent/delam/21.ogg b/sound/machines/sm/accent/delam/21.ogg
index 1223dd946de59..a1a22c00a810d 100644
Binary files a/sound/machines/sm/accent/delam/21.ogg and b/sound/machines/sm/accent/delam/21.ogg differ
diff --git a/sound/machines/sm/accent/delam/22.ogg b/sound/machines/sm/accent/delam/22.ogg
index 9ccfb9b55af7d..37c155b81d0e1 100644
Binary files a/sound/machines/sm/accent/delam/22.ogg and b/sound/machines/sm/accent/delam/22.ogg differ
diff --git a/sound/machines/sm/accent/delam/23.ogg b/sound/machines/sm/accent/delam/23.ogg
index 6399a8376ae4d..bfd667b5ef00e 100644
Binary files a/sound/machines/sm/accent/delam/23.ogg and b/sound/machines/sm/accent/delam/23.ogg differ
diff --git a/sound/machines/sm/accent/delam/24.ogg b/sound/machines/sm/accent/delam/24.ogg
index b51d359807131..fc11c0bbbed5d 100644
Binary files a/sound/machines/sm/accent/delam/24.ogg and b/sound/machines/sm/accent/delam/24.ogg differ
diff --git a/sound/machines/sm/accent/delam/25.ogg b/sound/machines/sm/accent/delam/25.ogg
index 823f22f1363e9..f10f38cec2e08 100644
Binary files a/sound/machines/sm/accent/delam/25.ogg and b/sound/machines/sm/accent/delam/25.ogg differ
diff --git a/sound/machines/sm/accent/delam/26.ogg b/sound/machines/sm/accent/delam/26.ogg
index 24b2a2f040c53..6df5c1858fd55 100644
Binary files a/sound/machines/sm/accent/delam/26.ogg and b/sound/machines/sm/accent/delam/26.ogg differ
diff --git a/sound/machines/sm/accent/delam/27.ogg b/sound/machines/sm/accent/delam/27.ogg
index 4b4b145b7bfc8..3081d86c23f9c 100644
Binary files a/sound/machines/sm/accent/delam/27.ogg and b/sound/machines/sm/accent/delam/27.ogg differ
diff --git a/sound/machines/sm/accent/delam/28.ogg b/sound/machines/sm/accent/delam/28.ogg
index 7bc71bf0e639f..c3a972460f616 100644
Binary files a/sound/machines/sm/accent/delam/28.ogg and b/sound/machines/sm/accent/delam/28.ogg differ
diff --git a/sound/machines/sm/accent/delam/29.ogg b/sound/machines/sm/accent/delam/29.ogg
index 7fec2f271c6fe..a9ed3f23f7b6f 100644
Binary files a/sound/machines/sm/accent/delam/29.ogg and b/sound/machines/sm/accent/delam/29.ogg differ
diff --git a/sound/machines/sm/accent/delam/3.ogg b/sound/machines/sm/accent/delam/3.ogg
index 5b57cc270700b..8f3339565684b 100644
Binary files a/sound/machines/sm/accent/delam/3.ogg and b/sound/machines/sm/accent/delam/3.ogg differ
diff --git a/sound/machines/sm/accent/delam/30.ogg b/sound/machines/sm/accent/delam/30.ogg
index ed1ec7d89fca1..ee8b23adfa11d 100644
Binary files a/sound/machines/sm/accent/delam/30.ogg and b/sound/machines/sm/accent/delam/30.ogg differ
diff --git a/sound/machines/sm/accent/delam/31.ogg b/sound/machines/sm/accent/delam/31.ogg
index 0baa82e246e4d..21839f4c04330 100644
Binary files a/sound/machines/sm/accent/delam/31.ogg and b/sound/machines/sm/accent/delam/31.ogg differ
diff --git a/sound/machines/sm/accent/delam/32.ogg b/sound/machines/sm/accent/delam/32.ogg
index e925b32d677d5..204e2477ca84e 100644
Binary files a/sound/machines/sm/accent/delam/32.ogg and b/sound/machines/sm/accent/delam/32.ogg differ
diff --git a/sound/machines/sm/accent/delam/33.ogg b/sound/machines/sm/accent/delam/33.ogg
index 9ddec0e84a4c9..2016586382129 100644
Binary files a/sound/machines/sm/accent/delam/33.ogg and b/sound/machines/sm/accent/delam/33.ogg differ
diff --git a/sound/machines/sm/accent/delam/4.ogg b/sound/machines/sm/accent/delam/4.ogg
index aa4f4da07142c..ad4faa058b16e 100644
Binary files a/sound/machines/sm/accent/delam/4.ogg and b/sound/machines/sm/accent/delam/4.ogg differ
diff --git a/sound/machines/sm/accent/delam/5.ogg b/sound/machines/sm/accent/delam/5.ogg
index be438f6f151ed..29ded5af22736 100644
Binary files a/sound/machines/sm/accent/delam/5.ogg and b/sound/machines/sm/accent/delam/5.ogg differ
diff --git a/sound/machines/sm/accent/delam/6.ogg b/sound/machines/sm/accent/delam/6.ogg
index b89d52a564a6f..73ecf956e7448 100644
Binary files a/sound/machines/sm/accent/delam/6.ogg and b/sound/machines/sm/accent/delam/6.ogg differ
diff --git a/sound/machines/sm/accent/delam/7.ogg b/sound/machines/sm/accent/delam/7.ogg
index 3a9cfc62cae0f..4aa20b9b7a930 100644
Binary files a/sound/machines/sm/accent/delam/7.ogg and b/sound/machines/sm/accent/delam/7.ogg differ
diff --git a/sound/machines/sm/accent/delam/8.ogg b/sound/machines/sm/accent/delam/8.ogg
index 7bc0a727faebd..f779bcaca2a52 100644
Binary files a/sound/machines/sm/accent/delam/8.ogg and b/sound/machines/sm/accent/delam/8.ogg differ
diff --git a/sound/machines/sm/accent/delam/9.ogg b/sound/machines/sm/accent/delam/9.ogg
index 5c1bd37405501..0946bb646d7c7 100644
Binary files a/sound/machines/sm/accent/delam/9.ogg and b/sound/machines/sm/accent/delam/9.ogg differ
diff --git a/sound/machines/sm/accent/normal/1.ogg b/sound/machines/sm/accent/normal/1.ogg
index e92beed7fe69c..9c43ffc0a0eca 100644
Binary files a/sound/machines/sm/accent/normal/1.ogg and b/sound/machines/sm/accent/normal/1.ogg differ
diff --git a/sound/machines/sm/accent/normal/10.ogg b/sound/machines/sm/accent/normal/10.ogg
index 9efb616f0b362..16b46c1f8afe9 100644
Binary files a/sound/machines/sm/accent/normal/10.ogg and b/sound/machines/sm/accent/normal/10.ogg differ
diff --git a/sound/machines/sm/accent/normal/11.ogg b/sound/machines/sm/accent/normal/11.ogg
index 2af0981ef1615..8a0ae2047f114 100644
Binary files a/sound/machines/sm/accent/normal/11.ogg and b/sound/machines/sm/accent/normal/11.ogg differ
diff --git a/sound/machines/sm/accent/normal/12.ogg b/sound/machines/sm/accent/normal/12.ogg
index 2fab78b02da61..eaf34be0a7666 100644
Binary files a/sound/machines/sm/accent/normal/12.ogg and b/sound/machines/sm/accent/normal/12.ogg differ
diff --git a/sound/machines/sm/accent/normal/13.ogg b/sound/machines/sm/accent/normal/13.ogg
index 784e84e4a8231..aeb8331a8305b 100644
Binary files a/sound/machines/sm/accent/normal/13.ogg and b/sound/machines/sm/accent/normal/13.ogg differ
diff --git a/sound/machines/sm/accent/normal/14.ogg b/sound/machines/sm/accent/normal/14.ogg
index af170394ddd88..ff4e89f38904c 100644
Binary files a/sound/machines/sm/accent/normal/14.ogg and b/sound/machines/sm/accent/normal/14.ogg differ
diff --git a/sound/machines/sm/accent/normal/15.ogg b/sound/machines/sm/accent/normal/15.ogg
index 05c88c6b291f3..0223a370b7521 100644
Binary files a/sound/machines/sm/accent/normal/15.ogg and b/sound/machines/sm/accent/normal/15.ogg differ
diff --git a/sound/machines/sm/accent/normal/16.ogg b/sound/machines/sm/accent/normal/16.ogg
index 46b0e33980256..1d63c92f4ace3 100644
Binary files a/sound/machines/sm/accent/normal/16.ogg and b/sound/machines/sm/accent/normal/16.ogg differ
diff --git a/sound/machines/sm/accent/normal/17.ogg b/sound/machines/sm/accent/normal/17.ogg
index e432b2ee02572..18005458d64f8 100644
Binary files a/sound/machines/sm/accent/normal/17.ogg and b/sound/machines/sm/accent/normal/17.ogg differ
diff --git a/sound/machines/sm/accent/normal/18.ogg b/sound/machines/sm/accent/normal/18.ogg
index 1e0e91abc8516..16a67cea8cd5b 100644
Binary files a/sound/machines/sm/accent/normal/18.ogg and b/sound/machines/sm/accent/normal/18.ogg differ
diff --git a/sound/machines/sm/accent/normal/19.ogg b/sound/machines/sm/accent/normal/19.ogg
index 31de063e022d2..c1aa8f9298a84 100644
Binary files a/sound/machines/sm/accent/normal/19.ogg and b/sound/machines/sm/accent/normal/19.ogg differ
diff --git a/sound/machines/sm/accent/normal/2.ogg b/sound/machines/sm/accent/normal/2.ogg
index 05e3c9ff17fc0..f12185c556c98 100644
Binary files a/sound/machines/sm/accent/normal/2.ogg and b/sound/machines/sm/accent/normal/2.ogg differ
diff --git a/sound/machines/sm/accent/normal/20.ogg b/sound/machines/sm/accent/normal/20.ogg
index 36810bd8f10ff..82ea3011b61be 100644
Binary files a/sound/machines/sm/accent/normal/20.ogg and b/sound/machines/sm/accent/normal/20.ogg differ
diff --git a/sound/machines/sm/accent/normal/21.ogg b/sound/machines/sm/accent/normal/21.ogg
index 306e8856e5093..1f2bd4ff928c0 100644
Binary files a/sound/machines/sm/accent/normal/21.ogg and b/sound/machines/sm/accent/normal/21.ogg differ
diff --git a/sound/machines/sm/accent/normal/22.ogg b/sound/machines/sm/accent/normal/22.ogg
index 38286aa98b2c9..2322de2669884 100644
Binary files a/sound/machines/sm/accent/normal/22.ogg and b/sound/machines/sm/accent/normal/22.ogg differ
diff --git a/sound/machines/sm/accent/normal/23.ogg b/sound/machines/sm/accent/normal/23.ogg
index 89f85fed91178..c88747f39a3fe 100644
Binary files a/sound/machines/sm/accent/normal/23.ogg and b/sound/machines/sm/accent/normal/23.ogg differ
diff --git a/sound/machines/sm/accent/normal/24.ogg b/sound/machines/sm/accent/normal/24.ogg
index 7c12a3e768e63..98717fc488a6d 100644
Binary files a/sound/machines/sm/accent/normal/24.ogg and b/sound/machines/sm/accent/normal/24.ogg differ
diff --git a/sound/machines/sm/accent/normal/25.ogg b/sound/machines/sm/accent/normal/25.ogg
index f89175ceb19ad..d40654fc33d99 100644
Binary files a/sound/machines/sm/accent/normal/25.ogg and b/sound/machines/sm/accent/normal/25.ogg differ
diff --git a/sound/machines/sm/accent/normal/26.ogg b/sound/machines/sm/accent/normal/26.ogg
index 9efd1d8ef39eb..d3fffcb79e264 100644
Binary files a/sound/machines/sm/accent/normal/26.ogg and b/sound/machines/sm/accent/normal/26.ogg differ
diff --git a/sound/machines/sm/accent/normal/27.ogg b/sound/machines/sm/accent/normal/27.ogg
index 1fb1edbb5a82e..5dd6e174dea75 100644
Binary files a/sound/machines/sm/accent/normal/27.ogg and b/sound/machines/sm/accent/normal/27.ogg differ
diff --git a/sound/machines/sm/accent/normal/28.ogg b/sound/machines/sm/accent/normal/28.ogg
index 890c5ea4294d6..0daa79e059cb2 100644
Binary files a/sound/machines/sm/accent/normal/28.ogg and b/sound/machines/sm/accent/normal/28.ogg differ
diff --git a/sound/machines/sm/accent/normal/29.ogg b/sound/machines/sm/accent/normal/29.ogg
index cd2aa40714c5b..b80c4984be1fd 100644
Binary files a/sound/machines/sm/accent/normal/29.ogg and b/sound/machines/sm/accent/normal/29.ogg differ
diff --git a/sound/machines/sm/accent/normal/3.ogg b/sound/machines/sm/accent/normal/3.ogg
index 38de5571a4aa2..ca0acb41cd7c2 100644
Binary files a/sound/machines/sm/accent/normal/3.ogg and b/sound/machines/sm/accent/normal/3.ogg differ
diff --git a/sound/machines/sm/accent/normal/30.ogg b/sound/machines/sm/accent/normal/30.ogg
index 87d1782768a52..9251c034dabc7 100644
Binary files a/sound/machines/sm/accent/normal/30.ogg and b/sound/machines/sm/accent/normal/30.ogg differ
diff --git a/sound/machines/sm/accent/normal/31.ogg b/sound/machines/sm/accent/normal/31.ogg
index 9ce3eeb72ee8e..6dfa40b851cc1 100644
Binary files a/sound/machines/sm/accent/normal/31.ogg and b/sound/machines/sm/accent/normal/31.ogg differ
diff --git a/sound/machines/sm/accent/normal/32.ogg b/sound/machines/sm/accent/normal/32.ogg
index 26ca056142803..79fb549697604 100644
Binary files a/sound/machines/sm/accent/normal/32.ogg and b/sound/machines/sm/accent/normal/32.ogg differ
diff --git a/sound/machines/sm/accent/normal/33.ogg b/sound/machines/sm/accent/normal/33.ogg
index 24964c1ce960a..f640750679da7 100644
Binary files a/sound/machines/sm/accent/normal/33.ogg and b/sound/machines/sm/accent/normal/33.ogg differ
diff --git a/sound/machines/sm/accent/normal/4.ogg b/sound/machines/sm/accent/normal/4.ogg
index 2e71e976e86c4..c8ebf4ddf43e3 100644
Binary files a/sound/machines/sm/accent/normal/4.ogg and b/sound/machines/sm/accent/normal/4.ogg differ
diff --git a/sound/machines/sm/accent/normal/5.ogg b/sound/machines/sm/accent/normal/5.ogg
index 04852e10f2b28..e4f7d8b22f7f6 100644
Binary files a/sound/machines/sm/accent/normal/5.ogg and b/sound/machines/sm/accent/normal/5.ogg differ
diff --git a/sound/machines/sm/accent/normal/6.ogg b/sound/machines/sm/accent/normal/6.ogg
index bf06c06bbe0e7..f0453e8ab8d49 100644
Binary files a/sound/machines/sm/accent/normal/6.ogg and b/sound/machines/sm/accent/normal/6.ogg differ
diff --git a/sound/machines/sm/accent/normal/7.ogg b/sound/machines/sm/accent/normal/7.ogg
index d29821701f4c4..878adba8fcca6 100644
Binary files a/sound/machines/sm/accent/normal/7.ogg and b/sound/machines/sm/accent/normal/7.ogg differ
diff --git a/sound/machines/sm/accent/normal/8.ogg b/sound/machines/sm/accent/normal/8.ogg
index 0b94b9dbe046d..6fedc91affee4 100644
Binary files a/sound/machines/sm/accent/normal/8.ogg and b/sound/machines/sm/accent/normal/8.ogg differ
diff --git a/sound/machines/sm/accent/normal/9.ogg b/sound/machines/sm/accent/normal/9.ogg
index 545b038be11f3..83cdfa7320516 100644
Binary files a/sound/machines/sm/accent/normal/9.ogg and b/sound/machines/sm/accent/normal/9.ogg differ
diff --git a/sound/machines/sm/loops/calm.ogg b/sound/machines/sm/loops/calm.ogg
index cee14fcd13d66..49d56170d2eb6 100644
Binary files a/sound/machines/sm/loops/calm.ogg and b/sound/machines/sm/loops/calm.ogg differ
diff --git a/sound/machines/sm/loops/delamming.ogg b/sound/machines/sm/loops/delamming.ogg
index 7d79f0e3c4acd..69d4b76030cde 100644
Binary files a/sound/machines/sm/loops/delamming.ogg and b/sound/machines/sm/loops/delamming.ogg differ
diff --git a/sound/machines/sm/supermatter1.ogg b/sound/machines/sm/supermatter1.ogg
index be5185009eb2f..ae4acc3fe4197 100644
Binary files a/sound/machines/sm/supermatter1.ogg and b/sound/machines/sm/supermatter1.ogg differ
diff --git a/sound/machines/sm/supermatter2.ogg b/sound/machines/sm/supermatter2.ogg
index 5c98d28ed1ca0..f1993a2e16238 100644
Binary files a/sound/machines/sm/supermatter2.ogg and b/sound/machines/sm/supermatter2.ogg differ
diff --git a/sound/machines/sm/supermatter3.ogg b/sound/machines/sm/supermatter3.ogg
index fb8e09166c3c3..7d290f30b0dfd 100644
Binary files a/sound/machines/sm/supermatter3.ogg and b/sound/machines/sm/supermatter3.ogg differ
diff --git a/sound/machines/sonar-ping.ogg b/sound/machines/sonar-ping.ogg
index c69d43520958d..b7720b72122ee 100644
Binary files a/sound/machines/sonar-ping.ogg and b/sound/machines/sonar-ping.ogg differ
diff --git a/sound/machines/steam_hiss.ogg b/sound/machines/steam_hiss.ogg
index 3bde6d950bcfe..340a405c1d541 100644
Binary files a/sound/machines/steam_hiss.ogg and b/sound/machines/steam_hiss.ogg differ
diff --git a/sound/machines/synth/synth_no.ogg b/sound/machines/synth/synth_no.ogg
index f0d2c3bfb0c4d..1b90b361881c2 100644
Binary files a/sound/machines/synth/synth_no.ogg and b/sound/machines/synth/synth_no.ogg differ
diff --git a/sound/machines/synth/synth_yes.ogg b/sound/machines/synth/synth_yes.ogg
index 300cad132ede4..581995a8f358c 100644
Binary files a/sound/machines/synth/synth_yes.ogg and b/sound/machines/synth/synth_yes.ogg differ
diff --git a/sound/machines/tcomms/tcomms_mid1.ogg b/sound/machines/tcomms/tcomms_mid1.ogg
index e9b7f00579b86..05b46ed40b97f 100644
Binary files a/sound/machines/tcomms/tcomms_mid1.ogg and b/sound/machines/tcomms/tcomms_mid1.ogg differ
diff --git a/sound/machines/tcomms/tcomms_mid2.ogg b/sound/machines/tcomms/tcomms_mid2.ogg
index a1ee098f408c0..ddc0e13efda07 100644
Binary files a/sound/machines/tcomms/tcomms_mid2.ogg and b/sound/machines/tcomms/tcomms_mid2.ogg differ
diff --git a/sound/machines/tcomms/tcomms_mid3.ogg b/sound/machines/tcomms/tcomms_mid3.ogg
index c730d748876a3..18e935d71027c 100644
Binary files a/sound/machines/tcomms/tcomms_mid3.ogg and b/sound/machines/tcomms/tcomms_mid3.ogg differ
diff --git a/sound/machines/tcomms/tcomms_mid4.ogg b/sound/machines/tcomms/tcomms_mid4.ogg
index dbbfe894b0dd2..b73697ed3005e 100644
Binary files a/sound/machines/tcomms/tcomms_mid4.ogg and b/sound/machines/tcomms/tcomms_mid4.ogg differ
diff --git a/sound/machines/tcomms/tcomms_mid5.ogg b/sound/machines/tcomms/tcomms_mid5.ogg
index 31320e7a7728a..58ffc2c7e0c61 100644
Binary files a/sound/machines/tcomms/tcomms_mid5.ogg and b/sound/machines/tcomms/tcomms_mid5.ogg differ
diff --git a/sound/machines/tcomms/tcomms_mid6.ogg b/sound/machines/tcomms/tcomms_mid6.ogg
index d89546910cd4d..94d6fcd6e5a46 100644
Binary files a/sound/machines/tcomms/tcomms_mid6.ogg and b/sound/machines/tcomms/tcomms_mid6.ogg differ
diff --git a/sound/machines/tcomms/tcomms_mid7.ogg b/sound/machines/tcomms/tcomms_mid7.ogg
index 1a06ab53fea8c..0653529fa05ed 100644
Binary files a/sound/machines/tcomms/tcomms_mid7.ogg and b/sound/machines/tcomms/tcomms_mid7.ogg differ
diff --git a/sound/machines/terminal/terminal_alert.ogg b/sound/machines/terminal/terminal_alert.ogg
index a790c03ebdfc4..85255010e43b4 100644
Binary files a/sound/machines/terminal/terminal_alert.ogg and b/sound/machines/terminal/terminal_alert.ogg differ
diff --git a/sound/machines/terminal/terminal_button01.ogg b/sound/machines/terminal/terminal_button01.ogg
index 88b10c88912b3..041c9eff25491 100644
Binary files a/sound/machines/terminal/terminal_button01.ogg and b/sound/machines/terminal/terminal_button01.ogg differ
diff --git a/sound/machines/terminal/terminal_button02.ogg b/sound/machines/terminal/terminal_button02.ogg
index 8b30fd892eed5..e75a7e931c519 100644
Binary files a/sound/machines/terminal/terminal_button02.ogg and b/sound/machines/terminal/terminal_button02.ogg differ
diff --git a/sound/machines/terminal/terminal_button03.ogg b/sound/machines/terminal/terminal_button03.ogg
index 7a00168cfc3c5..e3f989f1252e2 100644
Binary files a/sound/machines/terminal/terminal_button03.ogg and b/sound/machines/terminal/terminal_button03.ogg differ
diff --git a/sound/machines/terminal/terminal_button04.ogg b/sound/machines/terminal/terminal_button04.ogg
index c56b23919cc6b..af69217a09962 100644
Binary files a/sound/machines/terminal/terminal_button04.ogg and b/sound/machines/terminal/terminal_button04.ogg differ
diff --git a/sound/machines/terminal/terminal_button05.ogg b/sound/machines/terminal/terminal_button05.ogg
index e660ecf154c78..93247c9f8cd95 100644
Binary files a/sound/machines/terminal/terminal_button05.ogg and b/sound/machines/terminal/terminal_button05.ogg differ
diff --git a/sound/machines/terminal/terminal_button06.ogg b/sound/machines/terminal/terminal_button06.ogg
index bef143ac521fc..f027ae0424e15 100644
Binary files a/sound/machines/terminal/terminal_button06.ogg and b/sound/machines/terminal/terminal_button06.ogg differ
diff --git a/sound/machines/terminal/terminal_button07.ogg b/sound/machines/terminal/terminal_button07.ogg
index 91a31a1156ad7..b64040b41fca9 100644
Binary files a/sound/machines/terminal/terminal_button07.ogg and b/sound/machines/terminal/terminal_button07.ogg differ
diff --git a/sound/machines/terminal/terminal_button08.ogg b/sound/machines/terminal/terminal_button08.ogg
index fc0131f5f4ed8..9d2ef75af9d41 100644
Binary files a/sound/machines/terminal/terminal_button08.ogg and b/sound/machines/terminal/terminal_button08.ogg differ
diff --git a/sound/machines/terminal/terminal_eject.ogg b/sound/machines/terminal/terminal_eject.ogg
index 357e667f94356..541dc9e980cf6 100644
Binary files a/sound/machines/terminal/terminal_eject.ogg and b/sound/machines/terminal/terminal_eject.ogg differ
diff --git a/sound/machines/terminal/terminal_error.ogg b/sound/machines/terminal/terminal_error.ogg
index 22556e5ea4b0f..8d08fdcf0deff 100644
Binary files a/sound/machines/terminal/terminal_error.ogg and b/sound/machines/terminal/terminal_error.ogg differ
diff --git a/sound/machines/terminal/terminal_insert_disc.ogg b/sound/machines/terminal/terminal_insert_disc.ogg
index dd226c1ebdea6..9aa9e45cb51de 100644
Binary files a/sound/machines/terminal/terminal_insert_disc.ogg and b/sound/machines/terminal/terminal_insert_disc.ogg differ
diff --git a/sound/machines/terminal/terminal_off.ogg b/sound/machines/terminal/terminal_off.ogg
index 90da8d75daf91..deafa9c9e5291 100644
Binary files a/sound/machines/terminal/terminal_off.ogg and b/sound/machines/terminal/terminal_off.ogg differ
diff --git a/sound/machines/terminal/terminal_on.ogg b/sound/machines/terminal/terminal_on.ogg
index 3c69d85de54cc..4589438c04f42 100644
Binary files a/sound/machines/terminal/terminal_on.ogg and b/sound/machines/terminal/terminal_on.ogg differ
diff --git a/sound/machines/terminal/terminal_processing.ogg b/sound/machines/terminal/terminal_processing.ogg
index b65c2e81d48b4..ae171a094dbcd 100644
Binary files a/sound/machines/terminal/terminal_processing.ogg and b/sound/machines/terminal/terminal_processing.ogg differ
diff --git a/sound/machines/terminal/terminal_prompt.ogg b/sound/machines/terminal/terminal_prompt.ogg
index 74de1c9a2986d..0989fb9a852a3 100644
Binary files a/sound/machines/terminal/terminal_prompt.ogg and b/sound/machines/terminal/terminal_prompt.ogg differ
diff --git a/sound/machines/terminal/terminal_prompt_confirm.ogg b/sound/machines/terminal/terminal_prompt_confirm.ogg
index 897fec28e9aa4..012189e859b5c 100644
Binary files a/sound/machines/terminal/terminal_prompt_confirm.ogg and b/sound/machines/terminal/terminal_prompt_confirm.ogg differ
diff --git a/sound/machines/terminal/terminal_prompt_deny.ogg b/sound/machines/terminal/terminal_prompt_deny.ogg
index fda065f0d4696..d4168334efec4 100644
Binary files a/sound/machines/terminal/terminal_prompt_deny.ogg and b/sound/machines/terminal/terminal_prompt_deny.ogg differ
diff --git a/sound/machines/terminal/terminal_select.ogg b/sound/machines/terminal/terminal_select.ogg
index 42d7c62885513..cfa0651757dd1 100644
Binary files a/sound/machines/terminal/terminal_select.ogg and b/sound/machines/terminal/terminal_select.ogg differ
diff --git a/sound/machines/terminal/terminal_success.ogg b/sound/machines/terminal/terminal_success.ogg
index b2712c8202c43..815d10aa9fb86 100644
Binary files a/sound/machines/terminal/terminal_success.ogg and b/sound/machines/terminal/terminal_success.ogg differ
diff --git a/sound/machines/toilet_flush.ogg b/sound/machines/toilet_flush.ogg
index bddefe76f6a76..d5b3987317d2e 100644
Binary files a/sound/machines/toilet_flush.ogg and b/sound/machines/toilet_flush.ogg differ
diff --git a/sound/machines/tram/tramclose.ogg b/sound/machines/tram/tramclose.ogg
index d6777a6aab1bc..025f67526a451 100644
Binary files a/sound/machines/tram/tramclose.ogg and b/sound/machines/tram/tramclose.ogg differ
diff --git a/sound/machines/tram/tramopen.ogg b/sound/machines/tram/tramopen.ogg
index 2138286418bb2..6ae8d4e883342 100644
Binary files a/sound/machines/tram/tramopen.ogg and b/sound/machines/tram/tramopen.ogg differ
diff --git a/sound/machines/trapdoor/trapdoor_open.ogg b/sound/machines/trapdoor/trapdoor_open.ogg
index f64212b9117ce..b120528546d98 100644
Binary files a/sound/machines/trapdoor/trapdoor_open.ogg and b/sound/machines/trapdoor/trapdoor_open.ogg differ
diff --git a/sound/machines/trapdoor/trapdoor_shut.ogg b/sound/machines/trapdoor/trapdoor_shut.ogg
index 21021c5f8c13c..6860ae1c0335c 100644
Binary files a/sound/machines/trapdoor/trapdoor_shut.ogg and b/sound/machines/trapdoor/trapdoor_shut.ogg differ
diff --git a/sound/machines/uplink/uplinkerror.ogg b/sound/machines/uplink/uplinkerror.ogg
index 806a673d51a5d..9608ceaeadafe 100644
Binary files a/sound/machines/uplink/uplinkerror.ogg and b/sound/machines/uplink/uplinkerror.ogg differ
diff --git a/sound/machines/uplink/uplinkpurchase.ogg b/sound/machines/uplink/uplinkpurchase.ogg
index 6da5c72d8eb62..4c864c137265c 100644
Binary files a/sound/machines/uplink/uplinkpurchase.ogg and b/sound/machines/uplink/uplinkpurchase.ogg differ
diff --git a/sound/machines/ventcrawl.ogg b/sound/machines/ventcrawl.ogg
index da6d25388d633..0318490ba03dc 100644
Binary files a/sound/machines/ventcrawl.ogg and b/sound/machines/ventcrawl.ogg differ
diff --git a/sound/machines/warning-buzzer.ogg b/sound/machines/warning-buzzer.ogg
index 55bb179f57d47..005fab3c90f1f 100644
Binary files a/sound/machines/warning-buzzer.ogg and b/sound/machines/warning-buzzer.ogg differ
diff --git a/sound/machines/wewewew.ogg b/sound/machines/wewewew.ogg
index b521e0c9761b4..2ccda855058cc 100644
Binary files a/sound/machines/wewewew.ogg and b/sound/machines/wewewew.ogg differ
diff --git a/sound/machines/windowdoor.ogg b/sound/machines/windowdoor.ogg
index 26f094b597131..0911409ae8d0a 100644
Binary files a/sound/machines/windowdoor.ogg and b/sound/machines/windowdoor.ogg differ
diff --git a/sound/misc/asay_ping.ogg b/sound/misc/asay_ping.ogg
index ed293db4fd322..02fb83ad9f9ae 100644
Binary files a/sound/misc/asay_ping.ogg and b/sound/misc/asay_ping.ogg differ
diff --git a/sound/misc/bang.ogg b/sound/misc/bang.ogg
index c187a748ec4dd..314df22994cbb 100644
Binary files a/sound/misc/bang.ogg and b/sound/misc/bang.ogg differ
diff --git a/sound/misc/bloop.ogg b/sound/misc/bloop.ogg
index 260e9e926e158..74d27c1708040 100644
Binary files a/sound/misc/bloop.ogg and b/sound/misc/bloop.ogg differ
diff --git a/sound/misc/box_deploy.ogg b/sound/misc/box_deploy.ogg
index 750328e279d9a..567d767cae564 100644
Binary files a/sound/misc/box_deploy.ogg and b/sound/misc/box_deploy.ogg differ
diff --git a/sound/misc/chain_rattling.ogg b/sound/misc/chain_rattling.ogg
index 9ff9913b2b244..122c45e59504c 100644
Binary files a/sound/misc/chain_rattling.ogg and b/sound/misc/chain_rattling.ogg differ
diff --git a/sound/misc/cracking_crystal.ogg b/sound/misc/cracking_crystal.ogg
index 4bf4b31353719..3fed300e43ef3 100644
Binary files a/sound/misc/cracking_crystal.ogg and b/sound/misc/cracking_crystal.ogg differ
diff --git a/sound/misc/highlander.ogg b/sound/misc/highlander.ogg
index c9203780e67a6..bcae4c5d3683b 100644
Binary files a/sound/misc/highlander.ogg and b/sound/misc/highlander.ogg differ
diff --git a/sound/misc/insane_low_laugh.ogg b/sound/misc/insane_low_laugh.ogg
index 6f1ba277783dc..0d72437493933 100644
Binary files a/sound/misc/insane_low_laugh.ogg and b/sound/misc/insane_low_laugh.ogg differ
diff --git a/sound/misc/interference.ogg b/sound/misc/interference.ogg
index bd4385142f5a0..01f5ec06f728d 100644
Binary files a/sound/misc/interference.ogg and b/sound/misc/interference.ogg differ
diff --git a/sound/misc/menu/attribution.txt b/sound/misc/menu/attribution.txt
new file mode 100644
index 0000000000000..fa89d4cf4cb1d
--- /dev/null
+++ b/sound/misc/menu/attribution.txt
@@ -0,0 +1,6 @@
+ui_select made by sadboysuss
+license: CC-BY-SA
+
+rolldown and rollup are heavily modified of:
+Yunon YN500 Camera Shutter by yfjesse -- https://freesound.org/s/579884/ -- License: Creative Commons 0
+
diff --git a/sound/misc/menu/menu_rolldown1.ogg b/sound/misc/menu/menu_rolldown1.ogg
new file mode 100644
index 0000000000000..a59529b4ad10c
Binary files /dev/null and b/sound/misc/menu/menu_rolldown1.ogg differ
diff --git a/sound/misc/menu/menu_rollup1.ogg b/sound/misc/menu/menu_rollup1.ogg
new file mode 100644
index 0000000000000..5f21f3adf0cda
Binary files /dev/null and b/sound/misc/menu/menu_rollup1.ogg differ
diff --git a/sound/misc/menu/ui_select1.ogg b/sound/misc/menu/ui_select1.ogg
new file mode 100644
index 0000000000000..d9b3ac8f61af3
Binary files /dev/null and b/sound/misc/menu/ui_select1.ogg differ
diff --git a/sound/misc/metal_creak.ogg b/sound/misc/metal_creak.ogg
index 669594a0bfe74..a8fed76a2dbfc 100644
Binary files a/sound/misc/metal_creak.ogg and b/sound/misc/metal_creak.ogg differ
diff --git a/sound/misc/moist_impact.ogg b/sound/misc/moist_impact.ogg
index 6ef27ac3dd254..901b84e13c1b2 100644
Binary files a/sound/misc/moist_impact.ogg and b/sound/misc/moist_impact.ogg differ
diff --git a/sound/misc/roleplay.ogg b/sound/misc/roleplay.ogg
index e9ec54550091d..ab5842f31e831 100644
Binary files a/sound/misc/roleplay.ogg and b/sound/misc/roleplay.ogg differ
diff --git a/sound/misc/sadtrombone.ogg b/sound/misc/sadtrombone.ogg
index 565c76d523a5a..b7da7c53f8d0a 100644
Binary files a/sound/misc/sadtrombone.ogg and b/sound/misc/sadtrombone.ogg differ
diff --git a/sound/misc/scary_horn.ogg b/sound/misc/scary_horn.ogg
index fb2805bd2cdb8..3201b955a2c6a 100644
Binary files a/sound/misc/scary_horn.ogg and b/sound/misc/scary_horn.ogg differ
diff --git a/sound/misc/server-ready.ogg b/sound/misc/server-ready.ogg
index 216533b6f32b4..a9feda76ebbd9 100644
Binary files a/sound/misc/server-ready.ogg and b/sound/misc/server-ready.ogg differ
diff --git a/sound/misc/slip.ogg b/sound/misc/slip.ogg
index 3ec12b56e69db..0ceb99f01d5e7 100644
Binary files a/sound/misc/slip.ogg and b/sound/misc/slip.ogg differ
diff --git a/sound/misc/soggy.ogg b/sound/misc/soggy.ogg
index 3e436bd37bf3e..a2bbf2663cda7 100644
Binary files a/sound/misc/soggy.ogg and b/sound/misc/soggy.ogg differ
diff --git a/sound/misc/splort.ogg b/sound/misc/splort.ogg
index 00f1abf8cea2c..4690bd4b8e857 100644
Binary files a/sound/misc/splort.ogg and b/sound/misc/splort.ogg differ
diff --git a/sound/misc/ui_togglecombat.ogg b/sound/misc/ui_togglecombat.ogg
index 7336b9cf0e13c..83caf7b577422 100644
Binary files a/sound/misc/ui_togglecombat.ogg and b/sound/misc/ui_togglecombat.ogg differ
diff --git a/sound/misc/ui_toggleoffcombat.ogg b/sound/misc/ui_toggleoffcombat.ogg
index 98df1726e987a..e96a6caad2b8a 100644
Binary files a/sound/misc/ui_toggleoffcombat.ogg and b/sound/misc/ui_toggleoffcombat.ogg differ
diff --git a/sound/mobs/humanoids/breathing/internals_breathing1.ogg b/sound/mobs/humanoids/breathing/internals_breathing1.ogg
index e4f1d564ad697..58f8710b81761 100644
Binary files a/sound/mobs/humanoids/breathing/internals_breathing1.ogg and b/sound/mobs/humanoids/breathing/internals_breathing1.ogg differ
diff --git a/sound/mobs/humanoids/breathing/internals_breathing2.ogg b/sound/mobs/humanoids/breathing/internals_breathing2.ogg
index 7b09c04cc62b5..39682edd4de6b 100644
Binary files a/sound/mobs/humanoids/breathing/internals_breathing2.ogg and b/sound/mobs/humanoids/breathing/internals_breathing2.ogg differ
diff --git a/sound/mobs/humanoids/breathing/internals_breathing3.ogg b/sound/mobs/humanoids/breathing/internals_breathing3.ogg
index 0ea34b9024b67..c3ff9b9e82b8f 100644
Binary files a/sound/mobs/humanoids/breathing/internals_breathing3.ogg and b/sound/mobs/humanoids/breathing/internals_breathing3.ogg differ
diff --git a/sound/mobs/humanoids/breathing/internals_breathing4.ogg b/sound/mobs/humanoids/breathing/internals_breathing4.ogg
index 30718fab3070e..68634a1212f8d 100644
Binary files a/sound/mobs/humanoids/breathing/internals_breathing4.ogg and b/sound/mobs/humanoids/breathing/internals_breathing4.ogg differ
diff --git a/sound/mobs/humanoids/breathing/internals_breathing5.ogg b/sound/mobs/humanoids/breathing/internals_breathing5.ogg
index c78354481955e..8276d9088745c 100644
Binary files a/sound/mobs/humanoids/breathing/internals_breathing5.ogg and b/sound/mobs/humanoids/breathing/internals_breathing5.ogg differ
diff --git a/sound/mobs/humanoids/breathing/internals_breathing6.ogg b/sound/mobs/humanoids/breathing/internals_breathing6.ogg
index f415845902d98..0c36eb7c90997 100644
Binary files a/sound/mobs/humanoids/breathing/internals_breathing6.ogg and b/sound/mobs/humanoids/breathing/internals_breathing6.ogg differ
diff --git a/sound/mobs/humanoids/breathing/internals_breathing7.ogg b/sound/mobs/humanoids/breathing/internals_breathing7.ogg
index 946c34d45f307..951aaf0546885 100644
Binary files a/sound/mobs/humanoids/breathing/internals_breathing7.ogg and b/sound/mobs/humanoids/breathing/internals_breathing7.ogg differ
diff --git a/sound/mobs/humanoids/breathing/internals_breathing8.ogg b/sound/mobs/humanoids/breathing/internals_breathing8.ogg
index 36f4925612542..0266fbd4b967d 100644
Binary files a/sound/mobs/humanoids/breathing/internals_breathing8.ogg and b/sound/mobs/humanoids/breathing/internals_breathing8.ogg differ
diff --git a/sound/mobs/humanoids/ethereal/ethereal_crystalization.ogg b/sound/mobs/humanoids/ethereal/ethereal_crystalization.ogg
index 5707069c482b1..53f9290117d25 100644
Binary files a/sound/mobs/humanoids/ethereal/ethereal_crystalization.ogg and b/sound/mobs/humanoids/ethereal/ethereal_crystalization.ogg differ
diff --git a/sound/mobs/humanoids/ethereal/ethereal_revive.ogg b/sound/mobs/humanoids/ethereal/ethereal_revive.ogg
index 3accaa75a49fd..ae993bab7e6e5 100644
Binary files a/sound/mobs/humanoids/ethereal/ethereal_revive.ogg and b/sound/mobs/humanoids/ethereal/ethereal_revive.ogg differ
diff --git a/sound/mobs/humanoids/ethereal/ethereal_revive_fail.ogg b/sound/mobs/humanoids/ethereal/ethereal_revive_fail.ogg
index de753b349f253..49413c01957f4 100644
Binary files a/sound/mobs/humanoids/ethereal/ethereal_revive_fail.ogg and b/sound/mobs/humanoids/ethereal/ethereal_revive_fail.ogg differ
diff --git a/sound/mobs/humanoids/ethereal/ethereal_scream_1.ogg b/sound/mobs/humanoids/ethereal/ethereal_scream_1.ogg
index f0d68bd384e7c..f39adc1c50c8c 100644
Binary files a/sound/mobs/humanoids/ethereal/ethereal_scream_1.ogg and b/sound/mobs/humanoids/ethereal/ethereal_scream_1.ogg differ
diff --git a/sound/mobs/humanoids/ethereal/ethereal_scream_2.ogg b/sound/mobs/humanoids/ethereal/ethereal_scream_2.ogg
index 9aaf706878064..70edb5a2be0c4 100644
Binary files a/sound/mobs/humanoids/ethereal/ethereal_scream_2.ogg and b/sound/mobs/humanoids/ethereal/ethereal_scream_2.ogg differ
diff --git a/sound/mobs/humanoids/ethereal/ethereal_scream_3.ogg b/sound/mobs/humanoids/ethereal/ethereal_scream_3.ogg
index f51ea316b4245..1b30a62f44d78 100644
Binary files a/sound/mobs/humanoids/ethereal/ethereal_scream_3.ogg and b/sound/mobs/humanoids/ethereal/ethereal_scream_3.ogg differ
diff --git a/sound/mobs/humanoids/ethereal/lustrous_scream_1.ogg b/sound/mobs/humanoids/ethereal/lustrous_scream_1.ogg
index ca282c346cf74..686ef773d6ea8 100644
Binary files a/sound/mobs/humanoids/ethereal/lustrous_scream_1.ogg and b/sound/mobs/humanoids/ethereal/lustrous_scream_1.ogg differ
diff --git a/sound/mobs/humanoids/ethereal/lustrous_scream_2.ogg b/sound/mobs/humanoids/ethereal/lustrous_scream_2.ogg
index e6e2a87fc1adf..04cfbf7cb3e78 100644
Binary files a/sound/mobs/humanoids/ethereal/lustrous_scream_2.ogg and b/sound/mobs/humanoids/ethereal/lustrous_scream_2.ogg differ
diff --git a/sound/mobs/humanoids/ethereal/lustrous_scream_3.ogg b/sound/mobs/humanoids/ethereal/lustrous_scream_3.ogg
index fbb7a6a44864d..7b70abff928c7 100644
Binary files a/sound/mobs/humanoids/ethereal/lustrous_scream_3.ogg and b/sound/mobs/humanoids/ethereal/lustrous_scream_3.ogg differ
diff --git a/sound/mobs/humanoids/human/attribution.txt b/sound/mobs/humanoids/human/attribution.txt
index 254e7a7b3aede..20b8c14889a06 100644
--- a/sound/mobs/humanoids/human/attribution.txt
+++ b/sound/mobs/humanoids/human/attribution.txt
@@ -2,7 +2,5 @@ The male sharp gasps are from https://freesound.org/people/bacruz666/sounds/3419
{
male_sniff.ogg - https://freesound.org/people/Fluffayfish/sounds/327799/ , License: CC BY-NC 3.0
-male_sigh.ogg - https://freesound.org/people/giddster/sounds/336540/ , License: CC0
female_sniff.ogg - https://freesound.org/people/SpliceSound/sounds/218307/ , License: CC0
-female_sigh.ogg - https://freesound.org/people/biawinter/sounds/408090/ , License: CC BY-NC 4.0
} modified by grungussuss
diff --git a/sound/mobs/humanoids/human/clap/clap1.ogg b/sound/mobs/humanoids/human/clap/clap1.ogg
index da0f7eded7916..618143f2e1766 100644
Binary files a/sound/mobs/humanoids/human/clap/clap1.ogg and b/sound/mobs/humanoids/human/clap/clap1.ogg differ
diff --git a/sound/mobs/humanoids/human/clap/clap2.ogg b/sound/mobs/humanoids/human/clap/clap2.ogg
index 72e26d4a24127..b2802023d80c5 100644
Binary files a/sound/mobs/humanoids/human/clap/clap2.ogg and b/sound/mobs/humanoids/human/clap/clap2.ogg differ
diff --git a/sound/mobs/humanoids/human/clap/clap3.ogg b/sound/mobs/humanoids/human/clap/clap3.ogg
index 7a72ab9bf3ccb..3ba575eec8731 100644
Binary files a/sound/mobs/humanoids/human/clap/clap3.ogg and b/sound/mobs/humanoids/human/clap/clap3.ogg differ
diff --git a/sound/mobs/humanoids/human/clap/clap4.ogg b/sound/mobs/humanoids/human/clap/clap4.ogg
index cdc533ca7715a..d34a106747a78 100644
Binary files a/sound/mobs/humanoids/human/clap/clap4.ogg and b/sound/mobs/humanoids/human/clap/clap4.ogg differ
diff --git a/sound/mobs/humanoids/human/cough/female_cough1.ogg b/sound/mobs/humanoids/human/cough/female_cough1.ogg
index 53af74368c3bf..9e339a6036cac 100644
Binary files a/sound/mobs/humanoids/human/cough/female_cough1.ogg and b/sound/mobs/humanoids/human/cough/female_cough1.ogg differ
diff --git a/sound/mobs/humanoids/human/cough/female_cough2.ogg b/sound/mobs/humanoids/human/cough/female_cough2.ogg
index eb3551a31fecb..09500c0307252 100644
Binary files a/sound/mobs/humanoids/human/cough/female_cough2.ogg and b/sound/mobs/humanoids/human/cough/female_cough2.ogg differ
diff --git a/sound/mobs/humanoids/human/cough/female_cough3.ogg b/sound/mobs/humanoids/human/cough/female_cough3.ogg
index a075963d3b46d..09a7d8beeb50d 100644
Binary files a/sound/mobs/humanoids/human/cough/female_cough3.ogg and b/sound/mobs/humanoids/human/cough/female_cough3.ogg differ
diff --git a/sound/mobs/humanoids/human/cough/female_cough4.ogg b/sound/mobs/humanoids/human/cough/female_cough4.ogg
index 0136ea42ccff2..904060d08f291 100644
Binary files a/sound/mobs/humanoids/human/cough/female_cough4.ogg and b/sound/mobs/humanoids/human/cough/female_cough4.ogg differ
diff --git a/sound/mobs/humanoids/human/cough/female_cough5.ogg b/sound/mobs/humanoids/human/cough/female_cough5.ogg
index 7562661bd4853..79b98bec5a14c 100644
Binary files a/sound/mobs/humanoids/human/cough/female_cough5.ogg and b/sound/mobs/humanoids/human/cough/female_cough5.ogg differ
diff --git a/sound/mobs/humanoids/human/cough/female_cough6.ogg b/sound/mobs/humanoids/human/cough/female_cough6.ogg
index 62938b7b761af..c3b6e25ee71ab 100644
Binary files a/sound/mobs/humanoids/human/cough/female_cough6.ogg and b/sound/mobs/humanoids/human/cough/female_cough6.ogg differ
diff --git a/sound/mobs/humanoids/human/cough/male_cough1.ogg b/sound/mobs/humanoids/human/cough/male_cough1.ogg
index f553bd855ae94..9bfdf19458122 100644
Binary files a/sound/mobs/humanoids/human/cough/male_cough1.ogg and b/sound/mobs/humanoids/human/cough/male_cough1.ogg differ
diff --git a/sound/mobs/humanoids/human/cough/male_cough2.ogg b/sound/mobs/humanoids/human/cough/male_cough2.ogg
index 3dcc880175fb5..16b902d51c138 100644
Binary files a/sound/mobs/humanoids/human/cough/male_cough2.ogg and b/sound/mobs/humanoids/human/cough/male_cough2.ogg differ
diff --git a/sound/mobs/humanoids/human/cough/male_cough3.ogg b/sound/mobs/humanoids/human/cough/male_cough3.ogg
index a87ba9cc4c730..030197f29d25a 100644
Binary files a/sound/mobs/humanoids/human/cough/male_cough3.ogg and b/sound/mobs/humanoids/human/cough/male_cough3.ogg differ
diff --git a/sound/mobs/humanoids/human/cough/male_cough4.ogg b/sound/mobs/humanoids/human/cough/male_cough4.ogg
index 38052dc78711b..59326cf0419f7 100644
Binary files a/sound/mobs/humanoids/human/cough/male_cough4.ogg and b/sound/mobs/humanoids/human/cough/male_cough4.ogg differ
diff --git a/sound/mobs/humanoids/human/cough/male_cough5.ogg b/sound/mobs/humanoids/human/cough/male_cough5.ogg
index 5a1b836775dbf..86868ef94c06d 100644
Binary files a/sound/mobs/humanoids/human/cough/male_cough5.ogg and b/sound/mobs/humanoids/human/cough/male_cough5.ogg differ
diff --git a/sound/mobs/humanoids/human/cough/male_cough6.ogg b/sound/mobs/humanoids/human/cough/male_cough6.ogg
index cfe4e08655b94..3dda582fc1704 100644
Binary files a/sound/mobs/humanoids/human/cough/male_cough6.ogg and b/sound/mobs/humanoids/human/cough/male_cough6.ogg differ
diff --git a/sound/mobs/humanoids/human/cry/female_cry1.ogg b/sound/mobs/humanoids/human/cry/female_cry1.ogg
index f4f7386417194..cf299a99b3839 100644
Binary files a/sound/mobs/humanoids/human/cry/female_cry1.ogg and b/sound/mobs/humanoids/human/cry/female_cry1.ogg differ
diff --git a/sound/mobs/humanoids/human/cry/female_cry2.ogg b/sound/mobs/humanoids/human/cry/female_cry2.ogg
index e81e93b5c3f83..224e96e8514ce 100644
Binary files a/sound/mobs/humanoids/human/cry/female_cry2.ogg and b/sound/mobs/humanoids/human/cry/female_cry2.ogg differ
diff --git a/sound/mobs/humanoids/human/cry/male_cry1.ogg b/sound/mobs/humanoids/human/cry/male_cry1.ogg
index 50ffd0cf72a7d..fa34ab51abf94 100644
Binary files a/sound/mobs/humanoids/human/cry/male_cry1.ogg and b/sound/mobs/humanoids/human/cry/male_cry1.ogg differ
diff --git a/sound/mobs/humanoids/human/cry/male_cry2.ogg b/sound/mobs/humanoids/human/cry/male_cry2.ogg
index 8d35a4d527669..1c99a80dc92ba 100644
Binary files a/sound/mobs/humanoids/human/cry/male_cry2.ogg and b/sound/mobs/humanoids/human/cry/male_cry2.ogg differ
diff --git a/sound/mobs/humanoids/human/cry/male_cry3.ogg b/sound/mobs/humanoids/human/cry/male_cry3.ogg
index 58f39b5fff134..89f65ebe29a82 100644
Binary files a/sound/mobs/humanoids/human/cry/male_cry3.ogg and b/sound/mobs/humanoids/human/cry/male_cry3.ogg differ
diff --git a/sound/mobs/humanoids/human/gag_vomit/crack_vomit.ogg b/sound/mobs/humanoids/human/gag_vomit/crack_vomit.ogg
index 93c3606c3b864..b36b284afc58f 100644
Binary files a/sound/mobs/humanoids/human/gag_vomit/crack_vomit.ogg and b/sound/mobs/humanoids/human/gag_vomit/crack_vomit.ogg differ
diff --git a/sound/mobs/humanoids/human/gag_vomit/gag1.ogg b/sound/mobs/humanoids/human/gag_vomit/gag1.ogg
index 6b2781a9b13e7..6fdf167752c50 100644
Binary files a/sound/mobs/humanoids/human/gag_vomit/gag1.ogg and b/sound/mobs/humanoids/human/gag_vomit/gag1.ogg differ
diff --git a/sound/mobs/humanoids/human/gag_vomit/gag2.ogg b/sound/mobs/humanoids/human/gag_vomit/gag2.ogg
index ae11cd25b41b6..1454f1176b8a1 100644
Binary files a/sound/mobs/humanoids/human/gag_vomit/gag2.ogg and b/sound/mobs/humanoids/human/gag_vomit/gag2.ogg differ
diff --git a/sound/mobs/humanoids/human/gag_vomit/gag3.ogg b/sound/mobs/humanoids/human/gag_vomit/gag3.ogg
index 4424fe5da392a..c92dccc8886ec 100644
Binary files a/sound/mobs/humanoids/human/gag_vomit/gag3.ogg and b/sound/mobs/humanoids/human/gag_vomit/gag3.ogg differ
diff --git a/sound/mobs/humanoids/human/gag_vomit/gag4.ogg b/sound/mobs/humanoids/human/gag_vomit/gag4.ogg
index 6b2c1eaef6ffc..0936b2f701ff3 100644
Binary files a/sound/mobs/humanoids/human/gag_vomit/gag4.ogg and b/sound/mobs/humanoids/human/gag_vomit/gag4.ogg differ
diff --git a/sound/mobs/humanoids/human/gag_vomit/gag5.ogg b/sound/mobs/humanoids/human/gag_vomit/gag5.ogg
index 89ffa21dc084b..90b49cf976307 100644
Binary files a/sound/mobs/humanoids/human/gag_vomit/gag5.ogg and b/sound/mobs/humanoids/human/gag_vomit/gag5.ogg differ
diff --git a/sound/mobs/humanoids/human/gasp/gasp_female1.ogg b/sound/mobs/humanoids/human/gasp/gasp_female1.ogg
index 55509359c85fc..23ca1bbc6133f 100644
Binary files a/sound/mobs/humanoids/human/gasp/gasp_female1.ogg and b/sound/mobs/humanoids/human/gasp/gasp_female1.ogg differ
diff --git a/sound/mobs/humanoids/human/gasp/gasp_female2.ogg b/sound/mobs/humanoids/human/gasp/gasp_female2.ogg
index 02b61deef29c4..e39e78b48c16c 100644
Binary files a/sound/mobs/humanoids/human/gasp/gasp_female2.ogg and b/sound/mobs/humanoids/human/gasp/gasp_female2.ogg differ
diff --git a/sound/mobs/humanoids/human/gasp/gasp_female3.ogg b/sound/mobs/humanoids/human/gasp/gasp_female3.ogg
index 48beb4ab30d7d..c8a9b5062a91e 100644
Binary files a/sound/mobs/humanoids/human/gasp/gasp_female3.ogg and b/sound/mobs/humanoids/human/gasp/gasp_female3.ogg differ
diff --git a/sound/mobs/humanoids/human/gasp/gasp_male1.ogg b/sound/mobs/humanoids/human/gasp/gasp_male1.ogg
index a2417066a1fdc..30353f4081798 100644
Binary files a/sound/mobs/humanoids/human/gasp/gasp_male1.ogg and b/sound/mobs/humanoids/human/gasp/gasp_male1.ogg differ
diff --git a/sound/mobs/humanoids/human/gasp/gasp_male2.ogg b/sound/mobs/humanoids/human/gasp/gasp_male2.ogg
index 84059f30c441b..e4bfce1680b35 100644
Binary files a/sound/mobs/humanoids/human/gasp/gasp_male2.ogg and b/sound/mobs/humanoids/human/gasp/gasp_male2.ogg differ
diff --git a/sound/mobs/humanoids/human/hiccup/sf_hiccup_male_01.ogg b/sound/mobs/humanoids/human/hiccup/sf_hiccup_male_01.ogg
index bdff5eb24b83a..811d7acdbfbfb 100644
Binary files a/sound/mobs/humanoids/human/hiccup/sf_hiccup_male_01.ogg and b/sound/mobs/humanoids/human/hiccup/sf_hiccup_male_01.ogg differ
diff --git a/sound/mobs/humanoids/human/knuckle_crack/knuckles.ogg b/sound/mobs/humanoids/human/knuckle_crack/knuckles.ogg
index b61a50fb613ab..8856e7a351b6b 100644
Binary files a/sound/mobs/humanoids/human/knuckle_crack/knuckles.ogg and b/sound/mobs/humanoids/human/knuckle_crack/knuckles.ogg differ
diff --git a/sound/mobs/humanoids/human/laugh/manlaugh1.ogg b/sound/mobs/humanoids/human/laugh/manlaugh1.ogg
index 957d7a652910d..4c61c15bb4f18 100644
Binary files a/sound/mobs/humanoids/human/laugh/manlaugh1.ogg and b/sound/mobs/humanoids/human/laugh/manlaugh1.ogg differ
diff --git a/sound/mobs/humanoids/human/laugh/manlaugh2.ogg b/sound/mobs/humanoids/human/laugh/manlaugh2.ogg
index fe6c0c9b7bf8b..41ae66695a5d2 100644
Binary files a/sound/mobs/humanoids/human/laugh/manlaugh2.ogg and b/sound/mobs/humanoids/human/laugh/manlaugh2.ogg differ
diff --git a/sound/mobs/humanoids/human/laugh/womanlaugh.ogg b/sound/mobs/humanoids/human/laugh/womanlaugh.ogg
index 1313bd445f27f..edb86f14f2912 100644
Binary files a/sound/mobs/humanoids/human/laugh/womanlaugh.ogg and b/sound/mobs/humanoids/human/laugh/womanlaugh.ogg differ
diff --git a/sound/mobs/humanoids/human/salute/salute.ogg b/sound/mobs/humanoids/human/salute/salute.ogg
index 76521a63540ec..680a3cd1ab516 100644
Binary files a/sound/mobs/humanoids/human/salute/salute.ogg and b/sound/mobs/humanoids/human/salute/salute.ogg differ
diff --git a/sound/mobs/humanoids/human/scream/femalescream_1.ogg b/sound/mobs/humanoids/human/scream/femalescream_1.ogg
index c0f80a1408d74..05be7a1860e7e 100644
Binary files a/sound/mobs/humanoids/human/scream/femalescream_1.ogg and b/sound/mobs/humanoids/human/scream/femalescream_1.ogg differ
diff --git a/sound/mobs/humanoids/human/scream/femalescream_2.ogg b/sound/mobs/humanoids/human/scream/femalescream_2.ogg
index 978a236dd1f21..0d23f5376dfbe 100644
Binary files a/sound/mobs/humanoids/human/scream/femalescream_2.ogg and b/sound/mobs/humanoids/human/scream/femalescream_2.ogg differ
diff --git a/sound/mobs/humanoids/human/scream/femalescream_3.ogg b/sound/mobs/humanoids/human/scream/femalescream_3.ogg
index 30e4150a5646b..246faa8926d9a 100644
Binary files a/sound/mobs/humanoids/human/scream/femalescream_3.ogg and b/sound/mobs/humanoids/human/scream/femalescream_3.ogg differ
diff --git a/sound/mobs/humanoids/human/scream/femalescream_4.ogg b/sound/mobs/humanoids/human/scream/femalescream_4.ogg
index bb73a1ef5d10f..d5d60b970e362 100644
Binary files a/sound/mobs/humanoids/human/scream/femalescream_4.ogg and b/sound/mobs/humanoids/human/scream/femalescream_4.ogg differ
diff --git a/sound/mobs/humanoids/human/scream/femalescream_5.ogg b/sound/mobs/humanoids/human/scream/femalescream_5.ogg
index 96a08297b2b05..6c10e23cf3909 100644
Binary files a/sound/mobs/humanoids/human/scream/femalescream_5.ogg and b/sound/mobs/humanoids/human/scream/femalescream_5.ogg differ
diff --git a/sound/mobs/humanoids/human/scream/malescream_1.ogg b/sound/mobs/humanoids/human/scream/malescream_1.ogg
index ee9005b89222e..261172e214634 100644
Binary files a/sound/mobs/humanoids/human/scream/malescream_1.ogg and b/sound/mobs/humanoids/human/scream/malescream_1.ogg differ
diff --git a/sound/mobs/humanoids/human/scream/malescream_2.ogg b/sound/mobs/humanoids/human/scream/malescream_2.ogg
index 989b612ab153b..e9c9e77e60a40 100644
Binary files a/sound/mobs/humanoids/human/scream/malescream_2.ogg and b/sound/mobs/humanoids/human/scream/malescream_2.ogg differ
diff --git a/sound/mobs/humanoids/human/scream/malescream_3.ogg b/sound/mobs/humanoids/human/scream/malescream_3.ogg
index 902db1c132cb1..c2d9cbd5f0073 100644
Binary files a/sound/mobs/humanoids/human/scream/malescream_3.ogg and b/sound/mobs/humanoids/human/scream/malescream_3.ogg differ
diff --git a/sound/mobs/humanoids/human/scream/malescream_4.ogg b/sound/mobs/humanoids/human/scream/malescream_4.ogg
index 62f787d4a7b5b..7edf7daf96c1c 100644
Binary files a/sound/mobs/humanoids/human/scream/malescream_4.ogg and b/sound/mobs/humanoids/human/scream/malescream_4.ogg differ
diff --git a/sound/mobs/humanoids/human/scream/malescream_5.ogg b/sound/mobs/humanoids/human/scream/malescream_5.ogg
index 2aec2c7149cfd..2614f8c2a51a8 100644
Binary files a/sound/mobs/humanoids/human/scream/malescream_5.ogg and b/sound/mobs/humanoids/human/scream/malescream_5.ogg differ
diff --git a/sound/mobs/humanoids/human/scream/malescream_6.ogg b/sound/mobs/humanoids/human/scream/malescream_6.ogg
index bdf732c2212b5..64d8a3537a4be 100644
Binary files a/sound/mobs/humanoids/human/scream/malescream_6.ogg and b/sound/mobs/humanoids/human/scream/malescream_6.ogg differ
diff --git a/sound/mobs/humanoids/human/scream/wilhelm_scream.ogg b/sound/mobs/humanoids/human/scream/wilhelm_scream.ogg
index 9a81c47f37975..9f272e9dea54f 100644
Binary files a/sound/mobs/humanoids/human/scream/wilhelm_scream.ogg and b/sound/mobs/humanoids/human/scream/wilhelm_scream.ogg differ
diff --git a/sound/mobs/humanoids/human/sigh/attribution.txt b/sound/mobs/humanoids/human/sigh/attribution.txt
new file mode 100644
index 0000000000000..c25e9bfa4057f
--- /dev/null
+++ b/sound/mobs/humanoids/human/sigh/attribution.txt
@@ -0,0 +1,2 @@
+male sighs voiced by sadboysuss, license: CC-BY-SA 3.0
+female sighs voiced by redemptionarc, license: CC-BY-SA 3.0
diff --git a/sound/mobs/humanoids/human/sigh/female_sigh.ogg b/sound/mobs/humanoids/human/sigh/female_sigh.ogg
deleted file mode 100644
index 3c338a868baf5..0000000000000
Binary files a/sound/mobs/humanoids/human/sigh/female_sigh.ogg and /dev/null differ
diff --git a/sound/mobs/humanoids/human/sigh/female_sigh1.ogg b/sound/mobs/humanoids/human/sigh/female_sigh1.ogg
new file mode 100644
index 0000000000000..a2eee87932f53
Binary files /dev/null and b/sound/mobs/humanoids/human/sigh/female_sigh1.ogg differ
diff --git a/sound/mobs/humanoids/human/sigh/female_sigh2.ogg b/sound/mobs/humanoids/human/sigh/female_sigh2.ogg
new file mode 100644
index 0000000000000..14462bca91479
Binary files /dev/null and b/sound/mobs/humanoids/human/sigh/female_sigh2.ogg differ
diff --git a/sound/mobs/humanoids/human/sigh/female_sigh3.ogg b/sound/mobs/humanoids/human/sigh/female_sigh3.ogg
new file mode 100644
index 0000000000000..590b1cb49e7ce
Binary files /dev/null and b/sound/mobs/humanoids/human/sigh/female_sigh3.ogg differ
diff --git a/sound/mobs/humanoids/human/sigh/male_sigh.ogg b/sound/mobs/humanoids/human/sigh/male_sigh.ogg
deleted file mode 100644
index ec61683d68e93..0000000000000
Binary files a/sound/mobs/humanoids/human/sigh/male_sigh.ogg and /dev/null differ
diff --git a/sound/mobs/humanoids/human/sigh/male_sigh1.ogg b/sound/mobs/humanoids/human/sigh/male_sigh1.ogg
new file mode 100644
index 0000000000000..7cd64cff81a4b
Binary files /dev/null and b/sound/mobs/humanoids/human/sigh/male_sigh1.ogg differ
diff --git a/sound/mobs/humanoids/human/sigh/male_sigh2.ogg b/sound/mobs/humanoids/human/sigh/male_sigh2.ogg
new file mode 100644
index 0000000000000..5125ff8af9843
Binary files /dev/null and b/sound/mobs/humanoids/human/sigh/male_sigh2.ogg differ
diff --git a/sound/mobs/humanoids/human/sigh/male_sigh3.ogg b/sound/mobs/humanoids/human/sigh/male_sigh3.ogg
new file mode 100644
index 0000000000000..1139003d22e71
Binary files /dev/null and b/sound/mobs/humanoids/human/sigh/male_sigh3.ogg differ
diff --git a/sound/mobs/humanoids/human/snap/fingersnap1.ogg b/sound/mobs/humanoids/human/snap/fingersnap1.ogg
index 2d5d255be1cec..94a78e99e7b9a 100644
Binary files a/sound/mobs/humanoids/human/snap/fingersnap1.ogg and b/sound/mobs/humanoids/human/snap/fingersnap1.ogg differ
diff --git a/sound/mobs/humanoids/human/snap/fingersnap2.ogg b/sound/mobs/humanoids/human/snap/fingersnap2.ogg
index d11f2f7a74155..422a12e0adc98 100644
Binary files a/sound/mobs/humanoids/human/snap/fingersnap2.ogg and b/sound/mobs/humanoids/human/snap/fingersnap2.ogg differ
diff --git a/sound/mobs/humanoids/human/sneeze/female_sneeze1.ogg b/sound/mobs/humanoids/human/sneeze/female_sneeze1.ogg
index 8fe020a8c7e8a..12d39de30ca23 100644
Binary files a/sound/mobs/humanoids/human/sneeze/female_sneeze1.ogg and b/sound/mobs/humanoids/human/sneeze/female_sneeze1.ogg differ
diff --git a/sound/mobs/humanoids/human/sneeze/male_sneeze1.ogg b/sound/mobs/humanoids/human/sneeze/male_sneeze1.ogg
index 1c7e8f42534d8..fa75d4dfa4df1 100644
Binary files a/sound/mobs/humanoids/human/sneeze/male_sneeze1.ogg and b/sound/mobs/humanoids/human/sneeze/male_sneeze1.ogg differ
diff --git a/sound/mobs/humanoids/human/sniff/female_sniff.ogg b/sound/mobs/humanoids/human/sniff/female_sniff.ogg
index edc75248790de..459cba1d1b18c 100644
Binary files a/sound/mobs/humanoids/human/sniff/female_sniff.ogg and b/sound/mobs/humanoids/human/sniff/female_sniff.ogg differ
diff --git a/sound/mobs/humanoids/human/sniff/male_sniff.ogg b/sound/mobs/humanoids/human/sniff/male_sniff.ogg
index b940505c97a8a..3bac76fb5c2d2 100644
Binary files a/sound/mobs/humanoids/human/sniff/male_sniff.ogg and b/sound/mobs/humanoids/human/sniff/male_sniff.ogg differ
diff --git a/sound/mobs/humanoids/human/snore/snore_female1.ogg b/sound/mobs/humanoids/human/snore/snore_female1.ogg
index 51cfeb0424fa6..98ede1e4c091b 100644
Binary files a/sound/mobs/humanoids/human/snore/snore_female1.ogg and b/sound/mobs/humanoids/human/snore/snore_female1.ogg differ
diff --git a/sound/mobs/humanoids/human/snore/snore_female2.ogg b/sound/mobs/humanoids/human/snore/snore_female2.ogg
index c5a9b44a4b896..207f74c7d8d75 100644
Binary files a/sound/mobs/humanoids/human/snore/snore_female2.ogg and b/sound/mobs/humanoids/human/snore/snore_female2.ogg differ
diff --git a/sound/mobs/humanoids/human/snore/snore_female3.ogg b/sound/mobs/humanoids/human/snore/snore_female3.ogg
index 68adb30fb1e29..1d61fcdd22daa 100644
Binary files a/sound/mobs/humanoids/human/snore/snore_female3.ogg and b/sound/mobs/humanoids/human/snore/snore_female3.ogg differ
diff --git a/sound/mobs/humanoids/human/snore/snore_male1.ogg b/sound/mobs/humanoids/human/snore/snore_male1.ogg
index 3c9dfe97be8e2..a904f8dea4ca3 100644
Binary files a/sound/mobs/humanoids/human/snore/snore_male1.ogg and b/sound/mobs/humanoids/human/snore/snore_male1.ogg differ
diff --git a/sound/mobs/humanoids/human/snore/snore_male2.ogg b/sound/mobs/humanoids/human/snore/snore_male2.ogg
index de5993e518799..148f05a2b1a03 100644
Binary files a/sound/mobs/humanoids/human/snore/snore_male2.ogg and b/sound/mobs/humanoids/human/snore/snore_male2.ogg differ
diff --git a/sound/mobs/humanoids/human/snore/snore_male3.ogg b/sound/mobs/humanoids/human/snore/snore_male3.ogg
index cd63a7fb4cfd0..d38b1688f2679 100644
Binary files a/sound/mobs/humanoids/human/snore/snore_male3.ogg and b/sound/mobs/humanoids/human/snore/snore_male3.ogg differ
diff --git a/sound/mobs/humanoids/human/snore/snore_male4.ogg b/sound/mobs/humanoids/human/snore/snore_male4.ogg
index fce8320a6c7e2..ebee50efa35b6 100644
Binary files a/sound/mobs/humanoids/human/snore/snore_male4.ogg and b/sound/mobs/humanoids/human/snore/snore_male4.ogg differ
diff --git a/sound/mobs/humanoids/human/snore/snore_male5.ogg b/sound/mobs/humanoids/human/snore/snore_male5.ogg
index 6773add51eccb..c38c3c5001eb7 100644
Binary files a/sound/mobs/humanoids/human/snore/snore_male5.ogg and b/sound/mobs/humanoids/human/snore/snore_male5.ogg differ
diff --git a/sound/mobs/humanoids/human/snore/snore_mimimi1.ogg b/sound/mobs/humanoids/human/snore/snore_mimimi1.ogg
index 31f84ec2a14aa..ea71d0e29f352 100644
Binary files a/sound/mobs/humanoids/human/snore/snore_mimimi1.ogg and b/sound/mobs/humanoids/human/snore/snore_mimimi1.ogg differ
diff --git a/sound/mobs/humanoids/human/snore/snore_mimimi2.ogg b/sound/mobs/humanoids/human/snore/snore_mimimi2.ogg
index 21d4f9f07d4f2..116a358987d59 100644
Binary files a/sound/mobs/humanoids/human/snore/snore_mimimi2.ogg and b/sound/mobs/humanoids/human/snore/snore_mimimi2.ogg differ
diff --git a/sound/mobs/humanoids/human/whistle/whistle1.ogg b/sound/mobs/humanoids/human/whistle/whistle1.ogg
index 4109260659723..d254359aaeb23 100644
Binary files a/sound/mobs/humanoids/human/whistle/whistle1.ogg and b/sound/mobs/humanoids/human/whistle/whistle1.ogg differ
diff --git a/sound/mobs/humanoids/lizard/deathsound.ogg b/sound/mobs/humanoids/lizard/deathsound.ogg
index 6fe30f0f1f9f2..d9f71183e9840 100644
Binary files a/sound/mobs/humanoids/lizard/deathsound.ogg and b/sound/mobs/humanoids/lizard/deathsound.ogg differ
diff --git a/sound/mobs/humanoids/lizard/lizard_laugh1.ogg b/sound/mobs/humanoids/lizard/lizard_laugh1.ogg
index b2c02e6d2fcb0..f0afd5600910b 100644
Binary files a/sound/mobs/humanoids/lizard/lizard_laugh1.ogg and b/sound/mobs/humanoids/lizard/lizard_laugh1.ogg differ
diff --git a/sound/mobs/humanoids/lizard/lizard_scream_1.ogg b/sound/mobs/humanoids/lizard/lizard_scream_1.ogg
index 811ed5d28d755..4ae25652d243b 100644
Binary files a/sound/mobs/humanoids/lizard/lizard_scream_1.ogg and b/sound/mobs/humanoids/lizard/lizard_scream_1.ogg differ
diff --git a/sound/mobs/humanoids/lizard/lizard_scream_2.ogg b/sound/mobs/humanoids/lizard/lizard_scream_2.ogg
index 549b3cb21ea36..dcfc0563f84e5 100644
Binary files a/sound/mobs/humanoids/lizard/lizard_scream_2.ogg and b/sound/mobs/humanoids/lizard/lizard_scream_2.ogg differ
diff --git a/sound/mobs/humanoids/lizard/lizard_scream_3.ogg b/sound/mobs/humanoids/lizard/lizard_scream_3.ogg
index 3085e91af2004..8cea9f9c5f505 100644
Binary files a/sound/mobs/humanoids/lizard/lizard_scream_3.ogg and b/sound/mobs/humanoids/lizard/lizard_scream_3.ogg differ
diff --git a/sound/mobs/humanoids/moth/moth_death.ogg b/sound/mobs/humanoids/moth/moth_death.ogg
index df23cfa472ac1..ef5bae8c13796 100644
Binary files a/sound/mobs/humanoids/moth/moth_death.ogg and b/sound/mobs/humanoids/moth/moth_death.ogg differ
diff --git a/sound/mobs/humanoids/moth/moth_flutter.ogg b/sound/mobs/humanoids/moth/moth_flutter.ogg
index f5737d522ca20..b7cc9855a2089 100644
Binary files a/sound/mobs/humanoids/moth/moth_flutter.ogg and b/sound/mobs/humanoids/moth/moth_flutter.ogg differ
diff --git a/sound/mobs/humanoids/moth/moth_laugh1.ogg b/sound/mobs/humanoids/moth/moth_laugh1.ogg
index 391d6c5aefe2c..4fe8eb73d9bcb 100644
Binary files a/sound/mobs/humanoids/moth/moth_laugh1.ogg and b/sound/mobs/humanoids/moth/moth_laugh1.ogg differ
diff --git a/sound/mobs/humanoids/moth/scream_moth.ogg b/sound/mobs/humanoids/moth/scream_moth.ogg
index 482086fb630d3..e3cc5b0c9cd15 100644
Binary files a/sound/mobs/humanoids/moth/scream_moth.ogg and b/sound/mobs/humanoids/moth/scream_moth.ogg differ
diff --git a/sound/mobs/humanoids/plasmaman/plasmeme_scream_1.ogg b/sound/mobs/humanoids/plasmaman/plasmeme_scream_1.ogg
index 4cfc6ae65e6f0..a4bf14ff83004 100644
Binary files a/sound/mobs/humanoids/plasmaman/plasmeme_scream_1.ogg and b/sound/mobs/humanoids/plasmaman/plasmeme_scream_1.ogg differ
diff --git a/sound/mobs/humanoids/plasmaman/plasmeme_scream_2.ogg b/sound/mobs/humanoids/plasmaman/plasmeme_scream_2.ogg
index 00ae761a239e8..0f540d5418e11 100644
Binary files a/sound/mobs/humanoids/plasmaman/plasmeme_scream_2.ogg and b/sound/mobs/humanoids/plasmaman/plasmeme_scream_2.ogg differ
diff --git a/sound/mobs/humanoids/plasmaman/plasmeme_scream_3.ogg b/sound/mobs/humanoids/plasmaman/plasmeme_scream_3.ogg
index 3868149c8e56d..2c97f169aff22 100644
Binary files a/sound/mobs/humanoids/plasmaman/plasmeme_scream_3.ogg and b/sound/mobs/humanoids/plasmaman/plasmeme_scream_3.ogg differ
diff --git a/sound/mobs/non-humanoids/alien/alien_eat.ogg b/sound/mobs/non-humanoids/alien/alien_eat.ogg
index 55351fbeb64b4..b4543c48a9218 100644
Binary files a/sound/mobs/non-humanoids/alien/alien_eat.ogg and b/sound/mobs/non-humanoids/alien/alien_eat.ogg differ
diff --git a/sound/mobs/non-humanoids/alien/alien_explode.ogg b/sound/mobs/non-humanoids/alien/alien_explode.ogg
index 4f0991ab5b40d..f8b6879376aed 100644
Binary files a/sound/mobs/non-humanoids/alien/alien_explode.ogg and b/sound/mobs/non-humanoids/alien/alien_explode.ogg differ
diff --git a/sound/mobs/non-humanoids/alien/alien_organ_cut.ogg b/sound/mobs/non-humanoids/alien/alien_organ_cut.ogg
index 33a699fa2ea51..4ae935cded345 100644
Binary files a/sound/mobs/non-humanoids/alien/alien_organ_cut.ogg and b/sound/mobs/non-humanoids/alien/alien_organ_cut.ogg differ
diff --git a/sound/mobs/non-humanoids/alien/alien_york.ogg b/sound/mobs/non-humanoids/alien/alien_york.ogg
index a8e88eef28f19..6d7f00c66f49f 100644
Binary files a/sound/mobs/non-humanoids/alien/alien_york.ogg and b/sound/mobs/non-humanoids/alien/alien_york.ogg differ
diff --git a/sound/mobs/non-humanoids/bee/bee.ogg b/sound/mobs/non-humanoids/bee/bee.ogg
index d690f1f771aec..9af2c0ee2d3b5 100644
Binary files a/sound/mobs/non-humanoids/bee/bee.ogg and b/sound/mobs/non-humanoids/bee/bee.ogg differ
diff --git a/sound/mobs/non-humanoids/bee/bee_swarm.ogg b/sound/mobs/non-humanoids/bee/bee_swarm.ogg
index 7cf5a5a3d9f2e..c4302fcf621dd 100644
Binary files a/sound/mobs/non-humanoids/bee/bee_swarm.ogg and b/sound/mobs/non-humanoids/bee/bee_swarm.ogg differ
diff --git a/sound/mobs/non-humanoids/beepsky/beepskyspinsabre.ogg b/sound/mobs/non-humanoids/beepsky/beepskyspinsabre.ogg
index 56aaa3c1bb193..337530c1d3e6a 100644
Binary files a/sound/mobs/non-humanoids/beepsky/beepskyspinsabre.ogg and b/sound/mobs/non-humanoids/beepsky/beepskyspinsabre.ogg differ
diff --git a/sound/mobs/non-humanoids/beepsky/creep.ogg b/sound/mobs/non-humanoids/beepsky/creep.ogg
index b59e6604ba269..9dc39615fca05 100644
Binary files a/sound/mobs/non-humanoids/beepsky/creep.ogg and b/sound/mobs/non-humanoids/beepsky/creep.ogg differ
diff --git a/sound/mobs/non-humanoids/beepsky/criminal.ogg b/sound/mobs/non-humanoids/beepsky/criminal.ogg
index 2275a9f7d1e45..01f2e022c4fba 100644
Binary files a/sound/mobs/non-humanoids/beepsky/criminal.ogg and b/sound/mobs/non-humanoids/beepsky/criminal.ogg differ
diff --git a/sound/mobs/non-humanoids/beepsky/freeze.ogg b/sound/mobs/non-humanoids/beepsky/freeze.ogg
index f0078b74d89a5..75544262f311f 100644
Binary files a/sound/mobs/non-humanoids/beepsky/freeze.ogg and b/sound/mobs/non-humanoids/beepsky/freeze.ogg differ
diff --git a/sound/mobs/non-humanoids/beepsky/god.ogg b/sound/mobs/non-humanoids/beepsky/god.ogg
index bf67fda9186d7..869414e50ea15 100644
Binary files a/sound/mobs/non-humanoids/beepsky/god.ogg and b/sound/mobs/non-humanoids/beepsky/god.ogg differ
diff --git a/sound/mobs/non-humanoids/beepsky/iamthelaw.ogg b/sound/mobs/non-humanoids/beepsky/iamthelaw.ogg
index f5d0a1f091e8a..adc4f618c80b9 100644
Binary files a/sound/mobs/non-humanoids/beepsky/iamthelaw.ogg and b/sound/mobs/non-humanoids/beepsky/iamthelaw.ogg differ
diff --git a/sound/mobs/non-humanoids/beepsky/insult.ogg b/sound/mobs/non-humanoids/beepsky/insult.ogg
index d1302afd5beb2..6a295aa9460c1 100644
Binary files a/sound/mobs/non-humanoids/beepsky/insult.ogg and b/sound/mobs/non-humanoids/beepsky/insult.ogg differ
diff --git a/sound/mobs/non-humanoids/beepsky/justice.ogg b/sound/mobs/non-humanoids/beepsky/justice.ogg
index c45952d4c2c47..423d6c79b8305 100644
Binary files a/sound/mobs/non-humanoids/beepsky/justice.ogg and b/sound/mobs/non-humanoids/beepsky/justice.ogg differ
diff --git a/sound/mobs/non-humanoids/beepsky/radio.ogg b/sound/mobs/non-humanoids/beepsky/radio.ogg
index d3bc86d64bd9c..1202cda6ebd95 100644
Binary files a/sound/mobs/non-humanoids/beepsky/radio.ogg and b/sound/mobs/non-humanoids/beepsky/radio.ogg differ
diff --git a/sound/mobs/non-humanoids/beepsky/secureday.ogg b/sound/mobs/non-humanoids/beepsky/secureday.ogg
index 2ad486b2ef08e..07c2c0391c883 100644
Binary files a/sound/mobs/non-humanoids/beepsky/secureday.ogg and b/sound/mobs/non-humanoids/beepsky/secureday.ogg differ
diff --git a/sound/mobs/non-humanoids/bileworm/bileworm_spit.ogg b/sound/mobs/non-humanoids/bileworm/bileworm_spit.ogg
index a1581dc252897..641d14adc3c2c 100644
Binary files a/sound/mobs/non-humanoids/bileworm/bileworm_spit.ogg and b/sound/mobs/non-humanoids/bileworm/bileworm_spit.ogg differ
diff --git a/sound/mobs/non-humanoids/brimdemon/brimdemon.ogg b/sound/mobs/non-humanoids/brimdemon/brimdemon.ogg
index 68a3f6afed7d0..ebe733c07299f 100644
Binary files a/sound/mobs/non-humanoids/brimdemon/brimdemon.ogg and b/sound/mobs/non-humanoids/brimdemon/brimdemon.ogg differ
diff --git a/sound/mobs/non-humanoids/brimdemon/brimdemon_crush.ogg b/sound/mobs/non-humanoids/brimdemon/brimdemon_crush.ogg
index e25523fc34d09..7f087d71d3a03 100644
Binary files a/sound/mobs/non-humanoids/brimdemon/brimdemon_crush.ogg and b/sound/mobs/non-humanoids/brimdemon/brimdemon_crush.ogg differ
diff --git a/sound/mobs/non-humanoids/cat/cat_meow1.ogg b/sound/mobs/non-humanoids/cat/cat_meow1.ogg
index a1889e18fbf76..0119332f1f156 100644
Binary files a/sound/mobs/non-humanoids/cat/cat_meow1.ogg and b/sound/mobs/non-humanoids/cat/cat_meow1.ogg differ
diff --git a/sound/mobs/non-humanoids/cat/cat_meow2.ogg b/sound/mobs/non-humanoids/cat/cat_meow2.ogg
index 919a071a8719f..70d0dfa4ea0a4 100644
Binary files a/sound/mobs/non-humanoids/cat/cat_meow2.ogg and b/sound/mobs/non-humanoids/cat/cat_meow2.ogg differ
diff --git a/sound/mobs/non-humanoids/cat/cat_meow3.ogg b/sound/mobs/non-humanoids/cat/cat_meow3.ogg
index dc8116109969b..17d4dbc78342f 100644
Binary files a/sound/mobs/non-humanoids/cat/cat_meow3.ogg and b/sound/mobs/non-humanoids/cat/cat_meow3.ogg differ
diff --git a/sound/mobs/non-humanoids/cat/cat_purr1.ogg b/sound/mobs/non-humanoids/cat/cat_purr1.ogg
index c90d78282bfb0..4f9c523fdd258 100644
Binary files a/sound/mobs/non-humanoids/cat/cat_purr1.ogg and b/sound/mobs/non-humanoids/cat/cat_purr1.ogg differ
diff --git a/sound/mobs/non-humanoids/cat/cat_purr2.ogg b/sound/mobs/non-humanoids/cat/cat_purr2.ogg
index 0b4aa509e91ca..a5fe57faa3a79 100644
Binary files a/sound/mobs/non-humanoids/cat/cat_purr2.ogg and b/sound/mobs/non-humanoids/cat/cat_purr2.ogg differ
diff --git a/sound/mobs/non-humanoids/cat/cat_purr3.ogg b/sound/mobs/non-humanoids/cat/cat_purr3.ogg
index 5a59adea58685..62e1d63bfcbb5 100644
Binary files a/sound/mobs/non-humanoids/cat/cat_purr3.ogg and b/sound/mobs/non-humanoids/cat/cat_purr3.ogg differ
diff --git a/sound/mobs/non-humanoids/cat/cat_purr4.ogg b/sound/mobs/non-humanoids/cat/cat_purr4.ogg
index 8ad7a05301834..e9a332eb7be72 100644
Binary files a/sound/mobs/non-humanoids/cat/cat_purr4.ogg and b/sound/mobs/non-humanoids/cat/cat_purr4.ogg differ
diff --git a/sound/mobs/non-humanoids/cat/oranges_meow1.ogg b/sound/mobs/non-humanoids/cat/oranges_meow1.ogg
index 19c74143495f6..34e58d52a30b8 100644
Binary files a/sound/mobs/non-humanoids/cat/oranges_meow1.ogg and b/sound/mobs/non-humanoids/cat/oranges_meow1.ogg differ
diff --git a/sound/mobs/non-humanoids/chicken/bagawk.ogg b/sound/mobs/non-humanoids/chicken/bagawk.ogg
index bfdce2da4894b..c275c4cbbc9c9 100644
Binary files a/sound/mobs/non-humanoids/chicken/bagawk.ogg and b/sound/mobs/non-humanoids/chicken/bagawk.ogg differ
diff --git a/sound/mobs/non-humanoids/chicken/chick_peep.ogg b/sound/mobs/non-humanoids/chicken/chick_peep.ogg
index 1e84d1d765fd8..791246171a688 100644
Binary files a/sound/mobs/non-humanoids/chicken/chick_peep.ogg and b/sound/mobs/non-humanoids/chicken/chick_peep.ogg differ
diff --git a/sound/mobs/non-humanoids/chicken/clucks.ogg b/sound/mobs/non-humanoids/chicken/clucks.ogg
index 176f46f866f04..e59afd424d814 100644
Binary files a/sound/mobs/non-humanoids/chicken/clucks.ogg and b/sound/mobs/non-humanoids/chicken/clucks.ogg differ
diff --git a/sound/mobs/non-humanoids/clown/clownana_rustle.ogg b/sound/mobs/non-humanoids/clown/clownana_rustle.ogg
index a5e98686c4c6e..a5232062aebc1 100644
Binary files a/sound/mobs/non-humanoids/clown/clownana_rustle.ogg and b/sound/mobs/non-humanoids/clown/clownana_rustle.ogg differ
diff --git a/sound/mobs/non-humanoids/clown/hehe.ogg b/sound/mobs/non-humanoids/clown/hehe.ogg
index 11c6b59f7fe9d..aa3ce200f0e72 100644
Binary files a/sound/mobs/non-humanoids/clown/hehe.ogg and b/sound/mobs/non-humanoids/clown/hehe.ogg differ
diff --git a/sound/mobs/non-humanoids/clown/hohoho.ogg b/sound/mobs/non-humanoids/clown/hohoho.ogg
index 4efe059a13b0c..d84225bdd6c22 100644
Binary files a/sound/mobs/non-humanoids/clown/hohoho.ogg and b/sound/mobs/non-humanoids/clown/hohoho.ogg differ
diff --git a/sound/mobs/non-humanoids/cow/cow.ogg b/sound/mobs/non-humanoids/cow/cow.ogg
index c3143c8dd442d..23d44e8149633 100644
Binary files a/sound/mobs/non-humanoids/cow/cow.ogg and b/sound/mobs/non-humanoids/cow/cow.ogg differ
diff --git a/sound/mobs/non-humanoids/crab/claw_click.ogg b/sound/mobs/non-humanoids/crab/claw_click.ogg
index 965b4c3fa9f5a..0c1cb486340b3 100644
Binary files a/sound/mobs/non-humanoids/crab/claw_click.ogg and b/sound/mobs/non-humanoids/crab/claw_click.ogg differ
diff --git a/sound/mobs/non-humanoids/cyborg/borg_deathsound.ogg b/sound/mobs/non-humanoids/cyborg/borg_deathsound.ogg
index bb11022abec2d..7bb900cb2f629 100644
Binary files a/sound/mobs/non-humanoids/cyborg/borg_deathsound.ogg and b/sound/mobs/non-humanoids/cyborg/borg_deathsound.ogg differ
diff --git a/sound/mobs/non-humanoids/cyborg/harmalarm.ogg b/sound/mobs/non-humanoids/cyborg/harmalarm.ogg
index b9107f6e44d34..d8c4d15b48ccb 100644
Binary files a/sound/mobs/non-humanoids/cyborg/harmalarm.ogg and b/sound/mobs/non-humanoids/cyborg/harmalarm.ogg differ
diff --git a/sound/mobs/non-humanoids/cyborg/liveagain.ogg b/sound/mobs/non-humanoids/cyborg/liveagain.ogg
index 20619f99fceea..5373e2ae664dd 100644
Binary files a/sound/mobs/non-humanoids/cyborg/liveagain.ogg and b/sound/mobs/non-humanoids/cyborg/liveagain.ogg differ
diff --git a/sound/mobs/non-humanoids/cyborg/wash1.ogg b/sound/mobs/non-humanoids/cyborg/wash1.ogg
index 8bbd1d54e5c59..f886a36bd34a8 100644
Binary files a/sound/mobs/non-humanoids/cyborg/wash1.ogg and b/sound/mobs/non-humanoids/cyborg/wash1.ogg differ
diff --git a/sound/mobs/non-humanoids/cyborg/wash2.ogg b/sound/mobs/non-humanoids/cyborg/wash2.ogg
index 6e950e4132b77..ea015a06adf0c 100644
Binary files a/sound/mobs/non-humanoids/cyborg/wash2.ogg and b/sound/mobs/non-humanoids/cyborg/wash2.ogg differ
diff --git a/sound/mobs/non-humanoids/cyborg/wash_end.ogg b/sound/mobs/non-humanoids/cyborg/wash_end.ogg
index 57b2ce1838f5d..7631f1d09890c 100644
Binary files a/sound/mobs/non-humanoids/cyborg/wash_end.ogg and b/sound/mobs/non-humanoids/cyborg/wash_end.ogg differ
diff --git a/sound/mobs/non-humanoids/cyborg/wash_start.ogg b/sound/mobs/non-humanoids/cyborg/wash_start.ogg
index c6faf4126d1cb..f358cd6842988 100644
Binary files a/sound/mobs/non-humanoids/cyborg/wash_start.ogg and b/sound/mobs/non-humanoids/cyborg/wash_start.ogg differ
diff --git a/sound/mobs/non-humanoids/dog/growl1.ogg b/sound/mobs/non-humanoids/dog/growl1.ogg
index 06ec30f12f0b4..d0c37ee8fbc6d 100644
Binary files a/sound/mobs/non-humanoids/dog/growl1.ogg and b/sound/mobs/non-humanoids/dog/growl1.ogg differ
diff --git a/sound/mobs/non-humanoids/dog/growl2.ogg b/sound/mobs/non-humanoids/dog/growl2.ogg
index 804bd8150aa16..c00506fec18e7 100644
Binary files a/sound/mobs/non-humanoids/dog/growl2.ogg and b/sound/mobs/non-humanoids/dog/growl2.ogg differ
diff --git a/sound/mobs/non-humanoids/ed209/ed209_20sec.ogg b/sound/mobs/non-humanoids/ed209/ed209_20sec.ogg
index aef46abb3e6da..b098f48ce5e5b 100644
Binary files a/sound/mobs/non-humanoids/ed209/ed209_20sec.ogg and b/sound/mobs/non-humanoids/ed209/ed209_20sec.ogg differ
diff --git a/sound/mobs/non-humanoids/ed209/edplaceholder.ogg b/sound/mobs/non-humanoids/ed209/edplaceholder.ogg
index b5fd1170dcfba..e8ca64bd24c19 100644
Binary files a/sound/mobs/non-humanoids/ed209/edplaceholder.ogg and b/sound/mobs/non-humanoids/ed209/edplaceholder.ogg differ
diff --git a/sound/mobs/non-humanoids/firebot/candle_tip.ogg b/sound/mobs/non-humanoids/firebot/candle_tip.ogg
index 0f29f18e3f969..a58c5769121c1 100644
Binary files a/sound/mobs/non-humanoids/firebot/candle_tip.ogg and b/sound/mobs/non-humanoids/firebot/candle_tip.ogg differ
diff --git a/sound/mobs/non-humanoids/firebot/detected.ogg b/sound/mobs/non-humanoids/firebot/detected.ogg
index 85d554df42fa9..696eb1e7dd8cf 100644
Binary files a/sound/mobs/non-humanoids/firebot/detected.ogg and b/sound/mobs/non-humanoids/firebot/detected.ogg differ
diff --git a/sound/mobs/non-humanoids/firebot/electric_fire_tip.ogg b/sound/mobs/non-humanoids/firebot/electric_fire_tip.ogg
index 29910024b1995..61bb28928fb3d 100644
Binary files a/sound/mobs/non-humanoids/firebot/electric_fire_tip.ogg and b/sound/mobs/non-humanoids/firebot/electric_fire_tip.ogg differ
diff --git a/sound/mobs/non-humanoids/firebot/extinguishing.ogg b/sound/mobs/non-humanoids/firebot/extinguishing.ogg
index 997210b2d3bb7..dffa5e2db07b8 100644
Binary files a/sound/mobs/non-humanoids/firebot/extinguishing.ogg and b/sound/mobs/non-humanoids/firebot/extinguishing.ogg differ
diff --git a/sound/mobs/non-humanoids/firebot/gasoline_tip.ogg b/sound/mobs/non-humanoids/firebot/gasoline_tip.ogg
index 838c0d267e65e..9046a328c455e 100644
Binary files a/sound/mobs/non-humanoids/firebot/gasoline_tip.ogg and b/sound/mobs/non-humanoids/firebot/gasoline_tip.ogg differ
diff --git a/sound/mobs/non-humanoids/firebot/keepitcool.ogg b/sound/mobs/non-humanoids/firebot/keepitcool.ogg
index 794a557dcc523..767b8d50442ac 100644
Binary files a/sound/mobs/non-humanoids/firebot/keepitcool.ogg and b/sound/mobs/non-humanoids/firebot/keepitcool.ogg differ
diff --git a/sound/mobs/non-humanoids/firebot/nofires.ogg b/sound/mobs/non-humanoids/firebot/nofires.ogg
index 83970a8ba70b9..93c6d3c691c1d 100644
Binary files a/sound/mobs/non-humanoids/firebot/nofires.ogg and b/sound/mobs/non-humanoids/firebot/nofires.ogg differ
diff --git a/sound/mobs/non-humanoids/firebot/onlyyou.ogg b/sound/mobs/non-humanoids/firebot/onlyyou.ogg
index 4ca620b1178fd..2fbac7f3a2ff6 100644
Binary files a/sound/mobs/non-humanoids/firebot/onlyyou.ogg and b/sound/mobs/non-humanoids/firebot/onlyyou.ogg differ
diff --git a/sound/mobs/non-humanoids/firebot/stopdropnroll.ogg b/sound/mobs/non-humanoids/firebot/stopdropnroll.ogg
index 1aaeb55f93e35..d61cef29a2cd7 100644
Binary files a/sound/mobs/non-humanoids/firebot/stopdropnroll.ogg and b/sound/mobs/non-humanoids/firebot/stopdropnroll.ogg differ
diff --git a/sound/mobs/non-humanoids/firebot/tempnominal.ogg b/sound/mobs/non-humanoids/firebot/tempnominal.ogg
index 97c4b46041685..c55933609c066 100644
Binary files a/sound/mobs/non-humanoids/firebot/tempnominal.ogg and b/sound/mobs/non-humanoids/firebot/tempnominal.ogg differ
diff --git a/sound/mobs/non-humanoids/fish/fish_drop1.ogg b/sound/mobs/non-humanoids/fish/fish_drop1.ogg
index 3c658a197688c..f2f4f5aa3d32d 100644
Binary files a/sound/mobs/non-humanoids/fish/fish_drop1.ogg and b/sound/mobs/non-humanoids/fish/fish_drop1.ogg differ
diff --git a/sound/mobs/non-humanoids/fish/fish_pickup1.ogg b/sound/mobs/non-humanoids/fish/fish_pickup1.ogg
index 7f1fe68080b10..abd91acac61c6 100644
Binary files a/sound/mobs/non-humanoids/fish/fish_pickup1.ogg and b/sound/mobs/non-humanoids/fish/fish_pickup1.ogg differ
diff --git a/sound/mobs/non-humanoids/fish/fish_pickup2.ogg b/sound/mobs/non-humanoids/fish/fish_pickup2.ogg
index 70d240bad667e..4ad56a675af92 100644
Binary files a/sound/mobs/non-humanoids/fish/fish_pickup2.ogg and b/sound/mobs/non-humanoids/fish/fish_pickup2.ogg differ
diff --git a/sound/mobs/non-humanoids/fish/fish_slap1.ogg b/sound/mobs/non-humanoids/fish/fish_slap1.ogg
index 984e1cf10883a..5283b923d8e32 100644
Binary files a/sound/mobs/non-humanoids/fish/fish_slap1.ogg and b/sound/mobs/non-humanoids/fish/fish_slap1.ogg differ
diff --git a/sound/mobs/non-humanoids/fish/fish_slap2.ogg b/sound/mobs/non-humanoids/fish/fish_slap2.ogg
index 581cf17e6885f..3979cb2ade690 100644
Binary files a/sound/mobs/non-humanoids/fish/fish_slap2.ogg and b/sound/mobs/non-humanoids/fish/fish_slap2.ogg differ
diff --git a/sound/mobs/non-humanoids/floorbot/whistlereset.ogg b/sound/mobs/non-humanoids/floorbot/whistlereset.ogg
index cf55c06ca88f1..6974b4d172174 100644
Binary files a/sound/mobs/non-humanoids/floorbot/whistlereset.ogg and b/sound/mobs/non-humanoids/floorbot/whistlereset.ogg differ
diff --git a/sound/mobs/non-humanoids/frog/huuu.ogg b/sound/mobs/non-humanoids/frog/huuu.ogg
index b8e055098ec2e..51907abc5deab 100644
Binary files a/sound/mobs/non-humanoids/frog/huuu.ogg and b/sound/mobs/non-humanoids/frog/huuu.ogg differ
diff --git a/sound/mobs/non-humanoids/frog/reee.ogg b/sound/mobs/non-humanoids/frog/reee.ogg
index 958dc60982153..d8e1cfcaccd1c 100644
Binary files a/sound/mobs/non-humanoids/frog/reee.ogg and b/sound/mobs/non-humanoids/frog/reee.ogg differ
diff --git a/sound/mobs/non-humanoids/goose/goose1.ogg b/sound/mobs/non-humanoids/goose/goose1.ogg
index f1817bc3023fb..d86ab5717b82e 100644
Binary files a/sound/mobs/non-humanoids/goose/goose1.ogg and b/sound/mobs/non-humanoids/goose/goose1.ogg differ
diff --git a/sound/mobs/non-humanoids/goose/goose2.ogg b/sound/mobs/non-humanoids/goose/goose2.ogg
index aaf0a040a693d..7325f0bf8c552 100644
Binary files a/sound/mobs/non-humanoids/goose/goose2.ogg and b/sound/mobs/non-humanoids/goose/goose2.ogg differ
diff --git a/sound/mobs/non-humanoids/goose/goose3.ogg b/sound/mobs/non-humanoids/goose/goose3.ogg
index d98aa4df16ddc..acd0049f77b1f 100644
Binary files a/sound/mobs/non-humanoids/goose/goose3.ogg and b/sound/mobs/non-humanoids/goose/goose3.ogg differ
diff --git a/sound/mobs/non-humanoids/goose/goose4.ogg b/sound/mobs/non-humanoids/goose/goose4.ogg
index 97db2e0e56a2e..fa0a0389c9959 100644
Binary files a/sound/mobs/non-humanoids/goose/goose4.ogg and b/sound/mobs/non-humanoids/goose/goose4.ogg differ
diff --git a/sound/mobs/non-humanoids/gorilla/gorilla.ogg b/sound/mobs/non-humanoids/gorilla/gorilla.ogg
index 67c08bace5a5e..11a097eee816a 100644
Binary files a/sound/mobs/non-humanoids/gorilla/gorilla.ogg and b/sound/mobs/non-humanoids/gorilla/gorilla.ogg differ
diff --git a/sound/mobs/non-humanoids/hiss/hiss1.ogg b/sound/mobs/non-humanoids/hiss/hiss1.ogg
index cf1061c1d2008..666286a4fdf0b 100644
Binary files a/sound/mobs/non-humanoids/hiss/hiss1.ogg and b/sound/mobs/non-humanoids/hiss/hiss1.ogg differ
diff --git a/sound/mobs/non-humanoids/hiss/hiss2.ogg b/sound/mobs/non-humanoids/hiss/hiss2.ogg
index c88ad43cebb24..ec9dd7e6ede47 100644
Binary files a/sound/mobs/non-humanoids/hiss/hiss2.ogg and b/sound/mobs/non-humanoids/hiss/hiss2.ogg differ
diff --git a/sound/mobs/non-humanoids/hiss/hiss3.ogg b/sound/mobs/non-humanoids/hiss/hiss3.ogg
index ecc431fb9ab57..34ca9cbd07e1f 100644
Binary files a/sound/mobs/non-humanoids/hiss/hiss3.ogg and b/sound/mobs/non-humanoids/hiss/hiss3.ogg differ
diff --git a/sound/mobs/non-humanoids/hiss/hiss4.ogg b/sound/mobs/non-humanoids/hiss/hiss4.ogg
index e81ccc9d4e637..64fc241006c21 100644
Binary files a/sound/mobs/non-humanoids/hiss/hiss4.ogg and b/sound/mobs/non-humanoids/hiss/hiss4.ogg differ
diff --git a/sound/mobs/non-humanoids/hiss/hiss5.ogg b/sound/mobs/non-humanoids/hiss/hiss5.ogg
index 6b3a345c956d6..1ac80c8efc237 100644
Binary files a/sound/mobs/non-humanoids/hiss/hiss5.ogg and b/sound/mobs/non-humanoids/hiss/hiss5.ogg differ
diff --git a/sound/mobs/non-humanoids/hiss/hiss6.ogg b/sound/mobs/non-humanoids/hiss/hiss6.ogg
index ef11522f3abaa..9c2f7cf7d2071 100644
Binary files a/sound/mobs/non-humanoids/hiss/hiss6.ogg and b/sound/mobs/non-humanoids/hiss/hiss6.ogg differ
diff --git a/sound/mobs/non-humanoids/hiss/lowHiss1.ogg b/sound/mobs/non-humanoids/hiss/lowHiss1.ogg
index 1373f010f84af..c74e78166885e 100644
Binary files a/sound/mobs/non-humanoids/hiss/lowHiss1.ogg and b/sound/mobs/non-humanoids/hiss/lowHiss1.ogg differ
diff --git a/sound/mobs/non-humanoids/hiss/lowHiss2.ogg b/sound/mobs/non-humanoids/hiss/lowHiss2.ogg
index 90a91db5dda1e..a1b4a200b1e8f 100644
Binary files a/sound/mobs/non-humanoids/hiss/lowHiss2.ogg and b/sound/mobs/non-humanoids/hiss/lowHiss2.ogg differ
diff --git a/sound/mobs/non-humanoids/hiss/lowHiss3.ogg b/sound/mobs/non-humanoids/hiss/lowHiss3.ogg
index ab1f2d5bdb758..fbcc5198457ab 100644
Binary files a/sound/mobs/non-humanoids/hiss/lowHiss3.ogg and b/sound/mobs/non-humanoids/hiss/lowHiss3.ogg differ
diff --git a/sound/mobs/non-humanoids/hiss/lowHiss4.ogg b/sound/mobs/non-humanoids/hiss/lowHiss4.ogg
index a5c95b029773c..1e5631d37453f 100644
Binary files a/sound/mobs/non-humanoids/hiss/lowHiss4.ogg and b/sound/mobs/non-humanoids/hiss/lowHiss4.ogg differ
diff --git a/sound/mobs/non-humanoids/honkbot/honkbot_evil_laugh.ogg b/sound/mobs/non-humanoids/honkbot/honkbot_evil_laugh.ogg
index 7b12edf8a32b5..a889292d21cf9 100644
Binary files a/sound/mobs/non-humanoids/honkbot/honkbot_evil_laugh.ogg and b/sound/mobs/non-humanoids/honkbot/honkbot_evil_laugh.ogg differ
diff --git a/sound/mobs/non-humanoids/hygienebot/cleanandtidy.ogg b/sound/mobs/non-humanoids/hygienebot/cleanandtidy.ogg
index 8941da34cd3b2..814dd0808e768 100644
Binary files a/sound/mobs/non-humanoids/hygienebot/cleanandtidy.ogg and b/sound/mobs/non-humanoids/hygienebot/cleanandtidy.ogg differ
diff --git a/sound/mobs/non-humanoids/hygienebot/cutarteries.ogg b/sound/mobs/non-humanoids/hygienebot/cutarteries.ogg
index 5c403dc3cfdfc..d80dd07739d2a 100644
Binary files a/sound/mobs/non-humanoids/hygienebot/cutarteries.ogg and b/sound/mobs/non-humanoids/hygienebot/cutarteries.ogg differ
diff --git a/sound/mobs/non-humanoids/hygienebot/degenerate.ogg b/sound/mobs/non-humanoids/hygienebot/degenerate.ogg
index de7774526359c..d1ba9e627f255 100644
Binary files a/sound/mobs/non-humanoids/hygienebot/degenerate.ogg and b/sound/mobs/non-humanoids/hygienebot/degenerate.ogg differ
diff --git a/sound/mobs/non-humanoids/hygienebot/dragyouout.ogg b/sound/mobs/non-humanoids/hygienebot/dragyouout.ogg
index 81924ab9ad8ec..f2c6148475079 100644
Binary files a/sound/mobs/non-humanoids/hygienebot/dragyouout.ogg and b/sound/mobs/non-humanoids/hygienebot/dragyouout.ogg differ
diff --git a/sound/mobs/non-humanoids/hygienebot/finally.ogg b/sound/mobs/non-humanoids/hygienebot/finally.ogg
index 507ed4f392b4e..ab031a2ee8150 100644
Binary files a/sound/mobs/non-humanoids/hygienebot/finally.ogg and b/sound/mobs/non-humanoids/hygienebot/finally.ogg differ
diff --git a/sound/mobs/non-humanoids/hygienebot/foulsmelling.ogg b/sound/mobs/non-humanoids/hygienebot/foulsmelling.ogg
index dee1c9847650b..6b70bf41d2a69 100644
Binary files a/sound/mobs/non-humanoids/hygienebot/foulsmelling.ogg and b/sound/mobs/non-humanoids/hygienebot/foulsmelling.ogg differ
diff --git a/sound/mobs/non-humanoids/hygienebot/greencloud.ogg b/sound/mobs/non-humanoids/hygienebot/greencloud.ogg
index 9912224613d67..c26e4facd27a5 100644
Binary files a/sound/mobs/non-humanoids/hygienebot/greencloud.ogg and b/sound/mobs/non-humanoids/hygienebot/greencloud.ogg differ
diff --git a/sound/mobs/non-humanoids/hygienebot/letmeclean.ogg b/sound/mobs/non-humanoids/hygienebot/letmeclean.ogg
index 21157d980566a..2b7f3ecc24c8f 100644
Binary files a/sound/mobs/non-humanoids/hygienebot/letmeclean.ogg and b/sound/mobs/non-humanoids/hygienebot/letmeclean.ogg differ
diff --git a/sound/mobs/non-humanoids/hygienebot/stoprunning.ogg b/sound/mobs/non-humanoids/hygienebot/stoprunning.ogg
index ddd5fd865e59c..12b63e3bbcbd8 100644
Binary files a/sound/mobs/non-humanoids/hygienebot/stoprunning.ogg and b/sound/mobs/non-humanoids/hygienebot/stoprunning.ogg differ
diff --git a/sound/mobs/non-humanoids/hygienebot/thankgod.ogg b/sound/mobs/non-humanoids/hygienebot/thankgod.ogg
index 6d15126d90d6b..da15be9d9d10e 100644
Binary files a/sound/mobs/non-humanoids/hygienebot/thankgod.ogg and b/sound/mobs/non-humanoids/hygienebot/thankgod.ogg differ
diff --git a/sound/mobs/non-humanoids/hygienebot/troglodyte.ogg b/sound/mobs/non-humanoids/hygienebot/troglodyte.ogg
index 94af4d68827c9..c680890396455 100644
Binary files a/sound/mobs/non-humanoids/hygienebot/troglodyte.ogg and b/sound/mobs/non-humanoids/hygienebot/troglodyte.ogg differ
diff --git a/sound/mobs/non-humanoids/hygienebot/unhygienicclient.ogg b/sound/mobs/non-humanoids/hygienebot/unhygienicclient.ogg
index 53a13e639a46e..c6b59b5910560 100644
Binary files a/sound/mobs/non-humanoids/hygienebot/unhygienicclient.ogg and b/sound/mobs/non-humanoids/hygienebot/unhygienicclient.ogg differ
diff --git a/sound/mobs/non-humanoids/insect/chitter.ogg b/sound/mobs/non-humanoids/insect/chitter.ogg
index 5b2a144388673..a4007bbf4e122 100644
Binary files a/sound/mobs/non-humanoids/insect/chitter.ogg and b/sound/mobs/non-humanoids/insect/chitter.ogg differ
diff --git a/sound/mobs/non-humanoids/legion/legion_spawn.ogg b/sound/mobs/non-humanoids/legion/legion_spawn.ogg
index 9fce6dec4c6c0..7bbf1dee06315 100644
Binary files a/sound/mobs/non-humanoids/legion/legion_spawn.ogg and b/sound/mobs/non-humanoids/legion/legion_spawn.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/apple.ogg b/sound/mobs/non-humanoids/medbot/apple.ogg
index 0cfd670522029..e58cc57eb700b 100644
Binary files a/sound/mobs/non-humanoids/medbot/apple.ogg and b/sound/mobs/non-humanoids/medbot/apple.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/catch.ogg b/sound/mobs/non-humanoids/medbot/catch.ogg
index fd6895a560610..f1a4f910eec79 100644
Binary files a/sound/mobs/non-humanoids/medbot/catch.ogg and b/sound/mobs/non-humanoids/medbot/catch.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/close.ogg b/sound/mobs/non-humanoids/medbot/close.ogg
index 9e0efcefd20db..f08974d03c6b0 100644
Binary files a/sound/mobs/non-humanoids/medbot/close.ogg and b/sound/mobs/non-humanoids/medbot/close.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/coming.ogg b/sound/mobs/non-humanoids/medbot/coming.ogg
index f4d863db4feaf..c96878aea6553 100644
Binary files a/sound/mobs/non-humanoids/medbot/coming.ogg and b/sound/mobs/non-humanoids/medbot/coming.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/delicious.ogg b/sound/mobs/non-humanoids/medbot/delicious.ogg
index 410efbf0b0319..98c5ec4038daf 100644
Binary files a/sound/mobs/non-humanoids/medbot/delicious.ogg and b/sound/mobs/non-humanoids/medbot/delicious.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/dont_like.ogg b/sound/mobs/non-humanoids/medbot/dont_like.ogg
index 06fc84af2fa55..2142709b85606 100644
Binary files a/sound/mobs/non-humanoids/medbot/dont_like.ogg and b/sound/mobs/non-humanoids/medbot/dont_like.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/feelbetter.ogg b/sound/mobs/non-humanoids/medbot/feelbetter.ogg
index adbae4ff79976..12071635ac237 100644
Binary files a/sound/mobs/non-humanoids/medbot/feelbetter.ogg and b/sound/mobs/non-humanoids/medbot/feelbetter.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/flies.ogg b/sound/mobs/non-humanoids/medbot/flies.ogg
index a714f8a0bc902..804e4d0e2decf 100644
Binary files a/sound/mobs/non-humanoids/medbot/flies.ogg and b/sound/mobs/non-humanoids/medbot/flies.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/forgive.ogg b/sound/mobs/non-humanoids/medbot/forgive.ogg
index 729eaa5c78ed5..1869b03ea4826 100644
Binary files a/sound/mobs/non-humanoids/medbot/forgive.ogg and b/sound/mobs/non-humanoids/medbot/forgive.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/fuck_you.ogg b/sound/mobs/non-humanoids/medbot/fuck_you.ogg
index 5eacff615fe3e..68b9bc2e0756a 100644
Binary files a/sound/mobs/non-humanoids/medbot/fuck_you.ogg and b/sound/mobs/non-humanoids/medbot/fuck_you.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/help.ogg b/sound/mobs/non-humanoids/medbot/help.ogg
index 9a26ee2e96948..16be345ab3f0c 100644
Binary files a/sound/mobs/non-humanoids/medbot/help.ogg and b/sound/mobs/non-humanoids/medbot/help.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/hey_wait.ogg b/sound/mobs/non-humanoids/medbot/hey_wait.ogg
index 6c88b761ec718..8dcf832b29b00 100644
Binary files a/sound/mobs/non-humanoids/medbot/hey_wait.ogg and b/sound/mobs/non-humanoids/medbot/hey_wait.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/i_am_chicken.ogg b/sound/mobs/non-humanoids/medbot/i_am_chicken.ogg
index d1c4465505f39..e4b3c970e5c22 100644
Binary files a/sound/mobs/non-humanoids/medbot/i_am_chicken.ogg and b/sound/mobs/non-humanoids/medbot/i_am_chicken.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/i_require_asst.ogg b/sound/mobs/non-humanoids/medbot/i_require_asst.ogg
index 18fabc630f5ac..48c8ea091c143 100644
Binary files a/sound/mobs/non-humanoids/medbot/i_require_asst.ogg and b/sound/mobs/non-humanoids/medbot/i_require_asst.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/i_trusted_you.ogg b/sound/mobs/non-humanoids/medbot/i_trusted_you.ogg
index 602baa2f674da..698d9c3e8f878 100644
Binary files a/sound/mobs/non-humanoids/medbot/i_trusted_you.ogg and b/sound/mobs/non-humanoids/medbot/i_trusted_you.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/im_different.ogg b/sound/mobs/non-humanoids/medbot/im_different.ogg
index 42eb8564f1ae6..f45b5d74b0b00 100644
Binary files a/sound/mobs/non-humanoids/medbot/im_different.ogg and b/sound/mobs/non-humanoids/medbot/im_different.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/injured.ogg b/sound/mobs/non-humanoids/medbot/injured.ogg
index 27b601349b3d6..37b6c0a2fe1f9 100644
Binary files a/sound/mobs/non-humanoids/medbot/injured.ogg and b/sound/mobs/non-humanoids/medbot/injured.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/insult.ogg b/sound/mobs/non-humanoids/medbot/insult.ogg
index 91b9b1b1c619d..1e2f472590706 100644
Binary files a/sound/mobs/non-humanoids/medbot/insult.ogg and b/sound/mobs/non-humanoids/medbot/insult.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/is_this_the_end.ogg b/sound/mobs/non-humanoids/medbot/is_this_the_end.ogg
index a2e0e2330a391..275c9681dc7fc 100644
Binary files a/sound/mobs/non-humanoids/medbot/is_this_the_end.ogg and b/sound/mobs/non-humanoids/medbot/is_this_the_end.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/live.ogg b/sound/mobs/non-humanoids/medbot/live.ogg
index 0118af0f324ec..937fdbff01f51 100644
Binary files a/sound/mobs/non-humanoids/medbot/live.ogg and b/sound/mobs/non-humanoids/medbot/live.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/lost.ogg b/sound/mobs/non-humanoids/medbot/lost.ogg
index 52f570c5850cf..0d30a489831ff 100644
Binary files a/sound/mobs/non-humanoids/medbot/lost.ogg and b/sound/mobs/non-humanoids/medbot/lost.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/no.ogg b/sound/mobs/non-humanoids/medbot/no.ogg
index 5f94eaa7dedd5..c4a05959cf1d9 100644
Binary files a/sound/mobs/non-humanoids/medbot/no.ogg and b/sound/mobs/non-humanoids/medbot/no.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/nooo.ogg b/sound/mobs/non-humanoids/medbot/nooo.ogg
index 102fd1fb04271..72505552bdc8a 100644
Binary files a/sound/mobs/non-humanoids/medbot/nooo.ogg and b/sound/mobs/non-humanoids/medbot/nooo.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/oh_fuck.ogg b/sound/mobs/non-humanoids/medbot/oh_fuck.ogg
index 95d21ef2550e6..22af274ce6ba4 100644
Binary files a/sound/mobs/non-humanoids/medbot/oh_fuck.ogg and b/sound/mobs/non-humanoids/medbot/oh_fuck.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/pain_is_real.ogg b/sound/mobs/non-humanoids/medbot/pain_is_real.ogg
index 9cfa3a71be1ca..6598a51d38460 100644
Binary files a/sound/mobs/non-humanoids/medbot/pain_is_real.ogg and b/sound/mobs/non-humanoids/medbot/pain_is_real.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/patchedup.ogg b/sound/mobs/non-humanoids/medbot/patchedup.ogg
index 15cd46497fe30..aa449e1755f0b 100644
Binary files a/sound/mobs/non-humanoids/medbot/patchedup.ogg and b/sound/mobs/non-humanoids/medbot/patchedup.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/please_dont.ogg b/sound/mobs/non-humanoids/medbot/please_dont.ogg
index a77ee09cb4580..15b60a5e1eff4 100644
Binary files a/sound/mobs/non-humanoids/medbot/please_dont.ogg and b/sound/mobs/non-humanoids/medbot/please_dont.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/please_im_scared.ogg b/sound/mobs/non-humanoids/medbot/please_im_scared.ogg
index 7bd53b39c8983..c5e2e479f6093 100644
Binary files a/sound/mobs/non-humanoids/medbot/please_im_scared.ogg and b/sound/mobs/non-humanoids/medbot/please_im_scared.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/please_put_me_back.ogg b/sound/mobs/non-humanoids/medbot/please_put_me_back.ogg
index 84700fbdd576b..7ca9a7400d128 100644
Binary files a/sound/mobs/non-humanoids/medbot/please_put_me_back.ogg and b/sound/mobs/non-humanoids/medbot/please_put_me_back.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/radar.ogg b/sound/mobs/non-humanoids/medbot/radar.ogg
index f44785740ad1b..9f31582726c5f 100644
Binary files a/sound/mobs/non-humanoids/medbot/radar.ogg and b/sound/mobs/non-humanoids/medbot/radar.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/reported.ogg b/sound/mobs/non-humanoids/medbot/reported.ogg
index d5469c19cedaa..193ee8e8fc65f 100644
Binary files a/sound/mobs/non-humanoids/medbot/reported.ogg and b/sound/mobs/non-humanoids/medbot/reported.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/shindemashou.ogg b/sound/mobs/non-humanoids/medbot/shindemashou.ogg
index 1ee2858eaf926..eb00de6ba0620 100644
Binary files a/sound/mobs/non-humanoids/medbot/shindemashou.ogg and b/sound/mobs/non-humanoids/medbot/shindemashou.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/surgeon.ogg b/sound/mobs/non-humanoids/medbot/surgeon.ogg
index de045467717cb..d03f66bd972d2 100644
Binary files a/sound/mobs/non-humanoids/medbot/surgeon.ogg and b/sound/mobs/non-humanoids/medbot/surgeon.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/thank_you.ogg b/sound/mobs/non-humanoids/medbot/thank_you.ogg
index 3fabe7d4a630c..9517d0d5ca990 100644
Binary files a/sound/mobs/non-humanoids/medbot/thank_you.ogg and b/sound/mobs/non-humanoids/medbot/thank_you.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/turn_off.ogg b/sound/mobs/non-humanoids/medbot/turn_off.ogg
index 87a4d6bdd0e02..265a7fd61ad95 100644
Binary files a/sound/mobs/non-humanoids/medbot/turn_off.ogg and b/sound/mobs/non-humanoids/medbot/turn_off.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/why.ogg b/sound/mobs/non-humanoids/medbot/why.ogg
index 415020b89b00f..cb154ee9ef7dc 100644
Binary files a/sound/mobs/non-humanoids/medbot/why.ogg and b/sound/mobs/non-humanoids/medbot/why.ogg differ
diff --git a/sound/mobs/non-humanoids/medbot/youre_good.ogg b/sound/mobs/non-humanoids/medbot/youre_good.ogg
index 62c325f834176..8f12f0af48295 100644
Binary files a/sound/mobs/non-humanoids/medbot/youre_good.ogg and b/sound/mobs/non-humanoids/medbot/youre_good.ogg differ
diff --git a/sound/mobs/non-humanoids/monkey/monkey_screech_1.ogg b/sound/mobs/non-humanoids/monkey/monkey_screech_1.ogg
index 45f8db6ac6b6e..a4d5bc45429aa 100644
Binary files a/sound/mobs/non-humanoids/monkey/monkey_screech_1.ogg and b/sound/mobs/non-humanoids/monkey/monkey_screech_1.ogg differ
diff --git a/sound/mobs/non-humanoids/monkey/monkey_screech_2.ogg b/sound/mobs/non-humanoids/monkey/monkey_screech_2.ogg
index 5a5015916d4dc..ea44bcbcd814b 100644
Binary files a/sound/mobs/non-humanoids/monkey/monkey_screech_2.ogg and b/sound/mobs/non-humanoids/monkey/monkey_screech_2.ogg differ
diff --git a/sound/mobs/non-humanoids/monkey/monkey_screech_3.ogg b/sound/mobs/non-humanoids/monkey/monkey_screech_3.ogg
index 4ba7b74d05f04..eeb33057d0aef 100644
Binary files a/sound/mobs/non-humanoids/monkey/monkey_screech_3.ogg and b/sound/mobs/non-humanoids/monkey/monkey_screech_3.ogg differ
diff --git a/sound/mobs/non-humanoids/monkey/monkey_screech_4.ogg b/sound/mobs/non-humanoids/monkey/monkey_screech_4.ogg
index 87e7e157e9848..5a60b9466fa04 100644
Binary files a/sound/mobs/non-humanoids/monkey/monkey_screech_4.ogg and b/sound/mobs/non-humanoids/monkey/monkey_screech_4.ogg differ
diff --git a/sound/mobs/non-humanoids/monkey/monkey_screech_5.ogg b/sound/mobs/non-humanoids/monkey/monkey_screech_5.ogg
index fd8ccef0f69fb..04b4be87f842b 100644
Binary files a/sound/mobs/non-humanoids/monkey/monkey_screech_5.ogg and b/sound/mobs/non-humanoids/monkey/monkey_screech_5.ogg differ
diff --git a/sound/mobs/non-humanoids/monkey/monkey_screech_6.ogg b/sound/mobs/non-humanoids/monkey/monkey_screech_6.ogg
index cd9eddf198add..d73c3e9bb2250 100644
Binary files a/sound/mobs/non-humanoids/monkey/monkey_screech_6.ogg and b/sound/mobs/non-humanoids/monkey/monkey_screech_6.ogg differ
diff --git a/sound/mobs/non-humanoids/monkey/monkey_screech_7.ogg b/sound/mobs/non-humanoids/monkey/monkey_screech_7.ogg
index 9cd09b17e455b..291a61d754218 100644
Binary files a/sound/mobs/non-humanoids/monkey/monkey_screech_7.ogg and b/sound/mobs/non-humanoids/monkey/monkey_screech_7.ogg differ
diff --git a/sound/mobs/non-humanoids/mook/mook_death.ogg b/sound/mobs/non-humanoids/mook/mook_death.ogg
index 6c221d24faf35..46a1d01368c08 100644
Binary files a/sound/mobs/non-humanoids/mook/mook_death.ogg and b/sound/mobs/non-humanoids/mook/mook_death.ogg differ
diff --git a/sound/mobs/non-humanoids/mook/mook_leap_yell.ogg b/sound/mobs/non-humanoids/mook/mook_leap_yell.ogg
index a7e3e9e58ce56..415a5e3a81b4c 100644
Binary files a/sound/mobs/non-humanoids/mook/mook_leap_yell.ogg and b/sound/mobs/non-humanoids/mook/mook_leap_yell.ogg differ
diff --git a/sound/mobs/non-humanoids/mouse/mousesqueek.ogg b/sound/mobs/non-humanoids/mouse/mousesqueek.ogg
index fef15503cd93d..aab2c709c3fe2 100644
Binary files a/sound/mobs/non-humanoids/mouse/mousesqueek.ogg and b/sound/mobs/non-humanoids/mouse/mousesqueek.ogg differ
diff --git a/sound/mobs/non-humanoids/orbie/orbie_level_up.ogg b/sound/mobs/non-humanoids/orbie/orbie_level_up.ogg
index c876c9d78173a..66ebcb77068ea 100644
Binary files a/sound/mobs/non-humanoids/orbie/orbie_level_up.ogg and b/sound/mobs/non-humanoids/orbie/orbie_level_up.ogg differ
diff --git a/sound/mobs/non-humanoids/orbie/orbie_notification_sound.ogg b/sound/mobs/non-humanoids/orbie/orbie_notification_sound.ogg
index b43bba41ae5a6..10625d587edd3 100644
Binary files a/sound/mobs/non-humanoids/orbie/orbie_notification_sound.ogg and b/sound/mobs/non-humanoids/orbie/orbie_notification_sound.ogg differ
diff --git a/sound/mobs/non-humanoids/orbie/orbie_send_out.ogg b/sound/mobs/non-humanoids/orbie/orbie_send_out.ogg
index aba3d84e18609..6d181464f3e24 100644
Binary files a/sound/mobs/non-humanoids/orbie/orbie_send_out.ogg and b/sound/mobs/non-humanoids/orbie/orbie_send_out.ogg differ
diff --git a/sound/mobs/non-humanoids/orbie/orbie_trick_learned.ogg b/sound/mobs/non-humanoids/orbie/orbie_trick_learned.ogg
index bc50cf41b1ced..2770f4ee6da97 100644
Binary files a/sound/mobs/non-humanoids/orbie/orbie_trick_learned.ogg and b/sound/mobs/non-humanoids/orbie/orbie_trick_learned.ogg differ
diff --git a/sound/mobs/non-humanoids/pig/pig1.ogg b/sound/mobs/non-humanoids/pig/pig1.ogg
index 470be7a86d335..eb63bd5c6ebf5 100644
Binary files a/sound/mobs/non-humanoids/pig/pig1.ogg and b/sound/mobs/non-humanoids/pig/pig1.ogg differ
diff --git a/sound/mobs/non-humanoids/pig/pig2.ogg b/sound/mobs/non-humanoids/pig/pig2.ogg
index 597a13464fb5d..5a2ee7e063961 100644
Binary files a/sound/mobs/non-humanoids/pig/pig2.ogg and b/sound/mobs/non-humanoids/pig/pig2.ogg differ
diff --git a/sound/mobs/non-humanoids/pony/clown_gallup.ogg b/sound/mobs/non-humanoids/pony/clown_gallup.ogg
index 61f7eaf5162cb..ec61ce2beb679 100644
Binary files a/sound/mobs/non-humanoids/pony/clown_gallup.ogg and b/sound/mobs/non-humanoids/pony/clown_gallup.ogg differ
diff --git a/sound/mobs/non-humanoids/pony/snort.ogg b/sound/mobs/non-humanoids/pony/snort.ogg
index 0ea56ad957dcb..ae72a25333d6b 100644
Binary files a/sound/mobs/non-humanoids/pony/snort.ogg and b/sound/mobs/non-humanoids/pony/snort.ogg differ
diff --git a/sound/mobs/non-humanoids/pony/whinny01.ogg b/sound/mobs/non-humanoids/pony/whinny01.ogg
index 485ca3a52977d..68c82f6920028 100644
Binary files a/sound/mobs/non-humanoids/pony/whinny01.ogg and b/sound/mobs/non-humanoids/pony/whinny01.ogg differ
diff --git a/sound/mobs/non-humanoids/pony/whinny02.ogg b/sound/mobs/non-humanoids/pony/whinny02.ogg
index 2d48a0cacdaea..dda6cc45f0a6a 100644
Binary files a/sound/mobs/non-humanoids/pony/whinny02.ogg and b/sound/mobs/non-humanoids/pony/whinny02.ogg differ
diff --git a/sound/mobs/non-humanoids/pony/whinny03.ogg b/sound/mobs/non-humanoids/pony/whinny03.ogg
index 7a288d70aa77d..779b3af614b02 100644
Binary files a/sound/mobs/non-humanoids/pony/whinny03.ogg and b/sound/mobs/non-humanoids/pony/whinny03.ogg differ
diff --git a/sound/mobs/non-humanoids/raptor/raptor_1.ogg b/sound/mobs/non-humanoids/raptor/raptor_1.ogg
index 94d53073aa64f..12ea6a6a1b569 100644
Binary files a/sound/mobs/non-humanoids/raptor/raptor_1.ogg and b/sound/mobs/non-humanoids/raptor/raptor_1.ogg differ
diff --git a/sound/mobs/non-humanoids/raptor/raptor_2.ogg b/sound/mobs/non-humanoids/raptor/raptor_2.ogg
index 01c23ff03cedd..6380c7c5bbc5d 100644
Binary files a/sound/mobs/non-humanoids/raptor/raptor_2.ogg and b/sound/mobs/non-humanoids/raptor/raptor_2.ogg differ
diff --git a/sound/mobs/non-humanoids/raptor/raptor_3.ogg b/sound/mobs/non-humanoids/raptor/raptor_3.ogg
index dff3946ec0490..88386f19f9dce 100644
Binary files a/sound/mobs/non-humanoids/raptor/raptor_3.ogg and b/sound/mobs/non-humanoids/raptor/raptor_3.ogg differ
diff --git a/sound/mobs/non-humanoids/raptor/raptor_4.ogg b/sound/mobs/non-humanoids/raptor/raptor_4.ogg
index 53c28c72ffdc9..1fafcbb5425c6 100644
Binary files a/sound/mobs/non-humanoids/raptor/raptor_4.ogg and b/sound/mobs/non-humanoids/raptor/raptor_4.ogg differ
diff --git a/sound/mobs/non-humanoids/raptor/raptor_5.ogg b/sound/mobs/non-humanoids/raptor/raptor_5.ogg
index dd424a1566fcb..07b576c1a273b 100644
Binary files a/sound/mobs/non-humanoids/raptor/raptor_5.ogg and b/sound/mobs/non-humanoids/raptor/raptor_5.ogg differ
diff --git a/sound/mobs/non-humanoids/sheep/sheep1.ogg b/sound/mobs/non-humanoids/sheep/sheep1.ogg
index 33c1041086e56..e5c5ca698bdc9 100644
Binary files a/sound/mobs/non-humanoids/sheep/sheep1.ogg and b/sound/mobs/non-humanoids/sheep/sheep1.ogg differ
diff --git a/sound/mobs/non-humanoids/sheep/sheep2.ogg b/sound/mobs/non-humanoids/sheep/sheep2.ogg
index eed7d6aadbd7b..2590eddf16d2b 100644
Binary files a/sound/mobs/non-humanoids/sheep/sheep2.ogg and b/sound/mobs/non-humanoids/sheep/sheep2.ogg differ
diff --git a/sound/mobs/non-humanoids/sheep/sheep3.ogg b/sound/mobs/non-humanoids/sheep/sheep3.ogg
index 7a596e088daea..6fcedcef01538 100644
Binary files a/sound/mobs/non-humanoids/sheep/sheep3.ogg and b/sound/mobs/non-humanoids/sheep/sheep3.ogg differ
diff --git a/sound/mobs/non-humanoids/snake/snake_hissing1.ogg b/sound/mobs/non-humanoids/snake/snake_hissing1.ogg
index 52a37d764c426..17af4fb62e736 100644
Binary files a/sound/mobs/non-humanoids/snake/snake_hissing1.ogg and b/sound/mobs/non-humanoids/snake/snake_hissing1.ogg differ
diff --git a/sound/mobs/non-humanoids/snake/snake_hissing2.ogg b/sound/mobs/non-humanoids/snake/snake_hissing2.ogg
index bd11b7fb5f0fa..5d91f66323ce6 100644
Binary files a/sound/mobs/non-humanoids/snake/snake_hissing2.ogg and b/sound/mobs/non-humanoids/snake/snake_hissing2.ogg differ
diff --git a/sound/mobs/non-humanoids/space_dragon/space_dragon_roar.ogg b/sound/mobs/non-humanoids/space_dragon/space_dragon_roar.ogg
index f7f4503b89467..d0610ff970a2d 100644
Binary files a/sound/mobs/non-humanoids/space_dragon/space_dragon_roar.ogg and b/sound/mobs/non-humanoids/space_dragon/space_dragon_roar.ogg differ
diff --git a/sound/mobs/non-humanoids/tourist/tourist_talk.ogg b/sound/mobs/non-humanoids/tourist/tourist_talk.ogg
index 239e1a797537b..f5e1ed0d4a3b6 100644
Binary files a/sound/mobs/non-humanoids/tourist/tourist_talk.ogg and b/sound/mobs/non-humanoids/tourist/tourist_talk.ogg differ
diff --git a/sound/mobs/non-humanoids/tourist/tourist_talk_british.ogg b/sound/mobs/non-humanoids/tourist/tourist_talk_british.ogg
index 6fc4039e17274..a9935b4000196 100644
Binary files a/sound/mobs/non-humanoids/tourist/tourist_talk_british.ogg and b/sound/mobs/non-humanoids/tourist/tourist_talk_british.ogg differ
diff --git a/sound/mobs/non-humanoids/tourist/tourist_talk_french.ogg b/sound/mobs/non-humanoids/tourist/tourist_talk_french.ogg
index ca5dc0d9c1b3b..0fb67b4ba04ca 100644
Binary files a/sound/mobs/non-humanoids/tourist/tourist_talk_french.ogg and b/sound/mobs/non-humanoids/tourist/tourist_talk_french.ogg differ
diff --git a/sound/mobs/non-humanoids/tourist/tourist_talk_japanese1.ogg b/sound/mobs/non-humanoids/tourist/tourist_talk_japanese1.ogg
index 265aef709d22f..4857676dd3acd 100644
Binary files a/sound/mobs/non-humanoids/tourist/tourist_talk_japanese1.ogg and b/sound/mobs/non-humanoids/tourist/tourist_talk_japanese1.ogg differ
diff --git a/sound/mobs/non-humanoids/tourist/tourist_talk_japanese2.ogg b/sound/mobs/non-humanoids/tourist/tourist_talk_japanese2.ogg
index d721723787a5c..fed2c79a985fd 100644
Binary files a/sound/mobs/non-humanoids/tourist/tourist_talk_japanese2.ogg and b/sound/mobs/non-humanoids/tourist/tourist_talk_japanese2.ogg differ
diff --git a/sound/mobs/non-humanoids/tourist/tourist_talk_mexican.ogg b/sound/mobs/non-humanoids/tourist/tourist_talk_mexican.ogg
index a4c5b720688a2..701b7f0bd19d2 100644
Binary files a/sound/mobs/non-humanoids/tourist/tourist_talk_mexican.ogg and b/sound/mobs/non-humanoids/tourist/tourist_talk_mexican.ogg differ
diff --git a/sound/mobs/non-humanoids/tourist/tourist_talk_moth.ogg b/sound/mobs/non-humanoids/tourist/tourist_talk_moth.ogg
index fdbf20633db4d..df457489e8a95 100644
Binary files a/sound/mobs/non-humanoids/tourist/tourist_talk_moth.ogg and b/sound/mobs/non-humanoids/tourist/tourist_talk_moth.ogg differ
diff --git a/sound/mobs/non-humanoids/venus_trap/venus_trap_death.ogg b/sound/mobs/non-humanoids/venus_trap/venus_trap_death.ogg
index c112769ad9c91..66a382d35c4ef 100644
Binary files a/sound/mobs/non-humanoids/venus_trap/venus_trap_death.ogg and b/sound/mobs/non-humanoids/venus_trap/venus_trap_death.ogg differ
diff --git a/sound/mobs/non-humanoids/venus_trap/venus_trap_hit.ogg b/sound/mobs/non-humanoids/venus_trap/venus_trap_hit.ogg
index 201486d869e5e..8b3064bb78bd3 100644
Binary files a/sound/mobs/non-humanoids/venus_trap/venus_trap_hit.ogg and b/sound/mobs/non-humanoids/venus_trap/venus_trap_hit.ogg differ
diff --git a/sound/mobs/non-humanoids/venus_trap/venus_trap_hurt.ogg b/sound/mobs/non-humanoids/venus_trap/venus_trap_hurt.ogg
index 62d8e1c0d8156..aec70fd459fa7 100644
Binary files a/sound/mobs/non-humanoids/venus_trap/venus_trap_hurt.ogg and b/sound/mobs/non-humanoids/venus_trap/venus_trap_hurt.ogg differ
diff --git a/sound/music/antag/abductee.ogg b/sound/music/antag/abductee.ogg
index 81290237e6a96..eb6c2f564b188 100644
Binary files a/sound/music/antag/abductee.ogg and b/sound/music/antag/abductee.ogg differ
diff --git a/sound/music/antag/ayylien.ogg b/sound/music/antag/ayylien.ogg
index cfcb748fd775d..8a91ae0b233fe 100644
Binary files a/sound/music/antag/ayylien.ogg and b/sound/music/antag/ayylien.ogg differ
diff --git a/sound/music/antag/blobalert.ogg b/sound/music/antag/blobalert.ogg
index c9fcfbee4489f..2e858d3062556 100644
Binary files a/sound/music/antag/blobalert.ogg and b/sound/music/antag/blobalert.ogg differ
diff --git a/sound/music/antag/bloodcult/bloodcult_eyes.ogg b/sound/music/antag/bloodcult/bloodcult_eyes.ogg
index 38c223b1ad858..b56862930c456 100644
Binary files a/sound/music/antag/bloodcult/bloodcult_eyes.ogg and b/sound/music/antag/bloodcult/bloodcult_eyes.ogg differ
diff --git a/sound/music/antag/bloodcult/bloodcult_gain.ogg b/sound/music/antag/bloodcult/bloodcult_gain.ogg
index 9fa22df51d352..6adc0dc5c3413 100644
Binary files a/sound/music/antag/bloodcult/bloodcult_gain.ogg and b/sound/music/antag/bloodcult/bloodcult_gain.ogg differ
diff --git a/sound/music/antag/bloodcult/bloodcult_halos.ogg b/sound/music/antag/bloodcult/bloodcult_halos.ogg
index bd22934fd301b..4d2328ee5498a 100644
Binary files a/sound/music/antag/bloodcult/bloodcult_halos.ogg and b/sound/music/antag/bloodcult/bloodcult_halos.ogg differ
diff --git a/sound/music/antag/bloodcult/bloodcult_scribe.ogg b/sound/music/antag/bloodcult/bloodcult_scribe.ogg
index a01ef30a1d487..223c28dd80e51 100644
Binary files a/sound/music/antag/bloodcult/bloodcult_scribe.ogg and b/sound/music/antag/bloodcult/bloodcult_scribe.ogg differ
diff --git a/sound/music/antag/bloodcult/ghost_whisper.ogg b/sound/music/antag/bloodcult/ghost_whisper.ogg
index 660b04c786db0..2d2e6bfb338cc 100644
Binary files a/sound/music/antag/bloodcult/ghost_whisper.ogg and b/sound/music/antag/bloodcult/ghost_whisper.ogg differ
diff --git a/sound/music/antag/bloodcult/ghosty_wind.ogg b/sound/music/antag/bloodcult/ghosty_wind.ogg
index b1c8c2f3a8c7f..61201a94b32ee 100644
Binary files a/sound/music/antag/bloodcult/ghosty_wind.ogg and b/sound/music/antag/bloodcult/ghosty_wind.ogg differ
diff --git a/sound/music/antag/bloodcult/narsie_rises.ogg b/sound/music/antag/bloodcult/narsie_rises.ogg
index ccd10cf115faa..10d6ffae7b253 100644
Binary files a/sound/music/antag/bloodcult/narsie_rises.ogg and b/sound/music/antag/bloodcult/narsie_rises.ogg differ
diff --git a/sound/music/antag/brainwashed.ogg b/sound/music/antag/brainwashed.ogg
index 22193ced06ef0..32f27533ce03c 100644
Binary files a/sound/music/antag/brainwashed.ogg and b/sound/music/antag/brainwashed.ogg differ
diff --git a/sound/music/antag/clockcultalr.ogg b/sound/music/antag/clockcultalr.ogg
index dabc828557273..27cd98b9b12ea 100644
Binary files a/sound/music/antag/clockcultalr.ogg and b/sound/music/antag/clockcultalr.ogg differ
diff --git a/sound/music/antag/contractstartup.ogg b/sound/music/antag/contractstartup.ogg
index 7d86646050717..0fb29a713e4c7 100644
Binary files a/sound/music/antag/contractstartup.ogg and b/sound/music/antag/contractstartup.ogg differ
diff --git a/sound/music/antag/creepalert.ogg b/sound/music/antag/creepalert.ogg
index 88bd8e9707d5f..39ef2f3feee36 100644
Binary files a/sound/music/antag/creepalert.ogg and b/sound/music/antag/creepalert.ogg differ
diff --git a/sound/music/antag/heretic/VoidsEmbrace.ogg b/sound/music/antag/heretic/VoidsEmbrace.ogg
index 0766dc157834b..66eac7e13e557 100644
Binary files a/sound/music/antag/heretic/VoidsEmbrace.ogg and b/sound/music/antag/heretic/VoidsEmbrace.ogg differ
diff --git a/sound/music/antag/heretic/ascend_ash.ogg b/sound/music/antag/heretic/ascend_ash.ogg
index a85aa0f6a9ccd..fda3f1ed9499d 100644
Binary files a/sound/music/antag/heretic/ascend_ash.ogg and b/sound/music/antag/heretic/ascend_ash.ogg differ
diff --git a/sound/music/antag/heretic/ascend_blade.ogg b/sound/music/antag/heretic/ascend_blade.ogg
index da7c313ad8ad2..cc645ffb897c5 100644
Binary files a/sound/music/antag/heretic/ascend_blade.ogg and b/sound/music/antag/heretic/ascend_blade.ogg differ
diff --git a/sound/music/antag/heretic/ascend_cosmic.ogg b/sound/music/antag/heretic/ascend_cosmic.ogg
index 9ce740fa7e1e3..413e7215000aa 100644
Binary files a/sound/music/antag/heretic/ascend_cosmic.ogg and b/sound/music/antag/heretic/ascend_cosmic.ogg differ
diff --git a/sound/music/antag/heretic/ascend_flesh.ogg b/sound/music/antag/heretic/ascend_flesh.ogg
index b488cafd0bf6c..2088647af5a90 100644
Binary files a/sound/music/antag/heretic/ascend_flesh.ogg and b/sound/music/antag/heretic/ascend_flesh.ogg differ
diff --git a/sound/music/antag/heretic/ascend_knock.ogg b/sound/music/antag/heretic/ascend_knock.ogg
index 73f0a7f0b3b5b..80a79d51a88cb 100644
Binary files a/sound/music/antag/heretic/ascend_knock.ogg and b/sound/music/antag/heretic/ascend_knock.ogg differ
diff --git a/sound/music/antag/heretic/ascend_moon.ogg b/sound/music/antag/heretic/ascend_moon.ogg
index b0d515686b20e..ad2fc4e950503 100644
Binary files a/sound/music/antag/heretic/ascend_moon.ogg and b/sound/music/antag/heretic/ascend_moon.ogg differ
diff --git a/sound/music/antag/heretic/ascend_rust.ogg b/sound/music/antag/heretic/ascend_rust.ogg
index 5cfc73b2cf512..fb959ed334e01 100644
Binary files a/sound/music/antag/heretic/ascend_rust.ogg and b/sound/music/antag/heretic/ascend_rust.ogg differ
diff --git a/sound/music/antag/heretic/ascend_void.ogg b/sound/music/antag/heretic/ascend_void.ogg
index 797784952d15c..0c48126831353 100644
Binary files a/sound/music/antag/heretic/ascend_void.ogg and b/sound/music/antag/heretic/ascend_void.ogg differ
diff --git a/sound/music/antag/heretic/heretic_gain.ogg b/sound/music/antag/heretic/heretic_gain.ogg
index 9944e833a6601..32de62cda16b2 100644
Binary files a/sound/music/antag/heretic/heretic_gain.ogg and b/sound/music/antag/heretic/heretic_gain.ogg differ
diff --git a/sound/music/antag/heretic/heretic_gain_intense.ogg b/sound/music/antag/heretic/heretic_gain_intense.ogg
index 5e6d4f4174fc9..203334a449119 100644
Binary files a/sound/music/antag/heretic/heretic_gain_intense.ogg and b/sound/music/antag/heretic/heretic_gain_intense.ogg differ
diff --git a/sound/music/antag/heretic/heretic_sacrifice.ogg b/sound/music/antag/heretic/heretic_sacrifice.ogg
index 5a8efb6508356..92560235e8851 100644
Binary files a/sound/music/antag/heretic/heretic_sacrifice.ogg and b/sound/music/antag/heretic/heretic_sacrifice.ogg differ
diff --git a/sound/music/antag/hypnotized.ogg b/sound/music/antag/hypnotized.ogg
index 145c022052a82..3fc0183c4e9a0 100644
Binary files a/sound/music/antag/hypnotized.ogg and b/sound/music/antag/hypnotized.ogg differ
diff --git a/sound/music/antag/ling_alert.ogg b/sound/music/antag/ling_alert.ogg
index 1132ccca29c4b..afe654e4ded33 100644
Binary files a/sound/music/antag/ling_alert.ogg and b/sound/music/antag/ling_alert.ogg differ
diff --git a/sound/music/antag/malf.ogg b/sound/music/antag/malf.ogg
index feea5fbf199ea..d4f53471ce641 100644
Binary files a/sound/music/antag/malf.ogg and b/sound/music/antag/malf.ogg differ
diff --git a/sound/music/antag/monkey.ogg b/sound/music/antag/monkey.ogg
index 6b2d411056043..151e175fe1dad 100644
Binary files a/sound/music/antag/monkey.ogg and b/sound/music/antag/monkey.ogg differ
diff --git a/sound/music/antag/ninja_greeting.ogg b/sound/music/antag/ninja_greeting.ogg
index e8f17bdea6cd3..a4b12625fbae0 100644
Binary files a/sound/music/antag/ninja_greeting.ogg and b/sound/music/antag/ninja_greeting.ogg differ
diff --git a/sound/music/antag/ops.ogg b/sound/music/antag/ops.ogg
index 7c2774f0a0b79..108a262b3c6ba 100644
Binary files a/sound/music/antag/ops.ogg and b/sound/music/antag/ops.ogg differ
diff --git a/sound/music/antag/ragesmages.ogg b/sound/music/antag/ragesmages.ogg
index 23d90db6c4c3d..402c08d21e8bb 100644
Binary files a/sound/music/antag/ragesmages.ogg and b/sound/music/antag/ragesmages.ogg differ
diff --git a/sound/music/antag/revolutionary_tide.ogg b/sound/music/antag/revolutionary_tide.ogg
index be8e4a749855a..cae3dae7b6f82 100644
Binary files a/sound/music/antag/revolutionary_tide.ogg and b/sound/music/antag/revolutionary_tide.ogg differ
diff --git a/sound/music/antag/spy.ogg b/sound/music/antag/spy.ogg
index 1a5c64a3979b1..52f8c31f16cd7 100644
Binary files a/sound/music/antag/spy.ogg and b/sound/music/antag/spy.ogg differ
diff --git a/sound/music/antag/thatshowfamiliesworks.ogg b/sound/music/antag/thatshowfamiliesworks.ogg
index 4ecad617e74ac..db71bb87e05ee 100644
Binary files a/sound/music/antag/thatshowfamiliesworks.ogg and b/sound/music/antag/thatshowfamiliesworks.ogg differ
diff --git a/sound/music/antag/traitor/final_objective.ogg b/sound/music/antag/traitor/final_objective.ogg
index 7ef6a3c548f2e..b2d3e77251898 100644
Binary files a/sound/music/antag/traitor/final_objective.ogg and b/sound/music/antag/traitor/final_objective.ogg differ
diff --git a/sound/music/antag/traitor/objective_failed.ogg b/sound/music/antag/traitor/objective_failed.ogg
index 009fda5534dd7..3a02bb55549f4 100644
Binary files a/sound/music/antag/traitor/objective_failed.ogg and b/sound/music/antag/traitor/objective_failed.ogg differ
diff --git a/sound/music/antag/traitor/objective_success.ogg b/sound/music/antag/traitor/objective_success.ogg
index fbfab3bc214ee..bdec1652c9c30 100644
Binary files a/sound/music/antag/traitor/objective_success.ogg and b/sound/music/antag/traitor/objective_success.ogg differ
diff --git a/sound/music/antag/traitor/objective_taken.ogg b/sound/music/antag/traitor/objective_taken.ogg
index 8c1b252e34307..ca1ff29efc06b 100644
Binary files a/sound/music/antag/traitor/objective_taken.ogg and b/sound/music/antag/traitor/objective_taken.ogg differ
diff --git a/sound/music/antag/traitor/tatoralert.ogg b/sound/music/antag/traitor/tatoralert.ogg
index ca0efa0ea0f1c..9c156449b4b9c 100644
Binary files a/sound/music/antag/traitor/tatoralert.ogg and b/sound/music/antag/traitor/tatoralert.ogg differ
diff --git a/sound/music/boss/bdm_boss.ogg b/sound/music/boss/bdm_boss.ogg
index a5c14095416bb..79129e35930f3 100644
Binary files a/sound/music/boss/bdm_boss.ogg and b/sound/music/boss/bdm_boss.ogg differ
diff --git a/sound/music/boss/hiero_boss.ogg b/sound/music/boss/hiero_boss.ogg
index 23412b5346d13..e0b430d91f1c7 100644
Binary files a/sound/music/boss/hiero_boss.ogg and b/sound/music/boss/hiero_boss.ogg differ
diff --git a/sound/music/elevator/robocop-short.ogg b/sound/music/elevator/robocop-short.ogg
index 800b73ca4783f..1d88a0e97410b 100644
Binary files a/sound/music/elevator/robocop-short.ogg and b/sound/music/elevator/robocop-short.ogg differ
diff --git a/sound/music/lobby_music/clown.ogg b/sound/music/lobby_music/clown.ogg
index 3214da56fa23c..9ac18baafd6cd 100644
Binary files a/sound/music/lobby_music/clown.ogg and b/sound/music/lobby_music/clown.ogg differ
diff --git a/sound/music/lobby_music/title0.ogg b/sound/music/lobby_music/title0.ogg
index 185c7effde59f..9224778728159 100644
Binary files a/sound/music/lobby_music/title0.ogg and b/sound/music/lobby_music/title0.ogg differ
diff --git a/sound/music/lobby_music/title2.ogg b/sound/music/lobby_music/title2.ogg
index ae36089a56779..2376f873246fa 100644
Binary files a/sound/music/lobby_music/title2.ogg and b/sound/music/lobby_music/title2.ogg differ
diff --git a/sound/music/lobby_music/title3.ogg b/sound/music/lobby_music/title3.ogg
index 2f6a854f6e18a..5852d53c9799b 100644
Binary files a/sound/music/lobby_music/title3.ogg and b/sound/music/lobby_music/title3.ogg differ
diff --git a/sound/music/sisyphus/sisyphus.ogg b/sound/music/sisyphus/sisyphus.ogg
index c69d0b608ebc5..e19ec32214259 100644
Binary files a/sound/music/sisyphus/sisyphus.ogg and b/sound/music/sisyphus/sisyphus.ogg differ
diff --git a/sound/runtime/chatter/griffin_1.ogg b/sound/runtime/chatter/griffin_1.ogg
index 32e1333588d56..ca7b4d03edf23 100644
Binary files a/sound/runtime/chatter/griffin_1.ogg and b/sound/runtime/chatter/griffin_1.ogg differ
diff --git a/sound/runtime/chatter/griffin_10.ogg b/sound/runtime/chatter/griffin_10.ogg
index 0d161ee5edb6b..db22c30ece21b 100644
Binary files a/sound/runtime/chatter/griffin_10.ogg and b/sound/runtime/chatter/griffin_10.ogg differ
diff --git a/sound/runtime/chatter/griffin_2.ogg b/sound/runtime/chatter/griffin_2.ogg
index 4ae4de2595f4b..d74d3d56b2712 100644
Binary files a/sound/runtime/chatter/griffin_2.ogg and b/sound/runtime/chatter/griffin_2.ogg differ
diff --git a/sound/runtime/chatter/griffin_3.ogg b/sound/runtime/chatter/griffin_3.ogg
index 28b65b852a675..77171f6acb86f 100644
Binary files a/sound/runtime/chatter/griffin_3.ogg and b/sound/runtime/chatter/griffin_3.ogg differ
diff --git a/sound/runtime/chatter/griffin_4.ogg b/sound/runtime/chatter/griffin_4.ogg
index 2d6612c7c00eb..12300a670cfa1 100644
Binary files a/sound/runtime/chatter/griffin_4.ogg and b/sound/runtime/chatter/griffin_4.ogg differ
diff --git a/sound/runtime/chatter/griffin_5.ogg b/sound/runtime/chatter/griffin_5.ogg
index 6125846392201..99f1379ff2cbc 100644
Binary files a/sound/runtime/chatter/griffin_5.ogg and b/sound/runtime/chatter/griffin_5.ogg differ
diff --git a/sound/runtime/chatter/griffin_6.ogg b/sound/runtime/chatter/griffin_6.ogg
index 43520cddf2a75..63ce3f94452e7 100644
Binary files a/sound/runtime/chatter/griffin_6.ogg and b/sound/runtime/chatter/griffin_6.ogg differ
diff --git a/sound/runtime/chatter/griffin_7.ogg b/sound/runtime/chatter/griffin_7.ogg
index b3ce436e4e562..a88b8254a0776 100644
Binary files a/sound/runtime/chatter/griffin_7.ogg and b/sound/runtime/chatter/griffin_7.ogg differ
diff --git a/sound/runtime/chatter/griffin_8.ogg b/sound/runtime/chatter/griffin_8.ogg
index bbf51f9877445..f35a8af056981 100644
Binary files a/sound/runtime/chatter/griffin_8.ogg and b/sound/runtime/chatter/griffin_8.ogg differ
diff --git a/sound/runtime/chatter/griffin_9.ogg b/sound/runtime/chatter/griffin_9.ogg
index 806c67de2f436..7ef93c91a0dec 100644
Binary files a/sound/runtime/chatter/griffin_9.ogg and b/sound/runtime/chatter/griffin_9.ogg differ
diff --git a/sound/runtime/chatter/owl_1.ogg b/sound/runtime/chatter/owl_1.ogg
index 3d41497d44b43..4b492ef5adfb3 100644
Binary files a/sound/runtime/chatter/owl_1.ogg and b/sound/runtime/chatter/owl_1.ogg differ
diff --git a/sound/runtime/chatter/owl_10.ogg b/sound/runtime/chatter/owl_10.ogg
index 97f45d4337886..6621bfa2aae5c 100644
Binary files a/sound/runtime/chatter/owl_10.ogg and b/sound/runtime/chatter/owl_10.ogg differ
diff --git a/sound/runtime/chatter/owl_2.ogg b/sound/runtime/chatter/owl_2.ogg
index 4937ee09fe3c3..eb6c8d951748f 100644
Binary files a/sound/runtime/chatter/owl_2.ogg and b/sound/runtime/chatter/owl_2.ogg differ
diff --git a/sound/runtime/chatter/owl_3.ogg b/sound/runtime/chatter/owl_3.ogg
index 7c8524e933df8..7cb7778f45b7d 100644
Binary files a/sound/runtime/chatter/owl_3.ogg and b/sound/runtime/chatter/owl_3.ogg differ
diff --git a/sound/runtime/chatter/owl_4.ogg b/sound/runtime/chatter/owl_4.ogg
index c1e8ee7635baa..b6116e2e26ddb 100644
Binary files a/sound/runtime/chatter/owl_4.ogg and b/sound/runtime/chatter/owl_4.ogg differ
diff --git a/sound/runtime/chatter/owl_5.ogg b/sound/runtime/chatter/owl_5.ogg
index 1210b05ac39a0..a028c9adfc0d7 100644
Binary files a/sound/runtime/chatter/owl_5.ogg and b/sound/runtime/chatter/owl_5.ogg differ
diff --git a/sound/runtime/chatter/owl_6.ogg b/sound/runtime/chatter/owl_6.ogg
index b965678688d72..aeabbd51348af 100644
Binary files a/sound/runtime/chatter/owl_6.ogg and b/sound/runtime/chatter/owl_6.ogg differ
diff --git a/sound/runtime/chatter/owl_7.ogg b/sound/runtime/chatter/owl_7.ogg
index fc330687a1104..5d6c15b2d14af 100644
Binary files a/sound/runtime/chatter/owl_7.ogg and b/sound/runtime/chatter/owl_7.ogg differ
diff --git a/sound/runtime/chatter/owl_8.ogg b/sound/runtime/chatter/owl_8.ogg
index e350b5be811b3..6210db690d5a2 100644
Binary files a/sound/runtime/chatter/owl_8.ogg and b/sound/runtime/chatter/owl_8.ogg differ
diff --git a/sound/runtime/chatter/owl_9.ogg b/sound/runtime/chatter/owl_9.ogg
index ec195a222f82d..664e080456ea7 100644
Binary files a/sound/runtime/chatter/owl_9.ogg and b/sound/runtime/chatter/owl_9.ogg differ
diff --git a/sound/runtime/complionator/asshole.ogg b/sound/runtime/complionator/asshole.ogg
index a6a326abe49e9..3176af8e4d006 100644
Binary files a/sound/runtime/complionator/asshole.ogg and b/sound/runtime/complionator/asshole.ogg differ
diff --git a/sound/runtime/complionator/bash.ogg b/sound/runtime/complionator/bash.ogg
index c14feb5b5fee8..949490a68135f 100644
Binary files a/sound/runtime/complionator/bash.ogg and b/sound/runtime/complionator/bash.ogg differ
diff --git a/sound/runtime/complionator/bobby.ogg b/sound/runtime/complionator/bobby.ogg
index b4a6a890f2003..96e308a11d93e 100644
Binary files a/sound/runtime/complionator/bobby.ogg and b/sound/runtime/complionator/bobby.ogg differ
diff --git a/sound/runtime/complionator/compliance.ogg b/sound/runtime/complionator/compliance.ogg
index 231f70aa36dcb..477509c8a53a8 100644
Binary files a/sound/runtime/complionator/compliance.ogg and b/sound/runtime/complionator/compliance.ogg differ
diff --git a/sound/runtime/complionator/dontmove.ogg b/sound/runtime/complionator/dontmove.ogg
index cb3ee03f7bcb3..5e0381038be48 100644
Binary files a/sound/runtime/complionator/dontmove.ogg and b/sound/runtime/complionator/dontmove.ogg differ
diff --git a/sound/runtime/complionator/dredd.ogg b/sound/runtime/complionator/dredd.ogg
index 8a3010489e27f..45f41b84864a3 100644
Binary files a/sound/runtime/complionator/dredd.ogg and b/sound/runtime/complionator/dredd.ogg differ
diff --git a/sound/runtime/complionator/emag.ogg b/sound/runtime/complionator/emag.ogg
index 89ec997ac94b3..debc194e6b0c7 100644
Binary files a/sound/runtime/complionator/emag.ogg and b/sound/runtime/complionator/emag.ogg differ
diff --git a/sound/runtime/complionator/floor.ogg b/sound/runtime/complionator/floor.ogg
index 0e29c78143b24..5de3346642bea 100644
Binary files a/sound/runtime/complionator/floor.ogg and b/sound/runtime/complionator/floor.ogg differ
diff --git a/sound/runtime/complionator/freeze.ogg b/sound/runtime/complionator/freeze.ogg
index 1be9ba7361bdc..b3aec18eb833d 100644
Binary files a/sound/runtime/complionator/freeze.ogg and b/sound/runtime/complionator/freeze.ogg differ
diff --git a/sound/runtime/complionator/god.ogg b/sound/runtime/complionator/god.ogg
index a109e2a351a21..9f765e22183e5 100644
Binary files a/sound/runtime/complionator/god.ogg and b/sound/runtime/complionator/god.ogg differ
diff --git a/sound/runtime/complionator/halt.ogg b/sound/runtime/complionator/halt.ogg
index 457091f4ce580..5a2b041150bf9 100644
Binary files a/sound/runtime/complionator/halt.ogg and b/sound/runtime/complionator/halt.ogg differ
diff --git a/sound/runtime/complionator/harry.ogg b/sound/runtime/complionator/harry.ogg
index 2ff2acc85653c..e2d2f00e91899 100644
Binary files a/sound/runtime/complionator/harry.ogg and b/sound/runtime/complionator/harry.ogg differ
diff --git a/sound/runtime/complionator/imperial.ogg b/sound/runtime/complionator/imperial.ogg
index df40102de18e6..bf8debfe2dba9 100644
Binary files a/sound/runtime/complionator/imperial.ogg and b/sound/runtime/complionator/imperial.ogg differ
diff --git a/sound/runtime/complionator/justice.ogg b/sound/runtime/complionator/justice.ogg
index 14409495ca06f..769919de778c4 100644
Binary files a/sound/runtime/complionator/justice.ogg and b/sound/runtime/complionator/justice.ogg differ
diff --git a/sound/runtime/complionator/robocop.ogg b/sound/runtime/complionator/robocop.ogg
index f7a19c78505a5..d07002e13eb00 100644
Binary files a/sound/runtime/complionator/robocop.ogg and b/sound/runtime/complionator/robocop.ogg differ
diff --git a/sound/runtime/complionator/running.ogg b/sound/runtime/complionator/running.ogg
index 82d68cdf2f23a..2eafbd1fc1625 100644
Binary files a/sound/runtime/complionator/running.ogg and b/sound/runtime/complionator/running.ogg differ
diff --git a/sound/runtime/complionator/shutup.ogg b/sound/runtime/complionator/shutup.ogg
index 8ca70a0989d9b..02132e75cee35 100644
Binary files a/sound/runtime/complionator/shutup.ogg and b/sound/runtime/complionator/shutup.ogg differ
diff --git a/sound/runtime/complionator/stfu.ogg b/sound/runtime/complionator/stfu.ogg
index 44c878ac119b7..1b7337686349f 100644
Binary files a/sound/runtime/complionator/stfu.ogg and b/sound/runtime/complionator/stfu.ogg differ
diff --git a/sound/runtime/complionator/super.ogg b/sound/runtime/complionator/super.ogg
index 2ec5183ae6bdf..329d5191f3b84 100644
Binary files a/sound/runtime/complionator/super.ogg and b/sound/runtime/complionator/super.ogg differ
diff --git a/sound/runtime/hyperspace/hyperspace_begin.ogg b/sound/runtime/hyperspace/hyperspace_begin.ogg
index f1e36f9d8fcc8..6ef9bec266203 100644
Binary files a/sound/runtime/hyperspace/hyperspace_begin.ogg and b/sound/runtime/hyperspace/hyperspace_begin.ogg differ
diff --git a/sound/runtime/hyperspace/hyperspace_begin_distance.ogg b/sound/runtime/hyperspace/hyperspace_begin_distance.ogg
index 6b2d3409094cf..c92176e2f7958 100644
Binary files a/sound/runtime/hyperspace/hyperspace_begin_distance.ogg and b/sound/runtime/hyperspace/hyperspace_begin_distance.ogg differ
diff --git a/sound/runtime/hyperspace/hyperspace_end.ogg b/sound/runtime/hyperspace/hyperspace_end.ogg
index 1c4320ae62c0f..ff9655dbcbdc5 100644
Binary files a/sound/runtime/hyperspace/hyperspace_end.ogg and b/sound/runtime/hyperspace/hyperspace_end.ogg differ
diff --git a/sound/runtime/hyperspace/hyperspace_end_distance.ogg b/sound/runtime/hyperspace/hyperspace_end_distance.ogg
index 119ff1523e87e..f5076c5a87bfb 100644
Binary files a/sound/runtime/hyperspace/hyperspace_end_distance.ogg and b/sound/runtime/hyperspace/hyperspace_end_distance.ogg differ
diff --git a/sound/runtime/hyperspace/hyperspace_progress.ogg b/sound/runtime/hyperspace/hyperspace_progress.ogg
index 2072f06590516..6a7b905f62277 100644
Binary files a/sound/runtime/hyperspace/hyperspace_progress.ogg and b/sound/runtime/hyperspace/hyperspace_progress.ogg differ
diff --git a/sound/runtime/hyperspace/hyperspace_progress_distance.ogg b/sound/runtime/hyperspace/hyperspace_progress_distance.ogg
index 7113513ed0b11..17940b4db7223 100644
Binary files a/sound/runtime/hyperspace/hyperspace_progress_distance.ogg and b/sound/runtime/hyperspace/hyperspace_progress_distance.ogg differ
diff --git a/sound/runtime/instruments/banjo/Ab3.ogg b/sound/runtime/instruments/banjo/Ab3.ogg
index 66e263bd615f5..1557ecaf71160 100644
Binary files a/sound/runtime/instruments/banjo/Ab3.ogg and b/sound/runtime/instruments/banjo/Ab3.ogg differ
diff --git a/sound/runtime/instruments/banjo/Ab4.ogg b/sound/runtime/instruments/banjo/Ab4.ogg
index f003e03233a8c..f31e751c07017 100644
Binary files a/sound/runtime/instruments/banjo/Ab4.ogg and b/sound/runtime/instruments/banjo/Ab4.ogg differ
diff --git a/sound/runtime/instruments/banjo/Ab5.ogg b/sound/runtime/instruments/banjo/Ab5.ogg
index c405725208e89..ae25f0a8365c8 100644
Binary files a/sound/runtime/instruments/banjo/Ab5.ogg and b/sound/runtime/instruments/banjo/Ab5.ogg differ
diff --git a/sound/runtime/instruments/banjo/An3.ogg b/sound/runtime/instruments/banjo/An3.ogg
index 1700704c9c108..f5bfdfedf97d1 100644
Binary files a/sound/runtime/instruments/banjo/An3.ogg and b/sound/runtime/instruments/banjo/An3.ogg differ
diff --git a/sound/runtime/instruments/banjo/An4.ogg b/sound/runtime/instruments/banjo/An4.ogg
index eb7279f869e3f..4a3c75b0b26fc 100644
Binary files a/sound/runtime/instruments/banjo/An4.ogg and b/sound/runtime/instruments/banjo/An4.ogg differ
diff --git a/sound/runtime/instruments/banjo/An5.ogg b/sound/runtime/instruments/banjo/An5.ogg
index d9cf57c0febc4..0c3e1ffba73c8 100644
Binary files a/sound/runtime/instruments/banjo/An5.ogg and b/sound/runtime/instruments/banjo/An5.ogg differ
diff --git a/sound/runtime/instruments/banjo/Bb3.ogg b/sound/runtime/instruments/banjo/Bb3.ogg
index d3f757c0aceba..ab5c4e39847ba 100644
Binary files a/sound/runtime/instruments/banjo/Bb3.ogg and b/sound/runtime/instruments/banjo/Bb3.ogg differ
diff --git a/sound/runtime/instruments/banjo/Bb4.ogg b/sound/runtime/instruments/banjo/Bb4.ogg
index a9d869091bfba..d29922e9a4916 100644
Binary files a/sound/runtime/instruments/banjo/Bb4.ogg and b/sound/runtime/instruments/banjo/Bb4.ogg differ
diff --git a/sound/runtime/instruments/banjo/Bb5.ogg b/sound/runtime/instruments/banjo/Bb5.ogg
index a56e6c2500523..df91d33b3b4c4 100644
Binary files a/sound/runtime/instruments/banjo/Bb5.ogg and b/sound/runtime/instruments/banjo/Bb5.ogg differ
diff --git a/sound/runtime/instruments/banjo/Bn2.ogg b/sound/runtime/instruments/banjo/Bn2.ogg
index 3154f97419378..4353c649f7ab3 100644
Binary files a/sound/runtime/instruments/banjo/Bn2.ogg and b/sound/runtime/instruments/banjo/Bn2.ogg differ
diff --git a/sound/runtime/instruments/banjo/Bn3.ogg b/sound/runtime/instruments/banjo/Bn3.ogg
index 6c72ec2fd5ad7..9b8c4eed1b71d 100644
Binary files a/sound/runtime/instruments/banjo/Bn3.ogg and b/sound/runtime/instruments/banjo/Bn3.ogg differ
diff --git a/sound/runtime/instruments/banjo/Bn4.ogg b/sound/runtime/instruments/banjo/Bn4.ogg
index b0e9a2b3b2f6b..25c0cf7873faa 100644
Binary files a/sound/runtime/instruments/banjo/Bn4.ogg and b/sound/runtime/instruments/banjo/Bn4.ogg differ
diff --git a/sound/runtime/instruments/banjo/Bn5.ogg b/sound/runtime/instruments/banjo/Bn5.ogg
index 1b002140b8797..4c457c2a12604 100644
Binary files a/sound/runtime/instruments/banjo/Bn5.ogg and b/sound/runtime/instruments/banjo/Bn5.ogg differ
diff --git a/sound/runtime/instruments/banjo/Cn3.ogg b/sound/runtime/instruments/banjo/Cn3.ogg
index 6ef414d9d01cb..89c1c28f6b60f 100644
Binary files a/sound/runtime/instruments/banjo/Cn3.ogg and b/sound/runtime/instruments/banjo/Cn3.ogg differ
diff --git a/sound/runtime/instruments/banjo/Cn4.ogg b/sound/runtime/instruments/banjo/Cn4.ogg
index 4a26a6741db56..17041c6919872 100644
Binary files a/sound/runtime/instruments/banjo/Cn4.ogg and b/sound/runtime/instruments/banjo/Cn4.ogg differ
diff --git a/sound/runtime/instruments/banjo/Cn5.ogg b/sound/runtime/instruments/banjo/Cn5.ogg
index 901ed3bc08b36..1a7c0f41ba2c5 100644
Binary files a/sound/runtime/instruments/banjo/Cn5.ogg and b/sound/runtime/instruments/banjo/Cn5.ogg differ
diff --git a/sound/runtime/instruments/banjo/Cn6.ogg b/sound/runtime/instruments/banjo/Cn6.ogg
index 5cdbbb17cea63..f06536058eac7 100644
Binary files a/sound/runtime/instruments/banjo/Cn6.ogg and b/sound/runtime/instruments/banjo/Cn6.ogg differ
diff --git a/sound/runtime/instruments/banjo/Db3.ogg b/sound/runtime/instruments/banjo/Db3.ogg
index 1ebffdf5025df..626c154c087b3 100644
Binary files a/sound/runtime/instruments/banjo/Db3.ogg and b/sound/runtime/instruments/banjo/Db3.ogg differ
diff --git a/sound/runtime/instruments/banjo/Db4.ogg b/sound/runtime/instruments/banjo/Db4.ogg
index 5b93936508641..66564697f13a3 100644
Binary files a/sound/runtime/instruments/banjo/Db4.ogg and b/sound/runtime/instruments/banjo/Db4.ogg differ
diff --git a/sound/runtime/instruments/banjo/Db5.ogg b/sound/runtime/instruments/banjo/Db5.ogg
index 6ee4dde94799c..438fe4e3da81b 100644
Binary files a/sound/runtime/instruments/banjo/Db5.ogg and b/sound/runtime/instruments/banjo/Db5.ogg differ
diff --git a/sound/runtime/instruments/banjo/Db6.ogg b/sound/runtime/instruments/banjo/Db6.ogg
index fd73894fda600..331000b0ba4a4 100644
Binary files a/sound/runtime/instruments/banjo/Db6.ogg and b/sound/runtime/instruments/banjo/Db6.ogg differ
diff --git a/sound/runtime/instruments/banjo/Dn3.ogg b/sound/runtime/instruments/banjo/Dn3.ogg
index 77491b01b8c97..d1b72d86f8a0b 100644
Binary files a/sound/runtime/instruments/banjo/Dn3.ogg and b/sound/runtime/instruments/banjo/Dn3.ogg differ
diff --git a/sound/runtime/instruments/banjo/Dn4.ogg b/sound/runtime/instruments/banjo/Dn4.ogg
index 11f68b5a1575b..958f6728a0c6d 100644
Binary files a/sound/runtime/instruments/banjo/Dn4.ogg and b/sound/runtime/instruments/banjo/Dn4.ogg differ
diff --git a/sound/runtime/instruments/banjo/Dn5.ogg b/sound/runtime/instruments/banjo/Dn5.ogg
index 2e9ebe49891f6..f073f74476352 100644
Binary files a/sound/runtime/instruments/banjo/Dn5.ogg and b/sound/runtime/instruments/banjo/Dn5.ogg differ
diff --git a/sound/runtime/instruments/banjo/Dn6.ogg b/sound/runtime/instruments/banjo/Dn6.ogg
index 89ae62361dc12..c7dbb8b374f75 100644
Binary files a/sound/runtime/instruments/banjo/Dn6.ogg and b/sound/runtime/instruments/banjo/Dn6.ogg differ
diff --git a/sound/runtime/instruments/banjo/Eb3.ogg b/sound/runtime/instruments/banjo/Eb3.ogg
index 1d1e43049d21b..c2b3c5c26c1b5 100644
Binary files a/sound/runtime/instruments/banjo/Eb3.ogg and b/sound/runtime/instruments/banjo/Eb3.ogg differ
diff --git a/sound/runtime/instruments/banjo/Eb4.ogg b/sound/runtime/instruments/banjo/Eb4.ogg
index 2722655f5a3ad..d30a0e156ce06 100644
Binary files a/sound/runtime/instruments/banjo/Eb4.ogg and b/sound/runtime/instruments/banjo/Eb4.ogg differ
diff --git a/sound/runtime/instruments/banjo/Eb5.ogg b/sound/runtime/instruments/banjo/Eb5.ogg
index 7a109dfdf79c8..3d0e7ace96434 100644
Binary files a/sound/runtime/instruments/banjo/Eb5.ogg and b/sound/runtime/instruments/banjo/Eb5.ogg differ
diff --git a/sound/runtime/instruments/banjo/En3.ogg b/sound/runtime/instruments/banjo/En3.ogg
index 4610efdd4f05b..551564bb66920 100644
Binary files a/sound/runtime/instruments/banjo/En3.ogg and b/sound/runtime/instruments/banjo/En3.ogg differ
diff --git a/sound/runtime/instruments/banjo/En4.ogg b/sound/runtime/instruments/banjo/En4.ogg
index 64c14daf915cc..ef8982b4cf19a 100644
Binary files a/sound/runtime/instruments/banjo/En4.ogg and b/sound/runtime/instruments/banjo/En4.ogg differ
diff --git a/sound/runtime/instruments/banjo/En5.ogg b/sound/runtime/instruments/banjo/En5.ogg
index 8e0b6c1637e4c..e22114b64955b 100644
Binary files a/sound/runtime/instruments/banjo/En5.ogg and b/sound/runtime/instruments/banjo/En5.ogg differ
diff --git a/sound/runtime/instruments/banjo/Fn3.ogg b/sound/runtime/instruments/banjo/Fn3.ogg
index 5cdc4f13fb336..a6776c9de41a9 100644
Binary files a/sound/runtime/instruments/banjo/Fn3.ogg and b/sound/runtime/instruments/banjo/Fn3.ogg differ
diff --git a/sound/runtime/instruments/banjo/Fn4.ogg b/sound/runtime/instruments/banjo/Fn4.ogg
index 78d5454f18669..9db7f3e38d811 100644
Binary files a/sound/runtime/instruments/banjo/Fn4.ogg and b/sound/runtime/instruments/banjo/Fn4.ogg differ
diff --git a/sound/runtime/instruments/banjo/Fn5.ogg b/sound/runtime/instruments/banjo/Fn5.ogg
index b21559b4656ea..27fdadb2f51be 100644
Binary files a/sound/runtime/instruments/banjo/Fn5.ogg and b/sound/runtime/instruments/banjo/Fn5.ogg differ
diff --git a/sound/runtime/instruments/banjo/Gb3.ogg b/sound/runtime/instruments/banjo/Gb3.ogg
index fd055b747175f..2d41e12cb37b2 100644
Binary files a/sound/runtime/instruments/banjo/Gb3.ogg and b/sound/runtime/instruments/banjo/Gb3.ogg differ
diff --git a/sound/runtime/instruments/banjo/Gb4.ogg b/sound/runtime/instruments/banjo/Gb4.ogg
index f2c62510ed039..9560cf608913c 100644
Binary files a/sound/runtime/instruments/banjo/Gb4.ogg and b/sound/runtime/instruments/banjo/Gb4.ogg differ
diff --git a/sound/runtime/instruments/banjo/Gb5.ogg b/sound/runtime/instruments/banjo/Gb5.ogg
index ab17347912bf0..043334e6482d0 100644
Binary files a/sound/runtime/instruments/banjo/Gb5.ogg and b/sound/runtime/instruments/banjo/Gb5.ogg differ
diff --git a/sound/runtime/instruments/banjo/Gn3.ogg b/sound/runtime/instruments/banjo/Gn3.ogg
index ad52ef85c0871..c24792cf05511 100644
Binary files a/sound/runtime/instruments/banjo/Gn3.ogg and b/sound/runtime/instruments/banjo/Gn3.ogg differ
diff --git a/sound/runtime/instruments/banjo/Gn4.ogg b/sound/runtime/instruments/banjo/Gn4.ogg
index 2ddb13b86b3ee..b989fa1d7fa63 100644
Binary files a/sound/runtime/instruments/banjo/Gn4.ogg and b/sound/runtime/instruments/banjo/Gn4.ogg differ
diff --git a/sound/runtime/instruments/banjo/Gn5.ogg b/sound/runtime/instruments/banjo/Gn5.ogg
index d5a7886c4cff8..187c5cdb6a0c1 100644
Binary files a/sound/runtime/instruments/banjo/Gn5.ogg and b/sound/runtime/instruments/banjo/Gn5.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Ab2.ogg b/sound/runtime/instruments/bikehorn/Ab2.ogg
index 516dc5f1a51b6..4abdd02c0b384 100644
Binary files a/sound/runtime/instruments/bikehorn/Ab2.ogg and b/sound/runtime/instruments/bikehorn/Ab2.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Ab3.ogg b/sound/runtime/instruments/bikehorn/Ab3.ogg
index 6110ccc005bf9..0796bad99faf1 100644
Binary files a/sound/runtime/instruments/bikehorn/Ab3.ogg and b/sound/runtime/instruments/bikehorn/Ab3.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Ab4.ogg b/sound/runtime/instruments/bikehorn/Ab4.ogg
index b69bc30a425fb..80de02b9bea6b 100644
Binary files a/sound/runtime/instruments/bikehorn/Ab4.ogg and b/sound/runtime/instruments/bikehorn/Ab4.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/An2.ogg b/sound/runtime/instruments/bikehorn/An2.ogg
index 29c97fc38e2f9..d16f96ca7ca16 100644
Binary files a/sound/runtime/instruments/bikehorn/An2.ogg and b/sound/runtime/instruments/bikehorn/An2.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/An3.ogg b/sound/runtime/instruments/bikehorn/An3.ogg
index f9f67aaa53015..1ec7013323c07 100644
Binary files a/sound/runtime/instruments/bikehorn/An3.ogg and b/sound/runtime/instruments/bikehorn/An3.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/An4.ogg b/sound/runtime/instruments/bikehorn/An4.ogg
index 74b9fa6adc2dd..c965851a5c81d 100644
Binary files a/sound/runtime/instruments/bikehorn/An4.ogg and b/sound/runtime/instruments/bikehorn/An4.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Bb2.ogg b/sound/runtime/instruments/bikehorn/Bb2.ogg
index 5cee07e1920ef..70896c29e1464 100644
Binary files a/sound/runtime/instruments/bikehorn/Bb2.ogg and b/sound/runtime/instruments/bikehorn/Bb2.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Bb3.ogg b/sound/runtime/instruments/bikehorn/Bb3.ogg
index f655ba973cee6..5a8e49a28eeb0 100644
Binary files a/sound/runtime/instruments/bikehorn/Bb3.ogg and b/sound/runtime/instruments/bikehorn/Bb3.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Bb4.ogg b/sound/runtime/instruments/bikehorn/Bb4.ogg
index 54dc87781eb4f..b4d29170576d0 100644
Binary files a/sound/runtime/instruments/bikehorn/Bb4.ogg and b/sound/runtime/instruments/bikehorn/Bb4.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Bn2.ogg b/sound/runtime/instruments/bikehorn/Bn2.ogg
index ff86ec9719087..993d713943ea6 100644
Binary files a/sound/runtime/instruments/bikehorn/Bn2.ogg and b/sound/runtime/instruments/bikehorn/Bn2.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Bn3.ogg b/sound/runtime/instruments/bikehorn/Bn3.ogg
index c639f34e8e5ad..c66f5ed8a995d 100644
Binary files a/sound/runtime/instruments/bikehorn/Bn3.ogg and b/sound/runtime/instruments/bikehorn/Bn3.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Bn4.ogg b/sound/runtime/instruments/bikehorn/Bn4.ogg
index ea0bc643c5408..b29e7636168c8 100644
Binary files a/sound/runtime/instruments/bikehorn/Bn4.ogg and b/sound/runtime/instruments/bikehorn/Bn4.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Cn3.ogg b/sound/runtime/instruments/bikehorn/Cn3.ogg
index 129a67d6bdf59..c6921d8e23fae 100644
Binary files a/sound/runtime/instruments/bikehorn/Cn3.ogg and b/sound/runtime/instruments/bikehorn/Cn3.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Cn4.ogg b/sound/runtime/instruments/bikehorn/Cn4.ogg
index e02a4fa8d2285..d0dc3484cc105 100644
Binary files a/sound/runtime/instruments/bikehorn/Cn4.ogg and b/sound/runtime/instruments/bikehorn/Cn4.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Cn5.ogg b/sound/runtime/instruments/bikehorn/Cn5.ogg
index eb0b76dadc113..058f10f9160e8 100644
Binary files a/sound/runtime/instruments/bikehorn/Cn5.ogg and b/sound/runtime/instruments/bikehorn/Cn5.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Db3.ogg b/sound/runtime/instruments/bikehorn/Db3.ogg
index 000c38fb67a24..e3dbbd5c2b235 100644
Binary files a/sound/runtime/instruments/bikehorn/Db3.ogg and b/sound/runtime/instruments/bikehorn/Db3.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Db4.ogg b/sound/runtime/instruments/bikehorn/Db4.ogg
index 2f9423914a1c6..36f8d03900468 100644
Binary files a/sound/runtime/instruments/bikehorn/Db4.ogg and b/sound/runtime/instruments/bikehorn/Db4.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Db5.ogg b/sound/runtime/instruments/bikehorn/Db5.ogg
index e65b43a288238..63a162a11a2e6 100644
Binary files a/sound/runtime/instruments/bikehorn/Db5.ogg and b/sound/runtime/instruments/bikehorn/Db5.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Dn3.ogg b/sound/runtime/instruments/bikehorn/Dn3.ogg
index f132cd6ba55e5..9faf69367e368 100644
Binary files a/sound/runtime/instruments/bikehorn/Dn3.ogg and b/sound/runtime/instruments/bikehorn/Dn3.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Dn4.ogg b/sound/runtime/instruments/bikehorn/Dn4.ogg
index 196100f483a81..d642401b321ff 100644
Binary files a/sound/runtime/instruments/bikehorn/Dn4.ogg and b/sound/runtime/instruments/bikehorn/Dn4.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Dn5.ogg b/sound/runtime/instruments/bikehorn/Dn5.ogg
index cca45f947394d..96c1593b9fe2f 100644
Binary files a/sound/runtime/instruments/bikehorn/Dn5.ogg and b/sound/runtime/instruments/bikehorn/Dn5.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Eb3.ogg b/sound/runtime/instruments/bikehorn/Eb3.ogg
index 8fd4306ae39b9..e2cb22688f3d8 100644
Binary files a/sound/runtime/instruments/bikehorn/Eb3.ogg and b/sound/runtime/instruments/bikehorn/Eb3.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Eb4.ogg b/sound/runtime/instruments/bikehorn/Eb4.ogg
index 72700fd0e36af..cfd30b8ec340b 100644
Binary files a/sound/runtime/instruments/bikehorn/Eb4.ogg and b/sound/runtime/instruments/bikehorn/Eb4.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Eb5.ogg b/sound/runtime/instruments/bikehorn/Eb5.ogg
index d2c050ec09fc1..559b088e3772b 100644
Binary files a/sound/runtime/instruments/bikehorn/Eb5.ogg and b/sound/runtime/instruments/bikehorn/Eb5.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/En2.ogg b/sound/runtime/instruments/bikehorn/En2.ogg
index ab9bb7dd4524f..98c022e796470 100644
Binary files a/sound/runtime/instruments/bikehorn/En2.ogg and b/sound/runtime/instruments/bikehorn/En2.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/En3.ogg b/sound/runtime/instruments/bikehorn/En3.ogg
index cac18c0249d96..44e9866af2dbb 100644
Binary files a/sound/runtime/instruments/bikehorn/En3.ogg and b/sound/runtime/instruments/bikehorn/En3.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/En4.ogg b/sound/runtime/instruments/bikehorn/En4.ogg
index 17c9fc4ea28a5..918f791d34000 100644
Binary files a/sound/runtime/instruments/bikehorn/En4.ogg and b/sound/runtime/instruments/bikehorn/En4.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Fn2.ogg b/sound/runtime/instruments/bikehorn/Fn2.ogg
index 9db5395083539..7650401784ee8 100644
Binary files a/sound/runtime/instruments/bikehorn/Fn2.ogg and b/sound/runtime/instruments/bikehorn/Fn2.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Fn3.ogg b/sound/runtime/instruments/bikehorn/Fn3.ogg
index 1228fafc94463..12fcf9b53a429 100644
Binary files a/sound/runtime/instruments/bikehorn/Fn3.ogg and b/sound/runtime/instruments/bikehorn/Fn3.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Fn4.ogg b/sound/runtime/instruments/bikehorn/Fn4.ogg
index 3744a1a3bf7ec..35a77adf8cf42 100644
Binary files a/sound/runtime/instruments/bikehorn/Fn4.ogg and b/sound/runtime/instruments/bikehorn/Fn4.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Gb2.ogg b/sound/runtime/instruments/bikehorn/Gb2.ogg
index 6625b93d163f0..b0d3d0f27ecc7 100644
Binary files a/sound/runtime/instruments/bikehorn/Gb2.ogg and b/sound/runtime/instruments/bikehorn/Gb2.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Gb3.ogg b/sound/runtime/instruments/bikehorn/Gb3.ogg
index 03154ab427ef6..7cf878bd35ed8 100644
Binary files a/sound/runtime/instruments/bikehorn/Gb3.ogg and b/sound/runtime/instruments/bikehorn/Gb3.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Gb4.ogg b/sound/runtime/instruments/bikehorn/Gb4.ogg
index 59958dbae47a0..ea732930d6dd5 100644
Binary files a/sound/runtime/instruments/bikehorn/Gb4.ogg and b/sound/runtime/instruments/bikehorn/Gb4.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Gn2.ogg b/sound/runtime/instruments/bikehorn/Gn2.ogg
index 95faf3389d705..fd7a1a07f2af4 100644
Binary files a/sound/runtime/instruments/bikehorn/Gn2.ogg and b/sound/runtime/instruments/bikehorn/Gn2.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Gn3.ogg b/sound/runtime/instruments/bikehorn/Gn3.ogg
index f903ae66156a0..7e396d5334077 100644
Binary files a/sound/runtime/instruments/bikehorn/Gn3.ogg and b/sound/runtime/instruments/bikehorn/Gn3.ogg differ
diff --git a/sound/runtime/instruments/bikehorn/Gn4.ogg b/sound/runtime/instruments/bikehorn/Gn4.ogg
index 6631da09e6942..34b6477b13e85 100644
Binary files a/sound/runtime/instruments/bikehorn/Gn4.ogg and b/sound/runtime/instruments/bikehorn/Gn4.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Ab4.ogg b/sound/runtime/instruments/electric_guitar/Ab4.ogg
index de291593ee00f..b73e7db6e8acd 100644
Binary files a/sound/runtime/instruments/electric_guitar/Ab4.ogg and b/sound/runtime/instruments/electric_guitar/Ab4.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Ab5.ogg b/sound/runtime/instruments/electric_guitar/Ab5.ogg
index 8103ab4023475..29482552af61e 100644
Binary files a/sound/runtime/instruments/electric_guitar/Ab5.ogg and b/sound/runtime/instruments/electric_guitar/Ab5.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Ab6.ogg b/sound/runtime/instruments/electric_guitar/Ab6.ogg
index 220e1571d4c0d..88a5ffd7d89eb 100644
Binary files a/sound/runtime/instruments/electric_guitar/Ab6.ogg and b/sound/runtime/instruments/electric_guitar/Ab6.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/An4.ogg b/sound/runtime/instruments/electric_guitar/An4.ogg
index 250b1b435a01b..66098690c33e1 100644
Binary files a/sound/runtime/instruments/electric_guitar/An4.ogg and b/sound/runtime/instruments/electric_guitar/An4.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/An5.ogg b/sound/runtime/instruments/electric_guitar/An5.ogg
index 54d198d395468..0f91b1a36791d 100644
Binary files a/sound/runtime/instruments/electric_guitar/An5.ogg and b/sound/runtime/instruments/electric_guitar/An5.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/An6.ogg b/sound/runtime/instruments/electric_guitar/An6.ogg
index aacaa90f036e9..b2977d09a0c9b 100644
Binary files a/sound/runtime/instruments/electric_guitar/An6.ogg and b/sound/runtime/instruments/electric_guitar/An6.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Bb4.ogg b/sound/runtime/instruments/electric_guitar/Bb4.ogg
index c275fdc0b7533..90d34e8f4a2ad 100644
Binary files a/sound/runtime/instruments/electric_guitar/Bb4.ogg and b/sound/runtime/instruments/electric_guitar/Bb4.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Bb5.ogg b/sound/runtime/instruments/electric_guitar/Bb5.ogg
index 3d32c5280d4f4..94b755ed315a3 100644
Binary files a/sound/runtime/instruments/electric_guitar/Bb5.ogg and b/sound/runtime/instruments/electric_guitar/Bb5.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Bb6.ogg b/sound/runtime/instruments/electric_guitar/Bb6.ogg
index c89618326ae6d..50e1fee5069cd 100644
Binary files a/sound/runtime/instruments/electric_guitar/Bb6.ogg and b/sound/runtime/instruments/electric_guitar/Bb6.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Bn4.ogg b/sound/runtime/instruments/electric_guitar/Bn4.ogg
index 458ea14336a9a..1ce975d4a8a27 100644
Binary files a/sound/runtime/instruments/electric_guitar/Bn4.ogg and b/sound/runtime/instruments/electric_guitar/Bn4.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Bn5.ogg b/sound/runtime/instruments/electric_guitar/Bn5.ogg
index 4bd02b83c3bf9..47a86c0e00191 100644
Binary files a/sound/runtime/instruments/electric_guitar/Bn5.ogg and b/sound/runtime/instruments/electric_guitar/Bn5.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Bn6.ogg b/sound/runtime/instruments/electric_guitar/Bn6.ogg
index c1d1cf5f4b053..e3a24e847c159 100644
Binary files a/sound/runtime/instruments/electric_guitar/Bn6.ogg and b/sound/runtime/instruments/electric_guitar/Bn6.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Cn4.ogg b/sound/runtime/instruments/electric_guitar/Cn4.ogg
index 43f4308063225..eb600da4acc60 100644
Binary files a/sound/runtime/instruments/electric_guitar/Cn4.ogg and b/sound/runtime/instruments/electric_guitar/Cn4.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Cn5.ogg b/sound/runtime/instruments/electric_guitar/Cn5.ogg
index 4a97fdcfad1e8..efb91c6629f0e 100644
Binary files a/sound/runtime/instruments/electric_guitar/Cn5.ogg and b/sound/runtime/instruments/electric_guitar/Cn5.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Cn6.ogg b/sound/runtime/instruments/electric_guitar/Cn6.ogg
index c67fcae46c444..d9e11abb79424 100644
Binary files a/sound/runtime/instruments/electric_guitar/Cn6.ogg and b/sound/runtime/instruments/electric_guitar/Cn6.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Cn7.ogg b/sound/runtime/instruments/electric_guitar/Cn7.ogg
index f193f5b06279c..299a3a1eb45e3 100644
Binary files a/sound/runtime/instruments/electric_guitar/Cn7.ogg and b/sound/runtime/instruments/electric_guitar/Cn7.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Db4.ogg b/sound/runtime/instruments/electric_guitar/Db4.ogg
index ee975d555a29f..3b5b890a0b9a7 100644
Binary files a/sound/runtime/instruments/electric_guitar/Db4.ogg and b/sound/runtime/instruments/electric_guitar/Db4.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Db5.ogg b/sound/runtime/instruments/electric_guitar/Db5.ogg
index 6904962cd774a..ecf8eb689347c 100644
Binary files a/sound/runtime/instruments/electric_guitar/Db5.ogg and b/sound/runtime/instruments/electric_guitar/Db5.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Db6.ogg b/sound/runtime/instruments/electric_guitar/Db6.ogg
index 421b05904921a..f80bb72b332f5 100644
Binary files a/sound/runtime/instruments/electric_guitar/Db6.ogg and b/sound/runtime/instruments/electric_guitar/Db6.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Dn4.ogg b/sound/runtime/instruments/electric_guitar/Dn4.ogg
index b6287800fb70a..e8efb84e0c041 100644
Binary files a/sound/runtime/instruments/electric_guitar/Dn4.ogg and b/sound/runtime/instruments/electric_guitar/Dn4.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Dn5.ogg b/sound/runtime/instruments/electric_guitar/Dn5.ogg
index 92f723cff016b..8c28bfb1d1109 100644
Binary files a/sound/runtime/instruments/electric_guitar/Dn5.ogg and b/sound/runtime/instruments/electric_guitar/Dn5.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Dn6.ogg b/sound/runtime/instruments/electric_guitar/Dn6.ogg
index 53c2de97d23c4..f75c5bdc06a81 100644
Binary files a/sound/runtime/instruments/electric_guitar/Dn6.ogg and b/sound/runtime/instruments/electric_guitar/Dn6.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Eb4.ogg b/sound/runtime/instruments/electric_guitar/Eb4.ogg
index 0349b819b3315..7fd82bd3686bc 100644
Binary files a/sound/runtime/instruments/electric_guitar/Eb4.ogg and b/sound/runtime/instruments/electric_guitar/Eb4.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Eb5.ogg b/sound/runtime/instruments/electric_guitar/Eb5.ogg
index 40d3c89a90be2..a9a9ed4b54575 100644
Binary files a/sound/runtime/instruments/electric_guitar/Eb5.ogg and b/sound/runtime/instruments/electric_guitar/Eb5.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Eb6.ogg b/sound/runtime/instruments/electric_guitar/Eb6.ogg
index dd1fcbc58df35..8afbb83e3136b 100644
Binary files a/sound/runtime/instruments/electric_guitar/Eb6.ogg and b/sound/runtime/instruments/electric_guitar/Eb6.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/En4.ogg b/sound/runtime/instruments/electric_guitar/En4.ogg
index 2ceeafe4d7b60..f726b26ace58a 100644
Binary files a/sound/runtime/instruments/electric_guitar/En4.ogg and b/sound/runtime/instruments/electric_guitar/En4.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/En5.ogg b/sound/runtime/instruments/electric_guitar/En5.ogg
index 2be8538db7f44..80c9d370b6649 100644
Binary files a/sound/runtime/instruments/electric_guitar/En5.ogg and b/sound/runtime/instruments/electric_guitar/En5.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/En6.ogg b/sound/runtime/instruments/electric_guitar/En6.ogg
index 5b0a135a789fc..2aacc8ee5d7fd 100644
Binary files a/sound/runtime/instruments/electric_guitar/En6.ogg and b/sound/runtime/instruments/electric_guitar/En6.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Fn4.ogg b/sound/runtime/instruments/electric_guitar/Fn4.ogg
index b23a19278b053..eebb00127cb28 100644
Binary files a/sound/runtime/instruments/electric_guitar/Fn4.ogg and b/sound/runtime/instruments/electric_guitar/Fn4.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Fn5.ogg b/sound/runtime/instruments/electric_guitar/Fn5.ogg
index 4caadbee97852..e1b4896385ab8 100644
Binary files a/sound/runtime/instruments/electric_guitar/Fn5.ogg and b/sound/runtime/instruments/electric_guitar/Fn5.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Fn6.ogg b/sound/runtime/instruments/electric_guitar/Fn6.ogg
index 5177ad4dcd9bc..5ca477a0fc5d3 100644
Binary files a/sound/runtime/instruments/electric_guitar/Fn6.ogg and b/sound/runtime/instruments/electric_guitar/Fn6.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Gb4.ogg b/sound/runtime/instruments/electric_guitar/Gb4.ogg
index aba86ff66c106..1529e692e1460 100644
Binary files a/sound/runtime/instruments/electric_guitar/Gb4.ogg and b/sound/runtime/instruments/electric_guitar/Gb4.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Gb5.ogg b/sound/runtime/instruments/electric_guitar/Gb5.ogg
index 758a83f792a43..92c79020ab298 100644
Binary files a/sound/runtime/instruments/electric_guitar/Gb5.ogg and b/sound/runtime/instruments/electric_guitar/Gb5.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Gb6.ogg b/sound/runtime/instruments/electric_guitar/Gb6.ogg
index 7caed1f85f6e0..b515c1d6e7965 100644
Binary files a/sound/runtime/instruments/electric_guitar/Gb6.ogg and b/sound/runtime/instruments/electric_guitar/Gb6.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Gn4.ogg b/sound/runtime/instruments/electric_guitar/Gn4.ogg
index 9f7a35b3935b7..e6e9622009158 100644
Binary files a/sound/runtime/instruments/electric_guitar/Gn4.ogg and b/sound/runtime/instruments/electric_guitar/Gn4.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Gn5.ogg b/sound/runtime/instruments/electric_guitar/Gn5.ogg
index d55d4148815df..6f1517c8a7143 100644
Binary files a/sound/runtime/instruments/electric_guitar/Gn5.ogg and b/sound/runtime/instruments/electric_guitar/Gn5.ogg differ
diff --git a/sound/runtime/instruments/electric_guitar/Gn6.ogg b/sound/runtime/instruments/electric_guitar/Gn6.ogg
index 4cb5e2c63ee10..a73e10fb2f56e 100644
Binary files a/sound/runtime/instruments/electric_guitar/Gn6.ogg and b/sound/runtime/instruments/electric_guitar/Gn6.ogg differ
diff --git a/sound/runtime/instruments/guitar/Ab3.ogg b/sound/runtime/instruments/guitar/Ab3.ogg
index 6e242786c4086..593c01c5278a8 100644
Binary files a/sound/runtime/instruments/guitar/Ab3.ogg and b/sound/runtime/instruments/guitar/Ab3.ogg differ
diff --git a/sound/runtime/instruments/guitar/Ab4.ogg b/sound/runtime/instruments/guitar/Ab4.ogg
index 6f854ea5d3f0e..d9caf0abcb9af 100644
Binary files a/sound/runtime/instruments/guitar/Ab4.ogg and b/sound/runtime/instruments/guitar/Ab4.ogg differ
diff --git a/sound/runtime/instruments/guitar/Ab5.ogg b/sound/runtime/instruments/guitar/Ab5.ogg
index 53ba1c01520ba..f84718e2031c7 100644
Binary files a/sound/runtime/instruments/guitar/Ab5.ogg and b/sound/runtime/instruments/guitar/Ab5.ogg differ
diff --git a/sound/runtime/instruments/guitar/Ab6.ogg b/sound/runtime/instruments/guitar/Ab6.ogg
index d0a238ba60793..82dbb14fc0c23 100644
Binary files a/sound/runtime/instruments/guitar/Ab6.ogg and b/sound/runtime/instruments/guitar/Ab6.ogg differ
diff --git a/sound/runtime/instruments/guitar/An3.ogg b/sound/runtime/instruments/guitar/An3.ogg
index 1f06e6d4f284d..4647632072f7c 100644
Binary files a/sound/runtime/instruments/guitar/An3.ogg and b/sound/runtime/instruments/guitar/An3.ogg differ
diff --git a/sound/runtime/instruments/guitar/An4.ogg b/sound/runtime/instruments/guitar/An4.ogg
index f3354df46b985..15f0afcf3484f 100644
Binary files a/sound/runtime/instruments/guitar/An4.ogg and b/sound/runtime/instruments/guitar/An4.ogg differ
diff --git a/sound/runtime/instruments/guitar/An5.ogg b/sound/runtime/instruments/guitar/An5.ogg
index fc3b1b345c91e..7363c2f771e51 100644
Binary files a/sound/runtime/instruments/guitar/An5.ogg and b/sound/runtime/instruments/guitar/An5.ogg differ
diff --git a/sound/runtime/instruments/guitar/An6.ogg b/sound/runtime/instruments/guitar/An6.ogg
index f58a50d2a6591..3b0131909336b 100644
Binary files a/sound/runtime/instruments/guitar/An6.ogg and b/sound/runtime/instruments/guitar/An6.ogg differ
diff --git a/sound/runtime/instruments/guitar/Bb3.ogg b/sound/runtime/instruments/guitar/Bb3.ogg
index e88343d88fbb5..5baab387f016e 100644
Binary files a/sound/runtime/instruments/guitar/Bb3.ogg and b/sound/runtime/instruments/guitar/Bb3.ogg differ
diff --git a/sound/runtime/instruments/guitar/Bb4.ogg b/sound/runtime/instruments/guitar/Bb4.ogg
index 11b883285da49..4ac210483cea5 100644
Binary files a/sound/runtime/instruments/guitar/Bb4.ogg and b/sound/runtime/instruments/guitar/Bb4.ogg differ
diff --git a/sound/runtime/instruments/guitar/Bb5.ogg b/sound/runtime/instruments/guitar/Bb5.ogg
index 5d9b10f87a6bc..be2dccbf22447 100644
Binary files a/sound/runtime/instruments/guitar/Bb5.ogg and b/sound/runtime/instruments/guitar/Bb5.ogg differ
diff --git a/sound/runtime/instruments/guitar/Bb6.ogg b/sound/runtime/instruments/guitar/Bb6.ogg
index c7f11ef59a63e..0685c8b8848c1 100644
Binary files a/sound/runtime/instruments/guitar/Bb6.ogg and b/sound/runtime/instruments/guitar/Bb6.ogg differ
diff --git a/sound/runtime/instruments/guitar/Bn3.ogg b/sound/runtime/instruments/guitar/Bn3.ogg
index 0d6022369fafc..1a7369eeb8390 100644
Binary files a/sound/runtime/instruments/guitar/Bn3.ogg and b/sound/runtime/instruments/guitar/Bn3.ogg differ
diff --git a/sound/runtime/instruments/guitar/Bn4.ogg b/sound/runtime/instruments/guitar/Bn4.ogg
index 7e8682d5ff0db..e2bb3ca5f6737 100644
Binary files a/sound/runtime/instruments/guitar/Bn4.ogg and b/sound/runtime/instruments/guitar/Bn4.ogg differ
diff --git a/sound/runtime/instruments/guitar/Bn5.ogg b/sound/runtime/instruments/guitar/Bn5.ogg
index 1912da7f66c65..21bd07e566774 100644
Binary files a/sound/runtime/instruments/guitar/Bn5.ogg and b/sound/runtime/instruments/guitar/Bn5.ogg differ
diff --git a/sound/runtime/instruments/guitar/Bn6.ogg b/sound/runtime/instruments/guitar/Bn6.ogg
index 985ec744dfb9b..9ab6d14d4df6b 100644
Binary files a/sound/runtime/instruments/guitar/Bn6.ogg and b/sound/runtime/instruments/guitar/Bn6.ogg differ
diff --git a/sound/runtime/instruments/guitar/Cn4.ogg b/sound/runtime/instruments/guitar/Cn4.ogg
index 0279b73f8bd72..56c10b75e74cb 100644
Binary files a/sound/runtime/instruments/guitar/Cn4.ogg and b/sound/runtime/instruments/guitar/Cn4.ogg differ
diff --git a/sound/runtime/instruments/guitar/Cn5.ogg b/sound/runtime/instruments/guitar/Cn5.ogg
index ece600a6c1a05..3fd4308bdd3c9 100644
Binary files a/sound/runtime/instruments/guitar/Cn5.ogg and b/sound/runtime/instruments/guitar/Cn5.ogg differ
diff --git a/sound/runtime/instruments/guitar/Cn6.ogg b/sound/runtime/instruments/guitar/Cn6.ogg
index 8c2fecc62aa18..758467db1f580 100644
Binary files a/sound/runtime/instruments/guitar/Cn6.ogg and b/sound/runtime/instruments/guitar/Cn6.ogg differ
diff --git a/sound/runtime/instruments/guitar/Db4.ogg b/sound/runtime/instruments/guitar/Db4.ogg
index 8a14f1f83655a..1bdb2581d0774 100644
Binary files a/sound/runtime/instruments/guitar/Db4.ogg and b/sound/runtime/instruments/guitar/Db4.ogg differ
diff --git a/sound/runtime/instruments/guitar/Db5.ogg b/sound/runtime/instruments/guitar/Db5.ogg
index 46a67f20ce0d0..28dce5f7ef966 100644
Binary files a/sound/runtime/instruments/guitar/Db5.ogg and b/sound/runtime/instruments/guitar/Db5.ogg differ
diff --git a/sound/runtime/instruments/guitar/Db6.ogg b/sound/runtime/instruments/guitar/Db6.ogg
index a07095c6033e1..22955e0b87f94 100644
Binary files a/sound/runtime/instruments/guitar/Db6.ogg and b/sound/runtime/instruments/guitar/Db6.ogg differ
diff --git a/sound/runtime/instruments/guitar/Dn4.ogg b/sound/runtime/instruments/guitar/Dn4.ogg
index 587099a0ddc1b..bb07cf9f180ca 100644
Binary files a/sound/runtime/instruments/guitar/Dn4.ogg and b/sound/runtime/instruments/guitar/Dn4.ogg differ
diff --git a/sound/runtime/instruments/guitar/Dn5.ogg b/sound/runtime/instruments/guitar/Dn5.ogg
index d6a9c38415a8e..988396e63af17 100644
Binary files a/sound/runtime/instruments/guitar/Dn5.ogg and b/sound/runtime/instruments/guitar/Dn5.ogg differ
diff --git a/sound/runtime/instruments/guitar/Dn6.ogg b/sound/runtime/instruments/guitar/Dn6.ogg
index 4e44d5e72fed9..ecd065d67d089 100644
Binary files a/sound/runtime/instruments/guitar/Dn6.ogg and b/sound/runtime/instruments/guitar/Dn6.ogg differ
diff --git a/sound/runtime/instruments/guitar/Eb4.ogg b/sound/runtime/instruments/guitar/Eb4.ogg
index 1f93c8273d1b8..69c4e3a0af5d1 100644
Binary files a/sound/runtime/instruments/guitar/Eb4.ogg and b/sound/runtime/instruments/guitar/Eb4.ogg differ
diff --git a/sound/runtime/instruments/guitar/Eb5.ogg b/sound/runtime/instruments/guitar/Eb5.ogg
index 5b795377f3831..7e0d73c666d4b 100644
Binary files a/sound/runtime/instruments/guitar/Eb5.ogg and b/sound/runtime/instruments/guitar/Eb5.ogg differ
diff --git a/sound/runtime/instruments/guitar/Eb6.ogg b/sound/runtime/instruments/guitar/Eb6.ogg
index 5febf7a37b35e..ddbea02db9bae 100644
Binary files a/sound/runtime/instruments/guitar/Eb6.ogg and b/sound/runtime/instruments/guitar/Eb6.ogg differ
diff --git a/sound/runtime/instruments/guitar/En3.ogg b/sound/runtime/instruments/guitar/En3.ogg
index d9679bd78eada..2448807631dd2 100644
Binary files a/sound/runtime/instruments/guitar/En3.ogg and b/sound/runtime/instruments/guitar/En3.ogg differ
diff --git a/sound/runtime/instruments/guitar/En4.ogg b/sound/runtime/instruments/guitar/En4.ogg
index 50dad80f50619..6c7393237a42f 100644
Binary files a/sound/runtime/instruments/guitar/En4.ogg and b/sound/runtime/instruments/guitar/En4.ogg differ
diff --git a/sound/runtime/instruments/guitar/En5.ogg b/sound/runtime/instruments/guitar/En5.ogg
index 8617c06920193..b5d78f08d9a10 100644
Binary files a/sound/runtime/instruments/guitar/En5.ogg and b/sound/runtime/instruments/guitar/En5.ogg differ
diff --git a/sound/runtime/instruments/guitar/En6.ogg b/sound/runtime/instruments/guitar/En6.ogg
index a487ce33e4b06..c0d17f17eb246 100644
Binary files a/sound/runtime/instruments/guitar/En6.ogg and b/sound/runtime/instruments/guitar/En6.ogg differ
diff --git a/sound/runtime/instruments/guitar/Fn3.ogg b/sound/runtime/instruments/guitar/Fn3.ogg
index 4e37dc581269a..d7763bcc6ba2f 100644
Binary files a/sound/runtime/instruments/guitar/Fn3.ogg and b/sound/runtime/instruments/guitar/Fn3.ogg differ
diff --git a/sound/runtime/instruments/guitar/Fn4.ogg b/sound/runtime/instruments/guitar/Fn4.ogg
index 3bf9957d48a46..b16e02538170f 100644
Binary files a/sound/runtime/instruments/guitar/Fn4.ogg and b/sound/runtime/instruments/guitar/Fn4.ogg differ
diff --git a/sound/runtime/instruments/guitar/Fn5.ogg b/sound/runtime/instruments/guitar/Fn5.ogg
index ad0a0ecec793e..489b02e9ebfed 100644
Binary files a/sound/runtime/instruments/guitar/Fn5.ogg and b/sound/runtime/instruments/guitar/Fn5.ogg differ
diff --git a/sound/runtime/instruments/guitar/Fn6.ogg b/sound/runtime/instruments/guitar/Fn6.ogg
index 50457e7bf4c21..ca901ebcade97 100644
Binary files a/sound/runtime/instruments/guitar/Fn6.ogg and b/sound/runtime/instruments/guitar/Fn6.ogg differ
diff --git a/sound/runtime/instruments/guitar/Gb3.ogg b/sound/runtime/instruments/guitar/Gb3.ogg
index 1b2e6c503de6f..de40739c220d7 100644
Binary files a/sound/runtime/instruments/guitar/Gb3.ogg and b/sound/runtime/instruments/guitar/Gb3.ogg differ
diff --git a/sound/runtime/instruments/guitar/Gb4.ogg b/sound/runtime/instruments/guitar/Gb4.ogg
index 122a0c5c17d0c..8e73b4c7e172b 100644
Binary files a/sound/runtime/instruments/guitar/Gb4.ogg and b/sound/runtime/instruments/guitar/Gb4.ogg differ
diff --git a/sound/runtime/instruments/guitar/Gb5.ogg b/sound/runtime/instruments/guitar/Gb5.ogg
index b0346e2f3652d..6377b6e54d7e3 100644
Binary files a/sound/runtime/instruments/guitar/Gb5.ogg and b/sound/runtime/instruments/guitar/Gb5.ogg differ
diff --git a/sound/runtime/instruments/guitar/Gb6.ogg b/sound/runtime/instruments/guitar/Gb6.ogg
index 4f873de27cf36..e466c90e2bda0 100644
Binary files a/sound/runtime/instruments/guitar/Gb6.ogg and b/sound/runtime/instruments/guitar/Gb6.ogg differ
diff --git a/sound/runtime/instruments/guitar/Gn3.ogg b/sound/runtime/instruments/guitar/Gn3.ogg
index 783cded9fe5ff..48fbcbc3967cf 100644
Binary files a/sound/runtime/instruments/guitar/Gn3.ogg and b/sound/runtime/instruments/guitar/Gn3.ogg differ
diff --git a/sound/runtime/instruments/guitar/Gn4.ogg b/sound/runtime/instruments/guitar/Gn4.ogg
index 92f9cd2fd9da9..02f62d0c72f78 100644
Binary files a/sound/runtime/instruments/guitar/Gn4.ogg and b/sound/runtime/instruments/guitar/Gn4.ogg differ
diff --git a/sound/runtime/instruments/guitar/Gn5.ogg b/sound/runtime/instruments/guitar/Gn5.ogg
index 42fdebc209bfe..0ff040cc7ecbd 100644
Binary files a/sound/runtime/instruments/guitar/Gn5.ogg and b/sound/runtime/instruments/guitar/Gn5.ogg differ
diff --git a/sound/runtime/instruments/guitar/Gn6.ogg b/sound/runtime/instruments/guitar/Gn6.ogg
index a36bf38f001fb..21a2ba0e6f0c1 100644
Binary files a/sound/runtime/instruments/guitar/Gn6.ogg and b/sound/runtime/instruments/guitar/Gn6.ogg differ
diff --git a/sound/runtime/instruments/piano/Ab2.ogg b/sound/runtime/instruments/piano/Ab2.ogg
index 22591b0f2a0e3..d110a5ef4c826 100644
Binary files a/sound/runtime/instruments/piano/Ab2.ogg and b/sound/runtime/instruments/piano/Ab2.ogg differ
diff --git a/sound/runtime/instruments/piano/Ab3.ogg b/sound/runtime/instruments/piano/Ab3.ogg
index 149fa26c89fba..989e439825acf 100644
Binary files a/sound/runtime/instruments/piano/Ab3.ogg and b/sound/runtime/instruments/piano/Ab3.ogg differ
diff --git a/sound/runtime/instruments/piano/Ab4.ogg b/sound/runtime/instruments/piano/Ab4.ogg
index 5a64cb10f84e9..7eb4c4f619916 100644
Binary files a/sound/runtime/instruments/piano/Ab4.ogg and b/sound/runtime/instruments/piano/Ab4.ogg differ
diff --git a/sound/runtime/instruments/piano/Ab5.ogg b/sound/runtime/instruments/piano/Ab5.ogg
index 8635b8a6247c8..8975c51ec64f4 100644
Binary files a/sound/runtime/instruments/piano/Ab5.ogg and b/sound/runtime/instruments/piano/Ab5.ogg differ
diff --git a/sound/runtime/instruments/piano/Ab6.ogg b/sound/runtime/instruments/piano/Ab6.ogg
index b771a29f27cfd..9112757b6ab4a 100644
Binary files a/sound/runtime/instruments/piano/Ab6.ogg and b/sound/runtime/instruments/piano/Ab6.ogg differ
diff --git a/sound/runtime/instruments/piano/Ab7.ogg b/sound/runtime/instruments/piano/Ab7.ogg
index ff98fb05a8fb9..36f65c16ae2b0 100644
Binary files a/sound/runtime/instruments/piano/Ab7.ogg and b/sound/runtime/instruments/piano/Ab7.ogg differ
diff --git a/sound/runtime/instruments/piano/Ab8.ogg b/sound/runtime/instruments/piano/Ab8.ogg
index aca8ed4d4f224..31e458dd1e9a7 100644
Binary files a/sound/runtime/instruments/piano/Ab8.ogg and b/sound/runtime/instruments/piano/Ab8.ogg differ
diff --git a/sound/runtime/instruments/piano/An1.ogg b/sound/runtime/instruments/piano/An1.ogg
index 72c3a643600aa..b7511b0c99faf 100644
Binary files a/sound/runtime/instruments/piano/An1.ogg and b/sound/runtime/instruments/piano/An1.ogg differ
diff --git a/sound/runtime/instruments/piano/An2.ogg b/sound/runtime/instruments/piano/An2.ogg
index b92232621c144..8e4f3c4592b61 100644
Binary files a/sound/runtime/instruments/piano/An2.ogg and b/sound/runtime/instruments/piano/An2.ogg differ
diff --git a/sound/runtime/instruments/piano/An3.ogg b/sound/runtime/instruments/piano/An3.ogg
index f4fa9a1e72ce0..58306fa5cd8b5 100644
Binary files a/sound/runtime/instruments/piano/An3.ogg and b/sound/runtime/instruments/piano/An3.ogg differ
diff --git a/sound/runtime/instruments/piano/An4.ogg b/sound/runtime/instruments/piano/An4.ogg
index 6946e13516b8d..153197ad97aba 100644
Binary files a/sound/runtime/instruments/piano/An4.ogg and b/sound/runtime/instruments/piano/An4.ogg differ
diff --git a/sound/runtime/instruments/piano/An5.ogg b/sound/runtime/instruments/piano/An5.ogg
index 322cc3b4c5112..4f9eec2a4dc4a 100644
Binary files a/sound/runtime/instruments/piano/An5.ogg and b/sound/runtime/instruments/piano/An5.ogg differ
diff --git a/sound/runtime/instruments/piano/An6.ogg b/sound/runtime/instruments/piano/An6.ogg
index 7a561af80e3ac..2fe4ad1a5521d 100644
Binary files a/sound/runtime/instruments/piano/An6.ogg and b/sound/runtime/instruments/piano/An6.ogg differ
diff --git a/sound/runtime/instruments/piano/An7.ogg b/sound/runtime/instruments/piano/An7.ogg
index 5e935dfe3cb1e..c095892206f73 100644
Binary files a/sound/runtime/instruments/piano/An7.ogg and b/sound/runtime/instruments/piano/An7.ogg differ
diff --git a/sound/runtime/instruments/piano/An8.ogg b/sound/runtime/instruments/piano/An8.ogg
index b70ba0b901c83..1dda2038740d9 100644
Binary files a/sound/runtime/instruments/piano/An8.ogg and b/sound/runtime/instruments/piano/An8.ogg differ
diff --git a/sound/runtime/instruments/piano/Bb1.ogg b/sound/runtime/instruments/piano/Bb1.ogg
index d66d6b2f01bdd..2c4b2a72d49f6 100644
Binary files a/sound/runtime/instruments/piano/Bb1.ogg and b/sound/runtime/instruments/piano/Bb1.ogg differ
diff --git a/sound/runtime/instruments/piano/Bb2.ogg b/sound/runtime/instruments/piano/Bb2.ogg
index c75195976c61e..2f49c345f4f69 100644
Binary files a/sound/runtime/instruments/piano/Bb2.ogg and b/sound/runtime/instruments/piano/Bb2.ogg differ
diff --git a/sound/runtime/instruments/piano/Bb3.ogg b/sound/runtime/instruments/piano/Bb3.ogg
index 648c8b371768c..9d0196183ac41 100644
Binary files a/sound/runtime/instruments/piano/Bb3.ogg and b/sound/runtime/instruments/piano/Bb3.ogg differ
diff --git a/sound/runtime/instruments/piano/Bb4.ogg b/sound/runtime/instruments/piano/Bb4.ogg
index aa842dd3eddb6..6d8c6a94acc9b 100644
Binary files a/sound/runtime/instruments/piano/Bb4.ogg and b/sound/runtime/instruments/piano/Bb4.ogg differ
diff --git a/sound/runtime/instruments/piano/Bb5.ogg b/sound/runtime/instruments/piano/Bb5.ogg
index 0ae78e81e604e..e7313ff644597 100644
Binary files a/sound/runtime/instruments/piano/Bb5.ogg and b/sound/runtime/instruments/piano/Bb5.ogg differ
diff --git a/sound/runtime/instruments/piano/Bb6.ogg b/sound/runtime/instruments/piano/Bb6.ogg
index 172f63f3f4d83..afdacf9cd0075 100644
Binary files a/sound/runtime/instruments/piano/Bb6.ogg and b/sound/runtime/instruments/piano/Bb6.ogg differ
diff --git a/sound/runtime/instruments/piano/Bb7.ogg b/sound/runtime/instruments/piano/Bb7.ogg
index d1240c623d0e9..40dcb7804ba3a 100644
Binary files a/sound/runtime/instruments/piano/Bb7.ogg and b/sound/runtime/instruments/piano/Bb7.ogg differ
diff --git a/sound/runtime/instruments/piano/Bb8.ogg b/sound/runtime/instruments/piano/Bb8.ogg
index 53eff2867de4a..232a6c7446b95 100644
Binary files a/sound/runtime/instruments/piano/Bb8.ogg and b/sound/runtime/instruments/piano/Bb8.ogg differ
diff --git a/sound/runtime/instruments/piano/Bn1.ogg b/sound/runtime/instruments/piano/Bn1.ogg
index 1af185c0e8cdd..d20d78d879ada 100644
Binary files a/sound/runtime/instruments/piano/Bn1.ogg and b/sound/runtime/instruments/piano/Bn1.ogg differ
diff --git a/sound/runtime/instruments/piano/Bn2.ogg b/sound/runtime/instruments/piano/Bn2.ogg
index acd03a4f1d765..868c9d5fe96c3 100644
Binary files a/sound/runtime/instruments/piano/Bn2.ogg and b/sound/runtime/instruments/piano/Bn2.ogg differ
diff --git a/sound/runtime/instruments/piano/Bn3.ogg b/sound/runtime/instruments/piano/Bn3.ogg
index 61a8d157b76bd..0596f5af95aa3 100644
Binary files a/sound/runtime/instruments/piano/Bn3.ogg and b/sound/runtime/instruments/piano/Bn3.ogg differ
diff --git a/sound/runtime/instruments/piano/Bn4.ogg b/sound/runtime/instruments/piano/Bn4.ogg
index e38b9eec56f3b..971428faecdfe 100644
Binary files a/sound/runtime/instruments/piano/Bn4.ogg and b/sound/runtime/instruments/piano/Bn4.ogg differ
diff --git a/sound/runtime/instruments/piano/Bn5.ogg b/sound/runtime/instruments/piano/Bn5.ogg
index 4759c0f8255ec..562d90e74eb1e 100644
Binary files a/sound/runtime/instruments/piano/Bn5.ogg and b/sound/runtime/instruments/piano/Bn5.ogg differ
diff --git a/sound/runtime/instruments/piano/Bn6.ogg b/sound/runtime/instruments/piano/Bn6.ogg
index 0282535a017be..f1c0a78c17805 100644
Binary files a/sound/runtime/instruments/piano/Bn6.ogg and b/sound/runtime/instruments/piano/Bn6.ogg differ
diff --git a/sound/runtime/instruments/piano/Bn7.ogg b/sound/runtime/instruments/piano/Bn7.ogg
index 57334fba24300..4b77b4f9f637d 100644
Binary files a/sound/runtime/instruments/piano/Bn7.ogg and b/sound/runtime/instruments/piano/Bn7.ogg differ
diff --git a/sound/runtime/instruments/piano/Bn8.ogg b/sound/runtime/instruments/piano/Bn8.ogg
index 5d723d196d686..959861d9163a5 100644
Binary files a/sound/runtime/instruments/piano/Bn8.ogg and b/sound/runtime/instruments/piano/Bn8.ogg differ
diff --git a/sound/runtime/instruments/piano/Cn2.ogg b/sound/runtime/instruments/piano/Cn2.ogg
index 251c3bd1f2d92..645d557d15c4f 100644
Binary files a/sound/runtime/instruments/piano/Cn2.ogg and b/sound/runtime/instruments/piano/Cn2.ogg differ
diff --git a/sound/runtime/instruments/piano/Cn3.ogg b/sound/runtime/instruments/piano/Cn3.ogg
index 66286e5e719fd..28b16786bcdcb 100644
Binary files a/sound/runtime/instruments/piano/Cn3.ogg and b/sound/runtime/instruments/piano/Cn3.ogg differ
diff --git a/sound/runtime/instruments/piano/Cn4.ogg b/sound/runtime/instruments/piano/Cn4.ogg
index e271c7e4b0ba9..4ee0e9adc2115 100644
Binary files a/sound/runtime/instruments/piano/Cn4.ogg and b/sound/runtime/instruments/piano/Cn4.ogg differ
diff --git a/sound/runtime/instruments/piano/Cn5.ogg b/sound/runtime/instruments/piano/Cn5.ogg
index 375987640db79..4997c8d5eba9e 100644
Binary files a/sound/runtime/instruments/piano/Cn5.ogg and b/sound/runtime/instruments/piano/Cn5.ogg differ
diff --git a/sound/runtime/instruments/piano/Cn6.ogg b/sound/runtime/instruments/piano/Cn6.ogg
index 1c675eb73e152..8f8326c5d96cf 100644
Binary files a/sound/runtime/instruments/piano/Cn6.ogg and b/sound/runtime/instruments/piano/Cn6.ogg differ
diff --git a/sound/runtime/instruments/piano/Cn7.ogg b/sound/runtime/instruments/piano/Cn7.ogg
index 8d87e17a6488b..21def89deb9f1 100644
Binary files a/sound/runtime/instruments/piano/Cn7.ogg and b/sound/runtime/instruments/piano/Cn7.ogg differ
diff --git a/sound/runtime/instruments/piano/Cn8.ogg b/sound/runtime/instruments/piano/Cn8.ogg
index bdb8a046b643d..98001a469e824 100644
Binary files a/sound/runtime/instruments/piano/Cn8.ogg and b/sound/runtime/instruments/piano/Cn8.ogg differ
diff --git a/sound/runtime/instruments/piano/Cn9.ogg b/sound/runtime/instruments/piano/Cn9.ogg
index 09ce034cd8318..a2fc59ab9502b 100644
Binary files a/sound/runtime/instruments/piano/Cn9.ogg and b/sound/runtime/instruments/piano/Cn9.ogg differ
diff --git a/sound/runtime/instruments/piano/Db2.ogg b/sound/runtime/instruments/piano/Db2.ogg
index 840ffd49b5ff6..9e15dec70b525 100644
Binary files a/sound/runtime/instruments/piano/Db2.ogg and b/sound/runtime/instruments/piano/Db2.ogg differ
diff --git a/sound/runtime/instruments/piano/Db3.ogg b/sound/runtime/instruments/piano/Db3.ogg
index d2864738546b0..7de0f45e95451 100644
Binary files a/sound/runtime/instruments/piano/Db3.ogg and b/sound/runtime/instruments/piano/Db3.ogg differ
diff --git a/sound/runtime/instruments/piano/Db4.ogg b/sound/runtime/instruments/piano/Db4.ogg
index adffd158371ce..2afcc20c33f9c 100644
Binary files a/sound/runtime/instruments/piano/Db4.ogg and b/sound/runtime/instruments/piano/Db4.ogg differ
diff --git a/sound/runtime/instruments/piano/Db5.ogg b/sound/runtime/instruments/piano/Db5.ogg
index 1c43e8480494a..fc635c8815d1b 100644
Binary files a/sound/runtime/instruments/piano/Db5.ogg and b/sound/runtime/instruments/piano/Db5.ogg differ
diff --git a/sound/runtime/instruments/piano/Db6.ogg b/sound/runtime/instruments/piano/Db6.ogg
index 92bd1d2aa6ba7..c59b630b0d438 100644
Binary files a/sound/runtime/instruments/piano/Db6.ogg and b/sound/runtime/instruments/piano/Db6.ogg differ
diff --git a/sound/runtime/instruments/piano/Db7.ogg b/sound/runtime/instruments/piano/Db7.ogg
index 72c34b0f6e696..4cc4ad3084d4e 100644
Binary files a/sound/runtime/instruments/piano/Db7.ogg and b/sound/runtime/instruments/piano/Db7.ogg differ
diff --git a/sound/runtime/instruments/piano/Db8.ogg b/sound/runtime/instruments/piano/Db8.ogg
index 4984f3da6fcdf..42a836dcdecbc 100644
Binary files a/sound/runtime/instruments/piano/Db8.ogg and b/sound/runtime/instruments/piano/Db8.ogg differ
diff --git a/sound/runtime/instruments/piano/Dn2.ogg b/sound/runtime/instruments/piano/Dn2.ogg
index 1d3b39a0f71a9..a2c535705396a 100644
Binary files a/sound/runtime/instruments/piano/Dn2.ogg and b/sound/runtime/instruments/piano/Dn2.ogg differ
diff --git a/sound/runtime/instruments/piano/Dn3.ogg b/sound/runtime/instruments/piano/Dn3.ogg
index 36aa1e3e983ff..5a7ca65d23785 100644
Binary files a/sound/runtime/instruments/piano/Dn3.ogg and b/sound/runtime/instruments/piano/Dn3.ogg differ
diff --git a/sound/runtime/instruments/piano/Dn4.ogg b/sound/runtime/instruments/piano/Dn4.ogg
index 89e64a10b644f..b7e4a4e922c95 100644
Binary files a/sound/runtime/instruments/piano/Dn4.ogg and b/sound/runtime/instruments/piano/Dn4.ogg differ
diff --git a/sound/runtime/instruments/piano/Dn5.ogg b/sound/runtime/instruments/piano/Dn5.ogg
index 0e928f461346a..4119e3fbfb1ce 100644
Binary files a/sound/runtime/instruments/piano/Dn5.ogg and b/sound/runtime/instruments/piano/Dn5.ogg differ
diff --git a/sound/runtime/instruments/piano/Dn6.ogg b/sound/runtime/instruments/piano/Dn6.ogg
index 8413e46635f9d..3e49603989feb 100644
Binary files a/sound/runtime/instruments/piano/Dn6.ogg and b/sound/runtime/instruments/piano/Dn6.ogg differ
diff --git a/sound/runtime/instruments/piano/Dn7.ogg b/sound/runtime/instruments/piano/Dn7.ogg
index 4516a46bc46c7..8acefb9b6d4b1 100644
Binary files a/sound/runtime/instruments/piano/Dn7.ogg and b/sound/runtime/instruments/piano/Dn7.ogg differ
diff --git a/sound/runtime/instruments/piano/Dn8.ogg b/sound/runtime/instruments/piano/Dn8.ogg
index 348c690fef1ac..04e6a591b6ebc 100644
Binary files a/sound/runtime/instruments/piano/Dn8.ogg and b/sound/runtime/instruments/piano/Dn8.ogg differ
diff --git a/sound/runtime/instruments/piano/Eb2.ogg b/sound/runtime/instruments/piano/Eb2.ogg
index b300b39eb9b19..3be675a3c63be 100644
Binary files a/sound/runtime/instruments/piano/Eb2.ogg and b/sound/runtime/instruments/piano/Eb2.ogg differ
diff --git a/sound/runtime/instruments/piano/Eb3.ogg b/sound/runtime/instruments/piano/Eb3.ogg
index 879b6907fc6df..d8852be5dd7cd 100644
Binary files a/sound/runtime/instruments/piano/Eb3.ogg and b/sound/runtime/instruments/piano/Eb3.ogg differ
diff --git a/sound/runtime/instruments/piano/Eb4.ogg b/sound/runtime/instruments/piano/Eb4.ogg
index e2d57556dbfdd..d7b542181bfe9 100644
Binary files a/sound/runtime/instruments/piano/Eb4.ogg and b/sound/runtime/instruments/piano/Eb4.ogg differ
diff --git a/sound/runtime/instruments/piano/Eb5.ogg b/sound/runtime/instruments/piano/Eb5.ogg
index 6eec439bf8627..0d4de250401ea 100644
Binary files a/sound/runtime/instruments/piano/Eb5.ogg and b/sound/runtime/instruments/piano/Eb5.ogg differ
diff --git a/sound/runtime/instruments/piano/Eb6.ogg b/sound/runtime/instruments/piano/Eb6.ogg
index 80b4952ab987d..ba722db2a11a0 100644
Binary files a/sound/runtime/instruments/piano/Eb6.ogg and b/sound/runtime/instruments/piano/Eb6.ogg differ
diff --git a/sound/runtime/instruments/piano/Eb7.ogg b/sound/runtime/instruments/piano/Eb7.ogg
index e88eec4fec3ce..4856aa396daec 100644
Binary files a/sound/runtime/instruments/piano/Eb7.ogg and b/sound/runtime/instruments/piano/Eb7.ogg differ
diff --git a/sound/runtime/instruments/piano/Eb8.ogg b/sound/runtime/instruments/piano/Eb8.ogg
index cb7b3efdfd7b8..6ed0d8415ebef 100644
Binary files a/sound/runtime/instruments/piano/Eb8.ogg and b/sound/runtime/instruments/piano/Eb8.ogg differ
diff --git a/sound/runtime/instruments/piano/En2.ogg b/sound/runtime/instruments/piano/En2.ogg
index 0f5e8a073d95c..76f4c0ba83a91 100644
Binary files a/sound/runtime/instruments/piano/En2.ogg and b/sound/runtime/instruments/piano/En2.ogg differ
diff --git a/sound/runtime/instruments/piano/En3.ogg b/sound/runtime/instruments/piano/En3.ogg
index f24b26bf06eab..74be689f36346 100644
Binary files a/sound/runtime/instruments/piano/En3.ogg and b/sound/runtime/instruments/piano/En3.ogg differ
diff --git a/sound/runtime/instruments/piano/En4.ogg b/sound/runtime/instruments/piano/En4.ogg
index eb409d0e095e6..26d346b47a4f0 100644
Binary files a/sound/runtime/instruments/piano/En4.ogg and b/sound/runtime/instruments/piano/En4.ogg differ
diff --git a/sound/runtime/instruments/piano/En5.ogg b/sound/runtime/instruments/piano/En5.ogg
index cd83f438d211e..6261ce22a7201 100644
Binary files a/sound/runtime/instruments/piano/En5.ogg and b/sound/runtime/instruments/piano/En5.ogg differ
diff --git a/sound/runtime/instruments/piano/En6.ogg b/sound/runtime/instruments/piano/En6.ogg
index 62a0361284d80..b1a0a7e9ad2dd 100644
Binary files a/sound/runtime/instruments/piano/En6.ogg and b/sound/runtime/instruments/piano/En6.ogg differ
diff --git a/sound/runtime/instruments/piano/En7.ogg b/sound/runtime/instruments/piano/En7.ogg
index c1072ade2334f..1f48fbe5870c5 100644
Binary files a/sound/runtime/instruments/piano/En7.ogg and b/sound/runtime/instruments/piano/En7.ogg differ
diff --git a/sound/runtime/instruments/piano/En8.ogg b/sound/runtime/instruments/piano/En8.ogg
index 79b7176061797..94a509c3af416 100644
Binary files a/sound/runtime/instruments/piano/En8.ogg and b/sound/runtime/instruments/piano/En8.ogg differ
diff --git a/sound/runtime/instruments/piano/Fn2.ogg b/sound/runtime/instruments/piano/Fn2.ogg
index 449cd6a8a2ad8..78c0e56a283a6 100644
Binary files a/sound/runtime/instruments/piano/Fn2.ogg and b/sound/runtime/instruments/piano/Fn2.ogg differ
diff --git a/sound/runtime/instruments/piano/Fn3.ogg b/sound/runtime/instruments/piano/Fn3.ogg
index afd5b3b8020e9..ae05ea5bca8db 100644
Binary files a/sound/runtime/instruments/piano/Fn3.ogg and b/sound/runtime/instruments/piano/Fn3.ogg differ
diff --git a/sound/runtime/instruments/piano/Fn4.ogg b/sound/runtime/instruments/piano/Fn4.ogg
index ac1820601279f..5b115b417fe43 100644
Binary files a/sound/runtime/instruments/piano/Fn4.ogg and b/sound/runtime/instruments/piano/Fn4.ogg differ
diff --git a/sound/runtime/instruments/piano/Fn5.ogg b/sound/runtime/instruments/piano/Fn5.ogg
index e59a4c6cc6384..88e4084b76710 100644
Binary files a/sound/runtime/instruments/piano/Fn5.ogg and b/sound/runtime/instruments/piano/Fn5.ogg differ
diff --git a/sound/runtime/instruments/piano/Fn6.ogg b/sound/runtime/instruments/piano/Fn6.ogg
index 7636c242dc6cf..fbde9d72518c1 100644
Binary files a/sound/runtime/instruments/piano/Fn6.ogg and b/sound/runtime/instruments/piano/Fn6.ogg differ
diff --git a/sound/runtime/instruments/piano/Fn7.ogg b/sound/runtime/instruments/piano/Fn7.ogg
index 810338b6412fc..d6731a5f88ceb 100644
Binary files a/sound/runtime/instruments/piano/Fn7.ogg and b/sound/runtime/instruments/piano/Fn7.ogg differ
diff --git a/sound/runtime/instruments/piano/Fn8.ogg b/sound/runtime/instruments/piano/Fn8.ogg
index 3504877e8a59d..dc873eac82368 100644
Binary files a/sound/runtime/instruments/piano/Fn8.ogg and b/sound/runtime/instruments/piano/Fn8.ogg differ
diff --git a/sound/runtime/instruments/piano/Gb2.ogg b/sound/runtime/instruments/piano/Gb2.ogg
index 353d09af133f5..19a7f3066e0a7 100644
Binary files a/sound/runtime/instruments/piano/Gb2.ogg and b/sound/runtime/instruments/piano/Gb2.ogg differ
diff --git a/sound/runtime/instruments/piano/Gb3.ogg b/sound/runtime/instruments/piano/Gb3.ogg
index 4527d9849d982..3b5dcd54c94cd 100644
Binary files a/sound/runtime/instruments/piano/Gb3.ogg and b/sound/runtime/instruments/piano/Gb3.ogg differ
diff --git a/sound/runtime/instruments/piano/Gb4.ogg b/sound/runtime/instruments/piano/Gb4.ogg
index abb52644656be..f14ef177c9043 100644
Binary files a/sound/runtime/instruments/piano/Gb4.ogg and b/sound/runtime/instruments/piano/Gb4.ogg differ
diff --git a/sound/runtime/instruments/piano/Gb5.ogg b/sound/runtime/instruments/piano/Gb5.ogg
index 3765c1882c529..0659fd8e3ed84 100644
Binary files a/sound/runtime/instruments/piano/Gb5.ogg and b/sound/runtime/instruments/piano/Gb5.ogg differ
diff --git a/sound/runtime/instruments/piano/Gb6.ogg b/sound/runtime/instruments/piano/Gb6.ogg
index fb6ff9006b719..a9305eaa0eaad 100644
Binary files a/sound/runtime/instruments/piano/Gb6.ogg and b/sound/runtime/instruments/piano/Gb6.ogg differ
diff --git a/sound/runtime/instruments/piano/Gb7.ogg b/sound/runtime/instruments/piano/Gb7.ogg
index 07983100d504a..c8845f3b468a4 100644
Binary files a/sound/runtime/instruments/piano/Gb7.ogg and b/sound/runtime/instruments/piano/Gb7.ogg differ
diff --git a/sound/runtime/instruments/piano/Gb8.ogg b/sound/runtime/instruments/piano/Gb8.ogg
index 717707816bac3..9be97481d80fa 100644
Binary files a/sound/runtime/instruments/piano/Gb8.ogg and b/sound/runtime/instruments/piano/Gb8.ogg differ
diff --git a/sound/runtime/instruments/piano/Gn2.ogg b/sound/runtime/instruments/piano/Gn2.ogg
index bad4105f25956..0d423affbd10c 100644
Binary files a/sound/runtime/instruments/piano/Gn2.ogg and b/sound/runtime/instruments/piano/Gn2.ogg differ
diff --git a/sound/runtime/instruments/piano/Gn3.ogg b/sound/runtime/instruments/piano/Gn3.ogg
index b69d27986ff44..feaedf3d38736 100644
Binary files a/sound/runtime/instruments/piano/Gn3.ogg and b/sound/runtime/instruments/piano/Gn3.ogg differ
diff --git a/sound/runtime/instruments/piano/Gn4.ogg b/sound/runtime/instruments/piano/Gn4.ogg
index c26d2271228c6..89c96f9328e4a 100644
Binary files a/sound/runtime/instruments/piano/Gn4.ogg and b/sound/runtime/instruments/piano/Gn4.ogg differ
diff --git a/sound/runtime/instruments/piano/Gn5.ogg b/sound/runtime/instruments/piano/Gn5.ogg
index 18b94e8e72cce..612a3c681ec29 100644
Binary files a/sound/runtime/instruments/piano/Gn5.ogg and b/sound/runtime/instruments/piano/Gn5.ogg differ
diff --git a/sound/runtime/instruments/piano/Gn6.ogg b/sound/runtime/instruments/piano/Gn6.ogg
index 587a8432b0286..44c0e7a1aa52a 100644
Binary files a/sound/runtime/instruments/piano/Gn6.ogg and b/sound/runtime/instruments/piano/Gn6.ogg differ
diff --git a/sound/runtime/instruments/piano/Gn7.ogg b/sound/runtime/instruments/piano/Gn7.ogg
index 5da32b72a9782..ee26161149fc1 100644
Binary files a/sound/runtime/instruments/piano/Gn7.ogg and b/sound/runtime/instruments/piano/Gn7.ogg differ
diff --git a/sound/runtime/instruments/piano/Gn8.ogg b/sound/runtime/instruments/piano/Gn8.ogg
index 13559c201d092..3114fa5a9dbc3 100644
Binary files a/sound/runtime/instruments/piano/Gn8.ogg and b/sound/runtime/instruments/piano/Gn8.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c2.ogg b/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c2.ogg
index aaa1e27ab89fe..60316aee720fd 100644
Binary files a/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c2.ogg and b/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c3.ogg b/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c3.ogg
index ce50e76aae6cb..71f085a4c329f 100644
Binary files a/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c3.ogg and b/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c4.ogg b/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c4.ogg
index 22f34d67592d0..06e2185b7d91b 100644
Binary files a/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c4.ogg and b/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c5.ogg b/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c5.ogg
index eb5bb7c295e5c..f29c681b3123a 100644
Binary files a/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c5.ogg and b/sound/runtime/instruments/synthesis_samples/brass/crisis_brass/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C2.ogg b/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C2.ogg
index bd299e321ab98..f591319b900bc 100644
Binary files a/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C2.ogg and b/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C3.ogg b/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C3.ogg
index 0519d2d20dd76..d0d6e844b9697 100644
Binary files a/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C3.ogg and b/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C4.ogg b/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C4.ogg
index 3b969a34b1cab..9ff3d4c64d825 100644
Binary files a/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C4.ogg and b/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C5.ogg b/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C5.ogg
index 75f709c16fe63..1f333e8f47bea 100644
Binary files a/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C5.ogg and b/sound/runtime/instruments/synthesis_samples/brass/crisis_trombone/C5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/brass/crisis_trumpet/C4.ogg b/sound/runtime/instruments/synthesis_samples/brass/crisis_trumpet/C4.ogg
index ba347f8003477..2188188a3176c 100644
Binary files a/sound/runtime/instruments/synthesis_samples/brass/crisis_trumpet/C4.ogg and b/sound/runtime/instruments/synthesis_samples/brass/crisis_trumpet/C4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/brass/crisis_trumpet/C5.ogg b/sound/runtime/instruments/synthesis_samples/brass/crisis_trumpet/C5.ogg
index cee89761d0d85..e0f0b577f69be 100644
Binary files a/sound/runtime/instruments/synthesis_samples/brass/crisis_trumpet/C5.ogg and b/sound/runtime/instruments/synthesis_samples/brass/crisis_trumpet/C5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C2.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C2.ogg
index 105f767655769..de6e2c3fc28ac 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C2.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C3.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C3.ogg
index 4aa33b6cded62..da7c13483ef37 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C3.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C4.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C4.ogg
index d661e8d7580a5..f5ec6a2cc32f5 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C4.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C5.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C5.ogg
index bf650f1a6fa34..b0cffba6c7a01 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C5.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C6.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C6.ogg
index c00f7949b7e56..6863864b5d09f 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C6.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C6.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C7.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C7.ogg
index 72588e9ca4caa..87688aa8ae355 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C7.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C7.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C8.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C8.ogg
index b2a0b445b9284..0f8b0bbdd117e 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C8.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/fluid_celeste/C8.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c2.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c2.ogg
index ecf6778343b36..6e6a157a24938 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c2.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c3.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c3.ogg
index 867e9ce00d0dc..a176c0b6bb93a 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c3.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c4.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c4.ogg
index 446d45993e8c5..b1be725028c2b 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c4.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c5.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c5.ogg
index 54d56400c0322..dc338b552ed6b 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c5.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/sgmbox/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c2.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c2.ogg
index f3770c1f1a0ef..ebc7ee400caed 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c2.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c3.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c3.ogg
index 28954fbb47fb5..0864a539f4ec5 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c3.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c4.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c4.ogg
index 1233f5314a349..4d77ad7c802c2 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c4.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c5.ogg b/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c5.ogg
index 00daf331357bd..c05eea3960a7b 100644
Binary files a/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c5.ogg and b/sound/runtime/instruments/synthesis_samples/chromatic/vibraphone1/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C2.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C2.ogg
index 13ad54bff00f2..9af6c8f7357b0 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C2.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C3.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C3.ogg
index 17bf392c4b291..a651d9eb79128 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C3.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C4.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C4.ogg
index feda419a0adbe..0f3041f810df6 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C4.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C5.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C5.ogg
index bd088dd850e20..117ee7e8bfdce 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C5.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_clean/C5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C2.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C2.ogg
index 09cdbeec42c13..4e5254fc0bf3e 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C2.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C3.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C3.ogg
index f82c39cee5ba0..5fdcf3bf73d47 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C3.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C4.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C4.ogg
index 23bfd113d6c8f..e65d86d217db5 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C4.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C5.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C5.ogg
index e5ec38d5ab889..3c8b24d1a979d 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C5.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_muted/C5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c2.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c2.ogg
index 42a6cdfad3c04..38dbe8dcf13c0 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c2.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c3.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c3.ogg
index cd6414c0aa242..43c954e425568 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c3.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c4.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c4.ogg
index e536601865315..b19f80d710cbf 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c4.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c5.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c5.ogg
index 60382228374c7..5fe2b1fa8a470 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c5.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_nylon/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c2.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c2.ogg
index 648549d594a77..7e02866f4e7f9 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c2.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c3.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c3.ogg
index 01ba59a908c16..a069e19122179 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c3.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c4.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c4.ogg
index 7cfaa8ca72ba1..1a4d8f156c645 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c4.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c5.ogg b/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c5.ogg
index b4ca49dc0472f..a25b4f8c9a937 100644
Binary files a/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c5.ogg and b/sound/runtime/instruments/synthesis_samples/guitar/crisis_steel/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/meowsynth/c2.ogg b/sound/runtime/instruments/synthesis_samples/meowsynth/c2.ogg
index ab66d25170ce8..1b2da03cf04f7 100644
Binary files a/sound/runtime/instruments/synthesis_samples/meowsynth/c2.ogg and b/sound/runtime/instruments/synthesis_samples/meowsynth/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/meowsynth/c3.ogg b/sound/runtime/instruments/synthesis_samples/meowsynth/c3.ogg
index 3723bc2d961a7..6066d4a712de3 100644
Binary files a/sound/runtime/instruments/synthesis_samples/meowsynth/c3.ogg and b/sound/runtime/instruments/synthesis_samples/meowsynth/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/meowsynth/c4.ogg b/sound/runtime/instruments/synthesis_samples/meowsynth/c4.ogg
index 6f391d4a4dbc9..6e6bfad5976cb 100644
Binary files a/sound/runtime/instruments/synthesis_samples/meowsynth/c4.ogg and b/sound/runtime/instruments/synthesis_samples/meowsynth/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/meowsynth/c5.ogg b/sound/runtime/instruments/synthesis_samples/meowsynth/c5.ogg
index dfc8a6ae8ebe4..225f8d8fe6c77 100644
Binary files a/sound/runtime/instruments/synthesis_samples/meowsynth/c5.ogg and b/sound/runtime/instruments/synthesis_samples/meowsynth/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/meowsynth/c6.ogg b/sound/runtime/instruments/synthesis_samples/meowsynth/c6.ogg
index acee6c455fe0b..796ccdca820da 100644
Binary files a/sound/runtime/instruments/synthesis_samples/meowsynth/c6.ogg and b/sound/runtime/instruments/synthesis_samples/meowsynth/c6.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c2.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c2.ogg
index 7c9870a7c3b91..bc0a27f6e9431 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c2.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c3.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c3.ogg
index 5723c2edd2749..464f100b31928 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c3.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c4.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c4.ogg
index 329f14f6feb69..e5eb7c2483ce8 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c4.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c5.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c5.ogg
index 5e8ac69de2884..87d14fabd5073 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c5.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_accordian/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c2.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c2.ogg
index ddc44c69c29eb..dc1db2ee14a4a 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c2.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c3.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c3.ogg
index 2855747528457..a8b979a434904 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c3.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c4.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c4.ogg
index 906fff5bd8dd1..45bc5c18d8b00 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c4.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c5.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c5.ogg
index 96d28a7206de4..bf9787723decb 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c5.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_church/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c2.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c2.ogg
index 9b917b7eb53bc..c57d55b36f5a4 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c2.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c3.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c3.ogg
index c68410d6f0925..51787be6861a2 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c3.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c4.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c4.ogg
index df84ba99e8e10..144da0eb18125 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c4.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c5.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c5.ogg
index af8c178efe8a6..9871014ae69bd 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c5.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_hammond/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_harmonica/c3.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_harmonica/c3.ogg
index 268b41f1fcea8..de9b055e87620 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_harmonica/c3.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_harmonica/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_harmonica/c4.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_harmonica/c4.ogg
index 04ceb54bfc2f2..2233e993fc36f 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_harmonica/c4.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_harmonica/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_harmonica/c5.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_harmonica/c5.ogg
index b321983e74f39..99aaad6b922af 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_harmonica/c5.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_harmonica/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c2.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c2.ogg
index 250a5c08e081b..e353aea553d3a 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c2.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c3.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c3.ogg
index 8b1c23007bb34..006cf90e85a8a 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c3.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c4.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c4.ogg
index 098587183bbca..3ad701162be01 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c4.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c5.ogg b/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c5.ogg
index 81b60ef4c2ff4..694cdb1a35378 100644
Binary files a/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c5.ogg and b/sound/runtime/instruments/synthesis_samples/organ/crisis_tangaccordian/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c2.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c2.ogg
index 39e992fbd85bb..e0429dbf840f9 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c2.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c3.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c3.ogg
index 04aa98528158c..d49ed18064232 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c3.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c4.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c4.ogg
index aff97942e9e8c..74570e4dfe466 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c4.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c5.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c5.ogg
index 19fd937707afa..076246b15cc49 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c5.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c6.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c6.ogg
index 452e7485be16c..eff014875db19 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c6.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c6.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c7.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c7.ogg
index 66c88185a735f..2a17ec1e91535 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c7.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c7.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c8.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c8.ogg
index d93c5176ceda0..10aee4f88178d 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c8.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_bright_piano/c8.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c2.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c2.ogg
index fabd90d2e6ad7..8ee0111ac313c 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c2.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c3.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c3.ogg
index e4cda1487aa7c..34ee2c99b2593 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c3.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c4.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c4.ogg
index c596994b3eb1e..bfcf789481693 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c4.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c5.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c5.ogg
index d265514e27b7c..80434d8cfd459 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c5.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c6.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c6.ogg
index 3e17b3f99a673..ffbd929ceaf21 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c6.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c6.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c7.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c7.ogg
index b57a8a9109abb..03908f871b4e9 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c7.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c7.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c8.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c8.ogg
index ce4d9535e84c8..41c78619cb7ea 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c8.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_grand_piano/c8.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c2.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c2.ogg
index bb02363fffb3f..ca67df0ed197c 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c2.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c3.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c3.ogg
index 1a532ac8d42a0..23a77061b04f5 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c3.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c4.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c4.ogg
index 16ff313baa31d..ee6295d98b6f2 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c4.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c5.ogg b/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c5.ogg
index 04161d2571b83..86513aa0edb07 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c5.ogg and b/sound/runtime/instruments/synthesis_samples/piano/crisis_harpsichord/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C2.ogg b/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C2.ogg
index 30a3c653a1c5a..55c5063cbcb51 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C2.ogg and b/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C3.ogg b/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C3.ogg
index f6bc891506cc3..5a7fde524c80e 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C3.ogg and b/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C4.ogg b/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C4.ogg
index ab47f6940c92a..ccbe190f74bd3 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C4.ogg and b/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C5.ogg b/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C5.ogg
index 5dfb9aa529132..35cfe913fe291 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C5.ogg and b/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C6.ogg b/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C6.ogg
index 7bc8784207ebc..fd5b2dfcee4f3 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C6.ogg and b/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C6.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C7.ogg b/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C7.ogg
index 185b4d3db64ec..32570162e6c02 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C7.ogg and b/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C7.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C8.ogg b/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C8.ogg
index f358ef0810db9..71f5f8eb4badd 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C8.ogg and b/sound/runtime/instruments/synthesis_samples/piano/fluid_harpsi/C8.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c2.ogg b/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c2.ogg
index 048f9640bfe8f..24c0044ce1d71 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c2.ogg and b/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c3.ogg b/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c3.ogg
index f1083d7dcb209..a0aa8f65379dc 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c3.ogg and b/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c4.ogg b/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c4.ogg
index 244ebc3d5f2da..4ec77a548ea84 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c4.ogg and b/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c5.ogg b/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c5.ogg
index d3c68d64e9c91..22adefdbd3caf 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c5.ogg and b/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c6.ogg b/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c6.ogg
index 2666ee66134e2..ca037eb618523 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c6.ogg and b/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c6.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c7.ogg b/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c7.ogg
index 050e463c0d111..09f32a1193855 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c7.ogg and b/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c7.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c8.ogg b/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c8.ogg
index 4793c5b7fd7f5..c2fdc7477747a 100644
Binary files a/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c8.ogg and b/sound/runtime/instruments/synthesis_samples/piano/fluid_piano/c8.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/spaceman/c2.ogg b/sound/runtime/instruments/synthesis_samples/spaceman/c2.ogg
index a633f4d8c7562..832ff37096d70 100644
Binary files a/sound/runtime/instruments/synthesis_samples/spaceman/c2.ogg and b/sound/runtime/instruments/synthesis_samples/spaceman/c2.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/spaceman/c3.ogg b/sound/runtime/instruments/synthesis_samples/spaceman/c3.ogg
index 2fa08e00c786b..1faaf8de62101 100644
Binary files a/sound/runtime/instruments/synthesis_samples/spaceman/c3.ogg and b/sound/runtime/instruments/synthesis_samples/spaceman/c3.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/spaceman/c4.ogg b/sound/runtime/instruments/synthesis_samples/spaceman/c4.ogg
index 3d7595a179b71..b9d375c7272f6 100644
Binary files a/sound/runtime/instruments/synthesis_samples/spaceman/c4.ogg and b/sound/runtime/instruments/synthesis_samples/spaceman/c4.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/spaceman/c5.ogg b/sound/runtime/instruments/synthesis_samples/spaceman/c5.ogg
index 4742f2bc060bd..91f9ebcd758b1 100644
Binary files a/sound/runtime/instruments/synthesis_samples/spaceman/c5.ogg and b/sound/runtime/instruments/synthesis_samples/spaceman/c5.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/tones/Sawtooth.ogg b/sound/runtime/instruments/synthesis_samples/tones/Sawtooth.ogg
index 10b1930a64c1d..1481a3f59ef31 100644
Binary files a/sound/runtime/instruments/synthesis_samples/tones/Sawtooth.ogg and b/sound/runtime/instruments/synthesis_samples/tones/Sawtooth.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/tones/Sine.ogg b/sound/runtime/instruments/synthesis_samples/tones/Sine.ogg
index 96a09d501b5e8..a3dd9a52ce339 100644
Binary files a/sound/runtime/instruments/synthesis_samples/tones/Sine.ogg and b/sound/runtime/instruments/synthesis_samples/tones/Sine.ogg differ
diff --git a/sound/runtime/instruments/synthesis_samples/tones/Square.ogg b/sound/runtime/instruments/synthesis_samples/tones/Square.ogg
index 71029c07f95a2..094028791f982 100644
Binary files a/sound/runtime/instruments/synthesis_samples/tones/Square.ogg and b/sound/runtime/instruments/synthesis_samples/tones/Square.ogg differ
diff --git a/sound/vehicles/car_crash.ogg b/sound/vehicles/car_crash.ogg
index a614a78d2f777..2a0e22e4ffd97 100644
Binary files a/sound/vehicles/car_crash.ogg and b/sound/vehicles/car_crash.ogg differ
diff --git a/sound/vehicles/carcannon1.ogg b/sound/vehicles/carcannon1.ogg
index 751fa6f7546b4..e80bae3b75c3d 100644
Binary files a/sound/vehicles/carcannon1.ogg and b/sound/vehicles/carcannon1.ogg differ
diff --git a/sound/vehicles/carcannon2.ogg b/sound/vehicles/carcannon2.ogg
index 7bc86d7cbca2c..f165feb4f7278 100644
Binary files a/sound/vehicles/carcannon2.ogg and b/sound/vehicles/carcannon2.ogg differ
diff --git a/sound/vehicles/carcannon3.ogg b/sound/vehicles/carcannon3.ogg
index 80407e553fd3d..f1c383f4a678a 100644
Binary files a/sound/vehicles/carcannon3.ogg and b/sound/vehicles/carcannon3.ogg differ
diff --git a/sound/vehicles/carrev.ogg b/sound/vehicles/carrev.ogg
index 1d515f9c641e9..f27b2ea2af4d7 100644
Binary files a/sound/vehicles/carrev.ogg and b/sound/vehicles/carrev.ogg differ
diff --git a/sound/vehicles/clowncar_cannonmode1.ogg b/sound/vehicles/clowncar_cannonmode1.ogg
index aa21c8f9906ff..b0aba3d013b35 100644
Binary files a/sound/vehicles/clowncar_cannonmode1.ogg and b/sound/vehicles/clowncar_cannonmode1.ogg differ
diff --git a/sound/vehicles/clowncar_cannonmode2.ogg b/sound/vehicles/clowncar_cannonmode2.ogg
index 931e1464229c1..b93ae09d5ff40 100644
Binary files a/sound/vehicles/clowncar_cannonmode2.ogg and b/sound/vehicles/clowncar_cannonmode2.ogg differ
diff --git a/sound/vehicles/clowncar_crash1.ogg b/sound/vehicles/clowncar_crash1.ogg
index 681a483f4ca9c..cd704c7cb931b 100644
Binary files a/sound/vehicles/clowncar_crash1.ogg and b/sound/vehicles/clowncar_crash1.ogg differ
diff --git a/sound/vehicles/clowncar_crash2.ogg b/sound/vehicles/clowncar_crash2.ogg
index fcd1164770ec6..61eaa2a0d17a6 100644
Binary files a/sound/vehicles/clowncar_crash2.ogg and b/sound/vehicles/clowncar_crash2.ogg differ
diff --git a/sound/vehicles/clowncar_crashpins.ogg b/sound/vehicles/clowncar_crashpins.ogg
index e2419ef2bbb64..7ad3089170d29 100644
Binary files a/sound/vehicles/clowncar_crashpins.ogg and b/sound/vehicles/clowncar_crashpins.ogg differ
diff --git a/sound/vehicles/clowncar_fart.ogg b/sound/vehicles/clowncar_fart.ogg
index ba14ff9abf8fe..519b602bdf293 100644
Binary files a/sound/vehicles/clowncar_fart.ogg and b/sound/vehicles/clowncar_fart.ogg differ
diff --git a/sound/vehicles/clowncar_load1.ogg b/sound/vehicles/clowncar_load1.ogg
index d4b0c60533175..9b28f89982d87 100644
Binary files a/sound/vehicles/clowncar_load1.ogg and b/sound/vehicles/clowncar_load1.ogg differ
diff --git a/sound/vehicles/clowncar_load2.ogg b/sound/vehicles/clowncar_load2.ogg
index 19ac5cf4d9cb8..36e1f53b1b873 100644
Binary files a/sound/vehicles/clowncar_load2.ogg and b/sound/vehicles/clowncar_load2.ogg differ
diff --git a/sound/vehicles/clowncar_ram1.ogg b/sound/vehicles/clowncar_ram1.ogg
index 4f5fea8971f52..7ad3db6f5511a 100644
Binary files a/sound/vehicles/clowncar_ram1.ogg and b/sound/vehicles/clowncar_ram1.ogg differ
diff --git a/sound/vehicles/clowncar_ram2.ogg b/sound/vehicles/clowncar_ram2.ogg
index 171e0cbb285ee..c1202c5d023dd 100644
Binary files a/sound/vehicles/clowncar_ram2.ogg and b/sound/vehicles/clowncar_ram2.ogg differ
diff --git a/sound/vehicles/clowncar_ram3.ogg b/sound/vehicles/clowncar_ram3.ogg
index f4c48a47d7eac..c74aa88b29383 100644
Binary files a/sound/vehicles/clowncar_ram3.ogg and b/sound/vehicles/clowncar_ram3.ogg differ
diff --git a/sound/vehicles/mecha/critdestr.ogg b/sound/vehicles/mecha/critdestr.ogg
index c34639d08f6e3..2fb282834d359 100644
Binary files a/sound/vehicles/mecha/critdestr.ogg and b/sound/vehicles/mecha/critdestr.ogg differ
diff --git a/sound/vehicles/mecha/hydraulic.ogg b/sound/vehicles/mecha/hydraulic.ogg
index 3281ed2dc0f04..eaff261983a76 100644
Binary files a/sound/vehicles/mecha/hydraulic.ogg and b/sound/vehicles/mecha/hydraulic.ogg differ
diff --git a/sound/vehicles/mecha/imag_enh.ogg b/sound/vehicles/mecha/imag_enh.ogg
index 3917dfc415ea5..0f87d52bd3f8b 100644
Binary files a/sound/vehicles/mecha/imag_enh.ogg and b/sound/vehicles/mecha/imag_enh.ogg differ
diff --git a/sound/vehicles/mecha/mech_blade_attack.ogg b/sound/vehicles/mecha/mech_blade_attack.ogg
index f6c9274762b1f..d44156e4b8e33 100644
Binary files a/sound/vehicles/mecha/mech_blade_attack.ogg and b/sound/vehicles/mecha/mech_blade_attack.ogg differ
diff --git a/sound/vehicles/mecha/mech_blade_break_wall.ogg b/sound/vehicles/mecha/mech_blade_break_wall.ogg
index cec9c7a667cb0..71982fba35b5e 100644
Binary files a/sound/vehicles/mecha/mech_blade_break_wall.ogg and b/sound/vehicles/mecha/mech_blade_break_wall.ogg differ
diff --git a/sound/vehicles/mecha/mech_blade_safty.ogg b/sound/vehicles/mecha/mech_blade_safty.ogg
index 80e06388127f0..c15b52f6f8de9 100644
Binary files a/sound/vehicles/mecha/mech_blade_safty.ogg and b/sound/vehicles/mecha/mech_blade_safty.ogg differ
diff --git a/sound/vehicles/mecha/mech_charge_attack.ogg b/sound/vehicles/mecha/mech_charge_attack.ogg
index b6d202c8e26d0..f45c1bbe2c9ac 100644
Binary files a/sound/vehicles/mecha/mech_charge_attack.ogg and b/sound/vehicles/mecha/mech_charge_attack.ogg differ
diff --git a/sound/vehicles/mecha/mech_shield_deflect.ogg b/sound/vehicles/mecha/mech_shield_deflect.ogg
index 5c1970d872408..96d3c927f58ef 100644
Binary files a/sound/vehicles/mecha/mech_shield_deflect.ogg and b/sound/vehicles/mecha/mech_shield_deflect.ogg differ
diff --git a/sound/vehicles/mecha/mech_shield_drop.ogg b/sound/vehicles/mecha/mech_shield_drop.ogg
index 21c6cb5edb9c1..6b9f6156adbaf 100644
Binary files a/sound/vehicles/mecha/mech_shield_drop.ogg and b/sound/vehicles/mecha/mech_shield_drop.ogg differ
diff --git a/sound/vehicles/mecha/mech_shield_raise.ogg b/sound/vehicles/mecha/mech_shield_raise.ogg
index 65ad70ad14d61..35cf4a57f2f17 100644
Binary files a/sound/vehicles/mecha/mech_shield_raise.ogg and b/sound/vehicles/mecha/mech_shield_raise.ogg differ
diff --git a/sound/vehicles/mecha/mech_stealth_attack.ogg b/sound/vehicles/mecha/mech_stealth_attack.ogg
index e12ff890c7de5..ebd083ed2f467 100644
Binary files a/sound/vehicles/mecha/mech_stealth_attack.ogg and b/sound/vehicles/mecha/mech_stealth_attack.ogg differ
diff --git a/sound/vehicles/mecha/mech_stealth_effect.ogg b/sound/vehicles/mecha/mech_stealth_effect.ogg
index b7a5a513308df..bd4e1d2e441ef 100644
Binary files a/sound/vehicles/mecha/mech_stealth_effect.ogg and b/sound/vehicles/mecha/mech_stealth_effect.ogg differ
diff --git a/sound/vehicles/mecha/mech_stealth_pre_attack.ogg b/sound/vehicles/mecha/mech_stealth_pre_attack.ogg
index 15b2c04ab5c2a..ff7bef9a54852 100644
Binary files a/sound/vehicles/mecha/mech_stealth_pre_attack.ogg and b/sound/vehicles/mecha/mech_stealth_pre_attack.ogg differ
diff --git a/sound/vehicles/mecha/mechmove01.ogg b/sound/vehicles/mecha/mechmove01.ogg
index 55f83b22d8cb6..ec11a380ed8ec 100644
Binary files a/sound/vehicles/mecha/mechmove01.ogg and b/sound/vehicles/mecha/mechmove01.ogg differ
diff --git a/sound/vehicles/mecha/mechmove03.ogg b/sound/vehicles/mecha/mechmove03.ogg
index 44ec14d961946..941d3693d0fd6 100644
Binary files a/sound/vehicles/mecha/mechmove03.ogg and b/sound/vehicles/mecha/mechmove03.ogg differ
diff --git a/sound/vehicles/mecha/mechmove04.ogg b/sound/vehicles/mecha/mechmove04.ogg
index 7441ed85154ee..1971acec0c6d6 100644
Binary files a/sound/vehicles/mecha/mechmove04.ogg and b/sound/vehicles/mecha/mechmove04.ogg differ
diff --git a/sound/vehicles/mecha/mechstep.ogg b/sound/vehicles/mecha/mechstep.ogg
index 45119bb76850f..e03cf82589ebb 100644
Binary files a/sound/vehicles/mecha/mechstep.ogg and b/sound/vehicles/mecha/mechstep.ogg differ
diff --git a/sound/vehicles/mecha/mechturn.ogg b/sound/vehicles/mecha/mechturn.ogg
index 44de9ce99c3ab..ee6f3571215f6 100644
Binary files a/sound/vehicles/mecha/mechturn.ogg and b/sound/vehicles/mecha/mechturn.ogg differ
diff --git a/sound/vehicles/mecha/nominal.ogg b/sound/vehicles/mecha/nominal.ogg
index b89bd39616ab7..ba335dfa75eb9 100644
Binary files a/sound/vehicles/mecha/nominal.ogg and b/sound/vehicles/mecha/nominal.ogg differ
diff --git a/sound/vehicles/mecha/powerloader_step.ogg b/sound/vehicles/mecha/powerloader_step.ogg
index 538ba1efed312..abf45b99b89ee 100644
Binary files a/sound/vehicles/mecha/powerloader_step.ogg and b/sound/vehicles/mecha/powerloader_step.ogg differ
diff --git a/sound/vehicles/mecha/powerloader_turn2.ogg b/sound/vehicles/mecha/powerloader_turn2.ogg
index c3816df9d9e2c..0830a32af1a53 100644
Binary files a/sound/vehicles/mecha/powerloader_turn2.ogg and b/sound/vehicles/mecha/powerloader_turn2.ogg differ
diff --git a/sound/vehicles/mecha/skyfall_power_up.ogg b/sound/vehicles/mecha/skyfall_power_up.ogg
index 4199c0a61295e..aee762197def8 100644
Binary files a/sound/vehicles/mecha/skyfall_power_up.ogg and b/sound/vehicles/mecha/skyfall_power_up.ogg differ
diff --git a/sound/vehicles/mecha/weapdestr.ogg b/sound/vehicles/mecha/weapdestr.ogg
index 56371d752363f..5a0550b62a0ef 100644
Binary files a/sound/vehicles/mecha/weapdestr.ogg and b/sound/vehicles/mecha/weapdestr.ogg differ
diff --git a/sound/vehicles/rocketlaunch.ogg b/sound/vehicles/rocketlaunch.ogg
index e671fbff156e4..f378e96a6e588 100644
Binary files a/sound/vehicles/rocketlaunch.ogg and b/sound/vehicles/rocketlaunch.ogg differ
diff --git a/sound/vehicles/skateboard_ollie.ogg b/sound/vehicles/skateboard_ollie.ogg
index 5f0f2fc30b194..b72c5f0797f5b 100644
Binary files a/sound/vehicles/skateboard_ollie.ogg and b/sound/vehicles/skateboard_ollie.ogg differ
diff --git a/sound/vehicles/skateboard_roll.ogg b/sound/vehicles/skateboard_roll.ogg
index 326c175d778e2..f5a77f1010fe9 100644
Binary files a/sound/vehicles/skateboard_roll.ogg and b/sound/vehicles/skateboard_roll.ogg differ
diff --git a/strings/fishing_tips.txt b/strings/fishing_tips.txt
index f7143c8796665..af67d15e27e70 100644
--- a/strings/fishing_tips.txt
+++ b/strings/fishing_tips.txt
@@ -44,10 +44,13 @@ The legendary fishing hat isn't just cosmetic. Space carps (as well as young lob
Have you ever heard a lobster or crab talk? Well, neither have I, but they say they're quite the fishy punsters.
You can get an experiscanner from science to perform fish scanning experiments, which can unlock more modules for the fishing portal, as well as fishing technology nodes (better equipment) to research.
Fish is, of course, edible. Is it safe to eat raw? Well, if you've strong stomach, otherwise your best option is to cook it for a at least half a spessman minute if you don't want to catch nasty diseases.
-After researching the Advanced Fishing Technology Node, you can print special fishing gloves that let you fish without having to carry around a fishing rod. There's one pair that even trains athletics on top of fishing. You can get an experiscanner from science to perform fish scanning experiments, which can unlock more modules for the fishing portal, as well as fishing technology nodes (better equipment) for research.
+After researching the Advanced Fishing Technology Node, you can print special fishing gloves that let you fish without having to carry around a fishing rod. There's one pair that even trains athletics on top of fishing.
+You can get an experiscanner from science to perform fish scanning experiments, which can unlock more modules for the fishing portal, as well as fishing technology nodes (better equipment) for research.
If you have enough credits, you can buy a set of fishing lures from cargo (or the library vending machine). Each lure allows you to catch different species of fish and won't get consumed, however they need to be spun at intervals to work.
Various clothing and handheld items, as well as chairs you sit on, can make fishing easier (or sometimes harder). A trained fisherman can tell what can help and what won't, so keep an eye out.
This may sound silly, but (live) squids and their ink sacs can be used as weapons to temporarily blind foes.
Got a bioelectricity generator aquarium but no electrogenic fish? Worry not, you can always feed your fish some teslium or liquid electricity to temporarily grant them (slightly less powerful) eletrogenesis. It'll also gradually hurt them however.
Fish can grow in size and weight if you fed them somewhat frequently. Giving them growth serum (from fly amanita) will also boost the rate at which they grow.
-Feeding a fish mutagen can triple the probability of generating evolved offsprings, provided it has an evolution.
\ No newline at end of file
+Feeding a fish mutagen can triple the probability of generating evolved offsprings, provided it has an evolution.
+You can print fishing rods of different materials from an autolathe, which can inrease or decrease fishing difficulty, casting range, experience gained and can have other, special effects.
+Albeit scarcely, it's possible to catch fish made of the same materials of a custom material fishing rod. Equipping a shiny fishing hook and the quality of the bait can improve your odds.
diff --git a/tgstation.dme b/tgstation.dme
index 4e73585a2b04c..80d012718dda0 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -648,6 +648,7 @@
#include "code\_onclick\hud\movable_screen_objects.dm"
#include "code\_onclick\hud\new_player.dm"
#include "code\_onclick\hud\ooze.dm"
+#include "code\_onclick\hud\perks.dm"
#include "code\_onclick\hud\picture_in_picture.dm"
#include "code\_onclick\hud\radial.dm"
#include "code\_onclick\hud\radial_persistent.dm"
@@ -984,6 +985,7 @@
#include "code\datums\ai\basic_mobs\basic_subtrees\find_paper_and_write.dm"
#include "code\datums\ai\basic_mobs\basic_subtrees\find_parent.dm"
#include "code\datums\ai\basic_mobs\basic_subtrees\find_targets_prioritize_traits.dm"
+#include "code\datums\ai\basic_mobs\basic_subtrees\fishing.dm"
#include "code\datums\ai\basic_mobs\basic_subtrees\flee_target.dm"
#include "code\datums\ai\basic_mobs\basic_subtrees\go_for_swim.dm"
#include "code\datums\ai\basic_mobs\basic_subtrees\maintain_distance.dm"
@@ -1184,6 +1186,7 @@
#include "code\datums\components\gas_leaker.dm"
#include "code\datums\components\geiger_sound.dm"
#include "code\datums\components\ghost_direct_control.dm"
+#include "code\datums\components\ghostrole_on_revive.dm"
#include "code\datums\components\glass_passer.dm"
#include "code\datums\components\gps.dm"
#include "code\datums\components\grillable.dm"
@@ -1191,6 +1194,7 @@
#include "code\datums\components\growth_and_differentiation.dm"
#include "code\datums\components\gunpoint.dm"
#include "code\datums\components\happiness.dm"
+#include "code\datums\components\hat_stabilizer.dm"
#include "code\datums\components\hazard_area.dm"
#include "code\datums\components\healing_touch.dm"
#include "code\datums\components\health_scaling_effects.dm"
@@ -1212,6 +1216,7 @@
#include "code\datums\components\jukebox.dm"
#include "code\datums\components\keep_me_secure.dm"
#include "code\datums\components\knockoff.dm"
+#include "code\datums\components\leanable.dm"
#include "code\datums\components\leash.dm"
#include "code\datums\components\life_link.dm"
#include "code\datums\components\light_eater.dm"
@@ -1481,6 +1486,7 @@
#include "code\datums\elements\attack_zone_randomiser.dm"
#include "code\datums\elements\backblast.dm"
#include "code\datums\elements\bane.dm"
+#include "code\datums\elements\basic_allergenic_attack.dm"
#include "code\datums\elements\basic_eating.dm"
#include "code\datums\elements\basic_health_examine.dm"
#include "code\datums\elements\beauty.dm"
@@ -1607,6 +1613,7 @@
#include "code\datums\elements\rust.dm"
#include "code\datums\elements\selfknockback.dm"
#include "code\datums\elements\series.dm"
+#include "code\datums\elements\shiny_bait.dm"
#include "code\datums\elements\sideway_movement.dm"
#include "code\datums\elements\simple_flying.dm"
#include "code\datums\elements\skill_reward.dm"
@@ -1746,6 +1753,7 @@
#include "code\datums\mocking\client.dm"
#include "code\datums\mood_events\_mood_event.dm"
#include "code\datums\mood_events\area_events.dm"
+#include "code\datums\mood_events\axe_events.dm"
#include "code\datums\mood_events\beauty_events.dm"
#include "code\datums\mood_events\dna_infuser_events.dm"
#include "code\datums\mood_events\drink_events.dm"
@@ -2723,6 +2731,7 @@
#include "code\game\objects\items\storage\boxes\cargo_boxes.dm"
#include "code\game\objects\items\storage\boxes\clothes_boxes.dm"
#include "code\game\objects\items\storage\boxes\engineering_boxes.dm"
+#include "code\game\objects\items\storage\boxes\flat_boxes.dm"
#include "code\game\objects\items\storage\boxes\food_boxes.dm"
#include "code\game\objects\items\storage\boxes\implant_boxes.dm"
#include "code\game\objects\items\storage\boxes\job_boxes.dm"
@@ -2870,6 +2879,7 @@
#include "code\game\objects\structures\plaques\_plaques.dm"
#include "code\game\objects\structures\plaques\static_plaques.dm"
#include "code\game\objects\structures\signs\_signs.dm"
+#include "code\game\objects\structures\signs\sign_eyechart.dm"
#include "code\game\objects\structures\signs\signs_departments.dm"
#include "code\game\objects\structures\signs\signs_flags.dm"
#include "code\game\objects\structures\signs\signs_interactive.dm"
@@ -4631,6 +4641,21 @@
#include "code\modules\lootpanel\search_object.dm"
#include "code\modules\lootpanel\ss_looting.dm"
#include "code\modules\lootpanel\ui.dm"
+#include "code\modules\lost_crew\body_bags.dm"
+#include "code\modules\lost_crew\lost_crew_manager.dm"
+#include "code\modules\lost_crew\recovered_crew.dm"
+#include "code\modules\lost_crew\scenarios.dm"
+#include "code\modules\lost_crew\character\_assignment.dm"
+#include "code\modules\lost_crew\character\_character.dm"
+#include "code\modules\lost_crew\character\flavor.dm"
+#include "code\modules\lost_crew\character\job_datums.dm"
+#include "code\modules\lost_crew\damages\_damages.dm"
+#include "code\modules\lost_crew\damages\accident.dm"
+#include "code\modules\lost_crew\damages\decay.dm"
+#include "code\modules\lost_crew\damages\melee.dm"
+#include "code\modules\lost_crew\damages\poisoned.dm"
+#include "code\modules\lost_crew\damages\post_mortem.dm"
+#include "code\modules\lost_crew\damages\projectile.dm"
#include "code\modules\mafia\_defines.dm"
#include "code\modules\mafia\controller.dm"
#include "code\modules\mafia\controller_ui.dm"
@@ -5027,7 +5052,6 @@
#include "code\modules\mob\living\basic\minebots\minebot_remote_control.dm"
#include "code\modules\mob\living\basic\minebots\minebot_upgrades.dm"
#include "code\modules\mob\living\basic\pets\fox.dm"
-#include "code\modules\mob\living\basic\pets\penguin.dm"
#include "code\modules\mob\living\basic\pets\pet.dm"
#include "code\modules\mob\living\basic\pets\pet_designer.dm"
#include "code\modules\mob\living\basic\pets\sloth.dm"
@@ -5056,6 +5080,8 @@
#include "code\modules\mob\living\basic\pets\parrot\parrot_ai\parrot_hoarding.dm"
#include "code\modules\mob\living\basic\pets\parrot\parrot_ai\parrot_perching.dm"
#include "code\modules\mob\living\basic\pets\parrot\parrot_ai\parroting_action.dm"
+#include "code\modules\mob\living\basic\pets\penguin\penguin.dm"
+#include "code\modules\mob\living\basic\pets\penguin\penguin_ai.dm"
#include "code\modules\mob\living\basic\pets\pet_cult\pet_cult_abilities.dm"
#include "code\modules\mob\living\basic\pets\pet_cult\pet_cult_ai.dm"
#include "code\modules\mob\living\basic\ruin_defender\cybersun_aicore.dm"
@@ -5751,6 +5777,7 @@
#include "code\modules\reagents\chemistry\items.dm"
#include "code\modules\reagents\chemistry\reagents.dm"
#include "code\modules\reagents\chemistry\recipes.dm"
+#include "code\modules\reagents\chemistry\taste.dm"
#include "code\modules\reagents\chemistry\holder\holder.dm"
#include "code\modules\reagents\chemistry\holder\mob_life.dm"
#include "code\modules\reagents\chemistry\holder\properties.dm"
@@ -6443,6 +6470,9 @@
#include "code\modules\wiremod\components\table\select.dm"
#include "code\modules\wiremod\components\utility\clock.dm"
#include "code\modules\wiremod\components\utility\delay.dm"
+#include "code\modules\wiremod\components\utility\nfc_receive.dm"
+#include "code\modules\wiremod\components\utility\nfc_send.dm"
+#include "code\modules\wiremod\components\utility\nfc_send_literal.dm"
#include "code\modules\wiremod\components\utility\router.dm"
#include "code\modules\wiremod\components\utility\timepiece.dm"
#include "code\modules\wiremod\components\utility\typecast.dm"
@@ -6966,11 +6996,13 @@
#include "modular_doppler\modular_medical\wounds\synth\blunt\secures_internals.dm"
#include "modular_doppler\modular_mob_spawn\code\mob_spawn.dm"
#include "modular_doppler\modular_mobs\simple_animal\bot\secbot_permit_overwrite.dm"
+#include "modular_doppler\modular_mobs\simple_animal\megafauna\wendigo.dm"
#include "modular_doppler\modular_mood\code\mood_events\brushed.dm"
#include "modular_doppler\modular_mood\code\mood_events\dog_wag.dm"
#include "modular_doppler\modular_mood\code\mood_events\hotspring.dm"
#include "modular_doppler\modular_mood\code\mood_events\race_drink.dm"
#include "modular_doppler\modular_quirks\breather\accessories.dm"
+#include "modular_doppler\modular_quirks\breather\breather_quirk.dm"
#include "modular_doppler\modular_quirks\breather\nitrogen_breather\nitrogen_breather.dm"
#include "modular_doppler\modular_quirks\breather\nitrogen_breather\nitrogen_tanks.dm"
#include "modular_doppler\modular_quirks\breather\water_breather\water_breather.dm"
diff --git a/tgui/docs/component-reference.md b/tgui/docs/component-reference.md
index 3e085d72084ec..dd57bf8047fee 100644
--- a/tgui/docs/component-reference.md
+++ b/tgui/docs/component-reference.md
@@ -256,6 +256,7 @@ commit, while escape cancels.
- See inherited props: [Box](#box)
- `fluid`: fill available horizontal space
+- `disabled: boolean` - Disables and greys out the button.
- `onCommit: (e, value) => void`: function that is called after the user
defocuses the input or presses enter
- `currentValue: string`: default string to display when the input is shown
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
index 98d89378cf126..c1cb06cff3ae2 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
@@ -374,7 +374,7 @@ em {
}
.enteradio {
- color: #00ff99;
+ color: #79c5a8;
}
.redteamradio {
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
index 3769c79771c38..4efa080ced03a 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
@@ -391,7 +391,7 @@ em {
}
.enteradio {
- color: #00d680;
+ color: #5c8a87;
}
.redteamradio {
diff --git a/tgui/packages/tgui-say/styles/colors.scss b/tgui/packages/tgui-say/styles/colors.scss
index bbc5ab96e3f9e..9a6c1beb265ad 100644
--- a/tgui/packages/tgui-say/styles/colors.scss
+++ b/tgui/packages/tgui-say/styles/colors.scss
@@ -18,7 +18,7 @@ $_channel_map: (
'Me': #5975da,
'Med': #57b8f0,
'OOC': #cca300,
- 'Ent': #00ff99,
+ 'Ent': #5c8a87,
'Radio': #1ecc43,
'Say': #a4bad6,
'Sci': #c68cfa,
diff --git a/tgui/packages/tgui/components/Button.tsx b/tgui/packages/tgui/components/Button.tsx
index 82493ce6edf59..86e9e26cc4830 100644
--- a/tgui/packages/tgui/components/Button.tsx
+++ b/tgui/packages/tgui/components/Button.tsx
@@ -315,10 +315,15 @@ const ButtonInput = (props: InputProps) => {
className={classes([
'Button',
fluid && 'Button--fluid',
+ disabled && 'Button--disabled',
'Button--color--' + color,
])}
{...rest}
- onClick={() => setInInput(true)}
+ onClick={() => {
+ if (!disabled) {
+ setInInput(true);
+ }
+ }}
>
{icon && }
{toDisplay}
diff --git a/tgui/packages/tgui/interfaces/BigManipulator.tsx b/tgui/packages/tgui/interfaces/BigManipulator.tsx
index c1419daa3bdeb..9b0f6a3a3f6cc 100644
--- a/tgui/packages/tgui/interfaces/BigManipulator.tsx
+++ b/tgui/packages/tgui/interfaces/BigManipulator.tsx
@@ -26,7 +26,6 @@ export const BigManipulator = (props) => {
active,
manipulate_mode,
settings_list,
- drop_after_use,
highest_priority,
throw_range,
item_as_filter,
@@ -69,14 +68,6 @@ export const BigManipulator = (props) => {
tooltip="click on this button with item in hands to add filter on this item."
onClick={() => act('add_filter')}
/>
- {manipulate_mode === 'Use' && (
-