/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 /obj/effect/proc_holder/changeling/absorbDNA/can_sting(mob/living/carbon/user) if(!..()) return var/datum/changeling/changeling = user.mind.changeling if(changeling.isabsorbing) to_chat(user, "We are already absorbing!") return if(!user.pulling || !iscarbon(user.pulling)) to_chat(user, "We must be grabbing a creature to absorb them!") return if(user.grab_state <= GRAB_NECK) to_chat(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/i in 1 to 3) switch(i) if(1) to_chat(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.") to_chat(target, "You feel a sharp stabbing pain!") target.take_overall_damage(40) SSblackbox.add_details("changeling_powers","Absorb DNA|[i]") if(!do_mob(user, target, 150)) to_chat(user, "Our absorption of [target] has been interrupted!") changeling.isabsorbing = 0 return SSblackbox.add_details("changeling_powers","Absorb DNA|4") user.visible_message("[user] sucks the fluids from [target]!", "We have absorbed [target].") to_chat(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() var/list/say_log = target.logging[INDIVIDUAL_SAY_LOG] if(LAZYLEN(say_log) > LING_ABSORB_RECENT_SPEECH) recent_speech = say_log.Copy(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 say_log) if(recent_speech.len >= LING_ABSORB_RECENT_SPEECH) break recent_speech[spoken_memory] = 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!") to_chat(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]]\"") to_chat(user, "\"[recent_speech[spoken_memory]]\"") user.mind.store_memory("We have no more knowledge of [target]'s speech patterns.") to_chat(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 TRUE //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)