diff --git a/modular_nova/modules/bodyparts/code/roundstartslime_bodyparts.dm b/modular_nova/modules/bodyparts/code/roundstartslime_bodyparts.dm index 922d7fc2647..eadd4240091 100644 --- a/modular_nova/modules/bodyparts/code/roundstartslime_bodyparts.dm +++ b/modular_nova/modules/bodyparts/code/roundstartslime_bodyparts.dm @@ -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) @@ -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 diff --git a/modular_nova/modules/bodyparts/icons/slime_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/slime_parts_greyscale.dmi index c37a0d42c6a..6d4689dafdb 100644 Binary files a/modular_nova/modules/bodyparts/icons/slime_parts_greyscale.dmi and b/modular_nova/modules/bodyparts/icons/slime_parts_greyscale.dmi differ diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm index fd46990f546..2b29de082dd 100644 --- a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm @@ -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.