mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 03:57:13 +01:00
Embedded objects stay embedded on dismembered limbs. Can be removed by sharp objects (#16839)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user