Files
JacquerelandGitHub 2cf56ab1e1 Allows gorillas to kill themselves with items (#96736)
## About The Pull Request

This PR moves most of the code for using an item to commit suicide from
`human` to `living`, so that anything with hands can use what it is
holding to commit suicide.
This was surprisingly painless, as most `suicide_act` procs were already
written without the assumption that the person killing themselves was a
human even though they couldn't be anything else.

This might occasionally mean that in some cases (like drones) it may
reference anatomy that they don't have (like necks) but I think that's
not a big deal and don't worry about it.

## Why It's Good For The Game

It's funny.

## Changelog

🆑
balance: Anything with hands can now use the things it is holding to
commit suicide
/🆑
2026-07-09 16:55:53 +02:00

77 lines
2.4 KiB
Plaintext

#define EXPOSED_VOLUME 1000
#define ROOM_TEMP 293
#define MIN_FREEZE_TEMP 50
#define MAX_FREEZE_TEMP 1000000
/obj/item/assembly/igniter
name = "igniter"
desc = "A small electronic device able to ignite combustible substances."
icon_state = "igniter"
custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*5, /datum/material/glass=SMALL_MATERIAL_AMOUNT*0.5)
var/datum/effect_system/basic/spark_spread/sparks
heat = 1000
drop_sound = 'sound/items/handling/component_drop.ogg'
pickup_sound = 'sound/items/handling/component_pickup.ogg'
assembly_flags = ASSEMBLY_NO_DUPLICATES
/obj/item/assembly/igniter/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] is trying to ignite [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
user.ignite_mob()
return FIRELOSS
/obj/item/assembly/igniter/Initialize(mapload)
. = ..()
sparks = new(src, 2, FALSE)
sparks.attach(src)
/obj/item/assembly/igniter/Destroy()
QDEL_NULL(sparks)
return ..()
/obj/item/assembly/igniter/activate()
if(!..())
return FALSE//Cooldown check
var/turf/location = get_turf(loc)
if(location)
location.hotspot_expose(heat, EXPOSED_VOLUME)
if(holder)
SEND_SIGNAL(holder.loc, COMSIG_IGNITER_ACTIVATE, src)
if(QDELETED(src))
return TRUE
sparks.start()
return TRUE
/obj/item/assembly/igniter/attack_self(mob/user)
// Don't trigger when interacting with assemblies
if (!holder)
activate()
add_fingerprint(user)
/obj/item/assembly/igniter/ignition_effect(atom/A, mob/user)
. = span_notice("[user] fiddles with [src], and manages to light [A].")
activate()
add_fingerprint(user)
//For the Condenser, which functions like the igniter but makes things colder.
/obj/item/assembly/igniter/condenser
name = "condenser"
desc = "A small electronic device able to chill their surroundings."
icon_state = "freezer"
custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*2.5, /datum/material/glass=SMALL_MATERIAL_AMOUNT * 3)
heat = MIN_FREEZE_TEMP
/obj/item/assembly/igniter/condenser/activate()
. = ..()
if(!.)
return //Cooldown check
var/turf/location = get_turf(loc)
if(location)
var/datum/gas_mixture/enviro = location.return_air()
enviro.temperature = clamp(min(ROOM_TEMP, enviro.temperature * 0.85), MIN_FREEZE_TEMP, MAX_FREEZE_TEMP)
location.air_update_turf(FALSE, FALSE)
#undef EXPOSED_VOLUME
#undef ROOM_TEMP
#undef MIN_FREEZE_TEMP
#undef MAX_FREEZE_TEMP