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"