diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index aae5ff8ff9..da2f46696e 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -15021,6 +15021,9 @@
location = "Bar"
},
/obj/effect/turf_decal/delivery,
+/obj/machinery/door/window/eastleft{
+ req_access_txt = "25"
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/bar)
"aGc" = (
@@ -21299,6 +21302,9 @@
location = "Theatre"
},
/obj/effect/turf_decal/delivery,
+/obj/machinery/door/window/westleft{
+ req_access_txt = "46"
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/theatre)
"aQj" = (
@@ -26153,6 +26159,9 @@
dir = 4
},
/obj/effect/turf_decal/delivery,
+/obj/machinery/door/window/eastright{
+ req_one_access_txt = "48,50"
+ },
/turf/open/floor/plasteel,
/area/quartermaster/office)
"aXg" = (
@@ -29213,6 +29222,9 @@
location = "Kitchen"
},
/obj/effect/turf_decal/delivery,
+/obj/machinery/door/window/eastleft{
+ req_access_txt = "28"
+ },
/turf/open/floor/plasteel,
/area/crew_quarters/kitchen)
"bcd" = (
@@ -30865,6 +30877,9 @@
location = "Hydroponics"
},
/obj/effect/turf_decal/delivery,
+/obj/machinery/door/window/westleft{
+ req_access_txt = "35"
+ },
/turf/open/floor/plasteel,
/area/hallway/secondary/service)
"beW" = (
@@ -36055,6 +36070,9 @@
/obj/structure/plasticflaps/opaque,
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/delivery,
+/obj/machinery/door/window/northright{
+ req_access_txt = "48"
+ },
/turf/open/floor/plasteel,
/area/maintenance/starboard/fore)
"bnB" = (
@@ -41789,6 +41807,9 @@
location = "Atmospherics"
},
/obj/effect/turf_decal/delivery,
+/obj/machinery/door/window/westleft{
+ req_access_txt = "24"
+ },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bwH" = (
@@ -71753,6 +71774,9 @@
location = "Security"
},
/obj/effect/turf_decal/delivery,
+/obj/machinery/door/window/northleft{
+ req_access_txt = "63"
+ },
/turf/open/floor/plasteel,
/area/security/range)
"cqh" = (
@@ -82547,6 +82571,9 @@
location = "Engineering"
},
/obj/effect/turf_decal/delivery,
+/obj/machinery/door/window/northright{
+ req_access_txt = "10"
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"cIr" = (
@@ -87734,6 +87761,9 @@
location = "Medbay"
},
/obj/effect/turf_decal/delivery,
+/obj/machinery/door/window/westleft{
+ req_access_txt = "5"
+ },
/turf/open/floor/plasteel,
/area/medical/storage)
"cRl" = (
@@ -114081,6 +114111,9 @@
location = "Robotics"
},
/obj/effect/turf_decal/delivery,
+/obj/machinery/door/window/northright{
+ req_access_txt = "47"
+ },
/turf/open/floor/plasteel,
/area/science/robotics/lab)
"dKl" = (
@@ -127273,6 +127306,19 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
+"oOb" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/machinery/door/window{
+ req_one_access_txt = "48,50"
+ },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
+/area/quartermaster/sorting)
"oSD" = (
/obj/machinery/meter,
/obj/machinery/atmospherics/pipe/manifold/general/visible{
@@ -167677,7 +167723,7 @@ aCP
avQ
aFe
aGp
-aHH
+oOb
aJg
aKF
aLP
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index ef9e6a044f..8dc7464230 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -50,7 +50,7 @@
#define isgolem(A) (is_species(A, /datum/species/golem))
#define islizard(A) (is_species(A, /datum/species/lizard))
#define isplasmaman(A) (is_species(A, /datum/species/plasmaman))
-#define ispodperson(A) (is_species(A, /datum/species/podperson))
+#define ispodperson(A) (is_species(A, /datum/species/pod))
#define isflyperson(A) (is_species(A, /datum/species/fly))
#define isjellyperson(A) (is_species(A, /datum/species/jelly))
#define isslimeperson(A) (is_species(A, /datum/species/jelly/slime))
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index 657bbf82d5..10e9ff3157 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -116,6 +116,8 @@
#define BIOWARE_GENERIC "generic"
#define BIOWARE_NERVES "nerves"
#define BIOWARE_CIRCULATION "circulation"
+#define BIOWARE_LIGAMENTS "ligaments"
+#define BIOWARE_DISSECTION "dissected"
//Health hud screws for carbon mobs
#define SCREWYHUD_NONE 0
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index a4bca2f2c8..e198041c6e 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -95,6 +95,8 @@
#define TRAIT_NOHUNGER "no_hunger"
#define TRAIT_EASYDISMEMBER "easy_dismember"
#define TRAIT_LIMBATTACHMENT "limb_attach"
+#define TRAIT_NOLIMBDISABLE "no_limb_disable"
+#define TRAIT_EASYLIMBDISABLE "easy_limb_disable"
#define TRAIT_TOXINLOVER "toxinlover"
#define TRAIT_NOBREATH "no_breath"
#define TRAIT_ANTIMAGIC "anti_magic"
diff --git a/code/datums/ert.dm b/code/datums/ert.dm
index 4976891543..4b4cce3794 100644
--- a/code/datums/ert.dm
+++ b/code/datums/ert.dm
@@ -61,7 +61,7 @@
teamsize = 1
opendoors = FALSE
enforce_human = FALSE
- roles = /datum/antagonist/greybois
+ roles = list(/datum/antagonist/greybois)
leader_role = /datum/antagonist/greybois/greygod
rename_team = "Emergency Assistants"
polldesc = "an Emergency Assistant"
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index 6e41527b24..cf5d685b4a 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -1,7 +1,7 @@
/obj/item/storage/box/syndicate
/obj/item/storage/box/syndicate/PopulateContents()
- switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1)))
+ switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "baseball" = 1, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1)))
if("bloodyspai") // 30 tc now this is more right
new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set
new /obj/item/clothing/mask/chameleon(src) // Goes with above
@@ -52,7 +52,7 @@
new /obj/item/clothing/under/suit_jacket/really_black(src)
new /obj/item/screwdriver/power(src) //2 tc item
- if("murder") // 35 tc now
+ if("murder") // 35 tc
new /obj/item/melee/transforming/energy/sword/saber(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
new /obj/item/card/emag(src)
@@ -62,6 +62,17 @@
new /obj/item/clothing/glasses/phantomthief/syndicate(src)
new /obj/item/reagent_containers/syringe/stimulants(src)
+ if("baseball") // 42~ tc
+ new /obj/item/melee/baseball_bat/ablative/syndi(src) //Lets say 12 tc, lesser sleeping carp
+ new /obj/item/clothing/glasses/sunglasses/garb(src) //Lets say 2 tc
+ new /obj/item/card/emag(src) //6 tc
+ new /obj/item/clothing/shoes/sneakers/noslip(src) //2tc
+ new /obj/item/encryptionkey/syndicate(src) //1tc
+ new /obj/item/autosurgeon/anti_drop(src) //Lets just say 7~
+ new /obj/item/clothing/under/syndicate/baseball(src) //3tc
+ new /obj/item/clothing/head/soft/baseball(src) //Lets say 4 tc
+ new /obj/item/reagent_containers/hypospray/medipen/stimulants/baseball(src) //lets say 5tc
+
if("implant") // 67+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it?
new /obj/item/implanter/freedom(src)
new /obj/item/implanter/uplink/precharged(src)
diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm
index 70bfebb799..f891a48df6 100644
--- a/code/game/objects/items/tools/crowbar.dm
+++ b/code/game/objects/items/tools/crowbar.dm
@@ -31,7 +31,7 @@
name = "brass crowbar"
desc = "A brass crowbar. It feels faintly warm to the touch."
resistance_flags = FIRE_PROOF | ACID_PROOF
- icon_state = "crowbar_brass"
+ icon_state = "crowbar_clock"
toolspeed = 0.5
/obj/item/crowbar/bronze
diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm
index 68946f73cd..6cbede78a8 100644
--- a/code/game/objects/items/tools/screwdriver.dm
+++ b/code/game/objects/items/tools/screwdriver.dm
@@ -81,7 +81,7 @@
name = "brass screwdriver"
desc = "A screwdriver made of brass. The handle feels freezing cold."
resistance_flags = FIRE_PROOF | ACID_PROOF
- icon_state = "screwdriver_brass"
+ icon_state = "screwdriver_clock"
item_state = "screwdriver_brass"
toolspeed = 0.5
random_color = FALSE
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index 9b622a14c4..fb38e4335e 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -360,7 +360,7 @@
name = "brass welding tool"
desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch."
resistance_flags = FIRE_PROOF | ACID_PROOF
- icon_state = "brasswelder"
+ icon_state = "clockwelder"
item_state = "brasswelder"
/obj/item/weldingtool/bronze
diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm
index 527891afdb..e40ae8bdc1 100644
--- a/code/game/objects/items/tools/wirecutters.dm
+++ b/code/game/objects/items/tools/wirecutters.dm
@@ -63,9 +63,9 @@
/obj/item/wirecutters/brass
name = "brass wirecutters"
- desc = "A pair of wirecutters made of brass. The handle feels freezing cold to the touch."
+ desc = "A pair of eloquent wirecutters made of brass. The handle feels freezing cold to the touch."
resistance_flags = FIRE_PROOF | ACID_PROOF
- icon_state = "cutters_brass"
+ icon_state = "cutters_clock"
random_color = FALSE
toolspeed = 0.5
diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm
index 8ff960825a..462eb22aaa 100644
--- a/code/game/objects/items/tools/wrench.dm
+++ b/code/game/objects/items/tools/wrench.dm
@@ -32,7 +32,7 @@
name = "brass wrench"
desc = "A brass wrench. It's faintly warm to the touch."
resistance_flags = FIRE_PROOF | ACID_PROOF
- icon_state = "wrench_brass"
+ icon_state = "wrench_clock"
toolspeed = 0.5
/obj/item/wrench/bronze
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index c6384e7438..4cb6fc74c0 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -522,7 +522,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
throwforce = 14
obj_flags = UNIQUE_RENAME
var/chaplain_spawnable = TRUE
- total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
+ total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
/obj/item/melee/baseball_bat/chaplain/Initialize()
. = ..()
@@ -578,6 +578,12 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, 1)
return 1
+/obj/item/melee/baseball_bat/ablative/syndi
+ name = "syndicate major league bat"
+ desc = "A metal bat made by the syndicate for the major league team."
+ force = 18 //Spear damage...
+ throwforce = 30
+
/obj/item/melee/flyswatter
name = "flyswatter"
desc = "Useful for killing insects of all sizes."
diff --git a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm
index 819dbafd6a..98164de099 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm
@@ -1,5 +1,5 @@
/datum/surgery/organ_extraction
- name = "experimental dissection"
+ name = "experimental organ replacement"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/incise, /datum/surgery_step/extract_organ, /datum/surgery_step/gland_insert)
possible_locs = list(BODY_ZONE_CHEST)
ignore_clothes = 1
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 84db999325..ebd135916c 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -461,9 +461,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
underwear = sanitize_inlist(underwear, GLOB.underwear_list)
undie_color = sanitize_hexcolor(undie_color, 3, FALSE, initial(undie_color))
undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list)
- shirt_color = sanitize_hexcolor(shirt_color, 6, FALSE, initial(shirt_color))
+ shirt_color = sanitize_hexcolor(shirt_color, 3, FALSE, initial(shirt_color))
socks = sanitize_inlist(socks, GLOB.socks_list)
- socks_color = sanitize_hexcolor(socks_color, 6, FALSE, initial(socks_color))
+ socks_color = sanitize_hexcolor(socks_color, 3, FALSE, initial(socks_color))
age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age))
hair_color = sanitize_hexcolor(hair_color, 3, 0)
facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0)
diff --git a/code/modules/clothing/glasses/vg_glasses.dm b/code/modules/clothing/glasses/vg_glasses.dm
index 449b34b22e..a51a03242c 100644
--- a/code/modules/clothing/glasses/vg_glasses.dm
+++ b/code/modules/clothing/glasses/vg_glasses.dm
@@ -6,21 +6,18 @@
name = "purple sunglasses"
icon_state = "sun_purple"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
/obj/item/clothing/glasses/sunglasses/star
name = "star-shaped sunglasses"
desc = "Novelty sunglasses, both lenses are in the shape of a star."
icon_state = "sun_star"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
/obj/item/clothing/glasses/sunglasses/rockstar
name = "red star-shaped sunglasses"
desc = "Novelty sunglasses with a fancy silver frame and two red-tinted star-shaped lenses. You should probably stomp on them and get a pair of normal ones."
icon_state = "sun_star_silver"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
/obj/item/clothing/glasses/gglasses
name = "Green Glasses"
@@ -28,7 +25,6 @@
icon_state = "gglasses"
item_state = "gglasses"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
/obj/item/clothing/glasses/welding/superior
name = "superior welding goggles"
@@ -36,7 +32,6 @@
icon_state = "rwelding-g"
item_state = "rwelding-g"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi'
actions_types = list(/datum/action/item_action/toggle)
flash_protect = 2
tint = 1
diff --git a/code/modules/clothing/head/cit_hats.dm b/code/modules/clothing/head/cit_hats.dm
index 7b0e68264f..df4a21d6c1 100644
--- a/code/modules/clothing/head/cit_hats.dm
+++ b/code/modules/clothing/head/cit_hats.dm
@@ -4,4 +4,3 @@
icon = 'modular_citadel/icons/obj/clothing/cit_hats.dmi'
icon_state = "hunter"
item_state = "hunter_worn"
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm
index 5c7514541d..b14b0575f9 100644
--- a/code/modules/clothing/head/soft_caps.dm
+++ b/code/modules/clothing/head/soft_caps.dm
@@ -129,3 +129,14 @@
icon_state = "emtsoft"
item_color = "emt"
dog_fashion = null
+
+/obj/item/clothing/head/soft/baseball
+ name = "baseball cap"
+ desc = "It's a robust baseball hat, this one belongs to syndicate major league team."
+ icon_state = "baseballsoft"
+ item_color = "baseballsoft"
+ item_state = "baseballsoft"
+ flags_inv = HIDEEYES|HIDEFACE
+ armor = list("melee" = 35, "bullet" = 35, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 90)
+ strip_delay = 90 //You dont take a Major Leage cap
+ dog_fashion = null
\ No newline at end of file
diff --git a/code/modules/clothing/head/vg_hats.dm b/code/modules/clothing/head/vg_hats.dm
index efeb5291db..dc245cd39a 100644
--- a/code/modules/clothing/head/vg_hats.dm
+++ b/code/modules/clothing/head/vg_hats.dm
@@ -1,4 +1,3 @@
-
/obj/item/clothing/head/helmet/dredd
name = "Judge Helmet"
desc = "Judge, Jury, and Executioner."
@@ -12,7 +11,6 @@
max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
strip_delay = 80
dog_fashion = null
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/helmet/aviatorhelmet
name = "Aviator Helmet"
@@ -21,15 +19,12 @@
item_state = "aviator_helmet"
icon_state = "aviator_helmet"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/helmet/biker
name = "Biker's Helmet"
desc = "This helmet should protect you from russians and masked vigilantes."
armor = list(melee = 25, bullet = 15, laser = 20, energy = 10, bomb = 10, bio = 0, rad = 0)
icon_state = "biker_helmet"
- icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
/obj/item/clothing/head/helmet/richard
@@ -38,7 +33,6 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
icon_state = "richard"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
/obj/item/clothing/head/helmet/megahelmet
@@ -47,7 +41,6 @@
icon_state = "megahelmet"
item_state = "megahelmet"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
siemens_coefficient = 1
/obj/item/clothing/head/helmet/protohelmet
@@ -56,7 +49,6 @@
icon_state = "protohelmet"
item_state = "protohelmet"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
siemens_coefficient = 1
/obj/item/clothing/head/helmet/megaxhelmet
@@ -65,7 +57,6 @@
icon_state = "megaxhelmet"
item_state = "megaxhelmet"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/helmet/joehelmet
name = "Sniper Helmet"
@@ -74,7 +65,6 @@
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
item_state = "joehelmet"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/helmet/doomguy
name = "Doomguy's helmet"
@@ -83,7 +73,6 @@
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
item_state = "doom"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
armor = list(melee = 50, bullet = 40, laser = 40,energy = 40, bomb = 5, bio = 0, rad = 0)
/obj/item/clothing/head/helmet/neorussian
@@ -92,8 +81,6 @@
icon_state = "nr_helmet"
item_state = "nr_helmet"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
-
/obj/item/clothing/head/stalhelm
name = "Stalhelm"
@@ -101,7 +88,6 @@
icon_state = "stalhelm"
item_state = "stalhelm"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/panzer
name = "Panzer Cap"
@@ -109,7 +95,6 @@
icon_state = "panzercap"
item_state = "panzercap"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/naziofficer
name = "Officer Cap"
@@ -117,8 +102,6 @@
icon_state = "officercap"
item_state = "officercap"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
-
/obj/item/clothing/head/russobluecamohat
name = "russian blue camo beret"
@@ -133,7 +116,6 @@
icon_state = "russofurhat"
item_state = "russofurhat"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/squatter_hat
name = "slav squatter hat"
@@ -141,7 +123,6 @@
item_state = "squatter_hat"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
desc = "Cyka blyat."
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/snake
name = "snake head"
@@ -149,8 +130,6 @@
icon_state = "snakehead"
item_state = "snakehead"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
-
/obj/item/clothing/head/mummy_rags
name = "mummy rags"
desc = "Ancient rags taken off from some mummy."
@@ -158,7 +137,6 @@
item_state = "mummy"
item_color = "mummy"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
/obj/item/clothing/head/clownpiece
@@ -167,7 +145,6 @@
icon_state = "clownpiece"
item_state = "clownpiece"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/mitre
name = "mitre"
@@ -175,7 +152,6 @@
icon_state = "mitre"
item_state = "mitre"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
/obj/item/clothing/head/tinfoil
name = "tinfoil hat"
@@ -183,7 +159,6 @@
icon_state = "foilhat"
item_state = "paper"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
siemens_coefficient = 2
/obj/item/clothing/head/celtic
@@ -192,4 +167,3 @@
icon_state = "celtic_crown"
item_state = "celtic_crown"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
diff --git a/code/modules/clothing/masks/vg_masks.dm b/code/modules/clothing/masks/vg_masks.dm
index 7de27fb780..29b65a6b8e 100644
--- a/code/modules/clothing/masks/vg_masks.dm
+++ b/code/modules/clothing/masks/vg_masks.dm
@@ -3,18 +3,15 @@
desc = "Some pranksters are truly magical."
icon_state = "wizzclown"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi'
/obj/item/clothing/mask/chapmask
name = "venetian mask"
desc = "A plain porcelain mask that covers the entire face. Standard attire for particularly unspeakable religions. The eyes are wide shut."
icon_state = "chapmask"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi'
/obj/item/clothing/mask/neorussian
name = "neo-Russian mask"
desc = "Somehow, it makes you act and look way more polite than usual."
icon_state = "nr_mask"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi'
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 4659de3e6a..7fe527fec3 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -62,6 +62,16 @@
desc = "A pair of orange rubber boots, designed to prevent slipping on wet surfaces while also drying them."
icon_state = "galoshes_dry"
+/obj/item/clothing/shoes/sneakers/noslip
+ desc = "A pair of black shoes, they have the soles of galoshes making them unable to be slipped on a wet surface."
+ name = "black shoes"
+ icon_state = "black"
+ permeability_coefficient = 0.30
+ clothing_flags = NOSLIP
+ strip_delay = 50
+ equip_delay_other = 50
+ resistance_flags = NONE
+
/obj/item/clothing/shoes/galoshes/dry/step_action()
var/turf/open/t_loc = get_turf(src)
SEND_SIGNAL(t_loc, COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY)
@@ -69,10 +79,8 @@
/obj/item/clothing/shoes/clown_shoes
desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!"
name = "clown shoes"
- icon_state = "clown"
- item_state = "clown_shoes"
+ icon_state = "clown_shoes"
slowdown = SHOES_SLOWDOWN+1
- item_color = "clown"
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes/clown
/obj/item/clothing/shoes/clown_shoes/Initialize()
@@ -98,7 +106,6 @@
name = "jackboots"
desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
icon_state = "jackboots"
- item_state = "jackboots"
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
item_color = "hosred"
@@ -115,7 +122,6 @@
name = "winter boots"
desc = "Boots lined with 'synthetic' animal fur."
icon_state = "winterboots"
- item_state = "winterboots"
permeability_coefficient = 0.15
cold_protection = FEET|LEGS
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
@@ -127,7 +133,6 @@
name = "work boots"
desc = "Nanotrasen-issue Engineering lace-up work boots for the especially blue-collar."
icon_state = "workboots"
- item_state = "jackboots"
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
permeability_coefficient = 0.15
@@ -145,7 +150,6 @@
name = "\improper Nar'Sien invoker boots"
desc = "A pair of boots worn by the followers of Nar'Sie."
icon_state = "cult"
- item_state = "cult"
item_color = "cult"
cold_protection = FEET
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
@@ -178,7 +182,6 @@
name = "roman sandals"
desc = "Sandals with buckled leather straps on it."
icon_state = "roman"
- item_state = "roman"
strip_delay = 100
equip_delay_other = 100
permeability_coefficient = 0.9
@@ -187,14 +190,12 @@
name = "griffon boots"
desc = "A pair of costume boots fashioned after bird talons."
icon_state = "griffinboots"
- item_state = "griffinboots"
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
/obj/item/clothing/shoes/bhop
name = "jump boots"
desc = "A specialized pair of combat boots with a built-in propulsion system for rapid foward movement."
icon_state = "jetboots"
- item_state = "jetboots"
item_color = "hosred"
resistance_flags = FIRE_PROOF
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
@@ -252,7 +253,6 @@
name = "Wheely-Heels"
desc = "Uses patented retractable wheel technology. Never sacrifice speed for style - not that this provides much of either." //Thanks Fel
icon_state = "wheelys"
- item_state = "wheelys"
actions_types = list(/datum/action/item_action/wheelys)
var/wheelToggle = FALSE //False means wheels are not popped out
var/obj/vehicle/ridden/scooter/wheelys/W
@@ -291,7 +291,6 @@
name = "Kindle Kicks"
desc = "They'll sure kindle something in you, and it's not childhood nostalgia..."
icon_state = "kindleKicks"
- item_state = "kindleKicks"
actions_types = list(/datum/action/item_action/kindleKicks)
var/lightCycle = 0
var/active = FALSE
diff --git a/code/modules/clothing/shoes/vg_shoes.dm b/code/modules/clothing/shoes/vg_shoes.dm
index 931c25b823..627a061181 100644
--- a/code/modules/clothing/shoes/vg_shoes.dm
+++ b/code/modules/clothing/shoes/vg_shoes.dm
@@ -5,7 +5,6 @@
icon_state = "leather"
item_color = "leather"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/magboots/deathsquad
@@ -14,7 +13,6 @@
icon_state = "DS-magboots0"
magboot_state = "DS-magboots"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
mutantrace_variation = NO_MUTANTRACE_VARIATION
@@ -23,7 +21,6 @@
name = "atmospherics magboots"
icon_state = "atmosmagboots0"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
magboot_state = "atmosmagboots"
resistance_flags = FIRE_PROOF
mutantrace_variation = NO_MUTANTRACE_VARIATION
@@ -33,7 +30,6 @@
desc = "Simon's Shoes."
icon_state = "simonshoes"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/kneesocks
@@ -41,7 +37,6 @@
desc = "A pair of girly knee-high socks."
icon_state = "kneesock"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/jestershoes
@@ -49,7 +44,6 @@
desc = "As worn by the clowns of old."
icon_state = "jestershoes"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/aviatorboots
@@ -57,7 +51,6 @@
desc = "Boots suitable for just about any occasion."
icon_state = "aviator_boots"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/libertyshoes
@@ -65,7 +58,6 @@
desc = "Freedom isn't free, neither were these shoes."
icon_state = "libertyshoes"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/megaboots
@@ -73,7 +65,6 @@
desc = "Large armored boots, very weak to large spikes."
icon_state = "megaboots"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/protoboots
@@ -81,7 +72,6 @@
desc = "Functionally identical to the DRN-001 model's boots, but in red."
icon_state = "protoboots"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/megaxboots
@@ -89,7 +79,6 @@
desc = "Regardless of how much stronger these boots are than the DRN-001 model's, they're still extremely easy to pierce with a large spike."
icon_state = "megaxboots"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/joeboots
@@ -97,7 +86,6 @@
desc = "Nearly identical to the Prototype's boots, except in black."
icon_state = "joeboots"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/doomguy
@@ -105,7 +93,6 @@
desc = "If you look closely, you might see skull fragments still buried in these boots."
icon_state = "doom"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/rottenshoes
@@ -113,7 +100,6 @@
desc = "These shoes seem perfect for sneaking around."
icon_state = "rottenshoes"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/sandal/slippers
@@ -121,7 +107,6 @@
icon_state = "slippers"
desc = "For the wizard that puts comfort first. Who's going to laugh?"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/slippers_worn
@@ -129,7 +114,6 @@
desc = "Fluffy..."
icon_state = "slippers_worn"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/shoes/jackboots/neorussian
@@ -137,5 +121,4 @@
desc = "Tovarish, no one will realize you stepped on a pile of shit if your pair already looks like shit."
icon_state = "nr_boots"
icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi'
- alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
\ No newline at end of file
diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm
index cf411ef367..3008043156 100644
--- a/code/modules/clothing/suits/_suits.dm
+++ b/code/modules/clothing/suits/_suits.dm
@@ -5,6 +5,7 @@
allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
slot_flags = ITEM_SLOT_OCLOTHING
+ body_parts_covered = CHEST
var/blood_overlay_type = "suit"
var/togglename = null
var/suittoggled = FALSE
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 0840288eee..19050dc36f 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -1,6 +1,5 @@
/obj/item/clothing/suit/armor
allowed = null
- body_parts_covered = CHEST
cold_protection = CHEST|GROIN
min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
heat_protection = CHEST|GROIN
diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm
index c3276213e1..b8287c7f4c 100644
--- a/code/modules/clothing/suits/cloaks.dm
+++ b/code/modules/clothing/suits/cloaks.dm
@@ -7,7 +7,7 @@
icon_state = "qmcloak"
item_state = "qmcloak"
w_class = WEIGHT_CLASS_SMALL
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ body_parts_covered = CHEST|LEGS|ARMS
/obj/item/clothing/head/cloakhood
name = "cloak hood"
@@ -62,7 +62,7 @@
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat/bone, /obj/item/kitchen/knife/combat/survival)
armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot
hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath
- body_parts_covered = CHEST|GROIN|ARMS
+ body_parts_covered = CHEST|ARMS|LEGS
/obj/item/clothing/head/hooded/cloakhood/goliath
name = "goliath cloak hood"
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 36965afd07..4318839845 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -153,6 +153,7 @@
icon = 'icons/obj/clothing/belts.dmi'
icon_state = "suspenders"
blood_overlay_type = "armor" //it's the less thing that I can put here
+ body_parts_covered = NONE
//Security
/obj/item/clothing/suit/security/officer
@@ -215,3 +216,4 @@
item_state = "techpriesthood"
body_parts_covered = HEAD
flags_inv = HIDEHAIR|HIDEEARS
+ mutantrace_variation = MUTANTRACE_VARIATION
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index ddffe5fe6e..942fdaed73 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -67,6 +67,7 @@
item_state = "death"
flags_1 = CONDUCT_1
fire_resist = T0C+5200
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|FEET
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -75,6 +76,7 @@
desc = "this pretty much looks ridiculous" //Needs no fixing
icon_state = "justice"
item_state = "justice"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|FEET
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -100,14 +102,14 @@
desc = "A fancy purple apron for a stylish person."
icon_state = "purplebartenderapron"
item_state = "purplebartenderapron"
- body_parts_covered = CHEST|GROIN|LEGS
+ body_parts_covered = CHEST
/obj/item/clothing/suit/syndicatefake
name = "black and red space suit replica"
icon_state = "syndicate-black-red"
item_state = "syndicate-black-red"
desc = "A plastic replica of the Syndicate space suit. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!"
- w_class = WEIGHT_CLASS_NORMAL
+ body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET|HANDS
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
resistance_flags = NONE
@@ -154,7 +156,7 @@
icon_state = "owl_wings"
item_state = "owl_wings"
togglename = "wings"
- body_parts_covered = ARMS|CHEST
+ body_parts_covered = ARMS
actions_types = list(/datum/action/item_action/toggle_wings)
/obj/item/clothing/suit/toggle/owlwings/Initialize()
@@ -209,6 +211,7 @@
desc = "Your classic, non-racist poncho."
icon_state = "classicponcho"
item_state = "classicponcho"
+ body_parts_covered = CHEST|GROIN
/obj/item/clothing/suit/poncho/green
name = "green poncho"
@@ -245,7 +248,7 @@
desc = "A costume made from 'synthetic' carp scales, it smells."
icon_state = "carp_casual"
item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS
+ body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET
cold_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too
allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/automatic/speargun)
@@ -265,9 +268,7 @@
desc = "A costume that looks like someone made a human-like corgi, it won't guarantee belly rubs."
icon_state = "ian"
item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS
- //cold_protection = CHEST|GROIN|ARMS
- //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET
allowed = list()
hoodtype = /obj/item/clothing/head/hooded/ian_hood
dog_fashion = /datum/dog_fashion/back
@@ -277,8 +278,6 @@
desc = "A hood that looks just like a corgi's head, it won't guarantee dog biscuits."
icon_state = "ian"
body_parts_covered = HEAD
- //cold_protection = HEAD
- //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
flags_inv = HIDEHAIR|HIDEEARS
/obj/item/clothing/suit/hooded/bee_costume // It's Hip!
@@ -304,7 +303,7 @@
desc = "A horribly bloated suit made from human skins."
icon_state = "lingspacesuit"
item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS
+ body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET|HANDS
allowed = list()
actions_types = list(/datum/action/item_action/toggle_human_head)
hoodtype = /obj/item/clothing/head/hooded/human_head
@@ -345,18 +344,21 @@
desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it, but it's pretty close. Good for sleeping in."
icon_state = "ianshirt"
item_state = "ianshirt"
+ body_parts_covered = CHEST|GROIN
/obj/item/clothing/suit/nerdshirt
name = "gamer shirt"
desc = "A baggy shirt with vintage game character Phanic the Weasel. Why would anyone wear this?"
icon_state = "nerdshirt"
item_state = "nerdshirt"
+ body_parts_covered = CHEST|GROIN
/obj/item/clothing/suit/vapeshirt //wearing this is asking to get beat.
name = "Vape Naysh shirt"
desc = "A cheap white T-shirt with a big tacky \"VN\" on the front, Why would you wear this unironically?"
icon_state = "vapeshirt"
item_state = "vapeshirt"
+ body_parts_covered = CHEST|GROIN
/obj/item/clothing/suit/jacket
name = "bomber jacket"
@@ -364,7 +366,7 @@
icon_state = "bomberjacket"
item_state = "brownjsuit"
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/radio)
- body_parts_covered = CHEST|GROIN|ARMS
+ body_parts_covered = CHEST|ARMS
cold_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
@@ -389,6 +391,7 @@
desc = "A thick jacket with a rubbery, water-resistant shell."
icon_state = "pufferjacket"
item_state = "hostrench"
+ body_parts_covered = CHEST|GROIN|ARMS
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 0)
/obj/item/clothing/suit/jacket/puffer/vest
@@ -436,18 +439,21 @@
desc = "Looks like this belongs in a very old movie set."
icon_state = "draculacoat"
item_state = "draculacoat"
+ body_parts_covered = CHEST|ARMS
/obj/item/clothing/suit/drfreeze_coat
name = "doctor freeze's labcoat"
desc = "A labcoat imbued with the power of features and freezes."
icon_state = "drfreeze_coat"
item_state = "drfreeze_coat"
+ body_parts_covered = CHEST|GROIN|ARMS
/obj/item/clothing/suit/gothcoat
name = "gothic coat"
desc = "Perfect for those who want stalk in a corner of a bar."
icon_state = "gothcoat"
item_state = "gothcoat"
+ body_parts_covered = CHEST|ARMS|HAND_LEFT //peculiar
/obj/item/clothing/suit/xenos
name = "xenos suit"
@@ -586,6 +592,7 @@
name = "spooky ghost"
desc = "This is obviously just a bedsheet, but maybe try it on?"
icon_state = "bedsheet"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|HEAD
user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = INCORPOREAL_MOVE_BASIC, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150)
alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //so the bedsheet goes over everything but fire
@@ -594,6 +601,7 @@
desc = "A big and clanky suit made of bronze that offers no protection and looks very unfashionable. Nice."
icon = 'icons/obj/clothing/clockwork_garb.dmi'
icon_state = "clockwork_cuirass_old"
+ body_parts_covered = CHEST|GROIN|LEGS
armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
/obj/item/clothing/suit/ghost_sheet
@@ -606,4 +614,5 @@
throw_range = 2
w_class = WEIGHT_CLASS_TINY
flags_inv = HIDEGLOVES|HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS|HEAD
alternate_worn_layer = UNDER_HEAD_LAYER
diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm
index 9893edf248..4e3e1aa0cc 100644
--- a/code/modules/clothing/under/syndicate.dm
+++ b/code/modules/clothing/under/syndicate.dm
@@ -67,3 +67,14 @@
icon_state = "syndicate_combat"
item_color = "syndicate_combat"
can_adjust = FALSE
+
+/obj/item/clothing/under/syndicate/baseball
+ name = "major league, number unknown"
+ desc = "A major league outfit with the number faded number on the back. Seems rather robust for just a game"
+ icon_state = "syndicatebaseball"
+ item_state = "syndicatebaseball"
+ item_color = "syndicatebaseball"
+ has_sensor = NO_SENSORS
+ armor = list("melee" = 15, "bullet" = 5, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
+ alt_covers_chest = TRUE
+
diff --git a/code/modules/mob/living/carbon/human/species_types/corporate.dm b/code/modules/mob/living/carbon/human/species_types/corporate.dm
index 620f0b2543..146090b366 100644
--- a/code/modules/mob/living/carbon/human/species_types/corporate.dm
+++ b/code/modules/mob/living/carbon/human/species_types/corporate.dm
@@ -16,5 +16,5 @@
blacklisted = 1
use_skintones = 0
species_traits = list(NOBLOOD,EYECOLOR,NOGENITALS)
- inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
+ inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER)
sexes = 0
\ No newline at end of file
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 e325cbb4f4..ac18580e9b 100644
--- a/code/modules/mob/living/carbon/human/species_types/synths.dm
+++ b/code/modules/mob/living/carbon/human/species_types/synths.dm
@@ -4,7 +4,7 @@
say_mod = "beep boops" //inherited from a user's real species
sexes = 0
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_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER,TRAIT_NOBREATH)
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
dangerous_existence = 1
blacklisted = 1
@@ -12,7 +12,7 @@
damage_overlay_type = "synth"
limbs_id = "synth"
var/list/initial_species_traits = list(NOTRANSSTING) //for getting these values back for assume_disguise()
- var/list/initial_inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOBREATH)
+ var/list/initial_inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER,TRAIT_NOBREATH)
var/disguise_fail_health = 75 //When their health gets to this level their synthflesh partially falls off
var/datum/species/fake_species = null //a species to do most of our work for us, unless we're damaged
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index cb155839c6..5c94448055 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -497,7 +497,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
/mob/living/carbon/handle_status_effects()
..()
if(getStaminaLoss() && !combatmode)//CIT CHANGE - prevents stamina regen while combat mode is active
- adjustStaminaLoss(resting ? (recoveringstam ? -7.5 : -3) : -1.5)//CIT CHANGE - decreases adjuststaminaloss to stop stamina damage from being such a joke
+ adjustStaminaLoss(resting ? (recoveringstam ? -7.5 : -6) : -3)//CIT CHANGE - decreases adjuststaminaloss to stop stamina damage from being such a joke
if(!recoveringstam && incomingstammult != 1)
incomingstammult = max(0.01, incomingstammult)
diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm
index 5662f25993..cdae073af8 100644
--- a/code/modules/mob/living/carbon/update_icons.dm
+++ b/code/modules/mob/living/carbon/update_icons.dm
@@ -189,7 +189,7 @@
var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER)
legcuffs.color = legcuffed.color
- overlays_standing[HANDCUFF_LAYER] = legcuffs
+ overlays_standing[LEGCUFF_LAYER] = legcuffs
apply_overlay(LEGCUFF_LAYER)
throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed)
diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm
index 115b14b63b..1bda62e064 100644
--- a/code/modules/ninja/suit/shoes.dm
+++ b/code/modules/ninja/suit/shoes.dm
@@ -2,7 +2,6 @@
name = "ninja shoes"
desc = "A pair of running shoes. Excellent for running and even better for smashing skulls."
icon_state = "s-ninja"
- item_state = "secshoes"
permeability_coefficient = 0.01
clothing_flags = NOSLIP
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index 558639640a..c2c89e4d88 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -496,7 +496,12 @@
//Standard reaction mechanics:
else
- if (C.FermiChem == TRUE)//Just to make sure
+ if (C.FermiChem == TRUE)//Just to make sure, should only proc when grenades are combining.
+ if (chem_temp > C.ExplodeTemp) //To allow fermigrenades
+ var/datum/chemical_reaction/fermi/Ferm = selected_reaction
+ fermiIsReacting = FALSE
+ SSblackbox.record_feedback("tally", "fermi_chem", 1, ("[Ferm] explosion"))
+ Ferm.FermiExplode(src, my_atom, volume = total_volume, temp = chem_temp, pH = pH)
return 0
for(var/B in cached_required_reagents) //
diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm
index 31e893aa3a..3e555f385f 100644
--- a/code/modules/reagents/reagent_containers/blood_pack.dm
+++ b/code/modules/reagents/reagent_containers/blood_pack.dm
@@ -90,3 +90,9 @@
update_pack_name()
else
return ..()
+
+/obj/item/reagent_containers/blood/bluespace
+ name = "bluespace blood pack"
+ desc = "Contains blood used for transfusion, this one has been made with bluespace technology to hold much more blood. Must be attached to an IV drip."
+ icon_state = "bsbloodpack"
+ volume = 600 //its a blood bath!
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 82d95cea40..a96ba006c9 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -127,6 +127,21 @@
else
to_chat(usr, "It is spent.")
+/obj/item/reagent_containers/hypospray/medipen/stimulants
+ name = "illegal stimpack medipen"
+ desc = "A highly illegal medipen due to its load and small injections, allow for five uses before being drained"
+ volume = 50
+ amount_per_transfer_from_this = 10
+ list_reagents = list("stimulants" = 50)
+
+/obj/item/reagent_containers/hypospray/medipen/stimulants/baseball
+ name = "the reason the syndicate major league team wins."
+ desc = "They say drugs never win, but look where you are now, then where they are."
+ icon_state = "baseballstim"
+ volume = 50
+ amount_per_transfer_from_this = 50
+ list_reagents = list("stimulants" = 50)
+
/obj/item/reagent_containers/hypospray/medipen/stimpack //goliath kiting
name = "stimpack medipen"
desc = "A rapid way to stimulate your body's adrenaline, allowing for freer movement in restrictive armor."
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index 59dada07e1..d4f13f6a2e 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -192,6 +192,16 @@
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+/datum/design/bsblood_bag
+ name = "Blue Space Empty Blood Bag"
+ desc = "A large sterilized plastic bag for blood."
+ id = "bsblood_bag"
+ build_path = /obj/item/reagent_containers/blood/bluespace
+ build_type = PROTOLATHE
+ materials = list(MAT_GLASS = 2500, MAT_PLASTIC = 4500, MAT_BLUESPACE = 250)
+ 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."
@@ -746,6 +756,13 @@
research_icon = 'icons/obj/surgery.dmi'
research_icon_state = "surgery_any"
var/surgery
+
+/datum/design/surgery/experimental_dissection
+ name = "Experimental Dissection"
+ desc = "A surgical procedure which deeply analyzes the biology of a corpse, and automatically adds new findings to the research database."
+ id = "surgery_exp_dissection"
+ surgery = /datum/surgery/advanced/bioware/experimental_dissection
+ research_icon_state = "surgery_chest"
/datum/design/surgery/lobotomy
name = "Lobotomy"
@@ -817,6 +834,22 @@
surgery = /datum/surgery/advanced/bioware/vein_threading
research_icon_state = "surgery_chest"
+/datum/design/surgery/ligament_hook
+ name = "Ligament Hook"
+ desc = "A surgical procedure which reshapes the connections between torso and limbs, making it so limbs can be attached manually if severed. \
+ However this weakens the connection, making them easier to detach as well."
+ id = "surgery_ligament_hook"
+ surgery = /datum/surgery/advanced/bioware/ligament_hook
+ research_icon_state = "surgery_chest"
+
+/datum/design/surgery/ligament_reinforcement
+ name = "Ligament Reinforcement"
+ desc = "A surgical procedure which adds a protective tissue and bone cage around the connections between the torso and limbs, preventing dismemberment. \
+ However, the nerve connections as a result are more easily interrupted, making it easier to disable limbs with damage."
+ id = "surgery_ligament_reinforcement"
+ surgery = /datum/surgery/advanced/bioware/ligament_reinforcement
+ research_icon_state = "surgery_chest"
+
/datum/design/surgery/necrotic_revival
name = "Necrotic Revival"
desc = "An experimental surgical procedure that stimulates the growth of a Romerol tumor inside the patient's brain. Requires zombie powder or rezadone."
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index 4db27394d6..51217d9227 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -115,7 +115,7 @@
display_name = "Advanced Surgery"
description = "When simple medicine doesn't cut it."
prereq_ids = list("adv_biotech")
- design_ids = list("surgery_lobotomy", "surgery_reconstruction", "surgery_toxinhealing", "organbox")
+ design_ids = list("surgery_lobotomy", "surgery_reconstruction", "surgery_toxinhealing", "organbox", "surgery_exp_dissection")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -124,7 +124,7 @@
display_name = "Experimental Surgery"
description = "When evolution isn't fast enough."
prereq_ids = list("adv_surgery")
- design_ids = list("surgery_revival","surgery_pacify","surgery_vein_thread","surgery_nerve_splice","surgery_nerve_ground","surgery_viral_bond")
+ design_ids = list("surgery_revival","surgery_pacify","surgery_vein_thread","surgery_nerve_splice","surgery_nerve_ground","surgery_ligament_hook","surgery_ligament_reinforcement","surgery_viral_bond")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
export_price = 5000
@@ -272,7 +272,7 @@
display_name = "Bluespace Pockets"
description = "Studies into the mysterious alternate dimension known as bluespace and how to place items in the threads of reality."
prereq_ids = list("adv_power", "adv_bluespace", "adv_biotech", "adv_plasma")
- design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash", "satchel_holding")
+ design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash", "satchel_holding", "bsblood_bag")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5500)
export_price = 5000
@@ -1007,7 +1007,7 @@
description = "Things used by the greys."
prereq_ids = list("biotech","engineering")
boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien,
- /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor,
+ /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, /obj/item/stock_parts/cell/infinite/abductor,
/obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor, /obj/item/stack/sheet/mineral/abductor)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
export_price = 20000
@@ -1021,7 +1021,7 @@
prereq_ids = list("alientech", "adv_biotech")
design_ids = list("alien_scalpel", "alien_hemostat", "alien_retractor", "alien_saw", "alien_drill", "alien_cautery")
boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien,
- /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor,
+ /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, /obj/item/stock_parts/cell/infinite/abductor,
/obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 20000
@@ -1033,7 +1033,7 @@
description = "Alien engineering tools"
prereq_ids = list("alientech", "adv_engi")
design_ids = list("alien_wrench", "alien_wirecutters", "alien_screwdriver", "alien_crowbar", "alien_welder", "alien_multitool")
- boost_item_paths = list(/obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor,
+ boost_item_paths = list(/obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, /obj/item/stock_parts/cell/infinite/abductor,
/obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 20000
@@ -1097,4 +1097,4 @@
for(var/i in processing)
var/datum/techweb_node/TN = i
TW.add_point_list(TN.research_costs)
- return TW.printout_points()
+ return TW.printout_points()
\ No newline at end of file
diff --git a/code/modules/surgery/advanced/bioware/experimental_dissection.dm b/code/modules/surgery/advanced/bioware/experimental_dissection.dm
new file mode 100644
index 0000000000..6266480baf
--- /dev/null
+++ b/code/modules/surgery/advanced/bioware/experimental_dissection.dm
@@ -0,0 +1,72 @@
+/datum/surgery/advanced/bioware/experimental_dissection
+ name = "Experimental Dissection"
+ desc = "A surgical procedure which deeply analyzes the biology of a corpse, and automatically adds new findings to the research database."
+ steps = list(/datum/surgery_step/incise,
+ /datum/surgery_step/retract_skin,
+ /datum/surgery_step/clamp_bleeders,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/dissection,
+ /datum/surgery_step/close)
+ possible_locs = list(BODY_ZONE_CHEST)
+ bioware_target = BIOWARE_DISSECTION
+
+/datum/surgery/advanced/bioware/experimental_dissection/can_start(mob/user, mob/living/carbon/target)
+ . = ..()
+ if(iscyborg(user))
+ return FALSE //robots cannot be creative
+ //(also this surgery shouldn't be consistently successful, and cyborgs have a 100% success rate on surgery)
+ if(target.stat != DEAD)
+ return FALSE
+
+/datum/surgery_step/dissection
+ name = "dissection"
+ implements = list(/obj/item/scalpel = 60, /obj/item/kitchen/knife = 30, /obj/item/shard = 15)
+ time = 125
+
+/datum/surgery_step/dissection/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(user, target, "You start dissecting [target].",
+ "[user] starts dissecting [target].",
+ "[user] starts dissecting [target].")
+
+/datum/surgery_step/dissection/proc/check_value(mob/living/carbon/target)
+ if(isalienroyal(target))
+ return 10000
+ else if(isalienadult(target))
+ return 5000
+ else if(ismonkey(target))
+ return 1000
+ else if(ishuman(target))
+ var/mob/living/carbon/human/H = target
+ if(H.dna && H.dna.species)
+ if(isabductor(H))
+ return 8000
+ if(isgolem(H) || iszombie(H))
+ return 4000
+ if(isjellyperson(H) || ispodperson(H))
+ return 3000
+ return 2000
+
+/datum/surgery_step/dissection/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(user, target, "You dissect [target], and add your discoveries to the research database!",
+ "[user] dissects [target], adding [user.p_their()] discoveries to the research database!",
+ "[user] dissects [target]!")
+ SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = check_value(target)))
+ var/obj/item/bodypart/L = target.get_bodypart(BODY_ZONE_CHEST)
+ target.apply_damage(80, BRUTE, L)
+ new /datum/bioware/dissected(target)
+ return TRUE
+
+/datum/surgery_step/dissection/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(user, target, "You dissect [target], but do not find anything particularly interesting.",
+ "[user] dissects [target], however it seems [user.p_they()] didn't find anything useful.",
+ "[user] dissects [target], but looks a little dissapointed.")
+ SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = (check_value(target) * 0.2)))
+ var/obj/item/bodypart/L = target.get_bodypart(BODY_ZONE_CHEST)
+ target.apply_damage(80, BRUTE, L)
+ new /datum/bioware/dissected(target)
+ return TRUE
+
+/datum/bioware/dissected
+ name = "Dissected"
+ desc = "This body has been dissected and analyzed. It is no longer worth experimenting on."
+ mod_type = BIOWARE_DISSECTION
\ No newline at end of file
diff --git a/code/modules/surgery/advanced/bioware/ligament_hook.dm b/code/modules/surgery/advanced/bioware/ligament_hook.dm
new file mode 100644
index 0000000000..2c154436e6
--- /dev/null
+++ b/code/modules/surgery/advanced/bioware/ligament_hook.dm
@@ -0,0 +1,45 @@
+/datum/surgery/advanced/bioware/ligament_hook
+ name = "Ligament Hook"
+ desc = "A surgical procedure which reshapes the connections between torso and limbs, making it so limbs can be attached manually if severed. \
+ However this weakens the connection, making them easier to detach as well."
+ steps = list(/datum/surgery_step/incise,
+ /datum/surgery_step/retract_skin,
+ /datum/surgery_step/clamp_bleeders,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/reshape_ligaments,
+ /datum/surgery_step/close)
+ possible_locs = list(BODY_ZONE_CHEST)
+ bioware_target = BIOWARE_LIGAMENTS
+
+/datum/surgery_step/reshape_ligaments
+ name = "reshape ligaments"
+ accept_hand = TRUE
+ time = 125
+
+/datum/surgery_step/reshape_ligaments/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(user, target, "You start reshaping [target]'s ligaments into a hook-like shape.",
+ "[user] starts reshaping [target]'s ligaments into a hook-like shape.",
+ "[user] starts manipulating [target]'s ligaments.")
+
+/datum/surgery_step/reshape_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(user, target, "You finish reshaping [target]'s ligaments into a connective hook!",
+ "[user] finishes reshaping [target]'s ligaments into a connective hook!",
+ "[user] finishes manipulating [target]'s ligaments!")
+ new /datum/bioware/hooked_ligaments(target)
+ return TRUE
+
+/datum/bioware/hooked_ligaments
+ name = "Hooked Ligaments"
+ desc = "The ligaments and nerve endings that connect the torso to the limbs are formed into a hook-like shape, so limbs can be attached without requiring surgery, but are easier to sever."
+ mod_type = BIOWARE_LIGAMENTS
+
+/datum/bioware/hooked_ligaments/on_gain()
+ ..()
+ ADD_TRAIT(owner, TRAIT_LIMBATTACHMENT, "ligament_hook")
+ ADD_TRAIT(owner, TRAIT_EASYDISMEMBER, "ligament_hook")
+
+/datum/bioware/hooked_ligaments/on_lose()
+ ..()
+ REMOVE_TRAIT(owner, TRAIT_LIMBATTACHMENT, "ligament_hook")
+ REMOVE_TRAIT(owner, TRAIT_EASYDISMEMBER, "ligament_hook")
\ No newline at end of file
diff --git a/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm b/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm
new file mode 100644
index 0000000000..ac034fcea7
--- /dev/null
+++ b/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm
@@ -0,0 +1,45 @@
+/datum/surgery/advanced/bioware/ligament_reinforcement
+ name = "Ligament Reinforcement"
+ desc = "A surgical procedure which adds a protective tissue and bone cage around the connections between the torso and limbs, preventing dismemberment. \
+ However, the nerve connections as a result are more easily interrupted, making it easier to disable limbs with damage."
+ steps = list(/datum/surgery_step/incise,
+ /datum/surgery_step/retract_skin,
+ /datum/surgery_step/clamp_bleeders,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/incise,
+ /datum/surgery_step/reinforce_ligaments,
+ /datum/surgery_step/close)
+ possible_locs = list(BODY_ZONE_CHEST)
+ bioware_target = BIOWARE_LIGAMENTS
+
+/datum/surgery_step/reinforce_ligaments
+ name = "reinforce ligaments"
+ accept_hand = TRUE
+ time = 125
+
+/datum/surgery_step/reinforce_ligaments/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(user, target, "You start reinforcing [target]'s ligaments.",
+ "[user] starts reinforcing [target]'s ligaments.",
+ "[user] starts manipulating [target]'s ligaments.")
+
+/datum/surgery_step/reinforce_ligaments/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ display_results(user, target, "You finish reinforcing [target]'s ligaments!",
+ "[user] finishes reinforcing [target]'s ligaments!",
+ "[user] finishes manipulating [target]'s ligaments!")
+ new /datum/bioware/reinforced_ligaments(target)
+ return TRUE
+
+/datum/bioware/reinforced_ligaments
+ name = "Reinforced Ligaments"
+ desc = "The ligaments and nerve endings that connect the torso to the limbs are protected by a mix of bone and tissues, and are much harder to separate from the body, but are also easier to disable."
+ mod_type = BIOWARE_LIGAMENTS
+
+/datum/bioware/reinforced_ligaments/on_gain()
+ ..()
+ ADD_TRAIT(owner, TRAIT_NODISMEMBER, "reinforced_ligaments")
+ ADD_TRAIT(owner, TRAIT_EASYLIMBDISABLE, "reinforced_ligaments")
+
+/datum/bioware/reinforced_ligaments/on_lose()
+ ..()
+ REMOVE_TRAIT(owner, TRAIT_NODISMEMBER, "reinforced_ligaments")
+ REMOVE_TRAIT(owner, TRAIT_EASYLIMBDISABLE, "reinforced_ligaments")
\ No newline at end of file
diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm
index 40c22189d9..dffb7bf355 100644
--- a/code/modules/surgery/bodyparts/bodyparts.dm
+++ b/code/modules/surgery/bodyparts/bodyparts.dm
@@ -231,7 +231,7 @@
return BODYPART_DISABLED_PARALYSIS
if(can_dismember() && !HAS_TRAIT(owner, TRAIT_NODISMEMBER))
. = disabled //inertia, to avoid limbs healing 0.1 damage and being re-enabled
- if((get_damage(TRUE) >= max_damage))
+ if((get_damage(TRUE) >= max_damage) || (HAS_TRAIT(owner, TRAIT_EASYLIMBDISABLE) && (get_damage(TRUE) >= (max_damage * 0.6)))) //Easy limb disable disables the limb at 40% health instead of 0%
return BODYPART_DISABLED_DAMAGE
if(disabled && (get_damage(TRUE) <= (max_damage * 0.5)))
return BODYPART_NOT_DISABLED
diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm
index 0ba6fd7fcd..2cc5c554c6 100644
--- a/code/modules/surgery/organs/autosurgeon.dm
+++ b/code/modules/surgery/organs/autosurgeon.dm
@@ -99,6 +99,9 @@
/obj/item/autosurgeon/reviver
starting_organ = /obj/item/organ/cyberimp/chest/reviver
+/obj/item/autosurgeon/anti_drop
+ starting_organ = /obj/item/organ/cyberimp/brain/anti_drop
+
/obj/item/autosurgeon/penis
desc = "A single use autosurgeon that contains a penis. A screwdriver can be used to remove it, but implants can't be placed back in."
uses = 1
diff --git a/html/changelogs/AutoChangeLog-pr-9203.yml b/html/changelogs/AutoChangeLog-pr-9203.yml
new file mode 100644
index 0000000000..0ad87d26c1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9203.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - imageadd: "redid brass tools to look better*"
diff --git a/html/changelogs/AutoChangeLog-pr-9263.yml b/html/changelogs/AutoChangeLog-pr-9263.yml
new file mode 100644
index 0000000000..36a03fa125
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9263.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "new traitor bundle"
diff --git a/html/changelogs/AutoChangeLog-pr-9269.yml b/html/changelogs/AutoChangeLog-pr-9269.yml
new file mode 100644
index 0000000000..693588208e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9269.yml
@@ -0,0 +1,5 @@
+author: "Fermis"
+delete-after: True
+changes:
+ - tweak: "re-enables femichem explosions in grenades."
+ - tweak: "adds nuance to the SDGF and hatmium explosions."
diff --git a/html/changelogs/AutoChangeLog-pr-9282.yml b/html/changelogs/AutoChangeLog-pr-9282.yml
new file mode 100644
index 0000000000..5a27defb41
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9282.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed a few dozen suits' body coverage inconsistencies. These changes shouldn't affect armor and utility vests for most."
diff --git a/html/changelogs/AutoChangeLog-pr-9283.yml b/html/changelogs/AutoChangeLog-pr-9283.yml
new file mode 100644
index 0000000000..33e02f8539
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9283.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscdel: "Removed old things!"
diff --git a/html/changelogs/AutoChangeLog-pr-9292.yml b/html/changelogs/AutoChangeLog-pr-9292.yml
new file mode 100644
index 0000000000..33168f9c43
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9292.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed clown shoes and work boots."
diff --git a/html/changelogs/AutoChangeLog-pr-9293.yml b/html/changelogs/AutoChangeLog-pr-9293.yml
new file mode 100644
index 0000000000..a99bf1ab41
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9293.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed some overlay bug that happens when legcuffed and then handcuffed."
diff --git a/html/changelogs/AutoChangeLog-pr-9298.yml b/html/changelogs/AutoChangeLog-pr-9298.yml
new file mode 100644
index 0000000000..8301acbbd6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9298.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixed undershirts n socks colors prefs."
diff --git a/html/changelogs/AutoChangeLog-pr-9304.yml b/html/changelogs/AutoChangeLog-pr-9304.yml
new file mode 100644
index 0000000000..f4a919c52f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9304.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "Blue space blood bag"
diff --git a/html/changelogs/AutoChangeLog-pr-9306.yml b/html/changelogs/AutoChangeLog-pr-9306.yml
new file mode 100644
index 0000000000..0a560c8090
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9306.yml
@@ -0,0 +1,5 @@
+author: "kappa-sama"
+delete-after: True
+changes:
+ - tweak: "voidcells can now unlock alien tech"
+ - balance: "rebalanced tech trees (not really)"
diff --git a/html/changelogs/AutoChangeLog-pr-9310.yml b/html/changelogs/AutoChangeLog-pr-9310.yml
new file mode 100644
index 0000000000..34ded5a0db
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9310.yml
@@ -0,0 +1,4 @@
+author: "GrayRachnid"
+delete-after: True
+changes:
+ - rscadd: "Added windoors to all the flaps on delta."
diff --git a/html/changelogs/AutoChangeLog-pr-9312.yml b/html/changelogs/AutoChangeLog-pr-9312.yml
new file mode 100644
index 0000000000..487b79393b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9312.yml
@@ -0,0 +1,9 @@
+author: "XDTM"
+delete-after: True
+changes:
+ - rscadd: "Added the experimental dissection surgery, which can be performed once per corpse to gain techweb points."
+ - rscadd: "Rarer specimens are more valuable, so xenos and rare species are more efficient subjects."
+ - rscadd: "Added two new surgery procedures, under the Experimental Surgery techweb node."
+ - rscadd: "Ligament Hook makes it so you can attach limbs manually (like skeletons) but makes dismemberment more likely as well."
+ - rscadd: "Ligament Reinforcement prevents dismemberment, but makes limbs easier to disable through damage."
+ - tweak: "Golem limbs can now be disabled, although they are still undismemberable."
diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi
index e7598f35c9..118688aaba 100644
Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 09bfd9e0a2..25183c5cea 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/inhands/clothing_lefthand.dmi b/icons/mob/inhands/clothing_lefthand.dmi
index 2b39acd3d8..90d96492f2 100644
Binary files a/icons/mob/inhands/clothing_lefthand.dmi and b/icons/mob/inhands/clothing_lefthand.dmi differ
diff --git a/icons/mob/inhands/clothing_righthand.dmi b/icons/mob/inhands/clothing_righthand.dmi
index ef6c9b3f06..c5e10b01df 100644
Binary files a/icons/mob/inhands/clothing_righthand.dmi and b/icons/mob/inhands/clothing_righthand.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index f783331c19..2506d9e629 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/bloodpack.dmi b/icons/obj/bloodpack.dmi
index 3a5b9fd706..82b4c2e543 100644
Binary files a/icons/obj/bloodpack.dmi and b/icons/obj/bloodpack.dmi differ
diff --git a/icons/obj/clothing/belt_overlays.dmi b/icons/obj/clothing/belt_overlays.dmi
index 717937c034..da8ff0a20b 100644
Binary files a/icons/obj/clothing/belt_overlays.dmi and b/icons/obj/clothing/belt_overlays.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index e151808cb1..77029e36b6 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 40844c9a29..b456f31a95 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/syringe.dmi b/icons/obj/syringe.dmi
index 80e681399a..59bc7a8e7c 100644
Binary files a/icons/obj/syringe.dmi and b/icons/obj/syringe.dmi differ
diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi
index c983201d5f..6130c67eb3 100644
Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ
diff --git a/modular_citadel/code/game/machinery/plasmacases.dm b/modular_citadel/code/game/machinery/plasmacases.dm
deleted file mode 100644
index c45eb48caa..0000000000
--- a/modular_citadel/code/game/machinery/plasmacases.dm
+++ /dev/null
@@ -1,24 +0,0 @@
-/obj/structure/guncase/plasma
- name = "plasma rifle locker"
- desc = "A locker that holds plasma rifles. Only opens in dire emergencies."
- icon_state = "ecase"
- case_type = "egun"
- gun_category = /obj/item/gun/energy/plasma
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //because fuck you, powergaming nerds.
-
-/obj/structure/guncase/plasma/attackby(obj/item/W, mob/user, params)
- return
-
-/obj/structure/guncase/plasma/MouseDrop(over_object, src_location, over_location)
- if(GLOB.security_level == SEC_LEVEL_RED || GLOB.security_level == SEC_LEVEL_DELTA)
- . = ..()
- else
- to_chat(usr, "The storage unit will only unlock during a Red or Delta security alert.")
-
-/obj/structure/guncase/plasma/attack_hand(mob/user)
- return MouseDrop(user)
-
-/obj/structure/guncase/plasma/emag_act()
- . = SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT)
- if(!.)
- to_chat(usr, "The locking mechanism is fitted with old style parts, The card has no effect.")
\ No newline at end of file
diff --git a/modular_citadel/code/game/objects/items/devices/genemods.dm b/modular_citadel/code/game/objects/items/devices/genemods.dm
deleted file mode 100644
index 5efebf4860..0000000000
--- a/modular_citadel/code/game/objects/items/devices/genemods.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-//Will include consumable gene mods in the future.
-
-/obj/item/genemod
- name = "genetic modifier"
- desc = "Microbodies which can grow, morph, or otherwise change an organism into something else."
- icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "dnainjector"
- throw_speed = 3
- throw_range = 5
- w_class = WEIGHT_CLASS_TINY
- var/applied_region = "chest"
- var/list/add_mutations = list()
- var/list/remove_mutations = list()
-
- var/list/add_mutations_static = list()
- var/list/remove_mutations_static = list()
-
- var/used = 0
-
-/obj/item/genemod/proc/use(mob/living/carbon/human/target)
- return
\ No newline at end of file
diff --git a/modular_citadel/code/modules/antagonists/cit_crewobjectives.dm b/modular_citadel/code/modules/antagonists/cit_crewobjectives.dm
deleted file mode 100644
index 6afa92af65..0000000000
--- a/modular_citadel/code/modules/antagonists/cit_crewobjectives.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-/datum/controller/subsystem/ticker/proc/generate_crew_objectives()
- for(var/datum/mind/crewMind in SSticker.minds)
- if(prob(5) && !issilicon(crewMind.current) && !jobban_isbanned(crewMind, "Syndicate") && GLOB.miscreants_allowed && ROLE_MISCREANT in crewMind.current.client.prefs.be_special)
- generate_miscreant_objectives(crewMind)
- else
- if(CONFIG_GET(flag/allow_crew_objectives))
- generate_individual_objectives(crewMind)
- return
-
-/datum/controller/subsystem/ticker/proc/generate_individual_objectives(var/datum/mind/crewMind)
- if(!(CONFIG_GET(flag/allow_crew_objectives)))
- return
- if(!crewMind)
- return
- if(!crewMind.current || !crewMind.objectives || crewMind.special_role)
- return
- if(!crewMind.assigned_role)
- return
- var/list/validobjs = crewobjjobs["[ckey(crewMind.assigned_role)]"]
- if(!validobjs || !validobjs.len)
- return
- var/selectedObj = pick(validobjs)
- var/datum/objective/crew/newObjective = new selectedObj
- if(!newObjective)
- return
- newObjective.owner = crewMind
- crewMind.objectives += newObjective
- to_chat(crewMind, "As a part of Nanotrasen's anti-tide efforts, you have been assigned an optional objective. It will be checked at the end of the shift. Performing traitorous acts in pursuit of your objective may result in termination of your employment.")
- to_chat(crewMind, "Your optional objective: [newObjective.explanation_text]")
-
-/datum/objective/crew/
- var/jobs = ""
- explanation_text = "Yell on the development discussion channel on Citadels discord if this ever shows up. Something just broke here, dude"
-
-/datum/objective/crew/proc/setup()
diff --git a/modular_citadel/code/modules/antagonists/cit_miscreants.dm b/modular_citadel/code/modules/antagonists/cit_miscreants.dm
deleted file mode 100644
index 5726167820..0000000000
--- a/modular_citadel/code/modules/antagonists/cit_miscreants.dm
+++ /dev/null
@@ -1,52 +0,0 @@
-/datum/controller/subsystem/ticker/proc/generate_miscreant_objectives(var/datum/mind/crewMind)
- if(!GLOB.miscreants_allowed)
- return
- if(!crewMind)
- return
- if(!crewMind.current || !crewMind.objectives || crewMind.special_role)
- return
- if(!crewMind.assigned_role)
- return
- if(!(ROLE_MISCREANT in crewMind.current.client.prefs.be_special))
- return
- if(jobban_isbanned(crewMind, "Syndicate"))
- return
- var/list/objectiveTypes = miscreantobjlist
- if(!objectiveTypes.len)
- return
- var/selectedType = pick(objectiveTypes)
- var/datum/objective/miscreant/newObjective = new selectedType
- if(!newObjective)
- return
- newObjective.owner = crewMind
- crewMind.objectives += newObjective
- crewMind.special_role = "miscreant"
- to_chat(crewMind, "You are a Miscreant.")
- to_chat(crewMind, "Pursuing your objective is entirely optional, as the completion of your objective is unable to be tracked. Performing traitorous acts not directly related to your objective may result in permanent termination of your employment.")
- to_chat(crewMind, "Your objective: [newObjective.explanation_text]")
-
-/datum/objective/miscreant
- explanation_text = "Something broke. Horribly. Dear god, im so sorry. Yell about this in the development discussion channel of citadels discord."
-
-/* Goon's Miscreant Objectives */
-
-
-/datum/objective/miscreant/incompetent
- explanation_text = "Be as useless and incompetent as possible without getting killed."
-
-/datum/objective/miscreant/litterbug
- explanation_text = "Make a huge mess wherever you go."
-
-/datum/objective/miscreant/creepy
- explanation_text = "Sneak around looking as suspicious as possible without actually doing anything illegal."
-
-/datum/objective/miscreant/whiny
- explanation_text = "Complain incessantly about every minor issue you find."
-
-/* Citadel's Miscreant Objectives */
-
-/datum/objective/miscreant/immersions
- explanation_text = "Act as uncharacteristic as you possibly can." // corrected from "Act as out of character as you can" people thought it meant to just ooc in ic
-
-/datum/objective/miscreant/cargonia
- explanation_text = "Attempt to establish independence of your department."
diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_cargo.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_cargo.dm
deleted file mode 100644
index 010337b49f..0000000000
--- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_cargo.dm
+++ /dev/null
@@ -1,81 +0,0 @@
-/* CARGO OBJECTIVES */
-
-/datum/objective/crew/petsplosion
- explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish."
- jobs = "quartermaster,cargotechnician"
-
-/datum/objective/crew/petsplosion/New()
- . = ..()
- target_amount = rand(10,30)
- update_explanation_text()
-
-/datum/objective/crew/petsplosion/update_explanation_text()
- . = ..()
- explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish."
-
-/datum/objective/crew/petsplosion/check_completion()
- var/petcount = target_amount
- for(var/mob/living/simple_animal/pet/P in GLOB.mob_list)
- if(!(P.stat == DEAD))
- if(P.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(P)])
- petcount--
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
- if(!(H.stat == DEAD))
- if(H.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(H)])
- if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar))
- petcount--
- if(petcount <= 0)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/points //ported from old hippie
- explanation_text = "Make sure the station has at least (Something broke, report this to the development discussion channel of citadels discord) supply points at the end of the shift."
- jobs = "quartermaster,cargotechnician"
-
-/datum/objective/crew/points/New()
- . = ..()
- target_amount = rand(25000,100000)
- update_explanation_text()
-
-/datum/objective/crew/points/update_explanation_text()
- . = ..()
- explanation_text = "Make sure the station has at least [target_amount] supply points at the end of the shift."
-
-/datum/objective/crew/points/check_completion()
- if(SSshuttle.points >= target_amount)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/bubblegum
- explanation_text = "Ensure Bubblegum is dead at the end of the shift."
- jobs = "shaftminer"
-
-/datum/objective/crew/bubblegum/check_completion()
- for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list)
- if(!(B.stat == DEAD))
- return FALSE
- return TRUE
-
-/datum/objective/crew/fatstacks //ported from old hippie
- explanation_text = "Have at least (something broke, report this to the development discussion channel of citadels discord) mining points on your ID at the end of the shift."
- jobs = "shaftminer"
-
-/datum/objective/crew/fatstacks/New()
- . = ..()
- target_amount = rand(15000,50000)
- update_explanation_text()
-
-/datum/objective/crew/fatstacks/update_explanation_text()
- . = ..()
- explanation_text = "Have at least [target_amount] mining points on your ID at the end of the shift."
-
-/datum/objective/crew/fatstacks/check_completion()
- if(owner && owner.current)
- var/mob/living/carbon/human/H = owner.current
- var/obj/item/card/id/theID = H.get_idcard()
- if(istype(theID))
- if(theID.mining_points >= target_amount)
- return TRUE
- return FALSE
diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_civilian.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_civilian.dm
deleted file mode 100644
index 491285e9c4..0000000000
--- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_civilian.dm
+++ /dev/null
@@ -1,249 +0,0 @@
-/* CIVILIAN OBJECTIVES */
-
-/datum/objective/crew/druglordbot //ported from old Hippie with adjustments
- var/targetchem = "none"
- var/datum/reagent/chempath
- explanation_text = "Have at least (somethin broke here) harvested plants containing (report this on the development discussion channel of citadel's discord) when the shift ends."
- jobs = "botanist"
-
-/datum/objective/crew/druglordbot/New()
- . = ..()
- target_amount = rand(3,20)
- var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingadrenaline, /datum/reagent/medicine/changelinghaste)
- var/drugs = typesof(/datum/reagent/drug) - blacklist
- var/meds = typesof(/datum/reagent/medicine) - blacklist
- var/chemlist = drugs + meds
- chempath = pick(chemlist)
- targetchem = initial(chempath.id)
- update_explanation_text()
-
-/datum/objective/crew/druglordbot/update_explanation_text()
- . = ..()
- explanation_text = "Have at least [target_amount] harvested plants containing [initial(chempath.name)] when the shift ends."
-
-/datum/objective/crew/druglordbot/check_completion()
- var/pillcount = target_amount
- if(owner && owner.current)
- if(owner.current.contents)
- for(var/obj/item/reagent_containers/food/snacks/grown/P in owner.current.get_contents())
- if(P.reagents.has_reagent(targetchem))
- pillcount--
- if(pillcount <= 0)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/foodhoard
- var/datum/crafting_recipe/food/targetfood
- var/obj/item/reagent_containers/food/foodpath
- explanation_text = "Personally deliver at least (yo something broke) (report this to the developer discussion channel in citadels discord)s to Centcom."
- jobs = "cook"
-
-/datum/objective/crew/foodhoard/New()
- . = ..()
- target_amount = rand(2,10)
- var/blacklist = list(/datum/crafting_recipe/food, /datum/crafting_recipe/food/cak)
- var/possiblefoods = typesof(/datum/crafting_recipe/food) - blacklist
- targetfood = pick(possiblefoods)
- foodpath = initial(targetfood.result)
- update_explanation_text()
-
-/datum/objective/crew/foodhoard/update_explanation_text()
- . = ..()
- explanation_text = "Personally deliver at least [target_amount] [initial(foodpath.name)]s to Centcom."
-
-/datum/objective/crew/foodhoard/check_completion()
- if(owner && owner.current && owner.current.check_contents_for(foodpath) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)])
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/responsibility
- explanation_text = "Make sure nobody dies with alcohol poisoning."
- jobs = "bartender"
-
-/datum/objective/crew/responsibility/check_completion()
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
- if(H.stat == DEAD && H.drunkenness >= 80)
- if(H.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(H)])
- return FALSE
- return TRUE
-
-/datum/objective/crew/clean //ported from old Hippie
- var/list/areas = list()
- var/hardmode = FALSE
- explanation_text = "Ensure sure that (Yo, something broke. Yell about this in citadels devlopmeent discussion channel.) remain spotless at the end of the shift."
- jobs = "janitor"
-
-/datum/objective/crew/clean/New()
- . = ..()
- if(prob(1))
- hardmode = TRUE
- var/list/blacklistnormal = list(typesof(/area/space) - typesof(/area/lavaland) - typesof(/area/mine) - typesof(/area/ai_monitored/turret_protected) - typesof(/area/tcommsat))
- var/list/blacklisthard = list(typesof(/area/lavaland) - typesof(/area/mine))
- var/list/possibleareas = list()
- if(hardmode)
- possibleareas = GLOB.teleportlocs - /area - blacklisthard
- else
- possibleareas = GLOB.teleportlocs - /area - blacklistnormal
- for(var/i in 1 to rand(1,6))
- areas |= pick_n_take(possibleareas)
- update_explanation_text()
-
-/datum/objective/crew/clean/update_explanation_text()
- . = ..()
- explanation_text = "Ensure that the"
- for(var/i in 1 to areas.len)
- var/area/A = areas[i]
- explanation_text += " [A]"
- if(i != areas.len && areas.len >= 3)
- explanation_text += ","
- if(i == areas.len - 1)
- explanation_text += "and"
- explanation_text += " [(areas.len ==1) ? "is completely" : "are [(areas.len == 2) ? "completely" : "all"]"] clean at the end of the shift."
- if(hardmode)
- explanation_text += " Chop-chop."
-
-/datum/objective/crew/clean/check_completion()
- for(var/area/A in areas)
- for(var/obj/effect/decal/cleanable/C in area_contents(A))
- if(C && C.alpha >= 150)
- return FALSE
- return TRUE
-
-/datum/objective/crew/slipster //ported from old Hippie with adjustments
- explanation_text = "Slip at least (Yell on citadel's development discussion channel if you see this) different people with your PDA, and have it on you at the end of the shift."
- jobs = "clown"
-
-/datum/objective/crew/slipster/New()
- . = ..()
- target_amount = rand(5, 20)
- update_explanation_text()
-
-/datum/objective/crew/slipster/update_explanation_text()
- . = ..()
- explanation_text = "Slip at least [target_amount] different people with your PDA, and have it on you at the end of the shift."
-
-/datum/objective/crew/slipster/check_completion()
- var/list/uniqueslips = list()
- if(owner && owner.current)
- for(var/obj/item/pda/clown/PDA in owner.current.get_contents())
- for(var/mob/living/carbon/human/H in PDA.slipvictims)
- uniqueslips |= H
- if(uniqueslips.len >= target_amount)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/vow //ported from old Hippie
- explanation_text = "Never break your vow of silence."
- jobs = "mime"
-
-/datum/objective/crew/vow/check_completion()
- if(owner && owner.current)
- var/list/say_log = owner.current.logging[INDIVIDUAL_SAY_LOG]
- if(say_log.len > 0)
- return FALSE
- return TRUE
-
-/datum/objective/crew/nullrod
- explanation_text = "Don't lose your holy rod."
- jobs = "chaplain"
-
-/datum/objective/crew/nullrod/check_completion()
- if(owner && owner.current)
- for(var/nullrodtypes in typesof(/obj/item/nullrod))
- if(owner.current.check_contents_for(nullrodtypes))
- return TRUE
- if(owner.current.getorgan(/obj/item/organ/genital/penis))
- return TRUE
- return FALSE
-
-/datum/objective/crew/reporter //ported from old hippie
- var/charcount = 100
- explanation_text = "Publish at least (Yo something broke) articles containing at least (Report this to Citadels development channel) characters."
- jobs = "curator"
-
-/datum/objective/crew/reporter/New()
- . = ..()
- target_amount = rand(2,10)
- charcount = rand(20,250)
- update_explanation_text()
-
-/datum/objective/crew/reporter/update_explanation_text()
- . = ..()
- explanation_text = "Publish at least [target_amount] articles containing at least [charcount] characters."
-
-/datum/objective/crew/reporter/check_completion()
- if(owner && owner.current)
- var/ownername = "[ckey(owner.current.real_name)][ckey(owner.assigned_role)]"
- for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels)
- for(var/datum/newscaster/feed_message/msg in chan.messages)
- if(ckey(msg.returnAuthor()) == ckey(ownername))
- if(length(msg.returnBody()) >= charcount)
- target_amount--
- if(target_amount <= 0)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/pwrgame //ported from Goon with adjustments
- var/obj/item/clothing/targettidegarb
- explanation_text = "Get your grubby hands on a (Dear god something broke. Report this to Citadel's development dicussion channel)."
- jobs = "assistant"
-
-/datum/objective/crew/pwrgame/New()
- . = ..()
- var/list/muhvalids = list(/obj/item/clothing/mask/gas, /obj/item/clothing/head/welding, /obj/item/clothing/head/ushanka, /obj/item/clothing/gloves/color/yellow, /obj/item/clothing/mask/gas/owl_mask)
- if(prob(10))
- muhvalids += list(/obj/item/clothing/suit/space)
- targettidegarb = pick(muhvalids)
- update_explanation_text()
-
-/datum/objective/crew/pwrgame/update_explanation_text()
- . = ..()
- explanation_text = "Get your grubby hands on a [initial(targettidegarb.name)]."
-/* DM is not a sane language in any way, shape, or form. If anyone wants to try to get this bit functioning proper, I hold no responsibility for broken keyboards.
- if(owner && owner.current)
- var/mob/living/carbon/human/H = owner.current
- if(H && H.dna && H.dna.species && H.dna.species.id)
- explanation_text = "Get your "
- if(H.dna.species.id == "avian")
- explanation_text += "scratchy claws "
- else if(H.dna.species.id == "mammal")
- explanation_text += "dirty paws "
- else if(H.dna.species.id == "aquatic")
- explanation_text += "fishy hands "
- else if(H.dna.species.id == "xeno")
- explanation_text += "weird claws "
- else if(H.dna.species.id == "guilmon")
- explanation_text += "digital claws "
- else if(H.dna.species.id == "lizard")
- explanation_text += "slimy claws "
- else if(H.dna.species.id == "datashark")
- explanation_text += "glitchy hands "
- else if(H.dna.species.id == "insect")
- explanation_text += "gross grabbers "
- else
- explanation_text += "grubby hands "
- explanation_text += "on a space suit." replace this if you're making this monstrosity work */
-
-/datum/objective/crew/pwrgame/check_completion()
- if(owner && owner.current)
- for(var/tidegarbtypes in typesof(targettidegarb))
- if(owner.current.check_contents_for(tidegarbtypes))
- return TRUE
- return FALSE
-
-/datum/objective/crew/promotion //ported from Goon
- explanation_text = "Have a non-assistant ID registered to you at the end of the shift."
- jobs = "assistant"
-
-/datum/objective/crew/promotion/check_completion()
- if(owner && owner.current)
- var/mob/living/carbon/human/H = owner.current
- var/obj/item/card/id/theID = H.get_idcard()
- if(istype(theID))
- if(!(H.get_assignment() == "Assistant") && !(H.get_assignment() == "No id") && !(H.get_assignment() == "No job"))
- return TRUE
- return FALSE
diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_command.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_command.dm
deleted file mode 100644
index f01c887c9f..0000000000
--- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_command.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-/* COMMAND OBJECTIVES */
-
-/datum/objective/crew/caphat //Ported from Goon
- explanation_text = "Don't lose your hat."
- jobs = "captain"
-
-/datum/objective/crew/caphat/check_completion()
- if(owner && owner.current && owner.current.check_contents_for(/obj/item/clothing/head/caphat))
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/datfukkendisk //Ported from old Hippie
- explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom."
- jobs = "captain" //give this to other heads at your own risk.
-
-/datum/objective/crew/datfukkendisk/check_completion()
- if(owner && owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)])
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/ian //Ported from old Hippie
- explanation_text = "Defend Ian at all costs, and ensure he gets delivered to Centcom at the end of the shift."
- jobs = "headofpersonnel"
-
-/datum/objective/crew/ian/check_completion()
- if(owner && owner.current)
- for(var/mob/living/simple_animal/pet/dog/corgi/Ian/goodboy in GLOB.mob_list)
- if(goodboy.stat != DEAD && SSshuttle.emergency.shuttle_areas[get_area(goodboy)])
- return TRUE
- return FALSE
- return FALSE
diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_engineering.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_engineering.dm
deleted file mode 100644
index 44d961e9c3..0000000000
--- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_engineering.dm
+++ /dev/null
@@ -1,34 +0,0 @@
-/* ENGINEERING OBJECTIVES */
-
-/datum/objective/crew/integrity //ported from old Hippie
- explanation_text = "Ensure the station's integrity rating is at least (Yo something broke, yell on the development discussion channel of citadels discord about this)% when the shift ends."
- jobs = "chiefengineer,stationengineer"
-
-/datum/objective/crew/integrity/New()
- . = ..()
- target_amount = rand(60,95)
- update_explanation_text()
-
-/datum/objective/crew/integrity/update_explanation_text()
- . = ..()
- explanation_text = "Ensure the station's integrity rating is at least [target_amount]% when the shift ends."
-
-/datum/objective/crew/integrity/check_completion()
- var/datum/station_state/end_state = new /datum/station_state()
- end_state.count()
- var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100)
- if(!SSticker.mode.station_was_nuked && station_integrity >= target_amount)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/poly
- explanation_text = "Make sure Poly keeps his headset, and stays alive until the end of the shift."
- jobs = "chiefengineer"
-
-/datum/objective/crew/poly/check_completion()
- for(var/mob/living/simple_animal/parrot/Poly/dumbbird in GLOB.mob_list)
- if(!(dumbbird.stat == DEAD) && dumbbird.ears)
- if(istype(dumbbird.ears, /obj/item/radio/headset))
- return TRUE
- return FALSE
diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_medical.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_medical.dm
deleted file mode 100644
index aad6e95df4..0000000000
--- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_medical.dm
+++ /dev/null
@@ -1,86 +0,0 @@
-/* MEDICAL OBJECTIVES */
-
-/datum/objective/crew/morgue //Ported from old Hippie
- explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends."
- jobs = "chiefmedicalofficer,geneticist,medicaldoctor"
-
-/datum/objective/crew/morgue/check_completion()
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
- if(H.stat == DEAD && H.z == SSmapping.station_start)
- if(get_area(H) != /area/medical/morgue)
- return FALSE
- return TRUE
-
-/datum/objective/crew/chems //Ported from old Hippie
- var/targetchem = "none"
- var/datum/reagent/chempath
- explanation_text = "Have (yell about this in the development discussion channel of citadel's discord, something broke) in your bloodstream when the shift ends."
- jobs = "chiefmedicalofficer,chemist"
-
-/datum/objective/crew/chems/New()
- . = ..()
- var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingadrenaline, /datum/reagent/medicine/changelinghaste)
- var/drugs = typesof(/datum/reagent/drug) - blacklist
- var/meds = typesof(/datum/reagent/medicine) - blacklist
- var/chemlist = drugs + meds
- chempath = pick(chemlist)
- targetchem = initial(chempath.id)
- update_explanation_text()
-
-/datum/objective/crew/chems/update_explanation_text()
- . = ..()
- explanation_text = "Have [initial(chempath.name)] in your bloodstream when the shift ends."
-
-/datum/objective/crew/chems/check_completion()
- if(owner.current)
- if(!owner.current.stat == DEAD && owner.current.reagents)
- if(owner.current.reagents.has_reagent(targetchem))
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/druglordchem //ported from old Hippie with adjustments
- var/targetchem = "none"
- var/datum/reagent/chempath
- var/chemamount = 0
- explanation_text = "Have at least (somethin broke here) pills containing at least (like really broke) units of(report this on the development discussion channel of citadel's discord) when the shift ends."
- jobs = "chemist"
-
-/datum/objective/crew/druglordchem/New()
- . = ..()
- target_amount = rand(5,50)
- chemamount = rand(1,20)
- var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol)
- var/drugs = typesof(/datum/reagent/drug) - blacklist
- var/chemlist = drugs
- chempath = pick(chemlist)
- targetchem = initial(chempath.id)
- update_explanation_text()
-
-/datum/objective/crew/druglordchem/update_explanation_text()
- . = ..()
- explanation_text = "Have at least [target_amount] pills containing at least [chemamount] units of [initial(chempath.name)] when the shift ends."
-
-/datum/objective/crew/druglordchem/check_completion()
- var/pillcount = target_amount
- if(owner.current)
- if(owner.current.contents)
- for(var/obj/item/reagent_containers/pill/P in owner.current.get_contents())
- if(P.reagents.has_reagent(targetchem, chemamount))
- pillcount--
- if(pillcount <= 0)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/noinfections
- explanation_text = "Make sure there are no crew members with harmful diseases at the end of the shift."
- jobs = "virologist"
-
-/datum/objective/crew/noinfections/check_completion()
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
- if(!H.stat == DEAD)
- if(H.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(H)])
- if(H.check_virus() == 2)
- return FALSE
- return TRUE
diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_science.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_science.dm
deleted file mode 100644
index fb260583fd..0000000000
--- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_science.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-/* SCIENCE OBJECTIVES */
-
-/datum/objective/crew/cyborgs //Ported from old Hippie
- explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's development discussion channel about this) functioning cyborgs when the shift ends."
- jobs = "researchdirector,roboticist"
-
-/datum/objective/crew/cyborgs/New()
- . = ..()
- target_amount = rand(3,10)
- update_explanation_text()
-
-/datum/objective/crew/cyborgs/update_explanation_text()
- . = ..()
- explanation_text = "Ensure there are at least [target_amount] functioning cyborgs when the shift ends."
-
-/datum/objective/crew/cyborgs/check_completion()
- var/borgcount = target_amount
- for(var/mob/living/silicon/robot/R in GLOB.alive_mob_list)
- if(!(R.stat == DEAD))
- borgcount--
- if(borgcount <= 0)
- return TRUE
- else
- return FALSE
-
-/datum/objective/crew/research //inspired by old hippie's research level objective. should hopefully be compatible with techwebs when that gets finished. hopefully. should be easy to update in the event that it is incompatible with techwebs.
- var/datum/design/targetdesign
- explanation_text = "Make sure the research required to produce a (something broke, yell on citadel's development discussion channel about this) is available on the R&D server by the end of the shift."
- jobs = "researchdirector,scientist"
-
-/datum/objective/crew/research/New()
- . = ..()
- targetdesign = pick(subtypesof(/datum/design))
- update_explanation_text()
-
-/datum/objective/crew/research/update_explanation_text()
- . = ..()
- explanation_text = "Make sure the research required to produce a [initial(targetdesign.name)] is available on the R&D server by the end of the shift."
-
-/datum/objective/crew/research/check_completion()
- for(var/obj/machinery/rnd/server/S in GLOB.machines)
- if(S && S.stored_research)
- if(S.stored_research.researched_designs[initial(targetdesign.id)])
- return TRUE
- return FALSE
diff --git a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_security.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_security.dm
deleted file mode 100644
index 8906c268d2..0000000000
--- a/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_security.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-/* SECURITY OBJECTIVES */
-
-/datum/objective/crew/enjoyyourstay
- explanation_text = "Enforce Space Law to the best of your ability."
- jobs = "headofsecurity,securityofficer,warden,detective"
-
-/datum/objective/crew/enjoyyourstay/check_completion()
- if(owner && owner.current)
- if(owner.current.stat != DEAD)
- return TRUE
- return FALSE
-
-/datum/objective/crew/justicecrew
- explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends."
- jobs = "lawyer"
-
-/datum/objective/crew/justicecrew/check_completion()
- if(owner && owner.current)
- for(var/datum/mind/M in SSticker.minds)
- if(M.current && isliving(M.current))
- if(!M.special_role && !(M.assigned_role == "Security Officer") && !(M.assigned_role == "Detective") && !(M.assigned_role == "Head of Security") && !(M.assigned_role == "Lawyer") && !(M.assigned_role == "Warden") && get_area(M.current) != typesof(/area/security))
- return FALSE
- return TRUE
diff --git a/modular_citadel/code/modules/cargo/packs.dm b/modular_citadel/code/modules/cargo/packs.dm
deleted file mode 100644
index 6d39a51a76..0000000000
--- a/modular_citadel/code/modules/cargo/packs.dm
+++ /dev/null
@@ -1,28 +0,0 @@
-//supply packs
-
-/datum/supply_pack/misc/kinkmate
- name = "Kinkmate construction kit"
- cost = 2000
- contraband = TRUE
- contains = list(/obj/item/vending_refill/kink, /obj/item/circuitboard/machine/kinkmate)
- crate_name = "Kinkmate construction kit"
-
-
-//Food and livestocks
-
-/datum/supply_pack/organic/critter/kiwi
- name = "Space kiwi Crate"
- cost = 2000
- contains = list( /mob/living/simple_animal/kiwi)
- crate_name = "space kiwi crate"
-
-
-//////////////////////////////////////////////////////////////////////////////
-//////////////////////////// Miscellaneous ///////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
-
-/datum/supply_pack/misc/jukebox
- name = "Jukebox"
- cost = 35000
- contains = list(/obj/machinery/jukebox)
- crate_name = "Jukebox"
diff --git a/modular_citadel/code/modules/clothing/suits/suits.dm b/modular_citadel/code/modules/clothing/suits/suits.dm
index 22e4aef6a9..5cce40ad09 100644
--- a/modular_citadel/code/modules/clothing/suits/suits.dm
+++ b/modular_citadel/code/modules/clothing/suits/suits.dm
@@ -12,6 +12,7 @@
icon_state = "hostrench"
item_state = "hostrench"
mutantrace_variation = NO_MUTANTRACE_VARIATION
+ body_parts_covered = CHEST|ARMS|LEGS
/obj/item/clothing/suit/hooded/cloak/david
name = "red cloak"
diff --git a/modular_citadel/code/modules/crafting/recipes.dm b/modular_citadel/code/modules/crafting/recipes.dm
deleted file mode 100644
index 6c6001b040..0000000000
--- a/modular_citadel/code/modules/crafting/recipes.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/datum/crafting_recipe/toyneb
- name = "Non-Euplastic Blade"
- reqs = list(/obj/item/light/tube = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4)
- result = /obj/item/toy/sword/cx
- category = CAT_MISC
-
-/datum/crafting_recipe/potatos
- name = "Potat-OS"
- reqs = list(/obj/item/stack/cable_coil = 1, /obj/item/stack/rods = 1, /obj/item/reagent_containers/food/snacks/grown/potato = 1, /obj/item/aicard = 1 )
- result = /obj/item/aicard/potato
- category = CAT_ROBOT
\ 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 42363e9e07..5d81dbfa49 100644
--- a/modular_citadel/code/modules/custom_loadout/custom_items.dm
+++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm
@@ -447,6 +447,7 @@
item_state = "kimono"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/suit/commjacket
@@ -456,6 +457,7 @@
item_state = "commjacket"
icon = 'icons/obj/custom.dmi'
alternate_worn_icon = 'icons/mob/custom_w.dmi'
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/under/mw2_russian_para
diff --git a/modular_citadel/code/modules/mining/mine_items.dm b/modular_citadel/code/modules/mining/mine_items.dm
deleted file mode 100644
index d2cd1f2aa3..0000000000
--- a/modular_citadel/code/modules/mining/mine_items.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/machinery/computer/shuttle/mining
- req_access = list(ACCESS_MINING)
\ No newline at end of file
diff --git a/modular_citadel/code/modules/mob/living/simple_animal/pokemon.dm b/modular_citadel/code/modules/mob/living/simple_animal/pokemon.dm
deleted file mode 100644
index c3514719f6..0000000000
--- a/modular_citadel/code/modules/mob/living/simple_animal/pokemon.dm
+++ /dev/null
@@ -1,306 +0,0 @@
-//Sprites are trademarks of Gamefreak, Nintendo, The Pokemon Company, and Spike Chunsoft.
-#define ispokemon(A) (istype(A, /mob/living/simple_animal/pokemon))
-//POKEBALL
-/obj/item/pokeball
- name = "pokeball"
- icon = 'icons/obj/pokeball.dmi'
- icon_state = "pokeball"
- force = 0
- throwforce = 0
- var/success_chance = 25
- var/pokemon
-/obj/item/pokeball/great
- name = "great ball"
- icon_state = "pokeball_great"
- success_chance = 50
-/obj/item/pokeball/ultra
- icon_state = "pokeball_ultra"
- name = "ultra ball"
- success_chance = 75
-/obj/item/pokeball/master
- icon_state = "pokeball_master"
- name = "master ball"
- success_chance = 100
-/* //WIP
-/obj/item/pokeball/throw_impact(atom/hit_atom)
- if(ispokemon(hit_atom))
- var/mob/living/simple_animal/pokemon/pmon = hit_atom
- var/initial_success_chance = success_chance
- pmon.resize = 0.1
- pmon.color = "RED"
- pmon.canmove = 0
- sleep(15)
- if(pmon.pokeball == src)
- pmon.loc = src
- pokemon = pmon
-
- return 1
- if(pmon.pokeball && pmon.pokeball !=src)
- return ..()
- var/bonus_chance = ((pmon.maxHealth - pmon.health) / 2)
- if(bonus_chance > 100)
- bonus_chance = 100
- success_chance = (success_chance + bonus_chance)
- if(success_chance > 100)
- success_chance = 100
- if(success_chance < 0)//just in case
- success_chance = 0
- sleep(15)
- if(prob(success_chance))
- visible_message("[src] shakes...")
- else
- escape()
- sleep(15)
- if(prob(success_chance))
- visible_message("[src] shakes...")
- else
- escape()
- sleep(15)
- if(prob(success_chance))
- visible_message("[src] shakes...")
- else
- escape()
- else
- ..()
-/obj/item/pokeball/proc/capture(mob/living/simple_animal/pokemon/pmon, mob/living/user)
-
-/obj/item/pokeball/proc/escape(mob/living/simple_animal/pokemon/pmon, mob/living/user)
- if(!pokemon)
- return
- pmon.resize = 10
- pmon.color = null
- pmon.canmove = 1
- pmon.loc = src.loc
- if(pmon.pokeball != src)
- visible_message("[pmon] breaks free from [src]")
- PoolOrNew(/obj/effect/particle_effect/sparks, loc)
- playsound(src.loc, "sparks", 50, 1)
- qdel(src)
-
- else
-/obj/item/pokeball/proc/recall
-/obj/item/pokeball/proc/release
-*/
-/mob/living/simple_animal/pokemon
- name = "eevee"
- icon_state = "eevee"
- icon_living = "eevee"
- icon_dead = "eevee_d"
- desc = "Gotta catch 'em all!"
- icon = 'icons/mob/pokemon.dmi'
- var/pokeball
- pixel_x = -16
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 5)
- ventcrawler = 2
- health = 100
- maxHealth = 100
- layer = 4
- response_help = "pets"
- wander = 1
- turns_per_move = 2
- pass_flags = PASSTABLE | PASSMOB
-
-/mob/living/simple_animal/pokemon/proc/simple_lay_down()
- set name = "Rest"
- set category = "IC"
-
- resting = !resting
- src << "You are now [resting ? "resting" : "getting up"]."
- update_canmove()
- update_icon()
-
-/mob/living/simple_animal/pokemon/proc/update_icon()
- if(lying || resting || sleeping)
- icon_state = "[icon_state]_rest"
- else
- icon_state = "[icon_living]"
-
-/mob/living/simple_animal/pokemon/New()
- ..()
- verbs += /mob/living/simple_animal/pokemon/proc/simple_lay_down
-
-/*
-/////TEMPLATE/////
-
-/mob/living/simple_animal/pokemon/
- name = ""
- icon_state = ""
- icon_living = ""
- icon_dead = ""
-*/
-
-/mob/living/simple_animal/pokemon/leg
- icon = 'icons/mob/legendary.dmi'
- pixel_x = -32
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 12)
- health = 200
- maxHealth = 200
-
-
-/mob/living/simple_animal/pokemon/leg/articuno
- name = "Articuno"
- icon_state = "articuno"
- icon_living = "articuno"
- icon_dead = "articuno_d"
- flying = 1
-
-/mob/living/simple_animal/pokemon/leg/rayquaza
- name = "Rayquaza"
- icon_state = "rayquaza"
- icon_living = "rayquaza"
- icon_dead = "rayquaza_d"
- flying = 1
-
-//ALPHABETICAL PLEASE
-
-/mob/living/simple_animal/pokemon/absol
- name = "absol"
- icon_state = "absol"
- icon_living = "absol"
- icon_dead = "absol_d"
- speak = list("Absol!", "Ab-Absol!")
-
-/mob/living/simple_animal/pokemon/aggron
- name = "aggron"
- icon_state = "aggron"
- icon_living = "aggron"
- icon_dead = "aggron_d"
-
-/mob/living/simple_animal/pokemon/ampharos
- name = "ampharos"
- icon_state = "ampharos"
- icon_living = "ampharos"
- icon_dead = "ampharos_d"
-
-/mob/living/simple_animal/pokemon/charmander
- name = "charmander"
- icon_state = "charmander"
- icon_living = "charmander"
- icon_dead = "charmander_d"
-
-/mob/living/simple_animal/pokemon/ditto
- name = "ditto"
- icon_state = "ditto"
- icon_living = "ditto"
- icon_dead = "ditto_d"
-
-/mob/living/simple_animal/pokemon/dratini/dragonair
- name = "dragonair"
- desc = "A Dragonair stores an enormous amount of energy inside its body. It is said to alter the weather around it by loosing energy from the crystals on its neck and tail."
- icon_state = "dragonair"
- icon_living = "dragonair"
- icon_dead = "dragonair_d"
-
-/mob/living/simple_animal/pokemon/dratini/dragonair/dragonite
- name = "dragonite"
- desc = "It can circle the globe in just 16 hours. It is a kindhearted Pokémon that leads lost and foundering ships in a storm to the safety of land."
- icon_state = "dragonite"
- icon_living = "dragonite"
- icon_dead = "dragonite_d"
-
-/mob/living/simple_animal/pokemon/dratini
- name = "dratini"
- desc = "A Dratini continually molts and sloughs off its old skin. It does so because the life energy within its body steadily builds to reach uncontrollable levels."
- icon_state = "dratini"
- icon_living = "dratini"
- icon_dead = "dratini_d"
-
-/mob/living/simple_animal/pokemon/eevee
- name = "eevee"
- desc = "Eevee has an unstable genetic makeup that suddenly mutates due to its environment. Radiation from various stones causes this Pokémon to evolve."
- icon_state = "eevee"
- icon_living = "eevee"
- icon_dead = "eevee_d"
- speak = list("Eevee!", "Ee-Eevee!")
- response_help = "pets"
- response_harm = "hits"
-
-/mob/living/simple_animal/pokemon/eevee/espeon
- name = "espeon"
- desc = "Espeon is extremely loyal to any trainer it considers to be worthy. It is said to have developed precognitive powers to protect its trainer from harm."
- icon_state = "espeon"
- icon_living = "espeon"
- icon_dead = "espeon_d"
-
-/mob/living/simple_animal/pokemon/flaaffy
- name = "flaaffy"
- icon_state = "flaaffy"
- icon_living = "flaaffy"
- icon_dead = "flaaffy_d"
-
-/mob/living/simple_animal/pokemon/eevee/flareon
- name = "flareon"
- desc = "Flareon's fluffy fur releases heat into the air so that its body does not get excessively hot. Its body temperature can rise to a maximum of 1,650 degrees F."
- icon_state = "flareon"
- icon_living = "flareon"
- icon_dead = "flareon_d"
- speak = list("Flare!", "Flareon!")
-
-/mob/living/simple_animal/pokemon/eevee/glaceon
- name = "glaceon"
- desc = "By controlling its body heat, it can freeze the atmosphere around it to make a diamond-dust flurry."
- icon_state = "glaceon"
- icon_living = "glaceon"
- icon_dead = "glaceon_d"
- speak = list("Glace!", "Glaceon!")
-
-/mob/living/simple_animal/pokemon/eevee/jolteon
- name = "jolteon"
- desc = "Its cells generate weak power that is amplified by its fur's static electricity to drop thunderbolts. The bristling fur is made of electrically charged needles."
- icon_state = "jolteon"
- icon_living = "jolteon"
- icon_dead = "jolteon_d"
- speak = list("Jolt!", "Jolteon!")
-
-/mob/living/simple_animal/pokemon/larvitar
- name = "larvitar"
- desc = "It is born deep underground. It can't emerge until it has entirely consumed the soil around it."
- icon_state = "larvitar"
- icon_living = "larvitar"
- icon_dead = "larvitar_d"
-
-/mob/living/simple_animal/pokemon/mareep
- name = "mareep"
- icon_state = "mareep"
- icon_living = "mareep"
- icon_dead = "mareep_d"
-
-/mob/living/simple_animal/pokemon/poochyena/mightyena
- name = "mightyena"
- icon_state = "mightyena"
- icon_living = "mightyena"
- icon_dead = "mightyena"
-
-/mob/living/simple_animal/pokemon/miltank
- name = "miltank"
- icon_state = "miltank"
- icon_living = "miltank"
- icon_dead = "miltank_d"
-
-/mob/living/simple_animal/pokemon/poochyena
- name = "poochyena"
- icon_state = "poochyena"
- icon_living = "poochyena"
- icon_dead = "poochyena_d"
-
-/mob/living/simple_animal/pokemon/eevee/sylveon
- name = "Sylveon"
- desc = "Sylveon, the Intertwining Pokémon. Sylveon affectionately wraps its ribbon-like feelers around its Trainer's arm as they walk together."
- icon_state = "sylveon"
- icon_living = "sylveon"
- icon_dead = "sylveon_d"
- speak = list("Sylveon!", "Syl!")
- response_help = "pets"
- response_harm = "hits"
-
-/mob/living/simple_animal/pokemon/eevee/umbreon
- name = "umbreon"
- icon_state = "umbreon"
- icon_dead = "umbreon_d"
- icon_living = "umbreon"
-
-/mob/living/simple_animal/pokemon/vulpix
- name = "vulpix"
- icon_state = "vulpix"
- icon_living = "vulpix"
- icon_dead = "vulpix_d"
diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
index 7d5e36f84f..3ad7e791b3 100644
--- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
@@ -24,26 +24,32 @@
if (500 to 750)
for(var/turf/turf in range(1,T))
new /obj/effect/hotspot(turf)
+ volume*=1.1
if (751 to 1100)
for(var/turf/turf in range(2,T))
new /obj/effect/hotspot(turf)
+ volume*=1.2
if (1101 to 1500) //If you're crafty
for(var/turf/turf in range(3,T))
new /obj/effect/hotspot(turf)
+ volume*=1.3
if (1501 to 2500) //requested
for(var/turf/turf in range(4,T))
new /obj/effect/hotspot(turf)
+ volume*=1.4
if (2501 to 5000)
for(var/turf/turf in range(5,T))
new /obj/effect/hotspot(turf)
+ volume*=1.5
if (5001 to INFINITY)
for(var/turf/turf in range(6,T))
new /obj/effect/hotspot(turf)
+ volume*=1.6
message_admins("Fermi explosion at [T], with a temperature of [temp], pH of [pH], Impurity tot of [ImpureTot].")
@@ -66,7 +72,7 @@
if (pH > 10) //if alkaline, small explosion.
var/datum/effect_system/reagents_explosion/e = new()
- e.set_up(round((volume/30)*(pH-9)), T, 0, 0)
+ e.set_up(round((volume/28)*(pH-9)), T, 0, 0)
e.start()
if(!ImpureTot == 0) //If impure, v.small emp (0.6 or less)
@@ -137,12 +143,16 @@
/datum/chemical_reaction/fermi/SDGF/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)//Spawns an angery teratoma!
var/turf/T = get_turf(my_atom)
- var/mob/living/simple_animal/slime/S = new(T,"green")
- S.damage_coeff = list(BRUTE = 0.9 , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
- S.name = "Living teratoma"
- S.real_name = "Living teratoma"
- S.rabid = 1//Make them an angery boi
- S.color = "#810010"
+ var/amount_to_spawn = round((volume/100), 1)
+ if(amount_to_spawn <= 0)
+ amount_to_spawn = 1
+ for(var/i in 1 to amount_to_spawn)
+ var/mob/living/simple_animal/slime/S = new(T,"green")
+ S.damage_coeff = list(BRUTE = 0.9 , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
+ S.name = "Living teratoma"
+ S.real_name = "Living teratoma"
+ S.rabid = 1//Make them an angery boi
+ S.color = "#810010"
my_atom.reagents.clear_reagents()
var/list/seen = viewers(8, get_turf(my_atom))
for(var/mob/M in seen)
@@ -353,11 +363,15 @@
PurityMin = 0.5
/datum/chemical_reaction/fermi/hatmium/FermiExplode(src, var/atom/my_atom, volume, temp, pH)
- var/obj/item/clothing/head/hattip/hat = new /obj/item/clothing/head/hattip(get_turf(my_atom))
- hat.animate_atom_living()
+ var/amount_to_spawn = round((volume/100), 1)
+ if(amount_to_spawn <= 0)
+ amount_to_spawn = 1
+ for(var/i in 1 to amount_to_spawn)
+ var/obj/item/clothing/head/hattip/hat = new /obj/item/clothing/head/hattip(get_turf(my_atom))
+ hat.animate_atom_living()
var/list/seen = viewers(8, get_turf(my_atom))
for(var/mob/M in seen)
- to_chat(M, "The makes an off sounding pop, as a hat suddenly climbs out of the beaker!")
+ to_chat(M, "The [my_atom] makes an off sounding pop, as a hat suddenly climbs out of it!")
my_atom.reagents.clear_reagents()
/datum/chemical_reaction/fermi/furranium
diff --git a/modular_citadel/code/modules/research/techweb/all_nodes.dm b/modular_citadel/code/modules/research/techweb/all_nodes.dm
deleted file mode 100644
index c0ddaceaf7..0000000000
--- a/modular_citadel/code/modules/research/techweb/all_nodes.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-/datum/techweb_node/bluespace_basic/New()
- . = ..()
- design_ids += "xenobio_monkeys"
-
-/datum/techweb_node/practical_bluespace/New()
- . = ..()
- design_ids += "xenobio_slimebasic"
-
-/datum/techweb_node/adv_bluespace/New()
- . = ..()
- design_ids += "xenobio_slimeadv"
-
-/datum/techweb_node/ballistic_weapons/New()
- . = ..()
- design_ids += "mag_oldsmg_rubber"
-
-/datum/techweb_node/computer_board_gaming
- id = "computer_board_gaming"
- display_name = "Games and Toys"
- description = "For the slackers on the station."
- prereq_ids = list("comptech")
- design_ids = list("arcade_battle", "arcade_orion", "arcade_minesweeper", "slotmachine", "autoylathe")
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
- export_price = 5000
-
-/datum/techweb_node/ballistic_weapons
- design_ids = list("mag_oldsmg", "mag_oldsmg_ap", "mag_oldsmg_ic", "mag_oldsmg_tx")
-
-/datum/techweb_node/advanced_illegl_ballistics
- id = "advanced_illegal_ballistics"
- display_name = "Advanced Illegal Ballistics"
- description = "Advanced Ballistic for Illegal weaponds."
- design_ids = list("10mm","10mmap","10mminc","10mmhp","pistolm9mm","m45","bolt_clip")
- prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons")
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space.
- export_price = 7000
diff --git a/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm b/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm
deleted file mode 100644
index d968cfdcc7..0000000000
--- a/modular_citadel/code/modules/research/techweb/all_nodes.dme.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-/datum/techweb_node/bluespace_basic/New()
- . = ..()
- design_ids += "xenobio_monkeys"
-
-/datum/techweb_node/practical_bluespace/New()
- . = ..()
- design_ids += "xenobio_slimebasic"
-
-/datum/techweb_node/adv_bluespace/New()
- . = ..()
- design_ids += "xenobio_slimeadv"
-
-/datum/techweb_node/ballistic_weapons/New()
- . = ..()
- design_ids += "mag_oldsmg_rubber"
-
-/datum/techweb_node/computer_board_gaming
- id = "computer_board_gaming"
- display_name = "Games and Toys"
- description = "For the slackers on the station."
- prereq_ids = list("comptech")
- design_ids = list("arcade_battle", "arcade_orion", "slotmachine", "autoylathe")
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
- export_price = 5000
-
-/datum/techweb_node/advanced_illegl_ballistics
- id = "advanced_illegal_ballistics"
- display_name = "Advanced Illegal Ballistics
- description = "Advanced Ballistic for Illegal weaponds."
- design_ids = list("10mm","10mmap","10mminc","10mmhp","9mm","point_45","bolt_clip")
- prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons")
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space.
- export_price = 7000
diff --git a/modular_citadel/icons/misc/misc.dmi b/modular_citadel/icons/misc/misc.dmi
deleted file mode 100644
index cf74d73796..0000000000
Binary files a/modular_citadel/icons/misc/misc.dmi and /dev/null differ
diff --git a/modular_citadel/icons/mob/citadel/glasses.dmi b/modular_citadel/icons/mob/citadel/glasses.dmi
deleted file mode 100644
index cf74d73796..0000000000
Binary files a/modular_citadel/icons/mob/citadel/glasses.dmi and /dev/null differ
diff --git a/modular_citadel/icons/mob/citadel/head.dmi b/modular_citadel/icons/mob/citadel/head.dmi
deleted file mode 100644
index cf74d73796..0000000000
Binary files a/modular_citadel/icons/mob/citadel/head.dmi and /dev/null differ
diff --git a/modular_citadel/icons/mob/citadel/masks.dmi b/modular_citadel/icons/mob/citadel/masks.dmi
deleted file mode 100644
index cf74d73796..0000000000
Binary files a/modular_citadel/icons/mob/citadel/masks.dmi and /dev/null differ
diff --git a/modular_citadel/icons/mob/citadel/shoes.dmi b/modular_citadel/icons/mob/citadel/shoes.dmi
deleted file mode 100644
index cf74d73796..0000000000
Binary files a/modular_citadel/icons/mob/citadel/shoes.dmi and /dev/null differ
diff --git a/modular_citadel/icons/mob/digishoes.dmi b/modular_citadel/icons/mob/digishoes.dmi
index a499db6262..b4e27d0b5d 100644
Binary files a/modular_citadel/icons/mob/digishoes.dmi and b/modular_citadel/icons/mob/digishoes.dmi differ
diff --git a/modular_citadel/icons/mob/werenerd.dmi b/modular_citadel/icons/mob/werenerd.dmi
deleted file mode 100644
index 706d4248f8..0000000000
Binary files a/modular_citadel/icons/mob/werenerd.dmi and /dev/null differ
diff --git a/modular_citadel/icons/mob/werenerdleap.dmi b/modular_citadel/icons/mob/werenerdleap.dmi
deleted file mode 100644
index eb5339733b..0000000000
Binary files a/modular_citadel/icons/mob/werenerdleap.dmi and /dev/null differ
diff --git a/modular_citadel/icons/obj/structures.dmi b/modular_citadel/icons/obj/structures.dmi
deleted file mode 100644
index cf74d73796..0000000000
Binary files a/modular_citadel/icons/obj/structures.dmi and /dev/null differ
diff --git a/modular_citadel/icons/obj/tools.dmi b/modular_citadel/icons/obj/tools.dmi
index 5d5a0d8abd..7b99880799 100644
Binary files a/modular_citadel/icons/obj/tools.dmi and b/modular_citadel/icons/obj/tools.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 9a457a07fc..9226b61518 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2777,6 +2777,9 @@
#include "code\modules\surgery\advanced\viral_bonding.dm"
#include "code\modules\surgery\advanced\bioware\bioware.dm"
#include "code\modules\surgery\advanced\bioware\bioware_surgery.dm"
+#include "code\modules\surgery\advanced\bioware\experimental_dissection.dm"
+#include "code\modules\surgery\advanced\bioware\ligament_hook.dm"
+#include "code\modules\surgery\advanced\bioware\ligament_reinforcement.dm"
#include "code\modules\surgery\advanced\bioware\nerve_grounding.dm"
#include "code\modules\surgery\advanced\bioware\nerve_splicing.dm"
#include "code\modules\surgery\advanced\bioware\vein_threading.dm"