diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index a5d5652408..c9a19a4175 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -29,6 +29,7 @@
create_objects_in_loc(src, will_contain)
if(!opened) // if closed, any item at the crate's loc is put in the contents
+ if(istype(loc, /mob/living)) return //VOREStation Edit - No collecting mob organs if spawned inside mob
var/obj/item/I
for(I in src.loc)
if(I.density || I.anchored || I == src) continue
diff --git a/code/game/objects/structures/crates_lockers/closets/egg_vr.dm b/code/game/objects/structures/crates_lockers/closets/egg_vr.dm
index 64d818c790..38f4807fde 100644
--- a/code/game/objects/structures/crates_lockers/closets/egg_vr.dm
+++ b/code/game/objects/structures/crates_lockers/closets/egg_vr.dm
@@ -18,7 +18,12 @@
src.dump_contents()
qdel(src)
-
+/obj/structure/closet/secure_closet/egg/dump_contents()
+ var/datum/belly/belly = check_belly(src)
+ if(belly)
+ for(var/atom/movable/M in src)
+ belly.internal_contents += M
+ return ..()
/obj/structure/closet/secure_closet/egg/unathi
name = "unathi egg"
diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm
index 186fdfbee0..7e750ab0d3 100644
--- a/code/modules/vore/eating/bellymodes_vr.dm
+++ b/code/modules/vore/eating/bellymodes_vr.dm
@@ -345,534 +345,262 @@
///////////////////////////// DM_TRANSFORM_HAIR_AND_EYES /////////////////////////////
if(digest_mode == DM_TRANSFORM_HAIR_AND_EYES && ishuman(owner))
for (var/mob/living/carbon/human/P in internal_contents)
- if(P.stat)
+ if(P.stat == DEAD)
continue
var/mob/living/carbon/human/O = owner
- var/TFchance = 1 //This used to be RNG, resulting people waiting ages. This way does it instantly.
- if(TFchance == 1)
- if(P.r_hair != O.r_hair || P.g_hair != O.g_hair || P.b_hair != O.b_hair || P.r_skin != O.r_skin || P.g_skin != O.g_skin || P.b_skin != O.b_skin || P.r_facial != O.r_facial || P.g_facial != O.g_facial || P.b_facial != O.b_facial)
- P.r_hair = O.r_hair
- P.r_facial = O.r_facial
- P.g_hair = O.g_hair
- P.g_facial = O.g_facial
- P.b_hair = O.b_hair
- P.b_facial = O.b_facial
- P.r_skin = O.r_skin
- P.g_skin = O.g_skin
- P.b_skin = O.b_skin
- P.h_style = O.h_style
- P << "Your body tingles all over..."
- owner << "You tingle as you make noticeable changes to your captive's body."
- P.update_hair()
- P.update_body()
- P.updateicon()
-
if(O.nutrition > 400 && P.nutrition < 400)
O.nutrition -= 2
P.nutrition += 1.5
+
+ if(check_eyes(P) || check_hair(P))
+ change_eyes(P)
+ change_hair(P,1)
+
return
///////////////////////////// DM_TRANSFORM_MALE /////////////////////////////
if(digest_mode == DM_TRANSFORM_MALE && ishuman(owner))
for (var/mob/living/carbon/human/P in internal_contents)
- if(P.stat)
+ if(P.stat == DEAD)
continue
var/mob/living/carbon/human/O = owner
- var/TFchance = 1
- if(TFchance == 1)
-
- var/TFmodify = rand(1,3)
- if(TFmodify == 1 && P.r_eyes != O.r_eyes || P.g_eyes != O.g_eyes || P.b_eyes != O.b_eyes)
- P.r_eyes = O.r_eyes
- P.g_eyes = O.g_eyes
- P.b_eyes = O.b_eyes
- P << "You feel lightheaded and drowsy..."
- owner << "You feel warm as you make subtle changes to your captive's body."
- P.update_eyes()
-
- if(TFmodify == 2 && P.r_hair != O.r_hair || P.g_hair != O.g_hair || P.b_hair != O.b_hair || P.r_skin != O.r_skin || P.g_skin != O.g_skin || P.b_skin != O.b_skin || P.r_facial != O.r_facial || P.g_facial != O.g_facial || P.b_facial != O.b_facial)
- P.r_hair = O.r_hair
- P.r_facial = O.r_facial
- P.g_hair = O.g_hair
- P.g_facial = O.g_facial
- P.b_hair = O.b_hair
- P.b_facial = O.b_facial
- P.r_skin = O.r_skin
- P.g_skin = O.g_skin
- P.b_skin = O.b_skin
- P.h_style = O.h_style
- P << "Your body tingles all over..."
- owner << "You tingle as you make noticeable changes to your captive's body."
- P.update_hair()
- P.update_body()
- P.updateicon()
-
- if(TFmodify == 3 && P.gender != MALE && P.identifying_gender != MALE)
- P.gender = MALE
- P.identifying_gender = MALE
- P << "Your body feels very strange..."
- owner << "You feel strange as you alter your captive's gender."
- P.update_body()
- P.updateicon()
-
if(O.nutrition > 400 && P.nutrition < 400)
O.nutrition -= 2
P.nutrition += 1.5
+
+ if(check_eyes(P))
+ change_eyes(P,1)
+ continue
+
+ if(check_hair(P) || check_skin(P))
+ change_hair(P)
+ change_skin(P,1)
+ continue
+
+ if(check_gender(P,MALE))
+ change_gender(P,MALE,1)
+
return
///////////////////////////// DM_TRANSFORM_FEMALE /////////////////////////////
if(digest_mode == DM_TRANSFORM_FEMALE && ishuman(owner))
for (var/mob/living/carbon/human/P in internal_contents)
- if(P.stat)
+ if(P.stat == DEAD)
continue
var/mob/living/carbon/human/O = owner
- var/TFchance = 1
- if(TFchance == 1)
- var/TFmodify = rand(1,3)
- if(TFmodify == 1 && P.r_eyes != O.r_eyes || P.g_eyes != O.g_eyes || P.b_eyes != O.b_eyes)
- P.r_eyes = O.r_eyes
- P.g_eyes = O.g_eyes
- P.b_eyes = O.b_eyes
- P << "You feel lightheaded and drowsy..."
- owner << "You feel warm as your make subtle changes to your captive's body."
- P.update_eyes()
-
- if(TFmodify == 2 && P.r_hair != O.r_hair || P.g_hair != O.g_hair || P.b_hair != O.b_hair || P.r_skin != O.r_skin || P.g_skin != O.g_skin || P.b_skin != O.b_skin)
- P.r_hair = O.r_hair
- P.g_hair = O.g_hair
- P.b_hair = O.b_hair
- P.r_skin = O.r_skin
- P.g_skin = O.g_skin
- P.b_skin = O.b_skin
- P.h_style = O.h_style
- P << "Your body tingles all over..."
- owner << "You tingle as your make noticeable changes to your captive's body."
- P.update_hair()
- P.update_body()
- P.updateicon()
-
- if(TFmodify == 3 && P.gender != FEMALE && P.identifying_gender != FEMALE)
- P.f_style = "Shaved"
- P.gender = FEMALE
- P.identifying_gender = FEMALE
- P << "Your body feels very strange..."
- owner << "You feel strange as you alter your captive's gender."
- P.update_body()
- P.updateicon()
-
if(O.nutrition > 400 && P.nutrition < 400)
O.nutrition -= 2
P.nutrition += 1.5
+
+ if(check_eyes(P))
+ change_eyes(P,1)
+ continue
+
+ if(check_hair(P) || check_skin(P))
+ change_hair(P)
+ change_skin(P,1)
+ continue
+
+ if(check_gender(P,FEMALE))
+ change_gender(P,FEMALE,1)
+
return
///////////////////////////// DM_TRANSFORM_KEEP_GENDER /////////////////////////////
if(digest_mode == DM_TRANSFORM_KEEP_GENDER && ishuman(owner))
for (var/mob/living/carbon/human/P in internal_contents)
- if(P.stat)
+ if(P.stat == DEAD)
continue
var/mob/living/carbon/human/O = owner
- var/TFchance = 1
- if(TFchance == 1)
-
- var/TFmodify = rand(1,2)
- if(TFmodify == 1 && P.r_eyes != O.r_eyes || P.g_eyes != O.g_eyes || P.b_eyes != O.b_eyes)
- P.r_eyes = O.r_eyes
- P.g_eyes = O.g_eyes
- P.b_eyes = O.b_eyes
- P << "You feel lightheaded and drowsy..."
- owner << "You feel warm as you make subtle changes to your captive's body."
- P.update_eyes()
-
- if(TFmodify == 2 && P.r_hair != O.r_hair || P.g_hair != O.g_hair || P.b_hair != O.b_hair || P.r_skin != O.r_skin || P.g_skin != O.g_skin || P.b_skin != O.b_skin || P.r_facial != O.r_facial || P.g_facial != O.g_facial || P.b_facial != O.b_facial)
- P.r_hair = O.r_hair
- P.r_facial = O.r_facial
- P.g_hair = O.g_hair
- P.g_facial = O.g_facial
- P.b_hair = O.b_hair
- P.b_facial = O.b_facial
- P.r_skin = O.r_skin
- P.g_skin = O.g_skin
- P.b_skin = O.b_skin
- P.h_style = O.h_style
- P << "Your body tingles all over..."
- owner << "You tingle as you make noticeable changes to your captive's body."
- P.update_hair()
- P.update_body()
- P.updateicon()
-
if(O.nutrition > 400 && P.nutrition < 400)
O.nutrition -= 2
P.nutrition += 1.5
+
+ if(check_eyes(P))
+ change_eyes(P,1)
+ continue
+
+ if(check_hair(P) || check_skin(P))
+ change_hair(P)
+ change_skin(P,1)
+
return
///////////////////////////// DM_TRANSFORM_CHANGE_SPECIES_AND_TAUR /////////////////////////////
if(digest_mode == DM_TRANSFORM_CHANGE_SPECIES_AND_TAUR && ishuman(owner))
for (var/mob/living/carbon/human/P in internal_contents)
- if(P.stat)
+ if(P.stat == DEAD)
continue
var/mob/living/carbon/human/O = owner
- var/TFchance = 1 //This used to be RNG, resulting people waiting ages. This way does it instantly.
- if(TFchance == 1)
- if(P.species != O.species || P.tail_style != O.tail_style || P.custom_species != O.custom_species || P.ear_style != O.ear_style)
- P.tail_style = O.tail_style
- P.wing_style = O.wing_style
- P.ear_style = O.ear_style
- P.species = O.species
- P.custom_species = O.custom_species
- P.species.create_organs(P) //This is the only way to make it so Unathi TF doesn't result in people dying from organ rejection.
- for(var/obj/item/organ/I in P.organs) //This prevents organ rejection
- I.species = O.species
- for(var/obj/item/organ/I in P.internal_organs) //This prevents organ rejection
- I.species = O.species
- for(var/obj/item/organ/external/Z in P.organs)//Just in case.
- Z.sync_colour_to_human(P)
- P << "You lose sensation of your body, feeling only the warmth of everything around you... "
- owner << "Your body shifts as you make dramatic changes to your captive's body."
- P.fixblood()
- P.update_body()
- P.update_tail_showing()
- P.updateicon()
-
if(O.nutrition > 400 && P.nutrition < 400)
O.nutrition -= 2
P.nutrition += 1.5
+
+ if(check_ears(P) || check_tail_nocolor(P) || check_wing_nocolor(P) || check_species(P))
+ change_ears(P)
+ change_tail_nocolor(P)
+ change_wing_nocolor(P)
+ change_species(P,1)
+
return
///////////////////////////// DM_TRANSFORM_REPLICA /////////////////////////////
if(digest_mode == DM_TRANSFORM_REPLICA && ishuman(owner))
for (var/mob/living/carbon/human/P in internal_contents)
- if(P.stat)
+ if(P.stat == DEAD)
continue
var/mob/living/carbon/human/O = owner
- var/TFchance = 1 //This used to be RNG, resulting people waiting ages. This way does it instantly.
- if(TFchance == 1)
- var/TFmodify = rand(1,3)
- if(TFmodify == 1 && P.r_eyes != O.r_eyes || P.g_eyes != O.g_eyes || P.b_eyes != O.b_eyes)
- P.r_eyes = O.r_eyes
- P.g_eyes = O.g_eyes
- P.b_eyes = O.b_eyes
- P << "You feel lightheaded and drowsy..."
- owner << "You feel warm as you make subtle changes to your captive's body."
- P.update_eyes()
-
- if(TFmodify == 2 && P.r_hair != O.r_hair || P.g_hair != O.g_hair || P.b_hair != O.b_hair || P.r_skin != O.r_skin || P.g_skin != O.g_skin || P.b_skin != O.b_skin || P.r_facial != O.r_facial || P.g_facial != O.g_facial || P.b_facial != O.b_facial)
- P.r_hair = O.r_hair
- P.r_facial = O.r_facial
- P.g_hair = O.g_hair
- P.g_facial = O.g_facial
- P.b_hair = O.b_hair
- P.b_facial = O.b_facial
- P.r_skin = O.r_skin
- P.g_skin = O.g_skin
- P.b_skin = O.b_skin
- P.h_style = O.h_style
- P << "Your body tingles all over..."
- owner << "You tingle as you make noticeable changes to your captive's body."
- P.update_hair()
- P.update_body()
- P.updateicon()
-
- if(TFmodify == 3 && P.r_hair != O.r_hair || P.g_hair != O.g_hair || P.species != O.species || P.b_hair != O.b_hair || P.r_skin != O.r_skin || P.g_skin != O.g_skin || P.b_skin != O.b_skin || P.tail_style != O.tail_style || P.r_tail != O.r_tail || P.g_tail != O.g_tail || P.b_tail != O.b_tail || P.ear_style != O.ear_style || P.r_facial != O.r_facial || P.g_facial != O.g_facial || P.b_facial != O.b_facial || P.custom_species != O.custom_species)
- P.r_hair = O.r_hair
- P.r_facial = O.r_facial
- P.g_hair = O.g_hair
- P.g_facial = O.g_facial
- P.b_hair = O.b_hair
- P.b_facial = O.b_facial
- P.r_skin = O.r_skin
- P.g_skin = O.g_skin
- P.b_skin = O.b_skin
- P.tail_style = O.tail_style
- P.wing_style = O.wing_style
- P.r_tail = O.r_tail
- P.g_tail = O.g_tail
- P.b_tail = O.b_tail
- P.ear_style = O.ear_style
- P.species = O.species
- P.custom_species = O.custom_species
- P.species.create_organs(P)
- for(var/obj/item/organ/I in P.organs)
- I.species = O.species
- for(var/obj/item/organ/I in P.internal_organs)
- I.species = O.species
- for(var/obj/item/organ/external/Z in P.organs)
- Z.sync_colour_to_human(P)
- P << "You lose sensation of your body, feeling only the warmth of everything around you... "
- owner << "Your body shifts as you make dramatic changes to your captive's body."
- P.fixblood()
- P.update_hair()
- P.update_body()
- P.update_tail_showing()
- P.updateicon()
-
if(O.nutrition > 400 && P.nutrition < 400)
O.nutrition -= 2
P.nutrition += 1.5
+
+ if(check_eyes(P))
+ change_eyes(P,1)
+ continue
+
+ if(check_hair(P) || check_skin(P))
+ change_hair(P)
+ change_skin(P,1)
+ continue
+
+ if(check_ears(P) || check_tail(P) || check_wing(P) || check_species(P))
+ change_ears(P)
+ change_tail(P)
+ change_wing(P)
+ change_species(P,1)
+
return
///////////////////////////// DM_TRANSFORM_CHANGE_SPECIES_AND_TAUR_EGG /////////////////////////////
if(digest_mode == DM_TRANSFORM_CHANGE_SPECIES_AND_TAUR_EGG && ishuman(owner))
for (var/mob/living/carbon/human/P in internal_contents)
- if(P.stat)
+ if(P.stat == DEAD)
continue
- if(P.absorbed) //If they're absorbed, don't egg them
- return
- var/mob/living/carbon/human/O = owner
+ if(check_ears(P) || check_tail_nocolor(P) || check_wing_nocolor(P)|| check_species(P))
+ change_ears(P)
+ change_tail_nocolor(P)
+ change_wing_nocolor(P)
+ change_species(P,1)
+ continue
- P.tail_style = O.tail_style
- P.wing_style = O.wing_style
- P.ear_style = O.ear_style
- P.species = O.species
- P.custom_species = O.custom_species
- P.species.create_organs(P)
- for(var/obj/item/organ/I in P.organs)
- I.species = O.species
- for(var/obj/item/organ/I in P.internal_organs)
- I.species = O.species
- for(var/obj/item/organ/external/Z in P.organs)
- Z.sync_colour_to_human(P)
- P << "You lose sensation of your body, feeling only the warmth around you as are you as you're encased in an egg. "
- owner << "You shift as you make dramatic changes to your captive's body as you encase them in an egg."
- P.fixblood()
- P.update_hair()
- P.update_body()
- P.update_tail_showing()
- P.update_eyes()
- P.updateicon()
- var/egg_path = /obj/structure/closet/secure_closet/egg //Full credit to Aronai for this version of the egg code.
- var/egg_name = "Odd egg"
+ if(!P.absorbed)
+ put_in_egg(P,1)
- if(O.egg_type in tf_egg_types)
- egg_path = tf_egg_types[O.egg_type]
- egg_name = "[O.egg_type] egg"
-
- var/obj/structure/closet/secure_closet/egg/egg = new egg_path(get_turf(O))
- P.forceMove(egg)
- egg.name = egg_name
- internal_contents -= P
return
///////////////////////////// DM_TRANSFORM_KEEP_GENDER_EGG /////////////////////////////
if(digest_mode == DM_TRANSFORM_KEEP_GENDER_EGG && ishuman(owner))
for (var/mob/living/carbon/human/P in internal_contents)
- if(P.stat)
+ if(P.stat == DEAD)
continue
- if(P.absorbed) //If they're absorbed, don't egg them
- return
- var/mob/living/carbon/human/O = owner
+ if(check_eyes(P))
+ change_eyes(P,1)
+ continue
- P.r_hair = O.r_hair
- P.r_facial = O.r_facial
- P.g_hair = O.g_hair
- P.g_facial = O.g_facial
- P.b_hair = O.b_hair
- P.b_facial = O.b_facial
- P.r_skin = O.r_skin
- P.g_skin = O.g_skin
- P.b_skin = O.b_skin
- P.h_style = O.h_style
- P.r_eyes = O.r_eyes
- P.g_eyes = O.g_eyes
- P.b_eyes = O.b_eyes
- P << "Your body tingles all over..."
- owner << "You tingle as you make noticeable changes to your captive's body."
- P.update_hair()
- P.update_body()
- P.update_eyes()
- P.updateicon()
- var/egg_path = /obj/structure/closet/secure_closet/egg
- var/egg_name = "Odd egg"
+ if(check_hair(P) || check_skin(P))
+ change_hair(P)
+ change_skin(P,1)
+ continue
- if(O.egg_type in tf_egg_types)
- egg_path = tf_egg_types[O.egg_type]
- egg_name = "[O.egg_type] egg"
+ if(!P.absorbed)
+ put_in_egg(P,1)
- var/obj/structure/closet/secure_closet/egg/egg = new egg_path(get_turf(O))
- P.forceMove(egg)
- egg.name = egg_name
- internal_contents -= P
return
///////////////////////////// DM_TRANSFORM_REPLICA_EGG /////////////////////////////
if(digest_mode == DM_TRANSFORM_REPLICA_EGG && ishuman(owner))
for (var/mob/living/carbon/human/P in internal_contents)
- if(P.stat)
+ if(P.stat == DEAD)
continue
- if(P.absorbed) //If they're absorbed, don't egg them
- return
- var/mob/living/carbon/human/O = owner
+ if(check_eyes(P))
+ change_eyes(P,1)
+ continue
- P.r_hair = O.r_hair
- P.r_facial = O.r_facial
- P.g_hair = O.g_hair
- P.g_facial = O.g_facial
- P.b_hair = O.b_hair
- P.b_facial = O.b_facial
- P.r_skin = O.r_skin
- P.g_skin = O.g_skin
- P.b_skin = O.b_skin
- P.tail_style = O.tail_style
- P.wing_style = O.wing_style
- P.r_tail = O.r_tail
- P.g_tail = O.g_tail
- P.b_tail = O.b_tail
- P.ear_style = O.ear_style
- P.h_style = O.h_style
- P.species = O.species
- P.custom_species = O.custom_species
- P.r_eyes = O.r_eyes
- P.g_eyes = O.g_eyes
- P.b_eyes = O.b_eyes
+ if(check_hair(P) || check_skin(P))
+ change_hair(P)
+ change_skin(P,1)
+ continue
- P.species.create_organs(P)
- for(var/obj/item/organ/I in P.organs)
- I.species = O.species
- for(var/obj/item/organ/I in P.internal_organs)
- I.species = O.species
- for(var/obj/item/organ/external/Z in P.organs)
- Z.sync_colour_to_human(P)
- P << "You lose sensation of your body, feeling only the warmth around you as are you as you're encased in an egg. "
- owner << "You shift as you make dramatic changes to your captive's body as you encase them in an egg."
- P.fixblood()
- P.update_hair()
- P.update_body()
- P.update_tail_showing()
- P.update_eyes()
- P.updateicon()
- var/egg_path = /obj/structure/closet/secure_closet/egg
- var/egg_name = "Odd egg"
+ if(check_ears(P) || check_tail(P) || check_wing(P) || check_species(P))
+ change_ears(P)
+ change_tail(P)
+ change_wing(P)
+ change_species(P,1)
+ continue
- if(O.egg_type in tf_egg_types)
- egg_path = tf_egg_types[O.egg_type]
- egg_name = "[O.egg_type] egg"
+ if(!P.absorbed)
+ put_in_egg(P,1)
- var/obj/structure/closet/secure_closet/egg/egg = new egg_path(get_turf(O))
- P.forceMove(egg)
- egg.name = egg_name
- internal_contents -= P
return
///////////////////////////// DM_TRANSFORM_MALE_EGG /////////////////////////////
if(digest_mode == DM_TRANSFORM_MALE_EGG && ishuman(owner))
for (var/mob/living/carbon/human/P in internal_contents)
- if(P.stat)
+ if(P.stat == DEAD)
continue
- if(P.absorbed) //If they're absorbed, don't egg them
- return
- var/mob/living/carbon/human/O = owner
+ if(check_eyes(P))
+ change_eyes(P,1)
+ continue
- P.r_hair = O.r_hair
- P.r_facial = O.r_facial
- P.g_hair = O.g_hair
- P.g_facial = O.g_facial
- P.b_hair = O.b_hair
- P.b_facial = O.b_facial
- P.r_skin = O.r_skin
- P.g_skin = O.g_skin
- P.b_skin = O.b_skin
- P.h_style = O.h_style
- P.gender = MALE
- P.identifying_gender= MALE
- P.r_eyes = O.r_eyes
- P.g_eyes = O.g_eyes
- P.b_eyes = O.b_eyes
- P << "Your body feels very strange..."
- owner << "You feel strange as you alter your captive's gender."
- P.update_hair()
- P.update_body()
- P.updateicon()
- var/egg_path = /obj/structure/closet/secure_closet/egg
- var/egg_name = "Odd egg"
+ if(check_hair(P) || check_skin(P))
+ change_hair(P)
+ change_skin(P,1)
+ continue
- if(O.egg_type in tf_egg_types)
- egg_path = tf_egg_types[O.egg_type]
- egg_name = "[O.egg_type] egg"
+ if(check_gender(P,MALE))
+ change_gender(P,MALE,1)
+ continue
+
+ if(!P.absorbed)
+ put_in_egg(P,1)
- var/obj/structure/closet/secure_closet/egg/egg = new egg_path(get_turf(O))
- P.forceMove(egg)
- egg.name = egg_name
- internal_contents -= P
return
///////////////////////////// DM_TRANSFORM_FEMALE_EGG /////////////////////////////
if(digest_mode == DM_TRANSFORM_FEMALE_EGG && ishuman(owner))
for (var/mob/living/carbon/human/P in internal_contents)
- if(P.stat)
+ if(P.stat == DEAD)
continue
- if(P.absorbed) //If they're absorbed, don't egg them
- return
- var/mob/living/carbon/human/O = owner
+ if(check_eyes(P))
+ change_eyes(P,1)
+ continue
- P.r_hair = O.r_hair
- P.r_facial = O.r_facial
- P.g_hair = O.g_hair
- P.g_facial = O.g_facial
- P.b_hair = O.b_hair
- P.b_facial = O.b_facial
- P.r_skin = O.r_skin
- P.g_skin = O.g_skin
- P.b_skin = O.b_skin
- P.h_style = O.h_style
- P.gender = FEMALE
- P.identifying_gender= FEMALE
- P.r_eyes = O.r_eyes
- P.g_eyes = O.g_eyes
- P.b_eyes = O.b_eyes
- owner << "You feel strange as you alter your captive's gender."
- P << "Your body feels very strange..."
- P.update_hair()
- P.update_body()
- P.updateicon()
- var/egg_path = /obj/structure/closet/secure_closet/egg
- var/egg_name = "Odd egg"
+ if(check_hair(P) || check_skin(P))
+ change_hair(P)
+ change_skin(P,1)
+ continue
- if(O.egg_type in tf_egg_types)
- egg_path = tf_egg_types[O.egg_type]
- egg_name = "[O.egg_type] egg"
+ if(check_gender(P,MALE))
+ change_gender(P,MALE,1)
+ continue
+
+ if(!P.absorbed)
+ put_in_egg(P,1)
- var/obj/structure/closet/secure_closet/egg/egg = new egg_path(get_turf(O))
- P.forceMove(egg)
- egg.name = egg_name
- internal_contents -= P
return
///////////////////////////// DM_EGG /////////////////////////////
if(digest_mode == DM_EGG && ishuman(owner))
for (var/mob/living/carbon/human/P in internal_contents)
- if(P.stat)
+ if(P.absorbed || P.stat == DEAD)
continue
- if(P.absorbed) //If they're absorbed, don't egg them
- return
- var/mob/living/carbon/human/O = owner
- P << "You lose sensation of your body, feeling only the warmth around you as you're encased in an egg. "
- owner << "Your body shifts as you encase [P] in an egg."
- var/egg_path = /obj/structure/closet/secure_closet/egg
- var/egg_name = "Odd egg"
-
- if(O.egg_type in tf_egg_types)
- egg_path = tf_egg_types[O.egg_type]
- egg_name = "[O.egg_type] egg"
-
- var/obj/structure/closet/secure_closet/egg/egg = new egg_path(get_turf(O))
- P.forceMove(egg)
- egg.name = egg_name
- internal_contents -= P
+ put_in_egg(P,1)
\ No newline at end of file
diff --git a/code/modules/vore/eating/transforming_vr.dm b/code/modules/vore/eating/transforming_vr.dm
new file mode 100644
index 0000000000..a7264468ee
--- /dev/null
+++ b/code/modules/vore/eating/transforming_vr.dm
@@ -0,0 +1,250 @@
+/datum/belly/proc/check_eyes(var/mob/living/carbon/human/M)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return 0
+ return (M.r_eyes != O.r_eyes || M.g_eyes != O.g_eyes || M.b_eyes != O.b_eyes)
+
+/datum/belly/proc/change_eyes(var/mob/living/carbon/human/M, message=0)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return
+
+ M.r_eyes = O.r_eyes
+ M.g_eyes = O.g_eyes
+ M.b_eyes = O.b_eyes
+ M.update_eyes()
+ M.update_body()
+ if(message)
+ to_chat(M, "You feel lightheaded and drowsy...")
+ to_chat(O, "You feel warm as you make subtle changes to your captive's body.")
+
+/datum/belly/proc/check_hair(var/mob/living/carbon/human/M)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return 0
+
+ if(M.r_hair != O.r_hair || M.g_hair != O.g_hair || M.b_hair != O.b_hair)
+ return 1
+ if(M.r_facial != O.r_facial || M.g_facial != O.g_facial || M.b_facial != O.b_facial)
+ return 1
+ if(M.h_style != O.h_style || M.f_style != O.f_style)
+ return 1
+ return 0
+
+/datum/belly/proc/change_hair(var/mob/living/carbon/human/M, message=0)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return
+
+ M.r_hair = O.r_hair
+ M.g_hair = O.g_hair
+ M.b_hair = O.b_hair
+ M.r_facial = O.r_facial
+ M.g_facial = O.g_facial
+ M.b_facial = O.b_facial
+ M.h_style = O.h_style
+ M.f_style = O.f_style
+ M.update_hair()
+ if(message)
+ to_chat(M, "Your body tingles all over...")
+ to_chat(O, "You tingle as you make noticeable changes to your captive's body.")
+
+/datum/belly/proc/check_skin(var/mob/living/carbon/human/M)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return 0
+
+ return (M.r_skin != O.r_skin || M.g_skin != O.g_skin || M.b_skin != O.b_skin)
+
+/datum/belly/proc/change_skin(var/mob/living/carbon/human/M, message=0)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return
+
+ M.r_skin = O.r_skin
+ M.g_skin = O.g_skin
+ M.b_skin = O.b_skin
+ for(var/obj/item/organ/external/Z in M.organs)
+ Z.sync_colour_to_human(M)
+ M.update_body()
+ if(message)
+ to_chat(M, "Your body tingles all over...")
+ to_chat(O, "You tingle as you make noticeable changes to your captive's body.")
+
+/datum/belly/proc/check_gender(var/mob/living/carbon/human/M, target_gender)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return 0
+
+ if(!target_gender)
+ target_gender = O.gender
+
+ return (M.gender != target_gender || M.identifying_gender != target_gender)
+
+/datum/belly/proc/change_gender(var/mob/living/carbon/human/M, target_gender, message=0)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return
+
+ if(!target_gender)
+ target_gender = O.gender
+
+ M.gender = target_gender
+ M.identifying_gender = target_gender
+ if(target_gender == FEMALE)
+ M.f_style = "Shaved"
+ M.dna.SetUIState(DNA_UI_GENDER,M.gender!=MALE,1)
+ M.sync_organ_dna()
+ M.update_body()
+ if(message)
+ to_chat(M, "Your body feels very strange...")
+ to_chat(O, "You feel strange as you alter your captive's gender.")
+
+/datum/belly/proc/check_tail(var/mob/living/carbon/human/M)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return 0
+
+ if(M.tail_style != O.tail_style)
+ return 1
+ if(M.r_tail != O.r_tail || M.g_tail != O.g_tail || M.b_tail != O.b_tail)
+ return 1
+ return 0
+
+/datum/belly/proc/change_tail(var/mob/living/carbon/human/M, message=0)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return
+
+ M.r_tail = O.r_tail
+ M.g_tail = O.g_tail
+ M.b_tail = O.b_tail
+ M.tail_style = O.tail_style
+ M.update_tail_showing()
+ if(message)
+ to_chat(M, "Your body tingles all over...")
+ to_chat(O, "You tingle as you make noticeable changes to your captive's body.")
+
+/datum/belly/proc/check_tail_nocolor(var/mob/living/carbon/human/M)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return 0
+
+ return (M.tail_style != O.tail_style)
+
+/datum/belly/proc/change_tail_nocolor(var/mob/living/carbon/human/M, message=0)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return
+
+ M.tail_style = O.tail_style
+ M.update_tail_showing()
+ if(message)
+ to_chat(M, "Your body tingles all over...")
+ to_chat(O, "You tingle as you make noticeable changes to your captive's body.")
+
+/datum/belly/proc/check_wing(var/mob/living/carbon/human/M)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return 0
+
+ if(M.wing_style != O.wing_style)
+ return 1
+ if(M.r_wing != O.r_wing || M.g_wing != O.g_wing || M.b_wing != O.b_wing)
+ return 1
+ return 0
+
+/datum/belly/proc/change_wing(var/mob/living/carbon/human/M, message=0)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return
+
+ M.r_wing = O.r_wing
+ M.g_wing = O.g_wing
+ M.b_wing = O.b_wing
+ M.wing_style = O.wing_style
+ M.update_wing_showing()
+ if(message)
+ to_chat(M, "Your body tingles all over...")
+ to_chat(O, "You tingle as you make noticeable changes to your captive's body.")
+
+/datum/belly/proc/check_wing_nocolor(var/mob/living/carbon/human/M)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return 0
+
+ return (M.wing_style != O.wing_style)
+
+/datum/belly/proc/change_wing_nocolor(var/mob/living/carbon/human/M, message=0)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return
+
+ M.wing_style = O.wing_style
+ M.update_wing_showing()
+ if(message)
+ to_chat(M, "Your body tingles all over...")
+ to_chat(O, "You tingle as you make noticeable changes to your captive's body.")
+
+/datum/belly/proc/check_ears(var/mob/living/carbon/human/M)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return 0
+
+ return (M.ear_style != O.ear_style)
+
+/datum/belly/proc/change_ears(var/mob/living/carbon/human/M, message=0)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return
+
+ M.ear_style = O.ear_style
+ M.update_hair()
+
+/datum/belly/proc/check_species(var/mob/living/carbon/human/M)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return 0
+
+ if(M.species != O.species || M.custom_species != O.custom_species)
+ return 1
+ return 0
+
+/datum/belly/proc/change_species(var/mob/living/carbon/human/M, message=0)
+ var/mob/living/carbon/human/O = owner
+ if(!istype(M) || !istype(O))
+ return
+
+ M.species = O.species
+ M.custom_species = O.custom_species
+ M.species.create_organs(M) //This is the only way to make it so Unathi TF doesn't result in people dying from organ rejection.
+ for(var/obj/item/organ/I in M.organs) //This prevents organ rejection
+ I.species = O.species
+ for(var/obj/item/organ/I in M.internal_organs) //This prevents organ rejection
+ I.species = O.species
+ for(var/obj/item/organ/external/Z in M.organs)//Just in case.
+ Z.sync_colour_to_human(M)
+ M.fixblood()
+ M.update_body()
+ M.update_tail_showing()
+ if(message)
+ to_chat(M, "You lose sensation of your body, feeling only the warmth of everything around you... ")
+ to_chat(O, "Your body shifts as you make dramatic changes to your captive's body.")
+
+/datum/belly/proc/put_in_egg(var/atom/movable/M, message=0)
+ var/mob/living/carbon/human/O = owner
+ var/egg_path = /obj/structure/closet/secure_closet/egg
+ var/egg_name = "odd egg"
+
+ if(O.egg_type in tf_egg_types)
+ egg_path = tf_egg_types[O.egg_type]
+ egg_name = "[O.egg_type] egg"
+
+ var/obj/structure/closet/secure_closet/egg/egg = new egg_path(owner)
+ M.forceMove(egg)
+ egg.name = egg_name
+ internal_contents -= M
+ internal_contents += egg
+ if(message)
+ to_chat(M, "You lose sensation of your body, feeling only the warmth around you as you're encased in an egg.")
+ to_chat(O, "Your body shifts as you encase [M] in an egg.")
\ No newline at end of file
diff --git a/vorestation.dme b/vorestation.dme
index 18aeceed9f..b0ac82c068 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -2444,6 +2444,7 @@
#include "code\modules\vore\eating\living_vr.dm"
#include "code\modules\vore\eating\silicon_vr.dm"
#include "code\modules\vore\eating\simple_animal_vr.dm"
+#include "code\modules\vore\eating\transforming_vr.dm"
#include "code\modules\vore\eating\vore_vr.dm"
#include "code\modules\vore\eating\vorehooks_vr.dm"
#include "code\modules\vore\eating\vorepanel_vr.dm"