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
+1 -1
View File
@@ -79,7 +79,7 @@
for(var/X in C.bodyparts)
var/obj/item/organ/external/part = X
if(item_to_retrieve in part.embedded_objects)
part.embedded_objects -= item_to_retrieve
part.remove_embedded_object(item_to_retrieve)
to_chat(C, "<span class='warning'>\The [item_to_retrieve] that was embedded in your [part] has mysteriously vanished. How fortunate!</span>")
if(!C.has_embedded_objects())
C.clear_alert("embeddedobject")
@@ -613,7 +613,7 @@
if(do_after(usr, time_taken, needhand = 1, target = src))
if(!I || !L || I.loc != src || !(I in L.embedded_objects))
return
L.embedded_objects -= I
L.remove_embedded_object(I)
L.receive_damage(I.embedded_unsafe_removal_pain_multiplier*I.w_class)//It hurts to rip it out, get surgery you dingus.
I.forceMove(get_turf(src))
usr.put_in_hands(I)
@@ -549,9 +549,8 @@ emp_act
if(prob(I.embed_chance) && !HAS_TRAIT(src, TRAIT_PIERCEIMMUNE))
throw_alert("embeddedobject", /obj/screen/alert/embeddedobject)
var/obj/item/organ/external/L = pick(bodyparts)
L.embedded_objects |= I
L.add_embedded_object(I)
I.add_mob_blood(src)//it embedded itself in you, of course it's bloody!
I.forceMove(src)
L.receive_damage(I.w_class*I.embedded_impact_pain_multiplier)
visible_message("<span class='danger'>[I] embeds itself in [src]'s [L.name]!</span>","<span class='userdanger'>[I] embeds itself in your [L.name]!</span>")
hitpush = FALSE
+1 -1
View File
@@ -838,7 +838,7 @@
if(prob(I.embedded_fall_chance))
BP.receive_damage(I.w_class*I.embedded_fall_pain_multiplier)
BP.embedded_objects -= I
BP.remove_embedded_object(I)
I.forceMove(get_turf(src))
visible_message("<span class='danger'>[I] falls out of [name]'s [BP.name]!</span>","<span class='userdanger'>[I] falls out of your [BP.name]!</span>")
if(!has_embedded_objects())
+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")