diff --git a/code/datums/quirks/negative_quirks/negative_quirks.dm b/code/datums/quirks/negative_quirks/negative_quirks.dm index e5855e08d32..a80c3e01eea 100644 --- a/code/datums/quirks/negative_quirks/negative_quirks.dm +++ b/code/datums/quirks/negative_quirks/negative_quirks.dm @@ -1118,10 +1118,19 @@ . = ..() quirk_holder.add_mob_memory(/datum/memory/key/quirk_smoker, protagonist = quirk_holder, preferred_brand = initial(drug_container_type.name)) // smoker lungs have 25% less health and healing - var/obj/item/organ/internal/lungs/smoker_lungs = quirk_holder.get_organ_slot(ORGAN_SLOT_LUNGS) - if(smoker_lungs && IS_ORGANIC_ORGAN(smoker_lungs)) // robotic lungs aren't affected - smoker_lungs.maxHealth = smoker_lungs.maxHealth * 0.75 - smoker_lungs.healing_factor = smoker_lungs.healing_factor * 0.75 + var/mob/living/carbon/carbon_holder = quirk_holder + var/obj/item/organ/internal/lungs/smoker_lungs = null + var/obj/item/organ/internal/lungs/old_lungs = carbon_holder.get_organ_slot(ORGAN_SLOT_LUNGS) + if(old_lungs && IS_ORGANIC_ORGAN(old_lungs)) + if(isplasmaman(carbon_holder)) + smoker_lungs = /obj/item/organ/internal/lungs/plasmaman/plasmaman_smoker + else if(isethereal(carbon_holder)) + smoker_lungs = /obj/item/organ/internal/lungs/ethereal/ethereal_smoker + else + smoker_lungs = /obj/item/organ/internal/lungs/smoker_lungs + if(!isnull(smoker_lungs)) + smoker_lungs = new smoker_lungs + smoker_lungs.Insert(carbon_holder, special = TRUE, drop_if_replaced = FALSE) /datum/quirk/item_quirk/junkie/smoker/process(seconds_per_tick) . = ..() diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm index 035551bf190..ba66721433f 100644 --- a/code/modules/surgery/organs/internal/lungs/_lungs.dm +++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm @@ -21,7 +21,6 @@ var/failed = FALSE var/operated = FALSE //whether we can still have our damages fixed through surgery - food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/medicine/salbutamol = 5) /// Our previous breath's partial pressures, in the form gas id -> partial pressure @@ -794,6 +793,9 @@ /obj/item/organ/internal/lungs/get_availability(datum/species/owner_species, mob/living/owner_mob) return owner_species.mutantlungs +#define SMOKER_ORGAN_HEALTH (STANDARD_ORGAN_THRESHOLD * 0.75) +#define SMOKER_LUNG_HEALING (STANDARD_ORGAN_HEALING * 0.75) + /obj/item/organ/internal/lungs/plasmaman name = "plasma filter" desc = "A spongy rib-shaped mass for filtering plasma from the air." @@ -804,6 +806,14 @@ safe_plasma_min = 4 //We breathe THIS! safe_plasma_max = 0 +/obj/item/organ/internal/lungs/plasmaman/plasmaman_smoker + name = "smoker plasma filter" + desc = "A plasma filter that look discolored, a result from smoking a lot." + icon_state = "lungs_plasma_smoker" + + maxHealth = SMOKER_ORGAN_HEALTH + healing_factor = SMOKER_LUNG_HEALING + /obj/item/organ/internal/lungs/slime name = "vacuole" desc = "A large organelle designed to store oxygen and other important gasses." @@ -816,6 +826,14 @@ var/plasma_pp = breath.get_breath_partial_pressure(breath.gases[/datum/gas/plasma][MOLES]) breather_slime.blood_volume += (0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you. +/obj/item/organ/internal/lungs/smoker_lungs + name = "smoker lungs" + desc = "A pair of lungs that look sickly, a result from smoking a lot." + icon_state = "lungs_smoker" + + maxHealth = SMOKER_ORGAN_HEALTH + healing_factor = SMOKER_LUNG_HEALING + /obj/item/organ/internal/lungs/cybernetic name = "basic cybernetic lungs" desc = "A basic cybernetic version of the lungs found in traditional humanoid entities." @@ -937,6 +955,14 @@ heat_level_2_threshold = 473 heat_level_3_threshold = 1073 +/obj/item/organ/internal/lungs/ethereal/ethereal_smoker + name = "smoker aeration reticulum" + desc = "A pair of exotic lungs that look pale and sickly, a result from smoking a lot." + icon_state = "lungs_ethereal_smoker" + + maxHealth = SMOKER_ORGAN_HEALTH + healing_factor = SMOKER_LUNG_HEALING + /obj/item/organ/internal/lungs/ethereal/Initialize(mapload) . = ..() add_gas_reaction(/datum/gas/water_vapor, while_present = PROC_REF(consume_water)) @@ -953,3 +979,5 @@ #undef BREATH_RELATIONSHIP_INITIAL_GAS #undef BREATH_RELATIONSHIP_CONVERT #undef BREATH_RELATIONSHIP_MULTIPLIER +#undef SMOKER_ORGAN_HEALTH +#undef SMOKER_LUNG_HEALING diff --git a/icons/obj/medical/organs/organs.dmi b/icons/obj/medical/organs/organs.dmi index 17e09c7395c..94ba46568c9 100644 Binary files a/icons/obj/medical/organs/organs.dmi and b/icons/obj/medical/organs/organs.dmi differ