Skip to content

Commit

Permalink
Revival limb removal refeactor.
Browse files Browse the repository at this point in the history
	-Moves the slime blood drop from drop_limb to dismemberment
	-nugget revival now uses drop_limb allowing for the body and UI to update properly.
	-head decapitations now drop contents except normal eyes
	-makes revival compatable with bright eyes. No more duping eyes.
  • Loading branch information
Coll6 committed Dec 26, 2024
1 parent 49c865e commit eeea008
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 19 deletions.
25 changes: 15 additions & 10 deletions code/modules/surgery/bodyparts/dismemberment.dm
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@
if (wounding_type)
LAZYSET(limb_owner.body_zone_dismembered_by, body_zone, wounding_type)

if((limb_id == SPECIES_OOZELING))
to_chat(limb_owner, span_warning("Your [src] splatters with an unnerving squelch!"))
playsound(limb_owner, 'sound/effects/blobattack.ogg', 60, TRUE)
limb_owner.blood_volume -= 60 //Makes for 120 when you regenerate it. monkeedit it actually it costs 100 limbs are 40 right now.

drop_limb()

limb_owner.update_equipment_speed_mods() // Update in case speed affecting item unequipped by dismemberment
Expand Down Expand Up @@ -136,18 +141,18 @@
return

if((limb_id == SPECIES_OOZELING) && !special)
to_chat(phantom_owner, span_warning("Your [src] splatters with an unnerving squelch!"))
playsound(phantom_owner, 'sound/effects/blobattack.ogg', 60, TRUE)
phantom_owner.blood_volume -= 60 //Makes for 120 when you regenerate it.

var/list/limborgans = src.contents
if(limborgans) //Handle implants dropping when limb is dismembered
//Oozling heads can be dismemebered without death should those stay?
for(var/obj/item/organ/lmbimplant in limborgans)
if(!(deprecise_zone(src.body_zone) == BODY_ZONE_HEAD || deprecise_zone(src.body_zone) == BODY_ZONE_CHEST))
if(deprecise_zone(src.body_zone) in list(BODY_ZONE_HEAD, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG ))
var/list/limborgans = src.contents
if(limborgans) //Handle implants dropping when limb is dismembered
for(var/obj/item/organ/lmbimplant in limborgans)
lmbimplant.forceMove(drop_loc)
if(istype(lmbimplant, /obj/item/organ/internal/eyes)) // The eye slot is going to be some type of eyes right?
if(lmbimplant.type == /obj/item/organ/internal/eyes) // but we don't want to to drop oozlings natural eyes. Do the proper species check for eyes.
qdel(lmbimplant)
continue
var/obj/item/bodypart/head/oozeling/oozhead = src
oozhead.eyes = null // Need this otherwise qdel on head deletes the eyes.
to_chat(phantom_owner, span_notice("Something small falls out the [src]."))

qdel(src)
return

Expand Down
20 changes: 11 additions & 9 deletions monkestation/code/modules/surgery/organs/internal/brain.dm
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@
/obj/item/organ/external/horns,
/obj/item/organ/external/snout,
/obj/item/organ/external/antennae,
/obj/item/organ/external/spines
/obj/item/organ/external/spines,
/obj/item/organ/internal/eyes/robotic/glow
))
//Quirks that roll unique effects or gives items to each new body should be saved between bodies.
var/static/list/saved_quirks = typecacheof(list(
Expand Down Expand Up @@ -376,16 +377,21 @@
continue
if(istype(bodypart, /obj/item/bodypart/head))
// Living mobs eyes are stored in the body so remove the organs properly for their effect to work.
var/obj/item/organ/internal/eyes/eyes = new_body.get_organ_slot(ORGAN_SLOT_EYES)
eyes.Remove(new_body)
qdel(eyes)
qdel(bodypart)
if(new_body.has_quirk(/datum/quirk/bright_eyes)) // Either they have their eyes in their core or they are destroyed dont spawn another.
var/obj/item/organ/internal/eyes/eyes = new_body.get_organ_slot(ORGAN_SLOT_EYES)
eyes.Remove(new_body)
qdel(eyes)
bodypart.drop_limb() // Drop limb should delete the limb for oozlings unless someone changes it.
new_body.visible_message(span_warning("[new_body]'s torso \"forms\" from [new_body.p_their()] core, yet to form the rest."))
to_chat(owner, span_purple("Your torso fully forms out of your core, yet to form the rest."))
//Make oozlings revive similar to other species.
new_body.set_jitter_if_lower(200 SECONDS)
new_body.emote("scream")
else
if(new_body.has_quirk(/datum/quirk/bright_eyes)) // Either they have their eyes in core or they are destroyed don't spawn another.
var/obj/item/organ/new_organ = new_body.dna.species.get_mutant_organ_type_for_slot(ORGAN_SLOT_EYES)
new_organ = SSwardrobe.provide_type(new_organ)
new_organ.Insert(new_body, special = TRUE, drop_if_replaced = FALSE)
new_body.visible_message(span_warning("[new_body]'s body fully forms from [new_body.p_their()] core!"))
to_chat(owner, span_purple("Your body fully forms from your core!"))

Expand All @@ -394,10 +400,6 @@
new_body.grab_ghost()
transfer_observers_to(new_body)

//Update both the body and stats fixs visual body and HUD issues
new_body.update_stat()
new_body.update_body_parts()

drop_items_to_ground(new_body.drop_location())
return new_body

Expand Down

0 comments on commit eeea008

Please sign in to comment.