protean host assimilation

This commit is contained in:
Kashargul
2024-12-09 23:43:28 +01:00
committed by GitHub
parent f3aafe0265
commit bb77e6d12d
4 changed files with 48 additions and 7 deletions
@@ -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)
@@ -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)."
@@ -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)