diff --git a/code/__DEFINES/reactions.dm b/code/__DEFINES/reactions.dm
index 6b9f8abf..982b0e4d 100644
--- a/code/__DEFINES/reactions.dm
+++ b/code/__DEFINES/reactions.dm
@@ -26,7 +26,8 @@
//Research point amounts
#define NOBLIUM_RESEARCH_AMOUNT 100
#define BZ_RESEARCH_AMOUNT 15
-#define MIASMA_RESEARCH_AMOUNT 6 //lolno, fart gas 2 ez
+#define MIASMA_RESEARCH_AMOUNT 6
+#define PHEROMONE_RESEARCH_AMOUNT 6
#define STIMULUM_RESEARCH_AMOUNT 50
//Plasma fusion properties
#define FUSION_ENERGY_THRESHOLD 3e9 //Amount of energy it takes to start a fusion reaction
diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm
index dbf454bc..06a62f52 100644
--- a/code/modules/atmospherics/gasmixtures/gas_types.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_types.dm
@@ -184,7 +184,18 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
name = "Miasma"
gas_overlay = "miasma"
moles_visible = MOLES_GAS_VISIBLE * 60
- rarity = 250
+ rarity = 150
+
+
+/datum/gas/pheromone
+ id = "pheromone"
+ specific_heat = 0.00001
+ fusion_power = 30
+ name = "Pheromones"
+ gas_overlay = "pheromone"
+ moles_visible = MOLES_GAS_VISIBLE * 10
+ rarity = 30
+
/obj/effect/overlay/gas
icon = 'icons/effects/atmospherics.dmi'
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index ee62be70..253530bd 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -96,6 +96,7 @@
/datum/gas/nitrogen = new/datum/tlv(-1, -1, 1000, 1000),
/datum/gas/carbon_dioxide = new/datum/tlv(-1, -1, 5, 10),
/datum/gas/miasma = new/datum/tlv/(-1, -1, 2, 5),
+ /datum/gas/pheromone = new/datum/tlv/(-1, -1, 2, 5),
/datum/gas/plasma = new/datum/tlv/dangerous,
/datum/gas/nitrous_oxide = new/datum/tlv/dangerous,
/datum/gas/bz = new/datum/tlv/dangerous,
diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm
index 2fcd0867..fcf44b3b 100644
--- a/code/modules/hydroponics/grown/misc.dm
+++ b/code/modules/hydroponics/grown/misc.dm
@@ -64,6 +64,42 @@
T.assume_air(stank)
T.air_update_turf()
+
+// Valentines flower
+/obj/item/seeds/starthistle/valentines
+ name = "pack of valentines flower seeds"
+ desc = "A species of plant that emits a arousing odor. The odor stops being produced in difficult atmospheric conditions."
+ icon_state = "valentines"
+ species = "valentines"
+ plantname = "Valentines Flower"
+ production = 2
+ growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
+ genes = list()
+ mutatelist = list()
+
+/obj/item/seeds/starthistle/valentines/pre_attack(obj/machinery/hydroponics/I)
+ if(istype(I, /obj/machinery/hydroponics))
+ if(!I.myseed)
+ START_PROCESSING(SSobj, src)
+ return ..()
+
+/obj/item/seeds/starthistle/valentines/process()
+ var/obj/machinery/hydroponics/parent = loc
+ if(parent.age < maturation || parent.dead) // 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))
+ return
+
+ var/datum/gas_mixture/scent = new
+ var/list/cached_gases = scent.gases
+
+ cached_gases[/datum/gas/pheromone] += (yield + 5)*7*0.1
+ scent.temperature = T20C
+ T.assume_air(scent)
+ T.air_update_turf()
+
//Galaxy Thistle
/obj/item/seeds/galaxythistle
name = "pack of galaxythistle seeds"
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 74d8a575..f38b7aa5 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -78,7 +78,7 @@
if(HAS_TRAIT(B, TRAIT_CHOKE_SLUT))
B.adjustArousalLoss(7)
if (B.getArousalLoss() >= 100 && ishuman(B) && B.has_dna())
- B.mob_climax(forced_climax=TRUE)
+ B.mob_climax(forced_climax=TRUE)
else
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation)
else
@@ -285,6 +285,27 @@
var/nitryl_partialpressure = (breath_gases[/datum/gas/nitryl]/breath.total_moles())*breath_pressure
adjustFireLoss(nitryl_partialpressure/4)
+ //PHEROMONE
+ if(breath_gases[/datum/gas/pheromone])
+ var/pheromone_partialpressure = (breath_gases[/datum/gas/pheromone]/breath.total_moles())*breath_pressure
+ if(pheromone_partialpressure > MINIMUM_MOLES_DELTA_TO_MOVE)
+
+ //pheromone side effects
+ switch(pheromone_partialpressure)
+ if(1 to 5)
+ // At lower pp, give out a little warning
+ SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "smell")
+ if(prob(5))
+ to_chat(src, "There is an entracing smell in the air.")
+ if(5 to 20)
+ //At somewhat higher pp, warning becomes more obvious
+ if(prob(15))
+ to_chat(src, "You smell something enticing inside this room.")
+ if(15 to INFINITY)
+ //Small chance to vomit. By now, people have internals on anyway
+ if(prob(5))
+ to_chat(src, "The enticing smell is unbearable!")
+
//MIASMA
if(breath_gases[/datum/gas/miasma])
var/miasma_partialpressure = (breath_gases[/datum/gas/miasma]/breath.total_moles())*breath_pressure
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index 24fc2b37..dfcd09b1 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -341,6 +341,28 @@
H.reagents.add_reagent(/datum/reagent/stimulum, max(0, 5 - existing))
breath_gases[/datum/gas/stimulum]-=gas_breathed
+ // Pheromone
+ if (breath_gases[/datum/gas/pheromone])
+ var/pheromone_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/pheromone])
+ if(pheromone_pp > MINIMUM_MOLES_DELTA_TO_MOVE)
+
+ // Miasma side effects
+ switch(pheromone_pp)
+ if(1 to 5)
+ if(prob(5))
+ to_chat(owner, "There is an pleasant smell in the air.")
+ owner.adjustArousalLoss(1) //its weak
+ if(5 to 15)
+ if(prob(10))
+ to_chat(owner, "There is an arousing aroma in the air.")
+ owner.adjustArousalLoss(3) //its getting stronger...
+ if(15 to INFINITY)
+ if(prob(15))
+ to_chat(owner, "There is an overpowering arousing aroma in the air.")
+ owner.adjustArousalLoss(6) //its getting stronger...
+
+ breath_gases[/datum/gas/pheromone]-=gas_breathed
+
// Miasma
if (breath_gases[/datum/gas/miasma])
var/miasma_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/miasma])
diff --git a/icons/effects/atmospherics.dmi b/icons/effects/atmospherics.dmi
index acf48a0b..6bef68c5 100644
Binary files a/icons/effects/atmospherics.dmi and b/icons/effects/atmospherics.dmi differ
diff --git a/icons/obj/hydroponics/growing_flowers.dmi b/icons/obj/hydroponics/growing_flowers.dmi
index 1271ced1..df0ddc95 100644
Binary files a/icons/obj/hydroponics/growing_flowers.dmi and b/icons/obj/hydroponics/growing_flowers.dmi differ