From 8d733c4f2d6b70e5ee9f382901441a3a5b928a02 Mon Sep 17 00:00:00 2001 From: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Date: Tue, 8 Oct 2024 16:27:13 +1100 Subject: [PATCH] Adds the Fundamentally Evil quirk. Interactions with Empathy and Honorbound. (#87045) ## About The Pull Request Adds the Fundamentally Evil quirk. The quirk does nothing in of itself. If an Empath examines you, they will be shaken up by the fact that you are totally evil. Mindreaders can literally see that you're evil. If they're ALSO evil, it gives a gives a unique message. Honorbound chaplains can freely attack you without first declaring you evil. You are already evil. There is no outward tells for this fact, but if the chaplain pays attention to the medical records, you might have a problem on your hands. You are significantly harmed by holy water and holy explosions. So don't drink holy water if you can help it. ## Why It's Good For The Game I just think it'd be funny to have some crew, for whatever reason, be fully committed to being evil for no reason other than it is funny to bother empaths. I want a chaplain to come to the realization that I'm evil and see what happens. ## Changelog :cl: add: Fundamentally Evil quirk. You might act normal, but you know deep down that you totally don't give a shit about anyone but yourself. Empaths better watch out. /:cl: --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com> # Conflicts: # code/controllers/subsystem/processing/quirks.dm --- code/__DEFINES/traits/declarations.dm | 1 + code/_globalvars/traits/_traits.dm | 1 + code/controllers/subsystem/processing/quirks.dm | 1 + code/datums/mood_events/generic_negative_events.dm | 5 +++++ code/datums/mutations/antenna.dm | 5 +++++ code/datums/quirks/neutral_quirks/evil.dm | 12 ++++++++++++ code/modules/mob/living/carbon/examine.dm | 4 ++++ .../reagents/chemistry/reagents/other_reagents.dm | 10 ++++++++++ .../reagents/chemistry/recipes/pyrotechnics.dm | 12 ++++++------ .../modules/religion/honorbound/honorbound_trauma.dm | 2 ++ tgstation.dme | 1 + 11 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 code/datums/quirks/neutral_quirks/evil.dm diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 2a04228cbab..5a1cfb896ea 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -838,6 +838,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_MUSICIAN "musician" #define TRAIT_LIGHT_DRINKER "light_drinker" #define TRAIT_EMPATH "empath" +#define TRAIT_EVIL "evil" #define TRAIT_FRIENDLY "friendly" #define TRAIT_GRABWEAKNESS "grab_weakness" #define TRAIT_SNOB "snob" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 6cd4e326d04..edfbd41d147 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -232,6 +232,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_EMOTEMUTE" = TRAIT_EMOTEMUTE, "TRAIT_EMPATH" = TRAIT_EMPATH, "TRAIT_ENTRAILS_READER" = TRAIT_ENTRAILS_READER, + "TRAIT_EVIL" = TRAIT_EVIL, "TRAIT_EXAMINE_DEEPER_FISH" = TRAIT_EXAMINE_DEEPER_FISH, "TRAIT_EXAMINE_FISH" = TRAIT_EXAMINE_FISH, "TRAIT_EXAMINE_FISHING_SPOT" = TRAIT_EXAMINE_FISHING_SPOT, diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 305eb0a9062..e12711f5a27 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -26,6 +26,7 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list( list(/datum/quirk/photophobia, /datum/quirk/nyctophobia), list(/datum/quirk/item_quirk/settler, /datum/quirk/freerunning), list(/datum/quirk/numb, /datum/quirk/selfaware), + list(/datum/quirk/empath, /datum/quirk/evil), //SKYRAT EDIT ADDITION BEGIN list(/datum/quirk/equipping/nerve_staple, /datum/quirk/nonviolent), list(/datum/quirk/equipping/nerve_staple, /datum/quirk/item_quirk/nearsighted), diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 695bf439496..30999a874b7 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -501,3 +501,8 @@ // Felinids apparently hate being hit over the head with cardboard if(isfelinid(owner)) mood_change = -2 + +/datum/mood_event/encountered_evil + description = "I didn't want to believe it, but there are people out there that are genuinely evil." + mood_change = -4 + timeout = 1 MINUTES diff --git a/code/datums/mutations/antenna.dm b/code/datums/mutations/antenna.dm index 5684b20c454..7730ab16d9c 100644 --- a/code/datums/mutations/antenna.dm +++ b/code/datums/mutations/antenna.dm @@ -96,6 +96,11 @@ to_chat(owner, span_warning("You plunge into your mind... Yep, it's your mind.")) return + if(HAS_TRAIT(cast_on, TRAIT_EVIL)) + to_chat(owner, span_warning("As you reach into [cast_on]'s mind, \ + you feel the overwhelming emptiness within. A truly evil being. \ + [HAS_TRAIT(owner, TRAIT_EVIL) ? "It's nice to find someone who is like-minded." : "What is wrong with this person?"]")) + to_chat(owner, span_boldnotice("You plunge into [cast_on]'s mind...")) if(prob(20)) // chance to alert the read-ee diff --git a/code/datums/quirks/neutral_quirks/evil.dm b/code/datums/quirks/neutral_quirks/evil.dm new file mode 100644 index 00000000000..6753a7d034c --- /dev/null +++ b/code/datums/quirks/neutral_quirks/evil.dm @@ -0,0 +1,12 @@ +/datum/quirk/evil + name = "Fundamentally Evil" + desc = "Where you would have a soul is but an ink-black void. While you are committed to maintaining your social standing, \ + anyone who stares too long into your cold, uncaring eyes will know the truth. You are truly evil. There is nothing \ + wrong with you. You chose to be evil, committed to it. Your ambitions come first above all." + icon = FA_ICON_HAND_MIDDLE_FINGER + value = 0 + mob_trait = TRAIT_EVIL + gain_text = span_notice("You shed what little remains of your humanity. You have work to do.") + lose_text = span_notice("You suddenly care more about others and their needs.") + medical_record_text = "Patient has passed all our social fitness tests with flying colours, but had trouble on the empathy tests." + mail_goodies = list(/obj/item/food/grown/citrus/lemon) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index 10417b55a94..c5e597818a4 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -219,6 +219,10 @@ . += "[t_He] [t_is] flushed and wheezing." if (bodytemperature < dna.species.bodytemp_cold_damage_limit) . += "[t_He] [t_is] shivering." + if(HAS_TRAIT(src, TRAIT_EVIL)) + . += "[t_His] eyes radiate with a unfeeling, cold detachment. There is nothing but darkness within [t_his] soul." + living_user.add_mood_event("encountered_evil", /datum/mood_event/encountered_evil) + living_user.set_jitter_if_lower(15 SECONDS) if(HAS_TRAIT(user, TRAIT_SPIRITUAL) && mind?.holy_role) . += "[t_He] [t_has] a holy aura about [t_him]." diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index b1758086444..f1a19ef7234 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -405,6 +405,7 @@ data["deciseconds_metabolized"] += (seconds_per_tick * 1 SECONDS * REM) affected_mob.adjust_jitter_up_to(4 SECONDS * REM * seconds_per_tick, 20 SECONDS) + var/need_mob_update = FALSE if(IS_CULTIST(affected_mob)) for(var/datum/action/innate/cult/blood_magic/BM in affected_mob.actions) @@ -425,14 +426,23 @@ affected_mob.Unconscious(12 SECONDS) to_chat(affected_mob, span_cult_large("[pick("Your blood is your bond - you are nothing without it", "Do not forget your place", \ "All that power, and you still fail?", "If you cannot scour this poison, I shall scour your meager life!")].")) + else if(HAS_TRAIT(affected_mob, TRAIT_EVIL) && SPT_PROB(25, seconds_per_tick)) //Congratulations, your committment to evil has now made holy water a deadly poison to you! + if(!IS_CULTIST(affected_mob) || affected_mob.mind?.holy_role != HOLY_ROLE_PRIEST) + affected_mob.emote("scream") + need_mob_update += affected_mob.adjustFireLoss(3 * REM * seconds_per_tick, updating_health = FALSE) if(data["deciseconds_metabolized"] >= (1 MINUTES)) // 24 units if(IS_CULTIST(affected_mob)) affected_mob.mind.remove_antag_datum(/datum/antagonist/cult) affected_mob.Unconscious(10 SECONDS) + else if(HAS_TRAIT(affected_mob, TRAIT_EVIL)) //At this much holy water, you're probably going to fucking melt. good luck + if(!IS_CULTIST(affected_mob) || affected_mob.mind?.holy_role != HOLY_ROLE_PRIEST) + need_mob_update += affected_mob.adjustFireLoss(10 * REM * seconds_per_tick, updating_health = FALSE) affected_mob.remove_status_effect(/datum/status_effect/jitter) affected_mob.remove_status_effect(/datum/status_effect/speech/stutter) holder?.remove_reagent(type, volume) // maybe this is a little too perfect and a max() cap on the statuses would be better?? + if(need_mob_update) + return UPDATE_MOB_HEALTH /datum/reagent/water/holywater/expose_turf(turf/exposed_turf, reac_volume) . = ..() diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 69dda419d7c..0814834b25a 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -178,12 +178,12 @@ ghostie.apply_status_effect(/datum/status_effect/incapacitating/paralyzed/revenant, 2 SECONDS) ghostie.apply_status_effect(/datum/status_effect/revenant/revealed, 10 SECONDS) ghostie.adjust_health(50) - for(var/mob/living/carbon/C in get_hearers_in_view(effective_size,T)) - if(IS_CULTIST(C)) - to_chat(C, span_userdanger("The divine explosion sears you!")) - C.Paralyze(40) - C.adjust_fire_stacks(5) - C.ignite_mob() + for(var/mob/living/carbon/evil_motherfucker in get_hearers_in_view(effective_size,T)) + if(IS_CULTIST(evil_motherfucker) || HAS_TRAIT(evil_motherfucker, TRAIT_EVIL)) + to_chat(evil_motherfucker, span_userdanger("The divine explosion sears you!")) + evil_motherfucker.Paralyze(40) + evil_motherfucker.adjust_fire_stacks(5) + evil_motherfucker.ignite_mob() ..() /datum/chemical_reaction/gunpowder diff --git a/code/modules/religion/honorbound/honorbound_trauma.dm b/code/modules/religion/honorbound/honorbound_trauma.dm index 6bc0879b125..ed4ecde1592 100644 --- a/code/modules/religion/honorbound/honorbound_trauma.dm +++ b/code/modules/religion/honorbound/honorbound_trauma.dm @@ -73,6 +73,8 @@ guilty(attacked_mob, "for blasphemous magicks!") if(HAS_TRAIT(attacked_mob, TRAIT_CULT_HALO)) guilty(attacked_mob, "for blasphemous worship!") + if(HAS_TRAIT(attacked_mob, TRAIT_EVIL)) + guilty(attacked_mob, "an almost fanatical commitment to EEEEVIL!") if(attacked_mob.mind) var/datum/mind/guilty_conscience = attacked_mob.mind if(guilty_conscience.has_antag_datum(/datum/antagonist/abductor)) diff --git a/tgstation.dme b/tgstation.dme index 7cd2ddfbf85..19209259ad8 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1898,6 +1898,7 @@ #include "code\datums\quirks\neutral_quirks\borg_ready.dm" #include "code\datums\quirks\neutral_quirks\colorist.dm" #include "code\datums\quirks\neutral_quirks\deviant_tastes.dm" +#include "code\datums\quirks\neutral_quirks\evil.dm" #include "code\datums\quirks\neutral_quirks\extrovert.dm" #include "code\datums\quirks\neutral_quirks\foreigner.dm" #include "code\datums\quirks\neutral_quirks\gamer.dm"