diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm index 961fc177bce..669b71bc448 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm @@ -137,6 +137,12 @@ set hidden = 1 humanform.nano_latch() +/mob/living/simple_mob/protean_blob/proc/nano_assimilate() + set name = "Assimilate Host" + set desc = "Allows a protean to assimilate a latched host, allowing them to devour them right away." + set hidden = 1 + humanform.nano_assimilate() + /mob/living/simple_mob/protean_blob/Login() ..() plane_holder.set_vis(VIS_AUGMENTED, 1) diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm index 0b0fc60284a..640e214b005 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm @@ -595,6 +595,32 @@ else to_chat(protie, span_warning("You need to be grabbing a humanoid mob aggressively to latch onto them.")) +/mob/living/carbon/human/proc/nano_assimilate() + set name = "Assimilate Host" + set desc = "Allows a protean to assimilate a latched host, allowing them to devour them right away." + set hidden = 1 + + var/mob/living/protie = src + var/mob/living/carbon/human/target + var/datum/species/protean/S = src.species + if(nano_dead_check(src)) + return + if(temporary_form) + protie = temporary_form + if(protie.loc == S.OurRig) + target = S.OurRig.wearer + if(!target) + to_chat(protie, span_vwarning("You need a host to assimilate.")) + return + if(!protie.can_be_drop_pred || !target.can_be_drop_prey || !target.devourable) + to_chat(protie, span_vwarning("You can't assimilate your current host.")) + return + target.drop_from_inventory(S.OurRig) + to_chat(protie, span_vnotice("You assimilate your host.")) + to_chat(target, span_vwarning("You feel yourself sink deeper into the suit!")) + target.forceMove(protie.vore_selected) + nano_blobform(TRUE) + /// /// /// A helper to reuse /mob/living/proc/nano_get_refactory(obj/item/organ/internal/nano/refactory/R) if(istype(R)) @@ -704,6 +730,12 @@ icon_state = "latch" to_call = /mob/living/carbon/human/proc/nano_latch +/obj/effect/protean_ability/assimilate_host + ability_name = "Assimilate Host" + desc = "Allows a protean to assimilate a latched host, allowing them to devour them right away." + icon_state = "assimilate" + to_call = /mob/living/carbon/human/proc/nano_assimilate + /obj/effect/protean_ability/copy_form ability_name = "Copy Form" desc = "If you are aggressively grabbing someone, with their consent, you can turn into a copy of them. (Without their name)." diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm index 484ccdbc8b2..b663d748e93 100755 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm @@ -99,6 +99,7 @@ /mob/living/carbon/human/proc/nano_copy_body, /mob/living/carbon/human/proc/appearance_switch, /mob/living/carbon/human/proc/nano_latch, + /mob/living/carbon/human/proc/nano_assimilate, /mob/living/proc/set_size, /mob/living/carbon/human/proc/nano_change_fitting, //These verbs are displayed normally, /mob/living/carbon/human/proc/shapeshifter_select_hair, @@ -239,20 +240,22 @@ /datum/species/protean/handle_death(var/mob/living/carbon/human/H) if(!H) return //No body? - if(OurRig.dead) - return - OurRig.dead = 1 + if(OurRig) + if(OurRig.dead) + return + OurRig.dead = 1 var/mob/temp = H if(H.temporary_form) temp = H.temporary_form playsound(temp, 'sound/voice/borg_deathsound.ogg', 50, 1) temp.visible_message(span_bold("[temp.name]") + " shudders and retreats inwards, coalescing into a single core componant!") to_chat(temp, span_warning("You've died as a Protean! While dead, you will be locked to your core RIG control module until you can be repaired. Instructions to your revival can be found in the Examine tab when examining your module.")) - if(H.temporary_form) - if(!istype(H.temporary_form.loc, /obj/item/rig/protean)) + if(OurRig) + if(H.temporary_form) + if(!istype(H.temporary_form.loc, /obj/item/rig/protean)) + H.nano_rig_transform(1) + else H.nano_rig_transform(1) - else - H.nano_rig_transform(1) pseudodead = 1 /datum/species/protean/handle_environment_special(var/mob/living/carbon/human/H) diff --git a/icons/mob/species/protean/protean_powers.dmi b/icons/mob/species/protean/protean_powers.dmi index efcd821a813..2ae91c09471 100644 Binary files a/icons/mob/species/protean/protean_powers.dmi and b/icons/mob/species/protean/protean_powers.dmi differ