diff --git a/code/__DEFINES/~~bubber_defines/DNA.dm b/code/__DEFINES/~~bubber_defines/DNA.dm index 3fd10091f50..437935a1feb 100644 --- a/code/__DEFINES/~~bubber_defines/DNA.dm +++ b/code/__DEFINES/~~bubber_defines/DNA.dm @@ -141,7 +141,6 @@ #define SPECIES_XENO "xeno" #define SPECIES_GHOUL "ghoul" #define SPECIES_TESHARI "teshari" -#define SPECIES_HEMOPHAGE "hemophage" #define SPECIES_FELINE_PRIMITIVE "primitive_felinid" #define SPECIES_PROTEAN "protean" #define SPECIES_GAS "serpentid" diff --git a/code/__HELPERS/~skyrat_helpers/is_helpers.dm b/code/__HELPERS/~skyrat_helpers/is_helpers.dm index 7aa97cbbe35..7c866486845 100644 --- a/code/__HELPERS/~skyrat_helpers/is_helpers.dm +++ b/code/__HELPERS/~skyrat_helpers/is_helpers.dm @@ -14,7 +14,6 @@ #define isunathi(A) (is_species(A,/datum/species/unathi)) #define isvulpkanin(A) (is_species(A,/datum/species/vulpkanin)) #define isteshari(A) (is_species(A, /datum/species/teshari)) -#define ishemophage(A) (is_species(A, /datum/species/hemophage)) #define issnail(A) (is_species(A, /datum/species/snail)) #define isluminescent(A) (is_species(A, /datum/species/jelly/luminescent)) #define isprimitivedemihuman(A) (is_species(A, /datum/species/human/felinid/primitive)) diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index d6fb787a5cd..c8ca6bef06d 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -51,6 +51,7 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list( list(/datum/quirk/unblinking, /datum/quirk/item_quirk/fluoride_stare), list(/datum/quirk/micro, /datum/quirk/micro/smaller, /datum/quirk/micro/smallest, /datum/quirk/oversized), list(/datum/quirk/psionic_dampener, /datum/quirk/telepathic), + list(/datum/quirk/hemophage, /datum/quirk/prosthetic_organ, /datum/quirk/tin_man) // BUBBER EDIT - ADDITION - END )) diff --git a/config/game_options.txt b/config/game_options.txt index 5ced2acadd8..4d7dcba72d2 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -385,7 +385,6 @@ ROUNDSTART_RACES moth ROUNDSTART_RACES plasmaman #ROUNDSTART_RACES shadow ROUNDSTART_RACES teshari -ROUNDSTART_RACES hemophage ROUNDSTART_RACES snail ## Races that are better than humans in some ways, but worse in others diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_species.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_species.dm deleted file mode 100644 index 385384545f2..00000000000 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_species.dm +++ /dev/null @@ -1,181 +0,0 @@ -/// Some starter text sent to the Hemophage initially, because Hemophages have shit to do to stay alive. -#define HEMOPHAGE_SPAWN_TEXT "You are an [span_danger("Hemophage")]. You will slowly but constantly lose blood if outside of a closet-like object. If inside a closet-like object, or in pure darkness, you will slowly heal, at the cost of blood. You may gain more blood by grabbing a live victim and using your drain ability." - - -/datum/species/hemophage - name = "Hemophage" - id = SPECIES_HEMOPHAGE - inherent_traits = list( - TRAIT_ADVANCEDTOOLUSER, - TRAIT_CAN_STRIP, - TRAIT_NOHUNGER, - TRAIT_NOBREATH, - TRAIT_VIRUSIMMUNE, - TRAIT_LITERATE, - TRAIT_DRINKS_BLOOD, - ) - inherent_biotypes = MOB_HUMANOID | MOB_ORGANIC - exotic_bloodtype = "U" - mutantheart = /obj/item/organ/heart/hemophage - mutantliver = /obj/item/organ/liver/hemophage - mutantstomach = /obj/item/organ/stomach/hemophage - mutanttongue = /obj/item/organ/tongue/hemophage - mutantlungs = null - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT - examine_limb_id = SPECIES_HUMAN - skinned_type = /obj/item/stack/sheet/animalhide/carbon/human - -/datum/species/hemophage/allows_food_preferences() - return FALSE - -/datum/species/hemophage/get_default_mutant_bodyparts() - return list( - "legs" = list("Normal Legs", FALSE), - ) - -/datum/species/hemophage/check_roundstart_eligible() - if(check_holidays(HALLOWEEN)) - return TRUE - - return ..() - -/datum/species/hemophage/on_species_gain(mob/living/carbon/human/new_hemophage, datum/species/old_species, pref_load, regenerate_icons) - . = ..() - to_chat(new_hemophage, HEMOPHAGE_SPAWN_TEXT) - new_hemophage.update_body() - - -/datum/species/hemophage/get_species_description() - return "Oftentimes feared or pushed out of society for the predatory nature of their condition, \ - Hemophages are typically mixed around various Frontier populations, keeping their true nature hidden while \ - reaping both the benefits and easy access to prey, enjoying unpursued existences on the Frontier." - - -/datum/species/hemophage/get_species_lore() - return list( - "Though known by many other names, 'Hemophages' are those that have found themselves the host of a bloodthirsty infection. 'Natural' hemophages have their infection first overtake their body through the bloodstream, though methods vary; \ - Hemophages thought to be a dense cluster of tightly related but distinct strains and variants. It will first take root in the chest, making alterations to the cells making up the host's organs to rapidly expand and take them over. \ - Lungs will deflate into nothingness, the liver becomes wrapped up and filled with corrupted tissue and the digestive organs will gear themselves towards the intake of the only meal they can have; blood. The host's heart will almost triple in size from this 'cancerous' tissue, forming an overgrown coal-black tumor that now keeps their body standing.", - - "The initial infection process in someone becoming a Hemophage can have varied effects and impacts, though there is a sort of timeline that crops up in the vast majority of cases. The process often begins with the steady decline of the host's heartrate into severe bradycardial agony as it begins to become choked with tumor tissue, chest pains and lightheadedness signaling the first stretch. \ - Fatigue, exercise intolerance, and near-fainting persist and worsen as the host's lungs slowly begin to atrophy; the second organ to normally be 'attacked' by the process. Coughing and hemoptysis will worsen and worsen until it suddenly stops, alongside the Hemophage's ability and need to continue breathing altogether.", - - "The ability to eat normal food becomes psychologically intolerable quickly after the infection fully takes root in their central nervous system, the tumor no longer holding interest in anything it cannot derive nutrients from. Foods once enjoyed by the host begin to taste completely revolting, many quickly developing an aversion to even try chewing it. \ - However, new desires quickly begin to form, the host's whole suite of senses rapidly adapting to a keen interest in blood. Hyperosmia in specific kicks in, the iron-tinged scent of a bleeder provoking and agitating hunger like the smell of any fresh cooking would for a human. \ - Not all blood aids the host the same. It's currently thought that a Hemophage is capable at a subconscious level of recognizing and differentiating different sources of blood, and the tumor within hijacking their psychology to prioritize blood from creatures it is able to reproduce inside of. \ - Blood from animals is reported to 'be like trying to subsist on milk or whipped cream or heavily fluffed up bread,' harder to digest, taste, or enjoy, necessitating the Hemophage to drink far more of it just to get the same value from a relatively small amount of human blood. \ - 'Storebought' blood, like from refrigerated medical blood bags, is reported to 'taste thin,' like a heavily watered down drink. Only the physical, predatory act of drinking blood fresh from another humanoid is enough to properly 'sate' the tumor, ticking the right psychological and physiological boxes to be fully digested and enjoyed. \ - The sensation is like nothing else, being extremely pleasurable for the host; even if they don't want it to be.", - - "Photosensitivity of the skin develops. While light artificial or not won't harm them, it's noted that Hemophages seem to be far more comfortable in any level of darkness, their skin and eyes far more sensitive than before to UV. \ - When taken away from it, and ideally isolated from higher-than-average levels of radiation such as found in orbital habitats, it's noted that the host's body will begin to reconstruct with aid from the tumor inside. Flesh will knit back together, burns will rapidly cast off, and even scar tissue will properly regenerate into normal tissue. \ - It's thought that this process is even delicate enough to work at the host's DNA, prolonging epigenetic maintenance and ensuring biological systems remain healthy and youthful for far longer than normal. \ - Given that Hemophages are converted and kept alive by their infection, it will ruthlessly fight off foreign bacteria, viruses, and tissues, repurposing or annihilating them to ensure there's no 'competition' over its host. \ - Notably, the host's blood will turn almost black like ink due to their blood becoming more 'dense', yet no longer carrying nearly as much oxygen. Due to this hemophages are known to look more 'ashen', their lips often turning to a dark gray, and their skin going more pale than it normally would be. \ - Their tongues, not an organ the tumor spares, additionally turn a pure black; in some cases, the sclera in their eyes might even turn significantly dark especially when bloodshot.", - - "The psychology of Hemophages is well-studied in the psychiatric field. Over time, hemophages have developed a plethora of conditioned responses and quirks just as humans, their prey, have. \ - The first few years after a Hemophage is 'changed' is often enough to drive them over the edge. In some cases, the first few days. The process of being turned is a series of traumas in quick succession as the host is often made to murder. \ - The lucky have a 'moral' source of blood at hand and whoever 'converted' them to guide them through it; the unlucky have to scramble to maintain their sense of self as they become something else. \ - The physical sensation of first infection is often painful, often terrifying, and often grotesque to experience as the host feels their body shocked with vicious tumor tissue and their mind warped by near-death stretching over potentially days. \ - Some snap, some grow stone-hard, but it's rare to actually meet a Hemophage that remembers the process. Some hemophages are born into their condition; the infection staying dormant until the child is a few months to a year old, ensuring their stability in being able to handle the tumor. \ - These hosts tend to live extremely tumultuous childhoods, simply not being strong enough to feed on anything but the weakest of creatures, and trending towards immense loneliness from the high visibility of their condition's treatment during youth.", - - "The hunger is the main driver for these sordid creatures. From the very moment they wake back up from the process of being 'changed,' a powerful hunger is awakened. It twists and throbs in their heart, drowning out coherent thought. \ - During the 'semi-starvation' phase in humans, the changes are dramatic. Significant decreases in strength and stamina, body temperature, heart rate, and obsession with food. Dreaming and fantasizing about it, reading and talking about it, and savoring what little meals they can get access to; hoarding it for themselves and eating to the last crumb. \ - In Hemophages, this response is heavily similar, but turned outwards. The hunger of a Hemophage is psychologically pressing in nearly every way, detracting from all other concerns in an urge to be dealt with as soon as it can be. \ - Panic easily sets in during these times of famine, the host instinctually knowing that it must be sated or the tumor within them will soon run out of blood to feed on, which would result in their mutual death. \ - Even the very sight and smell of fresh blood can push a Hemophage into this kind of state if they haven't fed in awhile, only drinking from a living creature or intense meditation and concentration being able to push it down.", - - "Socially, Hemophages are mostly solitary hunters. It is extremely easy for them to recognize each other; the unique smell of their blackened ichor, the subtle details of their body and the way it moves, the shallow or nonexistant breathing, or even the likely smell of multiple victims' blood on their breath. \ - Even normal humans report talking to known Hemophages being psychologically unsettling, linked to being armed with the knowledge that they've likely taken several lives and might take theirs. \ - This predatory aura surrounding them tends to leave them operating primarily solitarily; always passively running threat analysis on others of their kind, especially given the higher 'value' of their more nutrient-rich blood. \ - When they do choose to work together, Hemophages gather in groups of no more than ten. Any more, and their activities would surely be impossible to disguise.", - - "'Conversion' tends to be uncommon for Hemophages. The typical line of thought is that one 'wouldn't want to raise a kid every time they go out for dinner,' as the 'creation' of a new Hemophage involves, essentially, becoming an on-site therapist and mentor for an unspecified amount of time. \ - It's often not worth the risk to potentially allow a fresh 'convert' to gain access to a Hemophage's identity if they're attempting to 'blend', and to potentially turn on them and expose their illegal activities. \ - However the infection which creates them, like any living creature, has a drive to procreate regardless; often the urge to spread it overtakes a hemophage's sensibilities anyway, and some are known to serially infect others simply to 'stir the pot.", - - "In terms of human society, it's known for Hemophages to be passively strangled by the law itself. In 'civilized' places like Sol, Hemophages that attack or kill humans for their blood are prosecuted heavily; almost disproportionately compared to if the same crimes were committed by a normal person. \ - Artificial sources of blood are intentionally kept rare by pharmaceutical companies, and those that do end up getting an easier access to such sources seem to almost always be working in the Medical field. \ - Even adopting pets is made nigh-on-impossible for them. Those that don't leave to places like frontier systems typically end up part of oft-ephemeral networks of others of their kind, offering time-sensitive advice on where certain 'low-risk' or 'less-than-legal' meals may be found and forcing themselves to work past their base instincts to cooperate to an extent; anything else would mean death." - ) - - -/datum/species/hemophage/prepare_human_for_preview(mob/living/carbon/human/human) - human.dna.features["mcolor"] = "#fff4e6" - human.set_eye_color(COLOR_RED) - human.hair_color = "#1d1d1d" - human.hairstyle = "Royal Curls" - regenerate_organs(human, src, visual_only = TRUE) - human.update_body(TRUE) - -/datum/species/hemophage/create_pref_unique_perks() - var/list/to_add = list() - - to_add += list( - list( - SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, - SPECIES_PERK_ICON = "moon", - SPECIES_PERK_NAME = "Darkness Affinity", - SPECIES_PERK_DESC = "A Hemophage is only at home in the darkness, the infection \ - within a Hemophage seeking to return them to a healthy state \ - whenever it can be in the shadow. However, light artificial or \ - otherwise irritates their bodies and the cancer keeping them alive, \ - not harming them but keeping them from regenerating. Modern \ - Hemophages have been known to use lockers as a convenient \ - source of darkness, while the extra protection they provide \ - against background radiations allows their tumor to avoid \ - having to expend any blood to maintain minimal bodily functions \ - so long as their host remains stationary in said locker.", - ), - list( - SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, - SPECIES_PERK_ICON = "biohazard", - SPECIES_PERK_NAME = "Viral Symbiosis", - SPECIES_PERK_DESC = "Hemophages, due to their condition, cannot get infected by \ - other viruses and don't actually require an external source of oxygen \ - to stay alive.", - ), - list( - SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, - SPECIES_PERK_ICON = "tint", - SPECIES_PERK_NAME = "The Thirst", - SPECIES_PERK_DESC = "In place of eating, Hemophages suffer from the Thirst, caused by their tumor. \ - Thirst of what? Blood! Their tongue allows them to grab people and drink \ - their blood, and they will suffer severe consequences if they run out. As a note, \ - it doesn't matter whose blood you drink, it will all be converted into your blood \ - type when consumed. That being said, the blood of other sentient humanoids seems \ - to quench their Thirst for longer than otherwise-acquired blood would.", - ), - ) - - return to_add - - -/datum/species/hemophage/create_pref_blood_perks() - var/list/to_add = list() - - to_add += list(list( - SPECIES_PERK_TYPE = SPECIES_NEUTRAL_PERK, - SPECIES_PERK_ICON = "tint", - SPECIES_PERK_NAME = "Universal Blood", - SPECIES_PERK_DESC = "[plural_form] have blood that appears to be an amalgamation of all other \ - blood types, made possible thanks to some special antigens produced by \ - their tumor, making them able to receive blood of any other type, so \ - long as it is still human-like blood.", - ), - ) - - return to_add - - -// We don't need to mention that they're undead, as the perks that come from it are otherwise already explicited, and they might no longer be actually undead from a gameplay perspective, eventually. -/datum/species/hemophage/create_pref_biotypes_perks() - return - - -#undef HEMOPHAGE_SPAWN_TEXT - -/mob/living/carbon/human/species/hemophage //Why was this never added? - race = /datum/species/hemophage diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 6dc7f48667f..0eafe524a51 100644 --- a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -455,7 +455,7 @@ desc = "Red and white drink for the upper classes or undead." /datum/reagent/consumable/ethanol/velvet_kiss/expose_mob(mob/living/exposed_mob, methods, reac_volume) - if(iszombie(exposed_mob) || isvampire(exposed_mob) || isdullahan(exposed_mob) || ishemophage(exposed_mob)) //Rare races! + if(iszombie(exposed_mob) || isvampire(exposed_mob) || isdullahan(exposed_mob) || exposed_mob.has_quirk(/datum/quirk/hemophage)) //Rare races! quality = RACE_DRINK else quality = DRINK_GOOD @@ -654,7 +654,7 @@ #define BLOODSHOT_DISGUST 25 /datum/reagent/consumable/ethanol/bloodshot/expose_mob(mob/living/exposed_mob, methods, reac_volume) - if(ishemophage(exposed_mob)) + if(exposed_mob.has_quirk(/datum/quirk/hemophage)) quality = RACE_DRINK else if(exposed_mob.blood_volume < exposed_mob.blood_volume_normal) diff --git a/modular_zubbers/code/datums/diseases/advance/transformation.dm b/modular_zubbers/code/datums/diseases/advance/transformation.dm index b4566be95fe..7642d8c0b60 100644 --- a/modular_zubbers/code/datums/diseases/advance/transformation.dm +++ b/modular_zubbers/code/datums/diseases/advance/transformation.dm @@ -42,23 +42,6 @@ to_chat(affected_mob, span_warning("You've become \a [LOWER_TEXT(initial(species_type.name))]!")) cure() -/datum/disease/transformation_race/hemophage - name = "Hemophagic Viral Infection" - cure_text = "Garlic" - cures = list(/datum/reagent/consumable/garlic) - agent = "Hemophagic Viral Infection" - desc = "A gift of the night" - cure_chance = 2.5 - severity = DISEASE_SEVERITY_BIOHAZARD - visibility_flags = NONE - stage1 = list("You dont feel very well") - stage2 = list("You feel cold") - stage3 = list(span_danger("Your heart skips a beat"), span_danger("You have a dull pain in your heart")) - stage4 = list(span_danger("You're hungry but normal food does not seem appetizing")) - stage5 = list(span_danger("Blood....Blood...")) - race = /datum/species/hemophage - infectable_biotypes = MOB_ORGANIC|MOB_UNDEAD - /datum/disease/transformation_race/synthetic name = "Synthetic Conversion Nanites" cure_text = "An injection of copper." diff --git a/modular_zubbers/code/datums/quirks/negative_quirks/sol_weakness.dm b/modular_zubbers/code/datums/quirks/negative_quirks/sol_weakness.dm deleted file mode 100644 index 01ce7c44945..00000000000 --- a/modular_zubbers/code/datums/quirks/negative_quirks/sol_weakness.dm +++ /dev/null @@ -1,101 +0,0 @@ - -#define COFFIN_HEALING_COST 0.5 - -/datum/quirk/sol_weakness - name = "Sol Weakness" - icon = FA_ICON_SUN - desc = "Your sub-species of the Hemophage virus renders you weak to Solar radiation, \ - you will have to hide in a coffin or a closet during the day, or risk burning to a crisp. \ - Thankfully, you will also heal your wounds at half cost in a coffin." - gain_text = span_warning("You feel a sudden weakness in your body, and a burning sensation on your skin. \ - You should find a coffin to hide in during the day.") - lose_text = span_notice("You feel safe in Sol's embrace once more.") - medical_record_text = "Patient's strain of the hemophage virus is weak to sunlight. \ - They will have to hide in a coffin or a closet during the day, or risk burning to a crisp." - value = -4 - hardcore_value = 6 - quirk_flags = QUIRK_HIDE_FROM_SCAN | QUIRK_HUMAN_ONLY - species_whitelist = list(SPECIES_HEMOPHAGE) - COOLDOWN_DECLARE(sun_burn) - -/datum/quirk/sol_weakness/add_to_holder(mob/living/new_holder, quirk_transfer = FALSE, client/client_source, unique = TRUE, announce = TRUE) - if(IS_BLOODSUCKER(new_holder)) - return FALSE - return ..() - -/datum/quirk/sol_weakness/add() - RegisterSignal(quirk_holder, COMSIG_MOB_HEMO_BLOOD_REGEN_TICK, PROC_REF(on_blood_healing)) - if(!quirk_holder.hud_used) - RegisterSignal(quirk_holder, COMSIG_MOB_HUD_CREATED, PROC_REF(add_sun_timer_hud)) - return - add_sun_timer_hud() - -/datum/quirk/sol_weakness/remove() - UnregisterSignal(quirk_holder, COMSIG_MOB_HEMO_BLOOD_REGEN_TICK) - SSsunlight.remove_sun_sufferer(quirk_holder) - UnregisterSignal(SSsunlight, list(COMSIG_SOL_RISE_TICK, COMSIG_SOL_WARNING_GIVEN)) - -/datum/quirk/sol_weakness/proc/on_blood_healing(mob/owner, seconds_between_ticks, datum/status_effect/blood_regen_active/effect) - if(effect && in_coffin()) - // cheaper healing as long as you're in a coffin - effect.cost_blood = COFFIN_HEALING_COST - else - effect.cost_blood = initial(effect.cost_blood) - // prevent healing if sol is active - return SSsunlight.sunlight_active ? COMSIG_CANCEL_MOB_HEMO_BLOOD_REGEN : NONE - -/datum/quirk/sol_weakness/proc/add_sun_timer_hud() - if(!quirk_holder.hud_used) - CRASH("Sol Weakness quirk holder has no HUD") - SSsunlight.add_sun_sufferer(quirk_holder) - UnregisterSignal(quirk_holder, COMSIG_MOB_HUD_CREATED) - RegisterSignal(SSsunlight, COMSIG_SOL_RISE_TICK, PROC_REF(sun_risen)) - RegisterSignal(SSsunlight, COMSIG_SOL_WARNING_GIVEN, PROC_REF(sun_warning)) - -/datum/quirk/sol_weakness/proc/sun_risen() - SIGNAL_HANDLER - if(!istype(quirk_holder.loc, /obj/structure)) - sun_burn() - else - if(in_coffin()) - quirk_holder.add_mood_event("vampsleep", /datum/mood_event/coffinsleep/quirk) - sun_burn_message(span_warning("The sun is up, but you safely rest in your [quirk_holder.loc.name].")) - else - quirk_holder.add_mood_event("vampsleep", /datum/mood_event/daylight_bad_sleep) - quirk_holder.adjust_fire_loss(1) - sun_burn_message(span_warning("[quirk_holder.loc] is not a coffin, but it keeps you safe enough.")) - -/datum/quirk/sol_weakness/proc/sun_burn() - quirk_holder.add_mood_event("vampsleep", /datum/mood_event/daylight_sun_scorched) - if(quirk_holder.blood_volume > BLOOD_VOLUME_NORMAL * 0.71) // 397.6 - quirk_holder.blood_volume -= 5 - sun_burn_message(span_warning("The sun burns your skin, but your blood protects you from the worst of it...")) - quirk_holder.adjust_fire_loss(1) - return - sun_burn_message(span_userdanger("THE SUN, IT BURNS!")) - quirk_holder.adjust_fire_loss(2) - quirk_holder.adjust_fire_stacks(1) - quirk_holder.ignite_mob() - -/datum/quirk/sol_weakness/proc/sun_burn_message(text) - SIGNAL_HANDLER - if(!COOLDOWN_FINISHED(src, sun_burn)) - return - to_chat(quirk_holder, text) - COOLDOWN_START(src, sun_burn, 30 SECONDS) - -/datum/quirk/sol_weakness/proc/sun_warning(atom/source, danger_level, vampire_warning_message, ghoul_warning_message) - SIGNAL_HANDLER - if(danger_level == DANGER_LEVEL_SOL_ROSE) - vampire_warning_message = span_userdanger("Solar flares bombard the station with deadly UV light! Stay in cover for the next [TIME_BLOODSUCKER_DAY / 60] minutes or risk death!") - SSsunlight.warn_notify(quirk_holder, danger_level, vampire_warning_message) - -/datum/quirk/sol_weakness/proc/in_coffin() - return istype(quirk_holder.loc, /obj/structure/closet/crate/coffin) - -/datum/status_effect/blood_regen_active/tick(seconds_between_ticks) - if(SEND_SIGNAL(owner, COMSIG_MOB_HEMO_BLOOD_REGEN_TICK, seconds_between_ticks, src) & COMSIG_CANCEL_MOB_HEMO_BLOOD_REGEN) - return - . = ..() - -#undef COFFIN_HEALING_COST diff --git a/modular_zubbers/code/datums/quirks/neutral_quirks/hemophage.dm b/modular_zubbers/code/datums/quirks/neutral_quirks/hemophage.dm new file mode 100644 index 00000000000..8c5a168fccc --- /dev/null +++ b/modular_zubbers/code/datums/quirks/neutral_quirks/hemophage.dm @@ -0,0 +1,207 @@ +#define COFFIN_HEALING_COST 0.5 + +/datum/quirk/hemophage + name = "Hemophagia" + desc = "You have the organs and abilities of someone suffering from the hemophage virus." + icon = FA_ICON_TEETH + value = 0 + medical_record_text = "During physical examination, patient was found to have corrupted organs and other abilities commonly found in those suffering \ + from the hemophage virus." + hardcore_value = 0 + mail_goodies = list(/obj/item/reagent_containers/blood/random) + quirk_flags = QUIRK_HIDE_FROM_SCAN + // Most of these are Halloween species but we still have them once a year. + species_blacklist = list( + SPECIES_ABDUCTOR_STATION, + SPECIES_ZOMBIE, + SPECIES_SKELETON, + SPECIES_SHADOW, + SPECIES_PLASMAMAN, + SPECIES_GOLEM, + SPECIES_SPIRIT, + SPECIES_ANDROID, + SPECIES_ABDUCTOR, + SPECIES_VAMPIRE, + SPECIES_PROTEAN, + SPECIES_SLIMEPERSON, + ) + COOLDOWN_DECLARE(sun_burn) + + var/datum/blood_type/old_blood_type = null + +/datum/quirk/hemophage/add(client/client_source) + var/mob/living/carbon/human/human_holder = quirk_holder + quirk_holder.add_traits(list( + TRAIT_DRINKS_BLOOD, + TRAIT_NOHUNGER, + TRAIT_NOBREATH, + TRAIT_VIRUSIMMUNE, + ), QUIRK_TRAIT) + + old_blood_type = human_holder.dna.blood_type.get_type() + human_holder.dna.blood_type = get_blood_type(BLOOD_TYPE_UNIVERSAL) + + if(client_source?.prefs.read_preference(/datum/preference/toggle/masquerade)) + ADD_TRAIT(quirk_holder, TRAIT_MASQUERADE_FOOD, QUIRK_TRAIT) + + if(client_source?.prefs.read_preference(/datum/preference/toggle/sol_weakness)) + RegisterSignal(quirk_holder, COMSIG_MOB_HEMO_BLOOD_REGEN_TICK, PROC_REF(on_blood_healing)) + if(!quirk_holder.hud_used) + RegisterSignal(quirk_holder, COMSIG_MOB_HUD_CREATED, PROC_REF(add_sun_timer_hud)) + return + add_sun_timer_hud() + +/datum/quirk/hemophage/post_add() + if(quirk_holder.client?.prefs.read_preference(/datum/preference/toggle/pseudo_respiration)) + REMOVE_TRAIT(quirk_holder, TRAIT_NOBREATH, QUIRK_TRAIT) + +/datum/quirk/hemophage/add_unique(client/client_source) + var/mob/living/carbon/human/human_holder = quirk_holder + var/static/list/organ_slots = list( + ORGAN_SLOT_HEART = /obj/item/organ/heart/hemophage, + ORGAN_SLOT_LIVER = /obj/item/organ/liver/hemophage, + ORGAN_SLOT_STOMACH = /obj/item/organ/stomach/hemophage, + ORGAN_SLOT_TONGUE = /obj/item/organ/tongue/hemophage, + ) + var/list/possible_organ_slots = organ_slots.Copy() + if(!length(organ_slots)) //what the hell + return + + for(var/organ_slot in possible_organ_slots) + var/organ_path = possible_organ_slots[organ_slot] + var/obj/item/organ/new_organ = new organ_path() + new_organ.Insert(human_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED) + +/datum/quirk/hemophage/remove(client/client_source) + var/mob/living/carbon/human/human_holder = quirk_holder + + UnregisterSignal(quirk_holder, COMSIG_MOB_HEMO_BLOOD_REGEN_TICK) + SSsunlight.remove_sun_sufferer(quirk_holder) + UnregisterSignal(SSsunlight, list(COMSIG_SOL_RISE_TICK, COMSIG_SOL_WARNING_GIVEN)) + + if(QDELETED(quirk_holder)) + return + + quirk_holder.remove_traits(list( + TRAIT_DRINKS_BLOOD, + TRAIT_NOHUNGER, + TRAIT_NOBREATH, + TRAIT_VIRUSIMMUNE, + TRAIT_MASQUERADE_FOOD, + ), QUIRK_TRAIT) + + human_holder.dna.blood_type = get_blood_type(old_blood_type) + + var/obj/item/organ/heart/new_heart = new human_holder.dna.species.mutantheart() + new_heart.Insert(human_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED) + + var/obj/item/organ/liver/new_liver = new human_holder.dna.species.mutantliver() + new_liver.Insert(human_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED) + + var/obj/item/organ/stomach/new_stomach = new human_holder.dna.species.mutantstomach() + new_stomach.Insert(human_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED) + + var/obj/item/organ/tongue/new_tongue = new human_holder.dna.species.mutanttongue() + new_tongue.Insert(human_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED) + +/datum/quirk/hemophage/proc/on_blood_healing(mob/owner, seconds_between_ticks, datum/status_effect/blood_regen_active/effect) + if(effect && in_coffin()) + // cheaper healing as long as you're in a coffin + effect.cost_blood = COFFIN_HEALING_COST + else + effect.cost_blood = initial(effect.cost_blood) + // prevent healing if sol is active + return SSsunlight.sunlight_active ? COMSIG_CANCEL_MOB_HEMO_BLOOD_REGEN : NONE + +/datum/quirk/hemophage/proc/add_sun_timer_hud() + if(!quirk_holder.hud_used) + CRASH("Sol Weakness quirk holder has no HUD") + SSsunlight.add_sun_sufferer(quirk_holder) + UnregisterSignal(quirk_holder, COMSIG_MOB_HUD_CREATED) + RegisterSignal(SSsunlight, COMSIG_SOL_RISE_TICK, PROC_REF(sun_risen)) + RegisterSignal(SSsunlight, COMSIG_SOL_WARNING_GIVEN, PROC_REF(sun_warning)) + +/datum/quirk/hemophage/proc/sun_risen() + SIGNAL_HANDLER + if(!istype(quirk_holder.loc, /obj/structure)) + sun_burn() + else + if(in_coffin()) + quirk_holder.add_mood_event("vampsleep", /datum/mood_event/coffinsleep/quirk) + sun_burn_message(span_warning("The sun is up, but you safely rest in your [quirk_holder.loc.name].")) + else + quirk_holder.add_mood_event("vampsleep", /datum/mood_event/daylight_bad_sleep) + quirk_holder.adjust_fire_loss(1) + sun_burn_message(span_warning("[quirk_holder.loc] is not a coffin, but it keeps you safe enough.")) + +/datum/quirk/hemophage/proc/sun_burn() + quirk_holder.add_mood_event("vampsleep", /datum/mood_event/daylight_sun_scorched) + if(quirk_holder.blood_volume > BLOOD_VOLUME_NORMAL * 0.71) // 397.6 + quirk_holder.blood_volume -= 5 + sun_burn_message(span_warning("The sun burns your skin, but your blood protects you from the worst of it...")) + quirk_holder.adjust_fire_loss(1) + return + sun_burn_message(span_userdanger("THE SUN, IT BURNS!")) + quirk_holder.adjust_fire_loss(2) + quirk_holder.adjust_fire_stacks(1) + quirk_holder.ignite_mob() + +/datum/quirk/hemophage/proc/sun_burn_message(text) + SIGNAL_HANDLER + if(!COOLDOWN_FINISHED(src, sun_burn)) + return + to_chat(quirk_holder, text) + COOLDOWN_START(src, sun_burn, 30 SECONDS) + +/datum/quirk/hemophage/proc/sun_warning(atom/source, danger_level, vampire_warning_message, ghoul_warning_message) + SIGNAL_HANDLER + if(danger_level == DANGER_LEVEL_SOL_ROSE) + vampire_warning_message = span_userdanger("Solar flares bombard the station with deadly UV light! Stay in cover for the next [TIME_BLOODSUCKER_DAY / 60] minutes or risk death!") + SSsunlight.warn_notify(quirk_holder, danger_level, vampire_warning_message) + +/datum/quirk/hemophage/proc/in_coffin() + return istype(quirk_holder.loc, /obj/structure/closet/crate/coffin) + +/datum/status_effect/blood_regen_active/tick(seconds_between_ticks) + if(SEND_SIGNAL(owner, COMSIG_MOB_HEMO_BLOOD_REGEN_TICK, seconds_between_ticks, src) & COMSIG_CANCEL_MOB_HEMO_BLOOD_REGEN) + return + . = ..() + +/datum/quirk_constant_data/hemophage + associated_typepath = /datum/quirk/hemophage + customization_options = list(/datum/preference/toggle/masquerade, + /datum/preference/toggle/sol_weakness, + /datum/preference/toggle/pseudo_respiration, + ) + +/datum/preference/toggle/masquerade + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED + savefile_key = "masquerade_toggle" + savefile_identifier = PREFERENCE_CHARACTER + can_randomize = FALSE + default_value = FALSE + +/datum/preference/toggle/masquerade/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) + return FALSE + +/datum/preference/toggle/sol_weakness + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED + savefile_key = "sol_weakness_toggle" + savefile_identifier = PREFERENCE_CHARACTER + can_randomize = FALSE + default_value = FALSE + +/datum/preference/toggle/sol_weakness/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) + return FALSE + +/datum/preference/toggle/pseudo_respiration + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED + savefile_key = "pseudo_respiration_toggle" + savefile_identifier = PREFERENCE_CHARACTER + can_randomize = FALSE + default_value = FALSE + +/datum/preference/toggle/pseudo_respiration/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) + return FALSE + +#undef COFFIN_HEALING_COST diff --git a/modular_zubbers/code/datums/quirks/neutral_quirks/pseudo_respiration.dm b/modular_zubbers/code/datums/quirks/neutral_quirks/pseudo_respiration.dm deleted file mode 100644 index 2e64595c63e..00000000000 --- a/modular_zubbers/code/datums/quirks/neutral_quirks/pseudo_respiration.dm +++ /dev/null @@ -1,29 +0,0 @@ -/datum/quirk/pseudo_respiration - name = "Pseudo-Respiration" - desc = "(Hemophage only) Despite your condition you for whatever reason still require to breathe." - icon = FA_ICON_MASK_VENTILATOR - value = -2 - quirk_flags = QUIRK_HUMAN_ONLY - gain_text = span_danger("You feel the urge to take a breath...") - lose_text = span_notice("You no longer feel the need to breathe.") - medical_record_text = "Patient reports the need to breathe despite their hemophagic virus." - hardcore_value = 2 - species_whitelist = list(SPECIES_HEMOPHAGE) - -/datum/quirk/pseudo_respiration/add() - var/mob/living/carbon/human/breather = quirk_holder - if(!istype(breather)) - return - REMOVE_TRAIT(breather, TRAIT_NOBREATH, SPECIES_TRAIT) - var/obj/item/organ/lungs/lungs_added = new() - lungs_added.Insert(breather, special = TRUE, movement_flags = DELETE_IF_REPLACED) - breather.dna.species.mutantlungs = lungs_added.type - -/datum/quirk/pseudo_respiration/remove() - var/mob/living/carbon/human/no_breather = quirk_holder - if(!istype(no_breather)) - return - ADD_TRAIT(no_breather, TRAIT_NOBREATH, SPECIES_TRAIT) - var/obj/item/organ/lungs/lungs_added = new() - lungs_added.Remove(no_breather, special = TRUE, movement_flags = DELETE_IF_REPLACED) - diff --git a/modular_zubbers/code/datums/quirks/positive_quirks/masquerade_food.dm b/modular_zubbers/code/datums/quirks/positive_quirks/masquerade_food.dm deleted file mode 100644 index 0f3aee4653d..00000000000 --- a/modular_zubbers/code/datums/quirks/positive_quirks/masquerade_food.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/quirk/masquerade_food - name = "Masquerade" - desc = "A hemophage that has adapted to be able to consume normal food and drink. Such an act is merely for pleasure, as they derive no nutritional benefit from such." - icon = FA_ICON_PIZZA_SLICE - value = 2 - mob_trait = TRAIT_MASQUERADE_FOOD - gain_text = span_notice("You feel that your body has adapted to consumption of normal food and drink without mixing in blood.") - lose_text = span_danger("You feel that your body is no longer able to consume normal food or drink without mixing in blood.") - medical_record_text = "Patient is able to consume food or drink without having to mix in blood, though they derive no nutritional benefit from it." - species_whitelist = list(SPECIES_HEMOPHAGE) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm index c79e4c6efc3..58ecf89201c 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm @@ -504,12 +504,12 @@ user.update_sight() /datum/antagonist/bloodsucker/proc/remove_invalid_quirks(mob/target) - var/datum/quirk/bad_quirk = owner.current.get_quirk(/datum/quirk/sol_weakness) + var/datum/quirk/bad_quirk = owner.current.get_quirk(/datum/quirk/hemophage) if(!bad_quirk) return // silently remove the quirk if it's not valid bad_quirk.remove_from_current_holder(TRUE) - owner.current.remove_quirk(/datum/quirk/sol_weakness) + owner.current.remove_quirk(/datum/quirk/hemophage) /// Name shown on antag list /datum/antagonist/bloodsucker/antag_listing_name() diff --git a/modular_zubbers/code/modules/designs/limbgrower_designs.dm b/modular_zubbers/code/modules/designs/limbgrower_designs.dm index cbce8467627..7892a16c493 100644 --- a/modular_zubbers/code/modules/designs/limbgrower_designs.dm +++ b/modular_zubbers/code/modules/designs/limbgrower_designs.dm @@ -4,7 +4,7 @@ build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/blood = 10) build_path = /obj/item/organ/heart/hemophage - category = list(SPECIES_HEMOPHAGE) + category = list("hemophage") /datum/design/hemophage_liver name = "Corrupted Liver" @@ -12,7 +12,7 @@ build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/blood = 10) build_path = /obj/item/organ/liver/hemophage - category = list(SPECIES_HEMOPHAGE) + category = list("hemophage") /datum/design/hemophage_stomach name = "Corrupted Stomach" @@ -20,7 +20,7 @@ build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/blood = 10) build_path = /obj/item/organ/stomach/hemophage - category = list(SPECIES_HEMOPHAGE) + category = list("hemophage") /datum/design/hemophage_tongue name = "Corrupted Tongue" @@ -28,7 +28,7 @@ build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 10, /datum/reagent/blood = 10) build_path = /obj/item/organ/tongue/hemophage - category = list(SPECIES_HEMOPHAGE) + category = list("hemophage") /obj/item/disk/design_disk/limbs/hemophage name = "Hemophage Organ Design Disk" @@ -137,7 +137,7 @@ /obj/machinery/limbgrower/Initialize(mapload) categories += list( - SPECIES_HEMOPHAGE, + "hemophage", SPECIES_TAJARAN, SPECIES_TESHARI ) diff --git a/modular_zubbers/code/modules/mob/living/carbon/human/species_types/hemophage_species.dm b/modular_zubbers/code/modules/mob/living/carbon/human/species_types/hemophage_species.dm deleted file mode 100644 index ffe0a6aa624..00000000000 --- a/modular_zubbers/code/modules/mob/living/carbon/human/species_types/hemophage_species.dm +++ /dev/null @@ -1,37 +0,0 @@ -/datum/species/hemophage - inherent_biotypes = MOB_HUMANOID | MOB_ORGANIC | MOB_VAMPIRIC - bodypart_overrides = list( - BODY_ZONE_HEAD = /obj/item/bodypart/head/mhuman, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/mhuman, - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mhuman, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mhuman, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mhuman, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mhuman, - ) - language_prefs_whitelist = list(/datum/language/monkey) - -// MUTANT COLOR OVERRIDE - -/datum/species/hemophage/New() - inherent_traits |= list( - TRAIT_MUTANT_COLORS, - ) - . = ..() - -// BLOODSUCKER SPECIFIC FIXES -/datum/species/hemophage/on_bloodsucker_gain(mob/living/carbon/human/target) - to_chat(target, span_warning("Your hemophage features have been removed, your nature as a bloodsucker abates the hemophage virus.")) - // Without this any new organs would get corrupted again. - target.RemoveElement(/datum/element/tumor_corruption) - for(var/obj/item/organ/organ in target.organs) - organ.RemoveElement(/datum/element/tumor_corruption) - humanize_organs(target) - -/datum/species/hemophage/on_bloodsucker_loss(mob/living/carbon/human/target) - normalize_organs(target) - - -/datum/species/hemophage/get_species_description() - return list("Oftentimes feared or pushed out of society for the predatory nature of their condition, \ - Hemophages are typically mixed around various Frontier populations, keeping their true nature hidden while \ - reaping both the benefits and easy access to prey, enjoying unpursued existences on the Frontier.",) diff --git a/modular_zubbers/code/modules/reagents/chemistry/reagents/Recipes/others.dm b/modular_zubbers/code/modules/reagents/chemistry/reagents/Recipes/others.dm index e96d7a3692e..0860fd0fe39 100644 --- a/modular_zubbers/code/modules/reagents/chemistry/reagents/Recipes/others.dm +++ b/modular_zubbers/code/modules/reagents/chemistry/reagents/Recipes/others.dm @@ -58,11 +58,6 @@ required_reagents = list(/datum/reagent/consumable/ethanol/laval_spit = 3, /datum/reagent/drug/space_drugs = 2, /datum/reagent/smart_foaming_agent = 2, /datum/reagent/mutationtoxin = 1) required_temp = 320 -/datum/chemical_reaction/transformative_virus/hemophage - results = list(/datum/reagent/transformative_virus/hemophage = 1) - required_reagents = list(/datum/reagent/consumable/ethanol/velvet_kiss = 3, /datum/reagent/blood = 2, /datum/reagent/consumable/ethanol/wine = 2, /datum/reagent/mutationtoxin = 1) - required_temp = 320 - /datum/chemical_reaction/mutationtoxin/insect results = list(/datum/reagent/mutationtoxin/insect = 1) required_reagents = list(/datum/reagent/consumable/ethanol/bug_zapper = 3, /datum/reagent/consumable/honey = 3, /datum/reagent/medicine/mine_salve = 3, /datum/reagent/mutationtoxin = 1) diff --git a/modular_zubbers/code/modules/reagents/chemistry/reagents/other_reagents.dm b/modular_zubbers/code/modules/reagents/chemistry/reagents/other_reagents.dm index 830d6882d66..5dbdb907fd6 100644 --- a/modular_zubbers/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/modular_zubbers/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -166,14 +166,6 @@ "Rock begins growing on your skin. Somehow it does not feel heavy." = MUT_MSG_EXTENDED, "The stony growths completely encase you. " = MUT_MSG_ABOUT2TURN) -/datum/reagent/transformative_virus/hemophage - name = "Hemophage Corruption Virus" - description = "A hemophage virus." - color = BLOOD_COLOR_RED - taste_description = "blood" - chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_NO_RANDOM_RECIPE - transformation_disease =/datum/disease/transformation_race/hemophage - /datum/reagent/mutationtoxin/insect name = "Insect Mutation Toxin" description = "An insect toxin." diff --git a/modular_zubbers/code/modules/reagents/drink_reagents.dm b/modular_zubbers/code/modules/reagents/drink_reagents.dm index 0b75e027d9f..90b48ad2a84 100644 --- a/modular_zubbers/code/modules/reagents/drink_reagents.dm +++ b/modular_zubbers/code/modules/reagents/drink_reagents.dm @@ -37,7 +37,7 @@ if(!(methods & INGEST)) return var/obj/item/organ/stomach/stomach = affected_mob.get_organ_slot(ORGAN_SLOT_STOMACH) - if(!istype(stomach) || !ishemophage(affected_mob) || reac_volume <= 0) + if(!istype(stomach) || !affected_mob.has_quirk(/datum/quirk/hemophage) || reac_volume <= 0) return affected_mob.blood_volume = min(affected_mob.blood_volume + reac_volume, BLOOD_VOLUME_MAXIMUM) @@ -63,7 +63,7 @@ if(!(methods & INGEST)) return var/obj/item/organ/stomach/stomach = affected_mob.get_organ_slot(ORGAN_SLOT_STOMACH) - if(!istype(stomach) || !ishemophage(affected_mob) || reac_volume <= 0) + if(!istype(stomach) || !affected_mob.has_quirk(/datum/quirk/hemophage) || reac_volume <= 0) return affected_mob.blood_volume = min(affected_mob.blood_volume + reac_volume, BLOOD_VOLUME_MAXIMUM) @@ -89,7 +89,7 @@ if(!(methods & INGEST)) return var/obj/item/organ/stomach/stomach = affected_mob.get_organ_slot(ORGAN_SLOT_STOMACH) - if(!istype(stomach) || !ishemophage(affected_mob) || reac_volume <= 0) + if(!istype(stomach) || !affected_mob.has_quirk(/datum/quirk/hemophage) || reac_volume <= 0) return affected_mob.blood_volume = min(affected_mob.blood_volume + reac_volume, BLOOD_VOLUME_MAXIMUM) @@ -116,7 +116,7 @@ if(!(methods & INGEST)) return var/obj/item/organ/stomach/stomach = affected_mob.get_organ_slot(ORGAN_SLOT_STOMACH) - if(!istype(stomach) || !ishemophage(affected_mob) || reac_volume <= 0) + if(!istype(stomach) || !affected_mob.has_quirk(/datum/quirk/hemophage) || reac_volume <= 0) return affected_mob.blood_volume = min(affected_mob.blood_volume + reac_volume, BLOOD_VOLUME_MAXIMUM) @@ -143,7 +143,7 @@ if(!(methods & INGEST)) return var/obj/item/organ/stomach/stomach = affected_mob.get_organ_slot(ORGAN_SLOT_STOMACH) - if(!istype(stomach) || !ishemophage(affected_mob) || reac_volume <= 0) + if(!istype(stomach) || !affected_mob.has_quirk(/datum/quirk/hemophage) || reac_volume <= 0) return affected_mob.blood_volume = min(affected_mob.blood_volume + reac_volume, BLOOD_VOLUME_MAXIMUM) @@ -170,7 +170,7 @@ if(!(methods & INGEST)) return var/obj/item/organ/stomach/stomach = affected_mob.get_organ_slot(ORGAN_SLOT_STOMACH) - if(!istype(stomach) || !ishemophage(affected_mob) || reac_volume <= 0) + if(!istype(stomach) || !affected_mob.has_quirk(/datum/quirk/hemophage) || reac_volume <= 0) return affected_mob.blood_volume = min(affected_mob.blood_volume + reac_volume, BLOOD_VOLUME_MAXIMUM) @@ -210,7 +210,7 @@ if(!(methods & INGEST)) return var/obj/item/organ/stomach/stomach = affected_mob.get_organ_slot(ORGAN_SLOT_STOMACH) - if(!istype(stomach) || !ishemophage(affected_mob) || reac_volume <= 0) + if(!istype(stomach) || !affected_mob.has_quirk(/datum/quirk/hemophage) || reac_volume <= 0) return affected_mob.blood_volume = min(affected_mob.blood_volume + reac_volume, BLOOD_VOLUME_MAXIMUM) @@ -256,7 +256,7 @@ if(!(methods & INGEST)) return var/obj/item/organ/stomach/stomach = affected_mob.get_organ_slot(ORGAN_SLOT_STOMACH) - if(!istype(stomach) || !ishemophage(affected_mob) || reac_volume <= 0) + if(!istype(stomach) || !affected_mob.has_quirk(/datum/quirk/hemophage) || reac_volume <= 0) return affected_mob.blood_volume = min(affected_mob.blood_volume + reac_volume, BLOOD_VOLUME_MAXIMUM) diff --git a/tgstation.dme b/tgstation.dme index f5425835af3..e258f28c245 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -8125,7 +8125,6 @@ #include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_actions.dm" #include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_moods.dm" #include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_organs.dm" -#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_species.dm" #include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_status_effects.dm" #include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_tumor.dm" #include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species\hemophage\tumor_corruption.dm" @@ -9208,7 +9207,6 @@ #include "modular_zubbers\code\datums\quirks\negative_quirks\permanent_limp.dm" #include "modular_zubbers\code\datums\quirks\negative_quirks\resilient_traumas.dm" #include "modular_zubbers\code\datums\quirks\negative_quirks\sensitive_snout.dm" -#include "modular_zubbers\code\datums\quirks\negative_quirks\sol_weakness.dm" #include "modular_zubbers\code\datums\quirks\neutral_quirks\bald.dm" #include "modular_zubbers\code\datums\quirks\neutral_quirks\body_morpher.dm" #include "modular_zubbers\code\datums\quirks\neutral_quirks\death_consequences.dm" @@ -9217,6 +9215,7 @@ #include "modular_zubbers\code\datums\quirks\neutral_quirks\entombed.dm" #include "modular_zubbers\code\datums\quirks\neutral_quirks\equipping.dm" #include "modular_zubbers\code\datums\quirks\neutral_quirks\food.dm" +#include "modular_zubbers\code\datums\quirks\neutral_quirks\hemophage.dm" #include "modular_zubbers\code\datums\quirks\neutral_quirks\hungry.dm" #include "modular_zubbers\code\datums\quirks\neutral_quirks\hydrophilic.dm" #include "modular_zubbers\code\datums\quirks\neutral_quirks\hypnotic.dm" @@ -9224,7 +9223,6 @@ #include "modular_zubbers\code\datums\quirks\neutral_quirks\nameless.dm" #include "modular_zubbers\code\datums\quirks\neutral_quirks\perch.dm" #include "modular_zubbers\code\datums\quirks\neutral_quirks\pet_owner.dm" -#include "modular_zubbers\code\datums\quirks\neutral_quirks\pseudo_respiration.dm" #include "modular_zubbers\code\datums\quirks\neutral_quirks\seamless_clothes.dm" #include "modular_zubbers\code\datums\quirks\neutral_quirks\unblinking.dm" #include "modular_zubbers\code\datums\quirks\neutral_quirks\waddle.dm" @@ -9241,7 +9239,6 @@ #include "modular_zubbers\code\datums\quirks\positive_quirks\floating_items.dm" #include "modular_zubbers\code\datums\quirks\positive_quirks\life_savings.dm" #include "modular_zubbers\code\datums\quirks\positive_quirks\light_step_override.dm" -#include "modular_zubbers\code\datums\quirks\positive_quirks\masquerade_food.dm" #include "modular_zubbers\code\datums\quirks\positive_quirks\poster_boy_override.dm" #include "modular_zubbers\code\datums\quirks\positive_quirks\signer_override.dm" #include "modular_zubbers\code\datums\quirks\positive_quirks\spacer_override.dm" @@ -10017,7 +10014,6 @@ #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\flypeople.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\ghost.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\golems.dm" -#include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\hemophage_species.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\humanoid.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\humanoid_overrides.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\species_types\humans.dm" diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/bubbers/hemophage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/bubbers/hemophage.tsx new file mode 100644 index 00000000000..a0238d5fcf0 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/bubbers/hemophage.tsx @@ -0,0 +1,22 @@ +import { CheckboxInput, type FeatureToggle } from '../../base'; + +export const masquerade_toggle: FeatureToggle = { + name: 'Enable/Disable Masquerade', + description: + 'If enabled, you will be able to eat food, albeit without nutritional value.', + component: CheckboxInput, +}; + +export const sol_weakness_toggle: FeatureToggle = { + name: 'Enable/Disable Sol Weakness', + description: + 'If enabled, you will have to hide in a coffin or a closet during the day, or risk burning to a crisp.\ + Thankfully, you will also heal your wounds at half cost in a coffin.', + component: CheckboxInput, +}; + +export const pseudo_respiration_toggle: FeatureToggle = { + name: 'Enable/Disable Pseudo-Respiration', + description: 'If enabled, you will be able to breathe once again.', + component: CheckboxInput, +};