diff --git a/code/__SPLURTCODE/DEFINES/traits.dm b/code/__SPLURTCODE/DEFINES/traits.dm index 3274bba85986..9ede9736c22f 100644 --- a/code/__SPLURTCODE/DEFINES/traits.dm +++ b/code/__SPLURTCODE/DEFINES/traits.dm @@ -25,6 +25,7 @@ #define TRAIT_PHARMA "hepatic_pharmacokinesis" #define TRAIT_CHOKE_SLUT "choke_slut" #define TRAIT_BLOODFLEDGE "bloodfledge" +#define TRAIT_BLOODFLEDGE_LITE "bloodfledge_lite" #define TRAIT_INCUBUS "incubus" #define TRAIT_SUCCUBUS "succubus" #define TRAIT_ARACHNID "arachnid" diff --git a/modular_splurt/code/controllers/subsystem/processing/quirks.dm b/modular_splurt/code/controllers/subsystem/processing/quirks.dm index 6f25dda079b6..0dd5090c0d63 100644 --- a/modular_splurt/code/controllers/subsystem/processing/quirks.dm +++ b/modular_splurt/code/controllers/subsystem/processing/quirks.dm @@ -21,4 +21,16 @@ // BLOCKED: Mechanic // Bloodsuckers have NO_THIRST trait. list("Thirsty","Bloodsucker Fledgling"), + + // BLOCKED: Duplicate, mechanic + // This is a lite version of the same quirk. + list("Sanguine Metabolism","Bloodsucker Fledgling"), + + // BLOCKED: Mechanic + // Bloodsuckers have NO_THIRST trait. + list("Sanguine Metabolism","Thirsty"), + + // BLOCKED: Thematic, mechanic, game lore. + // Bloodsuckers cannot interact with Hallowed users. + list("Sanguine Metabolism","Hallowed") )) diff --git a/modular_splurt/code/datums/traits/negative.dm b/modular_splurt/code/datums/traits/negative.dm index ad7d617a3422..889f9c701596 100644 --- a/modular_splurt/code/datums/traits/negative.dm +++ b/modular_splurt/code/datums/traits/negative.dm @@ -239,3 +239,4 @@ if(H) var/datum/physiology/P = H.physiology P.thirst_mod /= 2 + diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm index fdef54a3be29..8f19814284c0 100644 --- a/modular_splurt/code/datums/traits/neutral.dm +++ b/modular_splurt/code/datums/traits/neutral.dm @@ -731,3 +731,100 @@ gain_text = span_lewd("You feel like kissing someone...") lose_text = span_notice("You don't feel like kissing someone anymore...") medical_record_text = "Patient seems to demonstrate an extraordinary liking in kissing." + +// Lite version of Bloodflege +// Removes all special powers +/datum/quirk/bloodfledge_lite + name = "Sanguine Metabolism" + desc = "You are a non-magical Bloodsucker Fledgling, with no special powers. Only blood will sate your hungers, and holy energies will cause your flesh to char." + value = 0 + medical_record_text = "Patient exhibits an unusually weak sanguine curse." + mob_trait = TRAIT_BLOODFLEDGE_LITE + gain_text = span_notice("You feel a sanguine thirst.") + lose_text = span_notice("You feel the sanguine thirst fade away.") + +/datum/quirk/bloodfledge_lite/add() + // Define quirk mob + var/mob/living/carbon/human/quirk_mob = quirk_holder + + // Add quirk traits + ADD_TRAIT(quirk_mob,TRAIT_NO_PROCESS_FOOD,ROUNDSTART_TRAIT) + ADD_TRAIT(quirk_mob,TRAIT_NOTHIRST,ROUNDSTART_TRAIT) + + // Add full trait to preserve bite, holy weakness, and examine functionality + ADD_TRAIT(quirk_mob,TRAIT_BLOODFLEDGE,ROUNDSTART_TRAIT) + + // Lite version does not set skin tone or grant the language + + // Register examine text + RegisterSignal(quirk_holder, COMSIG_PARENT_EXAMINE, PROC_REF(quirk_examine_bloodfledge_lite)) + +/datum/quirk/bloodfledge_lite/post_add() + // Define quirk mob + var/mob/living/carbon/human/quirk_mob = quirk_holder + + // Define and grant ability Bite + var/datum/action/cooldown/bloodfledge/bite/act_bite = new + act_bite.Grant(quirk_mob) + + // Lite version does not grant the revive ability + +/datum/quirk/bloodfledge_lite/remove() + // Define quirk mob + var/mob/living/carbon/human/quirk_mob = quirk_holder + + // Remove quirk traits + REMOVE_TRAIT(quirk_mob, TRAIT_NO_PROCESS_FOOD, ROUNDSTART_TRAIT) + REMOVE_TRAIT(quirk_mob, TRAIT_NOTHIRST, ROUNDSTART_TRAIT) + REMOVE_TRAIT(quirk_mob, TRAIT_BLOODFLEDGE, ROUNDSTART_TRAIT) + + // Remove quirk ability action datums + var/datum/action/cooldown/bloodfledge/bite/act_bite = locate() in quirk_mob.actions + act_bite.Remove(quirk_mob) + + // Unregister examine text + UnregisterSignal(quirk_holder, COMSIG_PARENT_EXAMINE) + +/datum/quirk/bloodfledge_lite/proc/quirk_examine_bloodfledge_lite(atom/examine_target, mob/living/carbon/human/examiner, list/examine_list) + SIGNAL_HANDLER + + // Check if human examiner exists + if(!istype(examiner)) + return + + // Check if examiner is a non-Fledgling + if(!isbloodfledge(examiner)) + // Return with no effects + return + + // Check if examiner is dumb + if(HAS_TRAIT(examiner, TRAIT_DUMB)) + // Return with no effects + return + + // Define quirk mob + var/mob/living/carbon/human/quirk_mob = quirk_holder + + // Define hunger texts + var/examine_hunger + + // Check hunger levels + switch(quirk_mob.nutrition) + // Hungry + if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY) + examine_hunger = "[quirk_holder.p_they(TRUE)] [quirk_holder.p_are()] blood starved!" + + // Starving + if(0 to NUTRITION_LEVEL_STARVING) + examine_hunger = "[quirk_holder.p_they(TRUE)] [quirk_holder.p_are()] in dire need of blood!" + + // Invalid hunger + else + // Return with no message + return + + // Add detection text + examine_list += span_info("[quirk_holder.p_their(TRUE)] hunger allows you to identify [quirk_holder.p_them()] as a lesser Bloodsucker Fledgling!") + + // Add hunger text + examine_list += span_warning(examine_hunger) diff --git a/modular_splurt/code/game/objects/structures/crates_lockers/crates.dm b/modular_splurt/code/game/objects/structures/crates_lockers/crates.dm index bf2c2ae7c346..0512ebb32cf2 100644 --- a/modular_splurt/code/game/objects/structures/crates_lockers/crates.dm +++ b/modular_splurt/code/game/objects/structures/crates_lockers/crates.dm @@ -19,6 +19,12 @@ for(var/mob/living/carbon/coffin_user in contents) // Check for bloodfledge if(isbloodfledge(coffin_user)) + // Check for lite version + if (HAS_TRAIT(coffin_user, TRAIT_BLOODFLEDGE_LITE)) + // Warn user and continue + to_chat(coffin_user, span_warning("Your body lacks a proper sanguine connection! [src] does not respond.")) + continue + // Check for synthetic if(coffin_user.mob_biotypes && (coffin_user.mob_biotypes & MOB_ROBOTIC)) // Warn user and continue @@ -50,6 +56,11 @@ for(var/mob/living/carbon/coffin_user in coffin_turf.contents) // Check for bloodfledge if(isbloodfledge(coffin_user)) + // Check for lite version + if (HAS_TRAIT(coffin_user, TRAIT_BLOODFLEDGE_LITE)) + // Do nothing + continue + // Define quirk entry var/datum/quirk/bloodfledge/quirk_target = locate() in coffin_user.roundstart_quirks