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"