Files
Jacquerel b942cec267 Audit dismemberment to make sure we don't forget it might fail (#94808)
## About The Pull Request

Fixes #94778

There are a bunch of places where we dismember a limb (or head) and then
do something with it assuming that we actually dismembered it, but that
isn't actually true.
Many of these places then move your not-actually-dismembered head
somewhere else. If you have an unremovable limb (such as if you have
TRAIT_NODISMEMBER) this means that it actually gets removed anyway
because it's physically moved somewhere else.
In all of these cases, if we failed to dismember the limb we should just
leave it alone.

I left anything where after dismembering the limb it immediately deletes
it in though because those are generally supposed to be invariably
fatal.

## Changelog

🆑
fix: Chainsaws can't behead people with unremovable heads.
fix: You can only put your own head on a spear or into a box if it is
possible to remove your head.
fix: Heretic rifts can only remove your arms if your arms can be
removed.
fix: Paperwork can only cut off your head if your head can be cut off.
fix: Smite being reflected can only blow off your arm if your arm can be
removed.
/🆑
2026-01-10 22:56:25 -07:00

57 lines
2.0 KiB
Plaintext

/// The common cardboard box.
/obj/item/storage/box
name = "box"
desc = "It's just an ordinary box."
icon = 'icons/obj/storage/box.dmi'
icon_state = "box"
inhand_icon_state = "syringe_kit"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
resistance_flags = FLAMMABLE
drop_sound = 'sound/items/handling/cardboard_box/cardboardbox_drop.ogg'
pickup_sound = 'sound/items/handling/cardboard_box/cardboardbox_pickup.ogg'
storage_type = /datum/storage/box
/// What material do we get when we fold this box?
var/foldable_result = /obj/item/stack/sheet/cardboard
/// What drawing will we get on the face of the box?
var/illustration = "writing"
/obj/item/storage/box/Initialize(mapload)
. = ..()
if(foldable_result == /obj/item/stack/sheet/cardboard)
set_custom_materials(list(/datum/material/cardboard = SHEET_MATERIAL_AMOUNT))
update_appearance()
/obj/item/storage/box/suicide_act(mob/living/carbon/user)
var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD)
if(myhead)
user.visible_message(span_suicide("[user] puts [user.p_their()] head into \the [src] and begins closing it! It looks like [user.p_theyre()] trying to commit suicide!"))
if (myhead.dismember())
myhead.forceMove(src) //force your enemies to kill themselves with your head collection box!
playsound(user, "desecration-01.ogg", 50, TRUE, -1)
return BRUTELOSS
user.visible_message(span_suicide("[user] is beating [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return BRUTELOSS
/obj/item/storage/box/update_overlays()
. = ..()
if(illustration)
. += illustration
/obj/item/storage/box/attack_self(mob/user)
..()
if(!foldable_result || (flags_1 & HOLOGRAM_1))
return
if(contents.len)
balloon_alert(user, "items inside!")
return
if(!ispath(foldable_result))
return
var/obj/item/result = new foldable_result(user.drop_location())
balloon_alert(user, "folded")
qdel(src)
user.put_in_hands(result)