/obj/effect/proc_holder/changeling/absorbDNA
name = "Absorb DNA"
desc = "Absorb the DNA of our victim."
chemical_cost = 0
dna_cost = 0
req_human = 1
max_genetic_damage = 100
/obj/effect/proc_holder/changeling/absorbDNA/can_sting(mob/living/carbon/user)
if(!..())
return
var/datum/changeling/changeling = user.mind.changeling
if(changeling.isabsorbing)
user << "We are already absorbing!"
return
if(!user.pulling || !iscarbon(user.pulling))
user << "We must be grabbing a creature to absorb them!"
return
if(user.grab_state <= GRAB_NECK)
user << "We must have a tighter grip to absorb this creature!"
return
var/mob/living/carbon/target = user.pulling
return changeling.can_absorb_dna(user,target)
/obj/effect/proc_holder/changeling/absorbDNA/sting_action(mob/user)
var/datum/changeling/changeling = user.mind.changeling
var/mob/living/carbon/human/target = user.pulling
changeling.isabsorbing = 1
for(var/stage = 1, stage<=3, stage++)
switch(stage)
if(1)
user << "This creature is compatible. We must hold still..."
if(2)
user.visible_message("[user] extends a proboscis!", "We extend a proboscis.")
if(3)
user.visible_message("[user] stabs [target] with the proboscis!", "We stab [target] with the proboscis.")
target << "You feel a sharp stabbing pain!"
target.take_overall_damage(40)
feedback_add_details("changeling_powers","A[stage]")
if(!do_mob(user, target, 150))
user << "Our absorption of [target] has been interrupted!"
changeling.isabsorbing = 0
return
user.visible_message("[user] sucks the fluids from [target]!", "We have absorbed [target].")
target << "You are absorbed by the changeling!"
if(!changeling.has_dna(target.dna))
changeling.add_new_profile(target, user)
if(user.nutrition < NUTRITION_LEVEL_WELL_FED)
user.nutrition = min((user.nutrition + target.nutrition), NUTRITION_LEVEL_WELL_FED)
if(target.mind)//if the victim has got a mind
target.mind.show_memory(user, 0) //I can read your mind, kekeke. Output all their notes.
//Some of target's recent speech, so the changeling can attempt to imitate them better.
//Recent as opposed to all because rounds tend to have a LOT of text.
var/list/recent_speech = list()
if(target.say_log.len > LING_ABSORB_RECENT_SPEECH)
recent_speech = target.say_log.Copy(target.say_log.len-LING_ABSORB_RECENT_SPEECH+1,0) //0 so len-LING_ARS+1 to end of list
else
for(var/spoken_memory in target.say_log)
if(recent_speech.len >= LING_ABSORB_RECENT_SPEECH)
break
recent_speech[spoken_memory] = target.say_log[spoken_memory]
if(recent_speech.len)
user.mind.store_memory("Some of [target]'s speech patterns, we should study these to better impersonate them!")
user << "Some of [target]'s speech patterns, we should study these to better impersonate them!"
for(var/spoken_memory in recent_speech)
user.mind.store_memory("\"[recent_speech[spoken_memory]]\"")
user << "\"[recent_speech[spoken_memory]]\""
user.mind.store_memory("We have no more knowledge of [target]'s speech patterns.")
user << "We have no more knowledge of [target]'s speech patterns."
if(target.mind.changeling)//If the target was a changeling, suck out their extra juice and objective points!
changeling.chem_charges += min(target.mind.changeling.chem_charges, changeling.chem_storage)
changeling.absorbedcount += (target.mind.changeling.absorbedcount)
target.mind.changeling.stored_profiles.len = 1
target.mind.changeling.absorbedcount = 0
changeling.chem_charges=min(changeling.chem_charges+10, changeling.chem_storage)
changeling.isabsorbing = 0
changeling.canrespec = 1
target.death(0)
target.Drain()
return 1
//Absorbs the target DNA.
//datum/changeling/proc/absorb_dna(mob/living/carbon/T, mob/user)
//datum/changeling/proc/store_dna(datum/dna/new_dna, mob/user)