Skip to content

Commit

Permalink
Replaces the Reaper Scythe with the Vorpal Scythe (also the Morbid tr…
Browse files Browse the repository at this point in the history
…ait) (tgstation#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)
  • Loading branch information
necromanceranne authored Jun 21, 2023
1 parent e1218c7 commit 64eae49
Show file tree
Hide file tree
Showing 26 changed files with 325 additions and 46 deletions.
2 changes: 1 addition & 1 deletion _maps/templates/lazy_templates/ninja_den.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion code/_globalvars/phobias.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
1 change: 1 addition & 0 deletions code/_globalvars/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion code/datums/ai/hauntium/haunted_controller.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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~~~
Expand Down
2 changes: 1 addition & 1 deletion code/datums/mood_events/generic_positive_events.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
41 changes: 41 additions & 0 deletions code/datums/mood_events/morbid_events.dm
Original file line number Diff line number Diff line change
@@ -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

5 changes: 4 additions & 1 deletion code/game/objects/items/defib.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion code/modules/clothing/outfits/ert.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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,
)
Expand Down
47 changes: 18 additions & 29 deletions code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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'
Expand All @@ -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'
Expand All @@ -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'
Expand All @@ -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"
Expand Down
Loading

0 comments on commit 64eae49

Please sign in to comment.