diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm
index 15c7af57..b3ff9cab 100644
--- a/code/__DEFINES/food.dm
+++ b/code/__DEFINES/food.dm
@@ -11,6 +11,7 @@
#define GROSS (1<<10)
#define TOXIC (1<<11)
#define PINEAPPLE (1<<12)
+#define CLOTH (1<<14)
#define DRINK_NICE 1
#define DRINK_GOOD 2
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 8ff40c3e..83d603df 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -57,8 +57,10 @@
#define isluminescent(A) (is_species(A, /datum/species/jelly/luminescent))
#define iszombie(A) (is_species(A, /datum/species/zombie))
#define ismoth(A) (is_species(A, /datum/species/moth))
+#define ismoth(A) (is_species(A, /datum/species/insect))
#define ishumanbasic(A) (is_species(A, /datum/species/human))
#define iscatperson(A) (ishumanbasic(A) && istype(A.dna.species, /datum/species/human/felinid) )
+#define isvampire(A) (is_species(A,/datum/species/vampire))
//more carbon mobs
#define ismonkey(A) (istype(A, /mob/living/carbon/monkey))
diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm
index 55d06d7b..86245940 100644
--- a/code/__DEFINES/machines.dm
+++ b/code/__DEFINES/machines.dm
@@ -99,3 +99,7 @@
#define NUKE_OFF_UNLOCKED 1
#define NUKE_ON_TIMING 2
#define NUKE_ON_EXPLODING 3
+
+//these flags are used to tell the DNA modifier if a plant gene cannot be extracted or modified.
+#define PLANT_GENE_REMOVABLE (1<<0)
+#define PLANT_GENE_EXTRACTABLE (1<<1)
diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm
index ee7be296..cf89b354 100644
--- a/code/game/mecha/mecha_construction_paths.dm
+++ b/code/game/mecha/mecha_construction_paths.dm
@@ -1784,35 +1784,40 @@
"back_key" = TOOL_SCREWDRIVER,
"desc" = "Capacitor is secured."
),
-
//14
+ list(
+ "key" = TOOL_SCREWDRIVER,
+ "back_key" = TOOL_CROWBAR,
+ "desc" = "The power cell is installed."
+ //15
+ ),
list(
"key" = /obj/item/stack/sheet/metal,
"amount" = 5,
"back_key" = TOOL_SCREWDRIVER,
"desc" = "The power cell is secured."
),
- //15
+ //16
list(
"key" = TOOL_SCREWDRIVER,
"back_key" = TOOL_CROWBAR,
"desc" = "The power cell is installed."
),
- //16
+ //17
list(
"key" = TOOL_WRENCH,
"back_key" = TOOL_CROWBAR,
"desc" = "Internal armor is installed."
),
- //17
+ //18
list(
"key" = TOOL_WELDER,
"back_key" = TOOL_WRENCH,
"desc" = "Internal armor is wrenched."
),
- //18
+ //19
list(
"key" = /obj/item/stack/sheet/plasteel,
"amount" = 5,
@@ -1820,14 +1825,14 @@
"desc" = "Internal armor is welded."
),
- //19
+ //20
list(
"key" = TOOL_WRENCH,
"back_key" = TOOL_CROWBAR,
"desc" = "External armor is installed."
),
- //20
+ //21
list(
"key" = TOOL_WELDER,
"back_key" = TOOL_WRENCH,
diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm
index 0e6dfaa1..fee5e70a 100644
--- a/code/game/objects/items/tanks/tank_types.dm
+++ b/code/game/objects/items/tanks/tank_types.dm
@@ -35,6 +35,10 @@
icon_state = "oxygen_fr"
dog_fashion = null
+/obj/item/tank/internals/oxygen/empty/New()
+ ..()
+ air_contents.gases[/datum/gas/oxygen] = (0*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+ return
/*
* Anesthetic
@@ -105,6 +109,10 @@
air_contents.gases[/datum/gas/plasma] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
+/obj/item/tank/internals/plasma/empty/New()
+ ..()
+ air_contents.gases[/datum/gas/plasma] = (0*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+ return
/*
* Plasmaman Plasma Tank
@@ -164,6 +172,11 @@
air_contents.gases[/datum/gas/oxygen] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
+/obj/item/tank/internals/emergency_oxygen/empty/New()
+ ..()
+ air_contents.gases[/datum/gas/oxygen] = (0*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+ return
+
/obj/item/tank/internals/emergency_oxygen/engi
name = "extended-capacity emergency oxygen tank"
icon_state = "emergency_engi"
@@ -173,3 +186,8 @@
name = "double emergency oxygen tank"
icon_state = "emergency_double"
volume = 10
+
+/obj/item/tank/internals/emergency_oxygen/double/empty/New()
+ ..()
+ air_contents.gases[/datum/gas/oxygen] = (0*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
+ return
diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm
index e10d83ff..d30c9950 100644
--- a/code/modules/antagonists/revolution/revolution.dm
+++ b/code/modules/antagonists/revolution/revolution.dm
@@ -202,10 +202,10 @@
/datum/antagonist/rev/farewell()
if(ishuman(owner.current))
owner.current.visible_message("[owner.current] looks like [owner.current.p_theyve()] just remembered [owner.current.p_their()] real allegiance!", null, null, null, owner.current)
- to_chat(owner, "You are no longer a brainwashed revolutionary! Your memory is hazy from the time you were a rebel... You don't seem to be able to recall the names of your comrades, not even your leaders...")
+ to_chat(owner, "You are no longer a brainwashed revolutionary! Your memory is hazy from the time you were a rebel... You don't seem to be able to recall the names of your comrades, not even your leaders...")
else if(issilicon(owner.current))
owner.current.visible_message("The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it.", null, null, null, owner.current)
- to_chat(owner, "The frame's firmware detects and deletes your neural reprogramming! You remember nothing of your time spent reprogrammed, you can't even remember the names or identities of anyone involved...")
+ to_chat(owner, "The frame's firmware detects and deletes your neural reprogramming! You remember nothing of your time spent reprogrammed, you can't even remember the names or identities of anyone involved...")
//blunt trauma deconversions call this through species.dm spec_attacked_by()
/datum/antagonist/rev/proc/remove_revolutionary(borged, deconverter)
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 796c93a3..18d48f93 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -75,6 +75,7 @@
desc = "If you're reading this it means I messed up. This is related to moths eating clothes and I didn't know a better way to do it than making a new food object."
list_reagents = list("nutriment" = 1)
tastes = list("dust" = 1, "lint" = 1)
+ foodtype = CLOTH
/obj/item/clothing/attack(mob/M, mob/user, def_zone)
if(user.a_intent != INTENT_HARM && ismoth(M))
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index 7b1d8be8..b8f937d8 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -227,6 +227,12 @@
item_state = "coffee"
spillable = TRUE
+/datum/chemical_reaction/catnip_tea
+ name = "Catnip Tea"
+ id = "catnip_tea"
+ results = list("catnip_tea" = 3)
+ required_reagents = list("tea" = 5, "catnip" = 2)
+
/obj/item/reagent_containers/food/drinks/mug/on_reagent_change(changetype)
if(reagents.total_volume)
icon_state = "tea"
diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm
index 0f11fc8e..448d9d18 100644
--- a/code/modules/food_and_drinks/food/snacks_bread.dm
+++ b/code/modules/food_and_drinks/food/snacks_bread.dm
@@ -178,6 +178,18 @@
tastes = list("bread" = 1)
foodtype = GRAIN
+/obj/item/reagent_containers/food/snacks/garlicbread
+ name = "garlic bread"
+ desc = "Alas, it is limited."
+ icon = 'icons/obj/food/burgerbread.dmi'
+ icon_state = "garlicbread"
+ item_state = "garlicbread"
+ bonus_reagents = list("nutriment" = 5, "vitamin" = 2)
+ list_reagents = list("nutriment" = 5, "vitamin" = 4, "garlic" = 2)
+ bitesize = 3
+ tastes = list("bread" = 1, "garlic" = 1, "butter" = 1)
+ foodtype = GRAIN
+
/obj/item/reagent_containers/food/snacks/deepfryholder
name = "Deep Fried Foods Holder Obj"
desc = "If you can see this description the code for the deep fryer fucked up."
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index ceb7a01e..5790f028 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -144,7 +144,7 @@
else
O.forceMove(src)
return TRUE
-
+
///Really simple proc, just moves the object "O" into the hands of mob "M" if able, done so I could modify the proc a little for the organ fridge
/obj/machinery/smartfridge/proc/dispense(obj/item/O, var/mob/M)
if(!M.put_in_hands(O))
@@ -441,7 +441,7 @@
return TRUE
if(!O.reagents || !O.reagents.reagent_list.len) // other empty containers not accepted
return FALSE
- if(istype(O, /obj/item/reagent_containers/syringe) || istype(O, /obj/item/reagent_containers/glass/bottle) || istype(O, /obj/item/reagent_containers/glass/beaker) || istype(O, /obj/item/reagent_containers/spray) || istype(O, /obj/item/reagent_containers/medspray))
+ if(istype(O, /obj/item/reagent_containers/syringe) || istype(O, /obj/item/reagent_containers/glass/bottle) || istype(O, /obj/item/reagent_containers/glass/beaker) || istype(O, /obj/item/reagent_containers/spray) || istype(O, /obj/item/reagent_containers/medspray|| istype(O, /obj/item/reagent_containers/chem_pack)))
return TRUE
return FALSE
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
index e572cc76..ecbdac57 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm
@@ -84,6 +84,16 @@
result = /obj/item/reagent_containers/food/snacks/butteredtoast
subcategory = CAT_BREAD
+/datum/crafting_recipe/food/garlicbread
+ name = "Garlic Bread"
+ time = 40
+ reqs = list(/obj/item/reagent_containers/food/snacks/grown/garlic = 1,
+ /obj/item/reagent_containers/food/snacks/breadslice/plain = 1,
+ /obj/item/reagent_containers/food/snacks/butter = 1
+ )
+ result = /obj/item/reagent_containers/food/snacks/garlicbread
+ subcategory = CAT_BREAD
+
/datum/crafting_recipe/food/butterbiscuit
name = "Butter Biscuit"
reqs = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
index 7eff2820..d352ffe1 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
@@ -113,6 +113,7 @@
name = "Raw Khinkali"
reqs = list(
/obj/item/reagent_containers/food/snacks/doughslice = 1,
+ /obj/item/reagent_containers/food/snacks/grown/garlic = 1,
/obj/item/reagent_containers/food/snacks/faggot = 1
)
result = /obj/item/reagent_containers/food/snacks/rawkhinkali
diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm
index 79a23014..39b1908c 100644
--- a/code/modules/hydroponics/gene_modder.dm
+++ b/code/modules/hydroponics/gene_modder.dm
@@ -201,9 +201,9 @@
if(!G)
continue
dat += "
| [G.get_name()] | "
- if(can_extract)
+ if(can_extract && G.mutability_flags & PLANT_GENE_EXTRACTABLE)
dat += "Extract"
- if(can_insert && istype(disk.gene, G.type))
+ if(can_insert && istype(disk.gene, G.type) && G.mutability_flags & PLANT_GENE_REMOVABLE)
dat += "Replace"
dat += " |
"
dat += ""
@@ -215,9 +215,10 @@
for(var/a in reagent_genes)
var/datum/plant_gene/G = a
dat += "| [G.get_name()] | "
- if(can_extract)
+ if(can_extract && G.mutability_flags & PLANT_GENE_EXTRACTABLE)
dat += "Extract"
- dat += "Remove"
+ if(G.mutability_flags & PLANT_GENE_REMOVABLE)
+ dat += "Remove"
dat += " |
"
dat += ""
else
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 6df26387..e4923486 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -131,7 +131,7 @@
..()
/obj/item/reagent_containers/food/snacks/grown/generate_trash(atom/location)
- if(trash && ispath(trash, /obj/item/grown))
+ if(trash && (ispath(trash, /obj/item/grown) || ispath(trash, /obj/item/reagent_containers/food/snacks/grown)))
. = new trash(location, seed)
trash = null
return
diff --git a/code/modules/hydroponics/grown/cocoa_vanilla.dm b/code/modules/hydroponics/grown/cocoa_vanilla.dm
index ea1b9716..ae4f8a09 100644
--- a/code/modules/hydroponics/grown/cocoa_vanilla.dm
+++ b/code/modules/hydroponics/grown/cocoa_vanilla.dm
@@ -15,7 +15,7 @@
icon_grow = "cocoapod-grow"
icon_dead = "cocoapod-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
- mutatelist = list(/obj/item/seeds/cocoapod/vanillapod)
+ mutatelist = list(/obj/item/seeds/cocoapod/vanillapod,/obj/item/seeds/cocoapod/bungotree)
reagents_add = list("cocoa" = 0.25, "nutriment" = 0.1)
/obj/item/reagent_containers/food/snacks/grown/cocoapod
@@ -50,3 +50,52 @@
foodtype = FRUIT
tastes = list("vanilla" = 1)
distill_reagent = "vanilla" //Takes longer, but you can get even more vanilla from it.
+
+/obj/item/seeds/cocoapod/bungotree
+ name = "pack of bungo tree seeds"
+ desc = "These seeds grow into bungo trees. They appear to be heavy and almost perfectly spherical."
+ icon_state = "seed-bungotree"
+ species = "bungotree"
+ plantname = "Bungo Tree"
+ product = /obj/item/reagent_containers/food/snacks/grown/bungofruit
+ lifespan = 30
+ maturation = 4
+ yield = 3
+ production = 7
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ mutatelist = list()
+ reagents_add = list(/datum/reagent/consumable/enzyme = 0.1, /datum/reagent/consumable/nutriment = 0.1)
+ growthstages = 4
+ growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
+ icon_grow = "bungotree-grow"
+ icon_dead = "bungotree-dead"
+ rarity = 15
+
+/obj/item/reagent_containers/food/snacks/grown/bungofruit
+ seed = /obj/item/seeds/cocoapod/bungotree
+ name = "bungo fruit"
+ desc = "A strange fruit, tough leathery skin protects its juicy flesh and large poisonous seed."
+ icon_state = "bungo"
+ trash = /obj/item/reagent_containers/food/snacks/grown/bungopit
+ filling_color = "#E8C22F"
+ foodtype = FRUIT
+ tastes = list("bungo" = 2, "tropical fruitiness" = 1)
+ distill_reagent = null
+
+/obj/item/reagent_containers/food/snacks/grown/bungopit
+ seed = /obj/item/seeds/cocoapod/bungotree
+ name = "bungo pit"
+ icon_state = "bungopit"
+ desc = "A large seed, it is said to be potent enough to be able to stop a mans heart."
+ w_class = WEIGHT_CLASS_TINY
+ throwforce = 5
+ throw_speed = 3
+ throw_range = 7
+ foodtype = TOXIC
+ tastes = list("acrid bitterness" = 1)
+
+/obj/item/reagent_containers/food/snacks/grown/bungopit/Initialize()
+ . =..()
+ reagents.clear_reagents()
+ reagents.add_reagent(/datum/reagent/toxin/bungotoxin, seed.potency * 0.10) //More than this will kill at too low potency
+ reagents.add_reagent(/datum/reagent/consumable/nutriment, seed.potency * 0.04)
\ No newline at end of file
diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm
index f1aea570..c9207d54 100644
--- a/code/modules/hydroponics/grown/flowers.dm
+++ b/code/modules/hydroponics/grown/flowers.dm
@@ -37,7 +37,7 @@
species = "lily"
plantname = "Lily Plants"
product = /obj/item/reagent_containers/food/snacks/grown/poppy/lily
- mutatelist = list()
+ mutatelist = list(/obj/item/seeds/bee_balm,/obj/item/seeds/poppy/lily/trumpet)
/obj/item/reagent_containers/food/snacks/grown/poppy/lily
seed = /obj/item/seeds/poppy/lily
@@ -47,6 +47,44 @@
tastes = list("pelts " = 1)
filling_color = "#FFA500"
+//Spacemans's Trumpet
+/obj/item/seeds/poppy/lily/trumpet
+ name = "pack of spaceman's trumpet seeds"
+ desc = "A plant sculped by extensive genetic engineering. The spaceman's trumpet is said to bear no resemblance to its wild ancestors. Inside NT AgriSci circles it is better known as NTPW-0372."
+ icon_state = "seed-trumpet"
+ species = "spacemanstrumpet"
+ plantname = "Spaceman's Trumpet Plant"
+ product = /obj/item/reagent_containers/food/snacks/grown/trumpet
+ lifespan = 80
+ production = 5
+ endurance = 10
+ maturation = 12
+ yield = 4
+ potency = 20
+ growthstages = 4
+ weed_rate = 2
+ weed_chance = 10
+ growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
+ icon_grow = "spacemanstrumpet-grow"
+ icon_dead = "spacemanstrumpet-dead"
+ mutatelist = list()
+ genes = list(/datum/plant_gene/reagent/polypyr)
+ reagents_add = list(/datum/reagent/consumable/nutriment = 0.05)
+ rarity = 30
+
+/obj/item/seeds/poppy/lily/trumpet/Initialize()
+ ..()
+ unset_mutability(/datum/plant_gene/reagent/polypyr, PLANT_GENE_EXTRACTABLE)
+
+/obj/item/reagent_containers/food/snacks/grown/trumpet
+ seed = /obj/item/seeds/poppy/lily/trumpet
+ name = "spaceman's trumpet"
+ desc = "A vivid flower that smells faintly of freshly cut grass. Touching the flower seems to stain the skin some time after contact, yet most other surfaces seem to be unaffected by this phenomenon."
+ icon_state = "spacemanstrumpet"
+ filling_color = "#FF6347"
+ bitesize_mod = 3
+ foodtype = VEGETABLES
+
// Geranium
/obj/item/seeds/poppy/geranium
name = "pack of geranium seeds"
@@ -221,3 +259,61 @@
if(!user.gloves)
to_chat(user, "The [name] burns your bare hand!")
user.adjustFireLoss(rand(1, 5))
+
+// Beebalm
+/obj/item/seeds/bee_balm
+ name = "pack of Bee Balm seeds"
+ desc = "These seeds grow into Bee Balms."
+ icon_state = "seed-bee_balm"
+ species = "bee_balm"
+ plantname = "Bee Balm Buds"
+ product = /obj/item/reagent_containers/food/snacks/grown/bee_balm
+ endurance = 10
+ maturation = 8
+ yield = 3
+ potency = 30
+ growthstages = 3
+ growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
+ icon_grow = "bee_balm-grow"
+ icon_dead = "bee_balm-dead"
+ mutatelist = list(/obj/item/seeds/poppy/geranium, /obj/item/seeds/bee_balm/honey) //Lower odds of becoming honey
+ reagents_add = list("spaceacillin" = 0.1, "sterilizine" = 0.05)
+
+/obj/item/reagent_containers/food/snacks/grown/bee_balm
+ seed = /obj/item/seeds/bee_balm
+ name = "bee balm"
+ desc = "A flower used for medical antiseptic in history."
+ icon_state = "bee_balm"
+ filling_color = "#FF6347"
+ bitesize_mod = 8
+ tastes = list("strong antiseptic " = 1)
+ foodtype = GROSS
+
+// Beebalm
+/obj/item/seeds/bee_balm/honey
+ name = "pack of Honey Balm seeds"
+ desc = "These seeds grow into Honey Balms."
+ icon_state = "seed-bee_balmalt"
+ species = "seed-bee_balm_alt"
+ plantname = "Honey Balm Pods"
+ product = /obj/item/reagent_containers/food/snacks/grown/bee_balm/honey
+ endurance = 1
+ maturation = 10
+ yield = 1
+ potency = 1
+ growthstages = 3
+ growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
+ icon_grow = "bee_balmalt-grow"
+ icon_dead = "bee_balmalt-dead"
+ reagents_add = list("honey" = 0.1, "lye" = 0.3) //To make wax
+ rarity = 30
+
+/obj/item/reagent_containers/food/snacks/grown/bee_balm/honey
+ seed = /obj/item/seeds/bee_balm/honey
+ name = "honey balm"
+ desc = "A large honey filled pod of a flower."
+ icon_state = "bee_balmalt"
+ filling_color = "#FF6347"
+ bitesize_mod = 8
+ tastes = list("wax" = 1)
+ foodtype = SUGAR
\ No newline at end of file
diff --git a/code/modules/hydroponics/grown/garlic.dm b/code/modules/hydroponics/grown/garlic.dm
new file mode 100644
index 00000000..35272844
--- /dev/null
+++ b/code/modules/hydroponics/grown/garlic.dm
@@ -0,0 +1,22 @@
+/obj/item/seeds/garlic
+ name = "pack of garlic seeds"
+ desc = "A packet of extremely pungent seeds."
+ icon_state = "seed-garlic"
+ species = "garlic"
+ plantname = "Garlic Sprouts"
+ product = /obj/item/reagent_containers/food/snacks/grown/garlic
+ yield = 6
+ potency = 25
+ growthstages = 3
+ growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
+ reagents_add = list("garlic" = 0.15, "nutriment" = 0.1)
+
+/obj/item/reagent_containers/food/snacks/grown/garlic
+ seed = /obj/item/seeds/garlic
+ name = "garlic"
+ desc = "Delicious, but with a potentially overwhelming odor."
+ icon_state = "garlic"
+ filling_color = "#C0C9A0"
+ bitesize_mod = 2
+ tastes = list("garlic" = 1)
+ wine_power = 10
\ No newline at end of file
diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm
index 107a6a94..4f5fe812 100644
--- a/code/modules/hydroponics/grown/misc.dm
+++ b/code/modules/hydroponics/grown/misc.dm
@@ -14,7 +14,9 @@
growthstages = 3
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
genes = list(/datum/plant_gene/trait/plant_type/weed_hardy)
- mutatelist = list(/obj/item/seeds/harebell)
+ mutatelist = list()//add /obj/item/seeds/starthistle/corpse_flower when corpse flowers work.
+ T.assume_air(stank)
+ T.air_update_turf()
/obj/item/seeds/starthistle/harvest(mob/user)
var/obj/machinery/hydroponics/parent = loc
@@ -27,6 +29,74 @@
harvestseeds.forceMove(output_loc)
parent.update_tray()
+/*
+// Corpse flower
+/obj/item/seeds/starthistle/corpse_flower
+ name = "pack of corpse flower seeds"
+ desc = "A species of plant that emits a horrible odor. The odor stops being produced in difficult atmospheric conditions."
+ icon_state = "seed-corpse-flower"
+ species = "corpse-flower"
+ plantname = "Corpse flower"
+ production = 2
+ growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
+ genes = list()
+ mutatelist = list()
+
+/obj/item/seeds/starthistle/corpse_flower/pre_attack(obj/machinery/hydroponics/I)
+ if(istype(I, /obj/machinery/hydroponics))
+ if(!I.myseed)
+ START_PROCESSING(SSobj, src)
+ return ..()
+
+/obj/item/seeds/starthistle/corpse_flower/process()
+ var/obj/machinery/hydroponics/parent = loc
+ if(parent.age < maturation) // Start a little before it blooms
+ return
+
+ var/turf/open/T = get_turf(parent)
+ if(abs(ONE_ATMOSPHERE - T.return_air().return_pressure()) > (potency/10 + 10)) // clouds can begin showing at around 50-60 potency in standard atmos
+ return
+
+ var/datum/gas_mixture/stank = new
+ ADD_GAS(/datum/gas/miasma, stank.gases)
+ stank.gases[/datum/gas/miasma][MOLES] = (yield + 6)*7*MIASMA_CORPSE_MOLES // this process is only being called about 2/7 as much as corpses so this is 12-32 times a corpses
+ stank.temperature = T20C // without this the room would eventually freeze and miasma mining would be easier
+*/
+//commented out until it can be fixed.
+//Galaxy Thistle
+/obj/item/seeds/galaxythistle
+ name = "pack of galaxythistle seeds"
+ desc = "An impressive species of weed that is thought to have evolved from the simple milk thistle. Contains flavolignans that can help repair a damaged liver."
+ icon_state = "seed-galaxythistle"
+ species = "galaxythistle"
+ plantname = "Galaxythistle"
+ product = /obj/item/reagent_containers/food/snacks/grown/galaxythistle
+ lifespan = 70
+ endurance = 40
+ maturation = 3
+ production = 2
+ yield = 2
+ potency = 25
+ growthstages = 3
+ growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
+ genes = list(/datum/plant_gene/trait/plant_type/weed_hardy, /datum/plant_gene/trait/invasive)
+ mutatelist = list()
+ reagents_add = list(/datum/reagent/consumable/nutriment = 0.05, /datum/reagent/medicine/silibinin = 0.1)
+
+/obj/item/seeds/galaxythistle/Initialize()
+ ..()
+ unset_mutability(/datum/plant_gene/trait/invasive, PLANT_GENE_REMOVABLE)
+
+/obj/item/reagent_containers/food/snacks/grown/galaxythistle
+ seed = /obj/item/seeds/galaxythistle
+ name = "galaxythistle flower head"
+ desc = "This spiny cluster of florets reminds you of the highlands."
+ icon_state = "galaxythistle"
+ filling_color = "#1E7549"
+ bitesize_mod = 3
+ foodtype = VEGETABLES
+ wine_power = 35
+ tastes = list("thistle" = 2, "artichoke" = 1)
// Cabbage
/obj/item/seeds/cabbage
diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm
index fe2beb89..c4adce2a 100644
--- a/code/modules/hydroponics/grown/mushrooms.dm
+++ b/code/modules/hydroponics/grown/mushrooms.dm
@@ -172,7 +172,6 @@
qdel(src)
to_chat(user, "You plant the walking mushroom.")
-
// Chanterelle
/obj/item/seeds/chanter
name = "pack of chanterelle mycelium"
@@ -191,6 +190,7 @@
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list("nutriment" = 0.1)
+ mutatelist = list(/obj/item/seeds/chanterelle/jupitercup)
/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle
seed = /obj/item/seeds/chanter
@@ -199,6 +199,34 @@
icon_state = "chanterelle"
filling_color = "#FFA500"
+//Jupiter Cup
+/obj/item/seeds/chanterelle/jupitercup
+ name = "pack of jupiter cup mycelium"
+ desc = "This mycelium grows into jupiter cups. Zeus would be envious at the power at your fingertips."
+ icon_state = "mycelium-jupitercup"
+ species = "jupitercup"
+ plantname = "Jupiter Cups"
+ product = /obj/item/reagent_containers/food/snacks/grown/mushroom/jupitercup
+ lifespan = 40
+ production = 4
+ endurance = 8
+ yield = 4
+ growthstages = 2
+ genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/reagent/liquidelectricity, /datum/plant_gene/trait/plant_type/carnivory)
+ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
+ reagents_add = list(/datum/reagent/consumable/nutriment = 0.1)
+
+/obj/item/seeds/chanterelle/jupitercup/Initialize()
+ ..()
+ unset_mutability(/datum/plant_gene/reagent/liquidelectricity, PLANT_GENE_EXTRACTABLE)
+ unset_mutability(/datum/plant_gene/trait/plant_type/carnivory, PLANT_GENE_REMOVABLE)
+
+/obj/item/reagent_containers/food/snacks/grown/mushroom/jupitercup
+ seed = /obj/item/seeds/chanterelle/jupitercup
+ name = "jupiter cup"
+ desc = "A strange red mushroom, its surface is moist and slick. You wonder how many tiny worms have met their fate inside."
+ icon_state = "jupitercup"
+ filling_color = "#B5003D"
// Glowshroom
/obj/item/seeds/glowshroom
diff --git a/code/modules/hydroponics/grown/peach.dm b/code/modules/hydroponics/grown/peach.dm
new file mode 100644
index 00000000..6fbf933b
--- /dev/null
+++ b/code/modules/hydroponics/grown/peach.dm
@@ -0,0 +1,27 @@
+// Peach
+/obj/item/seeds/peach
+ name = "pack of peach seeds"
+ desc = "These seeds grow into peach trees."
+ icon_state = "seed-peach"
+ species = "peach"
+ plantname = "Peach Tree"
+ product = /obj/item/reagent_containers/food/snacks/grown/peach
+ lifespan = 65
+ endurance = 40
+ yield = 3
+ growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
+ icon_grow = "peach-grow"
+ icon_dead = "peach-dead"
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1)
+
+/obj/item/reagent_containers/food/snacks/grown/peach
+ seed = /obj/item/seeds/peach
+ name = "peach"
+ desc = "It's fuzzy!"
+ icon_state = "peach"
+ filling_color = "#FF4500"
+ bitesize = 25
+ foodtype = FRUIT
+ juice_results = list("peachjuice" = 0)
+ tastes = list("peach" = 1)
diff --git a/code/modules/hydroponics/grown/tea_coffee.dm b/code/modules/hydroponics/grown/tea_coffee.dm
index d9e775ac..c9e2bc6a 100644
--- a/code/modules/hydroponics/grown/tea_coffee.dm
+++ b/code/modules/hydroponics/grown/tea_coffee.dm
@@ -33,7 +33,7 @@
species = "teaastra"
plantname = "Tea Astra Plant"
product = /obj/item/reagent_containers/food/snacks/grown/tea/astra
- mutatelist = list()
+ mutatelist = list(/obj/item/seeds/tea/catnip)
reagents_add = list("synaptizine" = 0.1, "vitamin" = 0.04, "teapowder" = 0.1)
rarity = 20
@@ -45,6 +45,23 @@
grind_results = list("teapowder" = 0, "salglu_solution" = 0)
+// Kitty drugs
+/obj/item/seeds/tea/catnip
+ name = "pack of catnip seeds"
+ icon_state = "seed-catnip"
+ desc = "Long stocks with flowering tips that has a chemical to make feline attracted to it."
+ species = "catnip"
+ plantname = "Catnip Plant"
+ product = /obj/item/reagent_containers/food/snacks/grown/tea/catnip
+ reagents_add = list("catnip" = 0.1, "vitamin" = 0.06, "teapowder" = 0.3)
+ rarity = 50
+
+/obj/item/reagent_containers/food/snacks/grown/tea/catnip
+ seed = /obj/item/seeds/tea/catnip
+ name = "Catnip buds"
+ icon_state = "catnip"
+ filling_color = "#4582B4"
+ grind_results = list("catnp" = 2, "water" = 1)
// Coffee
/obj/item/seeds/coffee
name = "pack of coffee arabica seeds"
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 82b20005..119defad 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -169,8 +169,27 @@
//Pests & Weeds//////////////////////////////////////////////////////////
- else if(pestlevel >= 5)
- adjustHealth(-1 / rating)
+ if(pestlevel >= 8)
+ if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory))
+ adjustHealth(-2 / rating)
+
+ else
+ adjustHealth(2 / rating)
+ adjustPests(-1 / rating)
+
+ else if(pestlevel >= 4)
+ if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory))
+ adjustHealth(-1 / rating)
+
+ else
+ adjustHealth(1 / rating)
+ if(prob(50))
+ adjustPests(-1 / rating)
+
+ else if(pestlevel < 4 && myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory))
+ adjustHealth(-2 / rating)
+ if(prob(5))
+ adjustPests(-1 / rating)
// If it's a weed, it doesn't stunt the growth
if(weedlevel >= 5 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy))
@@ -210,6 +229,12 @@
needs_update = 1
if (needs_update)
update_icon()
+
+ if(myseed && prob(5 * (11-myseed.production)))
+ for(var/g in myseed.genes)
+ if(istype(g, /datum/plant_gene/trait))
+ var/datum/plant_gene/trait/selectedtrait = g
+ selectedtrait.on_grow(src)
return
/obj/machinery/hydroponics/proc/nutrimentMutation()
diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm
index db529e8f..b1602677 100644
--- a/code/modules/hydroponics/plant_genes.dm
+++ b/code/modules/hydroponics/plant_genes.dm
@@ -1,8 +1,18 @@
/datum/plant_gene
var/name
+ var/mutability_flags = PLANT_GENE_EXTRACTABLE | PLANT_GENE_REMOVABLE ///These flags tells the genemodder if we want the gene to be extractable, only removable or neither.
/datum/plant_gene/proc/get_name() // Used for manipulator display and gene disk name.
- return name
+ var/formatted_name
+ if(!(mutability_flags & PLANT_GENE_REMOVABLE && mutability_flags & PLANT_GENE_EXTRACTABLE))
+ if(mutability_flags & PLANT_GENE_REMOVABLE)
+ formatted_name += "Fragile "
+ else if(mutability_flags & PLANT_GENE_EXTRACTABLE)
+ formatted_name += "Essential "
+ else
+ formatted_name += "Immutable "
+ formatted_name += name
+ return formatted_name
/datum/plant_gene/proc/can_add(obj/item/seeds/S)
return !istype(S, /obj/item/seeds/sample) // Samples can't accept new genes
@@ -101,7 +111,16 @@
var/rate = 0.04
/datum/plant_gene/reagent/get_name()
- return "[name] production [rate*100]%"
+ var/formatted_name
+ if(!(mutability_flags & PLANT_GENE_REMOVABLE && mutability_flags & PLANT_GENE_EXTRACTABLE))
+ if(mutability_flags & PLANT_GENE_REMOVABLE)
+ formatted_name += "Fragile "
+ else if(mutability_flags & PLANT_GENE_EXTRACTABLE)
+ formatted_name += "Essential "
+ else
+ formatted_name += "Immutable "
+ formatted_name += "[name] production [rate*100]%"
+ return formatted_name
/datum/plant_gene/reagent/proc/set_reagent(reag_id)
reagent_id = reag_id
@@ -132,8 +151,17 @@
return FALSE
return TRUE
+ /datum/plant_gene/reagent/polypyr
+ name = "Polypyrylium Oligomers"
+ reagent_id = /datum/reagent/medicine/polypyr
+ rate = 0.15
-// Various traits affecting the product. Each must be somehow useful.
+/datum/plant_gene/reagent/liquidelectricity
+ name = "Liquid Electricity"
+ reagent_id = "liquidelectricity"
+ rate = 0.1
+
+// Various traits affecting the product.
/datum/plant_gene/trait
var/rate = 0.05
var/examine_line = ""
@@ -173,6 +201,10 @@
/datum/plant_gene/trait/proc/on_throw_impact(obj/item/reagent_containers/food/snacks/grown/G, atom/target)
return
+///This proc triggers when the tray processes and a roll is sucessful, the success chance scales with production.
+/datum/plant_gene/trait/proc/on_grow(obj/machinery/hydroponics/H)
+ return
+
/datum/plant_gene/trait/squash
// Allows the plant to be squashed when thrown or slipped on, leaving a colored mess and trash type item behind.
// Also splashes everything in target turf with reagents and applies other trait effects (teleporting, etc) to the target by on_squash.
@@ -400,6 +432,30 @@
if(!(G.resistance_flags & FIRE_PROOF))
G.resistance_flags |= FIRE_PROOF
+///Invasive spreading lets the plant jump to other trays, the spreadinhg plant won't replace plants of the same type.
+/datum/plant_gene/trait/invasive
+ name = "Invasive Spreading"
+
+/datum/plant_gene/trait/invasive/on_grow(obj/machinery/hydroponics/H)
+ for(var/step_dir in GLOB.alldirs)
+ var/obj/machinery/hydroponics/HY = locate() in get_step(H, step_dir)
+ if(HY && prob(15))
+ if(HY.myseed) // check if there is something in the tray.
+ if(HY.myseed.type == H.myseed.type && HY.dead != 0)
+ continue //It should not destroy its owm kind.
+ qdel(HY.myseed)
+ HY.myseed = null
+ HY.myseed = H.myseed.Copy()
+ HY.age = 0
+ HY.dead = 0
+ HY.plant_health = HY.myseed.endurance
+ HY.lastcycle = world.time
+ HY.harvest = 0
+ HY.weedlevel = 0 // Reset
+ HY.pestlevel = 0 // Reset
+ HY.update_icon()
+ HY.visible_message("The [H.myseed.plantname] spreads!")
+
/datum/plant_gene/trait/plant_type // Parent type
name = "you shouldn't see this"
trait_id = "plant_type"
@@ -412,3 +468,6 @@
/datum/plant_gene/trait/plant_type/alien_properties
name ="?????"
+
+/datum/plant_gene/trait/plant_type/carnivory
+ name = "Obligate Carnivory"
\ No newline at end of file
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 5a66e174..f7f831a8 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -67,6 +67,7 @@
for(var/reag_id in reagents_add)
genes += new /datum/plant_gene/reagent(reag_id, reagents_add[reag_id])
+ reagents_from_genes() //quality coding
/obj/item/seeds/proc/Copy()
var/obj/item/seeds/S = new type(null, 1)
@@ -94,6 +95,18 @@
for(var/datum/plant_gene/reagent/R in genes)
reagents_add[R.reagent_id] = R.rate
+///This proc adds a mutability_flag to a gene
+/obj/item/seeds/proc/set_mutability(typepath, mutability)
+ var/datum/plant_gene/g = get_gene(typepath)
+ if(g)
+ g.mutability_flags |= mutability
+
+///This proc removes a mutability_flag from a gene
+/obj/item/seeds/proc/unset_mutability(typepath, mutability)
+ var/datum/plant_gene/g = get_gene(typepath)
+ if(g)
+ g.mutability_flags &= ~mutability
+
/obj/item/seeds/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25, wrmut = 2, wcmut = 5, traitmut = 0)
adjust_lifespan(rand(-lifemut,lifemut))
adjust_endurance(rand(-endmut,endmut))
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index b79979e2..c32da80f 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1179,7 +1179,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
/datum/species/proc/check_weakness(obj/item, mob/living/attacker)
return FALSE
-////////
+/datum/species/proc/check_species_weakness(obj/item, mob/living/attacker)
+ return 0 //This is not a boolean, it's the multiplier for the damage that the user takes from the item.It is added onto the check_weakness value of the mob, and then the force of the item is multiplied by this value
+
+ ////////
//LIFE//
////////
diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
index 3ad2a4bd..7534a474 100644
--- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
@@ -11,7 +11,7 @@
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/moth
- liked_food = VEGETABLES | DAIRY
+ liked_food = VEGETABLES | DAIRY| CLOTH
disliked_food = FRUIT | GROSS
toxic_food = MEAT | RAW
@@ -43,18 +43,19 @@
/datum/species/moth/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
. = ..()
- if(chem.id == "pestkiller")
+ if(chem.type == /datum/reagent/toxin/pestkiller)
H.adjustToxLoss(3)
- H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
+ H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
-/datum/species/moth/check_weakness(obj/item/weapon, mob/living/attacker)
+/datum/species/moth/check_species_weakness(obj/item/weapon, mob/living/attacker)
if(istype(weapon, /obj/item/melee/flyswatter))
return 9 //flyswatters deal 10x damage to moths
return 0
+
/datum/species/moth/space_move(mob/living/carbon/human/H)
. = ..()
if(H.loc && !isspaceturf(H.loc) && H.dna.features["moth_wings"] != "Burnt Off")
var/datum/gas_mixture/current = H.loc.return_air()
if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible
- return TRUE
+ return TRUE
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm
index 53c6f1bd..43940362 100644
--- a/code/modules/mob/living/carbon/human/species_types/vampire.dm
+++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm
@@ -92,6 +92,10 @@
to_chat(victim, "[H] tries to bite you, but stops before touching you!")
to_chat(H, "[victim] is blessed! You stop just in time to avoid catching fire.")
return
+ if(victim?.reagents?.has_reagent("garlic"))
+ to_chat(victim, "[H] tries to bite you, but recoils in disgust!")
+ to_chat(H, "[victim] reeks of garlic! you can't bring yourself to drain such tainted blood.")
+ return
if(!do_after(H, 30, target = victim))
return
var/blood_volume_difference = BLOOD_VOLUME_MAXIMUM - H.blood_volume //How much capacity we have left to absorb blood
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index cebc8f09..1095e60e 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -537,6 +537,27 @@
color = "#00F0FF"
taste_description = "blue cherry"
+/datum/reagent/consumable/garlic //NOTE: having garlic in your blood stops vampires from biting you.
+ name = "Garlic Juice"
+ id = "garlic"
+ description = "Crushed garlic. Chefs love it, but it can make you smell bad."
+ color = "#FEFEFE"
+ taste_description = "garlic"
+ metabolization_rate = 0.15 * REAGENTS_METABOLISM
+
+/datum/reagent/consumable/garlic/on_mob_life(mob/living/carbon/M)
+ if(isvampire(M)) //incapacitating but not lethal. Unfortunately, vampires cannot vomit.
+ if(prob(min(25,current_cycle)))
+ to_chat(M, "You can't get the scent of garlic out of your nose! You can barely think...")
+ M.Jitter(10)
+ else if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.job == "Cook")
+ if(prob(20)) //stays in the system much longer than sprinkles/banana juice, so heals slower to partially compensate
+ H.heal_bodypart_damage(1,1, 0)
+ . = 1
+ ..()
+
/datum/reagent/consumable/rice
name = "Rice"
id = "rice"
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index d6bf0c13..3ec90e2d 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -271,7 +271,7 @@
pH = 10.7
/datum/reagent/medicine/oxandrolone/on_mob_life(mob/living/carbon/M)
- if(M.getFireLoss() > 50)
+ if(M.getFireLoss() > 25)
M.adjustFireLoss(-4*REM, 0) //Twice as effective as silver sulfadiazine for severe burns
else
M.adjustFireLoss(-0.5*REM, 0) //But only a quarter as effective for more minor ones
@@ -545,7 +545,7 @@
/datum/reagent/medicine/sal_acid/on_mob_life(mob/living/carbon/M)
- if(M.getBruteLoss() > 50)
+ if(M.getBruteLoss() > 25)
M.adjustBruteLoss(-4*REM, 0) //Twice as effective as styptic powder for severe bruising
else
M.adjustBruteLoss(-0.5*REM, 0) //But only a quarter as effective for more minor ones
@@ -1418,3 +1418,47 @@
M.adjustToxLoss(1, 0)
..()
. = 1
+
+/datum/reagent/medicine/silibinin
+ name = "Silibinin"
+ description = "A thistle derrived hepatoprotective flavolignan mixture that help reverse damage to the liver."
+ reagent_state = SOLID
+ color = "#FFFFD0"
+ metabolization_rate = 1.5 * REAGENTS_METABOLISM
+
+/datum/reagent/medicine/silibinin/on_mob_life(mob/living/carbon/M)
+ M.adjustOrganLoss(ORGAN_SLOT_LIVER, -2)//Add a chance to cure liver trauma once implemented.
+ ..()
+ . = 1
+
+/datum/reagent/medicine/polypyr //This is intended to be an ingredient in advanced chems.
+ name = "Polypyrylium Oligomers"
+ description = "A?purple mixture of short polyelectrolyte chains not easily synthesized in the laboratory. It is valued as an intermediate in the synthesis of the cutting edge pharmaceuticals."
+ reagent_state = SOLID
+ color = "#9423FF"
+ metabolization_rate = 0.25 * REAGENTS_METABOLISM
+ overdose_threshold = 50
+ taste_description = "numbing bitterness"
+
+/datum/reagent/medicine/polypyr/on_mob_life(mob/living/carbon/M) //I w?nted a collection of small positive effects, this is as hard to obtain as coniine after all.
+ M.adjustOrganLoss(ORGAN_SLOT_LUNGS, -0.25)
+ M.adjustBruteLoss(-0.35, 0)
+ if(prob(50))
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ H.bleed_rate = max(H.bleed_rate - 1, 0)
+ ..()
+ . = 1
+
+/datum/reagent/medicine/polypyr/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+ if(method == TOUCH || method == VAPOR)
+ if(M && ishuman(M) && reac_volume >= 0.5)
+ var/mob/living/carbon/human/H = M
+ H.hair_color = "92f"
+ H.facial_hair_color = "92f"
+ H.update_hair()
+
+/datum/reagent/medicine/polypyr/overdose_process(mob/living/M)
+ M.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.5)
+ ..()
+ . = 1
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index b97e0e62..662793a8 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -2160,3 +2160,18 @@
/datum/reagent/changeling_string/Destroy()
qdel(original_dna)
return ..()
+
+/datum/reagent/pax/catnip
+ name = "catnip"
+ id = "catnip"
+ taste_description = "grass"
+ description = "A colorless liquid that makes people more peaceful and felines more happy."
+ metabolization_rate = 1.75 * REAGENTS_METABOLISM
+
+/datum/reagent/pax/catnip/on_mob_life(mob/living/carbon/M)
+ if(prob(20))
+ M.emote("nya")
+ if(prob(20))
+ to_chat(M, "[pick("Headpats feel nice.", "The feeling of a hairball...", "Backrubs would be nice.", "Whats behind those doors?")]")
+ M.adjustArousalLoss(2)
+ ..()
\ No newline at end of file
diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
index c38bbfed..69f9a801 100644
--- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
@@ -9,6 +9,7 @@
taste_description = "bitterness"
taste_mult = 1.2
var/toxpwr = 1.5
+ var/silent_toxin = FALSE //won't produce a pain message when processed by liver/life() if there isn't another non-silent toxin present.
/datum/reagent/toxin/on_mob_life(mob/living/carbon/M)
if(toxpwr)
@@ -899,6 +900,24 @@
taste_description = "bone hurting"
overdose_threshold = 20
+
+/datum/reagent/toxin/bungotoxin
+ name = "Bungotoxin"
+ description = "A horrible cardiotoxin that protects the humble bungo pit."
+ silent_toxin = TRUE
+ color = "#EBFF8E"
+ metabolization_rate = 0.5 * REAGENTS_METABOLISM
+ toxpwr = 0
+ taste_description = "tannin"
+
+/datum/reagent/toxin/bungotoxin/on_mob_life(mob/living/carbon/M)
+ M.adjustOrganLoss(ORGAN_SLOT_HEART, 3)
+ M.confused = M.dizziness //add a tertiary effect here if this is isn't an effective poison.
+ if(current_cycle >= 12 && prob(8))
+ var/tox_message = pick("You feel your heart spasm in your chest.", "You feel faint.","You feel you need to catch your breath.","You feel a prickle of pain in your chest.")
+ to_chat(M, "[tox_message]")
+ . = 1
+ ..()
/datum/reagent/toxin/bonehurtingjuice/on_mob_add(mob/living/carbon/M)
M.say("oof ouch my bones", forced = /datum/reagent/toxin/bonehurtingjuice)
diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm
index cbebf1fd..6981cd05 100644
--- a/code/modules/reagents/chemistry/recipes/medicine.dm
+++ b/code/modules/reagents/chemistry/recipes/medicine.dm
@@ -307,3 +307,9 @@
id = "psicodine"
results = list("psicodine" = 5)
required_reagents = list( "mannitol" = 2, "water" = 2, "impedrezene" = 1)
+
+/datum/chemical_reaction/prussian_blue
+ name = "Prussian Blue"
+ id = "prussian_blue"
+ results = list("prussian_blue" = 2)
+ required_reagents = list( "iron" = 1, "cyanide" = 6)
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index 4a6f9625..634dc7af 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -276,6 +276,50 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+/////////////////////////////////////////
+//////////////Atmos Tanks////////////////
+/////////////////////////////////////////
+
+/datum/design/emergency_oxygen
+ name = "Emergency Oxygen Tank"
+ desc = "An empty emergency oxygen tank. Used for emergencies."
+ id = "emergency_oxygen"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 1000)
+ build_path = /obj/item/tank/internals/emergency_oxygen
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ALL
+
+/datum/design/emergency_oxygen_double
+ name = "Double Emergency Oxygen Tank"
+ desc = "An double emergency oxygen tank."
+ id = "double_emergency_oxygen"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 1500, MAT_SILVER = 200)
+ build_path = /obj/item/tank/internals/emergency_oxygen/double/empty
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO
+
+/datum/design/oxygen_tank
+ name = "Oxygen Tank"
+ desc = "An empty oxygen tank."
+ id = "oxygen_tank"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 2000)
+ build_path = /obj/item/tank/internals/oxygen/empty
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/plasma_tank
+ name = "Plasma Tank"
+ desc = "An empty plasma tank."
+ id = "plasma_tank"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 2000)
+ build_path = /obj/item/tank/internals/plasma/empty
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
+
/////////////////////////////////////////
////////////Janitor Designs//////////////
/////////////////////////////////////////
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index 1349fd23..2f51b33e 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -163,7 +163,7 @@
prereq_ids = list("base")
design_ids = list("solarcontrol", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "emitter", "high_cell", "adv_matter_bin",
"atmosalerts", "atmos_control", "recycler", "autolathe", "high_micro_laser", "nano_mani", "mesons", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod",
- "apc_control", "cell_charger", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine")
+ "apc_control", "cell_charger", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine", "emergency_oxygen", "oxygen_tank", "plasma_tank")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 6000)
export_price = 5000
@@ -172,7 +172,7 @@
display_name = "Advanced Engineering"
description = "Pushing the boundaries of physics, one chainsaw-fist at a time."
prereq_ids = list("engineering", "emp_basic")
- design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask", "tray_goggles_prescription", "engine_goggles_prescription", "mesons_prescription")
+ design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask", "tray_goggles_prescription", "engine_goggles_prescription", "mesons_prescription", "double_emergency_oxygen")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000)
export_price = 5000
diff --git a/code/modules/vending/megaseed.dm b/code/modules/vending/megaseed.dm
index b1b69a8c..0569b9f1 100644
--- a/code/modules/vending/megaseed.dm
+++ b/code/modules/vending/megaseed.dm
@@ -18,12 +18,14 @@
/obj/item/seeds/cotton = 3,
/obj/item/seeds/corn = 3,
/obj/item/seeds/eggplant = 3,
+ /obj/item/seeds/garlic = 3,
/obj/item/seeds/grape = 3,
/obj/item/seeds/grass = 3,
/obj/item/seeds/lemon = 3,
/obj/item/seeds/lime = 3,
/obj/item/seeds/onion = 3,
/obj/item/seeds/orange = 3,
+ /obj/item/seeds/peach = 3,
/obj/item/seeds/peanutseed = 3,
/obj/item/seeds/pineapple = 3,
/obj/item/seeds/potato = 3,
diff --git a/icons/obj/food/burgerbread.dmi b/icons/obj/food/burgerbread.dmi
index cd7fc174..9eafd6c2 100644
Binary files a/icons/obj/food/burgerbread.dmi and b/icons/obj/food/burgerbread.dmi differ
diff --git a/icons/obj/hydroponics/growing_flowers.dmi b/icons/obj/hydroponics/growing_flowers.dmi
index 2752ad8d..1271ced1 100644
Binary files a/icons/obj/hydroponics/growing_flowers.dmi and b/icons/obj/hydroponics/growing_flowers.dmi differ
diff --git a/icons/obj/hydroponics/growing_fruits.dmi b/icons/obj/hydroponics/growing_fruits.dmi
index 9b0bc981..32d7fc53 100644
Binary files a/icons/obj/hydroponics/growing_fruits.dmi and b/icons/obj/hydroponics/growing_fruits.dmi differ
diff --git a/icons/obj/hydroponics/growing_mushrooms.dmi b/icons/obj/hydroponics/growing_mushrooms.dmi
index aa24b394..20633cf8 100644
Binary files a/icons/obj/hydroponics/growing_mushrooms.dmi and b/icons/obj/hydroponics/growing_mushrooms.dmi differ
diff --git a/icons/obj/hydroponics/growing_vegetables.dmi b/icons/obj/hydroponics/growing_vegetables.dmi
index 63cf0691..74fdf121 100644
Binary files a/icons/obj/hydroponics/growing_vegetables.dmi and b/icons/obj/hydroponics/growing_vegetables.dmi differ
diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi
index 5ced9cad..b59e23ef 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 55a7f60a..c0f97be5 100644
Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ
diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm
index cc75e1bf..9f1a6945 100644
--- a/modular_citadel/code/modules/client/loadout/__donator.dm
+++ b/modular_citadel/code/modules/client/loadout/__donator.dm
@@ -11,440 +11,3 @@
category = SLOT_IN_BACKPACK
path = /obj/item/bikehorn
geargroupID = list("DONORTEST") //This is a list mainly for the sake of testing, but geargroupID works just fine with ordinary strings
-
-/datum/gear/kevhorn
- name = "Airhorn"
- category = SLOT_IN_BACKPACK
- path = /obj/item/bikehorn/airhorn
- ckeywhitelist = list("kevinz000")
-
-/datum/gear/cebusoap
- name = "Cebutris' soap"
- category = SLOT_IN_BACKPACK
- path = /obj/item/custom/ceb_soap
- ckeywhitelist = list("cebutris")
-
-/datum/gear/kiaracloak
- name = "Kiara's cloak"
- category = SLOT_NECK
- path = /obj/item/clothing/neck/cloak/inferno
- ckeywhitelist = list("inferno707")
-
-/datum/gear/kiaracollar
- name = "Kiara's collar"
- category = SLOT_NECK
- path = /obj/item/clothing/neck/petcollar/inferno
- ckeywhitelist = list("inferno707")
-
-/datum/gear/kiaramedal
- name = "Insignia of Steele"
- category = SLOT_IN_BACKPACK
- path = /obj/item/clothing/accessory/medal/steele
- ckeywhitelist = list("inferno707")
-
-/datum/gear/hheart
- name = "The Hollow Heart"
- category = SLOT_WEAR_MASK
- path = /obj/item/clothing/mask/hheart
- ckeywhitelist = list("inferno707")
-
-/datum/gear/engravedzippo
- name = "Engraved zippo"
- category = SLOT_HANDS
- path = /obj/item/lighter/gold
- ckeywhitelist = list("dirtyoldharry")
-
-/datum/gear/geisha
- name = "Geisha suit"
- category = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/geisha
- ckeywhitelist = list("atiefling")
-
-/datum/gear/specialscarf
- name = "Special scarf"
- category = SLOT_NECK
- path = /obj/item/clothing/neck/scarf/zomb
- ckeywhitelist = list("zombierobin")
-
-/datum/gear/redmadcoat
- name = "The Mad's labcoat"
- category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/toggle/labcoat/mad/red
- ckeywhitelist = list("zombierobin")
-
-/datum/gear/santahat
- name = "Santa hat"
- category = SLOT_HEAD
- path = /obj/item/clothing/head/santa/fluff
- ckeywhitelist = list("illotafv")
-
-/datum/gear/reindeerhat
- name = "Reindeer hat"
- category = SLOT_HEAD
- path = /obj/item/clothing/head/hardhat/reindeer/fluff
- ckeywhitelist = list("illotafv")
-
-/datum/gear/treeplushie
- name = "Christmas tree plushie"
- category = SLOT_IN_BACKPACK
- path = /obj/item/toy/plush/tree
- ckeywhitelist = list("illotafv")
-
-/datum/gear/santaoutfit
- name = "Santa costume"
- category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/space/santa/fluff
- ckeywhitelist = list("illotafv")
-
-/datum/gear/treecloak
- name = "Christmas tree cloak"
- category = SLOT_NECK
- path = /obj/item/clothing/neck/cloak/festive
- ckeywhitelist = list("illotafv")
-
-/datum/gear/carrotplush
- name = "Carrot plushie"
- category = SLOT_IN_BACKPACK
- path = /obj/item/toy/plush/carrot
- ckeywhitelist = list("improvedname")
-
-/datum/gear/carrotcloak
- name = "Carrot cloak"
- category = SLOT_NECK
- path = /obj/item/clothing/neck/cloak/carrot
- ckeywhitelist = list("improvedname")
-
-/datum/gear/albortorosamask
- name = "Alborto Rosa mask"
- category = SLOT_WEAR_MASK
- path = /obj/item/clothing/mask/luchador/zigfie
- ckeywhitelist = list("zigfie")
-
-/datum/gear/mankini
- name = "Mankini"
- category = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/mankini
- ckeywhitelist = list("zigfie")
-
-/datum/gear/pinkshoes
- name = "Pink shoes"
- category = SLOT_SHOES
- path = /obj/item/clothing/shoes/sneakers/pink
- ckeywhitelist = list("zigfie")
-
-/datum/gear/reecesgreatcoat
- name = "Reece's Great Coat"
- category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/trenchcoat/green
- ckeywhitelist = list("geemiesif")
-
-/datum/gear/russianflask
- name = "Russian flask"
- category = SLOT_IN_BACKPACK
- path = /obj/item/reagent_containers/food/drinks/flask/russian
- cost = 2
- ckeywhitelist = list("slomka")
-
-/datum/gear/stalkermask
- name = "S.T.A.L.K.E.R. mask"
- category = SLOT_WEAR_MASK
- path = /obj/item/clothing/mask/gas/stalker
- ckeywhitelist = list("slomka")
-
-/datum/gear/stripedcollar
- name = "Striped collar"
- category = SLOT_NECK
- path = /obj/item/clothing/neck/petcollar/stripe
- ckeywhitelist = list("jademanique")
-
-/datum/gear/performersoutfit
- name = "Bluish performer's outfit"
- category = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/singery/custom
- ckeywhitelist = list("killer402402")
-
-/datum/gear/vermillion
- name = "Vermillion clothing"
- category = SLOT_W_UNIFORM
- path = /obj/item/clothing/suit/vermillion
- ckeywhitelist = list("fractious")
-
-/datum/gear/AM4B
- name = "Foam Force AM4-B"
- category = SLOT_IN_BACKPACK
- path = /obj/item/gun/ballistic/automatic/AM4B
- ckeywhitelist = list("zeronetalpha")
-
-/datum/gear/carrotsatchel
- name = "Carrot Satchel"
- category = SLOT_HANDS
- path = /obj/item/storage/backpack/satchel/carrot
- ckeywhitelist = list("improvedname")
-
-/datum/gear/naomisweater
- name = "worn black sweater"
- category = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/bb_sweater/black/naomi
- ckeywhitelist = list("technicalmagi")
-
-/datum/gear/naomicollar
- name = "worn pet collar"
- category = SLOT_NECK
- path = /obj/item/clothing/neck/petcollar/naomi
- ckeywhitelist = list("technicalmagi")
-
-/datum/gear/gladiator
- name = "Gladiator Armor"
- category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/under/gladiator
- ckeywhitelist = list("aroche")
-
-/datum/gear/bloodredtie
- name = "Blood Red Tie"
- category = SLOT_NECK
- path = /obj/item/clothing/neck/tie/bloodred
- ckeywhitelist = list("kyutness")
-
-/datum/gear/puffydress
- name = "Puffy Dress"
- category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/puffydress
- ckeywhitelist = list("stallingratt")
-
-/datum/gear/labredblack
- name = "Black and Red Coat"
- category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/toggle/labcoat/labredblack
- ckeywhitelist = list("blakeryan", "durandalphor")
-
-/datum/gear/torisword
- name = "Rainbow Zweihander"
- category = SLOT_IN_BACKPACK
- path = /obj/item/twohanded/dualsaber/hypereutactic/toy/rainbow
- ckeywhitelist = list("annoymous35")
-
-/datum/gear/darksabre
- name = "Dark Sabre"
- category = SLOT_IN_BACKPACK
- path = /obj/item/toy/darksabre
- ckeywhitelist = list("inferno707")
-
-datum/gear/darksabresheath
- name = "Dark Sabre Sheath"
- category = SLOT_IN_BACKPACK
- path = /obj/item/storage/belt/sabre/darksabre
- ckeywhitelist = list("inferno707")
-
-/datum/gear/toriball
- name = "Rainbow Tennis Ball"
- category = SLOT_IN_BACKPACK
- path = /obj/item/toy/tennis/rainbow
- ckeywhitelist = list("annoymous35")
-
-/datum/gear/izzyball
- name = "Katlin's Ball"
- category = SLOT_IN_BACKPACK
- path = /obj/item/toy/tennis/rainbow/izzy
- ckeywhitelist = list("izzyinbox")
-
-/datum/gear/cloak
- name = "Green Cloak"
- category = SLOT_NECK
- path = /obj/item/clothing/neck/cloak/green
- ckeywhitelist = list("killer402402")
-
-/datum/gear/steelflask
- name = "Steel Flask"
- category = SLOT_IN_BACKPACK
- path = /obj/item/reagent_containers/food/drinks/flask/steel
- cost = 2
- ckeywhitelist = list("nik707")
-
-/datum/gear/paperhat
- name = "Paper Hat"
- category = SLOT_HEAD
- path = /obj/item/clothing/head/paperhat
- ckeywhitelist = list("kered2")
-
-/datum/gear/cloakce
- name = "Polychromic CE Cloak"
- category = SLOT_IN_BACKPACK
- path = /obj/item/clothing/neck/cloak/polychromic/polyce
- ckeywhitelist = list("worksbythesea", "blakeryan")
-
-/datum/gear/ssk
- name = "Stun Sword Kit"
- category = SLOT_IN_BACKPACK
- path = /obj/item/ssword_kit
- ckeywhitelist = list("phillip458")
-
-/datum/gear/techcoat
- name = "Techomancers Labcoat"
- category = SLOT_IN_BACKPACK
- path = /obj/item/clothing/suit/toggle/labcoat/mad/techcoat
- ckeywhitelist = list("wilchen")
-
-/datum/gear/leechjar
- name = "Jar of Leeches"
- category = SLOT_IN_BACKPACK
- path = /obj/item/custom/leechjar
- ckeywhitelist = list("sgtryder")
-
-/datum/gear/darkarmor
- name = "Dark Armor"
- category = SLOT_IN_BACKPACK
- path = /obj/item/clothing/suit/armor/vest/darkcarapace
- ckeywhitelist = list("inferno707")
-
-/datum/gear/devilwings
- name = "Strange Wings"
- category = SLOT_NECK
- path = /obj/item/clothing/neck/devilwings
- ckeywhitelist = list("kitsun")
-
-/datum/gear/flagcape
- name = "US Flag Cape"
- category = SLOT_IN_BACKPACK
- path = /obj/item/bedsheet/custom/flagcape
- ckeywhitelist = list("darnchacha")
-
-/datum/gear/luckyjack
- name = "Lucky Jackboots"
- category = SLOT_IN_BACKPACK
- path = /obj/item/clothing/shoes/lucky
- ckeywhitelist = list("donaldtrumpthecommunist")
-
-/datum/gear/raiqbawks
- name = "Miami Boombox"
- category = SLOT_HANDS
- cost = 2
- path = /obj/item/boombox/raiq
- ckeywhitelist = list("chefferz")
-
-/datum/gear/m41
- name = "Toy M41"
- category = SLOT_IN_BACKPACK
- path = /obj/item/toy/gun/m41
- ckeywhitelist = list("thalverscholen")
-
-/datum/gear/Divine_robes
- name = "Divine robes"
- category = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/lunasune
- ckeywhitelist = list("invader4352")
-
-/datum/gear/gothcoat
- name = "Goth Coat"
- category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/gothcoat
- ckeywhitelist = list("norko")
-
-/datum/gear/corgisuit
- name = "Corgi Suit"
- category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/hooded/ian_costume
- ckeywhitelist = list("cathodetherobot")
-
-/datum/gear/sharkcloth
- name = "Leon's Skimpy Outfit"
- category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/under/leoskimpy
- ckeywhitelist = list("spectrosis")
-
-/datum/gear/mimemask
- name = "Mime Mask"
- category = SLOT_WEAR_MASK
- path = /obj/item/clothing/mask/gas/mime
- ckeywhitelist = list("pireamaineach")
-
-/datum/gear/mimeoveralls
- name = "Mime's Overalls"
- category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/under/mimeoveralls
- ckeywhitelist = list("pireamaineach")
-
-/datum/gear/soulneck
- name = "Soul Necklace"
- category = SLOT_NECK
- path = /obj/item/clothing/neck/undertale
- ckeywhitelist = list("twilightic")
-
-/datum/gear/frenchberet
- name = "French Beret"
- category = SLOT_HEAD
- path = /obj/item/clothing/head/frenchberet
- ckeywhitelist = list("notazoltan")
-
-/datum/gear/zuliecloak
- name = "Project: Zul-E"
- category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/hooded/cloak/zuliecloak
- ckeywhitelist = list("asky")
-
-/datum/gear/blackredgold
- name = "Black, Red, and Gold Coat"
- category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/blackredgold
- ckeywhitelist = list("ttbnc")
-
-/datum/gear/fritzplush
- name = "Fritz Plushie"
- category = SLOT_IN_BACKPACK
- path = /obj/item/toy/plush/mammal/dog/fritz
- ckeywhitelist = list("analwerewolf")
-
-/datum/gear/kimono
- name = "Kimono"
- category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/kimono
- ckeywhitelist = list("sfox63")
-
-/datum/gear/commjacket
- name = "Dusty Commisar's Cloak"
- category = SLOT_WEAR_SUIT
- path = /obj/item/clothing/suit/commjacket
- ckeywhitelist = list("sadisticbatter")
-
-/datum/gear/mw2_russian_para
- name = "Russian Paratrooper Jumper"
- category = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/mw2_russian_para
- ckeywhitelist = list("investigator77")
-
-/datum/gear/longblackgloves
- name = "Luna's Gauntlets"
- category = SLOT_GLOVES
- path = /obj/item/clothing/gloves/longblackgloves
- ckeywhitelist = list("bigmanclancy")
-
-/datum/gear/trendy_fit
- name = "Trendy Fit"
- category = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/trendy_fit
- ckeywhitelist = list("midgetdragon")
-
-/datum/gear/singery
- name = "Yellow Performer Outfit"
- category = SLOT_W_UNIFORM
- path = /obj/item/clothing/under/singery
- ckeywhitelist = list("maxlynchy")
-
-/datum/gear/csheet
- name = "NT Bedsheet"
- category = SLOT_NECK
- path = /obj/item/bedsheet/captain
- ckeywhitelist = list("tikibomb")
-
-/datum/gear/borgplush
- name = "Robot Plush"
- category = SLOT_IN_BACKPACK
- path = /obj/item/toy/plush/borgplushie
- ckeywhitelist = list("nicholaiavenicci")
-
-/datum/gear/donorberet
- name = "Atmos Beret"
- category = SLOT_HEAD
- path = /obj/item/clothing/head/blueberet
- ckeywhitelist = list("foxystalin")
-
-
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
index 535885b3..a4c5af61 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
@@ -154,8 +154,27 @@
attack_verb = "flutter" //wat?
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
- liked_food = MEAT | FRUIT
- disliked_food = TOXIC
+ liked_food = VEGETABLES | DAIRY| CLOTH
+ disliked_food = FRUIT | GROSS
+ toxic_food = MEAT | RAW
+
+/datum/species/insect/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
+ . = ..()
+ if(chem.type == /datum/reagent/toxin/pestkiller)
+ H.adjustToxLoss(3)
+ H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
+
+/datum/species/insect/check_species_weakness(obj/item/weapon, mob/living/attacker)
+ if(istype(weapon, /obj/item/melee/flyswatter))
+ return 9 //flyswatters deal 10x damage to moths
+ return 0
+
+/datum/species/insect/space_move(mob/living/carbon/human/H)
+ . = ..()
+ if(H.loc && !isspaceturf(H.loc) && H.dna.features["moth_wings"] != "Burnt Off")
+ var/datum/gas_mixture/current = H.loc.return_air()
+ if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible
+ return TRUE
/datum/species/insect/spec_death(gibbed, mob/living/carbon/human/H)
if(H)
diff --git a/tgstation.dme b/tgstation.dme
index abff4adf..d94aaf68 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -14,7 +14,6 @@
// BEGIN_INCLUDE
#include "_maps\_basemap.dm"
-#include "_maps\map_files\HyperStation\hyperstation.dmm"
#include "code\_compile_options.dm"
#include "code\world.dm"
#include "code\__DEFINES\_globals.dm"
@@ -1733,6 +1732,7 @@
#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\garlic.dm"
#include "code\modules\hydroponics\grown\grass_carpet.dm"
#include "code\modules\hydroponics\grown\kudzu.dm"
#include "code\modules\hydroponics\grown\melon.dm"
@@ -1740,6 +1740,7 @@
#include "code\modules\hydroponics\grown\mushrooms.dm"
#include "code\modules\hydroponics\grown\nettle.dm"
#include "code\modules\hydroponics\grown\onion.dm"
+#include "code\modules\hydroponics\grown\peach.dm"
#include "code\modules\hydroponics\grown\peanuts.dm"
#include "code\modules\hydroponics\grown\pineapple.dm"
#include "code\modules\hydroponics\grown\potato.dm"