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