mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-06 06:52:39 +00:00
* Replace natural beheading with cranial fissures (splitting your skull) (#80703) ## About The Pull Request Replaces natural beheading (doing a lot of damage to the head) with cranial fissures, which split your skull in half.  While you have this wound, your eyes can be pulled out of your head with bare hands, and slipping will spill your brain out of your head. Removes beheading objective from traitor. Zombies can be beheaded all the same. Any other way of beheading, such as surgery or amputation shears, is still possible. Closes #80439 ## Why It's Good For The Game I've enjoyed seeing the results of the test merge to remove natural beheading. At 947 beheadings in a week, 1 in every 7 deaths resulted in a beheading. This makes it significantly easier to remove people from rounds as the brain is generally critical to actually reviving someone. While round removal is fine, it should be something that is intentionally performed with enough effort. Mass round removals ought to require a significant amount of effort. There are plenty of ways to round remove someone, but it ought not be an incidental choice. The effects of beheading removal have shown some interesting anecdotal highlights (nothing here is backed up with stats, so take it with a grain of salt): 1. As a whole, people did not really replace it with anything. The biggest alternative has been lighting people on fire, but this has not been done at a significant enough scale at all to be a noteworthy problem, and is still fixable with enough effort. 2. Cult and rev rounds have played out far more interestingly. In one round I was adminning a head of staff who intended to behead every revolutionary they saw, but because they didn't, the back and forth continues. I've also had opportunities to revive head revs that I am skeptical would've been available to me otherwise. Complete removal of beheading was not chosen as it does not feel right for a repeated fire axe to the head to do basically nothing. The current implementation is intended to be something that is just not useful enough to do on everyone you see, but is still appreciably an effect. ## Changelog 🆑 balance: Instead of too much damage to the head beheading someone, it will now split their skull in half. While their skull is open, you can rip out their eyes with your hands. and they will spill their brain out of their head if they slip. balance: The Path of Blades ascension will accept either a beheaded person, or someone with their skull split open. del: Removed the beheading objectives from traitor. /🆑 * Replace natural beheading with cranial fissures (splitting your skull) --------- Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
171 lines
5.6 KiB
Plaintext
171 lines
5.6 KiB
Plaintext
|
|
// CHAINSAW
|
|
/obj/item/chainsaw
|
|
name = "chainsaw"
|
|
desc = "A versatile power tool. Useful for limbing trees and delimbing humans."
|
|
icon = 'icons/obj/weapons/chainsaw.dmi'
|
|
icon_state = "chainsaw_off"
|
|
lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
|
|
obj_flags = CONDUCTS_ELECTRICITY
|
|
force = 13
|
|
var/force_on = 24
|
|
w_class = WEIGHT_CLASS_HUGE
|
|
throwforce = 13
|
|
throw_speed = 2
|
|
throw_range = 4
|
|
demolition_mod = 1.5
|
|
custom_materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 6.5)
|
|
attack_verb_continuous = list("saws", "tears", "lacerates", "cuts", "chops", "dices")
|
|
attack_verb_simple = list("saw", "tear", "lacerate", "cut", "chop", "dice")
|
|
hitsound = SFX_SWING_HIT
|
|
sharpness = SHARP_EDGED
|
|
actions_types = list(/datum/action/item_action/startchainsaw)
|
|
tool_behaviour = TOOL_SAW
|
|
toolspeed = 1.5 //Turn it on first you dork
|
|
var/on = FALSE
|
|
///The looping sound for our chainsaw when running
|
|
var/datum/looping_sound/chainsaw/chainsaw_loop
|
|
|
|
/obj/item/chainsaw/apply_fantasy_bonuses(bonus)
|
|
. = ..()
|
|
force_on = modify_fantasy_variable("force_on", force_on, bonus)
|
|
if(on)
|
|
force = force_on
|
|
|
|
/obj/item/chainsaw/remove_fantasy_bonuses(bonus)
|
|
force_on = reset_fantasy_variable("force_on", force_on)
|
|
if(on)
|
|
force = force_on
|
|
return ..()
|
|
|
|
/obj/item/chainsaw/Initialize(mapload)
|
|
. = ..()
|
|
chainsaw_loop = new(src)
|
|
apply_components()
|
|
|
|
/obj/item/chainsaw/suicide_act(mob/living/carbon/user)
|
|
if(on)
|
|
user.visible_message(span_suicide("[user] begins to tear [user.p_their()] head off with [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
|
|
playsound(src, 'sound/weapons/chainsawhit.ogg', 100, TRUE)
|
|
var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD)
|
|
if(myhead)
|
|
myhead.dismember()
|
|
else
|
|
user.visible_message(span_suicide("[user] smashes [src] into [user.p_their()] neck, destroying [user.p_their()] esophagus! It looks like [user.p_theyre()] trying to commit suicide!"))
|
|
playsound(src, 'sound/weapons/genhit1.ogg', 100, TRUE)
|
|
return BRUTELOSS
|
|
|
|
/obj/item/chainsaw/attack_self(mob/user)
|
|
on = !on
|
|
to_chat(user, "As you pull the starting cord dangling from [src], [on ? "it begins to whirr." : "the chain stops moving."]")
|
|
force = on ? force_on : initial(force)
|
|
throwforce = on ? force_on : initial(force)
|
|
icon_state = "chainsaw_[on ? "on" : "off"]"
|
|
var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering)
|
|
butchering.butchering_enabled = on
|
|
|
|
if(on)
|
|
hitsound = 'sound/weapons/chainsawhit.ogg'
|
|
chainsaw_loop.start()
|
|
else
|
|
hitsound = SFX_SWING_HIT
|
|
chainsaw_loop.stop()
|
|
|
|
toolspeed = on ? 0.5 : initial(toolspeed) //Turning it on halves the speed
|
|
if(src == user.get_active_held_item()) //update inhands
|
|
user.update_held_items()
|
|
update_item_action_buttons()
|
|
|
|
/**
|
|
* Handles adding components to the chainsaw. Added in Initialize()
|
|
*
|
|
* Applies components to the chainsaw. Added as a seperate proc to allow for
|
|
* variance between subtypes
|
|
*/
|
|
/obj/item/chainsaw/proc/apply_components()
|
|
AddComponent(/datum/component/butchering, \
|
|
speed = 3 SECONDS, \
|
|
effectiveness = 100, \
|
|
bonus_modifier = 0, \
|
|
butcher_sound = 'sound/weapons/chainsawhit.ogg', \
|
|
disabled = TRUE, \
|
|
)
|
|
AddComponent(/datum/component/two_handed, require_twohands=TRUE)
|
|
|
|
/obj/item/chainsaw/doomslayer
|
|
name = "THE GREAT COMMUNICATOR"
|
|
desc = "<span class='warning'>VRRRRRRR!!!</span>"
|
|
armour_penetration = 100
|
|
force_on = 30
|
|
|
|
/obj/item/chainsaw/doomslayer/attack(mob/living/target_mob, mob/living/user, params)
|
|
if (target_mob.stat != DEAD)
|
|
return ..()
|
|
|
|
if (user.zone_selected != BODY_ZONE_HEAD)
|
|
return ..()
|
|
|
|
var/obj/item/bodypart/head = target_mob.get_bodypart(BODY_ZONE_HEAD)
|
|
if (isnull(head))
|
|
return ..()
|
|
|
|
playsound(user, 'sound/weapons/slice.ogg', vol = 80, vary = TRUE)
|
|
|
|
target_mob.balloon_alert(user, "cutting off head...")
|
|
if (!do_after(user, 2 SECONDS, target_mob, extra_checks = CALLBACK(src, PROC_REF(has_same_head), target_mob, head)))
|
|
return TRUE
|
|
|
|
head.dismember(silent = FALSE)
|
|
user.put_in_hands(head)
|
|
|
|
return TRUE
|
|
|
|
/obj/item/chainsaw/doomslayer/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE)
|
|
if(attack_type == PROJECTILE_ATTACK)
|
|
owner.visible_message(span_danger("Ranged attacks just make [owner] angrier!"))
|
|
playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE)
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/obj/item/chainsaw/doomslayer/proc/has_same_head(mob/living/target_mob, obj/item/bodypart/head)
|
|
return target_mob.get_bodypart(BODY_ZONE_HEAD) == head
|
|
|
|
/obj/item/chainsaw/mounted_chainsaw
|
|
name = "mounted chainsaw"
|
|
desc = "A chainsaw that has replaced your arm."
|
|
inhand_icon_state = "mounted_chainsaw"
|
|
item_flags = ABSTRACT | DROPDEL
|
|
throwforce = 0
|
|
throw_range = 0
|
|
throw_speed = 0
|
|
toolspeed = 1
|
|
|
|
/obj/item/chainsaw/mounted_chainsaw/Initialize(mapload)
|
|
. = ..()
|
|
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
|
|
|
|
/obj/item/chainsaw/mounted_chainsaw/Destroy()
|
|
var/obj/item/bodypart/part
|
|
new /obj/item/chainsaw(get_turf(src))
|
|
if(iscarbon(loc))
|
|
var/mob/living/carbon/holder = loc
|
|
var/index = holder.get_held_index_of_item(src)
|
|
if(index)
|
|
part = holder.hand_bodyparts[index]
|
|
. = ..()
|
|
if(part)
|
|
part.drop_limb()
|
|
|
|
/obj/item/chainsaw/mounted_chainsaw/apply_components()
|
|
AddComponent(/datum/component/butchering, \
|
|
speed = 3 SECONDS, \
|
|
effectiveness = 100, \
|
|
bonus_modifier = 0, \
|
|
butcher_sound = 'sound/weapons/chainsawhit.ogg', \
|
|
disabled = TRUE, \
|
|
)
|
|
|
|
/datum/action/item_action/startchainsaw
|
|
name = "Pull The Starting Cord"
|