diff --git a/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm b/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm
index 8956267108..e21c3a92f7 100644
--- a/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm
+++ b/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm
@@ -103,7 +103,7 @@
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
-/turf/open/floor/plasteel/airless/dark,
+/turf/open/floor/plasteel/freezer,
/area/ruin/space/has_grav/gasthelizard)
"n" = (
/obj/structure/closet/crate/freezer,
@@ -117,7 +117,7 @@
},
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
-/turf/open/floor/plasteel/airless/dark,
+/turf/open/floor/plasteel/freezer,
/area/ruin/space/has_grav/gasthelizard)
"o" = (
/obj/structure/closet/crate/freezer,
@@ -129,7 +129,7 @@
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard,
-/turf/open/floor/plasteel/airless/dark,
+/turf/open/floor/plasteel/freezer,
/area/ruin/space/has_grav/gasthelizard)
"p" = (
/obj/structure/window/reinforced{
@@ -158,7 +158,7 @@
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/gasthelizard)
"r" = (
-/turf/open/floor/plasteel/airless/dark,
+/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"s" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
@@ -203,14 +203,14 @@
/area/ruin/space/has_grav/gasthelizard)
"x" = (
/obj/structure/kitchenspike,
-/turf/open/floor/plasteel/airless/dark,
+/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"y" = (
/obj/structure/table/reinforced,
/obj/item/kitchen/knife/butcher,
/obj/item/restraints/handcuffs,
/obj/item/reagent_containers/spray/pepper,
-/turf/open/floor/plasteel/airless/dark,
+/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"z" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
@@ -230,14 +230,14 @@
/area/ruin/space/has_grav/gasthelizard)
"C" = (
/obj/machinery/gibber,
-/turf/open/floor/plasteel/airless/dark,
+/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"D" = (
/obj/structure/table/reinforced,
/obj/item/clothing/suit/straight_jacket,
/obj/item/reagent_containers/syringe/lethal,
/obj/item/reagent_containers/syringe/lethal/choral,
-/turf/open/floor/plasteel/airless/dark,
+/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"E" = (
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
@@ -258,7 +258,7 @@
/area/ruin/space/has_grav/gasthelizard)
"H" = (
/obj/machinery/door/airlock/security,
-/turf/open/floor/plasteel/airless/dark,
+/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"I" = (
/obj/item/reagent_containers/glass/bottle/morphine{
@@ -282,7 +282,7 @@
pixel_y = 6
},
/obj/structure/table/reinforced,
-/turf/open/floor/plasteel/airless/dark,
+/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"J" = (
/obj/structure/rack,
@@ -328,12 +328,12 @@
/obj/item/cautery,
/obj/item/circular_saw,
/obj/machinery/light,
-/turf/open/floor/plasteel/airless/dark,
+/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"Q" = (
/obj/structure/table/optable,
/obj/effect/decal/cleanable/blood/old,
-/turf/open/floor/plasteel/airless/dark,
+/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"R" = (
/obj/structure/table/reinforced,
@@ -342,7 +342,7 @@
/obj/item/reagent_containers/glass/bottle/mutagen,
/obj/item/reagent_containers/glass/bottle/mutagen,
/obj/item/razor,
-/turf/open/floor/plasteel/airless/dark,
+/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/gasthelizard)
"S" = (
/obj/machinery/suit_storage_unit/security,
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 115ad3d363..f2e0599ae6 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -9840,7 +9840,7 @@
id = "XCCFerry";
name = "Hanger Bay Shutters";
pixel_y = 24;
- req_access_txt = "2"
+ req_access_txt = "101"
},
/obj/effect/turf_decal/stripes/line{
dir = 5
diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index a6c86a3576..4af54b8c70 100644
--- a/code/controllers/subsystem/processing/quirks.dm
+++ b/code/controllers/subsystem/processing/quirks.dm
@@ -9,6 +9,7 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
runlevels = RUNLEVEL_GAME
var/list/quirks = list() //Assoc. list of all roundstart quirk datum types; "name" = /path/
+ var/list/quirk_names_by_path = list()
var/list/quirk_points = list() //Assoc. list of quirk names and their "point cost"; positive numbers are good traits, and negative ones are bad
var/list/quirk_objects = list() //A list of all quirk objects in the game, since some may process
@@ -22,11 +23,68 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
var/datum/quirk/T = V
quirks[initial(T.name)] = T
quirk_points[initial(T.name)] = initial(T.value)
+ quirk_names_by_path[T] = initial(T.name)
-/datum/controller/subsystem/processing/quirks/proc/AssignQuirks(mob/living/user, client/cli, spawn_effects)
+/datum/controller/subsystem/processing/quirks/proc/AssignQuirks(mob/living/user, client/cli, spawn_effects, roundstart = FALSE, datum/job/job, silent = FALSE, mob/to_chat_target)
GenerateQuirks(cli)
- for(var/V in cli.prefs.character_quirks)
+ var/list/quirks = cli.prefs.character_quirks.Copy()
+ var/list/cut
+ if(job && job.blacklisted_quirks)
+ cut = filter_quirks(quirks, job)
+ for(var/V in quirks)
user.add_quirk(V, spawn_effects)
+ if(!silent && LAZYLEN(cut))
+ to_chat(to_chat_target || user, "All of your non-neutral character quirks have been cut due to these quirks conflicting with your job assignment: [english_list(cut)].")
+
+/datum/controller/subsystem/processing/quirks/proc/quirk_path_by_name(name)
+ return quirks[name]
+
+/datum/controller/subsystem/processing/quirks/proc/quirk_points_by_name(name)
+ return quirk_points[name]
+
+/datum/controller/subsystem/processing/quirks/proc/quirk_name_by_path(path)
+ return quirk_names_by_path[path]
+
+/datum/controller/subsystem/processing/quirks/proc/total_points(list/quirk_names)
+ . = 0
+ for(var/i in quirk_names)
+ . += quirk_points_by_name(i)
+
+/datum/controller/subsystem/processing/quirks/proc/filter_quirks(list/quirks, datum/job/job)
+ var/list/cut = list()
+ var/list/banned_names = list()
+ for(var/i in job.blacklisted_quirks)
+ var/name = quirk_name_by_path(i)
+ if(name)
+ banned_names += name
+ var/list/blacklisted = quirks & banned_names
+ if(length(blacklisted))
+ for(var/i in blacklisted)
+ quirks -= i
+ cut += i
+
+ /* //Code to automatically reduce positive quirks until balance is even.
+ var/points_used = total_points(quirks)
+ if(points_used > 0)
+ //they owe us points, let's collect.
+ for(var/i in quirks)
+ var/points = quirk_points_by_name(i)
+ if(points > 0)
+ cut += i
+ quirks -= i
+ points_used -= points
+ if(points_used <= 0)
+ break
+ */
+
+ //Nah, let's null all non-neutrals out.
+ if(cut.len)
+ for(var/i in quirks)
+ if(quirk_points_by_name(i) != 0)
+ //cut += i -- Commented out: Only show the ones that triggered the quirk purge.
+ quirks -= i
+
+ return cut
/datum/controller/subsystem/processing/quirks/proc/GenerateQuirks(client/user)
if(user.prefs.character_quirks.len)
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 47945e4333..f2469e8f7d 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -385,7 +385,7 @@ SUBSYSTEM_DEF(ticker)
if(player.mind.assigned_role != player.mind.special_role)
SSjob.EquipRank(N, player.mind.assigned_role, 0)
if(CONFIG_GET(flag/roundstart_traits) && ishuman(N.new_character))
- SSquirks.AssignQuirks(N.new_character, N.client, TRUE)
+ SSquirks.AssignQuirks(N.new_character, N.client, TRUE, TRUE, SSjob.GetJob(player.mind.assigned_role), FALSE, N)
CHECK_TICK
if(captainless)
for(var/mob/dead/new_player/N in GLOB.player_list)
diff --git a/code/datums/ert.dm b/code/datums/ert.dm
index d61c95c8f2..8fc0a9155b 100644
--- a/code/datums/ert.dm
+++ b/code/datums/ert.dm
@@ -55,3 +55,13 @@
rename_team = "Inquisition"
mission = "Destroy any traces of paranormal activity aboard the station."
polldesc = "a Nanotrasen paranormal response team"
+
+/datum/ert/greybois
+ code = "Green"
+ teamsize = 1
+ opendoors = FALSE
+ enforce_human = FALSE
+ roles = /datum/antagonist/greybois
+ leader_role = /datum/antagonist/greybois/greygod
+ rename_team = "Emergency Assistants"
+ polldesc = "an Emergency Assistant"
diff --git a/code/datums/traits/_quirk.dm b/code/datums/traits/_quirk.dm
index cc6dd8db3f..12e34b0c90 100644
--- a/code/datums/traits/_quirk.dm
+++ b/code/datums/traits/_quirk.dm
@@ -13,7 +13,6 @@
var/mob/living/quirk_holder
/datum/quirk/New(mob/living/quirk_mob, spawn_effects)
- ..()
if(!quirk_mob || (human_only && !ishuman(quirk_mob)) || quirk_mob.has_quirk(type))
qdel(src)
quirk_holder = quirk_mob
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index c65129ec85..8c808d0e5f 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -201,6 +201,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
new/datum/stack_recipe("dresser", /obj/structure/dresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 10),\
new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("loom", /obj/structure/loom, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \
new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50),\
new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2), \
@@ -278,6 +279,31 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
/obj/item/stack/sheet/cloth/ten
amount = 10
+//Durathread fuck slash-asterisk comments
+ GLOBAL_LIST_INIT(durathread_recipes, list ( \
+ new/datum/stack_recipe("durathread jumpsuit", /obj/item/clothing/under/durathread, 4, time = 40),
+ new/datum/stack_recipe("durathread beret", /obj/item/clothing/head/beret/durathread, 2, time = 40), \
+ new/datum/stack_recipe("durathread beanie", /obj/item/clothing/head/beanie/durathread, 2, time = 40), \
+ new/datum/stack_recipe("durathread bandana", /obj/item/clothing/mask/bandana/durathread, 1, time = 25), \
+ ))
+
+/obj/item/stack/sheet/durathread
+ name = "durathread"
+ desc = "A fabric sown from incredibly durable threads, known for its usefulness in armor production."
+ singular_name = "durathread roll"
+ icon_state = "sheet-durathread"
+ item_state = "sheet-cloth"
+ resistance_flags = FLAMMABLE
+ force = 0
+ throwforce = 0
+ merge_type = /obj/item/stack/sheet/durathread
+
+/obj/item/stack/sheet/durathread/Initialize(mapload, new_amount, merge = TRUE)
+ recipes = GLOB.durathread_recipes
+ return ..()
+
+
+
/*
* Cardboard
*/
@@ -603,3 +629,29 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra
amount = 20
/obj/item/stack/sheet/paperframes/fifty
amount = 50
+
+
+//durathread and cotton raw
+/obj/item/stack/sheet/cotton
+ name = "raw cotton bundle"
+ desc = "A bundle of raw cotton ready to be spun on the loom."
+ singular_name = "raw cotton ball"
+ icon_state = "sheet-cotton"
+ is_fabric = TRUE
+ resistance_flags = FLAMMABLE
+ force = 0
+ throwforce = 0
+ merge_type = /obj/item/stack/sheet/cotton
+ pull_effort = 30
+ loom_result = /obj/item/stack/sheet/cloth
+
+/obj/item/stack/sheet/cotton/durathread
+ name = "raw durathread bundle"
+ desc = "A bundle of raw durathread ready to be spun on the loom."
+ singular_name = "raw durathread ball"
+ icon_state = "sheet-durathreadraw"
+ merge_type = /obj/item/stack/sheet/cotton/durathread
+ pull_effort = 70
+ loom_result = /obj/item/stack/sheet/durathread
+
+
diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm
index 21b43eba20..908fc88383 100644
--- a/code/game/objects/items/stacks/sheets/sheets.dm
+++ b/code/game/objects/items/stacks/sheets/sheets.dm
@@ -12,4 +12,7 @@
novariants = FALSE
var/perunit = MINERAL_MATERIAL_AMOUNT
var/sheettype = null //this is used for girders in the creation of walls/false walls
- var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity.
\ No newline at end of file
+ var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity
+ var/is_fabric = FALSE //is this a valid material for the loom?
+ var/loom_result //result from pulling on the loom
+ var/pull_effort = 0 //amount of delay when pulling on the loom
\ No newline at end of file
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index eb71311c96..a57527c1c1 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -248,12 +248,13 @@
desc = "A bone satchel fashend with watcher wings and large bones from goliath. Can be worn on the belt."
icon = 'icons/obj/mining.dmi'
icon_state = "goliath_saddle"
- slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_BELT
+ slot_flags = ITEM_SLOT_BACK
/obj/item/storage/backpack/satchel/bone/ComponentInitialize()
. = ..()
GET_COMPONENT(STR, /datum/component/storage)
- STR.max_combined_w_class = 10
+ STR.max_combined_w_class = 20
+ STR.max_items = 15
/obj/item/storage/backpack/satchel/cap
name = "captain's satchel"
@@ -383,6 +384,14 @@
icon_state = "duffel-eng"
item_state = "duffel-eng"
+/obj/item/storage/backpack/duffelbag/durathread
+ name = "durathread duffel bag"
+ desc = "A lightweight duffel bag made out of durathread."
+ icon_state = "duffel-durathread"
+ item_state = "duffel-durathread"
+ resistance_flags = FIRE_PROOF
+ slowdown = 0
+
/obj/item/storage/backpack/duffelbag/drone
name = "drone duffel bag"
desc = "A large duffel bag for holding tools and hats."
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 96543ec5af..4495e9da14 100755
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -431,6 +431,48 @@
GET_COMPONENT(STR, /datum/component/storage)
STR.max_items = 6
+/obj/item/storage/belt/durathread
+ name = "durathread toolbelt"
+ desc = "A toolbelt made out of durathread, it seems resistant enough to hold even big tools like an RCD, it also has higher capacity."
+ icon_state = "webbing-durathread"
+ item_state = "webbing-durathread"
+ resistance_flags = FIRE_PROOF
+
+/obj/item/storage/belt/durathread/ComponentInitialize()
+ . = ..()
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.max_items = 14
+ STR.max_combined_w_class = 32
+ STR.max_w_class = WEIGHT_CLASS_NORMAL
+ STR.can_hold = typecacheof(list(
+ /obj/item/crowbar,
+ /obj/item/screwdriver,
+ /obj/item/weldingtool,
+ /obj/item/wirecutters,
+ /obj/item/wrench,
+ /obj/item/multitool,
+ /obj/item/flashlight,
+ /obj/item/stack/cable_coil,
+ /obj/item/t_scanner,
+ /obj/item/analyzer,
+ /obj/item/geiger_counter,
+ /obj/item/extinguisher/mini,
+ /obj/item/radio,
+ /obj/item/clothing/gloves,
+ /obj/item/holosign_creator/atmos,
+ /obj/item/holosign_creator/engineering,
+ /obj/item/forcefield_projector,
+ /obj/item/assembly/signaler,
+ /obj/item/lightreplacer,
+ /obj/item/rcd_ammo,
+ /obj/item/construction/rcd,
+ /obj/item/pipe_dispenser,
+ /obj/item/stack/rods,
+ /obj/item/stack/tile/plasteel,
+ /obj/item/grenade/chem_grenade/metalfoam,
+ /obj/item/grenade/chem_grenade/smart_metal_foam
+ ))
+
/obj/item/storage/belt/grenade
name = "grenadier belt"
desc = "A belt for holding grenades."
@@ -551,6 +593,22 @@
/obj/item/ammo_casing/shotgun
))
+/obj/item/storage/belt/bandolier/durathread
+ name = "durathread bandolier"
+ desc = "An double stacked bandolier made out of durathread."
+ icon_state = "bandolier-durathread"
+ item_state = "bandolier-durathread"
+ resistance_flags = FIRE_PROOF
+
+/obj/item/storage/belt/bandolier/durathread/ComponentInitialize()
+ . = ..()
+ GET_COMPONENT(STR, /datum/component/storage)
+ STR.max_items = 32
+ STR.display_numerical_stacking = TRUE
+ STR.can_hold = typecacheof(list(
+ /obj/item/ammo_casing
+ ))
+
/obj/item/storage/belt/medolier
name = "medolier"
desc = "A medical bandolier for holding smartdarts."
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index a6a3cea373..6e41527b24 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -132,7 +132,7 @@
new /obj/item/card/emag(src) // 6 tc
if("ninja") // 40~ tc worth
- new /obj/item/katana(src) // Unique , basicly a better esword. 10 tc?
+ new /obj/item/katana(src) // Unique , basicly a better esword. 10 tc?
new /obj/item/implanter/adrenalin(src) // 8 tc
new /obj/item/throwing_star(src) // ~5 tc for all 6
new /obj/item/throwing_star(src)
@@ -294,6 +294,7 @@
new /obj/item/radio/headset/chameleon(src)
new /obj/item/stamp/chameleon(src)
new /obj/item/pda/chameleon(src)
+ new /obj/item/clothing/neck/cloak/chameleon(src)
//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars.
//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance)
diff --git a/code/game/objects/structures/loom.dm b/code/game/objects/structures/loom.dm
new file mode 100644
index 0000000000..c4e1968e59
--- /dev/null
+++ b/code/game/objects/structures/loom.dm
@@ -0,0 +1,21 @@
+//Loom, turns raw cotton and durathread into their respective fabrics.
+
+/obj/structure/loom
+ name = "loom"
+ desc = "A simple device used to weave cloth and other thread-based fabrics together into usable material."
+ icon = 'icons/obj/hydroponics/equipment.dmi'
+ icon_state = "loom"
+ density = TRUE
+ anchored = TRUE
+
+/obj/structure/loom/attackby(obj/item/stack/sheet/W, mob/user)
+ if(W.is_fabric && W.amount > 1)
+ user.show_message("You start weaving the [W.name] through the loom..", 1)
+ if(W.use_tool(src, user, W.pull_effort))
+ new W.loom_result(drop_location())
+ user.show_message("You weave the [W.name] into a workable fabric.", 1)
+ W.amount = (W.amount - 2)
+ if(W.amount < 1)
+ qdel(W)
+ else
+ user.show_message("You need a valid fabric and at least 2 of said fabric before using this.", 1)
\ No newline at end of file
diff --git a/code/modules/antagonists/changeling/powers/strained_muscles.dm b/code/modules/antagonists/changeling/powers/strained_muscles.dm
index baeed8b0b2..bdbd38b92d 100644
--- a/code/modules/antagonists/changeling/powers/strained_muscles.dm
+++ b/code/modules/antagonists/changeling/powers/strained_muscles.dm
@@ -5,7 +5,7 @@
name = "Strained Muscles"
desc = "We evolve the ability to reduce the acid buildup in our muscles, allowing us to move much faster."
helptext = "The strain will make us tired, and we will rapidly become fatigued. Standard weight restrictions, like hardsuits, still apply. Cannot be used in lesser form."
- chemical_cost = 0
+ chemical_cost = 15
dna_cost = 1
req_human = 1
var/stacks = 0 //Increments every 5 seconds; damage increases over time
@@ -15,13 +15,16 @@
action_background_icon_state = "bg_ling"
/obj/effect/proc_holder/changeling/strained_muscles/sting_action(mob/living/carbon/user)
+ var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
active = !active
if(active)
to_chat(user, "Our muscles tense and strengthen.")
+ changeling.chem_recharge_slowdown += 0.5
else
REMOVE_TRAIT(user, TRAIT_GOTTAGOFAST, "changeling_muscles")
to_chat(user, "Our muscles relax.")
- if(stacks >= 10)
+ changeling.chem_recharge_slowdown -= 0.5
+ if(stacks >= 20)
to_chat(user, "We collapse in exhaustion.")
user.Knockdown(60)
user.emote("gasp")
@@ -42,9 +45,9 @@
stacks++
//user.take_bodypart_damage(stacks * 0.03, 0)
- user.staminaloss += stacks * 1.3 //At first the changeling may regenerate stamina fast enough to nullify fatigue, but it will stack
+ user.adjustStaminaLoss(stacks*1.3) //At first the changeling may regenerate stamina fast enough to nullify fatigue, but it will stack
- if(stacks == 11) //Warning message that the stacks are getting too high
+ if(stacks == 10) //Warning message that the stacks are getting too high
to_chat(user, "Our legs are really starting to hurt...")
sleep(40)
diff --git a/code/modules/antagonists/greybois/greybois.dm b/code/modules/antagonists/greybois/greybois.dm
new file mode 100644
index 0000000000..b5e18045e8
--- /dev/null
+++ b/code/modules/antagonists/greybois/greybois.dm
@@ -0,0 +1,23 @@
+/datum/antagonist/greybois
+ name = "Emergency Assistant"
+ show_name_in_check_antagonists = TRUE
+ show_in_antagpanel = FALSE
+ var/mission = "Assist the station."
+ var/datum/outfit/outfit = /datum/outfit/ert/greybois
+
+/datum/antagonist/greybois/greygod
+ outfit = /datum/outfit/ert/greybois/greygod
+
+/datum/antagonist/greybois/greet()
+ to_chat(owner, "You are an Emergency Assistant.")
+ to_chat(owner, "Central Command is sending you to [station_name()] with the task: [mission]")
+
+/datum/antagonist/greybois/on_gain()
+ equipERT()
+ . = ..()
+
+/datum/antagonist/greybois/proc/equipERT()
+ var/mob/living/carbon/human/H = owner.current
+ if(!istype(H))
+ return
+ H.equipOutfit(outfit)
diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm
index 90581e9911..c6ba297024 100644
--- a/code/modules/antagonists/wizard/equipment/artefact.dm
+++ b/code/modules/antagonists/wizard/equipment/artefact.dm
@@ -402,8 +402,12 @@
var/breakout = 0
while(breakout < 50)
if(!T)
- break
+ end_effect(user)
+ return
var/turf/potential_T = find_safe_turf()
+ if(!potential_T)
+ end_effect(user)
+ return
if(T.z != potential_T.z || abs(get_dist_euclidian(potential_T,T)) > 50 - breakout)
do_teleport(user, potential_T, channel = TELEPORT_CHANNEL_MAGIC)
user.canmove = 0
diff --git a/code/modules/cargo/bounties/engineering.dm b/code/modules/cargo/bounties/engineering.dm
index e10d48f3bf..cf2cd7d93c 100644
--- a/code/modules/cargo/bounties/engineering.dm
+++ b/code/modules/cargo/bounties/engineering.dm
@@ -14,10 +14,10 @@
return FALSE
return T.air_contents.gases[gas_type] >= moles_required
-/datum/bounty/item/engineering/gas/nitryl_tank
- name = "Full Tank of Nitryl"
- description = "The non-human staff of Station 88 has been volunteered to test performance enhancing drugs. Ship them a tank full of Nitryl so they can get started."
- gas_type = /datum/gas/nitryl
+//datum/bounty/item/engineering/gas/nitryl_tank
+// name = "Full Tank of Nitryl"
+// description = "The non-human staff of Station 88 has been volunteered to test performance enhancing drugs. Ship them a tank full of Nitryl so they can get started."
+// gas_type = /datum/gas/nitryl
/datum/bounty/item/engineering/gas/tritium_tank
name = "Full Tank of Tritium"
@@ -37,6 +37,55 @@
required_count = 10 //easy to make
wanted_types = list(/obj/machinery/portable_atmospherics/canister)
+/datum/bounty/item/engineering/microwave
+ name = "Microwaves"
+ description = "Due to a shortage of microwaves, our chefs are incapable of keeping up with our sheer volume of orders. We need at least three microwaves to keep up with our crew's dietary habits."
+ reward = 2000
+ required_count = 3
+ wanted_types = list(/obj/machinery/microwave)
+
+/datum/bounty/item/engineering/hydroponicstrays
+ name = "Hydroponics Tray"
+ description = "The garden has become a hot spot of late, they need a few more hydroponics tray to grow more flowers."
+ reward = 2500
+ required_count = 5
+ wanted_types = list(/obj/machinery/hydroponics)
+
+/datum/bounty/item/engineering/rcd
+ name = "Spare RCD"
+ description = "Construction and repairs to are shuttles are going slowly. As it turns out, we're a little short on RCDs, can you send us a few?"
+ reward = 2500
+ required_count = 3
+ wanted_types = list(/obj/item/construction/rcd)
+
+/datum/bounty/item/engineering/rpd
+ name = "Spare RPD"
+ description = "Our Atmospheric Technicians are still living in the past, relying on stationary pipe dispensers to produce the pipes necessary to accomplish their strenuous tasks. They could use an upgrade. Could you send us some Rapid Pipe Dispensers?"
+ reward = 3000
+ required_count = 3
+ wanted_types = list(/obj/item/pipe_dispenser)
+
+/datum/bounty/item/engineering/heaters
+ name = "Space Heaters"
+ description = "The kitchen freezer was left open and now the whole place is frozen solid! We need a few space heaters to warm it back up before anyone gets hungry."
+ reward = 3000
+ required_count = 5
+ wanted_types = list(/obj/machinery/space_heater)
+
+/datum/bounty/item/engineering/arcadetrail
+ name = "Orion Trail Arcade Games"
+ description = "The staff have nothing to do when off-work. Can you send us some Orion Trail games to play?"
+ reward = 3000
+ required_count = 5
+ wanted_types = list(/obj/machinery/computer/arcade/orion_trail)
+
+/datum/bounty/item/engineering/arcadebattle
+ name = "Battle Arcade Games"
+ description = "The staff have nothing to do when off-work. Can you send us some Battle Arcade games to play?"
+ reward = 3000
+ required_count = 5
+ wanted_types = list(/obj/machinery/computer/arcade/battle)
+
/datum/bounty/item/engineering/energy_ball
name = "Contained Tesla Ball"
description = "Station 24 is being overrun by hordes of angry Mothpeople. They are requesting the ultimate bug zapper."
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
index 775bbabdfd..33a83487fc 100644
--- a/code/modules/clothing/chameleon.dm
+++ b/code/modules/clothing/chameleon.dm
@@ -630,3 +630,27 @@
/obj/item/stamp/chameleon/broken/Initialize()
. = ..()
chameleon_action.emp_randomise(INFINITY)
+
+/obj/item/clothing/neck/cloak/chameleon
+ name = "black tie"
+ desc = "A neosilk clip-on tie."
+ icon_state = "blacktie"
+ item_color = "blacktie"
+ resistance_flags = NONE
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+
+/obj/item/clothing/neck/cloak/chameleon
+ var/datum/action/item_action/chameleon/change/chameleon_action
+
+/obj/item/clothing/neck/cloak/chameleon/Initialize()
+ . = ..()
+ chameleon_action = new(src)
+ chameleon_action.chameleon_type = /obj/item/clothing/neck
+ chameleon_action.chameleon_name = "Cloak"
+ chameleon_action.initialize_disguises()
+
+/obj/item/clothing/neck/cloak/chameleon/emp_act(severity)
+ . = ..()
+ if(. & EMP_PROTECT_SELF)
+ return
+ chameleon_action.emp_randomise()
diff --git a/code/modules/clothing/head/beanie.dm b/code/modules/clothing/head/beanie.dm
index bbae5b261f..a5fb04d393 100644
--- a/code/modules/clothing/head/beanie.dm
+++ b/code/modules/clothing/head/beanie.dm
@@ -74,4 +74,13 @@
icon_state = "beaniestripedgreen"
item_color = "beaniestripedgreen"
+/obj/item/clothing/head/beanie/durathread
+ name = "durathread beanie"
+ desc = "A beanie made from durathread, its resilient fibres provide some protection to the wearer."
+ icon_state = "beaniedurathread"
+ item_color = null
+ armor = list("melee" = 25, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 30, "bio" = 15, "rad" = 20, "fire" = 100, "acid" = 50)
+
+
+
//No dog fashion sprites yet :( poor Ian can't be dope like the rest of us yet
\ No newline at end of file
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index f4b4e4a96d..be6e270e45 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -336,3 +336,11 @@
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
+
+
+/obj/item/clothing/head/helmet/durathread
+ name = "makeshift helmet"
+ desc = "A hardhat with strips of leather and durathread for additional blunt protection."
+ icon_state = "durathread"
+ item_state = "durathread"
+ armor = list("melee" = 25, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 30, "bio" = 15, "rad" = 20, "fire" = 100, "acid" = 50)
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 23e1825c3d..298510564c 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -279,6 +279,13 @@
desc = "This headwear shows off your Cargonian leadership"
icon_state = "qmberet"
+/obj/item/clothing/head/beret/durathread
+ name = "durathread beret"
+ desc = "A beret made from durathread, its resilient fibres provide some protection to the wearer."
+ icon_state = "beretdurathread"
+ item_color = null
+ armor = list("melee" = 25, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 30, "bio" = 15, "rad" = 20, "fire" = 100, "acid" = 50)
+
#undef DRILL_DEFAULT
#undef DRILL_SHOUTING
#undef DRILL_YELLING
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index 5dfa7d6047..4b8f16a77f 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -313,3 +313,9 @@
message = replacetextEx(message,regex(capitalize(key),"g"), "[capitalize(value)]")
message = replacetextEx(message,regex(key,"g"), "[value]")
speech_args[SPEECH_MESSAGE] = trim(message)
+
+/obj/item/clothing/mask/bandana/durathread
+ name = "durathread bandana"
+ desc = "A bandana made from durathread, you wish it would provide some protection to its wearer, but it's far too thin..."
+ icon_state = "banddurathread"
+
diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm
index b4310a7f42..86c8f5335f 100644
--- a/code/modules/clothing/outfits/ert.dm
+++ b/code/modules/clothing/outfits/ert.dm
@@ -163,6 +163,34 @@
/obj/item/gun/energy/pulse/pistol/loyalpin=1,\
/obj/item/construction/rcd/combat=1)
+/datum/outfit/ert/greybois
+ name = "Emergency Assistant"
+
+ uniform = /obj/item/clothing/under/color/grey/glorf
+ shoes = /obj/item/clothing/shoes/sneakers/black
+ gloves = /obj/item/clothing/gloves/color/fyellow
+ ears = /obj/item/radio/headset
+ head = /obj/item/clothing/head/soft/grey
+ belt = /obj/item/storage/belt/utility/full
+ back = /obj/item/storage/backpack
+ mask = /obj/item/clothing/mask/gas
+ l_pocket = /obj/item/tank/internals/emergency_oxygen
+ l_hand = /obj/item/storage/toolbox/emergency/old
+ id = /obj/item/card/id
+
+/datum/outfit/ert/greybois/greygod
+ suit = /obj/item/clothing/suit/hazardvest
+ l_hand = /obj/item/storage/toolbox/plastitanium
+ gloves = /obj/item/clothing/gloves/color/yellow
+
+/datum/outfit/ert/greybois/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ if(visualsOnly)
+ return
+ var/obj/item/card/id/W = H.wear_id
+ W.registered_name = H.real_name
+ W.assignment = "Assistant"
+ W.access = list(ACCESS_MAINT_TUNNELS,ACCESS_CENT_GENERAL)
+ W.update_label(W.registered_name, W.assignment)
/datum/outfit/centcom_official
name = "CentCom Official"
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 5eec159462..0840288eee 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -238,3 +238,14 @@
/obj/item/clothing/suit/armor/riot/knight/red
icon_state = "knight_red"
item_state = "knight_red"
+
+/obj/item/clothing/suit/armor/vest/durathread
+ name = "makeshift vest"
+ desc = "A vest made of durathread with strips of leather acting as trauma plates."
+ icon_state = "durathread"
+ item_state = "durathread"
+ strip_delay = 60
+ equip_delay_other = 40
+ max_integrity = 200
+ resistance_flags = FLAMMABLE
+ armor = list("melee" = 20, "bullet" = 10, "laser" = 30, "energy" = 5, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50)
diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm
index 396bcb4766..6535e40d0d 100644
--- a/code/modules/clothing/under/accessories.dm
+++ b/code/modules/clothing/under/accessories.dm
@@ -354,3 +354,28 @@
item_color = "skull"
above_suit = TRUE
armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25)
+
+/////////////////////
+//Synda Accessories//
+/////////////////////
+
+/obj/item/clothing/accessory/padding
+ name = "soft padding"
+ desc = "Some long sheets of padding to help soften the blows of a physical attacks."
+ icon_state = "padding"
+ item_color = "nothing"
+ armor = list("melee" = 15, "bullet" = 10, "laser" = 0, "energy" = 0, "bomb" = 5, "bio" = 0, "rad" = 0, "fire" = -20, "acid" = 45)
+
+/obj/item/clothing/accessory/kevlar
+ name = "kevlar sheets"
+ desc = "Long thin sheets of kevlar to help resist bullets and some physical attacks.."
+ icon_state = "padding"
+ item_color = "nothing"
+ armor = list("melee" = 10, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 25)
+
+/obj/item/clothing/accessory/plastics
+ name = "underling plastic sheet"
+ desc = "A full body sheet of white plastic to help defuse lasers and energy based weapons."
+ icon_state = "plastics"
+ item_color = "nothing"
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 20, "energy" = 10, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = -40)
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index abc157fa71..17ddacb32f 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -718,3 +718,12 @@
icon_state = "gear_harness"
item_state = "gear_harness" //We dont use golem do to being a item, item without faces making it default to error suit sprites.
body_parts_covered = CHEST|GROIN
+
+/obj/item/clothing/under/durathread
+ name = "durathread jumpsuit"
+ desc = "A jumpsuit made from durathread, its resilient fibres provide some protection to the wearer."
+ icon_state = "durathread"
+ item_state = "durathread"
+ item_color = "durathread"
+ can_adjust = FALSE
+ armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5)
\ No newline at end of file
diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm
index 48ade24bbe..2790a8cec7 100644
--- a/code/modules/crafting/recipes.dm
+++ b/code/modules/crafting/recipes.dm
@@ -675,12 +675,12 @@
/datum/crafting_recipe/femur_breaker
name = "Femur Breaker"
result = /obj/structure/femur_breaker
- time = 150
+ time = 150
reqs = list(/obj/item/stack/sheet/metal = 20,
/obj/item/stack/cable_coil = 30)
tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER)
category = CAT_MISC
-
+
/datum/crafting_recipe/lizardhat
name = "Lizard Cloche Hat"
result = /obj/item/clothing/head/lizard
@@ -895,3 +895,44 @@
time = 150 //It's a gun
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
+
+/datum/crafting_recipe/durathread_duffelbag
+ name = "Durathread Dufflebag"
+ result = /obj/item/storage/backpack/duffelbag/durathread
+ reqs = list(/obj/item/stack/sheet/durathread = 7,
+ /obj/item/stack/sheet/leather = 3)
+ time = 70
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/durathread_toolbelt
+ name = "Durathread Toolbelt"
+ result = /obj/item/storage/belt/durathread
+ reqs = list(/obj/item/stack/sheet/durathread = 5,
+ /obj/item/stack/sheet/leather = 1)
+ time = 30
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/durathread_bandolier
+ name = "Durathread Bandolier"
+ result = /obj/item/storage/belt/bandolier/durathread
+ reqs = list(/obj/item/stack/sheet/durathread = 6,
+ /obj/item/stack/sheet/leather = 2)
+ time = 50
+ category = CAT_CLOTHING
+
+ /datum/crafting_recipe/durathread_helmet
+ name = "Makeshift Durathread Helmet"
+ result = /obj/item/clothing/head/helmet/durathread
+ reqs = list(/obj/item/stack/sheet/durathread = 4,
+ /obj/item/stack/sheet/leather = 2)
+ time = 30
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/durathread_vest
+ name = "Makeshift Durathread Armour"
+ result = /obj/item/clothing/suit/armor/vest/durathread
+ reqs = list(/obj/item/stack/sheet/durathread = 6,
+ /obj/item/stack/sheet/leather = 3)
+ time = 50
+ category = CAT_CLOTHING
+
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
index 71ba5dfe41..9cf5ea31a0 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
@@ -337,7 +337,7 @@
name = "Chocolate Strawberry"
reqs = list(
/obj/item/reagent_containers/food/snacks/chocolatebar = 1,
- /obj/item/reagent_containers/food/snacks/grown/strawberries = 1
+ /obj/item/reagent_containers/food/snacks/grown/strawberry = 1
)
result = /obj/item/reagent_containers/food/snacks/chocolatestrawberry
subcategory = CAT_MISCFOOD
\ No newline at end of file
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
index f3675ccb0d..931a78212f 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
@@ -329,7 +329,7 @@ datum/crafting_recipe/food/donut/meat
name = "Strawberry cherry cupcake"
reqs = list(
/obj/item/reagent_containers/food/snacks/pastrybase = 1,
- /obj/item/reagent_containers/food/snacks/grown/strawberries = 1
+ /obj/item/reagent_containers/food/snacks/grown/strawberry = 1
)
result = /obj/item/reagent_containers/food/snacks/strawberrycupcake
subcategory = CAT_PASTRY
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
index a0a225c44f..81824dc4b8 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm
@@ -164,7 +164,7 @@
name = "Strawberry pie"
reqs = list(
/obj/item/reagent_containers/food/snacks/pie/plain = 1,
- /obj/item/reagent_containers/food/snacks/grown/strawberries = 1
+ /obj/item/reagent_containers/food/snacks/grown/strawberry = 1
)
result = /obj/item/reagent_containers/food/snacks/pie/strawberrypie
subcategory = CAT_PIE
diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm
index d24160ad6f..e9ad49eedd 100644
--- a/code/modules/hydroponics/grown/berries.dm
+++ b/code/modules/hydroponics/grown/berries.dm
@@ -217,20 +217,20 @@
distill_reagent = "cognac"
// Strawberry
-/obj/item/seeds/strawberries
- name = "pack of strawberrie seeds"
- desc = "These seeds grow into strawberries vines."
+/obj/item/seeds/strawberry
+ name = "pack of strawberry seeds"
+ desc = "These seeds grow into strawberry vines."
icon_state = "seed-strawberry"
species = "strawberry"
plantname = "Strawberry Vine"
- product = /obj/item/reagent_containers/food/snacks/grown/strawberries
+ product = /obj/item/reagent_containers/food/snacks/grown/strawberry
reagents_add = list("vitamin" = 0.07, "nutriment" = 0.1, "sugar" = 0.2)
mutatelist = list()
-/obj/item/reagent_containers/food/snacks/grown/strawberries
- seed = /obj/item/seeds/strawberries
+/obj/item/reagent_containers/food/snacks/grown/strawberry
+ seed = /obj/item/seeds/strawberry
name = "strawberry"
- icon_state = "strawberries"
+ icon_state = "strawberry"
filling_color = "#7FFF00"
tastes = list("strawberries" = 1)
wine_power = 20
diff --git a/code/modules/hydroponics/grown/cotton.dm b/code/modules/hydroponics/grown/cotton.dm
new file mode 100644
index 0000000000..045839d0de
--- /dev/null
+++ b/code/modules/hydroponics/grown/cotton.dm
@@ -0,0 +1,79 @@
+/obj/item/seeds/cotton
+ name = "pack of cotton seeds"
+ desc = "A pack of seeds that'll grow into a cotton plant. Assistants make good free labor if neccesary."
+ icon_state = "seed-cotton"
+ species = "cotton"
+ plantname = "Cotton"
+ icon_harvest = "cotton-harvest"
+ product = /obj/item/grown/cotton
+ lifespan = 35
+ endurance = 25
+ maturation = 15
+ production = 1
+ yield = 2
+ potency = 50
+ growthstages = 3
+ growing_icon = 'icons/obj/hydroponics/growing.dmi'
+ icon_dead = "cotton-dead"
+ mutatelist = list(/obj/item/seeds/cotton/durathread)
+
+/obj/item/grown/cotton
+ seed = /obj/item/seeds/cotton
+ name = "cotton bundle"
+ desc = "A fluffy bundle of cotton."
+ icon_state = "cotton"
+ force = 0
+ throwforce = 0
+ w_class = WEIGHT_CLASS_TINY
+ throw_speed = 2
+ throw_range = 3
+ attack_verb = list("pomfed")
+ var/cotton_type = /obj/item/stack/sheet/cotton
+ var/cotton_name = "raw cotton"
+
+/obj/item/grown/cotton/attack_self(mob/user)
+ user.show_message("You pull some [cotton_name] out of the [name]!", 1)
+ var/seed_modifier = 0
+ if(seed)
+ seed_modifier = round(seed.potency / 25)
+ var/obj/item/stack/cotton = new cotton_type(user.loc, 1 + seed_modifier)
+ var/old_cotton_amount = cotton.amount
+ for(var/obj/item/stack/ST in user.loc)
+ if(ST != cotton && istype(ST, cotton_type) && ST.amount < ST.max_amount)
+ ST.attackby(cotton, user)
+ if(cotton.amount > old_cotton_amount)
+ to_chat(user, "You add the newly-formed [cotton_name] to the stack. It now contains [cotton.amount] [cotton_name].")
+ qdel(src)
+
+//reinforced mutated variant
+/obj/item/seeds/cotton/durathread
+ name = "pack of durathread seeds"
+ desc = "A pack of seeds that'll grow into an extremely durable thread that could easily rival plasteel if woven properly."
+ icon_state = "seed-durathread"
+ species = "durathread"
+ plantname = "Durathread"
+ icon_harvest = "durathread-harvest"
+ product = /obj/item/grown/cotton/durathread
+ lifespan = 80
+ endurance = 50
+ maturation = 15
+ production = 1
+ yield = 2
+ potency = 50
+ growthstages = 3
+ growing_icon = 'icons/obj/hydroponics/growing.dmi'
+ icon_dead = "cotton-dead"
+
+/obj/item/grown/cotton/durathread
+ seed = /obj/item/seeds/cotton/durathread
+ name = "durathread bundle"
+ desc = "A tough bundle of durathread, good luck unraveling this."
+ icon_state = "durathread"
+ force = 5
+ throwforce = 5
+ w_class = WEIGHT_CLASS_NORMAL
+ throw_speed = 2
+ throw_range = 3
+ attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
+ cotton_type = /obj/item/stack/sheet/cotton/durathread
+ cotton_name = "raw durathread"
\ No newline at end of file
diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm
index 4e1718f853..f1aea5706a 100644
--- a/code/modules/hydroponics/grown/flowers.dm
+++ b/code/modules/hydroponics/grown/flowers.dm
@@ -25,6 +25,7 @@
slot_flags = ITEM_SLOT_HEAD
filling_color = "#FF6347"
bitesize_mod = 3
+ tastes = list("sesame seeds" = 1)
foodtype = VEGETABLES | GROSS
distill_reagent = "vermouth"
@@ -43,6 +44,7 @@
name = "lily"
desc = "A beautiful orange flower."
icon_state = "lily"
+ tastes = list("pelts " = 1)
filling_color = "#FFA500"
// Geranium
@@ -61,6 +63,7 @@
desc = "A beautiful blue flower."
icon_state = "geranium"
filling_color = "#008B8B"
+ tastes = list("pelts " = 1)
// Harebell
/obj/item/seeds/harebell
@@ -86,6 +89,7 @@
name = "harebell"
desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweeten'd not thy breath.\""
icon_state = "harebell"
+ tastes = list("salt" = 1)
slot_flags = ITEM_SLOT_HEAD
filling_color = "#E6E6FA"
bitesize_mod = 3
@@ -123,6 +127,7 @@
w_class = WEIGHT_CLASS_TINY
throw_speed = 1
throw_range = 3
+ tastes = list("seeds" = 1)
/obj/item/grown/sunflower/attack(mob/M, mob/user)
to_chat(M, " [user] smacks you with a sunflower!FLOWER POWER")
@@ -153,6 +158,7 @@
filling_color = "#E6E6FA"
bitesize_mod = 2
distill_reagent = "absinthe" //It's made from flowers.
+ tastes = list("glowbugs" = 1)
// Novaflower
/obj/item/seeds/sunflower/novaflower
@@ -184,6 +190,7 @@
throw_range = 3
attack_verb = list("roasted", "scorched", "burned")
grind_results = list("capsaicin" = 0, "condensedcapsaicin" = 0)
+ tastes = list("cooked sunflower" = 1)
/obj/item/grown/novaflower/add_juice()
..()
diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm
index 5aeef19b1a..c0e3beaf79 100644
--- a/code/modules/hydroponics/growninedible.dm
+++ b/code/modules/hydroponics/growninedible.dm
@@ -7,6 +7,7 @@
icon = 'icons/obj/hydroponics/harvest.dmi'
resistance_flags = FLAMMABLE
var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item.
+ var/tastes = list("indescribable" = 1) //Stops runtimes. Grown are un-eatable anyways so if you do then its a bug
/obj/item/grown/Initialize(newloc, obj/item/seeds/new_seed)
. = ..()
diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm
index 80c78220e6..b3c952f536 100755
--- a/code/modules/jobs/job_types/captain.dm
+++ b/code/modules/jobs/job_types/captain.dm
@@ -21,6 +21,8 @@ Captain
access = list() //See get_access()
minimal_access = list() //See get_access()
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
+
/datum/job/captain/get_access()
return get_all_accesses()
@@ -94,6 +96,7 @@ Head of Personnel
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM)
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/prosopagnosia, /datum/quirk/insanity)
/datum/outfit/job/hop
name = "Head of Personnel"
diff --git a/code/modules/jobs/job_types/cargo_service.dm b/code/modules/jobs/job_types/cargo_service.dm
index 175b7e8263..8e24ece655 100644
--- a/code/modules/jobs/job_types/cargo_service.dm
+++ b/code/modules/jobs/job_types/cargo_service.dm
@@ -18,6 +18,8 @@ Quartermaster
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT)
minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_VAULT)
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
+
/datum/outfit/job/quartermaster
name = "Quartermaster"
jobtype = /datum/job/qm
diff --git a/code/modules/jobs/job_types/engineering.dm b/code/modules/jobs/job_types/engineering.dm
index b2bc8bf241..e65cbab1bd 100644
--- a/code/modules/jobs/job_types/engineering.dm
+++ b/code/modules/jobs/job_types/engineering.dm
@@ -29,6 +29,8 @@ Chief Engineer
ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, ACCESS_MINISAT,
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINERAL_STOREROOM)
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/paraplegic, /datum/quirk/insanity)
+
/datum/outfit/job/ce
name = "Chief Engineer"
jobtype = /datum/job/chief_engineer
diff --git a/code/modules/jobs/job_types/job.dm b/code/modules/jobs/job_types/job.dm
index f03696e5da..9549b6100c 100644
--- a/code/modules/jobs/job_types/job.dm
+++ b/code/modules/jobs/job_types/job.dm
@@ -56,6 +56,8 @@
var/list/mind_traits // Traits added to the mind of the mob assigned this job
+ var/list/blacklisted_quirks //list of quirk typepaths blacklisted.
+
//Only override this proc
//H is usually a human unless an /equip override transformed it
/datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE)
diff --git a/code/modules/jobs/job_types/medical.dm b/code/modules/jobs/job_types/medical.dm
index 48cc854c5a..9eeb4ab06e 100644
--- a/code/modules/jobs/job_types/medical.dm
+++ b/code/modules/jobs/job_types/medical.dm
@@ -27,6 +27,8 @@ Chief Medical Officer
ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE,
ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS)
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
+
/datum/outfit/job/cmo
name = "Chief Medical Officer"
jobtype = /datum/job/cmo
diff --git a/code/modules/jobs/job_types/science.dm b/code/modules/jobs/job_types/science.dm
index 21b1a9747a..b58f3faa27 100644
--- a/code/modules/jobs/job_types/science.dm
+++ b/code/modules/jobs/job_types/science.dm
@@ -31,6 +31,8 @@ Research Director
ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM,
ACCESS_TECH_STORAGE, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_NETWORK)
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity)
+
/datum/outfit/job/rd
name = "Research Director"
jobtype = /datum/job/rd
diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm
index 2a6cc199ee..96cedd89ef 100644
--- a/code/modules/jobs/job_types/security.dm
+++ b/code/modules/jobs/job_types/security.dm
@@ -37,6 +37,8 @@ Head of Security
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/insanity)
+
/datum/outfit/job/hos
name = "Head of Security"
jobtype = /datum/job/hos
@@ -95,6 +97,7 @@ Warden
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) //SEE /DATUM/JOB/WARDEN/GET_ACCESS()
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic)
/datum/job/warden/get_access()
var/list/L = list()
@@ -150,6 +153,7 @@ Detective
minimal_access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic)
/datum/outfit/job/detective
name = "Detective"
@@ -205,6 +209,7 @@ Security Officer
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) //BUT SEE /DATUM/JOB/WARDEN/GET_ACCESS()
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
+ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/nonviolent, /datum/quirk/paraplegic)
/datum/job/officer/get_access()
var/list/L = list()
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index 47c6cf0170..750805ae93 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -416,7 +416,7 @@
SSticker.mode.make_antag_chance(humanc)
if(humanc && CONFIG_GET(flag/roundstart_traits))
- SSquirks.AssignQuirks(humanc, humanc.client, TRUE)
+ SSquirks.AssignQuirks(humanc, humanc.client, TRUE, FALSE, job, FALSE)
log_manifest(character.mind.key,character.mind,character,latejoin = TRUE)
diff --git a/code/modules/research/nanites/nanite_programs/healing.dm b/code/modules/research/nanites/nanite_programs/healing.dm
index 686e0fafea..8aab7f1e2b 100644
--- a/code/modules/research/nanites/nanite_programs/healing.dm
+++ b/code/modules/research/nanites/nanite_programs/healing.dm
@@ -48,7 +48,7 @@
/datum/nanite_program/purging
name = "Blood Purification"
- desc = "The nanites purge toxins and chemicals from the host's bloodstream."
+ desc = "The nanites purge toxins and chemicals from the host's bloodstream, however it is dangerous to slimepeople biology due to inaccuracy."
use_rate = 1
rogue_types = list(/datum/nanite_program/suffocating, /datum/nanite_program/necrotic)
@@ -143,7 +143,7 @@
/datum/nanite_program/purging_advanced
name = "Selective Blood Purification"
desc = "The nanites purge toxins and dangerous chemicals from the host's bloodstream, while ignoring beneficial chemicals. \
- The added processing power required to analyze the chemicals severely increases the nanite consumption rate."
+ The added processing power required to analyze the chemicals severely increases the nanite consumption rate. Due to added complexity, it is safe with slimepeople biology."
use_rate = 2
rogue_types = list(/datum/nanite_program/suffocating, /datum/nanite_program/necrotic)
@@ -157,7 +157,7 @@
return ..()
/datum/nanite_program/purging_advanced/active_effect()
- host_mob.adjustToxLoss(-1)
+ host_mob.adjustToxLoss(-1, forced = TRUE)
for(var/datum/reagent/toxin/R in host_mob.reagents.reagent_list)
host_mob.reagents.remove_reagent(R.id,1)
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index 8c02138900..b56d7ce84e 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -1269,9 +1269,44 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
//Space Suits and Hardsuits
/datum/uplink_item/suits
- category = "Space Suits and Hardsuits"
+ category = "Space Suits, Hardsuits and Clothing"
surplus = 40
+/datum/uplink_item/suits/turtlenck
+ name = "Tactical Turtleneck"
+ desc = "A slightly armored suit that has no sensor on them, if someone sees you in this hope they think its a fake."
+ item = /obj/item/clothing/under/syndicate
+ cost = 1
+ exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) //They already get these
+
+/datum/uplink_item/suits/turtlenck_skirt
+ name = "Tactical Skirtleneck"
+ desc = "A slightly armored suit that has no sensor on them, if someone sees you in this hope they think its a fake."
+ item = /obj/item/clothing/under/syndicate/skirt
+ cost = 1
+ exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) //They already get these
+
+/datum/uplink_item/suits/padding
+ name = "Soft Padding"
+ desc = "Padding to add to a jumpsuit to help against melee and bullets."
+ item = /obj/item/clothing/accessory/padding
+ cost = 2
+ exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
+
+/datum/uplink_item/suits/kevlar
+ name = "Kevlar sheets"
+ desc = "Kevlar sheets to add to jumpsuit to help against bullets and melee."
+ item = /obj/item/clothing/accessory/kevlar
+ cost = 2
+ exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
+
+/datum/uplink_item/suits/plastic
+ name = "Plastic sheet"
+ desc = "Plastic body sheet to add to a jumpsuit to help against laser and energy harm."
+ item = /obj/item/clothing/accessory/plastics
+ cost = 2
+ exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops)
+
/datum/uplink_item/suits/space_suit
name = "Syndicate Space Suit"
desc = "This red and black Syndicate space suit is less encumbering than Nanotrasen variants, \
diff --git a/code/modules/vending/megaseed.dm b/code/modules/vending/megaseed.dm
index bdf53d3953..b1b69a8cd2 100644
--- a/code/modules/vending/megaseed.dm
+++ b/code/modules/vending/megaseed.dm
@@ -15,6 +15,7 @@
/obj/item/seeds/chili = 3,
/obj/item/seeds/cocoapod = 3,
/obj/item/seeds/coffee = 3,
+ /obj/item/seeds/cotton = 3,
/obj/item/seeds/corn = 3,
/obj/item/seeds/eggplant = 3,
/obj/item/seeds/grape = 3,
@@ -33,7 +34,7 @@
/obj/item/seeds/soya = 3,
/obj/item/seeds/sugarcane = 3,
/obj/item/seeds/sunflower = 3,
- /obj/item/seeds/strawberries = 3,
+ /obj/item/seeds/strawberry = 3,
/obj/item/seeds/tea = 3,
/obj/item/seeds/tobacco = 3,
/obj/item/seeds/tomato = 3,
diff --git a/html/changelogs/AutoChangeLog-pr-8349.yml b/html/changelogs/AutoChangeLog-pr-8349.yml
new file mode 100644
index 0000000000..de4c08624a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8349.yml
@@ -0,0 +1,5 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "more bountys"
+ - rscdel: "Nitryl bounty"
diff --git a/html/changelogs/AutoChangeLog-pr-8636.yml b/html/changelogs/AutoChangeLog-pr-8636.yml
new file mode 100644
index 0000000000..3b291661b5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8636.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - bugfix: "fixed airless place"
diff --git a/html/changelogs/AutoChangeLog-pr-8763.yml b/html/changelogs/AutoChangeLog-pr-8763.yml
new file mode 100644
index 0000000000..d99b529656
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-8763.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - balance: "bone satchles"
diff --git a/html/changelogs/AutoChangeLog-pr-9097.yml b/html/changelogs/AutoChangeLog-pr-9097.yml
new file mode 100644
index 0000000000..941c0e7b98
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9097.yml
@@ -0,0 +1,4 @@
+author: "lolman360"
+delete-after: True
+changes:
+ - rscadd: "NT has authorized shipments or Cotton to Megaseed Servitors. It's time to start picking, liggers."
diff --git a/html/changelogs/AutoChangeLog-pr-9134.yml b/html/changelogs/AutoChangeLog-pr-9134.yml
new file mode 100644
index 0000000000..f0be3bdd0a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9134.yml
@@ -0,0 +1,4 @@
+author: "Arturlang"
+delete-after: True
+changes:
+ - tweak: "Advanced toxin filtration nanites now heal slimes"
diff --git a/html/changelogs/AutoChangeLog-pr-9136.yml b/html/changelogs/AutoChangeLog-pr-9136.yml
new file mode 100644
index 0000000000..7bb9e3ccf2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9136.yml
@@ -0,0 +1,4 @@
+author: "Sishen1542"
+delete-after: True
+changes:
+ - balance: "rebalances strained muscles"
diff --git a/html/changelogs/AutoChangeLog-pr-9137.yml b/html/changelogs/AutoChangeLog-pr-9137.yml
new file mode 100644
index 0000000000..a61a3dbe6f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9137.yml
@@ -0,0 +1,5 @@
+author: "Sishen1542"
+delete-after: True
+changes:
+ - rscadd: "added in the assistant response team"
+ - bugfix: "fixed up access on the centcom hangar button"
diff --git a/html/changelogs/AutoChangeLog-pr-9141.yml b/html/changelogs/AutoChangeLog-pr-9141.yml
new file mode 100644
index 0000000000..86230537de
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9141.yml
@@ -0,0 +1,4 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - bugfix: "Fixed another runtime in warp whistles."
diff --git a/html/changelogs/AutoChangeLog-pr-9149.yml b/html/changelogs/AutoChangeLog-pr-9149.yml
new file mode 100644
index 0000000000..8a10035d1f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9149.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "Armor and such"
diff --git a/html/changelogs/AutoChangeLog-pr-9150.yml b/html/changelogs/AutoChangeLog-pr-9150.yml
new file mode 100644
index 0000000000..585ea0a149
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9150.yml
@@ -0,0 +1,5 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "flavor"
+ - bugfix: "maybe a runtime"
diff --git a/html/changelogs/AutoChangeLog-pr-9151.yml b/html/changelogs/AutoChangeLog-pr-9151.yml
new file mode 100644
index 0000000000..ed01c0d137
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-9151.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - rscadd: "chameloen clothing"
diff --git a/icons/mob/accessories.dmi b/icons/mob/accessories.dmi
index 8e3e48230f..68f13c8875 100644
Binary files a/icons/mob/accessories.dmi and b/icons/mob/accessories.dmi differ
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index e3c80708c3..52822ed5be 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi
index f5ffd262f0..6843bac6bf 100644
Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ
diff --git a/icons/mob/inhands/equipment/backpack_lefthand.dmi b/icons/mob/inhands/equipment/backpack_lefthand.dmi
index 0e466486c5..3238b98757 100644
Binary files a/icons/mob/inhands/equipment/backpack_lefthand.dmi and b/icons/mob/inhands/equipment/backpack_lefthand.dmi differ
diff --git a/icons/mob/inhands/equipment/backpack_righthand.dmi b/icons/mob/inhands/equipment/backpack_righthand.dmi
index 1c265a4137..a103c1a13f 100644
Binary files a/icons/mob/inhands/equipment/backpack_righthand.dmi and b/icons/mob/inhands/equipment/backpack_righthand.dmi differ
diff --git a/icons/mob/inhands/equipment/belt_lefthand.dmi b/icons/mob/inhands/equipment/belt_lefthand.dmi
index 366493eebd..beac56725a 100644
Binary files a/icons/mob/inhands/equipment/belt_lefthand.dmi and b/icons/mob/inhands/equipment/belt_lefthand.dmi differ
diff --git a/icons/mob/inhands/equipment/belt_righthand.dmi b/icons/mob/inhands/equipment/belt_righthand.dmi
index 81b075f706..da31cc9710 100644
Binary files a/icons/mob/inhands/equipment/belt_righthand.dmi and b/icons/mob/inhands/equipment/belt_righthand.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 2a777b9af5..7ba0ec9604 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index fe0a8a5c62..43d35d5df5 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/clothing/accessories.dmi b/icons/obj/clothing/accessories.dmi
index c35956687d..c62a88c829 100644
Binary files a/icons/obj/clothing/accessories.dmi and b/icons/obj/clothing/accessories.dmi differ
diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi
index 5290c43073..e329720cf7 100644
Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ
diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi
index a0153b1596..4ec45666c4 100644
Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 315086b4d7..25c9b0eb06 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/hydroponics/equipment.dmi b/icons/obj/hydroponics/equipment.dmi
index 82dce552a7..dd4d1e1f93 100644
Binary files a/icons/obj/hydroponics/equipment.dmi and b/icons/obj/hydroponics/equipment.dmi differ
diff --git a/icons/obj/hydroponics/growing.dmi b/icons/obj/hydroponics/growing.dmi
index 162c6b047e..e7dee2290d 100644
Binary files a/icons/obj/hydroponics/growing.dmi and b/icons/obj/hydroponics/growing.dmi differ
diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi
index 61070621c2..5ced9cad20 100644
Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ
diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi
index 30be27486b..e6a2e70ba9 100644
Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index 066842f089..a977936155 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/modular_citadel/icons/mob/uniform_digi.dmi b/modular_citadel/icons/mob/uniform_digi.dmi
index 7e00c60caf..19964e59c5 100644
Binary files a/modular_citadel/icons/mob/uniform_digi.dmi and b/modular_citadel/icons/mob/uniform_digi.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index a7031883dc..8e31595934 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -990,6 +990,7 @@
#include "code\game\objects\structures\ladders.dm"
#include "code\game\objects\structures\lattice.dm"
#include "code\game\objects\structures\life_candle.dm"
+#include "code\game\objects\structures\loom.dm"
#include "code\game\objects\structures\manned_turret.dm"
#include "code\game\objects\structures\memorial.dm"
#include "code\game\objects\structures\mineral_doors.dm"
@@ -1280,6 +1281,7 @@
#include "code\modules\antagonists\disease\disease_mob.dm"
#include "code\modules\antagonists\ert\ert.dm"
#include "code\modules\antagonists\greentext\greentext.dm"
+#include "code\modules\antagonists\greybois\greybois.dm"
#include "code\modules\antagonists\highlander\highlander.dm"
#include "code\modules\antagonists\monkey\monkey.dm"
#include "code\modules\antagonists\morph\morph.dm"
@@ -1716,6 +1718,7 @@
#include "code\modules\hydroponics\grown\citrus.dm"
#include "code\modules\hydroponics\grown\cocoa_vanilla.dm"
#include "code\modules\hydroponics\grown\corn.dm"
+#include "code\modules\hydroponics\grown\cotton.dm"
#include "code\modules\hydroponics\grown\eggplant.dm"
#include "code\modules\hydroponics\grown\flowers.dm"
#include "code\modules\hydroponics\grown\grass_carpet.dm"