diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 238c8f6ddd7..b1069ed6b08 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -230,6 +230,7 @@ #define BELOW_MOB_LAYER 3.7 #define LOW_MOB_LAYER 3.75 #define LYING_MOB_LAYER 3.8 +#define ABOVE_LYING_MOB_LAYER 3.85 #define VEHICLE_LAYER 3.9 #define MOB_BELOW_PIGGYBACK_LAYER 3.94 //#define MOB_LAYER 4 //For easy recordkeeping; this is a byond define diff --git a/code/datums/elements/above_mob_drop.dm b/code/datums/elements/above_mob_drop.dm new file mode 100644 index 00000000000..552f6c863a1 --- /dev/null +++ b/code/datums/elements/above_mob_drop.dm @@ -0,0 +1,21 @@ +/// Element that makes mob drops appear above their corpses until moved or picked up +/datum/element/above_mob_drop + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + /// Layer to which items are initially changed + var/target_layer = ABOVE_LYING_MOB_LAYER + +/datum/element/above_mob_drop/Attach(datum/target, target_layer = ABOVE_LYING_MOB_LAYER) + . = ..() + if (!ismovable(target)) + return ELEMENT_INCOMPATIBLE + src.target_layer = target_layer + var/atom/movable/owner = target + owner.layer = target_layer + RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + +/datum/element/above_mob_drop/proc/on_moved(atom/movable/source) + SIGNAL_HANDLER + if (source.layer == target_layer) + source.layer = initial(source.layer) + Detach(source) diff --git a/code/modules/mining/equipment/monster_organs/monster_organ.dm b/code/modules/mining/equipment/monster_organs/monster_organ.dm index 01bf553c4ca..a76002959a2 100644 --- a/code/modules/mining/equipment/monster_organs/monster_organ.dm +++ b/code/modules/mining/equipment/monster_organs/monster_organ.dm @@ -61,6 +61,7 @@ /obj/item/organ/monster_core/Initialize(mapload) . = ..() decay_timer = addtimer(CALLBACK(src, PROC_REF(go_inert)), time_to_decay, TIMER_STOPPABLE) + AddElement(/datum/element/above_mob_drop) /obj/item/organ/monster_core/examine(mob/user) . = ..() diff --git a/tgstation.dme b/tgstation.dme index 6ed33c20615..c94dd622749 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1456,6 +1456,7 @@ #include "code\datums\dna\blocks\dna_features_block.dm" #include "code\datums\dna\blocks\dna_identity_block.dm" #include "code\datums\elements\_element.dm" +#include "code\datums\elements\above_mob_drop.dm" #include "code\datums\elements\ai_control_examine.dm" #include "code\datums\elements\ai_flee_while_injured.dm" #include "code\datums\elements\ai_held_item.dm"