Embedded objects stay embedded on dismembered limbs. Can be removed by sharp objects (#16839)

This commit is contained in:
Farie82
2021-12-03 13:24:05 +01:00
committed by GitHub
parent 3456bf717d
commit e837482575
6 changed files with 33 additions and 8 deletions
+28 -2
View File
@@ -94,6 +94,14 @@
return ..()
/obj/item/organ/external/examine(mob/user)
. = ..()
var/list/embedded_names = list()
for(var/obj/item/I in embedded_objects)
embedded_names += "[I]"
if(length(embedded_names))
. += "<span class='warning'>You can see [english_list(embedded_names)] embedded.</span>"
/obj/item/organ/external/update_health()
damage = min(max_damage, (brute_dam + burn_dam))
@@ -574,6 +582,7 @@ Note that amputating the affected organ does in fact remove the infection from t
"<span class='notice'>You begin to cut open [src]...</span>")
if(do_after(user, 54, target = src))
drop_organs(user)
drop_embedded_objects()
else
return ..()
@@ -719,8 +728,10 @@ Note that amputating the affected organ does in fact remove the infection from t
victim.splinted_limbs -= src
for(var/obj/item/I in embedded_objects)
embedded_objects -= I
UnregisterSignal(I, COMSIG_MOVABLE_MOVED) // Else it gets removed from the embedded list
I.forceMove(src)
RegisterSignal(I, COMSIG_MOVABLE_MOVED, .proc/remove_embedded_object)
if(!owner.has_embedded_objects())
owner.clear_alert("embeddedobject")
@@ -799,6 +810,21 @@ Note that amputating the affected organ does in fact remove the infection from t
if(data["dna"])
sync_colour_to_dna()
/obj/item/organ/external/proc/remove_embedded_object(obj/item/I)
embedded_objects -= I
UnregisterSignal(I, COMSIG_MOVABLE_MOVED)
/obj/item/organ/external/proc/drop_embedded_objects()
var/turf/T = get_turf(src)
for(var/obj/item/I in embedded_objects)
remove_embedded_object(I)
forceMove(T)
/obj/item/organ/external/proc/add_embedded_object(obj/item/I)
embedded_objects += I
I.forceMove(owner)
RegisterSignal(I, COMSIG_MOVABLE_MOVED, .proc/remove_embedded_object)
//Remove all embedded objects from all limbs on the carbon mob
/mob/living/carbon/human/proc/remove_all_embedded_objects()
var/turf/T = get_turf(src)
@@ -806,7 +832,7 @@ Note that amputating the affected organ does in fact remove the infection from t
for(var/X in bodyparts)
var/obj/item/organ/external/L = X
for(var/obj/item/I in L.embedded_objects)
L.embedded_objects -= I
L.remove_embedded_object(I)
I.forceMove(T)
clear_alert("embeddedobject")
@@ -50,8 +50,8 @@
var/objects = 0
for(var/obj/item/I in L.embedded_objects)
objects++
L.remove_embedded_object(I)
I.forceMove(get_turf(H))
L.embedded_objects -= I
if(!H.has_embedded_objects())
H.clear_alert("embeddedobject")