diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index 115a5ae59d2..f5959c1037e 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -105,3 +105,58 @@ protected_dna |= new_dna return absorbed_dna |= new_dna + + +/obj/effect/proc_holder/changeling/swap_form + name = "Swap Forms" + desc = "We force ourselves into the body of another form, pushing their consciousness into the form we left behind." + helptext = "We will bring all our abilities with us, but we will lose our old form DNA in exchange for the new one. The process will seem suspicious to any observers." + chemical_cost = 40 + dna_cost = 1 + req_human = 1 //Monkeys can't grab + +/obj/effect/proc_holder/changeling/swap_form/can_sting(var/mob/living/carbon/user) + if(!..()) + return + var/obj/item/weapon/grab/G = user.get_active_hand() + if(!istype(G) || (G.state < GRAB_AGGRESSIVE)) + user << "We must have an aggressive grab on creature in our active hand to do this!" + return + var/mob/living/carbon/human/target = G.affecting + if((NOCLONE || SKELETON || HUSK) in target.mutations) + user << "DNA of [target] is ruined beyond usability!" + return + if(!istype(target) || issmall(target) || target.species.flags & IS_SYNTHETIC || target.species.flags & NO_SCAN || target.species.flags & NO_BLOOD) + user << "[target] is not compatible with this ability." + return + return 1 + + +/obj/effect/proc_holder/changeling/swap_form/sting_action(var/mob/living/carbon/user) + var/obj/item/weapon/grab/G = user.get_active_hand() + var/mob/living/carbon/human/target = G.affecting + var/datum/changeling/changeling = user.mind.changeling + + user << "We tighen our grip. We must hold still...." + target.do_jitter_animation(500) + user.do_jitter_animation(500) + + if(!do_mob(user,target,20)) + user << "The body swap has been interrupted!" + return + + target << "[user] tightens their grip as a painful sensation invades your body." + + if(!changeling.has_dna(target.dna)) + changeling.absorb_dna(target, user) + changeling.protected_dna -= user.dna + changeling.absorbed_dna -= user.dna + + var/mob/dead/observer/ghost = target.ghostize(0) + user.mind.transfer_to(target) + if(ghost && ghost.mind) + ghost.mind.transfer_to(user) + user.key = ghost.key + + user.Paralyse(2) + target << "Our genes cry out as we swap our [user] form for [target]." \ No newline at end of file