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 961fc177bc..669b71bc44 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 0b0fc60284..640e214b00 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 484ccdbc8b..b663d748e9 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 efcd821a81..2ae91c0947 100644 Binary files a/icons/mob/species/protean/protean_powers.dmi and b/icons/mob/species/protean/protean_powers.dmi differ