mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-20 11:35:19 +01:00
Transformation Deduplication (#19034)
* transformation deduplication deduplicates a bunch of tf verbs * whoops * double whoops * small fix * more deduplication * fair point * whoops * some more deduplication
This commit is contained in:
@@ -478,50 +478,10 @@
|
||||
|
||||
if(new_mob && isliving(new_mob))
|
||||
species.lleill_energy -= energy_cost
|
||||
for(var/obj/belly/B as anything in new_mob.vore_organs)
|
||||
new_mob.vore_organs -= B
|
||||
qdel(B)
|
||||
new_mob.vore_organs = list()
|
||||
new_mob.name = M.name
|
||||
new_mob.real_name = M.real_name
|
||||
add_verb(new_mob, /mob/living/proc/revert_beast_form)
|
||||
add_verb(new_mob, /mob/living/proc/set_size)
|
||||
add_verb(new_mob, /mob/living/simple_mob/proc/ColorMate)
|
||||
for(var/lang in M.languages)
|
||||
new_mob.languages |= lang
|
||||
M.copy_vore_prefs_to_mob(new_mob)
|
||||
new_mob.vore_selected = M.vore_selected
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(ishuman(new_mob))
|
||||
var/mob/living/carbon/human/N = new_mob
|
||||
N.gender = H.gender
|
||||
N.identifying_gender = H.identifying_gender
|
||||
else
|
||||
new_mob.gender = H.gender
|
||||
else
|
||||
new_mob.gender = M.gender
|
||||
if(ishuman(new_mob))
|
||||
var/mob/living/carbon/human/N = new_mob
|
||||
N.identifying_gender = M.gender
|
||||
|
||||
for(var/obj/belly/B as anything in M.vore_organs)
|
||||
B.loc = new_mob
|
||||
B.forceMove(new_mob)
|
||||
B.owner = new_mob
|
||||
M.vore_organs -= B
|
||||
new_mob.vore_organs += B
|
||||
|
||||
new_mob.ckey = M.ckey
|
||||
if(M.ai_holder && new_mob.ai_holder)
|
||||
var/datum/ai_holder/old_AI = M.ai_holder
|
||||
old_AI.set_stance(STANCE_SLEEP)
|
||||
var/datum/ai_holder/new_AI = new_mob.ai_holder
|
||||
new_AI.hostile = old_AI.hostile
|
||||
new_AI.retaliate = old_AI.retaliate
|
||||
M.loc = new_mob
|
||||
M.forceMove(new_mob)
|
||||
new_mob.tf_mob_holder = M
|
||||
transfer_mob_identity(new_mob)
|
||||
new_mob.visible_message(span_infoplain(span_bold("\The [src]") + " has transformed into \the [chosen_beast]!"))
|
||||
species.update_lleill_hud(src)
|
||||
|
||||
@@ -563,12 +523,7 @@
|
||||
ourmob.forceMove(beast_loc)
|
||||
ourmob.vore_selected = vore_selected
|
||||
vore_selected = null
|
||||
for(var/obj/belly/B as anything in vore_organs)
|
||||
B.loc = ourmob
|
||||
B.forceMove(ourmob)
|
||||
B.owner = ourmob
|
||||
vore_organs -= B
|
||||
ourmob.vore_organs += B
|
||||
ourmob.mob_belly_transfer(src)
|
||||
|
||||
ourmob.Life(1)
|
||||
|
||||
@@ -682,51 +637,8 @@
|
||||
|
||||
if(new_mob && isliving(new_mob))
|
||||
species.lleill_energy -= energy_cost
|
||||
for(var/obj/belly/B as anything in new_mob.vore_organs)
|
||||
new_mob.vore_organs -= B
|
||||
qdel(B)
|
||||
new_mob.vore_organs = list()
|
||||
new_mob.name = M.name
|
||||
new_mob.real_name = M.real_name
|
||||
add_verb(new_mob, /mob/living/proc/revert_beast_form)
|
||||
add_verb(new_mob, /mob/living/proc/set_size)
|
||||
add_verb(new_mob, /mob/living/simple_mob/proc/ColorMate)
|
||||
new_mob.hasthermals = 0
|
||||
new_mob.health = M.health
|
||||
new_mob.maxHealth = M.health
|
||||
for(var/lang in M.languages)
|
||||
new_mob.languages |= lang
|
||||
M.copy_vore_prefs_to_mob(new_mob)
|
||||
new_mob.vore_selected = M.vore_selected
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(ishuman(new_mob))
|
||||
var/mob/living/carbon/human/N = new_mob
|
||||
N.gender = H.gender
|
||||
N.identifying_gender = H.identifying_gender
|
||||
else
|
||||
new_mob.gender = H.gender
|
||||
else
|
||||
new_mob.gender = M.gender
|
||||
if(ishuman(new_mob))
|
||||
var/mob/living/carbon/human/N = new_mob
|
||||
N.identifying_gender = M.gender
|
||||
|
||||
for(var/obj/belly/B as anything in M.vore_organs)
|
||||
B.loc = new_mob
|
||||
B.forceMove(new_mob)
|
||||
B.owner = new_mob
|
||||
M.vore_organs -= B
|
||||
new_mob.vore_organs += B
|
||||
|
||||
new_mob.ckey = M.ckey
|
||||
if(M.ai_holder && new_mob.ai_holder)
|
||||
var/datum/ai_holder/old_AI = M.ai_holder
|
||||
old_AI.set_stance(STANCE_SLEEP)
|
||||
var/datum/ai_holder/new_AI = new_mob.ai_holder
|
||||
new_AI.hostile = old_AI.hostile
|
||||
new_AI.retaliate = old_AI.retaliate
|
||||
M.loc = new_mob
|
||||
M.forceMove(new_mob)
|
||||
new_mob.tf_mob_holder = M
|
||||
transfer_mob_identity(new_mob)
|
||||
new_mob.visible_message(span_infoplain(span_bold("\The [src]") + " has transformed into \the [chosen_beast]!"))
|
||||
|
||||
@@ -403,27 +403,7 @@
|
||||
if(!istype(M))
|
||||
return
|
||||
if(M.tf_mob_holder)
|
||||
var/mob/living/ourmob = M.tf_mob_holder
|
||||
if(ourmob.ai_holder)
|
||||
var/datum/ai_holder/our_AI = ourmob.ai_holder
|
||||
our_AI.set_stance(STANCE_IDLE)
|
||||
M.tf_mob_holder = null
|
||||
ourmob.ckey = M.ckey
|
||||
var/turf/get_dat_turf = get_turf(target)
|
||||
ourmob.loc = get_dat_turf
|
||||
ourmob.forceMove(get_dat_turf)
|
||||
ourmob.vore_selected = M.vore_selected
|
||||
M.vore_selected = null
|
||||
ourmob.mob_belly_transfer(M)
|
||||
|
||||
ourmob.Life(1)
|
||||
if(ishuman(M))
|
||||
for(var/obj/item/W in M)
|
||||
if(istype(W, /obj/item/implant/backup) || istype(W, /obj/item/nif))
|
||||
continue
|
||||
M.drop_from_inventory(W)
|
||||
|
||||
qdel(target)
|
||||
M.revert_mob_tf()
|
||||
return
|
||||
else
|
||||
if(M.stat == DEAD) //We can let it undo the TF, because the person will be dead, but otherwise things get weird.
|
||||
|
||||
@@ -79,12 +79,7 @@
|
||||
tf_mob_holder.forceMove(get_dat_turf)
|
||||
QDEL_LIST_NULL(tf_mob_holder.vore_organs)
|
||||
tf_mob_holder.vore_organs = list()
|
||||
for(var/obj/belly/B as anything in vore_organs)
|
||||
B.loc = tf_mob_holder
|
||||
B.forceMove(tf_mob_holder)
|
||||
B.owner = tf_mob_holder
|
||||
tf_mob_holder.vore_organs |= B
|
||||
vore_organs -= B
|
||||
tf_mob_holder.mob_belly_transfer(src)
|
||||
if(tf_mob_holder)
|
||||
tf_mob_holder = null
|
||||
QDEL_NULL_LIST(hud_list)
|
||||
|
||||
@@ -229,27 +229,7 @@
|
||||
if(!M.allow_spontaneous_tf && !tf_admin_pref_override)
|
||||
return
|
||||
if(M.tf_mob_holder)
|
||||
var/mob/living/ourmob = M.tf_mob_holder
|
||||
if(ourmob.ai_holder)
|
||||
var/datum/ai_holder/our_AI = ourmob.ai_holder
|
||||
our_AI.set_stance(STANCE_IDLE)
|
||||
M.tf_mob_holder = null
|
||||
ourmob.ckey = M.ckey
|
||||
var/turf/get_dat_turf = get_turf(target)
|
||||
ourmob.loc = get_dat_turf
|
||||
ourmob.forceMove(get_dat_turf)
|
||||
ourmob.vore_selected = M.vore_selected
|
||||
M.vore_selected = null
|
||||
ourmob.mob_belly_transfer(M)
|
||||
|
||||
ourmob.Life(1)
|
||||
if(ishuman(M))
|
||||
for(var/obj/item/W in M)
|
||||
if(istype(W, /obj/item/implant/backup) || istype(W, /obj/item/nif))
|
||||
continue
|
||||
M.drop_from_inventory(W)
|
||||
|
||||
qdel(target)
|
||||
M.revert_mob_tf()
|
||||
return
|
||||
else
|
||||
if(M.stat == DEAD) //We can let it undo the TF, because the person will be dead, but otherwise things get weird.
|
||||
@@ -473,49 +453,9 @@
|
||||
new_mob.faction = M.faction
|
||||
|
||||
if(new_mob && isliving(new_mob))
|
||||
for(var/obj/belly/B as anything in new_mob.vore_organs)
|
||||
new_mob.vore_organs -= B
|
||||
qdel(B)
|
||||
new_mob.vore_organs = list()
|
||||
new_mob.name = M.name
|
||||
new_mob.real_name = M.real_name
|
||||
new_mob.verbs |= /mob/living/proc/revert_beast_form
|
||||
new_mob.verbs |= /mob/living/proc/set_size
|
||||
for(var/lang in M.languages)
|
||||
new_mob.languages |= lang
|
||||
M.copy_vore_prefs_to_mob(new_mob)
|
||||
new_mob.vore_selected = M.vore_selected
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(ishuman(new_mob))
|
||||
var/mob/living/carbon/human/N = new_mob
|
||||
N.gender = H.gender
|
||||
N.identifying_gender = H.identifying_gender
|
||||
else
|
||||
new_mob.gender = H.gender
|
||||
else
|
||||
new_mob.gender = M.gender
|
||||
if(ishuman(new_mob))
|
||||
var/mob/living/carbon/human/N = new_mob
|
||||
N.identifying_gender = M.gender
|
||||
|
||||
for(var/obj/belly/B as anything in M.vore_organs)
|
||||
B.loc = new_mob
|
||||
B.forceMove(new_mob)
|
||||
B.owner = new_mob
|
||||
M.vore_organs -= B
|
||||
new_mob.vore_organs += B
|
||||
|
||||
new_mob.ckey = M.ckey
|
||||
if(M.ai_holder && new_mob.ai_holder)
|
||||
var/datum/ai_holder/old_AI = M.ai_holder
|
||||
old_AI.set_stance(STANCE_SLEEP)
|
||||
var/datum/ai_holder/new_AI = new_mob.ai_holder
|
||||
new_AI.hostile = old_AI.hostile
|
||||
new_AI.retaliate = old_AI.retaliate
|
||||
M.loc = new_mob
|
||||
M.forceMove(new_mob)
|
||||
new_mob.tf_mob_holder = M
|
||||
transfer_mob_identity(new_mob)
|
||||
new_mob.visible_message("<b>\The [src]</b> has transformed into \the [chosen_beast]!")
|
||||
|
||||
/mob/living/proc/spawn_polymorph_mob(var/chosen_beast)
|
||||
|
||||
@@ -226,29 +226,7 @@
|
||||
if(!istype(M))
|
||||
return
|
||||
if(M.tf_mob_holder)
|
||||
var/mob/living/ourmob = M.tf_mob_holder
|
||||
if(ourmob.ai_holder)
|
||||
var/datum/ai_holder/our_AI = ourmob.ai_holder
|
||||
our_AI.set_stance(STANCE_IDLE)
|
||||
M.tf_mob_holder = null
|
||||
ourmob.ckey = M.ckey
|
||||
var/turf/get_dat_turf = get_turf(target)
|
||||
ourmob.loc = get_dat_turf
|
||||
ourmob.forceMove(get_dat_turf)
|
||||
ourmob.vore_selected = M.vore_selected
|
||||
M.vore_selected = null
|
||||
ourmob.mob_belly_transfer(M)
|
||||
|
||||
M.soulgem.transfer_self(ourmob) // Soulcatcher
|
||||
|
||||
ourmob.Life(1)
|
||||
if(ishuman(M))
|
||||
for(var/obj/item/W in M)
|
||||
if(istype(W, /obj/item/implant/backup) || istype(W, /obj/item/nif))
|
||||
continue
|
||||
M.drop_from_inventory(W)
|
||||
|
||||
qdel(target)
|
||||
M.revert_mob_tf()
|
||||
return
|
||||
else
|
||||
if(M.stat == DEAD) //We can let it undo the TF, because the person will be dead, but otherwise things get weird.
|
||||
|
||||
@@ -861,12 +861,7 @@
|
||||
M.tf_mob_holder.forceMove(M.loc)
|
||||
QDEL_LIST_NULL(M.tf_mob_holder.vore_organs)
|
||||
M.tf_mob_holder.vore_organs = list()
|
||||
for(var/obj/belly/B as anything in M.vore_organs)
|
||||
B.loc = M.tf_mob_holder
|
||||
B.forceMove(M.tf_mob_holder)
|
||||
B.owner = M.tf_mob_holder
|
||||
M.tf_mob_holder.vore_organs |= B
|
||||
M.vore_organs -= B
|
||||
M.tf_mob_holder.mob_belly_transfer(M)
|
||||
|
||||
if(M.tf_mob_holder)
|
||||
M.tf_mob_holder = null
|
||||
|
||||
+39
-92
@@ -1,13 +1,13 @@
|
||||
// Procs for living mobs based around mob transformation. Initially made for the mouseray, they are now used in various other places and the main procs are now called from here.
|
||||
|
||||
/mob/living/proc/tf_into(var/A, var/allow_emotes = FALSE, var/object_name)
|
||||
if(!object_name)
|
||||
object_name = name
|
||||
if(isliving(A))
|
||||
var/mob/living/M = A
|
||||
M.mob_tf(src)
|
||||
transform_into_mob(M, FALSE)
|
||||
return
|
||||
if(isitem(A))
|
||||
if(!object_name)
|
||||
object_name = name
|
||||
var/obj/item/I = A
|
||||
I.inhabit_item(src, object_name, src, allow_emotes)
|
||||
var/mob/living/possessed_voice = I.possessed_voice
|
||||
@@ -15,55 +15,6 @@
|
||||
I.unacidable = !digestable
|
||||
forceMove(possessed_voice)
|
||||
|
||||
/mob/living/proc/mob_tf(var/mob/living/M)
|
||||
if(!istype(M))
|
||||
return
|
||||
if(src && isliving(src))
|
||||
faction = M.faction
|
||||
if(istype(src, /mob/living/simple_mob))
|
||||
var/mob/living/simple_mob/S = src
|
||||
if(!S.voremob_loaded)
|
||||
S.init_vore(TRUE)
|
||||
new /obj/effect/effect/teleport_greyscale(M.loc)
|
||||
for(var/obj/belly/B as anything in src.vore_organs)
|
||||
src.vore_organs -= B
|
||||
qdel(B)
|
||||
src.vore_organs = list()
|
||||
src.name = M.name
|
||||
src.real_name = M.real_name
|
||||
for(var/lang in M.languages)
|
||||
src.languages |= lang
|
||||
M.copy_vore_prefs_to_mob(src)
|
||||
src.vore_selected = M.vore_selected
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/N = src
|
||||
N.gender = H.gender
|
||||
N.identifying_gender = H.identifying_gender
|
||||
else
|
||||
src.gender = H.gender
|
||||
else
|
||||
src.gender = M.gender
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/N = src
|
||||
N.identifying_gender = M.gender
|
||||
|
||||
mob_belly_transfer(M)
|
||||
M.soulgem.transfer_self(src) // Soulcatcher
|
||||
|
||||
nutrition = M.nutrition
|
||||
src.ckey = M.ckey
|
||||
if(M.ai_holder && src.ai_holder)
|
||||
var/datum/ai_holder/old_AI = M.ai_holder
|
||||
old_AI.set_stance(STANCE_SLEEP)
|
||||
var/datum/ai_holder/new_AI = src.ai_holder
|
||||
new_AI.hostile = old_AI.hostile
|
||||
new_AI.retaliate = old_AI.retaliate
|
||||
M.loc = src
|
||||
M.forceMove(src)
|
||||
src.tf_mob_holder = M
|
||||
|
||||
/mob/living/proc/mob_belly_transfer(var/mob/living/M)
|
||||
for(var/obj/belly/B as anything in M.vore_organs)
|
||||
B.loc = src
|
||||
@@ -72,6 +23,36 @@
|
||||
M.vore_organs -= B
|
||||
src.vore_organs += B
|
||||
|
||||
/mob/living/proc/transfer_mob_identity(var/mob/living/new_mob)
|
||||
for(var/obj/belly/B as anything in new_mob.vore_organs)
|
||||
new_mob.vore_organs -= B
|
||||
qdel(B)
|
||||
new_mob.vore_organs = list()
|
||||
new_mob.name = src.name
|
||||
new_mob.real_name = src.real_name
|
||||
for(var/lang in src.languages)
|
||||
new_mob.languages |= lang
|
||||
src.copy_vore_prefs_to_mob(new_mob)
|
||||
new_mob.vore_selected = src.vore_selected
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(ishuman(new_mob))
|
||||
var/mob/living/carbon/human/N = new_mob
|
||||
N.gender = H.gender
|
||||
N.identifying_gender = H.identifying_gender
|
||||
else
|
||||
new_mob.gender = H.gender
|
||||
else
|
||||
new_mob.gender = src.gender
|
||||
if(ishuman(new_mob))
|
||||
var/mob/living/carbon/human/N = new_mob
|
||||
N.identifying_gender = src.gender
|
||||
|
||||
new_mob.mob_belly_transfer(src)
|
||||
new_mob.nutrition = src.nutrition
|
||||
|
||||
src.soulgem?.transfer_self(new_mob)
|
||||
|
||||
/mob/living
|
||||
var/mob/living/tf_mob_holder = null
|
||||
|
||||
@@ -123,12 +104,7 @@
|
||||
if(!tf_form_ckey)
|
||||
ourmob.vore_selected = vore_selected
|
||||
vore_selected = null
|
||||
for(var/obj/belly/B as anything in vore_organs)
|
||||
B.loc = ourmob
|
||||
B.forceMove(ourmob)
|
||||
B.owner = ourmob
|
||||
vore_organs -= B
|
||||
ourmob.vore_organs += B
|
||||
ourmob.mob_belly_transfer(src)
|
||||
|
||||
ourmob.Life(1)
|
||||
|
||||
@@ -198,7 +174,10 @@
|
||||
if(new_mob.ckey)
|
||||
new_mob.tf_form_ckey = new_mob.ckey
|
||||
else
|
||||
new_mob = new new_form(get_turf(src))
|
||||
if(isliving(new_form))
|
||||
new_mob = new_form
|
||||
else
|
||||
new_mob = new new_form(get_turf(src))
|
||||
|
||||
if(new_mob && isliving(new_mob))
|
||||
new_mob.faction = src.faction
|
||||
@@ -208,39 +187,7 @@
|
||||
S.init_vore(TRUE)
|
||||
new /obj/effect/effect/teleport_greyscale(src.loc)
|
||||
if(!new_mob.ckey)
|
||||
for(var/obj/belly/B as anything in new_mob.vore_organs)
|
||||
new_mob.vore_organs -= B
|
||||
qdel(B)
|
||||
new_mob.vore_organs = list()
|
||||
new_mob.name = src.name
|
||||
new_mob.real_name = src.real_name
|
||||
for(var/lang in src.languages)
|
||||
new_mob.languages |= lang
|
||||
src.copy_vore_prefs_to_mob(new_mob)
|
||||
new_mob.vore_selected = src.vore_selected
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(ishuman(new_mob))
|
||||
var/mob/living/carbon/human/N = new_mob
|
||||
N.gender = H.gender
|
||||
N.identifying_gender = H.identifying_gender
|
||||
else
|
||||
new_mob.gender = H.gender
|
||||
else
|
||||
new_mob.gender = src.gender
|
||||
if(ishuman(new_mob))
|
||||
var/mob/living/carbon/human/N = new_mob
|
||||
N.identifying_gender = src.gender
|
||||
|
||||
for(var/obj/belly/B as anything in src.vore_organs)
|
||||
B.loc = new_mob
|
||||
B.forceMove(new_mob)
|
||||
B.owner = new_mob
|
||||
src.vore_organs -= B
|
||||
new_mob.vore_organs += B
|
||||
new_mob.nutrition = src.nutrition
|
||||
|
||||
src.soulgem?.transfer_self(new_mob)
|
||||
transfer_mob_identity(new_mob)
|
||||
|
||||
new_mob.ckey = src.ckey
|
||||
if(new_mob.tf_form_ckey)
|
||||
|
||||
@@ -94,40 +94,7 @@
|
||||
return
|
||||
M.drop_both_hands()
|
||||
if(M.tf_mob_holder && M.tf_mob_holder.loc == M)
|
||||
new /obj/effect/effect/teleport_greyscale(M.loc)
|
||||
var/mob/living/ourmob = M.tf_mob_holder
|
||||
if(ourmob.ai_holder)
|
||||
var/datum/ai_holder/our_AI = ourmob.ai_holder
|
||||
our_AI.set_stance(STANCE_IDLE)
|
||||
M.tf_mob_holder = null
|
||||
var/turf/get_dat_turf = get_turf(target)
|
||||
ourmob.loc = get_dat_turf
|
||||
ourmob.forceMove(get_dat_turf)
|
||||
if(!M.tf_form_ckey)
|
||||
ourmob.vore_selected = M.vore_selected
|
||||
M.vore_selected = null
|
||||
ourmob.mob_belly_transfer(M)
|
||||
ourmob.nutrition = M.nutrition
|
||||
M.soulgem.transfer_self(ourmob)
|
||||
|
||||
ourmob.ckey = M.ckey
|
||||
|
||||
ourmob.Life(1)
|
||||
if(ishuman(M))
|
||||
for(var/obj/item/W in M)
|
||||
if(istype(W, /obj/item/implant/backup) || istype(W, /obj/item/nif))
|
||||
continue
|
||||
M.drop_from_inventory(W)
|
||||
|
||||
if(M.tf_form == ourmob)
|
||||
if(M.tf_form_ckey)
|
||||
M.ckey = M.tf_form_ckey
|
||||
else
|
||||
M.mind = null
|
||||
ourmob.tf_form = M
|
||||
M.forceMove(ourmob)
|
||||
else
|
||||
qdel(target)
|
||||
M.revert_mob_tf()
|
||||
return
|
||||
else
|
||||
if(M.stat == DEAD) //We can let it undo the TF, because the person will be dead, but otherwise things get weird.
|
||||
@@ -193,44 +160,7 @@
|
||||
firer.visible_message(span_warning("\The [src] buzzes impolitely."))
|
||||
return
|
||||
if(M.tf_mob_holder)
|
||||
var/mob/living/ourmob = M.tf_mob_holder
|
||||
if(ourmob.ai_holder)
|
||||
var/datum/ai_holder/our_AI = ourmob.ai_holder
|
||||
our_AI.set_stance(STANCE_IDLE)
|
||||
M.tf_mob_holder = null
|
||||
var/turf/get_dat_turf = get_turf(target)
|
||||
ourmob.loc = get_dat_turf
|
||||
ourmob.forceMove(get_dat_turf)
|
||||
if(!M.tf_form_ckey)
|
||||
ourmob.vore_selected = M.vore_selected
|
||||
M.vore_selected = null
|
||||
for(var/obj/belly/B as anything in M.vore_organs)
|
||||
B.loc = ourmob
|
||||
B.forceMove(ourmob)
|
||||
B.owner = ourmob
|
||||
M.vore_organs -= B
|
||||
ourmob.vore_organs += B
|
||||
ourmob.nutrition = M.nutrition
|
||||
M.soulgem.transfer_self(ourmob)
|
||||
ourmob.ckey = M.ckey
|
||||
|
||||
ourmob.Life(1)
|
||||
|
||||
if(ishuman(M))
|
||||
for(var/obj/item/W in M)
|
||||
if(istype(W, /obj/item/implant/backup) || istype(W, /obj/item/nif))
|
||||
continue
|
||||
M.drop_from_inventory(W)
|
||||
|
||||
if(M.tf_form == ourmob)
|
||||
if(M.tf_form_ckey)
|
||||
M.ckey = M.tf_form_ckey
|
||||
else
|
||||
M.mind = null
|
||||
ourmob.tf_form = M
|
||||
M.forceMove(ourmob)
|
||||
else
|
||||
qdel(target)
|
||||
M.revert_mob_tf()
|
||||
firer.visible_message(span_notice("\The [shot_from] boops pleasantly."))
|
||||
return
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user