diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm
index 99f7f19621..c64a73eada 100644
--- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm
+++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm
@@ -509,7 +509,9 @@
/obj/machinery/button/door{
id = "a3";
name = "privacy button";
- pixel_y = -24
+ normaldoorcontrol = 1;
+ pixel_y = -24;
+ specialfunctions = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/wood,
@@ -557,7 +559,9 @@
/obj/machinery/button/door{
id = "a4";
name = "privacy button";
- pixel_y = -24
+ normaldoorcontrol = 1;
+ pixel_y = -24;
+ specialfunctions = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/wood,
@@ -605,7 +609,9 @@
/obj/machinery/button/door{
id = "a5";
name = "privacy button";
- pixel_y = -24
+ normaldoorcontrol = 1;
+ pixel_y = -24;
+ specialfunctions = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/wood,
@@ -653,7 +659,9 @@
/obj/machinery/button/door{
id = "a6";
name = "privacy button";
- pixel_y = -24
+ normaldoorcontrol = 1;
+ pixel_y = -24;
+ specialfunctions = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/wood,
@@ -1097,7 +1105,9 @@
/obj/machinery/button/door{
id = "a2";
name = "privacy button";
- pixel_y = 24
+ normaldoorcontrol = 1;
+ pixel_y = 24;
+ specialfunctions = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/wood,
@@ -1159,7 +1169,9 @@
/obj/machinery/button/door{
id = "a1";
name = "privacy button";
- pixel_y = 24
+ normaldoorcontrol = 1;
+ pixel_y = 24;
+ specialfunctions = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/wood,
@@ -1807,7 +1819,9 @@
/area/ruin/space/has_grav/hotel/bar)
"fE" = (
/obj/machinery/vending/boozeomat{
- req_access_txt = "200"
+ extended_inventory = 1;
+ req_access_txt = "200";
+ scan_id = 0
},
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -4496,7 +4510,6 @@
/turf/closed/wall,
/area/ruin/space/has_grav/hotel/custodial)
"me" = (
-/mob/living/simple_animal/bot/cleanbot,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -4507,6 +4520,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/mob/living/simple_animal/bot/cleanbot,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/hotel/custodial)
"mf" = (
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index de28ff59fa..bba92be7a7 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -36664,14 +36664,11 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bHT" = (
-/obj/machinery/door/poddoor/preopen{
- id = "medpriv1";
- name = "privacy door"
- },
/obj/effect/spawner/structure/window,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/machinery/door/firedoor,
/turf/open/floor/plating,
/area/medical/medbay/central)
"bHU" = (
@@ -37987,22 +37984,23 @@
/turf/open/floor/plating,
/area/maintenance/aft)
"bKM" = (
-/obj/machinery/vending/wallmed{
- pixel_y = 28
- },
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
+/obj/machinery/airalarm{
+ pixel_y = 24
+ },
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bKN" = (
/obj/machinery/door/airlock/medical{
- name = "Patient Room 2";
+ name = "Apothecary";
req_access_txt = "5"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bKO" = (
@@ -38456,24 +38454,17 @@
/turf/open/floor/plating,
/area/maintenance/aft)
"bLU" = (
-/obj/structure/table,
-/obj/item/folder/white,
-/obj/item/clothing/neck/stethoscope,
/obj/machinery/light/small{
dir = 8
},
+/obj/machinery/chem_dispenser,
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bLV" = (
-/obj/structure/closet/secure_closet/personal/patient,
-/obj/machinery/button/door{
- id = "medpriv1";
- name = "Privacy Shutters";
- pixel_y = -25
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/machinery/chem_heater,
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"bLW" = (
@@ -46031,6 +46022,9 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/delivery,
+/obj/machinery/shower{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"cek" = (
@@ -46039,6 +46033,9 @@
name = "engineering security door"
},
/obj/effect/turf_decal/delivery,
+/obj/machinery/shower{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"cel" = (
@@ -56742,6 +56739,16 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/science/circuit)
+"fTg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/firealarm{
+ dir = 2;
+ pixel_y = 24
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"gbq" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -57499,6 +57506,10 @@
/obj/structure/table/wood,
/turf/open/floor/wood,
/area/maintenance/bar)
+"tRe" = (
+/obj/machinery/chem_master,
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"tRF" = (
/obj/machinery/light/small{
dir = 8
@@ -95728,8 +95739,8 @@ bof
bof
bof
bJE
-bof
-bof
+bJE
+bJE
bNd
bIJ
bPo
@@ -95985,7 +95996,7 @@ bof
bGT
bIo
bof
-bIo
+tRe
bLU
bNd
bII
@@ -96499,7 +96510,7 @@ bof
bGU
bqQ
bof
-bCR
+fTg
bLV
bNd
bOm
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index bd159e4e9c..c8e551b9fe 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -101814,6 +101814,7 @@
/obj/effect/turf_decal/tile/blue{
dir = 1
},
+/obj/effect/landmark/start/medical_doctor,
/turf/open/floor/plasteel/white,
/area/medical/genetics/cloning)
"dpo" = (
@@ -126296,6 +126297,20 @@
/obj/machinery/atmospherics/pipe/simple/general/visible,
/turf/closed/wall/r_wall,
/area/science/mixing)
+"eLw" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/chem_dispenser,
+/turf/open/floor/plasteel/dark,
+/area/medical/medbay/central)
"eMD" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable/white{
@@ -126355,6 +126370,22 @@
},
/turf/open/floor/plasteel/white,
/area/science/misc_lab)
+"fhE" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/medical{
+ name = "Apothecary"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/medical/medbay/central)
"fno" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -126584,6 +126615,13 @@
/obj/item/restraints/handcuffs/fake,
/turf/open/floor/plating,
/area/crew_quarters/abandoned_gambling_den)
+"hSf" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/medical/medbay/central)
"iaF" = (
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -126593,6 +126631,18 @@
/obj/item/reagent_containers/glass/beaker,
/turf/open/floor/plating,
/area/crew_quarters/abandoned_gambling_den)
+"iwL" = (
+/obj/machinery/status_display{
+ pixel_x = 32
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"ixL" = (
/obj/structure/sign/warning/vacuum{
pixel_x = 32
@@ -126743,6 +126793,23 @@
},
/turf/open/floor/plasteel,
/area/medical/morgue)
+"jOE" = (
+/obj/machinery/newscaster{
+ pixel_x = 32
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/chem_master,
+/turf/open/floor/plasteel/dark,
+/area/medical/medbay/central)
"jRy" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -126853,6 +126920,22 @@
},
/turf/open/floor/engine,
/area/science/mixing)
+"lzF" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/firealarm{
+ pixel_y = 26
+ },
+/turf/open/floor/plasteel/dark,
+/area/medical/medbay/central)
"lEl" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -126909,6 +126992,23 @@
},
/turf/open/floor/plating,
/area/construction/mining/aux_base)
+"lTx" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/machinery/airalarm{
+ pixel_y = 22
+ },
+/turf/open/floor/plasteel/dark,
+/area/medical/medbay/central)
"lXF" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -127259,6 +127359,16 @@
dir = 10
},
/area/science/misc_lab)
+"tRT" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/chem_heater,
+/turf/open/floor/plasteel/white,
+/area/medical/medbay/central)
"upk" = (
/obj/machinery/door/airlock/public/glass{
name = "Holodeck Access"
@@ -174190,9 +174300,9 @@ dfL
dCM
dEb
cPy
-dfL
-dCM
-dEb
+cNz
+fhE
+hSf
cPy
dhs
dMS
@@ -174447,7 +174557,7 @@ dBo
cSF
dEc
cPy
-dBo
+lzF
cSF
dEc
cPy
@@ -174961,8 +175071,8 @@ dBq
dCN
dEe
cPy
-dBq
-dCN
+lTx
+cSK
dEe
cPy
cMg
@@ -175218,9 +175328,9 @@ dBr
dCO
dEf
cPy
-dBr
+eLw
dCO
-dEf
+tRT
cPy
dLo
dMW
@@ -175475,9 +175585,9 @@ dBs
dCP
dEg
cPy
-dBs
+jOE
dCP
-dEg
+iwL
cPy
dLp
dMV
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 228700580a..78ffa3881c 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -64367,6 +64367,7 @@
/obj/structure/cable/yellow{
icon_state = "1-8"
},
+/obj/effect/landmark/start/medical_doctor,
/turf/open/floor/plasteel/white,
/area/medical/patients_rooms/room_a)
"cum" = (
@@ -65463,24 +65464,9 @@
/turf/open/floor/plating,
/area/maintenance/port/aft)
"cwo" = (
-/obj/structure/table,
-/obj/item/folder/white{
- pixel_x = 4;
- pixel_y = -3
- },
-/obj/item/clothing/neck/stethoscope,
/obj/machinery/light/small{
dir = 8
},
-/obj/machinery/power/apc{
- dir = 8;
- name = "Patient Room B APC";
- areastring = "/area/medical/patients_rooms/room_b";
- pixel_x = -26
- },
-/obj/structure/cable/yellow{
- icon_state = "0-4"
- },
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 8
},
@@ -65493,31 +65479,24 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/chem_dispenser{
+ layer = 2.7
+ },
/turf/open/floor/plasteel/white,
-/area/medical/patients_rooms/room_b)
+/area/medical/medbay/aft)
"cwp" = (
/obj/structure/chair/office/light{
dir = 8
},
-/obj/structure/cable/yellow{
- icon_state = "2-8"
- },
-/obj/effect/landmark/start/medical_doctor,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/machinery/vending/wallmed{
- pixel_y = 28
+/obj/machinery/airalarm{
+ pixel_y = 23
},
/turf/open/floor/plasteel/white,
-/area/medical/patients_rooms/room_b)
+/area/medical/medbay/aft)
"cwq" = (
-/obj/structure/closet/secure_closet/personal/patient,
-/obj/machinery/button/door{
- id = "isolb";
- name = "Privacy Shutters";
- pixel_y = 25
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
@@ -65525,19 +65504,19 @@
/obj/effect/turf_decal/tile/blue{
dir = 4
},
+/obj/machinery/chem_heater{
+ pixel_x = 4
+ },
/turf/open/floor/plasteel/white,
-/area/medical/patients_rooms/room_b)
+/area/medical/medbay/aft)
"cwr" = (
-/obj/effect/spawner/structure/window,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/machinery/door/poddoor/preopen{
- id = "isolb";
- name = "privacy shutters"
- },
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/firedoor,
/turf/open/floor/plating,
-/area/medical/patients_rooms/room_b)
+/area/medical/medbay/aft)
"cws" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -65962,65 +65941,53 @@
/turf/open/floor/plating,
/area/maintenance/port/aft)
"cxe" = (
-/obj/structure/bed,
-/obj/item/bedsheet/medical,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -23
- },
/obj/effect/turf_decal/tile/blue{
dir = 1
},
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/machinery/chem_master,
/turf/open/floor/plasteel/white,
-/area/medical/patients_rooms/room_b)
+/area/medical/medbay/aft)
"cxf" = (
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 8
},
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
+ },
/turf/open/floor/plasteel/white,
-/area/medical/patients_rooms/room_b)
+/area/medical/medbay/aft)
"cxg" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
dir = 4
},
/turf/open/floor/plasteel/white,
-/area/medical/patients_rooms/room_b)
+/area/medical/medbay/aft)
"cxh" = (
-/obj/machinery/door/airlock/medical{
- name = "Patient Room B";
- req_access_txt = "5"
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/machinery/door/airlock/medical/glass{
+ name = "Apothecary";
+ req_access_txt = "5"
+ },
+/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/white,
-/area/medical/patients_rooms/room_b)
+/area/medical/medbay/aft)
"cxi" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
/obj/effect/turf_decal/tile/blue{
dir = 1
},
@@ -66033,9 +66000,6 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
/turf/open/floor/plasteel/white,
/area/medical/medbay/aft)
"cxk" = (
@@ -105762,8 +105726,8 @@ css
dux
dux
dux
-dux
-dux
+cxU
+cxU
cxU
cyO
czP
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index 4a8eee364c..f9792a736e 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -44325,7 +44325,9 @@
dir = 1;
pixel_y = -22
},
-/obj/structure/closet/radiation,
+/obj/machinery/shower{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/break_room)
"bWF" = (
@@ -44352,7 +44354,10 @@
dir = 6
},
/obj/effect/turf_decal/delivery,
-/obj/structure/closet/radiation,
+/obj/machinery/shower{
+ dir = 8;
+ pixel_y = -4
+ },
/turf/open/floor/plasteel,
/area/engine/break_room)
"bWH" = (
@@ -44932,6 +44937,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/structure/closet/radiation,
/turf/open/floor/plasteel,
/area/engine/engineering)
"bYn" = (
@@ -44956,6 +44962,7 @@
/obj/machinery/light{
dir = 4
},
+/obj/structure/closet/radiation,
/turf/open/floor/plasteel,
/area/engine/engineering)
"bYp" = (
@@ -53780,7 +53787,7 @@
"eSB" = (
/obj/machinery/computer/cryopod{
dir = 1;
- pixel_y = -26;
+ pixel_y = -26
},
/turf/open/floor/plasteel/dark,
/area/security/prison)
diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm
index 15e8048926..7cab82149d 100644
--- a/code/__DEFINES/combat.dm
+++ b/code/__DEFINES/combat.dm
@@ -79,6 +79,8 @@
#define ATTACK_EFFECT_SMASH "smash"
#define ATTACK_EFFECT_CLAW "claw"
#define ATTACK_EFFECT_DISARM "disarm"
+#define ATTACK_EFFECT_ASS_SLAP "ass_slap"
+#define ATTACK_EFFECT_FACE_SLAP "face_slap"
#define ATTACK_EFFECT_BITE "bite"
#define ATTACK_EFFECT_MECHFIRE "mech_fire"
#define ATTACK_EFFECT_MECHTOXIN "mech_toxin"
diff --git a/code/__DEFINES/footsteps.dm b/code/__DEFINES/footsteps.dm
index e66d518644..ef96b83cc8 100644
--- a/code/__DEFINES/footsteps.dm
+++ b/code/__DEFINES/footsteps.dm
@@ -6,6 +6,14 @@
#define FOOTSTEP_GRASS "grass"
#define FOOTSTEP_WATER "water"
#define FOOTSTEP_LAVA "lava"
+//barefoot sounds
+#define FOOTSTEP_WOOD_BAREFOOT "woodbarefoot"
+#define FOOTSTEP_WOOD_CLAW "woodclaw"
+#define FOOTSTEP_HARD_BAREFOOT "hardbarefoot"
+#define FOOTSTEP_HARD_CLAW "hardclaw"
+#define FOOTSTEP_CARPET_BAREFOOT "carpetbarefoot"
+//misc footstep sounds
+#define FOOTSTEP_GENERIC_HEAVY "heavy"
/*
@@ -63,4 +71,104 @@ GLOBAL_LIST_INIT(footstep, list(
'sound/effects/footstep/lava1.ogg',
'sound/effects/footstep/lava2.ogg',
'sound/effects/footstep/lava3.ogg'), 100, 0),
-))
\ No newline at end of file
+))
+
+//bare footsteps lists
+GLOBAL_LIST_INIT(barefootstep, list(
+ FOOTSTEP_WOOD_BAREFOOT = list(list(
+ 'sound/effects/footstep/woodbarefoot1.ogg',
+ 'sound/effects/footstep/woodbarefoot2.ogg',
+ 'sound/effects/footstep/woodbarefoot3.ogg',
+ 'sound/effects/footstep/woodbarefoot4.ogg',
+ 'sound/effects/footstep/woodbarefoot5.ogg'), 80, -1),
+ FOOTSTEP_HARD_BAREFOOT = list(list(
+ 'sound/effects/footstep/hardbarefoot1.ogg',
+ 'sound/effects/footstep/hardbarefoot2.ogg',
+ 'sound/effects/footstep/hardbarefoot3.ogg',
+ 'sound/effects/footstep/hardbarefoot4.ogg',
+ 'sound/effects/footstep/hardbarefoot5.ogg'), 80, -1),
+ FOOTSTEP_CARPET_BAREFOOT = list(list(
+ 'sound/effects/footstep/carpetbarefoot1.ogg',
+ 'sound/effects/footstep/carpetbarefoot2.ogg',
+ 'sound/effects/footstep/carpetbarefoot3.ogg',
+ 'sound/effects/footstep/carpetbarefoot4.ogg',
+ 'sound/effects/footstep/carpetbarefoot5.ogg'), 75, -2),
+ FOOTSTEP_SAND = list(list(
+ 'sound/effects/footstep/asteroid1.ogg',
+ 'sound/effects/footstep/asteroid2.ogg',
+ 'sound/effects/footstep/asteroid3.ogg',
+ 'sound/effects/footstep/asteroid4.ogg',
+ 'sound/effects/footstep/asteroid5.ogg'), 75, 0),
+ FOOTSTEP_GRASS = list(list(
+ 'sound/effects/footstep/grass1.ogg',
+ 'sound/effects/footstep/grass2.ogg',
+ 'sound/effects/footstep/grass3.ogg',
+ 'sound/effects/footstep/grass4.ogg'), 75, 0),
+ FOOTSTEP_WATER = list(list(
+ 'sound/effects/footstep/water1.ogg',
+ 'sound/effects/footstep/water2.ogg',
+ 'sound/effects/footstep/water3.ogg',
+ 'sound/effects/footstep/water4.ogg'), 100, 1),
+ FOOTSTEP_LAVA = list(list(
+ 'sound/effects/footstep/lava1.ogg',
+ 'sound/effects/footstep/lava2.ogg',
+ 'sound/effects/footstep/lava3.ogg'), 100, 0),
+))
+
+//claw footsteps lists
+GLOBAL_LIST_INIT(clawfootstep, list(
+ FOOTSTEP_WOOD_CLAW = list(list(
+ 'sound/effects/footstep/woodclaw1.ogg',
+ 'sound/effects/footstep/woodclaw2.ogg',
+ 'sound/effects/footstep/woodclaw3.ogg',
+ 'sound/effects/footstep/woodclaw2.ogg',
+ 'sound/effects/footstep/woodclaw1.ogg'), 90, 1),
+ FOOTSTEP_HARD_CLAW = list(list(
+ 'sound/effects/footstep/hardclaw1.ogg',
+ 'sound/effects/footstep/hardclaw2.ogg',
+ 'sound/effects/footstep/hardclaw3.ogg',
+ 'sound/effects/footstep/hardclaw4.ogg',
+ 'sound/effects/footstep/hardclaw1.ogg'), 90, 1),
+ FOOTSTEP_CARPET_BAREFOOT = list(list(
+ 'sound/effects/footstep/carpetbarefoot1.ogg',
+ 'sound/effects/footstep/carpetbarefoot2.ogg',
+ 'sound/effects/footstep/carpetbarefoot3.ogg',
+ 'sound/effects/footstep/carpetbarefoot4.ogg',
+ 'sound/effects/footstep/carpetbarefoot5.ogg'), 75, -2),
+ FOOTSTEP_SAND = list(list(
+ 'sound/effects/footstep/asteroid1.ogg',
+ 'sound/effects/footstep/asteroid2.ogg',
+ 'sound/effects/footstep/asteroid3.ogg',
+ 'sound/effects/footstep/asteroid4.ogg',
+ 'sound/effects/footstep/asteroid5.ogg'), 75, 0),
+ FOOTSTEP_GRASS = list(list(
+ 'sound/effects/footstep/grass1.ogg',
+ 'sound/effects/footstep/grass2.ogg',
+ 'sound/effects/footstep/grass3.ogg',
+ 'sound/effects/footstep/grass4.ogg'), 75, 0),
+ FOOTSTEP_WATER = list(list(
+ 'sound/effects/footstep/water1.ogg',
+ 'sound/effects/footstep/water2.ogg',
+ 'sound/effects/footstep/water3.ogg',
+ 'sound/effects/footstep/water4.ogg'), 100, 1),
+ FOOTSTEP_LAVA = list(list(
+ 'sound/effects/footstep/lava1.ogg',
+ 'sound/effects/footstep/lava2.ogg',
+ 'sound/effects/footstep/lava3.ogg'), 100, 0),
+))
+
+//heavy footsteps list
+GLOBAL_LIST_INIT(heavyfootstep, list(
+ FOOTSTEP_GENERIC_HEAVY = list(list(
+ 'sound/effects/footstep/heavy1.ogg',
+ 'sound/effects/footstep/heavy2.ogg'), 100, 2),
+ FOOTSTEP_WATER = list(list(
+ 'sound/effects/footstep/water1.ogg',
+ 'sound/effects/footstep/water2.ogg',
+ 'sound/effects/footstep/water3.ogg',
+ 'sound/effects/footstep/water4.ogg'), 100, 2),
+ FOOTSTEP_LAVA = list(list(
+ 'sound/effects/footstep/lava1.ogg',
+ 'sound/effects/footstep/lava2.ogg',
+ 'sound/effects/footstep/lava3.ogg'), 100, 0),
+))
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 15eaadb2f2..8ff40c3ef9 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -67,7 +67,7 @@
#define islarva(A) (istype(A, /mob/living/carbon/alien/larva))
-#define isalienadult(A) (istype(A, /mob/living/carbon/alien/humanoid))
+#define isalienadult(A) (istype(A, /mob/living/carbon/alien/humanoid) || istype(A, /mob/living/simple_animal/hostile/alien))
#define isalienhunter(A) (istype(A, /mob/living/carbon/alien/humanoid/hunter))
@@ -123,6 +123,47 @@
#define isclown(A) (istype(A, /mob/living/simple_animal/hostile/retaliate/clown))
+GLOBAL_LIST_INIT(shoefootmob, typecacheof(list(
+ /mob/living/carbon/human/,
+ /mob/living/simple_animal/cow,
+ /mob/living/simple_animal/hostile/cat_butcherer,
+ /mob/living/simple_animal/hostile/faithless,
+ /mob/living/simple_animal/hostile/nanotrasen,
+ /mob/living/simple_animal/hostile/pirate,
+ /mob/living/simple_animal/hostile/russian,
+ /mob/living/simple_animal/hostile/syndicate,
+ /mob/living/simple_animal/hostile/wizard,
+ /mob/living/simple_animal/hostile/zombie,
+ /mob/living/simple_animal/hostile/retaliate/clown,
+ /mob/living/simple_animal/hostile/retaliate/spaceman,
+ /mob/living/simple_animal/hostile/retaliate/nanotrasenpeace,
+ /mob/living/simple_animal/hostile/retaliate/goat,
+ /mob/living/carbon/true_devil,
+ )))
+
+GLOBAL_LIST_INIT(clawfootmob, typecacheof(list(
+ /mob/living/carbon/alien/humanoid,
+ /mob/living/simple_animal/hostile/alien,
+ /mob/living/simple_animal/pet/cat,
+ /mob/living/simple_animal/pet/dog,
+ /mob/living/simple_animal/pet/fox,
+ /mob/living/simple_animal/chicken,
+ /mob/living/simple_animal/hostile/bear,
+ /mob/living/simple_animal/hostile/jungle/mega_arachnid
+ )))
+
+GLOBAL_LIST_INIT(barefootmob, typecacheof(list(
+ /mob/living/carbon/monkey,
+ /mob/living/simple_animal/pet/penguin,
+ /mob/living/simple_animal/hostile/gorilla,
+ /mob/living/simple_animal/hostile/jungle/mook
+ )))
+
+GLOBAL_LIST_INIT(heavyfootmob, typecacheof(list(
+ /mob/living/simple_animal/hostile/megafauna,
+ /mob/living/simple_animal/hostile/jungle/leaper
+ )))
+
//Misc mobs
#define isobserver(A) (istype(A, /mob/dead/observer))
@@ -136,6 +177,15 @@
#define iseminence(A) (istype(A, /mob/camera/eminence))
+//Footstep helpers
+#define isshoefoot(A) (is_type_in_typecache(A, GLOB.shoefootmob))
+
+#define isclawfoot(A) (is_type_in_typecache(A, GLOB.clawfootmob))
+
+#define isbarefoot(A) (is_type_in_typecache(A, GLOB.barefootmob))
+
+#define isheavyfoot(A) (is_type_in_typecache(A, GLOB.heavyfootmob))
+
//Objects
#define isobj(A) istype(A, /obj) //override the byond proc because it returns true on children of /atom/movable that aren't objs
diff --git a/code/__DEFINES/robots.dm b/code/__DEFINES/robots.dm
index 9c81305241..0820d63247 100644
--- a/code/__DEFINES/robots.dm
+++ b/code/__DEFINES/robots.dm
@@ -35,6 +35,7 @@
#define CLEAN_BOT (1<<3) // Cleanbots
#define MED_BOT (1<<4) // Medibots
#define HONK_BOT (1<<5) // Honkbots & ED-Honks
+#define FIRE_BOT (1<<6) // Firebots
//AI notification defines
#define NEW_BORG 1
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 805e72cfcb..b2caf614b3 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -71,6 +71,7 @@
#define TRAIT_MUSICIAN "musician"
#define TRAIT_CROCRIN_IMMUNE "crocin_immune"
#define TRAIT_NYMPHO "nymphomania"
+#define TRAIT_MASO "masochism"
// common trait sources
#define TRAIT_GENERIC "generic"
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 74a1fbd785..34a34273dc 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -294,7 +294,7 @@ GLOBAL_LIST_EMPTY(species_list)
else
return "unknown"
-/proc/do_mob(mob/user , mob/target, time = 30, uninterruptible = 0, progress = 1, datum/callback/extra_checks = null)
+/proc/do_mob(mob/user , mob/target, time = 30, uninterruptible = 0, progress = 1, datum/callback/extra_checks = null, ignorehelditem = 0)
if(!user || !target)
return 0
var/user_loc = user.loc
@@ -327,7 +327,7 @@ GLOBAL_LIST_EMPTY(species_list)
drifting = 0
user_loc = user.loc
- if((!drifting && user.loc != user_loc) || target.loc != target_loc || user.get_active_held_item() != holding || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke()))
+ if((!drifting && user.loc != user_loc) || target.loc != target_loc || (!ignorehelditem && user.get_active_held_item() != holding) || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke()))
. = 0
break
if (progress)
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index 7d6c017b77..7d8eb108f3 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -94,6 +94,8 @@
// Used to get a properly sanitized multiline input, of max_length
/proc/stripped_multiline_input(mob/user, message = "", title = "", default = "", max_length=MAX_MESSAGE_LEN, no_trim=FALSE)
var/name = input(user, message, title, default) as message|null
+ if(isnull(name)) // Return null if canceled.
+ return null
if(no_trim)
return copytext(html_encode(name), 1, max_length)
else
diff --git a/code/datums/components/footstep.dm b/code/datums/components/footstep.dm
index c93be4dae3..bfcc49f453 100644
--- a/code/datums/components/footstep.dm
+++ b/code/datums/components/footstep.dm
@@ -1,39 +1,105 @@
-/datum/component/footstep
- var/steps = 0
- var/volume
- var/e_range
-
-/datum/component/footstep/Initialize(volume_ = 0.5, e_range_ = -1)
- if(!isliving(parent))
- return COMPONENT_INCOMPATIBLE
- volume = volume_
- e_range = e_range_
- RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_footstep)
-
-/datum/component/footstep/proc/play_footstep()
- var/turf/open/T = get_turf(parent)
- if(!istype(T))
- return
- var/mob/living/LM = parent
- var/v = volume
- var/e = e_range
- if(!T.footstep || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing || LM.movement_type & (VENTCRAWLING | FLYING))
- return
- if(iscarbon(LM))
- var/mob/living/carbon/C = LM
- if(!C.get_bodypart(BODY_ZONE_L_LEG) && !C.get_bodypart(BODY_ZONE_R_LEG))
- return
- if(ishuman(C) && C.m_intent == MOVE_INTENT_WALK)
- v /= 2
- e -= 5
- steps++
- if(steps >= 3)
- steps = 0
- else
- return
- if(prob(80) && !LM.has_gravity(T)) // don't need to step as often when you hop around
- return
- playsound(T, pick(GLOB.footstep[T.footstep][1]),
- GLOB.footstep[T.footstep][2] * v,
- TRUE,
- GLOB.footstep[T.footstep][3] + e)
+/datum/component/footstep
+ var/steps = 0
+ var/volume
+ var/e_range
+
+/datum/component/footstep/Initialize(volume_ = 0.5, e_range_ = -1)
+ if(!isliving(parent))
+ return COMPONENT_INCOMPATIBLE
+ volume = volume_
+ e_range = e_range_
+ RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_footstep)
+
+/datum/component/footstep/proc/play_footstep()
+ var/turf/open/T = get_turf(parent)
+ if(!istype(T))
+ return
+
+ var/mob/living/LM = parent
+ var/v = volume
+ var/e = e_range
+ if(!T.footstep || LM.buckled || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing || LM.movement_type & (VENTCRAWLING | FLYING))
+ if (LM.lying && !(!T.footstep || LM.movement_type & (VENTCRAWLING | FLYING))) //play crawling sound if we're lying
+ playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * v)
+ return
+
+ if(iscarbon(LM))
+ var/mob/living/carbon/C = LM
+ if(!C.get_bodypart(BODY_ZONE_L_LEG) && !C.get_bodypart(BODY_ZONE_R_LEG))
+ return
+ if(ishuman(C) && C.m_intent == MOVE_INTENT_WALK)
+ v /= 2
+ e -= 5
+ steps++
+
+ if(steps >= 3)
+ steps = 0
+
+ else
+ return
+
+ if(prob(80) && !LM.has_gravity(T)) // don't need to step as often when you hop around
+ return
+
+ //begin playsound shenanigans//
+
+ //for barefooted non-clawed mobs like monkeys
+ if(isbarefoot(LM))
+ playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]),
+ GLOB.barefootstep[T.barefootstep][2] * v,
+ TRUE,
+ GLOB.barefootstep[T.barefootstep][3] + e)
+ return
+
+ //for xenomorphs, dogs, and other clawed mobs
+ if(isclawfoot(LM))
+ if(isalienadult(LM)) //xenos are stealthy and get quieter footsteps
+ v /= 3
+ e -= 5
+
+ playsound(T, pick(GLOB.clawfootstep[T.clawfootstep][1]),
+ GLOB.clawfootstep[T.clawfootstep][2] * v,
+ TRUE,
+ GLOB.clawfootstep[T.clawfootstep][3] + e)
+ return
+
+ //for megafauna and other large and imtimidating mobs such as the bloodminer
+ if(isheavyfoot(LM))
+ playsound(T, pick(GLOB.heavyfootstep[T.heavyfootstep][1]),
+ GLOB.heavyfootstep[T.heavyfootstep][2] * v,
+ TRUE,
+ GLOB.heavyfootstep[T.heavyfootstep][3] + e)
+ return
+
+ //for slimes
+ if(isslime(LM))
+ playsound(T, 'sound/effects/footstep/slime1.ogg', 15 * v)
+ return
+
+ //for (simple) humanoid mobs (clowns, russians, pirates, etc.)
+ if(isshoefoot(LM))
+ if(!ishuman(LM))
+ playsound(T, pick(GLOB.footstep[T.footstep][1]),
+ GLOB.footstep[T.footstep][2] * v,
+ TRUE,
+ GLOB.footstep[T.footstep][3] + e)
+ return
+ if(ishuman(LM)) //for proper humans, they're special
+ var/mob/living/carbon/human/H = LM
+ var/feetCover = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) || (H.w_uniform && (H.w_uniform.body_parts_covered & FEET))
+
+ if (H.dna.features["taur"] == "Naga" || H.dna.features["taur"] == "Tentacle") //are we a naga or tentacle taur creature
+ playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * v)
+ return
+
+ if(H.shoes || feetCover) //are we wearing shoes
+ playsound(T, pick(GLOB.footstep[T.footstep][1]),
+ GLOB.footstep[T.footstep][2] * v,
+ TRUE,
+ GLOB.footstep[T.footstep][3] + e)
+
+ if((!H.shoes && !feetCover)) //are we NOT wearing shoes
+ playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]),
+ GLOB.barefootstep[T.barefootstep][2] * v,
+ TRUE,
+ GLOB.barefootstep[T.barefootstep][3] + e)
\ No newline at end of file
diff --git a/code/datums/ert.dm b/code/datums/ert.dm
index d3c256308d..d61c95c8f2 100644
--- a/code/datums/ert.dm
+++ b/code/datums/ert.dm
@@ -21,6 +21,8 @@
/datum/ert/amber
code = "Amber"
+ leader_role = /datum/antagonist/ert/commander/red
+ roles = list(/datum/antagonist/ert/security/red, /datum/antagonist/ert/medic/red, /datum/antagonist/ert/engineer/red)
/datum/ert/red
leader_role = /datum/antagonist/ert/commander/red
diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm
index 94f5e63afb..cb3cbf2aa6 100644
--- a/code/game/machinery/computer/atmos_alert.dm
+++ b/code/game/machinery/computer/atmos_alert.dm
@@ -80,9 +80,21 @@
/obj/machinery/computer/atmos_alert/update_icon()
..()
+ cut_overlays()
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
+ var/overlay_state = icon_screen
if(stat & (NOPOWER|BROKEN))
+ add_overlay("[icon_keyboard]_off")
return
+ add_overlay(icon_keyboard)
if(priority_alarms.len)
+ overlay_state = "alert:2"
add_overlay("alert:2")
else if(minor_alarms.len)
+ overlay_state = "alert:1"
add_overlay("alert:1")
+ else
+ overlay_state = "alert:0"
+ add_overlay("alert:0")
+ SSvis_overlays.add_vis_overlay(src, icon, overlay_state, layer, plane, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, overlay_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir, alpha=128)
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index 09cbb68083..ccc2121929 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -103,7 +103,9 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
if(data_by_z["[z]"] && last_update["[z]"] && world.time <= last_update["[z]"] + SENSORS_UPDATE_PERIOD)
return data_by_z["[z]"]
- var/list/results = list()
+ var/list/results_damaged = list()
+ var/list/results_undamaged = list()
+
var/obj/item/clothing/under/U
var/obj/item/card/id/I
var/turf/pos
@@ -114,6 +116,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
var/toxdam
var/burndam
var/brutedam
+ var/totaldam
var/area
var/pos_x
var/pos_y
@@ -157,11 +160,13 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
toxdam = round(H.getToxLoss(),1)
burndam = round(H.getFireLoss(),1)
brutedam = round(H.getBruteLoss(),1)
+ totaldam = oxydam + toxdam + burndam + brutedam
else
oxydam = null
toxdam = null
burndam = null
brutedam = null
+ totaldam = 0
if (nanite_sensors || U.sensor_mode >= SENSOR_COORDS)
if (!pos)
@@ -174,16 +179,26 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
pos_x = null
pos_y = null
- results[++results.len] = list("name" = name, "assignment" = assignment, "ijob" = ijob, "life_status" = life_status, "oxydam" = oxydam, "toxdam" = toxdam, "burndam" = burndam, "brutedam" = brutedam, "area" = area, "pos_x" = pos_x, "pos_y" = pos_y, "can_track" = H.can_track(null))
+ var/total_list = list("name" = name, "assignment" = assignment, "ijob" = ijob, "life_status" = life_status, "oxydam" = oxydam, "toxdam" = toxdam, "burndam" = burndam, "brutedam" = brutedam, "totaldam" = totaldam, "area" = area, "pos_x" = pos_x, "pos_y" = pos_y, "can_track" = H.can_track(null))
- data_by_z["[z]"] = sortTim(results,/proc/sensor_compare)
+ if(totaldam)
+ results_damaged[++results_damaged.len] = total_list
+ else
+ results_undamaged[++results_undamaged.len] = total_list
+
+ var/list/returning = sortTim(results_damaged,/proc/damage_compare) + sortTim(results_undamaged,/proc/ijob_compare)
+
+ data_by_z["[z]"] = returning
last_update["[z]"] = world.time
- return results
+ return returning
-/proc/sensor_compare(list/a,list/b)
+/proc/ijob_compare(list/a,list/b)
return a["ijob"] - b["ijob"]
+/proc/damage_compare(list/a,list/b)
+ return b["totaldam"] - a["totaldam"]
+
/datum/crewmonitor/ui_act(action,params)
var/mob/living/silicon/ai/AI = usr
if(!istype(AI))
diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm
index 6769244335..36ba4b0c94 100644
--- a/code/game/machinery/computer/station_alert.dm
+++ b/code/game/machinery/computer/station_alert.dm
@@ -76,12 +76,23 @@
/obj/machinery/computer/station_alert/update_icon()
..()
+ cut_overlays()
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
+ var/overlay_state = icon_screen
if(stat & (NOPOWER|BROKEN))
+ add_overlay("[icon_keyboard]_off")
return
+ add_overlay(icon_keyboard)
var/active_alarms = FALSE
for(var/cat in alarms)
var/list/L = alarms[cat]
if(L.len)
active_alarms = TRUE
if(active_alarms)
+ overlay_state = "alert:2"
add_overlay("alert:2")
+ else
+ overlay_state = "alert:0"
+ add_overlay("alert:0")
+ SSvis_overlays.add_vis_overlay(src, icon, overlay_state, layer, plane, dir)
+ SSvis_overlays.add_vis_overlay(src, icon, overlay_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir, alpha=128)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 9ff1b5cf01..9314faab27 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -449,7 +449,11 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
return 0
/obj/item/proc/eyestab(mob/living/carbon/M, mob/living/carbon/user)
-
+ if(user.has_trait(TRAIT_PACIFISM))
+ to_chat(user, "You don't want to harm [M]!")
+ return
+ if(user.has_trait(TRAIT_CLUMSY) && prob(50))
+ M = user
var/is_human_victim = 0
var/obj/item/bodypart/affecting = M.get_bodypart(BODY_ZONE_HEAD)
if(ishuman(M))
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index 5868ef4b1d..ba4a0ffae8 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -713,12 +713,12 @@
req_defib = FALSE
///////////////////////////////////////////
-/////////Dedibrillators Disks//////////////
+/////////Defibrillator Disks//////////////
///////////////////////////////////////////
/obj/item/disk/medical
name = "Defibrillator Upgrade Disk"
- desc = "A blank defibrillator disk..."
+ desc = "A blank upgrade disk, made for a defibrillator"
icon = 'modular_citadel/icons/obj/defib_disks.dmi'
icon_state = "upgrade_disk"
item_state = "heal_disk"
@@ -726,25 +726,25 @@
/obj/item/disk/medical/defib_heal
name = "Defibrillator Healing Disk"
- desc = "A disk alowing for grater amounts of healing"
+ desc = "An upgrade which increases the healing power of the defibrillator"
icon_state = "heal_disk"
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 6000, MAT_SILVER = 6000)
/obj/item/disk/medical/defib_shock
name = "Defibrillator Anti-Shock Disk"
- desc = "A disk that helps agains shocking anyone, other then the intented target"
+ desc = "A safety upgrade that guarantees only the patient will get shocked"
icon_state = "zap_disk"
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 6000, MAT_SILVER = 6000)
/obj/item/disk/medical/defib_decay
name = "Defibrillator Body-Decay Extender Disk"
- desc = "A disk that helps defibrillators revive the longer decayed"
+ desc = "An upgrade allowing the defibrillator to work on more decayed bodies"
icon_state = "body_disk"
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 16000, MAT_SILVER = 6000, MAT_TITANIUM = 2000)
/obj/item/disk/medical/defib_speed
- name = "Defibrllator Pre-Primer Disk"
- desc = "A disk that cuts the time charg time in half for defibrillator use"
+ name = "Defibrillator Fast Charge Disk"
+ desc = "An upgrade to the defibrillator capacitors, which let it charge faster"
icon_state = "fast_disk"
materials = list(MAT_METAL=16000, MAT_GLASS = 8000, MAT_GOLD = 26000, MAT_SILVER = 26000)
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index fc268e2b3e..1a733fbff2 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -31,7 +31,7 @@
var/remote_door_id = ""
- var/bot_access_flags = 0 //Bit flags. Selection: SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT
+ var/bot_access_flags = 0 //Bit flags. Selection: SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT
var/spam_enabled = 0 //Enables "Send to All" Option
var/obj/item/pda/host_pda = null
@@ -65,7 +65,7 @@
name = "\improper BreatheDeep cartridge"
icon_state = "cart-a"
access = CART_ATMOS | CART_DRONEPHONE
- bot_access_flags = FLOOR_BOT
+ bot_access_flags = FLOOR_BOT | FIRE_BOT
/obj/item/cartridge/medical
name = "\improper Med-U cartridge"
@@ -112,7 +112,7 @@
/obj/item/cartridge/roboticist
name = "\improper B.O.O.P. Remote Control cartridge"
desc = "Packed with heavy duty triple-bot interlink!"
- bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT
+ bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT
access = CART_DRONEPHONE
/obj/item/cartridge/signal
@@ -160,7 +160,7 @@
name = "\improper Power-On DELUXE cartridge"
icon_state = "cart-ce"
access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_ENGINE | CART_ATMOS | CART_DRONEPHONE
- bot_access_flags = FLOOR_BOT
+ bot_access_flags = FLOOR_BOT | FIRE_BOT
/obj/item/cartridge/cmo
name = "\improper Med-U DELUXE cartridge"
@@ -172,7 +172,7 @@
name = "\improper Signal Ace DELUXE cartridge"
icon_state = "cart-rd"
access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_REAGENT_SCANNER | CART_ATMOS | CART_DRONEPHONE
- bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT
+ bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT
/obj/item/cartridge/rd/Initialize()
. = ..()
@@ -183,7 +183,7 @@
desc = "Now with 350% more value!" //Give the Captain...EVERYTHING! (Except Mime, Clown, and Syndie)
icon_state = "cart-c"
access = ~(CART_CLOWN | CART_MIME | CART_REMOTE_DOOR)
- bot_access_flags = SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT
+ bot_access_flags = SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT
spam_enabled = 1
/obj/item/cartridge/captain/New()
diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm
index e0d6b553fd..ddbc668c05 100644
--- a/code/game/objects/items/extinguisher.dm
+++ b/code/game/objects/items/extinguisher.dm
@@ -71,6 +71,10 @@
sprite_name = "foam_extinguisher"
precision = TRUE
+/obj/item/extinguisher/proc/refill()
+ create_reagents(max_water, AMOUNT_VISIBLE)
+ reagents.add_reagent(chem, max_water)
+
/obj/item/extinguisher/suicide_act(mob/living/carbon/user)
if (!safety && (reagents.total_volume >= 1))
user.visible_message("[user] puts the nozzle to [user.p_their()] mouth. It looks like [user.p_theyre()] trying to extinguish the spark of life!")
@@ -183,7 +187,7 @@
W.reagents = R
R.my_atom = W
reagents.trans_to(W,1)
-
+
//Make em move dat ass, hun
addtimer(CALLBACK(src, /obj/item/extinguisher/proc/move_particles, water_particles), 2)
@@ -243,3 +247,12 @@
user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "You quietly empty out \the [src] using its release valve.")
+//firebot assembly
+/obj/item/extinguisher/attackby(obj/O, mob/user, params)
+ if(istype(O, /obj/item/bodypart/l_arm/robot) || istype(O, /obj/item/bodypart/r_arm/robot))
+ to_chat(user, "You add [O] to [src].")
+ qdel(O)
+ qdel(src)
+ user.put_in_hands(new /obj/item/bot_assembly/firebot)
+ else
+ ..()
diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm
index 11d6f264b8..ef2aa825e7 100644
--- a/code/game/objects/items/kitchen.dm
+++ b/code/game/objects/items/kitchen.dm
@@ -49,8 +49,6 @@
forkload = null
else if(user.zone_selected == BODY_ZONE_PRECISE_EYES)
- if(user.has_trait(TRAIT_CLUMSY) && prob(50))
- M = user
return eyestab(M,user)
else
return ..()
@@ -79,8 +77,6 @@
/obj/item/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user)
if(user.zone_selected == BODY_ZONE_PRECISE_EYES)
- if(user.has_trait(TRAIT_CLUMSY) && prob(50))
- M = user
return eyestab(M,user)
else
return ..()
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index 3a35f4d8ef..8ed0f273e6 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -283,7 +283,7 @@
else
var/turf/T = get_turf(src)
if(!isspaceturf(T))
- consume_turf(T)
+ shard.consume_turf(T)
/obj/item/melee/supermatter_sword/afterattack(target, mob/user, proximity_flag)
. = ..()
@@ -330,18 +330,7 @@
else if(!isturf(target))
shard.Bumped(target)
else
- consume_turf(target)
-
-/obj/item/melee/supermatter_sword/proc/consume_turf(turf/T)
- var/oldtype = T.type
- var/turf/newT = T.ScrapeAway()
- if(newT.type == oldtype)
- return
- playsound(T, 'sound/effects/supermatter.ogg', 50, 1)
- T.visible_message("[T] smacks into [src] and rapidly flashes to ash.",\
- "You hear a loud crack as you are washed with a wave of heat.")
- shard.Consume()
- T.CalculateAdjacentTurfs()
+ shard.consume_turf(target)
/obj/item/melee/supermatter_sword/add_blood_DNA(list/blood_dna)
return FALSE
diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm
index 703de902b6..28a744fbb1 100644
--- a/code/game/objects/items/plushes.dm
+++ b/code/game/objects/items/plushes.dm
@@ -635,6 +635,13 @@
attack_verb = list("lit", "flickered", "flashed")
squeak_override = list('sound/weapons/magout.ogg' = 1)
+/obj/item/toy/plush/box
+ name = "cardboard plushie"
+ desc = "A toy box plushie, it holds cotten. Only a baddie would place a bomb through the postal system..."
+ icon_state = "box"
+ item_state = "box"
+ attack_verb = list("open", "closed", "packed", "hidden", "rigged", "bombed", "sent", "gave")
+
/obj/item/toy/plush/borgplushie
name = "robot plushie"
desc = "An adorable stuffed toy of a robot."
@@ -659,6 +666,12 @@
icon_state = "neeb"
item_state = "neeb"
+/obj/item/toy/plush/borgplushie/bhijn
+ desc = "An adorable stuffed toy of a IPC."
+ icon_state = "bhijn"
+ item_state = "bhijn"
+ attack_verb = list("closed", "reworked", "merged")
+
/obj/item/toy/plush/bird
name = "bird plushie"
desc = "An adorable stuffed plushie that resembles an avian."
@@ -743,6 +756,7 @@
/obj/item/toy/plush/mammal/edgar
icon_state = "edgar"
item_state = "edgar"
+ attack_verb = list("collared", "tricked", "headpatted")
/obj/item/toy/plush/mammal/frank
icon_state = "frank"
@@ -777,6 +791,16 @@
icon_state = "zed"
item_state = "zed"
+/obj/item/toy/plush/mammal/justin
+ icon_state = "justin"
+ item_state = "justin"
+ attack_verb = list("buttslapped", "fixed")
+
+/obj/item/toy/plush/mammal/reece
+ icon_state = "reece"
+ item_state = "reece"
+ attack_verb = list("healed", "cured", "demoted")
+
/obj/item/toy/plush/mammal/dog
desc = "An adorable stuffed toy that resembles a canine."
icon_state = "katlin"
@@ -840,6 +864,12 @@
icon_state = "drew"
item_state = "drew"
+/obj/item/toy/plush/catgirl/trilby
+ desc = "A masked stuffed toy that resembles a feline scientist."
+ icon_state = "trilby"
+ item_state = "trilby"
+ attack_verb = list("pred", "coded", "remembered")
+
/obj/item/toy/plush/catgirl/fermis
name = "medcat plushie"
desc = "An affectionate stuffed toy that resembles a certain medcat, comes complete with battery operated wagging tail!! You get the impression she's cheering you on to to find happiness and be kind to people."
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index 1171bd7bf7..30c7115346 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -153,3 +153,16 @@
slot_flags = null
to_chat(user, "[src] can now be concealed.")
add_fingerprint(user)
+
+/obj/item/shield/makeshift
+ name = "metal shield"
+ desc = "A large shield made of wired and welded sheets of metal. The handle is made of cloth and leather making it unwieldy."
+ armor = list("melee" = 25, "bullet" = 25, "laser" = 5, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 80)
+ lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi'
+ item_state = "makeshift_shield"
+ materials = list(MAT_METAL = 18000)
+ slot_flags = null
+ block_chance = 25
+ force = 5
+ throwforce = 7
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 89d939e505..a8c44656ca 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -252,7 +252,8 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3), \
new/datum/stack_recipe("empty sandbag", /obj/item/emptysandbag, 4), \
null, \
- new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1), \
+ new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1),\
+ new/datum/stack_recipe("white gloves", /obj/item/clothing/gloves/color/white, 1),\
new/datum/stack_recipe("black gloves", /obj/item/clothing/gloves/color/black, 3), \
null, \
new/datum/stack_recipe("blindfold", /obj/item/clothing/glasses/sunglasses/blindfold, 2), \
@@ -284,6 +285,13 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
new/datum/stack_recipe("light tubes", /obj/item/storage/box/lights/tubes), \
new/datum/stack_recipe("light bulbs", /obj/item/storage/box/lights/bulbs), \
new/datum/stack_recipe("mouse traps", /obj/item/storage/box/mousetraps), \
+ new/datum/stack_recipe("lethal ammo box", /obj/item/storage/box/lethalshot), \
+ new/datum/stack_recipe("rubber shot ammo box", /obj/item/storage/box/rubbershot), \
+ new/datum/stack_recipe("bean bag ammo box", /obj/item/storage/box/beanbag), \
+ new/datum/stack_recipe("12g ammo box", /obj/item/storage/box/lethalslugs), \
+ new/datum/stack_recipe("stun slug ammo box", /obj/item/storage/box/stunslug), \
+ new/datum/stack_recipe("tech shell ammo box", /obj/item/storage/box/techsslug), \
+ new/datum/stack_recipe("incendiary ammo box", /obj/item/storage/box/fireshot), \
new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3), \
new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg), \
new/datum/stack_recipe("pizza box", /obj/item/pizzabox), \
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index c8e96d0b28..f09c040795 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -14,8 +14,9 @@
* ID and security PDA cart boxes,
* Handcuff, mousetrap, and pillbottle boxes,
* Snap-pops and matchboxes,
- * Replacement light boxes.
- * Action Figure Boxes
+ * Replacement light boxes,
+ * Shotgun Ammo boxes,
+ * Action Figure Boxes,
* Various paper bags.
*
* For syndicate call-ins see uplink_kits.dm
@@ -84,7 +85,6 @@
for(var/i in 1 to 7)
new /obj/item/disk/data(src)
-
/obj/item/storage/box/disks_plantgene
name = "plant data disks box"
illustration = "disk_kit"
@@ -117,7 +117,6 @@
new /obj/item/crowbar/red(src)
new /obj/item/reagent_containers/hypospray/medipen(src)
-
// Engineer survival box
/obj/item/storage/box/engineer/PopulateContents()
new /obj/item/clothing/mask/breath(src)
@@ -261,7 +260,6 @@
new /obj/item/assembly/flash/handheld(src)
new /obj/item/screwdriver(src)
-
/obj/item/storage/box/teargas
name = "box of tear gas grenades (WARNING)"
desc = "WARNING: These devices are extremely dangerous and can cause blindness and skin irritation."
@@ -615,7 +613,6 @@
for(var/i in 1 to 7)
new /obj/item/light/bulb(src)
-
/obj/item/storage/box/deputy
name = "box of deputy armbands"
desc = "To be issued to those authorized to act as deputy of security."
@@ -721,6 +718,46 @@
for(var/i in 1 to 6)
new /obj/item/ammo_casing/shotgun/beanbag(src)
+/obj/item/storage/box/lethalslugs
+ name = "box of 12g shotgun slugs"
+ desc = "A box full of lethal 12g slug, designed for riot shotguns."
+ icon_state = "12g_box"
+ illustration = null
+
+/obj/item/storage/box/lethalslugs/PopulateContents()
+ for(var/i in 1 to 7)
+ new /obj/item/projectile/bullet/shotgun_slug(src)
+
+/obj/item/storage/box/stunslug
+ name = "box of stun slugs"
+ desc = "A box full of stun 12g slugs."
+ icon_state = "stunslug_box"
+ illustration = null
+
+/obj/item/storage/box/stunslug/PopulateContents()
+ for(var/i in 1 to 7)
+ new /obj/item/projectile/bullet/shotgun_stunslug(src)
+
+/obj/item/storage/box/techsslug
+ name = "box of tech shotgun shells"
+ desc = "A box full of tech shotgun shells."
+ icon_state = "techslug_box"
+ illustration = null
+
+/obj/item/storage/box/techsslug/PopulateContents()
+ for(var/i in 1 to 7)
+ new /obj/item/ammo_casing/shotgun/techshell(src)
+
+/obj/item/storage/box/fireshot
+ name = "box of incendiary ammo"
+ desc = "A box full of tech incendiary ammo."
+ icon_state = "fireshot_box"
+ illustration = null
+
+/obj/item/storage/box/techsslug/PopulateContents()
+ for(var/i in 1 to 7)
+ new /obj/item/ammo_casing/shotgun/incendiary(src)
+
/obj/item/storage/box/actionfigure
name = "box of action figures"
desc = "The latest set of collectable action figures."
diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm
index d6f6bc58fd..8ca7d3efd4 100644
--- a/code/game/objects/items/stunbaton.dm
+++ b/code/game/objects/items/stunbaton.dm
@@ -1,3 +1,5 @@
+#define STUNBATON_CHARGE_LENIENCY 0.3
+
/obj/item/melee/baton
name = "stunbaton"
desc = "A stun baton for incapacitating people with."
@@ -13,7 +15,7 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
var/stunforce = 140
- var/status = 0
+ var/status = FALSE
var/obj/item/stock_parts/cell/cell
var/hitcost = 1000
var/throw_hit_chance = 35
@@ -44,17 +46,31 @@
/obj/item/melee/baton/loaded //this one starts with a cell pre-installed.
preload_cell_type = /obj/item/stock_parts/cell/high
-/obj/item/melee/baton/proc/deductcharge(chrgdeductamt)
- if(cell)
- //Note this value returned is significant, as it will determine
- //if a stun is applied or not
- . = cell.use(chrgdeductamt)
- if(status && cell.charge < hitcost)
- //we're below minimum, turn off
- status = 0
- update_icon()
- playsound(loc, "sparks", 75, 1, -1)
+/obj/item/melee/baton/proc/deductcharge(chrgdeductamt, chargecheck = TRUE)
+ if(!cell)
+ switch_status(FALSE, TRUE)
+ return FALSE
+ //Note this value returned is significant, as it will determine
+ //if a stun is applied or not
+ . = cell.use(chrgdeductamt)
+ if(status && (!. || (chargecheck && cell.charge < hitcost * STUNBATON_CHARGE_LENIENCY)))
+ //we're below minimum, turn off
+ switch_status(FALSE)
+/obj/item/melee/baton/proc/switch_status(new_status = FALSE, silent = FALSE)
+ if(status == new_status)
+ return
+ status = new_status
+ update_icon()
+ if(!silent)
+ playsound(loc, "sparks", 75, 1, -1)
+ if(status)
+ START_PROCESSING(SSobj, src)
+ else
+ STOP_PROCESSING(SSobj, src)
+
+/obj/item/melee/baton/process()
+ deductcharge(hitcost * 0.004, FALSE)
/obj/item/melee/baton/update_icon()
if(status)
@@ -92,31 +108,25 @@
cell.forceMove(get_turf(src))
cell = null
to_chat(user, "You remove the cell from [src].")
- status = 0
- update_icon()
+ switch_status(FALSE, TRUE)
else
return ..()
/obj/item/melee/baton/attack_self(mob/user)
- if(cell && cell.charge > hitcost)
- status = !status
+ if(cell && cell.charge > hitcost * STUNBATON_CHARGE_LENIENCY)
+ switch_status(!status)
to_chat(user, "[src] is now [status ? "on" : "off"].")
- playsound(loc, "sparks", 75, 1, -1)
else
- status = 0
+ switch_status(FALSE, TRUE)
if(!cell)
to_chat(user, "[src] does not have a power source!")
else
to_chat(user, "[src] is out of charge.")
- update_icon()
add_fingerprint(user)
/obj/item/melee/baton/attack(mob/M, mob/living/carbon/human/user)
if(status && user.has_trait(TRAIT_CLUMSY) && prob(50))
- user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \
- "You accidentally hit yourself with [src]!")
- user.Knockdown(stunforce*3)
- deductcharge(hitcost)
+ clowning_around(user)
return
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)//CIT CHANGE - makes it impossible to baton in stamina softcrit
@@ -153,17 +163,21 @@
var/mob/living/carbon/human/H = L
if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) //No message; check_shields() handles that
playsound(L, 'sound/weapons/genhit.ogg', 50, 1)
- return 0
+ return FALSE
+ var/stunpwr = stunforce
if(iscyborg(loc))
var/mob/living/silicon/robot/R = loc
- if(!R || !R.cell || !R.cell.use(hitcost))
- return 0
+ if(!istype(R) || !R.cell || !R.cell.use(hitcost))
+ return FALSE
else
- if(!deductcharge(hitcost))
- return 0
+ var/stuncharge = cell.charge
+ if(!deductcharge(hitcost, FALSE))
+ stunpwr *= round(stuncharge/hitcost)
+ if(stunpwr < stunforce * STUNBATON_CHARGE_LENIENCY)
+ return FALSE
- L.Knockdown(stunforce)
- L.adjustStaminaLoss(stunforce*0.1, affected_zone = (istype(user) ? user.zone_selected : BODY_ZONE_CHEST))//CIT CHANGE - makes stunbatons deal extra staminaloss. Todo: make this also deal pain when pain gets implemented.
+ L.Knockdown(stunpwr)
+ L.adjustStaminaLoss(stunpwr*0.1, affected_zone = (istype(user) ? user.zone_selected : BODY_ZONE_CHEST))//CIT CHANGE - makes stunbatons deal extra staminaloss. Todo: make this also deal pain when pain gets implemented.
L.apply_effect(EFFECT_STUTTER, stunforce)
SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK)
if(user)
@@ -180,11 +194,18 @@
H.forcesay(GLOB.hit_appends)
- return 1
+ return TRUE
+
+/obj/item/melee/baton/proc/clowning_around(mob/living/user)
+ user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \
+ "You accidentally hit yourself with [src]!")
+ user.Knockdown(stunforce*3)
+ deductcharge(hitcost)
/obj/item/melee/baton/emp_act(severity)
. = ..()
if (!(. & EMP_PROTECT_SELF))
+ switch_status(FALSE)
deductcharge(1000 / severity)
//Makeshift stun baton. Replacement for stun gloves.
@@ -211,4 +232,5 @@
/obj/item/melee/baton/cattleprod/baton_stun()
sparkler.activate()
- return ..()
+ . = ..()
+#undef STUNBATON_CHARGE_LENIENCY
\ No newline at end of file
diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm
index b3ee748d13..a5a2398fe0 100644
--- a/code/game/objects/items/tanks/jetpack.dm
+++ b/code/game/objects/items/tanks/jetpack.dm
@@ -33,7 +33,6 @@
else
toggle_internals(user)
-
/obj/item/tank/jetpack/proc/cycle(mob/user)
if(user.incapacitated())
return
@@ -48,7 +47,6 @@
var/datum/action/A = X
A.UpdateButtonIcon()
-
/obj/item/tank/jetpack/proc/turn_on()
on = TRUE
icon_state = "[initial(icon_state)]-on"
@@ -91,7 +89,7 @@
desc = "A jetpack made from two air tanks, a fire extinguisher and some atmospherics equipment. It doesn't look like it can hold much."
icon_state = "jetpack-improvised"
item_state = "jetpack-sec"
- volume = 20 //normal jetpacks have 70 volume
+ volume = 30 //normal jetpacks have 70 volume
gas_type = null //it starts empty
full_speed = FALSE //moves at hardsuit jetpack speeds
@@ -119,8 +117,10 @@
/obj/item/tank/jetpack/void
name = "void jetpack (oxygen)"
desc = "It works well in a void."
+ volume = 60
icon_state = "jetpack-void"
item_state = "jetpack-void"
+ full_speed = FALSE //Old pre-hardsuit tech
/obj/item/tank/jetpack/oxygen
name = "jetpack (oxygen)"
@@ -133,7 +133,7 @@
desc = "A lightweight tactical harness, used by those who don't want to be weighed down by traditional jetpacks."
icon_state = "jetpack-mini"
item_state = "jetpack-mini"
- volume = 40
+ volume = 50
throw_range = 7
w_class = WEIGHT_CLASS_NORMAL
@@ -152,8 +152,6 @@
icon_state = "jetpack-sec"
item_state = "jetpack-sec"
-
-
/obj/item/tank/jetpack/carbondioxide
name = "jetpack (carbon dioxide)"
desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals."
@@ -162,7 +160,6 @@
distribute_pressure = 0
gas_type = /datum/gas/carbon_dioxide
-
/obj/item/tank/jetpack/suit
name = "hardsuit jetpack upgrade"
desc = "A modular, compact set of thrusters designed to integrate with a hardsuit. It is fueled by a tank inserted into the suit's storage compartment."
@@ -221,7 +218,6 @@
return
..()
-
//Return a jetpack that the mob can use
//Back worn jetpacks, hardsuit internal packs, and so on.
//Used in Process_Spacemove() and wherever you want to check for/get a jetpack
diff --git a/code/game/objects/items/teleprod.dm b/code/game/objects/items/teleprod.dm
index fd9972f427..c514e5e926 100644
--- a/code/game/objects/items/teleprod.dm
+++ b/code/game/objects/items/teleprod.dm
@@ -6,27 +6,23 @@
item_state = "teleprod"
slot_flags = null
-/obj/item/melee/baton/cattleprod/teleprod/attack(mob/living/carbon/M, mob/living/carbon/user)//handles making things teleport when hit
- ..()
- if(status && user.has_trait(TRAIT_CLUMSY) && prob(50))
- user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \
- "You accidentally hit yourself with [src]!")
- if(do_teleport(user, get_turf(user), 50))//honk honk
- SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK)
- user.Knockdown(stunforce*3)
- deductcharge(hitcost)
- else
- SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK)
- user.Knockdown(stunforce*3)
- deductcharge(hitcost/4)
+/obj/item/melee/baton/cattleprod/teleprod/baton_stun(mob/living/carbon/M, mob/living/carbon/user)//handles making things teleport when hit
+ . = ..()
+ if(!. || !istype(M) || M.anchored)
return
else
- if(status)
- if(!istype(M) && M.anchored)
- return .
- else
- SEND_SIGNAL(M, COMSIG_LIVING_MINOR_SHOCK)
- do_teleport(M, get_turf(M), 15)
+ SEND_SIGNAL(M, COMSIG_LIVING_MINOR_SHOCK)
+ do_teleport(M, get_turf(M), 15)
+
+/obj/item/melee/baton/cattleprod/teleprod/clowning_around(mob/living/user)
+ user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \
+ "You accidentally hit yourself with [src]!")
+ SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK)
+ user.Knockdown(stunforce*3)
+ if(do_teleport(user, get_turf(user), 50))
+ deductcharge(hitcost)
+ else
+ deductcharge(hitcost * 0.25)
/obj/item/melee/baton/cattleprod/attackby(obj/item/I, mob/user, params)//handles sticking a crystal onto a stunprod to make a teleprod
if(istype(I, /obj/item/stack/ore/bluespace_crystal))
diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm
index 2e8cb569a6..217b53c928 100644
--- a/code/game/objects/items/tools/screwdriver.dm
+++ b/code/game/objects/items/tools/screwdriver.dm
@@ -75,11 +75,6 @@
return ..()
if(user.zone_selected != BODY_ZONE_PRECISE_EYES && user.zone_selected != BODY_ZONE_HEAD)
return ..()
- if(user.has_trait(TRAIT_PACIFISM))
- to_chat(user, "You don't want to harm [M]!")
- return
- if(user.has_trait(TRAIT_CLUMSY) && prob(50))
- M = user
return eyestab(M,user)
/obj/item/screwdriver/brass
@@ -103,7 +98,7 @@
/obj/item/screwdriver/abductor/get_belt_overlay()
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver_nuke")
-
+
/obj/item/screwdriver/power
name = "hand drill"
desc = "A simple powered hand drill. It's fitted with a screw bit."
diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm
index 63b5f4b160..fed922c7b4 100644
--- a/code/game/turfs/open.dm
+++ b/code/game/turfs/open.dm
@@ -7,6 +7,9 @@
var/wet
var/footstep = null
+ var/barefootstep = null
+ var/clawfootstep = null
+ var/heavyfootstep = null
/turf/open/ComponentInitialize()
. = ..()
@@ -27,6 +30,9 @@
icon = 'icons/turf/floors.dmi'
icon_state = "floor"
footstep = FOOTSTEP_FLOOR
+ barefootstep = FOOTSTEP_HARD_BAREFOOT
+ clawfootstep = FOOTSTEP_HARD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = TRUE
/turf/open/indestructible/Melt()
@@ -42,6 +48,9 @@
/turf/open/indestructible/sound
name = "squeaky floor"
footstep = null
+ barefootstep = null
+ clawfootstep = null
+ heavyfootstep = null
var/sound
/turf/open/indestructible/sound/Entered(var/mob/AM)
@@ -61,6 +70,10 @@
icon = 'icons/turf/floors.dmi'
icon_state = "cobble"
baseturfs = /turf/open/indestructible/cobble
+ footstep = FOOTSTEP_FLOOR
+ barefootstep = FOOTSTEP_HARD_BAREFOOT
+ clawfootstep = FOOTSTEP_HARD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = FALSE
/turf/open/indestructible/necropolis
@@ -71,6 +84,9 @@
baseturfs = /turf/open/indestructible/necropolis
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
footstep = FOOTSTEP_LAVA
+ barefootstep = FOOTSTEP_LAVA
+ clawfootstep = FOOTSTEP_LAVA
+ heavyfootstep = FOOTSTEP_LAVA
tiled_dirt = FALSE
/turf/open/indestructible/necropolis/Initialize()
@@ -108,6 +124,9 @@
desc = "A floor made of invulnerable notebook paper."
icon_state = "paperfloor"
footstep = null
+ barefootstep = null
+ clawfootstep = null
+ heavyfootstep = null
tiled_dirt = FALSE
/turf/open/indestructible/binary
@@ -116,6 +135,9 @@
baseturfs = /turf/open/indestructible/binary
icon_state = "binary"
footstep = null
+ barefootstep = null
+ clawfootstep = null
+ heavyfootstep = null
/turf/open/indestructible/airblock
icon_state = "bluespace"
@@ -128,6 +150,9 @@
icon_state = "reebe"
baseturfs = /turf/open/indestructible/clock_spawn_room
footstep = FOOTSTEP_PLATING
+ barefootstep = FOOTSTEP_HARD_BAREFOOT
+ clawfootstep = FOOTSTEP_HARD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/indestructible/clock_spawn_room/Entered()
..()
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index 4523cc5b67..b00efc7ed6 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -7,6 +7,9 @@
baseturfs = /turf/open/floor/plating
footstep = FOOTSTEP_FLOOR
+ barefootstep = FOOTSTEP_HARD_BAREFOOT
+ clawfootstep = FOOTSTEP_HARD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
var/icon_regular_floor = "floor" //used to remember what icon the tile should have by default
var/icon_plating = "plating"
diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm
index fc1dec2acb..7b45aa1fbb 100644
--- a/code/game/turfs/simulated/floor/fancy_floor.dm
+++ b/code/game/turfs/simulated/floor/fancy_floor.dm
@@ -13,6 +13,9 @@
floor_tile = /obj/item/stack/tile/wood
broken_states = list("wood-broken", "wood-broken2", "wood-broken3", "wood-broken4", "wood-broken5", "wood-broken6", "wood-broken7")
footstep = FOOTSTEP_WOOD
+ barefootstep = FOOTSTEP_WOOD_BAREFOOT
+ clawfootstep = FOOTSTEP_WOOD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = FALSE
/turf/open/floor/wood/examine(mob/user)
@@ -73,6 +76,9 @@
flags_1 = NONE
bullet_bounce_sound = null
footstep = FOOTSTEP_GRASS
+ barefootstep = FOOTSTEP_GRASS
+ clawfootstep = FOOTSTEP_GRASS
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
var/ore_type = /obj/item/stack/ore/glass
var/turfverb = "uproot"
tiled_dirt = FALSE
@@ -103,6 +109,9 @@
slowdown = 2
bullet_sizzle = TRUE
footstep = FOOTSTEP_SAND
+ barefootstep = FOOTSTEP_SAND
+ clawfootstep = FOOTSTEP_SAND
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/grass/snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
@@ -136,6 +145,9 @@
turfverb = "dig up"
slowdown = 0
footstep = FOOTSTEP_SAND
+ barefootstep = FOOTSTEP_SAND
+ clawfootstep = FOOTSTEP_SAND
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/grass/fakebasalt/Initialize()
. = ..()
@@ -156,6 +168,9 @@
flags_1 = NONE
bullet_bounce_sound = null
footstep = FOOTSTEP_CARPET
+ barefootstep = FOOTSTEP_CARPET_BAREFOOT
+ clawfootstep = FOOTSTEP_CARPET_BAREFOOT
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = FALSE
/turf/open/floor/carpet/examine(mob/user)
diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm
index 91744f3fa8..bff955086c 100644
--- a/code/game/turfs/simulated/floor/misc_floor.dm
+++ b/code/game/turfs/simulated/floor/misc_floor.dm
@@ -141,6 +141,9 @@
icon_state = "plating"
baseturfs = /turf/open/floor/clockwork
footstep = FOOTSTEP_PLATING
+ barefootstep = FOOTSTEP_HARD_BAREFOOT
+ clawfootstep = FOOTSTEP_HARD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
var/uses_overlay = TRUE
var/obj/effect/clockwork/overlay/floor/realappearence
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index e783b8a9a0..036f54c710 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -13,6 +13,9 @@
intact = FALSE
baseturfs = /turf/open/space
footstep = FOOTSTEP_PLATING
+ barefootstep = FOOTSTEP_HARD_BAREFOOT
+ clawfootstep = FOOTSTEP_HARD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
var/attachment_holes = TRUE
diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm
index c33612c9bc..d9966ee55c 100644
--- a/code/game/turfs/simulated/floor/plating/asteroid.dm
+++ b/code/game/turfs/simulated/floor/plating/asteroid.dm
@@ -10,6 +10,9 @@
icon_plating = "asteroid"
postdig_icon_change = TRUE
footstep = FOOTSTEP_SAND
+ barefootstep = FOOTSTEP_SAND
+ clawfootstep = FOOTSTEP_SAND
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
var/environment_type = "asteroid"
var/turf_type = /turf/open/floor/plating/asteroid //Because caves do whacky shit to revert to normal
var/floor_variance = 20 //probability floor has a different icon state
@@ -333,6 +336,9 @@
icon_plating = "snow-ice"
environment_type = "snow_cavern"
footstep = FOOTSTEP_FLOOR
+ barefootstep = FOOTSTEP_HARD_BAREFOOT
+ clawfootstep = FOOTSTEP_HARD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/plating/asteroid/snow/ice/burn_tile()
return FALSE
diff --git a/code/game/turfs/simulated/floor/plating/dirt.dm b/code/game/turfs/simulated/floor/plating/dirt.dm
index dc865634f4..b9bcc0937b 100644
--- a/code/game/turfs/simulated/floor/plating/dirt.dm
+++ b/code/game/turfs/simulated/floor/plating/dirt.dm
@@ -9,6 +9,9 @@
planetary_atmos = TRUE
attachment_holes = FALSE
footstep = FOOTSTEP_SAND
+ barefootstep = FOOTSTEP_SAND
+ clawfootstep = FOOTSTEP_SAND
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = FALSE
/turf/open/floor/plating/dirt/dark
diff --git a/code/game/turfs/simulated/floor/plating/misc_plating.dm b/code/game/turfs/simulated/floor/plating/misc_plating.dm
index f86ab3c03c..15b039193d 100644
--- a/code/game/turfs/simulated/floor/plating/misc_plating.dm
+++ b/code/game/turfs/simulated/floor/plating/misc_plating.dm
@@ -47,6 +47,9 @@
planetary_atmos = TRUE
attachment_holes = FALSE
footstep = FOOTSTEP_SAND
+ barefootstep = FOOTSTEP_SAND
+ clawfootstep = FOOTSTEP_SAND
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = FALSE
/turf/open/floor/plating/ashplanet/Initialize()
@@ -79,6 +82,9 @@
layer = MID_TURF_LAYER
canSmoothWith = list(/turf/open/floor/plating/ashplanet/rocky, /turf/closed)
footstep = FOOTSTEP_FLOOR
+ barefootstep = FOOTSTEP_HARD_BAREFOOT
+ clawfootstep = FOOTSTEP_HARD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/plating/ashplanet/wateryrock
gender = PLURAL
@@ -87,6 +93,9 @@
icon_state = "wateryrock"
slowdown = 2
footstep = FOOTSTEP_FLOOR
+ barefootstep = FOOTSTEP_HARD_BAREFOOT
+ clawfootstep = FOOTSTEP_HARD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/plating/ashplanet/wateryrock/Initialize()
icon_state = "[icon_state][rand(1, 9)]"
@@ -100,6 +109,9 @@
attachment_holes = FALSE
bullet_bounce_sound = null
footstep = FOOTSTEP_SAND
+ barefootstep = FOOTSTEP_SAND
+ clawfootstep = FOOTSTEP_SAND
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/plating/beach/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
@@ -141,6 +153,9 @@
name = "iron sand"
desc = "Like sand, but more metal."
footstep = FOOTSTEP_SAND
+ barefootstep = FOOTSTEP_SAND
+ clawfootstep = FOOTSTEP_SAND
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/plating/ironsand/Initialize()
. = ..()
@@ -165,6 +180,9 @@
attachment_holes = FALSE
bullet_sizzle = TRUE
footstep = FOOTSTEP_FLOOR
+ barefootstep = FOOTSTEP_HARD_BAREFOOT
+ clawfootstep = FOOTSTEP_HARD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/plating/ice/Initialize()
. = ..()
@@ -202,6 +220,9 @@
attachment_holes = FALSE
planetary_atmos = TRUE
footstep = FOOTSTEP_SAND
+ barefootstep = FOOTSTEP_SAND
+ clawfootstep = FOOTSTEP_SAND
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
/turf/open/floor/plating/snowed/cavern
initial_gas_mix = "o2=0;n2=82;plasma=24;TEMP=120"
diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm
index e677de8c5c..1a477d5d9a 100644
--- a/code/game/turfs/simulated/floor/reinf_floor.dm
+++ b/code/game/turfs/simulated/floor/reinf_floor.dm
@@ -7,6 +7,9 @@
heat_capacity = INFINITY
floor_tile = /obj/item/stack/rods
footstep = FOOTSTEP_PLATING
+ barefootstep = FOOTSTEP_HARD_BAREFOOT
+ clawfootstep = FOOTSTEP_HARD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
tiled_dirt = FALSE
/turf/open/floor/engine/examine(mob/user)
diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm
index b9e355b122..e24736ecf3 100644
--- a/code/game/turfs/simulated/lava.dm
+++ b/code/game/turfs/simulated/lava.dm
@@ -13,6 +13,9 @@
bullet_bounce_sound = 'sound/items/welder2.ogg'
footstep = FOOTSTEP_LAVA
+ barefootstep = FOOTSTEP_LAVA
+ clawfootstep = FOOTSTEP_LAVA
+ heavyfootstep = FOOTSTEP_LAVA
/turf/open/lava/ex_act(severity, target)
contents_explosion(severity, target)
diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm
index b46dd1d06c..708ca230b1 100644
--- a/code/game/turfs/simulated/water.dm
+++ b/code/game/turfs/simulated/water.dm
@@ -12,3 +12,6 @@
bullet_bounce_sound = null //needs a splashing sound one day.
footstep = FOOTSTEP_WATER
+ barefootstep = FOOTSTEP_WATER
+ clawfootstep = FOOTSTEP_WATER
+ heavyfootstep = FOOTSTEP_WATER
diff --git a/code/modules/antagonists/blob/blob/blobs/shield.dm b/code/modules/antagonists/blob/blob/blobs/shield.dm
index d52c208c71..33e7e4392f 100644
--- a/code/modules/antagonists/blob/blob/blobs/shield.dm
+++ b/code/modules/antagonists/blob/blob/blobs/shield.dm
@@ -9,6 +9,7 @@
point_return = 4
atmosblock = TRUE
armor = list("melee" = 25, "bullet" = 25, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ var/weakened
/obj/structure/blob/shield/scannerreport()
if(atmosblock)
@@ -25,10 +26,15 @@
name = "weakened strong blob"
desc = "A wall of twitching tendrils."
atmosblock = FALSE
- armor = list("melee" = 15, "bullet" = 15, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ if(!weakened)
+ armor = armor.setRating("melee" = 15, "bullet" = 15, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ weakened = TRUE
else
icon_state = initial(icon_state)
name = initial(name)
desc = initial(desc)
atmosblock = TRUE
- air_update_turf(1)
+ if(weakened)
+ armor = armor.setRating("melee" = 25, "bullet" = 25, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
+ weakened = FALSE
+ air_update_turf(1)
\ No newline at end of file
diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm
index c8d59f54a8..9451012a04 100644
--- a/code/modules/antagonists/cult/cult.dm
+++ b/code/modules/antagonists/cult/cult.dm
@@ -13,7 +13,7 @@
var/give_equipment = FALSE
var/datum/team/cult/cult_team
-
+
/datum/antagonist/cult/get_team()
return cult_team
@@ -115,7 +115,7 @@
cult_team.rise(current)
if(cult_team.cult_ascendent)
cult_team.ascend(current)
-
+
/datum/antagonist/cult/remove_innate_effects(mob/living/mob_override)
. = ..()
var/mob/living/current = owner.current
@@ -220,7 +220,7 @@
throwing.Remove(current)
current.update_action_buttons_icon()
current.remove_status_effect(/datum/status_effect/cult_master)
-
+
if(ishuman(current))
var/mob/living/carbon/human/H = current
H.eye_color = initial(H.eye_color)
@@ -241,7 +241,31 @@
var/reckoning_complete = FALSE
var/cult_risen = FALSE
var/cult_ascendent = FALSE
-
+
+/datum/team/cult/New()
+ . = ..()
+ START_PROCESSING(SSprocessing, src)
+
+/datum/team/cult/Destroy()
+ STOP_PROCESSING(SSprocessing, src)
+ return ..()
+
+/datum/team/cult/process()
+ if(SSticker.current_state == GAME_STATE_FINISHED)
+ return
+ var/datum/objective/sacrifice/sac_objective = locate() in objectives
+ if(!sac_objective || sac_objective.check_completion())
+ return
+ var/datum/mind/sacrificial = sac_objective.get_target()
+ var/mob/living/sac_current = sacrificial.current
+ if(!sacrificial || !sac_current) //target is gone for good but not sacrified.
+ sort_sacrifice(TRUE)
+ return
+ if(QDELETED(sac_objective.target_current) || sac_objective.target_current != sac_current) //target is now a different mob (monkey, simple mob)
+ sac_objective.sac_image = sac_current.get_sac_image()
+ sac_objective.target_current = sac_current
+ sac_objective.update_explanation_text()
+
/datum/team/cult/proc/check_size()
if(cult_ascendent)
return
@@ -262,7 +286,7 @@
to_chat(B.current, "The veil weakens as your cult grows, your eyes begin to glow...")
addtimer(CALLBACK(src, .proc/rise, B.current), 200)
cult_risen = TRUE
-
+
if(ratio > CULT_ASCENDENT && !cult_ascendent)
for(var/datum/mind/B in members)
if(B.current)
@@ -270,8 +294,8 @@
to_chat(B.current, "Your cult is ascendent and the red harvest approaches - you cannot hide your true nature for much longer!!")
addtimer(CALLBACK(src, .proc/ascend, B.current), 200)
cult_ascendent = TRUE
-
-
+
+
/datum/team/cult/proc/rise(cultist)
if(ishuman(cultist))
var/mob/living/carbon/human/H = cultist
@@ -279,7 +303,7 @@
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
H.add_trait(CULT_EYES)
H.update_body()
-
+
/datum/team/cult/proc/ascend(cultist)
if(ishuman(cultist))
var/mob/living/carbon/human/H = cultist
@@ -289,48 +313,68 @@
/datum/team/cult/proc/setup_objectives()
//SAC OBJECTIVE , todo: move this to objective internals
+ sort_sacrifice()
+ //SUMMON OBJECTIVE
+ var/datum/objective/eldergod/summon_objective = new()
+ summon_objective.team = src
+ objectives += summon_objective
+
+/datum/team/cult/proc/sort_sacrifice(replacement = FALSE)
+
var/list/target_candidates = list()
- var/datum/objective/sacrifice/sac_objective = new
- sac_objective.team = src
+
+ var/datum/objective/sacrifice/sac_objective = locate() in GLOB.objectives
+ if(!sac_objective)
+ sac_objective = new
+ sac_objective.team = src
for(var/mob/living/carbon/human/player in GLOB.player_list)
if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && !is_convertable_to_cult(player) && player.stat != DEAD)
target_candidates += player.mind
- if(target_candidates.len == 0)
+ if(!length(target_candidates))
message_admins("Cult Sacrifice: Could not find unconvertible target, checking for convertible target.")
for(var/mob/living/carbon/human/player in GLOB.player_list)
if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && player.stat != DEAD)
target_candidates += player.mind
+
listclearnulls(target_candidates)
- if(LAZYLEN(target_candidates))
- sac_objective.target = pick(target_candidates)
- sac_objective.update_explanation_text()
+ if(!LAZYLEN(target_candidates))
+ message_admins("Cult Sacrifice: Could not find unconvertible or convertible target. Proceeding to next stage!")
+ sac_objective.sacced = TRUE
+ return
+ var/datum/mind/new_target = pick(target_candidates)
+ if(replacement)
+ for(var/datum/mind/H in members)
+ if(H.current)
+ to_chat(H.current, "Nar'Sie murmurs, [sac_objective.target] is beyond your reach. Sacrifice [new_target] instead...")
+ sac_objective.target = new_target
+ sac_objective.target_current = new_target.current
+ sac_objective.update_explanation_text()
- var/datum/job/sacjob = SSjob.GetJob(sac_objective.target.assigned_role)
- var/datum/preferences/sacface = sac_objective.target.current.client.prefs
- var/icon/reshape = get_flat_human_icon(null, sacjob, sacface, list(SOUTH))
- reshape.Shift(SOUTH, 4)
- reshape.Shift(EAST, 1)
- reshape.Crop(7,4,26,31)
- reshape.Crop(-5,-3,26,30)
- sac_objective.sac_image = reshape
+ sac_objective.sac_image = sac_objective.target_current.get_sac_image()
+ objectives += sac_objective
- objectives += sac_objective
- else
- message_admins("Cult Sacrifice: Could not find unconvertible or convertible target. WELP!")
+/mob/proc/get_sac_image()
+ var/icon/reshape = icon(icon, icon_state, SOUTH)
+ reshape.Shift(SOUTH, 4)
+ reshape.Shift(EAST, 1)
+ reshape.Crop(7,4,26,31)
+ reshape.Crop(-5,-3,26,30)
+/mob/living/carbon/human/get_sac_image()
+ var/datum/job/sacjob = SSjob.GetJob(mind.assigned_role)
+ var/datum/preferences/sacface = client.prefs
+ var/icon/reshape = get_flat_human_icon(null, sacjob, sacface, list(SOUTH))
+ reshape.Shift(SOUTH, 4)
+ reshape.Shift(EAST, 1)
+ reshape.Crop(7,4,26,31)
+ reshape.Crop(-5,-3,26,30)
- //SUMMON OBJECTIVE
-
- var/datum/objective/eldergod/summon_objective = new()
- summon_objective.team = src
- objectives += summon_objective
-
-
/datum/objective/sacrifice
var/sacced = FALSE
var/sac_image
+ var/mob/living/target_current
/datum/objective/sacrifice/check_completion()
return sacced || completed
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 8a3f81fc01..3c11351660 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -246,7 +246,7 @@ structure_check() searches for nearby cultist structures required for the invoca
return 0
to_chat(convertee, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \
and something evil takes root.")
- to_chat(convertee, "Do you wish to embrace the Geometer of Blood? Click here to stop resisting the truth. Or you could choose to continue resisting...")
+ to_chat(convertee, "Do you wish to embrace the Geometer of Blood? Click here to become a follower of Nar'sie. Or you could choose to continue resisting and suffer a fate worse than death...")
currentconversionman = convertee
conversiontimeout = world.time + (10 SECONDS)
convertee.Stun(100)
diff --git a/code/modules/antagonists/traitor/IAA/internal_affairs.dm b/code/modules/antagonists/traitor/IAA/internal_affairs.dm
index 5213c679ca..051bf74705 100644
--- a/code/modules/antagonists/traitor/IAA/internal_affairs.dm
+++ b/code/modules/antagonists/traitor/IAA/internal_affairs.dm
@@ -130,6 +130,7 @@
if(!owner.current||owner.current.stat==DEAD)
return
to_chat(owner.current, " Target eliminated: [victim.name]")
+ LAZYINITLIST(targets_stolen)
for(var/objective_ in victim.objectives)
if(istype(objective_, /datum/objective/assassinate/internal))
var/datum/objective/assassinate/internal/objective = objective_
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 8e4891fb70..d80f56c8c8 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -1458,7 +1458,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN)
if("flavor_text")
- var/msg = stripped_multiline_input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(features["flavor_text"]), MAX_MESSAGE_LEN*2, TRUE) as null|message
+ var/msg = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", html_decode(features["flavor_text"]), MAX_MESSAGE_LEN*2, TRUE)
if(!isnull(msg))
msg = copytext(msg, 1, MAX_MESSAGE_LEN*2)
features["flavor_text"] = msg
diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm
index c6d657b271..b4310a7f42 100644
--- a/code/modules/clothing/outfits/ert.dm
+++ b/code/modules/clothing/outfits/ert.dm
@@ -46,7 +46,8 @@
/datum/outfit/ert/commander/alert
name = "ERT Commander - High Alert"
-
+
+ suit = /obj/item/clothing/suit/space/hardsuit/ert/alert
glasses = /obj/item/clothing/glasses/thermal/eyepatch
backpack_contents = list(/obj/item/storage/box/engineer=1,\
/obj/item/melee/baton/loaded=1,\
@@ -80,7 +81,8 @@
/datum/outfit/ert/security/alert
name = "ERT Security - High Alert"
-
+
+ suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/sec
backpack_contents = list(/obj/item/storage/box/engineer=1,\
/obj/item/storage/box/handcuffs=1,\
/obj/item/clothing/mask/gas/sechailer/swat=1,\
@@ -117,6 +119,7 @@
/datum/outfit/ert/medic/alert
name = "ERT Medic - High Alert"
+ suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/med
backpack_contents = list(/obj/item/storage/box/engineer=1,\
/obj/item/melee/baton/loaded=1,\
/obj/item/clothing/mask/gas/sechailer/swat=1,\
@@ -153,6 +156,7 @@
/datum/outfit/ert/engineer/alert
name = "ERT Engineer - High Alert"
+ suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/engi
backpack_contents = list(/obj/item/storage/box/engineer=1,\
/obj/item/melee/baton/loaded=1,\
/obj/item/clothing/mask/gas/sechailer/swat=1,\
diff --git a/code/modules/clothing/shoes/taeclowndo.dm b/code/modules/clothing/shoes/taeclowndo.dm
new file mode 100644
index 0000000000..20d9fa6b70
--- /dev/null
+++ b/code/modules/clothing/shoes/taeclowndo.dm
@@ -0,0 +1,36 @@
+/obj/item/clothing/shoes/clown_shoes/taeclowndo
+ var/list/spelltypes = list (
+ /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pie,
+ /obj/effect/proc_holder/spell/aimed/banana_peel,
+ /obj/effect/proc_holder/spell/targeted/touch/megahonk,
+ /obj/effect/proc_holder/spell/targeted/touch/bspie,
+ )
+ var/list/spells = list()
+
+
+/obj/item/clothing/shoes/clown_shoes/taeclowndo/equipped(mob/user, slot)
+ . = ..()
+ if(!ishuman(user))
+ return
+ var/mob/living/carbon/human/H = user
+ if(!(H.has_trait(TRAIT_CLUMSY)) && !(H.mind && H.mind.assigned_role == "Clown"))
+ return
+ if(slot == SLOT_SHOES)
+ spells = new
+ for(var/spell in spelltypes)
+ var/obj/effect/proc_holder/spell/S = new spell
+ spells += S
+ S.charge_counter = 0
+ S.start_recharge()
+ H.mind.AddSpell(S)
+
+/obj/item/clothing/shoes/clown_shoes/taeclowndo/dropped(mob/user)
+ . = ..()
+ if(!ishuman(user))
+ return
+ var/mob/living/carbon/human/H = user
+ if(H.get_item_by_slot(SLOT_SHOES) == src)
+ for(var/spell in spells)
+ var/obj/effect/proc_holder/spell/S = spell
+ H.mind.spell_list.Remove(S)
+ qdel(S)
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index 652c0048c2..6d7c1036be 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -8,7 +8,8 @@ Contains:
- NASA Voidsuit
- Father Christmas' magical clothes
- Pirate's spacesuit
- - ERT hardsuit: command, sec, engi, med
+ - ERT hardsuit: Command, Sec, Engi, Med
+ - ERT High Alarm - Command, Sec, Engi, Med
- EVA spacesuit
- Freedom's spacesuit (freedom from vacuum's oppression)
- Carp hardsuit
@@ -185,6 +186,7 @@ Contains:
slowdown = 0
strip_delay = 130
resistance_flags = ACID_PROOF
+ tauric = TRUE //Citadel Add for tauric hardsuits
//ERT Security
/obj/item/clothing/head/helmet/space/hardsuit/ert/sec
@@ -198,7 +200,6 @@ Contains:
icon_state = "ert_security"
item_state = "ert_security"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/sec
- tauric = TRUE //Citadel Add for tauric hardsuits
//ERT Engineering
/obj/item/clothing/head/helmet/space/hardsuit/ert/engi
@@ -212,7 +213,6 @@ Contains:
icon_state = "ert_engineer"
item_state = "ert_engineer"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/engi
- tauric = TRUE //Citadel Add for tauric hardsuits
//ERT Medical
/obj/item/clothing/head/helmet/space/hardsuit/ert/med
@@ -227,8 +227,73 @@ Contains:
item_state = "ert_medical"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/med
species_exception = list(/datum/species/angel)
+
+ //Red alert ERT
+
+/obj/item/clothing/head/helmet/space/hardsuit/ert/alert
+ name = "emergency response unit helmet"
+ desc = "Red alert command helmet for the ERT. This one is more armored than its standard version."
+ icon_state = "hardsuit0-ert_commander-alert"
+ item_state = "hardsuit0-ert_commander-alert"
+ item_color = "ert_commander-alert"
+ armor = list("melee" = 70, "bullet" = 55, "laser" = 50, "energy" = 50, "bomb" = 65, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
+ strip_delay = 130
+ item_flags = NODROP
+ brightness_on = 8
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+
+/obj/item/clothing/suit/space/hardsuit/ert/alert
+ name = "emergency response team suit"
+ desc = "Red alert command suit for the ERT. This one is more armored than its standard version."
+ icon_state = "ert_command-alert"
+ item_state = "ert_command-alert"
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert
+ allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
+ armor = list("melee" = 70, "bullet" = 55, "laser" = 50, "energy" = 50, "bomb" = 65, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
+ strip_delay = 130
+ resistance_flags = FIRE_PROOF | ACID_PROOF
tauric = TRUE //Citadel Add for tauric hardsuits
+ //ERT Security
+/obj/item/clothing/head/helmet/space/hardsuit/ert/alert/sec
+ desc = "Red alert security helmet for the ERT. This one is more armored than its standard version."
+ icon_state = "hardsuit0-ert_security-alert"
+ item_state = "hardsuit0-ert_security-alert"
+ item_color = "ert_security-alert"
+
+/obj/item/clothing/suit/space/hardsuit/ert/alert/sec
+ desc = "Red alert security suit for the ERT. This one is more armored than its standard version."
+ icon_state = "ert_security-alert"
+ item_state = "ert_security-alert"
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert/sec
+
+ //ERT Engineering
+/obj/item/clothing/head/helmet/space/hardsuit/ert/alert/engi
+ desc = "Red alert engineer helmet for the ERT. This one is more armored than its standard version."
+ icon_state = "hardsuit0-ert_engineer-alert"
+ item_state = "hardsuit0-ert_engineer-alert"
+ item_color = "ert_engineer-alert"
+
+/obj/item/clothing/suit/space/hardsuit/ert/alert/engi
+ desc = "Red alert engineer suit for the ERT. This one is more armored than its standard version."
+ icon_state = "ert_engineer-alert"
+ item_state = "ert_engineer-alert"
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert/engi
+
+ //ERT Medical
+/obj/item/clothing/head/helmet/space/hardsuit/ert/alert/med
+ desc = "Red alert medical helmet for the ERT. This one is more armored than its standard version."
+ icon_state = "hardsuit0-ert_medical-alert"
+ item_state = "hardsuit0-ert_medical-alert"
+ item_color = "ert_medical-alert"
+
+/obj/item/clothing/suit/space/hardsuit/ert/alert/med
+ desc = "Red alert medical suit for the ERT. This one is more armored than its standard version."
+ icon_state = "ert_medical-alert"
+ item_state = "ert_medical-alert"
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert/med
+ species_exception = list(/datum/species/angel)
+
/obj/item/clothing/suit/space/eva
name = "EVA suit"
icon_state = "space"
@@ -280,7 +345,6 @@ Contains:
item_flags = NODROP
mutantrace_variation = NO_MUTANTRACE_VARIATION
-
/obj/item/clothing/suit/space/hardsuit/carp
name = "carp space suit"
desc = "A slimming piece of dubious space carp technology, you suspect it won't stand up to hand-to-hand blows."
@@ -291,7 +355,6 @@ Contains:
allowed = list(/obj/item/tank/internals, /obj/item/gun/ballistic/automatic/speargun) //I'm giving you a hint here
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/carp
-
/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal
name = "paranormal response unit helmet"
desc = "A helmet worn by those who deal with paranormal threats for a living."
diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm
index 481fbade71..5d534e00a7 100644
--- a/code/modules/clothing/suits/toggles.dm
+++ b/code/modules/clothing/suits/toggles.dm
@@ -24,11 +24,11 @@
ToggleHood()
/obj/item/clothing/suit/hooded/item_action_slot_check(slot, mob/user)
- if(slot == SLOT_WEAR_SUIT)
+ if(slot == SLOT_WEAR_SUIT || slot == SLOT_NECK)
return 1
/obj/item/clothing/suit/hooded/equipped(mob/user, slot)
- if(slot != SLOT_WEAR_SUIT)
+ if(slot != SLOT_WEAR_SUIT && slot != SLOT_NECK)
RemoveHood()
..()
diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm
index 6ada4629d3..ca10d5092f 100644
--- a/code/modules/crafting/recipes.dm
+++ b/code/modules/crafting/recipes.dm
@@ -54,6 +54,18 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
+/datum/crafting_recipe/makeshiftshield
+ name = "Makeshift Metal Shield"
+ result = /obj/item/shield/makeshift
+ reqs = list(/obj/item/stack/cable_coil = 30,
+ /obj/item/stack/sheet/metal = 10,
+ /obj/item/stack/sheet/cloth = 2,
+ /obj/item/stack/sheet/leather = 3)
+ tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
+ time = 100
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
+
/datum/crafting_recipe/molotov
name = "Molotov"
result = /obj/item/reagent_containers/food/drinks/bottle/molotov
@@ -189,6 +201,16 @@
time = 40
category = CAT_ROBOT
+/datum/crafting_recipe/Firebot
+ name = "Firebot"
+ result = /mob/living/simple_animal/bot/firebot
+ reqs = list(/obj/item/extinguisher = 1,
+ /obj/item/bodypart/r_arm/robot = 1,
+ /obj/item/assembly/prox_sensor = 1,
+ /obj/item/clothing/head/hardhat/red = 1)
+ time = 40
+ category = CAT_ROBOT
+
/datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but
name = "Pneumatic Cannon"
result = /obj/item/pneumatic_cannon/ghetto
@@ -731,7 +753,7 @@
/datum/crafting_recipe/goldenbox
name = "Gold Plated Toolbox"
- result = /obj/item/storage/toolbox/gold_fake
+ result = /obj/item/storage/toolbox/gold_fake
reqs = list(/obj/item/stack/sheet/cardboard = 1, //so we dont null items in crafting
/obj/item/stack/cable_coil = 10,
/obj/item/stack/sheet/mineral/gold = 1,
diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm
index 910e94f680..7256ddb6ea 100644
--- a/code/modules/events/pirates.dm
+++ b/code/modules/events/pirates.dm
@@ -48,8 +48,6 @@
if(!shuttle_spawned)
spawn_shuttle()
-
-
/datum/round_event/pirates/start()
if(!paid_off && !shuttle_spawned)
spawn_shuttle()
@@ -150,7 +148,6 @@
to_chat(user,"You retrieve the siphoned credits!")
credits_stored = 0
-
/obj/machinery/shuttle_scrambler/proc/send_notification()
priority_announce("Data theft signal detected, source registered on local gps units.")
@@ -222,8 +219,7 @@
suit_type = /obj/item/clothing/suit/space
helmet_type = /obj/item/clothing/head/helmet/space
mask_type = /obj/item/clothing/mask/breath
- storage_type = /obj/item/tank/internals/oxygen
-
+ storage_type = /obj/item/tank/jetpack/void
/obj/machinery/loot_locator
name = "Booty Locator"
@@ -454,4 +450,4 @@
/datum/export/pirate/cash/get_amount(obj/O)
var/obj/item/stack/spacecash/C = O
- return ..() * C.amount * C.value
\ No newline at end of file
+ return ..() * C.amount * C.value
diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm
index f2b195c32d..2b37065709 100644
--- a/code/modules/food_and_drinks/food/snacks.dm
+++ b/code/modules/food_and_drinks/food/snacks.dm
@@ -108,9 +108,9 @@ All foods are distributed among various categories. Use common sense.
else if(fullness > 150 && fullness < 500)
user.visible_message("[user] takes a [eatverb] from \the [src].", "You take a [eatverb] from \the [src].")
else if(fullness > 500 && fullness < 600)
- user.visible_message("[user] unwillingly takes a [eatverb] of a bit of \the [src].", "You unwillingly take a [eatverb] of a bit of \the [src].")
+ user.visible_message("[user] unwillingly takes a [eatverb] of a bit of \the [src].", "You unwillingly take a [eatverb] of a bit of \the [src].")
else if(fullness > (600 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
- user.visible_message("[user] cannot force any more of \the [src] to go down [user.p_their()] throat!", "You cannot force any more of \the [src] to go down your throat!")
+ user.visible_message("[user] cannot force any more of \the [src] to go down [user.p_their()] throat!", "You cannot force any more of \the [src] to go down your throat!")
return 0
if(M.has_trait(TRAIT_VORACIOUS))
M.changeNext_move(CLICK_CD_MELEE * 0.5) //nom nom nom
diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm
index 04177783e6..8264b4153e 100644
--- a/code/modules/food_and_drinks/food/snacks_pie.dm
+++ b/code/modules/food_and_drinks/food/snacks_pie.dm
@@ -62,6 +62,28 @@
/obj/item/reagent_containers/food/snacks/pie/cream/nostun
stunning = FALSE
+/obj/item/reagent_containers/food/snacks/pie/cream/body
+
+/obj/item/reagent_containers/food/snacks/pie/cream/body/Destroy()
+ var/turf/T = get_turf(src)
+ for(var/atom/movable/A in contents)
+ A.forceMove(T)
+ A.throw_at(T, 1, 1)
+ . = ..()
+
+/obj/item/reagent_containers/food/snacks/pie/cream/body/On_Consume(mob/living/carbon/M)
+ if(!reagents.total_volume) //so that it happens on the last bite
+ if(iscarbon(M) && contents.len)
+ var/turf/T = get_turf(src)
+ for(var/atom/movable/A in contents)
+ A.forceMove(T)
+ A.throw_at(T, 1, 1)
+ M.visible_message("[src] bursts out of [M]!")
+ M.emote("scream")
+ M.Knockdown(40)
+ M.adjustBruteLoss(60)
+ return ..()
+
/obj/item/reagent_containers/food/snacks/pie/berryclafoutis
name = "berry clafoutis"
desc = "No black birds, this is a good sign."
diff --git a/code/modules/goonchat/browserassets/css/browserOutput.css b/code/modules/goonchat/browserassets/css/browserOutput.css
index 6466a47e42..33884f8ef0 100644
--- a/code/modules/goonchat/browserassets/css/browserOutput.css
+++ b/code/modules/goonchat/browserassets/css/browserOutput.css
@@ -316,7 +316,9 @@ h1.alert, h2.alert {color: #000000;}
.unconscious {color: #0000ff; font-weight: bold;}
.suicide {color: #ff5050; font-style: italic;}
.green {color: #03ff39;}
-.nicegreen {color: #14a833;}
+.nicegreen {color: #14a833;}
+.userlove {color: #FF1493; font-style: italic; font-weight: bold; text-shadow: 0 0 6px #ff6dbc;}
+.love {color: #ff006a; font-style: italic; text-shadow: 0 0 6px #ff6d6d;}
.shadowling {color: #3b2769;}
.cult {color: #960000;}
diff --git a/code/modules/integrated_electronics/core/saved_circuits.dm b/code/modules/integrated_electronics/core/saved_circuits.dm
index eef4fe38dd..2fe6984808 100644
--- a/code/modules/integrated_electronics/core/saved_circuits.dm
+++ b/code/modules/integrated_electronics/core/saved_circuits.dm
@@ -124,7 +124,7 @@
// Save modified name
if(initial(name) != name)
assembly_params["name"] = name
-
+
// Save modified description
if(initial(desc) != desc)
assembly_params["desc"] = desc
@@ -144,7 +144,7 @@
return "Bad assembly name."
if(assembly_params["desc"] && !reject_bad_text(assembly_params["desc"]))
return "Bad assembly description."
- if(assembly_params["detail_color"] && !(assembly_params["detail_color"] in color_whitelist))
+ if(assembly_params["detail_color"] && !reject_bad_text(assembly_params["detail_color"], 7))
return "Bad assembly color."
// Loads assembly parameters from a list
@@ -153,7 +153,7 @@
// Load modified name, if any.
if(assembly_params["name"])
name = assembly_params["name"]
-
+
// Load modified description, if any.
if(assembly_params["desc"])
desc = assembly_params["desc"]
diff --git a/code/modules/integrated_electronics/subtypes/converters.dm b/code/modules/integrated_electronics/subtypes/converters.dm
index 668f49c98f..c323718c07 100644
--- a/code/modules/integrated_electronics/subtypes/converters.dm
+++ b/code/modules/integrated_electronics/subtypes/converters.dm
@@ -142,13 +142,14 @@
/obj/item/integrated_circuit/converter/concatenator
name = "concatenator"
- desc = "This can join up to 8 strings together to get one big string."
+ desc = "This can join up to 8 strings together to get a string with a maximum of 512 characters."
complexity = 4
inputs = list()
outputs = list("result" = IC_PINTYPE_STRING)
activators = list("concatenate" = IC_PINTYPE_PULSE_IN, "on concatenated" = IC_PINTYPE_PULSE_OUT)
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
var/number_of_pins = 8
+ var/max_string_length = 512
/obj/item/integrated_circuit/converter/concatenator/Initialize()
for(var/i = 1 to number_of_pins)
@@ -157,26 +158,46 @@
/obj/item/integrated_circuit/converter/concatenator/do_work()
var/result = null
+ var/spamprotection
for(var/k in 1 to inputs.len)
var/I = get_pin_data(IC_INPUT, k)
if(!isnull(I))
+ if((result ? length(result) : 0) + length(I) > max_string_length)
+ spamprotection = (result ? length(result) : 0) + length(I)
+ break
result = result + I
+ if(spamprotection >= max_string_length*1.75 && assembly)
+ if(assembly.fingerprintslast)
+ var/mob/M = get_mob_by_key(assembly.fingerprintslast)
+ var/more = ""
+ if(M)
+ more = "[ADMIN_LOOKUPFLW(M)] "
+ message_admins("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. Assembly last touched by [more ? more : assembly.fingerprintslast].")
+ investigate_log("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. Assembly last touched by [assembly.fingerprintslast].", INVESTIGATE_CIRCUIT)
+ else
+ message_admins("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. No associated key.")
+ investigate_log("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. No associated key.", INVESTIGATE_CIRCUIT)
+ qdel(assembly)
+ return
+
set_pin_data(IC_OUTPUT, 1, result)
push_data()
activate_pin(2)
/obj/item/integrated_circuit/converter/concatenator/small
name = "small concatenator"
- desc = "This can join up to 4 strings together to get one big string."
+ desc = "This can join up to 4 strings together to get a string with a maximum of 256 characters."
complexity = 2
number_of_pins = 4
+ max_string_length = 256
/obj/item/integrated_circuit/converter/concatenator/large
name = "large concatenator"
- desc = "This can join up to 16 strings together to get one very big string."
+ desc = "This can join up to 16 strings together to get a string with a maximum of 1024 characters."
complexity = 6
number_of_pins = 16
+ max_string_length = 1024
/obj/item/integrated_circuit/converter/separator
name = "separator"
diff --git a/code/modules/integrated_electronics/subtypes/weaponized.dm b/code/modules/integrated_electronics/subtypes/weaponized.dm
index f9259359a3..7bccbfafcd 100644
--- a/code/modules/integrated_electronics/subtypes/weaponized.dm
+++ b/code/modules/integrated_electronics/subtypes/weaponized.dm
@@ -215,7 +215,7 @@
The 'fire' activator will cause the mechanism to attempt to launch objects at the coordinates, if possible. Note that the \
projectile needs to be inside the machine, or on an adjacent tile, and must be medium sized or smaller. The assembly \
must also be a gun if you wish to launch something while the assembly is in hand."
- complexity = 75
+ complexity = 50
w_class = WEIGHT_CLASS_SMALL
size = 4
cooldown_per_use = 30
@@ -306,7 +306,7 @@
desc = "Used to stun a target holding the device via electricity."
icon_state = "power_relay"
extended_desc = "Attempts to stun the holder of this device, with the strength input being the strength of the stun, from 1 to 70."
- complexity = 60
+ complexity = 30
size = 4
inputs = list("strength" = IC_PINTYPE_NUMBER)
activators = list("stun" = IC_PINTYPE_PULSE_IN, "on success" = IC_PINTYPE_PULSE_OUT, "on fail" = IC_PINTYPE_PULSE_OUT)
@@ -340,4 +340,4 @@
var/mob/living/carbon/human/H = L
H.forcesay(GLOB.hit_appends)
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm
index b8195e23d9..b4afaac17f 100644
--- a/code/modules/mining/equipment/kinetic_crusher.dm
+++ b/code/modules/mining/equipment/kinetic_crusher.dm
@@ -230,7 +230,7 @@
desc = "A wing ripped from a watcher. Suitable as a trophy for a kinetic crusher."
icon_state = "watcher_wing"
denied_type = /obj/item/crusher_trophy/watcher_wing
- bonus_value = 5
+ bonus_value = 10
/obj/item/crusher_trophy/watcher_wing/effect_desc()
return "mark detonation to prevent certain creatures from using certain attacks for [bonus_value*0.1] second\s"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 49d2722323..13da7b913c 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -260,7 +260,7 @@
else
return
- if(do_mob(usr, src, POCKET_STRIP_DELAY/delay_denominator)) //placing an item into the pocket is 4 times faster
+ if(do_mob(usr, src, POCKET_STRIP_DELAY/delay_denominator, ignorehelditem = TRUE)) //placing an item into the pocket is 4 times faster
if(pocket_item)
if(pocket_item == (pocket_id == SLOT_R_STORE ? r_store : l_store)) //item still in the pocket we search
dropItemToGround(pocket_item)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 870dfc2ebc..9a0a978d7a 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -300,6 +300,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
else
if(C.client)
C.canbearoused = C.client.prefs.arousable
+ if(ishuman(C))
+ var/mob/living/carbon/human/H = C
+ if(NOGENITALS in H.dna.species.species_traits)
+ H.give_genitals(TRUE) //call the clean up proc to delete anything on the mob then return.
+
// EDIT ENDS
/datum/species/proc/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load)
@@ -1452,39 +1457,51 @@ GLOBAL_LIST_EMPTY(roundstart_races)
/datum/species/proc/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
// CITADEL EDIT slap mouthy gits and booty
- var/aim_for_mouth = user.zone_selected == "mouth"
- var/target_on_help_and_unarmed = target.a_intent == INTENT_HELP && !target.get_active_held_item()
+ var/aim_for_mouth = user.zone_selected == "mouth"
+ var/target_on_help = target.a_intent == INTENT_HELP
var/target_aiming_for_mouth = target.zone_selected == "mouth"
var/target_restrained = target.restrained()
- if(aim_for_mouth && ( target_on_help_and_unarmed || target_restrained || target_aiming_for_mouth))
- playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
- user.visible_message("[user] slaps [target] in the face!",
- "You slap [target] in the face! ",\
- "You hear a slap.")
- if (!target.has_trait(TRAIT_NYMPHO))
- stop_wagging_tail(target)
- return FALSE
+ var/same_dir = (target.dir & user.dir)
var/aim_for_groin = user.zone_selected == "groin"
var/target_aiming_for_groin = target.zone_selected == "groin"
- if(aim_for_groin && (target_on_help_and_unarmed || target_restrained || target_aiming_for_groin))
+
+ if(target.check_block()) //END EDIT
+ target.visible_message("[target] blocks [user]'s disarm attempt!")
+ return 0
+ else if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
+ to_chat(user, "You're too exhausted!")
+ return FALSE
+
+ else if(aim_for_mouth && ( target_on_help || target_restrained || target_aiming_for_mouth))
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
- user.visible_message("[user] slaps [target]'s ass!",
- "You slap [target]'s ass! ",\
- "You hear a slap.")
+
+ user.visible_message(\
+ "\The [user] slaps \the [target] in the face!",\
+ "You slap [user == target ? "yourself" : "\the [target]"] in the face! ",\
+ "You hear a slap."
+ )
+ if (!target.has_trait(TRAIT_NYMPHO))
+ stop_wagging_tail(target)
+ user.do_attack_animation(target, ATTACK_EFFECT_FACE_SLAP)
+ user.adjustStaminaLossBuffered(3)
+ return FALSE
+ else if(aim_for_groin && (target == user || target.lying || same_dir) && (target_on_help || target_restrained || target_aiming_for_groin))
+ playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
+ user.visible_message(\
+ "\The [user] slaps \the [target]'s ass!",\
+ "You slap [user == target ? "your" : "\the [target]'s"] ass!",\
+ "You hear a slap."
+ )
if (target.canbearoused)
target.adjustArousalLoss(5)
- if (target.getArousalLoss() >= 100 && ishuman(target) && target.has_trait(TRAIT_NYMPHO) && target.has_dna())
+ if (target.getArousalLoss() >= 100 && ishuman(target) && target.has_trait(TRAIT_MASO) && target.has_dna())
target.mob_climax(forced_climax=TRUE)
if (!target.has_trait(TRAIT_NYMPHO))
stop_wagging_tail(target)
+ user.do_attack_animation(target, ATTACK_EFFECT_ASS_SLAP)
+ user.adjustStaminaLossBuffered(3)
return FALSE
- else if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
- to_chat(user, "You're too exhausted.")
- return FALSE
- else if(target.check_block()) //END EDIT
- target.visible_message("[target] blocks [user]'s disarm attempt!")
- return 0
- if(attacker_style && attacker_style.disarm_act(user,target))
+ else if(attacker_style && attacker_style.disarm_act(user,target))
return 1
else
user.do_attack_animation(target, ATTACK_EFFECT_DISARM)
@@ -1710,6 +1727,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(BP)
if(damage > 0 ? BP.receive_damage(damage * hit_percent * brutemod * H.physiology.brute_mod, 0) : BP.heal_damage(abs(damage * hit_percent * brutemod * H.physiology.brute_mod), 0))
H.update_damage_overlays()
+ if(H.has_trait(TRAIT_MASO))
+ H.adjustArousalLoss(damage * brutemod * H.physiology.brute_mod)
+ if (H.getArousalLoss() >= 100 && ishuman(H) && H.has_dna())
+ H.mob_climax(forced_climax=TRUE)
+
else//no bodypart, we deal damage with a more general method.
H.adjustBruteLoss(damage * hit_percent * brutemod * H.physiology.brute_mod)
if(BURN)
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 434f59e660..ad1f5c9190 100644
--- a/code/modules/mob/living/carbon/human/species_types/abductors.dm
+++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm
@@ -3,7 +3,7 @@
id = "abductor"
say_mod = "gibbers"
sexes = FALSE
- species_traits = list(NOBLOOD,NOEYES,NOGENITALS)
+ species_traits = list(NOBLOOD,NOEYES,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NOGUNS,TRAIT_NOHUNGER,TRAIT_NOBREATH)
mutanttongue = /obj/item/organ/tongue/abductor
var/scientist = FALSE // vars to not pollute spieces list with castes
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 678d5397ee..9f2c07694c 100644
--- a/code/modules/mob/living/carbon/human/species_types/android.dm
+++ b/code/modules/mob/living/carbon/human/species_types/android.dm
@@ -2,7 +2,7 @@
name = "Android"
id = "android"
say_mod = "states"
- species_traits = list(NOBLOOD,NOGENITALS)
+ species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_NOFIRE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_LIMBATTACHMENT)
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
meat = null
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 87e9f950c4..b790ae0489 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -2,7 +2,7 @@
// Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck.
name = "Golem"
id = "iron golem"
- species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR,NOGENITALS)
+ species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
inherent_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
mutant_organs = list(/obj/item/organ/adamantine_resonator)
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 13199cdad7..7be0265cba 100644
--- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
@@ -9,7 +9,7 @@
nojumpsuit = TRUE
say_mod = "poofs" //what does a mushroom sound like
- species_traits = list(MUTCOLORS, NOEYES, NO_UNDERWEAR,NOGENITALS)
+ species_traits = list(MUTCOLORS, NOEYES, NO_UNDERWEAR,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_NOBREATH)
speedmod = 1.5 //faster than golems but not by much
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 9716fc2e22..b574df7d79 100644
--- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
@@ -38,7 +38,7 @@
burnmod = 1.5
blacklisted = TRUE
no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE)
- species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES,NOGENITALS)
+ species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
mutanteyes = /obj/item/organ/eyes/night_vision/nightmare
mutant_organs = list(/obj/item/organ/heart/nightmare)
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 a72c196fdf..5c2b01a179 100644
--- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm
+++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
@@ -6,7 +6,7 @@
blacklisted = 1
sexes = 0
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
- species_traits = list(NOBLOOD,NOGENITALS)
+ species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL)
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_FAKEDEATH)
inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
mutanttongue = /obj/item/organ/tongue/bone
diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm
index f553367921..7e838c857f 100644
--- a/code/modules/mob/living/carbon/human/species_types/synths.dm
+++ b/code/modules/mob/living/carbon/human/species_types/synths.dm
@@ -3,7 +3,7 @@
id = "synth"
say_mod = "beep boops" //inherited from a user's real species
sexes = 0
- species_traits = list(NOTRANSSTING,NOGENITALS) //all of these + whatever we inherit from the real species
+ species_traits = list(NOTRANSSTING,NOGENITALS,NOAROUSAL) //all of these + whatever we inherit from the real species
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOBREATH)
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
dangerous_existence = 1
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index b9b6424092..b6717f2932 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -103,21 +103,23 @@
//CIT CHANGES START HERE - makes it so resting stops you from moving through standing folks without a short delay
if(resting && !L.resting)
- if(attemptingcrawl)
- return TRUE
- if(getStaminaLoss() >= STAMINA_SOFTCRIT)
- to_chat(src, "You're too exhausted to crawl under [L].")
- return TRUE
- attemptingcrawl = TRUE
var/origtargetloc = L.loc
- visible_message("[src] is attempting to crawl under [L].", "You are now attempting to crawl under [L].")
- if(do_after(src, CRAWLUNDER_DELAY, target = src))
- if(resting)
- var/src_passmob = (pass_flags & PASSMOB)
- pass_flags |= PASSMOB
- Move(origtargetloc)
- if(!src_passmob)
- pass_flags &= ~PASSMOB
+ if(!pulledby)
+ if(attemptingcrawl)
+ return TRUE
+ if(getStaminaLoss() >= STAMINA_SOFTCRIT)
+ to_chat(src, "You're too exhausted to crawl under [L].")
+ return TRUE
+ attemptingcrawl = TRUE
+ visible_message("[src] is attempting to crawl under [L].", "You are now attempting to crawl under [L].")
+ if(!do_after(src, CRAWLUNDER_DELAY, target = src) || !resting)
+ attemptingcrawl = FALSE
+ return TRUE
+ var/src_passmob = (pass_flags & PASSMOB)
+ pass_flags |= PASSMOB
+ Move(origtargetloc)
+ if(!src_passmob)
+ pass_flags &= ~PASSMOB
attemptingcrawl = FALSE
return TRUE
//END OF CIT CHANGES
@@ -698,7 +700,7 @@
who.visible_message("[src] tries to remove [who]'s [what.name].", \
"[src] tries to remove [who]'s [what.name].")
what.add_fingerprint(src)
- if(do_mob(src, who, what.strip_delay))
+ if(do_mob(src, who, what.strip_delay, ignorehelditem = TRUE))
if(what && Adjacent(who))
if(islist(where))
var/list/L = where
diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm
index 56d37f667c..9db21f13e0 100644
--- a/code/modules/mob/living/simple_animal/bot/construction.dm
+++ b/code/modules/mob/living/simple_animal/bot/construction.dm
@@ -505,3 +505,33 @@
to_chat(user, "You unbolt [src]'s energy swords")
for(var/IS in 1 to swordamt)
new /obj/item/melee/transforming/energy/sword/saber(Tsec)
+
+//Firebot Assembly
+/obj/item/bot_assembly/firebot
+ name = "incomplete firebot assembly"
+ desc = "A fire extinguisher with an arm attached to it."
+ icon_state = "firebot_arm"
+ created_name = "Firebot"
+
+/obj/item/bot_assembly/firebot/attackby(obj/item/I, mob/user, params)
+ ..()
+ switch(build_step)
+ if(ASSEMBLY_FIRST_STEP)
+ if(istype(I, /obj/item/clothing/head/hardhat/red))
+ if(!user.temporarilyRemoveItemFromInventory(I))
+ return
+ to_chat(user,"You add the [I] to [src]!")
+ icon_state = "firebot_helmet"
+ desc = "An incomplete firebot assembly with a fire helmet."
+ qdel(I)
+ build_step++
+
+ if(ASSEMBLY_SECOND_STEP)
+ if(isprox(I))
+ if(!can_finish_build(I, user))
+ return
+ to_chat(user, "You add the [I] to [src]! Beep Boop!")
+ var/mob/living/simple_animal/bot/firebot/F = new(drop_location())
+ F.name = created_name
+ qdel(I)
+ qdel(src)
diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm
new file mode 100644
index 0000000000..d8c3bca72a
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/bot/firebot.dm
@@ -0,0 +1,325 @@
+//Firebot
+
+#define SPEECH_INTERVAL 300 // Time between idle speeches
+#define DETECTED_VOICE_INTERVAL 300 // Time between fire detected callouts
+#define FOAM_INTERVAL 50 // Time between deployment of fire fighting foam
+
+/mob/living/simple_animal/bot/firebot
+ name = "\improper Firebot"
+ desc = "A little fire extinguishing bot. He looks rather anxious."
+ icon = 'icons/mob/aibots.dmi'
+ icon_state = "firebot"
+ density = FALSE
+ anchored = FALSE
+ health = 25
+ maxHealth = 25
+ spacewalk = TRUE
+
+ radio_key = /obj/item/encryptionkey/headset_eng
+ radio_channel = "Engineering"
+ bot_type = FIRE_BOT
+ model = "Firebot"
+ bot_core = /obj/machinery/bot_core/firebot
+ window_id = "autoextinguisher"
+ window_name = "Mobile Fire Extinguisher v1.0"
+ path_image_color = "#FFA500"
+
+ var/atom/target_fire
+ var/atom/old_target_fire
+
+ var/obj/item/extinguisher/internal_ext
+
+ var/last_found = 0
+
+ var/speech_cooldown = 0
+ var/detected_cooldown = 0
+ var/foam_cooldown = 0
+
+ var/extinguish_people = TRUE
+ var/extinguish_fires = TRUE
+ var/stationary_mode = FALSE
+
+/mob/living/simple_animal/bot/firebot/Initialize()
+ . = ..()
+ update_icon()
+ var/datum/job/engineer/J = new/datum/job/engineer
+ access_card.access += J.get_access()
+ prev_access = access_card.access
+
+ create_extinguisher()
+
+/mob/living/simple_animal/bot/firebot/bot_reset()
+ create_extinguisher()
+
+/mob/living/simple_animal/bot/firebot/proc/create_extinguisher()
+ internal_ext = new /obj/item/extinguisher(src)
+ internal_ext.safety = FALSE
+ internal_ext.precision = TRUE
+ internal_ext.max_water = INFINITY
+ internal_ext.refill()
+
+/mob/living/simple_animal/bot/firebot/UnarmedAttack(atom/A)
+ if(!on)
+ return
+ if(internal_ext)
+ internal_ext.afterattack(A, src)
+ else
+ return ..()
+
+/mob/living/simple_animal/bot/firebot/RangedAttack(atom/A)
+ if(!on)
+ return
+ if(internal_ext)
+ internal_ext.afterattack(A, src)
+ else
+ return ..()
+
+/mob/living/simple_animal/bot/firebot/turn_on()
+ . = ..()
+ update_icon()
+
+/mob/living/simple_animal/bot/firebot/turn_off()
+ ..()
+ update_icon()
+
+/mob/living/simple_animal/bot/firebot/bot_reset()
+ ..()
+ target_fire = null
+ old_target_fire = null
+ ignore_list = list()
+ anchored = FALSE
+ update_icon()
+
+/mob/living/simple_animal/bot/firebot/proc/soft_reset()
+ path = list()
+ target_fire = null
+ mode = BOT_IDLE
+ last_found = world.time
+ update_icon()
+
+/mob/living/simple_animal/bot/firebot/set_custom_texts()
+ text_hack = "You corrupt [name]'s safety protocols."
+ text_dehack = "You detect errors in [name] and reset his programming."
+ text_dehack_fail = "[name] is not responding to reset commands!"
+
+/mob/living/simple_animal/bot/firebot/get_controls(mob/user)
+ var/dat
+ dat += hack(user)
+ dat += showpai(user)
+ dat += "Mobile Fire Extinguisher v1.0
"
+ dat += "Status: [on ? "On" : "Off"]
"
+ dat += "Maintenance panel panel is [open ? "opened" : "closed"]
"
+
+ dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
"
+ if(!locked || issilicon(user) || IsAdminGhost(user))
+ dat += "Extinguish Fires: [extinguish_fires ? "Yes" : "No"]
"
+ dat += "Extinguish People: [extinguish_people ? "Yes" : "No"]
"
+ dat += "Patrol Station: [auto_patrol ? "Yes" : "No"]
"
+ dat += "Stationary Mode: [stationary_mode ? "Yes" : "No"]
"
+
+ return dat
+
+/mob/living/simple_animal/bot/firebot/emag_act(mob/user)
+ ..()
+ if(emagged == 1)
+ if(user)
+ to_chat(user, "[src] buzzes and beeps.")
+ audible_message("[src] buzzes oddly!")
+ playsound(src, "sparks", 75, TRUE)
+ if(user)
+ old_target_fire = user
+ extinguish_fires = FALSE
+ extinguish_people = TRUE
+
+ internal_ext.chem = "clf3" //Refill the internal extinguisher with liquid fire
+ internal_ext.power = 3
+ internal_ext.safety = FALSE
+ internal_ext.precision = FALSE
+ internal_ext.max_water = INFINITY
+ internal_ext.refill()
+
+/mob/living/simple_animal/bot/firebot/Topic(href, href_list)
+ if(..())
+ return TRUE
+
+ switch(href_list["operation"])
+ if("extinguish_fires")
+ extinguish_fires = !extinguish_fires
+ if("extinguish_people")
+ extinguish_people = !extinguish_people
+ if("stationary_mode")
+ stationary_mode = !stationary_mode
+
+ update_controls()
+ update_icon()
+
+/mob/living/simple_animal/bot/firebot/proc/is_burning(atom/target)
+ if(ismob(target))
+ var/mob/living/M = target
+ if(M.on_fire || (emagged == 1 && !M.on_fire))
+ return TRUE
+
+ else if(isturf(target))
+ var/turf/open/T = target
+ if(T.active_hotspot)
+ return TRUE
+
+ return FALSE
+
+/mob/living/simple_animal/bot/firebot/handle_automated_action()
+ if(!..())
+ return
+
+ if(IsStun())
+ old_target_fire = target_fire
+ target_fire = null
+ mode = BOT_IDLE
+ return
+
+ if(prob(1) && target_fire == null)
+ var/list/messagevoice = list("No fires detected." = 'sound/voice/firebot/nofires.ogg',
+ "Only you can prevent station fires." = 'sound/voice/firebot/onlyyou.ogg',
+ "Temperature nominal." = 'sound/voice/firebot/tempnominal.ogg',
+ "Keep it cool." = 'sound/voice/firebot/keepitcool.ogg')
+ var/message = pick(messagevoice)
+ speak(message)
+ playsound(src, messagevoice[message], 50)
+
+ // Couldn't reach the target, reset and try again ignoring the old one
+ if(frustration > 8)
+ old_target_fire = target_fire
+ soft_reset()
+
+ // We extinguished our target or it was deleted
+ if(QDELETED(target_fire) || !is_burning(target_fire) || isdead(target_fire))
+ target_fire = null
+ var/scan_range = (stationary_mode ? 1 : DEFAULT_SCAN_RANGE)
+
+ if(extinguish_people)
+ target_fire = scan(/mob/living, old_target_fire, scan_range) // Scan for burning humans first
+
+ if(target_fire == null && extinguish_fires)
+ target_fire = scan(/turf/open, old_target_fire, scan_range) // Scan for burning turfs second
+
+ old_target_fire = target_fire
+
+ // Target reached ENGAGE WATER CANNON
+ if(target_fire && (get_dist(src, target_fire) <= (emagged == 1 ? 1 : 2))) // Make the bot spray water from afar when not emagged
+ if((speech_cooldown + SPEECH_INTERVAL) < world.time)
+ if(ishuman(target_fire))
+ speak("Stop, drop and roll!")
+ playsound(src, "sound/voice/firebot/stopdropnroll.ogg", 50, 0)
+ else
+ speak("Extinguishing!")
+ playsound(src, "sound/voice/firebot/extinguishing.ogg", 50, 0)
+ speech_cooldown = world.time
+
+ flick("firebot1_use", src)
+ spray_water(target_fire, src)
+
+ soft_reset()
+
+ // Target ran away
+ else if(target_fire && path.len && (get_dist(target_fire,path[path.len]) > 2))
+ path = list()
+ mode = BOT_IDLE
+ last_found = world.time
+
+ else if(target_fire && stationary_mode)
+ soft_reset()
+ return
+
+ if(target_fire && (get_dist(src, target_fire) > 2))
+
+ path = get_path_to(src, get_turf(target_fire), /turf/proc/Distance_cardinal, 0, 30, 1, id=access_card)
+ mode = BOT_MOVING
+ if(!path.len)
+ soft_reset()
+
+ if(path.len > 0 && target_fire)
+ if(!bot_move(path[path.len]))
+ old_target_fire = target_fire
+ soft_reset()
+ return
+
+ // We got a target but it's too far away from us
+ if(path.len > 8 && target_fire)
+ frustration++
+
+ if(auto_patrol && !target_fire && !stationary_mode)
+ if(mode == BOT_IDLE || mode == BOT_START_PATROL)
+ start_patrol()
+
+ if(mode == BOT_PATROL)
+ bot_patrol()
+
+
+//Look for burning people or turfs around the bot
+/mob/living/simple_animal/bot/firebot/process_scan(atom/scan_target)
+ var/result
+
+ if(scan_target == src)
+ return result
+
+ if(is_burning(scan_target))
+ if((detected_cooldown + DETECTED_VOICE_INTERVAL) < world.time)
+ speak("Fire detected!")
+ playsound(src, "sound/voice/firebot/detected.ogg", 50, 0)
+ detected_cooldown = world.time
+ result = scan_target
+
+ return result
+
+/mob/living/simple_animal/bot/firebot/temperature_expose(datum/gas_mixture/air, temperature, volume)
+ if((temperature > T0C + 200 || temperature < BODYTEMP_COLD_DAMAGE_LIMIT) && foam_cooldown + FOAM_INTERVAL < world.time)
+ new /obj/effect/particle_effect/foam/firefighting(loc)
+ foam_cooldown = world.time
+ ..()
+
+/mob/living/simple_animal/bot/firebot/proc/spray_water(atom/target, mob/user)
+ if(stationary_mode)
+ flick("firebots_use", user)
+ else
+ flick("firebot1_use", user)
+ internal_ext.afterattack(target, user, null)
+
+/mob/living/simple_animal/bot/firebot/update_icon()
+ if(!on)
+ icon_state = "firebot0"
+ return
+ if(IsStun())
+ icon_state = "firebots1"
+ else if(stationary_mode) //Bot has yellow light to indicate stationary mode.
+ icon_state = "firebots1"
+ else
+ icon_state = "firebot1"
+
+
+/mob/living/simple_animal/bot/firebot/explode()
+ on = FALSE
+ visible_message("[src] blows apart!")
+
+ var/atom/Tsec = drop_location()
+
+ new /obj/item/assembly/prox_sensor(Tsec)
+ new /obj/item/clothing/head/hardhat/red(Tsec)
+
+ var/turf/T = get_turf(Tsec)
+
+ if(isopenturf(T))
+ var/turf/open/theturf = T
+ theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS)
+
+ if(prob(50))
+ drop_part(robot_arm, Tsec)
+
+ do_sparks(3, TRUE, src)
+ ..()
+
+/obj/machinery/bot_core/firebot
+ req_one_access = list(ACCESS_CONSTRUCTION, ACCESS_ROBOTICS)
+
+#undef SPEECH_INTERVAL
+#undef DETECTED_VOICE_INTERVAL
+#undef FOAM_INTERVAL
+
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index 2c45743c55..dd08a009d4 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -130,7 +130,7 @@
/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(obj/item/projectile/Proj)
if(!Proj)
return
- if(prob(50))
+ if(prob(25))
return ..()
else
visible_message("[src] blocks [Proj] with its shield!")
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index 034ccc4c39..2001c61e12 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -61,6 +61,8 @@
var/mood = "" // To show its face
var/mutator_used = FALSE //So you can't shove a dozen mutators into a single slime
var/force_stasis = FALSE
+
+ do_footstep = TRUE
var/static/regex/slime_name_regex = new("\\w+ (baby|adult) slime \\(\\d+\\)")
///////////TIME FOR SUBSPECIES
diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm
index 39a0bba701..6cc0ca185f 100644
--- a/code/modules/mob/say_vr.dm
+++ b/code/modules/mob/say_vr.dm
@@ -8,9 +8,9 @@
set src in usr
if(usr != src)
usr << "No."
- var/msg = input(usr,"Set the flavor text in your 'examine' verb. Can also be used for OOC notes about your character.","Flavor Text",html_decode(flavor_text)) as message|null
-
- if(msg != null)
+ var/msg = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", html_decode(flavor_text), MAX_MESSAGE_LEN*2, TRUE)
+
+ if(!isnull(msg))
msg = copytext(msg, 1, MAX_MESSAGE_LEN)
msg = html_encode(msg)
@@ -23,11 +23,12 @@
/mob/proc/print_flavor_text()
if(flavor_text && flavor_text != "")
- var/msg = replacetext(flavor_text, "\n", " ")
+ // We are decoding and then encoding to not only get correct amount of characters, but also to prevent partial escaping characters being shown.
+ var/msg = html_decode(replacetext(flavor_text, "\n", " "))
if(lentext(msg) <= 40)
- return "[msg]"
+ return "[html_encode(msg)]"
else
- return "[copytext(msg, 1, 37)]... More..."
+ return "[html_encode(copytext(msg, 1, 37))]... More..."
/mob/proc/get_top_level_mob()
if(istype(src.loc,/mob)&&src.loc!=src)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index ad94d577ea..99b4a3f27e 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -295,6 +295,16 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
E.energy = power
qdel(src)
+/obj/machinery/power/supermatter_crystal/proc/consume_turf(turf/T)
+ var/oldtype = T.type
+ var/turf/newT = T.ScrapeAway()
+ if(newT.type == oldtype)
+ return
+ playsound(T, 'sound/effects/supermatter.ogg', 50, 1)
+ T.visible_message("[T] smacks into [src] and rapidly flashes to ash.",\
+ "You hear a loud crack as you are washed with a wave of heat.")
+ T.CalculateAdjacentTurfs()
+
/obj/machinery/power/supermatter_crystal/process_atmos()
var/turf/T = loc
@@ -303,6 +313,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
if(!istype(T)) //We are in a crate or somewhere that isn't turf, if we return to turf resume processing but for now.
return //Yeah just stop.
+ if(istype(T, /turf/closed))
+ consume_turf(T)
if(power)
soundloop.volume = min(40, (round(power/100)/50)+1) // 5 +1 volume per 20 power. 2500 power is max
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 5071150e24..a65a1f4adb 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -319,7 +319,7 @@
victim.blind_eyes(2)
victim.confused = max(M.confused, 3)
victim.damageoverlaytemp = 60
- victim.Knockdown(60)
+ victim.Knockdown(60, override_stamdmg = min(reac_volume * 3, 15))
return
else if ( eyes_covered ) // Eye cover is better than mouth cover
victim.blur_eyes(3)
@@ -332,7 +332,7 @@
victim.blind_eyes(3)
victim.confused = max(M.confused, 6)
victim.damageoverlaytemp = 75
- victim.Knockdown(100)
+ victim.Knockdown(100, override_stamdmg = min(reac_volume * 5, 25))
victim.update_damage_hud()
/datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/carbon/M)
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index a51134f84d..afb985120e 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -18,6 +18,7 @@
var/spray_range = 3 //the range of tiles the sprayer will reach when in spray mode.
var/stream_range = 1 //the range of tiles the sprayer will reach when in stream mode.
var/stream_amount = 10 //the amount of reagents transfered when in stream mode.
+ var/spray_delay = 3 //The amount of sleep() delay between each chempuff step.
var/can_fill_from_container = TRUE
amount_per_transfer_from_this = 5
volume = 250
@@ -64,7 +65,7 @@
/obj/item/reagent_containers/spray/proc/spray(atom/A)
- var/range = max(min(current_range, get_dist(src, A)), 1)
+ var/range = CLAMP(get_dist(src, A), 1, current_range)
var/obj/effect/decal/chempuff/D = new /obj/effect/decal/chempuff(get_turf(src))
D.create_reagents(amount_per_transfer_from_this)
var/puff_reagent_left = range //how many turf, mob or dense objet we can react with before we consider the chem puff consumed
@@ -74,7 +75,7 @@
else
reagents.trans_to(D, amount_per_transfer_from_this, 1/range)
D.color = mix_color_from_reagents(D.reagents.reagent_list)
- var/wait_step = max(round(2+3/range), 2)
+ var/wait_step = max(round(2+ spray_delay * INVERSE(range)), 2)
do_spray(A, wait_step, D, range, puff_reagent_left)
/obj/item/reagent_containers/spray/proc/do_spray(atom/A, wait_step, obj/effect/decal/chempuff/D, range, puff_reagent_left)
@@ -166,7 +167,7 @@
user.visible_message("[user] decided life was worth living.")
return
-//Drying Agent
+//Drying Agent
/obj/item/reagent_containers/spray/drying_agent
name = "drying agent spray"
desc = "A spray bottle for drying agent."
@@ -194,6 +195,7 @@
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
volume = 40
stream_range = 4
+ spray_delay = 1
amount_per_transfer_from_this = 5
list_reagents = list("condensedcapsaicin" = 40)
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
deleted file mode 100644
index 173fd5a813..0000000000
--- a/code/modules/research/designs/autolathe_designs.dm
+++ /dev/null
@@ -1,888 +0,0 @@
-///////////////////////////////////
-//////////Autolathe Designs ///////
-///////////////////////////////////
-
-/datum/design/bucket
- name = "Bucket"
- id = "bucket"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 200)
- build_path = /obj/item/reagent_containers/glass/bucket
- category = list("initial","Tools")
-
-/datum/design/crowbar
- name = "Pocket Crowbar"
- id = "crowbar"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 50)
- build_path = /obj/item/crowbar
- category = list("initial","Tools")
-
-/datum/design/flashlight
- name = "Flashlight"
- id = "flashlight"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 50, MAT_GLASS = 20)
- build_path = /obj/item/flashlight
- category = list("initial","Tools")
-
-/datum/design/extinguisher
- name = "Fire Extinguisher"
- id = "extinguisher"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 90)
- build_path = /obj/item/extinguisher
- category = list("initial","Tools")
-
-/datum/design/pocketfireextinguisher
- name = "Pocket Fire Extinguisher"
- id = "pocketfireextinguisher"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 50, MAT_GLASS = 40)
- build_path = /obj/item/extinguisher/mini
- category = list("initial","Tools")
-
-/datum/design/multitool
- name = "Multitool"
- id = "multitool"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 50, MAT_GLASS = 20)
- build_path = /obj/item/multitool
- category = list("initial","Tools")
-
-/datum/design/analyzer
- name = "Analyzer"
- id = "analyzer"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 30, MAT_GLASS = 20)
- build_path = /obj/item/analyzer
- category = list("initial","Tools")
-
-/datum/design/tscanner
- name = "T-Ray Scanner"
- id = "tscanner"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 150)
- build_path = /obj/item/t_scanner
- category = list("initial","Tools")
-
-/datum/design/weldingtool
- name = "Welding Tool"
- id = "welding_tool"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 70, MAT_GLASS = 20)
- build_path = /obj/item/weldingtool
- category = list("initial","Tools")
-
-/datum/design/mini_weldingtool
- name = "Emergency Welding Tool"
- id = "mini_welding_tool"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 30, MAT_GLASS = 10)
- build_path = /obj/item/weldingtool/mini
- category = list("initial","Tools")
-
-/datum/design/screwdriver
- name = "Screwdriver"
- id = "screwdriver"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 75)
- build_path = /obj/item/screwdriver
- category = list("initial","Tools")
-
-/datum/design/wirecutters
- name = "Wirecutters"
- id = "wirecutters"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 80)
- build_path = /obj/item/wirecutters
- category = list("initial","Tools")
-
-/datum/design/wrench
- name = "Wrench"
- id = "wrench"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 150)
- build_path = /obj/item/wrench
- category = list("initial","Tools")
-
-/datum/design/welding_helmet
- name = "Welding Helmet"
- id = "welding_helmet"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 1750, MAT_GLASS = 400)
- build_path = /obj/item/clothing/head/welding
- category = list("initial","Tools")
-
-/datum/design/cable_coil
- name = "Cable Coil"
- id = "cable_coil"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 10, MAT_GLASS = 5)
- build_path = /obj/item/stack/cable_coil/random
- category = list("initial","Tools")
- maxstack = 30
-
-/datum/design/toolbox
- name = "Toolbox"
- id = "tool_box"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 500)
- build_path = /obj/item/storage/toolbox
- category = list("initial","Tools")
-
-/datum/design/apc_board
- name = "APC Module"
- id = "power control"
- build_type = AUTOLATHE | PROTOLATHE
- materials = list(MAT_METAL = 100, MAT_GLASS = 100)
- build_path = /obj/item/electronics/apc
- category = list("initial", "Electronics")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/airlock_board
- name = "Airlock Electronics"
- id = "airlock_board"
- build_type = AUTOLATHE | PROTOLATHE
- materials = list(MAT_METAL = 50, MAT_GLASS = 50)
- build_path = /obj/item/electronics/airlock
- category = list("initial", "Electronics")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/firelock_board
- name = "Firelock Circuitry"
- id = "firelock_board"
- build_type = AUTOLATHE | PROTOLATHE
- materials = list(MAT_METAL = 50, MAT_GLASS = 50)
- build_path = /obj/item/electronics/firelock
- category = list("initial", "Electronics")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/airalarm_electronics
- name = "Air Alarm Electronics"
- id = "airalarm_electronics"
- build_type = AUTOLATHE | PROTOLATHE
- materials = list(MAT_METAL = 50, MAT_GLASS = 50)
- build_path = /obj/item/electronics/airalarm
- category = list("initial", "Electronics")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/firealarm_electronics
- name = "Fire Alarm Electronics"
- id = "firealarm_electronics"
- build_type = AUTOLATHE | PROTOLATHE
- materials = list(MAT_METAL = 50, MAT_GLASS = 50)
- build_path = /obj/item/electronics/firealarm
- category = list("initial", "Electronics")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/camera
- name = "Camera"
- id = "camera"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 50, MAT_GLASS = 100)
- build_path = /obj/item/camera
- category = list("initial", "Misc")
-
-/datum/design/camera_film
- name = "Camera Film Cartridge"
- id = "camera_film"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 10, MAT_GLASS = 10)
- build_path = /obj/item/camera_film
- category = list("initial", "Misc")
-
-/datum/design/earmuffs
- name = "Earmuffs"
- id = "earmuffs"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 500, MAT_GLASS = 500)
- build_path = /obj/item/clothing/ears/earmuffs
- category = list("initial", "Misc")
-
-/datum/design/pipe_painter
- name = "Pipe Painter"
- id = "pipe_painter"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 5000, MAT_GLASS = 2000)
- build_path = /obj/item/pipe_painter
- category = list("initial", "Misc")
-
-/datum/design/airlock_painter
- name = "Airlock Painter"
- id = "airlock_painter"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 50, MAT_GLASS = 50)
- build_path = /obj/item/airlock_painter
- category = list("initial", "Misc")
-
-/datum/design/metal
- name = "Metal"
- id = "metal"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT)
- build_path = /obj/item/stack/sheet/metal
- category = list("initial","Construction")
- maxstack = 50
-
-/datum/design/glass
- name = "Glass"
- id = "glass"
- build_type = AUTOLATHE
- materials = list(MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
- build_path = /obj/item/stack/sheet/glass
- category = list("initial","Construction")
- maxstack = 50
-
-/datum/design/rglass
- name = "Reinforced Glass"
- id = "rglass"
- build_type = AUTOLATHE | SMELTER | PROTOLATHE
- materials = list(MAT_METAL = 1000, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
- build_path = /obj/item/stack/sheet/rglass
- category = list("initial","Construction","Stock Parts")
- maxstack = 50
-
-/datum/design/rods
- name = "Metal Rod"
- id = "rods"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 1000)
- build_path = /obj/item/stack/rods
- category = list("initial","Construction")
- maxstack = 50
-
-/datum/design/rcd_ammo
- name = "Compressed Matter Cartridge"
- id = "rcd_ammo"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 12000, MAT_GLASS=8000)
- build_path = /obj/item/rcd_ammo
- category = list("initial","Construction")
-
-/datum/design/kitchen_knife
- name = "Kitchen Knife"
- id = "kitchen_knife"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 12000)
- build_path = /obj/item/kitchen/knife
- category = list("initial","Dinnerware")
-
-/datum/design/fork
- name = "Fork"
- id = "fork"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 80)
- build_path = /obj/item/kitchen/fork
- category = list("initial","Dinnerware")
-
-/datum/design/tray
- name = "Tray"
- id = "tray"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 3000)
- build_path = /obj/item/storage/bag/tray
- category = list("initial","Dinnerware")
-
-/datum/design/bowl
- name = "Bowl"
- id = "bowl"
- build_type = AUTOLATHE
- materials = list(MAT_GLASS = 500)
- build_path = /obj/item/reagent_containers/glass/bowl
- category = list("initial","Dinnerware")
-
-/datum/design/drinking_glass
- name = "Drinking Glass"
- id = "drinking_glass"
- build_type = AUTOLATHE
- materials = list(MAT_GLASS = 500)
- build_path = /obj/item/reagent_containers/food/drinks/drinkingglass
- category = list("initial","Dinnerware")
-
-/datum/design/shot_glass
- name = "Shot Glass"
- id = "shot_glass"
- build_type = AUTOLATHE
- materials = list(MAT_GLASS = 100)
- build_path = /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass
- category = list("initial","Dinnerware")
-
-/datum/design/shaker
- name = "Shaker"
- id = "shaker"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 1500)
- build_path = /obj/item/reagent_containers/food/drinks/shaker
- category = list("initial","Dinnerware")
-
-/datum/design/cultivator
- name = "Cultivator"
- id = "cultivator"
- build_type = AUTOLATHE
- materials = list(MAT_METAL=50)
- build_path = /obj/item/cultivator
- category = list("initial","Misc")
-
-/datum/design/plant_analyzer
- name = "Plant Analyzer"
- id = "plant_analyzer"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 30, MAT_GLASS = 20)
- build_path = /obj/item/plant_analyzer
- category = list("initial","Misc")
-
-/datum/design/shovel
- name = "Shovel"
- id = "shovel"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 50)
- build_path = /obj/item/shovel
- category = list("initial","Misc")
-
-/datum/design/spade
- name = "Spade"
- id = "spade"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 50)
- build_path = /obj/item/shovel/spade
- category = list("initial","Misc")
-
-/datum/design/hatchet
- name = "Hatchet"
- id = "hatchet"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 15000)
- build_path = /obj/item/hatchet
- category = list("initial","Misc")
-
-/datum/design/foilhat
- name = "Tinfoil Hat"
- id = "tinfoil_hat"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 5500)
- build_path = /obj/item/clothing/head/foilhat
- category = list("hacked", "Misc")
-
-/datum/design/scalpel
- name = "Scalpel"
- id = "scalpel"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 4000, MAT_GLASS = 1000)
- build_path = /obj/item/scalpel
- category = list("initial", "Medical")
-
-/datum/design/circular_saw
- name = "Circular Saw"
- id = "circular_saw"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 10000, MAT_GLASS = 6000)
- build_path = /obj/item/circular_saw
- category = list("initial", "Medical")
-
-/datum/design/surgicaldrill
- name = "Surgical Drill"
- id = "surgicaldrill"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 10000, MAT_GLASS = 6000)
- build_path = /obj/item/surgicaldrill
- category = list("initial", "Medical")
-
-/datum/design/retractor
- name = "Retractor"
- id = "retractor"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 6000, MAT_GLASS = 3000)
- build_path = /obj/item/retractor
- category = list("initial", "Medical")
-
-/datum/design/cautery
- name = "Cautery"
- id = "cautery"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 2500, MAT_GLASS = 750)
- build_path = /obj/item/cautery
- category = list("initial", "Medical")
-
-/datum/design/hemostat
- name = "Hemostat"
- id = "hemostat"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 5000, MAT_GLASS = 2500)
- build_path = /obj/item/hemostat
- category = list("initial", "Medical")
-
-/datum/design/beaker
- name = "Beaker"
- id = "beaker"
- build_type = AUTOLATHE
- materials = list(MAT_GLASS = 500)
- build_path = /obj/item/reagent_containers/glass/beaker
- category = list("initial", "Medical")
-
-/datum/design/large_beaker
- name = "Large Beaker"
- id = "large_beaker"
- build_type = AUTOLATHE
- materials = list(MAT_GLASS = 2500)
- build_path = /obj/item/reagent_containers/glass/beaker/large
- category = list("initial", "Medical")
-
-/datum/design/healthanalyzer
- name = "Health Analyzer"
- id = "healthanalyzer"
- build_type = AUTOLATHE | PROTOLATHE
- materials = list(MAT_METAL = 500, MAT_GLASS = 50)
- build_path = /obj/item/healthanalyzer
- category = list("initial", "Medical")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-
-/datum/design/pillbottle
- name = "Pill Bottle"
- id = "pillbottle"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 20, MAT_GLASS = 100)
- build_path = /obj/item/storage/pill_bottle
- category = list("initial", "Medical")
-
-/datum/design/beanbag_slug
- name = "Beanbag Slug"
- id = "beanbag_slug"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 250)
- build_path = /obj/item/ammo_casing/shotgun/beanbag
- category = list("initial", "Security")
-
-/datum/design/rubbershot
- name = "Rubber Shot"
- id = "rubber_shot"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 4000)
- build_path = /obj/item/ammo_casing/shotgun/rubbershot
- category = list("initial", "Security")
-
-/datum/design/c38
- name = "Speed Loader (.38 rubber)"
- id = "c38"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 20000)
- build_path = /obj/item/ammo_box/c38
- category = list("initial", "Security")
-
-/datum/design/recorder
- name = "Universal Recorder"
- id = "recorder"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 60, MAT_GLASS = 30)
- build_path = /obj/item/taperecorder/empty
- category = list("initial", "Misc")
-
-/datum/design/tape
- name = "Tape"
- id = "tape"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 20, MAT_GLASS = 5)
- build_path = /obj/item/tape/random
- category = list("initial", "Misc")
-
-/datum/design/igniter
- name = "Igniter"
- id = "igniter"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 500, MAT_GLASS = 50)
- build_path = /obj/item/assembly/igniter
- category = list("initial", "Misc")
-
-/datum/design/signaler
- name = "Remote Signaling Device"
- id = "signaler"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 400, MAT_GLASS = 120)
- build_path = /obj/item/assembly/signaler
- category = list("initial", "T-Comm")
-
-/datum/design/radio_headset
- name = "Radio Headset"
- id = "radio_headset"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 75)
- build_path = /obj/item/radio/headset
- category = list("initial", "T-Comm")
-
-/datum/design/bounced_radio
- name = "Station Bounced Radio"
- id = "bounced_radio"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 75, MAT_GLASS = 25)
- build_path = /obj/item/radio/off
- category = list("initial", "T-Comm")
-
-/datum/design/intercom_frame
- name = "Intercom Frame"
- id = "intercom_frame"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 75, MAT_GLASS = 25)
- build_path = /obj/item/wallframe/intercom
- category = list("initial", "T-Comm")
-
-/datum/design/infrared_emitter
- name = "Infrared Emitter"
- id = "infrared_emitter"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 1000, MAT_GLASS = 500)
- build_path = /obj/item/assembly/infra
- category = list("initial", "Misc")
-
-/datum/design/health_sensor
- name = "Health Sensor"
- id = "health_sensor"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 800, MAT_GLASS = 200)
- build_path = /obj/item/assembly/health
- category = list("initial", "Medical")
-
-/datum/design/timer
- name = "Timer"
- id = "timer"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 500, MAT_GLASS = 50)
- build_path = /obj/item/assembly/timer
- category = list("initial", "Misc")
-
-/datum/design/voice_analyser
- name = "Voice Analyser"
- id = "voice_analyser"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 500, MAT_GLASS = 50)
- build_path = /obj/item/assembly/voice
- category = list("initial", "Misc")
-
-/datum/design/light_tube
- name = "Light Tube"
- id = "light_tube"
- build_type = AUTOLATHE
- materials = list(MAT_GLASS = 100)
- build_path = /obj/item/light/tube
- category = list("initial", "Construction")
-
-/datum/design/light_bulb
- name = "Light Bulb"
- id = "light_bulb"
- build_type = AUTOLATHE
- materials = list(MAT_GLASS = 100)
- build_path = /obj/item/light/bulb
- category = list("initial", "Construction")
-
-/datum/design/camera_assembly
- name = "Camera Assembly"
- id = "camera_assembly"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 400, MAT_GLASS = 250)
- build_path = /obj/item/wallframe/camera
- category = list("initial", "Construction")
-
-/datum/design/newscaster_frame
- name = "Newscaster Frame"
- id = "newscaster_frame"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 14000, MAT_GLASS = 8000)
- build_path = /obj/item/wallframe/newscaster
- category = list("initial", "Construction")
-
-/datum/design/syringe
- name = "Syringe"
- id = "syringe"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 10, MAT_GLASS = 20)
- build_path = /obj/item/reagent_containers/syringe
- category = list("initial", "Medical")
-
-/datum/design/prox_sensor
- name = "Proximity Sensor"
- id = "prox_sensor"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 800, MAT_GLASS = 200)
- build_path = /obj/item/assembly/prox_sensor
- category = list("initial", "Misc")
-
-/datum/design/foam_dart
- name = "Box of Foam Darts"
- id = "foam_dart"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 500)
- build_path = /obj/item/ammo_box/foambox
- category = list("initial", "Misc")
-
-//hacked autolathe recipes
-/datum/design/flamethrower
- name = "Flamethrower"
- id = "flamethrower"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 500)
- build_path = /obj/item/flamethrower/full
- category = list("hacked", "Security")
-
-/datum/design/rcd
- name = "Rapid Construction Device (RCD)"
- id = "rcd"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 30000)
- build_path = /obj/item/construction/rcd
- category = list("hacked", "Construction")
-
-/datum/design/rpd
- name = "Rapid Pipe Dispenser (RPD)"
- id = "rpd"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 75000, MAT_GLASS = 37500)
- build_path = /obj/item/pipe_dispenser
- category = list("hacked", "Construction")
-
-/datum/design/electropack
- name = "Electropack"
- id = "electropack"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 10000, MAT_GLASS = 2500)
- build_path = /obj/item/electropack
- category = list("hacked", "Tools")
-
-/datum/design/large_welding_tool
- name = "Industrial Welding Tool"
- id = "large_welding_tool"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 70, MAT_GLASS = 60)
- build_path = /obj/item/weldingtool/largetank
- category = list("hacked", "Tools")
-
-/datum/design/handcuffs
- name = "Handcuffs"
- id = "handcuffs"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 500)
- build_path = /obj/item/restraints/handcuffs
- category = list("hacked", "Security")
-
-/datum/design/receiver
- name = "Modular Receiver"
- id = "receiver"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 15000)
- build_path = /obj/item/weaponcrafting/receiver
- category = list("hacked", "Security")
-
-/datum/design/shotgun_slug
- name = "Shotgun Slug"
- id = "shotgun_slug"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 4000)
- build_path = /obj/item/ammo_casing/shotgun
- category = list("hacked", "Security")
-
-/datum/design/buckshot_shell
- name = "Buckshot Shell"
- id = "buckshot_shell"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 4000)
- build_path = /obj/item/ammo_casing/shotgun/buckshot
- category = list("hacked", "Security")
-
-/datum/design/shotgun_dart
- name = "Shotgun Dart"
- id = "shotgun_dart"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 4000)
- build_path = /obj/item/ammo_casing/shotgun/dart
- category = list("hacked", "Security")
-
-/datum/design/incendiary_slug
- name = "Incendiary Slug"
- id = "incendiary_slug"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 4000)
- build_path = /obj/item/ammo_casing/shotgun/incendiary
- category = list("hacked", "Security")
-
-/datum/design/riot_dart
- name = "Foam Riot Dart"
- id = "riot_dart"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 1000) //Discount for making individually - no box = less metal!
- build_path = /obj/item/ammo_casing/caseless/foam_dart/riot
- category = list("hacked", "Security")
-
-/datum/design/riot_darts
- name = "Foam Riot Dart Box"
- id = "riot_darts"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 50000) //Comes with 40 darts
- build_path = /obj/item/ammo_box/foambox/riot
- category = list("hacked", "Security")
-
-/datum/design/a357
- name = "Speed Loader (.357)"
- id = "a357"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 30000)
- build_path = /obj/item/ammo_box/a357
- category = list("hacked", "Security")
-
-/datum/design/c10mm
- name = "Ammo Box (10mm)"
- id = "c10mm"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 30000)
- build_path = /obj/item/ammo_box/c10mm
- category = list("hacked", "Security")
-
-/datum/design/c45
- name = "Ammo Box (.45)"
- id = "c45"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 30000)
- build_path = /obj/item/ammo_box/c45
- category = list("hacked", "Security")
-
-/datum/design/c9mm
- name = "Ammo Box (9mm)"
- id = "c9mm"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 30000)
- build_path = /obj/item/ammo_box/c9mm
- category = list("hacked", "Security")
-
-/datum/design/cleaver
- name = "Butcher's Cleaver"
- id = "cleaver"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 18000)
- build_path = /obj/item/kitchen/knife/butcher
- category = list("hacked", "Dinnerware")
-
-/datum/design/spraycan
- name = "Spraycan"
- id = "spraycan"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 100, MAT_GLASS = 100)
- build_path = /obj/item/toy/crayon/spraycan
- category = list("initial", "Tools")
-
-/datum/design/desttagger
- name = "Destination Tagger"
- id = "desttagger"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 250, MAT_GLASS = 125)
- build_path = /obj/item/destTagger
- category = list("initial", "Electronics")
-
-/datum/design/handlabeler
- name = "Hand Labeler"
- id = "handlabel"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 150, MAT_GLASS = 125)
- build_path = /obj/item/hand_labeler
- category = list("initial", "Electronics")
-
-/datum/design/geiger
- name = "Geiger Counter"
- id = "geigercounter"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 150, MAT_GLASS = 150)
- build_path = /obj/item/geiger_counter
- category = list("initial", "Tools")
-
-/datum/design/turret_control_frame
- name = "Turret Control Frame"
- id = "turret_control"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 12000)
- build_path = /obj/item/wallframe/turret_control
- category = list("initial", "Construction")
-
-/datum/design/conveyor_belt
- name = "Conveyor Belt"
- id = "conveyor_belt"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 5000)
- build_path = /obj/item/conveyor_construct
- category = list("initial", "Construction")
-
-/datum/design/conveyor_switch
- name = "Conveyor Belt Switch"
- id = "conveyor_switch"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 450, MAT_GLASS = 190)
- build_path = /obj/item/conveyor_switch_construct
- category = list("initial", "Construction")
-
-/datum/design/laptop
- name = "Laptop Frame"
- id = "laptop"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 10000, MAT_GLASS = 1000)
- build_path = /obj/item/modular_computer/laptop/buildable
- category = list("initial","Misc")
-
-/datum/design/tablet
- name = "Tablet Frame"
- id = "tablet"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 2000, MAT_GLASS = 1000)
- build_path = /obj/item/modular_computer/tablet
- category = list("initial","Misc")
-
-/datum/design/slime_scanner
- name = "Slime Scanner"
- id = "slime_scanner"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 300, MAT_GLASS = 200)
- build_path = /obj/item/slime_scanner
- category = list("initial", "Misc")
-
-/datum/design/pet_carrier
- name = "Pet Carrier"
- id = "pet_carrier"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 7500, MAT_GLASS = 100)
- build_path = /obj/item/pet_carrier
- category = list("initial", "Misc")
-
-/datum/design/miniature_power_cell
- name = "Light Fixture Battery"
- id = "miniature_power_cell"
- build_type = AUTOLATHE
- materials = list(MAT_GLASS = 20)
- build_path = /obj/item/stock_parts/cell/emergency_light
- category = list("initial", "Electronics")
-
-/datum/design/packageWrap
- name = "Package Wrapping"
- id = "packagewrap"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 200, MAT_GLASS = 200)
- build_path = /obj/item/stack/packageWrap
- category = list("initial", "Misc")
- maxstack = 30
-
-/datum/design/holodisk
- name = "Holodisk"
- id = "holodisk"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 100, MAT_GLASS = 100)
- build_path = /obj/item/disk/holodisk
- category = list("initial", "Misc")
-
-/datum/design/lock_collar
- name = "Lockable Collar"
- id = "lock_collar"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 1200, MAT_GLASS = 100)
- build_path = /obj/item/clothing/neck/petcollar/locked
- category = list("initial", "Misc")
-
-/datum/design/collar_key
- name = "Collar Key"
- id = "collar_key"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 300, MAT_GLASS = 150)
- build_path = /obj/item/key/collar
- category = list("initial", "Misc")
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm
new file mode 100644
index 0000000000..1ae1d3813b
--- /dev/null
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm
@@ -0,0 +1,108 @@
+///////////////////////////////////
+//////////Autolathe Designs ///////
+///////////////////////////////////
+
+
+////////////////
+///Construction//
+////////////////
+
+/datum/design/rods
+ name = "Metal Rod"
+ id = "rods"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 1000)
+ build_path = /obj/item/stack/rods
+ category = list("initial","Construction")
+ maxstack = 50
+
+/datum/design/metal
+ name = "Metal"
+ id = "metal"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT)
+ build_path = /obj/item/stack/sheet/metal
+ category = list("initial","Construction")
+ maxstack = 50
+
+/datum/design/glass
+ name = "Glass"
+ id = "glass"
+ build_type = AUTOLATHE
+ materials = list(MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
+ build_path = /obj/item/stack/sheet/glass
+ category = list("initial","Construction")
+ maxstack = 50
+
+/datum/design/rglass
+ name = "Reinforced Glass"
+ id = "rglass"
+ build_type = AUTOLATHE | SMELTER | PROTOLATHE
+ materials = list(MAT_METAL = 1000, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
+ build_path = /obj/item/stack/sheet/rglass
+ category = list("initial","Construction","Stock Parts")
+ maxstack = 50
+
+/datum/design/light_tube
+ name = "Light Tube"
+ id = "light_tube"
+ build_type = AUTOLATHE
+ materials = list(MAT_GLASS = 100)
+ build_path = /obj/item/light/tube
+ category = list("initial", "Construction")
+
+/datum/design/light_bulb
+ name = "Light Bulb"
+ id = "light_bulb"
+ build_type = AUTOLATHE
+ materials = list(MAT_GLASS = 100)
+ build_path = /obj/item/light/bulb
+ category = list("initial", "Construction")
+
+/datum/design/camera_assembly
+ name = "Camera Assembly"
+ id = "camera_assembly"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 400, MAT_GLASS = 250)
+ build_path = /obj/item/wallframe/camera
+ category = list("initial", "Construction")
+
+/datum/design/newscaster_frame
+ name = "Newscaster Frame"
+ id = "newscaster_frame"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 14000, MAT_GLASS = 8000)
+ build_path = /obj/item/wallframe/newscaster
+ category = list("initial", "Construction")
+
+/datum/design/turret_control_frame
+ name = "Turret Control Frame"
+ id = "turret_control"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 12000)
+ build_path = /obj/item/wallframe/turret_control
+ category = list("initial", "Construction")
+
+/datum/design/conveyor_belt
+ name = "Conveyor Belt"
+ id = "conveyor_belt"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 5000)
+ build_path = /obj/item/conveyor_construct
+ category = list("initial", "Construction")
+
+/datum/design/conveyor_switch
+ name = "Conveyor Belt Switch"
+ id = "conveyor_switch"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 450, MAT_GLASS = 190)
+ build_path = /obj/item/conveyor_switch_construct
+ category = list("initial", "Construction")
+
+/datum/design/rcd_ammo
+ name = "Compressed Matter Cartridge"
+ id = "rcd_ammo"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 12000, MAT_GLASS=8000)
+ build_path = /obj/item/rcd_ammo
+ category = list("initial","Construction")
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_electronics.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_electronics.dm
new file mode 100644
index 0000000000..5b247efe74
--- /dev/null
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_electronics.dm
@@ -0,0 +1,76 @@
+///////////////////////////////////
+//////////Autolathe Designs ///////
+///////////////////////////////////
+
+////////////////
+///Electronics//
+////////////////
+
+/datum/design/apc_board
+ name = "APC Module"
+ id = "power control"
+ build_type = AUTOLATHE | PROTOLATHE
+ materials = list(MAT_METAL = 100, MAT_GLASS = 100)
+ build_path = /obj/item/electronics/apc
+ category = list("initial", "Electronics")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/airlock_board
+ name = "Airlock Electronics"
+ id = "airlock_board"
+ build_type = AUTOLATHE | PROTOLATHE
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50)
+ build_path = /obj/item/electronics/airlock
+ category = list("initial", "Electronics")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/firelock_board
+ name = "Firelock Circuitry"
+ id = "firelock_board"
+ build_type = AUTOLATHE | PROTOLATHE
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50)
+ build_path = /obj/item/electronics/firelock
+ category = list("initial", "Electronics")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/airalarm_electronics
+ name = "Air Alarm Electronics"
+ id = "airalarm_electronics"
+ build_type = AUTOLATHE | PROTOLATHE
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50)
+ build_path = /obj/item/electronics/airalarm
+ category = list("initial", "Electronics")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/firealarm_electronics
+ name = "Fire Alarm Electronics"
+ id = "firealarm_electronics"
+ build_type = AUTOLATHE | PROTOLATHE
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50)
+ build_path = /obj/item/electronics/firealarm
+ category = list("initial", "Electronics")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/desttagger
+ name = "Destination Tagger"
+ id = "desttagger"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 250, MAT_GLASS = 125)
+ build_path = /obj/item/destTagger
+ category = list("initial", "Electronics")
+
+/datum/design/handlabeler
+ name = "Hand Labeler"
+ id = "handlabel"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 150, MAT_GLASS = 125)
+ build_path = /obj/item/hand_labeler
+ category = list("initial", "Electronics")
+
+/datum/design/miniature_power_cell
+ name = "Light Fixture Battery"
+ id = "miniature_power_cell"
+ build_type = AUTOLATHE
+ materials = list(MAT_GLASS = 20)
+ build_path = /obj/item/stock_parts/cell/emergency_light
+ category = list("initial", "Electronics")
\ No newline at end of file
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm
new file mode 100644
index 0000000000..27852b2798
--- /dev/null
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm
@@ -0,0 +1,179 @@
+///////////////////////////////////
+//////////Autolathe Designs ///////
+///////////////////////////////////
+////////////////
+////Dinnerware//
+////////////////
+
+/datum/design/kitchen_knife
+ name = "Kitchen Knife"
+ id = "kitchen_knife"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 12000)
+ build_path = /obj/item/kitchen/knife
+ category = list("initial","Dinnerware")
+
+/datum/design/fork
+ name = "Fork"
+ id = "fork"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 80)
+ build_path = /obj/item/kitchen/fork
+ category = list("initial","Dinnerware")
+
+/datum/design/tray
+ name = "Tray"
+ id = "tray"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 3000)
+ build_path = /obj/item/storage/bag/tray
+ category = list("initial","Dinnerware")
+
+/datum/design/bowl
+ name = "Bowl"
+ id = "bowl"
+ build_type = AUTOLATHE
+ materials = list(MAT_GLASS = 500)
+ build_path = /obj/item/reagent_containers/glass/bowl
+ category = list("initial","Dinnerware")
+
+/datum/design/drinking_glass
+ name = "Drinking Glass"
+ id = "drinking_glass"
+ build_type = AUTOLATHE
+ materials = list(MAT_GLASS = 500)
+ build_path = /obj/item/reagent_containers/food/drinks/drinkingglass
+ category = list("initial","Dinnerware")
+
+/datum/design/shot_glass
+ name = "Shot Glass"
+ id = "shot_glass"
+ build_type = AUTOLATHE
+ materials = list(MAT_GLASS = 100)
+ build_path = /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass
+ category = list("initial","Dinnerware")
+
+/datum/design/shaker
+ name = "Shaker"
+ id = "shaker"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 1500)
+ build_path = /obj/item/reagent_containers/food/drinks/shaker
+ category = list("initial","Dinnerware")
+
+////////////
+///Medical//
+////////////
+
+/datum/design/scalpel
+ name = "Scalpel"
+ id = "scalpel"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 4000, MAT_GLASS = 1000)
+ build_path = /obj/item/scalpel
+ category = list("initial", "Medical")
+
+/datum/design/circular_saw
+ name = "Circular Saw"
+ id = "circular_saw"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 10000, MAT_GLASS = 6000)
+ build_path = /obj/item/circular_saw
+ category = list("initial", "Medical")
+
+/datum/design/surgicaldrill
+ name = "Surgical Drill"
+ id = "surgicaldrill"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 10000, MAT_GLASS = 6000)
+ build_path = /obj/item/surgicaldrill
+ category = list("initial", "Medical")
+
+/datum/design/retractor
+ name = "Retractor"
+ id = "retractor"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 6000, MAT_GLASS = 3000)
+ build_path = /obj/item/retractor
+ category = list("initial", "Medical")
+
+/datum/design/cautery
+ name = "Cautery"
+ id = "cautery"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 2500, MAT_GLASS = 750)
+ build_path = /obj/item/cautery
+ category = list("initial", "Medical")
+
+/datum/design/hemostat
+ name = "Hemostat"
+ id = "hemostat"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 5000, MAT_GLASS = 2500)
+ build_path = /obj/item/hemostat
+ category = list("initial", "Medical")
+
+/datum/design/beaker
+ name = "Beaker"
+ id = "beaker"
+ build_type = AUTOLATHE
+ materials = list(MAT_GLASS = 500)
+ build_path = /obj/item/reagent_containers/glass/beaker
+ category = list("initial", "Medical")
+
+/datum/design/large_beaker
+ name = "Large Beaker"
+ id = "large_beaker"
+ build_type = AUTOLATHE
+ materials = list(MAT_GLASS = 2500)
+ build_path = /obj/item/reagent_containers/glass/beaker/large
+ category = list("initial", "Medical")
+
+/datum/design/healthanalyzer
+ name = "Health Analyzer"
+ id = "healthanalyzer"
+ build_type = AUTOLATHE | PROTOLATHE
+ materials = list(MAT_METAL = 500, MAT_GLASS = 50)
+ build_path = /obj/item/healthanalyzer
+ category = list("initial", "Medical")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
+/datum/design/pillbottle
+ name = "Pill Bottle"
+ id = "pillbottle"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 20, MAT_GLASS = 100)
+ build_path = /obj/item/storage/pill_bottle
+ category = list("initial", "Medical")
+
+/datum/design/syringe
+ name = "Syringe"
+ id = "syringe"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 10, MAT_GLASS = 20)
+ build_path = /obj/item/reagent_containers/syringe
+ category = list("initial", "Medical")
+
+/datum/design/health_sensor
+ name = "Health Sensor"
+ id = "health_sensor"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 800, MAT_GLASS = 200)
+ build_path = /obj/item/assembly/health
+ category = list("initial", "Medical")
+
+/datum/design/hypovialsmall
+ name = "Hypovial"
+ id = "hypovial"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 500)
+ build_path = /obj/item/reagent_containers/glass/bottle/vial/small
+ category = list("initial","Medical")
+
+/datum/design/hypoviallarge
+ name = "Large Hypovial"
+ id = "large_hypovial"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 2500)
+ build_path = /obj/item/reagent_containers/glass/bottle/vial/large
+ category = list("initial","Medical")
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm
new file mode 100644
index 0000000000..e5e3a6bb4f
--- /dev/null
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm
@@ -0,0 +1,186 @@
+///////////////////////////////////
+//////////Autolathe Designs ///////
+///////////////////////////////////
+/////////////
+////Secgear//
+/////////////
+
+/datum/design/beanbag_slug
+ name = "Beanbag Slug"
+ id = "beanbag_slug"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 250)
+ build_path = /obj/item/ammo_casing/shotgun/beanbag
+ category = list("initial", "Security")
+
+/datum/design/rubbershot
+ name = "Rubber Shot"
+ id = "rubber_shot"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 4000)
+ build_path = /obj/item/ammo_casing/shotgun/rubbershot
+ category = list("initial", "Security")
+
+/datum/design/c38
+ name = "Speed Loader (.38 rubber)"
+ id = "c38"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 20000)
+ build_path = /obj/item/ammo_box/c38
+ category = list("initial", "Security")
+
+/////////////////
+///Hacked Gear //
+/////////////////
+
+/datum/design/large_welding_tool
+ name = "Industrial Welding Tool"
+ id = "large_welding_tool"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 70, MAT_GLASS = 60)
+ build_path = /obj/item/weldingtool/largetank
+ category = list("hacked", "Tools")
+
+/datum/design/flamethrower
+ name = "Flamethrower"
+ id = "flamethrower"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 500)
+ build_path = /obj/item/flamethrower/full
+ category = list("hacked", "Security")
+
+/datum/design/rcd
+ name = "Rapid Construction Device (RCD)"
+ id = "rcd"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 30000)
+ build_path = /obj/item/construction/rcd
+ category = list("hacked", "Construction")
+
+/datum/design/rpd
+ name = "Rapid Pipe Dispenser (RPD)"
+ id = "rpd"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 75000, MAT_GLASS = 37500)
+ build_path = /obj/item/pipe_dispenser
+ category = list("hacked", "Construction")
+
+/datum/design/handcuffs
+ name = "Handcuffs"
+ id = "handcuffs"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 500)
+ build_path = /obj/item/restraints/handcuffs
+ category = list("hacked", "Security")
+
+/datum/design/receiver
+ name = "Modular Receiver"
+ id = "receiver"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 15000)
+ build_path = /obj/item/weaponcrafting/receiver
+ category = list("hacked", "Security")
+
+/datum/design/shotgun_slug
+ name = "Shotgun Slug"
+ id = "shotgun_slug"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 4000)
+ build_path = /obj/item/ammo_casing/shotgun
+ category = list("hacked", "Security")
+
+/datum/design/buckshot_shell
+ name = "Buckshot Shell"
+ id = "buckshot_shell"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 4000)
+ build_path = /obj/item/ammo_casing/shotgun/buckshot
+ category = list("hacked", "Security")
+
+/datum/design/shotgun_dart
+ name = "Shotgun Dart"
+ id = "shotgun_dart"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 4000)
+ build_path = /obj/item/ammo_casing/shotgun/dart
+ category = list("hacked", "Security")
+
+/datum/design/incendiary_slug
+ name = "Incendiary Slug"
+ id = "incendiary_slug"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 4000)
+ build_path = /obj/item/ammo_casing/shotgun/incendiary
+ category = list("hacked", "Security")
+
+/datum/design/riot_dart
+ name = "Foam Riot Dart"
+ id = "riot_dart"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 1000) //Discount for making individually - no box = less metal!
+ build_path = /obj/item/ammo_casing/caseless/foam_dart/riot
+ category = list("hacked", "Security")
+
+/datum/design/riot_darts
+ name = "Foam Riot Dart Box"
+ id = "riot_darts"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 50000) //Comes with 40 darts
+ build_path = /obj/item/ammo_box/foambox/riot
+ category = list("hacked", "Security")
+
+/datum/design/a357
+ name = "Speed Loader (.357)"
+ id = "a357"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 30000)
+ build_path = /obj/item/ammo_box/a357
+ category = list("hacked", "Security")
+
+/datum/design/c10mm
+ name = "Ammo Box (10mm)"
+ id = "c10mm"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 30000)
+ build_path = /obj/item/ammo_box/c10mm
+ category = list("hacked", "Security")
+
+/datum/design/c45
+ name = "Ammo Box (.45)"
+ id = "c45"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 30000)
+ build_path = /obj/item/ammo_box/c45
+ category = list("hacked", "Security")
+
+/datum/design/c9mm
+ name = "Ammo Box (9mm)"
+ id = "c9mm"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 30000)
+ build_path = /obj/item/ammo_box/c9mm
+ category = list("hacked", "Security")
+
+/datum/design/electropack
+ name = "Electropack"
+ id = "electropack"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 10000, MAT_GLASS = 2500)
+ build_path = /obj/item/electropack
+ category = list("hacked", "Security")
+
+/datum/design/cleaver
+ name = "Butcher's Cleaver"
+ id = "cleaver"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 18000)
+ build_path = /obj/item/kitchen/knife/butcher
+ category = list("hacked", "Dinnerware")
+
+/datum/design/foilhat
+ name = "Tinfoil Hat"
+ id = "tinfoil_hat"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 5500)
+ build_path = /obj/item/clothing/head/foilhat
+ category = list("hacked", "Misc")
\ No newline at end of file
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_tcomms_and_misc.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_tcomms_and_misc.dm
new file mode 100644
index 0000000000..29d28b7132
--- /dev/null
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_tcomms_and_misc.dm
@@ -0,0 +1,251 @@
+///////////////////////////////////
+//////////Autolathe Designs ///////
+///////////////////////////////////
+/////////////
+////T-Comms//
+/////////////
+
+/datum/design/signaler
+ name = "Remote Signaling Device"
+ id = "signaler"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 400, MAT_GLASS = 120)
+ build_path = /obj/item/assembly/signaler
+ category = list("initial", "T-Comm")
+
+/datum/design/radio_headset
+ name = "Radio Headset"
+ id = "radio_headset"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 75)
+ build_path = /obj/item/radio/headset
+ category = list("initial", "T-Comm")
+
+/datum/design/bounced_radio
+ name = "Station Bounced Radio"
+ id = "bounced_radio"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 75, MAT_GLASS = 25)
+ build_path = /obj/item/radio/off
+ category = list("initial", "T-Comm")
+
+/datum/design/intercom_frame
+ name = "Intercom Frame"
+ id = "intercom_frame"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 75, MAT_GLASS = 25)
+ build_path = /obj/item/wallframe/intercom
+ category = list("initial", "T-Comm")
+
+/////////////
+////MISC/////
+/////////////
+
+/datum/design/camera
+ name = "Camera"
+ id = "camera"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 50, MAT_GLASS = 100)
+ build_path = /obj/item/camera
+ category = list("initial", "Misc")
+
+/datum/design/camera_film
+ name = "Camera Film Cartridge"
+ id = "camera_film"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 10, MAT_GLASS = 10)
+ build_path = /obj/item/camera_film
+ category = list("initial", "Misc")
+
+/datum/design/earmuffs
+ name = "Earmuffs"
+ id = "earmuffs"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 500, MAT_GLASS = 500)
+ build_path = /obj/item/clothing/ears/earmuffs
+ category = list("initial", "Misc")
+
+/datum/design/pipe_painter
+ name = "Pipe Painter"
+ id = "pipe_painter"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 5000, MAT_GLASS = 2000)
+ build_path = /obj/item/pipe_painter
+ category = list("initial", "Misc")
+
+/datum/design/airlock_painter
+ name = "Airlock Painter"
+ id = "airlock_painter"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 50, MAT_GLASS = 50)
+ build_path = /obj/item/airlock_painter
+ category = list("initial", "Misc")
+
+/datum/design/cultivator
+ name = "Cultivator"
+ id = "cultivator"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL=50)
+ build_path = /obj/item/cultivator
+ category = list("initial","Misc")
+
+/datum/design/plant_analyzer
+ name = "Plant Analyzer"
+ id = "plant_analyzer"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 30, MAT_GLASS = 20)
+ build_path = /obj/item/plant_analyzer
+ category = list("initial","Misc")
+
+/datum/design/shovel
+ name = "Shovel"
+ id = "shovel"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 50)
+ build_path = /obj/item/shovel
+ category = list("initial","Misc")
+
+/datum/design/spade
+ name = "Spade"
+ id = "spade"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 50)
+ build_path = /obj/item/shovel/spade
+ category = list("initial","Misc")
+
+/datum/design/hatchet
+ name = "Hatchet"
+ id = "hatchet"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 15000)
+ build_path = /obj/item/hatchet
+ category = list("initial","Misc")
+
+/datum/design/recorder
+ name = "Universal Recorder"
+ id = "recorder"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 60, MAT_GLASS = 30)
+ build_path = /obj/item/taperecorder/empty
+ category = list("initial", "Misc")
+
+/datum/design/tape
+ name = "Tape"
+ id = "tape"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 20, MAT_GLASS = 5)
+ build_path = /obj/item/tape/random
+ category = list("initial", "Misc")
+
+/datum/design/igniter
+ name = "Igniter"
+ id = "igniter"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 500, MAT_GLASS = 50)
+ build_path = /obj/item/assembly/igniter
+ category = list("initial", "Misc")
+
+/datum/design/infrared_emitter
+ name = "Infrared Emitter"
+ id = "infrared_emitter"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 1000, MAT_GLASS = 500)
+ build_path = /obj/item/assembly/infra
+ category = list("initial", "Misc")
+
+/datum/design/timer
+ name = "Timer"
+ id = "timer"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 500, MAT_GLASS = 50)
+ build_path = /obj/item/assembly/timer
+ category = list("initial", "Misc")
+
+/datum/design/voice_analyser
+ name = "Voice Analyser"
+ id = "voice_analyser"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 500, MAT_GLASS = 50)
+ build_path = /obj/item/assembly/voice
+ category = list("initial", "Misc")
+
+/datum/design/prox_sensor
+ name = "Proximity Sensor"
+ id = "prox_sensor"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 800, MAT_GLASS = 200)
+ build_path = /obj/item/assembly/prox_sensor
+ category = list("initial", "Misc")
+
+/datum/design/foam_dart
+ name = "Box of Foam Darts"
+ id = "foam_dart"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 500)
+ build_path = /obj/item/ammo_box/foambox
+ category = list("initial", "Misc")
+
+/datum/design/laptop
+ name = "Laptop Frame"
+ id = "laptop"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 10000, MAT_GLASS = 1000)
+ build_path = /obj/item/modular_computer/laptop/buildable
+ category = list("initial","Misc")
+
+/datum/design/tablet
+ name = "Tablet Frame"
+ id = "tablet"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 2000, MAT_GLASS = 1000)
+ build_path = /obj/item/modular_computer/tablet
+ category = list("initial","Misc")
+
+/datum/design/slime_scanner
+ name = "Slime Scanner"
+ id = "slime_scanner"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 300, MAT_GLASS = 200)
+ build_path = /obj/item/slime_scanner
+ category = list("initial", "Misc")
+
+/datum/design/pet_carrier
+ name = "Pet Carrier"
+ id = "pet_carrier"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 7500, MAT_GLASS = 100)
+ build_path = /obj/item/pet_carrier
+ category = list("initial", "Misc")
+
+/datum/design/packageWrap
+ name = "Package Wrapping"
+ id = "packagewrap"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 200, MAT_GLASS = 200)
+ build_path = /obj/item/stack/packageWrap
+ category = list("initial", "Misc")
+ maxstack = 30
+
+/datum/design/holodisk
+ name = "Holodisk"
+ id = "holodisk"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 100, MAT_GLASS = 100)
+ build_path = /obj/item/disk/holodisk
+ category = list("initial", "Misc")
+
+/datum/design/lock_collar
+ name = "Lockable Collar"
+ id = "lock_collar"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 1200, MAT_GLASS = 100)
+ build_path = /obj/item/clothing/neck/petcollar/locked
+ category = list("initial", "Misc")
+
+/datum/design/collar_key
+ name = "Collar Key"
+ id = "collar_key"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 300, MAT_GLASS = 150)
+ build_path = /obj/item/key/collar
+ category = list("initial", "Misc")
\ No newline at end of file
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm
new file mode 100644
index 0000000000..435af80aea
--- /dev/null
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm
@@ -0,0 +1,150 @@
+///////////////////////////////////
+//////////Autolathe Designs ///////
+///////////////////////////////////
+///////////
+///Tools //
+///////////
+/datum/design/bucket
+ name = "Bucket"
+ id = "bucket"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 200)
+ build_path = /obj/item/reagent_containers/glass/bucket
+ category = list("initial","Tools")
+
+/datum/design/crowbar
+ name = "Pocket Crowbar"
+ id = "crowbar"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 50)
+ build_path = /obj/item/crowbar
+ category = list("initial","Tools")
+
+/datum/design/flashlight
+ name = "Flashlight"
+ id = "flashlight"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 50, MAT_GLASS = 20)
+ build_path = /obj/item/flashlight
+ category = list("initial","Tools")
+
+/datum/design/extinguisher
+ name = "Fire Extinguisher"
+ id = "extinguisher"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 90)
+ build_path = /obj/item/extinguisher
+ category = list("initial","Tools")
+
+/datum/design/pocketfireextinguisher
+ name = "Pocket Fire Extinguisher"
+ id = "pocketfireextinguisher"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 50, MAT_GLASS = 40)
+ build_path = /obj/item/extinguisher/mini
+ category = list("initial","Tools")
+
+/datum/design/multitool
+ name = "Multitool"
+ id = "multitool"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 50, MAT_GLASS = 20)
+ build_path = /obj/item/multitool
+ category = list("initial","Tools")
+
+/datum/design/analyzer
+ name = "Analyzer"
+ id = "analyzer"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 30, MAT_GLASS = 20)
+ build_path = /obj/item/analyzer
+ category = list("initial","Tools")
+
+/datum/design/tscanner
+ name = "T-Ray Scanner"
+ id = "tscanner"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 150)
+ build_path = /obj/item/t_scanner
+ category = list("initial","Tools")
+
+/datum/design/weldingtool
+ name = "Welding Tool"
+ id = "welding_tool"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 70, MAT_GLASS = 20)
+ build_path = /obj/item/weldingtool
+ category = list("initial","Tools")
+
+/datum/design/mini_weldingtool
+ name = "Emergency Welding Tool"
+ id = "mini_welding_tool"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 30, MAT_GLASS = 10)
+ build_path = /obj/item/weldingtool/mini
+ category = list("initial","Tools")
+
+/datum/design/screwdriver
+ name = "Screwdriver"
+ id = "screwdriver"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 75)
+ build_path = /obj/item/screwdriver
+ category = list("initial","Tools")
+
+/datum/design/wirecutters
+ name = "Wirecutters"
+ id = "wirecutters"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 80)
+ build_path = /obj/item/wirecutters
+ category = list("initial","Tools")
+
+/datum/design/wrench
+ name = "Wrench"
+ id = "wrench"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 150)
+ build_path = /obj/item/wrench
+ category = list("initial","Tools")
+
+/datum/design/welding_helmet
+ name = "Welding Helmet"
+ id = "welding_helmet"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 1750, MAT_GLASS = 400)
+ build_path = /obj/item/clothing/head/welding
+ category = list("initial","Tools")
+
+/datum/design/cable_coil
+ name = "Cable Coil"
+ id = "cable_coil"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 10, MAT_GLASS = 5)
+ build_path = /obj/item/stack/cable_coil/random
+ category = list("initial","Tools")
+ maxstack = 30
+
+/datum/design/toolbox
+ name = "Toolbox"
+ id = "tool_box"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 500)
+ build_path = /obj/item/storage/toolbox
+ category = list("initial","Tools")
+
+/datum/design/spraycan
+ name = "Spraycan"
+ id = "spraycan"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 100, MAT_GLASS = 100)
+ build_path = /obj/item/toy/crayon/spraycan
+ category = list("initial", "Tools")
+
+/datum/design/geiger
+ name = "Geiger Counter"
+ id = "geigercounter"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 150, MAT_GLASS = 150)
+ build_path = /obj/item/geiger_counter
+ category = list("initial", "Tools")
\ No newline at end of file
diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm
index 3d48dd51ec..05e4c667f6 100644
--- a/code/modules/research/designs/biogenerator_designs.dm
+++ b/code/modules/research/designs/biogenerator_designs.dm
@@ -59,6 +59,14 @@
build_path = /obj/item/reagent_containers/food/snacks/monkeycube
category = list("initial", "Food")
+/datum/design/smeat
+ name = "Biomass Meat Slab"
+ id = "smeat"
+ build_type = BIOGENERATOR
+ materials = list(MAT_BIOMASS = 175)
+ build_path = /obj/item/reagent_containers/food/snacks/meat/slab/synthmeat
+ category = list("initial", "Food")
+
/datum/design/ez_nut
name = "E-Z Nutrient"
id = "ez_nut"
diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm
deleted file mode 100644
index 68aee66d62..0000000000
--- a/code/modules/research/designs/comp_board_designs.dm
+++ /dev/null
@@ -1,305 +0,0 @@
-///////////////////Computer Boards///////////////////////////////////
-
-/datum/design/board
- name = "Computer Design ( NULL ENTRY )"
- desc = "I promise this doesn't give you syndicate goodies!"
- build_type = IMPRINTER
- materials = list(MAT_GLASS = 1000)
-
-/datum/design/board/arcade_battle
- name = "Computer Design (Battle Arcade Machine)"
- desc = "Allows for the construction of circuit boards used to build a new arcade machine."
- id = "arcade_battle"
- build_path = /obj/item/circuitboard/computer/arcade/battle
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ALL
-
-/datum/design/board/orion_trail
- name = "Computer Design (Orion Trail Arcade Machine)"
- desc = "Allows for the construction of circuit boards used to build a new Orion Trail machine."
- id = "arcade_orion"
- build_path = /obj/item/circuitboard/computer/arcade/orion_trail
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ALL
-
-/datum/design/board/seccamera
- name = "Computer Design (Security Camera)"
- desc = "Allows for the construction of circuit boards used to build security camera computers."
- id = "seccamera"
- build_path = /obj/item/circuitboard/computer/security
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SECURITY
-
-/datum/design/board/rdcamera
- name = "Computer Design (Research Monitor)"
- desc = "Allows for the construction of circuit boards used to build research camera computers."
- id = "rdcamera"
- build_path = /obj/item/circuitboard/computer/research
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/xenobiocamera
- name = "Computer Design (Xenobiology Console)"
- desc = "Allows for the construction of circuit boards used to build xenobiology camera computers."
- id = "xenobioconsole"
- build_path = /obj/item/circuitboard/computer/xenobiology
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/aiupload
- name = "Computer Design (AI Upload)"
- desc = "Allows for the construction of circuit boards used to build an AI Upload Console."
- id = "aiupload"
- materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
- build_path = /obj/item/circuitboard/computer/aiupload
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/borgupload
- name = "Computer Design (Cyborg Upload)"
- desc = "Allows for the construction of circuit boards used to build a Cyborg Upload Console."
- id = "borgupload"
- materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
- build_path = /obj/item/circuitboard/computer/borgupload
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/med_data
- name = "Computer Design (Medical Records)"
- desc = "Allows for the construction of circuit boards used to build a medical records console."
- id = "med_data"
- build_path = /obj/item/circuitboard/computer/med_data
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-
-/datum/design/board/operating
- name = "Computer Design (Operating Computer)"
- desc = "Allows for the construction of circuit boards used to build an operating computer console."
- id = "operating"
- build_path = /obj/item/circuitboard/computer/operating
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/pandemic
- name = "Computer Design (PanD.E.M.I.C. 2200)"
- desc = "Allows for the construction of circuit boards used to build a PanD.E.M.I.C. 2200 console."
- id = "pandemic"
- build_path = /obj/item/circuitboard/computer/pandemic
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-
-/datum/design/board/scan_console
- name = "Computer Design (DNA Machine)"
- desc = "Allows for the construction of circuit boards used to build a new DNA scanning console."
- id = "scan_console"
- build_path = /obj/item/circuitboard/computer/scan_consolenew
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/comconsole
- name = "Computer Design (Communications)"
- desc = "Allows for the construction of circuit boards used to build a communications console."
- id = "comconsole"
- build_path = /obj/item/circuitboard/computer/communications
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SECURITY //Honestly should have a bridge techfab for this sometime.
-
-/datum/design/board/idcardconsole
- name = "Computer Design (ID Console)"
- desc = "Allows for the construction of circuit boards used to build an ID computer."
- id = "idcardconsole"
- build_path = /obj/item/circuitboard/computer/card
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SECURITY //Honestly should have a bridge techfab for this sometime.
-
-/datum/design/board/crewconsole
- name = "Computer Design (Crew monitoring computer)"
- desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer."
- id = "crewconsole"
- build_path = /obj/item/circuitboard/computer/crew
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
-
-/datum/design/board/secdata
- name = "Computer Design (Security Records Console)"
- desc = "Allows for the construction of circuit boards used to build a security records console."
- id = "secdata"
- build_path = /obj/item/circuitboard/computer/secure_data
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SECURITY
-
-/datum/design/board/atmosalerts
- name = "Computer Design (Atmosphere Alert)"
- desc = "Allows for the construction of circuit boards used to build an atmosphere alert console."
- id = "atmosalerts"
- build_path = /obj/item/circuitboard/computer/atmos_alert
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/atmos_control
- name = "Computer Design (Atmospheric Monitor)"
- desc = "Allows for the construction of circuit boards used to build an Atmospheric Monitor."
- id = "atmos_control"
- build_path = /obj/item/circuitboard/computer/atmos_control
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/robocontrol
- name = "Computer Design (Robotics Control Console)"
- desc = "Allows for the construction of circuit boards used to build a Robotics Control console."
- id = "robocontrol"
- build_path = /obj/item/circuitboard/computer/robotics
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/slot_machine
- name = "Computer Design (Slot Machine)"
- desc = "Allows for the construction of circuit boards used to build a new slot machine."
- id = "slotmachine"
- build_path = /obj/item/circuitboard/computer/slot_machine
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ALL
-
-/datum/design/board/powermonitor
- name = "Computer Design (Power Monitor)"
- desc = "Allows for the construction of circuit boards used to build a new power monitor."
- id = "powermonitor"
- build_path = /obj/item/circuitboard/computer/powermonitor
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/solarcontrol
- name = "Computer Design (Solar Control)"
- desc = "Allows for the construction of circuit boards used to build a solar control console."
- id = "solarcontrol"
- build_path = /obj/item/circuitboard/computer/solar_control
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/prisonmanage
- name = "Computer Design (Prisoner Management Console)"
- desc = "Allows for the construction of circuit boards used to build a prisoner management console."
- id = "prisonmanage"
- build_path = /obj/item/circuitboard/computer/prisoner
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SECURITY
-
-/datum/design/board/mechacontrol
- name = "Computer Design (Exosuit Control Console)"
- desc = "Allows for the construction of circuit boards used to build an exosuit control console."
- id = "mechacontrol"
- build_path = /obj/item/circuitboard/computer/mecha_control
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/mechapower
- name = "Computer Design (Mech Bay Power Control Console)"
- desc = "Allows for the construction of circuit boards used to build a mech bay power control console."
- id = "mechapower"
- build_path = /obj/item/circuitboard/computer/mech_bay_power_console
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/rdconsole
- name = "Computer Design (R&D Console)"
- desc = "Allows for the construction of circuit boards used to build a new R&D console."
- id = "rdconsole"
- build_path = /obj/item/circuitboard/computer/rdconsole
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/cargo
- name = "Computer Design (Supply Console)"
- desc = "Allows for the construction of circuit boards used to build a Supply Console."
- id = "cargo"
- build_path = /obj/item/circuitboard/computer/cargo
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_CARGO
-
-/datum/design/board/cargorequest
- name = "Computer Design (Supply Request Console)"
- desc = "Allows for the construction of circuit boards used to build a Supply Request Console."
- id = "cargorequest"
- build_path = /obj/item/circuitboard/computer/cargo/request
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_CARGO
-
-/datum/design/board/bounty
- name = "Computer Design (Bounty Console)"
- desc = "Allows for the construction of circuit boards used to build a Bounty Console."
- id = "bounty"
- build_path = /obj/item/circuitboard/computer/bounty
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_CARGO
-
-/datum/design/board/mining
- name = "Computer Design (Outpost Status Display)"
- desc = "Allows for the construction of circuit boards used to build an outpost status display console."
- id = "mining"
- build_path = /obj/item/circuitboard/computer/mining
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SECURITY
-
-/datum/design/board/comm_monitor
- name = "Computer Design (Telecommunications Monitoring Console)"
- desc = "Allows for the construction of circuit boards used to build a telecommunications monitor."
- id = "comm_monitor"
- build_path = /obj/item/circuitboard/computer/comm_monitor
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/comm_server
- name = "Computer Design (Telecommunications Server Monitoring Console)"
- desc = "Allows for the construction of circuit boards used to build a telecommunication server browser and monitor."
- id = "comm_server"
- build_path = /obj/item/circuitboard/computer/comm_server
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/message_monitor
- name = "Computer Design (Messaging Monitor Console)"
- desc = "Allows for the construction of circuit boards used to build a messaging monitor console."
- id = "message_monitor"
- build_path = /obj/item/circuitboard/computer/message_monitor
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/aifixer
- name = "Computer Design (AI Integrity Restorer)"
- desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer."
- id = "aifixer"
- build_path = /obj/item/circuitboard/computer/aifixer
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/libraryconsole
- name = "Computer Design (Library Console)"
- desc = "Allows for the construction of circuit boards used to build a new library console."
- id = "libraryconsole"
- build_path = /obj/item/circuitboard/computer/libraryconsole
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ALL
-
-/datum/design/board/apc_control
- name = "Computer Design (APC Control)"
- desc = "Allows for the construction of circuit boards used to build a new APC control console."
- id = "apc_control"
- build_path = /obj/item/circuitboard/computer/apc_control
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/nanite_chamber_control
- name = "Computer Design (Nanite Chamber Control)"
- desc = "Allows for the construction of circuit boards used to build a new nanite chamber control console."
- id = "nanite_chamber_control"
- build_path = /obj/item/circuitboard/computer/nanite_chamber_control
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/nanite_cloud_control
- name = "Computer Design (Nanite Cloud Control)"
- desc = "Allows for the construction of circuit boards used to build a new nanite cloud control console."
- id = "nanite_cloud_control"
- build_path = /obj/item/circuitboard/computer/nanite_cloud_controller
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
diff --git a/code/modules/research/designs/comp_board_designs/comp_board_designs_all_misc.dm b/code/modules/research/designs/comp_board_designs/comp_board_designs_all_misc.dm
new file mode 100644
index 0000000000..780a1bc97d
--- /dev/null
+++ b/code/modules/research/designs/comp_board_designs/comp_board_designs_all_misc.dm
@@ -0,0 +1,38 @@
+///////////////////Computer Boards///////////////////////////////////
+/datum/design/board
+ name = "Computer Design ( NULL ENTRY )"
+ desc = "A blank compurter board!"
+ build_type = IMPRINTER
+ materials = list(MAT_GLASS = 1000)
+
+/datum/design/board/arcade_battle
+ name = "Computer Design (Battle Arcade Machine)"
+ desc = "Allows for the construction of circuit boards used to build a new arcade machine."
+ id = "arcade_battle"
+ build_path = /obj/item/circuitboard/computer/arcade/battle
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/board/orion_trail
+ name = "Computer Design (Orion Trail Arcade Machine)"
+ desc = "Allows for the construction of circuit boards used to build a new Orion Trail machine."
+ id = "arcade_orion"
+ build_path = /obj/item/circuitboard/computer/arcade/orion_trail
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/board/slot_machine
+ name = "Computer Design (Slot Machine)"
+ desc = "Allows for the construction of circuit boards used to build a new slot machine."
+ id = "slotmachine"
+ build_path = /obj/item/circuitboard/computer/slot_machine
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/board/libraryconsole
+ name = "Computer Design (Library Console)"
+ desc = "Allows for the construction of circuit boards used to build a new library console."
+ id = "libraryconsole"
+ build_path = /obj/item/circuitboard/computer/libraryconsole
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
\ No newline at end of file
diff --git a/code/modules/research/designs/comp_board_designs/comp_board_designs_cargo .dm b/code/modules/research/designs/comp_board_designs/comp_board_designs_cargo .dm
new file mode 100644
index 0000000000..fd548adc76
--- /dev/null
+++ b/code/modules/research/designs/comp_board_designs/comp_board_designs_cargo .dm
@@ -0,0 +1,35 @@
+///////////////////
+///CARGO Boards////
+///////////////////
+
+/datum/design/board/cargo
+ name = "Computer Design (Supply Console)"
+ desc = "Allows for the construction of circuit boards used to build a Supply Console."
+ id = "cargo"
+ build_path = /obj/item/circuitboard/computer/cargo
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_CARGO
+
+/datum/design/board/cargorequest
+ name = "Computer Design (Supply Request Console)"
+ desc = "Allows for the construction of circuit boards used to build a Supply Request Console."
+ id = "cargorequest"
+ build_path = /obj/item/circuitboard/computer/cargo/request
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_CARGO
+
+/datum/design/board/bounty
+ name = "Computer Design (Bounty Console)"
+ desc = "Allows for the construction of circuit boards used to build a Bounty Console."
+ id = "bounty"
+ build_path = /obj/item/circuitboard/computer/bounty
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_CARGO
+
+/datum/design/board/mining
+ name = "Computer Design (Outpost Status Display)"
+ desc = "Allows for the construction of circuit boards used to build an outpost status display console."
+ id = "mining"
+ build_path = /obj/item/circuitboard/computer/mining
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SECURITY
\ No newline at end of file
diff --git a/code/modules/research/designs/comp_board_designs/comp_board_designs_engi.dm b/code/modules/research/designs/comp_board_designs/comp_board_designs_engi.dm
new file mode 100644
index 0000000000..5767588178
--- /dev/null
+++ b/code/modules/research/designs/comp_board_designs/comp_board_designs_engi.dm
@@ -0,0 +1,75 @@
+///////////////////
+///ENGINE Boards///
+///////////////////
+
+/datum/design/board/comm_monitor
+ name = "Computer Design (Telecommunications Monitoring Console)"
+ desc = "Allows for the construction of circuit boards used to build a telecommunications monitor."
+ id = "comm_monitor"
+ build_path = /obj/item/circuitboard/computer/comm_monitor
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/comm_server
+ name = "Computer Design (Telecommunications Server Monitoring Console)"
+ desc = "Allows for the construction of circuit boards used to build a telecommunication server browser and monitor."
+ id = "comm_server"
+ build_path = /obj/item/circuitboard/computer/comm_server
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/message_monitor
+ name = "Computer Design (Messaging Monitor Console)"
+ desc = "Allows for the construction of circuit boards used to build a messaging monitor console."
+ id = "message_monitor"
+ build_path = /obj/item/circuitboard/computer/message_monitor
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/apc_control
+ name = "Computer Design (APC Control)"
+ desc = "Allows for the construction of circuit boards used to build a new APC control console."
+ id = "apc_control"
+ build_path = /obj/item/circuitboard/computer/apc_control
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/meteor_console
+ name = "Computer Design (Meteor Satellite Console)"
+ desc = "Allows for the construction of circuit boards used to build a new Meteor Satellite monitor console."
+ id = "meteor_console"
+ build_path = /obj/item/circuitboard/computer/sat_control
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/atmosalerts
+ name = "Computer Design (Atmosphere Alert)"
+ desc = "Allows for the construction of circuit boards used to build an atmosphere alert console."
+ id = "atmosalerts"
+ build_path = /obj/item/circuitboard/computer/atmos_alert
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/atmos_control
+ name = "Computer Design (Atmospheric Monitor)"
+ desc = "Allows for the construction of circuit boards used to build an Atmospheric Monitor."
+ id = "atmos_control"
+ build_path = /obj/item/circuitboard/computer/atmos_control
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/powermonitor
+ name = "Computer Design (Power Monitor)"
+ desc = "Allows for the construction of circuit boards used to build a new power monitor."
+ id = "powermonitor"
+ build_path = /obj/item/circuitboard/computer/powermonitor
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/solarcontrol
+ name = "Computer Design (Solar Control)"
+ desc = "Allows for the construction of circuit boards used to build a solar control console."
+ id = "solarcontrol"
+ build_path = /obj/item/circuitboard/computer/solar_control
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
\ No newline at end of file
diff --git a/code/modules/research/designs/comp_board_designs/comp_board_designs_medical.dm b/code/modules/research/designs/comp_board_designs/comp_board_designs_medical.dm
new file mode 100644
index 0000000000..05632fad69
--- /dev/null
+++ b/code/modules/research/designs/comp_board_designs/comp_board_designs_medical.dm
@@ -0,0 +1,43 @@
+///////////////////
+///MEDICAL Boards//
+///////////////////
+
+/datum/design/board/pandemic
+ name = "Computer Design (PanD.E.M.I.C. 2200)"
+ desc = "Allows for the construction of circuit boards used to build a PanD.E.M.I.C. 2200 console."
+ id = "pandemic"
+ build_path = /obj/item/circuitboard/computer/pandemic
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
+/datum/design/board/operating
+ name = "Computer Design (Operating Computer)"
+ desc = "Allows for the construction of circuit boards used to build an operating computer console."
+ id = "operating"
+ build_path = /obj/item/circuitboard/computer/operating
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/scan_console
+ name = "Computer Design (DNA Machine)"
+ desc = "Allows for the construction of circuit boards used to build a new DNA scanning console."
+ id = "scan_console"
+ build_path = /obj/item/circuitboard/computer/scan_consolenew
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/crewconsole
+ name = "Computer Design (Crew monitoring computer)"
+ desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer."
+ id = "crewconsole"
+ build_path = /obj/item/circuitboard/computer/crew
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SECURITY
+
+/datum/design/board/med_data
+ name = "Computer Design (Medical Records)"
+ desc = "Allows for the construction of circuit boards used to build a medical records console."
+ id = "med_data"
+ build_path = /obj/item/circuitboard/computer/med_data
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SECURITY
diff --git a/code/modules/research/designs/comp_board_designs/comp_board_designs_sci.dm b/code/modules/research/designs/comp_board_designs/comp_board_designs_sci.dm
new file mode 100644
index 0000000000..e0b0a22be6
--- /dev/null
+++ b/code/modules/research/designs/comp_board_designs/comp_board_designs_sci.dm
@@ -0,0 +1,93 @@
+///////////////////
+///SCI Boards//////
+///////////////////
+
+/datum/design/board/rdcamera
+ name = "Computer Design (Research Monitor)"
+ desc = "Allows for the construction of circuit boards used to build research camera computers."
+ id = "rdcamera"
+ build_path = /obj/item/circuitboard/computer/research
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/xenobiocamera
+ name = "Computer Design (Xenobiology Console)"
+ desc = "Allows for the construction of circuit boards used to build xenobiology camera computers."
+ id = "xenobioconsole"
+ build_path = /obj/item/circuitboard/computer/xenobiology
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/aiupload
+ name = "Computer Design (AI Upload)"
+ desc = "Allows for the construction of circuit boards used to build an AI Upload Console."
+ id = "aiupload"
+ materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
+ build_path = /obj/item/circuitboard/computer/aiupload
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/borgupload
+ name = "Computer Design (Cyborg Upload)"
+ desc = "Allows for the construction of circuit boards used to build a Cyborg Upload Console."
+ id = "borgupload"
+ materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
+ build_path = /obj/item/circuitboard/computer/borgupload
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/robocontrol
+ name = "Computer Design (Robotics Control Console)"
+ desc = "Allows for the construction of circuit boards used to build a Robotics Control console."
+ id = "robocontrol"
+ build_path = /obj/item/circuitboard/computer/robotics
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/mechacontrol
+ name = "Computer Design (Exosuit Control Console)"
+ desc = "Allows for the construction of circuit boards used to build an exosuit control console."
+ id = "mechacontrol"
+ build_path = /obj/item/circuitboard/computer/mecha_control
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/mechapower
+ name = "Computer Design (Mech Bay Power Control Console)"
+ desc = "Allows for the construction of circuit boards used to build a mech bay power control console."
+ id = "mechapower"
+ build_path = /obj/item/circuitboard/computer/mech_bay_power_console
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/rdconsole
+ name = "Computer Design (R&D Console)"
+ desc = "Allows for the construction of circuit boards used to build a new R&D console."
+ id = "rdconsole"
+ build_path = /obj/item/circuitboard/computer/rdconsole
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/nanite_chamber_control
+ name = "Computer Design (Nanite Chamber Control)"
+ desc = "Allows for the construction of circuit boards used to build a new nanite chamber control console."
+ id = "nanite_chamber_control"
+ build_path = /obj/item/circuitboard/computer/nanite_chamber_control
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/nanite_cloud_control
+ name = "Computer Design (Nanite Cloud Control)"
+ desc = "Allows for the construction of circuit boards used to build a new nanite cloud control console."
+ id = "nanite_cloud_control"
+ build_path = /obj/item/circuitboard/computer/nanite_cloud_controller
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/aifixer
+ name = "Computer Design (AI Integrity Restorer)"
+ desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer."
+ id = "aifixer"
+ build_path = /obj/item/circuitboard/computer/aifixer
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
\ No newline at end of file
diff --git a/code/modules/research/designs/comp_board_designs/comp_board_designs_sec.dm b/code/modules/research/designs/comp_board_designs/comp_board_designs_sec.dm
new file mode 100644
index 0000000000..0e93481f66
--- /dev/null
+++ b/code/modules/research/designs/comp_board_designs/comp_board_designs_sec.dm
@@ -0,0 +1,43 @@
+///////////////////
+///SECURITY Boards/
+///////////////////
+
+/datum/design/board/seccamera
+ name = "Computer Design (Security Camera)"
+ desc = "Allows for the construction of circuit boards used to build security camera computers."
+ id = "seccamera"
+ build_path = /obj/item/circuitboard/computer/security
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
+/datum/design/board/secdata
+ name = "Computer Design (Security Records Console)"
+ desc = "Allows for the construction of circuit boards used to build a security records console."
+ id = "secdata"
+ build_path = /obj/item/circuitboard/computer/secure_data
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
+/datum/design/board/prisonmanage
+ name = "Computer Design (Prisoner Management Console)"
+ desc = "Allows for the construction of circuit boards used to build a prisoner management console."
+ id = "prisonmanage"
+ build_path = /obj/item/circuitboard/computer/prisoner
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
+/datum/design/board/comconsole
+ name = "Computer Design (Communications)"
+ desc = "Allows for the construction of circuit boards used to build a communications console."
+ id = "comconsole"
+ build_path = /obj/item/circuitboard/computer/communications
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_ENGINEERING //Honestly should have a bridge techfab for this sometime.
+
+/datum/design/board/idcardconsole
+ name = "Computer Design (ID Console)"
+ desc = "Allows for the construction of circuit boards used to build an ID computer."
+ id = "idcardconsole"
+ build_path = /obj/item/circuitboard/computer/card
+ category = list("Computer Boards")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_ENGINEERING //Honestly should have a bridge techfab for this sometime.
diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm
deleted file mode 100644
index 93dfd3d2bb..0000000000
--- a/code/modules/research/designs/machine_designs.dm
+++ /dev/null
@@ -1,572 +0,0 @@
-////////////////////////////////////////
-//////////////MISC Boards///////////////
-////////////////////////////////////////
-
-/datum/design/board/smes
- name = "Machine Design (SMES Board)"
- desc = "The circuit board for a SMES."
- id = "smes"
- build_path = /obj/item/circuitboard/machine/smes
- category = list ("Engineering Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/circulator
- name = "Machine Design (Circulator Board)"
- desc = "The circuit board for a circulator."
- id = "circulator"
- build_path = /obj/item/circuitboard/machine/circulator
- category = list ("Engineering Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/teg
- name = "Machine Design (TEG Board)"
- desc = "The circuit board for a TEG."
- id = "teg"
- build_path = /obj/item/circuitboard/machine/generator
- category = list ("Engineering Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/announcement_system
- name = "Machine Design (Automated Announcement System Board)"
- desc = "The circuit board for an automated announcement system."
- id = "automated_announcement"
- build_path = /obj/item/circuitboard/machine/announcement_system
- category = list("Subspace Telecomms")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/turbine_computer
- name = "Computer Design (Power Turbine Console Board)"
- desc = "The circuit board for a power turbine console."
- id = "power_turbine_console"
- build_path = /obj/item/circuitboard/computer/turbine_computer
- category = list ("Engineering Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/emitter
- name = "Machine Design (Emitter Board)"
- desc = "The circuit board for an emitter."
- id = "emitter"
- build_path = /obj/item/circuitboard/machine/emitter
- category = list ("Engineering Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/power_compressor
- name = "Machine Design (Power Compressor Board)"
- desc = "The circuit board for a power compressor."
- id = "power_compressor"
- build_path = /obj/item/circuitboard/machine/power_compressor
- category = list ("Engineering Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/power_turbine
- name = "Machine Design (Power Turbine Board)"
- desc = "The circuit board for a power turbine."
- id = "power_turbine"
- build_path = /obj/item/circuitboard/machine/power_turbine
- category = list ("Engineering Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/thermomachine
- name = "Machine Design (Freezer/Heater Board)"
- desc = "The circuit board for a freezer/heater."
- id = "thermomachine"
- build_path = /obj/item/circuitboard/machine/thermomachine
- category = list ("Engineering Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/space_heater
- name = "Machine Design (Space Heater Board)"
- desc = "The circuit board for a space heater."
- id = "space_heater"
- build_path = /obj/item/circuitboard/machine/space_heater
- category = list ("Engineering Machinery")
- departmental_flags = ALL
-
-/datum/design/board/teleport_station
- name = "Machine Design (Teleportation Station Board)"
- desc = "The circuit board for a teleportation station."
- id = "tele_station"
- build_path = /obj/item/circuitboard/machine/teleporter_station
- category = list ("Teleportation Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/teleport_hub
- name = "Machine Design (Teleportation Hub Board)"
- desc = "The circuit board for a teleportation hub."
- id = "tele_hub"
- build_path = /obj/item/circuitboard/machine/teleporter_hub
- category = list ("Teleportation Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/quantumpad
- name = "Machine Design (Quantum Pad Board)"
- desc = "The circuit board for a quantum telepad."
- id = "quantumpad"
- build_path = /obj/item/circuitboard/machine/quantumpad
- category = list ("Teleportation Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/launchpad
- name = "Machine Design (Bluespace Launchpad Board)"
- desc = "The circuit board for a bluespace Launchpad."
- id = "launchpad"
- build_path = /obj/item/circuitboard/machine/launchpad
- category = list ("Teleportation Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/launchpad_console
- name = "Machine Design (Bluespace Launchpad Console Board)"
- desc = "The circuit board for a bluespace launchpad Console."
- id = "launchpad_console"
- build_path = /obj/item/circuitboard/computer/launchpad_console
- category = list ("Teleportation Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/teleconsole
- name = "Computer Design (Teleporter Console)"
- desc = "Allows for the construction of circuit boards used to build a teleporter control console."
- id = "teleconsole"
- build_path = /obj/item/circuitboard/computer/teleporter
- category = list("Teleportation Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/sleeper
- name = "Machine Design (Sleeper Board)"
- desc = "The circuit board for a sleeper."
- id = "sleeper"
- build_path = /obj/item/circuitboard/machine/sleeper
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL
- category = list ("Medical Machinery")
-
-/datum/design/board/vr_sleeper
- name = "Machine Design (VR Sleeper Board)"
- desc = "The circuit board for a VR sleeper."
- id = "vr_sleeper"
- build_path = /obj/item/circuitboard/machine/vr_sleeper
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
- category = list ("Medical Machinery")
-
-/datum/design/board/cryotube
- name = "Machine Design (Cryotube Board)"
- desc = "The circuit board for a cryotube."
- id = "cryotube"
- build_path = /obj/item/circuitboard/machine/cryo_tube
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL
- category = list ("Medical Machinery")
-
-/datum/design/board/chem_dispenser
- name = "Machine Design (Portable Chem Dispenser Board)"
- desc = "The circuit board for a portable chem dispenser."
- id = "chem_dispenser"
- build_path = /obj/item/circuitboard/machine/chem_dispenser
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL
- category = list ("Medical Machinery")
-
-/datum/design/board/chem_master
- name = "Machine Design (Chem Master Board)"
- desc = "The circuit board for a Chem Master 3000."
- id = "chem_master"
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL
- build_path = /obj/item/circuitboard/machine/chem_master
- category = list ("Medical Machinery")
-
-/datum/design/board/chem_heater
- name = "Machine Design (Chemical Heater Board)"
- desc = "The circuit board for a chemical heater."
- id = "chem_heater"
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL
- build_path = /obj/item/circuitboard/machine/chem_heater
- category = list ("Medical Machinery")
-
-/datum/design/board/smoke_machine
- name = "Machine Design (Smoke Machine)"
- desc = "The circuit board for a smoke machine."
- id = "smoke_machine"
- build_path = /obj/item/circuitboard/machine/smoke_machine
- category = list ("Medical Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-
-/datum/design/board/reagentgrinder
- name = "Machine Design (All-In-One Grinder)"
- desc = "The circuit board for an All-In-One Grinder."
- id = "reagentgrinder"
- build_path = /obj/item/circuitboard/machine/reagentgrinder
- category = list ("Medical Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ALL
-
-/datum/design/board/clonecontrol
- name = "Computer Design (Cloning Machine Console)"
- desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console."
- id = "clonecontrol"
- build_path = /obj/item/circuitboard/computer/cloning
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
- category = list("Medical Machinery")
-
-/datum/design/board/clonepod
- name = "Machine Design (Clone Pod)"
- desc = "Allows for the construction of circuit boards used to build a Cloning Pod."
- id = "clonepod"
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
- build_path = /obj/item/circuitboard/machine/clonepod
- category = list("Medical Machinery")
-
-/datum/design/board/clonescanner
- name = "Machine Design (Cloning Scanner)"
- desc = "Allows for the construction of circuit boards used to build a Cloning Scanner."
- id = "clonescanner"
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
- build_path = /obj/item/circuitboard/machine/clonescanner
- category = list("Medical Machinery")
-
-/datum/design/board/biogenerator
- name = "Machine Design (Biogenerator Board)"
- desc = "The circuit board for a biogenerator."
- id = "biogenerator"
- build_path = /obj/item/circuitboard/machine/biogenerator
- category = list ("Hydroponics Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SERVICE
-
-/datum/design/board/hydroponics
- name = "Machine Design (Hydroponics Tray Board)"
- desc = "The circuit board for a hydroponics tray."
- id = "hydro_tray"
- build_path = /obj/item/circuitboard/machine/hydroponics
- category = list ("Hydroponics Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SERVICE
-
-/datum/design/board/destructive_analyzer
- name = "Machine Design (Destructive Analyzer Board)"
- desc = "The circuit board for a destructive analyzer."
- id = "destructive_analyzer"
- build_path = /obj/item/circuitboard/machine/destructive_analyzer
- category = list("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/experimentor
- name = "Machine Design (E.X.P.E.R.I-MENTOR Board)"
- desc = "The circuit board for an E.X.P.E.R.I-MENTOR."
- id = "experimentor"
- build_path = /obj/item/circuitboard/machine/experimentor
- category = list("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/protolathe
- name = "Machine Design (Protolathe Board)"
- desc = "The circuit board for a protolathe."
- id = "protolathe"
- build_path = /obj/item/circuitboard/machine/protolathe
- category = list("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/circuit_imprinter
- name = "Machine Design (Circuit Imprinter Board)"
- desc = "The circuit board for a circuit imprinter."
- id = "circuit_imprinter"
- build_path = /obj/item/circuitboard/machine/circuit_imprinter
- category = list("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/rdservercontrol
- name = "Computer Design (R&D Server Control Console Board)"
- desc = "The circuit board for an R&D Server Control Console."
- id = "rdservercontrol"
- build_path = /obj/item/circuitboard/computer/rdservercontrol
- category = list("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/rdserver
- name = "Machine Design (R&D Server Board)"
- desc = "The circuit board for an R&D Server."
- id = "rdserver"
- build_path = /obj/item/circuitboard/machine/rdserver
- category = list("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/mechfab
- name = "Machine Design (Exosuit Fabricator Board)"
- desc = "The circuit board for an Exosuit Fabricator."
- id = "mechfab"
- build_path = /obj/item/circuitboard/machine/mechfab
- category = list("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/cyborgrecharger
- name = "Machine Design (Cyborg Recharger Board)"
- desc = "The circuit board for a Cyborg Recharger."
- id = "cyborgrecharger"
- build_path = /obj/item/circuitboard/machine/cyborgrecharger
- category = list("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/mech_recharger
- name = "Machine Design (Mechbay Recharger Board)"
- desc = "The circuit board for a Mechbay Recharger."
- id = "mech_recharger"
- build_path = /obj/item/circuitboard/machine/mech_recharger
- category = list("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/nanite_chamber
- name = "Machine Design (Nanite Chamber Board)"
- desc = "The circuit board for a Nanite Chamber."
- id = "nanite_chamber"
- build_path = /obj/item/circuitboard/machine/nanite_chamber
- category = list("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/public_nanite_chamber
- name = "Machine Design (Public Nanite Chamber Board)"
- desc = "The circuit board for a Public Nanite Chamber."
- id = "public_nanite_chamber"
- build_path = /obj/item/circuitboard/machine/public_nanite_chamber
- category = list("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/nanite_programmer
- name = "Machine Design (Nanite Programmer Board)"
- desc = "The circuit board for a Nanite Programmer."
- id = "nanite_programmer"
- build_path = /obj/item/circuitboard/machine/nanite_programmer
- category = list("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/nanite_program_hub
- name = "Machine Design (Nanite Program Hub Board)"
- desc = "The circuit board for a Nanite Program Hub."
- id = "nanite_program_hub"
- build_path = /obj/item/circuitboard/machine/nanite_program_hub
- category = list("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/microwave
- name = "Machine Design (Microwave Board)"
- desc = "The circuit board for a microwave."
- id = "microwave"
- build_path = /obj/item/circuitboard/machine/microwave
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ALL
-
-/datum/design/board/gibber
- name = "Machine Design (Gibber Board)"
- desc = "The circuit board for a gibber."
- id = "gibber"
- build_path = /obj/item/circuitboard/machine/gibber
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SERVICE
-
-/datum/design/board/smartfridge
- name = "Machine Design (Smartfridge Board)"
- desc = "The circuit board for a smartfridge."
- id = "smartfridge"
- build_path = /obj/item/circuitboard/machine/smartfridge
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ALL
-
-/datum/design/board/monkey_recycler
- name = "Machine Design (Monkey Recycler Board)"
- desc = "The circuit board for a monkey recycler."
- id = "monkey_recycler"
- build_path = /obj/item/circuitboard/machine/monkey_recycler
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SERVICE
-
-/datum/design/board/seed_extractor
- name = "Machine Design (Seed Extractor Board)"
- desc = "The circuit board for a seed extractor."
- id = "seed_extractor"
- build_path = /obj/item/circuitboard/machine/seed_extractor
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SERVICE
-
-/datum/design/board/processor
- name = "Machine Design (Food/Slime Processor Board)"
- desc = "The circuit board for a processing unit. Screwdriver the circuit to switch between food (default) or slime processing."
- id = "processor"
- build_path = /obj/item/circuitboard/machine/processor
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SERVICE
-
-/datum/design/board/soda_dispenser
- name = "Machine Design (Portable Soda Dispenser Board)"
- desc = "The circuit board for a portable soda dispenser."
- id = "soda_dispenser"
- build_path = /obj/item/circuitboard/machine/chem_dispenser/drinks
- departmental_flags = DEPARTMENTAL_FLAG_SERVICE
- category = list ("Misc. Machinery")
-
-/datum/design/board/beer_dispenser
- name = "Machine Design (Portable Booze Dispenser Board)"
- desc = "The circuit board for a portable booze dispenser."
- id = "beer_dispenser"
- build_path = /obj/item/circuitboard/machine/chem_dispenser/drinks/beer
- departmental_flags = DEPARTMENTAL_FLAG_SERVICE
- category = list ("Misc. Machinery")
-
-/datum/design/board/recycler
- name = "Machine Design (Recycler Board)"
- desc = "The circuit board for a recycler."
- id = "recycler"
- build_path = /obj/item/circuitboard/machine/recycler
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ALL
-
-/datum/design/board/holopad
- name = "Machine Design (AI Holopad Board)"
- desc = "The circuit board for a holopad."
- id = "holopad"
- build_path = /obj/item/circuitboard/machine/holopad
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ALL
-
-/datum/design/board/autolathe
- name = "Machine Design (Autolathe Board)"
- desc = "The circuit board for an autolathe."
- id = "autolathe"
- build_path = /obj/item/circuitboard/machine/autolathe
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ALL //Lets be honest here half the maps have public ones.
-
-/datum/design/board/recharger
- name = "Machine Design (Weapon Recharger Board)"
- desc = "The circuit board for a Weapon Recharger."
- id = "recharger"
- materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
- build_path = /obj/item/circuitboard/machine/recharger
- category = list("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ALL
-
-/datum/design/board/vendor
- name = "Machine Design (Vendor Board)"
- desc = "The circuit board for a Vendor."
- id = "vendor"
- build_path = /obj/item/circuitboard/machine/vendor
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ALL
-
-/datum/design/board/ore_redemption
- name = "Machine Design (Ore Redemption Board)"
- desc = "The circuit board for an Ore Redemption machine."
- id = "ore_redemption"
- build_path = /obj/item/circuitboard/machine/ore_redemption
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/mining_equipment_vendor
- name = "Machine Design (Mining Rewards Vender Board)"
- desc = "The circuit board for a Mining Rewards Vender."
- id = "mining_equipment_vendor"
- build_path = /obj/item/circuitboard/machine/mining_equipment_vendor
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO
-
-/datum/design/board/tesla_coil
- name = "Machine Design (Tesla Coil Board)"
- desc = "The circuit board for a tesla coil."
- id = "tesla_coil"
- build_path = /obj/item/circuitboard/machine/tesla_coil
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/rad_collector
- name = "Machine Design (Radiation Collector Board)"
- desc = "The circuit board for a radiation collector array."
- id = "rad_collector"
- build_path = /obj/item/circuitboard/machine/rad_collector
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/grounding_rod
- name = "Machine Design (Grounding Rod Board)"
- desc = "The circuit board for a grounding rod."
- id = "grounding_rod"
- build_path = /obj/item/circuitboard/machine/grounding_rod
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/plantgenes
- name = "Machine Design (Plant DNA Manipulator Board)"
- desc = "The circuit board for a plant DNA manipulator."
- id = "plantgenes"
- build_path = /obj/item/circuitboard/machine/plantgenes
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SERVICE
-
-/datum/design/board/ntnet_relay
- name = "Machine Design (NTNet Relay Board)"
- desc = "The circuit board for a wireless network relay."
- id = "ntnet_relay"
- build_path = /obj/item/circuitboard/machine/ntnet_relay
- category = list("Subspace Telecomms")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
-
-/datum/design/board/limbgrower
- name = "Machine Design (Limb Grower Board)"
- desc = "The circuit board for a limb grower."
- id = "limbgrower"
- build_path = /obj/item/circuitboard/machine/limbgrower
- category = list("Medical Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-
-/datum/design/board/harvester
- name = "Machine Design (Organ Harvester Board)"
- desc = "The circuit board for an organ harvester."
- id = "harvester"
- build_path = /obj/item/circuitboard/machine/harvester
- category = list("Medical Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-
-/datum/design/board/deepfryer
- name = "Machine Design (Deep Fryer)"
- desc = "The circuit board for a Deep Fryer."
- id = "deepfryer"
- build_path = /obj/item/circuitboard/machine/deep_fryer
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SERVICE
-
-/datum/design/board/donksofttoyvendor
- name = "Machine Design (Donksoft Toy Vendor Board)"
- desc = "The circuit board for a Donksoft Toy Vendor."
- id = "donksofttoyvendor"
- build_path = /obj/item/circuitboard/machine/vending/donksofttoyvendor
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ALL //Toys!!
-
-/datum/design/board/cell_charger
- name = "Machine Design (Cell Charger Board)"
- desc = "The circuit board for a cell charger."
- id = "cell_charger"
- build_path = /obj/item/circuitboard/machine/cell_charger
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_ALL
-
-/datum/design/board/dish_drive
- name = "Machine Design (Dish Drive)"
- desc = "The circuit board for a dish drive."
- id = "dish_drive"
- build_path = /obj/item/circuitboard/machine/dish_drive
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SERVICE
-
-/datum/design/board/stacking_unit_console
- name = "Machine Design (Stacking Machine Console)"
- desc = "The circuit board for a Stacking Machine Console."
- id = "stack_console"
- build_path = /obj/item/circuitboard/machine/stacking_unit_console
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/stacking_machine
- name = "Machine Design (Stacking Machine)"
- desc = "The circuit board for a Stacking Machine."
- id = "stack_machine"
- build_path = /obj/item/circuitboard/machine/stacking_machine
- category = list ("Misc. Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/board/ore_silo
- name = "Machine Design (Ore Silo)"
- desc = "The circuit board for an ore silo."
- id = "ore_silo"
- build_path = /obj/item/circuitboard/machine/ore_silo
- category = list ("Research Machinery")
- departmental_flags = DEPARTMENTAL_FLAG_CARGO
diff --git a/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm b/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm
new file mode 100644
index 0000000000..31723cde07
--- /dev/null
+++ b/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm
@@ -0,0 +1,100 @@
+////////////////////////////////////////
+//////////////MISC Boards///////////////
+////////////////////////////////////////
+
+/datum/design/board/recycler
+ name = "Machine Design (Recycler Board)"
+ desc = "The circuit board for a recycler."
+ id = "recycler"
+ build_path = /obj/item/circuitboard/machine/recycler
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/board/holopad
+ name = "Machine Design (AI Holopad Board)"
+ desc = "The circuit board for a holopad."
+ id = "holopad"
+ build_path = /obj/item/circuitboard/machine/holopad
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/board/autolathe
+ name = "Machine Design (Autolathe Board)"
+ desc = "The circuit board for an autolathe."
+ id = "autolathe"
+ build_path = /obj/item/circuitboard/machine/autolathe
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/board/recharger
+ name = "Machine Design (Weapon Recharger Board)"
+ desc = "The circuit board for a Weapon Recharger."
+ id = "recharger"
+ materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
+ build_path = /obj/item/circuitboard/machine/recharger
+ category = list("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/board/vendor
+ name = "Machine Design (Vendor Board)"
+ desc = "The circuit board for a Vendor."
+ id = "vendor"
+ build_path = /obj/item/circuitboard/machine/vendor
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/board/donksofttoyvendor
+ name = "Machine Design (Donksoft Toy Vendor Board)"
+ desc = "The circuit board for a Donksoft Toy Vendor."
+ id = "donksofttoyvendor"
+ build_path = /obj/item/circuitboard/machine/vending/donksofttoyvendor
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/board/space_heater
+ name = "Machine Design (Space Heater Board)"
+ desc = "The circuit board for a space heater."
+ id = "space_heater"
+ build_path = /obj/item/circuitboard/machine/space_heater
+ category = list ("Engineering Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/board/reagentgrinder
+ name = "Machine Design (All-In-One Grinder)"
+ desc = "The circuit board for an All-In-One Grinder."
+ id = "reagentgrinder"
+ build_path = /obj/item/circuitboard/machine/reagentgrinder
+ category = list ("Medical Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/board/microwave
+ name = "Machine Design (Microwave Board)"
+ desc = "The circuit board for a microwave."
+ id = "microwave"
+ build_path = /obj/item/circuitboard/machine/microwave
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/board/smartfridge
+ name = "Machine Design (Smartfridge Board)"
+ desc = "The circuit board for a smartfridge."
+ id = "smartfridge"
+ build_path = /obj/item/circuitboard/machine/smartfridge
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/board/cell_charger
+ name = "Machine Design (Cell Charger Board)"
+ desc = "The circuit board for a cell charger."
+ id = "cell_charger"
+ build_path = /obj/item/circuitboard/machine/cell_charger
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/board/vr_sleeper
+ name = "Machine Design (VR Sleeper Board)"
+ desc = "The circuit board for a VR sleeper."
+ id = "vr_sleeper"
+ build_path = /obj/item/circuitboard/machine/vr_sleeper
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+ category = list ("Medical Machinery")
diff --git a/code/modules/research/designs/machine_desings/machine_designs_cargo.dm b/code/modules/research/designs/machine_desings/machine_designs_cargo.dm
new file mode 100644
index 0000000000..a6cc2271c8
--- /dev/null
+++ b/code/modules/research/designs/machine_desings/machine_designs_cargo.dm
@@ -0,0 +1,42 @@
+///////////////////
+///CARGO Boards//
+///////////////////
+/datum/design/board/ore_silo
+ name = "Machine Design (Ore Silo)"
+ desc = "The circuit board for an ore silo."
+ id = "ore_silo"
+ build_path = /obj/item/circuitboard/machine/ore_silo
+ category = list ("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_CARGO
+
+/datum/design/board/mining_equipment_vendor
+ name = "Machine Design (Mining Rewards Vender Board)"
+ desc = "The circuit board for a Mining Rewards Vender."
+ id = "mining_equipment_vendor"
+ build_path = /obj/item/circuitboard/machine/mining_equipment_vendor
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/stacking_unit_console
+ name = "Machine Design (Stacking Machine Console)"
+ desc = "The circuit board for a Stacking Machine Console."
+ id = "stack_console"
+ build_path = /obj/item/circuitboard/machine/stacking_unit_console
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/stacking_machine
+ name = "Machine Design (Stacking Machine)"
+ desc = "The circuit board for a Stacking Machine."
+ id = "stack_machine"
+ build_path = /obj/item/circuitboard/machine/stacking_machine
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/ore_redemption
+ name = "Machine Design (Ore Redemption Board)"
+ desc = "The circuit board for an Ore Redemption machine."
+ id = "ore_redemption"
+ build_path = /obj/item/circuitboard/machine/ore_redemption
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
\ No newline at end of file
diff --git a/code/modules/research/designs/machine_desings/machine_designs_engi.dm b/code/modules/research/designs/machine_desings/machine_designs_engi.dm
new file mode 100644
index 0000000000..eb9e00be05
--- /dev/null
+++ b/code/modules/research/designs/machine_desings/machine_designs_engi.dm
@@ -0,0 +1,106 @@
+///////////////////
+///ENGINE Boards///
+///////////////////
+/datum/design/board/smes
+ name = "Machine Design (SMES Board)"
+ desc = "The circuit board for a SMES."
+ id = "smes"
+ build_path = /obj/item/circuitboard/machine/smes
+ category = list ("Engineering Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/circulator
+ name = "Machine Design (Circulator Board)"
+ desc = "The circuit board for a circulator."
+ id = "circulator"
+ build_path = /obj/item/circuitboard/machine/circulator
+ category = list ("Engineering Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/teg
+ name = "Machine Design (TEG Board)"
+ desc = "The circuit board for a TEG."
+ id = "teg"
+ build_path = /obj/item/circuitboard/machine/generator
+ category = list ("Engineering Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/announcement_system
+ name = "Machine Design (Automated Announcement System Board)"
+ desc = "The circuit board for an automated announcement system."
+ id = "automated_announcement"
+ build_path = /obj/item/circuitboard/machine/announcement_system
+ category = list("Subspace Telecomms")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/turbine_computer
+ name = "Computer Design (Power Turbine Console Board)"
+ desc = "The circuit board for a power turbine console."
+ id = "power_turbine_console"
+ build_path = /obj/item/circuitboard/computer/turbine_computer
+ category = list ("Engineering Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/emitter
+ name = "Machine Design (Emitter Board)"
+ desc = "The circuit board for an emitter."
+ id = "emitter"
+ build_path = /obj/item/circuitboard/machine/emitter
+ category = list ("Engineering Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/power_compressor
+ name = "Machine Design (Power Compressor Board)"
+ desc = "The circuit board for a power compressor."
+ id = "power_compressor"
+ build_path = /obj/item/circuitboard/machine/power_compressor
+ category = list ("Engineering Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/power_turbine
+ name = "Machine Design (Power Turbine Board)"
+ desc = "The circuit board for a power turbine."
+ id = "power_turbine"
+ build_path = /obj/item/circuitboard/machine/power_turbine
+ category = list ("Engineering Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/tesla_coil
+ name = "Machine Design (Tesla Coil Board)"
+ desc = "The circuit board for a tesla coil."
+ id = "tesla_coil"
+ build_path = /obj/item/circuitboard/machine/tesla_coil
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/rad_collector
+ name = "Machine Design (Radiation Collector Board)"
+ desc = "The circuit board for a radiation collector array."
+ id = "rad_collector"
+ build_path = /obj/item/circuitboard/machine/rad_collector
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/grounding_rod
+ name = "Machine Design (Grounding Rod Board)"
+ desc = "The circuit board for a grounding rod."
+ id = "grounding_rod"
+ build_path = /obj/item/circuitboard/machine/grounding_rod
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/ntnet_relay
+ name = "Machine Design (NTNet Relay Board)"
+ desc = "The circuit board for a wireless network relay."
+ id = "ntnet_relay"
+ build_path = /obj/item/circuitboard/machine/ntnet_relay
+ category = list("Subspace Telecomms")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/thermomachine
+ name = "Machine Design (Freezer/Heater Board)"
+ desc = "The circuit board for a freezer/heater."
+ id = "thermomachine"
+ build_path = /obj/item/circuitboard/machine/thermomachine
+ category = list ("Engineering Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
\ No newline at end of file
diff --git a/code/modules/research/designs/machine_desings/machine_designs_medical.dm b/code/modules/research/designs/machine_desings/machine_designs_medical.dm
new file mode 100644
index 0000000000..65b3d74f71
--- /dev/null
+++ b/code/modules/research/designs/machine_desings/machine_designs_medical.dm
@@ -0,0 +1,91 @@
+///////////////////
+///MEDICAL Boards//
+///////////////////
+
+/datum/design/board/limbgrower
+ name = "Machine Design (Limb Grower Board)"
+ desc = "The circuit board for a limb grower."
+ id = "limbgrower"
+ build_path = /obj/item/circuitboard/machine/limbgrower
+ category = list("Medical Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
+/datum/design/board/harvester
+ name = "Machine Design (Organ Harvester Board)"
+ desc = "The circuit board for an organ harvester."
+ id = "harvester"
+ build_path = /obj/item/circuitboard/machine/harvester
+ category = list("Medical Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
+/datum/design/board/sleeper
+ name = "Machine Design (Sleeper Board)"
+ desc = "The circuit board for a sleeper."
+ id = "sleeper"
+ build_path = /obj/item/circuitboard/machine/sleeper
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
+ category = list ("Medical Machinery")
+
+/datum/design/board/cryotube
+ name = "Machine Design (Cryotube Board)"
+ desc = "The circuit board for a cryotube."
+ id = "cryotube"
+ build_path = /obj/item/circuitboard/machine/cryo_tube
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
+ category = list ("Medical Machinery")
+
+/datum/design/board/chem_dispenser
+ name = "Machine Design (Portable Chem Dispenser Board)"
+ desc = "The circuit board for a portable chem dispenser."
+ id = "chem_dispenser"
+ build_path = /obj/item/circuitboard/machine/chem_dispenser
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
+ category = list ("Medical Machinery")
+
+/datum/design/board/chem_master
+ name = "Machine Design (Chem Master Board)"
+ desc = "The circuit board for a Chem Master 3000."
+ id = "chem_master"
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
+ build_path = /obj/item/circuitboard/machine/chem_master
+ category = list ("Medical Machinery")
+
+/datum/design/board/chem_heater
+ name = "Machine Design (Chemical Heater Board)"
+ desc = "The circuit board for a chemical heater."
+ id = "chem_heater"
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
+ build_path = /obj/item/circuitboard/machine/chem_heater
+ category = list ("Medical Machinery")
+
+/datum/design/board/smoke_machine
+ name = "Machine Design (Smoke Machine)"
+ desc = "The circuit board for a smoke machine."
+ id = "smoke_machine"
+ build_path = /obj/item/circuitboard/machine/smoke_machine
+ category = list ("Medical Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/board/clonecontrol
+ name = "Computer Design (Cloning Machine Console)"
+ desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console."
+ id = "clonecontrol"
+ build_path = /obj/item/circuitboard/computer/cloning
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
+ category = list("Medical Machinery")
+
+/datum/design/board/clonepod
+ name = "Machine Design (Clone Pod)"
+ desc = "Allows for the construction of circuit boards used to build a Cloning Pod."
+ id = "clonepod"
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
+ build_path = /obj/item/circuitboard/machine/clonepod
+ category = list("Medical Machinery")
+
+/datum/design/board/clonescanner
+ name = "Machine Design (Cloning Scanner)"
+ desc = "Allows for the construction of circuit boards used to build a Cloning Scanner."
+ id = "clonescanner"
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
+ build_path = /obj/item/circuitboard/machine/clonescanner
+ category = list("Medical Machinery")
diff --git a/code/modules/research/designs/machine_desings/machine_designs_sci.dm b/code/modules/research/designs/machine_desings/machine_designs_sci.dm
new file mode 100644
index 0000000000..183977b455
--- /dev/null
+++ b/code/modules/research/designs/machine_desings/machine_designs_sci.dm
@@ -0,0 +1,155 @@
+///////////////////
+///SCI Boards//////
+///////////////////
+
+/datum/design/board/teleport_station
+ name = "Machine Design (Teleportation Station Board)"
+ desc = "The circuit board for a teleportation station."
+ id = "tele_station"
+ build_path = /obj/item/circuitboard/machine/teleporter_station
+ category = list ("Teleportation Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/teleport_hub
+ name = "Machine Design (Teleportation Hub Board)"
+ desc = "The circuit board for a teleportation hub."
+ id = "tele_hub"
+ build_path = /obj/item/circuitboard/machine/teleporter_hub
+ category = list ("Teleportation Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/quantumpad
+ name = "Machine Design (Quantum Pad Board)"
+ desc = "The circuit board for a quantum telepad."
+ id = "quantumpad"
+ build_path = /obj/item/circuitboard/machine/quantumpad
+ category = list ("Teleportation Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/launchpad
+ name = "Machine Design (Bluespace Launchpad Board)"
+ desc = "The circuit board for a bluespace Launchpad."
+ id = "launchpad"
+ build_path = /obj/item/circuitboard/machine/launchpad
+ category = list ("Teleportation Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/launchpad_console
+ name = "Machine Design (Bluespace Launchpad Console Board)"
+ desc = "The circuit board for a bluespace launchpad Console."
+ id = "launchpad_console"
+ build_path = /obj/item/circuitboard/computer/launchpad_console
+ category = list ("Teleportation Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/teleconsole
+ name = "Computer Design (Teleporter Console)"
+ desc = "Allows for the construction of circuit boards used to build a teleporter control console."
+ id = "teleconsole"
+ build_path = /obj/item/circuitboard/computer/teleporter
+ category = list("Teleportation Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/destructive_analyzer
+ name = "Machine Design (Destructive Analyzer Board)"
+ desc = "The circuit board for a destructive analyzer."
+ id = "destructive_analyzer"
+ build_path = /obj/item/circuitboard/machine/destructive_analyzer
+ category = list("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/experimentor
+ name = "Machine Design (E.X.P.E.R.I-MENTOR Board)"
+ desc = "The circuit board for an E.X.P.E.R.I-MENTOR."
+ id = "experimentor"
+ build_path = /obj/item/circuitboard/machine/experimentor
+ category = list("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/protolathe
+ name = "Machine Design (Protolathe Board)"
+ desc = "The circuit board for a protolathe."
+ id = "protolathe"
+ build_path = /obj/item/circuitboard/machine/protolathe
+ category = list("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/rdservercontrol
+ name = "Computer Design (R&D Server Control Console Board)"
+ desc = "The circuit board for an R&D Server Control Console."
+ id = "rdservercontrol"
+ build_path = /obj/item/circuitboard/computer/rdservercontrol
+ category = list("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/rdserver
+ name = "Machine Design (R&D Server Board)"
+ desc = "The circuit board for an R&D Server."
+ id = "rdserver"
+ build_path = /obj/item/circuitboard/machine/rdserver
+ category = list("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/mechfab
+ name = "Machine Design (Exosuit Fabricator Board)"
+ desc = "The circuit board for an Exosuit Fabricator."
+ id = "mechfab"
+ build_path = /obj/item/circuitboard/machine/mechfab
+ category = list("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/cyborgrecharger
+ name = "Machine Design (Cyborg Recharger Board)"
+ desc = "The circuit board for a Cyborg Recharger."
+ id = "cyborgrecharger"
+ build_path = /obj/item/circuitboard/machine/cyborgrecharger
+ category = list("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/mech_recharger
+ name = "Machine Design (Mechbay Recharger Board)"
+ desc = "The circuit board for a Mechbay Recharger."
+ id = "mech_recharger"
+ build_path = /obj/item/circuitboard/machine/mech_recharger
+ category = list("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/nanite_chamber
+ name = "Machine Design (Nanite Chamber Board)"
+ desc = "The circuit board for a Nanite Chamber."
+ id = "nanite_chamber"
+ build_path = /obj/item/circuitboard/machine/nanite_chamber
+ category = list("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/public_nanite_chamber
+ name = "Machine Design (Public Nanite Chamber Board)"
+ desc = "The circuit board for a Public Nanite Chamber."
+ id = "public_nanite_chamber"
+ build_path = /obj/item/circuitboard/machine/public_nanite_chamber
+ category = list("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/nanite_programmer
+ name = "Machine Design (Nanite Programmer Board)"
+ desc = "The circuit board for a Nanite Programmer."
+ id = "nanite_programmer"
+ build_path = /obj/item/circuitboard/machine/nanite_programmer
+ category = list("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/nanite_program_hub
+ name = "Machine Design (Nanite Program Hub Board)"
+ desc = "The circuit board for a Nanite Program Hub."
+ id = "nanite_program_hub"
+ build_path = /obj/item/circuitboard/machine/nanite_program_hub
+ category = list("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/circuit_imprinter
+ name = "Machine Design (Circuit Imprinter Board)"
+ desc = "The circuit board for a circuit imprinter."
+ id = "circuit_imprinter"
+ build_path = /obj/item/circuitboard/machine/circuit_imprinter
+ category = list("Research Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
diff --git a/code/modules/research/designs/machine_desings/machine_designs_service.dm b/code/modules/research/designs/machine_desings/machine_designs_service.dm
new file mode 100644
index 0000000000..895ad032ba
--- /dev/null
+++ b/code/modules/research/designs/machine_desings/machine_designs_service.dm
@@ -0,0 +1,90 @@
+///////////////////
+///CIV Boards///
+///////////////////
+/datum/design/board/gibber
+ name = "Machine Design (Gibber Board)"
+ desc = "The circuit board for a gibber."
+ id = "gibber"
+ build_path = /obj/item/circuitboard/machine/gibber
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SERVICE
+
+/datum/design/board/seed_extractor
+ name = "Machine Design (Seed Extractor Board)"
+ desc = "The circuit board for a seed extractor."
+ id = "seed_extractor"
+ build_path = /obj/item/circuitboard/machine/seed_extractor
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SERVICE
+
+/datum/design/board/soda_dispenser
+ name = "Machine Design (Portable Soda Dispenser Board)"
+ desc = "The circuit board for a portable soda dispenser."
+ id = "soda_dispenser"
+ build_path = /obj/item/circuitboard/machine/chem_dispenser/drinks
+ departmental_flags = DEPARTMENTAL_FLAG_SERVICE
+ category = list ("Misc. Machinery")
+
+/datum/design/board/beer_dispenser
+ name = "Machine Design (Portable Booze Dispenser Board)"
+ desc = "The circuit board for a portable booze dispenser."
+ id = "beer_dispenser"
+ build_path = /obj/item/circuitboard/machine/chem_dispenser/drinks/beer
+ departmental_flags = DEPARTMENTAL_FLAG_SERVICE
+ category = list ("Misc. Machinery")
+
+/datum/design/board/plantgenes
+ name = "Machine Design (Plant DNA Manipulator Board)"
+ desc = "The circuit board for a plant DNA manipulator."
+ id = "plantgenes"
+ build_path = /obj/item/circuitboard/machine/plantgenes
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SERVICE
+
+/datum/design/board/deepfryer
+ name = "Machine Design (Deep Fryer)"
+ desc = "The circuit board for a Deep Fryer."
+ id = "deepfryer"
+ build_path = /obj/item/circuitboard/machine/deep_fryer
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SERVICE
+
+/datum/design/board/dish_drive
+ name = "Machine Design (Dish Drive)"
+ desc = "The circuit board for a dish drive."
+ id = "dish_drive"
+ build_path = /obj/item/circuitboard/machine/dish_drive
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SERVICE
+
+/datum/design/board/biogenerator
+ name = "Machine Design (Biogenerator Board)"
+ desc = "The circuit board for a biogenerator."
+ id = "biogenerator"
+ build_path = /obj/item/circuitboard/machine/biogenerator
+ category = list ("Hydroponics Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SERVICE
+
+/datum/design/board/hydroponics
+ name = "Machine Design (Hydroponics Tray Board)"
+ desc = "The circuit board for a hydroponics tray."
+ id = "hydro_tray"
+ build_path = /obj/item/circuitboard/machine/hydroponics
+ category = list ("Hydroponics Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SERVICE
+
+/datum/design/board/monkey_recycler
+ name = "Machine Design (Monkey Recycler Board)"
+ desc = "The circuit board for a monkey recycler."
+ id = "monkey_recycler"
+ build_path = /obj/item/circuitboard/machine/monkey_recycler
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SERVICE | DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/board/processor
+ name = "Machine Design (Food/Slime Processor Board)"
+ desc = "The circuit board for a processing unit. Screwdriver the circuit to switch between food (default) or slime processing."
+ id = "processor"
+ build_path = /obj/item/circuitboard/machine/processor
+ category = list ("Misc. Machinery")
+ departmental_flags = DEPARTMENTAL_FLAG_SERVICE | DEPARTMENTAL_FLAG_SCIENCE
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index aea3a3755f..7224d0e4e8 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -44,16 +44,6 @@
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-/datum/design/medicalkit
- name = "Empty Medkit"
- desc = "A plastic medical kit for storging medical items."
- id = "medicalkit"
- build_type = PROTOLATHE
- materials = list(MAT_PLASTIC = 5000)
- build_path = /obj/item/storage/firstaid //So we dont spawn medical items in it
- category = list("Medical Designs")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
-
/datum/design/xlarge_beaker
name = "X-large Beaker"
id = "xlarge_beaker"
@@ -82,16 +72,6 @@
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
-/datum/design/cloning_disk
- name = "Cloning Data Disk"
- desc = "Produce additional disks for storing genetic data."
- id = "cloning_disk"
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50)
- build_path = /obj/item/disk/data
- category = list("Medical Designs")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
-
/datum/design/noreactsyringe
name = "Cryo Syringe"
desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units."
@@ -162,6 +142,16 @@
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+/datum/design/medicalkit
+ name = "Empty Medkit"
+ desc = "A plastic medical kit for storging medical items."
+ id = "medicalkit"
+ build_type = PROTOLATHE
+ materials = list(MAT_PLASTIC = 5000)
+ build_path = /obj/item/storage/firstaid //So we dont spawn medical items in it
+ category = list("Medical Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
+
/datum/design/blood_bag
name = "Empty Blood Bag"
desc = "A small sterilized plastic bag for blood."
@@ -172,6 +162,16 @@
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+/datum/design/cloning_disk
+ name = "Cloning Data Disk"
+ desc = "Produce additional disks for storing genetic data."
+ id = "cloning_disk"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50)
+ build_path = /obj/item/disk/data
+ category = list("Medical Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
+
////////////////////////////////////////
//////////Defibrillator Tech////////////
////////////////////////////////////////
@@ -196,8 +196,8 @@
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/defib_heal
- name = "Defibrillartor Healing disk"
- desc = "A disk allowing for greater amounts of healing"
+ name = "Defibrillator Healing disk"
+ desc = "An upgrade which increases the healing power of the defibrillator"
id = "defib_heal"
build_type = PROTOLATHE
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 6000, MAT_SILVER = 6000)
@@ -207,8 +207,8 @@
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/defib_shock
- name = "Defibrillartor Anit-Shock Disk"
- desc = "A disk that helps agains shocking anyone, other then the intented target"
+ name = "Defibrillator Anti-Shock Disk"
+ desc = "A safety upgrade that guarantees only the patient will get shocked"
id = "defib_shock"
build_type = PROTOLATHE
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 6000, MAT_SILVER = 6000)
@@ -218,8 +218,8 @@
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/defib_decay
- name = "Defibrillartor Body-Decay extender Disk"
- desc = "A disk that helps defibrillator revive the longer decayed dead"
+ name = "Defibrillator Body-Decay Extender Disk"
+ desc = "An upgrade allowing the defibrillator to work on more decayed bodies"
id = "defib_decay"
build_type = PROTOLATHE
materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 16000, MAT_SILVER = 6000, MAT_TITANIUM = 2000)
@@ -229,8 +229,8 @@
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/defib_speed
- name = "Defibrllartor Pre-Primer Disk"
- desc = "A disk that cuts the time charg time in half for defibrillator use"
+ name = "Defibrillator Fast Charge Disk"
+ desc = "An upgrade to the defibrillator capacitors, which let it charge faster"
id = "defib_speed"
build_type = PROTOLATHE
build_path = /obj/item/disk/medical/defib_speed
@@ -239,72 +239,6 @@
category = list("Misc")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-
-/////////////////////////////////////////
-//////////Alien Surgery Tools////////////
-/////////////////////////////////////////
-
-/datum/design/alienscalpel
- name = "Alien Scalpel"
- desc = "An advanced scalpel obtained through Abductor technology."
- id = "alien_scalpel"
- build_path = /obj/item/scalpel/alien
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
- category = list("Medical Designs")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-
-/datum/design/alienhemostat
- name = "Alien Hemostat"
- desc = "An advanced hemostat obtained through Abductor technology."
- id = "alien_hemostat"
- build_path = /obj/item/hemostat/alien
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
- category = list("Medical Designs")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-
-/datum/design/alienretractor
- name = "Alien Retractor"
- desc = "An advanced retractor obtained through Abductor technology."
- id = "alien_retractor"
- build_path = /obj/item/retractor/alien
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
- category = list("Medical Designs")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-
-/datum/design/aliensaw
- name = "Alien Circular Saw"
- desc = "An advanced surgical saw obtained through Abductor technology."
- id = "alien_saw"
- build_path = /obj/item/circular_saw/alien
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500)
- category = list("Medical Designs")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-
-/datum/design/aliendrill
- name = "Alien Drill"
- desc = "An advanced drill obtained through Abductor technology."
- id = "alien_drill"
- build_path = /obj/item/surgicaldrill/alien
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500)
- category = list("Medical Designs")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-
-/datum/design/aliencautery
- name = "Alien Cautery"
- desc = "An advanced cautery obtained through Abductor technology."
- id = "alien_cautery"
- build_path = /obj/item/cautery/alien
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
- category = list("Medical Designs")
- departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
-
-
/////////////////////////////////////////
//////////Cybernetic Implants////////////
/////////////////////////////////////////
@@ -654,9 +588,74 @@
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
+/////////////////////////////////////////
+//////////Alien Surgery Tools////////////
+/////////////////////////////////////////
+
+/datum/design/alienscalpel
+ name = "Alien Scalpel"
+ desc = "An advanced scalpel obtained through Abductor technology."
+ id = "alien_scalpel"
+ build_path = /obj/item/scalpel/alien
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
+ category = list("Medical Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
+/datum/design/alienhemostat
+ name = "Alien Hemostat"
+ desc = "An advanced hemostat obtained through Abductor technology."
+ id = "alien_hemostat"
+ build_path = /obj/item/hemostat/alien
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
+ category = list("Medical Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
+/datum/design/alienretractor
+ name = "Alien Retractor"
+ desc = "An advanced retractor obtained through Abductor technology."
+ id = "alien_retractor"
+ build_path = /obj/item/retractor/alien
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
+ category = list("Medical Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
+/datum/design/aliensaw
+ name = "Alien Circular Saw"
+ desc = "An advanced surgical saw obtained through Abductor technology."
+ id = "alien_saw"
+ build_path = /obj/item/circular_saw/alien
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500)
+ category = list("Medical Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
+/datum/design/aliendrill
+ name = "Alien Drill"
+ desc = "An advanced drill obtained through Abductor technology."
+ id = "alien_drill"
+ build_path = /obj/item/surgicaldrill/alien
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500)
+ category = list("Medical Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
+/datum/design/aliencautery
+ name = "Alien Cautery"
+ desc = "An advanced cautery obtained through Abductor technology."
+ id = "alien_cautery"
+ build_path = /obj/item/cautery/alien
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
+ category = list("Medical Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
/////////////////////
///Surgery Designs///
/////////////////////
+
/datum/design/surgery
name = "Surgery Design"
desc = "what"
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index d567334998..0d699a1d67 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -94,39 +94,15 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-/////////////////////////////////////////
-//////////////////Misc///////////////////
-/////////////////////////////////////////
-
-/datum/design/welding_mask
- name = "Welding Gas Mask"
- desc = "A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd."
- id = "weldingmask"
+/datum/design/sci_goggles
+ name = "Science Goggles"
+ desc = "Goggles fitted with a portable analyzer capable of determining the research worth of an item or components of a machine."
+ id = "scigoggles"
build_type = PROTOLATHE
- materials = list(MAT_METAL = 3000, MAT_GLASS = 1000)
- build_path = /obj/item/clothing/mask/gas/welding
+ materials = list(MAT_METAL = 500, MAT_GLASS = 500)
+ build_path = /obj/item/clothing/glasses/science
category = list("Equipment")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/portaseeder
- name = "Portable Seed Extractor"
- desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant."
- id = "portaseeder"
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 1000, MAT_GLASS = 400)
- build_path = /obj/item/storage/bag/plants/portaseeder
- category = list("Equipment")
- departmental_flags = DEPARTMENTAL_FLAG_SERVICE
-
-/datum/design/air_horn
- name = "Air Horn"
- desc = "Damn son, where'd you find this?"
- id = "air_horn"
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 4000, MAT_BANANIUM = 1000)
- build_path = /obj/item/bikehorn/airhorn
- category = list("Equipment")
- departmental_flags = DEPARTMENTAL_FLAG_ALL //HONK!
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/mesons
name = "Optical Meson Scanners"
@@ -218,6 +194,40 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
+/////////////////////////////////////////
+//////////////////Misc///////////////////
+/////////////////////////////////////////
+
+/datum/design/welding_mask
+ name = "Welding Gas Mask"
+ desc = "A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd."
+ id = "weldingmask"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 3000, MAT_GLASS = 1000)
+ build_path = /obj/item/clothing/mask/gas/welding
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/portaseeder
+ name = "Portable Seed Extractor"
+ desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant."
+ id = "portaseeder"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 1000, MAT_GLASS = 400)
+ build_path = /obj/item/storage/bag/plants/portaseeder
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_SERVICE
+
+/datum/design/air_horn
+ name = "Air Horn"
+ desc = "Damn son, where'd you find this?"
+ id = "air_horn"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 4000, MAT_BANANIUM = 1000)
+ build_path = /obj/item/bikehorn/airhorn
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL //HONK!
+
/datum/design/magboots
name = "Magnetic Boots"
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle."
@@ -228,26 +238,6 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-/datum/design/forcefield_projector
- name = "Forcefield Projector"
- desc = "A device which can project temporary forcefields to seal off an area."
- id = "forcefield_projector"
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 2500, MAT_GLASS = 1000)
- build_path = /obj/item/forcefield_projector
- category = list("Equipment")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/sci_goggles
- name = "Science Goggles"
- desc = "Goggles fitted with a portable analyzer capable of determining the research worth of an item or components of a machine."
- id = "scigoggles"
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 500, MAT_GLASS = 500)
- build_path = /obj/item/clothing/glasses/science
- category = list("Equipment")
- departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-
/datum/design/diskplantgene
name = "Plant Data Disk"
desc = "A disk for storing plant genetic data."
@@ -312,6 +302,10 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
+/////////////////////////////////////////
+////////////Holosign Designs/////////////
+/////////////////////////////////////////
+
/datum/design/holosign
name = "Holographic Sign Projector"
desc = "A holograpic projector used to project various warning signs."
@@ -352,9 +346,19 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-/////////////////////////////////////////
+/datum/design/forcefield_projector
+ name = "Forcefield Projector"
+ desc = "A device which can project temporary forcefields to seal off an area."
+ id = "forcefield_projector"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 2500, MAT_GLASS = 1000)
+ build_path = /obj/item/forcefield_projector
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+///////////////////////////////
////////////Tools//////////////
-/////////////////////////////////////////
+///////////////////////////////
/datum/design/exwelder
name = "Experimental Welding Tool"
@@ -457,7 +461,7 @@
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/////////////////////////////////////////
-////////////Armour//////////////
+////////////Armour///////////////////////
/////////////////////////////////////////
/datum/design/reactive_armour
diff --git a/code/modules/research/designs/smelting_designs.dm b/code/modules/research/designs/smelting_designs.dm
index f2f21396d2..8ddf975c54 100644
--- a/code/modules/research/designs/smelting_designs.dm
+++ b/code/modules/research/designs/smelting_designs.dm
@@ -10,7 +10,6 @@
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
maxstack = 50
-
/datum/design/plastitanium_alloy
name = "Plasma + Titanium alloy"
id = "plastitanium"
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index aa091d181c..e25dced31c 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -102,8 +102,8 @@
/datum/techweb_node/adv_defibrillator_tec
id = "adv_defibrillator_tec"
- display_name = "Adv Defibrillator tec"
- description = "More ways to bring back the freshly dead."
+ display_name = "Defibrillator Upgrades"
+ description = "More ways to bring back the newly dead."
prereq_ids = list("adv_biotech", "exp_surgery", "adv_engi", "adv_power")
design_ids = list("defib_decay", "defib_shock", "defib_heal", "defib_speed")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
diff --git a/code/modules/spells/spell_types/aimed.dm b/code/modules/spells/spell_types/aimed.dm
index 35f9a8f50a..73a428af71 100644
--- a/code/modules/spells/spell_types/aimed.dm
+++ b/code/modules/spells/spell_types/aimed.dm
@@ -74,6 +74,8 @@
/obj/effect/proc_holder/spell/aimed/proc/fire_projectile(mob/living/user, atom/target)
current_amount--
+ if(!projectile_type)
+ return
for(var/i in 1 to projectiles_per_fire)
var/obj/item/projectile/P = new projectile_type(user.loc)
P.firer = user
diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm
index 919d87b4c7..06d1fc3dc5 100644
--- a/code/modules/spells/spell_types/godhand.dm
+++ b/code/modules/spells/spell_types/godhand.dm
@@ -94,3 +94,87 @@
M.Stun(40)
M.petrify()
return ..()
+
+
+/obj/item/melee/touch_attack/megahonk
+ name = "\improper honkmother's blessing"
+ desc = "You've got a feeling they won't be laughing after this one. Honk honk."
+ catchphrase = "HONKDOOOOUKEN!"
+ on_use_sound = 'sound/items/airhorn.ogg'
+ icon = 'icons/mecha/mecha_equipment.dmi'
+ icon_state = "mecha_honker"
+
+/obj/item/melee/touch_attack/megahonk/afterattack(atom/target, mob/living/carbon/user, proximity)
+ if(!proximity || !iscarbon(target) || !iscarbon(user) || user.handcuffed)
+ return
+ user.say(catchphrase, forced = "spell")
+ playsound(get_turf(target), on_use_sound,100,1)
+ for(var/mob/living/carbon/M in (hearers(1, target) - user)) //3x3 around the target, not affecting the user
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(istype(H.ears, /obj/item/clothing/ears/earmuffs))
+ continue
+ var/mul = (M==target ? 1 : 0.5)
+ to_chat(M, "HONK")
+ M.SetSleeping(0)
+ M.stuttering += 20*mul
+ M.adjustEarDamage(0, 30*mul)
+ M.Knockdown(60*mul)
+ if(prob(40))
+ M.Knockdown(200*mul)
+ else
+ M.Jitter(500*mul)
+
+ charges--
+ if(charges <= 0)
+ qdel(src)
+
+/obj/item/melee/touch_attack/megahonk/attack_self(mob/user)
+ . = ..()
+ to_chat(user, "\The [src] disappears, to honk another day.")
+ qdel(src)
+
+/obj/item/melee/touch_attack/bspie
+ name = "\improper bluespace pie"
+ desc = "A thing you can barely comprehend as you hold it in your hand. You're fairly sure you could fit an entire body inside."
+ on_use_sound = 'sound/magic/demon_consume.ogg'
+ icon = 'icons/obj/food/piecake.dmi'
+ icon_state = "frostypie"
+ color = "#000077"
+
+/obj/item/melee/touch_attack/bspie/attack_self(mob/user)
+ . = ..()
+ to_chat(user, "You smear \the [src] on your chest! ")
+ qdel(src)
+
+/obj/item/melee/touch_attack/bspie/afterattack(atom/target, mob/living/carbon/user, proximity)
+ if(!proximity || !iscarbon(target) || !iscarbon(user) || user.handcuffed)
+ return
+ if(target == user)
+ to_chat(user, "You smear \the [src] on your chest!")
+ qdel(src)
+ return
+ var/mob/living/carbon/M = target
+
+ user.visible_message("[user] is trying to stuff [M]\s body into \the [src]!")
+ if(do_mob(user, M, 250))
+ var/name = M.real_name
+ var/obj/item/reagent_containers/food/snacks/pie/cream/body/pie = new(get_turf(M))
+ pie.name = "\improper [name] [pie.name]"
+
+ playsound(get_turf(target), on_use_sound, 50, 1)
+
+ /*
+ var/obj/item/bodypart/head = M.get_bodypart("head")
+ if(head)
+ head.drop_limb()
+ head.throw_at(get_turf(head), 1, 1)
+ qdel(M)
+ */
+ M.forceMove(pie)
+
+
+ charges--
+
+ if(charges <= 0)
+ qdel(src)
diff --git a/code/modules/spells/spell_types/taeclowndo.dm b/code/modules/spells/spell_types/taeclowndo.dm
new file mode 100644
index 0000000000..d2b0782b07
--- /dev/null
+++ b/code/modules/spells/spell_types/taeclowndo.dm
@@ -0,0 +1,86 @@
+/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pie
+ name = "Summon Creampie"
+ desc = "A clown's weapon of choice. Use this to summon a fresh pie, just waiting to acquaintain itself with someone's face."
+ invocation_type = "none"
+ include_user = 1
+ range = -1
+ clothes_req = 0
+ item_type = /obj/item/reagent_containers/food/snacks/pie/cream
+
+ charge_max = 30
+ cooldown_min = 30
+ action_icon = 'icons/obj/food/piecake.dmi'
+ action_icon_state = "pie"
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/obj/effect/proc_holder/spell/aimed/banana_peel
+ name = "Conjure Banana Peel"
+ desc = "Make a banana peel appear out of thin air right under someone's feet!"
+ charge_type = "recharge"
+ charge_max = 100
+ cooldown_min = 100
+ clothes_req = 0
+ invocation_type = "none"
+ range = 7
+ selection_type = "view"
+ projectile_type = null
+
+ active_msg = "You focus, your mind reaching to the clown dimension, ready to make a peel matrialize wherever you want!"
+ deactive_msg = "You relax, the peel remaining right in the \"thin air\" it would appear out of."
+ action_icon = 'icons/obj/hydroponics/harvest.dmi'
+ base_icon_state = "banana_peel"
+ action_icon_state = "banana"
+
+
+/obj/effect/proc_holder/spell/aimed/banana_peel/cast(list/targets, mob/user = usr)
+ var/target = get_turf(targets[1])
+
+ if(get_dist(user,target)>range)
+ to_chat(user, "\The [target] is too far away!")
+ return
+
+ . = ..()
+ new /obj/item/grown/bananapeel(target)
+
+/obj/effect/proc_holder/spell/aimed/banana_peel/update_icon()
+ if(!action)
+ return
+ if(active)
+ action.button_icon_state = base_icon_state
+ else
+ action.button_icon_state = action_icon_state
+
+ action.UpdateButtonIcon()
+ return
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/obj/effect/proc_holder/spell/targeted/touch/megahonk
+ name = "Mega HoNk"
+ desc = "This spell channels your inner clown powers, concentrating them into one massive HONK."
+ hand_path = /obj/item/melee/touch_attack/megahonk
+
+ charge_max = 100
+ clothes_req = 0
+ cooldown_min = 100
+
+ action_icon = 'icons/mecha/mecha_equipment.dmi'
+ action_icon_state = "mecha_honker"
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/obj/effect/proc_holder/spell/targeted/touch/bspie
+ name = "Bluespace Banana Pie"
+ desc = "An entire body would fit in there!"
+ hand_path = /obj/item/melee/touch_attack/bspie
+
+ charge_max = 450
+ clothes_req = 0
+ cooldown_min = 450
+
+ action_icon = 'icons/obj/food/piecake.dmi'
+ action_icon_state = "frostypie"
+
+
+
+
diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm
index dfdf0fde69..71b659b73f 100644
--- a/code/modules/surgery/bodyparts/bodyparts.dm
+++ b/code/modules/surgery/bodyparts/bodyparts.dm
@@ -385,6 +385,8 @@
. = list()
var/image_dir = 0
+ var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable
+
if(dropped)
image_dir = SOUTH
if(dmg_overlay_type)
@@ -393,8 +395,11 @@
if(burnstate)
. += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir)
if(body_markings && status != BODYPART_ROBOTIC)
- if(use_digitigrade == NOT_DIGITIGRADE)
- . += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
+ if(!use_digitigrade)
+ if(BODY_ZONE_CHEST)
+ . += image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
+ else
+ . += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
else
. += image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
@@ -417,8 +422,6 @@
limb.icon_state = "[animal_origin]_[body_zone]"
return
- var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable
-
if((body_zone != BODY_ZONE_HEAD && body_zone != BODY_ZONE_CHEST))
should_draw_gender = FALSE
@@ -454,7 +457,10 @@
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
else if(!use_digitigrade)
- marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
+ if(body_zone == BODY_ZONE_CHEST)
+ marking = image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
+ else
+ marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
else
marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
. += marking
@@ -494,7 +500,10 @@
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
else if(!use_digitigrade)
- marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
+ if(body_zone == BODY_ZONE_CHEST)
+ marking = image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
+ else
+ marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
else
marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
. += marking
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index 798b495cfd..a5872b6741 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -388,7 +388,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
autoinjectors for rapid application on up to two targets each, a syringe, and a bottle containing \
the BVAK solution."
item = /obj/item/storage/box/syndie_kit/tuberculosisgrenade
- cost = 12
+ cost = 8
surplus = 35
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
restricted = TRUE
@@ -510,7 +510,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "12g Scatter Laser shot Slugs"
desc = "An alternative 8-round Scatter Laser Shot magazine for use in the Bulldog shotgun."
item = /obj/item/ammo_box/magazine/m12g/scatter
- cost = 5 // most armor has less laser protection then bullet
+ cost = 4 // most armor has less laser protection then bullet
/datum/uplink_item/ammo/shotgun/bag
name = "12g Ammo Duffel Bag"
@@ -768,7 +768,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
The concussive effect from the explosion will knock the recipient out for a short period, and deafen \
them for longer. Beware, it has a chance to detonate your PDA."
item = /obj/item/cartridge/virus/syndicate
- cost = 6
+ cost = 5
restricted = TRUE
/datum/uplink_item/stealthy_weapons/suppressor
@@ -776,7 +776,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
desc = "Fitted for use on any small caliber weapon with a threaded barrel, this suppressor will silence the \
shots of the weapon for increased stealth and superior ambushing capability."
item = /obj/item/suppressor
- cost = 3
+ cost = 1
surplus = 10
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
@@ -837,6 +837,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
surplus = 0
include_modes = list(/datum/game_mode/nuclear/clown_ops)
+datum/uplink_item/stealthy_tools/taeclowndo_shoes
+ name = "Tae-clown-do Shoes"
+ desc = "A pair of shoes for the most elite agents of the honkmotherland. They grant the mastery of taeclowndo with some honk-fu moves as long as they're worn."
+ cost = 12
+ item = /obj/item/clothing/shoes/clown_shoes/taeclowndo
+ include_modes = list(/datum/game_mode/nuclear/clown_ops)
+
/datum/uplink_item/stealthy_tools/frame
name = "F.R.A.M.E. PDA Cartridge"
desc = "When inserted into a personal digital assistant, this cartridge gives you five PDA viruses which \
@@ -844,7 +851,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
You will receive the unlock code upon activating the virus, and the new uplink may be charged with \
telecrystals normally."
item = /obj/item/cartridge/virus/frame
- cost = 4
+ cost = 2
restricted = TRUE
/datum/uplink_item/stealthy_tools/agent_card
@@ -894,7 +901,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
desc = "Screwed up and have security on your tail? This handy syringe will give you a completely new identity \
and appearance."
item = /obj/item/reagent_containers/syringe/mulligan
- cost = 4
+ cost = 3
surplus = 30
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
@@ -995,11 +1002,11 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
cost = 1
/datum/uplink_item/device_tools/surgerybag_adv
- name = "Syndicate Surgery Duffel Bag"
+ name = "Advanced Syndicate Surgery Duffel Bag"
desc = "The Syndicate surgery duffel bag is a toolkit containing all newest surgery tools, surgical drapes, \
a Syndicate brand MMI, a straitjacket, a muzzle, and a full Syndicate Combat Medic Kit."
item = /obj/item/storage/backpack/duffelbag/syndie/surgery_adv
- cost = 15 //Mite be to cheap
+ cost = 10
/datum/uplink_item/device_tools/military_belt
name = "Chest Rig"
@@ -1041,7 +1048,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
such as AI units and cyborgs, over their private binary channel. Caution should \
be taken while doing this, as unless they are allied with you, they are programmed to report such intrusions."
item = /obj/item/encryptionkey/binary
- cost = 5
+ cost = 2
surplus = 75
restricted = TRUE
@@ -1208,7 +1215,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "Syndicate Sentience Potion"
item = /obj/item/slimepotion/slime/sentience/nuclear
desc = "A potion recovered at great risk by undercover syndicate operatives and then subsequently modified with syndicate technology. Using it will make any animal sentient, and bound to serve you, as well as implanting an internal radio for communication and an internal ID card for opening doors."
- cost = 4
+ cost = 2
include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
restricted = TRUE
@@ -1382,6 +1389,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
item = /obj/item/dnainjector/clumsymut
restricted_roles = list("Clown")
+/datum/uplink_item/role_restricted/taeclowndo_shoes
+ name = "Tae-clown-do Shoes"
+ desc = "A pair of shoes for the most elite agents of the honkmotherland. They grant the mastery of taeclowndo with some honk-fu moves as long as they're worn."
+ cost = 14
+ item = /obj/item/clothing/shoes/clown_shoes/taeclowndo
+ restricted_roles = list("Clown")
+
/datum/uplink_item/role_restricted/mimery
name = "Guide to Advanced Mimery Series"
desc = "The classical two part series on how to further hone your mime skills. Upon studying the series, the user should be able to make 3x1 invisible walls, and shoot bullets out of their fingers. Obviously only works for Mimes."
@@ -1448,7 +1462,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "Gold Toolbox"
desc = "A gold planted plastitanium toolbox loaded with tools. Comes with a set of AI detection multi-tool and a pare of combat gloves."
item = /obj/item/storage/toolbox/gold_real
- cost = 5 // Has synda tools + gloves + a robust weapon
+ cost = 3 // Has synda tools + gloves + a robust weapon
restricted_roles = list("Assistant", "Curator") //Curator do to being made of gold - It fits the theme
/datum/uplink_item/role_restricted/brainwash_disk
@@ -1457,7 +1471,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
Insert into an Operating Console to enable the procedure."
item = /obj/item/disk/surgery/brainwashing
restricted_roles = list("Medical Doctor")
- cost = 5
+ cost = 3
/datum/uplink_item/role_restricted/haunted_magic_eightball
name = "Haunted Magic Eightball"
@@ -1517,12 +1531,12 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
cost = 15
restricted_roles = list("Clown")
-/datum/uplink_item/device_tools/honkpins //Idealy so they can place it into their own guns without needing cargo
+/datum/uplink_item/device_tools/ultrahonkpins //Idealy so they can place it into their own guns without needing cargo
name = "Hilarious firing pin"
desc = "A single firing pin made for Clown agents, this firing pin makes any gun honk when fired if not a true clown! \
This firing pin also helps you fire the gun correctly. May the HonkMother HONK you agent."
- item = /obj/item/firing_pin/clown
- cost = 1
+ item = /obj/item/firing_pin/clown/ultra
+ cost = 2
restricted_roles = list("Clown")
/*
diff --git a/html/changelogs/AutoChangeLog-pr-8295.yml b/html/changelogs/AutoChangeLog-pr-8295.yml
new file mode 100644
index 0000000000..833474e9af
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8295.yml
@@ -0,0 +1,5 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscdel: "Many engi flags on non-engi things"
+ - code_imp: "changed some code to be organized at a glance"
diff --git a/html/changelogs/AutoChangeLog-pr-8296.yml b/html/changelogs/AutoChangeLog-pr-8296.yml
new file mode 100644
index 0000000000..78db7ccb0d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8296.yml
@@ -0,0 +1,5 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - balance: "25% < --- 50% For NPC blocking bullshit
+ided: Yes"
diff --git a/html/changelogs/AutoChangeLog-pr-8325.yml b/html/changelogs/AutoChangeLog-pr-8325.yml
new file mode 100644
index 0000000000..1e665e7917
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8325.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - code_imp: "made it look nice"
diff --git a/html/changelogs/AutoChangeLog-pr-8384.yml b/html/changelogs/AutoChangeLog-pr-8384.yml
new file mode 100644
index 0000000000..f98b473e6c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8384.yml
@@ -0,0 +1,6 @@
+author: "Nero1024"
+delete-after: True
+changes:
+ - soundadd: "Bare feet will now make the correct footstep sounds."
+ - soundadd: "Other mobs will make the correct footstep sounds."
+ - soundadd: "Crawling/dragging sounds for downed/incapacitated mobs"
diff --git a/html/changelogs/AutoChangeLog-pr-8397.yml b/html/changelogs/AutoChangeLog-pr-8397.yml
new file mode 100644
index 0000000000..28ed98666f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8397.yml
@@ -0,0 +1,5 @@
+author: "WhiteHusky"
+delete-after: True
+changes:
+ - tweak: "Changed the styling of arousal messages to use pink-ish colors."
+ - bugfix: "The orgasm moodlet message new-lines properly."
diff --git a/html/changelogs/AutoChangeLog-pr-8398.yml b/html/changelogs/AutoChangeLog-pr-8398.yml
new file mode 100644
index 0000000000..a7ce2fbe2d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8398.yml
@@ -0,0 +1,6 @@
+author: "BurgerBB"
+delete-after: True
+changes:
+ - balance: "Ass slapping only works if you're actually behind the target. Ass slapping now respects disarm blocking. You can no longer face/ass slap someone on an intent other than help, unless they are also face/ass slapping."
+ - bugfix: "Fixed ass and face slapping grammar."
+ - rscadd: "Adds meh effects for ass and face slapping."
diff --git a/html/changelogs/AutoChangeLog-pr-8399.yml b/html/changelogs/AutoChangeLog-pr-8399.yml
new file mode 100644
index 0000000000..5c71d19faa
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8399.yml
@@ -0,0 +1,4 @@
+author: "Poojawa"
+delete-after: True
+changes:
+ - rscadd: "Large maps have had a patient room transformed into micro chemistry stations with nothing else in them. They've been labelled 'Apothecary' rooms and are accessible by doctors."
diff --git a/html/changelogs/AutoChangeLog-pr-8400.yml b/html/changelogs/AutoChangeLog-pr-8400.yml
new file mode 100644
index 0000000000..485e4c4812
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8400.yml
@@ -0,0 +1,4 @@
+author: "dtfe3"
+delete-after: True
+changes:
+ - tweak: "Watcher wing Trophy's effect lasts 1 second instead of 0.5"
diff --git a/html/changelogs/AutoChangeLog-pr-8404.yml b/html/changelogs/AutoChangeLog-pr-8404.yml
new file mode 100644
index 0000000000..c230977a44
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8404.yml
@@ -0,0 +1,5 @@
+author: "WhiteHusky"
+delete-after: True
+changes:
+ - bugfix: "Flavor text with special characters will not get partially unescaped."
+ - bugfix: "Canceling when setting flavor text does not clear it anymore."
diff --git a/html/changelogs/AutoChangeLog-pr-8407.yml b/html/changelogs/AutoChangeLog-pr-8407.yml
new file mode 100644
index 0000000000..5f1d9d0729
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8407.yml
@@ -0,0 +1,6 @@
+author: "Poojawa"
+delete-after: True
+changes:
+ - rscadd: "females now have female defined sprites"
+ - bugfix: "Slime legs have had their excess pixels adjusted"
+ - bugfix: "Mammal normal legs are more in line with human legs now"
diff --git a/html/changelogs/AutoChangeLog-pr-8408.yml b/html/changelogs/AutoChangeLog-pr-8408.yml
new file mode 100644
index 0000000000..548e4947be
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8408.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixes cult potentially stalling if the target is erased from existence without being sacced."
diff --git a/html/changelogs/AutoChangeLog-pr-8409.yml b/html/changelogs/AutoChangeLog-pr-8409.yml
new file mode 100644
index 0000000000..01f69bf437
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8409.yml
@@ -0,0 +1,4 @@
+author: "Poojawa"
+delete-after: True
+changes:
+ - bugfix: "fixed species like abductors and golems getting the fat tiddy or pingas"
diff --git a/html/changelogs/AutoChangeLog-pr-8411.yml b/html/changelogs/AutoChangeLog-pr-8411.yml
new file mode 100644
index 0000000000..4d4a122cf2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8411.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - balance: "2 -> 3"
diff --git a/html/changelogs/AutoChangeLog-pr-8413.yml b/html/changelogs/AutoChangeLog-pr-8413.yml
new file mode 100644
index 0000000000..01de909a3b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8413.yml
@@ -0,0 +1,5 @@
+author: "Useroth"
+delete-after: True
+changes:
+ - bugfix: "The space hotel dorms are now properly boltable with the buttons inside."
+ - bugfix: "Makes the booze-o-mat hacked by default. Alternative to https://github.com/Citadel-Station-13/Citadel-Station-13/pull/8350."
diff --git a/html/changelogs/AutoChangeLog-pr-8417.yml b/html/changelogs/AutoChangeLog-pr-8417.yml
new file mode 100644
index 0000000000..2a6eaa6237
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8417.yml
@@ -0,0 +1,5 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "Added a few jet packs to the space queens men"
+ - tweak: "volume of jet packs"
diff --git a/html/changelogs/AutoChangeLog-pr-8419.yml b/html/changelogs/AutoChangeLog-pr-8419.yml
new file mode 100644
index 0000000000..037dba41ad
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8419.yml
@@ -0,0 +1,4 @@
+author: "UntoldTactics"
+delete-after: True
+changes:
+ - tweak: "Rewords the click here prompt given when an attempted conversion is done on an offer rune (for blood cult)"
diff --git a/html/changelogs/AutoChangeLog-pr-8420.yml b/html/changelogs/AutoChangeLog-pr-8420.yml
new file mode 100644
index 0000000000..60c8543647
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8420.yml
@@ -0,0 +1,5 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - bugfix: "Shield blobs no longer become completely invulnerable to all forms of damage after reaching a \"\"\"weakened\"\"\" state"
+ - tweak: "Taken care of what appeared to have been an oversight where shield blobs don't recover their armor after becoming weakened."
diff --git a/html/changelogs/AutoChangeLog-pr-8429.yml b/html/changelogs/AutoChangeLog-pr-8429.yml
new file mode 100644
index 0000000000..0769af85aa
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8429.yml
@@ -0,0 +1,4 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - bugfix: "Nerfed concatenators by limiting the amount of characters they're able to output"
diff --git a/html/changelogs/AutoChangeLog-pr-8434.yml b/html/changelogs/AutoChangeLog-pr-8434.yml
new file mode 100644
index 0000000000..d01858d2b4
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8434.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Stops pulls of resting mobs breaking off whenever you swap turfs with someone else because of crawling delays."
diff --git a/html/changelogs/AutoChangeLog-pr-8435.yml b/html/changelogs/AutoChangeLog-pr-8435.yml
new file mode 100644
index 0000000000..3c2caeb994
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8435.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "fixes IAA."
diff --git a/html/changelogs/AutoChangeLog-pr-8436.yml b/html/changelogs/AutoChangeLog-pr-8436.yml
new file mode 100644
index 0000000000..6d626bf357
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8436.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "bio mass meat"
diff --git a/html/changelogs/AutoChangeLog-pr-8437.yml b/html/changelogs/AutoChangeLog-pr-8437.yml
new file mode 100644
index 0000000000..4257a801c9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8437.yml
@@ -0,0 +1,5 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "more box options"
+ - bugfix: "a lack of replaceable boxes"
diff --git a/html/changelogs/AutoChangeLog-pr-8439.yml b/html/changelogs/AutoChangeLog-pr-8439.yml
new file mode 100644
index 0000000000..1e4bd2efae
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8439.yml
@@ -0,0 +1,6 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - balance: "EMPs now flick off stunbatons, they can be turned back on immediately by the user anyway."
+ - balance: "Stunbatons now very slowly consume charge whilst kept on, at a rate of 4/1000th of a standard batoning charge cost per tick."
+ - balance: "Softened up the charge cost checks to stop the above update from practically reducing the maximum uses of a stun baton by one. Now, should the remaining charge be lower than the hit cost, the resulting stun will be be proportional to the remaining charge divided by the hitcost, within a limit under which the stun batoning just won't happen."
diff --git a/html/changelogs/AutoChangeLog-pr-8443.yml b/html/changelogs/AutoChangeLog-pr-8443.yml
new file mode 100644
index 0000000000..1b1f82977b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8443.yml
@@ -0,0 +1,4 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - tweak: "The timer for stripping an item off of a spaceman is no longer interrupted by your active held item changing. This means you no longer have to worry about filling both of your hands when you're stripping items off of someone."
diff --git a/html/changelogs/AutoChangeLog-pr-8448.yml b/html/changelogs/AutoChangeLog-pr-8448.yml
new file mode 100644
index 0000000000..e670ffc0f4
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8448.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "4 - > 5"
diff --git a/html/changelogs/AutoChangeLog-pr-8449.yml b/html/changelogs/AutoChangeLog-pr-8449.yml
new file mode 100644
index 0000000000..c2c397cdd0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8449.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "5->6"
diff --git a/html/changelogs/AutoChangeLog-pr-8450.yml b/html/changelogs/AutoChangeLog-pr-8450.yml
new file mode 100644
index 0000000000..8afa74c68c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8450.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "4tc - > 2tc"
diff --git a/html/changelogs/AutoChangeLog-pr-8452.yml b/html/changelogs/AutoChangeLog-pr-8452.yml
new file mode 100644
index 0000000000..2b4e430757
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8452.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "mulligan costs 4 - > 3"
diff --git a/html/changelogs/AutoChangeLog-pr-8453.yml b/html/changelogs/AutoChangeLog-pr-8453.yml
new file mode 100644
index 0000000000..cda1843779
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8453.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "Tuberculosis 12tc - > 8tc"
diff --git a/html/changelogs/AutoChangeLog-pr-8454.yml b/html/changelogs/AutoChangeLog-pr-8454.yml
new file mode 100644
index 0000000000..4cc6d98df1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8454.yml
@@ -0,0 +1,5 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "15 - >10"
+ - bugfix: "both bags have the same name"
diff --git a/html/changelogs/AutoChangeLog-pr-8455.yml b/html/changelogs/AutoChangeLog-pr-8455.yml
new file mode 100644
index 0000000000..e7944f5869
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8455.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "5 - > 2"
diff --git a/html/changelogs/AutoChangeLog-pr-8456.yml b/html/changelogs/AutoChangeLog-pr-8456.yml
new file mode 100644
index 0000000000..3ff35b1c09
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8456.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "3 -> 1"
diff --git a/html/changelogs/AutoChangeLog-pr-8459.yml b/html/changelogs/AutoChangeLog-pr-8459.yml
new file mode 100644
index 0000000000..ebce2f0db1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8459.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "2 < - 4"
diff --git a/html/changelogs/AutoChangeLog-pr-8460.yml b/html/changelogs/AutoChangeLog-pr-8460.yml
new file mode 100644
index 0000000000..39af97ef12
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8460.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "1->2 and ultra"
diff --git a/html/changelogs/AutoChangeLog-pr-8463.yml b/html/changelogs/AutoChangeLog-pr-8463.yml
new file mode 100644
index 0000000000..a6c8d05522
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8463.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "shield + crafting"
diff --git a/html/changelogs/AutoChangeLog-pr-8465.yml b/html/changelogs/AutoChangeLog-pr-8465.yml
new file mode 100644
index 0000000000..91556b4afc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8465.yml
@@ -0,0 +1,4 @@
+author: "Useroth"
+delete-after: True
+changes:
+ - bugfix: "After the PR which raised the ammo capacity of said magazines, due to the code, they ended up with an invalid icon state. Fixed through changing the icon state name in the icon file."
diff --git a/html/changelogs/AutoChangeLog-pr-8466.yml b/html/changelogs/AutoChangeLog-pr-8466.yml
new file mode 100644
index 0000000000..a3cffc8f59
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8466.yml
@@ -0,0 +1,4 @@
+author: "Poojawa"
+delete-after: True
+changes:
+ - bugfix: "Atmos and Station alerts should be more alerting."
diff --git a/html/changelogs/AutoChangeLog-pr-8470.yml b/html/changelogs/AutoChangeLog-pr-8470.yml
new file mode 100644
index 0000000000..39399c0724
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8470.yml
@@ -0,0 +1,5 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - balance: "Buffs condensed capsaicin, a yet another feature previously dunked by stam combat."
+ - balance: "speeds up pepper spray puffs."
diff --git a/html/changelogs/AutoChangeLog-pr-8473.yml b/html/changelogs/AutoChangeLog-pr-8473.yml
new file mode 100644
index 0000000000..a4743c9a39
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8473.yml
@@ -0,0 +1,10 @@
+author: "Useroth"
+delete-after: True
+changes:
+ - rscadd: "Taeclowndo shoes which grant the four following abilities:
+- Conjuring a cream pie right into their hand. Every three seconds.
+- Making a banana peel appear out of thin air at the tile of the clown's choice. Every ten seconds.
+- Mega HoNk. A touch-ranged, very small AOE ability, with effect equal to being honked by a Honkerblast on a clown mech, with the effects halved for anyone who isn't its direct target. Every ten seconds.
+- Bluespace Banana Pie. You don't throw this one... not right away at least. This baby can fit an entire body inside. Good for disposal of evidence. 25 second-long action, 45 second cooldown. Also produces a \"[victim's name] cream pie\". The body drops out of the pie if you splat it somewhere or destroy the pie. If you eat it, it will chestburst out of you a'la monkey cube.
+
+It's a 14 TC item for traitor clowns and a 12 TC item for clown-ops."
diff --git a/html/changelogs/AutoChangeLog-pr-8477.yml b/html/changelogs/AutoChangeLog-pr-8477.yml
new file mode 100644
index 0000000000..f5478ed178
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8477.yml
@@ -0,0 +1,4 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - rscadd: "Ported the zulie cloak and blackredgold coat donor items from RP."
diff --git a/html/changelogs/AutoChangeLog-pr-8482.yml b/html/changelogs/AutoChangeLog-pr-8482.yml
new file mode 100644
index 0000000000..095f93a7a3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8482.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "fixes eyestabbing people with cutlery while being a pacifist."
diff --git a/html/changelogs/AutoChangeLog-pr-8485.yml b/html/changelogs/AutoChangeLog-pr-8485.yml
new file mode 100644
index 0000000000..abc79f1f30
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8485.yml
@@ -0,0 +1,5 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "More plushies"
+ - tweak: "attack verbs and descs"
diff --git a/html/changelogs/AutoChangeLog-pr-8495.yml b/html/changelogs/AutoChangeLog-pr-8495.yml
new file mode 100644
index 0000000000..92777ef8b0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8495.yml
@@ -0,0 +1,4 @@
+author: "BurgerBB"
+delete-after: True
+changes:
+ - tweak: "\"Unwillingly\" eating food now sends a warning message instead of a notice. Unable to stuff food down your throat sends a danger message instead of a warning message."
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 70a5a71652..29086033c8 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/mob/aibots.dmi b/icons/mob/aibots.dmi
index 913a0dff02..f4049abc41 100644
Binary files a/icons/mob/aibots.dmi and b/icons/mob/aibots.dmi differ
diff --git a/icons/mob/custom_w.dmi b/icons/mob/custom_w.dmi
index 0c872625dd..dcb36e7b47 100644
Binary files a/icons/mob/custom_w.dmi and b/icons/mob/custom_w.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 3da5fc08e2..09d6fe5374 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi
index 50c143b9cb..f49a27fda4 100644
Binary files a/icons/mob/human_parts_greyscale.dmi and b/icons/mob/human_parts_greyscale.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index b518157bb5..0f3438dfc4 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index d905979c9c..8256c1fc07 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 8e0359e6b3..2cb473fb00 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi
index 9a7d460e14..9faaf8f81a 100644
Binary files a/icons/obj/custom.dmi and b/icons/obj/custom.dmi differ
diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi
index 543d57ff56..655d37d4a6 100644
Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ
diff --git a/icons/obj/plushes.dmi b/icons/obj/plushes.dmi
index 7ca7b068b0..68c51bb4c8 100644
Binary files a/icons/obj/plushes.dmi and b/icons/obj/plushes.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index d6ffc12ae7..1a1e5f617b 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/modular_citadel/code/datums/mood_events/generic_positive_events.dm b/modular_citadel/code/datums/mood_events/generic_positive_events.dm
index 4c581d8184..717fe5a47d 100644
--- a/modular_citadel/code/datums/mood_events/generic_positive_events.dm
+++ b/modular_citadel/code/datums/mood_events/generic_positive_events.dm
@@ -21,7 +21,7 @@
timeout = 3000
/datum/mood_event/orgasm
- description = "I came!" //funny meme haha
+ description = "I came!\n" //funny meme haha
mood_change = 3
timeout = 1000
diff --git a/modular_citadel/code/datums/traits/neutral.dm b/modular_citadel/code/datums/traits/neutral.dm
index 264dbfef0a..05aeb27361 100644
--- a/modular_citadel/code/datums/traits/neutral.dm
+++ b/modular_citadel/code/datums/traits/neutral.dm
@@ -4,6 +4,7 @@
name = "Nymphomania"
desc = "You're always feeling a bit in heat. Also, you get aroused faster than usual."
value = 0
+ mob_trait = TRAIT_NYMPHO
gain_text = "You are feeling extra wild."
lose_text = "You don't feel that burning sensation anymore."
@@ -22,3 +23,11 @@
if(M.canbearoused == FALSE)
to_chat(quirk_holder, "Having high libido is useless when you can't feel arousal at all!")
qdel(src)
+
+/datum/quirk/maso
+ name = "Masochism"
+ desc = "You are aroused by pain."
+ value = 0
+ mob_trait = TRAIT_MASO
+ gain_text = "You desire to be hurt."
+ lose_text = "Pain has become less exciting for you."
diff --git a/modular_citadel/code/game/machinery/cryopod.dm b/modular_citadel/code/game/machinery/cryopod.dm
index 1ff628bfbd..15e7d34c65 100644
--- a/modular_citadel/code/game/machinery/cryopod.dm
+++ b/modular_citadel/code/game/machinery/cryopod.dm
@@ -245,43 +245,6 @@
// This function can not be undone; do not call this unless you are sure
/obj/machinery/cryopod/proc/despawn_occupant()
var/mob/living/mob_occupant = occupant
- var/list/target_candidates = list()
-
- if(istype(SSticker.mode, /datum/antagonist/cult))//thank
- if("sacrifice" in SSticker.mode.cult)
- for(var/mob/living/carbon/human/player in GLOB.player_list)
- if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && !is_convertable_to_cult(player) && player.stat != DEAD)
- target_candidates += player.mind
-
- target_candidates -= mob_occupant.mind
-
- if(target_candidates.len == 0)
- message_admins("Cult Sacrifice: Could not find unconvertable target, checking for convertable target.")
- for(var/mob/living/carbon/human/player in GLOB.player_list)
- if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && player.stat != DEAD)
- target_candidates += player.mind
-
- listclearnulls(target_candidates)
- if(LAZYLEN(target_candidates))
- var/datum/objective/sacrifice/sac_objective = locate() in GLOB.objectives
- sac_objective.target = pick(target_candidates)
- sac_objective.update_explanation_text()
-
- var/datum/job/sacjob = SSjob.GetJob(sac_objective.target.assigned_role)
- var/datum/preferences/sacface = sac_objective.target.current.client.prefs
- var/icon/reshape = get_flat_human_icon(null, sacjob, sacface)
- reshape.Shift(SOUTH, 4)
- reshape.Shift(EAST, 1)
- reshape.Crop(7,4,26,31)
- reshape.Crop(-5,-3,26,30)
- sac_objective.sac_image = reshape
-
- for(var/datum/mind/H in SSticker.mode.cult)
- if(H.current)
- to_chat(H.current, "Nar'Sie murmurs, [occupant] is beyond your reach. Sacrifice [sac_objective.target.current] instead...")
-
- else
- message_admins("Cult Sacrifice: Could not find unconvertable or convertable target after cryopod. WELP!")
//Update any existing objectives involving this mob.
for(var/datum/objective/O in GLOB.objectives)
diff --git a/modular_citadel/code/modules/arousal/arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm
index 307cdff29f..ef9201af60 100644
--- a/modular_citadel/code/modules/arousal/arousal.dm
+++ b/modular_citadel/code/modules/arousal/arousal.dm
@@ -222,17 +222,17 @@
fluid_source = G.linked_organ.reagents
total_fluids = fluid_source.total_volume
if(mb_time)
- src.visible_message("[src] starts to [G.masturbation_verb] [p_their()] [G.name].", \
- "You start to [G.masturbation_verb] your [G.name].", \
- "You start to [G.masturbation_verb] your [G.name].")
+ src.visible_message("[src] starts to [G.masturbation_verb] [p_their()] [G.name].", \
+ "You start to [G.masturbation_verb] your [G.name].", \
+ "You start to [G.masturbation_verb] your [G.name].")
if(do_after(src, mb_time, target = src))
if(total_fluids > 5)
fluid_source.reaction(src.loc, TOUCH, 1, 0)
fluid_source.clear_reagents()
- src.visible_message("[src] orgasms, cumming[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""]!", \
- "You cum[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""].", \
- "You have relieved yourself.")
+ src.visible_message("[src] orgasms, cumming[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""]!", \
+ "You cum[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""].", \
+ "You have relieved yourself.")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
@@ -260,16 +260,16 @@
else
total_fluids = fluid_source.total_volume
if(mb_time) //as long as it's not instant, give a warning
- src.visible_message("[src] looks like they're about to cum.", \
- "You feel yourself about to orgasm.", \
- "You feel yourself about to orgasm.")
+ src.visible_message("[src] looks like they're about to cum.", \
+ "You feel yourself about to orgasm.", \
+ "You feel yourself about to orgasm.")
if(do_after(src, mb_time, target = src))
if(total_fluids > 5)
fluid_source.reaction(src.loc, TOUCH, 1, 0)
fluid_source.clear_reagents()
- src.visible_message("[src] orgasms[istype(src.loc, /turf/open/floor) ? ", spilling onto [src.loc]" : ""], using [p_their()] [G.name]!", \
- "You climax[istype(src.loc, /turf/open/floor) ? ", spilling onto [src.loc]" : ""] with your [G.name].", \
- "You climax using your [G.name].")
+ src.visible_message("[src] orgasms[istype(src.loc, /turf/open/floor) ? ", spilling onto [src.loc]" : ""], using [p_their()] [G.name]!", \
+ "You climax[istype(src.loc, /turf/open/floor) ? ", spilling onto [src.loc]" : ""] with your [G.name].", \
+ "You climax using your [G.name].")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
@@ -288,9 +288,9 @@
fluid_source = G.linked_organ.reagents
total_fluids = fluid_source.total_volume
if(mb_time) //Skip warning if this is an instant climax.
- src.visible_message("[src] is about to climax with [L]!", \
- "You're about to climax with [L]!", \
- "You're preparing to climax with someone!")
+ src.visible_message("[src] is about to climax with [L]!", \
+ "You're about to climax with [L]!", \
+ "You're preparing to climax with someone!")
if(spillage)
if(do_after(src, mb_time, target = src) && in_range(src, L))
fluid_source.trans_to(L, total_fluids*G.fluid_transfer_factor)
@@ -298,9 +298,9 @@
if(total_fluids > 5)
fluid_source.reaction(L.loc, TOUCH, 1, 0)
fluid_source.clear_reagents()
- src.visible_message("[src] climaxes with [L][spillage ? ", overflowing and spilling":""], using [p_their()] [G.name]!", \
- "You orgasm with [L][spillage ? ", spilling out of them":""], using your [G.name].", \
- "You have climaxed with someone[spillage ? ", spilling out of them":""], using your [G.name].")
+ src.visible_message("[src] climaxes with [L][spillage ? ", overflowing and spilling":""], using [p_their()] [G.name]!", \
+ "You orgasm with [L][spillage ? ", spilling out of them":""], using your [G.name].", \
+ "You have climaxed with someone[spillage ? ", spilling out of them":""], using your [G.name].")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
@@ -309,9 +309,9 @@
if(do_after(src, mb_time, target = src) && in_range(src, L))
fluid_source.trans_to(L, total_fluids)
total_fluids = 0
- src.visible_message("[src] climaxes with [L], [p_their()] [G.name] spilling nothing!", \
- "You ejaculate with [L], your [G.name] spilling nothing.", \
- "You have climaxed inside someone, your [G.name] spilling nothing.")
+ src.visible_message("[src] climaxes with [L], [p_their()] [G.name] spilling nothing!", \
+ "You ejaculate with [L], your [G.name] spilling nothing.", \
+ "You have climaxed inside someone, your [G.name] spilling nothing.")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
@@ -335,14 +335,14 @@
// to_chat(src, "You need a container to do this!")
// return
- src.visible_message("[src] starts to [G.masturbation_verb] their [G.name] over [container].", \
- "You start to [G.masturbation_verb] your [G.name] over [container].", \
- "You start to [G.masturbation_verb] your [G.name] over something.")
+ src.visible_message("[src] starts to [G.masturbation_verb] their [G.name] over [container].", \
+ "You start to [G.masturbation_verb] your [G.name] over [container].", \
+ "You start to [G.masturbation_verb] your [G.name] over something.")
if(do_after(src, mb_time, target = src) && in_range(src, container))
fluid_source.trans_to(container, total_fluids)
- src.visible_message("[src] uses [p_their()] [G.name] to fill [container]!", \
- "You used your [G.name] to fill [container].", \
- "You have relieved some pressure.")
+ src.visible_message("[src] uses [p_their()] [G.name] to fill [container]!", \
+ "You used your [G.name] to fill [container].", \
+ "You have relieved some pressure.")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm
index d13c2f6a97..591bb6f1de 100644
--- a/modular_citadel/code/modules/arousal/organs/genitals.dm
+++ b/modular_citadel/code/modules/arousal/organs/genitals.dm
@@ -133,12 +133,12 @@
//proc to give a player their genitals and stuff when they log in
/mob/living/carbon/human/proc/give_genitals(clean=0)//clean will remove all pre-existing genitals. proc will then give them any genitals that are enabled in their DNA
- if (NOGENITALS in dna.species.species_traits)
- return
if(clean)
var/obj/item/organ/genital/GtoClean
for(GtoClean in internal_organs)
qdel(GtoClean)
+ if (NOGENITALS in dna.species.species_traits)
+ return
//Order should be very important. FIRST vagina, THEN testicles, THEN penis, as this affects the order they are rendered in.
if(dna.features["has_breasts"])
give_breasts()
diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm
index c0a4df2243..70f58b3159 100644
--- a/modular_citadel/code/modules/client/loadout/__donator.dm
+++ b/modular_citadel/code/modules/client/loadout/__donator.dm
@@ -373,4 +373,16 @@ datum/gear/darksabresheath
name = "French Beret"
category = SLOT_HEAD
path = /obj/item/clothing/head/frenchberet
- ckeywhitelist = list("notazoltan")
\ No newline at end of file
+ ckeywhitelist = list("notazoltan")
+
+/datum/gear/zuliecloak
+ name = "Project: Zul-E"
+ category = SLOT_WEAR_SUIT
+ path = /obj/item/clothing/suit/hooded/cloak/zuliecloak
+ ckeywhitelist = list("asky")
+
+/datum/gear/blackredgold
+ name = "Black, Red, and Gold Coat"
+ category = SLOT_WEAR_SUIT
+ path = /obj/item/clothing/suit/blackredgold
+ ckeywhitelist = list("ttbnc")
\ No newline at end of file
diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm
index b7f7aea0e8..e1b1110cf8 100644
--- a/modular_citadel/code/modules/custom_loadout/custom_items.dm
+++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm
@@ -454,3 +454,34 @@
icon_state = "moveralls"
mutantrace_variation = NO_MUTANTRACE_VARIATION
+/obj/item/clothing/suit/hooded/cloak/zuliecloak
+ name = "Project: Zul-E"
+ desc = "A standard version of a prototype cloak given out by Nanotrasen higher ups. It's surprisingly thick and heavy for a cloak despite having most of it's tech stripped. It also comes with a bluespace trinket which calls it's accompanying hat onto the user. A worn inscription on the inside of the cloak reads 'Fleuret' ...the rest is faded away."
+ icon_state = "zuliecloak"
+ item_state = "zuliecloak"
+ icon = 'icons/obj/custom.dmi'
+ alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ hoodtype = /obj/item/clothing/head/hooded/cloakhood/zuliecloak
+ body_parts_covered = CHEST|GROIN|ARMS
+ slot_flags = SLOT_WEAR_SUIT | ITEM_SLOT_NECK //it's a cloak. it's cosmetic. so why the hell not? what could possibly go wrong?
+ mutantrace_variation = NO_MUTANTRACE_VARIATION
+
+/obj/item/clothing/head/hooded/cloakhood/zuliecloak
+ name = "NT Special Issue"
+ desc = "This hat is unquestionably the best one, bluespaced to and from CentComm. It smells of Fish and Tea with a hint of antagonism"
+ icon_state = "zuliecap"
+ item_state = "zuliecap"
+ icon = 'icons/obj/custom.dmi'
+ alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ flags_inv = HIDEEARS|HIDEHAIR
+ mutantrace_variation = NO_MUTANTRACE_VARIATION
+
+/obj/item/clothing/suit/blackredgold
+ name = "Multicolor Coat"
+ desc = "An oddly special looking coat with black, red, and gold"
+ icon = 'icons/obj/custom.dmi'
+ alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ icon_state = "redgoldjacket"
+ item_state = "redgoldjacket"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ mutantrace_variation = NO_MUTANTRACE_VARIATION
\ No newline at end of file
diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm
index 8af0dc2013..8d08937f55 100644
--- a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm
+++ b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm
@@ -9,7 +9,7 @@
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
icon_state = "mag-casing-live"
projectile_type = /obj/item/projectile/bullet/magrifle
- energy_cost = 300
+ energy_cost = 200
/obj/item/ammo_casing/caseless/mag_e/anlmagm_e
desc = "A large, specialized ferromagnetic slug designed with a less-than-lethal payload."
@@ -17,7 +17,7 @@
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
icon_state = "mag-casing-live"
projectile_type = /obj/item/projectile/bullet/nlmagrifle
- energy_cost = 300
+ energy_cost = 200
/obj/item/ammo_casing/caseless/mag_e/amags
desc = "A ferromagnetic slug intended to be launched out of a compatible weapon."
@@ -25,7 +25,7 @@
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
icon_state = "mag-casing-live"
projectile_type = /obj/item/projectile/bullet/mags
- energy_cost = 200
+ energy_cost = 125
/obj/item/ammo_casing/caseless/mag_e/anlmags
desc = "A specialized ferromagnetic slug designed with a less-than-lethal payload."
@@ -33,7 +33,7 @@
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
icon_state = "mag-casing-live"
projectile_type = /obj/item/projectile/bullet/nlmags
- energy_cost = 200
+ energy_cost = 125
///magazines///
@@ -53,14 +53,13 @@
ammo_type = /obj/item/ammo_casing/caseless/mag_e/amagm_e
max_ammo = 24
-
/obj/item/ammo_box/magazine/mmag_e/small
name = "magpistol magazine (non-lethal disabler)"
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
icon_state = "nlmagmag"
ammo_type = /obj/item/ammo_casing/caseless/mag_e/anlmags
caliber = "mag_e"
- max_ammo = 15
+ max_ammo = 16
multiple_sprites = 2
/obj/item/ammo_box/magazine/mmag_e/small/lethal
@@ -68,6 +67,7 @@
icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi'
icon_state = "smallmagmag"
ammo_type = /obj/item/ammo_casing/caseless/mag_e/amags
+ max_ammo = 16
///cells///
@@ -218,7 +218,6 @@
pin = null
spawnwithmagazine = FALSE
-
///magpistol///
/obj/item/gun/ballistic/automatic/pistol/mag_e
@@ -278,7 +277,6 @@
if(!dead_cell)
cell.give(cell.maxcharge)
-
/obj/item/gun/ballistic/automatic/pistol/mag_e/update_icon()
..()
if(magazine)
@@ -288,7 +286,6 @@
cut_overlays()
icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
-
/obj/item/gun/ballistic/automatic/pistol/mag_e/nopin
pin = null
spawnwithmagazine = FALSE
diff --git a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
index 061f941043..3da35d9c6d 100644
--- a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
+++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
@@ -104,7 +104,7 @@
M.emote(pick("moan","blush"))
if(prob(5))
var/aroused_message = pick("You feel frisky.", "You're having trouble suppressing your urges.", "You feel in the mood.")
- to_chat(M, "[aroused_message]")
+ to_chat(M, "[aroused_message]")
..()
/datum/reagent/drug/aphrodisiacplus
@@ -133,7 +133,7 @@
aroused_message = pick("You need to fuck someone!", "You're bursting with sexual tension!", "You can't get sex off your mind!")
else
aroused_message = pick("You feel a bit hot.", "You feel strong sexual urges.", "You feel in the mood.", "You're ready to go down on someone.")
- to_chat(M, "[aroused_message]")
+ to_chat(M, "[aroused_message]")
..()
/datum/reagent/drug/aphrodisiacplus/addiction_act_stage2(mob/living/M)
diff --git a/modular_citadel/code/modules/research/designs/autolathe_designs.dm b/modular_citadel/code/modules/research/designs/autolathe_designs.dm
deleted file mode 100755
index 55b83a2262..0000000000
--- a/modular_citadel/code/modules/research/designs/autolathe_designs.dm
+++ /dev/null
@@ -1,15 +0,0 @@
-/datum/design/hypovialsmall
- name = "Hypovial"
- id = "hypovial"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 500)
- build_path = /obj/item/reagent_containers/glass/bottle/vial/small
- category = list("initial","Medical")
-
-/datum/design/hypoviallarge
- name = "Large Hypovial"
- id = "large_hypovial"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 2500)
- build_path = /obj/item/reagent_containers/glass/bottle/vial/large
- category = list("initial","Medical")
diff --git a/modular_citadel/icons/mob/mam_markings.dmi b/modular_citadel/icons/mob/mam_markings.dmi
index ceecf12d2e..3575f38e1c 100644
Binary files a/modular_citadel/icons/mob/mam_markings.dmi and b/modular_citadel/icons/mob/mam_markings.dmi differ
diff --git a/modular_citadel/icons/mob/markings_notmammals.dmi b/modular_citadel/icons/mob/markings_notmammals.dmi
index 316d1d1af8..59b10e93aa 100644
Binary files a/modular_citadel/icons/mob/markings_notmammals.dmi and b/modular_citadel/icons/mob/markings_notmammals.dmi differ
diff --git a/modular_citadel/icons/mob/mutant_bodyparts.dmi b/modular_citadel/icons/mob/mutant_bodyparts.dmi
index 1ed73d2709..5f72d1013b 100644
Binary files a/modular_citadel/icons/mob/mutant_bodyparts.dmi and b/modular_citadel/icons/mob/mutant_bodyparts.dmi differ
diff --git a/modular_citadel/icons/mob/muzzled_helmet.dmi b/modular_citadel/icons/mob/muzzled_helmet.dmi
index e1284679b3..a96f18c3ce 100644
Binary files a/modular_citadel/icons/mob/muzzled_helmet.dmi and b/modular_citadel/icons/mob/muzzled_helmet.dmi differ
diff --git a/modular_citadel/icons/mob/suit_digi.dmi b/modular_citadel/icons/mob/suit_digi.dmi
index c19fb01161..1f1f506d9f 100644
Binary files a/modular_citadel/icons/mob/suit_digi.dmi and b/modular_citadel/icons/mob/suit_digi.dmi differ
diff --git a/modular_citadel/icons/mob/taur_naga.dmi b/modular_citadel/icons/mob/taur_naga.dmi
index f4d6a6139f..1ca4509db7 100644
Binary files a/modular_citadel/icons/mob/taur_naga.dmi and b/modular_citadel/icons/mob/taur_naga.dmi differ
diff --git a/modular_citadel/icons/obj/guns/cit_guns.dmi b/modular_citadel/icons/obj/guns/cit_guns.dmi
index e02025f436..8154a753e0 100644
Binary files a/modular_citadel/icons/obj/guns/cit_guns.dmi and b/modular_citadel/icons/obj/guns/cit_guns.dmi differ
diff --git a/sound/effects/footstep/carpetbarefoot1.ogg b/sound/effects/footstep/carpetbarefoot1.ogg
new file mode 100644
index 0000000000..81615d2970
Binary files /dev/null and b/sound/effects/footstep/carpetbarefoot1.ogg differ
diff --git a/sound/effects/footstep/carpetbarefoot2.ogg b/sound/effects/footstep/carpetbarefoot2.ogg
new file mode 100644
index 0000000000..d1c7e1627e
Binary files /dev/null and b/sound/effects/footstep/carpetbarefoot2.ogg differ
diff --git a/sound/effects/footstep/carpetbarefoot3.ogg b/sound/effects/footstep/carpetbarefoot3.ogg
new file mode 100644
index 0000000000..13ecb3398b
Binary files /dev/null and b/sound/effects/footstep/carpetbarefoot3.ogg differ
diff --git a/sound/effects/footstep/carpetbarefoot4.ogg b/sound/effects/footstep/carpetbarefoot4.ogg
new file mode 100644
index 0000000000..31850250be
Binary files /dev/null and b/sound/effects/footstep/carpetbarefoot4.ogg differ
diff --git a/sound/effects/footstep/carpetbarefoot5.ogg b/sound/effects/footstep/carpetbarefoot5.ogg
new file mode 100644
index 0000000000..e9a44765b1
Binary files /dev/null and b/sound/effects/footstep/carpetbarefoot5.ogg differ
diff --git a/sound/effects/footstep/crawl1.ogg b/sound/effects/footstep/crawl1.ogg
new file mode 100644
index 0000000000..61a73a58d0
Binary files /dev/null and b/sound/effects/footstep/crawl1.ogg differ
diff --git a/sound/effects/footstep/hardbarefoot1.ogg b/sound/effects/footstep/hardbarefoot1.ogg
new file mode 100644
index 0000000000..2614872191
Binary files /dev/null and b/sound/effects/footstep/hardbarefoot1.ogg differ
diff --git a/sound/effects/footstep/hardbarefoot2.ogg b/sound/effects/footstep/hardbarefoot2.ogg
new file mode 100644
index 0000000000..7d89d96105
Binary files /dev/null and b/sound/effects/footstep/hardbarefoot2.ogg differ
diff --git a/sound/effects/footstep/hardbarefoot3.ogg b/sound/effects/footstep/hardbarefoot3.ogg
new file mode 100644
index 0000000000..639751fab0
Binary files /dev/null and b/sound/effects/footstep/hardbarefoot3.ogg differ
diff --git a/sound/effects/footstep/hardbarefoot4.ogg b/sound/effects/footstep/hardbarefoot4.ogg
new file mode 100644
index 0000000000..9cf363a18c
Binary files /dev/null and b/sound/effects/footstep/hardbarefoot4.ogg differ
diff --git a/sound/effects/footstep/hardbarefoot5.ogg b/sound/effects/footstep/hardbarefoot5.ogg
new file mode 100644
index 0000000000..72ebeca84d
Binary files /dev/null and b/sound/effects/footstep/hardbarefoot5.ogg differ
diff --git a/sound/effects/footstep/hardclaw1.ogg b/sound/effects/footstep/hardclaw1.ogg
new file mode 100644
index 0000000000..1d66eb4d49
Binary files /dev/null and b/sound/effects/footstep/hardclaw1.ogg differ
diff --git a/sound/effects/footstep/hardclaw2.ogg b/sound/effects/footstep/hardclaw2.ogg
new file mode 100644
index 0000000000..a6a7951d77
Binary files /dev/null and b/sound/effects/footstep/hardclaw2.ogg differ
diff --git a/sound/effects/footstep/hardclaw3.ogg b/sound/effects/footstep/hardclaw3.ogg
new file mode 100644
index 0000000000..a2e5462199
Binary files /dev/null and b/sound/effects/footstep/hardclaw3.ogg differ
diff --git a/sound/effects/footstep/hardclaw4.ogg b/sound/effects/footstep/hardclaw4.ogg
new file mode 100644
index 0000000000..bd845a8782
Binary files /dev/null and b/sound/effects/footstep/hardclaw4.ogg differ
diff --git a/sound/effects/footstep/heavy1.ogg b/sound/effects/footstep/heavy1.ogg
new file mode 100644
index 0000000000..bfc80a4270
Binary files /dev/null and b/sound/effects/footstep/heavy1.ogg differ
diff --git a/sound/effects/footstep/heavy2.ogg b/sound/effects/footstep/heavy2.ogg
new file mode 100644
index 0000000000..514e3ac3e2
Binary files /dev/null and b/sound/effects/footstep/heavy2.ogg differ
diff --git a/sound/effects/footstep/slime1.ogg b/sound/effects/footstep/slime1.ogg
new file mode 100644
index 0000000000..a83b7646f1
Binary files /dev/null and b/sound/effects/footstep/slime1.ogg differ
diff --git a/sound/effects/footstep/woodbarefoot1.ogg b/sound/effects/footstep/woodbarefoot1.ogg
new file mode 100644
index 0000000000..bb66da770e
Binary files /dev/null and b/sound/effects/footstep/woodbarefoot1.ogg differ
diff --git a/sound/effects/footstep/woodbarefoot2.ogg b/sound/effects/footstep/woodbarefoot2.ogg
new file mode 100644
index 0000000000..67397d868e
Binary files /dev/null and b/sound/effects/footstep/woodbarefoot2.ogg differ
diff --git a/sound/effects/footstep/woodbarefoot3.ogg b/sound/effects/footstep/woodbarefoot3.ogg
new file mode 100644
index 0000000000..113a89003a
Binary files /dev/null and b/sound/effects/footstep/woodbarefoot3.ogg differ
diff --git a/sound/effects/footstep/woodbarefoot4.ogg b/sound/effects/footstep/woodbarefoot4.ogg
new file mode 100644
index 0000000000..ccc2e82075
Binary files /dev/null and b/sound/effects/footstep/woodbarefoot4.ogg differ
diff --git a/sound/effects/footstep/woodbarefoot5.ogg b/sound/effects/footstep/woodbarefoot5.ogg
new file mode 100644
index 0000000000..6fbce27109
Binary files /dev/null and b/sound/effects/footstep/woodbarefoot5.ogg differ
diff --git a/sound/effects/footstep/woodclaw1.ogg b/sound/effects/footstep/woodclaw1.ogg
new file mode 100644
index 0000000000..181403b93f
Binary files /dev/null and b/sound/effects/footstep/woodclaw1.ogg differ
diff --git a/sound/effects/footstep/woodclaw2.ogg b/sound/effects/footstep/woodclaw2.ogg
new file mode 100644
index 0000000000..29b04a9554
Binary files /dev/null and b/sound/effects/footstep/woodclaw2.ogg differ
diff --git a/sound/effects/footstep/woodclaw3.ogg b/sound/effects/footstep/woodclaw3.ogg
new file mode 100644
index 0000000000..9f4ac6d334
Binary files /dev/null and b/sound/effects/footstep/woodclaw3.ogg differ
diff --git a/sound/voice/firebot/detected.ogg b/sound/voice/firebot/detected.ogg
new file mode 100644
index 0000000000..e5acfa10c7
Binary files /dev/null and b/sound/voice/firebot/detected.ogg differ
diff --git a/sound/voice/firebot/extinguishing.ogg b/sound/voice/firebot/extinguishing.ogg
new file mode 100644
index 0000000000..d7b44b7fce
Binary files /dev/null and b/sound/voice/firebot/extinguishing.ogg differ
diff --git a/sound/voice/firebot/keepitcool.ogg b/sound/voice/firebot/keepitcool.ogg
new file mode 100644
index 0000000000..e04c94337a
Binary files /dev/null and b/sound/voice/firebot/keepitcool.ogg differ
diff --git a/sound/voice/firebot/nofires.ogg b/sound/voice/firebot/nofires.ogg
new file mode 100644
index 0000000000..962f18d135
Binary files /dev/null and b/sound/voice/firebot/nofires.ogg differ
diff --git a/sound/voice/firebot/onlyyou.ogg b/sound/voice/firebot/onlyyou.ogg
new file mode 100644
index 0000000000..e8eb3cdf2e
Binary files /dev/null and b/sound/voice/firebot/onlyyou.ogg differ
diff --git a/sound/voice/firebot/stopdropnroll.ogg b/sound/voice/firebot/stopdropnroll.ogg
new file mode 100644
index 0000000000..9e6b1c1bb6
Binary files /dev/null and b/sound/voice/firebot/stopdropnroll.ogg differ
diff --git a/sound/voice/firebot/tempnominal.ogg b/sound/voice/firebot/tempnominal.ogg
new file mode 100644
index 0000000000..9eaa984cd6
Binary files /dev/null and b/sound/voice/firebot/tempnominal.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index ec265f1aea..f2cef76dd9 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1226,13 +1226,13 @@
#include "code\modules\antagonists\clockcult\clock_scriptures\scripture_scripts.dm"
#include "code\modules\antagonists\clockcult\clock_structures\_trap_object.dm"
#include "code\modules\antagonists\clockcult\clock_structures\ark_of_the_clockwork_justicar.dm"
-#include "code\modules\antagonists\clockcult\clock_structures\stargazer.dm"
#include "code\modules\antagonists\clockcult\clock_structures\clockwork_obelisk.dm"
#include "code\modules\antagonists\clockcult\clock_structures\eminence_spire.dm"
#include "code\modules\antagonists\clockcult\clock_structures\heralds_beacon.dm"
#include "code\modules\antagonists\clockcult\clock_structures\mania_motor.dm"
#include "code\modules\antagonists\clockcult\clock_structures\ocular_warden.dm"
#include "code\modules\antagonists\clockcult\clock_structures\ratvar_the_clockwork_justicar.dm"
+#include "code\modules\antagonists\clockcult\clock_structures\stargazer.dm"
#include "code\modules\antagonists\clockcult\clock_structures\taunting_trail.dm"
#include "code\modules\antagonists\clockcult\clock_structures\wall_gear.dm"
#include "code\modules\antagonists\clockcult\clock_structures\trap_triggers\lever.dm"
@@ -1495,6 +1495,7 @@
#include "code\modules\clothing\shoes\colour.dm"
#include "code\modules\clothing\shoes\magboots.dm"
#include "code\modules\clothing\shoes\miscellaneous.dm"
+#include "code\modules\clothing\shoes\taeclowndo.dm"
#include "code\modules\clothing\shoes\vg_shoes.dm"
#include "code\modules\clothing\spacesuits\_spacesuits.dm"
#include "code\modules\clothing\spacesuits\chronosuit.dm"
@@ -2078,6 +2079,7 @@
#include "code\modules\mob\living\simple_animal\bot\cleanbot.dm"
#include "code\modules\mob\living\simple_animal\bot\construction.dm"
#include "code\modules\mob\living\simple_animal\bot\ed209bot.dm"
+#include "code\modules\mob\living\simple_animal\bot\firebot.dm"
#include "code\modules\mob\living\simple_animal\bot\floorbot.dm"
#include "code\modules\mob\living\simple_animal\bot\honkbot.dm"
#include "code\modules\mob\living\simple_animal\bot\medbot.dm"
@@ -2501,15 +2503,24 @@
#include "code\modules\research\server.dm"
#include "code\modules\research\stock_parts.dm"
#include "code\modules\research\designs\AI_module_designs.dm"
-#include "code\modules\research\designs\autolathe_designs.dm"
#include "code\modules\research\designs\biogenerator_designs.dm"
#include "code\modules\research\designs\bluespace_designs.dm"
-#include "code\modules\research\designs\comp_board_designs.dm"
+#include "code\modules\research\designs\comp_board_designs\comp_board_designs_all_misc.dm"
+#include "code\modules\research\designs\comp_board_designs\comp_board_designs_cargo .dm"
+#include "code\modules\research\designs\comp_board_designs\comp_board_designs_engi.dm"
+#include "code\modules\research\designs\comp_board_designs\comp_board_designs_medical.dm"
+#include "code\modules\research\designs\comp_board_designs\comp_board_designs_sci.dm"
+#include "code\modules\research\designs\comp_board_designs\comp_board_designs_sec.dm"
#include "code\modules\research\designs\computer_part_designs.dm"
#include "code\modules\research\designs\electronics_designs.dm"
#include "code\modules\research\designs\equipment_designs.dm"
#include "code\modules\research\designs\limbgrower_designs.dm"
-#include "code\modules\research\designs\machine_designs.dm"
+#include "code\modules\research\designs\machine_desings\machine_designs_all_misc.dm"
+#include "code\modules\research\designs\machine_desings\machine_designs_cargo.dm"
+#include "code\modules\research\designs\machine_desings\machine_designs_engi.dm"
+#include "code\modules\research\designs\machine_desings\machine_designs_medical.dm"
+#include "code\modules\research\designs\machine_desings\machine_designs_sci.dm"
+#include "code\modules\research\designs\machine_desings\machine_designs_service.dm"
#include "code\modules\research\designs\mecha_designs.dm"
#include "code\modules\research\designs\mechfabricator_designs.dm"
#include "code\modules\research\designs\medical_designs.dm"
@@ -2521,6 +2532,12 @@
#include "code\modules\research\designs\stock_parts_designs.dm"
#include "code\modules\research\designs\telecomms_designs.dm"
#include "code\modules\research\designs\weapon_designs.dm"
+#include "code\modules\research\designs\autolathe_desings\autolathe_designs_construction.dm"
+#include "code\modules\research\designs\autolathe_desings\autolathe_designs_electronics.dm"
+#include "code\modules\research\designs\autolathe_desings\autolathe_designs_medical_and_dinnerware.dm"
+#include "code\modules\research\designs\autolathe_desings\autolathe_designs_sec_and_hacked.dm"
+#include "code\modules\research\designs\autolathe_desings\autolathe_designs_tcomms_and_misc.dm"
+#include "code\modules\research\designs\autolathe_desings\autolathe_designs_tools.dm"
#include "code\modules\research\machinery\_production.dm"
#include "code\modules\research\machinery\circuit_imprinter.dm"
#include "code\modules\research\machinery\departmental_circuit_imprinter.dm"
@@ -2646,6 +2663,7 @@
#include "code\modules\spells\spell_types\shapeshift.dm"
#include "code\modules\spells\spell_types\spacetime_distortion.dm"
#include "code\modules\spells\spell_types\summonitem.dm"
+#include "code\modules\spells\spell_types\taeclowndo.dm"
#include "code\modules\spells\spell_types\the_traps.dm"
#include "code\modules\spells\spell_types\touch_attacks.dm"
#include "code\modules\spells\spell_types\trigger.dm"
@@ -2991,7 +3009,6 @@
#include "modular_citadel\code\modules\reagents\reagent container\hypovial.dm"
#include "modular_citadel\code\modules\reagents\reagents\cit_reagents.dm"
#include "modular_citadel\code\modules\recycling\disposal\bin.dm"
-#include "modular_citadel\code\modules\research\designs\autolathe_designs.dm"
#include "modular_citadel\code\modules\research\designs\autoylathe_designs.dm"
#include "modular_citadel\code\modules\research\designs\machine_designs.dm"
#include "modular_citadel\code\modules\research\designs\weapon_designs.dm"