Skip to content

Commit

Permalink
[MIRROR] Slime-hybrid revival fixes (#5229)
Browse files Browse the repository at this point in the history
* Slime-hybrid revival fixes (#4666)

* Slime fixes

* Apply suggestions from code review

---------

Co-authored-by: Bloop <[email protected]>

* [MIRROR] Slime-hybrid revival fixes

---------

Co-authored-by: FlufflesTheDog <[email protected]>
Co-authored-by: Bloop <[email protected]>
Co-authored-by: StealsThePRs <[email protected]>
  • Loading branch information
4 people authored Dec 16, 2024
1 parent f845533 commit 8289c33
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 52 deletions.
38 changes: 38 additions & 0 deletions modular_nova/modules/bodyparts/code/roundstartslime_bodyparts.dm
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,26 @@
/obj/item/bodypart/leg/left/jelly/slime/roundstart
icon_greyscale = BODYPART_ICON_ROUNDSTARTSLIME
biological_state = (BIO_FLESH|BIO_BLOODED)
digitigrade_type = /obj/item/bodypart/leg/left/digitigrade/jelly/slime/roundstart

/obj/item/bodypart/leg/right/jelly/slime/roundstart
icon_greyscale = BODYPART_ICON_ROUNDSTARTSLIME
biological_state = (BIO_FLESH|BIO_BLOODED)
digitigrade_type = /obj/item/bodypart/leg/right/digitigrade/jelly/slime/roundstart

/obj/item/bodypart/leg/left/digitigrade/jelly/slime/roundstart
icon_greyscale = BODYPART_ICON_ROUNDSTARTSLIME
base_limb_id = SPECIES_SLIMEPERSON
biological_state = (BIO_FLESH|BIO_BLOODED)
dmg_overlay_type = null
burn_modifier = 0.5 // = 1/2x generic burn damage

/obj/item/bodypart/leg/right/digitigrade/jelly/slime/roundstart
icon_greyscale = BODYPART_ICON_ROUNDSTARTSLIME
base_limb_id = SPECIES_SLIMEPERSON
biological_state = (BIO_FLESH|BIO_BLOODED)
dmg_overlay_type = null
burn_modifier = 0.5 // = 1/2x generic burn damage

/obj/item/bodypart/head/jelly/drop_limb(special, dismembered, move_to_floor = FALSE)
if(special)
Expand Down Expand Up @@ -91,4 +107,26 @@
qdel(src)
return .

/obj/item/bodypart/leg/left/digitigrade/jelly/drop_limb(special, dismembered, move_to_floor = FALSE)
if(special)
return ..()

to_chat(owner, span_warning("Your [name] splatters with an unnerving squelch!"))
playsound(owner, 'sound/effects/blob/blobattack.ogg', 60, TRUE)
owner.blood_volume -= SLIME_LIMB_BLOOD_LOSS
. = ..()
drop_organs(src, TRUE)
qdel(src)

/obj/item/bodypart/leg/right/digitigrade/jelly/drop_limb(special, dismembered, move_to_floor = FALSE)
if(special)
return ..()

to_chat(owner, span_warning("Your [name] splatters with an unnerving squelch!"))
playsound(owner, 'sound/effects/blob/blobattack.ogg', 60, TRUE)
owner.blood_volume -= SLIME_LIMB_BLOOD_LOSS
. = ..()
drop_organs(src, TRUE)
qdel(src)

#undef SLIME_LIMB_BLOOD_LOSS
Binary file modified modular_nova/modules/bodyparts/icons/slime_parts_greyscale.dmi
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -255,60 +255,68 @@
* Makes it so that when a slime's core has plasma poured on it, it builds a new body and moves the brain into it.
*/
/obj/item/organ/internal/brain/slime/check_for_repair(obj/item/item, mob/user)
if(damage && item.is_drainable() && item.reagents.has_reagent(/datum/reagent/toxin/plasma) && item.reagents.get_reagent_amount(/datum/reagent/toxin/plasma) >= 100 && (organ_flags & ORGAN_ORGANIC)) //attempt to heal the brain

user.visible_message(span_notice("[user] starts to slowly pour the contents of [item] onto [src]. It seems to bubble and roil, beginning to stretch its cytoskeleton outwards..."), span_notice("You start to slowly pour the contents of [item] onto [src]. It seems to bubble and roil, beginning to stretch its membrane outwards..."))
if(!do_after(user, 60 SECONDS, src))
to_chat(user, span_warning("You failed to pour the contents of [item] onto [src]!"))
return TRUE

user.visible_message(span_notice("[user] pours the contents of [item] onto [src], causing it to form a proper cytoplasm and outer membrane."), span_notice("You pour the contents of [item] onto [src], causing it to form a proper cytoplasm and outer membrane."))
item.reagents.clear_reagents() //removes the whole shit
set_organ_damage(-maxHealth) //fully heals the brain

if(gps_active) // making sure the gps signal is removed if it's active on revival
gps_active = FALSE
qdel(GetComponent(/datum/component/gps))

//we have the plasma. we can rebuild them.
if(isnull(brainmob))
user.balloon_alert("This brain is not a viable candidate for repair!")
return TRUE
if(isnull(brainmob.stored_dna))
user.balloon_alert("This brain does not contain any dna!")
return TRUE
if(isnull(brainmob.client))
user.balloon_alert("This brain does not contain a mind!")
return TRUE
var/mob/living/carbon/human/new_body = new /mob/living/carbon/human(src.loc)

brainmob.client?.prefs?.safe_transfer_prefs_to(new_body)
new_body.underwear = "Nude"
new_body.bra = "Nude"
new_body.undershirt = "Nude" //Which undershirt the player wants
new_body.socks = "Nude" //Which socks the player wants
brainmob.stored_dna.transfer_identity(new_body, transfer_SE=1)
new_body.dna.features["mcolor"] = new_body.dna.features["mcolor"]
new_body.dna.update_uf_block(DNA_MUTANT_COLOR_BLOCK)
new_body.real_name = new_body.dna.real_name
new_body.name = new_body.dna.real_name
new_body.updateappearance(mutcolor_update=1)
new_body.domutcheck()
new_body.forceMove(get_turf(src))
new_body.blood_volume = BLOOD_VOLUME_SAFE+60
REMOVE_TRAIT(new_body, TRAIT_NO_TRANSFORM, REF(src))
SSquirks.AssignQuirks(new_body, brainmob.client)
src.replace_into(new_body)
for(var/obj/item/bodypart/bodypart as anything in new_body.bodyparts)
if(!istype(bodypart, /obj/item/bodypart/chest))
bodypart.drop_limb()
continue
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."))
brainmob.mind.transfer_to(new_body)
if(!item.is_drainable() || item.reagents.get_reagent_amount(/datum/reagent/toxin/plasma) < 100)
return FALSE
user.visible_message(
span_notice("[user] starts to slowly pour the contents of [item] onto [src]. It seems to bubble and roil, beginning to stretch its cytoskeleton outwards..."),
span_notice("You start to slowly pour the contents of [item] onto [src]. It seems to bubble and roil, beginning to stretch its membrane outwards...")
)
brainmob?.notify_revival("You are being revived!", sound = null, source = src) // no sound since it's a whopping 60 second wait time after this
if(!do_after(user, 60 SECONDS, src))
to_chat(user, span_warning("You failed to pour the contents of [item] onto [src]!"))
return TRUE

user.visible_message(
span_notice("[user] pours the contents of [item] onto [src], causing it to form a proper cytoplasm and outer membrane."),
span_notice("You pour the contents of [item] onto [src], causing it to form a proper cytoplasm and outer membrane.")
)
item.reagents.clear_reagents() //removes the whole shit
if(isnull(brainmob))
user.balloon_alert("This brain is not a viable candidate for repair!")
return TRUE
return FALSE

brainmob.grab_ghost()
if(isnull(brainmob.stored_dna))
user.balloon_alert("This brain does not contain any dna!")
return TRUE
if(isnull(brainmob.client))
user.balloon_alert("This brain does not contain a mind!")
return TRUE
regenerate()
return TRUE

/obj/item/organ/internal/brain/slime/proc/regenerate()
//we have the plasma. we can rebuild them.
set_organ_damage(-maxHealth) //fully heals the brain
if(gps_active) // making sure the gps signal is removed if it's active on revival
gps_active = FALSE
qdel(GetComponent(/datum/component/gps))

var/mob/living/carbon/human/new_body = new /mob/living/carbon/human(src.loc)

brainmob.client?.prefs?.safe_transfer_prefs_to(new_body)
new_body.underwear = "Nude"
new_body.bra = "Nude"
new_body.undershirt = "Nude" //Which undershirt the player wants
new_body.socks = "Nude" //Which socks the player wants
brainmob.stored_dna.transfer_identity(new_body, transfer_SE=1)
new_body.dna.features["mcolor"] = new_body.dna.features["mcolor"]
new_body.dna.update_uf_block(DNA_MUTANT_COLOR_BLOCK)
new_body.real_name = new_body.dna.real_name
new_body.name = new_body.dna.real_name
new_body.updateappearance(mutcolor_update=1)
new_body.domutcheck()
new_body.forceMove(get_turf(src))
new_body.blood_volume = BLOOD_VOLUME_SAFE+60
SSquirks.AssignQuirks(new_body, brainmob.client)
src.replace_into(new_body)
for(var/obj/item/bodypart/bodypart as anything in new_body.bodyparts)
if(!istype(bodypart, /obj/item/bodypart/chest))
bodypart.drop_limb()
continue
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."))
return TRUE

// HEALING SECTION
// Handles passive healing and water damage.
Expand Down

0 comments on commit 8289c33

Please sign in to comment.