From 64eae49042dea956b46ae013a0c96a891c026a7f Mon Sep 17 00:00:00 2001 From: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Date: Wed, 21 Jun 2023 14:37:18 +1000 Subject: [PATCH] Replaces the Reaper Scythe with the Vorpal Scythe (also the Morbid trait) (#75948) adds the Vorpal Scythe, a special chaplain null rod variant, replacing the Reaper Scythe, a not so special null rod variant. When you choose the vorpal scythe, it comes as a shard that you implant into your arm, similar to a cursed katana. Once implanted, you can draw it at any time like an arm implant. However, sheathing it again presents some problems. (Also, implanting the organ gives you ``TRAIT_MORBID``, which I'll explain in a bit) The Vorpal Scythe has 10 force, one of the weakest null rod variants for force that isn't a joke null rod. However, it has exceptional armor pen and also has 2 tiles of reach. So quite unique. It also has a special beheading ability when you right-click someone. This borrows some code from amputation shears, functioning pretty similarly, except with a few additional ways to speed up the action and restrictions. (It takes 15 seconds baseline to behead someone standing and conscious, and speeds up or slows down based on factors such as incapacitation and whether or not our scythe is already empowered) When you successfully behead someone with a mind, the vorpal scythe gains 20 force and can be safely stowed and drawn for 2 minutes. Performing more death knells like this will reset the timer. If it has not performed its 'death knell', or you haven't hit a living mob, then it will cause severe damage to you if you ever try and stow it (or its forced back into your arm). Just hitting a mob with the scythe will sate it for 4 minutes. Unless it is a non-player monkey. Horrible things. Just hitting mobs does not reset the timer on empowerment. What this means is that the chaplain may be more hesitant to simply draw their weapon on people. It also means that potentially, the chaplain will not always have magic immunity, since they may end up stowing the weapon away and be reluctant to draw it on a whim without either taking damage for sheathing it without hitting something, or dealing with having one less hand up until they can. While empowerment only happens when you behead mobs with a mind, beheading monkeyhumans and other mindless humans subtypes causes their heads to become haunted! It's mostly harmless and largely just SpOoKy. We don't want heads with actual players in them to go floating off to space. (Does not work on monkey heads for sanity reasons) When you have the Morbid trait, you think creepy stuff is cool and hate saving peoples lives. You get a mood boost from graverobbing, autopsies, dissections, amputations (including beheadings with the scythe and amputations with the shears) and revival surgery. However, you get a mood penalty when you tend wounds on the living, as well as a hefty penalty when you perform CPR or defibrillate someone. I was thinking Victor Frankenstein when I was choosing which actions had an associated moodlet, so anything that I might have missed would be appreciated. You also count as potentially cool with regards to haunted objects. Ghosts think you're neat. (Revenants probably will still kill you if they had the chance) --- _maps/templates/lazy_templates/ninja_den.dmm | 2 +- code/__DEFINES/traits.dm | 3 + code/_globalvars/phobias.dm | 2 +- code/_globalvars/traits.dm | 1 + code/datums/ai/hauntium/haunted_controller.dm | 2 +- .../mood_events/generic_positive_events.dm | 2 +- code/datums/mood_events/morbid_events.dm | 41 ++++ code/game/objects/items/defib.dm | 5 +- code/modules/clothing/outfits/ert.dm | 2 +- .../job_types/chaplain/chaplain_nullrod.dm | 47 ++-- .../chaplain/chaplain_vorpal_scythe.dm | 207 ++++++++++++++++++ .../lavalandruin_code/elephantgraveyard.dm | 5 +- .../mining/lavaland/necropolis_chests.dm | 2 +- code/modules/mining/lavaland/tendril_loot.dm | 17 +- code/modules/mob/living/carbon/human/human.dm | 5 +- .../mob_spawn/corpses/mining_corpses.dm | 2 +- code/modules/surgery/amputation.dm | 5 + code/modules/surgery/autopsy.dm | 3 + code/modules/surgery/dissection.dm | 3 + code/modules/surgery/healing.dm | 7 + code/modules/surgery/revival.dm | 3 + code/modules/surgery/tools.dm | 3 + icons/mob/inhands/64x64_lefthand.dmi | Bin 28260 -> 29517 bytes icons/mob/inhands/64x64_righthand.dmi | Bin 27408 -> 29318 bytes icons/obj/weapons/staff.dmi | Bin 892 -> 1118 bytes tgstation.dme | 2 + 26 files changed, 325 insertions(+), 46 deletions(-) create mode 100644 code/datums/mood_events/morbid_events.dm create mode 100644 code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm diff --git a/_maps/templates/lazy_templates/ninja_den.dmm b/_maps/templates/lazy_templates/ninja_den.dmm index e6265ddf130..db0e706d3fd 100644 --- a/_maps/templates/lazy_templates/ninja_den.dmm +++ b/_maps/templates/lazy_templates/ninja_den.dmm @@ -1881,7 +1881,7 @@ /area/centcom/central_command_areas/holding) "TS" = ( /obj/structure/rack, -/obj/item/nullrod/scythe/vibro{ +/obj/item/nullrod/vibro{ damtype = "stamina"; force = 30; pixel_x = 5; diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 9d2a2be1dad..afaf6b90f06 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -500,6 +500,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Projectile with this trait will always hit the defined zone of a struck living mob. #define TRAIT_ALWAYS_HIT_ZONE "always_hit_zone" +/// Mobs with this trait do care about a few grizzly things, such as digging up graves. They also really do not like bringing people back to life or tending wounds, but love autopies, dissections and amputations. +#define TRAIT_MORBID "morbid" + // METABOLISMS // Various jobs on the station have historically had better reactions // to various drinks and foodstuffs. Security liking donuts is a classic diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm index d9adb3c8bff..c539618e567 100644 --- a/code/_globalvars/phobias.dm +++ b/code/_globalvars/phobias.dm @@ -147,7 +147,7 @@ GLOBAL_LIST_INIT(phobia_objs, list( /obj/item/highfrequencyblade, /obj/item/katana, /obj/item/nullrod/claymore/katana, - /obj/item/nullrod/scythe/vibro, + /obj/item/nullrod/vibro, /obj/item/reagent_containers/cup/glass/bottle/sake, /obj/item/throwing_star, /obj/item/toy/katana, diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 9b82322e99a..fcf0ec974cb 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -186,6 +186,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_MIMING" = TRAIT_MIMING, "TRAIT_PREVENT_IMPLANT_AUTO_EXPLOSION" = TRAIT_PREVENT_IMPLANT_AUTO_EXPLOSION, "TRAIT_UNOBSERVANT" = TRAIT_UNOBSERVANT, + "TRAIT_MORBID" = TRAIT_MORBID, ), /obj/item/bodypart = list( "TRAIT_PARALYSIS" = TRAIT_PARALYSIS, diff --git a/code/datums/ai/hauntium/haunted_controller.dm b/code/datums/ai/hauntium/haunted_controller.dm index e8e80b41607..9eb18ed7f6c 100644 --- a/code/datums/ai/hauntium/haunted_controller.dm +++ b/code/datums/ai/hauntium/haunted_controller.dm @@ -28,7 +28,7 @@ var/haunt_equipper = TRUE if(isliving(equipper)) var/mob/living/possibly_cool = equipper - if(possibly_cool.mob_biotypes & MOB_UNDEAD) + if(possibly_cool.mob_biotypes & MOB_UNDEAD || HAS_TRAIT(possibly_cool, TRAIT_MORBID)) haunt_equipper = FALSE if(haunt_equipper) //You have now become one of the victims of the HAAAAUNTTIIIINNGGG OOOOOO~~~ diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index 9214c8e459e..4ae810866f8 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -364,7 +364,7 @@ description = "Swish! Nothing but net." mood_change = 2 timeout = 5 MINUTES - + /datum/mood_event/basketball_dunk description = "Slam dunk! Boom, shakalaka!" mood_change = 2 diff --git a/code/datums/mood_events/morbid_events.dm b/code/datums/mood_events/morbid_events.dm new file mode 100644 index 00000000000..731b62569cc --- /dev/null +++ b/code/datums/mood_events/morbid_events.dm @@ -0,0 +1,41 @@ +/* Morbid Mood Events - +Any mood events related to TRAIT_MORBID. +Ususally this is an inverse of a typically good, alturistic action (such as saving someones life), punishing it with a negative mood event, +and rewards typically antisocial/unsavory actions (such as graverobbing) with a positive mood event. +Intended to push a creepy, mad scientist/doctor vibe, or someone who is downright monstrous in nature. +*/ + +// Positive Events - We did something unsavory in the name of mad science + +/datum/mood_event/morbid_dismemberment + description = "Nothing quite as satisfying as a clean dismemberment!" + mood_change = 2 + timeout = 2 MINUTES + +/datum/mood_event/morbid_dissection_success + description = "I take pride in my work. Nobody can dissect a body quite like I can." + mood_change = 2 + timeout = 2 MINUTES + +/datum/mood_event/morbid_revival_success + description = "IT LIVES! AH HA HA HA HA!!" + mood_change = 6 + timeout = 8 MINUTES + +/datum/mood_event/morbid_graverobbing + description = "The dead have no need for possessions. I, on the other hand, am very much alive and very much in need." + mood_change = 2 + timeout = 2 MINUTES + +// Negative Events - We helped someone stay alive. + +/datum/mood_event/morbid_tend_wounds + description = "Why must I waste my talents on this trivial nonsense? Tending to breathers is a waste of effort." + mood_change = -2 + timeout = 2 MINUTES + +/datum/mood_event/morbid_saved_life + description = "I could have done so much more with their corpse than I could have saving their useless life. Dreadful." + mood_change = -6 + timeout = 2 MINUTES + diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 2adec293623..bc3f637935c 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -648,7 +648,10 @@ H.emote("gasp") H.set_jitter_if_lower(200 SECONDS) SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK) - user.add_mood_event("saved_life", /datum/mood_event/saved_life) + if(HAS_TRAIT(user, TRAIT_MORBID)) + user.add_mood_event("morbid_saved_life", /datum/mood_event/morbid_saved_life) + else + user.add_mood_event("saved_life", /datum/mood_event/saved_life) log_combat(user, H, "revived", defib) do_success() return diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 779f07bd096..ae3cba92eb3 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -181,7 +181,7 @@ name = "Inquisition Commander" back = /obj/item/mod/control/pre_equipped/responsory/inquisitory/commander - r_hand = /obj/item/nullrod/scythe/talking/chainsword + r_hand = /obj/item/nullrod/vibro/talking/chainsword backpack_contents = list( /obj/item/storage/box/survival = 1, ) diff --git a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm index a3d90cc63cc..79e11a850ee 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm @@ -41,6 +41,7 @@ rods[nullrod_type] = initial(nullrod_type.menu_description) //special non-nullrod subtyped shit rods[/obj/item/gun/ballistic/bow/divine/with_quiver] = "A divine bow and 10 quivered holy arrows." + rods[/obj/item/organ/internal/cyberimp/arm/shard/scythe] = "A bargain with something sinister." AddComponent(/datum/component/subtype_picker, rods, CALLBACK(src, PROC_REF(on_holy_weapon_picked))) /obj/item/nullrod/proc/on_holy_weapon_picked(obj/item/nullrod/holy_weapon_type) @@ -244,31 +245,7 @@ span_suicide("You try to impale yourself with [src], but it's TOO HOLY...")) return SHAME -/obj/item/nullrod/scythe - name = "reaper scythe" - desc = "Ask not for whom the bell tolls..." - icon = 'icons/obj/hydroponics/equipment.dmi' - icon_state = "scythe1" - inhand_icon_state = "scythe1" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY - armour_penetration = 35 - slot_flags = ITEM_SLOT_BACK - sharpness = SHARP_EDGED - attack_verb_continuous = list("chops", "slices", "cuts", "reaps") - attack_verb_simple = list("chop", "slice", "cut", "reap") - menu_description = "A sharp scythe which partially penetrates armor. Very effective at butchering bodies. Can be worn on the back." - -/obj/item/nullrod/scythe/Initialize(mapload) - . = ..() - AddComponent(/datum/component/butchering, \ - speed = 7 SECONDS, \ - effectiveness = 110, \ - ) - AddElement(/datum/element/bane, mob_biotypes = MOB_PLANT, damage_multiplier = 0.5, requires_combat_mode = FALSE) - -/obj/item/nullrod/scythe/vibro +/obj/item/nullrod/vibro name = "high frequency blade" desc = "Bad references are the DNA of the soul." icon = 'icons/obj/weapons/sword.dmi' @@ -277,12 +254,24 @@ worn_icon_state = "hfrequency0" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + w_class = WEIGHT_CLASS_BULKY + armour_penetration = 35 + slot_flags = ITEM_SLOT_BACK + sharpness = SHARP_EDGED attack_verb_continuous = list("chops", "slices", "cuts", "zandatsu's") attack_verb_simple = list("chop", "slice", "cut", "zandatsu") hitsound = 'sound/weapons/rapierhit.ogg' menu_description = "A sharp blade which partially penetrates armor. Very effective at butchering bodies. Can be worn on the back." -/obj/item/nullrod/scythe/spellblade +/obj/item/nullrod/vibro/Initialize(mapload) + . = ..() + AddComponent( + /datum/component/butchering, \ + speed = 7 SECONDS, \ + effectiveness = 110, \ + ) + +/obj/item/nullrod/vibro/spellblade name = "dormant spellblade" desc = "The blade grants the wielder nearly limitless power...if they can figure out how to turn it on, that is." icon = 'icons/obj/weapons/guns/magic.dmi' @@ -294,7 +283,7 @@ hitsound = 'sound/weapons/rapierhit.ogg' menu_description = "A sharp blade which partially penetrates armor. Very effective at butchering bodies. Can be worn on the back." -/obj/item/nullrod/scythe/talking +/obj/item/nullrod/vibro/talking name = "possessed blade" desc = "When the station falls into chaos, it's nice to have a friend by your side." icon = 'icons/obj/weapons/sword.dmi' @@ -308,11 +297,11 @@ hitsound = 'sound/weapons/rapierhit.ogg' menu_description = "A sharp blade which partially penetrates armor. Able to awaken a friendly spirit to provide guidance. Very effective at butchering bodies. Can be worn on the back." -/obj/item/nullrod/scythe/talking/Initialize(mapload) +/obj/item/nullrod/vibro/talking/Initialize(mapload) . = ..() AddComponent(/datum/component/spirit_holding) -/obj/item/nullrod/scythe/talking/chainsword +/obj/item/nullrod/vibro/talking/chainsword name = "possessed chainsaw sword" desc = "Suffer not a heretic to live." icon_state = "chainswordon" diff --git a/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm new file mode 100644 index 00000000000..2c30696b453 --- /dev/null +++ b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm @@ -0,0 +1,207 @@ +/*Vorpal Scythe, or the implant null rod that isn't as strong as other null rods up until you use it to behead someone with the special death knell attack. +If the scythe isn't empowered when you sheath it, you take a heap of damage and probably a wound!*/ + +#define SCYTHE_WEAK 0 +#define SCYTHE_SATED 1 +#define SCYTHE_EMPOWERED 2 + +/obj/item/organ/internal/cyberimp/arm/shard/scythe + name = "sinister shard" + desc = "This shard seems to be directly linked to some sinister entity. It might be your god! It also gives you a really horrible rash when you hold onto it for too long." + items_to_create = list(/obj/item/vorpalscythe) + +/obj/item/organ/internal/cyberimp/arm/shard/scythe/Insert(mob/living/carbon/receiver, special, drop_if_replaced) + . = ..() + ADD_TRAIT(receiver, TRAIT_MORBID, ORGAN_TRAIT) + +/obj/item/organ/internal/cyberimp/arm/shard/scythe/Retract() + var/obj/item/vorpalscythe/scythe = active_item + if(!scythe) + return FALSE + if(scythe.empowerment < SCYTHE_SATED) + to_chat(owner, span_userdanger("[scythe] tears into you for your unworthy display of arrogance!")) + playsound(owner, 'sound/magic/demon_attack1.ogg', 50, TRUE) + var/obj/item/bodypart/part = owner.get_holding_bodypart_of_item(scythe) + if(part) + part.receive_damage(brute = 25, wound_bonus = 10, sharpness = SHARP_EDGED) + return ..() + +/obj/item/vorpalscythe + name = "vorpal scythe" + desc = "Reap what you sow." + icon = 'icons/obj/weapons/staff.dmi' + icon_state = "vorpalscythe" + inhand_icon_state = "vorpalscythe" + worn_icon_state = null + lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi' + righthand_file = 'icons/mob/inhands/64x64_righthand.dmi' + inhand_x_dimension = 64 + inhand_y_dimension = 64 + w_class = WEIGHT_CLASS_GIGANTIC + force = 10 //a lot worse than most nullrods initially. Why did you invest so much into making it vorpal, you dork. + armour_penetration = 50 //Very good armor penetration to make up for our abysmal force + reach = 2 //why yes, this does have reach + slot_flags = null + sharpness = SHARP_EDGED + attack_verb_continuous = list("chops", "slices", "cuts", "reaps") + attack_verb_simple = list("chop", "slice", "cut", "reap") + wound_bonus = 10 + bare_wound_bonus = 15 + /*What state is our scythe in? + + If it is SCYTHE_WEAK, it will harm our reaper on being sheathed. + + if it is SCYTHE_SATED, it will be able to sheath for 4 minutes. Gained from hitting a mob or performing the death knell on mindless humans. + + If it is SCYTHE_EMPOWERED, we've performed the death knell on a human with a mind. Lets you sheath for 2 minutes and grants additional force.*/ + var/empowerment = SCYTHE_WEAK + ///Our bonus to force after we have death knelled. Lasts approximately 2 minutes. + var/bonus_force_multiplier = 2 + ///Our initial force before empowerment. For tracking on the item, and in case the item somehow gains more force for some reason before we death knelled. + var/original_force + +/obj/item/vorpalscythe/examine(mob/user) + . = ..() + . += span_notice("You can perform a death knell using [src] on a human with Right-Click. If they were sentient (whether currently or at some point), [src] is empowered on a successful death knell.") + . += span_notice("[src] seems to have quite a bit of reach. You might be able to hit things from further away.") + + var/current_empowerment = empowerment + switch(current_empowerment) + if(SCYTHE_EMPOWERED) + . += span_notice("[src] is empowered and humming with energy.") + if(SCYTHE_SATED) + . += span_notice("[src] is sated, but still demands more. Perform the death knell!") + else + . += span_notice("[src] is still. Anticipating the strike. Best not anger it by denying it the opportuntiy to taste blood.") + +/obj/item/vorpalscythe/Initialize(mapload) + . = ..() + AddComponent(/datum/component/anti_magic, MAGIC_RESISTANCE|MAGIC_RESISTANCE_HOLY) + AddComponent(/datum/component/effect_remover, \ + success_feedback = "You disrupt the magic of %THEEFFECT with %THEWEAPON.", \ + success_forcesay = "TO DUST WITH YE!! AWAY!!", \ + tip_text = "Clear rune", \ + on_clear_callback = CALLBACK(src, PROC_REF(on_cult_rune_removed)), \ + effects_we_clear = list(/obj/effect/rune, /obj/effect/heretic_rune) \ + ) + AddComponent( + /datum/component/butchering, \ + speed = 3 SECONDS, \ + effectiveness = 125, \ + ) + AddElement(/datum/element/bane, mob_biotypes = MOB_PLANT, damage_multiplier = 0.5, requires_combat_mode = FALSE) //less good at killing revenants, much better at killing plants + +/obj/item/vorpalscythe/attack(mob/living/target, mob/living/user, params) + if(ismonkey(target) && !target.mind) //Don't empower from hitting monkeys. Hit a corgi or something, I don't know. + return ..() + + if(target.stat < DEAD && target != user) + scythe_empowerment(SCYTHE_SATED) + + return ..() + +//Borrows some amputation shear code, but much more specific +/obj/item/vorpalscythe/attack_secondary(mob/living/victim, mob/living/user, params) + if(!iscarbon(victim) || user.combat_mode) + return SECONDARY_ATTACK_CALL_NORMAL + + if(user.zone_selected != BODY_ZONE_HEAD) + return SECONDARY_ATTACK_CALL_NORMAL + + var/mob/living/carbon/potential_reaping = victim + + if(HAS_TRAIT(potential_reaping, TRAIT_NODISMEMBER)) + to_chat(user, span_warning("You do not think you can behead this creature...")) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + var/head_name + var/obj/item/bodypart/head/reaped_head + + reaped_head = potential_reaping.get_bodypart(check_zone(user.zone_selected)) + if(!reaped_head) + to_chat(user, span_warning("There is no head to reap.")) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + head_name = reaped_head.name + + //We're tracking this separately from empowerment so that we can use it to determine whether or not we haunt the heads we cut off. + var/potential_empowerment = SCYTHE_EMPOWERED + + if(!potential_reaping.mind) //We put this here juuuust in case there is something funky with ling checks + if(ismonkey(potential_reaping)) + to_chat(user, span_warning("A pointless existence. You'll get no benefit from this death knell beyond the satisfaction of beheading this foul thing.")) + potential_empowerment = SCYTHE_WEAK + else + to_chat(user, span_warning("This soul is almost nonexistent. But [src] can still gain something from this sacrifice. A puppet.")) + potential_empowerment = SCYTHE_SATED + + var/death_knell_speed_mod = 1 + + potential_reaping.visible_message(span_danger("[user] begins to raise [src] arove [potential_reaping]'s [head_name]."), span_userdanger("[user] begins to raise [src], aiming to slice off your [head_name]!")) + if(potential_reaping.stat >= UNCONSCIOUS || HAS_TRAIT(potential_reaping, TRAIT_INCAPACITATED)) //if the victim is incapacitated (due to paralysis, a stun, being in staminacrit, etc.), critted, unconscious, or dead, it's much easier to properly behead + death_knell_speed_mod *= 0.5 + if(potential_reaping.stat != DEAD && potential_reaping.has_status_effect(/datum/status_effect/jitter)) //jittering will make it harder to perform the death knell, even if they're still + death_knell_speed_mod *= 1.5 //Staminacritting someone who's jittering (from, say, a stun baton) won't give you enough time to slice their head off, but staminacritting someone who isn't jittering will + if(empowerment == SCYTHE_EMPOWERED) //That said, if heads are already rolling, why stop here? + death_knell_speed_mod *= 0.5 + if(ispodperson(potential_reaping) || ismonkey(potential_reaping)) //And if they're a podperson or monkey, they can just die. + death_knell_speed_mod *= 0.5 + + if(do_after(user, 15 SECONDS * death_knell_speed_mod, target = potential_reaping)) + playsound(get_turf(potential_reaping), 'sound/weapons/bladeslice.ogg', 250, TRUE) + reaped_head.dismember() + user.visible_message(span_danger("[user] swings the [src] down, slicing [potential_reaping]'s [head_name] clean off! You think the [src] may have grown stronger!"), span_notice("As you perform the death knell on [potential_reaping], the [src] gains power! For a time...")) + if(potential_empowerment == SCYTHE_SATED) //We don't want actual player heads to go wandering off, but it'll be funny if a bunch of monkeyhuman heads started floating around + reaped_head.AddComponent(/datum/component/haunted_item, \ + haunt_color = "#7be595", \ + haunt_duration = 1 MINUTES, \ + aggro_radius = null, \ + spawn_message = span_revenwarning("[reaped_head] shudders and rises up into the air in a pale green nimbus!"), \ + despawn_message = span_revenwarning("[reaped_head] falls back to the ground, stationary once more."), \ + throw_force_bonus = 0, \ + throw_force_max = 0, \ + ) + + scythe_empowerment(potential_empowerment) + + if(HAS_TRAIT(user, TRAIT_MORBID)) //You feel good about yourself, pal? + user.add_mood_event("morbid_dismemberment", /datum/mood_event/morbid_dismemberment) + + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/item/vorpalscythe/proc/scythe_empowerment(potential_empowerment = SCYTHE_WEAK) + //Determines if we are entitled to setting/resetting our timer. + //Only reset SCYTHE_EMPOWERED with an empowerment that would grant that. + //Only reset SCTHE_SATED if hitting at least simple mobs or nonmonkey carbons. + var/allow_timer_set = FALSE + + if(potential_empowerment == SCYTHE_EMPOWERED) + if(empowerment != SCYTHE_EMPOWERED) //We only empower our stats if we beheaded a human with a mind. + original_force = force + force *= bonus_force_multiplier + empowerment = potential_empowerment + allow_timer_set = TRUE + else if(empowerment < potential_empowerment) //so we don't end up weakening our scythe somehow and creating an infinite empowerment loop, only update empowerment if it is better + empowerment = potential_empowerment + allow_timer_set = TRUE + if(potential_empowerment != SCYTHE_WEAK && allow_timer_set) //And finally, if the empowerment was improved and wasn't too weak to get an empowerment, we set/reset our timer + addtimer(CALLBACK(src, PROC_REF(scythe_empowerment_end)), (4 MINUTES / empowerment), TIMER_UNIQUE | TIMER_OVERRIDE) + +/obj/item/vorpalscythe/proc/scythe_empowerment_end() + if(empowerment == SCYTHE_EMPOWERED) + force = original_force + original_force = null + empowerment = SCYTHE_WEAK + +/obj/item/vorpalscythe/proc/on_cult_rune_removed(obj/effect/target, mob/living/user) + if(!istype(target, /obj/effect/rune)) + return + + var/obj/effect/rune/target_rune = target + if(target_rune.log_when_erased) + user.log_message("erased [target_rune.cultist_name] rune using the vorpal scythe", LOG_GAME) + message_admins("[ADMIN_LOOKUPFLW(user)] erased a [target_rune.cultist_name] rune with the vorpal scythe.") + SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_NARNAR] = TRUE + +#undef SCYTHE_WEAK +#undef SCYTHE_SATED +#undef SCYTHE_EMPOWERED diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm index 9b3ace438f1..8ce3869bf60 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/elephantgraveyard.dm @@ -237,7 +237,10 @@ dug_closed = TRUE close(user) else if(open(user, force = TRUE)) - user.add_mood_event("graverobbing", /datum/mood_event/graverobbing) + if (HAS_TRAIT(user, TRAIT_MORBID)) + user.add_mood_event("morbid_graverobbing", /datum/mood_event/morbid_graverobbing) + else + user.add_mood_event("graverobbing", /datum/mood_event/graverobbing) if(lead_tomb && first_open) user.gain_trauma(/datum/brain_trauma/magic/stalker) to_chat(user, span_boldwarning("Oh no, no no no, THEY'RE EVERYWHERE! EVERY ONE OF THEM IS EVERYWHERE!")) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 6d422157a24..395fd4f2832 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -26,7 +26,7 @@ if(2) new /obj/item/soulstone/anybody/mining(src) if(3) - new /obj/item/organ/internal/cyberimp/arm/katana(src) + new /obj/item/organ/internal/cyberimp/arm/shard/katana(src) if(4) new /obj/item/clothing/glasses/godeye(src) if(5) diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index 2c46fca1392..ed636d142f4 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -891,18 +891,18 @@ name = "Scan Target" desc = "Contact may or may not be close." -/obj/item/organ/internal/cyberimp/arm/katana - name = "dark shard" - desc = "An eerie metal shard surrounded by dark energies." +/obj/item/organ/internal/cyberimp/arm/shard + name = "dark spoon shard" + desc = "An eerie metal shard surrounded by dark energies...of soup drinking. You probably don't think you should have been able to find this." icon = 'icons/obj/lavaland/artefacts.dmi' icon_state = "cursed_katana_organ" status = ORGAN_ORGANIC organ_flags = ORGAN_FROZEN|ORGAN_UNREMOVABLE - items_to_create = list(/obj/item/cursed_katana) + items_to_create = list(/obj/item/kitchen/spoon) extend_sound = 'sound/items/unsheath.ogg' retract_sound = 'sound/items/sheath.ogg' -/obj/item/organ/internal/cyberimp/arm/katana/attack_self(mob/user, modifiers) +/obj/item/organ/internal/cyberimp/arm/shard/attack_self(mob/user, modifiers) . = ..() to_chat(user, span_userdanger("The mass goes up your arm and goes inside it!")) playsound(user, 'sound/magic/demon_consume.ogg', 50, TRUE) @@ -912,10 +912,13 @@ user.temporarilyRemoveItemFromInventory(src, TRUE) Insert(user) -/obj/item/organ/internal/cyberimp/arm/katana/screwdriver_act(mob/living/user, obj/item/screwtool) +/obj/item/organ/internal/cyberimp/arm/shard/screwdriver_act(mob/living/user, obj/item/screwtool) return -/obj/item/organ/internal/cyberimp/arm/katana/Retract() +/obj/item/organ/internal/cyberimp/arm/shard/katana + items_to_create = list(/obj/item/cursed_katana) + +/obj/item/organ/internal/cyberimp/arm/shard/katana/Retract() var/obj/item/cursed_katana/katana = active_item if(!katana || katana.shattered) return FALSE diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 4f921010b13..b5a7ff45b75 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -483,7 +483,10 @@ return FALSE visible_message(span_notice("[src] performs CPR on [target.name]!"), span_notice("You perform CPR on [target.name].")) - add_mood_event("saved_life", /datum/mood_event/saved_life) + if(HAS_TRAIT(src, TRAIT_MORBID)) + add_mood_event("morbid_saved_life", /datum/mood_event/morbid_saved_life) + else + add_mood_event("saved_life", /datum/mood_event/saved_life) log_combat(src, target, "CPRed") if (HAS_TRAIT(target, TRAIT_NOBREATH)) diff --git a/code/modules/mob_spawn/corpses/mining_corpses.dm b/code/modules/mob_spawn/corpses/mining_corpses.dm index 594687effbe..ac853119d5b 100644 --- a/code/modules/mob_spawn/corpses/mining_corpses.dm +++ b/code/modules/mob_spawn/corpses/mining_corpses.dm @@ -239,7 +239,7 @@ dame.physique = FEMALE dame.update_body() if(prob(30)) - back = /obj/item/nullrod/scythe/talking + back = /obj/item/nullrod/vibro/talking else back = /obj/item/shield/buckler belt = /obj/item/nullrod/claymore diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index f940584cd67..c1e02ec8548 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -57,6 +57,11 @@ span_notice("[user] severs [target]'s [parse_zone(target_zone)]!"), ) display_pain(target, "You can no longer feel your severed [parse_zone(target_zone)]!") + + if(HAS_TRAIT(user, TRAIT_MORBID) && ishuman(user)) + var/mob/living/carbon/human/morbid_weirdo = user + morbid_weirdo.add_mood_event("morbid_dismemberment", /datum/mood_event/morbid_dismemberment) + if(surgery.operated_bodypart) var/obj/item/bodypart/target_limb = surgery.operated_bodypart target_limb.drop_limb() diff --git a/code/modules/surgery/autopsy.dm b/code/modules/surgery/autopsy.dm index 072bfc23a41..6b3e7391292 100644 --- a/code/modules/surgery/autopsy.dm +++ b/code/modules/surgery/autopsy.dm @@ -36,6 +36,9 @@ /datum/surgery_step/autopsy/success(mob/user, mob/living/carbon/target, target_zone, obj/item/autopsy_scanner/tool, datum/surgery/surgery, default_display_results = FALSE) ADD_TRAIT(target, TRAIT_DISSECTED, REF(src)) tool.scan_cadaver(user, target) + if(HAS_TRAIT(user, TRAIT_MORBID) && ishuman(user)) + var/mob/living/carbon/human/morbid_weirdo = user + morbid_weirdo.add_mood_event("morbid_dissection_success", /datum/mood_event/morbid_dissection_success) return ..() /datum/surgery_step/autopsy/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/dissection.dm b/code/modules/surgery/dissection.dm index c00cc6bc57f..96c0f35d8b3 100644 --- a/code/modules/surgery/dissection.dm +++ b/code/modules/surgery/dissection.dm @@ -55,6 +55,9 @@ var/obj/machinery/computer/operating/operating_computer = surgery.locate_operating_computer(get_turf(target)) if (!isnull(operating_computer)) SEND_SIGNAL(operating_computer, COMSIG_OPERATING_COMPUTER_DISSECTION_COMPLETE, target) + if(HAS_TRAIT(user, TRAIT_MORBID) && ishuman(user)) + var/mob/living/carbon/human/morbid_weirdo = user + morbid_weirdo.add_mood_event("morbid_dissection_success", /datum/mood_event/morbid_dissection_success) return TRUE diff --git a/code/modules/surgery/healing.dm b/code/modules/surgery/healing.dm index 1f37d41b818..8f58553cc18 100644 --- a/code/modules/surgery/healing.dm +++ b/code/modules/surgery/healing.dm @@ -84,12 +84,15 @@ var/target_msg = "[user] fixes some of [target]'s wounds" //see above var/brute_healed = brutehealing var/burn_healed = burnhealing + var/dead_patient = FALSE if(target.stat == DEAD) //dead patients get way less additional heal from the damage they have. brute_healed += round((target.getBruteLoss() * (brute_multiplier * 0.2)),0.1) burn_healed += round((target.getFireLoss() * (burn_multiplier * 0.2)),0.1) + dead_patient = TRUE else brute_healed += round((target.getBruteLoss() * brute_multiplier),0.1) burn_healed += round((target.getFireLoss() * burn_multiplier),0.1) + dead_patient = FALSE if(!get_location_accessible(target, target_zone)) brute_healed *= 0.55 burn_healed *= 0.55 @@ -99,6 +102,10 @@ user_msg += get_progress(user, target, brute_healed, burn_healed) + if(HAS_TRAIT(user, TRAIT_MORBID) && ishuman(user) && !dead_patient) //Morbid folk don't care about tending the dead as much as tending the living + var/mob/living/carbon/human/morbid_weirdo = user + morbid_weirdo.add_mood_event("morbid_tend_wounds", /datum/mood_event/morbid_tend_wounds) + display_results( user, target, diff --git a/code/modules/surgery/revival.dm b/code/modules/surgery/revival.dm index ebd96541457..736e3982b03 100644 --- a/code/modules/surgery/revival.dm +++ b/code/modules/surgery/revival.dm @@ -89,6 +89,9 @@ target.visible_message(span_notice("...[target] wakes up, alive and aware!")) target.emote("gasp") target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 50, 199) //MAD SCIENCE + if(HAS_TRAIT(user, TRAIT_MORBID) && ishuman(user)) //Contrary to their typical hatred of resurrection, it wouldn't be very thematic if morbid people didn't love playing god + var/mob/living/carbon/human/morbid_weirdo = user + morbid_weirdo.add_mood_event("morbid_revival_success", /datum/mood_event/morbid_revival_success) return TRUE else target.visible_message(span_warning("...[target.p_they()] convulses, then lies still.")) diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index cabcc48e4eb..f111ac5625e 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -477,6 +477,9 @@ limb_snip_candidate.dismember() user.visible_message(span_danger("[src] violently slams shut, amputating [patient]'s [candidate_name]."), span_notice("You amputate [patient]'s [candidate_name] with [src].")) + if(HAS_TRAIT(user, TRAIT_MORBID)) //Freak + user.add_mood_event("morbid_dismemberment", /datum/mood_event/morbid_dismemberment) + /obj/item/shears/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] is pinching [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) var/timer = 1 SECONDS diff --git a/icons/mob/inhands/64x64_lefthand.dmi b/icons/mob/inhands/64x64_lefthand.dmi index 61d8948a98f61c7810c13fa2a4e230e47ba4df76..4a43893cef4fc2b4ed653b526eabfa1a2b24b5e0 100644 GIT binary patch delta 10436 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 delta 9169 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 Nl7hN?k(_DZ{{og^nJ54N diff --git a/icons/mob/inhands/64x64_righthand.dmi b/icons/mob/inhands/64x64_righthand.dmi index 9d3f6e679d09de5ec3f8db7a0791c94f67a77850..89975e330ce1639da2227322a81f69a63427b321 100644 GIT binary patch delta 10049 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