From 30b434d99798d25dc69e812e27365c286166b5bc Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Tue, 21 Jul 2015 22:39:53 -0400 Subject: [PATCH] Changeling Bodyswap Ability --- .../gamemodes/changeling/powers/absorb.dm | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index 115a5ae59d2..384102d814c 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -105,3 +105,59 @@ 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 = 2 + req_human = 1 //Monkeys can't grab + genetic_damage = 50 + +/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